aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2016-04-13 00:18:43 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2016-04-13 00:18:43 +0000
commitc2e6d4d297c6964f960822f58e56a6d80ca71307 (patch)
tree28a9c3f2597188d84f187d5dd61f59b16d9a9a40
parent37d050fced2191960c97e54af0910b9c63148b61 (diff)
parentd90936ff88545c9312a0137725a9b1ab0919ad48 (diff)
downloadgcc-c2e6d4d297c6964f960822f58e56a6d80ca71307.zip
gcc-c2e6d4d297c6964f960822f58e56a6d80ca71307.tar.gz
gcc-c2e6d4d297c6964f960822f58e56a6d80ca71307.tar.bz2
Merge from trunk revision 234923.
From-SVN: r234930
-rw-r--r--ChangeLog51
-rw-r--r--MAINTAINERS9
-rw-r--r--boehm-gc/ChangeLog11
-rw-r--r--boehm-gc/configure.host2
-rw-r--r--boehm-gc/include/private/gcconfig.h11
-rwxr-xr-xconfigure2
-rw-r--r--configure.ac2
-rw-r--r--contrib/ChangeLog17
-rwxr-xr-xcontrib/check_GNU_style.sh38
-rw-r--r--contrib/config-list.mk5
-rwxr-xr-xcontrib/mklog2
-rw-r--r--gcc/ChangeLog2886
-rw-r--r--gcc/ChangeLog-2015115
-rw-r--r--gcc/DATESTAMP2
-rw-r--r--gcc/ada/ChangeLog94
-rw-r--r--gcc/ada/gcc-interface/Makefile.in31
-rw-r--r--gcc/ada/gcc-interface/ada-tree.h4
-rw-r--r--gcc/ada/gcc-interface/decl.c173
-rw-r--r--gcc/ada/gcc-interface/gigi.h14
-rw-r--r--gcc/ada/gcc-interface/trans.c171
-rw-r--r--gcc/ada/gcc-interface/utils.c28
-rw-r--r--gcc/ada/gcc-interface/utils2.c7
-rw-r--r--gcc/ada/s-osinte-gnu.ads801
-rw-r--r--gcc/ada/system-linux-s390.ads2
-rw-r--r--gcc/ada/system-linux-s390x.ads2
-rw-r--r--gcc/ada/system-vxworks-m68k.ads6
-rw-r--r--gcc/ada/system-vxworks-mips.ads6
-rw-r--r--gcc/ada/system-vxworks-ppc.ads6
-rw-r--r--gcc/ada/system-vxworks-sparcv9.ads6
-rw-r--r--gcc/ada/system-vxworks-x86.ads6
-rw-r--r--gcc/alias.c14
-rw-r--r--gcc/alloc-pool.c1
-rw-r--r--gcc/alloc-pool.h25
-rw-r--r--gcc/asan.c28
-rw-r--r--gcc/bitmap.c86
-rw-r--r--gcc/bitmap.h18
-rw-r--r--gcc/builtins.c102
-rw-r--r--gcc/c-family/ChangeLog102
-rw-r--r--gcc/c-family/c-common.c37
-rw-r--r--gcc/c-family/c-cppbuiltin.c8
-rw-r--r--gcc/c-family/c-indentation.c167
-rw-r--r--gcc/c-family/c-opts.c12
-rw-r--r--gcc/c-family/c-pragma.c9
-rw-r--r--gcc/c-family/c.opt10
-rw-r--r--gcc/c/ChangeLog66
-rw-r--r--gcc/c/c-decl.c46
-rw-r--r--gcc/c/c-fold.c20
-rw-r--r--gcc/c/c-parser.c58
-rw-r--r--gcc/c/c-typeck.c18
-rw-r--r--gcc/calls.c10
-rw-r--r--gcc/cfgexpand.c20
-rw-r--r--gcc/cfghooks.c15
-rw-r--r--gcc/cfgloop.h32
-rw-r--r--gcc/cgraph.c10
-rw-r--r--gcc/cgraph.h13
-rw-r--r--gcc/cgraphclones.c8
-rw-r--r--gcc/cgraphunit.c14
-rw-r--r--gcc/combine.c19
-rw-r--r--gcc/common.opt16
-rw-r--r--gcc/common/config/aarch64/aarch64-common.c118
-rw-r--r--gcc/config.gcc33
-rw-r--r--gcc/config/aarch64/aarch64-c.c5
-rw-r--r--gcc/config/aarch64/aarch64-elf-raw.h2
-rw-r--r--gcc/config/aarch64/aarch64-linux.h2
-rw-r--r--gcc/config/aarch64/aarch64-option-extensions.def36
-rw-r--r--gcc/config/aarch64/aarch64-protos.h35
-rw-r--r--gcc/config/aarch64/aarch64-simd.md2
-rw-r--r--gcc/config/aarch64/aarch64-tuning-flags.def2
-rw-r--r--gcc/config/aarch64/aarch64.c365
-rw-r--r--gcc/config/aarch64/aarch64.h18
-rw-r--r--gcc/config/aarch64/aarch64.opt6
-rw-r--r--gcc/config/aarch64/driver-aarch64.c192
-rw-r--r--gcc/config/aarch64/predicates.md2
-rw-r--r--gcc/config/aarch64/rtems.h28
-rw-r--r--gcc/config/aarch64/t-aarch645
-rw-r--r--gcc/config/arc/arc.h3
-rw-r--r--gcc/config/arm/arm-c.c13
-rw-r--r--gcc/config/arm/arm-cores.def2
-rw-r--r--gcc/config/arm/arm-tables.opt6
-rw-r--r--gcc/config/arm/arm-tune.md11
-rw-r--r--gcc/config/arm/arm.c69
-rw-r--r--gcc/config/arm/arm.h7
-rw-r--r--gcc/config/arm/arm.md4
-rw-r--r--gcc/config/arm/arm1020e.md11
-rw-r--r--gcc/config/arm/arm_neon.h5
-rw-r--r--gcc/config/arm/bpabi.h1
-rw-r--r--gcc/config/arm/driver-arm.c11
-rw-r--r--gcc/config/arm/exynos-m1.md26
-rw-r--r--gcc/config/arm/linux-elf.h11
-rw-r--r--gcc/config/arm/sync.md64
-rw-r--r--gcc/config/arm/t-aprofile1
-rw-r--r--gcc/config/arm/thumb2.md6
-rw-r--r--gcc/config/arm/unspecs.md1
-rw-r--r--gcc/config/arm/vxworks.h7
-rw-r--r--gcc/config/avr/avr.md2
-rw-r--r--gcc/config/c6x/t-c6x2
-rw-r--r--gcc/config/darwin.h2
-rw-r--r--gcc/config/epiphany/epiphany.md4
-rw-r--r--gcc/config/ft32/ft32.md8
-rw-r--r--gcc/config/ft32/ft32.opt4
-rw-r--r--gcc/config/gnu-user.h20
-rw-r--r--gcc/config/gnu.h8
-rw-r--r--gcc/config/i386/cygming.h5
-rw-r--r--gcc/config/i386/gnu.h4
-rw-r--r--gcc/config/i386/i386-c.c2
-rw-r--r--gcc/config/i386/i386-protos.h1
-rw-r--r--gcc/config/i386/i386.c290
-rw-r--r--gcc/config/i386/i386.h10
-rw-r--r--gcc/config/i386/i386.md183
-rw-r--r--gcc/config/i386/mingw32.h2
-rw-r--r--gcc/config/i386/rtems-64.h30
-rw-r--r--gcc/config/i386/sol2.h10
-rw-r--r--gcc/config/i386/sse.md286
-rw-r--r--gcc/config/i386/vxworks.h7
-rw-r--r--gcc/config/i386/znver1.md108
-rw-r--r--gcc/config/ia64/hpux.h2
-rw-r--r--gcc/config/m68k/m68k.md6
-rw-r--r--gcc/config/m68k/t-opts3
-rw-r--r--gcc/config/moxie/moxiebox.h6
-rw-r--r--gcc/config/nvptx/nvptx.c23
-rw-r--r--gcc/config/pa/constraints.md4
-rw-r--r--gcc/config/pa/pa-hpux11.h2
-rw-r--r--gcc/config/pa/pa.md5
-rw-r--r--gcc/config/pa/pa64-hpux.h12
-rw-r--r--gcc/config/pa/predicates.md6
-rw-r--r--gcc/config/rs6000/constraints.md2
-rw-r--r--gcc/config/rs6000/predicates.md20
-rw-r--r--gcc/config/rs6000/rs6000-c.c16
-rw-r--r--gcc/config/rs6000/rs6000-cpus.def1
-rw-r--r--gcc/config/rs6000/rs6000.c17
-rw-r--r--gcc/config/rs6000/rs6000.md108
-rw-r--r--gcc/config/rs6000/vxworks.h7
-rw-r--r--gcc/config/rs6000/vxworksae.h5
-rw-r--r--gcc/config/rx/rx.c2
-rw-r--r--gcc/config/s390/2827.md9
-rw-r--r--gcc/config/s390/2964.md232
-rw-r--r--gcc/config/s390/constraints.md14
-rw-r--r--gcc/config/s390/predicates.md8
-rw-r--r--gcc/config/s390/s390-protos.h4
-rw-r--r--gcc/config/s390/s390.c436
-rw-r--r--gcc/config/s390/s390.md630
-rw-r--r--gcc/config/s390/subst.md122
-rw-r--r--gcc/config/s390/vecintrin.h1
-rw-r--r--gcc/config/s390/vector.md185
-rw-r--r--gcc/config/s390/vx-builtins.md60
-rw-r--r--gcc/config/sh/sh.c6
-rw-r--r--gcc/config/sh/sh.md39
-rw-r--r--gcc/config/sol2.c5
-rw-r--r--gcc/config/sparc/sparc.c681
-rw-r--r--gcc/config/sparc/vxworks.h7
-rw-r--r--gcc/coverage.c6
-rw-r--r--gcc/cp/ChangeLog633
-rw-r--r--gcc/cp/Make-lang.in4
-rw-r--r--gcc/cp/call.c47
-rw-r--r--gcc/cp/cfns.gperf10
-rw-r--r--gcc/cp/cfns.h41
-rw-r--r--gcc/cp/class.c115
-rw-r--r--gcc/cp/constexpr.c471
-rw-r--r--gcc/cp/cp-gimplify.c82
-rw-r--r--gcc/cp/cp-tree.h72
-rw-r--r--gcc/cp/cp-ubsan.c76
-rw-r--r--gcc/cp/decl.c205
-rw-r--r--gcc/cp/decl2.c8
-rw-r--r--gcc/cp/except.c3
-rw-r--r--gcc/cp/friend.c12
-rw-r--r--gcc/cp/init.c46
-rw-r--r--gcc/cp/lambda.c30
-rw-r--r--gcc/cp/mangle.c52
-rw-r--r--gcc/cp/method.c22
-rw-r--r--gcc/cp/parser.c108
-rw-r--r--gcc/cp/pt.c143
-rw-r--r--gcc/cp/rtti.c13
-rw-r--r--gcc/cp/search.c4
-rw-r--r--gcc/cp/semantics.c52
-rw-r--r--gcc/cp/tree.c49
-rw-r--r--gcc/cp/typeck.c106
-rw-r--r--gcc/cp/typeck2.c21
-rw-r--r--gcc/df-problems.c5
-rw-r--r--gcc/diagnostic-show-locus.c134
-rw-r--r--gcc/diagnostic.c14
-rw-r--r--gcc/diagnostic.h2
-rw-r--r--gcc/doc/extend.texi211
-rw-r--r--gcc/doc/install.texi4
-rw-r--r--gcc/doc/invoke.texi116
-rw-r--r--gcc/doc/md.texi4
-rw-r--r--gcc/doc/sourcebuild.texi3
-rw-r--r--gcc/doc/tm.texi2
-rw-r--r--gcc/dse.c390
-rw-r--r--gcc/dwarf2out.c63
-rw-r--r--gcc/dwarf2out.h2
-rw-r--r--gcc/explow.c2
-rw-r--r--gcc/expmed.c12
-rw-r--r--gcc/expr.c25
-rw-r--r--gcc/fold-const.c145
-rw-r--r--gcc/fortran/ChangeLog147
-rw-r--r--gcc/fortran/array.c24
-rw-r--r--gcc/fortran/decl.c102
-rw-r--r--gcc/fortran/dump-parse-tree.c12
-rw-r--r--gcc/fortran/frontend-passes.c3
-rw-r--r--gcc/fortran/gfortran.h2
-rw-r--r--gcc/fortran/invoke.texi10
-rw-r--r--gcc/fortran/io.c17
-rw-r--r--gcc/fortran/match.c6
-rw-r--r--gcc/fortran/openmp.c38
-rw-r--r--gcc/fortran/options.c9
-rw-r--r--gcc/fortran/resolve.c12
-rw-r--r--gcc/fortran/scanner.c14
-rw-r--r--gcc/fortran/simplify.c3
-rw-r--r--gcc/fortran/trans-array.c31
-rw-r--r--gcc/fortran/trans-decl.c269
-rw-r--r--gcc/fortran/trans-expr.c26
-rw-r--r--gcc/fortran/trans-openmp.c6
-rw-r--r--gcc/fortran/trans-stmt.c12
-rw-r--r--gcc/fortran/trans-types.c3
-rw-r--r--gcc/fortran/trans.c2
-rw-r--r--gcc/fortran/trans.h3
-rw-r--r--gcc/function.h4
-rw-r--r--gcc/fwprop.c32
-rw-r--r--gcc/gcc-rich-location.c28
-rw-r--r--gcc/gcc.c32
-rw-r--r--gcc/gcse.c46
-rw-r--r--gcc/gdbhooks.py161
-rw-r--r--gcc/genmatch.c74
-rw-r--r--gcc/genrecog.c2
-rw-r--r--gcc/gimple-expr.c4
-rw-r--r--gcc/gimple-expr.h10
-rw-r--r--gcc/gimple-match-head.c1
-rw-r--r--gcc/gimple-ssa-split-paths.c18
-rw-r--r--gcc/gimple.c4
-rw-r--r--gcc/gimplify-me.c3
-rw-r--r--gcc/gimplify.c276
-rw-r--r--gcc/go/gofrontend/MERGE2
-rw-r--r--gcc/graph.c32
-rw-r--r--gcc/graphite-isl-ast-to-gimple.c9
-rw-r--r--gcc/graphite-scop-detection.c10
-rw-r--r--gcc/graphite-sese-to-poly.c2
-rw-r--r--gcc/hsa-brig.c160
-rw-r--r--gcc/hsa-dump.c20
-rw-r--r--gcc/hsa-gen.c706
-rw-r--r--gcc/hsa-regalloc.c16
-rw-r--r--gcc/hsa.c61
-rw-r--r--gcc/hsa.h51
-rw-r--r--gcc/ipa-chkp.c20
-rw-r--r--gcc/ipa-devirt.c61
-rw-r--r--gcc/ipa-icf.c15
-rw-r--r--gcc/ipa-inline-transform.c15
-rw-r--r--gcc/ipa-inline.c32
-rw-r--r--gcc/ipa-polymorphic-call.c43
-rw-r--r--gcc/ipa-prop.c4
-rw-r--r--gcc/ipa-reference.c2
-rw-r--r--gcc/ipa-visibility.c82
-rw-r--r--gcc/ipa.c49
-rw-r--r--gcc/ira-color.c52
-rw-r--r--gcc/ira.c150
-rw-r--r--gcc/loop-invariant.c150
-rw-r--r--gcc/lower-subreg.c3
-rw-r--r--gcc/lra-assigns.c7
-rw-r--r--gcc/lra-constraints.c99
-rw-r--r--gcc/lra-lives.c15
-rw-r--r--gcc/lra-remat.c51
-rw-r--r--gcc/lra-spills.c7
-rw-r--r--gcc/lra.c15
-rw-r--r--gcc/lto-streamer-in.c1
-rw-r--r--gcc/lto-streamer-out.c1
-rw-r--r--gcc/lto-wrapper.c166
-rw-r--r--gcc/lto/ChangeLog11
-rw-r--r--gcc/lto/lto-lang.c2
-rw-r--r--gcc/lto/lto-symtab.h2
-rw-r--r--gcc/match.pd42
-rw-r--r--gcc/mem-stats.h13
-rw-r--r--gcc/omp-low.c574
-rw-r--r--gcc/opts.c7
-rw-r--r--gcc/params.def10
-rw-r--r--gcc/passes.c58
-rw-r--r--gcc/po/ChangeLog24
-rw-r--r--gcc/po/fr.po445
-rw-r--r--gcc/po/gcc.pot12648
-rw-r--r--gcc/po/sv.po8881
-rw-r--r--gcc/po/vi.po10935
-rw-r--r--gcc/postreload.c18
-rw-r--r--gcc/ree.c20
-rw-r--r--gcc/regcprop.c23
-rw-r--r--gcc/reload1.c26
-rw-r--r--gcc/reorg.c2
-rw-r--r--gcc/rtl.h6
-rw-r--r--gcc/rtlanal.c28
-rw-r--r--gcc/sched-deps.c21
-rw-r--r--gcc/sched-int.h1
-rw-r--r--gcc/sel-sched-ir.c51
-rw-r--r--gcc/sel-sched.c64
-rw-r--r--gcc/simplify-rtx.c24
-rw-r--r--gcc/ssa-iterators.h8
-rw-r--r--gcc/store-motion.c3
-rw-r--r--gcc/symtab.c69
-rw-r--r--gcc/system.h4
-rw-r--r--gcc/target.def4
-rw-r--r--gcc/targhooks.c5
-rw-r--r--gcc/testsuite/ChangeLog2332
-rw-r--r--gcc/testsuite/ChangeLog-201584
-rw-r--r--gcc/testsuite/c-c++-common/Wmisleading-indentation-3.c82
-rw-r--r--gcc/testsuite/c-c++-common/Wmisleading-indentation.c501
-rw-r--r--gcc/testsuite/c-c++-common/Wshift-negative-value-6.c2
-rw-r--r--gcc/testsuite/c-c++-common/asan/halt_on_error-1.c2
-rw-r--r--gcc/testsuite/c-c++-common/asan/halt_on_error-2.c2
-rw-r--r--gcc/testsuite/c-c++-common/asan/pr70541.c34
-rw-r--r--gcc/testsuite/c-c++-common/asan/swapcontext-test-1.c4
-rw-r--r--gcc/testsuite/c-c++-common/attr-simd-2.c2
-rw-r--r--gcc/testsuite/c-c++-common/attr-simd-4.c4
-rw-r--r--gcc/testsuite/c-c++-common/attr-simd.c4
-rw-r--r--gcc/testsuite/c-c++-common/cilk-plus/CK/pr69826-1.c25
-rw-r--r--gcc/testsuite/c-c++-common/cilk-plus/CK/pr69826-2.c6
-rw-r--r--gcc/testsuite/c-c++-common/cilk-plus/CK/spawning_arg.c15
-rw-r--r--gcc/testsuite/c-c++-common/cilk-plus/CK/steal_check.c17
-rw-r--r--gcc/testsuite/c-c++-common/cilk-plus/SE/ef_error2.c4
-rw-r--r--gcc/testsuite/c-c++-common/goacc-gomp/nesting-1.c2
-rw-r--r--gcc/testsuite/c-c++-common/goacc-gomp/nesting-fail-1.c44
-rw-r--r--gcc/testsuite/c-c++-common/goacc/clauses-fail.c12
-rw-r--r--gcc/testsuite/c-c++-common/goacc/combined-directives-2.c14
-rw-r--r--gcc/testsuite/c-c++-common/goacc/combined-directives.c7
-rw-r--r--gcc/testsuite/c-c++-common/goacc/host_data-1.c (renamed from gcc/testsuite/c-c++-common/goacc/use_device-1.c)12
-rw-r--r--gcc/testsuite/c-c++-common/goacc/host_data-2.c78
-rw-r--r--gcc/testsuite/c-c++-common/goacc/host_data-5.c23
-rw-r--r--gcc/testsuite/c-c++-common/goacc/host_data-6.c25
-rw-r--r--gcc/testsuite/c-c++-common/goacc/kernels-1.c43
-rw-r--r--gcc/testsuite/c-c++-common/goacc/kernels-counter-vars-function-scope.c3
-rw-r--r--gcc/testsuite/c-c++-common/goacc/kernels-default.c2
-rw-r--r--gcc/testsuite/c-c++-common/goacc/kernels-double-reduction-n.c3
-rw-r--r--gcc/testsuite/c-c++-common/goacc/kernels-double-reduction.c3
-rw-r--r--gcc/testsuite/c-c++-common/goacc/kernels-empty.c6
-rw-r--r--gcc/testsuite/c-c++-common/goacc/kernels-eternal.c11
-rw-r--r--gcc/testsuite/c-c++-common/goacc/kernels-loop-2.c3
-rw-r--r--gcc/testsuite/c-c++-common/goacc/kernels-loop-3.c4
-rw-r--r--gcc/testsuite/c-c++-common/goacc/kernels-loop-g.c4
-rw-r--r--gcc/testsuite/c-c++-common/goacc/kernels-loop-mod-not-zero.c3
-rw-r--r--gcc/testsuite/c-c++-common/goacc/kernels-loop-n.c4
-rw-r--r--gcc/testsuite/c-c++-common/goacc/kernels-loop-nest.c3
-rw-r--r--gcc/testsuite/c-c++-common/goacc/kernels-loop.c4
-rw-r--r--gcc/testsuite/c-c++-common/goacc/kernels-noreturn.c12
-rw-r--r--gcc/testsuite/c-c++-common/goacc/kernels-one-counter-var.c4
-rw-r--r--gcc/testsuite/c-c++-common/goacc/kernels-reduction.c4
-rw-r--r--gcc/testsuite/c-c++-common/goacc/loop-2-kernels.c189
-rw-r--r--gcc/testsuite/c-c++-common/goacc/loop-2-parallel.c162
-rw-r--r--gcc/testsuite/c-c++-common/goacc/loop-3.c58
-rw-r--r--gcc/testsuite/c-c++-common/goacc/loop-clauses.c4
-rw-r--r--gcc/testsuite/c-c++-common/goacc/nesting-1.c8
-rw-r--r--gcc/testsuite/c-c++-common/goacc/nesting-fail-1.c37
-rw-r--r--gcc/testsuite/c-c++-common/goacc/parallel-1.c36
-rw-r--r--gcc/testsuite/c-c++-common/goacc/pr69916.c20
-rw-r--r--gcc/testsuite/c-c++-common/goacc/reduction-1.c57
-rw-r--r--gcc/testsuite/c-c++-common/goacc/reduction-2.c42
-rw-r--r--gcc/testsuite/c-c++-common/goacc/reduction-3.c42
-rw-r--r--gcc/testsuite/c-c++-common/goacc/reduction-4.c40
-rw-r--r--gcc/testsuite/c-c++-common/goacc/reduction-5.c16
-rw-r--r--gcc/testsuite/c-c++-common/goacc/reduction-promotions.c32
-rw-r--r--gcc/testsuite/c-c++-common/goacc/routine-3.c128
-rw-r--r--gcc/testsuite/c-c++-common/goacc/routine-4.c73
-rw-r--r--gcc/testsuite/c-c++-common/goacc/routine-5.c15
-rw-r--r--gcc/testsuite/c-c++-common/goacc/tile.c258
-rw-r--r--gcc/testsuite/c-c++-common/goacc/uninit-copy-clause.c38
-rw-r--r--gcc/testsuite/c-c++-common/goacc/uninit-dim-clause.c19
-rw-r--r--gcc/testsuite/c-c++-common/goacc/uninit-firstprivate-clause.c25
-rw-r--r--gcc/testsuite/c-c++-common/goacc/uninit-if-clause.c38
-rw-r--r--gcc/testsuite/c-c++-common/goacc/uninit-use-device-clause.c14
-rw-r--r--gcc/testsuite/c-c++-common/gomp/clauses-1.c1
-rw-r--r--gcc/testsuite/c-c++-common/gomp/gridify-1.c54
-rw-r--r--gcc/testsuite/c-c++-common/gomp/if-1.c1
-rw-r--r--gcc/testsuite/c-c++-common/gomp/pr61486-2.c1
-rw-r--r--gcc/testsuite/c-c++-common/gomp/pr70550-1.c81
-rw-r--r--gcc/testsuite/c-c++-common/gomp/pr70550-2.c55
-rw-r--r--gcc/testsuite/c-c++-common/gomp/target-teams-1.c2
-rw-r--r--gcc/testsuite/c-c++-common/nonnull-1.c8
-rw-r--r--gcc/testsuite/c-c++-common/pr69126-2-long.c11
-rw-r--r--gcc/testsuite/c-c++-common/pr69126-2-short.c11
-rw-r--r--gcc/testsuite/c-c++-common/pr69126.c65
-rw-r--r--gcc/testsuite/c-c++-common/pr69543-1.c19
-rw-r--r--gcc/testsuite/c-c++-common/pr69543-2.c14
-rw-r--r--gcc/testsuite/c-c++-common/pr69543-3.c20
-rw-r--r--gcc/testsuite/c-c++-common/pr69543-4.c25
-rw-r--r--gcc/testsuite/c-c++-common/pr69558-1.c21
-rw-r--r--gcc/testsuite/c-c++-common/pr69558-2.c16
-rw-r--r--gcc/testsuite/c-c++-common/pr69558-3.c19
-rw-r--r--gcc/testsuite/c-c++-common/pr69558-4.c23
-rw-r--r--gcc/testsuite/c-c++-common/pr69558.c (renamed from gcc/testsuite/gcc.dg/pr69558.c)8
-rw-r--r--gcc/testsuite/c-c++-common/pr70144-1.c9
-rw-r--r--gcc/testsuite/c-c++-common/pr70144-2.c12
-rw-r--r--gcc/testsuite/c-c++-common/pr70264.c13
-rw-r--r--gcc/testsuite/c-c++-common/pr70297.c9
-rw-r--r--gcc/testsuite/c-c++-common/pr70336.c37
-rw-r--r--gcc/testsuite/c-c++-common/tsan/pr65400-1.c6
-rw-r--r--gcc/testsuite/c-c++-common/tsan/thread_leak.c2
-rw-r--r--gcc/testsuite/c-c++-common/vector-compare-4.c2
-rw-r--r--gcc/testsuite/g++.dg/Wno-frame-address.C2
-rw-r--r--gcc/testsuite/g++.dg/abi/abi-tag16a.C4
-rw-r--r--gcc/testsuite/g++.dg/abi/abi-tag18.C20
-rw-r--r--gcc/testsuite/g++.dg/abi/abi-tag18a.C20
-rw-r--r--gcc/testsuite/g++.dg/abi/abi-tag19.C4
-rw-r--r--gcc/testsuite/g++.dg/abi/abi-tag20.C15
-rw-r--r--gcc/testsuite/g++.dg/cilk-plus/CK/catch_exc.cc14
-rw-r--r--gcc/testsuite/g++.dg/concepts/alias1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/alias2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/alias3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/alias4.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/auto1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/auto3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/class.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/class1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/class2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/class3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/class4.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/class5.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/class6.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/constrained-parm.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/decl-diagnose.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/deduction-constraint1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/diagnostic1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/disjunction1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/dr1430.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/equiv.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/equiv2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/explicit-inst1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/explicit-inst2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/explicit-inst3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/explicit-inst4.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/explicit-spec1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/explicit-spec2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/explicit-spec3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/explicit-spec4.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/explicit-spec5.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/explicit-spec6.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/expression.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/expression2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/expression3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/feature-macro.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/fn-concept1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/fn-concept2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/fn1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/fn10.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/fn2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/fn3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/fn4.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/fn5.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/fn6.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/fn7.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/fn8.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/fn9.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/friend1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/friend2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/generic-fn-err.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/generic-fn.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/iconv1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/inherit-ctor1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/inherit-ctor2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/inherit-ctor3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/inherit-ctor4.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/intro1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/intro2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/intro3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/intro4.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/intro5.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/intro6.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/intro7.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/member-concept.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/memfun-err.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/memfun.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/partial-concept-id1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/partial-concept-id2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/partial-spec.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/partial-spec2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/partial-spec3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/partial-spec4.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/partial-spec5.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/partial-spec6.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/placeholder1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/placeholder2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/placeholder3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/placeholder4.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/placeholder5.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/placeholder6.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr65552.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr65575.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr65634.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr65636.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr65681.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr65848.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr65854.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr66091.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr67249.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr68434.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr68683.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req-neg1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req10.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req11.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req12.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req13.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req14.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req15.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req16.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req17.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req18.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req4.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req5.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req6.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req7.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req8.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req9.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/template-parm1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/template-parm10.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/template-parm11.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/template-parm12.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/template-parm2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/template-parm3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/template-parm4.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/template-parm5.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/template-parm6.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/template-parm7.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/template-parm8.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/template-parm9.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/template-template-parm1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/traits1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/traits2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/var-concept1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/var-concept2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/var-concept3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/var-concept4.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/var-concept5.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/var-concept6.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/var-templ1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/var-templ2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/variadic1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/variadic2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/variadic3.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp/pr23827_cxx98_neg.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/auto3.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/auto9.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-69315.C35
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-70001-1.C13
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-70001-2.C19
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-70001-3.C26
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-70001-4.C13
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-70204a.C18
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-70204b.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-70323.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-70323a.C11
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-__func__2.C13
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-aggr3.C30
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr10.C112
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr9.C57
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-array5.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-delete2.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-empty10.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-empty11.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-inline-1.C29
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-inline.C40
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-nullptr-1.C125
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-recursion2.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-string.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-trivial1.C20
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-virtual6.C49
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-wstring2.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-70218.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv10.C34
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/noexcept29.C19
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr65398.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr67767.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/range-for5.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/rv-cast5.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/typedef-redecl.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-sizeof4.C33
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-sizeof4a.C33
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-tuple2.C29
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic122.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic167.C18
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/constexpr-array3.C43
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/constexpr-array4.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/constexpr-assign1.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/constexpr-copy2.C24
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/constexpr-copy3.C26
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/constexpr-empty2.C27
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/constexpr-instantiate.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/constexpr-loop3.C23
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/constexpr-loop4.C27
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/constexpr-recursion1.C16
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/lambda-generic-trailing1.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic4.C20
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr4.C13
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr5.C24
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/nsdmi-union1.C33
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/paren2.C31
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/paren3.C30
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/pr69066.C75
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/pr70001.C49
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/var-templ48.C5
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/var-templ49.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/var-templ50.C11
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/fold1.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/fold3.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/fold7.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/range-for1.C23
-rw-r--r--gcc/testsuite/g++.dg/debug/pr70271.C36
-rw-r--r--gcc/testsuite/g++.dg/delayedfold/unary-plus1.C22
-rw-r--r--gcc/testsuite/g++.dg/diagnostic/pr70105.C43
-rw-r--r--gcc/testsuite/g++.dg/expr/pmf-2.C18
-rw-r--r--gcc/testsuite/g++.dg/expr/stdarg3.C18
-rw-r--r--gcc/testsuite/g++.dg/ext/attr-constructor1.C2
-rw-r--r--gcc/testsuite/g++.dg/ext/attribute-may-alias-3.C22
-rw-r--r--gcc/testsuite/g++.dg/ext/attribute-may-alias-4.C17
-rw-r--r--gcc/testsuite/g++.dg/ext/attribute-may-alias-5.C9
-rw-r--r--gcc/testsuite/g++.dg/ext/builtin_alloca.C195
-rw-r--r--gcc/testsuite/g++.dg/ext/constexpr-vla1.C2
-rw-r--r--gcc/testsuite/g++.dg/ext/constexpr-vla2.C2
-rw-r--r--gcc/testsuite/g++.dg/ext/constexpr-vla3.C2
-rw-r--r--gcc/testsuite/g++.dg/ext/constexpr-vla4.C17
-rw-r--r--gcc/testsuite/g++.dg/ext/flexary15.C14
-rw-r--r--gcc/testsuite/g++.dg/ext/java-3.C39
-rw-r--r--gcc/testsuite/g++.dg/ext/pr70290.C24
-rw-r--r--gcc/testsuite/g++.dg/ext/pr70571.C10
-rw-r--r--gcc/testsuite/g++.dg/ext/vector30.C15
-rw-r--r--gcc/testsuite/g++.dg/goacc/reference.C39
-rw-r--r--gcc/testsuite/g++.dg/goacc/routine-1.C13
-rw-r--r--gcc/testsuite/g++.dg/goacc/routine-2.C42
-rw-r--r--gcc/testsuite/g++.dg/goacc/template.C81
-rw-r--r--gcc/testsuite/g++.dg/gomp/declare-simd-1.C10
-rw-r--r--gcc/testsuite/g++.dg/gomp/declare-simd-3.C8
-rw-r--r--gcc/testsuite/g++.dg/gomp/declare-simd-4.C4
-rw-r--r--gcc/testsuite/g++.dg/gomp/gomp.exp2
-rw-r--r--gcc/testsuite/g++.dg/gomp/target-teams-1.C2
-rw-r--r--gcc/testsuite/g++.dg/init/new47.C19
-rw-r--r--gcc/testsuite/g++.dg/init/pr70501.C11
-rw-r--r--gcc/testsuite/g++.dg/ipa/devirt-51.C32
-rw-r--r--gcc/testsuite/g++.dg/lookup/pr70205.C11
-rw-r--r--gcc/testsuite/g++.dg/lto/pr69589_0.C26
-rw-r--r--gcc/testsuite/g++.dg/lto/pr69589_1.C61
-rw-r--r--gcc/testsuite/g++.dg/opt/flifetime-dse4.C27
-rw-r--r--gcc/testsuite/g++.dg/opt/flifetime-dse5.C13
-rw-r--r--gcc/testsuite/g++.dg/opt/flifetime-dse6.C11
-rw-r--r--gcc/testsuite/g++.dg/opt/pr70245-aux.cc56
-rw-r--r--gcc/testsuite/g++.dg/opt/pr70245.C52
-rw-r--r--gcc/testsuite/g++.dg/opt/pr70245.h14
-rw-r--r--gcc/testsuite/g++.dg/other/bitfield5.C15
-rw-r--r--gcc/testsuite/g++.dg/parse/invalid1.C5
-rw-r--r--gcc/testsuite/g++.dg/parse/pr68722.C9
-rw-r--r--gcc/testsuite/g++.dg/plugin/pragma_plugin.c16
-rw-r--r--gcc/testsuite/g++.dg/pr61033.C86
-rw-r--r--gcc/testsuite/g++.dg/pr63384.C12
-rw-r--r--gcc/testsuite/g++.dg/pr70098.C91
-rw-r--r--gcc/testsuite/g++.dg/pr70590-2.C21
-rw-r--r--gcc/testsuite/g++.dg/pr70590.C25
-rw-r--r--gcc/testsuite/g++.dg/template/crash34.C2
-rw-r--r--gcc/testsuite/g++.dg/template/friend61.C12
-rw-r--r--gcc/testsuite/g++.dg/template/friend61a.C12
-rw-r--r--gcc/testsuite/g++.dg/template/friend61b.C12
-rw-r--r--gcc/testsuite/g++.dg/template/mangle2.C19
-rw-r--r--gcc/testsuite/g++.dg/template/partial-specialization4.C26
-rw-r--r--gcc/testsuite/g++.dg/template/pr69961a.C25
-rw-r--r--gcc/testsuite/g++.dg/template/pr69961b.C15
-rw-r--r--gcc/testsuite/g++.dg/template/ptrmem30.C45
-rw-r--r--gcc/testsuite/g++.dg/template/typename21.C11
-rw-r--r--gcc/testsuite/g++.dg/torture/pr69553.C35
-rw-r--r--gcc/testsuite/g++.dg/torture/pr69851.C24
-rw-r--r--gcc/testsuite/g++.dg/torture/pr70251.C11
-rw-r--r--gcc/testsuite/g++.dg/torture/pr70499.C39
-rw-r--r--gcc/testsuite/g++.dg/torture/pr70526.C35
-rw-r--r--gcc/testsuite/g++.dg/tree-ssa/ehcleanup-1.C2
-rw-r--r--gcc/testsuite/g++.dg/tsan/aligned_vs_unaligned_race.C2
-rw-r--r--gcc/testsuite/g++.dg/tsan/benign_race.C2
-rw-r--r--gcc/testsuite/g++.dg/tsan/fd_close_norace.C2
-rw-r--r--gcc/testsuite/g++.dg/tsan/fd_close_norace2.C2
-rw-r--r--gcc/testsuite/g++.dg/ubsan/pr63956.C4
-rw-r--r--gcc/testsuite/g++.dg/ubsan/pr69922.C18
-rw-r--r--gcc/testsuite/g++.dg/ubsan/pr70035.C26
-rw-r--r--gcc/testsuite/g++.dg/ubsan/pr70135.C36
-rw-r--r--gcc/testsuite/g++.dg/ubsan/pr70147-1.C12
-rw-r--r--gcc/testsuite/g++.dg/ubsan/pr70147-2.C77
-rw-r--r--gcc/testsuite/g++.dg/ubsan/vptr-11.C84
-rw-r--r--gcc/testsuite/g++.dg/warn/Wignored-attributes-1.C6
-rw-r--r--gcc/testsuite/g++.dg/warn/Wignored-attributes-2.C7
-rw-r--r--gcc/testsuite/g++.dg/warn/Wnonnull-compare-2.C27
-rw-r--r--gcc/testsuite/g++.dg/warn/Wnonnull-compare-3.C28
-rw-r--r--gcc/testsuite/g++.dg/warn/Wnonnull-compare-4.C14
-rw-r--r--gcc/testsuite/g++.dg/warn/Wnonnull-compare-5.C18
-rw-r--r--gcc/testsuite/g++.dg/warn/Wnonnull-compare-6.C13
-rw-r--r--gcc/testsuite/g++.dg/warn/Wnonnull-compare-7.C19
-rw-r--r--gcc/testsuite/g++.dg/warn/Wnonnull-compare-8.C14
-rw-r--r--gcc/testsuite/g++.dg/warn/Wparentheses-29.C135
-rw-r--r--gcc/testsuite/g++.dg/warn/Wstrict-aliasing-bogus-union-2.C14
-rw-r--r--gcc/testsuite/g++.dg/warn/constexpr-70194.C12
-rw-r--r--gcc/testsuite/g++.dg/warn/overflow-warn-7.C17
-rw-r--r--gcc/testsuite/g++.old-deja/g++.other/decl5.C6
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/20151204.c2
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr69102.c21
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr69740-1.c12
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr69740-2.c19
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr69989-2.c16
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr69999.c16
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr70061.c10
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr70190.c14
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr70199.c20
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr70240.c26
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr70263-1.c11
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr70355.c14
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20101011-1.c3
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr68532.c1
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr70005.c25
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr70127.c23
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr70222-1.c30
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr70222-2.c20
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr70429.c17
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr70460.c29
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr70566.c47
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr70586.c30
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr70602.c23
-rw-r--r--gcc/testsuite/gcc.dg/Warray-bounds-18.c25
-rw-r--r--gcc/testsuite/gcc.dg/Warray-bounds-19.c17
-rw-r--r--gcc/testsuite/gcc.dg/Wno-frame-address.c2
-rw-r--r--gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-upcast.c17
-rw-r--r--gcc/testsuite/gcc.dg/Wstrict-aliasing-struct-with-char-member.c16
-rw-r--r--gcc/testsuite/gcc.dg/atomic-op-6.c11
-rw-r--r--gcc/testsuite/gcc.dg/builtins-68.c114
-rw-r--r--gcc/testsuite/gcc.dg/cilk-plus/pr69798-1.c73
-rw-r--r--gcc/testsuite/gcc.dg/cilk-plus/pr69798-2.c72
-rw-r--r--gcc/testsuite/gcc.dg/cpp/pr69985.c7
-rw-r--r--gcc/testsuite/gcc.dg/debug/dwarf2/prod-options.c3
-rw-r--r--gcc/testsuite/gcc.dg/dfp/pr70052.c24
-rw-r--r--gcc/testsuite/gcc.dg/enum-mode-2.c22
-rw-r--r--gcc/testsuite/gcc.dg/gomp/declare-simd-1.c18
-rw-r--r--gcc/testsuite/gcc.dg/gomp/declare-simd-3.c3
-rw-r--r--gcc/testsuite/gcc.dg/gomp/gomp.exp2
-rw-r--r--gcc/testsuite/gcc.dg/gomp/pr68128-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/gomp/simd-clones-2.c3
-rw-r--r--gcc/testsuite/gcc.dg/gomp/simd-clones-3.c2
-rw-r--r--gcc/testsuite/gcc.dg/graphite/pr68715-2.c35
-rw-r--r--gcc/testsuite/gcc.dg/graphite/pr68715.c36
-rw-r--r--gcc/testsuite/gcc.dg/graphite/pr68756.c26
-rw-r--r--gcc/testsuite/gcc.dg/graphite/pr68809-2.c27
-rw-r--r--gcc/testsuite/gcc.dg/graphite/pr68809.c28
-rw-r--r--gcc/testsuite/gcc.dg/graphite/pr68953.c30
-rw-r--r--gcc/testsuite/gcc.dg/graphite/pr70045.c28
-rw-r--r--gcc/testsuite/gcc.dg/guality/guality.h4
-rw-r--r--gcc/testsuite/gcc.dg/guality/pr69947.c22
-rw-r--r--gcc/testsuite/gcc.dg/ifcvt-4.c3
-rw-r--r--gcc/testsuite/gcc.dg/ifcvt-5.c11
-rw-r--r--gcc/testsuite/gcc.dg/ipa/pr70306.c45
-rw-r--r--gcc/testsuite/gcc.dg/loop-8.c2
-rw-r--r--gcc/testsuite/gcc.dg/lto/simd-function_0.c1
-rw-r--r--gcc/testsuite/gcc.dg/nested-func-10.c56
-rw-r--r--gcc/testsuite/gcc.dg/nested-func-9.c47
-rw-r--r--gcc/testsuite/gcc.dg/pic-1.c10
-rw-r--r--gcc/testsuite/gcc.dg/pic-2.c10
-rw-r--r--gcc/testsuite/gcc.dg/pic-3.c10
-rw-r--r--gcc/testsuite/gcc.dg/pic-4.c10
-rw-r--r--gcc/testsuite/gcc.dg/pie-1.c10
-rw-r--r--gcc/testsuite/gcc.dg/pie-2.c10
-rw-r--r--gcc/testsuite/gcc.dg/pie-3.c10
-rw-r--r--gcc/testsuite/gcc.dg/pie-4.c10
-rw-r--r--gcc/testsuite/gcc.dg/pie-5.c10
-rw-r--r--gcc/testsuite/gcc.dg/pie-6.c6
-rw-r--r--gcc/testsuite/gcc.dg/plugin/diagnostic-test-expressions-1.c54
-rw-r--r--gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_show_trees.c8
-rw-r--r--gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.c97
-rw-r--r--gcc/testsuite/gcc.dg/plugin/location-overflow-test-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/pr61053.c20
-rw-r--r--gcc/testsuite/gcc.dg/pr61817-1.c19
-rw-r--r--gcc/testsuite/gcc.dg/pr61817-2.c19
-rw-r--r--gcc/testsuite/gcc.dg/pr64434.c1
-rw-r--r--gcc/testsuite/gcc.dg/pr67854.c11
-rw-r--r--gcc/testsuite/gcc.dg/pr69032.c11
-rw-r--r--gcc/testsuite/gcc.dg/pr69195.c27
-rw-r--r--gcc/testsuite/gcc.dg/pr69238.c28
-rw-r--r--gcc/testsuite/gcc.dg/pr69307.c34
-rw-r--r--gcc/testsuite/gcc.dg/pr69391-1.c12
-rw-r--r--gcc/testsuite/gcc.dg/pr69391-2.c12
-rw-r--r--gcc/testsuite/gcc.dg/pr69650.c5
-rw-r--r--gcc/testsuite/gcc.dg/pr69796.c10
-rw-r--r--gcc/testsuite/gcc.dg/pr69819.c5
-rw-r--r--gcc/testsuite/gcc.dg/pr69824.c4
-rw-r--r--gcc/testsuite/gcc.dg/pr69885.c13
-rw-r--r--gcc/testsuite/gcc.dg/pr69896.c33
-rw-r--r--gcc/testsuite/gcc.dg/pr69900.c6
-rw-r--r--gcc/testsuite/gcc.dg/pr69915.c15
-rw-r--r--gcc/testsuite/gcc.dg/pr69956.c11
-rw-r--r--gcc/testsuite/gcc.dg/pr69973.c2
-rw-r--r--gcc/testsuite/gcc.dg/pr69974.c13
-rw-r--r--gcc/testsuite/gcc.dg/pr69990.c24
-rw-r--r--gcc/testsuite/gcc.dg/pr70017.c20
-rw-r--r--gcc/testsuite/gcc.dg/pr70022.c10
-rw-r--r--gcc/testsuite/gcc.dg/pr70026.c15
-rw-r--r--gcc/testsuite/gcc.dg/pr70050.c11
-rw-r--r--gcc/testsuite/gcc.dg/pr70110.c39
-rw-r--r--gcc/testsuite/gcc.dg/pr70152.c27
-rw-r--r--gcc/testsuite/gcc.dg/pr70161-2.c7
-rw-r--r--gcc/testsuite/gcc.dg/pr70161.c7
-rw-r--r--gcc/testsuite/gcc.dg/pr70169.c40
-rw-r--r--gcc/testsuite/gcc.dg/pr70174.c11
-rw-r--r--gcc/testsuite/gcc.dg/pr70177.c15
-rw-r--r--gcc/testsuite/gcc.dg/pr70219.c18
-rw-r--r--gcc/testsuite/gcc.dg/pr70252.c16
-rw-r--r--gcc/testsuite/gcc.dg/pr70269.c7
-rw-r--r--gcc/testsuite/gcc.dg/pr70281.c9
-rw-r--r--gcc/testsuite/gcc.dg/pr70292.c12
-rw-r--r--gcc/testsuite/gcc.dg/pr70317.c27
-rw-r--r--gcc/testsuite/gcc.dg/pr70326.c20
-rw-r--r--gcc/testsuite/gcc.dg/pr70405.c15
-rw-r--r--gcc/testsuite/gcc.dg/pr70442.c20
-rw-r--r--gcc/testsuite/gcc.dg/sibcall-11.c7
-rw-r--r--gcc/testsuite/gcc.dg/simd-7.c20
-rw-r--r--gcc/testsuite/gcc.dg/simd-8.c20
-rw-r--r--gcc/testsuite/gcc.dg/sso/p1.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/p13.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/p2.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/p3.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/p4.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/p5.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/p6.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/p7.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/p8.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/p9.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/q1.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/q13.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/q2.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/q3.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/q4.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/q5.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/q6.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/q7.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/q8.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/q9.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/r3.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/r5.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/r6.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/r7.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/r8.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/s3.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/s5.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/s6.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/s7.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/s8.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/sso.exp4
-rw-r--r--gcc/testsuite/gcc.dg/sso/t1.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/t13.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/t2.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/t3.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/t4.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/t5.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/t6.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/t7.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/t8.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/t9.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/u5.c1
-rw-r--r--gcc/testsuite/gcc.dg/sso/u6.c1
-rw-r--r--gcc/testsuite/gcc.dg/strlenopt.h7
-rw-r--r--gcc/testsuite/gcc.dg/torture/builtin-isinf_sign-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr57676.c28
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr68963.c41
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr69613.c41
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr69760.c50
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr69854.c8
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr69886.c15
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr69909.c35
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr69932.c10
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr69936.c24
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr69941.c30
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr69951.c21
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr69989.c23
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr70025.c81
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr70083.c24
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr70115.c20
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr70123.c198
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr70278.c37
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr70288-1.c36
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr70288-2.c35
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr70307.c67
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr70310.c20
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr70333.c19
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr70370.c45
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr70396.c17
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr70421.c22
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr70450.c19
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr70457.c29
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr70484.c19
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr70542.c31
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/20030814-6.c7
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/alias-34.c19
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/alias-35.c18
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ifc-8.c5
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ivopts-lt-2.c1
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/phi-opt-14.c37
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr15826.c36
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr68714.c10
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr69196-1.c138
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr69666.c16
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr69845-1.c19
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr69845-2.c20
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr70232.c129
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr70372.c14
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/sra-20.c20
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-cse-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/vrp06.c2
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/vrp46.c2
-rw-r--r--gcc/testsuite/gcc.dg/typedef-redecl2.c13
-rw-r--r--gcc/testsuite/gcc.dg/uninit-19.c52
-rw-r--r--gcc/testsuite/gcc.dg/unused-variable-3.c9
-rw-r--r--gcc/testsuite/gcc.dg/vect/O3-pr36098.c6
-rw-r--r--gcc/testsuite/gcc.dg/vect/bb-slp-34.c3
-rw-r--r--gcc/testsuite/gcc.dg/vect/bb-slp-pr68892.c4
-rw-r--r--gcc/testsuite/gcc.dg/vect/bb-slp-pr69907.c12
-rw-r--r--gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-fast-math-vect-pr29925.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr46032.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr69652.c (renamed from gcc/testsuite/gcc.dg/torture/pr69652.c)2
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr70021.c40
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr70138-1.c40
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr70138-2.c35
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr70354-1.c50
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr70354-2.c37
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-outer-pr69720.c28
-rw-r--r--gcc/testsuite/gcc.target/aarch64/assembler_arch_1.c1
-rw-r--r--gcc/testsuite/gcc.target/aarch64/mgeneral-regs_4.c2
-rw-r--r--gcc/testsuite/gcc.target/aarch64/pr63304_1.c2
-rw-r--r--gcc/testsuite/gcc.target/aarch64/pr69245_1.c18
-rw-r--r--gcc/testsuite/gcc.target/aarch64/pr69245_2.c17
-rw-r--r--gcc/testsuite/gcc.target/aarch64/pr70044.c14
-rw-r--r--gcc/testsuite/gcc.target/aarch64/pr70120-1.c19
-rw-r--r--gcc/testsuite/gcc.target/aarch64/pr70120-2.c17
-rw-r--r--gcc/testsuite/gcc.target/aarch64/pr70120-3.c22
-rw-r--r--gcc/testsuite/gcc.target/aarch64/pr70398.c26
-rw-r--r--gcc/testsuite/gcc.target/aarch64/scalar_shift_1.c32
-rw-r--r--gcc/testsuite/gcc.target/aarch64/shift_wide_invalid_1.c36
-rw-r--r--gcc/testsuite/gcc.target/aarch64/target_attr_15.c2
-rw-r--r--gcc/testsuite/gcc.target/aarch64/vect-reduc-or_1.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/atomic_loaddi_1.c9
-rw-r--r--gcc/testsuite/gcc.target/arm/atomic_loaddi_2.c9
-rw-r--r--gcc/testsuite/gcc.target/arm/atomic_loaddi_3.c9
-rw-r--r--gcc/testsuite/gcc.target/arm/atomic_loaddi_4.c9
-rw-r--r--gcc/testsuite/gcc.target/arm/atomic_loaddi_5.c9
-rw-r--r--gcc/testsuite/gcc.target/arm/atomic_loaddi_6.c9
-rw-r--r--gcc/testsuite/gcc.target/arm/atomic_loaddi_7.c9
-rw-r--r--gcc/testsuite/gcc.target/arm/atomic_loaddi_8.c9
-rw-r--r--gcc/testsuite/gcc.target/arm/atomic_loaddi_9.c9
-rw-r--r--gcc/testsuite/gcc.target/arm/atomic_loaddi_acquire.x11
-rw-r--r--gcc/testsuite/gcc.target/arm/atomic_loaddi_relaxed.x11
-rw-r--r--gcc/testsuite/gcc.target/arm/atomic_loaddi_seq_cst.x11
-rw-r--r--gcc/testsuite/gcc.target/arm/attr-align1.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/attr-align3.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/attr_arm.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/cond_sub_restrict_it.c26
-rw-r--r--gcc/testsuite/gcc.target/arm/condarith_restrict_it.c47
-rw-r--r--gcc/testsuite/gcc.target/arm/flip-thumb.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/movcond_restrict_it.c27
-rw-r--r--gcc/testsuite/gcc.target/arm/negscc_restrict_it.c19
-rw-r--r--gcc/testsuite/gcc.target/arm/pr45701-1.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/pr45701-2.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/pr62554.c51
-rw-r--r--gcc/testsuite/gcc.target/arm/pr69307.c34
-rw-r--r--gcc/testsuite/gcc.target/arm/pr69610-1.c14
-rw-r--r--gcc/testsuite/gcc.target/arm/pr69610-2.c33
-rw-r--r--gcc/testsuite/gcc.target/arm/pr69614.c39
-rw-r--r--gcc/testsuite/gcc.target/arm/pr69904.c24
-rw-r--r--gcc/testsuite/gcc.target/arm/pr70278.c41
-rw-r--r--gcc/testsuite/gcc.target/arm/pr70496.c13
-rw-r--r--gcc/testsuite/gcc.target/arm/pragma_cpp_fma.c39
-rw-r--r--gcc/testsuite/gcc.target/i386/addr-space-3.c10
-rw-r--r--gcc/testsuite/gcc.target/i386/asm-flag-6.c276
-rw-r--r--gcc/testsuite/gcc.target/i386/avx-vextractf128-256-5.c12
-rw-r--r--gcc/testsuite/gcc.target/i386/avx2-pr70354-1.c16
-rw-r--r--gcc/testsuite/gcc.target/i386/avx2-pr70354-2.c16
-rw-r--r--gcc/testsuite/gcc.target/i386/avx2-pr70542.c16
-rw-r--r--gcc/testsuite/gcc.target/i386/avx2-pr70574.c26
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512bw-pr70329-1.c27
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512bw-pr70329-2.c33
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512bw-pr70509.c26
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512dq-pr70059.c33
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512f-pr70059.c33
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512f-pr70421.c15
-rw-r--r--gcc/testsuite/gcc.target/i386/bmi2-bzhi-2.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/chkp-hidden-def.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/chkp-strlen-1.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/chkp-strlen-2.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/chkp-strlen-3.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/chkp-strlen-4.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/chkp-strlen-5.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/chkp-stropt-1.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/chkp-stropt-10.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/chkp-stropt-11.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/chkp-stropt-12.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/chkp-stropt-13.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/chkp-stropt-14.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/chkp-stropt-15.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/chkp-stropt-16.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/chkp-stropt-2.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/chkp-stropt-3.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/chkp-stropt-4.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/chkp-stropt-5.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/chkp-stropt-6.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/chkp-stropt-7.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/chkp-stropt-8.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/chkp-stropt-9.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/cleanup-1.c17
-rw-r--r--gcc/testsuite/gcc.target/i386/cleanup-2.c17
-rw-r--r--gcc/testsuite/gcc.target/i386/pr64411.C27
-rw-r--r--gcc/testsuite/gcc.target/i386/pr69052.c54
-rw-r--r--gcc/testsuite/gcc.target/i386/pr69820.c14
-rw-r--r--gcc/testsuite/gcc.target/i386/pr69888.c10
-rw-r--r--gcc/testsuite/gcc.target/i386/pr69891.c30
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70007.c30
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70021.c42
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70027.c11
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70028.c19
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70049.c20
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70062.c11
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70083.c20
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70086-1.c11
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70086-2.c21
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70086-3.c21
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70160.c19
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70251.c52
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70263-2.c23
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70293.c38
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70300.c25
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70302.c22
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70325.c12
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70327.c12
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70355.c14
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70406.c13
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70453.c18
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70467-2.c20
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70510.c14
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70525.c32
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70593.c19
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70596.c13
-rw-r--r--gcc/testsuite/gcc.target/i386/stack-realign-win.c35
-rw-r--r--gcc/testsuite/gcc.target/powerpc/altivec-36.c46
-rw-r--r--gcc/testsuite/gcc.target/powerpc/float128-1.c147
-rw-r--r--gcc/testsuite/gcc.target/powerpc/float128-2.c226
-rw-r--r--gcc/testsuite/gcc.target/powerpc/fusion.c29
-rw-r--r--gcc/testsuite/gcc.target/powerpc/fusion3.c27
-rw-r--r--gcc/testsuite/gcc.target/powerpc/p8vector-ldst.c174
-rw-r--r--gcc/testsuite/gcc.target/powerpc/p9-lxvx-stxvx-1.c1
-rw-r--r--gcc/testsuite/gcc.target/powerpc/p9-lxvx-stxvx-2.c1
-rw-r--r--gcc/testsuite/gcc.target/powerpc/p9-lxvx-stxvx-3.c1
-rw-r--r--gcc/testsuite/gcc.target/powerpc/p9-permute.c1
-rw-r--r--gcc/testsuite/gcc.target/powerpc/ppc-round2.c42
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr69946.c38
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr69969.c7
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr70117.c92
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr70640.c11
-rw-r--r--gcc/testsuite/gcc.target/s390/dfp-1.c23
-rw-r--r--gcc/testsuite/gcc.target/s390/md/movstr-1.c18
-rw-r--r--gcc/testsuite/gcc.target/s390/morestack.c260
-rw-r--r--gcc/testsuite/gcc.target/s390/pr69625.c37
-rw-r--r--gcc/testsuite/gcc.target/s390/pr69709.c39
-rw-r--r--gcc/testsuite/gcc.target/s390/vector/int128-1.c47
-rw-r--r--gcc/testsuite/gcc.target/s390/vector/stpcpy-1.c100
-rw-r--r--gcc/testsuite/gcc.target/s390/vector/vcond-shift.c (renamed from gcc/testsuite/gcc.target/s390/vcond-shift.c)0
-rw-r--r--gcc/testsuite/gcc.target/s390/vector/vec-vcond-1.c23
-rw-r--r--gcc/testsuite/gcc.target/sh/pr54089-10.c153
-rw-r--r--gcc/testsuite/gcc.target/sh/torture/pr70416.c136
-rw-r--r--gcc/testsuite/gcc.target/sparc/20160229-1.c157
-rw-r--r--gcc/testsuite/gfortran.dg/allocate_with_source_18.f0331
-rw-r--r--gcc/testsuite/gfortran.dg/allocate_with_source_19.f0822
-rw-r--r--gcc/testsuite/gfortran.dg/bessel_6.f902
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_8.f902
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_allocate_5.f0833
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_allocate_6.f0827
-rw-r--r--gcc/testsuite/gfortran.dg/deferred_character_15.f9044
-rw-r--r--gcc/testsuite/gfortran.dg/deferred_character_16.f9019
-rw-r--r--gcc/testsuite/gfortran.dg/fmt_pf.f90226
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/combined-directives.f9029
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/data-tree.f952
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/host_data-tree.f952
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/kernels-alias-2.f9523
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/kernels-alias-3.f9519
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/kernels-alias-4.f9520
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/kernels-alias.f9523
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/kernels-loop-2.f9544
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-2.f9550
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-enter-exit-2.f9550
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-enter-exit.f9548
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-update.f9547
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/kernels-loop-data.f9548
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/kernels-loop-inner.f951
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/kernels-loop-n.f9541
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/kernels-loop.f9538
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/kernels-loops-adjacent.f951
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/kernels-tree.f952
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/loop-1.f9515
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/loop-5.f956
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/loop-6.f958
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/loop-tree-1.f906
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/parallel-tree.f952
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/private-3.f951
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/reduction-3.f9510
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/reduction-promotions.f9046
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/routine-5.f904
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/uninit-copy-clause.f9529
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/uninit-dim-clause.f9517
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/uninit-firstprivate-clause.f9518
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/uninit-if-clause.f9520
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/uninit-use-device-clause.f9510
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/gomp.exp2
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/gridify-1.f9016
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/pr52531.f9016
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/target1.f901
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/target2.f902
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/target3.f901
-rw-r--r--gcc/testsuite/gfortran.dg/graphite/pr68715.f9031
-rw-r--r--gcc/testsuite/gfortran.dg/include_6.f903
-rw-r--r--gcc/testsuite/gfortran.dg/include_9.f906
-rw-r--r--gcc/testsuite/gfortran.dg/namelist_89.f9047
-rw-r--r--gcc/testsuite/gfortran.dg/newunit_4.f907
-rw-r--r--gcc/testsuite/gfortran.dg/parameter_array_init_7.f908
-rw-r--r--gcc/testsuite/gfortran.dg/pr36192.f905
-rw-r--r--gcc/testsuite/gfortran.dg/pr36192_1.f904
-rw-r--r--gcc/testsuite/gfortran.dg/pr56007.f10
-rw-r--r--gcc/testsuite/gfortran.dg/pr56007.f9011
-rw-r--r--gcc/testsuite/gfortran.dg/pr59700.f902
-rw-r--r--gcc/testsuite/gfortran.dg/pr60126.f9018
-rw-r--r--gcc/testsuite/gfortran.dg/pr69987.f9028
-rw-r--r--gcc/testsuite/gfortran.dg/prof/dynamic_dispatch_6.f0368
-rw-r--r--gcc/testsuite/gfortran.dg/prof/prof.exp56
-rw-r--r--gcc/testsuite/gfortran.dg/real_dimension_1.f8
-rw-r--r--gcc/testsuite/gfortran.dg/realloc_on_assign_26.f9012
-rw-r--r--gcc/testsuite/gfortran.dg/submodule_14.f0849
-rw-r--r--gcc/testsuite/gfortran.dg/submodule_15.f0858
-rw-r--r--gcc/testsuite/gfortran.dg/unconstrained_commons.f20
-rw-r--r--gcc/testsuite/gfortran.dg/unlimited_polymorphic_25.f9040
-rw-r--r--gcc/testsuite/gfortran.dg/unlimited_polymorphic_26.f9047
-rw-r--r--gcc/testsuite/gfortran.dg/vect/pr69882.f9041
-rw-r--r--gcc/testsuite/gfortran.dg/vect/pr69980.f9040
-rw-r--r--gcc/testsuite/gfortran.dg/vect/pr70043.f9015
-rw-r--r--gcc/testsuite/gnat.dg/incomplete4.adb10
-rw-r--r--gcc/testsuite/gnat.dg/incomplete4_pkg.ads9
-rw-r--r--gcc/testsuite/gnat.dg/renaming8.adb11
-rw-r--r--gcc/testsuite/gnat.dg/renaming8_pkg1.ads7
-rw-r--r--gcc/testsuite/gnat.dg/renaming8_pkg2.adb8
-rw-r--r--gcc/testsuite/gnat.dg/renaming8_pkg2.ads13
-rw-r--r--gcc/testsuite/gnat.dg/renaming8_pkg3.adb8
-rw-r--r--gcc/testsuite/gnat.dg/renaming8_pkg3.ads5
-rw-r--r--gcc/testsuite/gnat.dg/renaming9.adb12
-rw-r--r--gcc/testsuite/gnat.dg/renaming9.ads16
-rw-r--r--gcc/testsuite/gnat.dg/specs/double_record_extension3.ads22
-rw-r--r--gcc/testsuite/gnat.dg/specs/task1.ads16
-rw-r--r--gcc/testsuite/gnat.dg/stack_usage3.adb32
-rw-r--r--gcc/testsuite/gnat.dg/stack_usage3_pkg.ads7
-rw-r--r--gcc/testsuite/go.test/go-test.exp11
-rw-r--r--gcc/testsuite/lib/g++-dg.exp2
-rw-r--r--gcc/testsuite/lib/gcc-gdb-test.exp4
-rw-r--r--gcc/testsuite/lib/gcc-simulate-thread.exp4
-rw-r--r--gcc/testsuite/lib/prune.exp25
-rw-r--r--gcc/testsuite/lib/target-supports.exp77
-rw-r--r--gcc/testsuite/objc.dg/pr69844.m24
-rw-r--r--gcc/toplev.c3
-rw-r--r--gcc/tree-cfg.c4
-rw-r--r--gcc/tree-chkp.c2
-rw-r--r--gcc/tree-chrec.c12
-rw-r--r--gcc/tree-dfa.c15
-rw-r--r--gcc/tree-inline.c57
-rw-r--r--gcc/tree-inline.h2
-rw-r--r--gcc/tree-outof-ssa.c4
-rw-r--r--gcc/tree-parloops.c43
-rw-r--r--gcc/tree-pretty-print.c2
-rw-r--r--gcc/tree-scalar-evolution.c70
-rw-r--r--gcc/tree-sra.c14
-rw-r--r--gcc/tree-ssa-coalesce.c162
-rw-r--r--gcc/tree-ssa-forwprop.c7
-rw-r--r--gcc/tree-ssa-ifcombine.c9
-rw-r--r--gcc/tree-ssa-loop-ivcanon.c54
-rw-r--r--gcc/tree-ssa-loop-ivopts.c71
-rw-r--r--gcc/tree-ssa-loop-niter.c18
-rw-r--r--gcc/tree-ssa-loop.c13
-rw-r--r--gcc/tree-ssa-math-opts.c4
-rw-r--r--gcc/tree-ssa-phiopt.c102
-rw-r--r--gcc/tree-ssa-propagate.c2
-rw-r--r--gcc/tree-ssa-reassoc.c237
-rw-r--r--gcc/tree-ssa-sccvn.c2
-rw-r--r--gcc/tree-ssa-structalias.c18
-rw-r--r--gcc/tree-ssa-tail-merge.c44
-rw-r--r--gcc/tree-ssa-threadbackward.c88
-rw-r--r--gcc/tree-ssa-uncprop.c3
-rw-r--r--gcc/tree-streamer-out.c2
-rw-r--r--gcc/tree-vect-generic.c51
-rw-r--r--gcc/tree-vect-loop-manip.c3
-rw-r--r--gcc/tree-vect-loop.c45
-rw-r--r--gcc/tree-vect-patterns.c27
-rw-r--r--gcc/tree-vect-slp.c23
-rw-r--r--gcc/tree-vect-stmts.c153
-rw-r--r--gcc/tree-vrp.c86
-rw-r--r--gcc/tree.c20
-rw-r--r--gcc/tree.def6
-rw-r--r--gcc/tree.h7
-rw-r--r--gcc/varasm.c29
-rw-r--r--gnattools/ChangeLog5
-rw-r--r--gnattools/Makefile.in2
-rw-r--r--include/ChangeLog20
-rw-r--r--include/gomp-constants.h6
-rw-r--r--include/plugin-api.h29
-rw-r--r--libbacktrace/ChangeLog7
-rw-r--r--libbacktrace/elf.c3
-rw-r--r--libcc1/ChangeLog13
-rw-r--r--libcc1/Makefile.am3
-rw-r--r--libcc1/Makefile.in5
-rwxr-xr-xlibcc1/configure35
-rw-r--r--libcc1/configure.ac1
-rw-r--r--libcpp/ChangeLog95
-rw-r--r--libcpp/directives.c13
-rw-r--r--libcpp/expr.c2
-rw-r--r--libcpp/include/cpplib.h1
-rw-r--r--libcpp/include/line-map.h59
-rw-r--r--libcpp/init.c4
-rw-r--r--libcpp/internal.h3
-rw-r--r--libcpp/line-map.c186
-rw-r--r--libcpp/macro.c61
-rw-r--r--libcpp/po/ChangeLog16
-rw-r--r--libcpp/po/cpplib.pot165
-rw-r--r--libcpp/po/da.po12
-rw-r--r--libcpp/po/fr.po10
-rw-r--r--libcpp/po/sr.po10
-rw-r--r--libffi/ChangeLog45
-rw-r--r--libffi/Makefile.am28
-rw-r--r--libffi/Makefile.in22
-rw-r--r--libffi/acinclude.m4381
-rwxr-xr-xlibffi/configure444
-rw-r--r--libffi/configure.ac3
-rw-r--r--libffi/include/Makefile.in2
-rw-r--r--libffi/libffi.map.in78
-rw-r--r--libffi/libtool-version2
-rw-r--r--libffi/man/Makefile.in2
-rw-r--r--libffi/src/aarch64/ffitarget.h1
-rw-r--r--libffi/testsuite/Makefile.in2
-rw-r--r--libgcc/ChangeLog60
-rw-r--r--libgcc/Makefile.in6
-rw-r--r--libgcc/config.host4
-rw-r--r--libgcc/config/ft32/lib1funcs.S90
-rw-r--r--libgcc/config/ft32/t-ft324
-rw-r--r--libgcc/config/rs6000/extendkftf2-sw.c4
-rw-r--r--libgcc/config/rs6000/sfp-machine.h22
-rw-r--r--libgcc/config/sol2/gmon.c36
-rw-r--r--libgcc/configure24
-rw-r--r--libgcc/configure.ac20
-rw-r--r--libgcc/libgcc2.c7
-rw-r--r--libgcc/offloadstuff.c14
-rw-r--r--libgfortran/ChangeLog22
-rw-r--r--libgfortran/caf/libcaf.h4
-rw-r--r--libgfortran/caf/single.c17
-rw-r--r--libgfortran/io/list_read.c14
-rw-r--r--libgfortran/io/write_float.def26
-rw-r--r--libgo/go/reflect/all_test.go6
-rw-r--r--libgo/go/reflect/value.go8
-rw-r--r--libgo/go/syscall/socket.go7
-rw-r--r--libgo/go/syscall/socket_bsd.go7
-rw-r--r--libgo/go/syscall/socket_linux.go14
-rwxr-xr-xlibgo/mksysinfo.sh10
-rw-r--r--libgo/runtime/go-cgo.c4
-rw-r--r--libgo/runtime/proc.c2
-rw-r--r--libgomp/ChangeLog396
-rw-r--r--libgomp/libgomp.h2
-rw-r--r--libgomp/libgomp_g.h7
-rw-r--r--libgomp/oacc-mem.c6
-rw-r--r--libgomp/oacc-parallel.c10
-rw-r--r--libgomp/plugin/plugin-hsa.c25
-rw-r--r--libgomp/plugin/plugin-nvptx.c18
-rw-r--r--libgomp/target.c92
-rw-r--r--libgomp/task.c2
-rw-r--r--libgomp/testsuite/lib/libgomp.exp71
-rw-r--r--libgomp/testsuite/libgomp.c++/declare_target-1.C38
-rw-r--r--libgomp/testsuite/libgomp.c++/pr69555-1.C114
-rw-r--r--libgomp/testsuite/libgomp.c++/pr69555-2.C58
-rw-r--r--libgomp/testsuite/libgomp.c++/pr70376.C20
-rw-r--r--libgomp/testsuite/libgomp.c/examples-4/async_target-2.c2
-rw-r--r--libgomp/testsuite/libgomp.c/examples-4/device-1.c2
-rw-r--r--libgomp/testsuite/libgomp.c/examples-4/target-5.c2
-rw-r--r--libgomp/testsuite/libgomp.c/examples-4/target_data-6.c2
-rw-r--r--libgomp/testsuite/libgomp.c/examples-4/target_data-7.c2
-rw-r--r--libgomp/testsuite/libgomp.c/pr69805.c9
-rw-r--r--libgomp/testsuite/libgomp.c/target-25.c2
-rw-r--r--libgomp/testsuite/libgomp.fortran/examples-4/async_target-2.f902
-rw-r--r--libgomp/testsuite/libgomp.fortran/examples-4/device-1.f902
-rw-r--r--libgomp/testsuite/libgomp.fortran/examples-4/target-5.f902
-rw-r--r--libgomp/testsuite/libgomp.fortran/examples-4/target_data-6.f902
-rw-r--r--libgomp/testsuite/libgomp.fortran/examples-4/target_data-7.f902
-rw-r--r--libgomp/testsuite/libgomp.hsa.c/alloca-1.c25
-rw-r--r--libgomp/testsuite/libgomp.hsa.c/bitfield-1.c160
-rw-r--r--libgomp/testsuite/libgomp.hsa.c/builtins-1.c97
-rw-r--r--libgomp/testsuite/libgomp.hsa.c/c.exp42
-rw-r--r--libgomp/testsuite/libgomp.hsa.c/complex-1.c65
-rw-r--r--libgomp/testsuite/libgomp.hsa.c/formal-actual-args-1.c83
-rw-r--r--libgomp/testsuite/libgomp.hsa.c/function-call-1.c50
-rw-r--r--libgomp/testsuite/libgomp.hsa.c/get-level-1.c26
-rw-r--r--libgomp/testsuite/libgomp.hsa.c/gridify-1.c26
-rw-r--r--libgomp/testsuite/libgomp.hsa.c/gridify-2.c26
-rw-r--r--libgomp/testsuite/libgomp.hsa.c/gridify-3.c39
-rw-r--r--libgomp/testsuite/libgomp.hsa.c/gridify-4.c45
-rw-r--r--libgomp/testsuite/libgomp.hsa.c/memory-operations-1.c92
-rw-r--r--libgomp/testsuite/libgomp.hsa.c/pr69568.c41
-rw-r--r--libgomp/testsuite/libgomp.hsa.c/rotate-1.c39
-rw-r--r--libgomp/testsuite/libgomp.hsa.c/switch-1.c145
-rw-r--r--libgomp/testsuite/libgomp.hsa.c/switch-branch-1.c116
-rw-r--r--libgomp/testsuite/libgomp.oacc-c++/c++.exp33
-rw-r--r--libgomp/testsuite/libgomp.oacc-c++/template-reduction.C98
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/acc-on-device-2.c5
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/acc-on-device.c3
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/asyncwait-1.c434
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/clauses-1.c26
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/data-clauses-kernels-ipa-pta.c (renamed from libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-2.c)2
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/data-clauses-kernels.c2
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/data-clauses-parallel-ipa-pta.c (renamed from libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-2.c)2
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/data-clauses-parallel.c2
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/data-clauses.h (renamed from libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-1.c)92
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/deviceptr-1.c23
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/firstprivate-1.c114
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/firstprivate-2.c31
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/gang-static-1.c48
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/gang-static-2.c100
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/if-1.c354
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-1.c184
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-alias-ipa-pta-2.c2
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-alias-ipa-pta-3.c2
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-alias-ipa-pta.c2
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-2.c3
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-3.c3
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-2.c3
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-3.c3
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-4.c3
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-5.c3
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-6.c3
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq.c3
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-clauses.c62
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-collapse.c3
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-g.c2
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-mod-not-zero.c3
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-n.c3
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-nest.c3
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop.c3
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-reduction.c3
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/loop-auto-1.c5
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/loop-dim-default.c6
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/loop-g-1.c5
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/loop-g-2.c5
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/loop-gwv-1.c5
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-g-1.c5
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-gwv-1.c5
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-v-1.c5
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-v-2.c5
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c5
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-2.c5
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/loop-v-1.c5
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/loop-w-1.c5
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/loop-wv-1.c5
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/mode-transitions.c895
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-1.c38
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-2.c40
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-3.c42
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-4.c55
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/par-reduction-1.c22
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/par-reduction-2.c20
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-dims-2.c19
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-dims.c8
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-reduction.c72
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/pr70289.c13
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/pr70373.c20
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/private-variables.c953
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-1.c145
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-2.c163
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-3.c133
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-4.c85
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-5.c57
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-6.c36
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c480
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/reduction.h43
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/routine-1.c88
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/routine-4.c123
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/routine-g-1.c5
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/routine-gwv-1.c5
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/routine-v-1.c5
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/routine-w-1.c5
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/routine-wv-1.c5
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/routine-wv-2.c76
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/update-1-2.c282
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/update-1.c87
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/vector-loop.c2
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/vprop.c34
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/worker-single-1a.c28
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/worker-single-4.c28
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/worker-single-6.c46
-rw-r--r--libgomp/testsuite/libgomp.oacc-c/c.exp29
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/asyncwait-1.f90122
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/asyncwait-2.f9029
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/asyncwait-3.f9031
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/clauses-1.f90290
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/declare-1.f9041
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/default-1.f9054
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/firstprivate-1.f9042
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/gang-static-1.f9079
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/if-1.f90886
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/implicit-firstprivate-ref.f9042
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-2.f9531
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-data-2.f9537
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-data-enter-exit-2.f9537
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-data-enter-exit.f9535
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-data-update.f9535
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-data.f9535
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/kernels-loop.f9527
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/parallel-reduction.f9047
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/pr68813.f9019
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/pr70289.f9020
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/private-variables.f90544
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/reduction-1.f90470
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/reduction-2.f90346
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/reduction-3.f90344
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/reduction-4.f90108
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/reduction-5.f9086
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/reduction-6.f9086
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/reduction-7.f9088
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/update-1.f90242
-rw-r--r--libiberty/ChangeLog22
-rw-r--r--libiberty/cplus-dem.c22
-rw-r--r--libiberty/testsuite/demangle-expected10
-rw-r--r--libitm/ChangeLog8
-rw-r--r--libitm/beginend.cc6
-rw-r--r--libitm/config/s390/target.h3
-rw-r--r--libstdc++-v3/ChangeLog84
-rw-r--r--libstdc++-v3/acinclude.m44
-rw-r--r--libstdc++-v3/config/abi/pre/gnu.ver2
-rwxr-xr-xlibstdc++-v3/configure4
-rw-r--r--libstdc++-v3/doc/html/manual/using_macros.html5
-rw-r--r--libstdc++-v3/doc/xml/manual/using.xml10
-rw-r--r--libstdc++-v3/include/Makefile.am2
-rw-r--r--libstdc++-v3/include/Makefile.in2
-rw-r--r--libstdc++-v3/include/bits/concept_check.h3
-rw-r--r--libstdc++-v3/include/bits/specfun.h846
-rw-r--r--libstdc++-v3/include/bits/stl_pair.h35
-rw-r--r--libstdc++-v3/include/c_global/cstdarg1
-rw-r--r--libstdc++-v3/include/c_global/cstddef5
-rw-r--r--libstdc++-v3/include/experimental/tuple2
-rw-r--r--libstdc++-v3/include/tr1/cmath187
-rw-r--r--libstdc++-v3/include/tr1/complex12
-rw-r--r--libstdc++-v3/libsupc++/eh_alloc.cc19
-rw-r--r--libstdc++-v3/src/Makefile.am2
-rw-r--r--libstdc++-v3/src/Makefile.in2
-rw-r--r--libstdc++-v3/src/c++11/thread.cc8
-rw-r--r--libstdc++-v3/testsuite/18_support/free_eh_pool.cc35
-rw-r--r--libstdc++-v3/testsuite/20_util/pair/70437.cc37
-rw-r--r--libstdc++-v3/testsuite/30_threads/thread/70503.cc38
-rw-r--r--libstdc++-v3/testsuite/tr1/headers/c++200x/complex.cc2
-rw-r--r--libstdc++-v3/testsuite/tr1/headers/c++200x/math.cc25
-rw-r--r--lto-plugin/ChangeLog14
-rw-r--r--lto-plugin/lto-plugin.c140
1451 files changed, 60235 insertions, 28370 deletions
diff --git a/ChangeLog b/ChangeLog
index 4ea16fa..1cc46e5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,41 @@
+2016-04-12 Andre Vieira <andre.simoesdiasvieira@arm.com>
+
+ * MAINTAINERS (Write After Approval): Add myself.
+
+2016-04-09 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ * MAINTAINERS (Fortran maintainer): Remove myself.
+
+2016-04-04 Bill Seurer <seurer@linux.vnet.ibm.com>
+
+ * MAINTAINERS (Write After Approval): Add myself.
+
+2016-03-29 Kelvin Nilsen <kdnilsen@linux.vnet.ibm.com>
+
+ * MAINTAINERS (Write After Approval): Add myself.
+
+2016-03-17 Cary Coutant <ccoutant@gmail.com>
+
+ Sync with binutils-gdb:
+
+ 2016-03-17 Cary Coutant <ccoutant@gmail.com>
+
+ * configure.ac: Add mips and s390 to the gold target check.
+ * configure: Regenerate.
+
+2016-03-01 DJ Delorie <dj@redhat.com>
+
+ * MAINTAINERS (mep): Remove myself as MeP maintainer.
+
+2016-02-22 David Malcolm <dmalcolm@redhat.com>
+
+ * MAINTAINERS (libcpp): Add myself.
+ (diagnostic messages): Likewise.
+
+2016-02-20 Tom de Vries <tom@codesourcery.com>
+
+ * MAINTAINERS: Fix whitespace.
+
2016-02-02 Claudiu Zissulescu <claziss@synopsys.com>
* MAINTAINERS (Write After Approval): Add myself.
@@ -169,7 +207,7 @@
2015-09-20 Kai Tietz <ktietz70@googlemail.com>
- * MAINTAINERS: Update email.
+ * MAINTAINERS: Update email.
2015-09-14 Bernd Schmidt <bschmidt@redhat.com>
@@ -239,7 +277,7 @@
* MAINTAINERS (Write After Approval): Add myself.
-2015-07-28 Ben Elliston <bje@gnu.org>
+2015-07-28 Ben Elliston <bje@gnu.org>
* config.sub, config.guess: Import from upstream.
@@ -991,7 +1029,7 @@
* MAINTAINERS (Write After Approval): Add myself.
-2014-08-15 Ilya Tocar <tocarip@gmail.com>
+2014-08-15 Ilya Tocar <tocarip@gmail.com>
* MAINTAINERS (Write After Approval): Add myself.
@@ -1145,7 +1183,7 @@
2014-04-04 Eric Botcazou <ebotcazou@adacore.com>
PR bootstrap/60620
- * Makefile.def (dependencies): Make gnattools depend on libstdc++-v3.
+ * Makefile.def (dependencies): Make gnattools depend on libstdc++-v3.
* Makefile.in: Regenerate.
2014-03-28 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
@@ -1281,7 +1319,7 @@
2013-10-29 Balaji V. Iyer <balaji.v.iyer@intel.com>
- * Makefile.def: Add libcilkrts to target_modules. Make libcilkrts
+ * Makefile.def: Add libcilkrts to target_modules. Make libcilkrts
depend on libstdc++ and libgcc.
* configure: Regenerate.
* configure.ac: Added libcilkrts to target binaries. Also, restrict
@@ -10893,7 +10931,6 @@ Fri Jun 8 11:14:02 2001 Andrew Cagney <cagney@b1.cygnus.com>
* configure.in (c4x, c5x, tic54x): Move after ARM targets.
-
2000-08-20 Doug Evans <dje@casey.transmeta.com>
* Makefile.in (ALL_MODULES): Add all-cgen.
@@ -18304,7 +18341,6 @@ Tue Jan 19 08:26:07 1993 Ian Lance Taylor (ian@cygnus.com)
* Makefile.in (gcc-no-fixedincludes): Made to work with current
gcc Makefile.
-
Fri Jan 15 10:27:02 1993 Ian Lance Taylor (ian@cygnus.com)
* Makefile.in (GCC_FLAGS_TO_PASS): New variable.
@@ -18331,7 +18367,6 @@ Wed Jan 6 11:02:10 1993 Fred Fish (fnf@cygnus.com)
the one used in gcc/Makefile.in, so that a null expansion doesn't
override the one needed to build gcc with a native cc.
-
Tue Jan 5 07:55:12 1993 Ken Raeburn (raeburn@cambridge.cygnus.com)
* configure: Accept -with arguments.
diff --git a/MAINTAINERS b/MAINTAINERS
index a7f2beb..a9dec34 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -75,7 +75,6 @@ m68k port (?) Jeff Law <law@redhat.com>
m68k port Andreas Schwab <schwab@linux-m68k.org>
m68k-motorola-sysv port Philippe De Muyter <phdm@macqel.be>
mcore port Nick Clifton <nickc@redhat.com>
-mep port DJ Delorie <dj@redhat.com>
microblaze Michael Eager <eager@eagercon.com>
mips port Catherine Moore <clm@codesourcery.com>
mips port Eric Christopher <echristo@gmail.com>
@@ -164,6 +163,7 @@ objective-c/c++ Iain Sandoe <iain@codesourcery.com>
libbacktrace Ian Lance Taylor <ian@airs.com>
libcpp Per Bothner <per@bothner.com>
libcpp All C and C++ front end maintainers
+libcpp David Malcolm <dmalcolm@redhat.com>
fp-bit Ian Lance Taylor <ian@airs.com>
libdecnumber Ben Elliston <bje@gnu.org>
libgcc Ian Lance Taylor <ian@airs.com>
@@ -217,6 +217,7 @@ basic block reordering Jason Eckhardt <jle@rice.edu>
i18n Philipp Thomas <pth@suse.de>
i18n Joseph Myers <joseph@codesourcery.com>
diagnostic messages Dodji Seketeli <dodji@redhat.com>
+diagnostic messages David Malcolm <dmalcolm@redhat.com>
build machinery (*.in) Paolo Bonzini <bonzini@gnu.org>
build machinery (*.in) DJ Delorie <dj@redhat.com>
build machinery (*.in) Nathanael Nerode <neroden@gcc.gnu.org>
@@ -284,7 +285,6 @@ Fortran François-Xavier Coudert <fxcoudert@gcc.gnu.org>
Fortran Jerry DeLisle <jvdelisle@gcc.gnu.org>
Fortran Erik Edelmann <erik.edelmann@iki.fi>
Fortran Daniel Franke <franke.daniel@gmail.com>
-Fortran Steven G. Kargl <sgk@troutmask.apl.washington.edu>
Fortran Thomas König <tkoenig@gcc.gnu.org>
Fortran Daniel Kraft <d@domob.eu>
Fortran Toon Moene <toon@moene.org>
@@ -395,7 +395,7 @@ Changpeng Fang <changpeng.fang@amd.com>
Li Feng <nemokingdom@gmail.com>
Max Filippov <jcmvbkbc@gmail.com>
Thomas Fitzsimmons <fitzsim@redhat.com>
-Alexander Fomin <afomin.mailbox@gmail.com>
+Alexander Fomin <afomin.mailbox@gmail.com>
Brian Ford <ford@vss.fsi.com>
John Freeman <jfreeman08@gmail.com>
Nathan Froyd <froydnj@gcc.gnu.org>
@@ -516,6 +516,7 @@ Quentin Neill <quentin.neill.gnu@gmail.com>
Adam Nemet <adambnemet@gmail.com>
Thomas Neumann <tneumann@users.sourceforge.net>
Dan Nicolaescu <dann@ics.uci.edu>
+Kelvin Nilsen <kdnilsen@linux.vnet.ibm.com>
James Norris <jnorris@codesourcery.com>
Diego Novillo <dnovillo@google.com>
Dorit Nuzman <dorit@il.ibm.com>
@@ -564,6 +565,7 @@ Martin Sebor <msebor@gcc.gnu.org>
Dodji Seketeli <dodji@gcc.gnu.org>
Svein Seldal <svein@dev.seldal.com>
Thiemo Seufer <ths@networkno.de>
+Bill Seurer <seurer@linux.vnet.ibm.com>
Marcus Shawcroft <marcus.shawcroft@arm.com>
Tim Shen <timshen@google.com>
David Sherwood <david.sherwood@arm.com>
@@ -604,6 +606,7 @@ Joost VandeVondele <joost.vandevondele@mat.ethz.ch>
Andre Vehreschild <vehre@gmx.de>
Alex Velenko <alex.velenko@arm.com>
Ilya Verbin <iverbin@gmail.com>
+Andre Vieira <andre.simoesdiasvieira@arm.com>
Kugan Vivekanandarajah <kuganv@linaro.org>
Ville Voutilainen <ville.voutilainen@gmail.com>
Tom de Vries <tom@codesourcery.com>
diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog
index 365038e..6896c67 100644
--- a/boehm-gc/ChangeLog
+++ b/boehm-gc/ChangeLog
@@ -1,3 +1,14 @@
+2016-03-29 Samuel Thibault <samuel.thibault@ens-lyon.org>
+
+ * configure.host: Set gc_use_mmap on *-kfreebsd-gnu* and *-gnu*.
+ * include/private/gcconfig.h [HURD && USE_MMAP]: Define
+ USE_MMAP_ANON.
+
+2016-03-16 Andreas Schwab <schwab@suse.de>
+
+ * include/private/gcconfig.h [AARCH64] (ALIGNMENT, CPP_WORDSZ):
+ Define for __ILP32__.
+
2015-10-09 David Malcolm <dmalcolm@redhat.com>
* testsuite/lib/boehm-gc.exp: Load multiline.exp before
diff --git a/boehm-gc/configure.host b/boehm-gc/configure.host
index 97f4dac..229a038 100644
--- a/boehm-gc/configure.host
+++ b/boehm-gc/configure.host
@@ -41,7 +41,7 @@ else
fi
case "${host}" in
- *-linux*)
+ *-linux*|*-kfreebsd-gnu*|*-gnu*)
gc_use_mmap=yes
;;
esac
diff --git a/boehm-gc/include/private/gcconfig.h b/boehm-gc/include/private/gcconfig.h
index 7e081d9..44b9d7d 100644
--- a/boehm-gc/include/private/gcconfig.h
+++ b/boehm-gc/include/private/gcconfig.h
@@ -1854,9 +1854,14 @@
# endif
# ifdef AARCH64
-# define CPP_WORDSZ 64
+# ifdef __ILP32__
+# define ALIGNMENT 4
+# define CPP_WORDSZ 32
+# else
+# define ALIGNMENT 8
+# define CPP_WORDSZ 64
+# endif
# define MACH_TYPE "AARCH64"
-# define ALIGNMENT 8
# ifndef HBLKSIZE
# define HBLKSIZE 4096
# endif
@@ -2132,7 +2137,7 @@
# endif
# endif
-#if defined(LINUX) && defined(USE_MMAP)
+#if (defined(LINUX) || defined(HURD)) && defined(USE_MMAP)
/* The kernel may do a somewhat better job merging mappings etc. */
/* with anonymous mappings. */
# define USE_MMAP_ANON
diff --git a/configure b/configure
index 89c863c..35f231e 100755
--- a/configure
+++ b/configure
@@ -2973,7 +2973,7 @@ case "${ENABLE_GOLD}" in
# Check for target supported by gold.
case "${target}" in
i?86-*-* | x86_64-*-* | sparc*-*-* | powerpc*-*-* | arm*-*-* \
- | aarch64*-*-* | tilegx*-*-*)
+ | aarch64*-*-* | tilegx*-*-* | mips*-*-* | s390*-*-*)
configdirs="$configdirs gold"
if test x${ENABLE_GOLD} = xdefault; then
default_ld=gold
diff --git a/configure.ac b/configure.ac
index 321b908..74bf58a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -351,7 +351,7 @@ case "${ENABLE_GOLD}" in
# Check for target supported by gold.
case "${target}" in
i?86-*-* | x86_64-*-* | sparc*-*-* | powerpc*-*-* | arm*-*-* \
- | aarch64*-*-* | tilegx*-*-*)
+ | aarch64*-*-* | tilegx*-*-* | mips*-*-* | s390*-*-*)
configdirs="$configdirs gold"
if test x${ENABLE_GOLD} = xdefault; then
default_ld=gold
diff --git a/contrib/ChangeLog b/contrib/ChangeLog
index f9e1126..54f9d5e 100644
--- a/contrib/ChangeLog
+++ b/contrib/ChangeLog
@@ -1,3 +1,20 @@
+2016-03-07 Martin Sebor <msebor@redhat.com>
+
+ * check_GNU_style.sh (color): New global variable.
+ Add checks for trailing operators and spaces before left brackets.
+ Tightened up a check for a trailing left curly brace.
+ (g, ag, vg): Use color.
+ (col): Don't complain about excessively long lines with DejaGnu
+ directives.
+
+2016-03-06 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
+
+ * mklog: Look for the ChangeLog file in $cwd.
+
+2016-02-26 Joel Sherrill <joel@rtems.org>
+
+ * config-list.mk: Add aarch64-rtems and x86_64-rtems
+
2016-01-19 Jonathan Wakely <jwakely@redhat.com>
* uninclude: Fix third argument to gensub.
diff --git a/contrib/check_GNU_style.sh b/contrib/check_GNU_style.sh
index ac54ed0..fbf6cb2 100755
--- a/contrib/check_GNU_style.sh
+++ b/contrib/check_GNU_style.sh
@@ -1,7 +1,7 @@
#!/bin/sh
# Checks some of the GNU style formatting rules in a set of patches.
-# Copyright (C) 2010, 2012 Free Software Foundation, Inc.
+# Copyright (C) 2010, 2012, 2016 Free Software Foundation, Inc.
# Contributed by Sebastian Pop <sebastian.pop@amd.com>
# This program is free software; you can redistribute it and/or modify
@@ -15,8 +15,11 @@
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+# along with this program; if not, see the file COPYING3. If not,
+# see <http://www.gnu.org/licenses/>.
+
+# Set to empty in the environment to override.
+: ${color:---color=always}
usage() {
cat <<EOF
@@ -100,7 +103,7 @@ g (){
local found=false
cat $inp \
- | egrep --color=always -- "$arg" \
+ | egrep $color -- "$arg" \
> "$tmp" && found=true
if $found; then
@@ -117,8 +120,8 @@ ag (){
local found=false
cat $inp \
- | egrep --color=always -- "$arg1" \
- | egrep --color=always -- "$arg2" \
+ | egrep $color -- "$arg1" \
+ | egrep $color -- "$arg2" \
> "$tmp" && found=true
if $found; then
@@ -136,7 +139,7 @@ vg (){
local found=false
cat $inp \
| egrep -v -- "$varg" \
- | egrep --color=always -- "$arg" \
+ | egrep $color -- "$arg" \
> "$tmp" && found=true
if $found; then
@@ -171,10 +174,11 @@ col (){
# Expand tabs to spaces according to tab positions.
# Keep long lines, make short lines empty. Print the part past 80 chars
# in red.
+ # Don't complain about dg-xxx directives in tests.
cat "$tmp" \
| sed 's/^[0-9]*:+//' \
| expand \
- | awk '{ \
+ | awk '$0 !~ /{[[:space:]]*dg-(error|warning|message)[[:space:]]/ { \
if (length($0) > 80) \
printf "%s\033[1;31m%s\033[0m\n", \
substr($0,1,80), \
@@ -201,6 +205,7 @@ col (){
done
}
+
col 'Lines should not exceed 80 characters.'
g 'Blocks of 8 spaces should be replaced with tabs.' \
@@ -221,13 +226,20 @@ g 'Dot, space, space, end of comment.' \
g 'Sentences should end with a dot. Dot, space, space, end of the comment.' \
'[[:alnum:]][[:blank:]]*\*/'
-vg 'There should be exactly one space between function name and parentheses.' \
+vg 'There should be exactly one space between function name and parenthesis.' \
'\#define' \
'[[:alnum:]]([[:blank:]]{2,})?\('
-g 'There should be no space before closing parentheses.' \
+g 'There should be no space before a left square bracket.' \
+ '[[:alnum:]][[:blank:]]+\['
+
+g 'There should be no space before closing parenthesis.' \
'[[:graph:]][[:blank:]]+\)'
-ag 'Braces should be on a separate line.' \
- '\{' \
- 'if[[:blank:]]\(|while[[:blank:]]\(|switch[[:blank:]]\('
+# This will give false positives for C99 compound literals.
+g 'Braces should be on a separate line.' \
+ '(\)|else)[[:blank:]]*{'
+
+# Does this apply to definition of aggregate objects?
+g 'Trailing operator.' \
+ '(([^a-zA-Z_]\*)|([-%<=&|^?])|([^*]/)|([^:][+]))$'
diff --git a/contrib/config-list.mk b/contrib/config-list.mk
index 0f15464..6a83a84 100644
--- a/contrib/config-list.mk
+++ b/contrib/config-list.mk
@@ -11,7 +11,7 @@ TEST=all-gcc
# nohup nice make -j25 -l36 -f ../gcc/contrib/config-list.mk > make.out 2>&1 &
#
# v850e1-elf is rejected by config.sub
-LIST = aarch64-elf aarch64-linux-gnu \
+LIST = aarch64-elf aarch64-linux-gnu aarch64-rtems \
alpha-linux-gnu alpha-freebsd6 alpha-netbsd alpha-openbsd \
alpha64-dec-vms alpha-dec-vms am33_2.0-linux \
arc-elf32OPT-with-cpu=arc600 arc-elf32OPT-with-cpu=arc700 \
@@ -76,7 +76,8 @@ LIST = aarch64-elf aarch64-linux-gnu \
x86_64-pc-linux-gnuOPT-with-fpmath=avx \
x86_64-elfOPT-with-fpmath=sse x86_64-freebsd6 x86_64-netbsd \
x86_64-knetbsd-gnuOPT-enable-obsolete x86_64-w64-mingw32 \
- x86_64-mingw32OPT-enable-sjlj-exceptions=yes xstormy16-elf xtensa-elf \
+ x86_64-mingw32OPT-enable-sjlj-exceptions=yes x86_64-rtems \
+ xstormy16-elf xtensa-elf \
xtensa-linux \
i686-interix3OPT-enable-obsolete
diff --git a/contrib/mklog b/contrib/mklog
index 455614b..6112628 100755
--- a/contrib/mklog
+++ b/contrib/mklog
@@ -104,7 +104,7 @@ sub get_clname ($) {
my $dirname = $_[0];
while ($dirname) {
my $clname = "$dirname/ChangeLog";
- if (-f "$gcc_root/$clname") {
+ if (-f "$gcc_root/$clname" || -f "$clname") {
my $relname = substr ($_[0], length ($dirname) + 1);
return ($clname, $relname);
} else {
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6ca3c04..e4d0b0f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,2873 @@
+2016-04-12 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR target/70630
+ * config/sparc/sparc.c (sparc_compute_frame_size): Add parentheses.
+
+2016-04-12 Jakub Jelinek <jakub@redhat.com>
+
+ * config/i386/i386.c (ix86_simd_clone_compute_vecsize_and_simdlen):
+ Bump the upper SIMDLEN limits, so that if the return type or
+ characteristic type if the return type is void can be passed in
+ all available SSE2/AVX/AVX2/AVX512-F registers, the SIMDLEN is
+ allowed.
+
+2016-04-12 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/70640
+ * config/rs6000/rs6000.md (ieee_128bit_vsx_neg<mode>2_internal):
+ Do not use "=" constraint on an input constraint.
+ (ieee_128bit_vsx_abs<mode>2_internal): Likewise.
+ (ieee_128bit_vsx_nabs<mode>2_internal): Likewise.
+ (ieee_128bit_vsx_nabs<mode>2): Correct splitter so that it
+ generates (neg (abs ...)) instead of (abs ...).
+
+2016-04-12 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/70596
+ * lra-spills.c (spill_pseudos): Don't delete debug insns, instead
+ just invalidate LRA data and reset them. Adjust dump wording.
+
+2016-04-12 Martin Liska <mliska@suse.cz>
+
+ Revert
+ 2016-03-30 Jan Hubicka <hubicka@ucw.cz>
+
+ * tree-ssa-loop-niter.c (idx_infer_loop_bounds): We can't get realistic
+ estimates here.
+ * tree-ssa-loop-unswitch.c (tree_unswitch_single_loop): Use also
+ max_loop_iterations_int.
+ (tree_unswitch_outer_loop): Likewise.
+ * tree-ssa-loop-ivopts.c (avg_loop_niter): Likewise.
+ * tree-vect-loop.c (vect_analyze_loop_2): Likewise.
+
+2016-04-12 Tom de Vries <tom@codesourcery.com>
+
+ PR tree-optimization/68756
+ * graphite-isl-ast-to-gimple.c (copy_cond_phi_args): Use new_expr
+ instead of new_name.
+
+2016-04-12 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/70602
+ * tree-sra.c (generate_subtree_copies): Don't write anything into
+ constant pool decls.
+
+ * omp-low.c (lower_omp_target): Use GOMP_MAP_FIRSTPRIVATE_INT
+ regardless whether there are depend clauses or not.
+
+2016-04-11 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/70381
+ * config/rs6000/rs6000.c (rs6000_opt_masks): Disable using the
+ target attribute and pragma from changing the -mfloat128
+ and -mfloat128-hardware options.
+
+ * doc/extend.texi (Additional Floating Types): Document PowerPC
+ __float128 restrictions.
+
+2016-04-11 James Greenhalgh <james.greenhalgh@arm.com>
+
+ PR target/70133
+ * config/aarch64/driver-aarch64.c
+ (aarch64_get_extension_string_for_isa_flags): New.
+ (arch_extension): Rename to...
+ (aarch64_arch_extension): ...This.
+ (ext_to_feat_string): Rename to...
+ (aarch64_extensions): ...This.
+ (aarch64_core_data): Keep track of architecture extension flags.
+ (cpu_data): Rename to...
+ (aarch64_cpu_data): ...This.
+ (aarch64_arch_driver_info): Keep track of architecture extension
+ flags.
+ (get_arch_name_from_id): Rename to...
+ (get_arch_from_id): ...This, change return type.
+ (host_detect_local_cpu): Update and reformat for renames, handle
+ extensions through common infrastructure.
+
+2016-04-11 James Greenhalgh <james.greenhalgh@arm.com>
+
+ PR target/70133
+ * config/aarch64/aarch64-common.c (aarch64_option_extension): Keep
+ track of a canonical flag name.
+ (all_extensions): Likewise.
+ (arch_to_arch_name): Also track extension flags enabled by the arch.
+ (all_architectures): Likewise.
+ (aarch64_parse_extension): Move to here.
+ (aarch64_get_extension_string_for_isa_flags): Take a new argument,
+ rework.
+ (aarch64_rewrite_selected_cpu): Update for above change.
+ * config/aarch64/aarch64-option-extensions.def: Rework the way flags
+ are handled, such that the single explicit value enabled by an
+ extension is kept seperate from the implicit values it also enables.
+ * config/aarch64/aarch64-protos.h (aarch64_parse_opt_result): Move
+ to here.
+ (aarch64_parse_extension): New.
+ * config/aarch64/aarch64.c (aarch64_parse_opt_result): Move from
+ here to config/aarch64/aarch64-protos.h.
+ (aarch64_parse_extension): Move from here to
+ common/config/aarch64/aarch64-common.c.
+ (aarch64_option_print): Update.
+ (aarch64_declare_function_name): Likewise.
+ (aarch64_start_file): Likewise.
+ * config/aarch64/driver-aarch64.c (arch_extension): Keep track of
+ the canonical flag for extensions.
+ * config.gcc (aarch64*-*-*): Extend regex for capturing extension
+ flags.
+
+2016-04-11 James Greenhalgh <james.greenhalgh@arm.com>
+
+ * config/aarch64/aarch64.h (AARCH64_FL_FOR_ARCH8_1): Also add
+ AARCH64_FL_CRC.
+
+2016-04-09 Tom de Vries <tom@codesourcery.com>
+
+ PR tree-optimization/68953
+ * graphite-sese-to-poly.c (pdr_add_memory_accesses): Order accesses from
+ first to last subscript.
+
+2016-04-09 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/70586
+ * tree-ssa-ifcombine.c (bb_no_side_effects_p): Return false
+ for any calls.
+
+2016-04-08 Cesar Philippidis <cesar@codesourcery.com>
+
+ PR lto/70289
+ PR ipa/70348
+ PR tree-optimization/70373
+ PR middle-end/70533
+ PR middle-end/70534
+ PR middle-end/70535
+ * gimplify.c (gimplify_adjust_omp_clauses): Add or adjust data
+ clauses for acc parallel reductions as necessary. Error on those
+ that are private.
+ * omp-low.c (scan_sharing_clauses): Don't install variables which
+ are used in acc parallel reductions.
+ (lower_rec_input_clauses): Remove dead code.
+ (lower_oacc_reductions): Add support for reference reductions.
+ (lower_reduction_clauses): Remove dead code.
+ (lower_omp_target): Don't remap variables appearing in acc parallel
+ reductions.
+ * tree.h (OMP_CLAUSE_MAP_IN_REDUCTION): New macro.
+
+2016-04-08 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/70593
+ * tree-ssa-coalesce.c (build_ssa_conflict_graph): For stmt
+ with multiple SSA_NAME defs, force the outputs other than first
+ to be live before calling live_track_process_def on each output.
+
+ PR rtl-optimization/70574
+ * fwprop.c (forward_propagate_and_simplify): Don't add
+ REG_EQUAL note if DF_REF_REG (use) is a paradoxical subreg.
+ (try_fwprop_subst): Don't add REG_EQUAL note if there are any
+ paradoxical subregs within *loc.
+
+2016-04-08 Thomas Schwinge <thomas@codesourcery.com>
+
+ * config/arc/arc.h (LINK_COMMAND_SPEC): Use gt to ignore
+ -ftree-parallelize-loops={0,1}.
+ * config/darwin.h (LINK_COMMAND_SPEC_A): Likewise.
+ * config/i386/mingw32.h (GOMP_SELF_SPECS): Likewise.
+ * config/ia64/hpux.h (LIB_SPEC): Likewise.
+ * config/pa/pa-hpux11.h (LIB_SPEC): Likewise.
+ * config/pa/pa64-hpux.h (LIB_SPEC): Likewise.
+
+2016-04-08 Maxim Ostapenko <m.ostapenko@samsung.com>
+
+ PR sanitizer/70541
+ * asan.c (instrument_derefs): If we get unknown location, extract it
+ with EXPR_LOCATION.
+ (maybe_instrument_call): Instrument gimple_call's arguments if needed.
+
+2016-04-08 Tom de Vries <tom@codesourcery.com>
+
+ * omp-low.c (lower_omp_target): Set TREE_NO_WARNING for oacc
+ implicit firstprivate clause.
+
+2016-04-08 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ PR target/70566
+ * config/arm/thumb2.md (tst + branch-> lsls + branch
+ peephole below *orsi_not_shiftsi_si): Require that condition
+ register is dead after the peephole.
+ (second peephole after the above): Likewise.
+
+2016-04-08 Alan Modra <amodra@gmail.com>
+
+ PR target/70117
+ * builtins.c (fold_builtin_classify): For IBM extended precision,
+ look at just the high-order double to test for NaN.
+ (fold_builtin_interclass_mathfn): Similarly for Inf. For isnormal
+ test just the high double for Inf but both doubles for subnormal
+ limit.
+
+2016-04-07 Jakub Jelinek <jakub@redhat.com>
+
+ * cgraph.h (struct cgraph_simd_clone): Add mask_mode field.
+ * omp-low.c (simd_clone_init_simd_arrays, simd_clone_adjust): Handle
+ node->simdclone->mask_mode != VOIDmode masks.
+ (simd_clone_adjust_argument_types): Likewise. Move sc var definition
+ earlier, use it instead of node->simdclone.
+ * config/i386/i386.c (ix86_simd_clone_compute_vecsize_and_simdlen):
+ Set clonei->mask_mode.
+
+2016-04-06 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c/70436
+ * parser.c (cp_parser_iteration_statement): New parameter IF_P.
+ Pass it through to cp_parser_already_scoped_statement.
+ (cp_parser_already_scoped_statement): New parameter IF_P. Pass
+ it through to cp_parser_statement.
+ (cp_parser_statement): Pass IF_P through to
+ cp_parser_iteration_statement.
+ (cp_parser_pragma): Adjust call to
+ cp_parser_iteration_statement.
+
+2016-04-06 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c/70436
+ * gimplify.c (gimplify_omp_ordered): Add explicit braces to
+ resolve a future -Wparentheses warning.
+ * omp-low.c (scan_sharing_clauses): Likewise.
+ * tree-parloops.c (eliminate_local_variables): Likewise.
+
+2016-04-06 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR rtl-optimization/70398
+ * lra-constraints.c (process_address_1): Check zero scale and code
+ for reloading with zero scale.
+
+2016-04-06 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/sse.md (shuffletype): Add V32HI and V4TI modes.
+ (ssescalarsize): Add V8SF, V4SF, V4DF and V2DF modes.
+
+2016-04-06 Jakub Jelinek <jakub@redhat.com>
+
+ * config/i386/i386.c (ix86_simd_clone_compute_vecsize_and_simdlen):
+ Add support for AVX512F clones, include them by default for
+ exported OpenMP declare simd functions. For AVX2 allow simdlen 32
+ and use it if charasteric type is 8-bit, for AVX512F allow simdlen
+ up to 128.
+
+ PR middle-end/70550
+ * tree.h (OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT): Define.
+ * gimplify.c (gimplify_adjust_omp_clauses_1): Set it for implicit
+ firstprivate clauses.
+ * omp-low.c (lower_send_clauses): Set TREE_NO_WARNING for
+ OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT !by_ref vars in task contexts.
+ (lower_omp_target): Set TREE_NO_WARNING for
+ non-addressable possibly uninitialized vars which are copied into
+ addressable temporaries or copied for GOMP_MAP_FIRSTPRIVATE_INT.
+
+2016-04-05 John David Anglin <danglin@gcc.gnu.org>
+
+ * config/pa/predicates.md (integer_store_memory_operand): Accept
+ REG+D operands with a large offset when reload_in_progress is true.
+ (floating_point_store_memory_operand): Likewise.
+
+2016-04-05 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/70336
+ * match.pd (nested int casts): Limit to GIMPLE.
+
+2016-04-05 Jan Hubicka <hubicka@ucw.cz>
+
+ PR ipa/66223
+ * ipa-devirt.c (maybe_record_node): Fix comment; use
+ SANITIZE_UNREACHABLE instead of SANITIZE_UNDEFINED.
+
+2016-04-05 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/70542
+ * ree.c (add_removable_extension): For VECTOR_MODE_P punt
+ if there are any uses other than insn or debug insns.
+
+2016-04-05 Marc Glisse <marc.glisse@inria.fr>
+ Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/70509
+ * simplify-rtx.c (simplify_binary_operation_1) <case VEC_SELECT>:
+ Shift HOST_WIDE_INT_1U instead of 1.
+
+2016-04-05 Zdenek Sojka <zsojka@seznam.cz>
+
+ PR tree-optimization/70509
+ * tree-ssa-forwprop.c (simplify_bitfield_ref): Use bitsize_int instead
+ of the vector base type for index.
+
+2016-04-05 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/70510
+ * config/i386/sse.md (iptr): Add V64QI, V32HI, V16SI and V8DI modes.
+
+2016-04-05 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/70526
+ * tree-sra.c (build_ref_for_offset): Use prev_base to
+ extract the alias pointer type.
+
+2016-04-05 Richard Biener <rguenther@suse.de>
+
+ * dse.c (struct store_info): Remove alias_set member.
+ (struct read_info_type): Likewise.
+ (clear_alias_group, clear_alias_mode_table, clear_alias_mode_holder,
+ spill_deleted, clear_alias_set_lookup): Remove.
+ (get_group_info): Remove dead base == NULL_RTX case.
+ (dse_step0): Remove initialization of removed variables.
+ (delete_dead_store_insn): Reomve alias set dumping.
+ (free_read_records): Remove alias_set handling.
+ (canon_address): Remove alias_set_out parameter.
+ (record_store): Remove spill_alias_set, it's always zero.
+ (check_mem_read_rtx): Likewise.
+ (dse_step2): Rename from ...
+ (dse_step2_nospill): ... this. Adjust.
+ (scan_stores): Rename from ...
+ (scan_stores_nospill): ... this.
+ (scan_reads): Rename from ...
+ (scan_reads_nospill): ... this.
+ (scan_stores_spill, scan_reads_spill): Remove.
+ (dse_step3_scan): Remove for_spills argument which is always false.
+ (dse_step3): Likewise.
+ (dse_step5): Rename from ...
+ (dse_step5_nospill): ... this. Remove alias_set handling.
+ (rest_of_handle_dse): Adjust.
+
+2016-04-05 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/70525
+ * config/i386/sse.md (*andnot<mode>3): Simplify assertions.
+ Use vpandn<ssemodesuffix> for V16SI/V8DImode, vpandnq for
+ V32HI/V64QImode, don't use <mask_operand3_1>, fix up formatting.
+ (*andnot<mode>3_mask): Remove insn with VI12_AVX512VL iterator.
+
+2016-04-05 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/70499
+ * gimplify-me.c (gimple_regimplify_operands): Do not rewrite
+ non-register type temporaries into SSA.
+
+2016-04-04 Jan Hubicka <hubicka@ucw.cz>
+
+ PR ipa/66223
+ * ipa-devirt.c (maybe_record_node): Do not optimize cxa_pure_virtual
+ calls when sanitizing.
+ (possible_polymorphic_call_target_p): Fix formatting.
+
+2016-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+ Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/70457
+ * tree-inline.c (estimate_num_insn): Use gimple_call_builtin_p
+ to ensure a call statement is compatible with a built-in's
+ prototype.
+ * tree-ssa-math-opts.c (pass_optimize_windening_mul::execute):
+ Likewise.
+
+2016-04-04 Richard Biener <rguenther@suse.de>
+
+ PR rtl-optimization/70484
+ * rtl.h (canon_output_dependence): Declare.
+ * alias.c (canon_output_dependence): New function.
+ * dse.c (record_store): Use canon_output_dependence rather
+ than canon_true_dependence.
+
+2016-03-30 Jan Hubicka <hubicka@ucw.cz>
+
+ PR ipa/68881
+ * cgraph.h (symtab_node::copy_visibility_from): New function.
+ * symtab.c (symtab_node::copy_visibility_from): New function.
+ * ipa-visibility.c (optimize_weakref): New function.
+ (function_and_variable_visibility): Use it.
+
+2016-04-04 Martin Liska <mliska@suse.cz>
+
+ PR hsa/70402
+ * hsa-gen.c (gen_hsa_insns_for_switch_stmt): Guard index
+ value that is really in range handled by SBR instruction.
+ * hsa-brig.c (emit_switch_insn): Do not emit unconditional jump.
+ * hsa-dump.c (dump_hsa_insn_1): Do not dump default BB.
+ * hsa.h (hsa_insn_sbr::m_default_bb): Remove field.
+
+2016-04-03 Oleg Endo <olegendo@gcc.gnu.org>
+
+ PR target/70416
+ PR target/67391
+ * config/sh/sh.md (*addsi3): Allow pattern when reload_in_progress is
+ set, but not for SP_REG operands.
+
+2016-04-02 Martin Sebor <msebor@redhat.com>
+
+ PR c++/67376
+ * fold-const.c (maybe_nonzero_address): New function.
+ (fold_comparison): Call it. Fold equality and relational
+ expressions involving null pointers.
+ (tree_single_nonzero_warnv_p): Call maybe_nonzero_address.
+
+2016-03-31 Evandro Menezes <e.menezes@samsung.com>
+
+ Fix the predicate "aarch64_simd_reg_or_zero" to correctly validate
+ the "Y" constraint (scalar FP 0.0 immediate).
+
+ * gcc/config/aarch64/predicates.md (aarch64_simd_reg_or_zero):
+ Add the "const_double" to the list of operand constraints.
+
+2016-04-01 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/70467
+ * config/i386/i386.md (*add<dwi>3_doubleword, *sub<dwi>3_doubleword):
+ If low word of the last operand is 0, just emit addition/subtraction
+ for the high word.
+
+2016-04-01 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ PR target/70404
+ * config/s390/s390.c (s390_expand_insv): Check for everything
+ constant instead of just VOIDmode stuff.
+
+2016-04-01 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
+
+ PR target/70496
+ * config/arm/arm.h (ASM_APP_OFF): Handle TARGET_ARM and TARGET_THUMB.
+
+2016-04-01 Nathan Sidwell <nathan@acm.org>
+
+ * tree.def (TRY_CATCH_EXPR): Correct documentation.
+
+2016-03-31 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR rtl-optimization/70461
+ * ira-color.c (allocno_copy_cost_saving): Use allocno class if it
+ is necessary.
+
+2016-03-31 Martin Liska <mliska@suse.cz>
+
+ PR hsa/70399
+ * hsa-brig.c (hsa_op_immed::emit_to_buffer): Emit either
+ a tree value or an immediate integer value to a buffer
+ that is eventually copied to a BRIG section.
+ (emit_immediate_operand): Call the function here.
+ * hsa-dump.c (dump_hsa_immed): Remove checking assert.
+ * hsa-gen.c (hsa_op_immed::hsa_op_immed): Remove initialization
+ of class' fields that are removed.
+ (hsa_op_immed::~hsa_op_immed): Remove deinitialization.
+ * hsa.h (class hsa_op_immed): Remove m_brig_repr and
+ m_brig_repr_size fields.
+
+2016-03-31 Martin Liska <mliska@suse.cz>
+
+ PR hsa/70391
+ * hsa-gen.c (hsa_function_representation::update_dominance): New
+ function.
+ (convert_addr_to_flat_segment): Likewise.
+ (gen_hsa_memory_set): New alignment argument.
+ (gen_hsa_ctor_assignment): Likewise.
+ (gen_hsa_insns_for_single_assignment): Provide alignment
+ to gen_hsa_ctor_assignment.
+ (gen_hsa_insns_for_direct_call): Add new argument.
+ (expand_lhs_of_string_op): New function.
+ (expand_string_operation_builtin): Likewise.
+ (expand_memory_copy): New function.
+ (expand_memory_set): New function.
+ (gen_hsa_insns_for_call): Use HOST_WIDE_INT.
+ (convert_switch_statements): Change signature.
+ (generate_hsa): Use a return value of the function.
+ (pass_gen_hsail::execute): Do not call
+ convert_switch_statements here.
+ * hsa-regalloc.c (hsa_regalloc): Call update_dominance.
+ * hsa.h (hsa_function_representation::m_modified_cfg): New flag.
+ (hsa_function_representation::update_dominance): New function.
+
+2016-03-31 Martin Liska <mliska@suse.cz>
+
+ PR hsa/70391
+ * hsa-brig.c (emit_directive_variable): Emit alignment
+ according to hsa_symbol::m_align.
+ * hsa-dump.c (hsa_byte_alignment): Move the function to another file.
+ (dump_hsa_symbol): Dump alignment of HSA symbols.
+ * hsa-gen.c (get_symbol_for_decl): Set-up alignment of a symbol.
+ (gen_hsa_addr_with_align): New function.
+ (hsa_bitmemref_alignment): Use newly added function.
+ (gen_hsa_insns_for_load): Likewise.
+ (gen_hsa_insns_for_store): Likewise.
+ (gen_hsa_memory_copy): New argument added.
+ (gen_hsa_insns_for_single_assignment): Respect
+ alignment for assignments processed via gen_hsa_memory_copy.
+ (gen_hsa_insns_for_direct_call): Likewise.
+ (gen_hsa_insns_for_return): Likewise.
+ (gen_function_def_parameters): Set default alignment.
+ * hsa.c (hsa_object_alignment): New function.
+ (hsa_byte_alignment): Pasted function.
+ * hsa.h (hsa_symbol::m_align): New field.
+
+2016-03-31 Bin Cheng <bin.cheng@arm.com>
+
+ * tree-ssa-loop-ivopts.c (get_computation_cost_at): Initialize
+ scratch field for goto case.
+
+2016-03-31 James Greenhalgh <james.greenhalgh@arm.com>
+
+ * config/arm/linux-elf.h (ASM_OUTPUT_DEF): Delete.
+
+2016-03-31 Ilya Enkovich <enkovich.gnu@gmail.com>
+
+ PR target/70442
+ * config/i386/i386.c (scalar_chain::convert_op): Fix description.
+ (scalar_chain::convert_insn): Call convert_op for reg
+ moves to handle undefined registers.
+
+2016-03-31 Nathan Sidwell <nathan@acm.org>
+
+ PR c++/70393
+ * varasm.c (output_constructor_regular_field): Flush bitfield earlier.
+ Assert we don't want to move backwards.
+
+2016-03-31 Kirill Yukhin <kirill.yukhin@intel.com>
+
+ PR target/70453
+ * config/i386/sse.md (define_mode_attr shuffletype): Fix typo.
+
+2016-03-31 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/70460
+ * ira.c (indirect_jump_optimize): Don't substitute LABEL_REF
+ with operand from REG_LABEL_OPERAND, instead substitute
+ SET_SRC or REG_EQUAL note content if it is a LABEL_REF.
+ Don't do anything for REG_NON_LOCAL_GOTO jumps.
+
+2016-03-31 Martin Liska <mliska@suse.cz>
+
+ * passes.c (execute_one_pass): Do not call
+ todo_after for a discarded function.
+
+2016-03-31 Bin Cheng <bin.cheng@arm.com>
+
+ * tree-ssa-loop-ivopts.c (struct comp_cost): New scrach field.
+ (no_cost, infinite_cost): Initialize the new field.
+ (get_computation_cost_at): Record setup cost.
+ (determine_use_iv_cost_address): Skip cost computation for sub
+ uses if we can estimate it without losing accuracy.
+
+2016-03-30 Jan Hubicka <hubicka@ucw.cz>
+
+ * tree-ssa-loop-niter.c (idx_infer_loop_bounds): We can't get realistic
+ estimates here.
+ * tree-ssa-loop-unswitch.c (tree_unswitch_single_loop): Use also
+ max_loop_iterations_int.
+ (tree_unswitch_outer_loop): Likewise.
+ * tree-ssa-loop-ivopts.c (avg_loop_niter): Likewise.
+ * tree-vect-loop.c (vect_analyze_loop_2): Likewise.
+
+2016-03-30 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/70450
+ * fold-const.c (extract_muldiv_1): Fix thinko in wide_int::from usage.
+
+2016-03-30 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/70421
+ * config/i386/i386.c (ix86_expand_vector_set): Fix up argument order
+ in gen_blendm expander.
+
+2016-03-30 Nick Clifton <nickc@redhat.com>
+
+ PR target/62254
+ * config/arm/arm.c (arm_reload_out_hi): Add code to handle the
+ case where we are already provided with an SImode SUBREG.
+
+2016-03-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/70439
+ * config/i386/i386.c (ix86_expand_epilogue): Properly check
+ conflict between DRAP register and __builtin_eh_return.
+
+2016-03-30 Michael Matz <matz@suse.de>
+ Richard Biener <rguenther@suse.de>
+
+ PR ipa/12392
+ * ipa-polymorphic-call.c (struct type_change_info): Change
+ speculative to an unsigned allowing to limit the work we do.
+ (csftc_abort_walking_p): New inline function..
+ (check_stmt_for_type_change): Limit the number of may-defs
+ skipped for speculative devirtualization to
+ max-speculative-devirt-maydefs.
+ * params.def (max-speculative-devirt-maydefs): New param.
+ * doc/invoke.texi (--param max-speculative-devirt-maydefs): Document.
+
+2016-03-30 Mike Stump <mrs@gcc.gnu.org>
+
+ PR target/63890
+ * config/i386/i386.h (ACCUMULATE_OUTGOING_ARGS): Use when profiling
+ and TARGET_MACHO.
+
+2016-03-30 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR tree-optimization/59124
+ * tree-vrp.c (register_edge_assert_for_2): For NAME != CST1
+ where NAME = A +- CST2 add the assertion A != (CST1 -+ CST2).
+
+2016-03-29 Jeff Law <law@redhat.com>
+
+ * tree-ssa-coalesce.c (struct ssa_conflicts): Fix typo in comment.
+
+2016-03-10 Jan Hubicka <hubicka@ucw.cz>
+
+ * tree-ssa-loop-ivcanon.c (try_peel_loop): Change type of peel
+ to HOST_WIDE_INT.
+
+2016-03-29 Thomas Schwinge <thomas@codesourcery.com>
+
+ * config/gnu.h (CPP_SPEC, LIB_SPEC): Don't override.
+ * config/i386/gnu.h (STARTFILE_SPEC): Use gcrt1.o instead of
+ gcrt0.o if linking dynamically.
+
+2016-03-10 Jan Hubicka <hubicka@ucw.cz>
+
+ PR ipa/70283
+ * ipa-devirt.c (methods_equal_p): New function.
+ (compare_virtual_tables): Use it.
+ * cgraph.h (symbol_table::symbol_suffix_separator): Declare.
+ * cgraphclones.c (clone_function_name_1): Use
+ symbol_table::symbol_suffix_separator.
+ * coverage.c (build_var): Likewise.
+ * symtab.c (symbol_table::symbol_suffix_separator): New.
+
+2016-03-29 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/70429
+ * combine.c (simplify_shift_const_1): For ASHIFTRT don't optimize
+ (cst1 >> count) >> cst2 into (cst1 >> cst2) >> count if
+ mode != result_mode.
+
+ PR c++/70353
+ * tree-inline.c (remap_decls): Don't add_local_decl if cfun is null.
+
+ PR tree-optimization/70405
+ * ssa-iterators.h (num_imm_uses): Add missing braces.
+
+2016-03-29 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR rtl-optimization/68695
+ * ira-color.c (allocno_copy_cost_saving): New.
+ (improve_allocation): Use it.
+
+2016-03-29 Richard Henderson <rth@redhat.com>
+
+ PR middle-end/70355
+ * lower-subreg.c (simplify_subreg_concatn): Reject paradoxical subregs.
+
+2016-03-29 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/70424
+ * ipa-prop.c (ipa_compute_jump_functions_for_edge): Always
+ use alignment returned by get_pointer_alignment_1 if it is
+ bigger than BITS_PER_UNIT.
+ * builtins.c (get_pointer_alignment_1): Do not return true
+ for alignment extracted from SSA info.
+
+2016-03-28 James Bowman <james.bowman@ftdichip.com>
+
+ * config/ft32/ft32.opt (mnodiv): New.
+ * config/ft32/ft32.md (*divsi3, *modsi3): Qualify with TARGET_NODIV.
+ * doc/invoke.texi (FT32 Options -mnodiv): New.
+
+2016-03-28 Kirill Yukhin <kirill.yukhin@intel.com>
+
+ PR target/70406
+ * config/i386/i386.md (define_split, andn): Fix modes.
+
+2016-03-26 Richard Biener <rguenther@suse.de>
+ Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
+
+ PR ipa/70366
+ * ipa-inline-transform.c (inline_call): Pass opts_for_fn (to->decl)
+ instead of
+ TREE_OPTIMIZATION (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (to->decl))
+ as 2nd argument to cl_optimization_restore().
+
+2016-03-25 Richard Henderson <rth@redhat.com>
+
+ PR target/70120
+ * config/aarch64/aarch64.c (aarch64_asm_output_pool_epilogue): New.
+ * config/aarch64/aarch64-protos.h: Declare it.
+ * config/aarch64/aarch64.h (ASM_OUTPUT_POOL_EPILOGUE): New.
+
+2016-03-25 Alan Modra <amodra@gmail.com>
+
+ PR target/70052
+ * config/rs6000/constraints.md (j): Simplify.
+ * config/rs6000/predicates.md (easy_fp_constant): Exclude
+ decimal float 0.D.
+ * config/rs6000/rs6000.md (zero_fp): New mode_attr.
+ (mov<mode>_hardfloat, mov<mode>_hardfloat32, mov<mode>_hardfloat64,
+ mov<mode>_64bit_dm, mov<mode>_32bit): Use zero_fp in place of j
+ in all constraint alternatives.
+ (movtd_64bit_nodm): Delete "j" constraint alternative.
+
+2016-03-24 Aldy Hernandez <aldyh@redhat.com>
+
+ * tree-ssa-propagate.c: Enhance docs for
+ SSA_PROP_NOT_INTERESTING.
+
+2016-03-24 Aldy Hernandez <aldyh@redhat.com>
+
+ * doc/extend.texi: Fix typo in documentation to pure attribute.
+
+2016-03-24 John David Anglin <danglin@gcc.gnu.org>
+
+ PR target/70319
+ * config/pa/pa.md (bswapdi2): Use a scratch register.
+
+2016-03-24 Richard Henderson <rth@redhat.com>
+
+ PR middle-end/69845
+ * fold-const.c (extract_muldiv_1): Correct test for multiplication
+ overflow.
+
+2016-03-24 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.md (*anddi3_doubleword): Generate AND insn
+ using ix86_expand_binary_operator instead of gen_andsi3.
+
+2016-03-24 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/70396
+ * tree-vect-stmts.c (vectorizable_comparison): Use
+ get_vectype_for_scalar_type.
+
+2016-03-24 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/70370
+ * gimplify.c (gimplify_asm_expr): Handle !allows_mem outputs
+ with register bases.
+
+2016-03-24 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/70372
+ * tree-ssa-reassoc.c (eliminate_plus_minus_pair): Use
+ build_all_ones_cst to also handle vector types correctly.
+
+2016-03-23 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/70381
+ * config/rs6000/rs6000-cpus.def (ISA_2_6_MASKS_SERVER): Do not set
+ -mfloat128 here.
+
+2016-03-23 Marek Polacek <polacek@redhat.com>
+
+ PR c++/69884
+ * doc/invoke.texi: Document -Wignored-attributes.
+
+2016-03-23 Bin Cheng <bin.cheng@arm.com>
+
+ PR tree-optimization/69042
+ * params.def (PARAM_IV_CONSIDER_ALL_CANDIDATES_BOUND): Increase the
+ parameter from 30 to 40.
+
+2016-03-23 Bin Cheng <bin.cheng@arm.com>
+
+ PR tree-optimization/69042
+ * tree-ssa-loop-ivopts.c (add_iv_candidate_for_use): Add IV cand
+ for use with constant offset stripped in base.
+
+2016-03-23 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/70251
+ * match.pd (A + (B vcmp C ? 1 : 0) -> A - (B vcmp C)): Adjust
+ mode compatibility check.
+ (A - (B vcmp C ? 1 : 0) -> A + (B vcmp C)): Likewise.
+
+2016-03-23 Jeff Law <law@redhat.com>
+
+ PR tree-optimization/64058
+ * tree-ssa-coalesce.c (struct coalesce_pair): Add new field
+ CONFLICT_COUNT.
+ (struct ssa_conflicts): Move up earlier in the file.
+ (conflicts_, var_map_): New static variables.
+ (initialize_conflict_count): New function to initialize the
+ CONFLICT_COUNT field for each conflict pair.
+ (compare_pairs): Lazily initialize the conflict count and use it
+ as the first tie-breaker.
+ (sort_coalesce_list): Add new arguments conflicts, map. Initialize
+ and wipe conflicts_ and map_ around the call to qsort. Remove
+ special case for 2 coalesce pairs.
+ * bitmap.c (bitmap_count_unique_bits): New function.
+ (bitmap_count_bits_in_word): New function, extracted from
+ bitmap_count_bits.
+ (bitmap_count_bits): Use bitmap_count_bits_in_word.
+ * bitmap.h (bitmap_count_unique_bits): Declare it.
+
+2016-03-23 Ilya Enkovich <enkovich.gnu@gmail.com>
+
+ PR target/69917
+ * config/i386/sol2.h (ASM_OUTPUT_DEF_FROM_DECLS): Follow
+ transparent alias chain for decl assembler name.
+ * config/sol2.c (solaris_assemble_visibility): Likewise.
+
+2016-03-23 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ * config/arm/arm1020e.md (1020call_op): Reduce reservation
+ duration.
+ (v10_fdivs): Likewise.
+ (v10_fdivd): Likewise.
+
+2016-03-23 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ PR driver/70132
+ * config/arm/driver-arm.c (host_detect_local_cpu): Reorder exit logic
+ to not call fclose twice on file.
+
+2016-03-23 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/70354
+ * tree-vect-patterns.c (vect_recog_vector_vector_shift_pattern): If
+ oprnd0 is wider than oprnd1 and there is a cast from the wider
+ type to oprnd1, mask it with the mask of the narrower type.
+
+ PR target/70321
+ * config/i386/i386.md (*anddi3_doubleword, *<code>di3_doubleword):
+ Optimize TARGET_STV splitters, if high or low word of last argument
+ is 0 or -1.
+
+2016-03-22 Jeff Law <law@redhat.com>
+
+ PR target/70232
+ tree-ssa-threadbackward.c
+ (fsm_find_control_statement_thread_paths): Correctly distinguish
+ between old style jump threads vs FSM jump threads.
+
+2016-03-22 Ilya Enkovich <enkovich.gnu@gmail.com>
+
+ PR target/70302
+ * config/i386/i386.c (scalar_chain::convert_op): Support
+ uninitialized register usage case.
+
+2016-03-22 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/70251
+ * genmatch.c (gen_transform): Adjust last parameter to a three-state
+ int...
+ (capture::gen_transform): ... to change behavior when substituting
+ a condition into cond or not-cond expr context.
+ (dt_simplify::gen_1): Adjust.
+ * gimple-match-head.c: Include gimplify.h for unshare_expr.
+ * match.pd (A + (B vcmp C ? 1 : 0) -> A - (B vcmp C)): Revert
+ last change and instead change to
+ A + (B vcmp C ? 1 : 0) -> A - (B vcmp C ? -1 : 0).
+ (A - (B vcmp C ? 1 : 0) -> A + (B vcmp C)): Likewise.
+
+2016-03-22 Anthony Green <green@moxielogic.com>
+
+ * config/moxie/moxiebox.h (CC1_SPEC): Define. Fix endianness
+ issue for moxiebox targets.
+ (CC1PLUS_SPEC): Ditto.
+
+2016-03-22 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/70333
+ * fold-const.c (extract_muldiv_1): Properly perform multiplication
+ in the wide type.
+
+2016-03-22 Kirill Yukhin <kirill.yukhin@intel.com>
+
+ * config/i386/i386.c (def_builtin): Remove duplicated functionality.
+
+2016-03-22 Kirill Yukhin <kirill.yukhin@intel.com>
+
+ PR target/70325
+ * config/i386/i386.c (def_builtin): Handle
+ OPTION_MASK_ISA_AVX512VL to be and-ed with other
+ bits.
+ (const struct builtin_description bdesc_special_args[]):
+ Remove duplicate ISA bits.
+
+2016-03-22 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/70329
+ * config/i386/i386.c (ix86_expand_vecop_qihi): Don't bother computing
+ d.perm[i] for i >= d.nelt. If not full_interleave, compute d.perm[i]
+ in a way that works also for AVX512BW.
+
+ PR target/70300
+ * config/i386/i386.md (cvtsd2ss splitter): Unpack in destination
+ instead of source if operands[1] is xmm16 and above and
+ !TARGET_AVX512VL. Use avx512f_vec_dupv16sf_1 instead of
+ vec_interleave_lowv4sf if we need to unpack xmm16 and above.
+
+ PR c++/70295
+ * gimplify.c (gimplify_modify_expr): Call gimple_set_no_warning
+ on assign if (*from_p) is a comparison, set it to
+ TREE_NO_WARNING (*from_p).
+
+2016-03-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/70326
+ * lra.c (restore_scratches): Ignore deleted insns.
+
+2016-03-21 Marc Glisse <marc.glisse@inria.fr>
+ Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/70317
+ * match.pd (cmp @0 @0): Pass @0 instead of TYPE_MODE (TREE_TYPE (@0))
+ to HONOR_NANS.
+
+2016-03-21 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/70327
+ * config/i386/i386.md (movxi): Use ix86_expand_vector_move instead
+ of ix86_expand_move.
+ (movoi): Ditto.
+ (movti): Use general_operand for operand 1 predicate.
+
+2016-03-21 Martin Liska <mliska@suse.cz>
+
+ * hsa-dump.c (dump_hsa_insn_1): dump default branch of SBR
+ insns.
+ (dump_hsa_symbol): Dump BRIG offset of hsa_symbols.
+
+2016-03-21 Martin Liska <mliska@suse.cz>
+
+ PR ipa/70306
+ * ipa-icf.c (sem_function::parse): Skip static
+ constructors and destructors.
+
+2016-03-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/70296
+ * config/rs6000/rs6000-c.c (rs6000_macro_to_expand): If IDENT is
+ function-like macro, peek following token(s) if it is followed
+ by CPP_OPEN_PAREN token with optional padding in between, and
+ if not, don't treat it like a macro.
+
+2016-03-21 Thomas Schwinge <thomas@codesourcery.com>
+ Alexander Monakov <amonakov@ispras.ru>
+
+ * config/nvptx/nvptx.c (nvptx_option_override): Don't emit sorry
+ for the stabs debug format.
+
+2016-03-21 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/70310
+ * tree-vect-generic.c (expand_vector_condition): Fold the built
+ condition.
+
+2016-03-21 Kirill Yukhin <kirill.yukhin@intel.com>
+
+ PR target/70293
+ * config/i386/sse.md: (define_insn "*vec_dup<mode>"/AVX2):
+ Block third alternative for AVX-512VL target,
+
+2016-03-21 Martin Liska <mliska@suse.cz>
+
+ PR hsa/70234
+ * hsa-brig.c (emit_function_directives): Mark unemitted
+ global variables for emission.
+ * hsa-gen.c (hsa_symbol::hsa_symbol): Initialize a new flag.
+ (get_symbol_for_decl): Likewise.
+ * hsa.h (struct hsa_symbol): New flag.
+
+2016-03-21 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/70288
+ * tree-ssa-loop-ivcanon.c (tree_estimate_loop_size): Make sure
+ we do not estimate unsimplified all-constant conditionals or
+ switches as optimized away.
+
+2016-03-21 Andrey Belevantsev <abel@ispras.ru>
+
+ PR rtl-optimization/69102
+ * sched-deps.c (sched_analyze_insn): Do not set last_args_size field
+ when we have a readonly dependency context.
+
+2016-03-18 Jeff Law <law@redhat.com>
+
+ PR rtl-optimization/70263
+ * ira.c (memref_used_between_p): Assert we found END in the insn chain.
+ (update_equiv_regs): When trying to move a store to after the insn
+ that sets the source of the store, make sure the store occurs after
+ the insn that sets the source of the store. When successful note
+ the REG_EQUIV note created in the dump file.
+
+2016-03-16 David Wohlferd <dw@LimeGreenSocks.com>
+ Bernd Schmidt <bschmidt@redhat.com>
+
+ * doc/extend.texi: Document more potential problems with basic asms.
+
+2016-03-18 Bernd Schmidt <bschmidt@redhat.com>
+
+ PR rtl-optimization/70278
+ * lra-constraints.c (split_reg): Handle the case where biggest_mode is
+ VOIDmode.
+
+2016-03-18 Jason Merrill <jason@redhat.com>
+
+ * calls.c (load_register_parameters): Fix zero size sibcall logic.
+
+2016-03-18 Kirill Yukhin <kirill.yukhin@intel.com>
+
+ * config/i386/sse.md: Use vpbroadcastq for broadcasting DF
+ values to 128b regs.
+
+2016-03-18 Ilya Enkovich <enkovich.gnu@gmail.com>
+
+ PR tree-optimization/70252
+ * tree-vect-stmts.c (supportable_widening_operation): Check resulting
+ boolean vector has a proper number of elements.
+ (supportable_narrowing_operation): Likewise.
+
+2016-03-18 Tom de Vries <tom@codesourcery.com>
+
+ PR ipa/70269
+ * cgraph.c (cgraph_node::get_body): Set dump_file to NULL after save.
+
+2016-03-18 Jakub Jelinek <jakub@redhat.com>
+
+ * reload1.c (emit_input_reload_insns): Use simplify_replace_rtx
+ instead of replace_rtx for DEBUG_INSNs.
+
+2016-03-18 Venkataramanan Kumar <venkataramanan.kumar@amd.com>
+
+ * config/i386/znver1.md : Fix latencies of FP/SSE/AVX
+ load type reservations.
+
+2016-03-17 John David Anglin <danglin@gcc.gnu.org>
+
+ PR target/70188
+ * config/pa/constraints.md: Revert 2015-02-13 change. Use
+ define_constraint for "Q" and "T" constraints.
+
+2016-03-17 Evandro Menezes <e.menezes@samsung.com>
+
+ Tweak the pipeline model for Exynos M1
+
+ * config/aarch64/aarch64.c (exynosm1_tunings): Enable weak prefetching
+ model.
+
+2016-03-17 David Malcolm <dmalcolm@redhat.com>
+
+ PR c/70264
+ * diagnostic-show-locus.c (compatible_locations_p): Handle the case
+ where one or both locations aren't within a line_map.
+
+2016-03-17 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR driver/70192
+ * opts.c (finish_options): Don't set flag_pie to the default if
+ -fpic, -fPIC, -fno-pic or -fno-PIC is used. Set flag_pic to 0
+ if it is -1.
+
+2016-03-17 Joern Rennecke <joern.rennecke@embecosm.com>
+
+ * config/i386/i386.md (*movv4qicc_insn+1..36): Pass
+ true as ALL_REGS argument to replace_rtx.
+
+2016-03-17 Richard Biener <rguenther@suse.de>
+
+ PR debug/70271
+ * dwarf2out.c (dwarf2out_early_finish): Process deferred_asm_name
+ last.
+
+2016-03-17 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/70245
+ * rtl.h (replace_rtx): Add ALL_REGS argument.
+ * rtlanal.c (replace_rtx): Likewise. If true, use REGNO
+ equality and assert mode is the same, instead of just rtx pointer
+ equality.
+ * config/i386/i386.md (mov + arithmetics with load peephole): Pass
+ true as ALL_REGS argument to replace_rtx.
+
+2016-03-17 Ilya Enkovich <enkovich.gnu@gmail.com>
+
+ * match.pd (A + (B vcmp C ? 1 : 0) -> A - (B vcmp C)): Apply
+ for boolean vector with vector mode only.
+ (A - (B vcmp C ? 1 : 0) -> A + (B vcmp C)): Likewise.
+
+2016-03-17 Nick Clifton <nickc@redhat.com>
+
+ PR target/70162
+ * config/rx/rx.c (rx_print_integer): Print negative constants in
+ decimal.
+
+2016-03-17 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/70261
+ * rtlanal.c (replace_rtx): Revert 2016-03-16 change.
+
+2016-03-16 Richard Henderson <rth@redhat.com>
+ Richard Biener <rguenth@suse.de>
+
+ PR middle-end/70240
+ PR middle-end/68215
+ PR tree-opt/68714
+ * gimplify.c (gimplify_expr) [VEC_COND_EXPR]: Gimplify the
+ first operand as is_gimple_condexpr.
+
+ PR middle-end/70240
+ PR middle-end/68215
+ Revert r231575
+ 2015-12-11 Eric Botcazou <ebotcazou@adacore.com>
+ * tree-vect-generic.c (tree_vec_extract): Remove GSI parameter.
+ Do not gimplify the result.
+ (do_unop): Adjust call to tree_vec_extract.
+ (do_binop): Likewise.
+ (do_compare): Likewise.
+ (do_plus_minus): Likewise.
+ (do_negate): Likewise.
+ (expand_vector_condition): Likewise.
+ (do_cond): Likewise.
+
+2016-03-16 Richard Henderson <rth@redhat.com>
+
+ PR target/70048
+ * config/aarch64/aarch64.c (virt_or_elim_regno_p): New.
+ (aarch64_classify_address): Use it.
+ (aarch64_legitimize_address): Force all subexpressions of PLUS
+ into registers. Simplify as (sfp+const)+reg or (reg+reg)+const.
+
+2016-03-16 Jakub Jelinek <jakub@redhat.com>
+ Richard Biener <rguenth@suse.de>
+
+ PR target/70245
+ * rtlanal.c (replace_rtx): For REG, if from is a REG,
+ return to even if only REGNO is equal, and assert
+ mode is the same.
+
+2016-03-11 Jeff Law <law@redhat.com>
+
+ PR rtl-optimization/70224
+ * reorg.c (relax_delay_slots): Pass right argument to CROSSING_JUMP_P.
+
+2016-03-16 Richard Henderson <rth@redhat.com>
+
+ PR middle-end/70199
+ * function.h (struct function): Add has_forced_label_in_static.
+ * gimplify.c (force_labels_r): Set it.
+ * lto-streamer-in.c (input_struct_function_base): Read it.
+ * lto-streamer-out.c (output_struct_function_base): Write it.
+ * tree-inline.c (has_label_address_in_static_1): Remove.
+ (copy_forbidden): Remove fndecl parameter; test
+ has_forced_label_in_static.
+ (inline_forbidden_p): Update call to copy_forbidden.
+ (tree_versionable_function_p): Likewise.
+ * ipa-chkp.c (chkp_instrumentable_p): Likewise.
+ (chkp_versioning): Likewise.
+ * tree-inline.h (copy_forbidden): Update decl.
+
+2016-03-16 Marek Polacek <polacek@redhat.com>
+
+ PR c/70093
+ * cgraphunit.c (cgraph_node::expand_thunk): Also build call to the
+ function being thunked if the result type doesn't have fixed size.
+ * gimplify.c (gimplify_modify_expr): Also set LHS if the result type
+ doesn't have fixed size.
+
+2016-03-16 Bin Cheng <bin.cheng@arm.com>
+
+ * tree-vect-loop.c (vect_analyze_loop_2): Fix wrong dump info by
+ reporting malformed loop nest.
+
+2016-03-16 Tom de Vries <tom@codesourcery.com>
+
+ PR lto/70187
+ * ipa-devirt.c (possible_polymorphic_call_targets): Move
+ nodes.length () == 1 test to before first nodes[0] access.
+
+2016-03-16 Tom de Vries <tom@codesourcery.com>
+
+ PR tree-optimization/68715
+ * graphite-scop-detection.c (scop_detection::merge_sese): Add missing
+ single_pred_p test.
+
+2016-03-16 Tom de Vries <tom@codesourcery.com>
+
+ PR tree-optimization/68809
+ * graphite-scop-detection.c (same_close_phi_node): Test if result types
+ are the same.
+
+2016-03-16 Carlos O'Donell <carlos@redhat.com>
+ Sandra Loosemore <sandra@codesourcery.com>
+
+ * doc/extend.texi (Common Function Attributes): Describe ifunc impact
+ on leaf attribute. Mention ELF interposition problems.
+
+2016-03-16 Alan Modra <amodra@gmail.com>
+
+ PR rtl-optimization/69195
+ PR rtl-optimization/47992
+ * ira.c (indirect_jump_optimize): Ignore artificial defs.
+ Add comments.
+
+2016-03-15 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR bootstrap/69513
+ * dwarf2out.c (flush_limbo_die_list): Really flush the limbo list.
+
+2016-03-15 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
+
+ * config/avr/avr.md (rotl<mode>3): Set mode for operand 2.
+
+2016-03-15 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/70222
+ * combine.c (simplify_shift_const_1): For A >> B >> C LSHIFTRT
+ optimization if mode is different from result_mode, queue up masking
+ of the result in outer_op. Formatting fix.
+
+ PR middle-end/70239
+ * tree-ssa-sccvn.c (VN_INFO_GET): Use safe_grow_cleared instead
+ of safe_grow.
+
+2016-03-15 Andrey Belevantsev <abel@ispras.ru>
+
+ PR rtl-optimization/69032
+ * sel-sched-ir.c (get_seqno_by_preds): Include both insn and head when
+ looping backwards over basic block insns.
+
+2016-03-15 Andrey Belevantsev <abel@ispras.ru>
+
+ PR target/66660
+ * sel-sched-ir.c (merge_expr): Avoid changing the speculative pattern
+ to non-speculative when propagating trap bits.
+
+2016-03-15 Andrey Belevantsev <abel@ispras.ru>
+
+ PR rtl-optimization/63384
+ * sel-sched.c (invoke_aftermath_hooks): Do not decrease issue_more on
+ DEBUG_INSN_P insns.
+
+2016-03-15 Andrey Belevantsev <abel@ispras.ru>
+
+ PR target/64411
+ * sched-deps.c (get_implicit_reg_pending_clobbers): New function,
+ factored out from ...
+ (sched_analyze_insn): ... here.
+ * sched-int.h (get_implicit_reg_pending_clobbers): Declare it.
+ * sel-sched-ir.c (setup_id_implicit_regs): New function, use
+ get_implicit_reg_pending_clobbers in it.
+ (setup_id_reg_sets): Use setup_id_implicit_regs.
+ (deps_init_id): Ditto.
+
+2016-03-15 Tom de Vries <tom@codesourcery.com>
+
+ PR ipa/70161
+ * cgraph.c (cgraph_node::get_body): Save, reset and restore
+ dump_file_name.
+ * passes.c (execute_one_ipa_transform_pass): Add missing argument to
+ execute_function_dump.
+ (execute_one_pass): Don't dump function if it will be dumped after ipa
+ transform.
+
+2016-03-15 Segher Boessenkool <segher@kernel.crashing.org>
+
+ * genrecog.c (match_pattern_2): If pred is NULL don't call
+ safe_predicate_mode on it.
+
+2016-03-14 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/70219
+ * lra-constraints.c (delete_move_and_clobber): Change assertion
+ to also allow dregno == 0.
+
+2016-03-14 Richard Henderson <rth@redhat.com>
+
+ PR tree-opt/68714
+ * tree-ssa-reassoc.c (ovce_extract_ops, optimize_vec_cond_expr): New.
+ (can_reassociate_p): Allow ANY_INTEGRAL_TYPE_P.
+ (reassociate_bb): Use optimize_vec_cond_expr; avoid
+ optimize_range_tests, attempt_builtin_copysign and attempt_builtin_powi
+ on vectors.
+
+2016-03-14 Bernd Schmidt <bschmidt@redhat.com>
+
+ PR target/70083
+ * lra-lives.c (process_bb_lives): Also update biggest mode for hard
+ regs.
+ (lra_create_live_ranges_1): initialize hard register biggest_mode to
+ VOIDmode.
+ * lra-constraints.c (split_reg): For hard regs, try to find the
+ biggest single-register mode used in the function.
+
+2016-03-14 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/56365
+ * tree-ssa-phiopt.c (minmax_replacement): Handle alternate
+ constants to compare against.
+
+2016-03-14 Segher Boessenkool <segher@kernel.crashing.org>
+
+ PR target/70098
+ * config/rs6000/rs6000.md (*ctr<mode>_internal1, *ctr<mode>_internal2,
+ *ctr<mode>_internal5, *ctr<mode>_internal6): Also allow "d" as output.
+ (define_split for the GPR case): Use int_reg_operand instead of
+ gpc_reg_operand for the output.
+
+2016-03-14 Tom de Vries <tom@codesourcery.com>
+
+ PR tree-optimization/70045
+ * graphite-isl-ast-to-gimple.c (graphite_create_new_loop_guard): Unshare
+ create_empty_if_region_on_edge argument.
+
+2016-03-13 Eric Botcazou <ebotcazou@adacore.com>
+
+ * config/arm/vxworks.h (STACK_CHECK_STATIC_BUILTIN): Define.
+ (STACK_CHECK_PROTECT): Likewise.
+ * config/i386/vxworks.h (STACK_CHECK_STATIC_BUILTIN): Likewise
+ (STACK_CHECK_PROTECT): Likewise.
+ * config/rs6000/vxworks.h (STACK_CHECK_STATIC_BUILTIN): Likewise
+ (STACK_CHECK_PROTECT): Likewise.
+ * config/rs6000/vxworksae.h (STACK_CHECK_PROTECT): Likewise.
+ * config/sparc/vxworks.h (STACK_CHECK_STATIC_BUILTIN): Likewise.
+ (STACK_CHECK_PROTECT): Likewise.
+
+2016-03-12 Andrey Belevantsev <abel@ispras.ru>
+
+ PR rtl-optimization/69307
+ * sel-sched.c (choose_best_pseudo_reg): Properly check for hard
+ registers in modes that span more than one register.
+
+2016-03-12 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR target/69614
+ * lra-constraints.c (delete_move_and_clobber): New.
+ (remove_inheritance_pseudos): Use it.
+
+2016-03-12 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR ada/70017
+ * calls.c (emit_library_call_value_1): Clear the ECF_NOTHROW flag if
+ the libcall is LCT_THROW.
+ * explow.c (probe_stack_range): Pass LCT_THROW to emit_library_call
+ for the checking routine.
+
+2016-03-11 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/70131
+ * config/rs6000/rs6000.md (round32<mode>2_fprs): Do not do the
+ optimization if we have direct move.
+ (roundu32<mode>2_fprs): Likewise.
+
+2016-03-11 Bernd Schmidt <bschmidt@redhat.com>
+
+ PR target/70123
+ * lra-remat.c (operand_to_remat): Disallow hard regs in the value t
+ be rematerialized.
+ (reg_overlap_for_remat_p): Renamed from input_regno_present_p.
+ Arguments swapped. All callers changed. Take reg_renumber into
+ account, and Calculate and compare register ranges for hard regs.
+
+2016-03-11 Jeff Law <law@redhat.com>
+
+ PR tree-optimization/70190
+ * tree-ssa-threadbackward.c (fsm_find_control_statement_thread_paths):
+ Handle cases where we can not extract the taken edge, even though we
+ found a constant value.
+
+ PR tree-optimization/64058
+ * tree-ssa-coalesce.c (struct coalesce_pair): Add new field INDEX.
+ (num_coalesce_pairs): Move up earlier in file.
+ (find_coalesce_pair): Initialize the INDEX field for each pair
+ discovered.
+ (compare_pairs): No longer sort on the elements in each pair.
+ Instead break ties with the index of the coalesce pair.
+
+2016-03-11 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ PR target/70002
+ * config/aarch64/aarch64-protos.h
+ (aarch64_save_restore_target_globals): New prototype.
+ * config/aarch64/aarch64-c.c (aarch64_pragma_target_parse):
+ Call the above when popping pragma.
+ * config/aarch64/aarch64.c (aarch64_save_restore_target_globals):
+ New function.
+ (aarch64_set_current_function): Rewrite using the above.
+
+2016-03-11 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/70177
+ * gimple-expr.h (extract_ops_from_tree_1): Renamed to ...
+ (extract_ops_from_tree): ... this. In the 2 argument
+ overload remove _1 suffix.
+ * gimple-expr.c (extract_ops_from_tree_1): Renamed to ...
+ (extract_ops_from_tree): ... this.
+ * gimple.c (gimple_build_assign, gimple_assign_set_rhs_from_tree):
+ Adjust callers.
+ * tree-ssa-loop-niter.c (derive_constant_upper_bound): Likewise.
+ * tree-ssa-forwprop.c (defcodefor_name): Call 3 operand
+ extract_ops_from_tree instead of 2 operand one.
+
+2016-03-11 Alan Lawrence <alan.lawrence@arm.com>
+
+ PR tree-optimization/70013
+ * tree-sra.c (analyze_access_subtree): Also set grp_unscalarized_data
+ for constant-pool entries.
+
+2016-03-11 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/70174
+ * expmed.c (store_bit_field_using_insv): Use gen_lowpart_if_possible
+ followed by gen_lowpart on force_reg instead of just gen_lowpart.
+
+ PR tree-optimization/70169
+ * tree-ssa-loop.c (gen_lsm_tmp_name): Handle FUNCTION_DECL and
+ LABEL_DECL like VAR_DECL. Emit nothing instead of gcc_unreachable
+ for unknown codes.
+
+2016-03-11 Ilya Enkovich <enkovich.gnu@gmail.com>
+ Jakub Jelinek <jakub@redhat.com>
+
+ PR target/70160
+ * config/i386/i386.c (scalar_chain::convert_reg): Skip uses
+ of uninitialized values.
+
+2016-03-11 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * config/s390/s390.md ("trunctddd2"): Turn former define_insn into
+ define_expand.
+ ("*trunctddd2"): New pattern definition.
+ ("trunctdsd2"): Set prep_for_short_prec rounding mode for the
+ TD->DD truncation.
+
+2016-03-11 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * config/s390/s390.md (BFP_RND_*, DFP_RND_*): Add new constant
+ definitions for BFP and DFP rounding modes.
+ ("fixuns_truncdddi2", "fixuns_trunctddi2")
+ ("fixuns_trunc<BFP:mode><GPR:mode>2", "fixuns_trunc<mode>si2")
+ ("fix_trunc<DSF:mode><GPR:mode>2", "fix_trunc<mode>di2")
+ ("fix_trunctf<mode>2"): Use the new constants instead of magic
+ numbers.
+
+2016-03-11 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * config/s390/constraints.md: Adjust comment.
+ ("Y"): Adjust comment. Rename s390_decompose_shift_count to
+ s390_decompose_addrstyle_without_index.
+ * config/s390/predicates.md (shift_count_or_setmem_operand):
+ Rename to setmem_operand.
+ * config/s390/s390-protos.h
+ (s390_decompose_shift_count): Rename to
+ s390_decompose_addrstyle_without_index.
+ * config/s390/s390.c (s390_decompose_shift_count)
+ (s390_mem_constraint, print_shift_count_operand)
+ (print_operand_address, print_operand): Rename
+ s390_decompose_shift_count to
+ s390_decompose_addrstyle_without_index and rename
+ print_shift_count_operand to print_addrstyle_operand troughout the
+ file.
+ * config/s390/s390.md ("setmem_long_<P:mode>", "*setmem_long")
+ ("*setmem_long_and", "*setmem_long_31z", "*setmem_long_and_31z"):
+ Rename shift_count_or_setmem_operand to setmem_operand.
+ * config/s390/vx-builtins.md ("vec_insert<mode>")
+ ("vec_promote<mode>"): Replace shift_count_or_setmem_operand with
+ nonmemory_operand.
+
+2016-03-10 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ PR target/70168
+ * config/rs6000/rs6000.c (rs6000_expand_atomic_compare_and_swap):
+ Handle overlapping retval and newval.
+
+2016-03-10 Nick Clifton <nickc@redhat.com>
+
+ PR target/7044
+ * config/aarch64/aarch64.c
+ (aarch64_override_options_after_change_1): When forcing
+ flag_omit_frame_pointer to be true, use a special value that can
+ be detected if this function is called again, thus preventing
+ flag_omit_leaf_frame_pointer from being forced to be false.
+
+2016-03-10 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ * common/config/aarch64/aarch64-common.c (aarch64_handle_option):
+ Set x_flag_omit_leaf_frame_pointer when handling
+ -momit-leaf-frame-pointer.
+
+2016-03-10 Jan Hubicka <hubicka@ucw.cz>
+
+ PR lto/69589
+ * cgraph.c (cgraph_node::dump): Dump split_part and
+ indirect_call_target.
+ * cgraph.h (cgraph_node): Add indirect_call_target flag.
+ * ipa.c (has_addr_references_p): Cleanup.
+ (is_indirect_call_target_p): New.
+ (walk_polymorphic_call_targets): Do not mark virtuals that may be
+ called indirectly as local.
+ (symbol_table::remove_unreachable_nodes): Compute indirect_call_target.
+
+2016-03-10 Jan Hubicka <hubicka@ucw.cz>
+
+ PR ipa/69630
+ * ipa-devirt.c (possible_polymorphic_call_targets): Do not ICE
+ on cxa_pure_virtual.
+
+2016-03-10 Jan Hubicka <hubicka@ucw.cz>
+
+ PR lto/69589
+ * tree.c (free_lang_data_in_decl): Clear visibility of TYPE_DECL.
+
+2016-03-10 Jan Hubicka <hubicka@ucw.cz>
+
+ PR lto/69589
+ * tree.c (need_assembler_name_p): Only record main variant type names.
+
+2016-03-10 Christophe Lyon <christophe.lyon@linaro.org>
+
+ PR target/70113.
+ * config/aarch64/aarch64.h (TARGET_FIX_ERR_A53_843419_DEFAULT):
+ Always define to 0 or 1.
+ (TARGET_FIX_ERR_A53_843419): New macro.
+ * config/aarch64/aarch64-elf-raw.h
+ (TARGET_FIX_ERR_A53_843419_DEFAULT): Update for above changes.
+ * config/aarch64/aarch64-linux.h: Likewise.
+ * config/aarch64/aarch64.c
+ (aarch64_override_options_after_change_1): Do not default
+ aarch64_nopcrelative_literal_loads to true if Cortex-A53 erratum
+ 843419 is on.
+ (aarch64_attributes): Handle fix-cortex-a53-843419.
+ (aarch64_can_inline_p): Likewise.
+ * config/aarch64/aarch64.opt (aarch64_fix_a53_err843419): Save.
+
+2016-03-10 Alan Lawrence <alan.lawrence@arm.com>
+ Jakub Jelinek <jakub@redhat.com>
+
+ * common.opt (funconstrained-commons, flag_unconstrained_commons): New.
+ * tree.c (array_at_struct_end_p): Do not limit to size of decl for
+ DECL_COMMONS if flag_unconstrained_commons is set.
+ * tree-dfa.c (get_ref_base_and_extent): Likewise.
+ * doc/invoke.texi (Optimize Options): Add -funconstrained-commons.
+ (funconstrained-commons): Document.
+
+2016-03-10 Christophe Lyon <christophe.lyon@linaro.org>
+
+ * config/aarch64/t-aarch64 (OPTIONS_H_EXTRA): Add
+ aarch64-fusion-pairs.def and aarch64-tuning-flags.def
+
+2016-03-10 Ilya Enkovich <enkovich.gnu@gmail.com>
+
+ * tree-vect-stmts.c (vectorizable_mask_load_store): Check mask
+ has a proper number of elements.
+
+2016-03-10 Alan Modra <amodra@gmail.com>
+
+ PR rtl-optimization/69195
+ PR rtl-optimization/47992
+ * ira.c (recorded_label_ref): Delete.
+ (update_equiv_regs): Return void.
+ (indirect_jump_optimize): New function.
+ (ira): Call indirect_jump_optimize and delete_trivially_dead_insns
+ before regstat_compute_ri. Don't rebuild_jump_labels here.
+ Delete update_regstat.
+
+2016-03-10 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/70128
+ * tree-ssa-structalias.c (set_uids_in_ptset): Set
+ vars_contains_nonlocal for any FUNCTION_DECL or LABEL_DECL.
+
+2016-03-09 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/70152
+ * tree-sra.c (replace_removed_params_ssa_names): Copy over
+ SSA_NAME_OCCURS_IN_ABNORMAL_PHI from old_name to new_name.
+
+ PR target/70086
+ * config/i386/i386.md (truncdfsf2 splitter): Use gen_vec_concatv2df
+ instead of gen_sse2_loadlpd.
+ * config/i386/sse.md (*vec_concatv2df): Rename to...
+ (vec_concatv2df): ... this.
+
+ PR tree-optimization/70127
+ * fold-const.c (operand_equal_p): Revert the 2015-10-28 change.
+
+2016-03-09 David Malcolm <dmalcolm@redhat.com>
+
+ PR c/68473
+ PR c++/70105
+ * diagnostic-show-locus.c (compatible_locations_p): New function.
+ (layout::layout): Sanitize ranges using compatible_locations_p.
+
+2016-03-09 David Malcolm <dmalcolm@redhat.com>
+
+ PR c/68473
+ PR c++/70105
+ * diagnostic-show-locus.c (layout_range::layout_range): Replace
+ location_range param with three const expanded_locations * and a
+ bool.
+ (layout::layout): Replace call to
+ rich_location::lazily_expand_location with get_expanded_location.
+ Extract the range and perform location expansion here, passing
+ the results to the layout_range ctor.
+ * diagnostic.c (source_range::debug): Delete.
+ * diagnostic.h (diagnostic_expand_location): Reimplement in terms
+ of rich_location::get_expanded_location.
+ * gcc-rich-location.c (get_range_for_expr): Delete.
+ (gcc_rich_location::add_expr): Reimplement to avoid the
+ rich_location::add_range overload that took a location_range,
+ passing a location_t instead.
+
+2016-03-09 Richard Biener <rguenther@suse.de>
+ Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/70138
+ * tree-vect-loop-manip.c (vect_update_ivs_after_vectorizer):
+ Also skip vect_double_reduction_def.
+
+2016-03-09 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/70049
+ * config/i386/sse.md (*vec_extract<mode>): Use %0 instead of %k0
+ if the operand is "m".
+
+2016-03-09 Nathan Sidwell <nathan@acm.org>
+
+ * config/nvptx/nvptx.c (nvptx_option_override): Don't kill debug level.
+
+2016-03-09 Venkataramanan Kumar <venkataramanan.kumar@amd.com>
+
+ * config/i386/i386.c (processor_target_table): Fix cost table
+ intialization order for znver1.
+
+2016-03-08 Jakub Jelinek <jakub@redhat.com>
+
+ * ipa-polymorphic-call.c (walk_ssa_copies): Fix spelling
+ - becuase -> because.
+ * ipa-reference.c (ignore_module_statics): Likewise.
+ * cgraph.c (cgraph_node::get_body): Likewise.
+ * ipa-inline.c (early_inliner): Likewise.
+ * ipa-devirt.c (types_same_for_odr): Likewise.
+ * tree-streamer-out.c (pack_ts_type_common_value_fields): Likewise.
+ * config/i386/i386.h (ACCUMULATE_OUTGOING_ARGS): Likewise.
+
+2016-03-08 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ * tree-ssa-math-opts.c: Fix typo in comment.
+
+2016-03-08 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/70110
+ * config/i386/i386.c (scalar_chain::make_vector_copies,
+ scalar_chain::convert_reg): Call end_sequence in between
+ get_insns and emit_conversion_insns rather than after both
+ calls.
+
+2016-03-07 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/70064
+ * config/i386/i386.h (machine_function): Add
+ pc_thunk_call_expanded flag.
+ (ix86_pc_thunk_call_expanded): New define.
+ * config/i386/i386.md (set_got, set_got_labelled): New expanders.
+ (*set_got): Rename insn pattern from set_got.
+ (*set_got_labelled): Rename inst pattern from set_got_labelled.
+ * config/i386/i386.c (ix86_compute_frame_layout): Use
+ ix86_pc_thunk_call_expanded to prevent red-zone.
+
+2016-03-07 Martin Jambor <mjambor@suse.cz>
+
+ * hsa.h (hsa_get_ctor_statements): Declare.
+ (hsa_get_dtor_statements): Likewise.
+ (hsa_get_kernel_dispatch_type): Likewise.
+ * hsa.c (hsa_get_ctor_statements): New function.
+ (hsa_get_dtor_statements): Likewise.
+ (hsa_get_kernel_dispatch_type): Likewise.
+ * hsa-brig.c (hsa_cdtor_statements): Removed.
+ (hsa_output_libgomp_mapping): Use hsa_get_ctor_statements and
+ hsa_get_dtor_statements.
+ * hsa-gen.c (hsa_kernel_dispatch_type): Removed.
+ (get_hsa_kernel_dispatch_offset): Use hsa_get_kernel_dispatch_type.
+
+2016-03-07 Andre Vieira <andre.simoesdiasvieira@arm.com>
+
+ * config/arm/arm-cores.def (cortex-r8): New.
+ * config/arm/arm-tables.opt (cortex-r8): Regenerate.
+ * config/arm/arm-tune.md: Likewise.
+ * gcc/doc/invoke.texi: Add cortex-r8 to list of cpu values.
+
+2016-03-07 Martin Sebor <msebor@redhat.com>
+
+ PR rtl-optimization/19705
+ * doc/invoke.texi (Options That Control Optimization): Clarify
+ -fno-branch-count-reg.
+
+2016-02-26 Richard Biener <rguenther@suse.de>
+ Jeff Law <law@redhat.com>
+
+ PR tree-optimization/69740
+ * cfghooks.c (remove_edge): Request loop fixups if we delete
+ an edge that might turn an irreducible loop into a natural
+ loop.
+ * cfgloop.h (check_verify_loop_structure): Clear LOOPS_NEED_FIXUP.
+ Move after definition of loops_state_clear.
+
+2016-03-07 Bin Cheng <bin.cheng@arm.com>
+
+ PR rtl-optimization/69052
+ * rtlanal.c (commutative_operand_precedence): Set higher precedence
+ to CONST_WIDE_INT.
+
+2016-03-07 Tom de Vries <tom@codesourcery.com>
+
+ PR tree-optimization/70116
+ * tree-ssa-tail-merge.c (merge_stmts_p): New function, handling
+ is_tm_ending stmts and ubsan/asan internal functions.
+ (find_duplicate): Use it. Don't test is_tm_ending here.
+
+2016-03-07 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/70115
+ * tree-ssa-loop-ivcanon.c (propagate_into_all_uses): Remove.
+ (propagate_constants_for_unrolling): Use replace_uses_by.
+
+2016-03-07 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR middle-end/69916
+ * omp-low.c (struct oacc_loop): Add ifns.
+ (new_oacc_loop_raw): Initialize it.
+ (finish_oacc_loop): Clear mask & flags if no ifns.
+ (oacc_loop_discover_walk): Count IFN_GOACC_LOOP calls.
+ (oacc_loop_xform_loop): Add ifns arg & adjust.
+ (oacc_loop_process): Adjust oacc_loop_xform_loop call.
+
+2016-03-07 Richard Henderson <rth@redhat.com>
+
+ PR rtl-opt/70061
+ * tree-outofssa.c (emit_partition_copy): Flush pending stack adjust.
+ (insert_value_copy_on_edge): Likewise.
+
+2016-03-07 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ * config/arm/arm_neon.h: Show error if using with soft-float ABI.
+
+2016-03-07 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ PR target/62281
+ * config/i386/sol2.h (STACK_REALIGN_DEFAULT): Define.
+
+2016-03-05 Venkataramanan Kumar <Venkataramanan.kumar@amd.com>
+
+ * config/i386/i386.c (znver1_cost): Fix Multiply cost.
+
+2016-03-05 Venkataramanan Kumar <Venkataramanan.kumar@amd.com>
+
+ Fix sseimul type attribute.
+ * config/i386/znver1.md
+ (znver1_sseimul, znver1_sseimul_avx256, znver1_sseimul_load,
+ znver1_sseimul_avx256_load) : Fix the type attribute.
+ (znver1_sseimul_di, znver1_sseimul_load_di): Fix type attribute,
+ pipe usage and latency.
+
+2016-03-05 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/70084
+ * tree-inline.c (copy_tree_body_r): When cancelling ADDR_EXPR
+ of INDIRECT_REF and ADDR_EXPR changed type, fold_convert it
+ to the right type.
+
+2016-03-04 Bernd Schmidt <bschmidt@redhat.com>
+
+ PR c/69973
+ * targhooks.c (default_vector_alignment): Limit to MAX_OFILE_ALIGNMENT.
+
+ PR rtl-optimization/69941
+ * postreload.c (reload_combine_recognize_pattern): Ensure all uses of
+ the reg share its mode.
+
+2016-03-04 Jeff Law <law@redhat.com>
+
+ PR tree-optimization/69196
+ * tree-ssa-threadbackward.c (fsm_find_control_statement_thread_paths):
+ If the both SSA_NAMEs are anonymous, then consider them unassociated
+ and include the PHI in the statement count.
+
+2016-03-05 Tom de Vries <tom@codesourcery.com>
+
+ * omp-low.c (check_omp_nesting_restrictions): Check for non-oacc
+ construct in oacc routine. Check for oacc region in oacc routine.
+
+2016-03-04 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/70062
+ * config/i386/i386.c (decide_alg): Add RECUR argument. Revert
+ 2016-02-22 changes, instead don't recurse if RECUR is already true.
+ Don't change *dynamic_check if RECUR. Adjust recursive caller
+ to pass true to the new argument.
+ (ix86_expand_set_or_movmem): Adjust decide_alg caller.
+
+ PR target/70059
+ * config/i386/sse.md (vec_set_lo_<mode><mask_name>,
+ <extract_type_2>_vinsert<shuffletype><extract_suf_2>_mask): Formatting
+ fixes.
+ (vec_set_hi_<mode><mask_name>): Likewise. Swap VEC_CONCAT operands.
+
+2016-03-04 Bernd Schmidt <bschmidt@redhat.com>
+
+ PR rtl-optimization/57676
+ * lra-assigns.c (lra_assign): Guard test for maximum iterations
+ with flag_checking.
+
+2016-03-04 Ilya Enkovich <enkovich.gnu@gmail.com>
+
+ * tree-vect-patterns.c (search_type_for_mask): Handle
+ comparison of booleans.
+
+2016-03-04 Jakub Jelinek <jakub@redhat.com>
+
+ * doc/extend.texi (__builtin_alloca, __builtin_alloca_with_align):
+ Fix @xref usage.
+
+ PR debug/69947
+ * dwarf2out.c (prune_unused_types_walk_loc_descr): Handle
+ all other ops that have dw_val_class_die_ref operands,
+ and DW_OP_GNU_entry_value.
+
+2016-03-03 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ PR rtl-optimization/69904
+ * config/arm/arm.c (arm_cannot_copy_insn_p):
+ Return true for load-exclusive instructions.
+
+2016-03-03 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/70021
+ * tree-vect-stmts.c (vect_mark_relevant): Remove USED_IN_PATTERN
+ argument, if STMT_VINFO_IN_PATTERN_P (stmt_info), always mark
+ the pattern no matter if it is used just by non-pattern, pattern
+ or mix thereof.
+ (process_use, vect_mark_stmts_to_be_vectorized): Adjust callers.
+ * tree-vect-patterns.c (vect_recog_vector_vector_shift_pattern): If
+ oprnd1 def_stmt is in pattern, don't look through it.
+
+2016-03-03 Marek Polacek <polacek@redhat.com>
+
+ PR middle-end/70050
+ * match.pd (X % -Y): Add INTEGRAL_TYPE_P check.
+
+2016-03-03 Martin Liska <mliska@suse.cz>
+
+ PR tree-optimization/70043
+ * tree-vect-loop.c (optimize_mask_stores): Move iterator to
+ previous statement if we see a debug statement.
+
+2016-03-03 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/55936
+ * tree-vrp.c (compare_name_with_value): Add use_equiv_p
+ parameter and guard unsafe equivalence use.
+ (vrp_evaluate_conditional_warnv_with_ops): Always use
+ safe equivalences but not via the quadratic compare_names
+ helper.
+
+2016-03-03 Michael Collison <michael.collison@linaro.org>
+
+ PR target/70014
+ * config/arm/arm.md (*subsi3_carryin_const): Change predicate
+ for operand 1 to s_register_operand. Change predicate for operand
+ 2 to arm_not_immediate_operand.
+
+2016-03-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ * doc/tm.texi: Regenerated.
+
+2016-03-02 Richard Henderson <rth@redhat.com>
+
+ PR rtl-opt/67145
+ * simplify-rtx.c (simplify_plus_minus): Allow reassoc without
+ simplification when all args are positive non-fixed registers.
+
+2016-03-02 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
+
+ * target.def (lra_p): Specify that new ports should use LRA.
+
+2016-03-02 Jakub Jelinek <jakub@redhat.com>
+
+ PR libgomp/69555
+ * gimplify.c (gimplify_decl_expr): For decls with REFERENCE_TYPE, also
+ gimplify_type_sizes the type they refer to.
+ (omp_notice_variable): Handle reference vars to VLAs.
+ * omp-low.c (lower_omp_target): Emit setup of OMP_CLAUSE_PRIVATE
+ reference to VLA decls in the second pass instead of first pass.
+
+2016-03-02 Tom de Vries <tom@codesourcery.com>
+
+ PR tree-optimization/68659
+ * graphite-isl-ast-to-gimple.c (collect_all_ssa_names): Handle
+ new_expr == NULL_TREE.
+ (get_new_name): Handle ADDR_EXPR.
+
+2016-03-02 Bin Cheng <bin.cheng@arm.com>
+
+ PR rtl-optimization/69052
+ * loop-invariant.c (canonicalize_address): New function.
+ (inv_can_prop_to_addr_use): Check validity of address expression
+ which is canonicalized by above function.
+
+2016-03-02 Alan Modra <amodra@gmail.com>
+
+ PR ipa/69990
+ * ipa-icf.c (sem_variable::merge): Do not merge an alias with
+ larger alignment.
+
+2016-03-02 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/70028
+ * config/i386/i386.md (kmovw): Move m constraint to 2nd alternative.
+ (*movhi_internal): Put mask moves from and to memory separately
+ from moves from/to GPRs.
+
+2016-03-02 Richard Biener <rguenther@suse.de>
+
+ * genmatch.c (dt_node::gen_kids): Fix match code-gen for embedded
+ GENERIC expressions in GIMPLE.
+
+2016-03-02 Richard Biener <rguenther@suse.de>
+
+ * config/i386/i386.c (type_natural_mode): Fix typo.
+
+2016-03-02 Nick Clifton <nickc@redhat.com>
+
+ * config.gcc (mep-*-elf): Add newlib-stdint.h to tm_file.
+
+2016-03-02 Richard Biener <rguenther@suse.de>
+ Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/67278
+ * config/i386/i386.c (type_natural_mode): Handle XFmode vectors.
+
+2016-03-02 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/67278
+ * tree-cfg.c (verify_expr): Adjust BIT_FIELD_REF case.
+
+2016-03-02 Marek Polacek <polacek@redhat.com>
+
+ PR c/67854
+ * gimplify.c (gimplify_va_arg_expr): Use expanded location for the
+ "is promoted to" warning.
+
+2016-03-01 DJ Delorie <dj@redhat.com>
+
+ * config.gcc: Deprecate mep-*.
+
+2016-03-01 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR middle-end/70025
+ * lra-constraints.c (regno_val_use_in): New.
+ (match_reload): Use it instead of regno_use_in.
+
+2016-03-01 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR rtl-optimization/70007
+ * gcse.c (compute_ld_motion_mems): Tidy up and also invalidate memory
+ references present in REG_EQUAL notes attached to non-SET patterns.
+
+2016-03-01 Jeff Law <law@redhat.com>
+
+ PR tree-optimization/69196
+ * tree-ssa-threadbackward.c (fsm_find_control_statement_thread_paths):
+ Appropriately clamp the number of statements to copy when the
+ thread path does not traverse a loop backedge.
+
+ PR tree-optimization/69196
+ * tree-ssa-threadbackward.c (fsm_find_control_statement_thread_paths):
+ Do count some PHIs in the thread path against the insn count. Decrease
+ final statement count by one as the control statement in the last
+ block will get removed. Remove special cased code for handling PHIs
+ in the last block.
+
+2016-03-01 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/70027
+ * config/i386/i386.c (ix86_output_call_insn): Add -masm=intel
+ asm dialect alternatives to explicit GOTPCREL calls.
+
+2016-03-01 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR ada/70017
+ * ira.c (do_reload): Issue warning for generic stack checking here...
+ * reload1.c (reload): ...instead of here and streamline it.
+
+2016-03-01 Nick Clifton <nickc@redhat.com>
+
+ * config.gcc (cr16-*-elf): Add newlib-stdint.h to tm_file.
+
+2016-03-01 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/69983
+ * tree-chrec.c (eq_evolutions_p): Handle conversions, compare
+ types and fall back to operand_equal_p.
+
+2016-03-01 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ Revert
+ 2016-03-01 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * config/s390/constraints.md ("jm8"): New constraint.
+ * config/s390/predicates.md ("const_int_8bitset_operand"): New
+ predicate.
+ * config/s390/s390.md ("*setmem_long", "*setmem_long_and"): Merge
+ into ...
+ ("*setmem_long<setmem_and>"): New pattern.
+ ("*setmem_long_31z", "*setmem_long_and_31z"): Merge
+ into ...
+ ("*setmem_long_31z<setmem_and>"): New pattern.
+ * config/s390/subst.md ("setmem_31z_subst", "setmem_and_subst"):
+ New substitution rules with the required attributes.
+
+
+2016-03-01 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ Revert
+ 2016-03-01 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * gensupport.c (process_substs_on_one_elem): Split loop to
+ complete mark_operands_used_in_match_dup on all expressions in the
+ vector first.
+ (adjust_operands_numbers): Inline into process_substs_on_one_elem
+ and remove function.
+
+2016-03-01 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/70022
+ * fold-const.c (fold_indirect_ref_1): Fix range checking for
+ vector BIT_FIELD_REF extract.
+
+2016-03-01 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/69994
+ * tree-ssa-reassoc.c (ops_equal_values_p): Handle missing case.
+
+2016-03-01 Ilya Enkovich <enkovich.gnu@gmail.com>
+
+ PR tree-optimization/69956
+ * tree-vect-stmts.c (supportable_widening_operation): Support
+ multi-step conversion of boolean vectors.
+ (supportable_narrowing_operation): Likewise.
+
+2016-03-01 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * config/s390/s390.c (s390_decompose_address): Don't accept SImode
+ anymore.
+
+2016-03-01 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * config/s390/subst.md (DSI_VI): New mode iterator.
+ ("addr_style_op_subst"): Use DSI_VI instead of DSI.
+ * config/s390/vector.md ("vec_set<mode>"): Move expander before
+ the insn definition.
+ ("*vec_set<mode>"): Change predicate and add alternative to
+ support only either register or const_int operands as element
+ selector.
+ ("*vec_set<mode>_plus"): New pattern to support reg + const_int
+ operands.
+ ("vec_extract<mode>"): New expander.
+ ("*vec_extract<mode>"): New insn definition supporting reg and
+ const_int element selectors.
+ ("*vec_extract<mode>_plus"): New insn definition supporting
+ reg+const_int element selectors.
+ ("rotl<mode>3", "ashl<mode>3", "ashr<mode>3"): Merge into the
+ following expander+insn definition.
+ ("<vec_shifts_name><mode>3"): New expander.
+ ("*<vec_shifts_name><mode>3<addr_style_op>"): New insn definition.
+
+2016-03-01 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * config/s390/s390.md ("*tabort_1"): Change predicate to
+ nonmemory_operand. Add a second alternative to cover
+ register as well as const int operands.
+ ("*tabort_1_plus"): New pattern definition.
+
+2016-03-01 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * config/s390/s390.md ("*ashrdi3_cc_31")
+ ("*ashrdi3_cconly_31""*ashrdi3_cc_31_and")
+ ("*ashrdi3_cconly_31_and", "*ashrdi3_31_and", "*ashrdi3_31"):
+ Merge insn definitions into ...
+ ("*ashrdi3_31<addr_style_op_cc><masked_op_cc><setcc><cconly>"):
+ New pattern definition.
+ ("*ashr<mode>3_cc", "*ashr<mode>3_cconly", "ashr<mode>3", )
+ ("*ashr<mode>3_cc_and", "*ashr<mode>3_cconly_and")
+ ("*ashr<mode>3_and"): Merge insn definitions into ...
+ ("*ashr<mode>3<addr_style_op_cc><masked_op_cc><setcc><cconly>"):
+ New pattern definition.
+ * config/s390/subst.md ("addr_style_op_cc_subst")
+ ("masked_op_cc_subst", "setcc_subst", "cconly_subst"): New
+ substitutions patterns plus attributes.
+ Add ashiftrt to SUBST iterator.
+
+2016-03-01 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * config/s390/s390.md ("<shift><mode>3"): Change predicate of
+ op2 to nonmemory_operand.
+ ("*<shift>di3_31", "*<shift>di3_31_and"):
+ Merge into single pattern definition ...
+ ("*<shift>di3_31<addr_style_op><masked_op>"): New pattern.
+ ("*<shift><mode>3", "*<shift><mode>3_and"): Merge into single
+ pattern definition ...
+ ("*<shift><mode>3<addr_style_op><masked_op>"): New pattern.
+ * config/s390/subst.md: Add ashift and lshiftrt to SUBST
+ iterator.
+
+2016-03-01 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * config/s390/predicates.md (const_int_6bitset_operand): New
+ predicate.
+ * config/s390/s390.md: Include subst.md.
+ ("rotl<mode>3"): New expander.
+ ("rotl<mode>3", "*rotl<mode>3_and"): Merge insn definitions into
+ ...
+ ("*rotl<mode>3<addr_style_op><masked_op>"): New insn definition.
+ * config/s390/subst.md: New file.
+
+2016-03-01 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * config/s390/s390.md ("op_type", "atype", "length" attributes):
+ Remove RRR type. It doesn't really exist.
+ ("RRer", "f0", "v0", "vf", "vd", "op1", "Rf"): Remove mode
+ attributes.
+ ("BFP", "DFP", "nDSF", "nDFDI"): Add mode attributes.
+ ("*cmp<mode>_ccs", "floatdi<mode>2", "add<mode>3")
+ ("*add<mode>3_cc", "*add<mode>3_cconly", "sub<mode>3")
+ ("*sub<mode>3_cc", "*sub<mode>3_cconly", "mul<mode>3")
+ ("fma<mode>4", "fms<mode>4", "div<mode>3", "*neg<mode>2")
+ ("*abs<mode>2", "*negabs<mode>2", "sqrt<mode>2"): Override
+ `enabled' attribute.
+
+2016-03-01 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * gensupport.c (process_substs_on_one_elem): Split loop to
+ complete mark_operands_used_in_match_dup on all expressions in the
+ vector first.
+ (adjust_operands_numbers): Inline into process_substs_on_one_elem
+ and remove function.
+
+2016-02-29 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR target/69706
+ * config/sparc/sparc.c (NWORDS_UP): Rename to...
+ (CEIL_NWORDS): ...this. Use CEIL macro.
+ (compute_fp_layout): Adjust to above renaming.
+ (function_arg_union_value): Likewise.
+ (sparc_arg_partial_bytes): Likewise.
+ (sparc_function_arg_advance): Likewise.
+
+2016-02-29 Jeff Law <law@redhat.com>
+
+ PR tree-optimization/70005
+ * tree-ssa-uncprop.c (associate_equivalences_with_edges): Handle case
+ where an object with a boolean range is compared against a value
+ outside [0..1].
+
+ PR tree-optimization/69999
+ * gimple-ssa-split-paths.c (split_paths): When duplicating a block
+ with an outgoing edge marked with EDGE_IRREDUCIBLE_LOOP, schedule
+ loop cleanups.
+
+2016-02-29 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/69994
+ * tree-ssa-reassoc.c (gimple_nop_conversion_p): New function.
+ (get_unary_op): Look through nop conversions.
+ (ops_equal_values_p): New function, look for equality diregarding
+ nop conversions.
+ (eliminate_plus_minus_pair): Use ops_equal_values_p
+ (repropagate_negates): Do not use get_unary_op here.
+
+2016-02-29 Martin Liska <mliska@suse.cz>
+
+ * system.h: Poison ENABLE_CHECKING macro.
+
+2016-02-29 Martin Liska <mliska@suse.cz>
+
+ * hsa-gen.c (gen_body_from_gimple): Dump only if TDF_DETAILS
+ is presented in dump flags.
+ * hsa-regalloc.c (linear_scan_regalloc): Likewise.
+ (hsa_regalloc): Likewise.
+
+2016-02-19 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/69980
+ * tree-vect-slp.c (vect_attempt_slp_rearrange_stmts): Update
+ permutation of those we need to keep.
+
+2016-02-29 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR target/69706
+ * config/sparc/sparc.c (ROUND_ADVANCE): Rename to...
+ (NWORDS_UP): ...this
+ (init_cumulative_args): Minor tweaks.
+ (sparc_promote_function_mode): Likewise.
+ (scan_record_type): Delete.
+ (traverse_record_type): New function template.
+ (classify_data_t): New structure type.
+ (classify_registers): New inline function.
+ (function_arg_slotno): In 64-bit mode, bail out early if FP slots are
+ exhausted. Instantiate traverse_record_type on classify_registers and
+ deal with the case of a structure passed in slot #15 with no FP field
+ in the first word.
+ (assign_data_t): New structure type.
+ (compute_int_layout): New static function.
+ (compute_fp_layout): Likewise.
+ (count_registers): New inline function.
+ (assign_int_registers): New static function.
+ (assign_fp_registers): Likewise.
+ (assign_registers): New inline function.
+ (function_arg_record_value_1): Delete.
+ (function_arg_record_value_2): Likewise.
+ (function_arg_record_value_3): Likewise.
+ (function_arg_record_value): Adjust to above changes. Instantiate
+ traverse_record_type on count_registers to first count the number of
+ registers to be used and then on assign_registers to assign them.
+ (function_arg_union_value): Adjust to above renaming.
+ (sparc_function_arg_1); Minor tweaks. Remove commented out code.
+ (sparc_arg_partial_bytes): Adjust to above renaming. Deal with the
+ case of a structure passed in slot #15
+ (sparc_function_arg_advance): Likewise.
+ (function_arg_padding): Minor tweak.
+
+2016-02-29 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/69720
+ * tree-vect-loop.c (get_initial_def_for_reduction): Avoid
+ the adjustment_def path for possibly vectorized defs.
+ (vect_create_epilog_for_reduction): Handle vectorized initial
+ defs properly.
+
+2016-02-28 Eric Botcazou <ebotcazou@adacore.com>
+
+ * config/i386/cygming.h (STACK_REALIGN_DEFAULT): Define.
+
+2016-02-27 Jeff Law <law@redhat.com>
+
+ Revert
+ 2016-02-26 Richard Biener <rguenther@suse.de>
+ Jeff Law <law@redhat.com>
+
+ PR tree-optimization/69740
+ * cfghooks.c (remove_edge): Request loop fixups if we delete
+ an edge that might turn an irreducible loop into a natural
+ loop.
+
+2016-02-27 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/69896
+ * tree-vect-generic.c (get_compute_type): Avoid single element
+ vector types.
+
+2016-02-26 Evandro Menezes <e.menezes@samsung.com>
+
+ Rename the AArch64 tuning option and related functions to enable the
+ Newton series for the reciprocal square root to reflect its
+ approximative characteristic.
+
+ * config/aarch64/aarch64-protos.h (aarch64_emit_swrsqrt): Rename
+ function to "aarch64_emit_approx_rsqrt".
+ * config/aarch64/aarch64-tuning-flags.def: Rename tuning flag to
+ AARCH64_EXTRA_TUNE_APPROX_RSQRT.
+ * config/aarch64/aarch64.c (exynosm1_tunigs): Use new flag name.
+ (xgene1_tunings): Likewise.
+ (use_rsqrt_p): Likewise.
+ (aarch64_emit_swrsqrt): Use new function name.
+ * config/aarch64/aarch64-simd.md (aarch64_rsqrts_*): Likewise.
+ * config/aarch64/aarch64.opt (mlow-precision-recip-sqrt): Reword the
+ text explaining this option.
+ * doc/invoke.texi (-mlow-precision-recip-sqrt): Likewise.
+
+2016-02-26 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/69969
+ * config/rs6000/rs6000.c (rs6000_option_override_internal): Don't
+ complain about -mallow-movmisalign without -mvsx if
+ TARGET_ALLOW_MOVMISALIGN was not set explicitly.
+
+2016-02-26 Joel Sherrill <joel@rtems.org>
+
+ * config.gcc: Add x86_64-*-rtems*.
+ * gcc/config/i386/rtems-64.h: New file.
+
+2016-02-26 Joel Sherrill <joel@rtems.org>
+
+ * config.gcc: Add aarch64-*-rtems*.
+ * gcc/config/aarch64/rtems.h: New file.
+
+2016-02-26 Segher Boessenkool <segher@kernel.crashing.org>
+
+ PR target/69946
+ * config/rs6000/rs6000.c (rs6000_insn_for_shift_mask): Print rlwinm
+ shift amount using %h. Add comment.
+
+2016-02-26 Richard Biener <rguenther@suse.de>
+ Jeff Law <law@redhat.com>
+
+ PR tree-optimization/69740
+ * cfghooks.c (remove_edge): Request loop fixups if we delete
+ an edge that might turn an irreducible loop into a natural
+ loop.
+
+2016-02-26 Martin Jambor <mjambor@suse.cz>
+
+ PR middle-end/69920
+ * tree-sra.c (sra_modify_assign): Do not remove loads of
+ uninitialized aggregates to SSA_NAMEs.
+
+2016-02-26 Richard Henderson <rth@redhat.com>
+
+ PR target/69709
+ * config/s390/s390.md (risbg and risbgn splitters): Allocate new
+ pseudo in case the target rtx matches the source of the left
+ shift.
+
+2016-02-26 Martin Jambor <mjambor@suse.cz>
+
+ PR hsa/69568
+ * hsa.h (hsa_type_packed_p): Declare.
+ * hsa.c (hsa_type_packed_p): New function.
+ * hsa-gen.c (mem_type_for_type): Use unsigned type for packed
+ loads.
+ (gen_hsa_insns_for_store): Use hsa_type_packed_p.
+ * hsa-brig.c (emit_basic_insn): Likewise.
+
+2016-02-26 Martin Jambor <mjambor@suse.cz>
+
+ pr hsa/69674
+ * hsa-gen.c (gen_hsa_phi_from_gimple_phi): Use proper hsa type for
+ pointers.
+ (gen_hsa_addr): Allow integer constants in TMR_INDEX2.
+
+2016-02-26 Martin Jambor <mjambor@suse.cz>
+
+ * hsa.h (is_a_helper): New overload for hsa_op_immed for
+ hsa_op_with_type operands.
+ (hsa_unsigned_type_for_type): Declare.
+ * hsa.c (hsa_unsigned_type_for_type): New function.
+ * hsa-gen.c (gen_hsa_binary_operation): Use hsa_unsigned_type_for_type.
+ (gen_hsa_insns_for_operation_assignment): Satisfy constrains of
+ the finalizer. Do not emit extra move.
+
+2016-02-26 Martin Jambor <mjambor@suse.cz>
+
+ * hsa-gen.c (gen_hsa_ternary_atomic_for_builtin): Fail in presence of
+ atomic operations in private segment.
+
+2016-02-26 Martin Jambor <mjambor@suse.cz>
+
+ * omp-low.c (grid_find_ungridifiable_statement): Store problematic
+ statements to wi->info. Also disallow omp simd constructs.
+ (grid_target_follows_gridifiable_pattern): Use wi.info to dump reason
+ for not gridifying. Dump special string for omp_for.
+
+2016-02-26 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ PR target/69245
+ * config/aarch64/aarch64.c (aarch64_set_current_function):
+ Save/restore target globals when switching to
+ target_option_default_node.
+
+2016-02-26 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ PR target/69613
+ * config/aarch64/aarch64.c (aarch64_shift_truncation_mask):
+ Return 0 if !SHIFT_COUNT_TRUNCATED.
+
+2016-02-26 Jakub Jelinek <jakub@redhat.com>
+ Eric Botcazou <ebotcazou@adacore.com>
+
+ PR rtl-optimization/69891
+ * dse.c (scan_insn): If we can't figure out memset arguments
+ or they are non-constant, call clear_rhs_from_active_local_stores.
+
+2016-02-26 Martin Liska <mliska@suse.cz>
+
+ * doc/extend.texi: Mention clog10, clog10f an clog10l
+ in Builtins section.
+
+2016-02-26 Martin Liska <mliska@suse.cz>
+
+ * dwarf2out.c (new_loc_descr): Replace ENABLE_CHECKING with
+ CHECKING_P.
+ (resolve_args_picking_1): Likewise.
+ * dwarf2out.h (struct GTY): Likewise.
+
+2016-02-26 Martin Liska <mliska@suse.cz>
+
+ * hsa-gen.c (generate_hsa): Replace ENABLE_CHECKING macro
+ with flag_checking.
+ * hsa-regalloc.c (linear_scan_regalloc): Likewise.
+
+2016-02-26 Markus Trippelsdorf <markus@trippelsdorf.de>
+ Martin Liska <mliska@suse.cz>
+
+ * doc/install.texi: Mention --enable-valgrind-annotations.
+
+2016-02-26 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/69551
+ * tree-ssa-structalias.c (get_constraint_for_ssa_var): When
+ looking through aliases adjust DECL_PT_UID to refer to the
+ ultimate alias target.
+
+2016-02-25 Martin Liska <mliska@suse.cz>
+
+ PR middle-end/69919
+ * alloc-pool.c (after_memory_report): New variable.
+ * alloc-pool.h (base_pool_allocator ::release): Do not use
+ the infrastructure if after_memory_report.
+ * toplev.c (toplev::main): Mark after memory report.
+
+2016-02-25 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/48795
+ * tree-vrp.c (check_array_ref): Use array_at_struct_end_p.
+
+2016-02-25 Ilya Verbin <ilya.verbin@intel.com>
+
+ PR driver/68463
+ * config/gnu-user.h (CRTOFFLOADBEGIN): Define. Add crtoffloadbegin.o if
+ offloading is enabled and -fopenacc or -fopenmp is specified.
+ (CRTOFFLOADEND): Likewise.
+ (GNU_USER_TARGET_STARTFILE_SPEC): Add CRTOFFLOADBEGIN.
+ (GNU_USER_TARGET_ENDFILE_SPEC): Add CRTOFFLOADEND.
+ * lto-wrapper.c (offloadbegin, offloadend): Remove static vars.
+ (offload_objects_file_name): New static var.
+ (tool_cleanup): Remove offload_objects_file_name file.
+ (find_offloadbeginend): Replace with ...
+ (find_crtoffloadtable): ... this.
+ (run_gcc): Remove offload_argc and offload_argv.
+ Get offload_objects_file_name from -foffload-objects=... option.
+ Read names of object files with offload from this file, pass them to
+ compile_images_for_offload_targets. Don't call find_offloadbeginend and
+ don't pass offloadbegin and offloadend to the linker. Don't pass
+ offload non-LTO files to the linker, because now they're not claimed.
+
+2016-02-25 Jan Hubicka <hubicka@ucw.cz>
+
+ PR ipa/69630
+ * ipa-devirt.c (possible_polymorphic_call_targets): Do not ICE
+ on builtin_unreachable.
+
+2016-02-25 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/69896
+ * regcprop.c: Include cfgrtl.h.
+ (copyprop_hardreg_forward_1): If noop_p insn uses narrower
+ than remembered mode, either delete it (if noop_move_p), or
+ treat like copy_p but not noop_p instruction.
+
+2016-02-24 Jakub Jelinek <jakub@redhat.com>
+
+ PR debug/69705
+ * dwarf2out.c (gen_variable_die): Work around buggy LTO
+ - allow NULL decl for Fortran DW_TAG_common_block variables.
+
+2016-02-24 Jason Merrill <jason@redhat.com>
+
+ * common.opt (flifetime-dse): Add -flifetime-dse=1.
+
+2016-02-24 Richard Biener <rguenther@suse.de>
+ Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/69760
+ * tree-scalar-evolution.c (interpret_rhs_expr): Re-write
+ conditionally executed ops to well-defined overflow behavior.
+
+2016-02-24 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/69915
+ * tree.c (build_vector_from_ctor): Fix handling of VECTOR_CST
+ elements.
+
+2016-02-24 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ PR rtl-optimization/69886
+ * gcse.c (can_assign_to_reg_without_clobbers_p): Accept mode
+ argument. Use it when checking validity of set instructions.
+ (want_to_gcse_p): Pass mode to can_assign_to_reg_without_clobbers_p.
+ (compute_ld_motion_mems): Update can_assign_to_reg_without_clobbers_p
+ callsite.
+ * rtl.h (can_assign_to_reg_without_clobbers_p): Update prototype.
+ * store-motion.c (find_moveable_store): Update
+ can_assign_to_reg_without_clobbers_p callsite.
+
+2016-02-24 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/68963
+ * tree-ssa-loop-niter.c (derive_constant_upper_bound_ops): Fix
+ bogus check.
+ (record_nonwrapping_iv): Do not fall back to the low/high bound
+ for non-constant IV bases if the stmt is not always executed.
+
+2016-02-24 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ * config/arm/arm-cores.def (cortex-a32): New entry.
+ * config/arm/arm-tables.opt: Regenerate.
+ * config/arm/arm-tune.md: Regenerate.
+ * config/arm/bpabi.h (BE8_LINK_SPEC): Add mcpu=cortex-a32.
+ * config/arm/t-aprofile: Handle mcpu=cortex-a32.
+ * doc/invoke.texi (ARM Options): Document cortex-a32 as value
+ for -mcpu and -mtune.
+
+2016-02-24 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ PR target/69875
+ * config/arm/arm.h (TARGET_HAVE_LPAE): Define.
+ * config/arm/unspecs.md (VUNSPEC_LDRD_ATOMIC): New value.
+ * config/arm/sync.md (arm_atomic_loaddi2_ldrd): New pattern.
+ (atomic_loaddi_1): Delete.
+ (atomic_loaddi): Rewrite expander using the above changes.
+
+2016-02-24 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/69918
+ * params.def (PARAM_MAX_SSA_NAME_QUERY_DEPTH): Bump default from
+ 2 to 3.
+
+2016-02-24 Jakub Jelinek <jakub@redhat.com>
+ Richard Biener <rguenth@suse.de>
+
+ PR middle-end/69909
+ * expr.c (expand_expr_real_1) <normal_inner_ref>: Avoid
+ set_mem_attributes if tem is SSA_NAME which got expanded
+ as a MEM.
+
+2016-02-24 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/69907
+ * tree-vect-stmts.c (vectorizable_load): Check for gaps at the
+ end of permutations for BB vectorization.
+
+2016-02-24 Christian Bruel <christian.bruel@st.com>
+
+ * config/arm/arm-c.c (arm_option_override): Initialize
+ target_option_current_node.
+ * config/arm/arm.c (arm_pragma_target_parse): Replace
+ build_target_option_node call by target_option_current_node.
+ Set target_option_current_node.
+ Fix comments.
+
+2016-02-23 David Edelsohn <dje.gcc@gmail.com>
+
+ PR target/69810
+ * config/rs6000/rs6000.md (zero_extendqi<mode>2_dot): Convert from
+ define_insn_and_split to define_insn.
+ (zero_extendqi<mode>2_dot2): Same.
+ (extendqi<mode>2_dot): Same.
+ (extendqi<mode>2_dot2): Same.
+
+2016-02-23 Evandro Menezes <e.menezes@samsung.com>
+
+ * config/arm/exynos-m1.md: Change cost of STP, fix bypass for stores
+ and add bypass for AES{D,E} and AESMC pairs.
+ * config/aarch64/aarch64.c (exynosm1_tunings): Enable fusion of AES{D,E}
+ and AESMC pairs.
+
+2016-02-23 Evandro Menezes <e.menezes@samsung.com>
+
+ * config/aarch64/aarch64.c (exynosm1_tunings): Enable the Newton
+ series for reciprocal square root in Exynos M1.
+
+2016-02-23 Martin Sebor <msebor@redhat.com>
+
+ PR c/69759
+ * doc/extend.texi (Other Builtins): Document __builtin_alloca and
+ __builtin_alloca_with_align.
+
+2016-02-23 Richard Henderson <rth@redhat.com>
+
+ * config/i386/i386-c.c (ix86_target_macros): Remove __SEG_TLS.
+ (ix86_register_pragmas): Remove __seg_tls.
+ * config/i386/i386-protos.h (ADDR_SPACE_SEG_TLS): Remove.
+ * config/i386/i386.c (ix86_print_operand_address_as): Don't handle it.
+ (ix86_addr_space_subset_p, TARGET_ADDR_SPACE_SUBSET_P): Remove.
+ (ix86_addr_space_convert, TARGET_ADDR_SPACE_CONVERT): Remove.
+ (ix86_addr_space_debug, TARGET_ADDR_SPACE_DEBUG): Remove.
+ * doc/extend.texi (__seg_tls): Remove item.
+
+2016-02-23 Richard Biener <rguenther@suse.de>
+
+ * alloc-pool.h (struct allocation_object): Make id member
+ conditional on CHECKING_P again.
+ (get_instance): Adjust.
+ (base_pool_allocator): Likewise.
+
+2016-02-23 Thomas Schwinge <thomas@codesourcery.com>
+
+ * tree-parloops.c (create_parallel_loop, gen_parallel_loop)
+ (parallelize_loops): In OpenACC kernels mode, set n_threads to
+ zero.
+ (pass_parallelize_loops::gate): In OpenACC kernels mode, gate on
+ flag_openacc.
+ * tree-ssa-loop.c (gate_oacc_kernels): Likewise.
+
+2016-02-23 Richard Biener <rguenther@suse.de>
+
+ * mem-stats.h (struct mem_usage): Use PRIu64 for printing size_t.
+ * bitmap.h (struct bitmap_usage): Likewise.
+ (bitmap_move): Declare.
+ * bitmap.c (register_overhead): Take size_t argument.
+ (bitmap_move): New function.
+ * df-problems.c (df_rd_transfer_function): Use bitmap_move
+ to properly account overhead.
+ * tree.c (free_node): Use tree_size.
+
+2016-02-23 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/69902
+ * fold-const.c (fold_truth_not_expr): Propagate TREE_NO_WARNING
+ when inverting comparison.
+
+ PR c/69900
+ * common.opt (Wunreachable-code): Add Warning flag.
+
+2016-02-23 Mark Wielaard <mjw@redhat.com>
+ Jakub Jelinek <jakub@redhat.com>
+
+ PR c/69911
+ * cgraphunit.c (check_global_declaration): Check main_input_filename
+ and DECL_SOURCE_FILE are not NULL.
+
+2016-02-23 Martin Jambor <mjambor@suse.cz>
+
+ PR tree-optimization/69666
+ * tree-sra.c (sra_modify_assign): Do not attempt to create
+ default_def replacements for unscalarizable regions.
+
+2016-02-20 Mark Wielaard <mjw@redhat.com>
+
+ PR c/28901
+ * cgraphunit.c (check_global_declaration): Check level of
+ warn_unused_const_variable and main_input_filename.
+ * doc/invoke.texi (Warning Options): Add -Wunused-const-variable=.
+ (-Wunused-variable): For C implies -Wunused-const-variable=1.
+ (-Wunused-const-variable): Explain levels 1 and 2.
+
+2016-02-22 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/69888
+ * config/i386/i386.c (decide_alg): Ensure we don't recurse with
+ identical arguments. Formatting and spelling fixes.
+
+ PR target/69885
+ * doc/md.texi (ashl@var{m}3): Document that mode of operand 2 must
+ be specified.
+
+ PR target/69894
+ PR target/69895
+ * config/m68k/t-opts (OPTIONS_H_EXTRA): Add m68k-microarchs.def
+ and m68k-devices.def.
+ * config/c6x/t-c6x (OPTIONS_H_EXTRA): Add c6x-isas.def.
+ * config/aarch64/t-aarch64 (OPTIONS_H_EXTRA): Add aarch64-arches.def.
+
+2016-02-22 Cesar Philippidis <cesar@codesourcery.com>
+
+ * config/nvptx/nvptx.c (nvptx_gen_shuffle): Add support for QImode
+ and HImode registers.
+
+2016-02-22 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/69882
+ * tree-vect-slp.c (vect_attempt_slp_rearrange_stmts): Properly
+ preserve permutations present because of gaps.
+ (vect_supported_load_permutation_p): Always continue checking
+ permutations after vect_attempt_slp_rearrange_stmts.
+
+2016-02-22 Bin Cheng <bin.cheng@arm.com>
+
+ * tree-vect-loop.c (vect_estimate_min_profitable_iters): Dump
+ min_profitable_estimate, rather than min_profitable_iters.
+
+2016-02-22 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/69885
+ * config/m68k/m68k.md (ashldi3, ashrdi3, lshrdi3): Use
+ SImode for last match_operand.
+
+2016-02-22 Martin Liska <mliska@suse.cz>
+
+ * hsa-gen.c (gen_hsa_clrsb): In case of zero value,
+ return bitsize - 1 as the return value.
+
+2016-02-22 Oleg Endo <olegendo@gcc.gnu.org>
+
+ PR target/69806
+ PR target/54089
+ * config/sh/sh.c (sh_lshrsi_clobbers_t_reg_p, sh_dynamicalize_shift_p):
+ Handle negative shift counts.
+ * config/sh/sh.md (ashlsi3, lshrsi3_n, lshrsi3_n_clobbers_t): Don't use
+ force_reg on the shift constant.
+ (lshrsi3): Likewise. Expand into lshrsi3_n* instead of lshrsi3_d.
+ (lshrsi3_d): Handle negative shift counts.
+
+2016-02-22 Richard Biener <rguenther@suse.de>
+ Tom de Vries <tom@codesourcery.com>
+
+ * graph.c: Include dumpfile.h.
+ (print_graph_cfg): Split into three overloads.
+ * gdbhooks.py (class DotFn): Add and instantiate, adding command dot-fn.
+
+2016-02-22 Tom de Vries <tom@codesourcery.com>
+
+ * gdbhooks.py (class DumpFn): Add and instantiate, adding command
+ dump-fn.
+
+2016-02-22 Richard Biener <rguenther@suse.de>
+
+ PR ipa/37448
+ * ipa-inline-transform.c (inline_call): When not updating
+ overall summaries adjust self size by the growth estimate.
+ * ipa-inline.c (inline_to_all_callers_1): Add to the callers
+ hash-set, do not update overall summaries here. Renamed from ...
+ (inline_to_all_callers): ... this which is now wrapping the
+ above and performing delayed overall summary update.
+ (early_inline_small_functions): Delay updating of the overall
+ summary.
+
+2016-02-21 Markus Trippelsdorf <markus@trippelsdorf.de>
+
+ * tree-chkp.c (chkp_mark_invalid_bounds_walker): Initialize
+ variable.
+
+2016-02-19 Jakub Jelinek <jakub@redhat.com>
+
+ PR driver/69805
+ * gcc.c (LINK_COMMAND_SPEC, GOMP_SELF_SPECS): Use
+ :%* in %:gt() argument.
+ (greater_than_spec_func): Adjust for expecting only numbers,
+ if there are more than two numbers, compare the last two.
+
+2016-02-19 Jonathan Wakely <jwakely@redhat.com>
+
+ * doc/invoke.texi (C++ Dialect Options): Clarify interaction of
+ -Wnarrowing with -std.
+
+2016-02-19 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/69851
+ * expr.c (store_field): Don't use bit-field path if exp is
+ COMPONENT_REF with TREE_ADDRESSABLE type, where TYPE_SIZE is
+ different from bitsize, but DECL_SIZE of FIELD_DECL is bitsize
+ and the assignment can be performed by bitwise copy. Formatting
+ fix.
+
+ PR middle-end/69838
+ * lra.c (lra_process_new_insns): If non-call exceptions are enabled,
+ call copy_reg_eh_region_note_forward on before and/or after sequences
+ and remove note from insn if it no longer can throw.
+
+ PR target/69820
+ * config/i386/sse.md (VI_512): Only include V64QImode and V32HImode
+ if TARGET_AVX512BW.
+
+2016-02-19 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * config/s390/vector.md: Add missing commutative operand markers
+ to the patterns which qualify for one.
+ * config/s390/vx-builtins.md: Likewise.
+
+2016-02-19 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * config/s390/vector.md (VI, VI_QHS): Add single element vector
+ types to mode iterators.
+ (vec_double): ... and mode attribute.
+ * config/s390/vx-builtins.md (non_vec_int): Likewise.
+
+2016-02-19 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * config/s390/vector.md ("<ti*>add<mode>3", "<ti*>sub<mode>3"):
+ Change the predicate of op2 from nonimmediate to general and let
+ reload fix it if necessary.
+
+2016-02-19 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * config/s390/vecintrin.h (vec_sub_u128): Define missing macro.
+
+2016-02-19 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * config/s390/s390.c (s390_expand_vcond): Use the compare operand
+ mode.
+
+2016-02-19 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * config/s390/s390-protos.h: Add s390_expand_vec_movstr prototype.
+ * config/s390/s390.c (s390_expand_vec_movstr): New function.
+ * config/s390/s390.md ("movstr<P:mode>"): Call
+ s390_expand_vec_movstr.
+
+2016-02-19 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * config/s390/s390.md: Add missing output modifier for operand 1
+ to print it as address properly.
+
+2016-02-19 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * config/s390/2827.md: Rename ooo_* insn attributes to zEC12_*.
+ * config/s390/2964.md: New file.
+ * config/s390/s390.c (s390_get_sched_attrmask): Use the right set
+ of insn grouping attributes depending on the CPU level.
+ (s390_get_unit_mask): New function.
+ (s390_sched_score): Remove the OOO from the scheduling macros.
+ Add loop to calculate a score for the instruction mix.
+ (s390_sched_reorder): Likewise plus improve debug output.
+ (s390_sched_variable_issue): Rename macros as above. Calculate
+ the unit distances after actually scheduling an insn. Improve
+ debug output.
+ (s390_sched_init): Clear last_scheduled_unit_distance array.
+ * config/s390/s390.md: Include 2964.md.
+
+2016-02-18 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/69671
+ * config/i386/sse.md (*<floatsuffix>floatv2div2sf2_mask_1,
+ *avx512vl_<code>v2div2qi2_mask_1, *avx512vl_<code><mode>v4qi2_mask_1,
+ *avx512vl_<code><mode>v8qi2_mask_1, *avx512vl_<code><mode>v4hi2_mask_1,
+ *avx512vl_<code>v2div2hi2_mask_1, *avx512vl_<code>v2div2si2_mask_1,
+ *avx512f_<code>v8div16qi2_mask_1): New insns.
+
+2016-02-18 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/68404
+ * config/rs6000/predicates.md (fusion_gpr_addis): Revert
+ 2016-02-09 change.
+
+ * config/rs6000/rs6000.md (fusion_gpr_load_<mode>): Remove
+ earlyclobber from target. Use wF constraint for fused memory
+ address.
+ (fusion_gpr_<P:mode>_<GPR_FUSION:mode>_load): Likewise.
+
+2016-02-18 Jakub Jelinek <jakub@redhat.com>
+ Martin Liska <mliska@suse.cz>
+
+ PR sanitizer/69863
+ * cfgexpand.c (asan_sanitize_stack_p): New function.
+ (partition_stack_vars): Use the function.
+ (expand_stack_vars): Likewise.
+ (defer_stack_allocation): Likewise.
+ (expand_used_vars): Likewise.
+
+2016-02-18 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/69553
+ * fold-const.c (operand_equal_p): Properly compare offsets for
+ IMAGPART_EXPR and ARRAY_REF.
+
+2016-02-18 Nick Clifton <nickc@redhat.com>
+
+ PR target/62254
+ PR target/69610
+ * config/arm/arm.c (arm_option_override_internal): Disable
+ interworking if the target does not support thumb instructions.
+ (arm_reload_in_hi): Handle the case where a register to register
+ move needs reloading because there is no simple pattern to handle
+ it.
+ (arm_reload_out_hi): Likewise.
+
+2016-02-18 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/69854
+ * match.pd: Don't use fold_binary or fold_unary for folding
+ constants.
+
2016-02-17 Jakub Jelinek <jakub@redhat.com>
PR c++/69850
@@ -753,7 +3623,7 @@
* lto-wrapper.c (append_diag_options): New function.
(compile_offload_image): Call append_diag_options.
-2016-02-08 Sandra Loosemore <sandra@codesourcery.com>
+2016-02-08 Sandra Loosemore <sandra@codesourcery.com>
PR other/69722
* doc/extend.texi (Flag Output Operands): Correct sectioning.
@@ -2539,12 +5409,12 @@
(pdr_add_memory_accesses): Same.
(pdr_add_data_dimensions): Same.
-2016-01-20 Sandra Loosemore <sandra@codesourcery.com>
+2016-01-20 Sandra Loosemore <sandra@codesourcery.com>
* doc/invoke.texi (Instrumentation Options): Clarify -mmpx linking
requirements.
-2016-01-20 Sandra Loosemore <sandra@codesourcery.com>
+2016-01-20 Sandra Loosemore <sandra@codesourcery.com>
* common.opt (feliminate-dwarf2-dups): Replace references to
"DWARF 2" with just "DWARF".
@@ -2689,7 +5559,7 @@
(gen_typedef_die): Likewise.
(force_type_die): Adjust call to modified_type_die.
-2016-01-19 Sandra Loosemore <sandra@codesourcery.com>
+2016-01-19 Sandra Loosemore <sandra@codesourcery.com>
* doc/standards.texi: Copy-editing for grammar, markup, and sentence
flow throughout the file. Fix broken link to Objective-C 2.0
@@ -2853,7 +5723,7 @@
2016-01-19 Martin Jambor <mjambor@suse.cz>
Martin Liska <mliska@suse.cz>
- Michael Matz <matz@suse.de>
+ Michael Matz <matz@suse.de>
* Makefile.in (OBJS): Add new source files.
(GTFILES): Add hsa.c.
@@ -2994,7 +5864,7 @@
* tree-ssanames.c (ssa_name_has_boolean_range): Remove unnecessary
test.
-2016-01-18 Sandra Loosemore <sandra@codesourcery.com>
+2016-01-18 Sandra Loosemore <sandra@codesourcery.com>
* doc/invoke.texi (Invoking GCC): Add new section to menu.
(Option Summary): Update to reflect new section and moved options.
@@ -3530,14 +6400,14 @@
use block_ultimate_origin
(noncall-stmt_may_be_vtbl_ptr_store): Likewise.
-2016-01-13 Sandra Loosemore <sandra@codesourcery.com>
+2016-01-13 Sandra Loosemore <sandra@codesourcery.com>
* doc/invoke.texi (Submodel Options): Rename section to
"Machine-Dependent Options" to better reflect its content.
Rewrite introductory text to remove archaic CPU names.
Update references.
-2016-01-13 Sandra Loosemore <sandra@codesourcery.com>
+2016-01-13 Sandra Loosemore <sandra@codesourcery.com>
* doc/invoke.texi (Code Gen Options): Move section up in file,
before target-specific options. Update menu and option summary
diff --git a/gcc/ChangeLog-2015 b/gcc/ChangeLog-2015
index 332523c..32f3efc 100644
--- a/gcc/ChangeLog-2015
+++ b/gcc/ChangeLog-2015
@@ -324,7 +324,7 @@
* tree-ssa-dom.c: Include dbgcnt.h
(dom_opt_dom_walker::before_dom_children): Handle the new counter.
-2015-12-21 Andrew Pinski <apinski@cavium.com>
+2015-12-21 Andrew Pinski <apinski@cavium.com>
* config/aarch64/aarch64-option-extensions.def (LSE): Change
FEAT_STRING to "atomics".
@@ -574,7 +574,7 @@
* config/aarch64/aarch64-protos.h (aarch64_mask_from_zextract_ops):
New prototype.
-2015-12-18 Robin Dapp <rdapp@linux.vnet.ibm.com>
+2015-12-18 Robin Dapp <rdapp@linux.vnet.ibm.com>
* config/s390/predicates.md: Change and rename
constm1_operand to all_ones_operand
@@ -601,7 +601,7 @@
* config/s390/s390.h: Default to z900 in the driver.
* doc/invoke.texi: Document the deprecation of g5 and g6.
-2015-12-18 Andris Pavenis <andris.pavenis@iki.fi>
+2015-12-18 Andris Pavenis <andris.pavenis@iki.fi>
* config/i386/djgpp-stdint.h: update typedefs for integer types
@@ -1414,7 +1414,7 @@
PR rtl-optimization/68730
* cfgrtl.c (cfg_layout_finalize): Free dominators.
-2015-12-13 Alexandre Oliva <aoliva@redhat.com>
+2015-12-13 Alexandre Oliva <aoliva@redhat.com>
PR debug/67355
* var-tracking.c (reverse_op): Don't add dummy zero to reverse
@@ -3754,7 +3754,7 @@
* tree-vect-slp.c (vect_get_mask_element): Remove.
(vect_transform_slp_perm_load): Implement in a simpler way.
-2015-11-26 Alexandre Oliva <aoliva@redhat.com>
+2015-11-26 Alexandre Oliva <aoliva@redhat.com>
PR rtl-optimization/67753
PR rtl-optimization/64164
@@ -3919,7 +3919,7 @@
TREE_READONLY, don't call use_pointer_for_field with non-NULL
second argument until we are sure we are keeping OMP_CLAUSE_SHARED.
-2015-11-26 Paolo Bonzini <bonzini@gnu.org>
+2015-11-26 Paolo Bonzini <bonzini@gnu.org>
* doc/implement-c.texi (Integers Implementation): Make GCC's promises
about signed left shift stronger and clarify the cases when they're
@@ -4373,7 +4373,7 @@
(gimple_fold_builtin_memory_op): Don't fold call if we
are going to instrument it and it may copy pointers.
-2015-11-24 Bernd Schmidt <bschmidt@redhat.com>
+2015-11-24 Bernd Schmidt <bschmidt@redhat.com>
Kyrylo Tkachov <kyrylo.tkachov@arm.com>
PR rtl-optimization/68194
@@ -4697,7 +4697,7 @@
* config/nvptx/nvptx.c (nvptx_use_anchors_for_symbol_p): New.
(TARGET_USE_ANCHORS_FOR_SYMBOL_P): Override.
-2015-11-20 Alan Hayward <alan.hayward@arm.com>
+2015-11-20 Alan Hayward <alan.hayward@arm.com>
PR tree-optimization/68413
* tree-vect-loop.c (vect_analyze_scalar_cycles_1): Cache
@@ -5575,7 +5575,7 @@
(if_convertible_loop_p_1): Initialize hash maps and predicates
before hashing data references and delete hashmaps at the end.
-2015-11-16 Thomas Preud'homme <thomas.preudhomme@arm.com>
+2015-11-16 Thomas Preud'homme <thomas.preudhomme@arm.com>
PR 56036
* doc/invoke.texi (Optimize Options): Move @end table to the right
@@ -5599,7 +5599,7 @@
in the user documentation.
(define_peephole2, define_split): Similarly.
-2015-11-16 Andris Pavenis <andris.pavenis@iki.fi>
+2015-11-16 Andris Pavenis <andris.pavenis@iki.fi>
* lto-streamer-out.c (write_global_references): Adjust integer type.
(lto_output_decl_state_refs): Likewise.
@@ -5881,7 +5881,7 @@
argument is 1, replace it with GOMP_ordered_* call instead of removing
it.
-2015-11-13 Rich Felker <dalias@libc.org>
+2015-11-13 Rich Felker <dalias@libc.org>
* config/sh/sh.md (symGOT_load): Suppress __stack_chk_guard
address loading hack for FDPIC targets.
@@ -6183,7 +6183,7 @@
* tree-vect-stmts.c (vectorizable_comparison): Provide vectype
for loop invariants.
-2015-11-13 Alan Hayward <alan.hayward@arm.com>
+2015-11-13 Alan Hayward <alan.hayward@arm.com>
PR tree-optimization/66558
* tree-vect-loop.c (is_integer_induction):Add.
@@ -8067,7 +8067,7 @@
the dominance info; free it if we can't.
(pass_call_cdce::execute): Don't free the dominance info here.
-2015-11-06 Jeff Law <law@redhat.com>
+2015-11-06 Jeff Law <law@redhat.com>
* tree-ssa-threadedge.c (dummy_simplify): Remove.
(thread_around_empty_blocks): Remove backedge_seen_p argument.
@@ -8100,7 +8100,7 @@
(build_scop_scattering): Call build_pbb_minimal_scattering_polyhedrons.
(build_poly_scop): Call build_scop_minimal_scattering.
-2015-11-06 Jeff Law <law@redhat.com>
+2015-11-06 Jeff Law <law@redhat.com>
* cfg-flags.def (IGNORE): New edge flag.
* tree-vrp.c (identify_jump_threads): Mark and clear edges
@@ -8426,7 +8426,7 @@
* config/i386/i386.c: Include gimple-iterator.h.
* config/aarch64/aarch64.c: Likewise.
-2015-11-06 Alexandre Oliva <aoliva@redhat.com>
+2015-11-06 Alexandre Oliva <aoliva@redhat.com>
PR rtl-optimization/67753
PR rtl-optimization/64164
@@ -8840,7 +8840,7 @@
* config/aarch64/aarch64.md (*movhf_aarch64): Use
aarch64_reg_or_fp_zero for second operand.
-2015-11-03 Alexandre Oliva <aoliva@redhat.com>
+2015-11-03 Alexandre Oliva <aoliva@redhat.com>
* gimple-expr.c: Include hash-set.h and rtl.h.
(mark_addressable_queue): New var.
@@ -8852,7 +8852,7 @@
* cfgexpand.c: Include gimple-expr.h.
(pass_expand::execute): Flush mark_addressable queue.
-2015-11-02 Alexandre Oliva <aoliva@redhat.com>
+2015-11-02 Alexandre Oliva <aoliva@redhat.com>
* tree-ssa-ifcombine.c (tree_ssa_ifcombine_bb_1): Factor out
bb_no_side_effects_p tests...
@@ -8864,7 +8864,7 @@
* tree-ssa.c (gimple_uses_undefined_value_p): New.
* tree-ssa.h (gimple_uses_undefined_value_p): Declare.
-2015-11-02 Jeff Law <law@redhat.com>
+2015-11-02 Jeff Law <law@redhat.com>
* tree-ssa-threadupdate.c (valid_jump_thread_path): Also detect
cases where the loop latch edge is in the middle of an FSM path.
@@ -8928,7 +8928,7 @@
PR middle-end/68166
* fold-const.c: Include "md5.h".
-2015-11-01 Jeff Law <law@redhat.com>
+2015-11-01 Jeff Law <law@redhat.com>
* vmsdbgout.c: Revert unused header file reduction patch.
@@ -8977,7 +8977,7 @@
* tree-ssa-structalias.c (ipa_pta_execute): Use make_copy_constraint.
-2015-10-30 Jeff Law <law@redhat.com>
+2015-10-30 Jeff Law <law@redhat.com>
Nathan Sidwell <nathan@acm.org>
* config/nvptx/nvptx.h (HARD_REGNO_NREGS): Avoid warning on unused
@@ -10523,7 +10523,7 @@
Joseph Myers <joseph@codesourcery.com>
Mark Shinwell <shinwell@codesourcery.com>
Andrew Stubbs <ams@codesourcery.com>
- Rich Felker <dalias@libc.org>
+ Rich Felker <dalias@libc.org>
* config.gcc: Handle --enable-fdpic.
* config/sh/constraints.md (Ccl): New constraint.
@@ -10848,7 +10848,7 @@
* match.pd ((A & ~B) - (A & B) -> (A ^ B) - B): Add missing :c.
( (X & ~Y) | (~X & Y) -> X ^ Y): Remove redundant :c.
-2015-10-26 Alan Hayward <alan.hayward@arm.com>
+2015-10-26 Alan Hayward <alan.hayward@arm.com>
* tree-vect-loop.c (vect_create_epilog_for_reduction): Fix
VEC_COND_EXPR types.
@@ -11043,7 +11043,7 @@
* tree.c (build_truth_vector_type): Support BLK mode
returned for boolean vector.
-2015-10-23 Alan Hayward <alan.hayward@arm.com>
+2015-10-23 Alan Hayward <alan.hayward@arm.com>
PR tree-optimization/65947
* tree-vect-loop.c
@@ -11611,9 +11611,6 @@
* fold-const.c (fold_binary_loc) : Move (-A) * (-B) -> A * B
to match.pd.
-* doc/implement-c.texi (Integers Implementation): Make GCC's promises
-about signed left shift stronger and clarify the cases when they're
-broken.
Move (a * (1 << b)) is (a << b) to match.pd.
Move convert (C1/X)*C2 into (C1*C2)/X to match.pd.
Move ~X & X, (X == 0) & X, and !X & X are zero to match.pd.
@@ -12085,7 +12082,7 @@ broken.
empty constructors.
2015-10-16 Michael Collison <michael.collison@linaro.org>
- Andrew Pinski <andrew.pinski@caviumnetworks.com>
+ Andrew Pinski <andrew.pinski@caviumnetworks.com>
* match.pd ((x < y) && (x < z) -> x < min (y,z),
(x > y) and (x > z) -> x > max (y,z))
@@ -12644,7 +12641,7 @@ broken.
(ix86_set_reg_reg_cost): Ditto.
* config/i386/i386.h (HARD_REGNO_NREGS): Ditto.
-2015-10-13 Alexandre Oliva <aoliva@redhat.com>
+2015-10-13 Alexandre Oliva <aoliva@redhat.com>
PR middle-end/67912
* expmed.c (store_bit_field_1): Adjust mode of BLKmode inputs.
@@ -13040,7 +13037,7 @@ broken.
* config/rs6000/rs6000.c (rs6000_offload_options): New.
(TARGET_OFFLOAD_OPTIONS): New.
-2015-10-09 Alexandre Oliva <aoliva@redhat.com>
+2015-10-09 Alexandre Oliva <aoliva@redhat.com>
PR middle-end/67891
* cfgexpand.c (set_parm_rtl): Drop is_gimple_reg test.
@@ -13930,8 +13927,8 @@ broken.
(fold_builtin_hypot, fold_builtin_pow): Likewise.
* match.pd: Likewise.
-2015-10-05 James Greenhalgh <james.greenhalgh@arm.com>
- Jiong Wang <jiong.wang@arm.com>
+2015-10-05 James Greenhalgh <james.greenhalgh@arm.com>
+ Jiong Wang <jiong.wang@arm.com>
* config/aarch64/aarch64.md (tlsie_tiny_sidi): Replace "<w>" with "w".
@@ -15090,7 +15087,7 @@ broken.
arith_reg_operand for operands[1]. Allow it only when LRA is enabled.
(addsi3_scr, *addsi3): New insn_and_split patterns.
-2015-09-27 Alexandre Oliva <aoliva@redhat.com>
+2015-09-27 Alexandre Oliva <aoliva@redhat.com>
PR rtl-optimization/64164
PR tree-optimization/67312
@@ -15566,7 +15563,7 @@ broken.
'reg + reloc' cases, allow first operand to be non-REG, and use
force_reg() to enforce address pattern.
-2015-09-22 Alexander Fomin <alexander.fomin@intel.com>
+2015-09-22 Alexander Fomin <alexander.fomin@intel.com>
PR target/67480
* config/i386/sse.md (define_mode_iterator VI48_AVX_AVX512F): New.
@@ -17066,7 +17063,7 @@ broken.
* config/arc/arc.opt, config/arc/constraints.md: Likewise.
* config/arc/t-arc-newlib: Likewise.
-2015-09-10 Claudiu Zissulescu <claziss@synopsys.com>
+2015-09-10 Claudiu Zissulescu <claziss@synopsys.com>
* config/arc/arc.md (length): Fix attribute length for conditional
executed instructions with long immediate.
@@ -17753,7 +17750,7 @@ broken.
* genmodes.c: Add CONST_MODE_UNIT_SIZE modifier.
-2015-09-01 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+2015-09-01 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* ifcvt.c (struct noce_if_info): Add then_simple, else_simple,
then_cost, else_cost fields. Change branch_cost field to unsigned int.
@@ -17889,7 +17886,7 @@ broken.
adjust_concat.
(dump_swap_insn_table): Handle SH_XXPERMDI and SH_CONCAT.
-2015-08-30 Rich Felker <dalias@libc.org>
+2015-08-30 Rich Felker <dalias@libc.org>
* config.gcc (supported_defaults): Handle sh[123456ble]*-*-*
case instead of sh[123456ble]-*-*.
@@ -18739,7 +18736,7 @@ broken.
* config/aarch64/aarch64.c: Remove the last argument to
AARCH64_FUSION_PAIR.
-2015-08-22 Mikhail Maltsev <maltsevm@gmail.com>
+2015-08-22 Mikhail Maltsev <maltsevm@gmail.com>
* dominance.c (new_zero_array): Define.
(dom_info): Redefine as class with proper encapsulation.
@@ -20356,7 +20353,7 @@ broken.
* toplev.h (toplev::toplev): Replace "use_TV_TOTAL" bool param
with "external_timer" timer *.
-2015-08-03 Alexander Basov <coohpt@gmail.com>
+2015-08-03 Alexander Basov <coohpt@gmail.com>
PR middle-end/64744
PR middle-end/48470
@@ -23090,19 +23087,19 @@ broken.
iterator to use_stmt.
2015-07-15 Aditya Kumar <aditya.k7@samsung.com>
- Sebastian Pop <s.pop@samsung.com>
+ Sebastian Pop <s.pop@samsung.com>
* graphite-scop-detection.c (build_scops_1): Discard scops for
which entry==exit.
2015-07-15 Aditya Kumar <aditya.k7@samsung.com>
- Sebastian Pop <s.pop@samsung.com>
+ Sebastian Pop <s.pop@samsung.com>
* graphite-scop-detection.c (stmt_simple_for_scop_p): Bail out in
case of a return statement in scop.
2015-07-15 Aditya Kumar <aditya.k7@samsung.com>
- Sebastian Pop <s.pop@samsung.com>
+ Sebastian Pop <s.pop@samsung.com>
* graphite-sese-to-poly.c (parameter_index_in_region): Only handle
INTEGER_TYPE parameters.
@@ -25258,7 +25255,7 @@ broken.
* match.pd: Add missing condition to ~X ^ C -> X ^ ~C.
2015-07-05 Chung-Lin Tang <cltang@codesourcery.com>
- Sandra Loosemore <sandra@codesourcery.com>
+ Sandra Loosemore <sandra@codesourcery.com>
* config/nios2/nios2-protos.h (nios2_symbol_ref_in_small_data_p):
Delete extern declaration.
@@ -25636,13 +25633,13 @@ broken.
(X & Y) ^ Y -> ~X & Y transforms to ...
* match.pd: ... here.
-2015-07-01 Richard Biener <rguenther@suse.de>
+2015-07-01 Richard Biener <rguenther@suse.de>
* genmatch.c (expr::gen_transform): Shortcut re-simplifying
of converts to avoid uninteresting noise from the conversion
simplifying patterns.
-2015-06-30 Sandra Loosemore <sandra@codesourcery.com>
+2015-06-30 Sandra Loosemore <sandra@codesourcery.com>
* config/c6x/c6x.c (try_rename_operands): Do not depend on
gcc_assert evaluating its argument for side-effect.
@@ -25985,8 +25982,8 @@ broken.
division, compute max and min when value ranges for dividend and
divisor are available.
-2015-06-28 Chung-Lin Tang <cltang@codesourcery.com>
- Sandra Loosemore <sandra@codesourcery.com>
+2015-06-28 Chung-Lin Tang <cltang@codesourcery.com>
+ Sandra Loosemore <sandra@codesourcery.com>
* regrename.h (regrename_do_replace): Change to return bool.
* regrename.c (rename_chains): Check return value of
@@ -26940,7 +26937,7 @@ broken.
* tree-vect-slp.c (vect_build_slp_tree_1): Init vectype.
-2015-06-24 Renlin Li <renlin.li@arm.com>
+2015-06-24 Renlin Li <renlin.li@arm.com>
* config/aarch64/aarch64.h(TARGET_CPU_CPP_BUILTINS): Add
__ARM_ALIGN_MAX_PWR, __ARM_ALIGN_MAX_STACK_PWR.
@@ -33266,7 +33263,7 @@ broken.
"break".
2015-05-12 Chung-Lin Tang <cltang@codesourcery.com>
- Sandra Loosemore <sandra@codesourcery.com>
+ Sandra Loosemore <sandra@codesourcery.com>
* config/nios2/nios2.h (enum reg_class): Add IJMP_REGS enum
value.
@@ -34937,7 +34934,7 @@ broken.
* configure: Regenerate.
* config.in: Regenerate.
-2015-04-27 Yoshinori Sato <ysato@users.sourceforge.jp>
+2015-04-27 Yoshinori Sato <ysato@users.sourceforge.jp>
* config.gcc: Add h8300-*-linux.
* config/h8300/linux.h: New.
@@ -35226,7 +35223,7 @@ broken.
(<mask_codefor>avx512f_unpckhpd512<mask_name>): Ditto.
2015-04-24 Thomas Preud'homme <thomas.preudhomme@arm.com>
- Steven Bosscher <steven@gcc.gnu.org>
+ Steven Bosscher <steven@gcc.gnu.org>
PR rtl-optimization/34503
* cprop.c (cprop_reg_p): New.
@@ -36076,7 +36073,7 @@ broken.
Release symbol_compare_collection.
* ipa-reference.c: Add TODO that a vector should be released.
-2015-04-17 Sivanupandi Pitchumani <Pitchumani.Sivanupandi@atmel.com>
+2015-04-17 Sivanupandi Pitchumani <Pitchumani.Sivanupandi@atmel.com>
PR target/65296
* config/avr/gen-avr-mmcu-specs.c (*avrlibc_startfile): Adjust
@@ -39428,7 +39425,7 @@ broken.
* omp-low.c (create_omp_child_function): Tag entrypoint
functions with a special attribute.
-2015-02-24 Michael Haubenwallner <michael.haubenwallner@ssi-schaefer.com>
+2015-02-24 Michael Haubenwallner <michael.haubenwallner@ssi-schaefer.com>
PR target/65058
* config/rs6000/xcoff.h (ASM_OUTPUT_EXTERNAL): Drop unused variable.
@@ -40617,7 +40614,7 @@ broken.
* config/rs6000/rs6000.c (chain_already_loaded): New function.
(rs6000_call_aix): Use it.
-2015-02-05 Jan Hubicka <hubicka@ucw.cz>
+2015-02-05 Jan Hubicka <hubicka@ucw.cz>
* ipa-cp.c (ipa_value_from_jfunc, ipa_context_from_jfunc): Add bounds
check.
@@ -40766,7 +40763,7 @@ broken.
of manual swapping implementation.
(aarch64_expand_vec_perm_const_1): Likewise.
-2015-02-04 James Greenhalgh <james.greenhalgh@arm.com>
+2015-02-04 James Greenhalgh <james.greenhalgh@arm.com>
* config/aarch64/aarch64.c (NAMED_PARAM): Delete it.
(generic_addrcost_table): Remove NAMED_PARAM.
@@ -41936,7 +41933,7 @@ broken.
decl attribute.
2015-01-21 David Sherwood <david.sherwood@arm.com>
- Tejas Belagod <Tejas.Belagod@arm.com>
+ Tejas Belagod <Tejas.Belagod@arm.com>
* config/aarch64/aarch64.h (CANNOT_CHANGE_MODE_CLASS): Removed.
* config/aarch64/aarch64.c (aarch64_cannot_change_mode_class): Removed.
@@ -41944,7 +41941,7 @@ broken.
Removed.
2015-01-21 David Sherwood <david.sherwood@arm.com>
- Tejas Belagod <Tejas.Belagod@arm.com>
+ Tejas Belagod <Tejas.Belagod@arm.com>
* config/aarch64/aarch64-protos.h (aarch64_simd_attr_length_rglist)
(aarch64_reverse_mask): New decls.
@@ -42595,7 +42592,7 @@ broken.
introduced in revision 219724.
2015-01-16 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
- Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
+ Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
PR target/64263
* config/aarch64/aarch64.md (*movsi_aarch64): Don't split if the
@@ -43558,7 +43555,7 @@ broken.
for MEM_REF access functions with the same base can never partially
overlap.
-2015-01-14 Marcos Diaz <marcos.diaz@tallertechnologies.com>
+2015-01-14 Marcos Diaz <marcos.diaz@tallertechnologies.com>
* common.opt: New option -fstack-protector-explicit.
* cfgexpand.c (SPCT_FLAG_EXPLICIT): New enum.
@@ -43744,7 +43741,7 @@ broken.
Do not save lr in case of tail call.
* config/arm/thumb2.md (*thumb2_pop_single): New pattern.
-2015-01-14 Martin Uecker <uecker@eecs.berkeley.edu>
+2015-01-14 Martin Uecker <uecker@eecs.berkeley.edu>
* tree-vrp.c (check_array_ref): Emit more warnings
for warn_array_bounds >= 2.
diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP
index bd87804..4e3167d 100644
--- a/gcc/DATESTAMP
+++ b/gcc/DATESTAMP
@@ -1 +1 @@
-20160218
+20160412
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 4868cae..6f84ab3 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,6 +1,98 @@
+2016-04-02 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/decl.c (components_to_record): Restrict the previous
+ change to fields with variable size.
+
+2016-03-27 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/decl.c (components_to_record): Add special case for
+ single field with representation clause at offset 0.
+
+2016-03-16 Svante Signell <svante.signell@gmail.com>
+
+ * gcc-interface/Makefile.in: Add support for x86 GNU/Hurd.
+ * s-osinte-gnu.ads: New file.
+
+2016-03-13 Eric Botcazou <ebotcazou@adacore.com>
+
+ * system-vxworks-m68k.ads (Stack_Check_Probes): Set to True.
+ (Stack_Check_Limits): Set to False.
+ * system-vxworks-mips.ads (Stack_Check_Probes): Set to True.
+ (Stack_Check_Limits): Set to False.
+ * system-vxworks-ppc.ads (Stack_Check_Probes): Set to True.
+ (Stack_Check_Limits): Set to False.
+ * system-vxworks-sparcv9.ads (Stack_Check_Probes): Set to True.
+ (Stack_Check_Limits): Set to False.
+ * system-vxworks-x86.ads (Stack_Check_Probes): Set to True.
+ (Stack_Check_Limits): Set to False.
+
+2016-03-07 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/trans.c (statement_node_p): New predicate.
+ (gnat_to_gnu): Invoke it to detect statement nodes. In ASIS mode, do
+ not return dummy results for expressions attached to packed array
+ implementation types.
+
+2016-03-07 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Always mark
+ the expression of a renaming manually in case #3.
+
+2016-03-02 Dominik Vogt <vogt@linux.vnet.ibm.com>
+
+ * system-linux-s390.ads: Enable Stack_Check_Probes.
+ * system-linux-s390.ads: Likewise.
+
+2016-02-29 Martin Liska <mliska@suse.cz>
+
+ * gcc-interface/utils.c (set_reverse_storage_order_on_pad_type):
+ Replace ENABLE_CHECKING macro with flag_checking.
+
+2016-02-29 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Access_Type>: Retrofit
+ handling of unconstrained array types as designated types into common
+ processing. Also handle array types as incomplete designated types.
+
+2016-02-29 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/decl.c (gnat_to_gnu_entity) <Concurrent types>: In
+ ASIS mode, fully lay out the minimal record type.
+
+2016-02-29 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/trans.c (finalize_nrv_r): Remove obsolete code.
+ (build_return_expr): Likewise.
+ (Call_to_gnu): If this is a function call and there is no target,
+ create a temporary for the return value for all aggregate types,
+ but never create it for a return statement. Push a binding level
+ around the call in more cases. Remove obsolete code.
+
+2016-02-29 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/ada-tree.h (DECL_RETURN_VALUE_P): New macro.
+ * gcc-interface/gigi.h (gigi): Remove useless attribute.
+ (gnat_gimplify_expr): Likewise.
+ (gnat_to_gnu_external): Declare.
+ * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Constant>: Factor out
+ code dealing with the expression of external constants into...
+ Invoke gnat_to_gnu_external instead.
+ <E_Variable>: Invoke gnat_to_gnu_external to translate renamed objects
+ when not for a definition. Deal with COMPOUND_EXPR and variables with
+ DECL_RETURN_VALUE_P set for renamings and with the case of a dangling
+ 'reference to a function call in a renaming. Remove obsolete test and
+ adjust associated comment.
+ * gcc-interface/trans.c (Call_to_gnu): Set DECL_RETURN_VALUE_P on the
+ temporaries created to hold the return value, if any.
+ (gnat_to_gnu_external): ...this. New function.
+ * gcc-interface/utils.c (create_var_decl): Detect a constant created
+ to hold 'reference to function call.
+ * gcc-interface/utils2.c (build_unary_op) <ADDR_EXPR>: Add folding
+ for COMPOUND_EXPR in the DECL_RETURN_VALUE_P case.
+
2016-02-17 Eric Botcazou <ebotcazou@adacore.com>
- * exp_ch4.adb (Expand_N_Indexed_Component): Active synchronization if
+ * exp_ch4.adb (Expand_N_Indexed_Component): Activate synchronization if
the prefix denotes an entity which Has_Atomic_Components.
* gcc-interface/trans.c (node_is_atomic): Return true if the prefix
denotes an entity which Has_Atomic_Components.
diff --git a/gcc/ada/gcc-interface/Makefile.in b/gcc/ada/gcc-interface/Makefile.in
index 8d91b66..bfc718b 100644
--- a/gcc/ada/gcc-interface/Makefile.in
+++ b/gcc/ada/gcc-interface/Makefile.in
@@ -1,5 +1,5 @@
# Makefile for GNU Ada Compiler (GNAT).
-# Copyright (C) 1994-2015 Free Software Foundation, Inc.
+# Copyright (C) 1994-2016 Free Software Foundation, Inc.
#This file is part of GCC.
@@ -1420,6 +1420,35 @@ ifeq ($(strip $(filter-out %86 kfreebsd%,$(target_cpu) $(target_os))),)
MISCLIB = -lutil
endif
+# i[3456]86-pc-gnu i.e. GNU Hurd
+ifeq ($(strip $(filter-out %86 pc gnu,$(target_cpu) $(target_vendor) $(target_os))),)
+ LIBGNAT_TARGET_PAIRS = \
+ a-intnam.ads<a-intnam-freebsd.ads \
+ s-inmaop.adb<s-inmaop-posix.adb \
+ s-intman.adb<s-intman-posix.adb \
+ s-osinte.adb<s-osinte-posix.adb \
+ s-osinte.ads<s-osinte-gnu.ads \
+ s-osprim.adb<s-osprim-posix.adb \
+ s-taprop.adb<s-taprop-posix.adb \
+ s-taspri.ads<s-taspri-posix.ads \
+ s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
+ $(ATOMICS_TARGET_PAIRS) \
+ $(X86_TARGET_PAIRS) \
+ system.ads<system-freebsd-x86.ads
+
+ TOOLS_TARGET_PAIRS = \
+ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
+ indepsw.adb<indepsw-gnu.adb
+
+ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o
+
+ EH_MECHANISM=-gcc
+ THREADSLIB = -lpthread
+ GNATLIB_SHARED = gnatlib-shared-dual
+ GMEM_LIB = gmemlib
+ LIBRARY_VERSION := $(LIB_VERSION)
+endif
+
ifeq ($(strip $(filter-out x86_64 kfreebsd%,$(target_cpu) $(target_os))),)
LIBGNAT_TARGET_PAIRS = \
a-intnam.ads<a-intnam-freebsd.ads \
diff --git a/gcc/ada/gcc-interface/ada-tree.h b/gcc/ada/gcc-interface/ada-tree.h
index ceabd17..ac4ec2f 100644
--- a/gcc/ada/gcc-interface/ada-tree.h
+++ b/gcc/ada/gcc-interface/ada-tree.h
@@ -457,6 +457,10 @@ do { \
a discriminant of a discriminated type without default expression. */
#define DECL_INVARIANT_P(NODE) DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE))
+/* Nonzero in a VAR_DECL if it is a temporary created to hold the return
+ value of a function call or 'reference to a function call. */
+#define DECL_RETURN_VALUE_P(NODE) DECL_LANG_FLAG_5 (VAR_DECL_CHECK (NODE))
+
/* In a FIELD_DECL corresponding to a discriminant, contains the
discriminant number. */
#define DECL_DISCRIMINANT_NUMBER(NODE) DECL_INITIAL (FIELD_DECL_CHECK (NODE))
diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c
index 3f2358b..87026e7 100644
--- a/gcc/ada/gcc-interface/decl.c
+++ b/gcc/ada/gcc-interface/decl.c
@@ -552,31 +552,10 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
&& Present (Expression (Declaration_Node (gnat_entity)))
&& Nkind (Expression (Declaration_Node (gnat_entity)))
!= N_Allocator)
- {
- bool went_into_elab_proc = false;
- int save_force_global = force_global;
-
/* The expression may contain N_Expression_With_Actions nodes and
- thus object declarations from other units. In this case, even
- though the expression will eventually be discarded since not a
- constant, the declarations would be stuck either in the global
- varpool or in the current scope. Therefore we force the local
- context and create a fake scope that we'll zap at the end. */
- if (!current_function_decl)
- {
- current_function_decl = get_elaboration_procedure ();
- went_into_elab_proc = true;
- }
- force_global = 0;
- gnat_pushlevel ();
-
- gnu_expr = gnat_to_gnu (Expression (Declaration_Node (gnat_entity)));
-
- gnat_zaplevel ();
- force_global = save_force_global;
- if (went_into_elab_proc)
- current_function_decl = NULL_TREE;
- }
+ thus object declarations from other units. Discard them. */
+ gnu_expr
+ = gnat_to_gnu_external (Expression (Declaration_Node (gnat_entity)));
/* ... fall through ... */
@@ -611,13 +590,17 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
tree renamed_obj = NULL_TREE;
tree gnu_object_size;
+ /* We need to translate the renamed object even though we are only
+ referencing the renaming. But it may contain a call for which
+ we'll generate a temporary to hold the return value and which
+ is part of the definition of the renaming, so discard it. */
if (Present (Renamed_Object (gnat_entity)) && !definition)
{
if (kind == E_Exception)
gnu_expr = gnat_to_gnu_entity (Renamed_Entity (gnat_entity),
NULL_TREE, 0);
else
- gnu_expr = gnat_to_gnu (Renamed_Object (gnat_entity));
+ gnu_expr = gnat_to_gnu_external (Renamed_Object (gnat_entity));
}
/* Get the type after elaborating the renamed object. */
@@ -976,14 +959,39 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
inner = TREE_OPERAND (inner, 0);
/* Expand_Dispatching_Call can prepend a comparison of the tags
before the call to "=". */
- if (TREE_CODE (inner) == TRUTH_ANDIF_EXPR)
+ if (TREE_CODE (inner) == TRUTH_ANDIF_EXPR
+ || TREE_CODE (inner) == COMPOUND_EXPR)
inner = TREE_OPERAND (inner, 1);
if ((TREE_CODE (inner) == CALL_EXPR
&& !call_is_atomic_load (inner))
|| TREE_CODE (inner) == ADDR_EXPR
|| TREE_CODE (inner) == NULL_EXPR
|| TREE_CODE (inner) == CONSTRUCTOR
- || CONSTANT_CLASS_P (inner))
+ || CONSTANT_CLASS_P (inner)
+ /* We need to detect the case where a temporary is created to
+ hold the return value, since we cannot safely rename it at
+ top level as it lives only in the elaboration routine. */
+ || (TREE_CODE (inner) == VAR_DECL
+ && DECL_RETURN_VALUE_P (inner))
+ /* We also need to detect the case where the front-end creates
+ a dangling 'reference to a function call at top level and
+ substitutes it in the renaming, for example:
+
+ q__b : boolean renames r__f.e (1);
+
+ can be rewritten into:
+
+ q__R1s : constant q__A2s := r__f'reference;
+ [...]
+ q__b : boolean renames q__R1s.all.e (1);
+
+ We cannot safely rename the rewritten expression since the
+ underlying object lives only in the elaboration routine. */
+ || (TREE_CODE (inner) == INDIRECT_REF
+ && (inner
+ = remove_conversions (TREE_OPERAND (inner, 0), true))
+ && TREE_CODE (inner) == VAR_DECL
+ && DECL_RETURN_VALUE_P (inner)))
;
/* Case 2: if the renaming entity need not be materialized, use
@@ -991,8 +999,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
means that the caller is responsible for evaluating the address
of the renaming in the correct place for the definition case to
instantiate the SAVE_EXPRs. */
- else if (TREE_CODE (inner) != COMPOUND_EXPR
- && !Materialize_Entity (gnat_entity))
+ else if (!Materialize_Entity (gnat_entity))
{
tree init = NULL_TREE;
@@ -1001,7 +1008,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
&init);
/* We cannot evaluate the first arm of a COMPOUND_EXPR in the
- correct place for this case, hence the above test. */
+ correct place for this case. */
gcc_assert (!init);
/* No DECL_EXPR will be created so the expression needs to be
@@ -1051,12 +1058,10 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
= elaborate_reference (gnu_expr, gnat_entity, definition,
&init);
- /* If we are not defining the entity, the expression will not
- be attached through DECL_INITIAL so it needs to be marked
- manually because it will likely be shared. Likewise for a
- dereference as it will be folded by the ADDR_EXPR below. */
- if ((!definition || TREE_CODE (renamed_obj) == INDIRECT_REF)
- && global_bindings_p ())
+ /* The expression needs to be marked manually because it will
+ likely be shared, even for a definition since the ADDR_EXPR
+ built below can cause the first few nodes to be folded. */
+ if (global_bindings_p ())
MARK_VISITED (renamed_obj);
if (type_annotate_only
@@ -3848,8 +3853,6 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
/* The type actually used to represent the designated type, either
gnat_desig_full or gnat_desig_equiv. */
Entity_Id gnat_desig_rep;
- /* True if this is a pointer to an unconstrained array. */
- bool is_unconstrained_array;
/* We want to know if we'll be seeing the freeze node for any
incomplete type we may be pointing to. */
bool in_main_unit
@@ -3883,62 +3886,26 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
&& Ekind (Etype (gnat_desig_full)) == E_Record_Type)))
gnat_desig_full = Etype (gnat_desig_full);
- /* Set the type that's actually the representation of the designated
- type and also flag whether we have a unconstrained array. */
+ /* Set the type that's the representation of the designated type. */
gnat_desig_rep
= Present (gnat_desig_full) ? gnat_desig_full : gnat_desig_equiv;
- is_unconstrained_array
- = Is_Array_Type (gnat_desig_rep) && !Is_Constrained (gnat_desig_rep);
-
- /* If we are pointing to an incomplete type whose completion is an
- unconstrained array, make dummy fat and thin pointer types to it.
- Likewise if the type itself is dummy or an unconstrained array. */
- if (is_unconstrained_array
- && (Present (gnat_desig_full)
- || (present_gnu_tree (gnat_desig_equiv)
- && TYPE_IS_DUMMY_P
- (TREE_TYPE (get_gnu_tree (gnat_desig_equiv))))
- || (!in_main_unit
- && defer_incomplete_level != 0
- && !present_gnu_tree (gnat_desig_equiv))
- || (in_main_unit
- && is_from_limited_with
- && Present (Freeze_Node (gnat_desig_equiv)))))
- {
- if (present_gnu_tree (gnat_desig_rep))
- gnu_desig_type = TREE_TYPE (get_gnu_tree (gnat_desig_rep));
- else
- {
- gnu_desig_type = make_dummy_type (gnat_desig_rep);
- made_dummy = true;
- }
-
- /* If the call above got something that has a pointer, the pointer
- is our type. This could have happened either because the type
- was elaborated or because somebody else executed the code. */
- if (!TYPE_POINTER_TO (gnu_desig_type))
- build_dummy_unc_pointer_types (gnat_desig_equiv, gnu_desig_type);
- gnu_type = TYPE_POINTER_TO (gnu_desig_type);
- }
/* If we already know what the full type is, use it. */
- else if (Present (gnat_desig_full)
- && present_gnu_tree (gnat_desig_full))
+ if (Present (gnat_desig_full) && present_gnu_tree (gnat_desig_full))
gnu_desig_type = TREE_TYPE (get_gnu_tree (gnat_desig_full));
/* Get the type of the thing we are to point to and build a pointer to
it. If it is a reference to an incomplete or private type with a
- full view that is a record, make a dummy type node and get the
- actual type later when we have verified it is safe. */
+ full view that is a record or an array, make a dummy type node and
+ get the actual type later when we have verified it is safe. */
else if ((!in_main_unit
&& !present_gnu_tree (gnat_desig_equiv)
&& Present (gnat_desig_full)
- && !present_gnu_tree (gnat_desig_full)
- && Is_Record_Type (gnat_desig_full))
+ && (Is_Record_Type (gnat_desig_full)
+ || Is_Array_Type (gnat_desig_full)))
/* Likewise if we are pointing to a record or array and we are
to defer elaborating incomplete types. We do this as this
- access type may be the full view of a private type. Note
- that the unconstrained array case is handled above. */
+ access type may be the full view of a private type. */
|| ((!in_main_unit || imported_p)
&& defer_incomplete_level != 0
&& !present_gnu_tree (gnat_desig_equiv)
@@ -3951,11 +3918,10 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
in which case we make the dummy type and it will be reused
when the declaration is finally processed. In both cases,
the pointer eventually created below will be automatically
- adjusted when the freeze node is processed. Note that the
- unconstrained array case is handled above. */
- || (in_main_unit
- && is_from_limited_with
- && Present (Freeze_Node (gnat_desig_rep))))
+ adjusted when the freeze node is processed. */
+ || (in_main_unit
+ && is_from_limited_with
+ && Present (Freeze_Node (gnat_desig_rep))))
{
gnu_desig_type = make_dummy_type (gnat_desig_equiv);
made_dummy = true;
@@ -3988,8 +3954,19 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
break;
}
+ /* For an unconstrained array, make dummy fat & thin pointer types. */
+ if (Is_Array_Type (gnat_desig_rep) && !Is_Constrained (gnat_desig_rep))
+ {
+ /* If the processing above got something that has a pointer, then
+ we are done. This could have happened either because the type
+ was elaborated or because somebody else executed the code. */
+ if (!TYPE_POINTER_TO (gnu_desig_type))
+ build_dummy_unc_pointer_types (gnat_desig_equiv, gnu_desig_type);
+ gnu_type = TYPE_POINTER_TO (gnu_desig_type);
+ }
+
/* If we haven't done it yet, build the pointer type the usual way. */
- if (!gnu_type)
+ else if (!gnu_type)
{
/* Modify the designated type if we are pointing only to constant
objects, but don't do it for unconstrained arrays. */
@@ -4919,7 +4896,8 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
gnu_field_list = gnu_field;
}
- TYPE_FIELDS (gnu_type) = nreverse (gnu_field_list);
+ finish_record_type (gnu_type, nreverse (gnu_field_list), 0,
+ false);
}
else
gnu_type = void_type_node;
@@ -7628,6 +7606,25 @@ components_to_record (tree gnu_record_type, Node_Id gnat_component_list,
if (p_gnu_rep_list && gnu_rep_list)
*p_gnu_rep_list = chainon (*p_gnu_rep_list, gnu_rep_list);
+ /* Deal with the annoying case of an extension of a record with variable size
+ and partial rep clause, for which the _Parent field is forced at offset 0
+ and has variable size, which we do not support below. Note that we cannot
+ do it if the field has fixed size because we rely on the presence of the
+ REP part built below to trigger the reordering of the fields in a derived
+ record type when all the fields have a fixed position. */
+ else if (gnu_rep_list
+ && !DECL_CHAIN (gnu_rep_list)
+ && TREE_CODE (DECL_SIZE (gnu_rep_list)) != INTEGER_CST
+ && !variants_have_rep
+ && first_free_pos
+ && integer_zerop (first_free_pos)
+ && integer_zerop (bit_position (gnu_rep_list)))
+ {
+ DECL_CHAIN (gnu_rep_list) = gnu_field_list;
+ gnu_field_list = gnu_rep_list;
+ gnu_rep_list = NULL_TREE;
+ }
+
/* Otherwise, sort the fields by bit position and put them into their own
record, before the others, if we also have fields without rep clause. */
else if (gnu_rep_list)
diff --git a/gcc/ada/gcc-interface/gigi.h b/gcc/ada/gcc-interface/gigi.h
index 00b7c6a..2b58d4e 100644
--- a/gcc/ada/gcc-interface/gigi.h
+++ b/gcc/ada/gcc-interface/gigi.h
@@ -246,7 +246,7 @@ extern "C" {
structures and then generates code. */
extern void gigi (Node_Id gnat_root,
int max_gnat_node,
- int number_name ATTRIBUTE_UNUSED,
+ int number_name,
struct Node *nodes_ptr,
struct Flags *Flags_Ptr,
Node_Id *next_node_ptr,
@@ -270,17 +270,19 @@ extern void gigi (Node_Id gnat_root,
#endif
/* GNAT_NODE is the root of some GNAT tree. Return the root of the
- GCC tree corresponding to that GNAT tree. Normally, no code is generated;
- we just return an equivalent tree which is used elsewhere to generate
- code. */
+ GCC tree corresponding to that GNAT tree. */
extern tree gnat_to_gnu (Node_Id gnat_node);
+/* Similar to gnat_to_gnu, but discard any object that might be created in
+ the course of the translation of GNAT_NODE, which must be an "external"
+ expression in the sense that it will be elaborated elsewhere. */
+extern tree gnat_to_gnu_external (Node_Id gnat_node);
+
/* GNU_STMT is a statement. We generate code for that statement. */
extern void gnat_expand_stmt (tree gnu_stmt);
/* Generate GIMPLE in place for the expression at *EXPR_P. */
-extern int gnat_gimplify_expr (tree *expr_p, gimple_seq *pre_p,
- gimple_seq *post_p ATTRIBUTE_UNUSED);
+extern int gnat_gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *);
/* Do the processing for the declaration of a GNAT_ENTITY, a type. If
a separate Freeze node exists, delay the bulk of the processing. Otherwise
diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c
index fce3f0e..357d26f 100644
--- a/gcc/ada/gcc-interface/trans.c
+++ b/gcc/ada/gcc-interface/trans.c
@@ -3330,32 +3330,14 @@ finalize_nrv_r (tree *tp, int *walk_subtrees, void *data)
else if (TREE_CODE (t) == RETURN_EXPR
&& TREE_CODE (TREE_OPERAND (t, 0)) == INIT_EXPR)
{
- tree ret_val = TREE_OPERAND (TREE_OPERAND (t, 0), 1), init_expr;
-
- /* If this is the temporary created for a return value with variable
- size in Call_to_gnu, we replace the RHS with the init expression. */
- if (TREE_CODE (ret_val) == COMPOUND_EXPR
- && TREE_CODE (TREE_OPERAND (ret_val, 0)) == INIT_EXPR
- && TREE_OPERAND (TREE_OPERAND (ret_val, 0), 0)
- == TREE_OPERAND (ret_val, 1))
- {
- init_expr = TREE_OPERAND (TREE_OPERAND (ret_val, 0), 1);
- ret_val = TREE_OPERAND (ret_val, 1);
- }
- else
- init_expr = NULL_TREE;
+ tree ret_val = TREE_OPERAND (TREE_OPERAND (t, 0), 1);
/* Strip useless conversions around the return value. */
if (gnat_useless_type_conversion (ret_val))
ret_val = TREE_OPERAND (ret_val, 0);
if (is_nrv_p (dp->nrv, ret_val))
- {
- if (init_expr)
- TREE_OPERAND (TREE_OPERAND (t, 0), 1) = init_expr;
- else
- TREE_OPERAND (t, 0) = dp->result;
- }
+ TREE_OPERAND (t, 0) = dp->result;
}
/* Replace the DECL_EXPR of NRVs with an initialization of the RESULT_DECL,
@@ -3659,14 +3641,6 @@ build_return_expr (tree ret_obj, tree ret_val)
&& TYPE_MODE (operation_type) == BLKmode
&& aggregate_value_p (operation_type, current_function_decl))
{
- /* Recognize the temporary created for a return value with variable
- size in Call_to_gnu. We want to eliminate it if possible. */
- if (TREE_CODE (ret_val) == COMPOUND_EXPR
- && TREE_CODE (TREE_OPERAND (ret_val, 0)) == INIT_EXPR
- && TREE_OPERAND (TREE_OPERAND (ret_val, 0), 0)
- == TREE_OPERAND (ret_val, 1))
- ret_val = TREE_OPERAND (ret_val, 1);
-
/* Strip useless conversions around the return value. */
if (gnat_useless_type_conversion (ret_val))
ret_val = TREE_OPERAND (ret_val, 0);
@@ -4314,14 +4288,22 @@ Call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target,
because we need to preserve the return value before copying back the
parameters.
- 2. There is no target and this is neither an object nor a renaming
- declaration, and the return type has variable size, because in
- these cases the gimplifier cannot create the temporary.
+ 2. There is no target and the call is made for neither an object nor a
+ renaming declaration, nor a return statement, and the return type has
+ variable size, because in this case the gimplifier cannot create the
+ temporary, or more generally is simply an aggregate type, because the
+ gimplifier would create the temporary in the outermost scope instead
+ of locally.
3. There is a target and it is a slice or an array with fixed size,
and the return type has variable size, because the gimplifier
doesn't handle these cases.
+ 4. There is no target and we have misaligned In Out or Out parameters
+ passed by reference, because we need to preserve the return value
+ before copying back the parameters. However, in this case, we'll
+ defer creating the temporary, see below.
+
This must be done before we push a binding level around the call, since
we will pop it before copying the return value. */
if (function_call
@@ -4329,14 +4311,29 @@ Call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target,
|| (!gnu_target
&& Nkind (Parent (gnat_node)) != N_Object_Declaration
&& Nkind (Parent (gnat_node)) != N_Object_Renaming_Declaration
- && TREE_CODE (TYPE_SIZE (gnu_result_type)) != INTEGER_CST)
+ && Nkind (Parent (gnat_node)) != N_Simple_Return_Statement
+ && AGGREGATE_TYPE_P (gnu_result_type)
+ && !TYPE_IS_FAT_POINTER_P (gnu_result_type))
|| (gnu_target
&& (TREE_CODE (gnu_target) == ARRAY_RANGE_REF
|| (TREE_CODE (TREE_TYPE (gnu_target)) == ARRAY_TYPE
&& TREE_CODE (TYPE_SIZE (TREE_TYPE (gnu_target)))
== INTEGER_CST))
&& TREE_CODE (TYPE_SIZE (gnu_result_type)) != INTEGER_CST)))
- gnu_retval = create_temporary ("R", gnu_result_type);
+ {
+ gnu_retval = create_temporary ("R", gnu_result_type);
+ DECL_RETURN_VALUE_P (gnu_retval) = 1;
+ }
+
+ /* If we don't need a value or have already created it, push a binding level
+ around the call. This will narrow the lifetime of the temporaries we may
+ need to make when translating the parameters as much as possible. */
+ if (!returning_value || gnu_retval)
+ {
+ start_stmt_group ();
+ gnat_pushlevel ();
+ pushed_binding_level = true;
+ }
/* Create the list of the actual parameters as GCC expects it, namely a
chain of TREE_LIST nodes in which the TREE_VALUE field of each node
@@ -4461,14 +4458,15 @@ Call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target,
we need to create a temporary for the return value because we must
preserve it before copying back at the very end. */
if (!in_param && returning_value && !gnu_retval)
- gnu_retval = create_temporary ("R", gnu_result_type);
-
- /* If we haven't pushed a binding level, push a new one. This will
- narrow the lifetime of the temporary we are about to make as much
- as possible. The drawback is that we'd need to create a temporary
- for the return value, if any (see comment before the loop). So do
- it only when this temporary was already created just above. */
- if (!pushed_binding_level && !(in_param && returning_value))
+ {
+ gnu_retval = create_temporary ("R", gnu_result_type);
+ DECL_RETURN_VALUE_P (gnu_retval) = 1;
+ }
+
+ /* If we haven't pushed a binding level, push it now. This will
+ narrow the lifetime of the temporary we are about to make as
+ much as possible. */
+ if (!pushed_binding_level && (!returning_value || gnu_retval))
{
start_stmt_group ();
gnat_pushlevel ();
@@ -4699,15 +4697,6 @@ Call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target,
if (!gnu_retval)
{
tree gnu_stmt;
- /* If we haven't pushed a binding level, push a new one. This
- will narrow the lifetime of the temporary we are about to
- make as much as possible. */
- if (!pushed_binding_level)
- {
- start_stmt_group ();
- gnat_pushlevel ();
- pushed_binding_level = true;
- }
gnu_call
= create_init_temporary ("P", gnu_call, &gnu_stmt, gnat_node);
append_to_statement_list (gnu_stmt, &gnu_stmt_list);
@@ -5726,6 +5715,28 @@ unchecked_conversion_nop (Node_Id gnat_node)
return false;
}
+/* Return true if GNAT_NODE represents a statement. */
+
+static bool
+statement_node_p (Node_Id gnat_node)
+{
+ const Node_Kind kind = Nkind (gnat_node);
+
+ if (kind == N_Label)
+ return true;
+
+ if (IN (kind, N_Statement_Other_Than_Procedure_Call))
+ return true;
+
+ if (kind == N_Procedure_Call_Statement)
+ return true;
+
+ if (IN (kind, N_Raise_xxx_Error) && Ekind (Etype (gnat_node)) == E_Void)
+ return true;
+
+ return false;
+}
+
/* This function is the driver of the GNAT to GCC tree transformation process.
It is the entry point of the tree transformer. GNAT_NODE is the root of
some GNAT tree. Return the root of the corresponding GCC tree. If this
@@ -5749,15 +5760,23 @@ gnat_to_gnu (Node_Id gnat_node)
error_gnat_node = gnat_node;
Sloc_to_locus (Sloc (gnat_node), &input_location);
- /* If this node is a statement and we are only annotating types, return an
- empty statement list. */
- if (type_annotate_only && IN (kind, N_Statement_Other_Than_Procedure_Call))
+ /* If we are only annotating types and this node is a statement, return
+ an empty statement list. */
+ if (type_annotate_only && statement_node_p (gnat_node))
return alloc_stmt_list ();
- /* If this node is a non-static subexpression and we are only annotating
- types, make this into a NULL_EXPR. */
+ /* If we are only annotating types and this node is a subexpression, return
+ a NULL_EXPR, but filter out nodes appearing in the expressions attached
+ to packed array implementation types. */
if (type_annotate_only
&& IN (kind, N_Subexpr)
+ && !(((IN (kind, N_Op) && kind != N_Op_Expon)
+ || kind == N_Type_Conversion)
+ && Is_Integer_Type (Etype (gnat_node)))
+ && !(kind == N_Attribute_Reference
+ && Get_Attribute_Id (Attribute_Name (gnat_node)) == Attr_Length
+ && Ekind (Etype (Prefix (gnat_node))) == E_Array_Subtype
+ && !Is_Constr_Subt_For_U_Nominal (Etype (Prefix (gnat_node))))
&& kind != N_Expanded_Name
&& kind != N_Identifier
&& !Compile_Time_Known_Value (gnat_node))
@@ -5765,13 +5784,9 @@ gnat_to_gnu (Node_Id gnat_node)
build_call_raise (CE_Range_Check_Failed, gnat_node,
N_Raise_Constraint_Error));
- if ((IN (kind, N_Statement_Other_Than_Procedure_Call)
- && kind != N_Null_Statement)
- || kind == N_Procedure_Call_Statement
- || kind == N_Label
- || kind == N_Implicit_Label_Declaration
+ if ((statement_node_p (gnat_node) && kind != N_Null_Statement)
|| kind == N_Handled_Sequence_Of_Statements
- || (IN (kind, N_Raise_xxx_Error) && Ekind (Etype (gnat_node)) == E_Void))
+ || kind == N_Implicit_Label_Declaration)
{
tree current_elab_proc = get_elaboration_procedure ();
@@ -5791,7 +5806,8 @@ gnat_to_gnu (Node_Id gnat_node)
spurious errors on dummy (empty) sequences created by the front-end
for package bodies in some cases. */
if (current_function_decl == current_elab_proc
- && kind != N_Handled_Sequence_Of_Statements)
+ && kind != N_Handled_Sequence_Of_Statements
+ && kind != N_Implicit_Label_Declaration)
Check_Elaboration_Code_Allowed (gnat_node);
}
@@ -7808,6 +7824,37 @@ gnat_to_gnu (Node_Id gnat_node)
return gnu_result;
}
+
+/* Similar to gnat_to_gnu, but discard any object that might be created in
+ the course of the translation of GNAT_NODE, which must be an "external"
+ expression in the sense that it will be elaborated elsewhere. */
+
+tree
+gnat_to_gnu_external (Node_Id gnat_node)
+{
+ const int save_force_global = force_global;
+ bool went_into_elab_proc = false;
+
+ /* Force the local context and create a fake scope that we zap
+ at the end so declarations will not be stuck either in the
+ global varpool or in the current scope. */
+ if (!current_function_decl)
+ {
+ current_function_decl = get_elaboration_procedure ();
+ went_into_elab_proc = true;
+ }
+ force_global = 0;
+ gnat_pushlevel ();
+
+ tree gnu_result = gnat_to_gnu (gnat_node);
+
+ gnat_zaplevel ();
+ force_global = save_force_global;
+ if (went_into_elab_proc)
+ current_function_decl = NULL_TREE;
+
+ return gnu_result;
+}
/* Subroutine of above to push the exception label stack. GNU_STACK is
a pointer to the stack to update and GNAT_LABEL, if present, is the
diff --git a/gcc/ada/gcc-interface/utils.c b/gcc/ada/gcc-interface/utils.c
index ff21e7b..9bd2773 100644
--- a/gcc/ada/gcc-interface/utils.c
+++ b/gcc/ada/gcc-interface/utils.c
@@ -1486,11 +1486,13 @@ set_reverse_storage_order_on_pad_type (tree type)
{
tree field, canonical_pad_type;
-#ifdef ENABLE_CHECKING
- /* If the inner type is not scalar then the function does nothing. */
- tree inner_type = TREE_TYPE (TYPE_FIELDS (type));
- gcc_assert (!AGGREGATE_TYPE_P (inner_type) && !VECTOR_TYPE_P (inner_type));
-#endif
+ if (flag_checking)
+ {
+ /* If the inner type is not scalar then the function does nothing. */
+ tree inner_type = TREE_TYPE (TYPE_FIELDS (type));
+ gcc_assert (!AGGREGATE_TYPE_P (inner_type)
+ && !VECTOR_TYPE_P (inner_type));
+ }
/* This is required for the canonicalization. */
gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
@@ -2464,6 +2466,22 @@ create_var_decl (tree name, tree asm_name, tree type, tree init,
&& !AGGREGATE_TYPE_P (type)) ? CONST_DECL : VAR_DECL,
name, type);
+ /* Detect constants created by the front-end to hold 'reference to function
+ calls for stabilization purposes. This is needed for renaming. */
+ if (const_flag && init && POINTER_TYPE_P (type))
+ {
+ tree inner = init;
+ if (TREE_CODE (inner) == COMPOUND_EXPR)
+ inner = TREE_OPERAND (inner, 1);
+ inner = remove_conversions (inner, true);
+ if (TREE_CODE (inner) == ADDR_EXPR
+ && ((TREE_CODE (TREE_OPERAND (inner, 0)) == CALL_EXPR
+ && !call_is_atomic_load (TREE_OPERAND (inner, 0)))
+ || (TREE_CODE (TREE_OPERAND (inner, 0)) == VAR_DECL
+ && DECL_RETURN_VALUE_P (TREE_OPERAND (inner, 0)))))
+ DECL_RETURN_VALUE_P (var_decl) = 1;
+ }
+
/* If this is external, throw away any initializations (they will be done
elsewhere) unless this is a constant for which we would like to remain
able to get the initializer. If we are defining a global here, leave a
diff --git a/gcc/ada/gcc-interface/utils2.c b/gcc/ada/gcc-interface/utils2.c
index 44a05fb..c1bb74d 100644
--- a/gcc/ada/gcc-interface/utils2.c
+++ b/gcc/ada/gcc-interface/utils2.c
@@ -1383,8 +1383,11 @@ build_unary_op (enum tree_code op_code, tree result_type, tree operand)
since the middle-end cannot handle it. But we don't it in the
general case because it may introduce aliasing issues if the
first operand is an indirect assignment and the second operand
- the corresponding address, e.g. for an allocator. */
- if (TREE_CODE (type) == UNCONSTRAINED_ARRAY_TYPE)
+ the corresponding address, e.g. for an allocator. However do
+ it for a return value to expose it for later recognition. */
+ if (TREE_CODE (type) == UNCONSTRAINED_ARRAY_TYPE
+ || (TREE_CODE (TREE_OPERAND (operand, 1)) == VAR_DECL
+ && DECL_RETURN_VALUE_P (TREE_OPERAND (operand, 1))))
{
result = build_unary_op (ADDR_EXPR, result_type,
TREE_OPERAND (operand, 1));
diff --git a/gcc/ada/s-osinte-gnu.ads b/gcc/ada/s-osinte-gnu.ads
new file mode 100644
index 0000000..b3397c1
--- /dev/null
+++ b/gcc/ada/s-osinte-gnu.ads
@@ -0,0 +1,801 @@
+------------------------------------------------------------------------------
+-- --
+-- GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS --
+-- --
+-- S Y S T E M . O S _ I N T E R F A C E --
+-- --
+-- S p e c --
+-- --
+-- Copyright (C) 1991-1994, Florida State University --
+-- Copyright (C) 1995-2016, Free Software Foundation, Inc. --
+-- --
+-- GNAT is free software; you can redistribute it and/or modify it under --
+-- terms of the GNU General Public License as published by the Free Soft- --
+-- ware Foundation; either version 3, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. --
+-- --
+-- As a special exception 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/>. --
+-- --
+-- GNARL was developed by the GNARL team at Florida State University. --
+-- Extensive contributions were provided by Ada Core Technologies, Inc. --
+-- --
+------------------------------------------------------------------------------
+
+-- This is the GNU/Hurd (POSIX Threads) version of this package
+
+-- This package encapsulates all direct interfaces to OS services
+-- that are needed by children of System.
+
+-- PLEASE DO NOT add any with-clauses to this package or remove the pragma
+-- Preelaborate. This package is designed to be a bottom-level (leaf) package
+
+with Interfaces.C;
+with Unchecked_Conversion;
+
+package System.OS_Interface is
+ pragma Preelaborate;
+
+ pragma Linker_Options ("-lpthread");
+ pragma Linker_Options ("-lrt");
+
+ subtype int is Interfaces.C.int;
+ subtype char is Interfaces.C.char;
+ subtype short is Interfaces.C.short;
+ subtype long is Interfaces.C.long;
+ subtype unsigned is Interfaces.C.unsigned;
+ subtype unsigned_short is Interfaces.C.unsigned_short;
+ subtype unsigned_long is Interfaces.C.unsigned_long;
+ subtype unsigned_char is Interfaces.C.unsigned_char;
+ subtype plain_char is Interfaces.C.plain_char;
+ subtype size_t is Interfaces.C.size_t;
+
+ -----------
+ -- Errno --
+ -----------
+ -- From /usr/include/i386-gnu/bits/errno.h
+
+ function errno return int;
+ pragma Import (C, errno, "__get_errno");
+
+ EAGAIN : constant := 1073741859;
+ EINTR : constant := 1073741828;
+ EINVAL : constant := 1073741846;
+ ENOMEM : constant := 1073741836;
+ EPERM : constant := 1073741825;
+ ETIMEDOUT : constant := 1073741884;
+
+ -------------
+ -- Signals --
+ -------------
+ -- From /usr/include/i386-gnu/bits/signum.h
+
+ Max_Interrupt : constant := 32;
+ type Signal is new int range 0 .. Max_Interrupt;
+ for Signal'Size use int'Size;
+
+ SIGHUP : constant := 1; -- hangup
+ SIGINT : constant := 2; -- interrupt (rubout)
+ SIGQUIT : constant := 3; -- quit (ASCD FS)
+ SIGILL : constant := 4; -- illegal instruction (not reset)
+ SIGTRAP : constant := 5; -- trace trap (not reset)
+ SIGIOT : constant := 6; -- IOT instruction
+ SIGABRT : constant := 6; -- used by abort, replace SIGIOT in the future
+ SIGEMT : constant := 7; -- EMT instruction
+ SIGFPE : constant := 8; -- floating point exception
+ SIGKILL : constant := 9; -- kill (cannot be caught or ignored)
+ SIGBUS : constant := 10; -- bus error
+ SIGSEGV : constant := 11; -- segmentation violation
+ SIGSYS : constant := 12; -- bad argument to system call
+ SIGPIPE : constant := 13; -- write on a pipe with no one to read it
+ SIGALRM : constant := 14; -- alarm clock
+ SIGTERM : constant := 15; -- software termination signal from kill
+ SIGURG : constant := 16; -- urgent condition on IO channel
+ SIGSTOP : constant := 17; -- stop (cannot be caught or ignored)
+ SIGTSTP : constant := 18; -- user stop requested from tty
+ SIGCONT : constant := 19; -- stopped process has been continued
+ SIGCLD : constant := 20; -- alias for SIGCHLD
+ SIGCHLD : constant := 20; -- child status change
+ SIGTTIN : constant := 21; -- background tty read attempted
+ SIGTTOU : constant := 22; -- background tty write attempted
+ SIGIO : constant := 23; -- I/O possible (Solaris SIGPOLL alias)
+ SIGPOLL : constant := 23; -- I/O possible (same as SIGIO?)
+ SIGXCPU : constant := 24; -- CPU time limit exceeded
+ SIGXFSZ : constant := 25; -- filesize limit exceeded
+ SIGVTALRM : constant := 26; -- virtual timer expired
+ SIGPROF : constant := 27; -- profiling timer expired
+ SIGWINCH : constant := 28; -- window size change
+ SIGINFO : constant := 29; -- information request (NetBSD/FreeBSD)
+ SIGUSR1 : constant := 30; -- user defined signal 1
+ SIGUSR2 : constant := 31; -- user defined signal 2
+ SIGLOST : constant := 32; -- Resource lost (Sun); server died (GNU)
+
+ SIGADAABORT : constant := SIGABRT;
+ -- Change this if you want to use another signal for task abort.
+ -- SIGTERM might be a good one.
+
+ type Signal_Set is array (Natural range <>) of Signal;
+
+ Unmasked : constant Signal_Set := (
+ SIGTRAP,
+ -- To enable debugging on multithreaded applications, mark SIGTRAP to
+ -- be kept unmasked.
+
+ SIGBUS,
+
+ SIGTTIN, SIGTTOU, SIGTSTP,
+ -- Keep these three signals unmasked so that background processes
+ -- and IO behaves as normal "C" applications
+
+ SIGPROF,
+ -- To avoid confusing the profiler
+
+ SIGKILL, SIGSTOP);
+ -- These two signals actually cannot be masked;
+ -- POSIX simply won't allow it.
+
+ Reserved : constant Signal_Set :=
+ -- I am not sure why the following signal is reserved.
+ -- I guess they are not supported by this version of GNU/Hurd.
+ (0 .. 0 => SIGVTALRM);
+
+ type sigset_t is private;
+
+ -- From /usr/include/signal.h /usr/include/i386-gnu/bits/sigset.h
+ function sigaddset (set : access sigset_t; sig : Signal) return int;
+ pragma Import (C, sigaddset, "sigaddset");
+
+ function sigdelset (set : access sigset_t; sig : Signal) return int;
+ pragma Import (C, sigdelset, "sigdelset");
+
+ function sigfillset (set : access sigset_t) return int;
+ pragma Import (C, sigfillset, "sigfillset");
+
+ function sigismember (set : access sigset_t; sig : Signal) return int;
+ pragma Import (C, sigismember, "sigismember");
+
+ function sigemptyset (set : access sigset_t) return int;
+ pragma Import (C, sigemptyset, "sigemptyset");
+
+ -- sigcontext is architecture dependent, so define it private
+ type struct_sigcontext is private;
+
+ -- From /usr/include/i386-gnu/bits/sigaction.h: Note: arg. order differs
+ type struct_sigaction is record
+ sa_handler : System.Address;
+ sa_mask : sigset_t;
+ sa_flags : int;
+ end record;
+ pragma Convention (C, struct_sigaction);
+
+ type struct_sigaction_ptr is access all struct_sigaction;
+
+ -- From /usr/include/i386-gnu/bits/sigaction.h
+ SIG_BLOCK : constant := 1;
+ SIG_UNBLOCK : constant := 2;
+ SIG_SETMASK : constant := 3;
+
+ -- From /usr/include/i386-gnu/bits/signum.h
+ SIG_ERR : constant := 1;
+ SIG_DFL : constant := 0;
+ SIG_IGN : constant := 1;
+ SIG_HOLD : constant := 2;
+
+ -- From /usr/include/i386-gnu/bits/sigaction.h
+ SA_SIGINFO : constant := 16#0040#;
+ SA_ONSTACK : constant := 16#0001#;
+
+ function sigaction
+ (sig : Signal;
+ act : struct_sigaction_ptr;
+ oact : struct_sigaction_ptr) return int;
+ pragma Import (C, sigaction, "sigaction");
+
+ ----------
+ -- Time --
+ ----------
+
+ Time_Slice_Supported : constant Boolean := True;
+ -- Indicates whether time slicing is supported (i.e SCHED_RR is supported)
+
+ type timespec is private;
+
+ function nanosleep (rqtp, rmtp : access timespec) return int;
+ pragma Import (C, nanosleep, "nanosleep");
+
+ type clockid_t is new int;
+ CLOCK_REALTIME : constant clockid_t := 0;
+
+ -- From: /usr/include/time.h
+ function clock_gettime
+ (clock_id : clockid_t;
+ tp : access timespec)
+ return int;
+ pragma Import (C, clock_gettime, "clock_gettime");
+
+ function clock_getres
+ (clock_id : clockid_t;
+ res : access timespec) return int;
+ pragma Import (C, clock_getres, "clock_getres");
+
+ function To_Duration (TS : timespec) return Duration;
+ pragma Inline (To_Duration);
+
+ function To_Timespec (D : Duration) return timespec;
+ pragma Inline (To_Timespec);
+
+ -- From: /usr/include/unistd.h
+ function sysconf (name : int) return long;
+ pragma Import (C, sysconf);
+
+ -- From /usr/include/i386-gnu/bits/confname.h
+ SC_CLK_TCK : constant := 2;
+ SC_NPROCESSORS_ONLN : constant := 84;
+
+ -------------------------
+ -- Priority Scheduling --
+ -------------------------
+ -- From /usr/include/i386-gnu/bits/sched.h
+
+ SCHED_OTHER : constant := 0;
+ SCHED_FIFO : constant := 1;
+ SCHED_RR : constant := 2;
+
+ function To_Target_Priority
+ (Prio : System.Any_Priority) return Interfaces.C.int;
+ -- Maps System.Any_Priority to a POSIX priority.
+
+ -------------
+ -- Process --
+ -------------
+
+ type pid_t is private;
+
+ -- From: /usr/include/signal.h
+ function kill (pid : pid_t; sig : Signal) return int;
+ pragma Import (C, kill, "kill");
+
+ -- From: /usr/include/unistd.h
+ function getpid return pid_t;
+ pragma Import (C, getpid, "getpid");
+
+ ---------
+ -- LWP --
+ ---------
+
+ -- From: /usr/include/pthread/pthread.h
+ function lwp_self return System.Address;
+ -- lwp_self does not exist on this thread library, revert to pthread_self
+ -- which is the closest approximation (with getpid). This function is
+ -- needed to share 7staprop.adb across POSIX-like targets.
+ pragma Import (C, lwp_self, "pthread_self");
+
+ -------------
+ -- Threads --
+ -------------
+
+ type Thread_Body is access
+ function (arg : System.Address) return System.Address;
+ pragma Convention (C, Thread_Body);
+
+ function Thread_Body_Access is new
+ Unchecked_Conversion (System.Address, Thread_Body);
+
+ -- From: /usr/include/bits/pthread.h:typedef int __pthread_t;
+ -- /usr/include/pthread/pthreadtypes.h:typedef __pthread_t pthread_t;
+ type pthread_t is new unsigned_long;
+ subtype Thread_Id is pthread_t;
+
+ function To_pthread_t is new Unchecked_Conversion
+ (unsigned_long, pthread_t);
+
+ type pthread_mutex_t is limited private;
+ type pthread_rwlock_t is limited private;
+ type pthread_cond_t is limited private;
+ type pthread_attr_t is limited private;
+ type pthread_mutexattr_t is limited private;
+ type pthread_rwlockattr_t is limited private;
+ type pthread_condattr_t is limited private;
+ type pthread_key_t is private;
+
+ -- From /usr/include/pthread/pthreadtypes.h
+ PTHREAD_CREATE_DETACHED : constant := 1;
+ PTHREAD_CREATE_JOINABLE : constant := 0;
+
+ PTHREAD_SCOPE_PROCESS : constant := 1;
+ PTHREAD_SCOPE_SYSTEM : constant := 0;
+
+ -----------
+ -- Stack --
+ -----------
+
+ -- From: /usr/include/i386-gnu/bits/sigstack.h
+ type stack_t is record
+ ss_sp : System.Address;
+ ss_size : size_t;
+ ss_flags : int;
+ end record;
+ pragma Convention (C, stack_t);
+
+ function sigaltstack
+ (ss : not null access stack_t;
+ oss : access stack_t) return int;
+ pragma Import (C, sigaltstack, "sigaltstack");
+
+ Alternate_Stack : aliased System.Address;
+ -- This is a dummy definition, never used (Alternate_Stack_Size is null)
+
+ Alternate_Stack_Size : constant := 0;
+ -- No alternate signal stack is used on this platform
+
+ Stack_Base_Available : constant Boolean := False;
+ -- Indicates whether the stack base is available on this target
+
+ function Get_Stack_Base (thread : pthread_t) return Address;
+ pragma Inline (Get_Stack_Base);
+ -- returns the stack base of the specified thread. Only call this function
+ -- when Stack_Base_Available is True.
+
+ -- From: /usr/include/unistd.h __getpagesize or getpagesize??
+ function Get_Page_Size return int;
+ pragma Import (C, Get_Page_Size, "__getpagesize");
+ -- Returns the size of a page
+
+ -- From /usr/include/i386-gnu/bits/mman.h
+ PROT_NONE : constant := 0;
+ PROT_READ : constant := 4;
+ PROT_WRITE : constant := 2;
+ PROT_EXEC : constant := 1;
+ PROT_ALL : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
+ PROT_ON : constant := PROT_NONE;
+ PROT_OFF : constant := PROT_ALL;
+
+ -- From /usr/include/i386-gnu/bits/mman.h
+ function mprotect (addr : Address; len : size_t; prot : int) return int;
+ pragma Import (C, mprotect);
+
+ ---------------------------------------
+ -- Nonstandard Thread Initialization --
+ ---------------------------------------
+
+ procedure pthread_init;
+ pragma Inline (pthread_init);
+ -- This is a dummy procedure to share some GNULLI files
+
+ -------------------------
+ -- POSIX.1c Section 3 --
+ -------------------------
+
+ -- From: /usr/include/signal.h:
+ -- sigwait (__const sigset_t *__restrict __set, int *__restrict __sig)
+ function sigwait (set : access sigset_t; sig : access Signal) return int;
+ pragma Import (C, sigwait, "sigwait");
+
+ -- From: /usr/include/pthread/pthread.h:
+ -- extern int pthread_kill (pthread_t thread, int signo);
+ function pthread_kill (thread : pthread_t; sig : Signal) return int;
+ pragma Import (C, pthread_kill, "pthread_kill");
+
+ -- From: /usr/include/i386-gnu/bits/sigthread.h
+ -- extern int pthread_sigmask (int __how, __const __sigset_t *__newmask,
+ -- __sigset_t *__oldmask) __THROW;
+ function pthread_sigmask
+ (how : int;
+ set : access sigset_t;
+ oset : access sigset_t) return int;
+ pragma Import (C, pthread_sigmask, "pthread_sigmask");
+
+ --------------------------
+ -- POSIX.1c Section 11 --
+ --------------------------
+
+ -- From: /usr/include/pthread/pthread.h and
+ -- /usr/include/pthread/pthreadtypes.h
+ function pthread_mutexattr_init
+ (attr : access pthread_mutexattr_t) return int;
+ pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
+
+ function pthread_mutexattr_destroy
+ (attr : access pthread_mutexattr_t) return int;
+ pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
+
+ function pthread_mutex_init
+ (mutex : access pthread_mutex_t;
+ attr : access pthread_mutexattr_t) return int;
+ pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
+
+ function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
+ pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
+
+ function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
+ pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
+
+ function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
+ pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
+
+ function pthread_rwlockattr_init
+ (attr : access pthread_rwlockattr_t) return int;
+ pragma Import (C, pthread_rwlockattr_init, "pthread_rwlockattr_init");
+
+ function pthread_rwlockattr_destroy
+ (attr : access pthread_rwlockattr_t) return int;
+ pragma Import (C, pthread_rwlockattr_destroy, "pthread_rwlockattr_destroy");
+ PTHREAD_RWLOCK_PREFER_READER_NP : constant := 0;
+ PTHREAD_RWLOCK_PREFER_WRITER_NP : constant := 1;
+ PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP : constant := 2;
+
+ function pthread_rwlockattr_setkind_np
+ (attr : access pthread_rwlockattr_t;
+ pref : int) return int;
+ pragma Import
+ (C, pthread_rwlockattr_setkind_np, "pthread_rwlockattr_setkind_np");
+
+ function pthread_rwlock_init
+ (mutex : access pthread_rwlock_t;
+ attr : access pthread_rwlockattr_t) return int;
+ pragma Import (C, pthread_rwlock_init, "pthread_rwlock_init");
+
+ function pthread_rwlock_destroy
+ (mutex : access pthread_rwlock_t) return int;
+ pragma Import (C, pthread_rwlock_destroy, "pthread_rwlock_destroy");
+
+ function pthread_rwlock_rdlock (mutex : access pthread_rwlock_t) return int;
+ pragma Import (C, pthread_rwlock_rdlock, "pthread_rwlock_rdlock");
+
+ function pthread_rwlock_wrlock (mutex : access pthread_rwlock_t) return int;
+ pragma Import (C, pthread_rwlock_wrlock, "pthread_rwlock_wrlock");
+
+ function pthread_rwlock_unlock (mutex : access pthread_rwlock_t) return int;
+ pragma Import (C, pthread_rwlock_unlock, "pthread_rwlock_unlock");
+
+ function pthread_condattr_init
+ (attr : access pthread_condattr_t) return int;
+ pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
+
+ function pthread_condattr_destroy
+ (attr : access pthread_condattr_t) return int;
+ pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
+
+ function pthread_cond_init
+ (cond : access pthread_cond_t;
+ attr : access pthread_condattr_t) return int;
+ pragma Import (C, pthread_cond_init, "pthread_cond_init");
+
+ function pthread_cond_destroy (cond : access pthread_cond_t) return int;
+ pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
+
+ function pthread_cond_signal (cond : access pthread_cond_t) return int;
+ pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
+
+ function pthread_cond_wait
+ (cond : access pthread_cond_t;
+ mutex : access pthread_mutex_t) return int;
+ pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
+
+ function pthread_cond_timedwait
+ (cond : access pthread_cond_t;
+ mutex : access pthread_mutex_t;
+ abstime : access timespec) return int;
+ pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
+
+ Relative_Timed_Wait : constant Boolean := False;
+ -- pthread_cond_timedwait requires an absolute delay time
+
+ --------------------------
+ -- POSIX.1c Section 13 --
+ --------------------------
+ -- From /usr/include/pthread/pthreadtypes.h
+
+ PTHREAD_PRIO_NONE : constant := 0;
+ PTHREAD_PRIO_PROTECT : constant := 2;
+ PTHREAD_PRIO_INHERIT : constant := 1;
+
+ -- From: /usr/include/pthread/pthread.h
+ function pthread_mutexattr_setprotocol
+ (attr : access pthread_mutexattr_t;
+ protocol : int) return int;
+ pragma Import (C, pthread_mutexattr_setprotocol,
+ "pthread_mutexattr_setprotocol");
+
+ function pthread_mutexattr_getprotocol
+ (attr : access pthread_mutexattr_t;
+ protocol : access int) return int;
+ pragma Import (C, pthread_mutexattr_getprotocol,
+ "pthread_mutexattr_getprotocol");
+
+ function pthread_mutexattr_setprioceiling
+ (attr : access pthread_mutexattr_t;
+ prioceiling : int) return int;
+ pragma Import (C, pthread_mutexattr_setprioceiling,
+ "pthread_mutexattr_setprioceiling");
+
+ function pthread_mutexattr_getprioceiling
+ (attr : access pthread_mutexattr_t;
+ prioceiling : access int) return int;
+ pragma Import (C, pthread_mutexattr_getprioceiling,
+ "pthread_mutexattr_getprioceiling");
+
+ type struct_sched_param is record
+ sched_priority : int; -- scheduling priority
+ end record;
+ pragma Convention (C, struct_sched_param);
+
+ function pthread_setschedparam
+ (thread : pthread_t;
+ policy : int;
+ param : access struct_sched_param) return int;
+ pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
+
+ function pthread_attr_setscope
+ (attr : access pthread_attr_t;
+ contentionscope : int) return int;
+ pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
+
+ function pthread_attr_getscope
+ (attr : access pthread_attr_t;
+ contentionscope : access int) return int;
+ pragma Import (C, pthread_attr_getscope, "pthread_attr_getscope");
+
+ function pthread_attr_setinheritsched
+ (attr : access pthread_attr_t;
+ inheritsched : int) return int;
+ pragma Import (C, pthread_attr_setinheritsched,
+ "pthread_attr_setinheritsched");
+
+ function pthread_attr_getinheritsched
+ (attr : access pthread_attr_t;
+ inheritsched : access int) return int;
+ pragma Import (C, pthread_attr_getinheritsched,
+ "pthread_attr_getinheritsched");
+
+ function pthread_attr_setschedpolicy
+ (attr : access pthread_attr_t;
+ policy : int) return int;
+ pragma Import (C, pthread_attr_setschedpolicy, "pthread_setschedpolicy");
+
+ function sched_yield return int;
+ pragma Import (C, sched_yield, "sched_yield");
+
+ ---------------------------
+ -- P1003.1c - Section 16 --
+ ---------------------------
+
+ function pthread_attr_init
+ (attributes : access pthread_attr_t) return int;
+ pragma Import (C, pthread_attr_init, "pthread_attr_init");
+
+ function pthread_attr_destroy
+ (attributes : access pthread_attr_t) return int;
+ pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
+
+ function pthread_attr_setdetachstate
+ (attr : access pthread_attr_t;
+ detachstate : int) return int;
+ pragma Import
+ (C, pthread_attr_setdetachstate, "pthread_attr_setdetachstate");
+
+ function pthread_attr_setstacksize
+ (attr : access pthread_attr_t;
+ stacksize : size_t) return int;
+ pragma Import (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
+
+ -- From: /usr/include/pthread/pthread.h
+ function pthread_create
+ (thread : access pthread_t;
+ attributes : access pthread_attr_t;
+ start_routine : Thread_Body;
+ arg : System.Address) return int;
+ pragma Import (C, pthread_create, "pthread_create");
+
+ procedure pthread_exit (status : System.Address);
+ pragma Import (C, pthread_exit, "pthread_exit");
+
+ function pthread_self return pthread_t;
+ pragma Import (C, pthread_self, "pthread_self");
+
+ --------------------------
+ -- POSIX.1c Section 17 --
+ --------------------------
+
+ function pthread_setspecific
+ (key : pthread_key_t;
+ value : System.Address) return int;
+ pragma Import (C, pthread_setspecific, "pthread_setspecific");
+
+ function pthread_getspecific (key : pthread_key_t) return System.Address;
+ pragma Import (C, pthread_getspecific, "pthread_getspecific");
+
+ type destructor_pointer is access procedure (arg : System.Address);
+ pragma Convention (C, destructor_pointer);
+
+ function pthread_key_create
+ (key : access pthread_key_t;
+ destructor : destructor_pointer) return int;
+ pragma Import (C, pthread_key_create, "pthread_key_create");
+
+ -- From /usr/include/i386-gnu/bits/sched.h
+ CPU_SETSIZE : constant := 1_024;
+
+ type bit_field is array (1 .. CPU_SETSIZE) of Boolean;
+ for bit_field'Size use CPU_SETSIZE;
+ pragma Pack (bit_field);
+ pragma Convention (C, bit_field);
+
+ type cpu_set_t is record
+ bits : bit_field;
+ end record;
+ pragma Convention (C, cpu_set_t);
+
+private
+
+ type sigset_t is array (1 .. 4) of unsigned;
+
+ -- In GNU/Hurd the component sa_handler turns out to
+ -- be one a union type, and the selector is a macro:
+ -- #define sa_handler __sigaction_handler.sa_handler
+ -- #define sa_sigaction __sigaction_handler.sa_sigaction
+
+ -- Should we add a signal_context type here ?
+ -- How could it be done independent of the CPU architecture ?
+ -- sigcontext type is opaque, so it is architecturally neutral.
+ -- It is always passed as an access type, so define it as an empty record
+ -- since the contents are not used anywhere.
+ type struct_sigcontext is null record;
+ pragma Convention (C, struct_sigcontext);
+
+ type pid_t is new int;
+
+ type time_t is new long;
+
+ type timespec is record
+ tv_sec : time_t;
+ tv_nsec : long;
+ end record;
+ pragma Convention (C, timespec);
+
+ -- From: /usr/include/pthread/pthreadtypes.h:
+ -- typedef struct __pthread_attr pthread_attr_t;
+ -- /usr/include/i386-gnu/bits/thread-attr.h: struct __pthread_attr...
+ -- /usr/include/pthread/pthreadtypes.h: enum __pthread_contentionscope
+ -- enum __pthread_detachstate detachstate;
+ -- enum __pthread_inheritsched inheritsched;
+ -- enum __pthread_contentionscope contentionscope;
+ -- Not used: schedpolicy : int;
+ type pthread_attr_t is record
+ schedparam : struct_sched_param;
+ stackaddr : System.Address;
+ stacksize : size_t;
+ guardsize : size_t;
+ detachstate : int;
+ inheritsched : int;
+ contentionscope : int;
+ schedpolicy : int;
+ end record;
+ pragma Convention (C, pthread_attr_t);
+
+ -- From: /usr/include/pthread/pthreadtypes.h:
+ -- typedef struct __pthread_condattr pthread_condattr_t;
+ -- From: /usr/include/i386-gnu/bits/condition-attr.h:
+ -- struct __pthread_condattr {
+ -- enum __pthread_process_shared pshared;
+ -- __Clockid_T Clock;}
+ -- From: /usr/include/pthread/pthreadtypes.h:
+ -- enum __pthread_process_shared
+ type pthread_condattr_t is record
+ pshared : int;
+ clock : clockid_t;
+ end record;
+ pragma Convention (C, pthread_condattr_t);
+
+ -- From: /usr/include/pthread/pthreadtypes.h:
+ -- typedef struct __pthread_mutexattr pthread_mutexattr_t; and
+ -- /usr/include/i386-gnu/bits/mutex-attr.h
+ -- struct __pthread_mutexattr {
+ -- int prioceiling;
+ -- enum __pthread_mutex_protocol protocol;
+ -- enum __pthread_process_shared pshared;
+ -- enum __pthread_mutex_type mutex_type;};
+ type pthread_mutexattr_t is record
+ prioceiling : int;
+ protocol : int;
+ pshared : int;
+ mutex_type : int;
+ end record;
+ pragma Convention (C, pthread_mutexattr_t);
+
+ -- From: /usr/include/pthread/pthreadtypes.h
+ -- typedef struct __pthread_mutex pthread_mutex_t; and
+ -- /usr/include/i386-gnu/bits/mutex.h:
+ -- struct __pthread_mutex {
+ -- __pthread_spinlock_t __held;
+ -- __pthread_spinlock_t __lock;
+ -- /* in cthreads, mutex_init does not initialized the third
+ -- pointer, as such, we cannot rely on its value for anything. */
+ -- char *cthreadscompat1;
+ -- struct __pthread *__queue;
+ -- struct __pthread_mutexattr *attr;
+ -- void *data;
+ -- /* up to this point, we are completely compatible with cthreads
+ -- and what libc expects. */
+ -- void *owner;
+ -- unsigned locks;
+ -- /* if null then the default attributes apply. */
+ -- };
+
+ type pthread_mutex_t is record
+ held : int;
+ lock : int;
+ cthreadcompat : System.Address;
+ queue : System.Address;
+ attr : System.Address;
+ data : System.Address;
+ owner : System.Address;
+ locks : unsigned;
+ end record;
+ pragma Convention (C, pthread_mutex_t);
+ -- pointer needed?
+ -- type pthread_mutex_t_ptr is access pthread_mutex_t;
+
+ -- From: /usr/include/pthread/pthreadtypes.h:
+ -- typedef struct __pthread_cond pthread_cond_t;
+ -- typedef struct __pthread_condattr pthread_condattr_t;
+ -- /usr/include/i386-gnu/bits/condition.h:struct __pthread_cond{}
+ -- pthread_condattr_t: see above!
+ -- /usr/include/i386-gnu/bits/condition.h:
+ -- struct __pthread_condimpl *__impl;
+
+ type pthread_cond_t is record
+ lock : int;
+ queue : System.Address;
+ condattr : System.Address;
+ impl : System.Address;
+ data : System.Address;
+ end record;
+ pragma Convention (C, pthread_cond_t);
+
+ -- From: /usr/include/pthread/pthreadtypes.h:
+ -- typedef __pthread_key pthread_key_t; and
+ -- /usr/include/i386-gnu/bits/thread-specific.h:
+ -- typedef int __pthread_key;
+
+ type pthread_key_t is new int;
+
+ -- From: /usr/include/i386-gnu/bits/rwlock-attr.h:
+ -- struct __pthread_rwlockattr {
+ -- enum __pthread_process_shared pshared; };
+
+ type pthread_rwlockattr_t is record
+ pshared : int;
+ end record;
+ pragma Convention (C, pthread_rwlockattr_t);
+
+ -- From: /usr/include/i386-gnu/bits/rwlock.h:
+ -- struct __pthread_rwlock {
+ -- __pthread_spinlock_t __held;
+ -- __pthread_spinlock_t __lock;
+ -- int readers;
+ -- struct __pthread *readerqueue;
+ -- struct __pthread *writerqueue;
+ -- struct __pthread_rwlockattr *__attr;
+ -- void *__data; };
+
+ type pthread_rwlock_t is record
+ held : int;
+ lock : int;
+ readers : int;
+ readerqueue : System.Address;
+ writerqueue : System.Address;
+ attr : pthread_rwlockattr_t;
+ data : int;
+ end record;
+ pragma Convention (C, pthread_rwlock_t);
+
+end System.OS_Interface;
diff --git a/gcc/ada/system-linux-s390.ads b/gcc/ada/system-linux-s390.ads
index 6c59f64..b81b2b2 100644
--- a/gcc/ada/system-linux-s390.ads
+++ b/gcc/ada/system-linux-s390.ads
@@ -132,7 +132,7 @@ private
Preallocated_Stacks : constant Boolean := False;
Signed_Zeros : constant Boolean := True;
Stack_Check_Default : constant Boolean := False;
- Stack_Check_Probes : constant Boolean := False;
+ Stack_Check_Probes : constant Boolean := True;
Stack_Check_Limits : constant Boolean := False;
Support_Aggregates : constant Boolean := True;
Support_Composite_Assign : constant Boolean := True;
diff --git a/gcc/ada/system-linux-s390x.ads b/gcc/ada/system-linux-s390x.ads
index 90e1d1c..db0e3c0 100644
--- a/gcc/ada/system-linux-s390x.ads
+++ b/gcc/ada/system-linux-s390x.ads
@@ -132,7 +132,7 @@ private
Preallocated_Stacks : constant Boolean := False;
Signed_Zeros : constant Boolean := True;
Stack_Check_Default : constant Boolean := False;
- Stack_Check_Probes : constant Boolean := False;
+ Stack_Check_Probes : constant Boolean := True;
Stack_Check_Limits : constant Boolean := False;
Support_Aggregates : constant Boolean := True;
Support_Composite_Assign : constant Boolean := True;
diff --git a/gcc/ada/system-vxworks-m68k.ads b/gcc/ada/system-vxworks-m68k.ads
index d8fa9ba..ca59e7a 100644
--- a/gcc/ada/system-vxworks-m68k.ads
+++ b/gcc/ada/system-vxworks-m68k.ads
@@ -7,7 +7,7 @@
-- S p e c --
-- (VxWorks version M68K) --
-- --
--- Copyright (C) 1992-2015, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2016, Free Software Foundation, Inc. --
-- --
-- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. The copyright notice above, and the license provisions that follow --
@@ -145,8 +145,8 @@ private
Preallocated_Stacks : constant Boolean := False;
Signed_Zeros : constant Boolean := False;
Stack_Check_Default : constant Boolean := False;
- Stack_Check_Probes : constant Boolean := False;
- Stack_Check_Limits : constant Boolean := True;
+ Stack_Check_Probes : constant Boolean := True;
+ Stack_Check_Limits : constant Boolean := False;
Support_Aggregates : constant Boolean := True;
Support_Composite_Assign : constant Boolean := True;
Support_Composite_Compare : constant Boolean := True;
diff --git a/gcc/ada/system-vxworks-mips.ads b/gcc/ada/system-vxworks-mips.ads
index 2284ebb..d4860f4 100644
--- a/gcc/ada/system-vxworks-mips.ads
+++ b/gcc/ada/system-vxworks-mips.ads
@@ -7,7 +7,7 @@
-- S p e c --
-- (VxWorks Version Mips) --
-- --
--- Copyright (C) 1992-2015, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2016, Free Software Foundation, Inc. --
-- --
-- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. The copyright notice above, and the license provisions that follow --
@@ -145,8 +145,8 @@ private
Preallocated_Stacks : constant Boolean := False;
Signed_Zeros : constant Boolean := True;
Stack_Check_Default : constant Boolean := False;
- Stack_Check_Probes : constant Boolean := False;
- Stack_Check_Limits : constant Boolean := True;
+ Stack_Check_Probes : constant Boolean := True;
+ Stack_Check_Limits : constant Boolean := False;
Support_Aggregates : constant Boolean := True;
Support_Composite_Assign : constant Boolean := True;
Support_Composite_Compare : constant Boolean := True;
diff --git a/gcc/ada/system-vxworks-ppc.ads b/gcc/ada/system-vxworks-ppc.ads
index f942470..bb27ee4 100644
--- a/gcc/ada/system-vxworks-ppc.ads
+++ b/gcc/ada/system-vxworks-ppc.ads
@@ -7,7 +7,7 @@
-- S p e c --
-- (VxWorks 5 Version PPC) --
-- --
--- Copyright (C) 1992-2015, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2016, Free Software Foundation, Inc. --
-- --
-- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. The copyright notice above, and the license provisions that follow --
@@ -152,8 +152,8 @@ private
Preallocated_Stacks : constant Boolean := False;
Signed_Zeros : constant Boolean := True;
Stack_Check_Default : constant Boolean := False;
- Stack_Check_Probes : constant Boolean := False;
- Stack_Check_Limits : constant Boolean := True;
+ Stack_Check_Probes : constant Boolean := True;
+ Stack_Check_Limits : constant Boolean := False;
Support_Aggregates : constant Boolean := True;
Support_Composite_Assign : constant Boolean := True;
Support_Composite_Compare : constant Boolean := True;
diff --git a/gcc/ada/system-vxworks-sparcv9.ads b/gcc/ada/system-vxworks-sparcv9.ads
index 5c07b05..f3caca4 100644
--- a/gcc/ada/system-vxworks-sparcv9.ads
+++ b/gcc/ada/system-vxworks-sparcv9.ads
@@ -7,7 +7,7 @@
-- S p e c --
-- (VxWorks Version Sparc/64) --
-- --
--- Copyright (C) 1992-2015, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2016, Free Software Foundation, Inc. --
-- --
-- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. The copyright notice above, and the license provisions that follow --
@@ -147,8 +147,8 @@ private
Preallocated_Stacks : constant Boolean := False;
Signed_Zeros : constant Boolean := True;
Stack_Check_Default : constant Boolean := False;
- Stack_Check_Probes : constant Boolean := False;
- Stack_Check_Limits : constant Boolean := True;
+ Stack_Check_Probes : constant Boolean := True;
+ Stack_Check_Limits : constant Boolean := False;
Support_Aggregates : constant Boolean := True;
Support_Composite_Assign : constant Boolean := True;
Support_Composite_Compare : constant Boolean := True;
diff --git a/gcc/ada/system-vxworks-x86.ads b/gcc/ada/system-vxworks-x86.ads
index adc73a6..a7508aa 100644
--- a/gcc/ada/system-vxworks-x86.ads
+++ b/gcc/ada/system-vxworks-x86.ads
@@ -7,7 +7,7 @@
-- S p e c --
-- (VxWorks 5 Version x86) --
-- --
--- Copyright (C) 1992-2015, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2016, Free Software Foundation, Inc. --
-- --
-- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. The copyright notice above, and the license provisions that follow --
@@ -148,8 +148,8 @@ private
Preallocated_Stacks : constant Boolean := False;
Signed_Zeros : constant Boolean := True;
Stack_Check_Default : constant Boolean := False;
- Stack_Check_Probes : constant Boolean := False;
- Stack_Check_Limits : constant Boolean := True;
+ Stack_Check_Probes : constant Boolean := True;
+ Stack_Check_Limits : constant Boolean := False;
Support_Aggregates : constant Boolean := True;
Support_Atomic_Primitives : constant Boolean := True;
Support_Composite_Assign : constant Boolean := True;
diff --git a/gcc/alias.c b/gcc/alias.c
index 753e1af..a0e25dc 100644
--- a/gcc/alias.c
+++ b/gcc/alias.c
@@ -3057,6 +3057,20 @@ output_dependence (const_rtx mem, const_rtx x)
/*mem_canonicalized=*/false,
/*x_canonicalized*/false, /*writep=*/true);
}
+
+/* Likewise, but we already have a canonicalized MEM, and X_ADDR for X.
+ Also, consider X in X_MODE (which might be from an enclosing
+ STRICT_LOW_PART / ZERO_EXTRACT).
+ If MEM_CANONICALIZED is true, MEM is canonicalized. */
+
+int
+canon_output_dependence (const_rtx mem, bool mem_canonicalized,
+ const_rtx x, machine_mode x_mode, rtx x_addr)
+{
+ return write_dependence_p (mem, x, x_mode, x_addr,
+ mem_canonicalized, /*x_canonicalized=*/true,
+ /*writep=*/true);
+}
diff --git a/gcc/alloc-pool.c b/gcc/alloc-pool.c
index ae5e232..43d06f6 100644
--- a/gcc/alloc-pool.c
+++ b/gcc/alloc-pool.c
@@ -25,6 +25,7 @@ along with GCC; see the file COPYING3. If not see
ALLOC_POOL_ID_TYPE last_id;
mem_alloc_description<pool_usage> pool_allocator_usage;
+bool after_memory_report = false;
/* Output per-alloc_pool memory usage statistics. */
void
diff --git a/gcc/alloc-pool.h b/gcc/alloc-pool.h
index 085a0f9..3ead101 100644
--- a/gcc/alloc-pool.h
+++ b/gcc/alloc-pool.h
@@ -25,6 +25,9 @@ along with GCC; see the file COPYING3. If not see
extern void dump_alloc_pool_statistics (void);
+/* Flag indicates whether memory statistics are gathered any longer. */
+extern bool after_memory_report;
+
typedef unsigned long ALLOC_POOL_ID_TYPE;
/* Last used ID. */
@@ -156,8 +159,10 @@ private:
struct allocation_object
{
+#if CHECKING_P
/* The ID of alloc pool which the object was allocated from. */
ALLOC_POOL_ID_TYPE id;
+#endif
union
{
@@ -172,6 +177,7 @@ private:
int64_t align_i;
} u;
+#if CHECKING_P
static inline allocation_object*
get_instance (void *data_ptr)
{
@@ -179,6 +185,7 @@ private:
- offsetof (allocation_object,
u.data));
}
+#endif
static inline void*
get_data (void *instance_ptr)
@@ -302,7 +309,7 @@ base_pool_allocator <TBlockAllocator>::release ()
TBlockAllocator::release (block);
}
- if (GATHER_STATISTICS)
+ if (GATHER_STATISTICS && !after_memory_report)
{
pool_allocator_usage.release_instance_overhead
(this, (m_elts_allocated - m_elts_free) * m_elt_size);
@@ -388,7 +395,9 @@ base_pool_allocator <TBlockAllocator>::allocate ()
header->next = NULL;
/* Mark the element to be free. */
+#if CHECKING_P
((allocation_object*) block)->id = 0;
+#endif
VALGRIND_DISCARD (VALGRIND_MAKE_MEM_NOACCESS (header,size));
m_returned_free_list = header;
m_virgin_free_list += m_elt_size;
@@ -403,7 +412,9 @@ base_pool_allocator <TBlockAllocator>::allocate ()
m_elts_free--;
/* Set the ID for element. */
+#if CHECKING_P
allocation_object::get_instance (header)->id = m_id;
+#endif
VALGRIND_DISCARD (VALGRIND_MAKE_MEM_UNDEFINED (header, size));
return (void *)(header);
@@ -420,16 +431,20 @@ base_pool_allocator <TBlockAllocator>::remove (void *object)
{
gcc_assert (m_initialized);
gcc_assert (object
- /* Check if we free more than we allocated, which is Bad (TM). */
- && m_elts_free < m_elts_allocated
- /* Check whether the PTR was allocated from POOL. */
- && m_id == allocation_object::get_instance (object)->id);
+ /* Check if we free more than we allocated. */
+ && m_elts_free < m_elts_allocated);
+#if CHECKING_P
+ /* Check whether the PTR was allocated from POOL. */
+ gcc_assert (m_id == allocation_object::get_instance (object)->id);
+#endif
memset (object, 0xaf, size);
}
+#if CHECKING_P
/* Mark the element to be free. */
allocation_object::get_instance (object)->id = 0;
+#endif
allocation_pool_list *header = new (object) allocation_pool_list;
header->next = m_returned_free_list;
diff --git a/gcc/asan.c b/gcc/asan.c
index 47bfdcd..71095fb 100644
--- a/gcc/asan.c
+++ b/gcc/asan.c
@@ -1766,6 +1766,8 @@ instrument_derefs (gimple_stmt_iterator *iter, tree t,
tree type, base;
HOST_WIDE_INT size_in_bytes;
+ if (location == UNKNOWN_LOCATION)
+ location = EXPR_LOCATION (t);
type = TREE_TYPE (t);
switch (TREE_CODE (t))
@@ -2049,6 +2051,7 @@ maybe_instrument_call (gimple_stmt_iterator *iter)
gsi_insert_before (iter, g, GSI_SAME_STMT);
}
+ bool instrumented = false;
if (gimple_store_p (stmt))
{
tree ref_expr = gimple_call_lhs (stmt);
@@ -2056,11 +2059,30 @@ maybe_instrument_call (gimple_stmt_iterator *iter)
gimple_location (stmt),
/*is_store=*/true);
- gsi_next (iter);
- return true;
+ instrumented = true;
}
- return false;
+ /* Walk through gimple_call arguments and check them id needed. */
+ unsigned args_num = gimple_call_num_args (stmt);
+ for (unsigned i = 0; i < args_num; ++i)
+ {
+ tree arg = gimple_call_arg (stmt, i);
+ /* If ARG is not a non-aggregate register variable, compiler in general
+ creates temporary for it and pass it as argument to gimple call.
+ But in some cases, e.g. when we pass by value a small structure that
+ fits to register, compiler can avoid extra overhead by pulling out
+ these temporaries. In this case, we should check the argument. */
+ if (!is_gimple_reg (arg) && !is_gimple_min_invariant (arg))
+ {
+ instrument_derefs (iter, arg,
+ gimple_location (stmt),
+ /*is_store=*/false);
+ instrumented = true;
+ }
+ }
+ if (instrumented)
+ gsi_next (iter);
+ return instrumented;
}
/* Walk each instruction of all basic block and instrument those that
diff --git a/gcc/bitmap.c b/gcc/bitmap.c
index 0a94e64..0c05512 100644
--- a/gcc/bitmap.c
+++ b/gcc/bitmap.c
@@ -35,7 +35,7 @@ bitmap_register (bitmap b MEM_STAT_DECL)
/* Account the overhead. */
static void
-register_overhead (bitmap b, int amount)
+register_overhead (bitmap b, size_t amount)
{
if (bitmap_mem_desc.contains_descriptor_for_instance (b))
bitmap_mem_desc.register_instance_overhead (amount, b);
@@ -468,6 +468,27 @@ bitmap_copy (bitmap to, const_bitmap from)
to_ptr = to_elt;
}
}
+
+/* Move a bitmap to another bitmap. */
+
+void
+bitmap_move (bitmap to, bitmap from)
+{
+ gcc_assert (to->obstack == from->obstack);
+
+ bitmap_clear (to);
+
+ *to = *from;
+
+ if (GATHER_STATISTICS)
+ {
+ size_t sz = 0;
+ for (bitmap_element *e = to->first; e; e = e->next)
+ sz += sizeof (bitmap_element);
+ register_overhead (to, sz);
+ register_overhead (from, -sz);
+ }
+}
/* Find a bitmap element that would hold a bitmap's bit.
Update the `current' field even if we can't find an element that
@@ -641,6 +662,26 @@ bitmap_popcount (BITMAP_WORD a)
return ret;
}
#endif
+
+/* Count and return the number of bits set in the bitmap word BITS. */
+static unsigned long
+bitmap_count_bits_in_word (const BITMAP_WORD *bits)
+{
+ unsigned long count = 0;
+
+ for (unsigned ix = 0; ix != BITMAP_ELEMENT_WORDS; ix++)
+ {
+#if GCC_VERSION >= 3400
+ /* Note that popcountl matches BITMAP_WORD in type, so the actual size
+ of BITMAP_WORD is not material. */
+ count += __builtin_popcountl (bits[ix]);
+#else
+ count += bitmap_popcount (bits[ix]);
+#endif
+ }
+ return count;
+}
+
/* Count the number of bits set in the bitmap, and return it. */
unsigned long
@@ -648,19 +689,44 @@ bitmap_count_bits (const_bitmap a)
{
unsigned long count = 0;
const bitmap_element *elt;
- unsigned ix;
for (elt = a->first; elt; elt = elt->next)
+ count += bitmap_count_bits_in_word (elt->bits);
+
+ return count;
+}
+
+/* Count the number of unique bits set in A and B and return it. */
+
+unsigned long
+bitmap_count_unique_bits (const_bitmap a, const_bitmap b)
+{
+ unsigned long count = 0;
+ const bitmap_element *elt_a, *elt_b;
+
+ for (elt_a = a->first, elt_b = b->first; elt_a && elt_b; )
{
- for (ix = 0; ix != BITMAP_ELEMENT_WORDS; ix++)
+ /* If we're at different indices, then count all the bits
+ in the lower element. If we're at the same index, then
+ count the bits in the IOR of the two elements. */
+ if (elt_a->indx < elt_b->indx)
{
-#if GCC_VERSION >= 3400
- /* Note that popcountl matches BITMAP_WORD in type, so the actual size
- of BITMAP_WORD is not material. */
- count += __builtin_popcountl (elt->bits[ix]);
-#else
- count += bitmap_popcount (elt->bits[ix]);
-#endif
+ count += bitmap_count_bits_in_word (elt_a->bits);
+ elt_a = elt_a->next;
+ }
+ else if (elt_b->indx < elt_a->indx)
+ {
+ count += bitmap_count_bits_in_word (elt_b->bits);
+ elt_b = elt_b->next;
+ }
+ else
+ {
+ BITMAP_WORD bits[BITMAP_ELEMENT_WORDS];
+ for (unsigned ix = 0; ix != BITMAP_ELEMENT_WORDS; ix++)
+ bits[ix] = elt_a->bits[ix] | elt_b->bits[ix];
+ count += bitmap_count_bits_in_word (bits);
+ elt_a = elt_a->next;
+ elt_b = elt_b->next;
}
}
return count;
diff --git a/gcc/bitmap.h b/gcc/bitmap.h
index 013c9fb..1115711 100644
--- a/gcc/bitmap.h
+++ b/gcc/bitmap.h
@@ -157,12 +157,14 @@ struct bitmap_usage: public mem_usage
{
char *location_string = loc->to_string ();
- fprintf (stderr, "%-48s %10li:%5.1f%%%10li%10li:%5.1f%%%12li%12li%10s\n",
- location_string,
- (long)m_allocated, get_percent (m_allocated, total.m_allocated),
- (long)m_peak, (long)m_times,
+ fprintf (stderr, "%-48s %10" PRIu64 ":%5.1f%%"
+ "%10" PRIu64 "%10" PRIu64 ":%5.1f%%"
+ "%12" PRIu64 "%12" PRIu64 "%10s\n",
+ location_string, (uint64_t)m_allocated,
+ get_percent (m_allocated, total.m_allocated),
+ (uint64_t)m_peak, (uint64_t)m_times,
get_percent (m_times, total.m_times),
- (long)m_nsearches, (long)m_search_iter,
+ m_nsearches, m_search_iter,
loc->m_ggc ? "ggc" : "heap");
free (location_string);
@@ -253,6 +255,9 @@ extern void bitmap_clear (bitmap);
/* Copy a bitmap to another bitmap. */
extern void bitmap_copy (bitmap, const_bitmap);
+/* Move a bitmap to another bitmap. */
+extern void bitmap_move (bitmap, bitmap);
+
/* True if two bitmaps are identical. */
extern bool bitmap_equal_p (const_bitmap, const_bitmap);
@@ -275,6 +280,9 @@ extern bool bitmap_single_bit_set_p (const_bitmap);
/* Count the number of bits set in the bitmap. */
extern unsigned long bitmap_count_bits (const_bitmap);
+/* Count the number of unique bits set across the two bitmaps. */
+extern unsigned long bitmap_count_unique_bits (const_bitmap, const_bitmap);
+
/* Boolean operations on bitmaps. The _into variants are two operand
versions that modify the first source operand. The other variants
are three operand versions that to not destroy the source bitmaps.
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 058ecc3..3d89baf 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -463,7 +463,7 @@ get_pointer_alignment_1 (tree exp, unsigned int *alignp,
if (*alignp == 0)
*alignp = 1u << (HOST_BITS_PER_INT - 1);
/* We cannot really tell whether this result is an approximation. */
- return true;
+ return false;
}
else
{
@@ -7529,6 +7529,8 @@ fold_builtin_interclass_mathfn (location_t loc, tree fndecl, tree arg)
mode = TYPE_MODE (TREE_TYPE (arg));
+ bool is_ibm_extended = MODE_COMPOSITE_P (mode);
+
/* If there is no optab, try generic code. */
switch (DECL_FUNCTION_CODE (fndecl))
{
@@ -7538,10 +7540,18 @@ fold_builtin_interclass_mathfn (location_t loc, tree fndecl, tree arg)
{
/* isinf(x) -> isgreater(fabs(x),DBL_MAX). */
tree const isgr_fn = builtin_decl_explicit (BUILT_IN_ISGREATER);
- tree const type = TREE_TYPE (arg);
+ tree type = TREE_TYPE (arg);
REAL_VALUE_TYPE r;
char buf[128];
+ if (is_ibm_extended)
+ {
+ /* NaN and Inf are encoded in the high-order double value
+ only. The low-order value is not significant. */
+ type = double_type_node;
+ mode = DFmode;
+ arg = fold_build1_loc (loc, NOP_EXPR, type, arg);
+ }
get_max_float (REAL_MODE_FORMAT (mode), buf, sizeof (buf));
real_from_string (&r, buf);
result = build_call_expr (isgr_fn, 2,
@@ -7554,10 +7564,18 @@ fold_builtin_interclass_mathfn (location_t loc, tree fndecl, tree arg)
{
/* isfinite(x) -> islessequal(fabs(x),DBL_MAX). */
tree const isle_fn = builtin_decl_explicit (BUILT_IN_ISLESSEQUAL);
- tree const type = TREE_TYPE (arg);
+ tree type = TREE_TYPE (arg);
REAL_VALUE_TYPE r;
char buf[128];
+ if (is_ibm_extended)
+ {
+ /* NaN and Inf are encoded in the high-order double value
+ only. The low-order value is not significant. */
+ type = double_type_node;
+ mode = DFmode;
+ arg = fold_build1_loc (loc, NOP_EXPR, type, arg);
+ }
get_max_float (REAL_MODE_FORMAT (mode), buf, sizeof (buf));
real_from_string (&r, buf);
result = build_call_expr (isle_fn, 2,
@@ -7577,21 +7595,72 @@ fold_builtin_interclass_mathfn (location_t loc, tree fndecl, tree arg)
/* isnormal(x) -> isgreaterequal(fabs(x),DBL_MIN) &
islessequal(fabs(x),DBL_MAX). */
tree const isle_fn = builtin_decl_explicit (BUILT_IN_ISLESSEQUAL);
- tree const isge_fn = builtin_decl_explicit (BUILT_IN_ISGREATEREQUAL);
- tree const type = TREE_TYPE (arg);
+ tree type = TREE_TYPE (arg);
+ tree orig_arg, max_exp, min_exp;
+ machine_mode orig_mode = mode;
REAL_VALUE_TYPE rmax, rmin;
char buf[128];
+ orig_arg = arg = builtin_save_expr (arg);
+ if (is_ibm_extended)
+ {
+ /* Use double to test the normal range of IBM extended
+ precision. Emin for IBM extended precision is
+ different to emin for IEEE double, being 53 higher
+ since the low double exponent is at least 53 lower
+ than the high double exponent. */
+ type = double_type_node;
+ mode = DFmode;
+ arg = fold_build1_loc (loc, NOP_EXPR, type, arg);
+ }
+ arg = fold_build1_loc (loc, ABS_EXPR, type, arg);
+
get_max_float (REAL_MODE_FORMAT (mode), buf, sizeof (buf));
real_from_string (&rmax, buf);
- sprintf (buf, "0x1p%d", REAL_MODE_FORMAT (mode)->emin - 1);
+ sprintf (buf, "0x1p%d", REAL_MODE_FORMAT (orig_mode)->emin - 1);
real_from_string (&rmin, buf);
- arg = builtin_save_expr (fold_build1_loc (loc, ABS_EXPR, type, arg));
- result = build_call_expr (isle_fn, 2, arg,
- build_real (type, rmax));
- result = fold_build2 (BIT_AND_EXPR, integer_type_node, result,
- build_call_expr (isge_fn, 2, arg,
- build_real (type, rmin)));
+ max_exp = build_real (type, rmax);
+ min_exp = build_real (type, rmin);
+
+ max_exp = build_call_expr (isle_fn, 2, arg, max_exp);
+ if (is_ibm_extended)
+ {
+ /* Testing the high end of the range is done just using
+ the high double, using the same test as isfinite().
+ For the subnormal end of the range we first test the
+ high double, then if its magnitude is equal to the
+ limit of 0x1p-969, we test whether the low double is
+ non-zero and opposite sign to the high double. */
+ tree const islt_fn = builtin_decl_explicit (BUILT_IN_ISLESS);
+ tree const isgt_fn = builtin_decl_explicit (BUILT_IN_ISGREATER);
+ tree gt_min = build_call_expr (isgt_fn, 2, arg, min_exp);
+ tree eq_min = fold_build2 (EQ_EXPR, integer_type_node,
+ arg, min_exp);
+ tree as_complex = build1 (VIEW_CONVERT_EXPR,
+ complex_double_type_node, orig_arg);
+ tree hi_dbl = build1 (REALPART_EXPR, type, as_complex);
+ tree lo_dbl = build1 (IMAGPART_EXPR, type, as_complex);
+ tree zero = build_real (type, dconst0);
+ tree hilt = build_call_expr (islt_fn, 2, hi_dbl, zero);
+ tree lolt = build_call_expr (islt_fn, 2, lo_dbl, zero);
+ tree logt = build_call_expr (isgt_fn, 2, lo_dbl, zero);
+ tree ok_lo = fold_build1 (TRUTH_NOT_EXPR, integer_type_node,
+ fold_build3 (COND_EXPR,
+ integer_type_node,
+ hilt, logt, lolt));
+ eq_min = fold_build2 (TRUTH_ANDIF_EXPR, integer_type_node,
+ eq_min, ok_lo);
+ min_exp = fold_build2 (TRUTH_ORIF_EXPR, integer_type_node,
+ gt_min, eq_min);
+ }
+ else
+ {
+ tree const isge_fn
+ = builtin_decl_explicit (BUILT_IN_ISGREATEREQUAL);
+ min_exp = build_call_expr (isge_fn, 2, arg, min_exp);
+ }
+ result = fold_build2 (BIT_AND_EXPR, integer_type_node,
+ max_exp, min_exp);
return result;
}
default:
@@ -7664,6 +7733,15 @@ fold_builtin_classify (location_t loc, tree fndecl, tree arg, int builtin_index)
if (!HONOR_NANS (arg))
return omit_one_operand_loc (loc, type, integer_zero_node, arg);
+ {
+ bool is_ibm_extended = MODE_COMPOSITE_P (TYPE_MODE (TREE_TYPE (arg)));
+ if (is_ibm_extended)
+ {
+ /* NaN and Inf are encoded in the high-order double value
+ only. The low-order value is not significant. */
+ arg = fold_build1_loc (loc, NOP_EXPR, double_type_node, arg);
+ }
+ }
arg = builtin_save_expr (arg);
return fold_build2_loc (loc, UNORDERED_EXPR, type, arg, arg);
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index aca8cc2..26b1dab 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,105 @@
+2016-03-28 Jason Merrill <jason@redhat.com>
+
+ * c-cppbuiltin.c (c_cpp_builtins): Update __cpp_range_based_for.
+
+2016-03-23 Marek Polacek <polacek@redhat.com>
+
+ PR c++/69884
+ * c.opt (Wignored-attributes): New option.
+
+2016-03-22 David Malcolm <dmalcolm@redhat.com>
+
+ PR c/69993
+ * c-indentation.c (warn_for_misleading_indentation): Rewrite the
+ diagnostic text, reversing the order of the warning and note so
+ that they appear in source order.
+
+2016-03-17 Marek Polacek <polacek@redhat.com>
+
+ PR c/69407
+ * c-common.c (resolve_overloaded_builtin): Set TREE_USED for the fetch
+ operations.
+
+2016-03-14 Jason Merrill <jason@redhat.com>
+
+ * c-cppbuiltin.c (c_cpp_builtins): Set __cpp_hex_float.
+
+ * c-cppbuiltin.c (c_cpp_builtins): Bump __cpp_range_based_for.
+
+2016-03-09 Richard Biener <rguenther@suse.de>
+
+ PR c/70143
+ * c-common.c (strict_aliasing_warning): Add back
+ alias_sets_conflict_p check.
+
+2016-03-08 Jason Merrill <jason@redhat.com>
+
+ * c-opts.c (set_std_cxx1z): Don't enable concepts.
+
+2016-03-04 David Malcolm <dmalcolm@redhat.com>
+
+ PR c/68187
+ * c-indentation.c (get_visual_column): Move code to determine next
+ tab stop to...
+ (next_tab_stop): ...this new function.
+ (line_contains_hash_if): Delete function.
+ (detect_preprocessor_logic): Delete function.
+ (get_first_nws_vis_column): New function.
+ (detect_intervening_unindent): New function.
+ (should_warn_for_misleading_indentation): Replace call to
+ detect_preprocessor_logic with a call to
+ detect_intervening_unindent.
+
+2016-03-04 David Malcolm <dmalcolm@redhat.com>
+
+ PR c/68187
+ * c-indentation.c (should_warn_for_misleading_indentation): When
+ suppressing warnings about cases where the guard and body are on
+ the same column, only use the first non-whitespace column in place
+ of the guard token column when dealing with "else" clauses.
+ When rejecting aligned BODY and NEXT, loosen the requirement
+ from equality with the first non-whitespace of guard to simply
+ that they not be indented relative to it.
+
+2016-03-04 Richard Biener <rguenther@suse.de>
+
+ PR c++/70054
+ * c-common.c (strict_aliasing_warning): Use alias_set_subset_of
+ instead of alias_sets_conflict_p.
+
+2016-03-01 Marek Polacek <polacek@redhat.com>
+
+ PR c++/69795
+ * c-common.c (reject_gcc_builtin): Check for FUNCTION_DECL rather than
+ any DECL.
+
+2016-02-22 Martin Sebor <msebor@redhat.com>
+
+ PR middle-end/69780
+ * c-common.c (check_builtin_function_arguments): Validate and
+ reject invalid arguments to __builtin_alloca_with_align.
+
+2016-02-20 Mark Wielaard <mjw@redhat.com>
+
+ PR c/28901
+ * c.opt (Wunused-const-variable): Turn into Alias for...
+ (Wunused-const-variable=): New option.
+
+2016-02-19 Bernd Edlinger <bernd.edlinger@hotmail.de>
+
+ PR c++/69865
+ * c-opts.c (c_common_post_options): Move call to set_std_cxx14 from
+ here...
+ (c_common_init_options): ...to here.
+ (set_std_cxx98): Initialize flag_isoc94 and flag_isoc99.
+
+2016-02-19 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/69826
+ * c-pragma.c (c_pp_lookup_pragma): Handle PRAGMA_CILK_GRAINSIZE.
+ (init_pragma): Register PRAGMA_CILK_GRAINSIZE even for
+ flag_preprocess_only.
+
2016-02-16 Jakub Jelinek <jakub@redhat.com>
PR c/69835
diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c
index 8b29d82..30c815d 100644
--- a/gcc/c-family/c-common.c
+++ b/gcc/c-family/c-common.c
@@ -1568,7 +1568,9 @@ strict_aliasing_warning (tree otype, tree type, tree expr)
alias_set_type set2 = get_alias_set (TREE_TYPE (type));
if (set1 != set2 && set2 != 0
- && (set1 == 0 || !alias_sets_conflict_p (set1, set2)))
+ && (set1 == 0
+ || (!alias_set_subset_of (set2, set1)
+ && !alias_sets_conflict_p (set1, set2))))
{
warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
"pointer will break strict-aliasing rules");
@@ -9818,6 +9820,33 @@ check_builtin_function_arguments (tree fndecl, int nargs, tree *args)
switch (DECL_FUNCTION_CODE (fndecl))
{
+ case BUILT_IN_ALLOCA_WITH_ALIGN:
+ {
+ /* Get the requested alignment (in bits) if it's a constant
+ integer expression. */
+ unsigned HOST_WIDE_INT align
+ = tree_fits_uhwi_p (args[1]) ? tree_to_uhwi (args[1]) : 0;
+
+ /* Determine if the requested alignment is a power of 2. */
+ if ((align & (align - 1)))
+ align = 0;
+
+ /* The maximum alignment in bits corresponding to the same
+ maximum in bytes enforced in check_user_alignment(). */
+ unsigned maxalign = (UINT_MAX >> 1) + 1;
+
+ /* Reject invalid alignments. */
+ if (align < BITS_PER_UNIT || maxalign < align)
+ {
+ error_at (EXPR_LOC_OR_LOC (args[1], input_location),
+ "second argument to function %qE must be a constant "
+ "integer power of 2 between %qi and %qu bits",
+ fndecl, BITS_PER_UNIT, maxalign);
+ return false;
+ }
+ return true;
+ }
+
case BUILT_IN_CONSTANT_P:
return builtin_function_validate_nargs (fndecl, nargs, 1);
@@ -11416,6 +11445,10 @@ resolve_overloaded_builtin (location_t loc, tree function,
&& orig_code != BUILT_IN_ATOMIC_STORE_N)
result = sync_resolve_return (first_param, result, orig_format);
+ if (fetch_op)
+ /* Prevent -Wunused-value warning. */
+ TREE_USED (result) = true;
+
/* If new_return is set, assign function to that expr and cast the
result to void since the generic interface returned void. */
if (new_return)
@@ -12611,7 +12644,7 @@ reject_gcc_builtin (const_tree expr, location_t loc /* = UNKNOWN_LOCATION */)
if (TREE_TYPE (expr)
&& TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE
- && DECL_P (expr)
+ && TREE_CODE (expr) == FUNCTION_DECL
/* The intersection of DECL_BUILT_IN and DECL_IS_BUILTIN avoids
false positives for user-declared built-ins such as abs or
strlen, and for C++ operators new and delete.
diff --git a/gcc/c-family/c-cppbuiltin.c b/gcc/c-family/c-cppbuiltin.c
index 19999c7..94523b8 100644
--- a/gcc/c-family/c-cppbuiltin.c
+++ b/gcc/c-family/c-cppbuiltin.c
@@ -818,6 +818,10 @@ c_cpp_builtins (cpp_reader *pfile)
if (!pedantic || cxx_dialect > cxx11)
cpp_define (pfile, "__cpp_binary_literals=201304");
+ /* Similarly for hexadecimal floating point literals and C++17. */
+ if (!pedantic || cpp_get_options (parse_in)->extended_numbers)
+ cpp_define (pfile, "__cpp_hex_float=201603");
+
/* Arrays of runtime bound were removed from C++14, but we still
support GNU VLAs. Let's define this macro to a low number
(corresponding to the initial test release of GNU C++) if we won't
@@ -837,7 +841,7 @@ c_cpp_builtins (cpp_reader *pfile)
cpp_define (pfile, "__cpp_lambdas=200907");
if (cxx_dialect == cxx11)
cpp_define (pfile, "__cpp_constexpr=200704");
- cpp_define (pfile, "__cpp_range_based_for=200907");
+ cpp_define (pfile, "__cpp_range_based_for=201603");
if (cxx_dialect <= cxx14)
cpp_define (pfile, "__cpp_static_assert=200410");
cpp_define (pfile, "__cpp_decltype=200707");
@@ -871,7 +875,7 @@ c_cpp_builtins (cpp_reader *pfile)
cpp_define (pfile, "__cpp_namespace_attributes=201411");
cpp_define (pfile, "__cpp_enumerator_attributes=201411");
cpp_define (pfile, "__cpp_nested_namespace_definitions=201411");
- cpp_define (pfile, "__cpp_fold_expressions=201411");
+ cpp_define (pfile, "__cpp_fold_expressions=201603");
cpp_define (pfile, "__cpp_nontype_template_args=201411");
}
if (flag_concepts)
diff --git a/gcc/c-family/c-indentation.c b/gcc/c-family/c-indentation.c
index 521f992..1da3f68 100644
--- a/gcc/c-family/c-indentation.c
+++ b/gcc/c-family/c-indentation.c
@@ -26,6 +26,16 @@ along with GCC; see the file COPYING3. If not see
extern cpp_options *cpp_opts;
+/* Round up VIS_COLUMN to nearest tab stop. */
+
+static unsigned int
+next_tab_stop (unsigned int vis_column)
+{
+ const unsigned int tab_width = cpp_opts->tabstop;
+ vis_column = ((vis_column + tab_width) / tab_width) * tab_width;
+ return vis_column;
+}
+
/* Convert libcpp's notion of a column (a 1-based char count) to
the "visual column" (0-based column, respecting tabs), by reading the
relevant line.
@@ -77,11 +87,7 @@ get_visual_column (expanded_location exploc, location_t loc,
}
if (ch == '\t')
- {
- /* Round up to nearest tab stop. */
- const unsigned int tab_width = cpp_opts->tabstop;
- vis_column = ((vis_column + tab_width) / tab_width) * tab_width;
- }
+ vis_column = next_tab_stop (vis_column);
else
vis_column++;
}
@@ -93,54 +99,49 @@ get_visual_column (expanded_location exploc, location_t loc,
return true;
}
-/* Does the given source line appear to contain a #if directive?
- (or #ifdef/#ifndef). Ignore the possibility of it being inside a
- comment, for simplicity.
- Helper function for detect_preprocessor_logic. */
+/* Attempt to determine the first non-whitespace character in line LINE_NUM
+ of source line FILE.
+
+ If this is possible, return true and write its "visual column" to
+ *FIRST_NWS.
+ Otherwise, return false, leaving *FIRST_NWS untouched. */
static bool
-line_contains_hash_if (const char *file, int line_num)
+get_first_nws_vis_column (const char *file, int line_num,
+ unsigned int *first_nws)
{
+ gcc_assert (first_nws);
+
int line_len;
const char *line = location_get_source_line (file, line_num, &line_len);
if (!line)
return false;
+ unsigned int vis_column = 0;
+ for (int i = 1; i < line_len; i++)
+ {
+ unsigned char ch = line[i - 1];
- int idx;
-
- /* Skip leading whitespace. */
- for (idx = 0; idx < line_len; idx++)
- if (!ISSPACE (line[idx]))
- break;
- if (idx == line_len)
- return false;
-
- /* Require a '#' character. */
- if (line[idx] != '#')
- return false;
- idx++;
+ if (!ISSPACE (ch))
+ {
+ *first_nws = vis_column;
+ return true;
+ }
- /* Skip whitespace. */
- while (idx < line_len)
- {
- if (!ISSPACE (line[idx]))
- break;
- idx++;
+ if (ch == '\t')
+ vis_column = next_tab_stop (vis_column);
+ else
+ vis_column++;
}
- /* Match #if/#ifdef/#ifndef. */
- if (idx + 2 <= line_len)
- if (line[idx] == 'i')
- if (line[idx + 1] == 'f')
- return true;
-
+ /* No non-whitespace characters found. */
return false;
}
-
-/* Determine if there is preprocessor logic between
+/* Determine if there is an unindent/outdent between
BODY_EXPLOC and NEXT_STMT_EXPLOC, to ensure that we don't
- issue a warning for cases like this:
+ issue a warning for cases like the following:
+
+ (1) Preprocessor logic
if (flagA)
foo ();
@@ -151,31 +152,47 @@ line_contains_hash_if (const char *file, int line_num)
bar ();
^ NEXT_STMT_EXPLOC
- despite "bar ();" being visually aligned below "foo ();" and
- being (as far as the parser sees) the next token.
+ "bar ();" is visually aligned below "foo ();" and
+ is (as far as the parser sees) the next token, but
+ this isn't misleading to a human reader.
- Return true if such logic is detected. */
+ (2) Empty macro with bad indentation
-static bool
-detect_preprocessor_logic (expanded_location body_exploc,
- expanded_location next_stmt_exploc)
-{
- gcc_assert (next_stmt_exploc.file == body_exploc.file);
- gcc_assert (next_stmt_exploc.line > body_exploc.line);
+ In the following, the
+ "if (i > 0)"
+ is poorly indented, and ought to be on the same column as
+ "engine_ref_debug(e, 0, -1)"
+ However, it is not misleadingly indented, due to the presence
+ of that macro.
- if (next_stmt_exploc.line - body_exploc.line < 4)
- return false;
+ #define engine_ref_debug(X, Y, Z)
+
+ if (locked)
+ i = foo (0);
+ else
+ i = foo (1);
+ engine_ref_debug(e, 0, -1)
+ if (i > 0)
+ return 1;
- /* Is there a #if/#ifdef/#ifndef directive somewhere in the lines
- between the given locations?
+ Return true if such an unindent/outdent is detected. */
- This is something of a layering violation, but by necessity,
- given the nature of what we're testing for. For example,
- in theory we could be fooled by a #if within a comment, but
- it's unlikely to matter. */
- for (int line = body_exploc.line + 1; line < next_stmt_exploc.line; line++)
- if (line_contains_hash_if (body_exploc.file, line))
- return true;
+static bool
+detect_intervening_unindent (const char *file,
+ int body_line,
+ int next_stmt_line,
+ unsigned int vis_column)
+{
+ gcc_assert (file);
+ gcc_assert (next_stmt_line > body_line);
+
+ for (int line = body_line + 1; line < next_stmt_line; line++)
+ {
+ unsigned int line_vis_column;
+ if (get_first_nws_vis_column (file, line, &line_vis_column))
+ if (line_vis_column < vis_column)
+ return true;
+ }
/* Not found. */
return false;
@@ -419,7 +436,8 @@ should_warn_for_misleading_indentation (const token_indent_info &guard_tinfo,
{
/* Don't warn if they are aligned on the same column
as the guard itself (suggesting autogenerated code that doesn't
- bother indenting at all). We consider the column of the first
+ bother indenting at all).
+ For "else" clauses, we consider the column of the first
non-whitespace character on the guard line instead of the column
of the actual guard token itself because it is more sensible.
Consider:
@@ -438,14 +456,17 @@ should_warn_for_misleading_indentation (const token_indent_info &guard_tinfo,
foo (2); // BODY
foo (3); // NEXT
- If we just used the column of the guard token, we would warn on
+ If we just used the column of the "else" token, we would warn on
the first example and not warn on the second. But we want the
exact opposite to happen: to not warn on the first example (which
is probably autogenerated) and to warn on the second (whose
indentation is misleading). Using the column of the first
non-whitespace character on the guard line makes that
happen. */
- if (guard_line_first_nws == body_vis_column)
+ unsigned int guard_column = (guard_tinfo.keyword == RID_ELSE
+ ? guard_line_first_nws
+ : guard_vis_column);
+ if (guard_column == body_vis_column)
return false;
/* We may have something like:
@@ -458,14 +479,16 @@ should_warn_for_misleading_indentation (const token_indent_info &guard_tinfo,
foo (3); // NEXT
in which case the columns are not aligned but the code is not
- misleadingly indented. If the column of the body is less than
- that of the guard line then don't warn. */
- if (body_vis_column < guard_line_first_nws)
+ misleadingly indented. If the column of the body isn't indented
+ more than the guard line then don't warn. */
+ if (body_vis_column <= guard_line_first_nws)
return false;
- /* Don't warn if there is multiline preprocessor logic between
- the two statements. */
- if (detect_preprocessor_logic (body_exploc, next_stmt_exploc))
+ /* Don't warn if there is an unindent between the two statements. */
+ int vis_column = MIN (next_stmt_vis_column, body_vis_column);
+ if (detect_intervening_unindent (body_exploc.file, body_exploc.line,
+ next_stmt_exploc.line,
+ vis_column))
return false;
/* Otherwise, they are visually aligned: issue a warning. */
@@ -579,10 +602,12 @@ warn_for_misleading_indentation (const token_indent_info &guard_tinfo,
body_tinfo,
next_tinfo))
{
- if (warning_at (next_tinfo.location, OPT_Wmisleading_indentation,
- "statement is indented as if it were guarded by..."))
- inform (guard_tinfo.location,
- "...this %qs clause, but it is not",
+ if (warning_at (guard_tinfo.location, OPT_Wmisleading_indentation,
+ "this %qs clause does not guard...",
+ guard_tinfo_to_string (guard_tinfo)))
+ inform (next_tinfo.location,
+ ("...this statement, but the latter is misleadingly indented"
+ " as if it is guarded by the %qs"),
guard_tinfo_to_string (guard_tinfo));
}
}
diff --git a/gcc/c-family/c-opts.c b/gcc/c-family/c-opts.c
index 8cc28af..fec58bc 100644
--- a/gcc/c-family/c-opts.c
+++ b/gcc/c-family/c-opts.c
@@ -246,6 +246,10 @@ c_common_init_options (unsigned int decoded_options_count,
}
}
+ /* Set C++ standard to C++14 if not specified on the command line. */
+ if (c_dialect_cxx ())
+ set_std_cxx14 (/*ISO*/false);
+
global_dc->colorize_source_p = true;
}
@@ -802,10 +806,6 @@ c_common_post_options (const char **pfilename)
&& flag_no_builtin)
flag_tree_loop_distribute_patterns = 0;
- /* Set C++ standard to C++14 if not specified on the command line. */
- if (c_dialect_cxx () && cxx_dialect == cxx_unset)
- set_std_cxx14 (/*ISO*/false);
-
/* -Woverlength-strings is off by default, but is enabled by -Wpedantic.
It is never enabled in C++, as the minimum limit is not normative
in that standard. */
@@ -1519,6 +1519,8 @@ set_std_cxx98 (int iso)
flag_no_gnu_keywords = iso;
flag_no_nonansi_builtin = iso;
flag_iso = iso;
+ flag_isoc94 = 0;
+ flag_isoc99 = 0;
cxx_dialect = cxx98;
lang_hooks.name = "GNU C++98";
}
@@ -1564,8 +1566,6 @@ set_std_cxx1z (int iso)
/* C++11 includes the C99 standard library. */
flag_isoc94 = 1;
flag_isoc99 = 1;
- /* Enable concepts by default. */
- flag_concepts = 1;
flag_isoc11 = 1;
cxx_dialect = cxx1z;
lang_hooks.name = "GNU C++14"; /* Pretend C++14 till standarization. */
diff --git a/gcc/c-family/c-pragma.c b/gcc/c-family/c-pragma.c
index 38aabc0..c73aa82 100644
--- a/gcc/c-family/c-pragma.c
+++ b/gcc/c-family/c-pragma.c
@@ -1336,6 +1336,13 @@ c_pp_lookup_pragma (unsigned int id, const char **space, const char **name)
return;
}
+ if (id == PRAGMA_CILK_GRAINSIZE)
+ {
+ *space = "cilk";
+ *name = "grainsize";
+ return;
+ }
+
if (id >= PRAGMA_FIRST_EXTERNAL
&& (id < PRAGMA_FIRST_EXTERNAL + registered_pp_pragmas.length ()))
{
@@ -1523,7 +1530,7 @@ init_pragma (void)
cpp_register_deferred_pragma (parse_in, "GCC", "ivdep", PRAGMA_IVDEP, false,
false);
- if (flag_cilkplus && !flag_preprocess_only)
+ if (flag_cilkplus)
cpp_register_deferred_pragma (parse_in, "cilk", "grainsize",
PRAGMA_CILK_GRAINSIZE, true, false);
diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt
index 638e9c24..4f86876 100644
--- a/gcc/c-family/c.opt
+++ b/gcc/c-family/c.opt
@@ -482,6 +482,10 @@ Wignored-qualifiers
C C++ Var(warn_ignored_qualifiers) Warning EnabledBy(Wextra)
Warn whenever type qualifiers are ignored.
+Wignored-attributes
+C C++ Var(warn_ignored_attributes) Init(1) Warning
+Warn whenever attributes are ignored.
+
Wincompatible-pointer-types
C ObjC Var(warn_incompatible_pointer_types) Init(1) Warning
Warn when there is a conversion between pointers that have incompatible types.
@@ -949,7 +953,11 @@ C ObjC C++ ObjC++ LangEnabledBy(C ObjC C++ ObjC++,Wunused)
; documented in common.opt
Wunused-const-variable
-C ObjC C++ ObjC++ Var(warn_unused_const_variable) Warning LangEnabledBy(C ObjC,Wunused-variable)
+C ObjC C++ ObjC++ Warning Alias(Wunused-const-variable=, 2, 0)
+Warn when a const variable is unused.
+
+Wunused-const-variable=
+C ObjC C++ ObjC++ Joined RejectNegative UInteger Var(warn_unused_const_variable) Warning LangEnabledBy(C ObjC,Wunused-variable, 1, 0)
Warn when a const variable is unused.
Wvariadic-macros
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index ae00338..56e0b4d 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,69 @@
+2016-04-04 Marek Polacek <polacek@redhat.com>
+
+ PR c/70307
+ * c-fold.c (c_fully_fold_internal): Handle VEC_COND_EXPR.
+
+2016-03-31 Marek Polacek <polacek@redhat.com>
+
+ PR c/70297
+ * c-decl.c (merge_decls): Also set TYPE_ALIGN and TYPE_USER_ALIGN.
+
+2016-03-18 David Malcolm <dmalcolm@redhat.com>
+
+ PR c/70281
+ * c-parser.c (c_parser_postfix_expression): Set the source range
+ for uses of "__builtin_types_compatible_p".
+
+2016-03-17 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/70280
+ * c-typeck.c (composite_type): Don't count void_list_node
+ into len, if the list is terminated by void_list_node, start
+ with void_list_node instead of NULL for newargs. Stop
+ at void_list_node.
+
+2016-03-16 Marek Polacek <polacek@redhat.com>
+
+ PR c/70093
+ * c-typeck.c (build_function_call_vec): Create a TARGET_EXPR for
+ nested functions returning VM types.
+
+2016-03-09 Cesar Philippidis <cesar@codesourcery.com>
+
+ * c-parser.c (c_parser_oacc_loop): Update cclauses and clauses
+ when calling c_finish_omp_clauses.
+
+2016-03-04 Bernd Schmidt <bschmidt@redhat.com>
+
+ PR c/69824
+ * c-decl.c (get_parm_info): Don't queue implicit function declarations
+ for later.
+
+2016-03-04 Marek Polacek <polacek@redhat.com>
+
+ PR c/69798
+ * c-parser.c (c_parser_postfix_expression): Call
+ c_parser_cast_expression rather than c_parser_postfix_expression.
+
+2016-03-01 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/69796
+ PR c/69974
+ * c-parser.c (c_parser_translation_unit): Don't change TREE_TYPE
+ of incomplete decls to error_mark_node.
+
+2016-02-24 Marek Polacek <polacek@redhat.com>
+
+ PR c/69819
+ * c-decl.c (finish_decl): Don't update the copy of the type of a
+ different decl type.
+
+2016-02-23 Jakub Jelinek <jakub@redhat.com>
+
+ PR objc/69844
+ * c-parser.c (c_parser_for_statement): Properly handle ObjC classes
+ in id_kind reclassification.
+
2016-02-16 Jakub Jelinek <jakub@redhat.com>
PR c/69835
diff --git a/gcc/c/c-decl.c b/gcc/c/c-decl.c
index 8e332f8..0dd2121 100644
--- a/gcc/c/c-decl.c
+++ b/gcc/c/c-decl.c
@@ -2358,6 +2358,35 @@ merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
DECL_ATTRIBUTES (newdecl)
= targetm.merge_decl_attributes (olddecl, newdecl);
+ /* For typedefs use the old type, as the new type's DECL_NAME points
+ at newdecl, which will be ggc_freed. */
+ if (TREE_CODE (newdecl) == TYPE_DECL)
+ {
+ /* But NEWTYPE might have an attribute, honor that. */
+ tree tem = newtype;
+ newtype = oldtype;
+
+ if (TYPE_USER_ALIGN (tem))
+ {
+ if (TYPE_ALIGN (tem) > TYPE_ALIGN (newtype))
+ TYPE_ALIGN (newtype) = TYPE_ALIGN (tem);
+ TYPE_USER_ALIGN (newtype) = true;
+ }
+
+ /* And remove the new type from the variants list. */
+ if (TYPE_NAME (TREE_TYPE (newdecl)) == newdecl)
+ {
+ tree remove = TREE_TYPE (newdecl);
+ for (tree t = TYPE_MAIN_VARIANT (remove); ;
+ t = TYPE_NEXT_VARIANT (t))
+ if (TYPE_NEXT_VARIANT (t) == remove)
+ {
+ TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (remove);
+ break;
+ }
+ }
+ }
+
/* Merge the data types specified in the two decls. */
TREE_TYPE (newdecl)
= TREE_TYPE (olddecl)
@@ -4743,7 +4772,7 @@ finish_decl (tree decl, location_t init_loc, tree init,
struct c_binding *b_ext = I_SYMBOL_BINDING (DECL_NAME (decl));
while (b_ext && !B_IN_EXTERNAL_SCOPE (b_ext))
b_ext = b_ext->shadowed;
- if (b_ext)
+ if (b_ext && TREE_CODE (decl) == TREE_CODE (b_ext->decl))
{
if (b_ext->u.type && comptypes (b_ext->u.type, type))
b_ext->u.type = composite_type (b_ext->u.type, type);
@@ -7050,25 +7079,28 @@ get_parm_info (bool ellipsis, tree expr)
vec_safe_push (tags, tag);
break;
+ case FUNCTION_DECL:
+ /* FUNCTION_DECLs appear when there is an implicit function
+ declaration in the parameter list. */
+ gcc_assert (b->nested);
+ goto set_shadowed;
+
case CONST_DECL:
case TYPE_DECL:
- case FUNCTION_DECL:
/* CONST_DECLs appear here when we have an embedded enum,
and TYPE_DECLs appear here when we have an embedded struct
or union. No warnings for this - we already warned about the
- type itself. FUNCTION_DECLs appear when there is an implicit
- function declaration in the parameter list. */
+ type itself. */
/* When we reinsert this decl in the function body, we need
to reconstruct whether it was marked as nested. */
- gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
- ? b->nested
- : !b->nested);
+ gcc_assert (!b->nested);
DECL_CHAIN (decl) = others;
others = decl;
/* fall through */
case ERROR_MARK:
+ set_shadowed:
/* error_mark_node appears here when we have an undeclared
variable. Just throw it away. */
if (b->id)
diff --git a/gcc/c/c-fold.c b/gcc/c/c-fold.c
index f07917f..6c82f24 100644
--- a/gcc/c/c-fold.c
+++ b/gcc/c/c-fold.c
@@ -528,6 +528,26 @@ c_fully_fold_internal (tree expr, bool in_init, bool *maybe_const_operands,
*maybe_const_itself &= op2_const_self;
goto out;
+ case VEC_COND_EXPR:
+ orig_op0 = op0 = TREE_OPERAND (expr, 0);
+ orig_op1 = op1 = TREE_OPERAND (expr, 1);
+ orig_op2 = op2 = TREE_OPERAND (expr, 2);
+ op0 = c_fully_fold_internal (op0, in_init, maybe_const_operands,
+ maybe_const_itself, for_int_const);
+ STRIP_TYPE_NOPS (op0);
+ op1 = c_fully_fold_internal (op1, in_init, maybe_const_operands,
+ maybe_const_itself, for_int_const);
+ STRIP_TYPE_NOPS (op1);
+ op2 = c_fully_fold_internal (op2, in_init, maybe_const_operands,
+ maybe_const_itself, for_int_const);
+ STRIP_TYPE_NOPS (op2);
+
+ if (op0 != orig_op0 || op1 != orig_op1 || op2 != orig_op2)
+ ret = fold_build3_loc (loc, code, TREE_TYPE (expr), op0, op1, op2);
+ else
+ ret = fold (expr);
+ goto out;
+
case EXCESS_PRECISION_EXPR:
/* Each case where an operand with excess precision may be
encountered must remove the EXCESS_PRECISION_EXPR around
diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c
index 23853be..6460684 100644
--- a/gcc/c/c-parser.c
+++ b/gcc/c/c-parser.c
@@ -1436,10 +1436,7 @@ c_parser_translation_unit (c_parser *parser)
tree decl;
FOR_EACH_VEC_ELT (incomplete_record_decls, i, decl)
if (DECL_SIZE (decl) == NULL_TREE && TREE_TYPE (decl) != error_mark_node)
- {
- error ("storage size of %q+D isn%'t known", decl);
- TREE_TYPE (decl) = error_mark_node;
- }
+ error ("storage size of %q+D isn%'t known", decl);
}
/* Parse an external declaration (C90 6.7, C99 6.9).
@@ -5886,13 +5883,30 @@ c_parser_for_statement (c_parser *parser, bool ivdep)
if (c_parser_next_token_is (parser, CPP_NAME))
{
c_token *token = c_parser_peek_token (parser);
- tree decl = lookup_name (token->value);
- if (decl == NULL_TREE || VAR_P (decl))
- /* If DECL is null, we don't know what this token might be. Treat
- it as an ID for better diagnostics; we'll error later on. */
- token->id_kind = C_ID_ID;
- else if (TREE_CODE (decl) == TYPE_DECL)
- token->id_kind = C_ID_TYPENAME;
+
+ if (token->id_kind != C_ID_CLASSNAME)
+ {
+ tree decl = lookup_name (token->value);
+
+ token->id_kind = C_ID_ID;
+ if (decl)
+ {
+ if (TREE_CODE (decl) == TYPE_DECL)
+ token->id_kind = C_ID_TYPENAME;
+ }
+ else if (c_dialect_objc ())
+ {
+ tree objc_interface_decl = objc_is_class_name (token->value);
+ /* Objective-C class names are in the same namespace as
+ variables and typedefs, and hence are shadowed by local
+ declarations. */
+ if (objc_interface_decl)
+ {
+ token->value = objc_interface_decl;
+ token->id_kind = C_ID_CLASSNAME;
+ }
+ }
+ }
}
token_indent_info next_tinfo
@@ -7768,9 +7782,10 @@ c_parser_postfix_expression (c_parser *parser)
expr.value = error_mark_node;
break;
}
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
- "expected %<)%>");
{
+ location_t close_paren_loc = c_parser_peek_token (parser)->location;
+ c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
+ "expected %<)%>");
tree e1, e2;
e1 = groktypename (t1, NULL, NULL);
e2 = groktypename (t2, NULL, NULL);
@@ -7785,6 +7800,7 @@ c_parser_postfix_expression (c_parser *parser)
expr.value
= comptypes (e1, e2) ? integer_one_node : integer_zero_node;
+ set_c_expr_source_range (&expr, loc, close_paren_loc);
}
break;
case RID_BUILTIN_CALL_WITH_STATIC_CHAIN:
@@ -8010,8 +8026,8 @@ c_parser_postfix_expression (c_parser *parser)
{
error_at (loc, "-fcilkplus must be enabled to use "
"%<_Cilk_spawn%>");
- expr = c_parser_postfix_expression (parser);
- expr.value = error_mark_node;
+ expr = c_parser_cast_expression (parser, NULL);
+ expr.value = error_mark_node;
}
else if (c_parser_peek_token (parser)->keyword == RID_CILK_SPAWN)
{
@@ -8020,14 +8036,14 @@ c_parser_postfix_expression (c_parser *parser)
/* Now flush out all the _Cilk_spawns. */
while (c_parser_peek_token (parser)->keyword == RID_CILK_SPAWN)
c_parser_consume_token (parser);
- expr = c_parser_postfix_expression (parser);
+ expr = c_parser_cast_expression (parser, NULL);
}
else
{
- expr = c_parser_postfix_expression (parser);
+ expr = c_parser_cast_expression (parser, NULL);
expr.value = build_cilk_spawn (loc, expr.value);
}
- break;
+ break;
default:
c_parser_error (parser, "expected expression");
expr.value = error_mark_node;
@@ -10701,7 +10717,7 @@ c_parser_oacc_data_clause (c_parser *parser, pragma_omp_clause c_kind,
kind = GOMP_MAP_FORCE_ALLOC;
break;
case PRAGMA_OACC_CLAUSE_DELETE:
- kind = GOMP_MAP_FORCE_DEALLOC;
+ kind = GOMP_MAP_DELETE;
break;
case PRAGMA_OACC_CLAUSE_DEVICE:
kind = GOMP_MAP_FORCE_TO;
@@ -13775,9 +13791,9 @@ c_parser_oacc_loop (location_t loc, c_parser *parser, char *p_name,
{
clauses = c_oacc_split_loop_clauses (clauses, cclauses);
if (*cclauses)
- c_finish_omp_clauses (*cclauses, false);
+ *cclauses = c_finish_omp_clauses (*cclauses, false);
if (clauses)
- c_finish_omp_clauses (clauses, false);
+ clauses = c_finish_omp_clauses (clauses, false);
}
tree block = c_begin_compound_stmt (true);
diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c
index 6aa0f03..fb274d5 100644
--- a/gcc/c/c-typeck.c
+++ b/gcc/c/c-typeck.c
@@ -518,15 +518,17 @@ composite_type (tree t1, tree t2)
/* If both args specify argument types, we must merge the two
lists, argument by argument. */
- len = list_length (p1);
- newargs = 0;
+ for (len = 0, newargs = p1;
+ newargs && newargs != void_list_node;
+ len++, newargs = TREE_CHAIN (newargs))
+ ;
for (i = 0; i < len; i++)
newargs = tree_cons (NULL_TREE, NULL_TREE, newargs);
n = newargs;
- for (; p1;
+ for (; p1 && p1 != void_list_node;
p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n))
{
/* A null type means arg type is not specified.
@@ -3068,6 +3070,16 @@ build_function_call_vec (location_t loc, vec<location_t> arg_loc,
result = build_call_array_loc (loc, TREE_TYPE (fntype),
function, nargs, argarray);
+ /* In this improbable scenario, a nested function returns a VM type.
+ Create a TARGET_EXPR so that the call always has a LHS, much as
+ what the C++ FE does for functions returning non-PODs. */
+ if (variably_modified_type_p (TREE_TYPE (fntype), NULL_TREE))
+ {
+ tree tmp = create_tmp_var_raw (TREE_TYPE (fntype));
+ result = build4 (TARGET_EXPR, TREE_TYPE (fntype), tmp, result,
+ NULL_TREE, NULL_TREE);
+ }
+
if (VOID_TYPE_P (TREE_TYPE (result)))
{
if (TYPE_QUALS (TREE_TYPE (result)) != TYPE_UNQUALIFIED)
diff --git a/gcc/calls.c b/gcc/calls.c
index 8f573b8..6415e08 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -2083,9 +2083,9 @@ load_register_parameters (struct arg_data *args, int num_actuals,
/* Check for overlap with already clobbered argument area,
providing that this has non-zero size. */
if (is_sibcall
- && (size == 0
- || mem_overlaps_already_clobbered_arg_p
- (XEXP (args[i].value, 0), size)))
+ && size != 0
+ && (mem_overlaps_already_clobbered_arg_p
+ (XEXP (args[i].value, 0), size)))
*sibcall_failure = 1;
if (size % UNITS_PER_WORD == 0
@@ -3852,7 +3852,7 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
reg_parm_stack_space = REG_PARM_STACK_SPACE ((tree) 0);
#endif
- /* By default, library functions can not throw. */
+ /* By default, library functions cannot throw. */
flags = ECF_NOTHROW;
switch (fn_type)
@@ -3869,7 +3869,7 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
flags |= ECF_NORETURN;
break;
case LCT_THROW:
- flags = ECF_NORETURN;
+ flags &= ~ECF_NOTHROW;
break;
case LCT_RETURNS_TWICE:
flags = ECF_RETURNS_TWICE;
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index 4ac8421..1341c14 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -868,6 +868,18 @@ union_stack_vars (size_t a, size_t b)
}
}
+/* Return true if the current function should have its stack frame
+ protected by address sanitizer. */
+
+static inline bool
+asan_sanitize_stack_p (void)
+{
+ return ((flag_sanitize & SANITIZE_ADDRESS)
+ && ASAN_STACK
+ && !lookup_attribute ("no_sanitize_address",
+ DECL_ATTRIBUTES (current_function_decl)));
+}
+
/* A subroutine of expand_used_vars. Binpack the variables into
partitions constrained by the interference graph. The overall
algorithm used is as follows:
@@ -929,7 +941,7 @@ partition_stack_vars (void)
sizes, as the shorter vars wouldn't be adequately protected.
Don't do that for "large" (unsupported) alignment objects,
those aren't protected anyway. */
- if ((flag_sanitize & SANITIZE_ADDRESS) && ASAN_STACK && isize != jsize
+ if (asan_sanitize_stack_p () && isize != jsize
&& ialign * BITS_PER_UNIT <= MAX_SUPPORTED_STACK_ALIGNMENT)
break;
@@ -1120,7 +1132,7 @@ expand_stack_vars (bool (*pred) (size_t), struct stack_vars_data *data)
if (alignb * BITS_PER_UNIT <= MAX_SUPPORTED_STACK_ALIGNMENT)
{
base = virtual_stack_vars_rtx;
- if ((flag_sanitize & SANITIZE_ADDRESS) && ASAN_STACK && pred)
+ if (asan_sanitize_stack_p () && pred)
{
HOST_WIDE_INT prev_offset
= align_base (frame_offset,
@@ -1491,7 +1503,7 @@ defer_stack_allocation (tree var, bool toplevel)
/* If stack protection is enabled, *all* stack variables must be deferred,
so that we can re-order the strings to the top of the frame.
Similarly for Address Sanitizer. */
- if (flag_stack_protect || ((flag_sanitize & SANITIZE_ADDRESS) && ASAN_STACK))
+ if (flag_stack_protect || asan_sanitize_stack_p ())
return true;
unsigned int align = TREE_CODE (var) == SSA_NAME
@@ -2191,7 +2203,7 @@ expand_used_vars (void)
expand_stack_vars (stack_protect_decl_phase_2, &data);
}
- if ((flag_sanitize & SANITIZE_ADDRESS) && ASAN_STACK)
+ if (asan_sanitize_stack_p ())
/* Phase 3, any partitions that need asan protection
in addition to phase 1 and 2. */
expand_stack_vars (asan_decl_phase_3, &data);
diff --git a/gcc/cfghooks.c b/gcc/cfghooks.c
index bbb1017..06c05d1 100644
--- a/gcc/cfghooks.c
+++ b/gcc/cfghooks.c
@@ -408,7 +408,20 @@ void
remove_edge (edge e)
{
if (current_loops != NULL)
- rescan_loop_exit (e, false, true);
+ {
+ rescan_loop_exit (e, false, true);
+
+ /* Removal of an edge inside an irreducible region or which leads
+ to an irreducible region can turn the region into a natural loop.
+ In that case, ask for the loop structure fixups.
+
+ FIXME: Note that LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS is not always
+ set, so always ask for fixups when removing an edge in that case. */
+ if (!loops_state_satisfies_p (LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS)
+ || (e->flags & EDGE_IRREDUCIBLE_LOOP)
+ || (e->dest->flags & BB_IRREDUCIBLE_LOOP))
+ loops_state_set (LOOPS_NEED_FIXUP);
+ }
/* This is probably not needed, but it doesn't hurt. */
/* FIXME: This should be called via a remove_edge hook. */
diff --git a/gcc/cfgloop.h b/gcc/cfgloop.h
index 882861c..54e738f 100644
--- a/gcc/cfgloop.h
+++ b/gcc/cfgloop.h
@@ -314,16 +314,6 @@ extern void delete_loop (struct loop *);
extern void verify_loop_structure (void);
-/* Check loop structure invariants, if internal consistency checks are
- enabled. */
-
-static inline void
-checking_verify_loop_structure (void)
-{
- if (flag_checking)
- verify_loop_structure ();
-}
-
/* Loop analysis. */
extern bool just_once_each_iteration_p (const struct loop *, const_basic_block);
gcov_type expected_loop_iterations_unbounded (const struct loop *);
@@ -546,6 +536,28 @@ loops_state_clear (unsigned flags)
loops_state_clear (cfun, flags);
}
+/* Check loop structure invariants, if internal consistency checks are
+ enabled. */
+
+static inline void
+checking_verify_loop_structure (void)
+{
+ /* VERIFY_LOOP_STRUCTURE essentially asserts that no loops need fixups.
+
+ The loop optimizers should never make changes to the CFG which
+ require loop fixups. But the low level CFG manipulation code may
+ set the flag conservatively.
+
+ Go ahead and clear the flag here. That avoids the assert inside
+ VERIFY_LOOP_STRUCTURE, and if there is an inconsistency in the loop
+ structures VERIFY_LOOP_STRUCTURE will detect it.
+
+ This also avoid the compile time cost of excessive fixups. */
+ loops_state_clear (LOOPS_NEED_FIXUP);
+ if (flag_checking)
+ verify_loop_structure ();
+}
+
/* Loop iterators. */
/* Flags for loop iteration. */
diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index 7727313..4804081 100644
--- a/gcc/cgraph.c
+++ b/gcc/cgraph.c
@@ -2061,6 +2061,10 @@ cgraph_node::dump (FILE *f)
fprintf (f, " icf_merged");
if (merged_comdat)
fprintf (f, " merged_comdat");
+ if (split_part)
+ fprintf (f, " split_part");
+ if (indirect_call_target)
+ fprintf (f, " indirect_call_target");
if (nonfreeing_fn)
fprintf (f, " nonfreeing_fn");
if (DECL_STATIC_CONSTRUCTOR (decl))
@@ -3356,7 +3360,7 @@ cgraph_node::get_body (void)
updated = get_untransformed_body ();
/* Getting transformed body makes no sense for inline clones;
- we should never use this on real clones becuase they are materialized
+ we should never use this on real clones because they are materialized
early.
TODO: Materializing clones here will likely lead to smaller LTRANS
footprint. */
@@ -3365,7 +3369,10 @@ cgraph_node::get_body (void)
{
opt_pass *saved_current_pass = current_pass;
FILE *saved_dump_file = dump_file;
+ const char *saved_dump_file_name = dump_file_name;
int saved_dump_flags = dump_flags;
+ dump_file_name = NULL;
+ dump_file = NULL;
push_cfun (DECL_STRUCT_FUNCTION (decl));
execute_all_ipa_transforms ();
@@ -3377,6 +3384,7 @@ cgraph_node::get_body (void)
current_pass = saved_current_pass;
dump_file = saved_dump_file;
+ dump_file_name = saved_dump_file_name;
dump_flags = saved_dump_flags;
}
return updated;
diff --git a/gcc/cgraph.h b/gcc/cgraph.h
index fc7bb22..0d5806b 100644
--- a/gcc/cgraph.h
+++ b/gcc/cgraph.h
@@ -293,6 +293,9 @@ public:
/* Make DECL local. */
void make_decl_local (void);
+ /* Copy visibility from N. */
+ void copy_visibility_from (symtab_node *n);
+
/* Return desired alignment of the definition. This is NOT alignment useful
to access THIS, because THIS may be interposable and DECL_ALIGN should
be used instead. It however must be guaranteed when output definition
@@ -763,6 +766,11 @@ struct GTY(()) cgraph_simd_clone {
/* Max hardware vector size in bits for floating point vectors. */
unsigned int vecsize_float;
+ /* Machine mode of the mask argument(s), if they are to be passed
+ as bitmasks in integer argument(s). VOIDmode if masks are passed
+ as vectors of characteristic type. */
+ machine_mode mask_mode;
+
/* The mangling character for a given vector size. This is used
to determine the ISA mangling bit as specified in the Intel
Vector ABI. */
@@ -1366,6 +1374,8 @@ public:
unsigned parallelized_function : 1;
/* True if function is part split out by ipa-split. */
unsigned split_part : 1;
+ /* True if the function appears as possible target of indirect call. */
+ unsigned indirect_call_target : 1;
private:
/* Worker for call_for_symbol_and_aliases. */
@@ -2171,6 +2181,9 @@ public:
FILE* GTY ((skip)) dump_file;
+ /* Return symbol used to separate symbol name from suffix. */
+ static char symbol_suffix_separator ();
+
private:
/* Allocate new callgraph node. */
inline cgraph_node * allocate_cgraph_symbol (void);
diff --git a/gcc/cgraphclones.c b/gcc/cgraphclones.c
index 354655e..07ceb1a 100644
--- a/gcc/cgraphclones.c
+++ b/gcc/cgraphclones.c
@@ -512,13 +512,7 @@ clone_function_name_1 (const char *name, const char *suffix)
prefix = XALLOCAVEC (char, len + strlen (suffix) + 2);
memcpy (prefix, name, len);
strcpy (prefix + len + 1, suffix);
-#ifndef NO_DOT_IN_LABEL
- prefix[len] = '.';
-#elif !defined NO_DOLLAR_IN_LABEL
- prefix[len] = '$';
-#else
- prefix[len] = '_';
-#endif
+ prefix[len] = symbol_table::symbol_suffix_separator ();
ASM_FORMAT_PRIVATE_NAME (tmp_name, prefix, clone_fn_id_num++);
return get_identifier (tmp_name);
}
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
index 0a745f0..4351ae4 100644
--- a/gcc/cgraphunit.c
+++ b/gcc/cgraphunit.c
@@ -917,6 +917,7 @@ walk_polymorphic_call_targets (hash_set<void *> *reachable_call_targets,
static void
check_global_declaration (symtab_node *snode)
{
+ const char *decl_file;
tree decl = snode->decl;
/* Warn about any function declared static but not defined. We don't
@@ -942,7 +943,12 @@ check_global_declaration (symtab_node *snode)
/* Warn about static fns or vars defined but not used. */
if (((warn_unused_function && TREE_CODE (decl) == FUNCTION_DECL)
|| (((warn_unused_variable && ! TREE_READONLY (decl))
- || (warn_unused_const_variable && TREE_READONLY (decl)))
+ || (warn_unused_const_variable > 0 && TREE_READONLY (decl)
+ && (warn_unused_const_variable == 2
+ || (main_input_filename != NULL
+ && (decl_file = DECL_SOURCE_FILE (decl)) != NULL
+ && filename_cmp (main_input_filename,
+ decl_file) == 0))))
&& TREE_CODE (decl) == VAR_DECL))
&& ! DECL_IN_SYSTEM_HEADER (decl)
&& ! snode->referred_to_p (/*include_self=*/false)
@@ -971,7 +977,7 @@ check_global_declaration (symtab_node *snode)
(TREE_CODE (decl) == FUNCTION_DECL)
? OPT_Wunused_function
: (TREE_READONLY (decl)
- ? OPT_Wunused_const_variable
+ ? OPT_Wunused_const_variable_
: OPT_Wunused_variable),
"%qD defined but not used", decl);
}
@@ -1702,7 +1708,9 @@ cgraph_node::expand_thunk (bool output_asm_thunks, bool force_gimple_thunk)
/* Build call to the function being thunked. */
if (!VOID_TYPE_P (restype)
- && (!alias_is_noreturn || TREE_ADDRESSABLE (restype)))
+ && (!alias_is_noreturn
+ || TREE_ADDRESSABLE (restype)
+ || TREE_CODE (TYPE_SIZE_UNIT (restype)) != INTEGER_CST))
{
if (DECL_BY_REFERENCE (resdecl))
{
diff --git a/gcc/combine.c b/gcc/combine.c
index 24dcefa..1d0e8be 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -10524,9 +10524,24 @@ simplify_shift_const_1 (enum rtx_code code, machine_mode result_mode,
&& CONST_INT_P (XEXP (varop, 0))
&& !CONST_INT_P (XEXP (varop, 1)))
{
+ /* For ((unsigned) (cstULL >> count)) >> cst2 we have to make
+ sure the result will be masked. See PR70222. */
+ if (code == LSHIFTRT
+ && mode != result_mode
+ && !merge_outer_ops (&outer_op, &outer_const, AND,
+ GET_MODE_MASK (result_mode)
+ >> orig_count, result_mode,
+ &complement_p))
+ break;
+ /* For ((int) (cstLL >> count)) >> cst2 just give up. Queuing
+ up outer sign extension (often left and right shift) is
+ hardly more efficient than the original. See PR70429. */
+ if (code == ASHIFTRT && mode != result_mode)
+ break;
+
rtx new_rtx = simplify_const_binary_operation (code, mode,
- XEXP (varop, 0),
- GEN_INT (count));
+ XEXP (varop, 0),
+ GEN_INT (count));
varop = gen_rtx_fmt_ee (code, mode, new_rtx, XEXP (varop, 1));
count = 0;
continue;
diff --git a/gcc/common.opt b/gcc/common.opt
index 3c3669a..67048db 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -728,7 +728,7 @@ Common Var(warn_maybe_uninitialized) Warning EnabledBy(Wuninitialized)
Warn about maybe uninitialized automatic variables.
Wunreachable-code
-Common Ignore
+Common Ignore Warning
Does nothing. Preserved for backward compatibility.
Wunused
@@ -1840,7 +1840,7 @@ Common Report Var(flag_peephole2) Optimization
Enable an RTL peephole pass before sched2.
fPIC
-Common Report Var(flag_pic,2) Negative(fPIE)
+Common Report Var(flag_pic,2) Negative(fPIE) Init(-1)
Generate position-independent code if possible (large mode).
fPIE
@@ -1848,7 +1848,7 @@ Common Report Var(flag_pie,2) Negative(fpic) Init(-1)
Generate position-independent code for executables if possible (large mode).
fpic
-Common Report Var(flag_pic,1) Negative(fpie)
+Common Report Var(flag_pic,1) Negative(fpie) Init(-1)
Generate position-independent code if possible (small mode).
fpie
@@ -1946,10 +1946,13 @@ Common Ignore
Does nothing. Preserved for backward compatibility.
flifetime-dse
-Common Report Var(flag_lifetime_dse) Init(1) Optimization
+Common Report Var(flag_lifetime_dse,2) Init(2) Optimization
Tell DSE that the storage for a C++ object is dead when the constructor
starts and when the destructor finishes.
+flifetime-dse=
+Common Joined RejectNegative UInteger Var(flag_lifetime_dse) Optimization
+
flive-range-shrinkage
Common Report Var(flag_live_range_shrinkage) Init(0) Optimization
Relief of register pressure through live range shrinkage.
@@ -2455,6 +2458,11 @@ fsplit-paths
Common Report Var(flag_split_paths) Init(0) Optimization
Split paths leading to loop backedges.
+funconstrained-commons
+Common Var(flag_unconstrained_commons) Optimization
+Assume common declarations may be overridden with ones with a larger
+trailing array.
+
funit-at-a-time
Common Report Var(flag_unit_at_a_time) Init(1)
Compile whole compilation unit at a time.
diff --git a/gcc/common/config/aarch64/aarch64-common.c b/gcc/common/config/aarch64/aarch64-common.c
index 69f5da7..08e7959 100644
--- a/gcc/common/config/aarch64/aarch64-common.c
+++ b/gcc/common/config/aarch64/aarch64-common.c
@@ -98,7 +98,7 @@ aarch64_handle_option (struct gcc_options *opts,
return true;
case OPT_momit_leaf_frame_pointer:
- opts->x_flag_omit_frame_pointer = val;
+ opts->x_flag_omit_leaf_frame_pointer = val;
return true;
default:
@@ -112,6 +112,7 @@ struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER;
struct aarch64_option_extension
{
const char *const name;
+ const unsigned long flag_canonical;
const unsigned long flags_on;
const unsigned long flags_off;
};
@@ -119,11 +120,11 @@ struct aarch64_option_extension
/* ISA extensions in AArch64. */
static const struct aarch64_option_extension all_extensions[] =
{
-#define AARCH64_OPT_EXTENSION(NAME, FLAGS_ON, FLAGS_OFF, FEATURE_STRING) \
- {NAME, FLAGS_ON, FLAGS_OFF},
+#define AARCH64_OPT_EXTENSION(NAME, FLAG_CANONICAL, FLAGS_ON, FLAGS_OFF, Z) \
+ {NAME, FLAG_CANONICAL, FLAGS_ON, FLAGS_OFF},
#include "config/aarch64/aarch64-option-extensions.def"
#undef AARCH64_OPT_EXTENSION
- {NULL, 0, 0}
+ {NULL, 0, 0, 0}
};
struct processor_name_to_arch
@@ -137,6 +138,7 @@ struct arch_to_arch_name
{
const enum aarch64_arch arch;
const std::string arch_name;
+ const unsigned long flags;
};
/* Map processor names to the architecture revision they implement and
@@ -155,26 +157,111 @@ static const struct processor_name_to_arch all_cores[] =
static const struct arch_to_arch_name all_architectures[] =
{
#define AARCH64_ARCH(NAME, CORE, ARCH_IDENT, ARCH, FLAGS) \
- {AARCH64_ARCH_##ARCH_IDENT, NAME},
+ {AARCH64_ARCH_##ARCH_IDENT, NAME, FLAGS},
#include "config/aarch64/aarch64-arches.def"
#undef AARCH64_ARCH
- {aarch64_no_arch, ""}
+ {aarch64_no_arch, "", 0}
};
-/* Return a string representation of ISA_FLAGS. */
+/* Parse the architecture extension string STR and update ISA_FLAGS
+ with the architecture features turned on or off. Return a
+ aarch64_parse_opt_result describing the result. */
+
+enum aarch64_parse_opt_result
+aarch64_parse_extension (const char *str, unsigned long *isa_flags)
+{
+ /* The extension string is parsed left to right. */
+ const struct aarch64_option_extension *opt = NULL;
+
+ /* Flag to say whether we are adding or removing an extension. */
+ int adding_ext = -1;
+
+ while (str != NULL && *str != 0)
+ {
+ const char *ext;
+ size_t len;
+
+ str++;
+ ext = strchr (str, '+');
+
+ if (ext != NULL)
+ len = ext - str;
+ else
+ len = strlen (str);
+
+ if (len >= 2 && strncmp (str, "no", 2) == 0)
+ {
+ adding_ext = 0;
+ len -= 2;
+ str += 2;
+ }
+ else if (len > 0)
+ adding_ext = 1;
+
+ if (len == 0)
+ return AARCH64_PARSE_MISSING_ARG;
+
+
+ /* Scan over the extensions table trying to find an exact match. */
+ for (opt = all_extensions; opt->name != NULL; opt++)
+ {
+ if (strlen (opt->name) == len && strncmp (opt->name, str, len) == 0)
+ {
+ /* Add or remove the extension. */
+ if (adding_ext)
+ *isa_flags |= (opt->flags_on | opt->flag_canonical);
+ else
+ *isa_flags &= ~(opt->flags_off | opt->flag_canonical);
+ break;
+ }
+ }
+
+ if (opt->name == NULL)
+ {
+ /* Extension not found in list. */
+ return AARCH64_PARSE_INVALID_FEATURE;
+ }
+
+ str = ext;
+ };
+
+ return AARCH64_PARSE_OK;
+}
+
+/* Return a string representation of ISA_FLAGS. DEFAULT_ARCH_FLAGS
+ gives the default set of flags which are implied by whatever -march
+ we'd put out. Our job is to figure out the minimal set of "+" and
+ "+no" feature flags to put out, and to put them out grouped such
+ that all the "+" flags come before the "+no" flags. */
std::string
-aarch64_get_extension_string_for_isa_flags (unsigned long isa_flags)
+aarch64_get_extension_string_for_isa_flags (unsigned long isa_flags,
+ unsigned long default_arch_flags)
{
const struct aarch64_option_extension *opt = NULL;
std::string outstr = "";
+ /* Pass one: Find all the things we need to turn on. As a special case,
+ we always want to put out +crc if it is enabled. */
for (opt = all_extensions; opt->name != NULL; opt++)
- if ((isa_flags & opt->flags_on) == opt->flags_on)
+ if ((isa_flags & opt->flag_canonical
+ && !(default_arch_flags & opt->flag_canonical))
+ || (default_arch_flags & opt->flag_canonical
+ && opt->flag_canonical == AARCH64_ISA_CRC))
{
outstr += "+";
outstr += opt->name;
}
+
+ /* Pass two: Find all the things we need to turn off. */
+ for (opt = all_extensions; opt->name != NULL; opt++)
+ if ((~isa_flags) & opt->flag_canonical
+ && !((~default_arch_flags) & opt->flag_canonical))
+ {
+ outstr += "+no";
+ outstr += opt->name;
+ }
+
return outstr;
}
@@ -186,7 +273,7 @@ const char *
aarch64_rewrite_selected_cpu (const char *name)
{
std::string original_string (name);
- std::string extensions;
+ std::string extension_str;
std::string processor;
size_t extension_pos = original_string.find_first_of ('+');
@@ -194,8 +281,8 @@ aarch64_rewrite_selected_cpu (const char *name)
if (extension_pos != std::string::npos)
{
processor = original_string.substr (0, extension_pos);
- extensions = original_string.substr (extension_pos,
- std::string::npos);
+ extension_str = original_string.substr (extension_pos,
+ std::string::npos);
}
else
{
@@ -227,9 +314,12 @@ aarch64_rewrite_selected_cpu (const char *name)
|| a_to_an->arch == aarch64_no_arch)
fatal_error (input_location, "unknown value %qs for -mcpu", name);
+ unsigned long extensions = p_to_a->flags;
+ aarch64_parse_extension (extension_str.c_str (), &extensions);
+
std::string outstr = a_to_an->arch_name
- + aarch64_get_extension_string_for_isa_flags (p_to_a->flags)
- + extensions;
+ + aarch64_get_extension_string_for_isa_flags (extensions,
+ a_to_an->flags);
/* We are going to memory leak here, nobody elsewhere
in the callchain is going to clean up after us. The alternative is
diff --git a/gcc/config.gcc b/gcc/config.gcc
index e26742e..f66e48c 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -243,6 +243,7 @@ case ${target} in
| avr-*rtems* \
| h8300-*rtems* \
| m32r-*rtems* \
+ | mep-* \
)
if test "x$enable_obsolete" != xyes; then
echo "*** Configuration ${target} is obsolete." >&2
@@ -906,11 +907,18 @@ case ${target} in
esac
case ${target} in
-aarch64*-*-elf)
+aarch64*-*-elf | aarch64*-*-rtems*)
tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h"
tm_file="${tm_file} aarch64/aarch64-elf.h aarch64/aarch64-elf-raw.h"
tmake_file="${tmake_file} aarch64/t-aarch64"
- use_gcc_stdint=wrap
+ case $target in
+ aarch64-*-elf*)
+ use_gcc_stdint=wrap
+ ;;
+ aarch64-*-rtems*)
+ tm_file="${tm_file} rtems.h aarch64/rtems.h"
+ ;;
+ esac
case $target in
aarch64_be-*)
tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
@@ -1161,7 +1169,7 @@ bfin*-*)
use_gcc_stdint=wrap
;;
cr16-*-elf)
- tm_file="elfos.h ${tm_file}"
+ tm_file="elfos.h ${tm_file} newlib-stdint.h"
tmake_file="${tmake_file} cr16/t-cr16 "
use_collect2=no
;;
@@ -1414,6 +1422,9 @@ i[34567]86-*-elf*)
x86_64-*-elf*)
tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h newlib-stdint.h i386/i386elf.h i386/x86-64.h"
;;
+x86_64-*-rtems*)
+ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h newlib-stdint.h i386/i386elf.h i386/x86-64.h i386/rtems-64.h"
+ ;;
i[34567]86-*-rdos*)
tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h newlib-stdint.h i386/i386elf.h i386/rdos.h"
;;
@@ -1963,7 +1974,7 @@ mcore-*-elf)
inhibit_libc=true
;;
mep-*-*)
- tm_file="dbxelf.h elfos.h ${tm_file}"
+ tm_file="dbxelf.h elfos.h ${tm_file} newlib-stdint.h"
tmake_file=mep/t-mep
c_target_objs="mep-pragma.o"
cxx_target_objs="mep-pragma.o"
@@ -3609,22 +3620,28 @@ case "${target}" in
${srcdir}/config/aarch64/aarch64-option-extensions.def \
> /dev/null; then
- ext_on=`grep "^AARCH64_OPT_EXTENSION(\"$base_ext\"," \
+ ext_canon=`grep "^AARCH64_OPT_EXTENSION(\"$base_ext\"," \
${srcdir}/config/aarch64/aarch64-option-extensions.def | \
sed -e 's/^[^,]*,[ ]*//' | \
sed -e 's/,.*$//'`
- ext_off=`grep "^AARCH64_OPT_EXTENSION(\"$base_ext\"," \
+ ext_on=`grep "^AARCH64_OPT_EXTENSION(\"$base_ext\"," \
${srcdir}/config/aarch64/aarch64-option-extensions.def | \
sed -e 's/^[^,]*,[ ]*[^,]*,[ ]*//' | \
sed -e 's/,.*$//' | \
sed -e 's/).*$//'`
+ ext_off=`grep "^AARCH64_OPT_EXTENSION(\"$base_ext\"," \
+ ${srcdir}/config/aarch64/aarch64-option-extensions.def | \
+ sed -e 's/^[^,]*,[ ]*[^,]*,[ ]*[^,]*,[ ]*//' | \
+ sed -e 's/,.*$//' | \
+ sed -e 's/).*$//'`
+
if [ $ext = $base_ext ]; then
# Adding extension
- ext_mask="("$ext_mask") | ("$ext_on")"
+ ext_mask="("$ext_mask") | ("$ext_on" | "$ext_canon")"
else
# Removing extension
- ext_mask="("$ext_mask") & ~("$ext_off")"
+ ext_mask="("$ext_mask") & ~("$ext_off" | "$ext_canon")"
fi
true
diff --git a/gcc/config/aarch64/aarch64-c.c b/gcc/config/aarch64/aarch64-c.c
index 3590ae0..e64dc76 100644
--- a/gcc/config/aarch64/aarch64-c.c
+++ b/gcc/config/aarch64/aarch64-c.c
@@ -178,6 +178,11 @@ aarch64_pragma_target_parse (tree args, tree pop_target)
cpp_opts->warn_unused_macros = saved_warn_unused_macros;
+ /* If we're popping or reseting make sure to update the globals so that
+ the optab availability predicates get recomputed. */
+ if (pop_target)
+ aarch64_save_restore_target_globals (pop_target);
+
/* Initialize SIMD builtins if we haven't already.
Set current_target_pragma to NULL for the duration so that
the builtin initialization code doesn't try to tag the functions
diff --git a/gcc/config/aarch64/aarch64-elf-raw.h b/gcc/config/aarch64/aarch64-elf-raw.h
index 2dcb6d4..9097017 100644
--- a/gcc/config/aarch64/aarch64-elf-raw.h
+++ b/gcc/config/aarch64/aarch64-elf-raw.h
@@ -35,7 +35,7 @@
" %{mfix-cortex-a53-835769:--fix-cortex-a53-835769}"
#endif
-#ifdef TARGET_FIX_ERR_A53_843419_DEFAULT
+#if TARGET_FIX_ERR_A53_843419_DEFAULT
#define CA53_ERR_843419_SPEC \
" %{!mno-fix-cortex-a53-843419:--fix-cortex-a53-843419}"
#else
diff --git a/gcc/config/aarch64/aarch64-linux.h b/gcc/config/aarch64/aarch64-linux.h
index 6064b26..5fcaa59 100644
--- a/gcc/config/aarch64/aarch64-linux.h
+++ b/gcc/config/aarch64/aarch64-linux.h
@@ -53,7 +53,7 @@
" %{mfix-cortex-a53-835769:--fix-cortex-a53-835769}"
#endif
-#ifdef TARGET_FIX_ERR_A53_843419_DEFAULT
+#if TARGET_FIX_ERR_A53_843419_DEFAULT
#define CA53_ERR_843419_SPEC \
" %{!mno-fix-cortex-a53-843419:--fix-cortex-a53-843419}"
#else
diff --git a/gcc/config/aarch64/aarch64-option-extensions.def b/gcc/config/aarch64/aarch64-option-extensions.def
index fbf9a53..e8706d1 100644
--- a/gcc/config/aarch64/aarch64-option-extensions.def
+++ b/gcc/config/aarch64/aarch64-option-extensions.def
@@ -21,23 +21,37 @@
Before using #include to read this file, define a macro:
- AARCH64_OPT_EXTENSION(EXT_NAME, FLAGS_ON, FLAGS_OFF, FEATURE_STRING)
+ AARCH64_OPT_EXTENSION(EXT_NAME, FLAG_CANONICAL, FLAGS_ON, FLAGS_OFF, FEATURE_STRING)
EXT_NAME is the name of the extension, represented as a string constant.
- FLAGS_ON are the bitwise-or of the features that the extension adds.
- FLAGS_OFF are the bitwise-or of the features that the extension removes.
+ FLAGS_CANONICAL is the canonical internal name for this flag.
+ FLAGS_ON are the bitwise-or of the features that enabling the extension
+ adds, or zero if enabling this extension has no effect on other features.
+ FLAGS_OFF are the bitwise-or of the features that disabling the extension
+ removes, or zero if disabling this extension has no effect on other
+ features.
FEAT_STRING is a string containing the entries in the 'Features' field of
/proc/cpuinfo on a GNU/Linux system that correspond to this architecture
extension being available. Sometimes multiple entries are needed to enable
the extension (for example, the 'crypto' extension depends on four
entries: aes, pmull, sha1, sha2 being present). In that case this field
- should contain a whitespace-separated list of the strings in 'Features'
+ should contain a space (" ") separated list of the strings in 'Features'
that are required. Their order is not important. */
-AARCH64_OPT_EXTENSION ("fp", AARCH64_FL_FP,
- AARCH64_FL_FPSIMD | AARCH64_FL_CRYPTO, "fp")
-AARCH64_OPT_EXTENSION ("simd", AARCH64_FL_FPSIMD,
- AARCH64_FL_SIMD | AARCH64_FL_CRYPTO, "asimd")
-AARCH64_OPT_EXTENSION("crypto", AARCH64_FL_CRYPTO | AARCH64_FL_FPSIMD, AARCH64_FL_CRYPTO, "aes pmull sha1 sha2")
-AARCH64_OPT_EXTENSION("crc", AARCH64_FL_CRC, AARCH64_FL_CRC, "crc32")
-AARCH64_OPT_EXTENSION("lse", AARCH64_FL_LSE, AARCH64_FL_LSE, "atomics")
+/* Enabling "fp" just enables "fp".
+ Disabling "fp" also disables "simd", "crypto". */
+AARCH64_OPT_EXTENSION("fp", AARCH64_FL_FP, 0, AARCH64_FL_SIMD | AARCH64_FL_CRYPTO, "fp")
+
+/* Enabling "simd" also enables "fp".
+ Disabling "simd" also disables "crypto". */
+AARCH64_OPT_EXTENSION("simd", AARCH64_FL_SIMD, AARCH64_FL_FP, AARCH64_FL_CRYPTO, "asimd")
+
+/* Enabling "crypto" also enables "fp", "simd".
+ Disabling "crypto" just disables "crypto". */
+AARCH64_OPT_EXTENSION("crypto", AARCH64_FL_CRYPTO, AARCH64_FL_FP | AARCH64_FL_SIMD, 0, "aes pmull sha1 sha2")
+
+/* Enabling or disabling "crc" only changes "crc". */
+AARCH64_OPT_EXTENSION("crc", AARCH64_FL_CRC, 0, 0, "crc32")
+
+/* Enabling or disabling "lse" only changes "lse". */
+AARCH64_OPT_EXTENSION("lse", AARCH64_FL_LSE, 0, 0, "atomics")
diff --git a/gcc/config/aarch64/aarch64-protos.h b/gcc/config/aarch64/aarch64-protos.h
index 78870e2..f22a31c 100644
--- a/gcc/config/aarch64/aarch64-protos.h
+++ b/gcc/config/aarch64/aarch64-protos.h
@@ -263,6 +263,18 @@ enum aarch64_extra_tuning_flags
};
#undef AARCH64_EXTRA_TUNING_OPTION
+/* Enum describing the various ways that the
+ aarch64_parse_{arch,tune,cpu,extension} functions can fail.
+ This way their callers can choose what kind of error to give. */
+
+enum aarch64_parse_opt_result
+{
+ AARCH64_PARSE_OK, /* Parsing was successful. */
+ AARCH64_PARSE_MISSING_ARG, /* Missing argument. */
+ AARCH64_PARSE_INVALID_FEATURE, /* Invalid feature modifier. */
+ AARCH64_PARSE_INVALID_ARG /* Invalid arch, tune, cpu arg. */
+};
+
extern struct tune_params aarch64_tune_params;
HOST_WIDE_INT aarch64_initial_elimination_offset (unsigned, unsigned);
@@ -280,8 +292,6 @@ bool aarch64_float_const_zero_rtx_p (rtx);
bool aarch64_function_arg_regno_p (unsigned);
bool aarch64_gen_movmemqi (rtx *);
bool aarch64_gimple_fold_builtin (gimple_stmt_iterator *);
-bool aarch64_handle_option (struct gcc_options *, struct gcc_options *,
- const struct cl_decoded_option *, location_t);
bool aarch64_is_extend_from_extract (machine_mode, rtx, rtx);
bool aarch64_is_long_call_p (rtx);
bool aarch64_is_noplt_call_p (rtx);
@@ -315,7 +325,6 @@ bool aarch64_uimm12_shift (HOST_WIDE_INT);
bool aarch64_use_return_insn_p (void);
const char *aarch64_mangle_builtin_type (const_tree);
const char *aarch64_output_casesi (rtx *);
-const char *aarch64_rewrite_selected_cpu (const char *name);
enum aarch64_symbol_type aarch64_classify_symbol (rtx, rtx);
enum aarch64_symbol_type aarch64_classify_tls_symbol (rtx);
@@ -338,7 +347,6 @@ rtx aarch64_simd_gen_const_vector_dup (machine_mode, int);
bool aarch64_simd_mem_operand_p (rtx);
rtx aarch64_simd_vect_par_cnst_half (machine_mode, bool);
rtx aarch64_tls_get_addr (void);
-std::string aarch64_get_extension_string_for_isa_flags (unsigned long);
tree aarch64_fold_builtin (tree, int, tree *, bool);
unsigned aarch64_dbx_register_number (unsigned);
unsigned aarch64_trampoline_size (void);
@@ -360,8 +368,8 @@ void aarch64_emit_call_insn (rtx);
void aarch64_register_pragmas (void);
void aarch64_relayout_simd_types (void);
void aarch64_reset_previous_fndecl (void);
-
-void aarch64_emit_swrsqrt (rtx, rtx);
+void aarch64_save_restore_target_globals (tree);
+void aarch64_emit_approx_rsqrt (rtx, rtx);
/* Initialize builtins for SIMD intrinsics. */
void init_aarch64_simd_builtins (void);
@@ -413,9 +421,7 @@ rtx aarch64_expand_builtin (tree exp,
machine_mode mode ATTRIBUTE_UNUSED,
int ignore ATTRIBUTE_UNUSED);
tree aarch64_builtin_decl (unsigned, bool ATTRIBUTE_UNUSED);
-
tree aarch64_builtin_rsqrt (unsigned int);
-
tree aarch64_builtin_vectorized_function (unsigned int, tree, tree);
extern void aarch64_split_combinev16qi (rtx operands[3]);
@@ -431,4 +437,17 @@ bool extract_base_offset_in_addr (rtx mem, rtx *base, rtx *offset);
bool aarch64_operands_ok_for_ldpstp (rtx *, bool, enum machine_mode);
bool aarch64_operands_adjust_ok_for_ldpstp (rtx *, bool, enum machine_mode);
extern bool aarch64_nopcrelative_literal_loads;
+
+extern void aarch64_asm_output_pool_epilogue (FILE *, const char *,
+ tree, HOST_WIDE_INT);
+
+/* Defined in common/config/aarch64-common.c. */
+bool aarch64_handle_option (struct gcc_options *, struct gcc_options *,
+ const struct cl_decoded_option *, location_t);
+const char *aarch64_rewrite_selected_cpu (const char *name);
+enum aarch64_parse_opt_result aarch64_parse_extension (const char *,
+ unsigned long *);
+std::string aarch64_get_extension_string_for_isa_flags (unsigned long,
+ unsigned long);
+
#endif /* GCC_AARCH64_PROTOS_H */
diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md
index d8497ab..bd73bce 100644
--- a/gcc/config/aarch64/aarch64-simd.md
+++ b/gcc/config/aarch64/aarch64-simd.md
@@ -405,7 +405,7 @@
UNSPEC_RSQRT))]
"TARGET_SIMD"
{
- aarch64_emit_swrsqrt (operands[0], operands[1]);
+ aarch64_emit_approx_rsqrt (operands[0], operands[1]);
DONE;
})
diff --git a/gcc/config/aarch64/aarch64-tuning-flags.def b/gcc/config/aarch64/aarch64-tuning-flags.def
index 8036cfe..7e45a0c 100644
--- a/gcc/config/aarch64/aarch64-tuning-flags.def
+++ b/gcc/config/aarch64/aarch64-tuning-flags.def
@@ -29,5 +29,5 @@
AARCH64_TUNE_ to give an enum name. */
AARCH64_EXTRA_TUNING_OPTION ("rename_fma_regs", RENAME_FMA_REGS)
-AARCH64_EXTRA_TUNING_OPTION ("recip_sqrt", RECIP_SQRT)
+AARCH64_EXTRA_TUNING_OPTION ("approx_rsqrt", APPROX_RSQRT)
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 923a4b3..9995494 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -526,7 +526,7 @@ static const struct tune_params exynosm1_tunings =
&generic_branch_cost,
4, /* memmov_cost */
3, /* issue_rate */
- (AARCH64_FUSE_NOTHING), /* fusible_ops */
+ (AARCH64_FUSE_AES_AESMC), /* fusible_ops */
4, /* function_align. */
4, /* jump_align. */
4, /* loop_align. */
@@ -537,8 +537,8 @@ static const struct tune_params exynosm1_tunings =
2, /* min_div_recip_mul_df. */
48, /* max_case_values. */
64, /* cache_line_size. */
- tune_params::AUTOPREFETCHER_OFF, /* autoprefetcher_model. */
- (AARCH64_EXTRA_TUNE_NONE) /* tune_flags. */
+ tune_params::AUTOPREFETCHER_WEAK, /* autoprefetcher_model. */
+ (AARCH64_EXTRA_TUNE_APPROX_RSQRT) /* tune_flags. */
};
static const struct tune_params thunderx_tunings =
@@ -586,7 +586,7 @@ static const struct tune_params xgene1_tunings =
0, /* max_case_values. */
0, /* cache_line_size. */
tune_params::AUTOPREFETCHER_OFF, /* autoprefetcher_model. */
- (AARCH64_EXTRA_TUNE_RECIP_SQRT) /* tune_flags. */
+ (AARCH64_EXTRA_TUNE_APPROX_RSQRT) /* tune_flags. */
};
/* Support for fine-grained override of the tuning structures. */
@@ -666,7 +666,7 @@ struct aarch64_option_extension
/* ISA extensions in AArch64. */
static const struct aarch64_option_extension all_extensions[] =
{
-#define AARCH64_OPT_EXTENSION(NAME, FLAGS_ON, FLAGS_OFF, FEATURE_STRING) \
+#define AARCH64_OPT_EXTENSION(NAME, X, FLAGS_ON, FLAGS_OFF, FEATURE_STRING) \
{NAME, FLAGS_ON, FLAGS_OFF},
#include "aarch64-option-extensions.def"
#undef AARCH64_OPT_EXTENSION
@@ -3847,6 +3847,18 @@ aarch64_mode_valid_for_sched_fusion_p (machine_mode mode)
&& GET_MODE_SIZE (mode) == 8);
}
+/* Return true if REGNO is a virtual pointer register, or an eliminable
+ "soft" frame register. Like REGNO_PTR_FRAME_P except that we don't
+ include stack_pointer or hard_frame_pointer. */
+static bool
+virt_or_elim_regno_p (unsigned regno)
+{
+ return ((regno >= FIRST_VIRTUAL_REGISTER
+ && regno <= LAST_VIRTUAL_POINTER_REGISTER)
+ || regno == FRAME_POINTER_REGNUM
+ || regno == ARG_POINTER_REGNUM);
+}
+
/* Return true if X is a valid address for machine mode MODE. If it is,
fill in INFO appropriately. STRICT_P is true if REG_OK_STRICT is in
effect. OUTER_CODE is PARALLEL for a load/store pair. */
@@ -3890,9 +3902,7 @@ aarch64_classify_address (struct aarch64_address_info *info,
if (! strict_p
&& REG_P (op0)
- && (op0 == virtual_stack_vars_rtx
- || op0 == frame_pointer_rtx
- || op0 == arg_pointer_rtx)
+ && virt_or_elim_regno_p (REGNO (op0))
&& CONST_INT_P (op1))
{
info->type = ADDRESS_REG_IMM;
@@ -4953,74 +4963,43 @@ aarch64_legitimize_address (rtx x, rtx /* orig_x */, machine_mode mode)
if (GET_CODE (x) == PLUS && CONST_INT_P (XEXP (x, 1)))
{
- HOST_WIDE_INT offset = INTVAL (XEXP (x, 1));
- HOST_WIDE_INT base_offset;
+ rtx base = XEXP (x, 0);
+ rtx offset_rtx XEXP (x, 1);
+ HOST_WIDE_INT offset = INTVAL (offset_rtx);
- if (GET_CODE (XEXP (x, 0)) == PLUS)
+ if (GET_CODE (base) == PLUS)
{
- rtx op0 = XEXP (XEXP (x, 0), 0);
- rtx op1 = XEXP (XEXP (x, 0), 1);
+ rtx op0 = XEXP (base, 0);
+ rtx op1 = XEXP (base, 1);
- /* Address expressions of the form Ra + Rb + CONST.
+ /* Force any scaling into a temp for CSE. */
+ op0 = force_reg (Pmode, op0);
+ op1 = force_reg (Pmode, op1);
- If CONST is within the range supported by the addressing
- mode "reg+offset", do not split CONST and use the
- sequence
- Rt = Ra + Rb;
- addr = Rt + CONST. */
- if (REG_P (op0) && REG_P (op1))
- {
- machine_mode addr_mode = GET_MODE (x);
- rtx base = gen_reg_rtx (addr_mode);
- rtx addr = plus_constant (addr_mode, base, offset);
+ /* Let the pointer register be in op0. */
+ if (REG_POINTER (op1))
+ std::swap (op0, op1);
- if (aarch64_legitimate_address_hook_p (mode, addr, false))
- {
- emit_insn (gen_adddi3 (base, op0, op1));
- return addr;
- }
- }
- /* Address expressions of the form Ra + Rb<<SCALE + CONST.
-
- If Reg + Rb<<SCALE is a valid address expression, do not
- split CONST and use the sequence
- Rc = CONST;
- Rt = Ra + Rc;
- addr = Rt + Rb<<SCALE.
-
- TODO: We really should split CONST out of memory referece
- because:
- a) We depend on GIMPLE optimizers to pick up common sub
- expression involving the scaling operation.
- b) The index Rb is likely a loop iv, it's better to split
- the CONST so that computation of new base Rt is a loop
- invariant and can be moved out of loop. This is more
- important when the original base Ra is sfp related.
-
- Unfortunately, GIMPLE optimizers (e.g., SLSR) can not handle
- this kind of CSE opportunity at the time of this change, we
- have to force register scaling expr out of memory ref now. */
- else if (REG_P (op0) || REG_P (op1))
+ /* If the pointer is virtual or frame related, then we know that
+ virtual register instantiation or register elimination is going
+ to apply a second constant. We want the two constants folded
+ together easily. Therefore, emit as (OP0 + CONST) + OP1. */
+ if (virt_or_elim_regno_p (REGNO (op0)))
{
- machine_mode addr_mode = GET_MODE (x);
- rtx base = gen_reg_rtx (addr_mode);
-
- /* Switch to make sure that register is in op0. */
- if (REG_P (op1))
- std::swap (op0, op1);
-
- rtx addr = plus_constant (addr_mode, base, offset);
-
- if (aarch64_legitimate_address_hook_p (mode, addr, false))
- {
- base = force_operand (gen_rtx_PLUS (addr_mode, op1, op0),
- NULL_RTX);
- return plus_constant (addr_mode, base, offset);
- }
+ base = expand_binop (Pmode, add_optab, op0, offset_rtx,
+ NULL_RTX, true, OPTAB_DIRECT);
+ return gen_rtx_PLUS (Pmode, base, op1);
}
+
+ /* Otherwise, in order to encourage CSE (and thence loop strength
+ reduce) scaled addresses, emit as (OP0 + OP1) + CONST. */
+ base = expand_binop (Pmode, add_optab, op0, op1,
+ NULL_RTX, true, OPTAB_DIRECT);
+ x = gen_rtx_PLUS (Pmode, base, offset_rtx);
}
/* Does it look like we'll need a load/store-pair operation? */
+ HOST_WIDE_INT base_offset;
if (GET_MODE_SIZE (mode) > 16
|| mode == TImode)
base_offset = ((offset + 64 * GET_MODE_SIZE (mode))
@@ -5032,15 +5011,12 @@ aarch64_legitimize_address (rtx x, rtx /* orig_x */, machine_mode mode)
else
base_offset = offset & ~0xfff;
- if (base_offset == 0)
- return x;
-
- offset -= base_offset;
- rtx base_reg = gen_reg_rtx (Pmode);
- rtx val = force_operand (plus_constant (Pmode, XEXP (x, 0), base_offset),
- NULL_RTX);
- emit_move_insn (base_reg, val);
- x = plus_constant (Pmode, base_reg, offset);
+ if (base_offset != 0)
+ {
+ base = plus_constant (Pmode, base, base_offset);
+ base = force_operand (base, NULL_RTX);
+ return plus_constant (Pmode, base, offset - base_offset);
+ }
}
return x;
@@ -5579,6 +5555,18 @@ aarch64_select_rtx_section (machine_mode mode,
return default_elf_select_rtx_section (mode, x, align);
}
+/* Implement ASM_OUTPUT_POOL_EPILOGUE. */
+void
+aarch64_asm_output_pool_epilogue (FILE *f, const char *, tree,
+ HOST_WIDE_INT offset)
+{
+ /* When using per-function literal pools, we must ensure that any code
+ section is aligned to the minimal instruction length, lest we get
+ errors from the assembler re "unaligned instructions". */
+ if ((offset & 3) && aarch64_can_use_per_function_literal_pools_p ())
+ ASM_OUTPUT_ALIGN (f, 2);
+}
+
/* Costs. */
/* Helper function for rtx cost calculation. Strip a shift expression
@@ -7460,8 +7448,8 @@ aarch64_memory_move_cost (machine_mode mode ATTRIBUTE_UNUSED,
return aarch64_tune_params.memmov_cost;
}
-/* Return true if it is safe and beneficial to use the rsqrt optabs to
- optimize 1.0/sqrt. */
+/* Return true if it is safe and beneficial to use the approximate rsqrt optabs
+ to optimize 1.0/sqrt. */
static bool
use_rsqrt_p (void)
@@ -7469,12 +7457,12 @@ use_rsqrt_p (void)
return (!flag_trapping_math
&& flag_unsafe_math_optimizations
&& ((aarch64_tune_params.extra_tuning_flags
- & AARCH64_EXTRA_TUNE_RECIP_SQRT)
+ & AARCH64_EXTRA_TUNE_APPROX_RSQRT)
|| flag_mrecip_low_precision_sqrt));
}
-/* Function to decide when to use
- reciprocal square root builtins. */
+/* Function to decide when to use the approximate reciprocal square root
+ builtin. */
static tree
aarch64_builtin_reciprocal (tree fndecl)
@@ -7522,12 +7510,12 @@ get_rsqrts_type (machine_mode mode)
}
}
-/* Emit instruction sequence to compute
- reciprocal square root. Use two Newton-Raphson steps
- for single precision and three for double precision. */
+/* Emit instruction sequence to compute the reciprocal square root using the
+ Newton-Raphson series. Iterate over the series twice for SF
+ and thrice for DF. */
void
-aarch64_emit_swrsqrt (rtx dst, rtx src)
+aarch64_emit_approx_rsqrt (rtx dst, rtx src)
{
machine_mode mode = GET_MODE (src);
gcc_assert (
@@ -7544,6 +7532,7 @@ aarch64_emit_swrsqrt (rtx dst, rtx src)
int iterations = double_mode ? 3 : 2;
+ /* Optionally iterate over the series one less time than otherwise. */
if (flag_mrecip_low_precision_sqrt)
iterations--;
@@ -7684,83 +7673,6 @@ aarch64_add_stmt_cost (void *data, int count, enum vect_cost_for_stmt kind,
static void initialize_aarch64_code_model (struct gcc_options *);
-/* Enum describing the various ways that the
- aarch64_parse_{arch,tune,cpu,extension} functions can fail.
- This way their callers can choose what kind of error to give. */
-
-enum aarch64_parse_opt_result
-{
- AARCH64_PARSE_OK, /* Parsing was successful. */
- AARCH64_PARSE_MISSING_ARG, /* Missing argument. */
- AARCH64_PARSE_INVALID_FEATURE, /* Invalid feature modifier. */
- AARCH64_PARSE_INVALID_ARG /* Invalid arch, tune, cpu arg. */
-};
-
-/* Parse the architecture extension string STR and update ISA_FLAGS
- with the architecture features turned on or off. Return a
- aarch64_parse_opt_result describing the result. */
-
-static enum aarch64_parse_opt_result
-aarch64_parse_extension (char *str, unsigned long *isa_flags)
-{
- /* The extension string is parsed left to right. */
- const struct aarch64_option_extension *opt = NULL;
-
- /* Flag to say whether we are adding or removing an extension. */
- int adding_ext = -1;
-
- while (str != NULL && *str != 0)
- {
- char *ext;
- size_t len;
-
- str++;
- ext = strchr (str, '+');
-
- if (ext != NULL)
- len = ext - str;
- else
- len = strlen (str);
-
- if (len >= 2 && strncmp (str, "no", 2) == 0)
- {
- adding_ext = 0;
- len -= 2;
- str += 2;
- }
- else if (len > 0)
- adding_ext = 1;
-
- if (len == 0)
- return AARCH64_PARSE_MISSING_ARG;
-
-
- /* Scan over the extensions table trying to find an exact match. */
- for (opt = all_extensions; opt->name != NULL; opt++)
- {
- if (strlen (opt->name) == len && strncmp (opt->name, str, len) == 0)
- {
- /* Add or remove the extension. */
- if (adding_ext)
- *isa_flags |= opt->flags_on;
- else
- *isa_flags &= ~(opt->flags_off);
- break;
- }
- }
-
- if (opt->name == NULL)
- {
- /* Extension not found in list. */
- return AARCH64_PARSE_INVALID_FEATURE;
- }
-
- str = ext;
- };
-
- return AARCH64_PARSE_OK;
-}
-
/* Parse the TO_PARSE string and put the architecture struct that it
selects into RES and the architectural features into ISA_FLAGS.
Return an aarch64_parse_opt_result describing the parse result.
@@ -8109,10 +8021,25 @@ aarch64_parse_override_string (const char* input_string,
static void
aarch64_override_options_after_change_1 (struct gcc_options *opts)
{
+ /* The logic here is that if we are disabling all frame pointer generation
+ then we do not need to disable leaf frame pointer generation as a
+ separate operation. But if we are *only* disabling leaf frame pointer
+ generation then we set flag_omit_frame_pointer to true, but in
+ aarch64_frame_pointer_required we return false only for leaf functions.
+
+ PR 70044: We have to be careful about being called multiple times for the
+ same function. Once we have decided to set flag_omit_frame_pointer just
+ so that we can omit leaf frame pointers, we must then not interpret a
+ second call as meaning that all frame pointer generation should be
+ omitted. We do this by setting flag_omit_frame_pointer to a special,
+ non-zero value. */
+ if (opts->x_flag_omit_frame_pointer == 2)
+ opts->x_flag_omit_frame_pointer = 0;
+
if (opts->x_flag_omit_frame_pointer)
opts->x_flag_omit_leaf_frame_pointer = false;
else if (opts->x_flag_omit_leaf_frame_pointer)
- opts->x_flag_omit_frame_pointer = true;
+ opts->x_flag_omit_frame_pointer = 2;
/* If not optimizing for size, set the default
alignment to what the target wants. */
@@ -8131,9 +8058,18 @@ aarch64_override_options_after_change_1 (struct gcc_options *opts)
if (opts->x_nopcrelative_literal_loads == 1)
aarch64_nopcrelative_literal_loads = false;
- /* If it is not set on the command line, we default to no
- pc relative literal loads. */
- if (opts->x_nopcrelative_literal_loads == 2)
+ /* If it is not set on the command line, we default to no pc
+ relative literal loads, unless the workaround for Cortex-A53
+ erratum 843419 is in effect. */
+ /* This is PR70113. When building the Linux kernel with
+ CONFIG_ARM64_ERRATUM_843419, support for relocations
+ R_AARCH64_ADR_PREL_PG_HI21 and R_AARCH64_ADR_PREL_PG_HI21_NC is
+ removed from the kernel to avoid loading objects with possibly
+ offending sequences. With nopcrelative_literal_loads, we would
+ generate such relocations, preventing the kernel build from
+ succeeding. */
+ if (opts->x_nopcrelative_literal_loads == 2
+ && !TARGET_FIX_ERR_A53_843419)
aarch64_nopcrelative_literal_loads = true;
/* In the tiny memory model it makes no sense
@@ -8537,7 +8473,7 @@ aarch64_option_print (FILE *file, int indent, struct cl_target_option *ptr)
unsigned long isa_flags = ptr->x_aarch64_isa_flags;
const struct processor *arch = aarch64_get_arch (ptr->x_explicit_arch);
std::string extension
- = aarch64_get_extension_string_for_isa_flags (isa_flags);
+ = aarch64_get_extension_string_for_isa_flags (isa_flags, arch->flags);
fprintf (file, "%*sselected tune = %s\n", indent, "", cpu->name);
fprintf (file, "%*sselected arch = %s%s\n", indent, "",
@@ -8552,6 +8488,21 @@ aarch64_reset_previous_fndecl (void)
aarch64_previous_fndecl = NULL;
}
+/* Restore or save the TREE_TARGET_GLOBALS from or to NEW_TREE.
+ Used by aarch64_set_current_function and aarch64_pragma_target_parse to
+ make sure optab availability predicates are recomputed when necessary. */
+
+void
+aarch64_save_restore_target_globals (tree new_tree)
+{
+ if (TREE_TARGET_GLOBALS (new_tree))
+ restore_target_globals (TREE_TARGET_GLOBALS (new_tree));
+ else if (new_tree == target_option_default_node)
+ restore_target_globals (&default_target_globals);
+ else
+ TREE_TARGET_GLOBALS (new_tree) = save_target_globals_default_opts ();
+}
+
/* Implement TARGET_SET_CURRENT_FUNCTION. Unpack the codegen decisions
like tuning and ISA features from the DECL_FUNCTION_SPECIFIC_TARGET
of the function, if such exists. This function may be called multiple
@@ -8561,63 +8512,32 @@ aarch64_reset_previous_fndecl (void)
static void
aarch64_set_current_function (tree fndecl)
{
+ if (!fndecl || fndecl == aarch64_previous_fndecl)
+ return;
+
tree old_tree = (aarch64_previous_fndecl
? DECL_FUNCTION_SPECIFIC_TARGET (aarch64_previous_fndecl)
: NULL_TREE);
- tree new_tree = (fndecl
- ? DECL_FUNCTION_SPECIFIC_TARGET (fndecl)
- : NULL_TREE);
+ tree new_tree = DECL_FUNCTION_SPECIFIC_TARGET (fndecl);
+ /* If current function has no attributes but the previous one did,
+ use the default node. */
+ if (!new_tree && old_tree)
+ new_tree = target_option_default_node;
- if (fndecl && fndecl != aarch64_previous_fndecl)
- {
- aarch64_previous_fndecl = fndecl;
- if (old_tree == new_tree)
- ;
+ /* If nothing to do, return. #pragma GCC reset or #pragma GCC pop to
+ the default have been handled by aarch64_save_restore_target_globals from
+ aarch64_pragma_target_parse. */
+ if (old_tree == new_tree)
+ return;
- else if (new_tree && new_tree != target_option_default_node)
- {
- cl_target_option_restore (&global_options,
- TREE_TARGET_OPTION (new_tree));
- if (TREE_TARGET_GLOBALS (new_tree))
- restore_target_globals (TREE_TARGET_GLOBALS (new_tree));
- else
- TREE_TARGET_GLOBALS (new_tree)
- = save_target_globals_default_opts ();
- }
+ aarch64_previous_fndecl = fndecl;
- else if (old_tree && old_tree != target_option_default_node)
- {
- new_tree = target_option_current_node;
- cl_target_option_restore (&global_options,
- TREE_TARGET_OPTION (new_tree));
- if (TREE_TARGET_GLOBALS (new_tree))
- restore_target_globals (TREE_TARGET_GLOBALS (new_tree));
- else if (new_tree == target_option_default_node)
- restore_target_globals (&default_target_globals);
- else
- TREE_TARGET_GLOBALS (new_tree)
- = save_target_globals_default_opts ();
- }
- }
+ /* First set the target options. */
+ cl_target_option_restore (&global_options, TREE_TARGET_OPTION (new_tree));
- if (!fndecl)
- return;
-
- /* If we turned on SIMD make sure that any vector parameters are re-laid out
- so that they use proper vector modes. */
- if (TARGET_SIMD)
- {
- tree parms = DECL_ARGUMENTS (fndecl);
- for (; parms && parms != void_list_node; parms = TREE_CHAIN (parms))
- {
- if (TREE_CODE (parms) == PARM_DECL
- && VECTOR_TYPE_P (TREE_TYPE (parms))
- && DECL_MODE (parms) != TYPE_MODE (TREE_TYPE (parms)))
- relayout_decl (parms);
- }
- }
+ aarch64_save_restore_target_globals (new_tree);
}
/* Enum describing the various ways we can handle attributes.
@@ -8817,6 +8737,8 @@ static const struct aarch64_attribute_info aarch64_attributes[] =
OPT_mgeneral_regs_only },
{ "fix-cortex-a53-835769", aarch64_attr_bool, true, NULL,
OPT_mfix_cortex_a53_835769 },
+ { "fix-cortex-a53-843419", aarch64_attr_bool, true, NULL,
+ OPT_mfix_cortex_a53_843419 },
{ "cmodel", aarch64_attr_enum, false, NULL, OPT_mcmodel_ },
{ "strict-align", aarch64_attr_mask, false, NULL, OPT_mstrict_align },
{ "omit-leaf-frame-pointer", aarch64_attr_bool, true, NULL,
@@ -9231,6 +9153,12 @@ aarch64_can_inline_p (tree caller, tree callee)
2, TARGET_FIX_ERR_A53_835769_DEFAULT))
return false;
+ if (!aarch64_tribools_ok_for_inlining_p (
+ caller_opts->x_aarch64_fix_a53_err843419,
+ callee_opts->x_aarch64_fix_a53_err843419,
+ 2, TARGET_FIX_ERR_A53_843419))
+ return false;
+
/* If the user explicitly specified -momit-leaf-frame-pointer for the
caller and calle and they don't match up, reject inlining. */
if (!aarch64_tribools_ok_for_inlining_p (
@@ -11154,7 +11082,8 @@ static unsigned HOST_WIDE_INT
aarch64_shift_truncation_mask (machine_mode mode)
{
return
- (aarch64_vector_mode_supported_p (mode)
+ (!SHIFT_COUNT_TRUNCATED
+ || aarch64_vector_mode_supported_p (mode)
|| aarch64_vect_struct_mode_p (mode)) ? 0 : (GET_MODE_BITSIZE (mode) - 1);
}
@@ -11207,7 +11136,8 @@ aarch64_declare_function_name (FILE *stream, const char* name,
unsigned long isa_flags = targ_options->x_aarch64_isa_flags;
std::string extension
- = aarch64_get_extension_string_for_isa_flags (isa_flags);
+ = aarch64_get_extension_string_for_isa_flags (isa_flags,
+ this_arch->flags);
/* Only update the assembler .arch string if it is distinct from the last
such string we printed. */
std::string to_print = this_arch->name + extension;
@@ -11247,7 +11177,8 @@ aarch64_start_file (void)
= aarch64_get_arch (default_options->x_explicit_arch);
unsigned long default_isa_flags = default_options->x_aarch64_isa_flags;
std::string extension
- = aarch64_get_extension_string_for_isa_flags (default_isa_flags);
+ = aarch64_get_extension_string_for_isa_flags (default_isa_flags,
+ default_arch->flags);
aarch64_last_printed_arch_string = default_arch->name + extension;
aarch64_last_printed_tune_string = "";
diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
index 8b463c9..15d7e40 100644
--- a/gcc/config/aarch64/aarch64.h
+++ b/gcc/config/aarch64/aarch64.h
@@ -145,7 +145,7 @@ 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_V8_1)
+ (AARCH64_FL_FOR_ARCH8 | AARCH64_FL_LSE | AARCH64_FL_CRC | AARCH64_FL_V8_1)
/* Macros to test ISA flags. */
@@ -179,6 +179,20 @@ extern unsigned aarch64_architecture_version;
((aarch64_fix_a53_err835769 == 2) \
? TARGET_FIX_ERR_A53_835769_DEFAULT : aarch64_fix_a53_err835769)
+/* Make sure this is always defined so we don't have to check for ifdefs
+ but rather use normal ifs. */
+#ifndef TARGET_FIX_ERR_A53_843419_DEFAULT
+#define TARGET_FIX_ERR_A53_843419_DEFAULT 0
+#else
+#undef TARGET_FIX_ERR_A53_843419_DEFAULT
+#define TARGET_FIX_ERR_A53_843419_DEFAULT 1
+#endif
+
+/* Apply the workaround for Cortex-A53 erratum 843419. */
+#define TARGET_FIX_ERR_A53_843419 \
+ ((aarch64_fix_a53_err843419 == 2) \
+ ? TARGET_FIX_ERR_A53_843419_DEFAULT : aarch64_fix_a53_err843419)
+
/* ARMv8.1 Adv.SIMD support. */
#define TARGET_SIMD_RDMA (TARGET_SIMD && AARCH64_ISA_RDMA)
@@ -914,4 +928,6 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
#define EXTRA_SPECS \
{ "asm_cpu_spec", ASM_CPU_SPEC }
+#define ASM_OUTPUT_POOL_EPILOGUE aarch64_asm_output_pool_epilogue
+
#endif /* GCC_AARCH64_H */
diff --git a/gcc/config/aarch64/aarch64.opt b/gcc/config/aarch64/aarch64.opt
index 5cbd4cd..c637ff4 100644
--- a/gcc/config/aarch64/aarch64.opt
+++ b/gcc/config/aarch64/aarch64.opt
@@ -73,7 +73,7 @@ Target Report Var(aarch64_fix_a53_err835769) Init(2) Save
Workaround for ARM Cortex-A53 Erratum number 835769.
mfix-cortex-a53-843419
-Target Report
+Target Report Var(aarch64_fix_a53_err843419) Init(2) Save
Workaround for ARM Cortex-A53 Erratum number 843419.
mlittle-endian
@@ -151,5 +151,5 @@ PC relative literal loads.
mlow-precision-recip-sqrt
Common Var(flag_mrecip_low_precision_sqrt) Optimization
-When calculating a sqrt approximation, run fewer steps.
-This reduces precision, but can result in faster computation.
+When calculating the reciprocal square root approximation,
+uses one less step than otherwise, thus reducing latency and precision.
diff --git a/gcc/config/aarch64/driver-aarch64.c b/gcc/config/aarch64/driver-aarch64.c
index 317a8a9..ce771ec 100644
--- a/gcc/config/aarch64/driver-aarch64.c
+++ b/gcc/config/aarch64/driver-aarch64.c
@@ -18,17 +18,25 @@
<http://www.gnu.org/licenses/>. */
#include "config.h"
+#define INCLUDE_STRING
#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
-struct arch_extension
+/* Defined in common/config/aarch64/aarch64-common.c. */
+std::string aarch64_get_extension_string_for_isa_flags (unsigned long,
+ unsigned long);
+
+struct aarch64_arch_extension
{
const char *ext;
+ unsigned int flag;
const char *feat_string;
};
-#define AARCH64_OPT_EXTENSION(EXT_NAME, FLAGS_ON, FLAGS_OFF, FEATURE_STRING) \
- { EXT_NAME, FEATURE_STRING },
-static struct arch_extension ext_to_feat_string[] =
+#define AARCH64_OPT_EXTENSION(EXT_NAME, FLAG_CANONICAL, FLAGS_ON, FLAGS_OFF, FEATURE_STRING) \
+ { EXT_NAME, FLAG_CANONICAL, FEATURE_STRING },
+static struct aarch64_arch_extension aarch64_extensions[] =
{
#include "aarch64-option-extensions.def"
};
@@ -41,15 +49,16 @@ struct aarch64_core_data
const char* arch;
const char* implementer_id;
const char* part_no;
+ const unsigned long flags;
};
#define AARCH64_CORE(CORE_NAME, CORE_IDENT, SCHED, ARCH, FLAGS, COSTS, IMP, PART) \
- { CORE_NAME, #ARCH, IMP, PART },
+ { CORE_NAME, #ARCH, IMP, PART, FLAGS },
-static struct aarch64_core_data cpu_data [] =
+static struct aarch64_core_data aarch64_cpu_data[] =
{
#include "aarch64-cores.def"
- { NULL, NULL, NULL, NULL }
+ { NULL, NULL, NULL, NULL, 0 }
};
#undef AARCH64_CORE
@@ -58,37 +67,37 @@ struct aarch64_arch_driver_info
{
const char* id;
const char* name;
+ const unsigned long flags;
};
#define AARCH64_ARCH(NAME, CORE, ARCH_IDENT, ARCH_REV, FLAGS) \
- { #ARCH_IDENT, NAME },
+ { #ARCH_IDENT, NAME, FLAGS },
-static struct aarch64_arch_driver_info aarch64_arches [] =
+static struct aarch64_arch_driver_info aarch64_arches[] =
{
#include "aarch64-arches.def"
- {NULL, NULL}
+ {NULL, NULL, 0}
};
#undef AARCH64_ARCH
-/* Return the full architecture name string corresponding to the
- identifier ID. */
+/* Return an aarch64_arch_driver_info for the architecture described
+ by ID, or NULL if ID describes something we don't know about. */
-static const char*
-get_arch_name_from_id (const char* id)
+static struct aarch64_arch_driver_info*
+get_arch_from_id (const char* id)
{
unsigned int i = 0;
for (i = 0; aarch64_arches[i].id != NULL; i++)
{
if (strcmp (id, aarch64_arches[i].id) == 0)
- return aarch64_arches[i].name;
+ return &aarch64_arches[i];
}
return NULL;
}
-
/* Check wether the string CORE contains the same CPU part numbers
as BL_STRING. For example CORE="{0xd03, 0xd07}" and BL_STRING="0xd07.0xd03"
should return true. */
@@ -97,7 +106,7 @@ static bool
valid_bL_string_p (const char** core, const char* bL_string)
{
return strstr (bL_string, core[0]) != NULL
- && strstr (bL_string, core[1]) != NULL;
+ && strstr (bL_string, core[1]) != NULL;
}
/* Return true iff ARR contains STR in one of its two elements. */
@@ -141,7 +150,7 @@ host_detect_local_cpu (int argc, const char **argv)
{
const char *arch_id = NULL;
const char *res = NULL;
- static const int num_exts = ARRAY_SIZE (ext_to_feat_string);
+ static const int num_exts = ARRAY_SIZE (aarch64_extensions);
char buf[128];
FILE *f = NULL;
bool arch = false;
@@ -155,6 +164,8 @@ host_detect_local_cpu (int argc, const char **argv)
unsigned int n_imps = 0;
bool processed_exts = false;
const char *ext_string = "";
+ unsigned long extension_flags = 0;
+ unsigned long default_flags = 0;
gcc_assert (argc);
@@ -183,60 +194,71 @@ host_detect_local_cpu (int argc, const char **argv)
{
if (strstr (buf, "implementer") != NULL)
{
- for (i = 0; cpu_data[i].name != NULL; i++)
- if (strstr (buf, cpu_data[i].implementer_id) != NULL
- && !contains_string_p (imps, cpu_data[i].implementer_id))
+ for (i = 0; aarch64_cpu_data[i].name != NULL; i++)
+ if (strstr (buf, aarch64_cpu_data[i].implementer_id) != NULL
+ && !contains_string_p (imps,
+ aarch64_cpu_data[i].implementer_id))
{
- if (n_imps == 2)
- goto not_found;
+ if (n_imps == 2)
+ goto not_found;
- imps[n_imps++] = cpu_data[i].implementer_id;
+ imps[n_imps++] = aarch64_cpu_data[i].implementer_id;
- break;
+ break;
}
- continue;
+ continue;
}
if (strstr (buf, "part") != NULL)
{
- for (i = 0; cpu_data[i].name != NULL; i++)
- if (strstr (buf, cpu_data[i].part_no) != NULL
- && !contains_string_p (cores, cpu_data[i].part_no))
+ for (i = 0; aarch64_cpu_data[i].name != NULL; i++)
+ if (strstr (buf, aarch64_cpu_data[i].part_no) != NULL
+ && !contains_string_p (cores, aarch64_cpu_data[i].part_no))
{
- if (n_cores == 2)
- goto not_found;
+ if (n_cores == 2)
+ goto not_found;
- cores[n_cores++] = cpu_data[i].part_no;
- core_idx = i;
- arch_id = cpu_data[i].arch;
- break;
+ cores[n_cores++] = aarch64_cpu_data[i].part_no;
+ core_idx = i;
+ arch_id = aarch64_cpu_data[i].arch;
+ break;
}
- continue;
- }
+ continue;
+ }
if (!tune && !processed_exts && strstr (buf, "Features") != NULL)
- {
- for (i = 0; i < num_exts; i++)
- {
- bool enabled = true;
- char *p = NULL;
- char *feat_string = concat (ext_to_feat_string[i].feat_string, NULL);
-
- p = strtok (feat_string, " ");
-
- while (p != NULL)
- {
- if (strstr (buf, p) == NULL)
- {
- enabled = false;
- break;
- }
- p = strtok (NULL, " ");
- }
- ext_string = concat (ext_string, "+", enabled ? "" : "no",
- ext_to_feat_string[i].ext, NULL);
- }
- processed_exts = true;
- }
+ {
+ for (i = 0; i < num_exts; i++)
+ {
+ char *p = NULL;
+ char *feat_string
+ = concat (aarch64_extensions[i].feat_string, NULL);
+ bool enabled = true;
+
+ /* This may be a multi-token feature string. We need
+ to match all parts, which could be in any order.
+ If this isn't a multi-token feature string, strtok is
+ just going to return a pointer to feat_string. */
+ p = strtok (feat_string, " ");
+ while (p != NULL)
+ {
+ if (strstr (buf, p) == NULL)
+ {
+ /* Failed to match this token. Turn off the
+ features we'd otherwise enable. */
+ enabled = false;
+ break;
+ }
+ p = strtok (NULL, " ");
+ }
+
+ if (enabled)
+ extension_flags |= aarch64_extensions[i].flag;
+ else
+ extension_flags &= ~(aarch64_extensions[i].flag);
+ }
+
+ processed_exts = true;
+ }
}
fclose (f);
@@ -251,44 +273,56 @@ host_detect_local_cpu (int argc, const char **argv)
if (arch)
{
- const char* arch_name = get_arch_name_from_id (arch_id);
+ struct aarch64_arch_driver_info* arch_info = get_arch_from_id (arch_id);
/* We got some arch indentifier that's not in aarch64-arches.def? */
- if (!arch_name)
- goto not_found;
+ if (!arch_info)
+ goto not_found;
- res = concat ("-march=", arch_name, NULL);
+ res = concat ("-march=", arch_info->name, NULL);
+ default_flags = arch_info->flags;
}
/* We have big.LITTLE. */
else if (n_cores == 2)
{
- for (i = 0; cpu_data[i].name != NULL; i++)
- {
- if (strchr (cpu_data[i].part_no, '.') != NULL
- && strncmp (cpu_data[i].implementer_id, imps[0], strlen (imps[0]) - 1) == 0
- && valid_bL_string_p (cores, cpu_data[i].part_no))
- {
- res = concat ("-m", cpu ? "cpu" : "tune", "=", cpu_data[i].name, NULL);
- break;
- }
- }
+ for (i = 0; aarch64_cpu_data[i].name != NULL; i++)
+ {
+ if (strchr (aarch64_cpu_data[i].part_no, '.') != NULL
+ && strncmp (aarch64_cpu_data[i].implementer_id,
+ imps[0],
+ strlen (imps[0]) - 1) == 0
+ && valid_bL_string_p (cores, aarch64_cpu_data[i].part_no))
+ {
+ res = concat ("-m",
+ cpu ? "cpu" : "tune", "=",
+ aarch64_cpu_data[i].name,
+ NULL);
+ default_flags = aarch64_cpu_data[i].flags;
+ break;
+ }
+ }
if (!res)
- goto not_found;
+ goto not_found;
}
/* The simple, non-big.LITTLE case. */
else
{
- if (strncmp (cpu_data[core_idx].implementer_id, imps[0],
- strlen (imps[0]) - 1) != 0)
- goto not_found;
+ if (strncmp (aarch64_cpu_data[core_idx].implementer_id, imps[0],
+ strlen (imps[0]) - 1) != 0)
+ goto not_found;
res = concat ("-m", cpu ? "cpu" : "tune", "=",
- cpu_data[core_idx].name, NULL);
+ aarch64_cpu_data[core_idx].name, NULL);
+ default_flags = aarch64_cpu_data[core_idx].flags;
}
if (tune)
return res;
+ ext_string
+ = aarch64_get_extension_string_for_isa_flags (extension_flags,
+ default_flags).c_str ();
+
res = concat (res, ext_string, NULL);
return res;
diff --git a/gcc/config/aarch64/predicates.md b/gcc/config/aarch64/predicates.md
index 1186827..8f2726d 100644
--- a/gcc/config/aarch64/predicates.md
+++ b/gcc/config/aarch64/predicates.md
@@ -302,7 +302,7 @@
})
(define_predicate "aarch64_simd_reg_or_zero"
- (and (match_code "reg,subreg,const_int,const_vector")
+ (and (match_code "reg,subreg,const_int,const_double,const_vector")
(ior (match_operand 0 "register_operand")
(ior (match_test "op == const0_rtx")
(match_test "aarch64_simd_imm_zero_p (op, mode)")))))
diff --git a/gcc/config/aarch64/rtems.h b/gcc/config/aarch64/rtems.h
new file mode 100644
index 0000000..a166034
--- /dev/null
+++ b/gcc/config/aarch64/rtems.h
@@ -0,0 +1,28 @@
+/* Definitions for RTEMS based AARCH64 system.
+ Copyright (C) 2016 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ 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 HAS_INIT_SECTION
+
+#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/aarch64/t-aarch64 b/gcc/config/aarch64/t-aarch64
index dcbcac4..778e15c 100644
--- a/gcc/config/aarch64/t-aarch64
+++ b/gcc/config/aarch64/t-aarch64
@@ -19,7 +19,10 @@
# <http://www.gnu.org/licenses/>.
TM_H += $(srcdir)/config/aarch64/aarch64-cores.def
-OPTIONS_H_EXTRA += $(srcdir)/config/aarch64/aarch64-cores.def
+OPTIONS_H_EXTRA += $(srcdir)/config/aarch64/aarch64-cores.def \
+ $(srcdir)/config/aarch64/aarch64-arches.def \
+ $(srcdir)/config/aarch64/aarch64-fusion-pairs.def \
+ $(srcdir)/config/aarch64/aarch64-tuning-flags.def
$(srcdir)/config/aarch64/aarch64-tune.md: $(srcdir)/config/aarch64/gentune.sh \
$(srcdir)/config/aarch64/aarch64-cores.def
diff --git a/gcc/config/arc/arc.h b/gcc/config/arc/arc.h
index 21c049f..1c2a38d 100644
--- a/gcc/config/arc/arc.h
+++ b/gcc/config/arc/arc.h
@@ -188,7 +188,8 @@ along with GCC; see the file COPYING3. If not see
%(linker) %l " LINK_PIE_SPEC "%X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r}\
%{s} %{t} %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}\
%{static:} %{L*} %(mfwrap) %(link_libgcc) %o\
- %{fopenacc|fopenmp|ftree-parallelize-loops=*:%:include(libgomp.spec)%(link_gomp)}\
+ %{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1):\
+ %:include(libgomp.spec)%(link_gomp)}\
%(mflib)\
%{fprofile-arcs|fprofile-generate|coverage:-lgcov}\
%{!nostdlib:%{!nodefaultlibs:%(link_ssp) %(link_gcc_c_sequence)}}\
diff --git a/gcc/config/arm/arm-c.c b/gcc/config/arm/arm-c.c
index 982a606..4fbdfc5 100644
--- a/gcc/config/arm/arm-c.c
+++ b/gcc/config/arm/arm-c.c
@@ -199,7 +199,7 @@ arm_cpu_cpp_builtins (struct cpp_reader * pfile)
static bool
arm_pragma_target_parse (tree args, tree pop_target)
{
- tree prev_tree = build_target_option_node (&global_options);
+ tree prev_tree = target_option_current_node;
tree cur_tree;
struct cl_target_option *prev_opt;
struct cl_target_option *cur_opt;
@@ -220,11 +220,16 @@ arm_pragma_target_parse (tree args, tree pop_target)
TREE_TARGET_OPTION (prev_tree));
return false;
}
+
+ /* handle_pragma_pop_options and handle_pragma_reset_options will set
+ target_option_current_node, but not handle_pragma_target. */
+ target_option_current_node = cur_tree;
}
- /* Figure out the previous mode. */
- prev_opt = TREE_TARGET_OPTION (prev_tree);
- cur_opt = TREE_TARGET_OPTION (cur_tree);
+ /* Update macros if target_node changes. The global state will be restored
+ by arm_set_current_function. */
+ prev_opt = TREE_TARGET_OPTION (prev_tree);
+ cur_opt = TREE_TARGET_OPTION (cur_tree);
gcc_assert (prev_opt);
gcc_assert (cur_opt);
diff --git a/gcc/config/arm/arm-cores.def b/gcc/config/arm/arm-cores.def
index 6538861..829b839 100644
--- a/gcc/config/arm/arm-cores.def
+++ b/gcc/config/arm/arm-cores.def
@@ -155,6 +155,7 @@ ARM_CORE("cortex-r4", cortexr4, cortexr4, 7R, ARM_FSET_MAKE_CPU1 (FL_LDSCHED |
ARM_CORE("cortex-r4f", cortexr4f, cortexr4f, 7R, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7R), cortex)
ARM_CORE("cortex-r5", cortexr5, cortexr5, 7R, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_ARM_DIV | FL_FOR_ARCH7R), cortex)
ARM_CORE("cortex-r7", cortexr7, cortexr7, 7R, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_ARM_DIV | FL_FOR_ARCH7R), cortex)
+ARM_CORE("cortex-r8", cortexr8, cortexr7, 7R, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_ARM_DIV | FL_FOR_ARCH7R), cortex)
ARM_CORE("cortex-m7", cortexm7, cortexm7, 7EM, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_NO_VOLATILE_CE | FL_FOR_ARCH7EM), cortex_m7)
ARM_CORE("cortex-m4", cortexm4, cortexm4, 7EM, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7EM), v7m)
ARM_CORE("cortex-m3", cortexm3, cortexm3, 7M, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7M), v7m)
@@ -165,6 +166,7 @@ ARM_CORE("cortex-a15.cortex-a7", cortexa15cortexa7, cortexa7, 7A, ARM_FSET_MAKE_
ARM_CORE("cortex-a17.cortex-a7", cortexa17cortexa7, cortexa7, 7A, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_THUMB_DIV | FL_ARM_DIV | FL_FOR_ARCH7A), cortex_a12)
/* V8 Architecture Processors */
+ARM_CORE("cortex-a32", cortexa32, cortexa53, 8A, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_CRC32 | FL_FOR_ARCH8A), cortex_a35)
ARM_CORE("cortex-a35", cortexa35, cortexa53, 8A, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_CRC32 | FL_FOR_ARCH8A), cortex_a35)
ARM_CORE("cortex-a53", cortexa53, cortexa53, 8A, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_CRC32 | FL_FOR_ARCH8A), cortex_a53)
ARM_CORE("cortex-a57", cortexa57, cortexa57, 8A, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_CRC32 | FL_FOR_ARCH8A), cortex_a57)
diff --git a/gcc/config/arm/arm-tables.opt b/gcc/config/arm/arm-tables.opt
index 6d6ee96..adec6c9 100644
--- a/gcc/config/arm/arm-tables.opt
+++ b/gcc/config/arm/arm-tables.opt
@@ -286,6 +286,9 @@ EnumValue
Enum(processor_type) String(cortex-r7) Value(cortexr7)
EnumValue
+Enum(processor_type) String(cortex-r8) Value(cortexr8)
+
+EnumValue
Enum(processor_type) String(cortex-m7) Value(cortexm7)
EnumValue
@@ -304,6 +307,9 @@ EnumValue
Enum(processor_type) String(cortex-a17.cortex-a7) Value(cortexa17cortexa7)
EnumValue
+Enum(processor_type) String(cortex-a32) Value(cortexa32)
+
+EnumValue
Enum(processor_type) String(cortex-a35) Value(cortexa35)
EnumValue
diff --git a/gcc/config/arm/arm-tune.md b/gcc/config/arm/arm-tune.md
index 1c84218..d9f02a1 100644
--- a/gcc/config/arm/arm-tune.md
+++ b/gcc/config/arm/arm-tune.md
@@ -30,9 +30,10 @@
cortexa8,cortexa9,cortexa12,
cortexa15,cortexa17,cortexr4,
cortexr4f,cortexr5,cortexr7,
- cortexm7,cortexm4,cortexm3,
- marvell_pj4,cortexa15cortexa7,cortexa17cortexa7,
- cortexa35,cortexa53,cortexa57,
- cortexa72,exynosm1,qdf24xx,
- xgene1,cortexa57cortexa53,cortexa72cortexa53"
+ cortexr8,cortexm7,cortexm4,
+ cortexm3,marvell_pj4,cortexa15cortexa7,
+ cortexa17cortexa7,cortexa32,cortexa35,
+ cortexa53,cortexa57,cortexa72,
+ exynosm1,qdf24xx,xgene1,
+ cortexa57cortexa53,cortexa72cortexa53"
(const (symbol_ref "((enum attr_tune) arm_tune)")))
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 6b73771..5974c65 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -2874,6 +2874,14 @@ arm_option_override_internal (struct gcc_options *opts,
{
arm_override_options_after_change_1 (opts);
+ if (TARGET_INTERWORK && !ARM_FSET_HAS_CPU1 (insn_flags, FL_THUMB))
+ {
+ /* The default is to enable interworking, so this warning message would
+ be confusing to users who have just compiled with, eg, -march=armv3. */
+ /* warning (0, "ignoring -minterwork because target CPU does not support THUMB"); */
+ opts->x_target_flags &= ~MASK_INTERWORK;
+ }
+
if (TARGET_THUMB_P (opts->x_target_flags)
&& !(ARM_FSET_HAS_CPU1 (insn_flags, FL_THUMB)))
{
@@ -3445,8 +3453,9 @@ arm_option_override (void)
arm_add_gc_roots ();
/* Save the initial options in case the user does function specific
- options. */
- target_option_default_node = build_target_option_node (&global_options);
+ options or #pragma target. */
+ target_option_default_node = target_option_current_node
+ = build_target_option_node (&global_options);
/* Init initial mode for testing. */
thumb_flipper = TARGET_THUMB;
@@ -13254,7 +13263,11 @@ tls_mentioned_p (rtx x)
}
}
-/* Must not copy any rtx that uses a pc-relative address. */
+/* Must not copy any rtx that uses a pc-relative address.
+ Also, disallow copying of load-exclusive instructions that
+ may appear after splitting of compare-and-swap-style operations
+ so as to prevent those loops from being transformed away from their
+ canonical forms (see PR 69904). */
static bool
arm_cannot_copy_insn_p (rtx_insn *insn)
@@ -13273,6 +13286,20 @@ arm_cannot_copy_insn_p (rtx_insn *insn)
|| XINT (x, 1) == UNSPEC_PIC_UNIFIED))
return true;
}
+
+ rtx set = single_set (insn);
+ if (set)
+ {
+ rtx src = SET_SRC (set);
+ if (GET_CODE (src) == ZERO_EXTEND)
+ src = XEXP (src, 0);
+
+ /* Catch the load-exclusive and load-acquire operations. */
+ if (GET_CODE (src) == UNSPEC_VOLATILE
+ && (XINT (src, 1) == VUNSPEC_LL
+ || XINT (src, 1) == VUNSPEC_LAX))
+ return true;
+ }
return false;
}
@@ -15440,6 +15467,17 @@ arm_reload_in_hi (rtx *operands)
else
/* The slot is out of range, or was dressed up in a SUBREG. */
base = reg_equiv_address (REGNO (ref));
+
+ /* PR 62554: If there is no equivalent memory location then just move
+ the value as an SImode register move. This happens when the target
+ architecture variant does not have an HImode register move. */
+ if (base == NULL)
+ {
+ gcc_assert (REG_P (operands[0]));
+ emit_insn (gen_movsi (gen_rtx_SUBREG (SImode, operands[0], 0),
+ gen_rtx_SUBREG (SImode, ref, 0)));
+ return;
+ }
}
else
base = find_replacement (&XEXP (ref, 0));
@@ -15557,6 +15595,30 @@ arm_reload_out_hi (rtx *operands)
else
/* The slot is out of range, or was dressed up in a SUBREG. */
base = reg_equiv_address (REGNO (ref));
+
+ /* PR 62254: If there is no equivalent memory location then just move
+ the value as an SImode register move. This happens when the target
+ architecture variant does not have an HImode register move. */
+ if (base == NULL)
+ {
+ gcc_assert (REG_P (outval) || SUBREG_P (outval));
+
+ if (REG_P (outval))
+ {
+ emit_insn (gen_movsi (gen_rtx_SUBREG (SImode, ref, 0),
+ gen_rtx_SUBREG (SImode, outval, 0)));
+ }
+ else /* SUBREG_P (outval) */
+ {
+ if (GET_MODE (SUBREG_REG (outval)) == SImode)
+ emit_insn (gen_movsi (gen_rtx_SUBREG (SImode, ref, 0),
+ SUBREG_REG (outval)));
+ else
+ /* FIXME: Handle other cases ? */
+ gcc_unreachable ();
+ }
+ return;
+ }
}
else
base = find_replacement (&XEXP (ref, 0));
@@ -19619,6 +19681,7 @@ output_return_instruction (rtx operand, bool really_return, bool reverse,
break;
case ARM_FT_INTERWORKED:
+ gcc_assert (arm_arch5 || arm_arch4t);
sprintf (instr, "bx%s\t%%|lr", conditional);
break;
diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h
index d755b72..ad123dd 100644
--- a/gcc/config/arm/arm.h
+++ b/gcc/config/arm/arm.h
@@ -253,6 +253,10 @@ extern void (*arm_lang_output_object_attributes_hook)(void);
/* Nonzero if this chip supports ldrex and strex */
#define TARGET_HAVE_LDREX ((arm_arch6 && TARGET_ARM) || arm_arch7)
+/* Nonzero if this chip supports LPAE. */
+#define TARGET_HAVE_LPAE \
+ (arm_arch7 && ARM_FSET_HAS_CPU1 (insn_flags, FL_FOR_ARCH7VE))
+
/* Nonzero if this chip supports ldrex{bh} and strex{bh}. */
#define TARGET_HAVE_LDREXBH ((arm_arch6k && TARGET_ARM) || arm_arch7)
@@ -2033,7 +2037,8 @@ extern int making_const_table;
"\t.syntax divided\n")
#undef ASM_APP_OFF
-#define ASM_APP_OFF "\t.syntax unified\n"
+#define ASM_APP_OFF (TARGET_ARM ? "\t.arm\n\t.syntax unified\n" : \
+ "\t.thumb\n\t.syntax unified\n")
/* Output a push or a pop instruction (only used when profiling).
We can't push STATIC_CHAIN_REGNUM (r12) directly with Thumb-1. We know
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md
index e67239deb..47171b9 100644
--- a/gcc/config/arm/arm.md
+++ b/gcc/config/arm/arm.md
@@ -883,8 +883,8 @@
(define_insn "*subsi3_carryin_const"
[(set (match_operand:SI 0 "s_register_operand" "=r")
- (minus:SI (plus:SI (match_operand:SI 1 "reg_or_int_operand" "r")
- (match_operand:SI 2 "arm_not_operand" "K"))
+ (minus:SI (plus:SI (match_operand:SI 1 "s_register_operand" "r")
+ (match_operand:SI 2 "arm_not_immediate_operand" "K"))
(ltu:SI (reg:CC_C CC_REGNUM) (const_int 0))))]
"TARGET_32BIT"
"sbc\\t%0, %1, #%B2"
diff --git a/gcc/config/arm/arm1020e.md b/gcc/config/arm/arm1020e.md
index 7cdab57..84a300d 100644
--- a/gcc/config/arm/arm1020e.md
+++ b/gcc/config/arm/arm1020e.md
@@ -246,13 +246,14 @@
(eq_attr "type" "branch"))
"1020a_e")
-;; The latency for a call is not predictable. Therefore, we use 32 as
-;; roughly equivalent to positive infinity.
+;; The latency for a call is not predictable. Therefore, we model as blocking
+;; execution for a number of cycles but we can't do anything more accurate
+;; than that.
(define_insn_reservation "1020call_op" 32
(and (eq_attr "tune" "arm1020e,arm1022e")
(eq_attr "type" "call"))
- "1020a_e*32")
+ "1020a_e*4")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; VFP
@@ -300,12 +301,12 @@
(define_insn_reservation "v10_fdivs" 18
(and (eq_attr "vfp10" "yes")
(eq_attr "type" "fdivs, fsqrts"))
- "1020a_e+v10_ds*14")
+ "1020a_e+v10_ds*4")
(define_insn_reservation "v10_fdivd" 32
(and (eq_attr "vfp10" "yes")
(eq_attr "type" "fdivd, fsqrtd"))
- "1020a_e+v10_fmac+v10_ds*28")
+ "1020a_e+v10_fmac+v10_ds*4")
(define_insn_reservation "v10_floads" 4
(and (eq_attr "vfp10" "yes")
diff --git a/gcc/config/arm/arm_neon.h b/gcc/config/arm/arm_neon.h
index 94bbef5..07503d7 100644
--- a/gcc/config/arm/arm_neon.h
+++ b/gcc/config/arm/arm_neon.h
@@ -27,6 +27,10 @@
#ifndef _GCC_ARM_NEON_H
#define _GCC_ARM_NEON_H 1
+#ifndef __ARM_FP
+#error "NEON intrinsics not available with the soft-float ABI. Please use -mfloat-abi=softp or -mfloat-abi=hard"
+#else
+
#pragma GCC push_options
#pragma GCC target ("fpu=neon")
@@ -14833,3 +14837,4 @@ vmull_high_p64 (poly64x2_t __a, poly64x2_t __b)
#pragma GCC pop_options
#endif
+#endif
diff --git a/gcc/config/arm/bpabi.h b/gcc/config/arm/bpabi.h
index 82128ef..5d6c4ed 100644
--- a/gcc/config/arm/bpabi.h
+++ b/gcc/config/arm/bpabi.h
@@ -68,6 +68,7 @@
|mcpu=cortex-a15.cortex-a7 \
|mcpu=cortex-a17.cortex-a7 \
|mcpu=marvell-pj4 \
+ |mcpu=cortex-a32 \
|mcpu=cortex-a35 \
|mcpu=cortex-a53 \
|mcpu=cortex-a57 \
diff --git a/gcc/config/arm/driver-arm.c b/gcc/config/arm/driver-arm.c
index 466743b..95dc9d5 100644
--- a/gcc/config/arm/driver-arm.c
+++ b/gcc/config/arm/driver-arm.c
@@ -128,12 +128,11 @@ host_detect_local_cpu (int argc, const char **argv)
}
}
- fclose (f);
-
- if (val == NULL)
- goto not_found;
-
- return concat ("-m", argv[0], "=", val, NULL);
+ if (val)
+ {
+ fclose (f);
+ return concat ("-m", argv[0], "=", val, NULL);
+ }
not_found:
{
diff --git a/gcc/config/arm/exynos-m1.md b/gcc/config/arm/exynos-m1.md
index 2f52b22..318b151 100644
--- a/gcc/config/arm/exynos-m1.md
+++ b/gcc/config/arm/exynos-m1.md
@@ -248,10 +248,6 @@
(eq_attr "type" "neon_load4_all_lanes, neon_load4_all_lanes_q")
(const_string "neon_load4_all")
- (eq_attr "type" "f_stores, f_stored,\
- neon_stp, neon_stp_q")
- (const_string "neon_store")
-
(eq_attr "type" "neon_store1_1reg, neon_store1_1reg_q")
(const_string "neon_store1_1")
@@ -730,8 +726,14 @@
(define_insn_reservation
"exynos_m1_neon_store" 1
(and (eq_attr "tune" "exynosm1")
- (eq_attr "exynos_m1_neon_type" "neon_store"))
- "(em1_fst, em1_st)")
+ (eq_attr "type" "f_stores, f_stored, neon_stp"))
+ "em1_sfst")
+
+(define_insn_reservation
+ "exynos_m1_neon_store_q" 3
+ (and (eq_attr "tune" "exynosm1")
+ (eq_attr "type" "neon_stp_q"))
+ "(em1_sfst * 2)")
(define_insn_reservation
"exynos_m1_neon_store1_1" 1
@@ -761,7 +763,7 @@
"exynos_m1_neon_store1_one" 7
(and (eq_attr "tune" "exynosm1")
(eq_attr "exynos_m1_neon_type" "neon_store1_one"))
- "(em1_fst, em1_st)")
+ "em1_sfst")
(define_insn_reservation
"exynos_m1_neon_store2" 7
@@ -892,7 +894,9 @@
;; Pre-decrement and post-increment addressing modes update the register quickly.
;; TODO: figure out how to tell the addressing mode register from the loaded one.
-(define_bypass 1 "exynos_m1_store*" "exynos_m1_store*")
+(define_bypass 1 "exynos_m1_store*, exynos_m1_neon_store*"
+ "exynos_m1_store*, exynos_m1_neon_store*,
+ exynos_m1_load*, exynos_m1_neon_load*")
;; MLAs can feed other MLAs quickly.
(define_bypass 1 "exynos_m1_mla*" "exynos_m1_mla*")
@@ -908,7 +912,6 @@
(define_bypass 5 "exynos_m1_neon_fp_mla, exynos_m1_neon_fp_step"
"exynos_m1_neon_fp_add, exynos_m1_neon_fp_mul,\
exynos_m1_neon_fp_mla, exynos_m1_neon_fp_step")
-
(define_bypass 3 "exynos_m1_fp_add"
"exynos_m1_fp_add, exynos_m1_fp_mul, exynos_m1_fp_mac")
(define_bypass 3 "exynos_m1_neon_fp_add"
@@ -947,6 +950,11 @@
"exynos_m1_crypto_simple, exynos_m1_crypto_complex,\
exynos_m1_crypto_poly*")
+;; AES{D,E}/AESMC pairs can feed each other instantly.
+(define_bypass 0 "exynos_m1_crypto_simple"
+ "exynos_m1_crypto_simple"
+ "aarch_crypto_can_dual_issue")
+
;; Predicted branches take no time, but mispredicted ones take forever anyway.
(define_bypass 1 "exynos_m1_*"
"exynos_m1_call, exynos_m1_branch")
diff --git a/gcc/config/arm/linux-elf.h b/gcc/config/arm/linux-elf.h
index 472141d..a94bd2d 100644
--- a/gcc/config/arm/linux-elf.h
+++ b/gcc/config/arm/linux-elf.h
@@ -85,17 +85,6 @@
} \
while (0)
-/* This is how we tell the assembler that two symbols have the same value. */
-#define ASM_OUTPUT_DEF(FILE, NAME1, NAME2) \
- do \
- { \
- assemble_name (FILE, NAME1); \
- fputs (" = ", FILE); \
- assemble_name (FILE, NAME2); \
- fputc ('\n', FILE); \
- } \
- while (0)
-
#undef FPUTYPE_DEFAULT
#define FPUTYPE_DEFAULT "vfp"
diff --git a/gcc/config/arm/sync.md b/gcc/config/arm/sync.md
index 6dd2dc3..0589e4d 100644
--- a/gcc/config/arm/sync.md
+++ b/gcc/config/arm/sync.md
@@ -96,32 +96,62 @@
[(set_attr "predicable" "yes")
(set_attr "predicable_short_it" "no")])
-;; Note that ldrd and vldr are *not* guaranteed to be single-copy atomic,
-;; even for a 64-bit aligned address. Instead we use a ldrexd unparied
-;; with a store.
+;; An LDRD instruction usable by the atomic_loaddi expander on LPAE targets
+
+(define_insn "arm_atomic_loaddi2_ldrd"
+ [(set (match_operand:DI 0 "register_operand" "=r")
+ (unspec_volatile:DI
+ [(match_operand:DI 1 "arm_sync_memory_operand" "Q")]
+ VUNSPEC_LDRD_ATOMIC))]
+ "ARM_DOUBLEWORD_ALIGN && TARGET_HAVE_LPAE"
+ "ldrd%?\t%0, %H0, %C1"
+ [(set_attr "predicable" "yes")
+ (set_attr "predicable_short_it" "no")])
+
+;; There are three ways to expand this depending on the architecture
+;; features available. As for the barriers, a load needs a barrier
+;; after it on all non-relaxed memory models except when the load
+;; has acquire semantics (for ARMv8-A).
+
(define_expand "atomic_loaddi"
[(match_operand:DI 0 "s_register_operand") ;; val out
(match_operand:DI 1 "mem_noofs_operand") ;; memory
(match_operand:SI 2 "const_int_operand")] ;; model
- "TARGET_HAVE_LDREXD && ARM_DOUBLEWORD_ALIGN"
+ "(TARGET_HAVE_LDREXD || TARGET_HAVE_LPAE || TARGET_HAVE_LDACQ)
+ && ARM_DOUBLEWORD_ALIGN"
{
- enum memmodel model = memmodel_from_int (INTVAL (operands[2]));
- expand_mem_thread_fence (model);
- emit_insn (gen_atomic_loaddi_1 (operands[0], operands[1]));
- if (is_mm_seq_cst (model))
+ memmodel model = memmodel_from_int (INTVAL (operands[2]));
+
+ /* For ARMv8-A we can use an LDAEXD to atomically load two 32-bit registers
+ when acquire or stronger semantics are needed. When the relaxed model is
+ used this can be relaxed to a normal LDRD. */
+ if (TARGET_HAVE_LDACQ)
+ {
+ if (is_mm_relaxed (model))
+ emit_insn (gen_arm_atomic_loaddi2_ldrd (operands[0], operands[1]));
+ else
+ emit_insn (gen_arm_load_acquire_exclusivedi (operands[0], operands[1]));
+
+ DONE;
+ }
+
+ /* On LPAE targets LDRD and STRD accesses to 64-bit aligned
+ locations are 64-bit single-copy atomic. We still need barriers in the
+ appropriate places to implement the ordering constraints. */
+ if (TARGET_HAVE_LPAE)
+ emit_insn (gen_arm_atomic_loaddi2_ldrd (operands[0], operands[1]));
+ else
+ emit_insn (gen_arm_load_exclusivedi (operands[0], operands[1]));
+
+
+ /* All non-relaxed models need a barrier after the load when load-acquire
+ instructions are not available. */
+ if (!is_mm_relaxed (model))
expand_mem_thread_fence (model);
+
DONE;
})
-(define_insn "atomic_loaddi_1"
- [(set (match_operand:DI 0 "s_register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "mem_noofs_operand" "Ua")]
- UNSPEC_LL))]
- "TARGET_HAVE_LDREXD && ARM_DOUBLEWORD_ALIGN"
- "ldrexd%?\t%0, %H0, %C1"
- [(set_attr "predicable" "yes")
- (set_attr "predicable_short_it" "no")])
-
(define_expand "atomic_compare_and_swap<mode>"
[(match_operand:SI 0 "s_register_operand" "") ;; bool out
(match_operand:QHSD 1 "s_register_operand" "") ;; val out
diff --git a/gcc/config/arm/t-aprofile b/gcc/config/arm/t-aprofile
index 6095706..b0ecc2f 100644
--- a/gcc/config/arm/t-aprofile
+++ b/gcc/config/arm/t-aprofile
@@ -86,6 +86,7 @@ MULTILIB_MATCHES += march?armv7ve=mcpu?cortex-a12
MULTILIB_MATCHES += march?armv7ve=mcpu?cortex-a17
MULTILIB_MATCHES += march?armv7ve=mcpu?cortex-a15.cortex-a7
MULTILIB_MATCHES += march?armv7ve=mcpu?cortex-a17.cortex-a7
+MULTILIB_MATCHES += march?armv8-a=mcpu?cortex-a32
MULTILIB_MATCHES += march?armv8-a=mcpu?cortex-a35
MULTILIB_MATCHES += march?armv8-a=mcpu?cortex-a53
MULTILIB_MATCHES += march?armv8-a=mcpu?cortex-a57
diff --git a/gcc/config/arm/thumb2.md b/gcc/config/arm/thumb2.md
index 9925365..ab08288 100644
--- a/gcc/config/arm/thumb2.md
+++ b/gcc/config/arm/thumb2.md
@@ -1550,7 +1550,8 @@
(match_operand 5 "" "")
(match_operand 6 "" "")))]
"TARGET_THUMB2
- && (INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) < 32)"
+ && (INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) < 32)
+ && peep2_reg_dead_p (2, operands[0])"
[(parallel [(set (match_dup 0)
(compare:CC_NOOV (ashift:SI (match_dup 1) (match_dup 2))
(const_int 0)))
@@ -1578,7 +1579,8 @@
(match_operand 5 "" "")
(match_operand 6 "" "")))]
"TARGET_THUMB2
- && (INTVAL (operands[2]) > 0 && INTVAL (operands[2]) < 32)"
+ && (INTVAL (operands[2]) > 0 && INTVAL (operands[2]) < 32)
+ && peep2_reg_dead_p (2, operands[0])"
[(parallel [(set (match_dup 0)
(compare:CC_NOOV (ashift:SI (match_dup 1) (match_dup 2))
(const_int 0)))
diff --git a/gcc/config/arm/unspecs.md b/gcc/config/arm/unspecs.md
index c17550c..5744c62 100644
--- a/gcc/config/arm/unspecs.md
+++ b/gcc/config/arm/unspecs.md
@@ -139,6 +139,7 @@
VUNSPEC_ATOMIC_XCHG ; Represent an atomic exchange.
VUNSPEC_ATOMIC_OP ; Represent an atomic operation.
VUNSPEC_LL ; Represent a load-register-exclusive.
+ VUNSPEC_LDRD_ATOMIC ; Represent an LDRD used as an atomic DImode load.
VUNSPEC_SC ; Represent a store-register-exclusive.
VUNSPEC_LAX ; Represent a load-register-acquire-exclusive.
VUNSPEC_SLX ; Represent a store-register-release-exclusive.
diff --git a/gcc/config/arm/vxworks.h b/gcc/config/arm/vxworks.h
index 4d846333..5b97fe8 100644
--- a/gcc/config/arm/vxworks.h
+++ b/gcc/config/arm/vxworks.h
@@ -112,3 +112,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#undef TARGET_DEFAULT_WORD_RELOCATIONS
#define TARGET_DEFAULT_WORD_RELOCATIONS 1
+
+/* Define this to be nonzero if static stack checking is supported. */
+#define STACK_CHECK_STATIC_BUILTIN 1
+
+/* This platform supports the probing method of stack checking (RTP mode).
+ 8K is reserved in the stack to propagate exceptions in case of overflow. */
+#define STACK_CHECK_PROTECT 8192
diff --git a/gcc/config/avr/avr.md b/gcc/config/avr/avr.md
index ff26f2e..c988446 100644
--- a/gcc/config/avr/avr.md
+++ b/gcc/config/avr/avr.md
@@ -3351,7 +3351,7 @@
(define_expand "rotl<mode>3"
[(parallel [(set (match_operand:HISI 0 "register_operand" "")
(rotate:HISI (match_operand:HISI 1 "register_operand" "")
- (match_operand:VOID 2 "const_int_operand" "")))
+ (match_operand:HISI 2 "const_int_operand" "")))
(clobber (match_dup 3))])]
""
{
diff --git a/gcc/config/c6x/t-c6x b/gcc/config/c6x/t-c6x
index eea1094..374b177 100644
--- a/gcc/config/c6x/t-c6x
+++ b/gcc/config/c6x/t-c6x
@@ -23,6 +23,8 @@ MD_INCLUDES= $(srcdir)/config/c6x/constraints.md \
$(srcdir)/config/c6x/c6x-mult.md \
$(srcdir)/config/c6x/c6x-sched.md
+OPTIONS_H_EXTRA += $(srcdir)/config/c6x/c6x-isas.def
+
s-config s-conditions s-flags s-codes s-constants s-emit s-recog s-preds \
s-opinit s-extract s-peep s-attr s-attrtab s-output: $(MD_INCLUDES)
diff --git a/gcc/config/darwin.h b/gcc/config/darwin.h
index 9f686d3..c9981b8 100644
--- a/gcc/config/darwin.h
+++ b/gcc/config/darwin.h
@@ -177,7 +177,7 @@ extern GTY(()) int darwin_ms_struct;
%{o*}%{!o:-o a.out} \
%{!nostdlib:%{!nostartfiles:%S}} \
%{L*} %(link_libgcc) %o %{fprofile-arcs|fprofile-generate*|coverage:-lgcov} \
- %{fopenacc|fopenmp|ftree-parallelize-loops=*: \
+ %{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1): \
%{static|static-libgcc|static-libstdc++|static-libgfortran: libgomp.a%s; : -lgomp } } \
%{fgnu-tm: \
%{static|static-libgcc|static-libstdc++|static-libgfortran: libitm.a%s; : -litm } } \
diff --git a/gcc/config/epiphany/epiphany.md b/gcc/config/epiphany/epiphany.md
index 15a6151..18f9661 100644
--- a/gcc/config/epiphany/epiphany.md
+++ b/gcc/config/epiphany/epiphany.md
@@ -2026,8 +2026,8 @@
{
operands[10] = simplify_gen_subreg (<WMODE:MODE>mode, operands[3],
<WMODE2:MODE>mode, 0);
- replace_rtx (operands[2], operands[9], operands[3]);
- replace_rtx (operands[2], operands[0], operands[10]);
+ replace_rtx (operands[2], operands[9], operands[3], true);
+ replace_rtx (operands[2], operands[0], operands[10], true);
gcc_assert (!reg_overlap_mentioned_p (operands[0], operands[2]));
})
diff --git a/gcc/config/ft32/ft32.md b/gcc/config/ft32/ft32.md
index e8029af..35b38a8 100644
--- a/gcc/config/ft32/ft32.md
+++ b/gcc/config/ft32/ft32.md
@@ -101,7 +101,7 @@
(div:SI
(match_operand:SI 1 "register_operand" "r,r")
(match_operand:SI 2 "ft32_rimm_operand" "r,KA")))]
- ""
+ "!TARGET_NODIV"
"div.l %0,%1,%2")
(define_insn "modsi3"
@@ -109,7 +109,7 @@
(mod:SI
(match_operand:SI 1 "register_operand" "r,r")
(match_operand:SI 2 "ft32_rimm_operand" "r,KA")))]
- ""
+ "!TARGET_NODIV"
"mod.l %0,%1,%2")
(define_insn "udivsi3"
@@ -117,7 +117,7 @@
(udiv:SI
(match_operand:SI 1 "register_operand" "r,r")
(match_operand:SI 2 "ft32_rimm_operand" "r,KA")))]
- ""
+ "!TARGET_NODIV"
"udiv.l %0,%1,%2")
(define_insn "umodsi3"
@@ -125,7 +125,7 @@
(umod:SI
(match_operand:SI 1 "register_operand" "r,r")
(match_operand:SI 2 "register_operand" "r,KA")))]
- ""
+ "!TARGET_NODIV"
"umod.l %0,%1,%2")
(define_insn "extvsi"
diff --git a/gcc/config/ft32/ft32.opt b/gcc/config/ft32/ft32.opt
index e48c72b..20054a2 100644
--- a/gcc/config/ft32/ft32.opt
+++ b/gcc/config/ft32/ft32.opt
@@ -25,3 +25,7 @@ target the software simulator.
mlra
Target Report Var(ft32_lra_flag) Init(0) Save
Use LRA instead of reload.
+
+mnodiv
+Target Report Mask(NODIV)
+Avoid use of the DIV and MOD instructions
diff --git a/gcc/config/gnu-user.h b/gcc/config/gnu-user.h
index 2f1bbcc..b0bf40a 100644
--- a/gcc/config/gnu-user.h
+++ b/gcc/config/gnu-user.h
@@ -35,6 +35,14 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#undef ASM_APP_OFF
#define ASM_APP_OFF "#NO_APP\n"
+#if ENABLE_OFFLOADING == 1
+#define CRTOFFLOADBEGIN "%{fopenacc|fopenmp:crtoffloadbegin%O%s}"
+#define CRTOFFLOADEND "%{fopenacc|fopenmp:crtoffloadend%O%s}"
+#else
+#define CRTOFFLOADBEGIN ""
+#define CRTOFFLOADEND ""
+#endif
+
/* Provide a STARTFILE_SPEC appropriate for GNU userspace. Here we add
the GNU userspace magical crtbegin.o file (see crtstuff.c) which
provides part of the support for getting C++ file-scope static
@@ -49,14 +57,16 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
%{" NO_PIE_SPEC ":crtbegin.o%s}} \
%{fvtable-verify=none:%s; \
fvtable-verify=preinit:vtv_start_preinit.o%s; \
- fvtable-verify=std:vtv_start.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} \
%{fvtable-verify=none:%s; \
fvtable-verify=preinit:vtv_start_preinit.o%s; \
- fvtable-verify=std:vtv_start.o%s}"
+ fvtable-verify=std:vtv_start.o%s} \
+ " CRTOFFLOADBEGIN
#endif
#undef STARTFILE_SPEC
#define STARTFILE_SPEC GNU_USER_TARGET_STARTFILE_SPEC
@@ -73,13 +83,15 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
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"
+ %{" NO_PIE_SPEC ":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"
+ %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s \
+ " CRTOFFLOADEND
#endif
#undef ENDFILE_SPEC
#define ENDFILE_SPEC GNU_USER_TARGET_ENDFILE_SPEC
diff --git a/gcc/config/gnu.h b/gcc/config/gnu.h
index 1d98ec8..1dbecda 100644
--- a/gcc/config/gnu.h
+++ b/gcc/config/gnu.h
@@ -19,14 +19,6 @@ You should have received a copy of the GNU General Public License
along with GCC. If not, see <http://www.gnu.org/licenses/>.
*/
-/* Provide GCC options for standard feature-test macros. */
-#undef CPP_SPEC
-#define CPP_SPEC "%{posix:-D_POSIX_SOURCE}"
-
-/* Default C library spec. */
-#undef LIB_SPEC
-#define LIB_SPEC "%{pthread:-lpthread} %{pg|p|profile:-lc_p;:-lc}"
-
#undef GNU_USER_TARGET_OS_CPP_BUILTINS
#define GNU_USER_TARGET_OS_CPP_BUILTINS() \
do { \
diff --git a/gcc/config/i386/cygming.h b/gcc/config/i386/cygming.h
index 7cd8ac5..9da4733 100644
--- a/gcc/config/i386/cygming.h
+++ b/gcc/config/i386/cygming.h
@@ -39,6 +39,11 @@ along with GCC; see the file COPYING3. If not see
#undef MAX_STACK_ALIGNMENT
#define MAX_STACK_ALIGNMENT (TARGET_SEH ? 128 : MAX_OFILE_ALIGNMENT)
+/* 32-bit Windows aligns the stack on a 4-byte boundary but SSE instructions
+ may require 16-byte alignment. */
+#undef STACK_REALIGN_DEFAULT
+#define STACK_REALIGN_DEFAULT TARGET_SSE
+
/* Support hooks for SEH. */
#undef TARGET_ASM_UNWIND_EMIT
#define TARGET_ASM_UNWIND_EMIT i386_pe_seh_unwind_emit
diff --git a/gcc/config/i386/gnu.h b/gcc/config/i386/gnu.h
index c726d31..9d2f94f 100644
--- a/gcc/config/i386/gnu.h
+++ b/gcc/config/i386/gnu.h
@@ -27,11 +27,11 @@ along with GCC. If not, see <http://www.gnu.org/licenses/>.
#undef STARTFILE_SPEC
#if defined HAVE_LD_PIE
#define STARTFILE_SPEC \
- "%{!shared: %{pg|p|profile:gcrt0.o%s;pie:Scrt1.o%s;static:crt0.o%s;:crt1.o%s}} \
+ "%{!shared: %{pg|p|profile:%{static:gcrt0.o%s;:gcrt1.o%s};pie:Scrt1.o%s;static:crt0.o%s;:crt1.o%s}} \
crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}"
#else
#define STARTFILE_SPEC \
- "%{!shared: %{pg|p|profile:gcrt0.o%s;static:crt0.o%s;:crt1.o%s}} \
+ "%{!shared: %{pg|p|profile:%{static:gcrt0.o%s;:gcrt1.o%s};static:crt0.o%s;:crt1.o%s}} \
crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}"
#endif
diff --git a/gcc/config/i386/i386-c.c b/gcc/config/i386/i386-c.c
index ea0c5df..f93a09d 100644
--- a/gcc/config/i386/i386-c.c
+++ b/gcc/config/i386/i386-c.c
@@ -591,7 +591,6 @@ ix86_target_macros (void)
cpp_define (parse_in, "__SEG_FS");
cpp_define (parse_in, "__SEG_GS");
- cpp_define (parse_in, "__SEG_TLS");
}
@@ -608,7 +607,6 @@ ix86_register_pragmas (void)
c_register_addr_space ("__seg_fs", ADDR_SPACE_SEG_FS);
c_register_addr_space ("__seg_gs", ADDR_SPACE_SEG_GS);
- c_register_addr_space ("__seg_tls", ADDR_SPACE_SEG_TLS);
#ifdef REGISTER_SUBTARGET_PRAGMAS
REGISTER_SUBTARGET_PRAGMAS ();
diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h
index 252bb19..e4652f3 100644
--- a/gcc/config/i386/i386-protos.h
+++ b/gcc/config/i386/i386-protos.h
@@ -332,4 +332,3 @@ struct ix86_first_cycle_multipass_data_
const addr_space_t ADDR_SPACE_SEG_FS = 1;
const addr_space_t ADDR_SPACE_SEG_GS = 2;
-const addr_space_t ADDR_SPACE_SEG_TLS = 3;
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index a1c87ab..1fa007e 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -1350,11 +1350,11 @@ struct processor_costs znver1_cost = {
COSTS_N_INSNS (1), /* cost of a lea instruction. */
COSTS_N_INSNS (1), /* variable shift costs. */
COSTS_N_INSNS (1), /* constant shift costs. */
- {COSTS_N_INSNS (4), /* cost of starting multiply for QI. */
- COSTS_N_INSNS (4), /* HI. */
- COSTS_N_INSNS (4), /* SI. */
- COSTS_N_INSNS (6), /* DI. */
- COSTS_N_INSNS (6)}, /* other. */
+ {COSTS_N_INSNS (3), /* cost of starting multiply for QI. */
+ COSTS_N_INSNS (3), /* HI. */
+ COSTS_N_INSNS (3), /* SI. */
+ COSTS_N_INSNS (4), /* DI. */
+ COSTS_N_INSNS (4)}, /* other. */
0, /* cost of multiply per each bit
set. */
{COSTS_N_INSNS (19), /* cost of a divide/mod for QI. */
@@ -2662,9 +2662,9 @@ static const struct ptt processor_target_table[PROCESSOR_max] =
{"bdver2", &bdver2_cost, 16, 10, 16, 7, 11},
{"bdver3", &bdver3_cost, 16, 10, 16, 7, 11},
{"bdver4", &bdver4_cost, 16, 10, 16, 7, 11},
- {"znver1", &znver1_cost, 16, 10, 16, 7, 11},
{"btver1", &btver1_cost, 16, 10, 16, 7, 11},
- {"btver2", &btver2_cost, 16, 10, 16, 7, 11}
+ {"btver2", &btver2_cost, 16, 10, 16, 7, 11},
+ {"znver1", &znver1_cost, 16, 10, 16, 7, 11}
};
static unsigned int
@@ -3272,8 +3272,9 @@ scalar_chain::make_vector_copies (unsigned regno)
gen_rtx_SUBREG (SImode, reg, 4));
emit_move_insn (vreg, tmp);
}
- emit_conversion_insns (get_insns (), insn);
+ rtx_insn *seq = get_insns ();
end_sequence ();
+ emit_conversion_insns (seq, insn);
if (dump_file)
fprintf (dump_file,
@@ -3348,8 +3349,9 @@ scalar_chain::convert_reg (unsigned regno)
emit_move_insn (gen_rtx_SUBREG (SImode, scopy, 4),
adjust_address (tmp, SImode, 4));
}
- emit_conversion_insns (get_insns (), insn);
+ rtx_insn *seq = get_insns ();
end_sequence ();
+ emit_conversion_insns (seq, insn);
if (dump_file)
fprintf (dump_file,
@@ -3370,8 +3372,11 @@ scalar_chain::convert_reg (unsigned regno)
bitmap_clear_bit (conv, DF_REF_INSN_UID (ref));
}
}
- else if (NONDEBUG_INSN_P (DF_REF_INSN (ref)))
+ /* Skip debug insns and uninitialized uses. */
+ else if (DF_REF_CHAIN (ref)
+ && NONDEBUG_INSN_P (DF_REF_INSN (ref)))
{
+ gcc_assert (scopy);
replace_rtx (DF_REF_INSN (ref), reg, scopy);
df_insn_rescan (DF_REF_INSN (ref));
}
@@ -3379,9 +3384,10 @@ scalar_chain::convert_reg (unsigned regno)
BITMAP_FREE (conv);
}
-/* Convert operand OP in INSN. All register uses
- are converted during registers conversion.
- Therefore we should just handle memory operands. */
+/* Convert operand OP in INSN. We should handle
+ memory operands and uninitialized registers.
+ All other register uses are converted during
+ registers conversion. */
void
scalar_chain::convert_op (rtx *op, rtx_insn *insn)
@@ -3404,6 +3410,20 @@ scalar_chain::convert_op (rtx *op, rtx_insn *insn)
fprintf (dump_file, " Preloading operand for insn %d into r%d\n",
INSN_UID (insn), REGNO (tmp));
}
+ else if (REG_P (*op))
+ {
+ /* We may have not converted register usage in case
+ this register has no definition. Otherwise it
+ should be converted in convert_reg. */
+ df_ref ref;
+ FOR_EACH_INSN_USE (ref, insn)
+ if (DF_REF_REGNO (ref) == REGNO (*op))
+ {
+ gcc_assert (!DF_REF_CHAIN (ref));
+ break;
+ }
+ *op = gen_rtx_SUBREG (V2DImode, *op, 0);
+ }
else
{
gcc_assert (SUBREG_P (*op));
@@ -3448,6 +3468,8 @@ scalar_chain::convert_insn (rtx_insn *insn)
break;
case REG:
+ if (!MEM_P (dst))
+ convert_op (&src, insn);
break;
case SUBREG:
@@ -7794,6 +7816,10 @@ type_natural_mode (const_tree type, const CUMULATIVE_ARGS *cum,
{
machine_mode innermode = TYPE_MODE (TREE_TYPE (type));
+ /* There are no XFmode vector modes. */
+ if (innermode == XFmode)
+ return mode;
+
if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
mode = MIN_MODE_VECTOR_FLOAT;
else
@@ -11099,18 +11125,7 @@ output_set_got (rtx dest, rtx label)
xops[1] = gen_rtx_SYMBOL_REF (Pmode, GOT_SYMBOL_NAME);
- if (!flag_pic)
- {
- if (TARGET_MACHO)
- /* We don't need a pic base, we're not producing pic. */
- gcc_unreachable ();
-
- xops[2] = gen_rtx_LABEL_REF (Pmode, label ? label : gen_label_rtx ());
- output_asm_insn ("mov%z0\t{%2, %0|%0, %2}", xops);
- targetm.asm_out.internal_label (asm_out_file, "L",
- CODE_LABEL_NUMBER (XEXP (xops[2], 0)));
- }
- else
+ if (flag_pic)
{
char name[32];
get_pc_thunk_name (name, REGNO (dest));
@@ -11135,6 +11150,17 @@ output_set_got (rtx dest, rtx label)
CODE_LABEL_NUMBER (label));
#endif
}
+ else
+ {
+ if (TARGET_MACHO)
+ /* We don't need a pic base, we're not producing pic. */
+ gcc_unreachable ();
+
+ xops[2] = gen_rtx_LABEL_REF (Pmode, label ? label : gen_label_rtx ());
+ output_asm_insn ("mov%z0\t{%2, %0|%0, %2}", xops);
+ targetm.asm_out.internal_label (asm_out_file, "L",
+ CODE_LABEL_NUMBER (XEXP (xops[2], 0)));
+ }
if (!TARGET_MACHO)
output_asm_insn ("add%z0\t{%1, %0|%0, %1}", xops);
@@ -11520,6 +11546,7 @@ ix86_compute_frame_layout (struct ix86_frame *frame)
if (ix86_using_red_zone ()
&& crtl->sp_is_unchanging
&& crtl->is_leaf
+ && !ix86_pc_thunk_call_expanded
&& !ix86_current_function_calls_tls_descriptor)
{
frame->red_zone_size = to_allocate;
@@ -13439,9 +13466,11 @@ ix86_expand_epilogue (int style)
rtx sa = EH_RETURN_STACKADJ_RTX;
rtx_insn *insn;
- /* Stack align doesn't work with eh_return. */
- gcc_assert (!stack_realign_drap);
- /* Neither does regparm nested functions. */
+ /* %ecx can't be used for both DRAP register and eh_return. */
+ if (crtl->drap_reg)
+ gcc_assert (REGNO (crtl->drap_reg) != CX_REG);
+
+ /* regparm nested functions don't work with eh_return. */
gcc_assert (!ix86_static_chain_on_stack);
if (frame_pointer_needed)
@@ -17395,8 +17424,6 @@ ix86_print_operand_address_as (FILE *file, rtx addr,
{
const char *string;
- if (as == ADDR_SPACE_SEG_TLS)
- as = DEFAULT_TLS_SEG_REG;
if (as == ADDR_SPACE_SEG_FS)
string = (ASSEMBLER_DIALECT == ASM_ATT ? "%fs:" : "fs:");
else if (as == ADDR_SPACE_SEG_GS)
@@ -26030,9 +26057,9 @@ static enum stringop_alg
decide_alg (HOST_WIDE_INT count, HOST_WIDE_INT expected_size,
unsigned HOST_WIDE_INT min_size, unsigned HOST_WIDE_INT max_size,
bool memset, bool zero_memset, bool have_as,
- int *dynamic_check, bool *noalign)
+ int *dynamic_check, bool *noalign, bool recur)
{
- const struct stringop_algs * algs;
+ const struct stringop_algs *algs;
bool optimize_for_speed;
int max = 0;
const struct processor_costs *cost;
@@ -26066,7 +26093,7 @@ decide_alg (HOST_WIDE_INT count, HOST_WIDE_INT expected_size,
any_alg_usable_p |= usable;
if (candidate != libcall && candidate && usable)
- max = algs->size[i].max;
+ max = algs->size[i].max;
}
/* If expected size is not known but max size is small enough
@@ -26076,7 +26103,7 @@ decide_alg (HOST_WIDE_INT count, HOST_WIDE_INT expected_size,
&& expected_size == -1)
expected_size = min_size / 2 + max_size / 2;
- /* If user specified the algorithm, honnor it if possible. */
+ /* If user specified the algorithm, honor it if possible. */
if (ix86_stringop_alg != no_stringop
&& alg_usable_p (ix86_stringop_alg, memset, have_as))
return ix86_stringop_alg;
@@ -26152,21 +26179,20 @@ decide_alg (HOST_WIDE_INT count, HOST_WIDE_INT expected_size,
|| !alg_usable_p (algs->unknown_size, memset, have_as)))
{
enum stringop_alg alg;
+ HOST_WIDE_INT new_expected_size = (max > 0 ? max : 4096) / 2;
- /* If there aren't any usable algorithms, then recursing on
- smaller sizes isn't going to find anything. Just return the
- simple byte-at-a-time copy loop. */
- if (!any_alg_usable_p)
- {
- /* Pick something reasonable. */
- if (TARGET_INLINE_STRINGOPS_DYNAMICALLY)
- *dynamic_check = 128;
- return loop_1_byte;
- }
- if (max <= 0)
- max = 4096;
- alg = decide_alg (count, max / 2, min_size, max_size, memset,
- zero_memset, have_as, dynamic_check, noalign);
+ /* If there aren't any usable algorithms or if recursing already,
+ then recursing on smaller sizes or same size isn't going to
+ find anything. Just return the simple byte-at-a-time copy loop. */
+ if (!any_alg_usable_p || recur)
+ {
+ /* Pick something reasonable. */
+ if (TARGET_INLINE_STRINGOPS_DYNAMICALLY && !recur)
+ *dynamic_check = 128;
+ return loop_1_byte;
+ }
+ alg = decide_alg (count, new_expected_size, min_size, max_size, memset,
+ zero_memset, have_as, dynamic_check, noalign, true);
gcc_assert (*dynamic_check == -1);
if (TARGET_INLINE_STRINGOPS_DYNAMICALLY)
*dynamic_check = max;
@@ -26427,7 +26453,7 @@ ix86_expand_set_or_movmem (rtx dst, rtx src, rtx count_exp, rtx val_exp,
alg = decide_alg (count, expected_size, min_size, probable_max_size,
issetmem,
issetmem && val_exp == const0_rtx, have_as,
- &dynamic_check, &noalign);
+ &dynamic_check, &noalign, false);
if (alg == libcall)
return false;
gcc_assert (alg != no_stringop);
@@ -27294,14 +27320,17 @@ ix86_output_call_insn (rtx_insn *insn, rtx call_op)
if (SIBLING_CALL_P (insn))
{
- if (direct_p && ix86_nopic_noplt_attribute_p (call_op))
- xasm = "%!jmp\t*%p0@GOTPCREL(%%rip)";
- else if (direct_p)
- xasm = "%!jmp\t%P0";
+ if (direct_p)
+ {
+ if (ix86_nopic_noplt_attribute_p (call_op))
+ xasm = "%!jmp\t{*%p0@GOTPCREL(%%rip)|[QWORD PTR %p0@GOTPCREL[rip]]}";
+ else
+ xasm = "%!jmp\t%P0";
+ }
/* SEH epilogue detection requires the indirect branch case
to include REX.W. */
else if (TARGET_SEH)
- xasm = "%!rex.W jmp %A0";
+ xasm = "%!rex.W jmp\t%A0";
else
xasm = "%!jmp\t%A0";
@@ -27339,10 +27368,13 @@ ix86_output_call_insn (rtx_insn *insn, rtx call_op)
seh_nop_p = true;
}
- if (direct_p && ix86_nopic_noplt_attribute_p (call_op))
- xasm = "%!call\t*%p0@GOTPCREL(%%rip)";
- else if (direct_p)
- xasm = "%!call\t%P0";
+ if (direct_p)
+ {
+ if (ix86_nopic_noplt_attribute_p (call_op))
+ xasm = "%!call\t{*%p0@GOTPCREL(%%rip)|[QWORD PTR %p0@GOTPCREL[rip]]}";
+ else
+ xasm = "%!call\t%P0";
+ }
else
xasm = "%!call\t%A0";
@@ -32416,6 +32448,14 @@ def_builtin (HOST_WIDE_INT mask, const char *name,
{
ix86_builtins_isa[(int) code].isa = mask;
+ /* OPTION_MASK_ISA_AVX512VL has special meaning. Despite of generic case,
+ where any bit set means that built-in is enable, this bit must be *and-ed*
+ with another one. E.g.: OPTION_MASK_ISA_AVX512DQ | OPTION_MASK_ISA_AVX512VL
+ means that *both* cpuid bits must be set for the built-in to be available.
+ Handle this here. */
+ if (mask & ix86_isa_flags & OPTION_MASK_ISA_AVX512VL)
+ mask &= ~OPTION_MASK_ISA_AVX512VL;
+
mask &= ~OPTION_MASK_ISA_64BIT;
if (mask == 0
|| (mask & ix86_isa_flags) != 0
@@ -34081,9 +34121,9 @@ static const struct builtin_description bdesc_args[] =
{ OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512VL, CODE_FOR_avx512vl_permvarv16hi_mask, "__builtin_ia32_permvarhi256_mask", IX86_BUILTIN_VPERMVARHI256_MASK, UNKNOWN, (int) V16HI_FTYPE_V16HI_V16HI_V16HI_UHI },
{ OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512VL, CODE_FOR_avx512vl_permvarv8hi_mask, "__builtin_ia32_permvarhi128_mask", IX86_BUILTIN_VPERMVARHI128_MASK, UNKNOWN, (int) V8HI_FTYPE_V8HI_V8HI_V8HI_UQI },
{ OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512VL, CODE_FOR_avx512vl_vpermt2varv16hi3_mask, "__builtin_ia32_vpermt2varhi256_mask", IX86_BUILTIN_VPERMT2VARHI256, UNKNOWN, (int) V16HI_FTYPE_V16HI_V16HI_V16HI_UHI },
- { OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512VL, CODE_FOR_avx512vl_vpermt2varv16hi3_maskz, "__builtin_ia32_vpermt2varhi256_maskz", IX86_BUILTIN_VPERMT2VARHI256_MASKZ, UNKNOWN, (int) V16HI_FTYPE_V16HI_V16HI_V16HI_UHI },
+ { OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512VL, CODE_FOR_avx512vl_vpermt2varv16hi3_maskz, "__builtin_ia32_vpermt2varhi256_maskz", IX86_BUILTIN_VPERMT2VARHI256_MASKZ, UNKNOWN, (int) V16HI_FTYPE_V16HI_V16HI_V16HI_UHI },
{ OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512VL, CODE_FOR_avx512vl_vpermt2varv8hi3_mask, "__builtin_ia32_vpermt2varhi128_mask", IX86_BUILTIN_VPERMT2VARHI128, UNKNOWN, (int) V8HI_FTYPE_V8HI_V8HI_V8HI_UQI },
- { OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512VL, CODE_FOR_avx512vl_vpermt2varv8hi3_maskz, "__builtin_ia32_vpermt2varhi128_maskz", IX86_BUILTIN_VPERMT2VARHI128_MASKZ, UNKNOWN, (int) V8HI_FTYPE_V8HI_V8HI_V8HI_UQI },
+ { OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512VL, CODE_FOR_avx512vl_vpermt2varv8hi3_maskz, "__builtin_ia32_vpermt2varhi128_maskz", IX86_BUILTIN_VPERMT2VARHI128_MASKZ, UNKNOWN, (int) V8HI_FTYPE_V8HI_V8HI_V8HI_UQI },
{ OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512VL, CODE_FOR_avx512vl_vpermi2varv16hi3_mask, "__builtin_ia32_vpermi2varhi256_mask", IX86_BUILTIN_VPERMI2VARHI256, UNKNOWN, (int) V16HI_FTYPE_V16HI_V16HI_V16HI_UHI },
{ OPTION_MASK_ISA_AVX512BW | OPTION_MASK_ISA_AVX512VL, CODE_FOR_avx512vl_vpermi2varv8hi3_mask, "__builtin_ia32_vpermi2varhi128_mask", IX86_BUILTIN_VPERMI2VARHI128, UNKNOWN, (int) V8HI_FTYPE_V8HI_V8HI_V8HI_UQI },
{ OPTION_MASK_ISA_AVX512VL, CODE_FOR_rcp14v4df_mask, "__builtin_ia32_rcp14pd256_mask", IX86_BUILTIN_RCP14PD256, UNKNOWN, (int) V4DF_FTYPE_V4DF_V4DF_UQI },
@@ -34798,9 +34838,9 @@ static const struct builtin_description bdesc_args[] =
{ OPTION_MASK_ISA_AVX512VBMI | OPTION_MASK_ISA_AVX512VL, CODE_FOR_avx512vl_permvarv32qi_mask, "__builtin_ia32_permvarqi256_mask", IX86_BUILTIN_VPERMVARQI256_MASK, UNKNOWN, (int) V32QI_FTYPE_V32QI_V32QI_V32QI_USI },
{ OPTION_MASK_ISA_AVX512VBMI | OPTION_MASK_ISA_AVX512VL, CODE_FOR_avx512vl_permvarv16qi_mask, "__builtin_ia32_permvarqi128_mask", IX86_BUILTIN_VPERMVARQI128_MASK, UNKNOWN, (int) V16QI_FTYPE_V16QI_V16QI_V16QI_UHI },
{ OPTION_MASK_ISA_AVX512VBMI | OPTION_MASK_ISA_AVX512VL, CODE_FOR_avx512vl_vpermt2varv32qi3_mask, "__builtin_ia32_vpermt2varqi256_mask", IX86_BUILTIN_VPERMT2VARQI256, UNKNOWN, (int) V32QI_FTYPE_V32QI_V32QI_V32QI_USI },
- { OPTION_MASK_ISA_AVX512VBMI | OPTION_MASK_ISA_AVX512VBMI | OPTION_MASK_ISA_AVX512VL, CODE_FOR_avx512vl_vpermt2varv32qi3_maskz, "__builtin_ia32_vpermt2varqi256_maskz", IX86_BUILTIN_VPERMT2VARQI256_MASKZ, UNKNOWN, (int) V32QI_FTYPE_V32QI_V32QI_V32QI_USI },
+ { OPTION_MASK_ISA_AVX512VBMI | OPTION_MASK_ISA_AVX512VL, CODE_FOR_avx512vl_vpermt2varv32qi3_maskz, "__builtin_ia32_vpermt2varqi256_maskz", IX86_BUILTIN_VPERMT2VARQI256_MASKZ, UNKNOWN, (int) V32QI_FTYPE_V32QI_V32QI_V32QI_USI },
{ OPTION_MASK_ISA_AVX512VBMI | OPTION_MASK_ISA_AVX512VL, CODE_FOR_avx512vl_vpermt2varv16qi3_mask, "__builtin_ia32_vpermt2varqi128_mask", IX86_BUILTIN_VPERMT2VARQI128, UNKNOWN, (int) V16QI_FTYPE_V16QI_V16QI_V16QI_UHI },
- { OPTION_MASK_ISA_AVX512VBMI | OPTION_MASK_ISA_AVX512VBMI | OPTION_MASK_ISA_AVX512VL, CODE_FOR_avx512vl_vpermt2varv16qi3_maskz, "__builtin_ia32_vpermt2varqi128_maskz", IX86_BUILTIN_VPERMT2VARQI128_MASKZ, UNKNOWN, (int) V16QI_FTYPE_V16QI_V16QI_V16QI_UHI },
+ { OPTION_MASK_ISA_AVX512VBMI | OPTION_MASK_ISA_AVX512VL, CODE_FOR_avx512vl_vpermt2varv16qi3_maskz, "__builtin_ia32_vpermt2varqi128_maskz", IX86_BUILTIN_VPERMT2VARQI128_MASKZ, UNKNOWN, (int) V16QI_FTYPE_V16QI_V16QI_V16QI_UHI },
{ OPTION_MASK_ISA_AVX512VBMI | OPTION_MASK_ISA_AVX512VL, CODE_FOR_avx512vl_vpermi2varv32qi3_mask, "__builtin_ia32_vpermi2varqi256_mask", IX86_BUILTIN_VPERMI2VARQI256, UNKNOWN, (int) V32QI_FTYPE_V32QI_V32QI_V32QI_USI },
{ OPTION_MASK_ISA_AVX512VBMI | OPTION_MASK_ISA_AVX512VL, CODE_FOR_avx512vl_vpermi2varv16qi3_mask, "__builtin_ia32_vpermi2varqi128_mask", IX86_BUILTIN_VPERMI2VARQI128, UNKNOWN, (int) V16QI_FTYPE_V16QI_V16QI_V16QI_UHI },
};
@@ -46895,7 +46935,12 @@ half:
{
tmp = gen_reg_rtx (mode);
emit_insn (gen_rtx_SET (tmp, gen_rtx_VEC_DUPLICATE (mode, val)));
- emit_insn (gen_blendm (target, tmp, target,
+ /* The avx512*_blendm<mode> expanders have different operand order
+ from VEC_MERGE. In VEC_MERGE, the first input operand is used for
+ elements where the mask is set and second input operand otherwise,
+ in {sse,avx}*_*blend* the first input operand is used for elements
+ where the mask is clear and second input operand otherwise. */
+ emit_insn (gen_blendm (target, target, tmp,
force_reg (mmode,
gen_int_mode (1 << elt, mmode))));
}
@@ -51897,16 +51942,24 @@ ix86_expand_vecop_qihi (enum rtx_code code, rtx dest, rtx op1, rtx op2)
{
/* For SSE2, we used an full interleave, so the desired
results are in the even elements. */
- for (i = 0; i < 64; ++i)
+ for (i = 0; i < d.nelt; ++i)
d.perm[i] = i * 2;
}
else
{
/* For AVX, the interleave used above was not cross-lane. So the
extraction is evens but with the second and third quarter swapped.
- Happily, that is even one insn shorter than even extraction. */
- for (i = 0; i < 64; ++i)
- d.perm[i] = i * 2 + ((i & 24) == 8 ? 16 : (i & 24) == 16 ? -16 : 0);
+ Happily, that is even one insn shorter than even extraction.
+ For AVX512BW we have 4 lanes. We extract evens from within a lane,
+ always first from the first and then from the second source operand,
+ the index bits above the low 4 bits remains the same.
+ Thus, for d.nelt == 32 we want permutation
+ 0,2,4,..14, 32,34,36,..46, 16,18,20,..30, 48,50,52,..62
+ and for d.nelt == 64 we want permutation
+ 0,2,4,..14, 64,66,68,..78, 16,18,20,..30, 80,82,84,..94,
+ 32,34,36,..46, 96,98,100,..110, 48,50,52,..62, 112,114,116,..126. */
+ for (i = 0; i < d.nelt; ++i)
+ d.perm[i] = ((i * 2) & 14) + ((i & 8) ? d.nelt : 0) + (i & ~15);
}
ok = ix86_expand_vec_perm_const_1 (&d);
@@ -53694,7 +53747,7 @@ ix86_memmodel_check (unsigned HOST_WIDE_INT val)
return val;
}
-/* Set CLONEI->vecsize_mangle, CLONEI->vecsize_int,
+/* Set CLONEI->vecsize_mangle, CLONEI->mask_mode, CLONEI->vecsize_int,
CLONEI->vecsize_float and if CLONEI->simdlen is 0, also
CLONEI->simdlen. Return 0 if SIMD clones shouldn't be emitted,
or number of vecsize_mangle variants that should be emitted. */
@@ -53708,7 +53761,7 @@ ix86_simd_clone_compute_vecsize_and_simdlen (struct cgraph_node *node,
if (clonei->simdlen
&& (clonei->simdlen < 2
- || clonei->simdlen > 16
+ || clonei->simdlen > 1024
|| (clonei->simdlen & (clonei->simdlen - 1)) != 0))
{
warning_at (DECL_SOURCE_LOCATION (node->decl), 0,
@@ -53766,7 +53819,9 @@ ix86_simd_clone_compute_vecsize_and_simdlen (struct cgraph_node *node,
{
/* If the function isn't exported, we can pick up just one ISA
for the clones. */
- if (TARGET_AVX2)
+ if (TARGET_AVX512F)
+ clonei->vecsize_mangle = 'e';
+ else if (TARGET_AVX2)
clonei->vecsize_mangle = 'd';
else if (TARGET_AVX)
clonei->vecsize_mangle = 'c';
@@ -53776,9 +53831,10 @@ ix86_simd_clone_compute_vecsize_and_simdlen (struct cgraph_node *node,
}
else
{
- clonei->vecsize_mangle = "bcd"[num];
- ret = 3;
+ clonei->vecsize_mangle = "bcde"[num];
+ ret = 4;
}
+ clonei->mask_mode = VOIDmode;
switch (clonei->vecsize_mangle)
{
case 'b':
@@ -53793,6 +53849,14 @@ ix86_simd_clone_compute_vecsize_and_simdlen (struct cgraph_node *node,
clonei->vecsize_int = 256;
clonei->vecsize_float = 256;
break;
+ case 'e':
+ clonei->vecsize_int = 512;
+ clonei->vecsize_float = 512;
+ if (TYPE_MODE (base_type) == QImode)
+ clonei->mask_mode = DImode;
+ else
+ clonei->mask_mode = SImode;
+ break;
}
if (clonei->simdlen == 0)
{
@@ -53801,9 +53865,31 @@ ix86_simd_clone_compute_vecsize_and_simdlen (struct cgraph_node *node,
else
clonei->simdlen = clonei->vecsize_float;
clonei->simdlen /= GET_MODE_BITSIZE (TYPE_MODE (base_type));
- if (clonei->simdlen > 16)
- clonei->simdlen = 16;
}
+ else if (clonei->simdlen > 16)
+ {
+ /* For compatibility with ICC, use the same upper bounds
+ for simdlen. In particular, for CTYPE below, use the return type,
+ unless the function returns void, in that case use the characteristic
+ type. If it is possible for given SIMDLEN to pass CTYPE value
+ in registers (8 [XYZ]MM* regs for 32-bit code, 16 [XYZ]MM* regs
+ for 64-bit code), accept that SIMDLEN, otherwise warn and don't
+ emit corresponding clone. */
+ tree ctype = ret_type;
+ if (TREE_CODE (ret_type) == VOID_TYPE)
+ ctype = base_type;
+ int cnt = GET_MODE_BITSIZE (TYPE_MODE (ctype)) * clonei->simdlen;
+ if (SCALAR_INT_MODE_P (TYPE_MODE (ctype)))
+ cnt /= clonei->vecsize_int;
+ else
+ cnt /= clonei->vecsize_float;
+ if (cnt > (TARGET_64BIT ? 16 : 8))
+ {
+ warning_at (DECL_SOURCE_LOCATION (node->decl), 0,
+ "unsupported simdlen %d", clonei->simdlen);
+ return 0;
+ }
+ }
return ret;
}
@@ -53828,6 +53914,10 @@ ix86_simd_clone_adjust (struct cgraph_node *node)
if (!TARGET_AVX2)
str = "avx2";
break;
+ case 'e':
+ if (!TARGET_AVX512F)
+ str = "avx512f";
+ break;
default:
gcc_unreachable ();
}
@@ -53867,6 +53957,10 @@ ix86_simd_clone_usable (struct cgraph_node *node)
if (!TARGET_AVX2)
return -1;
return 0;
+ case 'e':
+ if (!TARGET_AVX512F)
+ return -1;
+ return 0;
default:
gcc_unreachable ();
}
@@ -54255,54 +54349,8 @@ ix86_optab_supported_p (int op, machine_mode mode1, machine_mode,
without resorting to a system call, we cannot convert a
non-default address space to a default address space.
Therefore we do not claim %fs or %gs are subsets of generic.
- (e) However, __seg_tls uses UNSPEC_TP as the base (which itself is
- stored at __seg_tls:0) so we can map between tls and generic. */
-
-static bool
-ix86_addr_space_subset_p (addr_space_t subset, addr_space_t superset)
-{
- return (subset == superset
- || (superset == ADDR_SPACE_GENERIC
- && subset == ADDR_SPACE_SEG_TLS));
-}
-#undef TARGET_ADDR_SPACE_SUBSET_P
-#define TARGET_ADDR_SPACE_SUBSET_P ix86_addr_space_subset_p
-
-static rtx
-ix86_addr_space_convert (rtx op, tree from_type, tree to_type)
-{
- addr_space_t from_as = TYPE_ADDR_SPACE (TREE_TYPE (from_type));
- addr_space_t to_as = TYPE_ADDR_SPACE (TREE_TYPE (to_type));
- /* Conversion between SEG_TLS and GENERIC is handled by adding or
- subtracting the thread pointer. */
- if ((from_as == ADDR_SPACE_GENERIC && to_as == ADDR_SPACE_SEG_TLS)
- || (from_as == ADDR_SPACE_SEG_TLS && to_as == ADDR_SPACE_GENERIC))
- {
- machine_mode mode = GET_MODE (op);
- if (mode == VOIDmode)
- mode = ptr_mode;
- rtx tp = get_thread_pointer (mode, optimize || mode != ptr_mode);
- return expand_binop (mode, (to_as == ADDR_SPACE_GENERIC
- ? add_optab : sub_optab),
- op, tp, NULL, 1, OPTAB_WIDEN);
- }
-
- return op;
-}
-#undef TARGET_ADDR_SPACE_CONVERT
-#define TARGET_ADDR_SPACE_CONVERT ix86_addr_space_convert
-
-static int
-ix86_addr_space_debug (addr_space_t as)
-{
- /* Fold __seg_tls to __seg_fs or __seg_gs for debugging. */
- if (as == ADDR_SPACE_SEG_TLS)
- as = DEFAULT_TLS_SEG_REG;
- return as;
-}
-#undef TARGET_ADDR_SPACE_DEBUG
-#define TARGET_ADDR_SPACE_DEBUG ix86_addr_space_debug
+ Therefore we can (mostly) use the default hooks. */
/* All use of segmentation is assumed to make address 0 valid. */
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index 9062d63..d0b418b 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -1621,7 +1621,7 @@ enum reg_class
function prologue should increase the stack frame size by this amount.
In 32bit mode enabling argument accumulation results in about 5% code size
- growth becuase move instructions are less compact than push. In 64bit
+ growth because move instructions are less compact than push. In 64bit
mode the difference is less drastic but visible.
FIXME: Unlike earlier implementations, the size of unwind info seems to
@@ -1638,7 +1638,8 @@ enum reg_class
#define ACCUMULATE_OUTGOING_ARGS \
((TARGET_ACCUMULATE_OUTGOING_ARGS && optimize_function_for_speed_p (cfun)) \
- || TARGET_STACK_PROBE || TARGET_64BIT_MS_ABI)
+ || TARGET_STACK_PROBE || TARGET_64BIT_MS_ABI \
+ || (TARGET_MACHO && crtl->profile))
/* If defined, a C expression whose value is nonzero when we want to use PUSH
instructions to pass outgoing arguments. */
@@ -2494,6 +2495,10 @@ struct GTY(()) machine_function {
expander to determine the style used. */
BOOL_BITFIELD use_fast_prologue_epilogue : 1;
+ /* Nonzero if the current function calls pc thunk and
+ must not use the red zone. */
+ BOOL_BITFIELD pc_thunk_call_expanded : 1;
+
/* If true, the current function needs the default PIC register, not
an alternate register (on x86) and must not use the red zone (on
x86_64), even if it's a leaf function. We don't want the
@@ -2533,6 +2538,7 @@ struct GTY(()) machine_function {
#define ix86_varargs_fpr_size (cfun->machine->varargs_fpr_size)
#define ix86_optimize_mode_switching (cfun->machine->optimize_mode_switching)
#define ix86_current_function_needs_cld (cfun->machine->needs_cld)
+#define ix86_pc_thunk_call_expanded (cfun->machine->pc_thunk_call_expanded)
#define ix86_tls_descriptor_calls_expanded_in_cfun \
(cfun->machine->tls_descriptor_call_expanded_p)
/* Since tls_descriptor_call_expanded is not cleared, even if all TLS
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index edde41a..09da69e 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -1872,14 +1872,6 @@
(set_attr "mode" "<MODE>")])
-;; Move instructions.
-
-(define_expand "movxi"
- [(set (match_operand:XI 0 "nonimmediate_operand")
- (match_operand:XI 1 "general_operand"))]
- "TARGET_AVX512F"
- "ix86_expand_move (XImode, operands); DONE;")
-
;; Reload patterns to support multi-word load/store
;; with non-offsetable address.
(define_expand "reload_noff_store"
@@ -1914,15 +1906,23 @@
DONE;
})
+;; Move instructions.
+
+(define_expand "movxi"
+ [(set (match_operand:XI 0 "nonimmediate_operand")
+ (match_operand:XI 1 "general_operand"))]
+ "TARGET_AVX512F"
+ "ix86_expand_vector_move (XImode, operands); DONE;")
+
(define_expand "movoi"
[(set (match_operand:OI 0 "nonimmediate_operand")
(match_operand:OI 1 "general_operand"))]
"TARGET_AVX"
- "ix86_expand_move (OImode, operands); DONE;")
+ "ix86_expand_vector_move (OImode, operands); DONE;")
(define_expand "movti"
[(set (match_operand:TI 0 "nonimmediate_operand")
- (match_operand:TI 1 "nonimmediate_operand"))]
+ (match_operand:TI 1 "general_operand"))]
"TARGET_64BIT || TARGET_SSE"
{
if (TARGET_64BIT)
@@ -2442,7 +2442,7 @@
(define_insn "kmovw"
[(set (match_operand:HI 0 "nonimmediate_operand" "=k,k")
(unspec:HI
- [(match_operand:HI 1 "nonimmediate_operand" "rm,k")]
+ [(match_operand:HI 1 "nonimmediate_operand" "r,km")]
UNSPEC_KMOV))]
"!(MEM_P (operands[0]) && MEM_P (operands[1])) && TARGET_AVX512F"
"@
@@ -2454,8 +2454,8 @@
(define_insn "*movhi_internal"
- [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r ,r ,m ,k,k,rm")
- (match_operand:HI 1 "general_operand" "r ,rn,rm,rn,rm,k,k"))]
+ [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r ,r ,m ,k,k, r,m")
+ (match_operand:HI 1 "general_operand" "r ,rn,rm,rn,r,km,k,k"))]
"!(MEM_P (operands[0]) && MEM_P (operands[1]))"
{
switch (get_attr_type (insn))
@@ -2469,7 +2469,8 @@
switch (which_alternative)
{
case 4: return "kmovw\t{%k1, %0|%0, %k1}";
- case 5: return "kmovw\t{%1, %0|%0, %1}";
+ case 5: /* FALLTHRU */
+ case 7: return "kmovw\t{%1, %0|%0, %1}";
case 6: return "kmovw\t{%1, %k0|%k0, %1}";
default: gcc_unreachable ();
}
@@ -2482,7 +2483,7 @@
}
}
[(set (attr "type")
- (cond [(eq_attr "alternative" "4,5,6")
+ (cond [(eq_attr "alternative" "4,5,6,7")
(const_string "mskmov")
(match_test "optimize_function_for_size_p (cfun)")
(const_string "imov")
@@ -2499,7 +2500,7 @@
]
(const_string "imov")))
(set (attr "prefix")
- (if_then_else (eq_attr "alternative" "4,5,6")
+ (if_then_else (eq_attr "alternative" "4,5,6,7")
(const_string "vex")
(const_string "orig")))
(set (attr "mode")
@@ -4228,17 +4229,28 @@
{
/* If it is unsafe to overwrite upper half of source, we need
to move to destination and unpack there. */
- if ((ORIGINAL_REGNO (operands[1]) < FIRST_PSEUDO_REGISTER
- || PSEUDO_REGNO_BYTES (ORIGINAL_REGNO (operands[1])) > 4)
- && true_regnum (operands[0]) != true_regnum (operands[1]))
+ if (((ORIGINAL_REGNO (operands[1]) < FIRST_PSEUDO_REGISTER
+ || PSEUDO_REGNO_BYTES (ORIGINAL_REGNO (operands[1])) > 4)
+ && true_regnum (operands[0]) != true_regnum (operands[1]))
+ || (EXT_REX_SSE_REG_P (operands[1])
+ && !TARGET_AVX512VL))
{
rtx tmp = gen_rtx_REG (SFmode, true_regnum (operands[0]));
emit_move_insn (tmp, operands[1]);
}
else
operands[3] = simplify_gen_subreg (V4SFmode, operands[1], SFmode, 0);
- emit_insn (gen_vec_interleave_lowv4sf (operands[3], operands[3],
- operands[3]));
+ /* FIXME: vec_interleave_lowv4sf for AVX512VL should allow
+ =v, v, then vbroadcastss will be only needed for AVX512F without
+ AVX512VL. */
+ if (!EXT_REX_SSE_REGNO_P (true_regnum (operands[3])))
+ emit_insn (gen_vec_interleave_lowv4sf (operands[3], operands[3],
+ operands[3]));
+ else
+ {
+ rtx tmp = simplify_gen_subreg (V16SFmode, operands[3], V4SFmode, 0);
+ emit_insn (gen_avx512f_vec_dupv16sf_1 (tmp, tmp));
+ }
}
else
emit_insn (gen_vec_setv4sf_0 (operands[3],
@@ -4392,8 +4404,8 @@
emit_insn (gen_vec_dupv2df (operands[4], operands[1]));
}
else
- emit_insn (gen_sse2_loadlpd (operands[4],
- CONST0_RTX (V2DFmode), operands[1]));
+ emit_insn (gen_vec_concatv2df (operands[4], operands[1],
+ CONST0_RTX (DFmode)));
})
;; It's more profitable to split and then extend in the same register.
@@ -5437,7 +5449,14 @@
(match_dup 4))
(match_dup 5)))
(clobber (reg:CC FLAGS_REG))])]
- "split_double_mode (<DWI>mode, &operands[0], 3, &operands[0], &operands[3]);")
+{
+ split_double_mode (<DWI>mode, &operands[0], 3, &operands[0], &operands[3]);
+ if (operands[2] == const0_rtx)
+ {
+ ix86_expand_binary_operator (PLUS, <MODE>mode, &operands[3]);
+ DONE;
+ }
+})
(define_insn "*add<mode>_1"
[(set (match_operand:SWI48 0 "nonimmediate_operand" "=r,rm,r,r")
@@ -6367,7 +6386,14 @@
(ltu:DWIH (reg:CC FLAGS_REG) (const_int 0)))
(match_dup 5)))
(clobber (reg:CC FLAGS_REG))])]
- "split_double_mode (<DWI>mode, &operands[0], 3, &operands[0], &operands[3]);")
+{
+ split_double_mode (<DWI>mode, &operands[0], 3, &operands[0], &operands[3]);
+ if (operands[2] == const0_rtx)
+ {
+ ix86_expand_binary_operator (MINUS, <MODE>mode, &operands[3]);
+ DONE;
+ }
+})
(define_insn "*sub<mode>_1"
[(set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m,<r>")
@@ -8129,16 +8155,31 @@
(match_operand:DI 1 "nonimmediate_operand" "%0,0,0")
(match_operand:DI 2 "x86_64_szext_general_operand" "Z,re,rm")))
(clobber (reg:CC FLAGS_REG))]
- "!TARGET_64BIT && TARGET_STV && TARGET_SSE2 && ix86_binary_operator_ok (AND, DImode, operands)"
+ "!TARGET_64BIT && TARGET_STV && TARGET_SSE2
+ && ix86_binary_operator_ok (AND, DImode, operands)"
"#"
"&& reload_completed"
- [(parallel [(set (match_dup 0)
- (and:SI (match_dup 1) (match_dup 2)))
- (clobber (reg:CC FLAGS_REG))])
- (parallel [(set (match_dup 3)
- (and:SI (match_dup 4) (match_dup 5)))
- (clobber (reg:CC FLAGS_REG))])]
- "split_double_mode (DImode, &operands[0], 3, &operands[0], &operands[3]);")
+ [(const_int 0)]
+{
+ split_double_mode (DImode, &operands[0], 3, &operands[0], &operands[3]);
+ if (operands[2] == const0_rtx)
+ {
+ operands[1] = const0_rtx;
+ ix86_expand_move (SImode, &operands[0]);
+ }
+ else if (operands[2] != constm1_rtx)
+ ix86_expand_binary_operator (AND, SImode, &operands[0]);
+ else if (operands[5] == constm1_rtx)
+ emit_note (NOTE_INSN_DELETED);
+ if (operands[5] == const0_rtx)
+ {
+ operands[4] = const0_rtx;
+ ix86_expand_move (SImode, &operands[3]);
+ }
+ else if (operands[5] != constm1_rtx)
+ ix86_expand_binary_operator (AND, SImode, &operands[3]);
+ DONE;
+})
(define_insn "*andsi_1"
[(set (match_operand:SI 0 "nonimmediate_operand" "=rm,r,Ya,!k")
@@ -8288,10 +8329,10 @@
(clobber (reg:CC FLAGS_REG))]
"TARGET_AVX512F && !TARGET_BMI && reload_completed"
[(set (match_dup 0)
- (not:HI (match_dup 0)))
+ (not:SWI12 (match_dup 0)))
(parallel [(set (match_dup 0)
- (and:HI (match_dup 0)
- (match_dup 1)))
+ (and:SWI12 (match_dup 0)
+ (match_dup 1)))
(clobber (reg:CC FLAGS_REG))])])
;; Turn *anddi_1 into *andsi_1_zext if possible.
@@ -8653,16 +8694,41 @@
(match_operand:DI 1 "nonimmediate_operand" "%0,0,0")
(match_operand:DI 2 "x86_64_szext_general_operand" "Z,re,rm")))
(clobber (reg:CC FLAGS_REG))]
- "!TARGET_64BIT && TARGET_STV && TARGET_SSE2 && ix86_binary_operator_ok (<CODE>, DImode, operands)"
+ "!TARGET_64BIT && TARGET_STV && TARGET_SSE2
+ && ix86_binary_operator_ok (<CODE>, DImode, operands)"
"#"
"&& reload_completed"
- [(parallel [(set (match_dup 0)
- (any_or:SI (match_dup 1) (match_dup 2)))
- (clobber (reg:CC FLAGS_REG))])
- (parallel [(set (match_dup 3)
- (any_or:SI (match_dup 4) (match_dup 5)))
- (clobber (reg:CC FLAGS_REG))])]
- "split_double_mode (DImode, &operands[0], 3, &operands[0], &operands[3]);")
+ [(const_int 0)]
+{
+ split_double_mode (DImode, &operands[0], 3, &operands[0], &operands[3]);
+ if (operands[2] == constm1_rtx)
+ {
+ if (<CODE> == IOR)
+ {
+ operands[1] = constm1_rtx;
+ ix86_expand_move (SImode, &operands[0]);
+ }
+ else
+ ix86_expand_unary_operator (NOT, SImode, &operands[0]);
+ }
+ else if (operands[2] != const0_rtx)
+ ix86_expand_binary_operator (<CODE>, SImode, &operands[0]);
+ else if (operands[5] == const0_rtx)
+ emit_note (NOTE_INSN_DELETED);
+ if (operands[5] == constm1_rtx)
+ {
+ if (<CODE> == IOR)
+ {
+ operands[4] = constm1_rtx;
+ ix86_expand_move (SImode, &operands[3]);
+ }
+ else
+ ix86_expand_unary_operator (NOT, SImode, &operands[3]);
+ }
+ else if (operands[5] != const0_rtx)
+ ix86_expand_binary_operator (<CODE>, SImode, &operands[3]);
+ DONE;
+})
(define_insn_and_split "*andndi3_doubleword"
[(set (match_operand:DI 0 "register_operand" "=r,r")
@@ -12469,7 +12535,18 @@
""
"ix86_expand_prologue (); DONE;")
-(define_insn "set_got"
+(define_expand "set_got"
+ [(parallel
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (unspec:SI [(const_int 0)] UNSPEC_SET_GOT))
+ (clobber (reg:CC FLAGS_REG))])]
+ "!TARGET_64BIT"
+{
+ if (flag_pic && !TARGET_VXWORKS_RTP)
+ ix86_pc_thunk_call_expanded = true;
+})
+
+(define_insn "*set_got"
[(set (match_operand:SI 0 "register_operand" "=r")
(unspec:SI [(const_int 0)] UNSPEC_SET_GOT))
(clobber (reg:CC FLAGS_REG))]
@@ -12478,7 +12555,19 @@
[(set_attr "type" "multi")
(set_attr "length" "12")])
-(define_insn "set_got_labelled"
+(define_expand "set_got_labelled"
+ [(parallel
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (unspec:SI [(label_ref (match_operand 1))]
+ UNSPEC_SET_GOT))
+ (clobber (reg:CC FLAGS_REG))])]
+ "!TARGET_64BIT"
+{
+ if (flag_pic && !TARGET_VXWORKS_RTP)
+ ix86_pc_thunk_call_expanded = true;
+})
+
+(define_insn "*set_got_labelled"
[(set (match_operand:SI 0 "register_operand" "=r")
(unspec:SI [(label_ref (match_operand 1))]
UNSPEC_SET_GOT))
@@ -17861,7 +17950,7 @@
(parallel [(set (match_dup 0)
(match_op_dup 3 [(match_dup 0) (match_dup 1)]))
(clobber (reg:CC FLAGS_REG))])]
- "operands[4] = replace_rtx (operands[2], operands[0], operands[1]);")
+ "operands[4] = replace_rtx (operands[2], operands[0], operands[1], true);")
(define_peephole2
[(set (match_operand 0 "register_operand")
diff --git a/gcc/config/i386/mingw32.h b/gcc/config/i386/mingw32.h
index 4ac5f68..e048189 100644
--- a/gcc/config/i386/mingw32.h
+++ b/gcc/config/i386/mingw32.h
@@ -207,7 +207,7 @@ do { \
/* mingw32 uses the -mthreads option to enable thread support. */
#undef GOMP_SELF_SPECS
-#define GOMP_SELF_SPECS "%{fopenacc|fopenmp|ftree-parallelize-loops=*: " \
+#define GOMP_SELF_SPECS "%{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1): " \
"-mthreads -pthread}"
#undef GTM_SELF_SPECS
#define GTM_SELF_SPECS "%{fgnu-tm:-mthreads -pthread}"
diff --git a/gcc/config/i386/rtems-64.h b/gcc/config/i386/rtems-64.h
new file mode 100644
index 0000000..b087d44
--- /dev/null
+++ b/gcc/config/i386/rtems-64.h
@@ -0,0 +1,30 @@
+/* Definitions for rtems targeting an x86_64
+ Copyright (C) 2016 Free Software Foundation, Inc.
+ Contributed by Joel Sherrill (joel@OARcorp.com).
+
+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/>. */
+
+/* Specify predefined symbols in preprocessor. */
+
+#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/i386/sol2.h b/gcc/config/i386/sol2.h
index 51d1c55..368c2d2 100644
--- a/gcc/config/i386/sol2.h
+++ b/gcc/config/i386/sol2.h
@@ -21,6 +21,11 @@ along with GCC; see the file COPYING3. If not see
#define SUBTARGET_OPTIMIZATION_OPTIONS \
{ OPT_LEVELS_1_PLUS, OPT_momit_leaf_frame_pointer, NULL, 1 }
+/* 32-bit Solaris/x86 only guarantees 4-byte stack alignment as required by
+ the i386 psABI, so realign it as necessary for SSE instructions. */
+#undef STACK_REALIGN_DEFAULT
+#define STACK_REALIGN_DEFAULT (TARGET_64BIT ? 0 : 1)
+
/* Old versions of the Solaris assembler can not handle the difference of
labels in different sections, so force DW_EH_PE_datarel if so. */
#ifndef HAVE_AS_IX86_DIFF_SECT_DELTA
@@ -132,8 +137,9 @@ along with GCC; see the file COPYING3. If not see
/* The Solaris assembler wants a .local for non-exported aliases. */
#define ASM_OUTPUT_DEF_FROM_DECLS(FILE, DECL, TARGET) \
do { \
- const char *declname = \
- IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (DECL)); \
+ tree id = DECL_ASSEMBLER_NAME (DECL); \
+ ultimate_transparent_alias_target (&id); \
+ const char *declname = IDENTIFIER_POINTER (id); \
ASM_OUTPUT_DEF ((FILE), declname, \
IDENTIFIER_POINTER (TARGET)); \
if (! TREE_PUBLIC (DECL)) \
diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
index 045a85f..5132955 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -493,8 +493,9 @@
[(V16SF "f") (V16SI "i") (V8DF "f") (V8DI "i")
(V8SF "f") (V8SI "i") (V4DF "f") (V4DI "i")
(V4SF "f") (V4SI "i") (V2DF "f") (V2DI "i")
- (V32QI "i") (V16HI "u") (V16QI "i") (V8HI "i")
- (V64QI "i") (V1TI "i") (V2TI "i")])
+ (V32HI "i") (V16HI "i") (V8HI "i")
+ (V64QI "i") (V32QI "i") (V16QI "i")
+ (V4TI "i") (V2TI "i") (V1TI "i")])
(define_mode_attr ssequartermode
[(V16SF "V4SF") (V8DF "V2DF") (V16SI "V4SI") (V8DI "V2DI")])
@@ -522,7 +523,10 @@
(define_mode_iterator VI_256 [V32QI V16HI V8SI V4DI])
;; All 512bit vector integer modes
-(define_mode_iterator VI_512 [V64QI V32HI V16SI V8DI])
+(define_mode_iterator VI_512
+ [(V64QI "TARGET_AVX512BW")
+ (V32HI "TARGET_AVX512BW")
+ V16SI V8DI])
;; Various 128bit vector integer mode combinations
(define_mode_iterator VI12_128 [V16QI V8HI])
@@ -702,7 +706,8 @@
;; Pointer size override for scalar modes (Intel asm dialect)
(define_mode_attr iptr
- [(V32QI "b") (V16HI "w") (V8SI "k") (V4DI "q")
+ [(V64QI "b") (V32HI "w") (V16SI "k") (V8DI "q")
+ (V32QI "b") (V16HI "w") (V8SI "k") (V4DI "q")
(V16QI "b") (V8HI "w") (V4SI "k") (V2DI "q")
(V8SF "k") (V4DF "q")
(V4SF "k") (V2DF "q")
@@ -729,7 +734,8 @@
(V64QI "8") (V32QI "8") (V16QI "8")
(V32HI "16") (V16HI "16") (V8HI "16")
(V16SI "32") (V8SI "32") (V4SI "32")
- (V16SF "32") (V8DF "64")])
+ (V16SF "32") (V8SF "32") (V4SF "32")
+ (V8DF "64") (V4DF "64") (V2DF "64")])
;; SSE prefix for integer vector modes
(define_mode_attr sseintprefix
@@ -4962,6 +4968,21 @@
(set_attr "prefix" "evex")
(set_attr "mode" "V4SF")])
+(define_insn "*<floatsuffix>floatv2div2sf2_mask_1"
+ [(set (match_operand:V4SF 0 "register_operand" "=v")
+ (vec_concat:V4SF
+ (vec_merge:V2SF
+ (any_float:V2SF (match_operand:V2DI 1
+ "nonimmediate_operand" "vm"))
+ (const_vector:V2SF [(const_int 0) (const_int 0)])
+ (match_operand:QI 2 "register_operand" "Yk"))
+ (const_vector:V2SF [(const_int 0) (const_int 0)])))]
+ "TARGET_AVX512DQ && TARGET_AVX512VL"
+ "vcvt<floatsuffix>qq2ps{x}\t{%1, %0%{%2%}%{z%}|%0%{%2%}%{z%}, %1}"
+ [(set_attr "type" "ssecvt")
+ (set_attr "prefix" "evex")
+ (set_attr "mode" "V4SF")])
+
(define_insn "ufloat<si2dfmodelower><mode>2<mask_name>"
[(set (match_operand:VF2_512_256VL 0 "register_operand" "=v")
(unsigned_float:VF2_512_256VL
@@ -8933,7 +8954,7 @@
(set_attr "prefix" "orig,maybe_vex,evex")
(set_attr "mode" "V2DF,DF,DF")])
-(define_insn "*vec_concatv2df"
+(define_insn "vec_concatv2df"
[(set (match_operand:V2DF 0 "register_operand" "=x,x,v,x,v,x,x,v,x,x")
(vec_concat:V2DF
(match_operand:DF 1 "nonimmediate_operand" " 0,x,v,m,m,0,x,m,0,0")
@@ -9150,6 +9171,27 @@
(set_attr "prefix" "evex")
(set_attr "mode" "TI")])
+(define_insn "*avx512vl_<code>v2div2qi2_mask_1"
+ [(set (match_operand:V16QI 0 "register_operand" "=v")
+ (vec_concat:V16QI
+ (vec_merge:V2QI
+ (any_truncate:V2QI
+ (match_operand:V2DI 1 "register_operand" "v"))
+ (const_vector:V2QI [(const_int 0) (const_int 0)])
+ (match_operand:QI 2 "register_operand" "Yk"))
+ (const_vector:V14QI [(const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)])))]
+ "TARGET_AVX512VL"
+ "vpmov<trunsuffix>qb\t{%1, %0%{%2%}%{z%}|%0%{%2%}%{z%}, %1}"
+ [(set_attr "type" "ssemov")
+ (set_attr "prefix" "evex")
+ (set_attr "mode" "TI")])
+
(define_insn "avx512vl_<code>v2div2qi2_mask_store"
[(set (match_operand:V16QI 0 "memory_operand" "=m")
(vec_concat:V16QI
@@ -9219,6 +9261,27 @@
(set_attr "prefix" "evex")
(set_attr "mode" "TI")])
+(define_insn "*avx512vl_<code><mode>v4qi2_mask_1"
+ [(set (match_operand:V16QI 0 "register_operand" "=v")
+ (vec_concat:V16QI
+ (vec_merge:V4QI
+ (any_truncate:V4QI
+ (match_operand:VI4_128_8_256 1 "register_operand" "v"))
+ (const_vector:V4QI [(const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)])
+ (match_operand:QI 2 "register_operand" "Yk"))
+ (const_vector:V12QI [(const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)])))]
+ "TARGET_AVX512VL"
+ "vpmov<trunsuffix><pmov_suff_3>\t{%1, %0%{%2%}%{z%}|%0%{%2%}%{z%}, %1}"
+ [(set_attr "type" "ssemov")
+ (set_attr "prefix" "evex")
+ (set_attr "mode" "TI")])
+
(define_insn "avx512vl_<code><mode>v4qi2_mask_store"
[(set (match_operand:V16QI 0 "memory_operand" "=m")
(vec_concat:V16QI
@@ -9289,6 +9352,27 @@
(set_attr "prefix" "evex")
(set_attr "mode" "TI")])
+(define_insn "*avx512vl_<code><mode>v8qi2_mask_1"
+ [(set (match_operand:V16QI 0 "register_operand" "=v")
+ (vec_concat:V16QI
+ (vec_merge:V8QI
+ (any_truncate:V8QI
+ (match_operand:VI2_128_BW_4_256 1 "register_operand" "v"))
+ (const_vector:V8QI [(const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)])
+ (match_operand:QI 2 "register_operand" "Yk"))
+ (const_vector:V8QI [(const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)])))]
+ "TARGET_AVX512VL"
+ "vpmov<trunsuffix><pmov_suff_3>\t{%1, %0%{%2%}%{z%}|%0%{%2%}%{z%}, %1}"
+ [(set_attr "type" "ssemov")
+ (set_attr "prefix" "evex")
+ (set_attr "mode" "TI")])
+
(define_insn "avx512vl_<code><mode>v8qi2_mask_store"
[(set (match_operand:V16QI 0 "memory_operand" "=m")
(vec_concat:V16QI
@@ -9370,6 +9454,23 @@
(set_attr "prefix" "evex")
(set_attr "mode" "TI")])
+(define_insn "*avx512vl_<code><mode>v4hi2_mask_1"
+ [(set (match_operand:V8HI 0 "register_operand" "=v")
+ (vec_concat:V8HI
+ (vec_merge:V4HI
+ (any_truncate:V4HI
+ (match_operand:VI4_128_8_256 1 "register_operand" "v"))
+ (const_vector:V4HI [(const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)])
+ (match_operand:QI 2 "register_operand" "Yk"))
+ (const_vector:V4HI [(const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)])))]
+ "TARGET_AVX512VL"
+ "vpmov<trunsuffix><pmov_suff_4>\t{%1, %0%{%2%}%{z%}|%0%{%2%}%{z%}, %1}"
+ [(set_attr "type" "ssemov")
+ (set_attr "prefix" "evex")
+ (set_attr "mode" "TI")])
+
(define_insn "avx512vl_<code><mode>v4hi2_mask_store"
[(set (match_operand:V8HI 0 "memory_operand" "=m")
(vec_concat:V8HI
@@ -9428,6 +9529,23 @@
(set_attr "prefix" "evex")
(set_attr "mode" "TI")])
+(define_insn "*avx512vl_<code>v2div2hi2_mask_1"
+ [(set (match_operand:V8HI 0 "register_operand" "=v")
+ (vec_concat:V8HI
+ (vec_merge:V2HI
+ (any_truncate:V2HI
+ (match_operand:V2DI 1 "register_operand" "v"))
+ (const_vector:V2HI [(const_int 0) (const_int 0)])
+ (match_operand:QI 2 "register_operand" "Yk"))
+ (const_vector:V6HI [(const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)])))]
+ "TARGET_AVX512VL"
+ "vpmov<trunsuffix>qw\t{%1, %0%{%2%}%{z%}|%0%{%2%}%{z%}, %1}"
+ [(set_attr "type" "ssemov")
+ (set_attr "prefix" "evex")
+ (set_attr "mode" "TI")])
+
(define_insn "avx512vl_<code>v2div2hi2_mask_store"
[(set (match_operand:V8HI 0 "memory_operand" "=m")
(vec_concat:V8HI
@@ -9494,6 +9612,21 @@
(set_attr "prefix" "evex")
(set_attr "mode" "TI")])
+(define_insn "*avx512vl_<code>v2div2si2_mask_1"
+ [(set (match_operand:V4SI 0 "register_operand" "=v")
+ (vec_concat:V4SI
+ (vec_merge:V2SI
+ (any_truncate:V2SI
+ (match_operand:V2DI 1 "register_operand" "v"))
+ (const_vector:V2SI [(const_int 0) (const_int 0)])
+ (match_operand:QI 2 "register_operand" "Yk"))
+ (const_vector:V2SI [(const_int 0) (const_int 0)])))]
+ "TARGET_AVX512VL"
+ "vpmov<trunsuffix>qd\t{%1, %0%{%2%}%{z%}|%0%{%2%}%{z%}, %1}"
+ [(set_attr "type" "ssemov")
+ (set_attr "prefix" "evex")
+ (set_attr "mode" "TI")])
+
(define_insn "avx512vl_<code>v2div2si2_mask_store"
[(set (match_operand:V4SI 0 "memory_operand" "=m")
(vec_concat:V4SI
@@ -9570,6 +9703,27 @@
(set_attr "prefix" "evex")
(set_attr "mode" "TI")])
+(define_insn "*avx512f_<code>v8div16qi2_mask_1"
+ [(set (match_operand:V16QI 0 "register_operand" "=v")
+ (vec_concat:V16QI
+ (vec_merge:V8QI
+ (any_truncate:V8QI
+ (match_operand:V8DI 1 "register_operand" "v"))
+ (const_vector:V8QI [(const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)])
+ (match_operand:QI 2 "register_operand" "Yk"))
+ (const_vector:V8QI [(const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)
+ (const_int 0) (const_int 0)])))]
+ "TARGET_AVX512F"
+ "vpmov<trunsuffix>qb\t{%1, %0%{%2%}%{z%}|%0%{%2%}%{z%}, %1}"
+ [(set_attr "type" "ssemov")
+ (set_attr "prefix" "evex")
+ (set_attr "mode" "TI")])
+
(define_insn "avx512f_<code>v8div16qi2_mask_store"
[(set (match_operand:V16QI 0 "memory_operand" "=m")
(vec_concat:V16QI
@@ -11226,45 +11380,46 @@
case MODE_XI:
gcc_assert (TARGET_AVX512F);
case MODE_OI:
- gcc_assert (TARGET_AVX2 || TARGET_AVX512VL);
+ gcc_assert (TARGET_AVX2);
case MODE_TI:
- gcc_assert (TARGET_SSE2 || TARGET_AVX512VL);
+ gcc_assert (TARGET_SSE2);
switch (<MODE>mode)
- {
- case V16SImode:
- case V8DImode:
- if (TARGET_AVX512F)
- {
- tmp = "pandn<ssemodesuffix>";
- break;
- }
- case V8SImode:
- case V4DImode:
- case V4SImode:
- case V2DImode:
- if (TARGET_AVX512VL)
- {
- tmp = "pandn<ssemodesuffix>";
- break;
- }
- default:
- tmp = TARGET_AVX512VL ? "pandnq" : "pandn";
- }
+ {
+ case V64QImode:
+ case V32HImode:
+ /* There is no vpandnb or vpandnw instruction, nor vpandn for
+ 512-bit vectors. Use vpandnq instead. */
+ tmp = "pandnq";
+ break;
+ case V16SImode:
+ case V8DImode:
+ tmp = "pandn<ssemodesuffix>";
+ break;
+ case V8SImode:
+ case V4DImode:
+ case V4SImode:
+ case V2DImode:
+ tmp = TARGET_AVX512VL ? "pandn<ssemodesuffix>" : "pandn";
+ break;
+ default:
+ tmp = TARGET_AVX512VL ? "pandnq" : "pandn";
+ break;
+ }
break;
- case MODE_V16SF:
+ case MODE_V16SF:
gcc_assert (TARGET_AVX512F);
- case MODE_V8SF:
+ case MODE_V8SF:
gcc_assert (TARGET_AVX);
- case MODE_V4SF:
+ case MODE_V4SF:
gcc_assert (TARGET_SSE);
tmp = "andnps";
break;
- default:
+ default:
gcc_unreachable ();
- }
+ }
switch (which_alternative)
{
@@ -11272,7 +11427,7 @@
ops = "%s\t{%%2, %%0|%%0, %%2}";
break;
case 1:
- ops = "v%s\t{%%2, %%1, %%0<mask_operand3_1>|%%0<mask_operand3_1>, %%1, %%2}";
+ ops = "v%s\t{%%2, %%1, %%0|%%0, %%1, %%2}";
break;
default:
gcc_unreachable ();
@@ -11322,21 +11477,6 @@
(set_attr "prefix" "evex")
(set_attr "mode" "<sseinsnmode>")])
-(define_insn "*andnot<mode>3_mask"
- [(set (match_operand:VI12_AVX512VL 0 "register_operand" "=v")
- (vec_merge:VI12_AVX512VL
- (and:VI12_AVX512VL
- (not:VI12_AVX512VL
- (match_operand:VI12_AVX512VL 1 "register_operand" "v"))
- (match_operand:VI12_AVX512VL 2 "nonimmediate_operand" "vm"))
- (match_operand:VI12_AVX512VL 3 "vector_move_operand" "0C")
- (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk")))]
- "TARGET_AVX512BW"
- "vpandn<ssemodesuffix>\t{%2, %1, %0%{%4%}%N3|%0%{%4%}%N3, %1, %2}";
- [(set_attr "type" "sselog")
- (set_attr "prefix" "evex")
- (set_attr "mode" "<sseinsnmode>")])
-
(define_expand "<code><mode>3"
[(set (match_operand:VI 0 "register_operand")
(any_logic:VI
@@ -12275,13 +12415,13 @@
{
int mask = INTVAL (operands[3]);
if (mask == 0)
- emit_insn (gen_vec_set_lo_<mode>_mask
- (operands[0], operands[1], operands[2],
- operands[4], operands[5]));
+ emit_insn (gen_vec_set_lo_<mode>_mask (operands[0], operands[1],
+ operands[2], operands[4],
+ operands[5]));
else
- emit_insn (gen_vec_set_hi_<mode>_mask
- (operands[0], operands[1], operands[2],
- operands[4], operands[5]));
+ emit_insn (gen_vec_set_hi_<mode>_mask (operands[0], operands[1],
+ operands[2], operands[4],
+ operands[5]));
DONE;
})
@@ -12292,9 +12432,9 @@
(vec_select:<ssehalfvecmode>
(match_operand:V16FI 1 "register_operand" "v")
(parallel [(const_int 8) (const_int 9)
- (const_int 10) (const_int 11)
- (const_int 12) (const_int 13)
- (const_int 14) (const_int 15)]))))]
+ (const_int 10) (const_int 11)
+ (const_int 12) (const_int 13)
+ (const_int 14) (const_int 15)]))))]
"TARGET_AVX512DQ"
"vinsert<shuffletype>32x8\t{$0x0, %2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2, $0x0}"
[(set_attr "type" "sselog")
@@ -12305,13 +12445,13 @@
(define_insn "vec_set_hi_<mode><mask_name>"
[(set (match_operand:V16FI 0 "register_operand" "=v")
(vec_concat:V16FI
- (match_operand:<ssehalfvecmode> 2 "nonimmediate_operand" "vm")
(vec_select:<ssehalfvecmode>
(match_operand:V16FI 1 "register_operand" "v")
(parallel [(const_int 0) (const_int 1)
- (const_int 2) (const_int 3)
- (const_int 4) (const_int 5)
- (const_int 6) (const_int 7)]))))]
+ (const_int 2) (const_int 3)
+ (const_int 4) (const_int 5)
+ (const_int 6) (const_int 7)]))
+ (match_operand:<ssehalfvecmode> 2 "nonimmediate_operand" "vm")))]
"TARGET_AVX512DQ"
"vinsert<shuffletype>32x8\t{$0x1, %2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2, $0x1}"
[(set_attr "type" "sselog")
@@ -12326,7 +12466,7 @@
(vec_select:<ssehalfvecmode>
(match_operand:V8FI 1 "register_operand" "v")
(parallel [(const_int 4) (const_int 5)
- (const_int 6) (const_int 7)]))))]
+ (const_int 6) (const_int 7)]))))]
"TARGET_AVX512F"
"vinsert<shuffletype>64x4\t{$0x0, %2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2, $0x0}"
[(set_attr "type" "sselog")
@@ -12337,11 +12477,11 @@
(define_insn "vec_set_hi_<mode><mask_name>"
[(set (match_operand:V8FI 0 "register_operand" "=v")
(vec_concat:V8FI
- (match_operand:<ssehalfvecmode> 2 "nonimmediate_operand" "vm")
(vec_select:<ssehalfvecmode>
(match_operand:V8FI 1 "register_operand" "v")
(parallel [(const_int 0) (const_int 1)
- (const_int 2) (const_int 3)]))))]
+ (const_int 2) (const_int 3)]))
+ (match_operand:<ssehalfvecmode> 2 "nonimmediate_operand" "vm")))]
"TARGET_AVX512F"
"vinsert<shuffletype>64x4\t{$0x1, %2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2, $0x1}"
[(set_attr "type" "sselog")
@@ -13156,7 +13296,9 @@
(parallel
[(match_operand:SI 2 "const_0_to_<ssescalarnummask>_operand")])))]
"TARGET_SSE2"
- "%vpextr<ssemodesuffix>\t{%2, %1, %k0|%k0, %1, %2}"
+ "@
+ %vpextr<ssemodesuffix>\t{%2, %1, %k0|%k0, %1, %2}
+ %vpextr<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
[(set_attr "isa" "*,sse4")
(set_attr "type" "sselog1")
(set_attr "prefix_data16" "1")
@@ -17116,7 +17258,14 @@
(match_operand:<ssexmmmode> 1 "nonimmediate_operand" "vm")
(parallel [(const_int 0)]))))]
"TARGET_AVX512F"
- "v<sseintprefix>broadcast<bcstscalarsuff>\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}"
+{
+ /* There is no DF broadcast (in AVX-512*) to 128b register.
+ Mimic it with integer variant. */
+ if (<MODE>mode == V2DFmode)
+ return "vpbroadcastq\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}";
+ else
+ return "v<sseintprefix>broadcast<bcstscalarsuff>\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}";
+}
[(set_attr "type" "ssemov")
(set_attr "prefix" "evex")
(set_attr "mode" "<sseinsnmode>")])
@@ -17259,7 +17408,8 @@
v<sseintprefix>broadcast<bcstscalarsuff>\t{%1, %0|%0, %1}
v<sseintprefix>broadcast<bcstscalarsuff>\t{%x1, %0|%0, %x1}
#"
- [(set_attr "type" "ssemov")
+ [(set_attr "isa" "*,*,noavx512vl")
+ (set_attr "type" "ssemov")
(set_attr "prefix_extra" "1")
(set_attr "prefix" "maybe_evex")
(set_attr "mode" "<sseinsnmode>")])
diff --git a/gcc/config/i386/vxworks.h b/gcc/config/i386/vxworks.h
index b5960b1..d92510e 100644
--- a/gcc/config/i386/vxworks.h
+++ b/gcc/config/i386/vxworks.h
@@ -88,3 +88,10 @@ along with GCC; see the file COPYING3. If not see
#undef ASM_PREFERRED_EH_DATA_FORMAT
#define IX86_MAYBE_NO_LIBGCC_TFMODE
+
+/* Define this to be nonzero if static stack checking is supported. */
+#define STACK_CHECK_STATIC_BUILTIN 1
+
+/* This platform supports the probing method of stack checking (RTP mode).
+ 8K is reserved in the stack to propagate exceptions in case of overflow. */
+#define STACK_CHECK_PROTECT 8192
diff --git a/gcc/config/i386/znver1.md b/gcc/config/i386/znver1.md
index 3db3bed..7db0562 100644
--- a/gcc/config/i386/znver1.md
+++ b/gcc/config/i386/znver1.md
@@ -328,7 +328,7 @@
(eq_attr "type" "fcmov"))
"znver1-vector,znver1-fvector")
-(define_insn_reservation "znver1_fp_mov_direct_load" 5
+(define_insn_reservation "znver1_fp_mov_direct_load" 8
(and (eq_attr "cpu" "znver1")
(and (eq_attr "znver1_decode" "direct")
(and (eq_attr "type" "fmov")
@@ -349,7 +349,7 @@
(eq_attr "memory" "none"))))
"znver1-double,znver1-fp3")
-(define_insn_reservation "znver1_fp_mov_double_load" 9
+(define_insn_reservation "znver1_fp_mov_double_load" 12
(and (eq_attr "cpu" "znver1")
(and (eq_attr "znver1_decode" "double")
(and (eq_attr "type" "fmov")
@@ -386,7 +386,7 @@
(eq_attr "type" "fcmp"))))
"znver1-double,znver1-fp0,znver1-fp2")
-(define_insn_reservation "znver1_fp_fcmp_load" 6
+(define_insn_reservation "znver1_fp_fcmp_load" 9
(and (eq_attr "cpu" "znver1")
(and (eq_attr "memory" "none")
(and (eq_attr "znver1_decode" "double")
@@ -400,13 +400,13 @@
(eq_attr "memory" "none")))
"znver1-direct,znver1-fp0*5")
-(define_insn_reservation "znver1_fp_op_mul_load" 9
+(define_insn_reservation "znver1_fp_op_mul_load" 12
(and (eq_attr "cpu" "znver1")
(and (eq_attr "type" "fop,fmul")
(eq_attr "memory" "load")))
"znver1-direct,znver1-load,znver1-fp0*5")
-(define_insn_reservation "znver1_fp_op_imul_load" 13
+(define_insn_reservation "znver1_fp_op_imul_load" 16
(and (eq_attr "cpu" "znver1")
(and (eq_attr "type" "fop,fmul")
(and (eq_attr "fp_int_src" "true")
@@ -419,13 +419,13 @@
(eq_attr "memory" "none")))
"znver1-direct,znver1-fp3*15")
-(define_insn_reservation "znver1_fp_op_div_load" 19
+(define_insn_reservation "znver1_fp_op_div_load" 22
(and (eq_attr "cpu" "znver1")
(and (eq_attr "type" "fdiv")
(eq_attr "memory" "load")))
"znver1-direct,znver1-load,znver1-fp3*15")
-(define_insn_reservation "znver1_fp_op_idiv_load" 24
+(define_insn_reservation "znver1_fp_op_idiv_load" 27
(and (eq_attr "cpu" "znver1")
(and (eq_attr "type" "fdiv")
(and (eq_attr "fp_int_src" "true")
@@ -444,7 +444,7 @@
(eq_attr "memory" "none")))
"znver1-direct,znver1-fp0|znver1-fp1|znver1-fp3")
-(define_insn_reservation "znver1_mmx_add_load" 5
+(define_insn_reservation "znver1_mmx_add_load" 8
(and (eq_attr "cpu" "znver1")
(and (eq_attr "type" "mmxadd")
(eq_attr "memory" "load")))
@@ -456,7 +456,7 @@
(eq_attr "memory" "none")))
"znver1-direct,znver1-fp0|znver1-fp3")
-(define_insn_reservation "znver1_mmx_cmp_load" 5
+(define_insn_reservation "znver1_mmx_cmp_load" 8
(and (eq_attr "cpu" "znver1")
(and (eq_attr "type" "mmxcmp")
(eq_attr "memory" "load")))
@@ -468,7 +468,7 @@
(eq_attr "memory" "none")))
"znver1-direct,znver1-fp1|znver1-fp2")
-(define_insn_reservation "znver1_mmx_cvt_pck_shuf_load" 5
+(define_insn_reservation "znver1_mmx_cvt_pck_shuf_load" 8
(and (eq_attr "cpu" "znver1")
(and (eq_attr "type" "mmxcvt,sseshuf,sseshuf1")
(eq_attr "memory" "load")))
@@ -480,7 +480,7 @@
(eq_attr "memory" "none")))
"znver1-direct,znver1-fp2")
-(define_insn_reservation "znver1_mmx_shift_move_load" 5
+(define_insn_reservation "znver1_mmx_shift_move_load" 8
(and (eq_attr "cpu" "znver1")
(and (eq_attr "type" "mmxshft,mmxmov")
(eq_attr "memory" "load")))
@@ -498,7 +498,7 @@
(eq_attr "memory" "none")))
"znver1-direct,znver1-fp0*3")
-(define_insn_reservation "znver1_mmx_load" 7
+(define_insn_reservation "znver1_mmx_load" 10
(and (eq_attr "cpu" "znver1")
(and (eq_attr "type" "mmxmul")
(eq_attr "memory" "load")))
@@ -511,7 +511,7 @@
(eq_attr "memory" "none"))))
"znver1-double,znver1-fpu")
-(define_insn_reservation "znver1_avx256_log_load" 5
+(define_insn_reservation "znver1_avx256_log_load" 8
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "V8SF,V4DF,OI")
(and (eq_attr "type" "sselog")
@@ -524,7 +524,7 @@
(eq_attr "memory" "none")))
"znver1-direct,znver1-fpu")
-(define_insn_reservation "znver1_sse_log_load" 5
+(define_insn_reservation "znver1_sse_log_load" 8
(and (eq_attr "cpu" "znver1")
(and (eq_attr "type" "sselog")
(eq_attr "memory" "load")))
@@ -537,7 +537,7 @@
(eq_attr "memory" "none"))))
"znver1-double,znver1-fp1|znver1-fp2")
-(define_insn_reservation "znver1_avx256_log1_load" 5
+(define_insn_reservation "znver1_avx256_log1_load" 8
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "V8SF,V4DF,OI")
(and (eq_attr "type" "sselog1")
@@ -550,7 +550,7 @@
(eq_attr "memory" "none")))
"znver1-direct,znver1-fp1|znver1-fp2")
-(define_insn_reservation "znver1_sse_log1_load" 5
+(define_insn_reservation "znver1_sse_log1_load" 8
(and (eq_attr "cpu" "znver1")
(and (eq_attr "type" "sselog1")
(eq_attr "memory" "!none")))
@@ -565,7 +565,7 @@
(eq_attr "memory" "none"))))))
"znver1-direct,znver1-fp0|znver1-fp1")
-(define_insn_reservation "znver1_sse_comi_load" 5
+(define_insn_reservation "znver1_sse_comi_load" 8
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "SF,DF,V4SF,V2DF")
(and (eq_attr "prefix" "!vex")
@@ -583,7 +583,7 @@
(eq_attr "memory" "none"))))))
"znver1-double,znver1-fp0|znver1-fp1")
-(define_insn_reservation "znver1_sse_comi_double_load" 7
+(define_insn_reservation "znver1_sse_comi_double_load" 10
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "V4SF,V2DF,TI")
(and (eq_attr "prefix" "vex")
@@ -600,7 +600,7 @@
(eq_attr "memory" "none")))))
"znver1-direct,znver1-fp1|znver1-fp2")
-(define_insn_reservation "znver1_sse_test_load" 5
+(define_insn_reservation "znver1_sse_test_load" 8
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "SF,DF,V4SF,V2DF,TI")
(and (eq_attr "prefix_extra" "1")
@@ -642,7 +642,7 @@
(eq_attr "memory" "store"))))
"znver1-direct,znver1-fpu,znver1-store")
-(define_insn_reservation "znver1_sseavx_mov_load" 5
+(define_insn_reservation "znver1_sseavx_mov_load" 8
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "SF,DF,V4SF,V2DF,TI")
(and (eq_attr "type" "ssemov")
@@ -663,7 +663,7 @@
(eq_attr "memory" "store"))))
"znver1-double,znver1-fpu,znver1-store")
-(define_insn_reservation "znver1_avx256_mov_load" 5
+(define_insn_reservation "znver1_avx256_mov_load" 8
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "V8SF,V4DF,OI")
(and (eq_attr "type" "ssemov")
@@ -678,7 +678,7 @@
(eq_attr "memory" "none"))))
"znver1-direct,znver1-fp2|znver1-fp3")
-(define_insn_reservation "znver1_sseavx_add_load" 7
+(define_insn_reservation "znver1_sseavx_add_load" 10
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "SF,DF,V4SF,V2DF,TI")
(and (eq_attr "type" "sseadd")
@@ -692,7 +692,7 @@
(eq_attr "memory" "none"))))
"znver1-double,znver1-fp2|znver1-fp3")
-(define_insn_reservation "znver1_avx256_add_load" 7
+(define_insn_reservation "znver1_avx256_add_load" 10
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "V8SF,V4DF,OI")
(and (eq_attr "type" "sseadd")
@@ -706,7 +706,7 @@
(eq_attr "memory" "none"))))
"znver1-direct,znver1-fp0|znver1-fp1")
-(define_insn_reservation "znver1_sseavx_fma_load" 9
+(define_insn_reservation "znver1_sseavx_fma_load" 12
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "SF,DF,V4SF,V2DF")
(and (eq_attr "type" "ssemuladd")
@@ -720,7 +720,7 @@
(eq_attr "memory" "none"))))
"znver1-double,znver1-fp0|znver1-fp1")
-(define_insn_reservation "znver1_avx256_fma_load" 9
+(define_insn_reservation "znver1_avx256_fma_load" 12
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "V8SF,V4DF")
(and (eq_attr "type" "ssemuladd")
@@ -734,7 +734,7 @@
(eq_attr "memory" "none"))))
"znver1-direct,znver1-fp0|znver1-fp1|znver1-fp3")
-(define_insn_reservation "znver1_sseavx_iadd_load" 5
+(define_insn_reservation "znver1_sseavx_iadd_load" 8
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "DI,TI")
(and (eq_attr "type" "sseiadd")
@@ -748,7 +748,7 @@
(eq_attr "memory" "none"))))
"znver1-double,znver1-fp0|znver1-fp1|znver1-fp3")
-(define_insn_reservation "znver1_avx256_iadd_load" 5
+(define_insn_reservation "znver1_avx256_iadd_load" 8
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "OI")
(and (eq_attr "type" "sseiadd")
@@ -756,7 +756,7 @@
"znver1-double,znver1-load,znver1-fp0|znver1-fp1|znver1-fp3")
;; SSE conversions.
-(define_insn_reservation "znver1_ssecvtsf_si_load" 9
+(define_insn_reservation "znver1_ssecvtsf_si_load" 12
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "SI")
(and (eq_attr "type" "sseicvt")
@@ -772,7 +772,7 @@
(eq_attr "memory" "none")))))
"znver1-double,znver1-fp3,znver1-ieu0")
-(define_insn_reservation "znver1_ssecvtdf_si_load" 9
+(define_insn_reservation "znver1_ssecvtdf_si_load" 12
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "SI")
(and (eq_attr "type" "sseicvt")
@@ -789,7 +789,7 @@
(eq_attr "memory" "none")))
"znver1-direct,znver1-fp3")
-(define_insn_reservation "znver1_ssecvt_load" 8
+(define_insn_reservation "znver1_ssecvt_load" 11
(and (eq_attr "cpu" "znver1")
(and (eq_attr "type" "ssecvt")
(eq_attr "memory" "load")))
@@ -803,7 +803,7 @@
(eq_attr "memory" "none"))))
"znver1-direct,znver1-fp3*10")
-(define_insn_reservation "znver1_ssediv_ss_ps_load" 14
+(define_insn_reservation "znver1_ssediv_ss_ps_load" 17
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "V4SF,SF")
(and (eq_attr "type" "ssediv")
@@ -817,7 +817,7 @@
(eq_attr "memory" "none"))))
"znver1-direct,znver1-fp3*13")
-(define_insn_reservation "znver1_ssediv_sd_pd_load" 17
+(define_insn_reservation "znver1_ssediv_sd_pd_load" 20
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "V2DF,DF")
(and (eq_attr "type" "ssediv")
@@ -831,7 +831,7 @@
(eq_attr "type" "ssediv"))))
"znver1-double,znver1-fp3*12")
-(define_insn_reservation "znver1_ssediv_avx256_ps_load" 16
+(define_insn_reservation "znver1_ssediv_avx256_ps_load" 19
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "V8SF")
(and (eq_attr "type" "ssediv")
@@ -845,7 +845,7 @@
(eq_attr "memory" "none"))))
"znver1-double,znver1-fp3*15")
-(define_insn_reservation "znver1_ssediv_avx256_pd_load" 18
+(define_insn_reservation "znver1_ssediv_avx256_pd_load" 22
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "V4DF")
(and (eq_attr "type" "ssediv")
@@ -859,7 +859,7 @@
(eq_attr "memory" "none"))))
"znver1-direct,(znver1-fp0|znver1-fp1)*3")
-(define_insn_reservation "znver1_ssemul_ss_ps_load" 7
+(define_insn_reservation "znver1_ssemul_ss_ps_load" 10
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "V4SF,SF")
(and (eq_attr "type" "ssemul")
@@ -873,7 +873,7 @@
(eq_attr "memory" "none"))))
"znver1-double,(znver1-fp0|znver1-fp1)*3")
-(define_insn_reservation "znver1_ssemul_avx256_ps_load" 7
+(define_insn_reservation "znver1_ssemul_avx256_ps_load" 10
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "V8SF")
(and (eq_attr "type" "ssemul")
@@ -887,7 +887,7 @@
(eq_attr "memory" "none"))))
"znver1-direct,(znver1-fp0|znver1-fp1)*4")
-(define_insn_reservation "znver1_ssemul_sd_pd_load" 8
+(define_insn_reservation "znver1_ssemul_sd_pd_load" 11
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "V2DF,DF")
(and (eq_attr "type" "ssemul")
@@ -902,7 +902,7 @@
(eq_attr "memory" "none")))))
"znver1-double,(znver1-fp0|znver1-fp1)*4")
-(define_insn_reservation "znver1_ssemul_avx256_pd_load" 8
+(define_insn_reservation "znver1_ssemul_avx256_pd_load" 12
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "V4DF")
(and (eq_attr "type" "ssemul")
@@ -913,44 +913,44 @@
(define_insn_reservation "znver1_sseimul" 3
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "TI")
- (and (eq_attr "type" "ssemul")
+ (and (eq_attr "type" "sseimul")
(eq_attr "memory" "none"))))
"znver1-direct,znver1-fp0*3")
(define_insn_reservation "znver1_sseimul_avx256" 4
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "OI")
- (and (eq_attr "type" "ssemul")
+ (and (eq_attr "type" "sseimul")
(eq_attr "memory" "none"))))
"znver1-double,znver1-fp0*4")
-(define_insn_reservation "znver1_sseimul_load" 7
+(define_insn_reservation "znver1_sseimul_load" 10
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "TI")
- (and (eq_attr "type" "ssemul")
+ (and (eq_attr "type" "sseimul")
(eq_attr "memory" "load"))))
"znver1-direct,znver1-load,znver1-fp0*3")
-(define_insn_reservation "znver1_sseimul_avx256_load" 8
+(define_insn_reservation "znver1_sseimul_avx256_load" 11
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "OI")
- (and (eq_attr "type" "ssemul")
+ (and (eq_attr "type" "sseimul")
(eq_attr "memory" "load"))))
"znver1-double,znver1-load,znver1-fp0*4")
-(define_insn_reservation "znver1_sseimul_di" 4
+(define_insn_reservation "znver1_sseimul_di" 3
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "DI")
(and (eq_attr "memory" "none")
- (eq_attr "type" "ssemul"))))
- "znver1-direct,znver1-fp0*4")
+ (eq_attr "type" "sseimul"))))
+ "znver1-direct,znver1-fp0*3")
-(define_insn_reservation "znver1_sseimul_load_di" 8
+(define_insn_reservation "znver1_sseimul_load_di" 10
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "DI")
- (and (eq_attr "type" "ssemul")
+ (and (eq_attr "type" "sseimul")
(eq_attr "memory" "load"))))
- "znver1-direct,znver1-load,znver1-fp0*4")
+ "znver1-direct,znver1-load,znver1-fp0*3")
;; SSE compares
(define_insn_reservation "znver1_sse_cmp" 1
@@ -960,7 +960,7 @@
(eq_attr "memory" "none"))))
"znver1-direct,znver1-fp0|znver1-fp1")
-(define_insn_reservation "znver1_sse_cmp_load" 5
+(define_insn_reservation "znver1_sse_cmp_load" 8
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "SF,DF,V4SF,V2DF")
(and (eq_attr "type" "ssecmp")
@@ -974,7 +974,7 @@
(eq_attr "memory" "none"))))
"znver1-double,znver1-fp0|znver1-fp1")
-(define_insn_reservation "znver1_sse_cmp_avx256_load" 5
+(define_insn_reservation "znver1_sse_cmp_avx256_load" 8
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "V8SF,V4DF")
(and (eq_attr "type" "ssecmp")
@@ -988,7 +988,7 @@
(eq_attr "memory" "none"))))
"znver1-direct,znver1-fp0|znver1-fp3")
-(define_insn_reservation "znver1_sse_icmp_load" 5
+(define_insn_reservation "znver1_sse_icmp_load" 8
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "QI,HI,SI,DI,TI")
(and (eq_attr "type" "ssecmp")
@@ -1002,7 +1002,7 @@
(eq_attr "memory" "none"))))
"znver1-double,znver1-fp0|znver1-fp3")
-(define_insn_reservation "znver1_sse_icmp_avx256_load" 5
+(define_insn_reservation "znver1_sse_icmp_avx256_load" 8
(and (eq_attr "cpu" "znver1")
(and (eq_attr "mode" "OI")
(and (eq_attr "type" "ssecmp")
diff --git a/gcc/config/ia64/hpux.h b/gcc/config/ia64/hpux.h
index 8b90c99..008c4f6 100644
--- a/gcc/config/ia64/hpux.h
+++ b/gcc/config/ia64/hpux.h
@@ -92,7 +92,7 @@ do { \
#undef LIB_SPEC
#define LIB_SPEC \
"%{!shared: \
- %{mt|pthread:%{fopenacc|fopenmp|ftree-parallelize-loops=*:-lrt} -lpthread} \
+ %{mt|pthread:%{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1):-lrt} -lpthread} \
%{p:%{!mlp64:-L/usr/lib/hpux32/libp} \
%{mlp64:-L/usr/lib/hpux64/libp} -lprof} \
%{pg:%{!mlp64:-L/usr/lib/hpux32/libp} \
diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md
index 5731780..ec37bd7 100644
--- a/gcc/config/m68k/m68k.md
+++ b/gcc/config/m68k/m68k.md
@@ -4544,7 +4544,7 @@
(define_expand "ashldi3"
[(set (match_operand:DI 0 "register_operand" "")
(ashift:DI (match_operand:DI 1 "register_operand" "")
- (match_operand 2 "const_int_operand" "")))]
+ (match_operand:SI 2 "const_int_operand" "")))]
"!TARGET_COLDFIRE"
{
/* ??? This is a named pattern like this is not allowed to FAIL based
@@ -4813,7 +4813,7 @@
(define_expand "ashrdi3"
[(set (match_operand:DI 0 "register_operand" "")
(ashiftrt:DI (match_operand:DI 1 "register_operand" "")
- (match_operand 2 "const_int_operand" "")))]
+ (match_operand:SI 2 "const_int_operand" "")))]
"!TARGET_COLDFIRE"
{
/* ??? This is a named pattern like this is not allowed to FAIL based
@@ -5082,7 +5082,7 @@
(define_expand "lshrdi3"
[(set (match_operand:DI 0 "register_operand" "")
(lshiftrt:DI (match_operand:DI 1 "register_operand" "")
- (match_operand 2 "const_int_operand" "")))]
+ (match_operand:SI 2 "const_int_operand" "")))]
"!TARGET_COLDFIRE"
{
/* ??? This is a named pattern like this is not allowed to FAIL based
diff --git a/gcc/config/m68k/t-opts b/gcc/config/m68k/t-opts
index 7f752ae..391a931 100644
--- a/gcc/config/m68k/t-opts
+++ b/gcc/config/m68k/t-opts
@@ -1,3 +1,6 @@
+OPTIONS_H_EXTRA += $(srcdir)/config/m68k/m68k-microarchs.def \
+ $(srcdir)/config/m68k/m68k-devices.def
+
$(srcdir)/config/m68k/m68k-tables.opt: $(srcdir)/config/m68k/genopt.sh \
$(srcdir)/config/m68k/m68k-devices.def $(srcdir)/config/m68k/m68k-isas.def \
$(srcdir)/config/m68k/m68k-microarchs.def
diff --git a/gcc/config/moxie/moxiebox.h b/gcc/config/moxie/moxiebox.h
index f67bfd6..502ffe1 100644
--- a/gcc/config/moxie/moxiebox.h
+++ b/gcc/config/moxie/moxiebox.h
@@ -39,6 +39,12 @@ along with GCC; see the file COPYING3. If not see
#undef ASM_SPEC
#define ASM_SPEC "-EL"
+#undef CC1_SPEC
+#define CC1_SPEC "-mel %{meb:%ethis target is little-endian}"
+
+#undef CC1PLUS_SPEC
+#define CC1PLUS_SPEC CC1_SPEC
+
#undef MULTILIB_DEFAULTS
#undef SIZE_TYPE
diff --git a/gcc/config/nvptx/nvptx.c b/gcc/config/nvptx/nvptx.c
index a955c04..b088cf8 100644
--- a/gcc/config/nvptx/nvptx.c
+++ b/gcc/config/nvptx/nvptx.c
@@ -160,15 +160,6 @@ nvptx_option_override (void)
/* Assumes that it will see only hard registers. */
flag_var_tracking = 0;
- if (write_symbols == DBX_DEBUG)
- /* The stabs testcases want to know stabs isn't supported. */
- sorry ("stabs debug format not supported");
-
- /* Actually we don't have any debug format, but don't be
- unneccesarily noisy. */
- write_symbols = NO_DEBUG;
- debug_info_level = DINFO_LEVEL_NONE;
-
if (nvptx_optimize < 0)
nvptx_optimize = optimize > 0;
@@ -1306,6 +1297,20 @@ nvptx_gen_shuffle (rtx dst, rtx src, rtx idx, nvptx_shuffle_kind kind)
end_sequence ();
}
break;
+ case QImode:
+ case HImode:
+ {
+ rtx tmp = gen_reg_rtx (SImode);
+
+ start_sequence ();
+ emit_insn (gen_rtx_SET (tmp, gen_rtx_fmt_e (ZERO_EXTEND, SImode, src)));
+ emit_insn (nvptx_gen_shuffle (tmp, tmp, idx, kind));
+ emit_insn (gen_rtx_SET (dst, gen_rtx_fmt_e (TRUNCATE, GET_MODE (dst),
+ tmp)));
+ res = get_insns ();
+ end_sequence ();
+ }
+ break;
default:
gcc_unreachable ();
diff --git a/gcc/config/pa/constraints.md b/gcc/config/pa/constraints.md
index b90e8f6..cd38e45 100644
--- a/gcc/config/pa/constraints.md
+++ b/gcc/config/pa/constraints.md
@@ -106,7 +106,7 @@
(and (match_code "mem")
(match_test "IS_LO_SUM_DLT_ADDR_P (XEXP (op, 0))")))
-(define_memory_constraint "Q"
+(define_constraint "Q"
"A memory operand that can be used as the destination operand of an
integer store, or the source operand of an integer load. That is
any memory operand that isn't a symbolic, indexed or lo_sum memory
@@ -122,7 +122,7 @@
(and (match_code "mem")
(match_test "IS_INDEX_ADDR_P (XEXP (op, 0))")))
-(define_memory_constraint "T"
+(define_constraint "T"
"A memory operand for floating-point loads and stores."
(match_test "floating_point_store_memory_operand (op, mode)"))
diff --git a/gcc/config/pa/pa-hpux11.h b/gcc/config/pa/pa-hpux11.h
index 3e5207a..600b677 100644
--- a/gcc/config/pa/pa-hpux11.h
+++ b/gcc/config/pa/pa-hpux11.h
@@ -147,7 +147,7 @@ along with GCC; see the file COPYING3. If not see
#undef LIB_SPEC
#define LIB_SPEC \
"%{!shared:\
- %{fopenacc|fopenmp|ftree-parallelize-loops=*:\
+ %{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1):\
%{static:-a archive_shared} -lrt %{static:-a archive}}\
%{mt|pthread:-lpthread} -lc\
%{static:%{!nolibdld:-a archive_shared -ldld -a archive -lc}\
diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md
index 2587c05..75100d2 100644
--- a/gcc/config/pa/pa.md
+++ b/gcc/config/pa/pa.md
@@ -1229,9 +1229,10 @@
(define_insn "bswapdi2"
[(set (match_operand:DI 0 "register_operand" "=&r")
- (bswap:DI (match_operand:DI 1 "register_operand" "+r")))]
+ (bswap:DI (match_operand:DI 1 "register_operand" "r")))
+ (clobber (match_scratch:DI 2 "=r"))]
"TARGET_64BIT"
- "permh,3210 %1,%1\;hshl %1,8,%0\;hshr,u %1,8,%1\;or %0,%1,%0"
+ "permh,3210 %1,%2\;hshl %2,8,%0\;hshr,u %2,8,%2\;or %0,%2,%0"
[(set_attr "type" "multi")
(set_attr "length" "16")])
diff --git a/gcc/config/pa/pa64-hpux.h b/gcc/config/pa/pa64-hpux.h
index a5ccb4a..279406a 100644
--- a/gcc/config/pa/pa64-hpux.h
+++ b/gcc/config/pa/pa64-hpux.h
@@ -58,21 +58,21 @@ along with GCC; see the file COPYING3. If not see
#if ((TARGET_DEFAULT | TARGET_CPU_DEFAULT) & MASK_GNU_LD)
#define LIB_SPEC \
"%{!shared:\
- %{!p:%{!pg:%{fopenacc|fopenmp|ftree-parallelize-loops=*:\
+ %{!p:%{!pg:%{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1):\
%{static:-a shared} -lrt %{static:-a archive}}\
%{mt|pthread:-lpthread} -lc\
%{static:%{!nolibdld:-a shared -ldld -a archive -lc}\
%{!mt:%{!pthread:-a shared -lc -a archive}}}}}\
%{p:%{!pg:%{static:%{!mhp-ld:-a shared}%{mhp-ld:-a archive_shared}}\
-lprof %{static:-a archive}\
- %{fopenacc|fopenmp|ftree-parallelize-loops=*:\
+ %{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1):\
%{static:-a shared} -lrt %{static:-a archive}}\
%{mt|pthread:-lpthread} -lc\
%{static:%{!nolibdld:-a shared -ldld -a archive -lc}\
%{!mt:%{!pthread:-a shared -lc -a archive}}}}}\
%{pg:%{static:%{!mhp-ld:-a shared}%{mhp-ld:-a archive_shared}}\
-lgprof %{static:-a archive}\
- %{fopenacc|fopenmp|ftree-parallelize-loops=*:\
+ %{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1):\
%{static:-a shared} -lrt %{static:-a archive}}\
%{mt|pthread:-lpthread} -lc\
%{static:%{!nolibdld:-a shared -ldld -a archive -lc}\
@@ -81,21 +81,21 @@ along with GCC; see the file COPYING3. If not see
#else
#define LIB_SPEC \
"%{!shared:\
- %{!p:%{!pg:%{fopenacc|fopenmp|ftree-parallelize-loops=*:\
+ %{!p:%{!pg:%{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1):\
%{static:-a shared} -lrt %{static:-a archive}}\
%{mt|pthread:-lpthread} -lc\
%{static:%{!nolibdld:-a shared -ldld -a archive -lc}\
%{!mt:%{!pthread:-a shared -lc -a archive}}}}}\
%{p:%{!pg:%{static:%{mgnu-ld:-a shared}%{!mgnu-ld:-a archive_shared}}\
-lprof %{static:-a archive}\
- %{fopenacc|fopenmp|ftree-parallelize-loops=*:\
+ %{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1):\
%{static:-a shared} -lrt %{static:-a archive}}\
%{mt|pthread:-lpthread} -lc\
%{static:%{!nolibdld:-a shared -ldld -a archive -lc}\
%{!mt:%{!pthread:-a shared -lc -a archive}}}}}\
%{pg:%{static:%{mgnu-ld:-a shared}%{!mgnu-ld:-a archive_shared}}\
-lgprof %{static:-a archive}\
- %{fopenacc|fopenmp|ftree-parallelize-loops=*:\
+ %{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1):\
%{static:-a shared} -lrt %{static:-a archive}}\
%{mt|pthread:-lpthread} -lc\
%{static:%{!nolibdld:-a shared -ldld -a archive -lc}\
diff --git a/gcc/config/pa/predicates.md b/gcc/config/pa/predicates.md
index fbef6ae..447a04c 100644
--- a/gcc/config/pa/predicates.md
+++ b/gcc/config/pa/predicates.md
@@ -301,6 +301,9 @@
if (reg_plus_base_memory_operand (op, mode))
{
+ if (reload_in_progress)
+ return true;
+
/* Extract CONST_INT operand. */
if (GET_CODE (op) == SUBREG)
op = SUBREG_REG (op);
@@ -335,6 +338,9 @@
if (reg_plus_base_memory_operand (op, mode))
{
+ if (reload_in_progress)
+ return true;
+
/* Extract CONST_INT operand. */
if (GET_CODE (op) == SUBREG)
op = SUBREG_REG (op);
diff --git a/gcc/config/rs6000/constraints.md b/gcc/config/rs6000/constraints.md
index 9eca757..ea15764 100644
--- a/gcc/config/rs6000/constraints.md
+++ b/gcc/config/rs6000/constraints.md
@@ -272,4 +272,4 @@ usually better to use @samp{m} or @samp{es} in @code{asm} statements)"
(define_constraint "j"
"Zero vector constant"
- (match_test "op == const0_rtx || op == CONST0_RTX (GET_MODE (op))"))
+ (match_test "op == const0_rtx || op == CONST0_RTX (mode)"))
diff --git a/gcc/config/rs6000/predicates.md b/gcc/config/rs6000/predicates.md
index b0ab1d5..71fac76 100644
--- a/gcc/config/rs6000/predicates.md
+++ b/gcc/config/rs6000/predicates.md
@@ -527,13 +527,14 @@
&& mode != DImode)
return 1;
+ /* 0.0D is not all zero bits. */
+ if (DECIMAL_FLOAT_MODE_P (mode))
+ return 0;
+
/* The constant 0.0 is easy under VSX. */
if (TARGET_VSX && SCALAR_FLOAT_MODE_P (mode) && op == CONST0_RTX (mode))
return 1;
- if (DECIMAL_FLOAT_MODE_P (mode))
- return 0;
-
/* If we are using V.4 style PIC, consider all constants to be hard. */
if (flag_pic && DEFAULT_ABI == ABI_V4)
return 0;
@@ -1708,14 +1709,23 @@
(match_code "const_int,high,plus")
{
HOST_WIDE_INT value;
+ rtx int_const;
if (GET_CODE (op) == HIGH)
return 1;
- if (!CONST_INT_P (op))
+ if (CONST_INT_P (op))
+ int_const = op;
+
+ else if (GET_CODE (op) == PLUS
+ && base_reg_operand (XEXP (op, 0), Pmode)
+ && CONST_INT_P (XEXP (op, 1)))
+ int_const = XEXP (op, 1);
+
+ else
return 0;
- value = INTVAL (op);
+ value = INTVAL (int_const);
if ((value & (HOST_WIDE_INT)0xffff) != 0)
return 0;
diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c
index b6e42f6..ceb80b2 100644
--- a/gcc/config/rs6000/rs6000-c.c
+++ b/gcc/config/rs6000/rs6000-c.c
@@ -216,7 +216,21 @@ rs6000_macro_to_expand (cpp_reader *pfile, const cpp_token *tok)
else if (ident && (ident != C_CPP_HASHNODE (__vector_keyword)))
{
enum rid rid_code = (enum rid)(ident->rid_code);
- if (ident->type == NT_MACRO)
+ enum node_type itype = ident->type;
+ /* If there is a function-like macro, check if it is going to be
+ invoked with or without arguments. Without following ( treat
+ it like non-macro, otherwise the following cpp_get_token eats
+ what should be preserved. */
+ if (itype == NT_MACRO && cpp_fun_like_macro_p (ident))
+ {
+ int idx2 = idx;
+ do
+ tok = cpp_peek_token (pfile, idx2++);
+ while (tok->type == CPP_PADDING);
+ if (tok->type != CPP_OPEN_PAREN)
+ itype = NT_VOID;
+ }
+ if (itype == NT_MACRO)
{
do
(void) cpp_get_token (pfile);
diff --git a/gcc/config/rs6000/rs6000-cpus.def b/gcc/config/rs6000/rs6000-cpus.def
index 92fb71a..275404a 100644
--- a/gcc/config/rs6000/rs6000-cpus.def
+++ b/gcc/config/rs6000/rs6000-cpus.def
@@ -44,7 +44,6 @@
#define ISA_2_6_MASKS_SERVER (ISA_2_5_MASKS_SERVER \
| OPTION_MASK_POPCNTD \
| OPTION_MASK_ALTIVEC \
- | OPTION_MASK_FLOAT128 \
| OPTION_MASK_VSX \
| OPTION_MASK_UPPER_REGS_DF)
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index eed50f4..c63fa06 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -4207,7 +4207,8 @@ rs6000_option_override_internal (bool global_init_p)
else if (TARGET_ALLOW_MOVMISALIGN && !TARGET_VSX)
{
- if (TARGET_ALLOW_MOVMISALIGN > 0)
+ if (TARGET_ALLOW_MOVMISALIGN > 0
+ && global_options_set.x_TARGET_ALLOW_MOVMISALIGN)
error ("-mallow-movmisalign requires -mvsx");
TARGET_ALLOW_MOVMISALIGN = 0;
@@ -17438,9 +17439,12 @@ rs6000_insn_for_shift_mask (machine_mode mode, rtx *operands, bool dot)
operands[2] = GEN_INT (32 - INTVAL (operands[2]));
operands[3] = GEN_INT (31 - nb);
operands[4] = GEN_INT (31 - ne);
+ /* This insn can also be a 64-bit rotate with mask that really makes
+ it just a shift right (with mask); the %h below are to adjust for
+ that situation (shift count is >= 32 in that case). */
if (dot)
- return "rlw%I2nm. %0,%1,%2,%3,%4";
- return "rlw%I2nm %0,%1,%2,%3,%4";
+ return "rlw%I2nm. %0,%1,%h2,%3,%4";
+ return "rlw%I2nm %0,%1,%h2,%3,%4";
}
gcc_unreachable ();
@@ -22279,6 +22283,9 @@ rs6000_expand_atomic_compare_and_swap (rtx operands[])
if (mode != TImode && !reg_or_short_operand (oldval, mode))
oldval = copy_to_mode_reg (mode, oldval);
+ if (reg_overlap_mentioned_p (retval, newval))
+ newval = copy_to_reg (newval);
+
mem = rs6000_pre_atomic_barrier (mem, mod_s);
label1 = NULL_RTX;
@@ -34374,8 +34381,8 @@ static struct rs6000_opt_mask const rs6000_opt_masks[] =
{ "dlmzb", OPTION_MASK_DLMZB, false, true },
{ "efficient-unaligned-vsx", OPTION_MASK_EFFICIENT_UNALIGNED_VSX,
false, true },
- { "float128", OPTION_MASK_FLOAT128, false, true },
- { "float128-hardware", OPTION_MASK_FLOAT128_HW, false, true },
+ { "float128", OPTION_MASK_FLOAT128, false, false },
+ { "float128-hardware", OPTION_MASK_FLOAT128_HW, false, false },
{ "fprnd", OPTION_MASK_FPRND, false, true },
{ "hard-dfp", OPTION_MASK_DFP, false, true },
{ "htm", OPTION_MASK_HTM, false, true },
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 952617c..849b19a 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -428,6 +428,16 @@
(SD "REAL_VALUE_TO_TARGET_DECIMAL32")
(DD "REAL_VALUE_TO_TARGET_DECIMAL64")])
+; Whether 0.0 has an all-zero bit pattern
+(define_mode_attr zero_fp [(SF "j")
+ (DF "j")
+ (TF "j")
+ (IF "j")
+ (KF "j")
+ (SD "wn")
+ (DD "wn")
+ (TD "wn")])
+
; Definitions for load to 32-bit fpr register
(define_mode_attr f32_lr [(SF "f") (SD "wz")])
(define_mode_attr f32_lr2 [(SF "wb") (SD "wn")])
@@ -701,7 +711,7 @@
rlwinm %0,%1,0,0xff"
[(set_attr "type" "load,shift")])
-(define_insn_and_split "*zero_extendqi<mode>2_dot"
+(define_insn "*zero_extendqi<mode>2_dot"
[(set (match_operand:CC 2 "cc_reg_operand" "=x,?y")
(compare:CC (zero_extend:EXTQI (match_operand:QI 1 "gpc_reg_operand" "r,r"))
(const_int 0)))
@@ -709,19 +719,12 @@
"rs6000_gen_cell_microcode"
"@
andi. %0,%1,0xff
- #"
- "&& reload_completed && cc_reg_not_cr0_operand (operands[2], CCmode)"
- [(set (match_dup 0)
- (zero_extend:EXTQI (match_dup 1)))
- (set (match_dup 2)
- (compare:CC (match_dup 0)
- (const_int 0)))]
- ""
+ rlwinm %0,%1,0,0xff\;cmpwi %2,%0,0"
[(set_attr "type" "logical")
(set_attr "dot" "yes")
(set_attr "length" "4,8")])
-(define_insn_and_split "*zero_extendqi<mode>2_dot2"
+(define_insn "*zero_extendqi<mode>2_dot2"
[(set (match_operand:CC 2 "cc_reg_operand" "=x,?y")
(compare:CC (zero_extend:EXTQI (match_operand:QI 1 "gpc_reg_operand" "r,r"))
(const_int 0)))
@@ -730,14 +733,7 @@
"rs6000_gen_cell_microcode"
"@
andi. %0,%1,0xff
- #"
- "&& reload_completed && cc_reg_not_cr0_operand (operands[2], CCmode)"
- [(set (match_dup 0)
- (zero_extend:EXTQI (match_dup 1)))
- (set (match_dup 2)
- (compare:CC (match_dup 0)
- (const_int 0)))]
- ""
+ rlwinm %0,%1,0,0xff\;cmpwi %2,%0,0"
[(set_attr "type" "logical")
(set_attr "dot" "yes")
(set_attr "length" "4,8")])
@@ -855,7 +851,7 @@
"extsb %0,%1"
[(set_attr "type" "exts")])
-(define_insn_and_split "*extendqi<mode>2_dot"
+(define_insn "*extendqi<mode>2_dot"
[(set (match_operand:CC 2 "cc_reg_operand" "=x,?y")
(compare:CC (sign_extend:EXTQI (match_operand:QI 1 "gpc_reg_operand" "r,r"))
(const_int 0)))
@@ -863,19 +859,12 @@
"rs6000_gen_cell_microcode"
"@
extsb. %0,%1
- #"
- "&& reload_completed && cc_reg_not_cr0_operand (operands[2], CCmode)"
- [(set (match_dup 0)
- (sign_extend:EXTQI (match_dup 1)))
- (set (match_dup 2)
- (compare:CC (match_dup 0)
- (const_int 0)))]
- ""
+ extsb %0,%1\;cmpwi %2,%0,0"
[(set_attr "type" "exts")
(set_attr "dot" "yes")
(set_attr "length" "4,8")])
-(define_insn_and_split "*extendqi<mode>2_dot2"
+(define_insn "*extendqi<mode>2_dot2"
[(set (match_operand:CC 2 "cc_reg_operand" "=x,?y")
(compare:CC (sign_extend:EXTQI (match_operand:QI 1 "gpc_reg_operand" "r,r"))
(const_int 0)))
@@ -884,14 +873,7 @@
"rs6000_gen_cell_microcode"
"@
extsb. %0,%1
- #"
- "&& reload_completed && cc_reg_not_cr0_operand (operands[2], CCmode)"
- [(set (match_dup 0)
- (sign_extend:EXTQI (match_dup 1)))
- (set (match_dup 2)
- (compare:CC (match_dup 0)
- (const_int 0)))]
- ""
+ extsb %0,%1\;cmpwi %2,%0,0"
[(set_attr "type" "exts")
(set_attr "dot" "yes")
(set_attr "length" "4,8")])
@@ -5415,10 +5397,12 @@
xsrdpiz %x0,%x1"
[(set_attr "type" "fp")])
-;; Since FCTIWZ doesn't sign extend the upper bits, we have to do a store and a
-;; load to properly sign extend the value, but at least doing a store, load
-;; into a GPR to sign extend, a store from the GPR and a load back into the FPR
-;; if we have 32-bit memory ops
+;; Opitmize converting SF/DFmode to signed SImode and back to SF/DFmode. This
+;; optimization prevents on ISA 2.06 systems and earlier having to store the
+;; value from the FPR/vector unit to the stack, load the value into a GPR, sign
+;; extend it, store it back on the stack from the GPR, load it back into the
+;; FP/vector unit to do the rounding. If we have direct move (ISA 2.07),
+;; disable using store and load to sign/zero extend the value.
(define_insn_and_split "*round32<mode>2_fprs"
[(set (match_operand:SFDF 0 "gpc_reg_operand" "=d")
(float:SFDF
@@ -5427,7 +5411,7 @@
(clobber (match_scratch:DI 3 "=d"))]
"TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT
&& <SI_CONVERT_FP> && TARGET_LFIWAX && TARGET_STFIWX && TARGET_FCFID
- && can_create_pseudo_p ()"
+ && !TARGET_DIRECT_MOVE && can_create_pseudo_p ()"
"#"
""
[(pc)]
@@ -5459,7 +5443,7 @@
(clobber (match_scratch:DI 2 "=d"))
(clobber (match_scratch:DI 3 "=d"))]
"TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT
- && TARGET_LFIWZX && TARGET_STFIWX && TARGET_FCFIDU
+ && TARGET_LFIWZX && TARGET_STFIWX && TARGET_FCFIDU && !TARGET_DIRECT_MOVE
&& can_create_pseudo_p ()"
"#"
""
@@ -6498,7 +6482,7 @@
(define_insn "mov<mode>_hardfloat"
[(set (match_operand:FMOVE32 0 "nonimmediate_operand" "=!r,!r,m,f,<f32_vsx>,<f32_vsx>,!r,<f32_lr>,<f32_lr2>,<f32_sm>,<f32_sm2>,<f32_av>,Z,?<f32_dm>,?r,*c*l,!r,*h")
- (match_operand:FMOVE32 1 "input_operand" "r,m,r,f,<f32_vsx>,j,j,<f32_lm>,<f32_lm2>,<f32_sr>,<f32_sr2>,Z,<f32_av>,r,<f32_dm>,r,h,0"))]
+ (match_operand:FMOVE32 1 "input_operand" "r,m,r,f,<f32_vsx>,<zero_fp>,<zero_fp>,<f32_lm>,<f32_lm2>,<f32_sr>,<f32_sr2>,Z,<f32_av>,r,<f32_dm>,r,h,0"))]
"(gpc_reg_operand (operands[0], <MODE>mode)
|| gpc_reg_operand (operands[1], <MODE>mode))
&& (TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_SINGLE_FLOAT)"
@@ -6638,7 +6622,7 @@
(define_insn "*mov<mode>_hardfloat32"
[(set (match_operand:FMOVE64 0 "nonimmediate_operand" "=m,d,d,<f64_av>,Z,<f64_p9>,o,<f64_vsx>,<f64_vsx>,!r,Y,r,!r")
- (match_operand:FMOVE64 1 "input_operand" "d,m,d,Z,<f64_av>,o,<f64_p9>,<f64_vsx>,j,j,r,Y,r"))]
+ (match_operand:FMOVE64 1 "input_operand" "d,m,d,Z,<f64_av>,o,<f64_p9>,<f64_vsx>,<zero_fp>,<zero_fp>,r,Y,r"))]
"! TARGET_POWERPC64 && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT
&& (gpc_reg_operand (operands[0], <MODE>mode)
|| gpc_reg_operand (operands[1], <MODE>mode))"
@@ -6676,7 +6660,7 @@
; List Y->r and r->Y before r->r for reload.
(define_insn "*mov<mode>_hardfloat64"
[(set (match_operand:FMOVE64 0 "nonimmediate_operand" "=m,d,d,<f64_p9>,o,<f64_av>,Z,<f64_vsx>,<f64_vsx>,!r,Y,r,!r,*c*l,!r,*h,r,wg,r,<f64_dm>")
- (match_operand:FMOVE64 1 "input_operand" "d,m,d,o,<f64_p9>,Z,<f64_av>,<f64_vsx>,j,j,r,Y,r,r,h,0,wg,r,<f64_dm>,r"))]
+ (match_operand:FMOVE64 1 "input_operand" "d,m,d,o,<f64_p9>,Z,<f64_av>,<f64_vsx>,<zero_fp>,<zero_fp>,r,Y,r,r,h,0,wg,r,<f64_dm>,r"))]
"TARGET_POWERPC64 && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT
&& (gpc_reg_operand (operands[0], <MODE>mode)
|| gpc_reg_operand (operands[1], <MODE>mode))"
@@ -6739,7 +6723,7 @@
(define_insn_and_split "*mov<mode>_64bit_dm"
[(set (match_operand:FMOVE128_FPR 0 "nonimmediate_operand" "=m,d,d,d,Y,r,r,r,wh")
- (match_operand:FMOVE128_FPR 1 "input_operand" "d,m,d,j,r,jY,r,wh,r"))]
+ (match_operand:FMOVE128_FPR 1 "input_operand" "d,m,d,<zero_fp>,r,<zero_fp>Y,r,wh,r"))]
"TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_POWERPC64
&& FLOAT128_2REG_P (<MODE>mode)
&& (<MODE>mode != TDmode || WORDS_BIG_ENDIAN)
@@ -6752,8 +6736,8 @@
[(set_attr "length" "8,8,8,8,12,12,8,8,8")])
(define_insn_and_split "*movtd_64bit_nodm"
- [(set (match_operand:TD 0 "nonimmediate_operand" "=m,d,d,d,Y,r,r")
- (match_operand:TD 1 "input_operand" "d,m,d,j,r,jY,r"))]
+ [(set (match_operand:TD 0 "nonimmediate_operand" "=m,d,d,Y,r,r")
+ (match_operand:TD 1 "input_operand" "d,m,d,r,Y,r"))]
"TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_POWERPC64 && !WORDS_BIG_ENDIAN
&& (gpc_reg_operand (operands[0], TDmode)
|| gpc_reg_operand (operands[1], TDmode))"
@@ -6761,11 +6745,11 @@
"&& reload_completed"
[(pc)]
{ rs6000_split_multireg_move (operands[0], operands[1]); DONE; }
- [(set_attr "length" "8,8,8,8,12,12,8")])
+ [(set_attr "length" "8,8,8,12,12,8")])
(define_insn_and_split "*mov<mode>_32bit"
[(set (match_operand:FMOVE128_FPR 0 "nonimmediate_operand" "=m,d,d,d,Y,r,r")
- (match_operand:FMOVE128_FPR 1 "input_operand" "d,m,d,j,r,jY,r"))]
+ (match_operand:FMOVE128_FPR 1 "input_operand" "d,m,d,<zero_fp>,r,<zero_fp>Y,r"))]
"TARGET_HARD_FLOAT && TARGET_FPRS && !TARGET_POWERPC64
&& (FLOAT128_2REG_P (<MODE>mode)
|| int_reg_operand_not_pseudo (operands[0], <MODE>mode)
@@ -7277,7 +7261,7 @@
(define_insn "*ieee_128bit_vsx_neg<mode>2_internal"
[(set (match_operand:IEEE128 0 "register_operand" "=wa")
(neg:IEEE128 (match_operand:IEEE128 1 "register_operand" "wa")))
- (use (match_operand:V16QI 2 "register_operand" "=v"))]
+ (use (match_operand:V16QI 2 "register_operand" "v"))]
"TARGET_FLOAT128 && !TARGET_FLOAT128_HW"
"xxlxor %x0,%x1,%x2"
[(set_attr "type" "vecsimple")])
@@ -7306,7 +7290,7 @@
(define_insn "*ieee_128bit_vsx_abs<mode>2_internal"
[(set (match_operand:IEEE128 0 "register_operand" "=wa")
(abs:IEEE128 (match_operand:IEEE128 1 "register_operand" "wa")))
- (use (match_operand:V16QI 2 "register_operand" "=v"))]
+ (use (match_operand:V16QI 2 "register_operand" "v"))]
"TARGET_FLOAT128 && !TARGET_FLOAT128_HW"
"xxlandc %x0,%x1,%x2"
[(set_attr "type" "vecsimple")])
@@ -7322,7 +7306,7 @@
"#"
"&& 1"
[(parallel [(set (match_dup 0)
- (abs:IEEE128 (match_dup 1)))
+ (neg:IEEE128 (abs:IEEE128 (match_dup 1))))
(use (match_dup 2))])]
{
if (GET_CODE (operands[2]) == SCRATCH)
@@ -7339,7 +7323,7 @@
(neg:IEEE128
(abs:IEEE128
(match_operand:IEEE128 1 "register_operand" "wa"))))
- (use (match_operand:V16QI 2 "register_operand" "=v"))]
+ (use (match_operand:V16QI 2 "register_operand" "v"))]
"TARGET_FLOAT128 && !TARGET_FLOAT128_HW"
"xxlor %x0,%x1,%x2"
[(set_attr "type" "vecsimple")])
@@ -11935,7 +11919,7 @@
(const_int 1))
(label_ref (match_operand 0 "" ""))
(pc)))
- (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*c*l")
+ (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*d*c*l")
(plus:P (match_dup 1)
(const_int -1)))
(clobber (match_scratch:CC 3 "=X,&x,&x,&x"))
@@ -11959,7 +11943,7 @@
(const_int 1))
(pc)
(label_ref (match_operand 0 "" ""))))
- (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*c*l")
+ (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*d*c*l")
(plus:P (match_dup 1)
(const_int -1)))
(clobber (match_scratch:CC 3 "=X,&x,&x,&x"))
@@ -11985,7 +11969,7 @@
(const_int 1))
(label_ref (match_operand 0 "" ""))
(pc)))
- (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*c*l")
+ (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*d*c*l")
(plus:P (match_dup 1)
(const_int -1)))
(clobber (match_scratch:CC 3 "=X,&x,&x,&x"))
@@ -12009,7 +11993,7 @@
(const_int 1))
(pc)
(label_ref (match_operand 0 "" ""))))
- (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*c*l")
+ (set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*d*c*l")
(plus:P (match_dup 1)
(const_int -1)))
(clobber (match_scratch:CC 3 "=X,&x,&x,&x"))
@@ -12036,7 +12020,7 @@
(const_int 1)])
(match_operand 5 "" "")
(match_operand 6 "" "")))
- (set (match_operand:P 0 "gpc_reg_operand" "")
+ (set (match_operand:P 0 "int_reg_operand" "")
(plus:P (match_dup 1) (const_int -1)))
(clobber (match_scratch:CC 3 ""))
(clobber (match_scratch:P 4 ""))]
@@ -12906,8 +12890,8 @@
;; reload)
(define_insn "fusion_gpr_load_<mode>"
- [(set (match_operand:INT1 0 "base_reg_operand" "=&b")
- (unspec:INT1 [(match_operand:INT1 1 "fusion_addis_mem_combo_load" "")]
+ [(set (match_operand:INT1 0 "base_reg_operand" "=b")
+ (unspec:INT1 [(match_operand:INT1 1 "fusion_addis_mem_combo_load" "wF")]
UNSPEC_FUSION_GPR))]
"TARGET_P8_FUSION"
{
@@ -12978,7 +12962,7 @@
(unspec:GPR_FUSION
[(match_operand:GPR_FUSION 1 "fusion_addis_mem_combo_load" "wF")]
UNSPEC_FUSION_P9))
- (clobber (match_operand:P 2 "base_reg_operand" "=&b"))]
+ (clobber (match_operand:P 2 "base_reg_operand" "=b"))]
"TARGET_P9_FUSION"
{
/* This insn is a secondary reload insn, which cannot have alternatives.
diff --git a/gcc/config/rs6000/vxworks.h b/gcc/config/rs6000/vxworks.h
index 901a81c..7b90fda 100644
--- a/gcc/config/rs6000/vxworks.h
+++ b/gcc/config/rs6000/vxworks.h
@@ -138,3 +138,10 @@ VXWORKS_ADDITIONAL_CPP_SPEC
/* No _mcount profiling on VxWorks. */
#undef FUNCTION_PROFILER
#define FUNCTION_PROFILER(FILE,LABELNO) VXWORKS_FUNCTION_PROFILER(FILE,LABELNO)
+
+/* Define this to be nonzero if static stack checking is supported. */
+#define STACK_CHECK_STATIC_BUILTIN 1
+
+/* This platform supports the probing method of stack checking (RTP mode).
+ 8K is reserved in the stack to propagate exceptions in case of overflow. */
+#define STACK_CHECK_PROTECT 8192
diff --git a/gcc/config/rs6000/vxworksae.h b/gcc/config/rs6000/vxworksae.h
index e607973..97e1c70 100644
--- a/gcc/config/rs6000/vxworksae.h
+++ b/gcc/config/rs6000/vxworksae.h
@@ -21,3 +21,8 @@ along with GCC; see the file COPYING3. If not see
/* VxWorksAE for E500V2 expects a specific CPU value to designate 8548. */
#undef VXCPU_FOR_8548
#define VXCPU_FOR_8548 "PPCE500V2"
+
+/* This platform supports the probing method of stack checking and
+ requires 4K of space for executing a possible last chance handler. */
+#undef STACK_CHECK_PROTECT
+#define STACK_CHECK_PROTECT 4096
diff --git a/gcc/config/rx/rx.c b/gcc/config/rx/rx.c
index 88cf18c..3a374a0 100644
--- a/gcc/config/rx/rx.c
+++ b/gcc/config/rx/rx.c
@@ -467,7 +467,7 @@ rx_print_operand_address (FILE * file, machine_mode /*mode*/, rtx addr)
static void
rx_print_integer (FILE * file, HOST_WIDE_INT val)
{
- if (IN_RANGE (val, -64, 64))
+ if (val < 64)
fprintf (file, HOST_WIDE_INT_PRINT_DEC, val);
else
fprintf (file,
diff --git a/gcc/config/s390/2827.md b/gcc/config/s390/2827.md
index 7baf990..21a5ee9 100644
--- a/gcc/config/s390/2827.md
+++ b/gcc/config/s390/2827.md
@@ -18,20 +18,19 @@
;; along with GCC; see the file COPYING3. If not see
;; <http://www.gnu.org/licenses/>.
-
-(define_attr "ooo_cracked" ""
+(define_attr "zEC12_cracked" ""
(cond [(eq_attr "mnemonic" "cgdbr,clfxtr,cdgtr,celfbr,cxgtr,clfebr,clc,lngfr,cs,cfxbr,xc,clfdbr,basr,ex,cxlgtr,clfdtr,srdl,lpgfr,cdlgbr,cgxtr,cxlftr,nc,cxftr,cdfbr,clfxbr,cdftr,clgxbr,cgdtr,cxlgbr,mvc,clgdtr,cegbr,cfebr,cdlftr,sldl,cdlgtr,csg,chhsi,clgebr,cxgbr,cxfbr,cdlfbr,cgebr,lzxr,oc,cdgbr,brasl,cgxbr,cxlfbr,clgxtr,exrl,cfdbr,celgbr,clgdbr,lxr,cpsdr,lcgfr,bras,srda,cefbr") (const_int 1)]
(const_int 0)))
-(define_attr "ooo_expanded" ""
+(define_attr "zEC12_expanded" ""
(cond [(eq_attr "mnemonic" "dlr,dsgr,d,dsgf,stam,dsgfr,dlgr,dsg,cds,dr,stm,mvc,dl,cdsg,stmy,dlg,stmg,lam") (const_int 1)]
(const_int 0)))
-(define_attr "ooo_endgroup" ""
+(define_attr "zEC12_endgroup" ""
(cond [(eq_attr "mnemonic" "ipm") (const_int 1)]
(const_int 0)))
-(define_attr "ooo_groupalone" ""
+(define_attr "zEC12_groupalone" ""
(cond [(eq_attr "mnemonic" "lnxbr,madb,ltxtr,clc,axtr,msebr,slbgr,xc,alcr,lpxbr,slbr,maebr,mlg,mfy,lxdtr,maeb,lxeb,nc,mxtr,sxtr,dxbr,alc,msdbr,ltxbr,lxdb,madbr,lxdbr,lxebr,mvc,m,mseb,mlr,mlgr,slb,tcxb,msdb,sqxbr,alcgr,oc,flogr,alcg,mxbr,dxtr,axbr,mr,sxbr,slbg,ml,lcxbr,bcr_flush") (const_int 1)]
(const_int 0)))
diff --git a/gcc/config/s390/2964.md b/gcc/config/s390/2964.md
new file mode 100644
index 0000000..d2211e1
--- /dev/null
+++ b/gcc/config/s390/2964.md
@@ -0,0 +1,232 @@
+;; Scheduling description for z13.
+;; Copyright (C) 2016 Free Software Foundation, Inc.
+;; Contributed by Andreas Krebbel (Andreas.Krebbel@de.ibm.com)
+
+;; 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/>.
+
+
+; generator options: vector_ecycs=12 cracked_ecycs=6 scale_ecycs=5
+
+(define_attr "z13_cracked" ""
+ (cond [(eq_attr "mnemonic" "celgbr,vscef,vsceg,exrl,clfebr,cefbr,chhsi,\
+vgef,vgeg,cdlftr,lcgfr,cfdbr,cgdbr,lzxr,cfxbr,rnsbg,cgdtr,cegbr,rxsbg,ex,\
+cgxtr,clfxtr,cdlgtr,brasl,efpc,cfebr,tbeginc,celfbr,clgxbr,vsteb,vsteh,\
+clfdtr,cdfbr,lngfr,clgebr,stpq,cs,lpgfr,cdlgbr,lpq,cdgtr,d,cgxbr,cdftr,\
+rosbg,clgdbr,cdgbr,bras,tbegin,clfdbr,cdlfbr,cgebr,clfxbr,lxr,csy,csg,clgdtr,\
+clgxtr") (const_int 1)]
+ (const_int 0)))
+
+(define_attr "z13_expanded" ""
+ (cond [(eq_attr "mnemonic" "cxlftr,cdsg,cdsy,stam,lam,dsgf,lmg,cxlgtr,\
+dl,cxftr,sldl,dsg,cxlfbr,cxgtr,stmg,stmy,stm,lm,cds,lmy,cxfbr,cxlgbr,srda,\
+srdl,cxgbr,dlg") (const_int 1)]
+ (const_int 0)))
+
+(define_attr "z13_groupalone" ""
+ (cond [(eq_attr "mnemonic" "mvc,dxbr,lxebr,axtr,cxtr,alcr,lxdb,lxeb,mxtr,\
+mfy,cxbr,dsgr,lcxbr,slb,mr,dr,alc,slbr,maebr,mlgr,dsgfr,sxtr,tdcxt,tabort,\
+msebr,lxdtr,ltxtr,slbg,ml,mxbr,maeb,oc,dxtr,msdb,sqxbr,mseb,xc,m,clc,mlg,\
+mlr,fixbra,alcgr,nc,sfpc,dlgr,fixbr,slbgr,fixtr,lpxbr,axbr,lxdbr,ltxbr,\
+tcxb,dlr,lnxbr,sxbr,flogr,alcg,tend,madb,bcr_flush") (const_int 1)]
+ (const_int 0)))
+
+(define_attr "z13_endgroup" ""
+ (cond [(eq_attr "mnemonic" "ipm") (const_int 1)]
+ (const_int 0)))
+
+(define_attr "z13_unit_lsu" ""
+ (cond [(eq_attr "mnemonic" "vlbb,mvc,llgc,llc,llhrl,vl,llghrl,vlrepf,\
+vlrepg,vlreph,lde,ldy,tabort,l,llh,ld,lg,ly,vlrepb,vllezb,vllezf,vllezg,\
+vllezh,oc,xc,clc,lrl,ear,nc,lgrl,sfpc,llgf,llgfrl,llgh,llgt,lcbb,vll,sar") (const_int 1)]
+ (const_int 0)))
+
+(define_attr "z13_unit_fxu" ""
+ (cond [(eq_attr "mnemonic" "s,lcgr,x,nop,oiy,ppa,ng,msy,sgrk,vstl,aghik,\
+msgf,ipm,mvi,stocg,rll,srlg,cghsi,clgit,srlk,alrk,sg,sh,sl,st,sy,vst,ark,\
+xgr,agsi,tm,nrk,shy,llhr,agf,alcr,slgfr,sr,clgrt,laa,lder,sgf,lan,llilf,\
+llilh,ag,llill,lay,al,n,laxg,ar,ahi,sgr,ntstg,ay,stcy,nopr,mfy,ngrk,lbr,\
+br,dsgr,stdy,ork,ldgr,lcr,cg,ch,lgfrl,cl,stoc,cr,agfr,stgrl,cy,alfi,xg,\
+cgfi,xi,clfhsi,cgfr,xr,slb,mghi,clfi,slg,clhhsi,agfi,clfit,sly,mr,ldr,nihf,\
+nihh,algfi,dr,nihl,algf,algfr,algr,clgf,clgr,clgt,aghi,alc,alg,locg,alr,\
+locr,cghi,aly,alghsik,slbr,clgfrl,mhy,cit,nr,ny,xiy,mlgr,sthy,cly,dsgfr,\
+rllg,cgit,lgb,lgf,clgrl,lgh,lrvgr,cliy,cgrl,lgr,slrk,clrt,icy,laog,og,agr,\
+mvhi,lhrl,or,lhr,vlvgp,lhy,nilf,oy,nilh,nill,lcdfr,mviy,tmhh,tmhl,sthrl,\
+ltgf,ltgr,srk,clghrl,ahy,vstef,vsteg,ah,vlgvb,llgcr,tmh,tml,clmy,slr,cfi,\
+stc,std,ste,stg,sth,locgr,slbg,sty,tmlh,la,lb,mvghi,lh,risbgn,lrvg,lr,asi,\
+lt,ahik,lrvr,cgf,cgh,cgr,clhrl,lzdr,tmll,mh,ml,vlvgb,ms,lrv,vlvgf,xgrk,\
+vlvgg,llgfr,vlvgh,slfi,chi,chy,mhi,lzer,alhsik,ni,ltgfr,loc,icm,oi,cgfrl,\
+agrk,lgat,oilh,llghr,lghrl,oill,xihf,lpgr,cgrt,clrl,sgfr,lpr,lgbr,strl,\
+algrk,alsi,srak,slgf,a,b,c,slgr,m,o,algsi,icmh,srag,iilf,ogrk,clg,icmy,\
+cli,clm,clr,clt,slgrk,mlg,lao,mlr,risbg,mvhhi,lat,etnd,lax,iihf,sra,alcgr,\
+msgr,clghsi,stey,ngr,xilf,laag,oihf,oihh,oihl,ltg,ltr,niy,lgfi,dlgr,lgfr,\
+slgfi,llcr,slbgr,chrl,lgdr,pfpo,lang,basr,sllg,sllk,lghi,lghr,vlgvf,vlgvg,\
+vlgvh,vlr,chsi,lngr,cghrl,srl,lhi,oilf,crl,crt,afi,xrk,llgtr,llihf,llihh,\
+llihl,dlr,msgfi,msgfr,msg,flogr,xy,msr,clgfi,clgfr,ogr,popcnt,alcg,lndfr,\
+larl,sll,tmy,msfi,ic,lpdfr,tend,lnr") (const_int 1)]
+ (const_int 0)))
+
+(define_attr "z13_unit_vfu" ""
+ (cond [(eq_attr "mnemonic" "seb,vcksm,vfadb,vleib,vchgs,vleif,vleig,vleih,\
+vgbm,verimb,vone,verimf,verimg,verimh,dxbr,verllvb,lpebr,verllvf,verllvg,\
+verllvh,vfeneb,wcdgb,vfenef,vfeneh,vchhs,vctzb,vctzf,vctzg,vctzh,vlcb,aeb,\
+vlcf,vlcg,vlch,vfmsdb,vgfmab,ltebr,vgfmaf,vgfmag,vgfmah,vmaeh,vsb,vsf,vsg,\
+vsh,vsl,vsq,lxebr,cdtr,fiebr,vupllb,vupllf,vupllh,vmrhb,madbr,vtm,vmrhf,\
+vmrhg,vmrhh,axtr,fiebra,vleb,cxtr,vlef,vleg,vleh,vpkf,vpkg,vpkh,vmlob,vmlof,\
+vmloh,lxdb,ldeb,mdtr,vceqfs,adb,wflndb,lxeb,vn,vo,vchlb,vx,mxtr,vchlf,vchlg,\
+vchlh,vfcedbs,vfcedb,vceqgs,cxbr,msdbr,vcdgb,debr,vceqhs,meeb,lcxbr,vavglb,\
+vavglf,vavglg,vavglh,wfcedbs,vmrlb,vmrlf,vmrlg,vmrlh,wfchedbs,vmxb,tcdb,\
+vmahh,vsrlb,wcgdb,lcdbr,vistrbs,vrepb,wfmdb,vrepf,vrepg,vreph,ler,wcdlgb,\
+ley,vistrb,vistrf,vistrh,tceb,wfsqdb,sqeb,vsumqf,vsumqg,vesrlb,vfeezbs,\
+maebr,vesrlf,vesrlg,vesrlh,vmeb,vmef,vmeh,meebr,vflcdb,wfmadb,vperm,sxtr,\
+vclzf,vgm,vgmb,vgmf,vgmg,vgmh,tdcxt,vzero,msebr,veslb,veslf,veslg,vfenezb,\
+vfenezf,vfenezh,vistrfs,vchf,vchg,vchh,vmhb,vmhf,vmhh,cdb,veslvb,ledbr,\
+veslvf,veslvg,veslvh,wclgdb,vfmdb,vmnlb,vmnlf,vmnlg,vmnlh,vclzb,vfeezfs,\
+vclzg,vclzh,mdb,vmxlb,vmxlf,vmxlg,vmxlh,ltdtr,vsbcbiq,ceb,wfddb,sebr,vistrhs,\
+lxdtr,lcebr,vab,vaf,vag,vah,ltxtr,vlpf,vlpg,vsegb,vaq,vsegf,vsegh,wfchdbs,\
+sdtr,cdbr,vfeezhs,le,wldeb,vfmadb,vchlbs,vacccq,vmaleb,vsel,vmalef,vmaleh,\
+vflndb,mdbr,vmlb,wflpdb,ldetr,vpksfs,vpksf,vpksg,vpksh,sqdb,mxbr,sqdbr,\
+vmaeb,veslh,vmaef,vpklsf,vpklsg,vpklsh,verllb,vchb,ddtr,verllf,verllg,verllh,\
+wfsdb,maeb,vclgdb,vftcidb,vpksgs,vmxf,vmxg,vmxh,fidbra,vmnb,vmnf,vmng,vfchedbs,\
+lnebr,vfidb,dxtr,ddb,msdb,vmalhb,vfddb,vmalhf,vmalhh,vpkshs,vfsdb,sqxbr,\
+vmalhw,ltdbr,vmob,vmof,vmoh,deb,vchlfs,mseb,vcdlgb,vlpb,wfmsdb,vlph,vmahb,\
+vldeb,vmahf,vgfmb,fidbr,vfsqdb,aebr,wledb,vchlgs,vesravb,vfchdbs,cebr,vesravf,\
+vesravg,vesravh,vcgdb,fixbra,vrepib,vrepif,vrepig,vrepih,tdcdt,vchlhs,vceqb,\
+vscbib,vceqf,vceqg,vscbif,vscbig,vscbih,vmlhw,vscbiq,vuphb,vuphf,vuphh,\
+vfchedb,tdcet,vslb,vpklsfs,adbr,sqebr,vfchdb,fixbr,vpklsgs,vsldb,vmleb,\
+vmlef,vmleh,cpsdr,vmalb,vmalf,vavgb,vmlf,vavgf,vavgg,vavgh,vgfmf,vgfmg,\
+vgfmh,fidtr,vpklshs,lndbr,vno,lpdbr,vacq,vledb,vchbs,vfeeb,vfeef,vfeeh,\
+fixtr,vaccb,wfadb,vaccf,vaccg,vacch,vnot,vmalob,vaccq,vmalof,vmaloh,lpxbr,\
+ledtr,vuplb,vuplf,axbr,lxdbr,ltxbr,vpopct,vpdi,vmlhb,vmlhf,vmlhh,sdbr,vnc,\
+vsumb,vsrab,vsumh,vmaob,vmaof,vmaoh,vesrlvb,vesrlvf,vesrlvg,vesrlvh,tcxb,\
+vceqbs,vceqh,lnxbr,sxbr,vesrab,wflcdb,vesraf,vesrag,vesrah,vflpdb,vmnh,\
+vsbiq,adtr,vsra,vsrl,vuplhb,sdb,vuplhf,vuplhh,vsumgf,vsumgh,ldebr,vuplhw,\
+vchfs,madb,ddbr") (const_int 1)]
+ (const_int 0)))
+
+(define_insn_reservation "z13_0" 0
+ (and (eq_attr "cpu" "z13")
+ (eq_attr "mnemonic" "s,lcgr,x,nop,oiy,vlbb,ppa,ng,sgrk,vstl,aghik,\
+mvc,ipm,llgc,mvi,stocg,rll,jg,srlg,cghsi,clgit,srlk,alrk,sg,sh,sl,st,sy,\
+vst,ark,xgr,agsi,tm,nrk,shy,llhr,agf,alcr,slgfr,sr,clgrt,llc,laa,lder,sgf,\
+lan,llhrl,llilf,llilh,ag,llill,lay,al,n,laxg,ar,ahi,sgr,ntstg,ay,stcy,vl,\
+nopr,ngrk,lbr,br,stdy,ork,ldgr,lcr,cg,ch,llghrl,lgfrl,cl,stoc,cr,agfr,stgrl,\
+cy,alfi,xg,cgfi,xi,vlrepf,vlrepg,vlreph,clfhsi,cgfr,xr,slb,mghi,clfi,slg,\
+lde,clhhsi,agfi,clfit,sly,ldr,ldy,nihf,nihh,algfi,nihl,algf,algfr,algr,\
+clgf,clgr,clgt,aghi,alc,alg,locg,alr,locr,cghi,aly,alghsik,slbr,clgfrl,\
+mhy,cit,nr,ny,xiy,sthy,cly,rllg,cgit,lgb,lgf,clgrl,lgh,lrvgr,cliy,cgrl,\
+lgr,slrk,clrt,icy,laog,og,agr,mvhi,lhrl,or,lhr,vlvgp,lhy,nilf,oy,nilh,tabort,\
+nill,lcdfr,mviy,tmhh,tmhl,sthrl,ltgf,ltgr,srk,clghrl,ahy,vstef,vsteg,ah,\
+vlgvb,llgcr,tmh,tml,clmy,slr,cfi,stc,std,ste,stg,sth,l,locgr,llh,slbg,sty,\
+tmlh,la,lb,ld,mvghi,lg,lh,risbgn,lrvg,lr,asi,lt,ahik,ly,lrvr,vlrepb,vllezb,\
+cgf,cgh,vllezf,vllezg,vllezh,cgr,clhrl,lzdr,tmll,mh,vlvgb,lrv,vlvgf,xgrk,\
+vlvgg,llgfr,vlvgh,slfi,chi,chy,mhi,lzer,alhsik,ni,ltgfr,loc,icm,oc,oi,cgfrl,\
+agrk,lgat,oilh,llghr,lghrl,oill,xihf,lpgr,cgrt,clrl,sgfr,lpr,lgbr,strl,\
+algrk,alsi,srak,brcl,slgf,xc,a,b,c,slgr,j,o,algsi,icmh,srag,iilf,ogrk,clc,\
+clg,icmy,cli,clm,clr,clt,slgrk,lrl,lao,risbg,mvhhi,lat,etnd,lax,iihf,sra,\
+alcgr,clghsi,ear,nc,lgrl,stey,ngr,xilf,laag,oihf,oihh,oihl,ltg,ltr,niy,\
+lgfi,sfpc,lgfr,slgfi,llcr,llgf,llgfrl,llgh,slbgr,llgt,chrl,lgdr,pfpo,lang,\
+basr,lcbb,sllg,sllk,lghi,vll,lghr,vlgvf,vlgvg,vlgvh,vlr,chsi,lngr,cghrl,\
+srl,sar,lhi,oilf,crl,crt,afi,xrk,llgtr,llihf,llihh,llihl,xy,clgfi,clgfr,\
+ogr,popcnt,alcg,lndfr,larl,sll,tmy,ic,lpdfr,tend,lnr,bcr_flush")) "nothing")
+
+(define_insn_reservation "z13_1" 1
+ (and (eq_attr "cpu" "z13")
+ (eq_attr "mnemonic" "celgbr,vscef,vsceg,msy,msgf,cxlftr,cdsg,cdsy,\
+exrl,clfebr,cefbr,chhsi,stam,vgef,vgeg,cdlftr,lam,mfy,lcgfr,cfdbr,dsgf,\
+cgdbr,lzxr,lmg,cfxbr,rnsbg,cxlgtr,mr,dl,cxftr,sldl,cgdtr,cegbr,rxsbg,ex,\
+cgxtr,clfxtr,mlgr,cdlgtr,brasl,dsg,efpc,cfebr,tbeginc,celfbr,clgxbr,vsteb,\
+vsteh,cxlfbr,clfdtr,cxgtr,stmg,stmy,stm,lm,cds,cdfbr,ml,ms,lngfr,clgebr,\
+stpq,lmy,cs,lpgfr,cdlgbr,lpq,cxfbr,cxlgbr,cdgtr,d,m,mlg,mlr,cgxbr,cdftr,\
+msgr,rosbg,clgdbr,cdgbr,srda,bras,srdl,tbegin,clfdbr,cdlfbr,cxgbr,cgebr,\
+dlg,clfxbr,lxr,csy,msgfi,msgfr,msg,flogr,msr,csg,msfi,clgdtr,clgxtr")) "nothing")
+
+(define_insn_reservation "z13_2" 2
+ (and (eq_attr "cpu" "z13")
+ (eq_attr "mnemonic" "seb,vcksm,vfadb,vleib,vchgs,vleif,vleig,vleih,\
+vgbm,verimb,vone,verimf,verimg,verimh,verllvb,lpebr,verllvf,verllvg,verllvh,\
+vfeneb,wcdgb,vfenef,vfeneh,vchhs,vctzb,vctzf,vctzg,vctzh,vlcb,aeb,vlcf,\
+vlcg,vlch,vfmsdb,vgfmab,ltebr,vgfmaf,vgfmag,vgfmah,vmaeh,vsb,vsf,vsg,vsh,\
+vsl,vsq,lxebr,cdtr,fiebr,vupllb,vupllf,vupllh,vmrhb,madbr,vtm,vmrhf,vmrhg,\
+vmrhh,axtr,fiebra,vleb,cxtr,vlef,vleg,vleh,vpkf,vpkg,vpkh,vmlob,vmlof,vmloh,\
+lxdb,ldeb,vceqfs,adb,wflndb,lxeb,vn,vo,vchlb,vx,vchlf,vchlg,vchlh,vfcedbs,\
+vfcedb,vceqgs,cxbr,msdbr,vcdgb,vceqhs,meeb,lcxbr,vavglb,vavglf,vavglg,vavglh,\
+wfcedbs,vmrlb,vmrlf,vmrlg,vmrlh,wfchedbs,vmxb,tcdb,vmahh,vsrlb,wcgdb,lcdbr,\
+vistrbs,vrepb,wfmdb,vrepf,vrepg,vreph,ler,wcdlgb,ley,vistrb,vistrf,vistrh,\
+tceb,vsumqf,vsumqg,vesrlb,vfeezbs,maebr,vesrlf,vesrlg,vesrlh,vmeb,vmef,\
+vmeh,meebr,vflcdb,wfmadb,vperm,sxtr,vclzf,vgm,vgmb,vgmf,vgmg,vgmh,tdcxt,\
+vzero,msebr,veslb,veslf,veslg,vfenezb,vfenezf,vfenezh,vistrfs,vchf,vchg,\
+vchh,vmhb,vmhf,vmhh,cdb,veslvb,ledbr,veslvf,veslvg,veslvh,wclgdb,vfmdb,\
+vmnlb,vmnlf,vmnlg,vmnlh,vclzb,vfeezfs,vclzg,vclzh,mdb,vmxlb,vmxlf,vmxlg,\
+vmxlh,ltdtr,vsbcbiq,ceb,sebr,vistrhs,lxdtr,lcebr,vab,vaf,vag,vah,ltxtr,\
+vlpf,vlpg,vsegb,vaq,vsegf,vsegh,wfchdbs,sdtr,cdbr,vfeezhs,le,wldeb,vfmadb,\
+vchlbs,vacccq,vmaleb,vsel,vmalef,vmaleh,vflndb,mdbr,vmlb,wflpdb,ldetr,vpksfs,\
+vpksf,vpksg,vpksh,vmaeb,veslh,vmaef,vpklsf,vpklsg,vpklsh,verllb,vchb,verllf,\
+verllg,verllh,wfsdb,maeb,vclgdb,vftcidb,vpksgs,vmxf,vmxg,vmxh,fidbra,vmnb,\
+vmnf,vmng,vfchedbs,lnebr,vfidb,msdb,vmalhb,vmalhf,vmalhh,vpkshs,vfsdb,vmalhw,\
+ltdbr,vmob,vmof,vmoh,vchlfs,mseb,vcdlgb,vlpb,wfmsdb,vlph,vmahb,vldeb,vmahf,\
+vgfmb,fidbr,aebr,wledb,vchlgs,vesravb,vfchdbs,cebr,vesravf,vesravg,vesravh,\
+vcgdb,fixbra,vrepib,vrepif,vrepig,vrepih,tdcdt,vchlhs,vceqb,vscbib,vceqf,\
+vceqg,vscbif,vscbig,vscbih,vmlhw,vscbiq,vuphb,vuphf,vuphh,vfchedb,tdcet,\
+vslb,vpklsfs,adbr,vfchdb,fixbr,vpklsgs,vsldb,vmleb,vmlef,vmleh,cpsdr,vmalb,\
+vmalf,vavgb,vmlf,vavgf,vavgg,vavgh,vgfmf,vgfmg,vgfmh,fidtr,vpklshs,lndbr,\
+vno,lpdbr,vacq,vledb,vchbs,vfeeb,vfeef,vfeeh,fixtr,vaccb,wfadb,vaccf,vaccg,\
+vacch,vnot,vmalob,vaccq,vmalof,vmaloh,lpxbr,vuplb,vuplf,axbr,lxdbr,ltxbr,\
+vpopct,vpdi,vmlhb,vmlhf,vmlhh,sdbr,vnc,vsumb,vsrab,vsumh,vmaob,vmaof,vmaoh,\
+vesrlvb,vesrlvf,vesrlvg,vesrlvh,tcxb,vceqbs,vceqh,lnxbr,sxbr,vesrab,wflcdb,\
+vesraf,vesrag,vesrah,vflpdb,vmnh,vsbiq,adtr,vsra,vsrl,vuplhb,sdb,vuplhf,\
+vuplhh,vsumgf,vsumgh,ldebr,vuplhw,vchfs,madb")) "nothing")
+
+(define_insn_reservation "z13_3" 3
+ (and (eq_attr "cpu" "z13")
+ (eq_attr "mnemonic" "ledtr")) "nothing")
+
+(define_insn_reservation "z13_4" 4
+ (and (eq_attr "cpu" "z13")
+ (eq_attr "mnemonic" "dr,mxbr,dlr")) "nothing")
+
+(define_insn_reservation "z13_6" 6
+ (and (eq_attr "cpu" "z13")
+ (eq_attr "mnemonic" "debr,sqeb,deb,sqebr")) "nothing")
+
+(define_insn_reservation "z13_7" 7
+ (and (eq_attr "cpu" "z13")
+ (eq_attr "mnemonic" "mdtr")) "nothing")
+
+(define_insn_reservation "z13_8" 8
+ (and (eq_attr "cpu" "z13")
+ (eq_attr "mnemonic" "wfddb,ddb,vfddb,ddbr")) "nothing")
+
+(define_insn_reservation "z13_9" 9
+ (and (eq_attr "cpu" "z13")
+ (eq_attr "mnemonic" "dsgr,wfsqdb,dsgfr,sqdb,sqdbr,vfsqdb")) "nothing")
+
+(define_insn_reservation "z13_13" 13
+ (and (eq_attr "cpu" "z13")
+ (eq_attr "mnemonic" "mxtr,ddtr")) "nothing")
+
+(define_insn_reservation "z13_16" 16
+ (and (eq_attr "cpu" "z13")
+ (eq_attr "mnemonic" "sqxbr")) "nothing")
+
+(define_insn_reservation "z13_17" 17
+ (and (eq_attr "cpu" "z13")
+ (eq_attr "mnemonic" "dxtr")) "nothing")
+
+(define_insn_reservation "z13_20" 20
+ (and (eq_attr "cpu" "z13")
+ (eq_attr "mnemonic" "dxbr,dlgr")) "nothing")
+
diff --git a/gcc/config/s390/constraints.md b/gcc/config/s390/constraints.md
index c1d2c8e..7857700 100644
--- a/gcc/config/s390/constraints.md
+++ b/gcc/config/s390/constraints.md
@@ -36,6 +36,7 @@
;; jyy: constant consisting of byte chunks being either 0 or 0xff
;; jKK: constant vector with all elements having the same value and
;; matching K constraint
+;; jm6: An integer operand with the lowest order 6 bits all ones.
;; t -- Access registers 36 and 37.
;; v -- Vector registers v0-v31.
;; C -- A signed 8-bit constant (-128..127)
@@ -78,7 +79,7 @@
;; does *not* refer to a literal pool entry.
;; U -- Pointer with short displacement. (deprecated - use ZQZR)
;; W -- Pointer with long displacement. (deprecated - use ZSZT)
-;; Y -- Shift count operand.
+;; Y -- Address style operand without index.
;; ZQ -- Pointer without index register and with short displacement.
;; ZR -- Pointer with index register and short displacement.
;; ZS -- Pointer without index register but with long displacement.
@@ -188,12 +189,12 @@
(define_address_constraint "Y"
- "Shift count operand"
+ "Address style operand without index register"
-;; Simply check for the basic form of a shift count. Reload will
-;; take care of making sure we have a proper base register.
+;; Simply check for base + offset style operands. Reload will take
+;; care of making sure we have a proper base register.
- (match_test "s390_decompose_shift_count (op, NULL, NULL)" ))
+ (match_test "s390_decompose_addrstyle_without_index (op, NULL, NULL)" ))
;; N -- Multiple letter constraint followed by 4 parameter letters.
@@ -415,6 +416,9 @@
(match_test "const_vec_duplicate_p (op)"))
(match_test "satisfies_constraint_K (XVECEXP (op, 0, 0))")))
+(define_constraint "jm6"
+ "@internal An integer operand with the lowest order 6 bits all ones."
+ (match_operand 0 "const_int_6bitset_operand"))
;;
;; Memory constraints follow.
diff --git a/gcc/config/s390/predicates.md b/gcc/config/s390/predicates.md
index cbc8092..e66f4a4 100644
--- a/gcc/config/s390/predicates.md
+++ b/gcc/config/s390/predicates.md
@@ -87,7 +87,7 @@
;; Return true if OP is a valid operand as scalar shift count or setmem.
-(define_predicate "shift_count_or_setmem_operand"
+(define_predicate "setmem_operand"
(match_code "reg, subreg, plus, const_int")
{
HOST_WIDE_INT offset;
@@ -98,7 +98,7 @@
return false;
/* Extract base register and offset. */
- if (!s390_decompose_shift_count (op, &base, &offset))
+ if (!s390_decompose_addrstyle_without_index (op, &base, &offset))
return false;
/* Don't allow any non-base hard registers. Doing so without
@@ -115,6 +115,10 @@
return true;
})
+; An integer operand with the lowest order 6 bits all ones.
+(define_predicate "const_int_6bitset_operand"
+ (and (match_code "const_int")
+ (match_test "(INTVAL (op) & 63) == 63")))
(define_predicate "nonzero_shift_count_operand"
(and (match_code "const_int")
(match_test "IN_RANGE (INTVAL (op), 1, GET_MODE_BITSIZE (mode) - 1)")))
diff --git a/gcc/config/s390/s390-protos.h b/gcc/config/s390/s390-protos.h
index 09032c9..2ccf0bb 100644
--- a/gcc/config/s390/s390-protos.h
+++ b/gcc/config/s390/s390-protos.h
@@ -109,6 +109,7 @@ extern bool s390_expand_movmem (rtx, rtx, rtx);
extern void s390_expand_setmem (rtx, rtx, rtx);
extern bool s390_expand_cmpmem (rtx, rtx, rtx, rtx);
extern void s390_expand_vec_strlen (rtx, rtx, rtx);
+extern void s390_expand_vec_movstr (rtx, rtx, rtx);
extern bool s390_expand_addcc (enum rtx_code, rtx, rtx, rtx, rtx, rtx);
extern bool s390_expand_insv (rtx, rtx, rtx, rtx);
extern void s390_expand_cs_hqi (machine_mode, rtx, rtx, rtx,
@@ -138,7 +139,8 @@ extern rtx_insn *s390_load_got (void);
extern rtx s390_get_thread_pointer (void);
extern void s390_emit_tpf_eh_return (rtx);
extern bool s390_legitimate_address_without_index_p (rtx);
-extern bool s390_decompose_shift_count (rtx, rtx *, HOST_WIDE_INT *);
+extern bool s390_decompose_addrstyle_without_index (rtx, rtx *,
+ HOST_WIDE_INT *);
extern int s390_branch_condition_mask (rtx);
extern int s390_compare_and_branch_condition_mask (rtx);
extern bool s390_extzv_shift_ok (int, int, unsigned HOST_WIDE_INT);
diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index b1ab0c0..1134d0f 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -340,6 +340,19 @@ extern int reload_completed;
/* Kept up to date using the SCHED_VARIABLE_ISSUE hook. */
static rtx_insn *last_scheduled_insn;
+#define MAX_SCHED_UNITS 3
+static int last_scheduled_unit_distance[MAX_SCHED_UNITS];
+
+/* The maximum score added for an instruction whose unit hasn't been
+ in use for MAX_SCHED_MIX_DISTANCE steps. Increase this value to
+ give instruction mix scheduling more priority over instruction
+ grouping. */
+#define MAX_SCHED_MIX_SCORE 8
+
+/* The maximum distance up to which individual scores will be
+ calculated. Everything beyond this gives MAX_SCHED_MIX_SCORE.
+ Increase this with the OOO windows size of the machine. */
+#define MAX_SCHED_MIX_DISTANCE 100
/* Structure used to hold the components of a S/390 memory
address. A legitimate address on S/390 is of the general
@@ -2804,9 +2817,7 @@ s390_decompose_address (rtx addr, struct s390_address *out)
return false;
}
- if (!REG_P (base)
- || (GET_MODE (base) != SImode
- && GET_MODE (base) != Pmode))
+ if (!REG_P (base) || GET_MODE (base) != Pmode)
return false;
if (REGNO (base) == STACK_POINTER_REGNUM
@@ -2852,9 +2863,7 @@ s390_decompose_address (rtx addr, struct s390_address *out)
return false;
}
- if (!REG_P (indx)
- || (GET_MODE (indx) != SImode
- && GET_MODE (indx) != Pmode))
+ if (!REG_P (indx) || GET_MODE (indx) != Pmode)
return false;
if (REGNO (indx) == STACK_POINTER_REGNUM
@@ -2973,26 +2982,29 @@ s390_decompose_address (rtx addr, struct s390_address *out)
return true;
}
-/* Decompose a RTL expression OP for a shift count into its components,
- and return the base register in BASE and the offset in OFFSET.
+/* Decompose a RTL expression OP for an address style operand into its
+ components, and return the base register in BASE and the offset in
+ OFFSET. While OP looks like an address it is never supposed to be
+ used as such.
- Return true if OP is a valid shift count, false if not. */
+ Return true if OP is a valid address operand, false if not. */
bool
-s390_decompose_shift_count (rtx op, rtx *base, HOST_WIDE_INT *offset)
+s390_decompose_addrstyle_without_index (rtx op, rtx *base,
+ HOST_WIDE_INT *offset)
{
- HOST_WIDE_INT off = 0;
+ rtx off = NULL_RTX;
/* We can have an integer constant, an address register,
or a sum of the two. */
- if (GET_CODE (op) == CONST_INT)
+ if (CONST_SCALAR_INT_P (op))
{
- off = INTVAL (op);
+ off = op;
op = NULL_RTX;
}
- if (op && GET_CODE (op) == PLUS && GET_CODE (XEXP (op, 1)) == CONST_INT)
+ if (op && GET_CODE (op) == PLUS && CONST_SCALAR_INT_P (XEXP (op, 1)))
{
- off = INTVAL (XEXP (op, 1));
+ off = XEXP (op, 1);
op = XEXP (op, 0);
}
while (op && GET_CODE (op) == SUBREG)
@@ -3002,7 +3014,18 @@ s390_decompose_shift_count (rtx op, rtx *base, HOST_WIDE_INT *offset)
return false;
if (offset)
- *offset = off;
+ {
+ if (off == NULL_RTX)
+ *offset = 0;
+ else if (CONST_INT_P (off))
+ *offset = INTVAL (off);
+ else if (CONST_WIDE_INT_P (off))
+ /* The offset will anyway be cut down to 12 bits so take just
+ the lowest order chunk of the wide int. */
+ *offset = CONST_WIDE_INT_ELT (off, 0);
+ else
+ gcc_unreachable ();
+ }
if (base)
*base = op;
@@ -3183,7 +3206,7 @@ s390_mem_constraint (const char *str, rtx op)
case 'Y':
/* Simply check for the basic form of a shift count. Reload will
take care of making sure we have a proper base register. */
- if (!s390_decompose_shift_count (op, NULL, NULL))
+ if (!s390_decompose_addrstyle_without_index (op, NULL, NULL))
return 0;
break;
case 'Z':
@@ -5609,6 +5632,124 @@ s390_expand_vec_strlen (rtx target, rtx string, rtx alignment)
emit_move_insn (target, temp);
}
+void
+s390_expand_vec_movstr (rtx result, rtx dst, rtx src)
+{
+ int very_unlikely = REG_BR_PROB_BASE / 100 - 1;
+ rtx temp = gen_reg_rtx (Pmode);
+ rtx src_addr = XEXP (src, 0);
+ rtx dst_addr = XEXP (dst, 0);
+ rtx src_addr_reg = gen_reg_rtx (Pmode);
+ rtx dst_addr_reg = gen_reg_rtx (Pmode);
+ rtx offset = gen_reg_rtx (Pmode);
+ rtx vsrc = gen_reg_rtx (V16QImode);
+ rtx vpos = gen_reg_rtx (V16QImode);
+ rtx loadlen = gen_reg_rtx (SImode);
+ rtx gpos_qi = gen_reg_rtx(QImode);
+ rtx gpos = gen_reg_rtx (SImode);
+ rtx done_label = gen_label_rtx ();
+ rtx loop_label = gen_label_rtx ();
+ rtx exit_label = gen_label_rtx ();
+ rtx full_label = gen_label_rtx ();
+
+ /* Perform a quick check for string ending on the first up to 16
+ bytes and exit early if successful. */
+
+ 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_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. */
+ emit_cmp_and_jump_insns (gpos, loadlen, GE, NULL_RTX, SImode, 1,
+ full_label);
+ emit_insn (gen_vstlv16qi (vsrc, gpos, dst));
+
+ force_expand_binop (Pmode, add_optab, dst_addr, gpos, result,
+ 1, OPTAB_DIRECT);
+ emit_jump (exit_label);
+ emit_barrier ();
+
+ emit_label (full_label);
+ LABEL_NUSES (full_label) = 1;
+
+ /* Calculate `offset' so that src + offset points to the last byte
+ before 16 byte alignment. */
+
+ /* temp = src_addr & 0xf */
+ force_expand_binop (Pmode, and_optab, src_addr, GEN_INT (15), temp,
+ 1, OPTAB_DIRECT);
+
+ /* offset = 0xf - temp */
+ emit_move_insn (offset, GEN_INT (15));
+ force_expand_binop (Pmode, sub_optab, offset, temp, offset,
+ 1, OPTAB_DIRECT);
+
+ /* Store `offset' bytes in the dstination string. The quick check
+ has loaded at least `offset' bytes into vsrc. */
+
+ emit_insn (gen_vstlv16qi (vsrc, gen_lowpart (SImode, offset), dst));
+
+ /* Advance to the next byte to be loaded. */
+ force_expand_binop (Pmode, add_optab, offset, const1_rtx, offset,
+ 1, OPTAB_DIRECT);
+
+ /* Make sure the addresses are single regs which can be used as a
+ base. */
+ emit_move_insn (src_addr_reg, src_addr);
+ emit_move_insn (dst_addr_reg, dst_addr);
+
+ /* MAIN LOOP */
+
+ emit_label (loop_label);
+ LABEL_NUSES (loop_label) = 1;
+
+ emit_move_insn (vsrc,
+ gen_rtx_MEM (V16QImode,
+ gen_rtx_PLUS (Pmode, src_addr_reg, offset)));
+
+ emit_insn (gen_vec_vfenesv16qi (vpos, vsrc, vsrc,
+ GEN_INT (VSTRING_FLAG_ZS | VSTRING_FLAG_CS)));
+ add_int_reg_note (s390_emit_ccraw_jump (8, EQ, done_label),
+ REG_BR_PROB, very_unlikely);
+
+ emit_move_insn (gen_rtx_MEM (V16QImode,
+ gen_rtx_PLUS (Pmode, dst_addr_reg, offset)),
+ vsrc);
+ /* offset += 16 */
+ force_expand_binop (Pmode, add_optab, offset, GEN_INT (16),
+ offset, 1, OPTAB_DIRECT);
+
+ emit_jump (loop_label);
+ emit_barrier ();
+
+ /* REGULAR EXIT */
+
+ /* We are done. Add the offset of the zero character to the dst_addr
+ pointer to get the result. */
+
+ emit_label (done_label);
+ LABEL_NUSES (done_label) = 1;
+
+ 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_move_insn (gpos, gen_rtx_SUBREG (SImode, gpos_qi, 0));
+
+ emit_insn (gen_vstlv16qi (vsrc, gpos, gen_rtx_MEM (BLKmode, dst_addr_reg)));
+
+ force_expand_binop (Pmode, add_optab, dst_addr_reg, gpos, result,
+ 1, OPTAB_DIRECT);
+
+ /* EARLY EXIT */
+
+ emit_label (exit_label);
+ LABEL_NUSES (exit_label) = 1;
+}
+
+
/* Expand conditional increment or decrement using alc/slb instructions.
Should generate code setting DST to either SRC or SRC + INCREMENT,
depending on the result of the comparison CMP_OP0 CMP_CODE CMP_OP1.
@@ -5922,7 +6063,7 @@ s390_expand_insv (rtx dest, rtx op1, rtx op2, rtx src)
{
machine_mode mode_s = GET_MODE (src);
- if (mode_s == VOIDmode)
+ if (CONSTANT_P (src))
{
/* For constant zero values the representation with AND
appears to be folded in more situations than the (set
@@ -6198,10 +6339,10 @@ s390_expand_vcond (rtx target, rtx then, rtx els,
can be handled by the optimization above but not by the
following code. Hence, force them into registers here. */
if (!REG_P (cmp_op1))
- cmp_op1 = force_reg (target_mode, cmp_op1);
+ cmp_op1 = force_reg (GET_MODE (cmp_op1), cmp_op1);
if (!REG_P (cmp_op2))
- cmp_op2 = force_reg (target_mode, cmp_op2);
+ cmp_op2 = force_reg (GET_MODE (cmp_op2), cmp_op2);
s390_expand_vec_compare (result_target, cond,
cmp_op1, cmp_op2);
@@ -6740,13 +6881,13 @@ s390_delegitimize_address (rtx orig_x)
instead the rightmost bits are interpreted as the value. */
static void
-print_shift_count_operand (FILE *file, rtx op)
+print_addrstyle_operand (FILE *file, rtx op)
{
HOST_WIDE_INT offset;
rtx base;
/* Extract base register and offset. */
- if (!s390_decompose_shift_count (op, &base, &offset))
+ if (!s390_decompose_addrstyle_without_index (op, &base, &offset))
gcc_unreachable ();
/* Sanity check. */
@@ -7042,7 +7183,8 @@ print_operand_address (FILE *file, rtx addr)
'O': print only the displacement of a memory reference or address.
'R': print only the base register of a memory reference or address.
'S': print S-type memory reference (base+displacement).
- 'Y': print shift count operand.
+ 'Y': print address style operand without index (e.g. shift count or setmem
+ operand).
'b': print integer X as if it's an unsigned byte.
'c': print integer X as if it's an signed byte.
@@ -7210,7 +7352,7 @@ print_operand (FILE *file, rtx x, int code)
break;
case 'Y':
- print_shift_count_operand (file, x);
+ print_addrstyle_operand (file, x);
return;
}
@@ -13560,27 +13702,66 @@ s390_z10_prevent_earlyload_conflicts (rtx_insn **ready, int *nready_p)
static int s390_sched_state;
-#define S390_OOO_SCHED_STATE_NORMAL 3
-#define S390_OOO_SCHED_STATE_CRACKED 4
+#define S390_SCHED_STATE_NORMAL 3
+#define S390_SCHED_STATE_CRACKED 4
-#define S390_OOO_SCHED_ATTR_MASK_CRACKED 0x1
-#define S390_OOO_SCHED_ATTR_MASK_EXPANDED 0x2
-#define S390_OOO_SCHED_ATTR_MASK_ENDGROUP 0x4
-#define S390_OOO_SCHED_ATTR_MASK_GROUPALONE 0x8
+#define S390_SCHED_ATTR_MASK_CRACKED 0x1
+#define S390_SCHED_ATTR_MASK_EXPANDED 0x2
+#define S390_SCHED_ATTR_MASK_ENDGROUP 0x4
+#define S390_SCHED_ATTR_MASK_GROUPALONE 0x8
static unsigned int
s390_get_sched_attrmask (rtx_insn *insn)
{
unsigned int mask = 0;
- if (get_attr_ooo_cracked (insn))
- mask |= S390_OOO_SCHED_ATTR_MASK_CRACKED;
- if (get_attr_ooo_expanded (insn))
- mask |= S390_OOO_SCHED_ATTR_MASK_EXPANDED;
- if (get_attr_ooo_endgroup (insn))
- mask |= S390_OOO_SCHED_ATTR_MASK_ENDGROUP;
- if (get_attr_ooo_groupalone (insn))
- mask |= S390_OOO_SCHED_ATTR_MASK_GROUPALONE;
+ switch (s390_tune)
+ {
+ case PROCESSOR_2827_ZEC12:
+ if (get_attr_zEC12_cracked (insn))
+ mask |= S390_SCHED_ATTR_MASK_CRACKED;
+ if (get_attr_zEC12_expanded (insn))
+ mask |= S390_SCHED_ATTR_MASK_EXPANDED;
+ if (get_attr_zEC12_endgroup (insn))
+ mask |= S390_SCHED_ATTR_MASK_ENDGROUP;
+ if (get_attr_zEC12_groupalone (insn))
+ mask |= S390_SCHED_ATTR_MASK_GROUPALONE;
+ break;
+ case PROCESSOR_2964_Z13:
+ if (get_attr_z13_cracked (insn))
+ mask |= S390_SCHED_ATTR_MASK_CRACKED;
+ if (get_attr_z13_expanded (insn))
+ mask |= S390_SCHED_ATTR_MASK_EXPANDED;
+ if (get_attr_z13_endgroup (insn))
+ mask |= S390_SCHED_ATTR_MASK_ENDGROUP;
+ if (get_attr_z13_groupalone (insn))
+ mask |= S390_SCHED_ATTR_MASK_GROUPALONE;
+ break;
+ default:
+ gcc_unreachable ();
+ }
+ return mask;
+}
+
+static unsigned int
+s390_get_unit_mask (rtx_insn *insn, int *units)
+{
+ unsigned int mask = 0;
+
+ switch (s390_tune)
+ {
+ case PROCESSOR_2964_Z13:
+ *units = 3;
+ if (get_attr_z13_unit_lsu (insn))
+ mask |= 1 << 0;
+ if (get_attr_z13_unit_fxu (insn))
+ mask |= 1 << 1;
+ if (get_attr_z13_unit_vfu (insn))
+ mask |= 1 << 2;
+ break;
+ default:
+ gcc_unreachable ();
+ }
return mask;
}
@@ -13598,48 +13779,66 @@ s390_sched_score (rtx_insn *insn)
case 0:
/* Try to put insns into the first slot which would otherwise
break a group. */
- if ((mask & S390_OOO_SCHED_ATTR_MASK_CRACKED) != 0
- || (mask & S390_OOO_SCHED_ATTR_MASK_EXPANDED) != 0)
+ if ((mask & S390_SCHED_ATTR_MASK_CRACKED) != 0
+ || (mask & S390_SCHED_ATTR_MASK_EXPANDED) != 0)
score += 5;
- if ((mask & S390_OOO_SCHED_ATTR_MASK_GROUPALONE) != 0)
+ if ((mask & S390_SCHED_ATTR_MASK_GROUPALONE) != 0)
score += 10;
case 1:
/* Prefer not cracked insns while trying to put together a
group. */
- if ((mask & S390_OOO_SCHED_ATTR_MASK_CRACKED) == 0
- && (mask & S390_OOO_SCHED_ATTR_MASK_EXPANDED) == 0
- && (mask & S390_OOO_SCHED_ATTR_MASK_GROUPALONE) == 0)
+ if ((mask & S390_SCHED_ATTR_MASK_CRACKED) == 0
+ && (mask & S390_SCHED_ATTR_MASK_EXPANDED) == 0
+ && (mask & S390_SCHED_ATTR_MASK_GROUPALONE) == 0)
score += 10;
- if ((mask & S390_OOO_SCHED_ATTR_MASK_ENDGROUP) == 0)
+ if ((mask & S390_SCHED_ATTR_MASK_ENDGROUP) == 0)
score += 5;
break;
case 2:
/* Prefer not cracked insns while trying to put together a
group. */
- if ((mask & S390_OOO_SCHED_ATTR_MASK_CRACKED) == 0
- && (mask & S390_OOO_SCHED_ATTR_MASK_EXPANDED) == 0
- && (mask & S390_OOO_SCHED_ATTR_MASK_GROUPALONE) == 0)
+ if ((mask & S390_SCHED_ATTR_MASK_CRACKED) == 0
+ && (mask & S390_SCHED_ATTR_MASK_EXPANDED) == 0
+ && (mask & S390_SCHED_ATTR_MASK_GROUPALONE) == 0)
score += 10;
/* Prefer endgroup insns in the last slot. */
- if ((mask & S390_OOO_SCHED_ATTR_MASK_ENDGROUP) != 0)
+ if ((mask & S390_SCHED_ATTR_MASK_ENDGROUP) != 0)
score += 10;
break;
- case S390_OOO_SCHED_STATE_NORMAL:
+ case S390_SCHED_STATE_NORMAL:
/* Prefer not cracked insns if the last was not cracked. */
- if ((mask & S390_OOO_SCHED_ATTR_MASK_CRACKED) == 0
- && (mask & S390_OOO_SCHED_ATTR_MASK_EXPANDED) == 0)
+ if ((mask & S390_SCHED_ATTR_MASK_CRACKED) == 0
+ && (mask & S390_SCHED_ATTR_MASK_EXPANDED) == 0)
score += 5;
- if ((mask & S390_OOO_SCHED_ATTR_MASK_GROUPALONE) != 0)
+ if ((mask & S390_SCHED_ATTR_MASK_GROUPALONE) != 0)
score += 10;
break;
- case S390_OOO_SCHED_STATE_CRACKED:
+ case S390_SCHED_STATE_CRACKED:
/* Try to keep cracked insns together to prevent them from
interrupting groups. */
- if ((mask & S390_OOO_SCHED_ATTR_MASK_CRACKED) != 0
- || (mask & S390_OOO_SCHED_ATTR_MASK_EXPANDED) != 0)
+ if ((mask & S390_SCHED_ATTR_MASK_CRACKED) != 0
+ || (mask & S390_SCHED_ATTR_MASK_EXPANDED) != 0)
score += 5;
break;
}
+
+ if (s390_tune == PROCESSOR_2964_Z13)
+ {
+ int units, i;
+ unsigned unit_mask, m = 1;
+
+ unit_mask = s390_get_unit_mask (insn, &units);
+ gcc_assert (units <= MAX_SCHED_UNITS);
+
+ /* Add a score in range 0..MAX_SCHED_MIX_SCORE depending on how long
+ ago the last insn of this unit type got scheduled. This is
+ supposed to help providing a proper instruction mix to the
+ CPU. */
+ for (i = 0; i < units; i++, m <<= 1)
+ if (m & unit_mask)
+ score += (last_scheduled_unit_distance[i] * MAX_SCHED_MIX_SCORE /
+ MAX_SCHED_MIX_DISTANCE);
+ }
return score;
}
@@ -13695,12 +13894,12 @@ s390_sched_reorder (FILE *file, int verbose,
if (verbose > 5)
fprintf (file,
- "move insn %d to the top of list\n",
+ ";;\t\tBACKEND: move insn %d to the top of list\n",
INSN_UID (ready[last_index]));
}
else if (verbose > 5)
fprintf (file,
- "best insn %d already on top\n",
+ ";;\t\tBACKEND: best insn %d already on top\n",
INSN_UID (ready[last_index]));
}
@@ -13711,16 +13910,35 @@ s390_sched_reorder (FILE *file, int verbose,
for (i = last_index; i >= 0; i--)
{
- if (recog_memoized (ready[i]) < 0)
+ unsigned int sched_mask;
+ rtx_insn *insn = ready[i];
+
+ if (recog_memoized (insn) < 0)
continue;
- fprintf (file, "insn %d score: %d: ", INSN_UID (ready[i]),
- s390_sched_score (ready[i]));
-#define PRINT_OOO_ATTR(ATTR) fprintf (file, "%s ", get_attr_##ATTR (ready[i]) ? #ATTR : "!" #ATTR);
- PRINT_OOO_ATTR (ooo_cracked);
- PRINT_OOO_ATTR (ooo_expanded);
- PRINT_OOO_ATTR (ooo_endgroup);
- PRINT_OOO_ATTR (ooo_groupalone);
-#undef PRINT_OOO_ATTR
+
+ sched_mask = s390_get_sched_attrmask (insn);
+ fprintf (file, ";;\t\tBACKEND: insn %d score: %d: ",
+ INSN_UID (insn),
+ s390_sched_score (insn));
+#define PRINT_SCHED_ATTR(M, ATTR) fprintf (file, "%s ",\
+ ((M) & sched_mask) ? #ATTR : "");
+ PRINT_SCHED_ATTR (S390_SCHED_ATTR_MASK_CRACKED, cracked);
+ PRINT_SCHED_ATTR (S390_SCHED_ATTR_MASK_EXPANDED, expanded);
+ PRINT_SCHED_ATTR (S390_SCHED_ATTR_MASK_ENDGROUP, endgroup);
+ PRINT_SCHED_ATTR (S390_SCHED_ATTR_MASK_GROUPALONE, groupalone);
+#undef PRINT_SCHED_ATTR
+ if (s390_tune == PROCESSOR_2964_Z13)
+ {
+ unsigned int unit_mask, m = 1;
+ int units, j;
+
+ unit_mask = s390_get_unit_mask (insn, &units);
+ fprintf (file, "(units:");
+ for (j = 0; j < units; j++, m <<= 1)
+ if (m & unit_mask)
+ fprintf (file, " u%d", j);
+ fprintf (file, ")");
+ }
fprintf (file, "\n");
}
}
@@ -13745,12 +13963,12 @@ s390_sched_variable_issue (FILE *file, int verbose, rtx_insn *insn, int more)
{
unsigned int mask = s390_get_sched_attrmask (insn);
- if ((mask & S390_OOO_SCHED_ATTR_MASK_CRACKED) != 0
- || (mask & S390_OOO_SCHED_ATTR_MASK_EXPANDED) != 0)
- s390_sched_state = S390_OOO_SCHED_STATE_CRACKED;
- else if ((mask & S390_OOO_SCHED_ATTR_MASK_ENDGROUP) != 0
- || (mask & S390_OOO_SCHED_ATTR_MASK_GROUPALONE) != 0)
- s390_sched_state = S390_OOO_SCHED_STATE_NORMAL;
+ if ((mask & S390_SCHED_ATTR_MASK_CRACKED) != 0
+ || (mask & S390_SCHED_ATTR_MASK_EXPANDED) != 0)
+ s390_sched_state = S390_SCHED_STATE_CRACKED;
+ else if ((mask & S390_SCHED_ATTR_MASK_ENDGROUP) != 0
+ || (mask & S390_SCHED_ATTR_MASK_GROUPALONE) != 0)
+ s390_sched_state = S390_SCHED_STATE_NORMAL;
else
{
/* Only normal insns are left (mask == 0). */
@@ -13759,30 +13977,73 @@ s390_sched_variable_issue (FILE *file, int verbose, rtx_insn *insn, int more)
case 0:
case 1:
case 2:
- case S390_OOO_SCHED_STATE_NORMAL:
- if (s390_sched_state == S390_OOO_SCHED_STATE_NORMAL)
+ case S390_SCHED_STATE_NORMAL:
+ if (s390_sched_state == S390_SCHED_STATE_NORMAL)
s390_sched_state = 1;
else
s390_sched_state++;
break;
- case S390_OOO_SCHED_STATE_CRACKED:
- s390_sched_state = S390_OOO_SCHED_STATE_NORMAL;
+ case S390_SCHED_STATE_CRACKED:
+ s390_sched_state = S390_SCHED_STATE_NORMAL;
break;
}
}
+
+ if (s390_tune == PROCESSOR_2964_Z13)
+ {
+ int units, i;
+ unsigned unit_mask, m = 1;
+
+ unit_mask = s390_get_unit_mask (insn, &units);
+ gcc_assert (units <= MAX_SCHED_UNITS);
+
+ for (i = 0; i < units; i++, m <<= 1)
+ if (m & unit_mask)
+ last_scheduled_unit_distance[i] = 0;
+ else if (last_scheduled_unit_distance[i] < MAX_SCHED_MIX_DISTANCE)
+ last_scheduled_unit_distance[i]++;
+ }
+
if (verbose > 5)
{
- fprintf (file, "insn %d: ", INSN_UID (insn));
-#define PRINT_OOO_ATTR(ATTR) \
- fprintf (file, "%s ", get_attr_##ATTR (insn) ? #ATTR : "");
- PRINT_OOO_ATTR (ooo_cracked);
- PRINT_OOO_ATTR (ooo_expanded);
- PRINT_OOO_ATTR (ooo_endgroup);
- PRINT_OOO_ATTR (ooo_groupalone);
-#undef PRINT_OOO_ATTR
- fprintf (file, "\n");
- fprintf (file, "sched state: %d\n", s390_sched_state);
+ unsigned int sched_mask;
+
+ sched_mask = s390_get_sched_attrmask (insn);
+
+ fprintf (file, ";;\t\tBACKEND: insn %d: ", INSN_UID (insn));
+#define PRINT_SCHED_ATTR(M, ATTR) fprintf (file, "%s ", ((M) & sched_mask) ? #ATTR : "");
+ PRINT_SCHED_ATTR (S390_SCHED_ATTR_MASK_CRACKED, cracked);
+ PRINT_SCHED_ATTR (S390_SCHED_ATTR_MASK_EXPANDED, expanded);
+ PRINT_SCHED_ATTR (S390_SCHED_ATTR_MASK_ENDGROUP, endgroup);
+ PRINT_SCHED_ATTR (S390_SCHED_ATTR_MASK_GROUPALONE, groupalone);
+#undef PRINT_SCHED_ATTR
+
+ if (s390_tune == PROCESSOR_2964_Z13)
+ {
+ unsigned int unit_mask, m = 1;
+ int units, j;
+
+ unit_mask = s390_get_unit_mask (insn, &units);
+ fprintf (file, "(units:");
+ for (j = 0; j < units; j++, m <<= 1)
+ if (m & unit_mask)
+ fprintf (file, " %d", j);
+ fprintf (file, ")");
+ }
+ fprintf (file, " sched state: %d\n", s390_sched_state);
+
+ if (s390_tune == PROCESSOR_2964_Z13)
+ {
+ int units, j;
+
+ s390_get_unit_mask (insn, &units);
+
+ fprintf (file, ";;\t\tBACKEND: units unused for: ");
+ for (j = 0; j < units; j++)
+ fprintf (file, "%d:%d ", j, last_scheduled_unit_distance[j]);
+ fprintf (file, "\n");
+ }
}
}
@@ -13799,6 +14060,7 @@ s390_sched_init (FILE *file ATTRIBUTE_UNUSED,
int max_ready ATTRIBUTE_UNUSED)
{
last_scheduled_insn = NULL;
+ memset (last_scheduled_unit_distance, 0, MAX_SCHED_UNITS * sizeof (int));
s390_sched_state = 0;
}
diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md
index 6f0e172..5a9f1c8 100644
--- a/gcc/config/s390/s390.md
+++ b/gcc/config/s390/s390.md
@@ -338,6 +338,39 @@
(VR31_REGNUM 53)
])
+; Rounding modes for binary floating point numbers
+(define_constants
+ [(BFP_RND_CURRENT 0)
+ (BFP_RND_NEAREST_TIE_AWAY_FROM_0 1)
+ (BFP_RND_PREP_FOR_SHORT_PREC 3)
+ (BFP_RND_NEAREST_TIE_TO_EVEN 4)
+ (BFP_RND_TOWARD_0 5)
+ (BFP_RND_TOWARD_INF 6)
+ (BFP_RND_TOWARD_MINF 7)])
+
+; Rounding modes for decimal floating point numbers
+; 1-7 were introduced with the floating point extension facility
+; available with z196
+; With these rounding modes (1-7) a quantum exception might occur
+; which is suppressed for the other modes.
+(define_constants
+ [(DFP_RND_CURRENT 0)
+ (DFP_RND_NEAREST_TIE_AWAY_FROM_0_QUANTEXC 1)
+ (DFP_RND_CURRENT_QUANTEXC 2)
+ (DFP_RND_PREP_FOR_SHORT_PREC_QUANTEXC 3)
+ (DFP_RND_NEAREST_TIE_TO_EVEN_QUANTEXC 4)
+ (DFP_RND_TOWARD_0_QUANTEXC 5)
+ (DFP_RND_TOWARD_INF_QUANTEXC 6)
+ (DFP_RND_TOWARD_MINF_QUANTEXC 7)
+ (DFP_RND_NEAREST_TIE_TO_EVEN 8)
+ (DFP_RND_TOWARD_0 9)
+ (DFP_RND_TOWARD_INF 10)
+ (DFP_RND_TOWARD_MINF 11)
+ (DFP_RND_NEAREST_TIE_AWAY_FROM_0 12)
+ (DFP_RND_NEAREST_TIE_TO_0 13)
+ (DFP_RND_AWAY_FROM_0 14)
+ (DFP_RND_PREP_FOR_SHORT_PREC 15)])
+
;;
;; PFPO GPR0 argument format
;;
@@ -366,7 +399,7 @@
;; Used to determine defaults for length and other attribute values.
(define_attr "op_type"
- "NN,E,RR,RRE,RX,RS,RSI,RI,SI,S,SS,SSE,RXE,RSE,RIL,RIE,RXY,RSY,SIY,RRF,RRR,SIL,RRS,RIS,VRI,VRR,VRS,VRV,VRX"
+ "NN,E,RR,RRE,RX,RS,RSI,RI,SI,S,SS,SSE,RXE,RSE,RIL,RIE,RXY,RSY,SIY,RRF,SIL,RRS,RIS,VRI,VRR,VRS,VRV,VRX"
(const_string "NN"))
;; Instruction type attribute used for scheduling.
@@ -393,7 +426,7 @@
;; reg: Instruction does not use the agen unit
(define_attr "atype" "agen,reg"
- (if_then_else (eq_attr "op_type" "E,RR,RI,RRE,RSI,RIL,RIE,RRF,RRR")
+ (if_then_else (eq_attr "op_type" "E,RR,RI,RRE,RSI,RIL,RIE,RRF")
(const_string "reg")
(const_string "agen")))
@@ -434,8 +467,8 @@
;; Length in bytes.
(define_attr "length" ""
- (cond [(eq_attr "op_type" "E,RR") (const_int 2)
- (eq_attr "op_type" "RX,RI,RRE,RS,RSI,S,SI,RRF,RRR") (const_int 4)]
+ (cond [(eq_attr "op_type" "E,RR") (const_int 2)
+ (eq_attr "op_type" "RX,RI,RRE,RS,RSI,S,SI,RRF") (const_int 4)]
(const_int 6)))
@@ -512,6 +545,9 @@
;; Pipeline description for zEC12
(include "2827.md")
+;; Pipeline description for z13
+(include "2964.md")
+
;; Predicates
(include "predicates.md")
@@ -615,27 +651,14 @@
;; fp register operands. The following attributes allow to merge the bfp and
;; dfp variants in a single insn definition.
-;; This attribute is used to set op_type accordingly.
-(define_mode_attr RRer [(TF "RRE") (DF "RRE") (SF "RRE") (TD "RRR")
- (DD "RRR") (SD "RRR")])
-
-;; This attribute is used in the operand constraint list in order to have the
-;; first and the second operand match for bfp modes.
-(define_mode_attr f0 [(TF "0") (DF "0") (SF "0") (TD "f") (DD "f") (DD "f")])
-
-;; This attribute is used to merge the scalar vector instructions into
-;; the FP patterns. For non-supported modes (all but DF) it expands
-;; to constraints which are supposed to be matched by an earlier
-;; variant.
-(define_mode_attr v0 [(TF "0") (DF "v") (SF "0") (TD "0") (DD "0") (DD "0") (TI "0") (DI "v") (SI "0")])
-(define_mode_attr vf [(TF "f") (DF "v") (SF "f") (TD "f") (DD "f") (DD "f") (TI "f") (DI "v") (SI "f")])
-(define_mode_attr vd [(TF "d") (DF "v") (SF "d") (TD "d") (DD "d") (DD "d") (TI "d") (DI "v") (SI "d")])
-
-;; This attribute is used in the operand list of the instruction to have an
-;; additional operand for the dfp instructions.
-(define_mode_attr op1 [(TF "") (DF "") (SF "")
- (TD "%1,") (DD "%1,") (SD "%1,")])
-
+;; These mode attributes are supposed to be used in the `enabled' insn
+;; attribute to disable certain alternatives for certain modes.
+(define_mode_attr nBFP [(TF "0") (DF "0") (SF "0") (TD "*") (DD "*") (DD "*")])
+(define_mode_attr nDFP [(TF "*") (DF "*") (SF "*") (TD "0") (DD "0") (DD "0")])
+(define_mode_attr DSF [(TF "0") (DF "*") (SF "*") (TD "0") (DD "0") (SD "0")])
+(define_mode_attr DFDI [(TF "0") (DF "*") (SF "0")
+ (TD "0") (DD "0") (DD "0")
+ (TI "0") (DI "*") (SI "0")])
;; This attribute is used in the operand constraint list
;; for instructions dealing with the sign bit of 32 or 64bit fp values.
@@ -645,10 +668,6 @@
;; target operand uses the same fp register.
(define_mode_attr fT0 [(TF "0") (DF "f") (SF "f")])
-;; In FP templates, "<Rf>" will expand to "f" in TFmode and "R" otherwise.
-;; This is used to disable the memory alternative in TFmode patterns.
-(define_mode_attr Rf [(TF "f") (DF "R") (SF "R") (TD "f") (DD "f") (SD "f")])
-
;; This attribute adds b for bfp instructions and t for dfp instructions and is used
;; within instruction mnemonics.
(define_mode_attr bt [(TF "b") (DF "b") (SF "b") (TD "t") (DD "t") (SD "t")])
@@ -755,6 +774,8 @@
(define_mode_attr asm_fcmp [(CCVEQ "e") (CCVFH "h") (CCVFHE "he")])
(define_mode_attr insn_cmp [(CCVEQ "eq") (CCVH "h") (CCVHU "hl") (CCVFH "h") (CCVFHE "he")])
+;; Subst pattern definitions
+(include "subst.md")
(include "vector.md")
@@ -1257,13 +1278,14 @@
(define_insn "*cmp<mode>_ccs"
[(set (reg CC_REGNUM)
(compare (match_operand:FP 0 "register_operand" "f,f")
- (match_operand:FP 1 "general_operand" "f,<Rf>")))]
+ (match_operand:FP 1 "general_operand" "f,R")))]
"s390_match_ccmode(insn, CCSmode) && TARGET_HARD_FLOAT"
"@
c<xde><bt>r\t%0,%1
c<xde>b\t%0,%1"
[(set_attr "op_type" "RRE,RXE")
- (set_attr "type" "fsimp<mode>")])
+ (set_attr "type" "fsimp<mode>")
+ (set_attr "enabled" "*,<DSF>")])
; wfcedbs, wfchdbs, wfchedbs
(define_insn "*vec_cmp<insn_cmp>df_cconly"
@@ -2950,8 +2972,16 @@
(clobber (reg:CC CC_REGNUM))])]
""
{
- rtx addr1 = gen_reg_rtx (Pmode);
- rtx addr2 = gen_reg_rtx (Pmode);
+ rtx addr1, addr2;
+
+ if (TARGET_VX && optimize_function_for_speed_p (cfun))
+ {
+ s390_expand_vec_movstr (operands[0], operands[1], operands[2]);
+ DONE;
+ }
+
+ addr1 = gen_reg_rtx (Pmode);
+ addr2 = gen_reg_rtx (Pmode);
emit_move_insn (addr1, force_operand (XEXP (operands[1], 0), NULL_RTX));
emit_move_insn (addr2, force_operand (XEXP (operands[2], 0), NULL_RTX));
@@ -3299,7 +3329,7 @@
[(parallel
[(clobber (match_dup 1))
(set (match_operand:BLK 0 "memory_operand" "")
- (unspec:BLK [(match_operand:P 2 "shift_count_or_setmem_operand" "")
+ (unspec:BLK [(match_operand:P 2 "setmem_operand" "")
(match_dup 4)] UNSPEC_REPLICATE_BYTE))
(use (match_dup 3))
(clobber (reg:CC CC_REGNUM))])]
@@ -3329,7 +3359,7 @@
(define_insn "*setmem_long"
[(clobber (match_operand:<DBL> 0 "register_operand" "=d"))
(set (mem:BLK (subreg:P (match_operand:<DBL> 3 "register_operand" "0") 0))
- (unspec:BLK [(match_operand:P 2 "shift_count_or_setmem_operand" "Y")
+ (unspec:BLK [(match_operand:P 2 "setmem_operand" "Y")
(subreg:P (match_dup 3) <modesize>)]
UNSPEC_REPLICATE_BYTE))
(use (match_operand:<DBL> 1 "register_operand" "d"))
@@ -3343,7 +3373,7 @@
[(clobber (match_operand:<DBL> 0 "register_operand" "=d"))
(set (mem:BLK (subreg:P (match_operand:<DBL> 3 "register_operand" "0") 0))
(unspec:BLK [(and:P
- (match_operand:P 2 "shift_count_or_setmem_operand" "Y")
+ (match_operand:P 2 "setmem_operand" "Y")
(match_operand:P 4 "const_int_operand" "n"))
(subreg:P (match_dup 3) <modesize>)]
UNSPEC_REPLICATE_BYTE))
@@ -3361,7 +3391,7 @@
(define_insn "*setmem_long_31z"
[(clobber (match_operand:TI 0 "register_operand" "=d"))
(set (mem:BLK (subreg:SI (match_operand:TI 3 "register_operand" "0") 4))
- (unspec:BLK [(match_operand:SI 2 "shift_count_or_setmem_operand" "Y")
+ (unspec:BLK [(match_operand:SI 2 "setmem_operand" "Y")
(subreg:SI (match_dup 3) 12)] UNSPEC_REPLICATE_BYTE))
(use (match_operand:TI 1 "register_operand" "d"))
(clobber (reg:CC CC_REGNUM))]
@@ -3374,8 +3404,8 @@
[(clobber (match_operand:TI 0 "register_operand" "=d"))
(set (mem:BLK (subreg:SI (match_operand:TI 3 "register_operand" "0") 4))
(unspec:BLK [(and:SI
- (match_operand:SI 2 "shift_count_or_setmem_operand" "Y")
- (match_operand:SI 4 "const_int_operand" "n"))
+ (match_operand:SI 2 "setmem_operand" "Y")
+ (match_operand:SI 4 "const_int_operand" "n"))
(subreg:SI (match_dup 3) 12)] UNSPEC_REPLICATE_BYTE))
(use (match_operand:TI 1 "register_operand" "d"))
(clobber (reg:CC CC_REGNUM))]
@@ -3865,13 +3895,21 @@
(ashift:GPR (match_operand:GPR 3 "nonimmediate_operand" "")
(match_operand:GPR 4 "nonzero_shift_count_operand" ""))))]
"TARGET_ZEC12 && UINTVAL (operands[2]) + UINTVAL (operands[4]) >= <bitsize>"
- [(set (match_dup 0)
+ [(set (match_dup 6)
(lshiftrt:GPR (match_dup 1) (match_dup 2)))
(set (match_dup 0)
- (ior:GPR (and:GPR (match_dup 0) (match_dup 5))
+ (ior:GPR (and:GPR (match_dup 6) (match_dup 5))
(ashift:GPR (match_dup 3) (match_dup 4))))]
{
operands[5] = GEN_INT ((1UL << UINTVAL (operands[4])) - 1);
+ if (rtx_equal_p (operands[0], operands[3]))
+ {
+ if (!can_create_pseudo_p ())
+ FAIL;
+ operands[6] = gen_reg_rtx (<MODE>mode);
+ }
+ else
+ operands[6] = operands[0];
})
(define_split
@@ -3883,15 +3921,23 @@
(match_operand:GPR 4 "nonzero_shift_count_operand" ""))))
(clobber (reg:CC CC_REGNUM))])]
"TARGET_Z10 && !TARGET_ZEC12 && UINTVAL (operands[2]) + UINTVAL (operands[4]) >= <bitsize>"
- [(set (match_dup 0)
+ [(set (match_dup 6)
(lshiftrt:GPR (match_dup 1) (match_dup 2)))
(parallel
[(set (match_dup 0)
- (ior:GPR (and:GPR (match_dup 0) (match_dup 5))
+ (ior:GPR (and:GPR (match_dup 6) (match_dup 5))
(ashift:GPR (match_dup 3) (match_dup 4))))
(clobber (reg:CC CC_REGNUM))])]
{
operands[5] = GEN_INT ((1UL << UINTVAL (operands[4])) - 1);
+ if (rtx_equal_p (operands[0], operands[3]))
+ {
+ if (!can_create_pseudo_p ())
+ FAIL;
+ operands[6] = gen_reg_rtx (<MODE>mode);
+ }
+ else
+ operands[6] = operands[0];
})
(define_insn "*r<noxa>sbg_<mode>_noshift"
@@ -4469,7 +4515,7 @@
[(parallel
[(set (match_operand:DI 0 "register_operand" "")
(unsigned_fix:DI (match_operand:DD 1 "register_operand" "")))
- (unspec:DI [(const_int 5)] UNSPEC_ROUND)
+ (unspec:DI [(const_int DFP_RND_TOWARD_0)] UNSPEC_ROUND)
(clobber (reg:CC CC_REGNUM))])]
"TARGET_HARD_DFP"
@@ -4494,11 +4540,13 @@
LT, NULL_RTX, VOIDmode, 0, label1);
emit_insn (gen_subtd3 (temp, temp,
const_double_from_real_value (sub, TDmode)));
- emit_insn (gen_fix_trunctddi2_dfp (operands[0], temp, GEN_INT (11)));
+ emit_insn (gen_fix_trunctddi2_dfp (operands[0], temp,
+ GEN_INT (DFP_RND_TOWARD_MINF)));
emit_jump (label2);
emit_label (label1);
- emit_insn (gen_fix_truncdddi2_dfp (operands[0], operands[1], GEN_INT (9)));
+ emit_insn (gen_fix_truncdddi2_dfp (operands[0], operands[1],
+ GEN_INT (DFP_RND_TOWARD_0)));
emit_label (label2);
DONE;
}
@@ -4508,7 +4556,7 @@
[(parallel
[(set (match_operand:DI 0 "register_operand" "")
(unsigned_fix:DI (match_operand:TD 1 "register_operand" "")))
- (unspec:DI [(const_int 5)] UNSPEC_ROUND)
+ (unspec:DI [(const_int DFP_RND_TOWARD_0)] UNSPEC_ROUND)
(clobber (reg:CC CC_REGNUM))])]
"TARGET_HARD_DFP"
@@ -4529,11 +4577,13 @@
LT, NULL_RTX, VOIDmode, 0, label1);
emit_insn (gen_subtd3 (temp, operands[1],
const_double_from_real_value (sub, TDmode)));
- emit_insn (gen_fix_trunctddi2_dfp (operands[0], temp, GEN_INT (11)));
+ emit_insn (gen_fix_trunctddi2_dfp (operands[0], temp,
+ GEN_INT (DFP_RND_TOWARD_MINF)));
emit_jump (label2);
emit_label (label1);
- emit_insn (gen_fix_trunctddi2_dfp (operands[0], operands[1], GEN_INT (9)));
+ emit_insn (gen_fix_trunctddi2_dfp (operands[0], operands[1],
+ GEN_INT (DFP_RND_TOWARD_0)));
emit_label (label2);
DONE;
}
@@ -4548,7 +4598,7 @@
[(parallel
[(set (match_operand:GPR 0 "register_operand" "")
(unsigned_fix:GPR (match_operand:BFP 1 "register_operand" "")))
- (unspec:GPR [(const_int 5)] UNSPEC_ROUND)
+ (unspec:GPR [(const_int BFP_RND_TOWARD_0)] UNSPEC_ROUND)
(clobber (reg:CC CC_REGNUM))])]
"TARGET_HARD_FLOAT"
{
@@ -4569,12 +4619,12 @@
emit_insn (gen_sub<BFP:mode>3 (temp, operands[1],
const_double_from_real_value (sub, <BFP:MODE>mode)));
emit_insn (gen_fix_trunc<BFP:mode><GPR:mode>2_bfp (operands[0], temp,
- GEN_INT (7)));
+ GEN_INT (BFP_RND_TOWARD_MINF)));
emit_jump (label2);
emit_label (label1);
emit_insn (gen_fix_trunc<BFP:mode><GPR:mode>2_bfp (operands[0],
- operands[1], GEN_INT (5)));
+ operands[1], GEN_INT (BFP_RND_TOWARD_0)));
emit_label (label2);
DONE;
}
@@ -4585,7 +4635,7 @@
[(parallel
[(set (match_operand:SI 0 "register_operand" "")
(unsigned_fix:SI (match_operand:DFP 1 "register_operand" "")))
- (unspec:SI [(const_int 5)] UNSPEC_ROUND)
+ (unspec:SI [(const_int DFP_RND_TOWARD_0)] UNSPEC_ROUND)
(clobber (reg:CC CC_REGNUM))])]
"TARGET_Z196 && TARGET_HARD_DFP"
"")
@@ -4623,7 +4673,7 @@
"TARGET_HARD_FLOAT"
{
emit_insn (gen_fix_trunc<DSF:mode><GPR:mode>2_bfp (operands[0], operands[1],
- GEN_INT (5)));
+ GEN_INT (BFP_RND_TOWARD_0)));
DONE;
})
@@ -4669,7 +4719,7 @@
{
operands[1] = force_reg (<MODE>mode, operands[1]);
emit_insn (gen_fix_trunc<mode>di2_dfp (operands[0], operands[1],
- GEN_INT (9)));
+ GEN_INT (DFP_RND_TOWARD_0)));
DONE;
})
@@ -4692,7 +4742,7 @@
(define_expand "fix_trunctf<mode>2"
[(parallel [(set (match_operand:GPR 0 "register_operand" "")
(fix:GPR (match_operand:TF 1 "register_operand" "")))
- (unspec:GPR [(const_int 5)] UNSPEC_ROUND)
+ (unspec:GPR [(const_int BFP_RND_TOWARD_0)] UNSPEC_ROUND)
(clobber (reg:CC CC_REGNUM))])]
"TARGET_HARD_FLOAT"
"")
@@ -4704,15 +4754,16 @@
; cxgbr, cdgbr, cegbr, cxgtr, cdgtr
(define_insn "floatdi<mode>2"
- [(set (match_operand:FP 0 "register_operand" "=f,<vf>")
- (float:FP (match_operand:DI 1 "register_operand" "d,<vd>")))]
+ [(set (match_operand:FP 0 "register_operand" "=f,v")
+ (float:FP (match_operand:DI 1 "register_operand" "d,v")))]
"TARGET_ZARCH && TARGET_HARD_FLOAT"
"@
c<xde>g<bt>r\t%0,%1
wcdgb\t%v0,%v1,0,0"
[(set_attr "op_type" "RRE,VRR")
(set_attr "type" "itof<mode>" )
- (set_attr "cpu_facility" "*,vec")])
+ (set_attr "cpu_facility" "*,vec")
+ (set_attr "enabled" "*,<DFDI>")])
; cxfbr, cdfbr, cefbr
(define_insn "floatsi<mode>2"
@@ -4796,12 +4847,22 @@
; trunctddd2 and truncddsd2 instruction pattern(s).
;
-(define_insn "trunctddd2"
+
+(define_expand "trunctddd2"
+ [(parallel
+ [(set (match_operand:DD 0 "register_operand" "")
+ (float_truncate:DD (match_operand:TD 1 "register_operand" "")))
+ (unspec:DI [(const_int DFP_RND_CURRENT)] UNSPEC_ROUND)
+ (clobber (scratch:TD))])]
+ "TARGET_HARD_DFP")
+
+(define_insn "*trunctddd2"
[(set (match_operand:DD 0 "register_operand" "=f")
(float_truncate:DD (match_operand:TD 1 "register_operand" "f")))
- (clobber (match_scratch:TD 2 "=f"))]
+ (unspec:DI [(match_operand:DI 2 "const_mask_operand" "I")] UNSPEC_ROUND)
+ (clobber (match_scratch:TD 3 "=f"))]
"TARGET_HARD_DFP"
- "ldxtr\t%2,0,%1,0\;ldr\t%0,%2"
+ "ldxtr\t%3,%2,%1,0\;ldr\t%0,%3"
[(set_attr "length" "6")
(set_attr "type" "ftruncdd")])
@@ -4817,6 +4878,7 @@
[(parallel
[(set (match_dup 3)
(float_truncate:DD (match_operand:TD 1 "register_operand" "")))
+ (unspec:DI [(const_int DFP_RND_PREP_FOR_SHORT_PREC)] UNSPEC_ROUND)
(clobber (match_scratch:TD 2 ""))])
(set (match_operand:SD 0 "register_operand" "")
(float_truncate:SD (match_dup 3)))]
@@ -5471,47 +5533,53 @@
; axbr, adbr, aebr, axb, adb, aeb, adtr, axtr
; FIXME: wfadb does not clobber cc
(define_insn "add<mode>3"
- [(set (match_operand:FP 0 "register_operand" "=f, f,<vf>")
- (plus:FP (match_operand:FP 1 "nonimmediate_operand" "%<f0>, 0,<v0>")
- (match_operand:FP 2 "general_operand" "f,<Rf>,<vf>")))
+ [(set (match_operand:FP 0 "register_operand" "=f,f,f,v")
+ (plus:FP (match_operand:FP 1 "nonimmediate_operand" "%f,0,0,v")
+ (match_operand:FP 2 "general_operand" "f,f,R,v")))
(clobber (reg:CC CC_REGNUM))]
"TARGET_HARD_FLOAT"
"@
- a<xde><bt>r\t%0,<op1>%2
+ a<xde>tr\t%0,%1,%2
+ a<xde>br\t%0,%2
a<xde>b\t%0,%2
wfadb\t%v0,%v1,%v2"
- [(set_attr "op_type" "<RRer>,RXE,VRR")
+ [(set_attr "op_type" "RRF,RRE,RXE,VRR")
(set_attr "type" "fsimp<mode>")
- (set_attr "cpu_facility" "*,*,vec")])
+ (set_attr "cpu_facility" "*,*,*,vec")
+ (set_attr "enabled" "<nBFP>,<nDFP>,<DSF>,<DFDI>")])
; axbr, adbr, aebr, axb, adb, aeb, adtr, axtr
(define_insn "*add<mode>3_cc"
[(set (reg CC_REGNUM)
- (compare (plus:FP (match_operand:FP 1 "nonimmediate_operand" "%<f0>,0")
- (match_operand:FP 2 "general_operand" " f,<Rf>"))
+ (compare (plus:FP (match_operand:FP 1 "nonimmediate_operand" "%f,0,0")
+ (match_operand:FP 2 "general_operand" "f,f,R"))
(match_operand:FP 3 "const0_operand" "")))
- (set (match_operand:FP 0 "register_operand" "=f,f")
+ (set (match_operand:FP 0 "register_operand" "=f,f,f")
(plus:FP (match_dup 1) (match_dup 2)))]
"s390_match_ccmode (insn, CCSmode) && TARGET_HARD_FLOAT"
"@
- a<xde><bt>r\t%0,<op1>%2
+ a<xde>tr\t%0,%1,%2
+ a<xde>br\t%0,%2
a<xde>b\t%0,%2"
- [(set_attr "op_type" "<RRer>,RXE")
- (set_attr "type" "fsimp<mode>")])
+ [(set_attr "op_type" "RRF,RRE,RXE")
+ (set_attr "type" "fsimp<mode>")
+ (set_attr "enabled" "<nBFP>,<nDFP>,<DSF>")])
; axbr, adbr, aebr, axb, adb, aeb, adtr, axtr
(define_insn "*add<mode>3_cconly"
[(set (reg CC_REGNUM)
- (compare (plus:FP (match_operand:FP 1 "nonimmediate_operand" "%<f0>,0")
- (match_operand:FP 2 "general_operand" " f,<Rf>"))
+ (compare (plus:FP (match_operand:FP 1 "nonimmediate_operand" "%f,0,0")
+ (match_operand:FP 2 "general_operand" "f,f,R"))
(match_operand:FP 3 "const0_operand" "")))
- (clobber (match_scratch:FP 0 "=f,f"))]
+ (clobber (match_scratch:FP 0 "=f,f,f"))]
"s390_match_ccmode (insn, CCSmode) && TARGET_HARD_FLOAT"
"@
- a<xde><bt>r\t%0,<op1>%2
+ a<xde>tr\t%0,%1,%2
+ a<xde>br\t%0,%2
a<xde>b\t%0,%2"
- [(set_attr "op_type" "<RRer>,RXE")
- (set_attr "type" "fsimp<mode>")])
+ [(set_attr "op_type" "RRF,RRE,RXE")
+ (set_attr "type" "fsimp<mode>")
+ (set_attr "enabled" "<nBFP>,<nDFP>,<DSF>")])
;
; Pointer add instruction patterns
@@ -5895,47 +5963,53 @@
; sxbr, sdbr, sebr, sdb, seb, sxtr, sdtr
(define_insn "sub<mode>3"
- [(set (match_operand:FP 0 "register_operand" "=f, f,<vf>")
- (minus:FP (match_operand:FP 1 "register_operand" "<f0>, 0,<v0>")
- (match_operand:FP 2 "general_operand" "f,<Rf>,<vf>")))
+ [(set (match_operand:FP 0 "register_operand" "=f,f,f,v")
+ (minus:FP (match_operand:FP 1 "register_operand" "f,0,0,v")
+ (match_operand:FP 2 "general_operand" "f,f,R,v")))
(clobber (reg:CC CC_REGNUM))]
"TARGET_HARD_FLOAT"
"@
- s<xde><bt>r\t%0,<op1>%2
+ s<xde>tr\t%0,%1,%2
+ s<xde>br\t%0,%2
s<xde>b\t%0,%2
wfsdb\t%v0,%v1,%v2"
- [(set_attr "op_type" "<RRer>,RXE,VRR")
+ [(set_attr "op_type" "RRF,RRE,RXE,VRR")
(set_attr "type" "fsimp<mode>")
- (set_attr "cpu_facility" "*,*,vec")])
+ (set_attr "cpu_facility" "*,*,*,vec")
+ (set_attr "enabled" "<nBFP>,<nDFP>,<DSF>,<DFDI>")])
; sxbr, sdbr, sebr, sdb, seb, sxtr, sdtr
(define_insn "*sub<mode>3_cc"
[(set (reg CC_REGNUM)
- (compare (minus:FP (match_operand:FP 1 "nonimmediate_operand" "<f0>,0")
- (match_operand:FP 2 "general_operand" "f,<Rf>"))
+ (compare (minus:FP (match_operand:FP 1 "nonimmediate_operand" "f,0,0")
+ (match_operand:FP 2 "general_operand" "f,f,R"))
(match_operand:FP 3 "const0_operand" "")))
- (set (match_operand:FP 0 "register_operand" "=f,f")
+ (set (match_operand:FP 0 "register_operand" "=f,f,f")
(minus:FP (match_dup 1) (match_dup 2)))]
"s390_match_ccmode (insn, CCSmode) && TARGET_HARD_FLOAT"
"@
- s<xde><bt>r\t%0,<op1>%2
+ s<xde>tr\t%0,%1,%2
+ s<xde>br\t%0,%2
s<xde>b\t%0,%2"
- [(set_attr "op_type" "<RRer>,RXE")
- (set_attr "type" "fsimp<mode>")])
+ [(set_attr "op_type" "RRF,RRE,RXE")
+ (set_attr "type" "fsimp<mode>")
+ (set_attr "enabled" "<nBFP>,<nDFP>,<DSF>")])
; sxbr, sdbr, sebr, sdb, seb, sxtr, sdtr
(define_insn "*sub<mode>3_cconly"
[(set (reg CC_REGNUM)
- (compare (minus:FP (match_operand:FP 1 "nonimmediate_operand" "<f0>,0")
- (match_operand:FP 2 "general_operand" "f,<Rf>"))
+ (compare (minus:FP (match_operand:FP 1 "nonimmediate_operand" "f,0,0")
+ (match_operand:FP 2 "general_operand" "f,f,R"))
(match_operand:FP 3 "const0_operand" "")))
- (clobber (match_scratch:FP 0 "=f,f"))]
+ (clobber (match_scratch:FP 0 "=f,f,f"))]
"s390_match_ccmode (insn, CCSmode) && TARGET_HARD_FLOAT"
"@
- s<xde><bt>r\t%0,<op1>%2
+ s<xde>tr\t%0,%1,%2
+ s<xde>br\t%0,%2
s<xde>b\t%0,%2"
- [(set_attr "op_type" "<RRer>,RXE")
- (set_attr "type" "fsimp<mode>")])
+ [(set_attr "op_type" "RRF,RRE,RXE")
+ (set_attr "type" "fsimp<mode>")
+ (set_attr "enabled" "<nBFP>,<nDFP>,<DSF>")])
;;
@@ -6317,24 +6391,26 @@
; mxbr, mdbr, meebr, mxb, mxb, meeb, mdtr, mxtr
(define_insn "mul<mode>3"
- [(set (match_operand:FP 0 "register_operand" "=f, f,<vf>")
- (mult:FP (match_operand:FP 1 "nonimmediate_operand" "%<f0>, 0,<v0>")
- (match_operand:FP 2 "general_operand" "f,<Rf>,<vf>")))]
+ [(set (match_operand:FP 0 "register_operand" "=f,f,f,v")
+ (mult:FP (match_operand:FP 1 "nonimmediate_operand" "%f,0,0,v")
+ (match_operand:FP 2 "general_operand" "f,f,R,v")))]
"TARGET_HARD_FLOAT"
"@
- m<xdee><bt>r\t%0,<op1>%2
+ m<xdee>tr\t%0,%1,%2
+ m<xdee>br\t%0,%2
m<xdee>b\t%0,%2
wfmdb\t%v0,%v1,%v2"
- [(set_attr "op_type" "<RRer>,RXE,VRR")
+ [(set_attr "op_type" "RRF,RRE,RXE,VRR")
(set_attr "type" "fmul<mode>")
- (set_attr "cpu_facility" "*,*,vec")])
+ (set_attr "cpu_facility" "*,*,*,vec")
+ (set_attr "enabled" "<nBFP>,<nDFP>,<DSF>,<DFDI>")])
; madbr, maebr, maxb, madb, maeb
(define_insn "fma<mode>4"
- [(set (match_operand:DSF 0 "register_operand" "=f,f,<vf>")
- (fma:DSF (match_operand:DSF 1 "nonimmediate_operand" "%f,f,<vf>")
- (match_operand:DSF 2 "nonimmediate_operand" "f,R,<vf>")
- (match_operand:DSF 3 "register_operand" "0,0,<v0>")))]
+ [(set (match_operand:DSF 0 "register_operand" "=f,f,v")
+ (fma:DSF (match_operand:DSF 1 "nonimmediate_operand" "%f,f,v")
+ (match_operand:DSF 2 "nonimmediate_operand" "f,R,v")
+ (match_operand:DSF 3 "register_operand" "0,0,v")))]
"TARGET_HARD_FLOAT"
"@
ma<xde>br\t%0,%1,%2
@@ -6342,14 +6418,15 @@
wfmadb\t%v0,%v1,%v2,%v3"
[(set_attr "op_type" "RRE,RXE,VRR")
(set_attr "type" "fmadd<mode>")
- (set_attr "cpu_facility" "*,*,vec")])
+ (set_attr "cpu_facility" "*,*,vec")
+ (set_attr "enabled" "*,*,<DFDI>")])
; msxbr, msdbr, msebr, msxb, msdb, mseb
(define_insn "fms<mode>4"
- [(set (match_operand:DSF 0 "register_operand" "=f,f,<vf>")
- (fma:DSF (match_operand:DSF 1 "nonimmediate_operand" "%f,f,<vf>")
- (match_operand:DSF 2 "nonimmediate_operand" "f,R,<vf>")
- (neg:DSF (match_operand:DSF 3 "register_operand" "0,0,<v0>"))))]
+ [(set (match_operand:DSF 0 "register_operand" "=f,f,v")
+ (fma:DSF (match_operand:DSF 1 "nonimmediate_operand" "%f,f,v")
+ (match_operand:DSF 2 "nonimmediate_operand" "f,R,v")
+ (neg:DSF (match_operand:DSF 3 "register_operand" "0,0,v"))))]
"TARGET_HARD_FLOAT"
"@
ms<xde>br\t%0,%1,%2
@@ -6357,7 +6434,8 @@
wfmsdb\t%v0,%v1,%v2,%v3"
[(set_attr "op_type" "RRE,RXE,VRR")
(set_attr "type" "fmadd<mode>")
- (set_attr "cpu_facility" "*,*,vec")])
+ (set_attr "cpu_facility" "*,*,vec")
+ (set_attr "enabled" "*,*,<DFDI>")])
;;
;;- Divide and modulo instructions.
@@ -6783,17 +6861,19 @@
; dxbr, ddbr, debr, dxb, ddb, deb, ddtr, dxtr
(define_insn "div<mode>3"
- [(set (match_operand:FP 0 "register_operand" "=f, f,<vf>")
- (div:FP (match_operand:FP 1 "register_operand" "<f0>, 0,<v0>")
- (match_operand:FP 2 "general_operand" "f,<Rf>,<vf>")))]
+ [(set (match_operand:FP 0 "register_operand" "=f,f,f,v")
+ (div:FP (match_operand:FP 1 "register_operand" "f,0,0,v")
+ (match_operand:FP 2 "general_operand" "f,f,R,v")))]
"TARGET_HARD_FLOAT"
"@
- d<xde><bt>r\t%0,<op1>%2
+ d<xde>tr\t%0,%1,%2
+ d<xde>br\t%0,%2
d<xde>b\t%0,%2
wfddb\t%v0,%v1,%v2"
- [(set_attr "op_type" "<RRer>,RXE,VRR")
+ [(set_attr "op_type" "RRF,RRE,RXE,VRR")
(set_attr "type" "fdiv<mode>")
- (set_attr "cpu_facility" "*,*,vec")])
+ (set_attr "cpu_facility" "*,*,*,vec")
+ (set_attr "enabled" "<nBFP>,<nDFP>,<DSF>,<DFDI>")])
;;
@@ -8004,8 +8084,8 @@
; lcxbr, lcdbr, lcebr
; FIXME: wflcdb does not clobber cc
(define_insn "*neg<mode>2"
- [(set (match_operand:BFP 0 "register_operand" "=f,<vf>")
- (neg:BFP (match_operand:BFP 1 "register_operand" "f,<vf>")))
+ [(set (match_operand:BFP 0 "register_operand" "=f,v")
+ (neg:BFP (match_operand:BFP 1 "register_operand" "f,v")))
(clobber (reg:CC CC_REGNUM))]
"TARGET_HARD_FLOAT"
"@
@@ -8013,7 +8093,8 @@
wflcdb\t%0,%1"
[(set_attr "op_type" "RRE,VRR")
(set_attr "cpu_facility" "*,vec")
- (set_attr "type" "fsimp<mode>,*")])
+ (set_attr "type" "fsimp<mode>,*")
+ (set_attr "enabled" "*,<DFDI>")])
;;
@@ -8126,8 +8207,8 @@
; lpxbr, lpdbr, lpebr
; FIXME: wflpdb does not clobber cc
(define_insn "*abs<mode>2"
- [(set (match_operand:BFP 0 "register_operand" "=f,<vf>")
- (abs:BFP (match_operand:BFP 1 "register_operand" "f,<vf>")))
+ [(set (match_operand:BFP 0 "register_operand" "=f,v")
+ (abs:BFP (match_operand:BFP 1 "register_operand" "f,v")))
(clobber (reg:CC CC_REGNUM))]
"TARGET_HARD_FLOAT"
"@
@@ -8135,7 +8216,8 @@
wflpdb\t%0,%1"
[(set_attr "op_type" "RRE,VRR")
(set_attr "cpu_facility" "*,vec")
- (set_attr "type" "fsimp<mode>,*")])
+ (set_attr "type" "fsimp<mode>,*")
+ (set_attr "enabled" "*,<DFDI>")])
;;
@@ -8241,8 +8323,8 @@
; lnxbr, lndbr, lnebr
; FIXME: wflndb does not clobber cc
(define_insn "*negabs<mode>2"
- [(set (match_operand:BFP 0 "register_operand" "=f,<vf>")
- (neg:BFP (abs:BFP (match_operand:BFP 1 "register_operand" "f,<vf>"))))
+ [(set (match_operand:BFP 0 "register_operand" "=f,v")
+ (neg:BFP (abs:BFP (match_operand:BFP 1 "register_operand" "f,v"))))
(clobber (reg:CC CC_REGNUM))]
"TARGET_HARD_FLOAT"
"@
@@ -8250,7 +8332,8 @@
wflndb\t%0,%1"
[(set_attr "op_type" "RRE,VRR")
(set_attr "cpu_facility" "*,vec")
- (set_attr "type" "fsimp<mode>,*")])
+ (set_attr "type" "fsimp<mode>,*")
+ (set_attr "enabled" "*,<DFDI>")])
;;
;;- Square root instructions.
@@ -8262,8 +8345,8 @@
; sqxbr, sqdbr, sqebr, sqdb, sqeb
(define_insn "sqrt<mode>2"
- [(set (match_operand:BFP 0 "register_operand" "=f, f,<vf>")
- (sqrt:BFP (match_operand:BFP 1 "general_operand" "f,<Rf>,<vf>")))]
+ [(set (match_operand:BFP 0 "register_operand" "=f,f,v")
+ (sqrt:BFP (match_operand:BFP 1 "general_operand" "f,R,v")))]
"TARGET_HARD_FLOAT"
"@
sq<xde>br\t%0,%1
@@ -8271,7 +8354,8 @@
wfsqdb\t%v0,%v1"
[(set_attr "op_type" "RRE,RXE,VRR")
(set_attr "type" "fsqrt<mode>")
- (set_attr "cpu_facility" "*,*,vec")])
+ (set_attr "cpu_facility" "*,*,vec")
+ (set_attr "enabled" "*,<DSF>,<DFDI>")])
;;
@@ -8342,28 +8426,23 @@
; rotl(di|si)3 instruction pattern(s).
;
-; rll, rllg
-(define_insn "rotl<mode>3"
- [(set (match_operand:GPR 0 "register_operand" "=d")
- (rotate:GPR (match_operand:GPR 1 "register_operand" "d")
- (match_operand:SI 2 "shift_count_or_setmem_operand" "Y")))]
+(define_expand "rotl<mode>3"
+ [(set (match_operand:GPR 0 "register_operand" "")
+ (rotate:GPR (match_operand:GPR 1 "register_operand" "")
+ (match_operand:SI 2 "nonmemory_operand" "")))]
"TARGET_CPU_ZARCH"
- "rll<g>\t%0,%1,%Y2"
- [(set_attr "op_type" "RSE")
- (set_attr "atype" "reg")
- (set_attr "z10prop" "z10_super_E1")])
+ "")
; rll, rllg
-(define_insn "*rotl<mode>3_and"
- [(set (match_operand:GPR 0 "register_operand" "=d")
- (rotate:GPR (match_operand:GPR 1 "register_operand" "d")
- (and:SI (match_operand:SI 2 "shift_count_or_setmem_operand" "Y")
- (match_operand:SI 3 "const_int_operand" "n"))))]
- "TARGET_CPU_ZARCH && (INTVAL (operands[3]) & 63) == 63"
- "rll<g>\t%0,%1,%Y2"
+(define_insn "*rotl<mode>3<addr_style_op><masked_op>"
+ [(set (match_operand:GPR 0 "register_operand" "=d")
+ (rotate:GPR (match_operand:GPR 1 "register_operand" "d")
+ (match_operand:SI 2 "nonmemory_operand" "an")))]
+ "TARGET_CPU_ZARCH"
+ "rll<g>\t%0,%1,<addr_style_op_ops>"
[(set_attr "op_type" "RSE")
(set_attr "atype" "reg")
- (set_attr "z10prop" "z10_super_E1")])
+ (set_attr "z10prop" "z10_super_E1")])
;;
@@ -8377,60 +8456,37 @@
(define_expand "<shift><mode>3"
[(set (match_operand:DSI 0 "register_operand" "")
(SHIFT:DSI (match_operand:DSI 1 "register_operand" "")
- (match_operand:SI 2 "shift_count_or_setmem_operand" "")))]
+ (match_operand:SI 2 "nonmemory_operand" "")))]
""
"")
+; ESA 64 bit register pair shift with reg or imm shift count
; sldl, srdl
-(define_insn "*<shift>di3_31"
- [(set (match_operand:DI 0 "register_operand" "=d")
- (SHIFT:DI (match_operand:DI 1 "register_operand" "0")
- (match_operand:SI 2 "shift_count_or_setmem_operand" "Y")))]
+(define_insn "*<shift>di3_31<addr_style_op><masked_op>"
+ [(set (match_operand:DI 0 "register_operand" "=d")
+ (SHIFT:DI (match_operand:DI 1 "register_operand" "0")
+ (match_operand:SI 2 "nonmemory_operand" "an")))]
"!TARGET_ZARCH"
- "s<lr>dl\t%0,%Y2"
+ "s<lr>dl\t%0,<addr_style_op_ops>"
[(set_attr "op_type" "RS")
(set_attr "atype" "reg")
(set_attr "z196prop" "z196_cracked")])
+
+; 64 bit register shift with reg or imm shift count
; sll, srl, sllg, srlg, sllk, srlk
-(define_insn "*<shift><mode>3"
- [(set (match_operand:GPR 0 "register_operand" "=d,d")
- (SHIFT:GPR (match_operand:GPR 1 "register_operand" "<d0>,d")
- (match_operand:SI 2 "shift_count_or_setmem_operand" "Y,Y")))]
+(define_insn "*<shift><mode>3<addr_style_op><masked_op>"
+ [(set (match_operand:GPR 0 "register_operand" "=d, d")
+ (SHIFT:GPR (match_operand:GPR 1 "register_operand" "<d0>, d")
+ (match_operand:SI 2 "nonmemory_operand" "an,an")))]
""
"@
- s<lr>l<g>\t%0,<1>%Y2
- s<lr>l<gk>\t%0,%1,%Y2"
+ s<lr>l<g>\t%0,<1><addr_style_op_ops>
+ s<lr>l<gk>\t%0,%1,<addr_style_op_ops>"
[(set_attr "op_type" "RS<E>,RSY")
(set_attr "atype" "reg,reg")
(set_attr "cpu_facility" "*,z196")
- (set_attr "z10prop" "z10_super_E1,*")])
-
-; sldl, srdl
-(define_insn "*<shift>di3_31_and"
- [(set (match_operand:DI 0 "register_operand" "=d")
- (SHIFT:DI (match_operand:DI 1 "register_operand" "0")
- (and:SI (match_operand:SI 2 "shift_count_or_setmem_operand" "Y")
- (match_operand:SI 3 "const_int_operand" "n"))))]
- "!TARGET_ZARCH && (INTVAL (operands[3]) & 63) == 63"
- "s<lr>dl\t%0,%Y2"
- [(set_attr "op_type" "RS")
- (set_attr "atype" "reg")])
-
-; sll, srl, sllg, srlg, sllk, srlk
-(define_insn "*<shift><mode>3_and"
- [(set (match_operand:GPR 0 "register_operand" "=d,d")
- (SHIFT:GPR (match_operand:GPR 1 "register_operand" "<d0>,d")
- (and:SI (match_operand:SI 2 "shift_count_or_setmem_operand" "Y,Y")
- (match_operand:SI 3 "const_int_operand" "n,n"))))]
- "(INTVAL (operands[3]) & 63) == 63"
- "@
- s<lr>l<g>\t%0,<1>%Y2
- s<lr>l<gk>\t%0,%1,%Y2"
- [(set_attr "op_type" "RS<E>,RSY")
- (set_attr "atype" "reg,reg")
- (set_attr "cpu_facility" "*,z196")
- (set_attr "z10prop" "z10_super_E1,*")])
+ (set_attr "z10prop" "z10_super_E1,*")])
;
; ashr(di|si)3 instruction pattern(s).
@@ -8440,181 +8496,40 @@
[(parallel
[(set (match_operand:DSI 0 "register_operand" "")
(ashiftrt:DSI (match_operand:DSI 1 "register_operand" "")
- (match_operand:SI 2 "shift_count_or_setmem_operand" "")))
+ (match_operand:SI 2 "nonmemory_operand" "")))
(clobber (reg:CC CC_REGNUM))])]
""
"")
-(define_insn "*ashrdi3_cc_31"
- [(set (reg CC_REGNUM)
- (compare (ashiftrt:DI (match_operand:DI 1 "register_operand" "0")
- (match_operand:SI 2 "shift_count_or_setmem_operand" "Y"))
- (const_int 0)))
- (set (match_operand:DI 0 "register_operand" "=d")
- (ashiftrt:DI (match_dup 1) (match_dup 2)))]
- "!TARGET_ZARCH && s390_match_ccmode(insn, CCSmode)"
- "srda\t%0,%Y2"
- [(set_attr "op_type" "RS")
- (set_attr "atype" "reg")])
-
-(define_insn "*ashrdi3_cconly_31"
- [(set (reg CC_REGNUM)
- (compare (ashiftrt:DI (match_operand:DI 1 "register_operand" "0")
- (match_operand:SI 2 "shift_count_or_setmem_operand" "Y"))
- (const_int 0)))
- (clobber (match_scratch:DI 0 "=d"))]
- "!TARGET_ZARCH && s390_match_ccmode(insn, CCSmode)"
- "srda\t%0,%Y2"
- [(set_attr "op_type" "RS")
- (set_attr "atype" "reg")])
-
-(define_insn "*ashrdi3_31"
- [(set (match_operand:DI 0 "register_operand" "=d")
- (ashiftrt:DI (match_operand:DI 1 "register_operand" "0")
- (match_operand:SI 2 "shift_count_or_setmem_operand" "Y")))
+; FIXME: The number of alternatives is doubled here to match the fix
+; number of 2 in the subst pattern for the (clobber (match_scratch...
+; The right fix should be to support match_scratch in the output
+; pattern of a define_subst.
+(define_insn "*ashrdi3_31<addr_style_op_cc><masked_op_cc><setcc><cconly>"
+ [(set (match_operand:DI 0 "register_operand" "=d, d")
+ (ashiftrt:DI (match_operand:DI 1 "register_operand" "0, 0")
+ (match_operand:SI 2 "nonmemory_operand" "an,an")))
(clobber (reg:CC CC_REGNUM))]
"!TARGET_ZARCH"
- "srda\t%0,%Y2"
- [(set_attr "op_type" "RS")
- (set_attr "atype" "reg")])
-
-; sra, srag, srak
-(define_insn "*ashr<mode>3_cc"
- [(set (reg CC_REGNUM)
- (compare (ashiftrt:GPR (match_operand:GPR 1 "register_operand" "<d0>,d")
- (match_operand:SI 2 "shift_count_or_setmem_operand" "Y,Y"))
- (const_int 0)))
- (set (match_operand:GPR 0 "register_operand" "=d,d")
- (ashiftrt:GPR (match_dup 1) (match_dup 2)))]
- "s390_match_ccmode(insn, CCSmode)"
"@
- sra<g>\t%0,<1>%Y2
- sra<gk>\t%0,%1,%Y2"
- [(set_attr "op_type" "RS<E>,RSY")
- (set_attr "atype" "reg,reg")
- (set_attr "cpu_facility" "*,z196")
- (set_attr "z10prop" "z10_super_E1,*")])
+ srda\t%0,<addr_style_op_cc_ops>
+ srda\t%0,<addr_style_op_cc_ops>"
+ [(set_attr "op_type" "RS")
+ (set_attr "atype" "reg")])
-; sra, srag, srak
-(define_insn "*ashr<mode>3_cconly"
- [(set (reg CC_REGNUM)
- (compare (ashiftrt:GPR (match_operand:GPR 1 "register_operand" "<d0>,d")
- (match_operand:SI 2 "shift_count_or_setmem_operand" "Y,Y"))
- (const_int 0)))
- (clobber (match_scratch:GPR 0 "=d,d"))]
- "s390_match_ccmode(insn, CCSmode)"
- "@
- sra<g>\t%0,<1>%Y2
- sra<gk>\t%0,%1,%Y2"
- [(set_attr "op_type" "RS<E>,RSY")
- (set_attr "atype" "reg,reg")
- (set_attr "cpu_facility" "*,z196")
- (set_attr "z10prop" "z10_super_E1,*")])
; sra, srag
-(define_insn "*ashr<mode>3"
- [(set (match_operand:GPR 0 "register_operand" "=d,d")
- (ashiftrt:GPR (match_operand:GPR 1 "register_operand" "<d0>,d")
- (match_operand:SI 2 "shift_count_or_setmem_operand" "Y,Y")))
+(define_insn "*ashr<mode>3<addr_style_op_cc><masked_op_cc><setcc><cconly>"
+ [(set (match_operand:GPR 0 "register_operand" "=d, d")
+ (ashiftrt:GPR (match_operand:GPR 1 "register_operand" "<d0>, d")
+ (match_operand:SI 2 "nonmemory_operand" "an,an")))
(clobber (reg:CC CC_REGNUM))]
""
"@
- sra<g>\t%0,<1>%Y2
- sra<gk>\t%0,%1,%Y2"
- [(set_attr "op_type" "RS<E>,RSY")
- (set_attr "atype" "reg,reg")
- (set_attr "cpu_facility" "*,z196")
- (set_attr "z10prop" "z10_super_E1,*")])
-
-
-; shift pattern with implicit ANDs
-
-(define_insn "*ashrdi3_cc_31_and"
- [(set (reg CC_REGNUM)
- (compare (ashiftrt:DI (match_operand:DI 1 "register_operand" "0")
- (and:SI (match_operand:SI 2 "shift_count_or_setmem_operand" "Y")
- (match_operand:SI 3 "const_int_operand" "n")))
- (const_int 0)))
- (set (match_operand:DI 0 "register_operand" "=d")
- (ashiftrt:DI (match_dup 1) (and:SI (match_dup 2) (match_dup 3))))]
- "!TARGET_ZARCH && s390_match_ccmode(insn, CCSmode)
- && (INTVAL (operands[3]) & 63) == 63"
- "srda\t%0,%Y2"
- [(set_attr "op_type" "RS")
- (set_attr "atype" "reg")])
-
-(define_insn "*ashrdi3_cconly_31_and"
- [(set (reg CC_REGNUM)
- (compare (ashiftrt:DI (match_operand:DI 1 "register_operand" "0")
- (and:SI (match_operand:SI 2 "shift_count_or_setmem_operand" "Y")
- (match_operand:SI 3 "const_int_operand" "n")))
- (const_int 0)))
- (clobber (match_scratch:DI 0 "=d"))]
- "!TARGET_ZARCH && s390_match_ccmode(insn, CCSmode)
- && (INTVAL (operands[3]) & 63) == 63"
- "srda\t%0,%Y2"
- [(set_attr "op_type" "RS")
- (set_attr "atype" "reg")])
-
-(define_insn "*ashrdi3_31_and"
- [(set (match_operand:DI 0 "register_operand" "=d")
- (ashiftrt:DI (match_operand:DI 1 "register_operand" "0")
- (and:SI (match_operand:SI 2 "shift_count_or_setmem_operand" "Y")
- (match_operand:SI 3 "const_int_operand" "n"))))
- (clobber (reg:CC CC_REGNUM))]
- "!TARGET_ZARCH && (INTVAL (operands[3]) & 63) == 63"
- "srda\t%0,%Y2"
- [(set_attr "op_type" "RS")
- (set_attr "atype" "reg")])
-
-; sra, srag, srak
-(define_insn "*ashr<mode>3_cc_and"
- [(set (reg CC_REGNUM)
- (compare (ashiftrt:GPR (match_operand:GPR 1 "register_operand" "<d0>,d")
- (and:SI (match_operand:SI 2 "shift_count_or_setmem_operand" "Y,Y")
- (match_operand:SI 3 "const_int_operand" "n,n")))
- (const_int 0)))
- (set (match_operand:GPR 0 "register_operand" "=d,d")
- (ashiftrt:GPR (match_dup 1) (and:SI (match_dup 2) (match_dup 3))))]
- "s390_match_ccmode(insn, CCSmode) && (INTVAL (operands[3]) & 63) == 63"
- "@
- sra<g>\t%0,<1>%Y2
- sra<gk>\t%0,%1,%Y2"
- [(set_attr "op_type" "RS<E>,RSY")
- (set_attr "atype" "reg,reg")
- (set_attr "cpu_facility" "*,z196")
- (set_attr "z10prop" "z10_super_E1,*")])
-
-; sra, srag, srak
-(define_insn "*ashr<mode>3_cconly_and"
- [(set (reg CC_REGNUM)
- (compare (ashiftrt:GPR (match_operand:GPR 1 "register_operand" "<d0>,d")
- (and:SI (match_operand:SI 2 "shift_count_or_setmem_operand" "Y,Y")
- (match_operand:SI 3 "const_int_operand" "n,n")))
- (const_int 0)))
- (clobber (match_scratch:GPR 0 "=d,d"))]
- "s390_match_ccmode(insn, CCSmode) && (INTVAL (operands[3]) & 63) == 63"
- "@
- sra<g>\t%0,<1>%Y2
- sra<gk>\t%0,%1,%Y2"
- [(set_attr "op_type" "RS<E>,RSY")
- (set_attr "atype" "reg,reg")
- (set_attr "cpu_facility" "*,z196")
- (set_attr "z10prop" "z10_super_E1,*")])
-
-; sra, srag, srak
-(define_insn "*ashr<mode>3_and"
- [(set (match_operand:GPR 0 "register_operand" "=d,d")
- (ashiftrt:GPR (match_operand:GPR 1 "register_operand" "<d0>,d")
- (and:SI (match_operand:SI 2 "shift_count_or_setmem_operand" "Y,Y")
- (match_operand:SI 3 "const_int_operand" "n,n"))))
- (clobber (reg:CC CC_REGNUM))]
- "(INTVAL (operands[3]) & 63) == 63"
- "@
- sra<g>\t%0,<1>%Y2
- sra<gk>\t%0,%1,%Y2"
+ sra<g>\t%0,<1><addr_style_op_cc_ops>
+ sra<gk>\t%0,%1,<addr_style_op_cc_ops>"
[(set_attr "op_type" "RS<E>,RSY")
- (set_attr "atype" "reg,reg")
+ (set_attr "atype" "reg")
(set_attr "cpu_facility" "*,z196")
(set_attr "z10prop" "z10_super_E1,*")])
@@ -10831,7 +10746,7 @@
; Transaction abort
(define_expand "tabort"
- [(unspec_volatile [(match_operand:SI 0 "shift_count_or_setmem_operand" "")]
+ [(unspec_volatile [(match_operand:SI 0 "nonmemory_operand" "")]
UNSPECV_TABORT)]
"TARGET_HTM && operands != NULL"
{
@@ -10846,12 +10761,21 @@
})
(define_insn "*tabort_1"
- [(unspec_volatile [(match_operand:SI 0 "shift_count_or_setmem_operand" "Y")]
+ [(unspec_volatile [(match_operand:SI 0 "nonmemory_operand" "aJ")]
UNSPECV_TABORT)]
"TARGET_HTM && operands != NULL"
"tabort\t%Y0"
[(set_attr "op_type" "S")])
+(define_insn "*tabort_1_plus"
+ [(unspec_volatile [(plus:SI (match_operand:SI 0 "register_operand" "a")
+ (match_operand:SI 1 "const_int_operand" "J"))]
+ UNSPECV_TABORT)]
+ "TARGET_HTM && operands != NULL
+ && CONST_OK_FOR_CONSTRAINT_P (INTVAL (operands[1]), 'J', \"J\")"
+ "tabort\t%1(%0)"
+ [(set_attr "op_type" "S")])
+
; Transaction extract nesting depth
(define_insn "etnd"
@@ -10910,11 +10834,11 @@
(define_insn "lcbb"
[(set (match_operand:SI 0 "register_operand" "=d")
- (unspec:SI [(match_operand:SI 1 "address_operand" "ZQZR")
+ (unspec:SI [(match_operand 1 "address_operand" "ZQZR")
(match_operand:SI 2 "immediate_operand" "C")] UNSPEC_LCBB))
(clobber (reg:CC CC_REGNUM))]
"TARGET_Z13"
- "lcbb\t%0,%1,%b2"
+ "lcbb\t%0,%a1,%b2"
[(set_attr "op_type" "VRX")])
; Handle -fsplit-stack.
diff --git a/gcc/config/s390/subst.md b/gcc/config/s390/subst.md
new file mode 100644
index 0000000..8a1b814
--- /dev/null
+++ b/gcc/config/s390/subst.md
@@ -0,0 +1,122 @@
+;;- Machine description for GNU compiler -- S/390 / zSeries version.
+;; Subst patterns.
+;; Copyright (C) 2016 Free Software Foundation, Inc.
+;; Contributed by Andreas Krebbel (Andreas.Krebbel@de.ibm.com)
+
+;; 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_code_iterator SUBST [rotate ashift lshiftrt ashiftrt])
+(define_mode_iterator DSI_VI [SI DI V2QI V4QI V8QI V16QI V2HI V4HI V8HI V2SI V4SI V2DI])
+
+; This expands an register/immediate operand to a register+immediate
+; operand to draw advantage of the address style operand format
+; providing a addition for free.
+(define_subst "addr_style_op_subst"
+ [(set (match_operand:DSI_VI 0 "" "")
+ (SUBST:DSI_VI (match_operand:DSI_VI 1 "" "")
+ (match_operand:SI 2 "" "")))]
+ ""
+ [(set (match_dup 0)
+ (SUBST:DSI_VI (match_dup 1)
+ (plus:SI (match_operand:SI 2 "register_operand" "a")
+ (match_operand 3 "const_int_operand" "n"))))])
+
+; Use this in the insn name.
+(define_subst_attr "addr_style_op" "addr_style_op_subst" "" "_plus")
+
+; In the subst pattern the additional const int operand will be used
+; as displacement. In the normal version %Y is able to print the
+; operand either as displacement or as base register.
+(define_subst_attr "addr_style_op_ops" "addr_style_op_subst" "%Y2" "%Y3(%2)")
+
+
+; This substitution adds an explicit AND operation to the second
+; operand. This way previous operations on the now masked out bits
+; might get optimized away.
+(define_subst "masked_op_subst"
+ [(set (match_operand:DSI 0 "" "")
+ (SUBST:DSI (match_operand:DSI 1 "" "")
+ (match_operand:SI 2 "" "")))]
+ ""
+ [(set (match_dup 0)
+ (SUBST:DSI (match_dup 1)
+ (and:SI (match_dup 2)
+ (match_operand:SI 3 "const_int_6bitset_operand" "jm6"))))])
+
+; Use this in the insn name.
+(define_subst_attr "masked_op" "masked_op_subst" "" "_and")
+
+
+
+; This is like the addr_style_op substitution above but with a CC clobber.
+(define_subst "addr_style_op_cc_subst"
+ [(set (match_operand:DSI 0 "" "")
+ (ashiftrt:DSI (match_operand:DSI 1 "" "")
+ (match_operand:SI 2 "" "")))
+ (clobber (reg:CC CC_REGNUM))]
+ "REG_P (operands[2])"
+ [(set (match_dup 0)
+ (ashiftrt:DSI (match_dup 1)
+ (plus:SI (match_dup 2)
+ (match_operand 3 "const_int_operand" "n"))))
+ (clobber (reg:CC CC_REGNUM))])
+
+(define_subst_attr "addr_style_op_cc" "addr_style_op_cc_subst" "" "_plus")
+(define_subst_attr "addr_style_op_cc_ops" "addr_style_op_cc_subst" "%Y2" "%Y3(%2)")
+
+
+; This is like the masked_op substitution but with a CC clobber.
+(define_subst "masked_op_cc_subst"
+ [(set (match_operand:DSI 0 "" "")
+ (ashiftrt:DSI (match_operand:DSI 1 "" "")
+ (match_operand:SI 2 "" "")))
+ (clobber (reg:CC CC_REGNUM))]
+ ""
+ [(set (match_dup 0)
+ (ashiftrt:DSI (match_dup 1)
+ (and:SI (match_dup 2)
+ (match_operand:SI 3 "const_int_6bitset_operand" ""))))
+ (clobber (reg:CC CC_REGNUM))])
+(define_subst_attr "masked_op_cc" "masked_op_cc_subst" "" "_and")
+
+
+; This adds an explicit CC reg set to an operation while keeping the
+; set for the operation result as well.
+(define_subst "setcc_subst"
+ [(set (match_operand:DSI 0 "" "")
+ (match_operand:DSI 1 "" ""))
+ (clobber (reg:CC CC_REGNUM))]
+ "s390_match_ccmode(insn, CCSmode)"
+ [(set (reg CC_REGNUM)
+ (compare (match_dup 1) (const_int 0)))
+ (set (match_dup 0) (match_dup 1))])
+
+; Use this in the insn name.
+(define_subst_attr "setcc" "setcc_subst" "" "_cc")
+
+; This adds an explicit CC reg set to an operation while dropping the
+; result of the operation.
+(define_subst "cconly_subst"
+ [(set (match_operand:DSI 0 "" "")
+ (match_operand:DSI 1 "" ""))
+ (clobber (reg:CC CC_REGNUM))]
+ "s390_match_ccmode(insn, CCSmode)"
+ [(set (reg CC_REGNUM)
+ (compare (match_dup 1) (const_int 0)))
+ (clobber (match_scratch:DSI 0 "=d,d"))])
+
+(define_subst_attr "cconly" "cconly_subst" "" "_cconly")
diff --git a/gcc/config/s390/vecintrin.h b/gcc/config/s390/vecintrin.h
index b9742ec..ab82e7a 100644
--- a/gcc/config/s390/vecintrin.h
+++ b/gcc/config/s390/vecintrin.h
@@ -80,6 +80,7 @@ __lcbb(const void *ptr, int bndry)
#define vec_checksum __builtin_s390_vcksm
#define vec_gfmsum_128 __builtin_s390_vgfmg
#define vec_gfmsum_accum_128 __builtin_s390_vgfmag
+#define vec_sub_u128 __builtin_s390_vsq
#define vec_subc_u128 __builtin_s390_vscbiq
#define vec_sube_u128 __builtin_s390_vsbiq
#define vec_subec_u128 __builtin_s390_vsbcbiq
diff --git a/gcc/config/s390/vector.md b/gcc/config/s390/vector.md
index 2302a8f..5b3cdaf 100644
--- a/gcc/config/s390/vector.md
+++ b/gcc/config/s390/vector.md
@@ -43,8 +43,8 @@
; All integer vector modes supported in a vector register + TImode
(define_mode_iterator VIT [V1QI V2QI V4QI V8QI V16QI V1HI V2HI V4HI V8HI V1SI V2SI V4SI V1DI V2DI V1TI TI])
-(define_mode_iterator VI [V2QI V4QI V8QI V16QI V2HI V4HI V8HI V2SI V4SI V2DI])
-(define_mode_iterator VI_QHS [V4QI V8QI V16QI V4HI V8HI V4SI])
+(define_mode_iterator VI [V1QI V2QI V4QI V8QI V16QI V1HI V2HI V4HI V8HI V1SI V2SI V4SI V1DI V2DI])
+(define_mode_iterator VI_QHS [V1QI V2QI V4QI V8QI V16QI V1HI V2HI V4HI V8HI V1SI V2SI V4SI])
(define_mode_iterator V_8 [V1QI])
(define_mode_iterator V_16 [V2QI V1HI])
@@ -100,11 +100,11 @@
(V1TF "V1TI")])
; Vector with doubled element size.
-(define_mode_attr vec_double [(V2QI "V1HI") (V4QI "V2HI") (V8QI "V4HI") (V16QI "V8HI")
- (V2HI "V1SI") (V4HI "V2SI") (V8HI "V4SI")
- (V2SI "V1DI") (V4SI "V2DI")
- (V2DI "V1TI")
- (V2SF "V1DF") (V4SF "V2DF")])
+(define_mode_attr vec_double [(V1QI "V1HI") (V2QI "V1HI") (V4QI "V2HI") (V8QI "V4HI") (V16QI "V8HI")
+ (V1HI "V1SI") (V2HI "V1SI") (V4HI "V2SI") (V8HI "V4SI")
+ (V1SI "V1DI") (V2SI "V1DI") (V4SI "V2DI")
+ (V1DI "V1TI") (V2DI "V1TI")
+ (V1SF "V1DF") (V2SF "V1DF") (V4SF "V2DF")])
; Vector with half the element size.
(define_mode_attr vec_half [(V1HI "V2QI") (V2HI "V4QI") (V4HI "V8QI") (V8HI "V16QI")
@@ -307,47 +307,80 @@
; vec_store_lanes?
+; vec_set is supposed to *modify* an existing vector so operand 0 is
+; duplicated as input operand.
+(define_expand "vec_set<mode>"
+ [(set (match_operand:V 0 "register_operand" "")
+ (unspec:V [(match_operand:<non_vec> 1 "general_operand" "")
+ (match_operand:SI 2 "nonmemory_operand" "")
+ (match_dup 0)]
+ UNSPEC_VEC_SET))]
+ "TARGET_VX")
+
; FIXME: Support also vector mode operands for 1
; FIXME: A target memory operand seems to be useful otherwise we end
; up with vl vlvgg vst. Shouldn't the middle-end be able to handle
; that itself?
(define_insn "*vec_set<mode>"
- [(set (match_operand:V 0 "register_operand" "=v, v,v")
- (unspec:V [(match_operand:<non_vec> 1 "general_operand" "d,QR,K")
- (match_operand:SI 2 "shift_count_or_setmem_operand" "Y, I,I")
- (match_operand:V 3 "register_operand" "0, 0,0")]
+ [(set (match_operand:V 0 "register_operand" "=v, v,v")
+ (unspec:V [(match_operand:<non_vec> 1 "general_operand" "d,QR,K")
+ (match_operand:SI 2 "nonmemory_operand" "an, I,I")
+ (match_operand:V 3 "register_operand" "0, 0,0")]
UNSPEC_VEC_SET))]
- "TARGET_VX"
+ "TARGET_VX
+ && (!CONST_INT_P (operands[2])
+ || UINTVAL (operands[2]) < GET_MODE_NUNITS (<V:MODE>mode))"
"@
vlvg<bhfgq>\t%v0,%1,%Y2
vle<bhfgq>\t%v0,%1,%2
vlei<bhfgq>\t%v0,%1,%2"
[(set_attr "op_type" "VRS,VRX,VRI")])
-; vec_set is supposed to *modify* an existing vector so operand 0 is
-; duplicated as input operand.
-(define_expand "vec_set<mode>"
- [(set (match_operand:V 0 "register_operand" "")
- (unspec:V [(match_operand:<non_vec> 1 "general_operand" "")
- (match_operand:SI 2 "shift_count_or_setmem_operand" "")
- (match_dup 0)]
- UNSPEC_VEC_SET))]
- "TARGET_VX")
+(define_insn "*vec_set<mode>_plus"
+ [(set (match_operand:V 0 "register_operand" "=v")
+ (unspec:V [(match_operand:<non_vec> 1 "general_operand" "d")
+ (plus:SI (match_operand:SI 2 "register_operand" "a")
+ (match_operand:SI 4 "const_int_operand" "n"))
+ (match_operand:V 3 "register_operand" "0")]
+ UNSPEC_VEC_SET))]
+ "TARGET_VX"
+ "vlvg<bhfgq>\t%v0,%1,%Y4(%2)"
+ [(set_attr "op_type" "VRS")])
+
; 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_insn "vec_extract<mode>"
- [(set (match_operand:<non_vec> 0 "nonimmediate_operand" "=d,QR")
- (unspec:<non_vec> [(match_operand:V 1 "register_operand" " v, v")
- (match_operand:SI 2 "shift_count_or_setmem_operand" " Y, I")]
+(define_expand "vec_extract<mode>"
+ [(set (match_operand:<non_vec> 0 "nonimmediate_operand" "")
+ (unspec:<non_vec> [(match_operand:V 1 "register_operand" "")
+ (match_operand:SI 2 "nonmemory_operand" "")]
UNSPEC_VEC_EXTRACT))]
- "TARGET_VX"
+ "TARGET_VX")
+
+(define_insn "*vec_extract<mode>"
+ [(set (match_operand:<non_vec> 0 "nonimmediate_operand" "=d,QR")
+ (unspec:<non_vec> [(match_operand:V 1 "register_operand" "v, v")
+ (match_operand:SI 2 "nonmemory_operand" "an, I")]
+ UNSPEC_VEC_EXTRACT))]
+ "TARGET_VX
+ && (!CONST_INT_P (operands[2])
+ || UINTVAL (operands[2]) < GET_MODE_NUNITS (<V:MODE>mode))"
"@
vlgv<bhfgq>\t%0,%v1,%Y2
vste<bhfgq>\t%v1,%0,%2"
[(set_attr "op_type" "VRS,VRX")])
+(define_insn "*vec_extract<mode>_plus"
+ [(set (match_operand:<non_vec> 0 "nonimmediate_operand" "=d")
+ (unspec:<non_vec> [(match_operand:V 1 "register_operand" "v")
+ (plus:SI (match_operand:SI 2 "nonmemory_operand" "a")
+ (match_operand:SI 3 "const_int_operand" "n"))]
+ UNSPEC_VEC_EXTRACT))]
+ "TARGET_VX"
+ "vlgv<bhfgq>\t%0,%v1,%Y3(%2)"
+ [(set_attr "op_type" "VRS")])
+
(define_expand "vec_init<V_HW:mode>"
[(match_operand:V_HW 0 "register_operand" "")
(match_operand:V_HW 1 "nonmemory_operand" "")]
@@ -453,8 +486,8 @@
; operation into two DImode ADDs.
(define_insn "<ti*>add<mode>3"
[(set (match_operand:VIT 0 "nonimmediate_operand" "=v")
- (plus:VIT (match_operand:VIT 1 "nonimmediate_operand" "v")
- (match_operand:VIT 2 "nonimmediate_operand" "v")))]
+ (plus:VIT (match_operand:VIT 1 "nonimmediate_operand" "%v")
+ (match_operand:VIT 2 "general_operand" "v")))]
"TARGET_VX"
"va<bhfgq>\t%v0,%v1,%v2"
[(set_attr "op_type" "VRR")])
@@ -463,7 +496,7 @@
(define_insn "<ti*>sub<mode>3"
[(set (match_operand:VIT 0 "nonimmediate_operand" "=v")
(minus:VIT (match_operand:VIT 1 "nonimmediate_operand" "v")
- (match_operand:VIT 2 "nonimmediate_operand" "v")))]
+ (match_operand:VIT 2 "general_operand" "v")))]
"TARGET_VX"
"vs<bhfgq>\t%v0,%v1,%v2"
[(set_attr "op_type" "VRR")])
@@ -471,7 +504,7 @@
; vmlb, vmlhw, vmlf
(define_insn "mul<mode>3"
[(set (match_operand:VI_QHS 0 "register_operand" "=v")
- (mult:VI_QHS (match_operand:VI_QHS 1 "register_operand" "v")
+ (mult:VI_QHS (match_operand:VI_QHS 1 "register_operand" "%v")
(match_operand:VI_QHS 2 "register_operand" "v")))]
"TARGET_VX"
"vml<bhfgq><w>\t%v0,%v1,%v2"
@@ -526,7 +559,7 @@
(define_insn "and<mode>3"
[(set (match_operand:VT 0 "register_operand" "=v")
- (and:VT (match_operand:VT 1 "register_operand" "v")
+ (and:VT (match_operand:VT 1 "register_operand" "%v")
(match_operand:VT 2 "register_operand" "v")))]
"TARGET_VX"
"vn\t%v0,%v1,%v2"
@@ -537,7 +570,7 @@
(define_insn "ior<mode>3"
[(set (match_operand:VT 0 "register_operand" "=v")
- (ior:VT (match_operand:VT 1 "register_operand" "v")
+ (ior:VT (match_operand:VT 1 "register_operand" "%v")
(match_operand:VT 2 "register_operand" "v")))]
"TARGET_VX"
"vo\t%v0,%v1,%v2"
@@ -548,7 +581,7 @@
(define_insn "xor<mode>3"
[(set (match_operand:VT 0 "register_operand" "=v")
- (xor:VT (match_operand:VT 1 "register_operand" "v")
+ (xor:VT (match_operand:VT 1 "register_operand" "%v")
(match_operand:VT 2 "register_operand" "v")))]
"TARGET_VX"
"vx\t%v0,%v1,%v2"
@@ -667,17 +700,6 @@
[(set_attr "op_type" "VRR")])
-; Vector rotate instructions
-
-; Each vector element rotated by a scalar
-; verllb, verllh, verllf, verllg
-(define_insn "rotl<mode>3"
- [(set (match_operand:VI 0 "register_operand" "=v")
- (rotate:VI (match_operand:VI 1 "register_operand" "v")
- (match_operand:SI 2 "shift_count_or_setmem_operand" "Y")))]
- "TARGET_VX"
- "verll<bhfgq>\t%v0,%v1,%Y2"
- [(set_attr "op_type" "VRS")])
; Each vector element rotated by the corresponding vector element
; verllvb, verllvh, verllvf, verllvg
@@ -690,36 +712,33 @@
[(set_attr "op_type" "VRR")])
-; Shift each element by scalar value
+; Vector rotate and shift by scalar instructions
-; veslb, veslh, veslf, veslg
-(define_insn "ashl<mode>3"
- [(set (match_operand:VI 0 "register_operand" "=v")
- (ashift:VI (match_operand:VI 1 "register_operand" "v")
- (match_operand:SI 2 "shift_count_or_setmem_operand" "Y")))]
- "TARGET_VX"
- "vesl<bhfgq>\t%v0,%v1,%Y2"
- [(set_attr "op_type" "VRS")])
+(define_code_iterator VEC_SHIFTS [ashift ashiftrt lshiftrt rotate])
+(define_code_attr vec_shifts_name [(ashift "ashl") (ashiftrt "ashr")
+ (lshiftrt "lshr") (rotate "rotl")])
+(define_code_attr vec_shifts_mnem [(ashift "vesl") (ashiftrt "vesra")
+ (lshiftrt "vesrl") (rotate "verll")])
-; vesrab, vesrah, vesraf, vesrag
-(define_insn "ashr<mode>3"
- [(set (match_operand:VI 0 "register_operand" "=v")
- (ashiftrt:VI (match_operand:VI 1 "register_operand" "v")
- (match_operand:SI 2 "shift_count_or_setmem_operand" "Y")))]
- "TARGET_VX"
- "vesra<bhfgq>\t%v0,%v1,%Y2"
- [(set_attr "op_type" "VRS")])
+; Each vector element rotated by a scalar
+(define_expand "<vec_shifts_name><mode>3"
+ [(set (match_operand:VI 0 "register_operand" "")
+ (VEC_SHIFTS:VI (match_operand:VI 1 "register_operand" "")
+ (match_operand:SI 2 "nonmemory_operand" "")))]
+ "TARGET_VX")
+; verllb, verllh, verllf, verllg
+; veslb, veslh, veslf, veslg
+; vesrab, vesrah, vesraf, vesrag
; vesrlb, vesrlh, vesrlf, vesrlg
-(define_insn "lshr<mode>3"
- [(set (match_operand:VI 0 "register_operand" "=v")
- (lshiftrt:VI (match_operand:VI 1 "register_operand" "v")
- (match_operand:SI 2 "shift_count_or_setmem_operand" "Y")))]
+(define_insn "*<vec_shifts_name><mode>3<addr_style_op>"
+ [(set (match_operand:VI 0 "register_operand" "=v")
+ (VEC_SHIFTS:VI (match_operand:VI 1 "register_operand" "v")
+ (match_operand:SI 2 "nonmemory_operand" "an")))]
"TARGET_VX"
- "vesrl<bhfgq>\t%v0,%v1,%Y2"
+ "<vec_shifts_mnem><bhfgq>\t%v0,%v1,%Y2"
[(set_attr "op_type" "VRS")])
-
; Shift each element by corresponding vector element
; veslvb, veslvh, veslvf, veslvg
@@ -765,7 +784,7 @@
; vmnb, vmnh, vmnf, vmng
(define_insn "smin<mode>3"
[(set (match_operand:VI 0 "register_operand" "=v")
- (smin:VI (match_operand:VI 1 "register_operand" "v")
+ (smin:VI (match_operand:VI 1 "register_operand" "%v")
(match_operand:VI 2 "register_operand" "v")))]
"TARGET_VX"
"vmn<bhfgq>\t%v0,%v1,%v2"
@@ -774,7 +793,7 @@
; vmxb, vmxh, vmxf, vmxg
(define_insn "smax<mode>3"
[(set (match_operand:VI 0 "register_operand" "=v")
- (smax:VI (match_operand:VI 1 "register_operand" "v")
+ (smax:VI (match_operand:VI 1 "register_operand" "%v")
(match_operand:VI 2 "register_operand" "v")))]
"TARGET_VX"
"vmx<bhfgq>\t%v0,%v1,%v2"
@@ -783,7 +802,7 @@
; vmnlb, vmnlh, vmnlf, vmnlg
(define_insn "umin<mode>3"
[(set (match_operand:VI 0 "register_operand" "=v")
- (umin:VI (match_operand:VI 1 "register_operand" "v")
+ (umin:VI (match_operand:VI 1 "register_operand" "%v")
(match_operand:VI 2 "register_operand" "v")))]
"TARGET_VX"
"vmnl<bhfgq>\t%v0,%v1,%v2"
@@ -792,7 +811,7 @@
; vmxlb, vmxlh, vmxlf, vmxlg
(define_insn "umax<mode>3"
[(set (match_operand:VI 0 "register_operand" "=v")
- (umax:VI (match_operand:VI 1 "register_operand" "v")
+ (umax:VI (match_operand:VI 1 "register_operand" "%v")
(match_operand:VI 2 "register_operand" "v")))]
"TARGET_VX"
"vmxl<bhfgq>\t%v0,%v1,%v2"
@@ -800,8 +819,8 @@
; vmeb, vmeh, vmef
(define_insn "vec_widen_smult_even_<mode>"
- [(set (match_operand:<vec_double> 0 "register_operand" "=v")
- (unspec:<vec_double> [(match_operand:VI_QHS 1 "register_operand" "v")
+ [(set (match_operand:<vec_double> 0 "register_operand" "=v")
+ (unspec:<vec_double> [(match_operand:VI_QHS 1 "register_operand" "%v")
(match_operand:VI_QHS 2 "register_operand" "v")]
UNSPEC_VEC_SMULT_EVEN))]
"TARGET_VX"
@@ -811,7 +830,7 @@
; vmleb, vmleh, vmlef
(define_insn "vec_widen_umult_even_<mode>"
[(set (match_operand:<vec_double> 0 "register_operand" "=v")
- (unspec:<vec_double> [(match_operand:VI_QHS 1 "register_operand" "v")
+ (unspec:<vec_double> [(match_operand:VI_QHS 1 "register_operand" "%v")
(match_operand:VI_QHS 2 "register_operand" "v")]
UNSPEC_VEC_UMULT_EVEN))]
"TARGET_VX"
@@ -821,7 +840,7 @@
; vmob, vmoh, vmof
(define_insn "vec_widen_smult_odd_<mode>"
[(set (match_operand:<vec_double> 0 "register_operand" "=v")
- (unspec:<vec_double> [(match_operand:VI_QHS 1 "register_operand" "v")
+ (unspec:<vec_double> [(match_operand:VI_QHS 1 "register_operand" "%v")
(match_operand:VI_QHS 2 "register_operand" "v")]
UNSPEC_VEC_SMULT_ODD))]
"TARGET_VX"
@@ -831,7 +850,7 @@
; vmlob, vmloh, vmlof
(define_insn "vec_widen_umult_odd_<mode>"
[(set (match_operand:<vec_double> 0 "register_operand" "=v")
- (unspec:<vec_double> [(match_operand:VI_QHS 1 "register_operand" "v")
+ (unspec:<vec_double> [(match_operand:VI_QHS 1 "register_operand" "%v")
(match_operand:VI_QHS 2 "register_operand" "v")]
UNSPEC_VEC_UMULT_ODD))]
"TARGET_VX"
@@ -854,7 +873,7 @@
(define_insn "addv2df3"
[(set (match_operand:V2DF 0 "register_operand" "=v")
- (plus:V2DF (match_operand:V2DF 1 "register_operand" "v")
+ (plus:V2DF (match_operand:V2DF 1 "register_operand" "%v")
(match_operand:V2DF 2 "register_operand" "v")))]
"TARGET_VX"
"vfadb\t%v0,%v1,%v2"
@@ -862,7 +881,7 @@
(define_insn "subv2df3"
[(set (match_operand:V2DF 0 "register_operand" "=v")
- (minus:V2DF (match_operand:V2DF 1 "register_operand" "v")
+ (minus:V2DF (match_operand:V2DF 1 "register_operand" "%v")
(match_operand:V2DF 2 "register_operand" "v")))]
"TARGET_VX"
"vfsdb\t%v0,%v1,%v2"
@@ -870,7 +889,7 @@
(define_insn "mulv2df3"
[(set (match_operand:V2DF 0 "register_operand" "=v")
- (mult:V2DF (match_operand:V2DF 1 "register_operand" "v")
+ (mult:V2DF (match_operand:V2DF 1 "register_operand" "%v")
(match_operand:V2DF 2 "register_operand" "v")))]
"TARGET_VX"
"vfmdb\t%v0,%v1,%v2"
@@ -893,7 +912,7 @@
(define_insn "fmav2df4"
[(set (match_operand:V2DF 0 "register_operand" "=v")
- (fma:V2DF (match_operand:V2DF 1 "register_operand" "v")
+ (fma:V2DF (match_operand:V2DF 1 "register_operand" "%v")
(match_operand:V2DF 2 "register_operand" "v")
(match_operand:V2DF 3 "register_operand" "v")))]
"TARGET_VX"
@@ -902,7 +921,7 @@
(define_insn "fmsv2df4"
[(set (match_operand:V2DF 0 "register_operand" "=v")
- (fma:V2DF (match_operand:V2DF 1 "register_operand" "v")
+ (fma:V2DF (match_operand:V2DF 1 "register_operand" "%v")
(match_operand:V2DF 2 "register_operand" "v")
(neg:V2DF (match_operand:V2DF 3 "register_operand" "v"))))]
"TARGET_VX"
@@ -933,7 +952,7 @@
; Emulate with compare + select
(define_insn_and_split "smaxv2df3"
[(set (match_operand:V2DF 0 "register_operand" "=v")
- (smax:V2DF (match_operand:V2DF 1 "register_operand" "v")
+ (smax:V2DF (match_operand:V2DF 1 "register_operand" "%v")
(match_operand:V2DF 2 "register_operand" "v")))]
"TARGET_VX"
"#"
@@ -953,7 +972,7 @@
; Emulate with compare + select
(define_insn_and_split "sminv2df3"
[(set (match_operand:V2DF 0 "register_operand" "=v")
- (smin:V2DF (match_operand:V2DF 1 "register_operand" "v")
+ (smin:V2DF (match_operand:V2DF 1 "register_operand" "%v")
(match_operand:V2DF 2 "register_operand" "v")))]
"TARGET_VX"
"#"
diff --git a/gcc/config/s390/vx-builtins.md b/gcc/config/s390/vx-builtins.md
index 81a2d07..c4a837b 100644
--- a/gcc/config/s390/vx-builtins.md
+++ b/gcc/config/s390/vx-builtins.md
@@ -28,12 +28,12 @@
; The element type of the vector with floating point modes translated
; to int modes of the same size.
-(define_mode_attr non_vec_int[(V2QI "QI") (V4QI "QI") (V8QI "QI") (V16QI "QI")
- (V2HI "HI") (V4HI "HI") (V8HI "HI")
- (V2SI "SI") (V4SI "SI")
- (V2DI "DI")
- (V2SF "SI") (V4SF "SI")
- (V2DF "DI")])
+(define_mode_attr non_vec_int[(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")
+ (V1SF "SI") (V2SF "SI") (V4SF "SI")
+ (V1DF "DI") (V2DF "DI")])
; Condition code modes generated by int comparisons
(define_mode_iterator VICMP [CCVEQ CCVH CCVHU])
@@ -150,7 +150,7 @@
(define_expand "vec_insert<mode>"
[(set (match_operand:V_HW 0 "register_operand" "")
(unspec:V_HW [(match_operand:<non_vec> 2 "register_operand" "")
- (match_operand:SI 3 "shift_count_or_setmem_operand" "")
+ (match_operand:SI 3 "nonmemory_operand" "")
(match_operand:V_HW 1 "register_operand" "")]
UNSPEC_VEC_SET))]
"TARGET_VX"
@@ -160,7 +160,7 @@
(define_expand "vec_promote<mode>"
[(set (match_operand:V_HW 0 "register_operand" "")
(unspec:V_HW [(match_operand:<non_vec> 1 "register_operand" "")
- (match_operand:SI 2 "shift_count_or_setmem_operand" "")
+ (match_operand:SI 2 "nonmemory_operand" "")
(match_dup 0)]
UNSPEC_VEC_SET))]
"TARGET_VX"
@@ -575,7 +575,7 @@
(define_insn "vec_addc<mode>"
[(set (match_operand:VI_HW 0 "register_operand" "=v")
- (unspec:VI_HW [(match_operand:VI_HW 1 "register_operand" "v")
+ (unspec:VI_HW [(match_operand:VI_HW 1 "register_operand" "%v")
(match_operand:VI_HW 2 "register_operand" "v")]
UNSPEC_VEC_ADDC))]
"TARGET_VX"
@@ -584,7 +584,7 @@
(define_insn "vec_addc_u128"
[(set (match_operand:V16QI 0 "register_operand" "=v")
- (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v")
+ (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "%v")
(match_operand:V16QI 2 "register_operand" "v")]
UNSPEC_VEC_ADDC_U128))]
"TARGET_VX"
@@ -596,7 +596,7 @@
(define_insn "vec_adde_u128"
[(set (match_operand:V16QI 0 "register_operand" "=v")
- (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v")
+ (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "%v")
(match_operand:V16QI 2 "register_operand" "v")
(match_operand:V16QI 3 "register_operand" "v")]
UNSPEC_VEC_ADDE_U128))]
@@ -609,7 +609,7 @@
(define_insn "vec_addec_u128"
[(set (match_operand:V16QI 0 "register_operand" "=v")
- (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v")
+ (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "%v")
(match_operand:V16QI 2 "register_operand" "v")
(match_operand:V16QI 3 "register_operand" "v")]
UNSPEC_VEC_ADDEC_U128))]
@@ -672,7 +672,7 @@
(define_insn "vec_avg<mode>"
[(set (match_operand:VI_HW 0 "register_operand" "=v")
- (unspec:VI_HW [(match_operand:VI_HW 1 "register_operand" "v")
+ (unspec:VI_HW [(match_operand:VI_HW 1 "register_operand" "%v")
(match_operand:VI_HW 2 "register_operand" "v")]
UNSPEC_VEC_AVG))]
"TARGET_VX"
@@ -683,7 +683,7 @@
(define_insn "vec_avgu<mode>"
[(set (match_operand:VI_HW 0 "register_operand" "=v")
- (unspec:VI_HW [(match_operand:VI_HW 1 "register_operand" "v")
+ (unspec:VI_HW [(match_operand:VI_HW 1 "register_operand" "%v")
(match_operand:VI_HW 2 "register_operand" "v")]
UNSPEC_VEC_AVGU))]
"TARGET_VX"
@@ -871,9 +871,9 @@
; vmalb, vmalh, vmalf, vmalg
(define_insn "vec_vmal<mode>"
[(set (match_operand:VI_HW_QHS 0 "register_operand" "=v")
- (unspec:VI_HW_QHS [(match_operand:VI_HW_QHS 1 "register_operand" "v")
- (match_operand:VI_HW_QHS 2 "register_operand" "v")
- (match_operand:VI_HW_QHS 3 "register_operand" "v")]
+ (unspec:VI_HW_QHS [(match_operand:VI_HW_QHS 1 "register_operand" "%v")
+ (match_operand:VI_HW_QHS 2 "register_operand" "v")
+ (match_operand:VI_HW_QHS 3 "register_operand" "v")]
UNSPEC_VEC_VMAL))]
"TARGET_VX"
"vmal<bhfgq><w>\t%v0,%v1,%v2,%v3"
@@ -884,9 +884,9 @@
; vmahb; vmahh, vmahf, vmahg
(define_insn "vec_vmah<mode>"
[(set (match_operand:VI_HW_QHS 0 "register_operand" "=v")
- (unspec:VI_HW_QHS [(match_operand:VI_HW_QHS 1 "register_operand" "v")
- (match_operand:VI_HW_QHS 2 "register_operand" "v")
- (match_operand:VI_HW_QHS 3 "register_operand" "v")]
+ (unspec:VI_HW_QHS [(match_operand:VI_HW_QHS 1 "register_operand" "%v")
+ (match_operand:VI_HW_QHS 2 "register_operand" "v")
+ (match_operand:VI_HW_QHS 3 "register_operand" "v")]
UNSPEC_VEC_VMAH))]
"TARGET_VX"
"vmah<bhfgq>\t%v0,%v1,%v2,%v3"
@@ -895,9 +895,9 @@
; vmalhb; vmalhh, vmalhf, vmalhg
(define_insn "vec_vmalh<mode>"
[(set (match_operand:VI_HW_QHS 0 "register_operand" "=v")
- (unspec:VI_HW_QHS [(match_operand:VI_HW_QHS 1 "register_operand" "v")
- (match_operand:VI_HW_QHS 2 "register_operand" "v")
- (match_operand:VI_HW_QHS 3 "register_operand" "v")]
+ (unspec:VI_HW_QHS [(match_operand:VI_HW_QHS 1 "register_operand" "%v")
+ (match_operand:VI_HW_QHS 2 "register_operand" "v")
+ (match_operand:VI_HW_QHS 3 "register_operand" "v")]
UNSPEC_VEC_VMALH))]
"TARGET_VX"
"vmalh<bhfgq>\t%v0,%v1,%v2,%v3"
@@ -908,8 +908,8 @@
; vmaeb; vmaeh, vmaef, vmaeg
(define_insn "vec_vmae<mode>"
[(set (match_operand:<vec_double> 0 "register_operand" "=v")
- (unspec:<vec_double> [(match_operand:VI_HW_QHS 1 "register_operand" "v")
- (match_operand:VI_HW_QHS 2 "register_operand" "v")
+ (unspec:<vec_double> [(match_operand:VI_HW_QHS 1 "register_operand" "%v")
+ (match_operand:VI_HW_QHS 2 "register_operand" "v")
(match_operand:<vec_double> 3 "register_operand" "v")]
UNSPEC_VEC_VMAE))]
"TARGET_VX"
@@ -919,7 +919,7 @@
; vmaleb; vmaleh, vmalef, vmaleg
(define_insn "vec_vmale<mode>"
[(set (match_operand:<vec_double> 0 "register_operand" "=v")
- (unspec:<vec_double> [(match_operand:VI_HW_QHS 1 "register_operand" "v")
+ (unspec:<vec_double> [(match_operand:VI_HW_QHS 1 "register_operand" "%v")
(match_operand:VI_HW_QHS 2 "register_operand" "v")
(match_operand:<vec_double> 3 "register_operand" "v")]
UNSPEC_VEC_VMALE))]
@@ -932,7 +932,7 @@
; vmaob; vmaoh, vmaof, vmaog
(define_insn "vec_vmao<mode>"
[(set (match_operand:<vec_double> 0 "register_operand" "=v")
- (unspec:<vec_double> [(match_operand:VI_HW_QHS 1 "register_operand" "v")
+ (unspec:<vec_double> [(match_operand:VI_HW_QHS 1 "register_operand" "%v")
(match_operand:VI_HW_QHS 2 "register_operand" "v")
(match_operand:<vec_double> 3 "register_operand" "v")]
UNSPEC_VEC_VMAO))]
@@ -959,7 +959,7 @@
; vmhb, vmhh, vmhf
(define_insn "vec_smulh<mode>"
[(set (match_operand:VI_HW_QHS 0 "register_operand" "=v")
- (unspec:VI_HW_QHS [(match_operand:VI_HW_QHS 1 "register_operand" "v")
+ (unspec:VI_HW_QHS [(match_operand:VI_HW_QHS 1 "register_operand" "%v")
(match_operand:VI_HW_QHS 2 "register_operand" "v")]
UNSPEC_VEC_SMULT_HI))]
"TARGET_VX"
@@ -969,7 +969,7 @@
; vmlhb, vmlhh, vmlhf
(define_insn "vec_umulh<mode>"
[(set (match_operand:VI_HW_QHS 0 "register_operand" "=v")
- (unspec:VI_HW_QHS [(match_operand:VI_HW_QHS 1 "register_operand" "v")
+ (unspec:VI_HW_QHS [(match_operand:VI_HW_QHS 1 "register_operand" "%v")
(match_operand:VI_HW_QHS 2 "register_operand" "v")]
UNSPEC_VEC_UMULT_HI))]
"TARGET_VX"
@@ -987,7 +987,7 @@
(define_insn "vec_nor<mode>3"
[(set (match_operand:VT_HW 0 "register_operand" "=v")
- (not:VT_HW (ior:VT_HW (match_operand:VT_HW 1 "register_operand" "v")
+ (not:VT_HW (ior:VT_HW (match_operand:VT_HW 1 "register_operand" "%v")
(match_operand:VT_HW 2 "register_operand" "v"))))]
"TARGET_VX"
"vno\t%v0,%v1,%v2"
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index 0b18ce5..8c8fe3c 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -3259,7 +3259,8 @@ sh_lshrsi_clobbers_t_reg_p (rtx shift_amount)
{
gcc_assert (CONST_INT_P (shift_amount));
- const int shift_amount_i = INTVAL (shift_amount) & 31;
+ /* For right shifts the constant might be negative. */
+ const int shift_amount_i = std::abs (INTVAL (shift_amount)) & 31;
/* Special case for shift count of 31: use shll-movt sequence. */
if (shift_amount_i == 31)
@@ -3278,7 +3279,8 @@ sh_dynamicalize_shift_p (rtx count)
{
gcc_assert (CONST_INT_P (count));
- const int shift_amount_i = INTVAL (count) & 31;
+ /* For right shifts the constant might be negative. */
+ const int shift_amount_i = std::abs (INTVAL (count)) & 31;
int insn_count;
/* For left and right shifts, there are shorter 2 insn sequences for
diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md
index 9fa835b..0bb0f2b 100644
--- a/gcc/config/sh/sh.md
+++ b/gcc/config/sh/sh.md
@@ -2242,14 +2242,23 @@
[(set_attr "type" "arith")])
;; Old reload might generate add insns directly (not through the expander) for
-;; the memory address of complex insns like atomic insns when reloading.
+;; address register calculations when reloading, in which case it won't try
+;; the addsi_scr pattern. Because reload will sometimes try to validate
+;; the generated insns and their constraints, this pattern must be
+;; recognizable during and after reload. However, when reload generates
+;; address register calculations for the stack pointer, we don't allow this
+;; pattern. This will make reload prefer using indexed @(reg + reg) address
+;; modes when the displacement of a @(disp + reg) doesn't fit.
(define_insn_and_split "*addsi3"
[(set (match_operand:SI 0 "arith_reg_dest" "=r")
(plus:SI (match_operand:SI 1 "arith_reg_operand" "r")
(match_operand:SI 2 "arith_or_int_operand" "rn")))]
"TARGET_SH1 && !sh_lra_p ()
- && reload_completed
- && !reg_overlap_mentioned_p (operands[0], operands[1])"
+ && (reload_completed || reload_in_progress)
+ && !reg_overlap_mentioned_p (operands[0], operands[1])
+ && (!reload_in_progress
+ || ((!REG_P (operands[1]) || REGNO (operands[1]) != SP_REG)
+ && (!REG_P (operands[2]) || REGNO (operands[2]) != SP_REG)))"
"#"
"&& 1"
[(set (match_dup 0) (plus:SI (match_dup 0) (match_dup 2)))]
@@ -5011,7 +5020,10 @@ label:
}
if (TARGET_DYNSHIFT
&& CONST_INT_P (operands[2]) && sh_dynamicalize_shift_p (operands[2]))
- operands[2] = force_reg (SImode, operands[2]);
+ {
+ /* Don't force the constant into a reg yet. Some other optimizations
+ might not see through the reg that holds the shift count. */
+ }
/* If the ashlsi3_* insn is going to clobber the T_REG it must be
expanded here. */
@@ -5567,9 +5579,12 @@ label:
if (TARGET_DYNSHIFT
&& CONST_INT_P (operands[2]) && sh_dynamicalize_shift_p (operands[2]))
{
- rtx neg_count = force_reg (SImode,
- gen_int_mode (- INTVAL (operands[2]), SImode));
- emit_insn (gen_lshrsi3_d (operands[0], operands[1], neg_count));
+ /* Don't force the constant into a reg yet. Some other optimizations
+ might not see through the reg that holds the shift count. */
+ if (sh_lshrsi_clobbers_t_reg_p (operands[2]))
+ emit_insn (gen_lshrsi3_n_clobbers_t (operands[0], operands[1], operands[2]));
+ else
+ emit_insn (gen_lshrsi3_n (operands[0], operands[1], operands[2]));
DONE;
}
@@ -5621,6 +5636,10 @@ label:
&& ! sh_lshrsi_clobbers_t_reg_p (operands[2])"
[(const_int 0)]
{
+ /* The shift count const_int is a negative value for all dynamic
+ right shift insns. */
+ operands[2] = GEN_INT (- INTVAL (operands[2]));
+
if (satisfies_constraint_P27 (operands[2]))
{
/* This will not be done for a shift amount of 1, because it would
@@ -5679,8 +5698,7 @@ label:
{
/* If this pattern was picked and dynamic shifts are supported, switch
to dynamic shift pattern before reload. */
- operands[2] = force_reg (SImode,
- gen_int_mode (- INTVAL (operands[2]), SImode));
+ operands[2] = GEN_INT (- INTVAL (operands[2]));
emit_insn (gen_lshrsi3_d (operands[0], operands[1], operands[2]));
}
else
@@ -5711,8 +5729,7 @@ label:
{
/* If this pattern was picked and dynamic shifts are supported, switch
to dynamic shift pattern before reload. */
- operands[2] = force_reg (SImode,
- gen_int_mode (- INTVAL (operands[2]), SImode));
+ operands[2] = GEN_INT (- INTVAL (operands[2]));
emit_insn (gen_lshrsi3_d (operands[0], operands[1], operands[2]));
}
else
diff --git a/gcc/config/sol2.c b/gcc/config/sol2.c
index 560a07b..47b41fd 100644
--- a/gcc/config/sol2.c
+++ b/gcc/config/sol2.c
@@ -142,8 +142,11 @@ solaris_assemble_visibility (tree decl, int vis ATTRIBUTE_UNUSED)
};
const char *name, *type;
+ tree id = DECL_ASSEMBLER_NAME (decl);
- name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
+ while (IDENTIFIER_TRANSPARENT_ALIAS (id))
+ id = TREE_CHAIN (id);
+ name = IDENTIFIER_POINTER (id);
type = visibility_types[vis];
fprintf (asm_out_file, "\t.%s\t", type);
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
index 71609f2..082af3c 100644
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -518,7 +518,6 @@ int sparc_indent_opcode = 0;
static void sparc_option_override (void);
static void sparc_init_modes (void);
-static void scan_record_type (const_tree, int *, int *, int *);
static int function_arg_slotno (const CUMULATIVE_ARGS *, machine_mode,
const_tree, bool, bool, int *, int *);
@@ -4918,13 +4917,18 @@ sparc_compute_frame_size (HOST_WIDE_INT size, int leaf_function)
/* Calculate space needed for global registers. */
if (TARGET_ARCH64)
- for (i = 0; i < 8; i++)
- if (save_global_or_fp_reg_p (i, 0))
- n_global_fp_regs += 2;
+ {
+ for (i = 0; i < 8; i++)
+ if (save_global_or_fp_reg_p (i, 0))
+ n_global_fp_regs += 2;
+ }
else
- for (i = 0; i < 8; i += 2)
- if (save_global_or_fp_reg_p (i, 0) || save_global_or_fp_reg_p (i + 1, 0))
- n_global_fp_regs += 2;
+ {
+ for (i = 0; i < 8; i += 2)
+ if (save_global_or_fp_reg_p (i, 0)
+ || save_global_or_fp_reg_p (i + 1, 0))
+ n_global_fp_regs += 2;
+ }
/* In the flat window model, find out which local and in registers need to
be saved. We don't reserve space in the current frame for them as they
@@ -6086,8 +6090,8 @@ conventions. */
#define SPARC_INT_ARG_MAX 6
/* Maximum number of fp regs for args. */
#define SPARC_FP_ARG_MAX 16
-
-#define ROUND_ADVANCE(SIZE) (((SIZE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
+/* Number of words (partially) occupied for a given size in units. */
+#define CEIL_NWORDS(SIZE) CEIL((SIZE), UNITS_PER_WORD)
/* Handle the INIT_CUMULATIVE_ARGS macro.
Initialize a variable CUM of type CUMULATIVE_ARGS
@@ -6095,25 +6099,20 @@ conventions. */
For a library call, FNTYPE is 0. */
void
-init_cumulative_args (struct sparc_args *cum, tree fntype,
- rtx libname ATTRIBUTE_UNUSED,
- tree fndecl ATTRIBUTE_UNUSED)
+init_cumulative_args (struct sparc_args *cum, tree fntype, rtx, tree)
{
cum->words = 0;
cum->prototype_p = fntype && prototype_p (fntype);
- cum->libcall_p = fntype == 0;
+ cum->libcall_p = !fntype;
}
/* Handle promotion of pointer and integer arguments. */
static machine_mode
-sparc_promote_function_mode (const_tree type,
- machine_mode mode,
- int *punsignedp,
- const_tree fntype ATTRIBUTE_UNUSED,
- int for_return ATTRIBUTE_UNUSED)
+sparc_promote_function_mode (const_tree type, machine_mode mode,
+ int *punsignedp, const_tree, int)
{
- if (type != NULL_TREE && POINTER_TYPE_P (type))
+ if (type && POINTER_TYPE_P (type))
{
*punsignedp = POINTERS_EXTEND_UNSIGNED;
return Pmode;
@@ -6135,36 +6134,75 @@ sparc_strict_argument_naming (cumulative_args_t ca ATTRIBUTE_UNUSED)
return TARGET_ARCH64 ? true : false;
}
-/* Scan the record type TYPE and return the following predicates:
- - INTREGS_P: the record contains at least one field or sub-field
- that is eligible for promotion in integer registers.
- - FP_REGS_P: the record contains at least one field or sub-field
- that is eligible for promotion in floating-point registers.
- - PACKED_P: the record contains at least one field that is packed. */
+/* Traverse the record TYPE recursively and call FUNC on its fields.
+ NAMED is true if this is for a named parameter. DATA is passed
+ to FUNC for each field. OFFSET is the starting position and
+ PACKED is true if we are inside a packed record. */
+template <typename T, void Func (const_tree, HOST_WIDE_INT, bool, T*)>
static void
-scan_record_type (const_tree type, int *intregs_p, int *fpregs_p,
- int *packed_p)
+traverse_record_type (const_tree type, bool named, T *data,
+ HOST_WIDE_INT offset = 0, bool packed = false)
{
- for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
- {
- if (TREE_CODE (field) == FIELD_DECL)
+ /* The ABI obviously doesn't specify how packed structures are passed.
+ These are passed in integer regs if possible, otherwise memory. */
+ if (!packed)
+ for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
+ if (TREE_CODE (field) == FIELD_DECL && DECL_PACKED (field))
{
- tree field_type = TREE_TYPE (field);
+ packed = true;
+ break;
+ }
- if (TREE_CODE (field_type) == RECORD_TYPE)
- scan_record_type (field_type, intregs_p, fpregs_p, packed_p);
- else if ((FLOAT_TYPE_P (field_type)
- || TREE_CODE (field_type) == VECTOR_TYPE)
- && TARGET_FPU)
- *fpregs_p = 1;
- else
- *intregs_p = 1;
+ /* Walk the real fields, but skip those with no size or a zero size.
+ ??? Fields with variable offset are handled as having zero offset. */
+ for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
+ if (TREE_CODE (field) == FIELD_DECL)
+ {
+ if (!DECL_SIZE (field) || integer_zerop (DECL_SIZE (field)))
+ continue;
- if (DECL_PACKED (field))
- *packed_p = 1;
- }
+ HOST_WIDE_INT bitpos = offset;
+ if (TREE_CODE (DECL_FIELD_OFFSET (field)) == INTEGER_CST)
+ bitpos += int_bit_position (field);
+
+ tree field_type = TREE_TYPE (field);
+ if (TREE_CODE (field_type) == RECORD_TYPE)
+ traverse_record_type<T, Func> (field_type, named, data, bitpos,
+ packed);
+ else
+ {
+ const bool fp_type
+ = FLOAT_TYPE_P (field_type) || VECTOR_TYPE_P (field_type);
+ Func (field, bitpos, fp_type && named && !packed && TARGET_FPU,
+ data);
+ }
+ }
+}
+
+/* Handle recursive register classifying for structure layout. */
+
+typedef struct
+{
+ bool int_regs; /* true if field eligible to int registers. */
+ bool fp_regs; /* true if field eligible to FP registers. */
+ bool fp_regs_in_first_word; /* true if such field in first word. */
+} classify_data_t;
+
+/* A subroutine of function_arg_slotno. Classify the field. */
+
+inline void
+classify_registers (const_tree, HOST_WIDE_INT bitpos, bool fp,
+ classify_data_t *data)
+{
+ if (fp)
+ {
+ data->fp_regs = true;
+ if (bitpos < BITS_PER_WORD)
+ data->fp_regs_in_first_word = true;
}
+ else
+ data->int_regs = true;
}
/* Compute the slot number to pass an argument in.
@@ -6178,16 +6216,16 @@ scan_record_type (const_tree type, int *intregs_p, int *fpregs_p,
not be available.
NAMED is nonzero if this argument is a named parameter
(otherwise it is an extra parameter matching an ellipsis).
- INCOMING_P is zero for FUNCTION_ARG, nonzero for FUNCTION_INCOMING_ARG.
+ INCOMING is zero for FUNCTION_ARG, nonzero for FUNCTION_INCOMING_ARG.
*PREGNO records the register number to use if scalar type.
*PPADDING records the amount of padding needed in words. */
static int
function_arg_slotno (const struct sparc_args *cum, machine_mode mode,
- const_tree type, bool named, bool incoming_p,
+ const_tree type, bool named, bool incoming,
int *pregno, int *ppadding)
{
- int regbase = (incoming_p
+ int regbase = (incoming
? SPARC_INCOMING_INT_ARG_FIRST
: SPARC_OUTGOING_INT_ARG_FIRST);
int slotno = cum->words;
@@ -6243,8 +6281,10 @@ function_arg_slotno (const struct sparc_args *cum, machine_mode mode,
case MODE_VECTOR_INT:
if (TARGET_ARCH64 && TARGET_FPU && named)
{
+ /* If all arg slots are filled, then must pass on stack. */
if (slotno >= SPARC_FP_ARG_MAX)
return -1;
+
regno = SPARC_FP_ARG_FIRST + slotno * 2;
/* Arguments filling only one single FP register are
right-justified in the outer double FP register. */
@@ -6256,8 +6296,10 @@ function_arg_slotno (const struct sparc_args *cum, machine_mode mode,
case MODE_INT:
case MODE_COMPLEX_INT:
+ /* If all arg slots are filled, then must pass on stack. */
if (slotno >= SPARC_INT_ARG_MAX)
return -1;
+
regno = regbase + slotno;
break;
@@ -6270,42 +6312,43 @@ function_arg_slotno (const struct sparc_args *cum, machine_mode mode,
if (TARGET_ARCH32
|| !type
- || (TREE_CODE (type) != VECTOR_TYPE
- && TREE_CODE (type) != RECORD_TYPE))
+ || (TREE_CODE (type) != RECORD_TYPE
+ && TREE_CODE (type) != VECTOR_TYPE))
{
+ /* If all arg slots are filled, then must pass on stack. */
if (slotno >= SPARC_INT_ARG_MAX)
return -1;
+
regno = regbase + slotno;
}
else /* TARGET_ARCH64 && type */
{
- int intregs_p = 0, fpregs_p = 0, packed_p = 0;
-
- /* First see what kinds of registers we would need. */
- if (TREE_CODE (type) == VECTOR_TYPE)
- fpregs_p = 1;
- else
- scan_record_type (type, &intregs_p, &fpregs_p, &packed_p);
-
- /* The ABI obviously doesn't specify how packed structures
- are passed. These are defined to be passed in int regs
- if possible, otherwise memory. */
- if (packed_p || !named)
- fpregs_p = 0, intregs_p = 1;
-
/* If all arg slots are filled, then must pass on stack. */
- if (fpregs_p && slotno >= SPARC_FP_ARG_MAX)
+ if (slotno >= SPARC_FP_ARG_MAX)
return -1;
- /* If there are only int args and all int arg slots are filled,
- then must pass on stack. */
- if (!fpregs_p && intregs_p && slotno >= SPARC_INT_ARG_MAX)
- return -1;
+ if (TREE_CODE (type) == RECORD_TYPE)
+ {
+ classify_data_t data = { false, false, false };
+ traverse_record_type<classify_data_t, classify_registers>
+ (type, named, &data);
+
+ /* If all slots are filled except for the last one, but there
+ is no FP field in the first word, then must pass on stack. */
+ if (data.fp_regs
+ && !data.fp_regs_in_first_word
+ && slotno >= SPARC_FP_ARG_MAX - 1)
+ return -1;
+
+ /* If there are only int args and all int slots are filled,
+ then must pass on stack. */
+ if (!data.fp_regs
+ && data.int_regs
+ && slotno >= SPARC_INT_ARG_MAX)
+ return -1;
+ }
- /* Note that even if all int arg slots are filled, fp members may
- still be passed in regs if such regs are available.
- *PREGNO isn't set because there may be more than one, it's up
- to the caller to compute them. */
+ /* PREGNO isn't set since both int and FP regs can be used. */
return slotno;
}
break;
@@ -6318,277 +6361,211 @@ function_arg_slotno (const struct sparc_args *cum, machine_mode mode,
return slotno;
}
-/* Handle recursive register counting for structure field layout. */
+/* Handle recursive register counting/assigning for structure layout. */
-struct function_arg_record_value_parms
+typedef struct
{
- rtx ret; /* return expression being built. */
int slotno; /* slot number of the argument. */
- int named; /* whether the argument is named. */
int regbase; /* regno of the base register. */
- int stack; /* 1 if part of the argument is on the stack. */
int intoffset; /* offset of the first pending integer field. */
- unsigned int nregs; /* number of words passed in registers. */
-};
-
-static void function_arg_record_value_3
- (HOST_WIDE_INT, struct function_arg_record_value_parms *);
-static void function_arg_record_value_2
- (const_tree, HOST_WIDE_INT, struct function_arg_record_value_parms *, bool);
-static void function_arg_record_value_1
- (const_tree, HOST_WIDE_INT, struct function_arg_record_value_parms *, bool);
-static rtx function_arg_record_value (const_tree, machine_mode, int, int, int);
-static rtx function_arg_union_value (int, machine_mode, int, int);
+ int nregs; /* number of words passed in registers. */
+ bool stack; /* true if part of the argument is on the stack. */
+ rtx ret; /* return expression being built. */
+} assign_data_t;
-/* A subroutine of function_arg_record_value. Traverse the structure
- recursively and determine how many registers will be required. */
+/* A subroutine of function_arg_record_value. Compute the number of integer
+ registers to be assigned between PARMS->intoffset and BITPOS. Return
+ true if at least one integer register is assigned or false otherwise. */
-static void
-function_arg_record_value_1 (const_tree type, HOST_WIDE_INT startbitpos,
- struct function_arg_record_value_parms *parms,
- bool packed_p)
+static bool
+compute_int_layout (HOST_WIDE_INT bitpos, assign_data_t *data, int *pnregs)
{
- tree field;
+ if (data->intoffset < 0)
+ return false;
- /* We need to compute how many registers are needed so we can
- allocate the PARALLEL but before we can do that we need to know
- whether there are any packed fields. The ABI obviously doesn't
- specify how structures are passed in this case, so they are
- defined to be passed in int regs if possible, otherwise memory,
- regardless of whether there are fp values present. */
+ const int intoffset = data->intoffset;
+ data->intoffset = -1;
- if (! packed_p)
- for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
- {
- if (TREE_CODE (field) == FIELD_DECL && DECL_PACKED (field))
- {
- packed_p = true;
- break;
- }
- }
+ const int this_slotno = data->slotno + intoffset / BITS_PER_WORD;
+ const unsigned int startbit = ROUND_DOWN (intoffset, BITS_PER_WORD);
+ const unsigned int endbit = ROUND_UP (bitpos, BITS_PER_WORD);
+ int nregs = (endbit - startbit) / BITS_PER_WORD;
- /* Compute how many registers we need. */
- for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
+ if (nregs > 0 && nregs > SPARC_INT_ARG_MAX - this_slotno)
{
- if (TREE_CODE (field) == FIELD_DECL)
- {
- HOST_WIDE_INT bitpos = startbitpos;
+ nregs = SPARC_INT_ARG_MAX - this_slotno;
- if (DECL_SIZE (field) != 0)
- {
- if (integer_zerop (DECL_SIZE (field)))
- continue;
+ /* We need to pass this field (partly) on the stack. */
+ data->stack = 1;
+ }
- if (tree_fits_uhwi_p (bit_position (field)))
- bitpos += int_bit_position (field);
- }
+ if (nregs <= 0)
+ return false;
- /* ??? FIXME: else assume zero offset. */
-
- if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE)
- function_arg_record_value_1 (TREE_TYPE (field),
- bitpos,
- parms,
- packed_p);
- else if ((FLOAT_TYPE_P (TREE_TYPE (field))
- || TREE_CODE (TREE_TYPE (field)) == VECTOR_TYPE)
- && TARGET_FPU
- && parms->named
- && ! packed_p)
- {
- if (parms->intoffset != -1)
- {
- unsigned int startbit, endbit;
- int intslots, this_slotno;
+ *pnregs = nregs;
+ return true;
+}
- startbit = ROUND_DOWN (parms->intoffset, BITS_PER_WORD);
- endbit = ROUND_UP (bitpos, BITS_PER_WORD);
+/* A subroutine of function_arg_record_value. Compute the number and the mode
+ of the FP registers to be assigned for FIELD. Return true if at least one
+ FP register is assigned or false otherwise. */
- intslots = (endbit - startbit) / BITS_PER_WORD;
- this_slotno = parms->slotno + parms->intoffset
- / BITS_PER_WORD;
+static bool
+compute_fp_layout (const_tree field, HOST_WIDE_INT bitpos,
+ assign_data_t *data,
+ int *pnregs, machine_mode *pmode)
+{
+ const int this_slotno = data->slotno + bitpos / BITS_PER_WORD;
+ machine_mode mode = DECL_MODE (field);
+ int nregs, nslots;
- if (intslots > 0 && intslots > SPARC_INT_ARG_MAX - this_slotno)
- {
- intslots = MAX (0, SPARC_INT_ARG_MAX - this_slotno);
- /* We need to pass this field on the stack. */
- parms->stack = 1;
- }
+ /* Slots are counted as words while regs are counted as having the size of
+ the (inner) mode. */
+ if (TREE_CODE (TREE_TYPE (field)) == VECTOR_TYPE && mode == BLKmode)
+ {
+ mode = TYPE_MODE (TREE_TYPE (TREE_TYPE (field)));
+ nregs = TYPE_VECTOR_SUBPARTS (TREE_TYPE (field));
+ }
+ else if (TREE_CODE (TREE_TYPE (field)) == COMPLEX_TYPE)
+ {
+ mode = TYPE_MODE (TREE_TYPE (TREE_TYPE (field)));
+ nregs = 2;
+ }
+ else
+ nregs = 1;
- parms->nregs += intslots;
- parms->intoffset = -1;
- }
+ nslots = CEIL_NWORDS (nregs * GET_MODE_SIZE (mode));
- /* There's no need to check this_slotno < SPARC_FP_ARG MAX.
- If it wasn't true we wouldn't be here. */
- if (TREE_CODE (TREE_TYPE (field)) == VECTOR_TYPE
- && DECL_MODE (field) == BLKmode)
- parms->nregs += TYPE_VECTOR_SUBPARTS (TREE_TYPE (field));
- else if (TREE_CODE (TREE_TYPE (field)) == COMPLEX_TYPE)
- parms->nregs += 2;
- else
- parms->nregs += 1;
- }
- else
- {
- if (parms->intoffset == -1)
- parms->intoffset = bitpos;
- }
- }
+ if (nslots > SPARC_FP_ARG_MAX - this_slotno)
+ {
+ nslots = SPARC_FP_ARG_MAX - this_slotno;
+ nregs = (nslots * UNITS_PER_WORD) / GET_MODE_SIZE (mode);
+
+ /* We need to pass this field (partly) on the stack. */
+ data->stack = 1;
+
+ if (nregs <= 0)
+ return false;
}
+
+ *pnregs = nregs;
+ *pmode = mode;
+ return true;
}
-/* A subroutine of function_arg_record_value. Assign the bits of the
- structure between parms->intoffset and bitpos to integer registers. */
+/* A subroutine of function_arg_record_value. Count the number of registers
+ to be assigned for FIELD and between PARMS->intoffset and BITPOS. */
-static void
-function_arg_record_value_3 (HOST_WIDE_INT bitpos,
- struct function_arg_record_value_parms *parms)
+inline void
+count_registers (const_tree field, HOST_WIDE_INT bitpos, bool fp,
+ assign_data_t *data)
{
- machine_mode mode;
- unsigned int regno;
- unsigned int startbit, endbit;
- int this_slotno, intslots, intoffset;
- rtx reg;
+ if (fp)
+ {
+ int nregs;
+ machine_mode mode;
- if (parms->intoffset == -1)
- return;
+ if (compute_int_layout (bitpos, data, &nregs))
+ data->nregs += nregs;
- intoffset = parms->intoffset;
- parms->intoffset = -1;
+ if (compute_fp_layout (field, bitpos, data, &nregs, &mode))
+ data->nregs += nregs;
+ }
+ else
+ {
+ if (data->intoffset < 0)
+ data->intoffset = bitpos;
+ }
+}
+
+/* A subroutine of function_arg_record_value. Assign the bits of the
+ structure between PARMS->intoffset and BITPOS to integer registers. */
- startbit = ROUND_DOWN (intoffset, BITS_PER_WORD);
- endbit = ROUND_UP (bitpos, BITS_PER_WORD);
- intslots = (endbit - startbit) / BITS_PER_WORD;
- this_slotno = parms->slotno + intoffset / BITS_PER_WORD;
+static void
+assign_int_registers (HOST_WIDE_INT bitpos, assign_data_t *data)
+{
+ int intoffset = data->intoffset;
+ machine_mode mode;
+ int nregs;
- intslots = MIN (intslots, SPARC_INT_ARG_MAX - this_slotno);
- if (intslots <= 0)
+ if (!compute_int_layout (bitpos, data, &nregs))
return;
/* If this is the trailing part of a word, only load that much into
the register. Otherwise load the whole register. Note that in
the latter case we may pick up unwanted bits. It's not a problem
at the moment but may wish to revisit. */
-
if (intoffset % BITS_PER_WORD != 0)
mode = smallest_mode_for_size (BITS_PER_WORD - intoffset % BITS_PER_WORD,
MODE_INT);
else
mode = word_mode;
+ const int this_slotno = data->slotno + intoffset / BITS_PER_WORD;
+ unsigned int regno = data->regbase + this_slotno;
intoffset /= BITS_PER_UNIT;
+
do
{
- regno = parms->regbase + this_slotno;
- reg = gen_rtx_REG (mode, regno);
- XVECEXP (parms->ret, 0, parms->stack + parms->nregs)
+ rtx reg = gen_rtx_REG (mode, regno);
+ XVECEXP (data->ret, 0, data->stack + data->nregs)
= gen_rtx_EXPR_LIST (VOIDmode, reg, GEN_INT (intoffset));
-
- this_slotno += 1;
- intoffset = (intoffset | (UNITS_PER_WORD-1)) + 1;
+ data->nregs += 1;
mode = word_mode;
- parms->nregs += 1;
- intslots -= 1;
+ regno += 1;
+ intoffset = (intoffset | (UNITS_PER_WORD - 1)) + 1;
}
- while (intslots > 0);
+ while (--nregs > 0);
}
-/* A subroutine of function_arg_record_value. Traverse the structure
- recursively and assign bits to floating point registers. Track which
- bits in between need integer registers; invoke function_arg_record_value_3
- to make that happen. */
+/* A subroutine of function_arg_record_value. Assign FIELD at position
+ BITPOS to FP registers. */
static void
-function_arg_record_value_2 (const_tree type, HOST_WIDE_INT startbitpos,
- struct function_arg_record_value_parms *parms,
- bool packed_p)
+assign_fp_registers (const_tree field, HOST_WIDE_INT bitpos,
+ assign_data_t *data)
{
- tree field;
+ int nregs;
+ machine_mode mode;
- if (! packed_p)
- for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
- {
- if (TREE_CODE (field) == FIELD_DECL && DECL_PACKED (field))
- {
- packed_p = true;
- break;
- }
- }
+ if (!compute_fp_layout (field, bitpos, data, &nregs, &mode))
+ return;
- for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
+ const int this_slotno = data->slotno + bitpos / BITS_PER_WORD;
+ int regno = SPARC_FP_ARG_FIRST + this_slotno * 2;
+ if (GET_MODE_SIZE (mode) <= 4 && (bitpos & 32) != 0)
+ regno++;
+ int pos = bitpos / BITS_PER_UNIT;
+
+ do
{
- if (TREE_CODE (field) == FIELD_DECL)
- {
- HOST_WIDE_INT bitpos = startbitpos;
+ rtx reg = gen_rtx_REG (mode, regno);
+ XVECEXP (data->ret, 0, data->stack + data->nregs)
+ = gen_rtx_EXPR_LIST (VOIDmode, reg, GEN_INT (pos));
+ data->nregs += 1;
+ regno += GET_MODE_SIZE (mode) / 4;
+ pos += GET_MODE_SIZE (mode);
+ }
+ while (--nregs > 0);
+}
- if (DECL_SIZE (field) != 0)
- {
- if (integer_zerop (DECL_SIZE (field)))
- continue;
+/* A subroutine of function_arg_record_value. Assign FIELD and the bits of
+ the structure between PARMS->intoffset and BITPOS to registers. */
- if (tree_fits_uhwi_p (bit_position (field)))
- bitpos += int_bit_position (field);
- }
+inline void
+assign_registers (const_tree field, HOST_WIDE_INT bitpos, bool fp,
+ assign_data_t *data)
+{
+ if (fp)
+ {
+ assign_int_registers (bitpos, data);
- /* ??? FIXME: else assume zero offset. */
-
- if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE)
- function_arg_record_value_2 (TREE_TYPE (field),
- bitpos,
- parms,
- packed_p);
- else if ((FLOAT_TYPE_P (TREE_TYPE (field))
- || TREE_CODE (TREE_TYPE (field)) == VECTOR_TYPE)
- && TARGET_FPU
- && parms->named
- && ! packed_p)
- {
- int this_slotno = parms->slotno + bitpos / BITS_PER_WORD;
- int regno, nregs, pos;
- machine_mode mode = DECL_MODE (field);
- rtx reg;
-
- function_arg_record_value_3 (bitpos, parms);
-
- if (TREE_CODE (TREE_TYPE (field)) == VECTOR_TYPE
- && mode == BLKmode)
- {
- mode = TYPE_MODE (TREE_TYPE (TREE_TYPE (field)));
- nregs = TYPE_VECTOR_SUBPARTS (TREE_TYPE (field));
- }
- else if (TREE_CODE (TREE_TYPE (field)) == COMPLEX_TYPE)
- {
- mode = TYPE_MODE (TREE_TYPE (TREE_TYPE (field)));
- nregs = 2;
- }
- else
- nregs = 1;
-
- regno = SPARC_FP_ARG_FIRST + this_slotno * 2;
- if (GET_MODE_SIZE (mode) <= 4 && (bitpos & 32) != 0)
- regno++;
- reg = gen_rtx_REG (mode, regno);
- pos = bitpos / BITS_PER_UNIT;
- XVECEXP (parms->ret, 0, parms->stack + parms->nregs)
- = gen_rtx_EXPR_LIST (VOIDmode, reg, GEN_INT (pos));
- parms->nregs += 1;
- while (--nregs > 0)
- {
- regno += GET_MODE_SIZE (mode) / 4;
- reg = gen_rtx_REG (mode, regno);
- pos += GET_MODE_SIZE (mode);
- XVECEXP (parms->ret, 0, parms->stack + parms->nregs)
- = gen_rtx_EXPR_LIST (VOIDmode, reg, GEN_INT (pos));
- parms->nregs += 1;
- }
- }
- else
- {
- if (parms->intoffset == -1)
- parms->intoffset = bitpos;
- }
- }
+ assign_fp_registers (field, bitpos, data);
+ }
+ else
+ {
+ if (data->intoffset < 0)
+ data->intoffset = bitpos;
}
}
@@ -6602,52 +6579,33 @@ function_arg_record_value_2 (const_tree type, HOST_WIDE_INT startbitpos,
not be available.
MODE is the argument's machine mode.
SLOTNO is the index number of the argument's slot in the parameter array.
- NAMED is nonzero if this argument is a named parameter
+ NAMED is true if this argument is a named parameter
(otherwise it is an extra parameter matching an ellipsis).
REGBASE is the regno of the base register for the parameter array. */
static rtx
function_arg_record_value (const_tree type, machine_mode mode,
- int slotno, int named, int regbase)
+ int slotno, bool named, int regbase)
{
HOST_WIDE_INT typesize = int_size_in_bytes (type);
- struct function_arg_record_value_parms parms;
- unsigned int nregs;
+ assign_data_t data;
+ int nregs;
- parms.ret = NULL_RTX;
- parms.slotno = slotno;
- parms.named = named;
- parms.regbase = regbase;
- parms.stack = 0;
+ data.slotno = slotno;
+ data.regbase = regbase;
- /* Compute how many registers we need. */
- parms.nregs = 0;
- parms.intoffset = 0;
- function_arg_record_value_1 (type, 0, &parms, false);
+ /* Count how many registers we need. */
+ data.nregs = 0;
+ data.intoffset = 0;
+ data.stack = false;
+ traverse_record_type<assign_data_t, count_registers> (type, named, &data);
/* Take into account pending integer fields. */
- if (parms.intoffset != -1)
- {
- unsigned int startbit, endbit;
- int intslots, this_slotno;
-
- startbit = ROUND_DOWN (parms.intoffset, BITS_PER_WORD);
- endbit = ROUND_UP (typesize*BITS_PER_UNIT, BITS_PER_WORD);
- intslots = (endbit - startbit) / BITS_PER_WORD;
- this_slotno = slotno + parms.intoffset / BITS_PER_WORD;
-
- if (intslots > 0 && intslots > SPARC_INT_ARG_MAX - this_slotno)
- {
- intslots = MAX (0, SPARC_INT_ARG_MAX - this_slotno);
- /* We need to pass this field on the stack. */
- parms.stack = 1;
- }
-
- parms.nregs += intslots;
- }
+ if (compute_int_layout (typesize * BITS_PER_UNIT, &data, &nregs))
+ data.nregs += nregs;
/* Allocate the vector and handle some annoying special cases. */
- nregs = parms.nregs;
+ nregs = data.nregs;
if (nregs == 0)
{
@@ -6670,7 +6628,7 @@ function_arg_record_value (const_tree type, machine_mode mode,
gcc_assert (nregs > 0);
- parms.ret = gen_rtx_PARALLEL (mode, rtvec_alloc (parms.stack + nregs));
+ data.ret = gen_rtx_PARALLEL (mode, rtvec_alloc (data.stack + nregs));
/* If at least one field must be passed on the stack, generate
(parallel [(expr_list (nil) ...) ...]) so that all fields will
@@ -6678,19 +6636,21 @@ function_arg_record_value (const_tree type, machine_mode mode,
semantics of TARGET_ARG_PARTIAL_BYTES doesn't handle the case
of structures for which the fields passed exclusively in registers
are not at the beginning of the structure. */
- if (parms.stack)
- XVECEXP (parms.ret, 0, 0)
+ if (data.stack)
+ XVECEXP (data.ret, 0, 0)
= gen_rtx_EXPR_LIST (VOIDmode, NULL_RTX, const0_rtx);
- /* Fill in the entries. */
- parms.nregs = 0;
- parms.intoffset = 0;
- function_arg_record_value_2 (type, 0, &parms, false);
- function_arg_record_value_3 (typesize * BITS_PER_UNIT, &parms);
+ /* Assign the registers. */
+ data.nregs = 0;
+ data.intoffset = 0;
+ traverse_record_type<assign_data_t, assign_registers> (type, named, &data);
- gcc_assert (parms.nregs == nregs);
+ /* Assign pending integer fields. */
+ assign_int_registers (typesize * BITS_PER_UNIT, &data);
- return parms.ret;
+ gcc_assert (data.nregs == nregs);
+
+ return data.ret;
}
/* Used by function_arg and sparc_function_value_1 to implement the conventions
@@ -6706,7 +6666,7 @@ static rtx
function_arg_union_value (int size, machine_mode mode, int slotno,
int regno)
{
- int nwords = ROUND_ADVANCE (size), i;
+ int nwords = CEIL_NWORDS (size), i;
rtx regs;
/* See comment in previous function for empty structures. */
@@ -6777,17 +6737,17 @@ function_arg_vector_value (int size, int regno)
static rtx
sparc_function_arg_1 (cumulative_args_t cum_v, machine_mode mode,
- const_tree type, bool named, bool incoming_p)
+ const_tree type, bool named, bool incoming)
{
const CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
- int regbase = (incoming_p
+ int regbase = (incoming
? SPARC_INCOMING_INT_ARG_FIRST
: SPARC_OUTGOING_INT_ARG_FIRST);
int slotno, regno, padding;
enum mode_class mclass = GET_MODE_CLASS (mode);
- slotno = function_arg_slotno (cum, mode, type, named, incoming_p,
+ slotno = function_arg_slotno (cum, mode, type, named, incoming,
&regno, &padding);
if (slotno == -1)
return 0;
@@ -6837,35 +6797,7 @@ sparc_function_arg_1 (cumulative_args_t cum_v, machine_mode mode,
{
rtx reg = gen_rtx_REG (mode, regno);
if (cum->prototype_p || cum->libcall_p)
- {
- /* "* 2" because fp reg numbers are recorded in 4 byte
- quantities. */
-#if 0
- /* ??? This will cause the value to be passed in the fp reg and
- in the stack. When a prototype exists we want to pass the
- value in the reg but reserve space on the stack. That's an
- optimization, and is deferred [for a bit]. */
- if ((regno - SPARC_FP_ARG_FIRST) >= SPARC_INT_ARG_MAX * 2)
- return gen_rtx_PARALLEL (mode,
- gen_rtvec (2,
- gen_rtx_EXPR_LIST (VOIDmode,
- NULL_RTX, const0_rtx),
- gen_rtx_EXPR_LIST (VOIDmode,
- reg, const0_rtx)));
- else
-#else
- /* ??? It seems that passing back a register even when past
- the area declared by REG_PARM_STACK_SPACE will allocate
- space appropriately, and will not copy the data onto the
- stack, exactly as we desire.
-
- This is due to locate_and_pad_parm being called in
- expand_call whenever reg_parm_stack_space > 0, which
- while beneficial to our example here, would seem to be
- in error from what had been intended. Ho hum... -- r~ */
-#endif
- return reg;
- }
+ return reg;
else
{
rtx v0, v1;
@@ -6877,7 +6809,7 @@ sparc_function_arg_1 (cumulative_args_t cum_v, machine_mode mode,
/* On incoming, we don't need to know that the value
is passed in %f0 and %i0, and it confuses other parts
causing needless spillage even on the simplest cases. */
- if (incoming_p)
+ if (incoming)
return reg;
intreg = (SPARC_OUTGOING_INT_ARG_FIRST
@@ -6956,7 +6888,7 @@ sparc_arg_partial_bytes (cumulative_args_t cum, machine_mode mode,
{
int slotno, regno, padding;
- /* We pass false for incoming_p here, it doesn't matter. */
+ /* We pass false for incoming here, it doesn't matter. */
slotno = function_arg_slotno (get_cumulative_args (cum), mode, type, named,
false, &regno, &padding);
@@ -6966,8 +6898,8 @@ sparc_arg_partial_bytes (cumulative_args_t cum, machine_mode mode,
if (TARGET_ARCH32)
{
if ((slotno + (mode == BLKmode
- ? ROUND_ADVANCE (int_size_in_bytes (type))
- : ROUND_ADVANCE (GET_MODE_SIZE (mode))))
+ ? CEIL_NWORDS (int_size_in_bytes (type))
+ : CEIL_NWORDS (GET_MODE_SIZE (mode))))
> SPARC_INT_ARG_MAX)
return (SPARC_INT_ARG_MAX - slotno) * UNITS_PER_WORD;
}
@@ -6982,7 +6914,8 @@ sparc_arg_partial_bytes (cumulative_args_t cum, machine_mode mode,
int size = int_size_in_bytes (type);
if (size > UNITS_PER_WORD
- && slotno == SPARC_INT_ARG_MAX - 1)
+ && (slotno == SPARC_INT_ARG_MAX - 1
+ || slotno == SPARC_FP_ARG_MAX - 1))
return UNITS_PER_WORD;
}
else if (GET_MODE_CLASS (mode) == MODE_COMPLEX_INT
@@ -7068,18 +7001,16 @@ sparc_function_arg_advance (cumulative_args_t cum_v, machine_mode mode,
CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
int regno, padding;
- /* We pass false for incoming_p here, it doesn't matter. */
+ /* We pass false for incoming here, it doesn't matter. */
function_arg_slotno (cum, mode, type, named, false, &regno, &padding);
/* If argument requires leading padding, add it. */
cum->words += padding;
if (TARGET_ARCH32)
- {
- cum->words += (mode != BLKmode
- ? ROUND_ADVANCE (GET_MODE_SIZE (mode))
- : ROUND_ADVANCE (int_size_in_bytes (type)));
- }
+ cum->words += (mode == BLKmode
+ ? CEIL_NWORDS (int_size_in_bytes (type))
+ : CEIL_NWORDS (GET_MODE_SIZE (mode)));
else
{
if (type && AGGREGATE_TYPE_P (type))
@@ -7094,11 +7025,9 @@ sparc_function_arg_advance (cumulative_args_t cum_v, machine_mode mode,
++cum->words;
}
else
- {
- cum->words += (mode != BLKmode
- ? ROUND_ADVANCE (GET_MODE_SIZE (mode))
- : ROUND_ADVANCE (int_size_in_bytes (type)));
- }
+ cum->words += (mode == BLKmode
+ ? CEIL_NWORDS (int_size_in_bytes (type))
+ : CEIL_NWORDS (GET_MODE_SIZE (mode)));
}
}
@@ -7109,7 +7038,7 @@ sparc_function_arg_advance (cumulative_args_t cum_v, machine_mode mode,
enum direction
function_arg_padding (machine_mode mode, const_tree type)
{
- if (TARGET_ARCH64 && type != 0 && AGGREGATE_TYPE_P (type))
+ if (TARGET_ARCH64 && type && AGGREGATE_TYPE_P (type))
return upward;
/* Fall back to the default. */
diff --git a/gcc/config/sparc/vxworks.h b/gcc/config/sparc/vxworks.h
index 1bcbace..81e0ffb2 100644
--- a/gcc/config/sparc/vxworks.h
+++ b/gcc/config/sparc/vxworks.h
@@ -55,3 +55,10 @@ along with GCC; see the file COPYING3. If not see
/* We cannot use PC-relative accesses for VxWorks PIC because there is no
fixed gap between segments. */
#undef ASM_PREFERRED_EH_DATA_FORMAT
+
+/* Define this to be nonzero if static stack checking is supported. */
+#define STACK_CHECK_STATIC_BUILTIN 1
+
+/* This platform supports the probing method of stack checking (RTP mode).
+ 8K is reserved in the stack to propagate exceptions in case of overflow. */
+#define STACK_CHECK_PROTECT 8192
diff --git a/gcc/coverage.c b/gcc/coverage.c
index e3bab61..b1fce7d 100644
--- a/gcc/coverage.c
+++ b/gcc/coverage.c
@@ -745,11 +745,7 @@ build_var (tree fn_decl, tree type, int counter)
else
sprintf (buf, "__gcov%u_", counter);
len = strlen (buf);
-#ifndef NO_DOT_IN_LABEL
- buf[len - 1] = '.';
-#elif !defined NO_DOLLAR_IN_LABEL
- buf[len - 1] = '$';
-#endif
+ buf[len - 1] = symbol_table::symbol_suffix_separator ();
memcpy (buf + len, fn_name, fn_name_len + 1);
DECL_NAME (var) = get_identifier (buf);
TREE_STATIC (var) = 1;
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 18f8072..823ab11 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,636 @@
+2016-04-12 Jason Merrill <jason@redhat.com>
+
+ * class.c (is_really_empty_class): A zero-length array is empty.
+ An unnamed bit-field doesn't make a class non-empty.
+
+2016-04-12 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/68722
+ * parser.c (cp_parser_cache_defarg): When file ends in default
+ argument simply return error_mark_node.
+
+2016-04-12 Nathan Sidwell <nathan@acm.org>
+
+ PR c++/70501
+ * constexpr.c (cxx_eval_bare_aggregate): Handle VECTOR_TYPE
+ similarly to PMF.
+
+2016-04-11 Jason Merrill <jason@redhat.com>
+
+ * mangle.c (decl_is_template_id): The template itself counts as a
+ template-id.
+
+2016-04-08 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/70590
+ PR c++/70452
+ * constexpr.c (cxx_eval_outermost_expression): Call unshare_expr
+ on the result if it's not a CONSTRUCTOR.
+
+2016-04-07 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/70452
+ * constexpr.c (find_constructor): New function.
+ (unshare_constructor): New function.
+ (cxx_eval_call_expression): Use unshare_constructor instead of
+ unshare_expr.
+ (find_array_ctor_elt): Likewise.
+ (cxx_eval_vec_init_1): Likewise.
+ (cxx_eval_store_expression): Likewise.
+ (cxx_eval_constant_expression): Likewise.
+
+2016-04-06 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c/70436
+ * cp-tree.h (FOR_EACH_CLONE): Restructure macro to avoid
+ potentially generating a future -Wparentheses warning in its
+ callers.
+
+2016-04-06 Jason Merrill <jason@redhat.com>
+
+ * class.c (check_abi_tags): Fix function template handling.
+
+2016-04-05 Nathan Sidwell <nathan@acm.org>
+
+ PR c++/70512
+ * class.c (fixup_may_alias): New.
+ (fixup_attribute_variants): Call it.
+
+2016-04-05 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/70452
+ * constexpr.c (struct fundef_copy): New struct.
+ (struct fundef_copies_table_t): New struct.
+ (fundef_copies_table): New static variable.
+ (maybe_initialize_fundef_copies_table): New static function.
+ (get_fundef_copy): New static function.
+ (save_fundef_copy): New static function.
+ (cxx_eval_call_expression): Use get_fundef_copy, and
+ save_fundef_copy.
+ (constexpr_call_table): Add "deletable" GTY marker.
+
+2016-04-05 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/70452
+ * cp-tree.h (class cache_map): Remove.
+ * constexpr.c (cv_cache): Change type to
+ GTY((deletable)) hash_map<tree, tree> *.
+ (maybe_constant_value): Adjust following the change to cv_cache.
+ (clear_cv_cache): New static function.
+ (clear_cv_and_fold_caches): Use it.
+ * cp-gimplify.c (fold_cache): Change type to
+ GTY((deletable)) hash_map<tree, tree> *.
+ (clear_fold_cache): Adjust following the change to fold_cache.
+ (cp_fold): Likewise.
+
+2016-04-02 Martin Sebor <msebor@redhat.com>
+
+ PR c++/67376
+ PR c++/70170
+ PR c++/70172
+ PR c++/70228
+ * constexpr.c (diag_array_subscript): New function.
+ (cxx_eval_array_reference): Detect out of bounds array indices.
+
+2016-04-01 Jason Merrill <jason@redhat.com>
+
+ PR c++/70449
+ PR c++/70344
+ * pt.c (instantiate_decl): A function isn't fully defined if
+ DECL_INITIAL is error_mark_node.
+ * constexpr.c (cxx_eval_call_expression): Likewise.
+
+2016-04-01 Jakub Jelinek <jakub@redhat.com>
+ Marek Polacek <polacek@redhat.com>
+
+ PR c++/70488
+ * init.c (warn_placement_new_too_small): Test whether
+ DECL_SIZE_UNIT or TYPE_SIZE_UNIT are integers that fit into uhwi.
+
+2016-04-01 Nathan Sidwell <nathan@acm.org>
+
+ PR c++/68475
+ * decl.c (check_redeclaration_exception_specification): Check
+ regardless of -fno-exceptions.
+ * typeck2.c (merge_exception_specifiers): Relax assert by checking
+ flag_exceptions too.
+
+2016-03-31 Nathan Sidwell <nathan@acm.org>
+
+ * decl.c (start_preparsed_function): Remove unnecessary bracing.
+ (finish_destructor_body): Don't emit operator delete here.
+
+2016-03-31 Nathan Sidwell <nathan@acm.org>
+
+ PR c++/70393
+ * constexpr.c (cxx_eval_store_expression): Keep CONSTRUCTOR
+ elements in field order.
+
+2016-03-31 Marek Polacek <polacek@redhat.com>
+
+ PR c/70297
+ * decl.c (duplicate_decls): Also set TYPE_ALIGN and TYPE_USER_ALIGN.
+
+2016-03-31 Richard Biener <rguenther@suse.de>
+
+ PR c++/70430
+ * typeck.c (cp_build_binary_op): Fix operand order of vector
+ conditional in truth op handling.
+
+2016-03-29 Jason Merrill <jason@redhat.com>
+
+ PR c++/70353
+ * decl.c (make_rtl_for_nonlocal_decl): Don't defer local statics
+ in constexpr functions.
+
+2016-03-28 Jason Merrill <jason@redhat.com>
+
+ PR c++/70422
+ PR c++/64266
+ PR c++/70353
+ * decl.c, pt.c, constexpr.c: Revert last patch.
+
+2016-03-25 Jason Merrill <jason@redhat.com>
+ Martin Liška <mliska@suse.cz>
+
+ PR c++/64266
+ PR c++/70353
+ Core issue 1962
+ * decl.c (cp_fname_init): Decay the initializer to pointer.
+ (cp_make_fname_decl): Set DECL_DECLARED_CONSTEXPR_P,
+ DECL_VALUE_EXPR, DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P.
+ Don't call cp_finish_decl.
+ * pt.c (tsubst_expr) [DECL_EXPR]: Set DECL_VALUE_EXPR,
+ DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P. Don't call cp_finish_decl.
+ * constexpr.c (cxx_eval_constant_expression) [VAR_DECL]:
+ Handle DECL_VALUE_EXPR.
+
+2016-03-24 Jason Merrill <jason@redhat.com>
+
+ PR c++/70386
+ * constexpr.c (cxx_eval_bare_aggregate): Handle PMFs.
+
+ PR c++/70323
+ * constexpr.c (cxx_eval_call_expression): Don't cache result if
+ *overflow_p.
+
+2016-03-24 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/62212
+ * tree.c (build_cplus_array_type): Determine type-dependentess
+ with uses_template_parms instead of with dependent_type_p.
+
+2016-03-23 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/70347
+ * typeck.c (process_init_constructor_union): If the initializer
+ is empty, use the union's NSDMI if it has one.
+
+2016-03-23 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/70332
+ * pt.c (tsubst_copy) [PARM_DECL]: Handle the use of 'this' in an
+ NSDMI that's part of an aggregrate initialization.
+
+2016-03-23 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/70001
+ * constexpr.c (cxx_eval_vec_init_1): Reuse CONSTRUCTOR initializers
+ for 1..max even for multi-dimensional arrays. Call unshare_expr
+ on it.
+
+ PR c++/70323
+ * constexpr.c (cxx_eval_constant_expression): Diagnose overflow
+ on TREE_OVERFLOW constants.
+
+ PR c++/70376
+ * cp-gimplify.c (genericize_omp_for_stmt): Don't walk OMP_FOR_CLAUSES
+ for OMP_TASKLOOP here.
+ (cp_genericize_r): Handle OMP_TASKLOOP like OMP_TASK, except do call
+ genericize_omp_for_stmt instead of cp_walk_tree on OMP_BODY.
+
+2016-03-23 Alexandre Oliva <aoliva@redhat.com>
+ Jason Merrill <jason@redhat.com>
+ Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/69315
+ * cp-tree.h (defer_mark_used_calls, deferred_mark_used_calls): Remove.
+ * decl.c (defer_mark_used_calls, deferred_mark_used_calls): Remove.
+ (finish_function): Don't set or test them.
+ * decl2.c (mark_used): Don't handle defer_mark_used_calls.
+
+2016-03-23 Jason Merrill <jason@redhat.com>
+
+ PR c++/70344
+ * constexpr.c (cxx_eval_call_expression): Catch invalid recursion.
+
+2016-03-23 Marek Polacek <polacek@redhat.com>
+
+ PR c++/69884
+ * pt.c (canonicalize_type_argument): Use OPT_Wignored_attributes.
+
+2016-03-22 Ilya Enkovich <enkovich.gnu@gmail.com>
+
+ * call.c (build_conditional_expr_1): Always use original
+ condition type for vector type checks and build.
+
+2016-03-22 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/70096
+ * pt.c (tsubst_decl): Clear the DECL_MODE of the new decl.
+
+2016-03-22 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/70204
+ * constexpr.c (non_const_var_error): Check
+ DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P.
+
+2016-03-21 Richard Henderson <rth@redhat.com>
+
+ PR c++/70273
+ * decl.c (notice_forced_label_r): New.
+ (cp_finish_decl): Use it.
+
+2016-03-21 Jason Merrill <jason@redhat.com>
+
+ PR c++/70285
+ * cp-gimplify.c (cp_fold) [COND_EXPR]: Handle bit-fields.
+
+2016-03-18 Jason Merrill <jason@redhat.com>
+
+ PR c++/70139
+ * constexpr.c (cxx_eval_call_expression): Fix trivial copy.
+
+ PR c++/70147
+ * class.c (vptr_via_virtual_p): New.
+ (most_primary_binfo): Factor out of build_rtti_vtbl_entries.
+ * cp-ubsan.c (cp_ubsan_dfs_initialize_vtbl_ptrs): Don't clear
+ a vptr from any virtual base in a not-in-charge 'structor.
+
+ * decl.c (build_clobber_this): Factor out of
+ start_preparsed_function and begin_destructor_body. Handle
+ virtual bases better.
+
+ * class.c (build_if_in_charge): Split out from build_base_path.
+ * init.c (expand_virtual_init, expand_default_init): Use it.
+ * call.c (build_special_member_call): Use it.
+
+2016-03-18 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/70267
+ * init.c (build_new_1): Complain and return error_mark_node
+ if alloc_fn is not _Jv_AllocObject function returning pointer.
+
+2016-03-18 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/70205
+ * search.c (adjust_result_of_qualified_name_lookup): Don't
+ update the BASELINK_BINFO of DECL if the second call
+ to lookup_base fails.
+
+2016-03-18 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/70218
+ * parser.c (cp_parser_lambda_expression): Move call to
+ pop_deferring_access_checks ahead of the call to
+ cp_parser_end_tentative_firewall.
+
+2016-03-17 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/70144
+ * cp-tree.h (magic_varargs_p): Return int instead of bool.
+ * call.c (magic_varargs_p): Return int instead of bool, return 2 for
+ Cilk+ reductions, otherwise 1 for magic varargs and 0 for normal
+ varargs.
+ (build_over_call): If magic_varargs_p == 2, call reject_gcc_builtin,
+ if magic_varargs_p == 1, call decay_conversion
+ instead of mark_type_use. Don't store error_mark_node arguments to
+ argarray, instead return error_mark_node.
+
+ PR c++/70272
+ * decl.c (begin_destructor_body): Don't insert clobber if
+ is_empty_class (current_class_type).
+
+2016-03-17 Marek Polacek <polacek@redhat.com>
+
+ PR c++/70194
+ * typeck.c (warn_for_null_address): New function.
+ (cp_build_binary_op): Call it.
+
+2016-03-16 Jason Merrill <jason@redhat.com>
+
+ PR c++/70259
+ * decl.c (start_preparsed_function): Don't clobber an empty base.
+
+2016-03-16 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/70147
+ * cp-ubsan.c (cp_ubsan_dfs_initialize_vtbl_ptrs): Conditionalize
+ BINFO_VIRTUAL_P vtable clearing on current_in_charge_parm.
+
+ PR c++/70147
+ * cp-ubsan.c (cp_ubsan_maybe_initialize_vtbl_ptrs): Temporarily
+ set in_base_initializer.
+
+2016-03-15 Marek Polacek <polacek@redhat.com>
+
+ PR c++/70209
+ * tree.c (strip_typedefs): Call strip_typedefs again on the
+ DECL_ORIGINAL_TYPE result.
+
+2016-03-15 Jason Merrill <jason@redhat.com>
+
+ PR c++/70095
+ * pt.c (instantiate_decl): Fix call to variable_template_p.
+
+ PR c++/70141
+ * pt.c (for_each_template_parm_r): Always walk into TYPENAME_TYPE.
+
+2016-03-14 Casey Carter <casey@carter.net>
+ Jason Merrill <jason@redhat.com>
+
+ P0184R0: Generalizing the Range-Based For Loop
+ * parser.c (cp_convert_range_for): Set the type of __end separately.
+ (cp_parser_perform_range_for_lookup): Allow different begin/end
+ types if they are comparable.
+
+2016-03-12 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/70106
+ * semantics.c (force_paren_expr): Just build a PAREN_EXPR when
+ processing_template_decl and EXPR is a SCOPE_REF.
+
+2016-03-10 Patrick Palka <ppalka@gcc.gnu.org>
+ Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/70001
+ * constexpr.c (cxx_eval_vec_init_1): For pre_init case, reuse
+ return value from cxx_eval_constant_expression from earlier
+ elements if it is valid constant initializer requiring no
+ relocations.
+
+2016-03-10 Marek Polacek <polacek@redhat.com>
+
+ PR c++/70153
+ * cp-gimplify.c (cp_fold): Handle UNARY_PLUS_EXPR.
+
+2016-03-09 Cesar Philippidis <cesar@codesourcery.com>
+
+ * parser.c (cp_parser_oacc_loop): Update cclauses and clauses
+ when calling c_finish_omp_clauses.
+
+2016-03-08 Jason Merrill <jason@redhat.com>
+
+ * parser.c (cp_parser_diagnose_invalid_type_name): Give helpful
+ diagnostic for use of "concept".
+ (cp_parser_requires_clause_opt): And "requires".
+ (cp_parser_type_parameter, cp_parser_late_return_type_opt)
+ (cp_parser_explicit_template_declaration): Adjust.
+ * Make-lang.in (check-c++-all): Add "concepts" to std list.
+
+ P0036R0: Unary Folds and Empty Parameter Packs
+ * pt.c (expand_empty_fold): Remove special cases for *,+,&,|.
+
+2016-03-08 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/70135
+ * constexpr.c (cxx_eval_loop_expr): Forget saved values of SAVE_EXPRs
+ even after the last iteration of the loop.
+
+ * decl.c (duplicate_decls): Fix spelling - becuase -> because.
+
+2016-03-07 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/66786
+ * pt.c (get_template_info): Handle PARM_DECL.
+ (template_class_depth): Check DECL_P instead of
+ VAR_OR_FUNCTION_DECL_P.
+
+2016-03-05 Jason Merrill <jason@redhat.com>
+
+ PR c++/67364
+ * constexpr.c (cxx_eval_store_expression): Replace
+ CONSTRUCTOR_ELTS in nested CONSTRUCTORs, too.
+
+2016-03-05 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/66786
+ * pt.c (template_class_depth): Given a lambda type, iterate
+ into its LAMBDA_TYPE_EXTRA_SCOPE field instead of its
+ TYPE_CONTEXT. Given a VAR_DECL, iterate into its
+ CP_DECL_CONTEXT.
+
+2016-03-04 Jason Merrill <jason@redhat.com>
+
+ PR c++/69203
+ * cp-tree.h (COND_EXPR_IS_VEC_DELETE): New.
+ * init.c (build_vec_delete_1): Set it.
+ * constexpr.c (potential_constant_expression_1) [COND_EXPR]: Check it.
+
+2016-03-04 Jakub Jelinek <jakub@redhat.com>
+
+ * decl.c (start_preparsed_function): Don't emit start clobber at the
+ start of constructor clones.
+
+ PR c++/70035
+ * cp-tree.h (cp_ubsan_maybe_initialize_vtbl_ptrs): New prototype.
+ * decl.c (start_preparsed_function): Call
+ cp_ubsan_maybe_initialize_vtbl_ptrs if needed.
+ * cp-ubsan.c (cp_ubsan_dfs_initialize_vtbl_ptrs,
+ cp_ubsan_maybe_initialize_vtbl_ptrs): New functions.
+
+2016-03-04 Jason Merrill <jason@redhat.com>
+
+ PR c++/67364
+ * constexpr.c (cxx_eval_component_reference): Further tweak.
+
+ * constexpr.c (struct constexpr_ctx): Add save_exprs field.
+ (cxx_eval_loop_expr): Discard SAVE_EXPR values before looping.
+ (cxx_eval_constant_expression) [SAVE_EXPR]: Add it to the set.
+ (cxx_eval_outermost_constant_expr, is_sub_constant_expr): Initialize.
+
+ PR c++/70067
+ * tree.c (strip_typedefs): Handle TYPENAME_TYPE lookup finding the
+ same type.
+
+2016-03-03 Jason Merrill <jason@redhat.com>
+
+ * method.c (synthesized_method_walk): operator= can also be constexpr.
+
+ * pt.c (tsubst_copy_and_build) [LAMBDA_EXPR]: Get
+ LAMBDA_EXPR_RETURN_TYPE from the instantiated closure.
+
+ PR c++/67164
+ * pt.c (copy_template_args): New.
+ (tsubst_pack_expansion): Use it.
+
+ * call.c (build_aggr_conv): Use get_nsdmi.
+
+ PR c++/51406
+ * typeck.c (build_static_cast_1): Avoid folding back to lvalue.
+
+ PR c++/67364
+ * constexpr.c (cxx_eval_component_reference): Just return an empty
+ CONSTRUCTOR for an empty class.
+
+2016-03-01 Jason Merrill <jason@redhat.com>
+
+ PR c++/70036
+ * parser.c (cp_parser_requires_clause): Call
+ check_for_bare_parameter_packs.
+
+ PR c++/51489
+ * constexpr.c (cxx_eval_binary_expression): Don't VERIFY_CONSTANT
+ the operands.
+
+ PR c++/69995
+ * constexpr.c (cxx_eval_call_expression): Unshare arg.
+ (cxx_eval_constant_expression) [DECL_EXPR]: Unshare init.
+ [TARGET_EXPR]: Unshare init.
+
+2016-03-01 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/68948
+ PR c++/69961
+ * pt.c (tsubst_baselink): Reinstate the check for an invalid
+ constructor call.
+
+2016-02-28 Jason Merrill <jason@redhat.com>
+
+ PR c++/69995
+ * constexpr.c (cxx_eval_store_expression): Unshare init.
+
+2016-02-26 Jason Merrill <jason@redhat.com>
+
+ PR c++/69958
+ * pt.c (make_argument_pack): New.
+ (tsubst_copy) [SIZEOF_EXPR]: Handle partial expansion.
+ (tsubst_copy_and_build): Likewise.
+
+2016-02-25 Jason Merrill <jason@redhat.com>
+
+ PR c++/69889
+ * cp-tree.h (AGGR_INIT_FROM_THUNK_P): New.
+ * tree.c (build_aggr_init_expr): Set it.
+ * semantics.c (simplify_aggr_init_expr): Check it.
+ * cp-gimplify.c (cp_genericize_r): Don't walk into
+ a call/aggr_init from a thunk.
+
+ PR c++/69842
+ * method.c (forward_parm): Handle parameter packs.
+ * lambda.c (maybe_add_lambda_conv_op): Use it for them.
+
+ PR c++/67364
+ * constexpr.c (cxx_eval_component_reference): Don't complain about
+ unevaluated empty classes.
+
+ PR c++/68049
+ * tree.c (strip_typedefs): Use DECL_ORIGINAL_TYPE.
+
+2016-02-25 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/69736
+ * cp-tree.h (REF_PARENTHESIZED_P): Adjust documentation.
+ (maybe_undo_parenthesized_ref): Declare.
+ * semantics.c (maybe_undo_parenthesized_ref): Split out from
+ check_return_expr.
+ (finish_call_expr): Use it.
+ * typeck.c (check_return_expr): Use it.
+ * pt.c (tsubst_copy_and_build) [INDIRECT_REF]: Retain the
+ REF_PARENTHESIZED_P flag.
+
+2016-02-24 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/69922
+ * class.c (build_base_path): Set TREE_NO_WARNING on the null_test.
+ Avoid folding it.
+ * init.c (build_vec_delete_1, build_delete): Don't fold the non-NULL
+ tests.
+ * cp-gimplify.c (cp_fold): For TREE_NO_WARNING comparisons with NULL,
+ unless they are folded into INTEGER_CST, error_mark_node or some
+ comparison with NULL, avoid folding them and use either the original
+ comparison or non-folded comparison of folded arguments.
+ * cp-ubsan.c (cp_ubsan_instrument_vptr): Set TREE_NO_WARNING on the
+ comparison, don't fold the comparison right away.
+
+2016-02-24 Jason Merrill <jason@redhat.com>
+
+ PR c++/69323
+ * friend.c (make_friend_class): Likewise.
+ * decl.c (lookup_and_check_tag): Diagnose invalid dependent friend.
+
+2016-02-24 Jason Merrill <jason@redhat.com>
+
+ PR c++/69323
+ * pt.c (instantiate_class_template_1): Set
+ processing_template_decl before substituting friend_type.
+
+016-02-24 Martin Sebor <msebor@redhat.com>
+
+ PR c++/69912
+ * tree.c (build_ctor_subob_ref): Compare types' main variants
+ instead of the types as they are.
+
+2016-02-24 Jason Merrill <jason@redhat.com>
+
+ * decl.c (start_preparsed_function): Condition ctor clobber on
+ flag_lifetime_dse > 1.
+
+ * cp-gimplify.c (cp_fold): Don't fold constexpr calls if -fno-inline.
+
+2016-02-19 Jason Merrill <jason@redhat.com>
+
+ PR c++/69743
+ * call.c (remaining_arguments): No longer static.
+ * cp-tree.h: Declare it.
+ * pt.c (more_specialized_fn): Use it.
+
+2016-02-19 Jakub Jelinek <jakub@redhat.com>
+ Bernd Edlinger <bernd.edlinger@hotmail.de>
+
+ * Make-lang.in: Invoke gperf with -L C++.
+ * cfns.gperf: Remove prototypes for hash and libc_name_p
+ inlines.
+ * cfns.h: Regenerated.
+ * except.c (nothrow_libfn_p): Adjust.
+
+2016-02-19 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/69850
+ * rtti.c (ifnonnull): Set TREE_NO_WARNING on the condition, use
+ NE_EXPR instead of EQ_EXPR and swap last two arguments on COND_EXPR.
+
+2016-02-19 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/68948
+ * pt.c (tsubst_baselink): Don't diagnose an invalid constructor
+ call here.
+ * semantics.c (finish_call_expr): Don't assume a constructor
+ call is dependent if only the "this" pointer is dependent. When
+ building a constructor call, always use a dummy object.
+
+2016-02-19 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/69850
+ * init.c (build_vec_delete_1): Set TREE_NO_WARNING on the NE_EXPR
+ condition.
+ * cp-gimplify.c (cp_fold): Propagate TREE_NO_WARNING from binary
+ operators if folding preserved the binop, just with different
+ arguments.
+
+ PR c++/67767
+ * parser.c (cp_parser_std_attribute_spec_seq): Don't assume
+ attr_spec is always single element chain, chain all the attributes
+ properly together in the right order.
+
+2016-02-18 Jason Merrill <jason@redhat.com>
+
+ * mangle.c (maybe_check_abi_tags): Add for_decl parm. Call
+ mangle_decl.
+ (mangle_decl): Call maybe_check_abi_tags for function scope.
+ (mangle_guard_variable): Call maybe_check_abi_tags here.
+ (write_guarded_var_name): Not here.
+
2016-02-17 Jason Merrill <jason@redhat.com>
PR c++/65985
diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in
index 671ce12..8770f6f 100644
--- a/gcc/cp/Make-lang.in
+++ b/gcc/cp/Make-lang.in
@@ -112,7 +112,7 @@ else
# deleting the $(srcdir)/cp/cfns.h file.
$(srcdir)/cp/cfns.h:
endif
- gperf -o -C -E -k '1-6,$$' -j1 -D -N 'libc_name_p' -L ANSI-C \
+ gperf -o -C -E -k '1-6,$$' -j1 -D -N 'libc_name_p' -L C++ \
$(srcdir)/cp/cfns.gperf --output-file $(srcdir)/cp/cfns.h
#
@@ -152,7 +152,7 @@ check-c++1z:
# Run the testsuite in all standard conformance levels.
check-c++-all:
- $(MAKE) RUNTESTFLAGS="$(RUNTESTFLAGS) --stds=98,11,14,1z" check-g++
+ $(MAKE) RUNTESTFLAGS="$(RUNTESTFLAGS) --stds=98,11,14,1z,concepts" check-g++
# Run the testsuite with garbage collection at every opportunity.
check-g++-strict-gc:
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index cb71176..ed23490 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -1,4 +1,4 @@
-/* Functions related to invoking methods and overloaded functions.
+/* Functions related to invoking -*- C++ -*- methods and overloaded functions.
Copyright (C) 1987-2016 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com) and
modified by Brendan Kehoe (brendan@cygnus.com).
@@ -897,6 +897,8 @@ 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);
else if (TREE_CODE (ftype) == REFERENCE_TYPE)
/* Value-initialization of reference is ill-formed. */
return NULL;
@@ -1905,7 +1907,7 @@ add_candidate (struct z_candidate **candidates,
/* Return the number of remaining arguments in the parameter list
beginning with ARG. */
-static int
+int
remaining_arguments (tree arg)
{
int n;
@@ -4632,6 +4634,8 @@ build_conditional_expr_1 (location_t loc, tree arg1, tree arg2, tree arg3,
if (VECTOR_INTEGER_TYPE_P (TREE_TYPE (arg1)))
{
+ tree arg1_type = TREE_TYPE (arg1);
+
/* If arg1 is another cond_expr choosing between -1 and 0,
then we can use its comparison. It may help to avoid
additional comparison, produce more accurate diagnostics
@@ -4651,7 +4655,6 @@ build_conditional_expr_1 (location_t loc, tree arg1, tree arg2, tree arg3,
|| error_operand_p (arg3))
return error_mark_node;
- tree arg1_type = TREE_TYPE (arg1);
arg2_type = TREE_TYPE (arg2);
arg3_type = TREE_TYPE (arg3);
@@ -7038,15 +7041,17 @@ convert_for_arg_passing (tree type, tree val, tsubst_flags_t complain)
return val;
}
-/* Returns true iff FN is a function with magic varargs, i.e. ones for
- which no conversions at all should be done. This is true for some
- builtins which don't act like normal functions. */
+/* Returns non-zero iff FN is a function with magic varargs, i.e. ones for
+ which just decay_conversion or no conversions at all should be done.
+ This is true for some builtins which don't act like normal functions.
+ Return 2 if no conversions at all should be done, 1 if just
+ decay_conversion. */
-bool
+int
magic_varargs_p (tree fn)
{
if (flag_cilkplus && is_cilkplus_reduce_builtin (fn) != BUILT_IN_NONE)
- return true;
+ return 2;
if (DECL_BUILT_IN (fn))
switch (DECL_FUNCTION_CODE (fn))
@@ -7055,14 +7060,14 @@ magic_varargs_p (tree fn)
case BUILT_IN_CONSTANT_P:
case BUILT_IN_NEXT_ARG:
case BUILT_IN_VA_START:
- return true;
+ return 1;
default:;
return lookup_attribute ("type generic",
TYPE_ATTRIBUTES (TREE_TYPE (fn))) != 0;
}
- return false;
+ return 0;
}
/* Returns the decl of the dispatcher function if FN is a function version. */
@@ -7513,9 +7518,17 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
for (; arg_index < vec_safe_length (args); ++arg_index)
{
tree a = (*args)[arg_index];
- if (magic_varargs_p (fn))
- /* Do no conversions for magic varargs. */
- a = mark_type_use (a);
+ int magic = magic_varargs_p (fn);
+ if (magic == 2)
+ {
+ /* Do no conversions for certain magic varargs. */
+ a = mark_type_use (a);
+ if (TREE_CODE (a) == FUNCTION_DECL && reject_gcc_builtin (a))
+ return error_mark_node;
+ }
+ else if (magic == 1)
+ /* For other magic varargs only do decay_conversion. */
+ a = decay_conversion (a, complain);
else if (DECL_CONSTRUCTOR_P (fn)
&& same_type_ignoring_top_level_qualifiers_p (DECL_CONTEXT (fn),
TREE_TYPE (a)))
@@ -7528,6 +7541,8 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
}
else
a = convert_arg_to_ellipsis (a, complain);
+ if (a == error_mark_node)
+ return error_mark_node;
argarray[j++] = a;
}
@@ -7990,11 +8005,7 @@ build_special_member_call (tree instance, tree name, vec<tree, va_gc> **args,
vtt = decay_conversion (vtt, complain);
if (vtt == error_mark_node)
return error_mark_node;
- vtt = build3 (COND_EXPR, TREE_TYPE (vtt),
- build2 (EQ_EXPR, boolean_type_node,
- current_in_charge_parm, integer_zero_node),
- current_vtt_parm,
- vtt);
+ vtt = build_if_in_charge (vtt, current_vtt_parm);
if (BINFO_SUBVTT_INDEX (binfo))
sub_vtt = fold_build_pointer_plus (vtt, BINFO_SUBVTT_INDEX (binfo));
else
diff --git a/gcc/cp/cfns.gperf b/gcc/cp/cfns.gperf
index 2784edc..8d7f015 100644
--- a/gcc/cp/cfns.gperf
+++ b/gcc/cp/cfns.gperf
@@ -1,3 +1,5 @@
+%language=C++
+%define class-name libc_name
%{
/* Copyright (C) 2000-2016 Free Software Foundation, Inc.
@@ -16,14 +18,6 @@ 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/>. */
-#ifdef __GNUC__
-__inline
-#endif
-static unsigned int hash (const char *, unsigned int);
-#ifdef __GNUC__
-__inline
-#endif
-const char * libc_name_p (const char *, unsigned int);
%}
%%
# The standard C library functions, for feeding to gperf; the result is used
diff --git a/gcc/cp/cfns.h b/gcc/cp/cfns.h
index d8e02c9..9a37249 100644
--- a/gcc/cp/cfns.h
+++ b/gcc/cp/cfns.h
@@ -1,5 +1,5 @@
-/* ANSI-C code produced by gperf version 3.0.3 */
-/* Command-line: gperf -o -C -E -k '1-6,$' -j1 -D -N libc_name_p -L ANSI-C cfns.gperf */
+/* C++ code produced by gperf version 3.0.4 */
+/* Command-line: gperf -o -C -E -k '1-6,$' -j1 -D -N libc_name_p -L C++ --output-file cfns.h cfns.gperf */
#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
&& ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
@@ -28,7 +28,7 @@
#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
#endif
-#line 1 "cfns.gperf"
+#line 3 "cfns.gperf"
/* Copyright (C) 2000-2016 Free Software Foundation, Inc.
@@ -47,25 +47,18 @@ 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/>. */
-#ifdef __GNUC__
-__inline
-#endif
-static unsigned int hash (const char *, unsigned int);
-#ifdef __GNUC__
-__inline
-#endif
-const char * libc_name_p (const char *, unsigned int);
/* maximum key range = 391, duplicates = 0 */
-#ifdef __GNUC__
-__inline
-#else
-#ifdef __cplusplus
-inline
-#endif
-#endif
-static unsigned int
-hash (register const char *str, register unsigned int len)
+class libc_name
+{
+private:
+ static inline unsigned int hash (const char *str, unsigned int len);
+public:
+ static const char *libc_name_p (const char *str, unsigned int len);
+};
+
+inline unsigned int
+libc_name::hash (register const char *str, register unsigned int len)
{
static const unsigned short asso_values[] =
{
@@ -122,14 +115,8 @@ hash (register const char *str, register unsigned int len)
return hval + asso_values[(unsigned char)str[len - 1]];
}
-#ifdef __GNUC__
-__inline
-#ifdef __GNUC_STDC_INLINE__
-__attribute__ ((__gnu_inline__))
-#endif
-#endif
const char *
-libc_name_p (register const char *str, register unsigned int len)
+libc_name::libc_name_p (register const char *str, register unsigned int len)
{
enum
{
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index b705d6b..02a992f 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -225,6 +225,24 @@ int n_convert_harshness = 0;
int n_compute_conversion_costs = 0;
int n_inner_fields_searched = 0;
+/* Return a COND_EXPR that executes TRUE_STMT if this execution of the
+ 'structor is in charge of 'structing virtual bases, or FALSE_STMT
+ otherwise. */
+
+tree
+build_if_in_charge (tree true_stmt, tree false_stmt)
+{
+ gcc_assert (DECL_HAS_IN_CHARGE_PARM_P (current_function_decl));
+ tree cmp = build2 (NE_EXPR, boolean_type_node,
+ current_in_charge_parm, integer_zero_node);
+ tree type = unlowered_expr_type (true_stmt);
+ if (VOID_TYPE_P (type))
+ type = unlowered_expr_type (false_stmt);
+ tree cond = build3 (COND_EXPR, type,
+ cmp, true_stmt, false_stmt);
+ return cond;
+}
+
/* Convert to or from a base subobject. EXPR is an expression of type
`A' or `A*', an expression of type `B' or `B*' is returned. To
convert A to a base B, CODE is PLUS_EXPR and BINFO is the binfo for
@@ -392,8 +410,11 @@ build_base_path (enum tree_code code,
if (null_test)
{
tree zero = cp_convert (TREE_TYPE (expr), nullptr_node, complain);
- null_test = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
- expr, zero);
+ null_test = build2_loc (input_location, NE_EXPR, boolean_type_node,
+ expr, zero);
+ /* This is a compiler generated comparison, don't emit
+ e.g. -Wnonnull-compare warning for it. */
+ TREE_NO_WARNING (null_test) = 1;
}
/* If this is a simple base reference, express it as a COMPONENT_REF. */
@@ -467,12 +488,9 @@ build_base_path (enum tree_code code,
/* Negative fixed_type_p means this is a constructor or destructor;
virtual base layout is fixed in in-charge [cd]tors, but not in
base [cd]tors. */
- offset = build3 (COND_EXPR, ptrdiff_type_node,
- build2 (EQ_EXPR, boolean_type_node,
- current_in_charge_parm, integer_zero_node),
- v_offset,
- convert_to_integer (ptrdiff_type_node,
- BINFO_OFFSET (binfo)));
+ offset = build_if_in_charge
+ (convert_to_integer (ptrdiff_type_node, BINFO_OFFSET (binfo)),
+ v_offset);
else
offset = v_offset;
}
@@ -1586,6 +1604,15 @@ check_abi_tags (tree t, tree subob)
void
check_abi_tags (tree decl)
{
+ tree t;
+ if (abi_version_at_least (10)
+ && DECL_LANG_SPECIFIC (decl)
+ && DECL_USE_TEMPLATE (decl)
+ && (t = DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (decl)),
+ t != decl))
+ /* Make sure that our template has the appropriate tags, since
+ write_unqualified_name looks for them there. */
+ check_abi_tags (t);
if (VAR_P (decl))
check_abi_tags (decl, TREE_TYPE (decl));
else if (TREE_CODE (decl) == FUNCTION_DECL
@@ -1960,6 +1987,21 @@ fixup_type_variants (tree t)
}
}
+/* KLASS is a class that we're applying may_alias to after the body is
+ parsed. Fixup any POINTER_TO and REFERENCE_TO types. The
+ canonical type(s) will be implicitly updated. */
+
+static void
+fixup_may_alias (tree klass)
+{
+ tree t;
+
+ for (t = TYPE_POINTER_TO (klass); t; t = TYPE_NEXT_PTR_TO (t))
+ TYPE_REF_CAN_ALIAS_ALL (t) = true;
+ for (t = TYPE_REFERENCE_TO (klass); t; t = TYPE_NEXT_REF_TO (t))
+ TYPE_REF_CAN_ALIAS_ALL (t) = true;
+}
+
/* Early variant fixups: we apply attributes at the beginning of the class
definition, and we need to fix up any variants that have already been
made via elaborated-type-specifier so that check_qualified_type works. */
@@ -1975,6 +2017,10 @@ fixup_attribute_variants (tree t)
tree attrs = TYPE_ATTRIBUTES (t);
unsigned align = TYPE_ALIGN (t);
bool user_align = TYPE_USER_ALIGN (t);
+ bool may_alias = lookup_attribute ("may_alias", attrs);
+
+ if (may_alias)
+ fixup_may_alias (t);
for (variants = TYPE_NEXT_VARIANT (t);
variants;
@@ -1989,6 +2035,8 @@ fixup_attribute_variants (tree t)
else
TYPE_USER_ALIGN (variants) = user_align;
TYPE_ALIGN (variants) = valign;
+ if (may_alias)
+ fixup_may_alias (variants);
}
}
@@ -8358,12 +8406,15 @@ is_really_empty_class (tree type)
for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
if (TREE_CODE (field) == FIELD_DECL
&& !DECL_ARTIFICIAL (field)
+ /* An unnamed bit-field is not a data member. */
+ && (DECL_NAME (field) || !DECL_C_BIT_FIELD (field))
&& !is_really_empty_class (TREE_TYPE (field)))
return false;
return true;
}
else if (TREE_CODE (type) == ARRAY_TYPE)
- return is_really_empty_class (TREE_TYPE (type));
+ return (integer_zerop (array_type_nelts_top (type))
+ || is_really_empty_class (TREE_TYPE (type)));
return false;
}
@@ -8472,6 +8523,40 @@ get_primary_binfo (tree binfo)
return copied_binfo (primary_base, binfo);
}
+/* As above, but iterate until we reach the binfo that actually provides the
+ vptr for BINFO. */
+
+static tree
+most_primary_binfo (tree binfo)
+{
+ tree b = binfo;
+ while (CLASSTYPE_HAS_PRIMARY_BASE_P (BINFO_TYPE (b))
+ && !BINFO_LOST_PRIMARY_P (b))
+ {
+ tree primary_base = get_primary_binfo (b);
+ gcc_assert (BINFO_PRIMARY_P (primary_base)
+ && BINFO_INHERITANCE_CHAIN (primary_base) == b);
+ b = primary_base;
+ }
+ return b;
+}
+
+/* Returns true if BINFO gets its vptr from a virtual base of the most derived
+ type. Note that the virtual inheritance might be above or below BINFO in
+ the hierarchy. */
+
+bool
+vptr_via_virtual_p (tree binfo)
+{
+ if (TYPE_P (binfo))
+ binfo = TYPE_BINFO (binfo);
+ tree primary = most_primary_binfo (binfo);
+ /* Don't limit binfo_via_virtual, we want to return true when BINFO itself is
+ a morally virtual base. */
+ tree virt = binfo_via_virtual (primary, NULL_TREE);
+ return virt != NULL_TREE;
+}
+
/* If INDENTED_P is zero, indent to INDENT. Return nonzero. */
static int
@@ -9759,17 +9844,7 @@ build_rtti_vtbl_entries (tree binfo, vtbl_init_data* vid)
/* To find the complete object, we will first convert to our most
primary base, and then add the offset in the vtbl to that value. */
- b = binfo;
- while (CLASSTYPE_HAS_PRIMARY_BASE_P (BINFO_TYPE (b))
- && !BINFO_LOST_PRIMARY_P (b))
- {
- tree primary_base;
-
- primary_base = get_primary_binfo (b);
- gcc_assert (BINFO_PRIMARY_P (primary_base)
- && BINFO_INHERITANCE_CHAIN (primary_base) == b);
- b = primary_base;
- }
+ b = most_primary_binfo (binfo);
offset = size_diffop_loc (input_location,
BINFO_OFFSET (vid->rtti_binfo), BINFO_OFFSET (b));
diff --git a/gcc/cp/constexpr.c b/gcc/cp/constexpr.c
index d3b04b1..13f385b 100644
--- a/gcc/cp/constexpr.c
+++ b/gcc/cp/constexpr.c
@@ -897,6 +897,9 @@ struct constexpr_ctx {
/* Values for any temporaries or local variables within the
constant-expression. */
hash_map<tree,tree> *values;
+ /* SAVE_EXPRs that we've seen within the current LOOP_EXPR. NULL if we
+ aren't inside a loop. */
+ hash_set<tree> *save_exprs;
/* The CONSTRUCTOR we're currently building up for an aggregate
initializer. */
tree ctor;
@@ -912,7 +915,7 @@ struct constexpr_ctx {
/* A table of all constexpr calls that have been evaluated by the
compiler in this translation unit. */
-static GTY (()) hash_table<constexpr_call_hasher> *constexpr_call_table;
+static GTY ((deletable)) hash_table<constexpr_call_hasher> *constexpr_call_table;
static tree cxx_eval_constant_expression (const constexpr_ctx *, tree,
bool, bool *, bool *, tree * = NULL);
@@ -962,6 +965,78 @@ maybe_initialize_constexpr_call_table (void)
constexpr_call_table = hash_table<constexpr_call_hasher>::create_ggc (101);
}
+/* The representation of a single node in the per-function freelist maintained
+ by FUNDEF_COPIES_TABLE. */
+
+struct fundef_copy
+{
+ tree body;
+ tree parms;
+ tree res;
+ fundef_copy *prev;
+};
+
+/* During constexpr CALL_EXPR evaluation, to avoid issues with sharing when
+ a function happens to get called recursively, we unshare the callee
+ function's body and evaluate this unshared copy instead of evaluating the
+ original body.
+
+ FUNDEF_COPIES_TABLE is a per-function freelist of these unshared function
+ copies. The underlying data structure of FUNDEF_COPIES_TABLE is a hash_map
+ that's keyed off of the original FUNCTION_DECL and whose value is the chain
+ of this function's unused copies awaiting reuse. */
+
+struct fundef_copies_table_t
+{
+ hash_map<tree, fundef_copy *> *map;
+};
+
+static GTY((deletable)) fundef_copies_table_t fundef_copies_table;
+
+/* Initialize FUNDEF_COPIES_TABLE if it's not initialized. */
+
+static void
+maybe_initialize_fundef_copies_table ()
+{
+ if (fundef_copies_table.map == NULL)
+ fundef_copies_table.map = hash_map<tree, fundef_copy *>::create_ggc (101);
+}
+
+/* Reuse a copy or create a new unshared copy of the function FUN.
+ Return this copy. */
+
+static fundef_copy *
+get_fundef_copy (tree fun)
+{
+ maybe_initialize_fundef_copies_table ();
+
+ fundef_copy *copy;
+ fundef_copy **slot = &fundef_copies_table.map->get_or_insert (fun, NULL);
+ if (*slot == NULL)
+ {
+ copy = ggc_alloc<fundef_copy> ();
+ copy->body = copy_fn (fun, copy->parms, copy->res);
+ copy->prev = NULL;
+ }
+ else
+ {
+ copy = *slot;
+ *slot = (*slot)->prev;
+ }
+
+ return copy;
+}
+
+/* Save the copy COPY of function FUN for later reuse by get_fundef_copy(). */
+
+static void
+save_fundef_copy (tree fun, fundef_copy *copy)
+{
+ fundef_copy **slot = &fundef_copies_table.map->get_or_insert (fun, NULL);
+ copy->prev = *slot;
+ *slot = copy;
+}
+
/* We have an expression tree T that represents a call, either CALL_EXPR
or AGGR_INIT_EXPR. If the call is lexically to a named function,
retrun the _DECL for that function. */
@@ -1076,6 +1151,30 @@ adjust_temp_type (tree type, tree temp)
return cp_fold_convert (type, temp);
}
+/* Callback for walk_tree used by unshare_constructor. */
+
+static tree
+find_constructor (tree *tp, int *walk_subtrees, void *)
+{
+ if (TYPE_P (*tp))
+ *walk_subtrees = 0;
+ if (TREE_CODE (*tp) == CONSTRUCTOR)
+ return *tp;
+ return NULL_TREE;
+}
+
+/* If T is a CONSTRUCTOR or an expression that has a CONSTRUCTOR node as a
+ subexpression, return an unshared copy of T. Otherwise return T. */
+
+static tree
+unshare_constructor (tree t)
+{
+ tree ctor = walk_tree (&t, find_constructor, NULL, NULL);
+ if (ctor != NULL_TREE)
+ return unshare_expr (t);
+ return t;
+}
+
/* Subroutine of cxx_eval_call_expression.
We are processing a call expression (either CALL_EXPR or
AGGR_INIT_EXPR) in the context of CTX. Evaluate
@@ -1236,19 +1335,39 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t,
return t;
}
+ constexpr_ctx new_ctx = *ctx;
+ if (DECL_CONSTRUCTOR_P (fun) && !ctx->object
+ && TREE_CODE (t) == AGGR_INIT_EXPR)
+ {
+ /* We want to have an initialization target for an AGGR_INIT_EXPR.
+ If we don't already have one in CTX, use the AGGR_INIT_EXPR_SLOT. */
+ new_ctx.object = AGGR_INIT_EXPR_SLOT (t);
+ tree ctor = new_ctx.ctor = build_constructor (DECL_CONTEXT (fun), NULL);
+ CONSTRUCTOR_NO_IMPLICIT_ZERO (ctor) = true;
+ ctx->values->put (new_ctx.object, ctor);
+ ctx = &new_ctx;
+ }
+
/* Shortcut trivial constructor/op=. */
if (trivial_fn_p (fun))
{
+ tree init = NULL_TREE;
if (call_expr_nargs (t) == 2)
- {
- tree arg = convert_from_reference (get_nth_callarg (t, 1));
- return cxx_eval_constant_expression (ctx, arg,
- lval, non_constant_p,
- overflow_p);
- }
+ init = convert_from_reference (get_nth_callarg (t, 1));
else if (TREE_CODE (t) == AGGR_INIT_EXPR
&& AGGR_INIT_ZERO_FIRST (t))
- return build_zero_init (DECL_CONTEXT (fun), NULL_TREE, false);
+ init = build_zero_init (DECL_CONTEXT (fun), NULL_TREE, false);
+ if (init)
+ {
+ tree op = get_nth_callarg (t, 0);
+ if (is_dummy_object (op))
+ op = ctx->object;
+ else
+ op = build1 (INDIRECT_REF, TREE_TYPE (TREE_TYPE (op)), op);
+ tree set = build2 (MODIFY_EXPR, TREE_TYPE (op), op, init);
+ return cxx_eval_constant_expression (ctx, set, lval,
+ non_constant_p, overflow_p);
+ }
}
/* We can't defer instantiating the function any longer. */
@@ -1270,7 +1389,10 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t,
{
if (!ctx->quiet)
{
- if (DECL_INITIAL (fun))
+ if (DECL_INITIAL (fun) == error_mark_node)
+ error_at (loc, "%qD called in a constant expression before its "
+ "definition is complete", fun);
+ else if (DECL_INITIAL (fun))
{
/* The definition of fun was somehow unsuitable. */
error_at (loc, "%qD called in a constant expression", fun);
@@ -1284,19 +1406,6 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t,
}
}
- constexpr_ctx new_ctx = *ctx;
- if (DECL_CONSTRUCTOR_P (fun) && !ctx->object
- && TREE_CODE (t) == AGGR_INIT_EXPR)
- {
- /* We want to have an initialization target for an AGGR_INIT_EXPR.
- If we don't already have one in CTX, use the AGGR_INIT_EXPR_SLOT. */
- new_ctx.object = AGGR_INIT_EXPR_SLOT (t);
- tree ctor = new_ctx.ctor = build_constructor (DECL_CONTEXT (fun), NULL);
- CONSTRUCTOR_NO_IMPLICIT_ZERO (ctor) = true;
- ctx->values->put (new_ctx.object, ctor);
- ctx = &new_ctx;
- }
-
bool non_constant_args = false;
cxx_bind_parameters_in_call (ctx, t, &new_call,
non_constant_p, overflow_p, &non_constant_args);
@@ -1352,10 +1461,13 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t,
if (!result || result == error_mark_node)
{
gcc_assert (DECL_SAVED_TREE (fun));
- tree parms, res;
+ tree body, parms, res;
- /* Unshare the whole function body. */
- tree body = copy_fn (fun, parms, res);
+ /* Reuse or create a new unshared copy of this function's body. */
+ fundef_copy *copy = get_fundef_copy (fun);
+ body = copy->body;
+ parms = copy->parms;
+ res = copy->res;
/* Associate the bindings with the remapped parms. */
tree bound = new_call.bindings;
@@ -1365,6 +1477,8 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t,
tree oparm = TREE_PURPOSE (bound);
tree arg = TREE_VALUE (bound);
gcc_assert (DECL_NAME (remapped) == DECL_NAME (oparm));
+ /* Don't share a CONSTRUCTOR that might be changed. */
+ arg = unshare_constructor (arg);
ctx->values->put (remapped, arg);
bound = TREE_CHAIN (bound);
remapped = DECL_CHAIN (remapped);
@@ -1382,8 +1496,14 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t,
else
ctx->values->put (res, NULL_TREE);
+ /* Track the callee's evaluated SAVE_EXPRs so that we can forget
+ their values after the call. */
+ constexpr_ctx ctx_with_save_exprs = *ctx;
+ hash_set<tree> save_exprs;
+ ctx_with_save_exprs.save_exprs = &save_exprs;
+
tree jump_target = NULL_TREE;
- cxx_eval_constant_expression (ctx, body,
+ cxx_eval_constant_expression (&ctx_with_save_exprs, body,
lval, non_constant_p, overflow_p,
&jump_target);
@@ -1408,6 +1528,11 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t,
}
}
+ /* Forget the saved values of the callee's SAVE_EXPRs. */
+ for (hash_set<tree>::iterator iter = save_exprs.begin();
+ iter != save_exprs.end(); ++iter)
+ ctx_with_save_exprs.values->remove (*iter);
+
/* Remove the parms/result from the values map. Is it worth
bothering to do this when the map itself is only live for
one constexpr evaluation? If so, maybe also clear out
@@ -1417,11 +1542,14 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t,
ctx->values->remove (slot);
for (tree parm = parms; parm; parm = TREE_CHAIN (parm))
ctx->values->remove (parm);
+
+ /* Make the unshared function copy we used available for re-use. */
+ save_fundef_copy (fun, copy);
}
if (result == error_mark_node)
*non_constant_p = true;
- if (*non_constant_p)
+ if (*non_constant_p || *overflow_p)
result = error_mark_node;
else if (!result)
result = void_node;
@@ -1430,7 +1558,7 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t,
}
pop_cx_call_context ();
- return unshare_expr (result);
+ return unshare_constructor (result);
}
/* FIXME speed this up, it's taking 16% of compile time on sieve testcase. */
@@ -1610,15 +1738,14 @@ cxx_eval_binary_expression (const constexpr_ctx *ctx, tree t,
tree lhs, rhs;
lhs = cxx_eval_constant_expression (ctx, orig_lhs, /*lval*/false,
non_constant_p, overflow_p);
- /* Don't VERIFY_CONSTANT if this might be dealing with a pointer to
- a local array in a constexpr function. */
- bool ptr = POINTER_TYPE_P (TREE_TYPE (lhs));
- if (!ptr)
- VERIFY_CONSTANT (lhs);
+ /* Don't VERIFY_CONSTANT here, it's unnecessary and will break pointer
+ subtraction. */
+ if (*non_constant_p)
+ return t;
rhs = cxx_eval_constant_expression (ctx, orig_rhs, /*lval*/false,
non_constant_p, overflow_p);
- if (!ptr)
- VERIFY_CONSTANT (rhs);
+ if (*non_constant_p)
+ return t;
location_t loc = EXPR_LOCATION (t);
enum tree_code code = TREE_CODE (t);
@@ -1651,6 +1778,9 @@ cxx_eval_binary_expression (const constexpr_ctx *ctx, tree t,
}
else if (cxx_eval_check_shift_p (loc, ctx, code, type, lhs, rhs))
*non_constant_p = true;
+ /* Don't VERIFY_CONSTANT if this might be dealing with a pointer to
+ a local array in a constexpr function. */
+ bool ptr = POINTER_TYPE_P (TREE_TYPE (lhs));
if (!ptr)
VERIFY_CONSTANT (r);
return r;
@@ -1774,7 +1904,7 @@ find_array_ctor_elt (tree ary, tree dindex, bool insert = false)
/* Append the element we want to insert. */
++middle;
e.index = dindex;
- e.value = unshare_expr (elt.value);
+ e.value = unshare_constructor (elt.value);
vec_safe_insert (CONSTRUCTOR_ELTS (ary), middle, e);
}
else
@@ -1790,7 +1920,7 @@ find_array_ctor_elt (tree ary, tree dindex, bool insert = false)
e.index = hi;
else
e.index = build2 (RANGE_EXPR, sizetype, new_lo, hi);
- e.value = unshare_expr (elt.value);
+ e.value = unshare_constructor (elt.value);
vec_safe_insert (CONSTRUCTOR_ELTS (ary), middle+1, e);
}
}
@@ -1808,6 +1938,30 @@ find_array_ctor_elt (tree ary, tree dindex, bool insert = false)
return -1;
}
+/* Under the control of CTX, issue a detailed diagnostic for
+ an out-of-bounds subscript INDEX into the expression ARRAY. */
+
+static void
+diag_array_subscript (const constexpr_ctx *ctx, tree array, tree index)
+{
+ if (!ctx->quiet)
+ {
+ tree arraytype = TREE_TYPE (array);
+
+ /* Convert the unsigned array subscript to a signed integer to avoid
+ printing huge numbers for small negative values. */
+ tree sidx = fold_convert (ssizetype, index);
+ if (DECL_P (array))
+ {
+ error ("array subscript value %qE is outside the bounds "
+ "of array %qD of type %qT", sidx, array, arraytype);
+ inform (DECL_SOURCE_LOCATION (array), "declared here");
+ }
+ else
+ error ("array subscript value %qE is outside the bounds "
+ "of array type %qT", sidx, arraytype);
+ }
+}
/* Subroutine of cxx_eval_constant_expression.
Attempt to reduce a reference to an array slot. */
@@ -1856,8 +2010,7 @@ cxx_eval_array_reference (const constexpr_ctx *ctx, tree t,
if (!tree_fits_shwi_p (index)
|| (i = tree_to_shwi (index)) < 0)
{
- if (!ctx->quiet)
- error ("negative array subscript");
+ diag_array_subscript (ctx, ary, index);
*non_constant_p = true;
return t;
}
@@ -1869,8 +2022,7 @@ cxx_eval_array_reference (const constexpr_ctx *ctx, tree t,
VERIFY_CONSTANT (nelts);
if (!tree_int_cst_lt (index, nelts))
{
- if (!ctx->quiet)
- error ("array subscript out of bound");
+ diag_array_subscript (ctx, ary, index);
*non_constant_p = true;
return t;
}
@@ -1983,11 +2135,16 @@ cxx_eval_component_reference (const constexpr_ctx *ctx, tree t,
return t;
}
+ /* We only create a CONSTRUCTOR for a subobject when we modify it, so empty
+ classes never get represented; throw together a value now. */
+ if (is_really_empty_class (TREE_TYPE (t)))
+ return build_constructor (TREE_TYPE (t), NULL);
+
if (CONSTRUCTOR_NO_IMPLICIT_ZERO (whole))
{
/* 'whole' is part of the aggregate initializer we're currently
building; if there's no initializer for this member yet, that's an
- error. */
+ error. */
if (!ctx->quiet)
error ("accessing uninitialized member %qD", part);
*non_constant_p = true;
@@ -2234,8 +2391,19 @@ cxx_eval_bare_aggregate (const constexpr_ctx *ctx, tree t,
vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (t);
bool changed = false;
gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (t));
+ tree type = TREE_TYPE (t);
- verify_ctor_sanity (ctx, TREE_TYPE (t));
+ constexpr_ctx new_ctx;
+ if (TYPE_PTRMEMFUNC_P (type) || VECTOR_TYPE_P (type))
+ {
+ /* We don't really need the ctx->ctor business for a PMF or
+ vector, but it's simpler to use the same code. */
+ new_ctx = *ctx;
+ new_ctx.ctor = build_constructor (type, NULL);
+ new_ctx.object = NULL_TREE;
+ ctx = &new_ctx;
+ };
+ verify_ctor_sanity (ctx, type);
vec<constructor_elt, va_gc> **p = &CONSTRUCTOR_ELTS (ctx->ctor);
vec_alloc (*p, vec_safe_length (v));
@@ -2246,7 +2414,6 @@ cxx_eval_bare_aggregate (const constexpr_ctx *ctx, tree t,
FOR_EACH_CONSTRUCTOR_ELT (v, i, index, value)
{
tree orig_value = value;
- constexpr_ctx new_ctx;
init_subob_ctx (ctx, new_ctx, index, value);
if (new_ctx.ctor != ctx->ctor)
/* If we built a new CONSTRUCTOR, attach it now so that other
@@ -2300,7 +2467,7 @@ cxx_eval_bare_aggregate (const constexpr_ctx *ctx, tree t,
CONSTRUCTOR_NO_IMPLICIT_ZERO (t) = false;
TREE_CONSTANT (t) = constant_p;
TREE_SIDE_EFFECTS (t) = side_effects_p;
- if (VECTOR_TYPE_P (TREE_TYPE (t)))
+ if (VECTOR_TYPE_P (type))
t = fold (t);
return t;
}
@@ -2357,6 +2524,7 @@ cxx_eval_vec_init_1 (const constexpr_ctx *ctx, tree atype, tree init,
{
tree idx = build_int_cst (size_type_node, i);
tree eltinit;
+ bool reuse = false;
constexpr_ctx new_ctx;
init_subob_ctx (ctx, new_ctx, idx, pre_init ? init : elttype);
if (new_ctx.ctor != ctx->ctor)
@@ -2365,7 +2533,10 @@ cxx_eval_vec_init_1 (const constexpr_ctx *ctx, tree atype, tree init,
{
/* A multidimensional array; recurse. */
if (value_init || init == NULL_TREE)
- eltinit = NULL_TREE;
+ {
+ eltinit = NULL_TREE;
+ reuse = i == 0;
+ }
else
eltinit = cp_build_array_ref (input_location, init, idx,
tf_warning_or_error);
@@ -2377,9 +2548,9 @@ cxx_eval_vec_init_1 (const constexpr_ctx *ctx, tree atype, tree init,
{
/* Initializing an element using value or default initialization
we just pre-built above. */
- eltinit = (cxx_eval_constant_expression
- (&new_ctx, init,
- lval, non_constant_p, overflow_p));
+ eltinit = cxx_eval_constant_expression (&new_ctx, init, lval,
+ non_constant_p, overflow_p);
+ reuse = i == 0;
}
else
{
@@ -2405,6 +2576,23 @@ cxx_eval_vec_init_1 (const constexpr_ctx *ctx, tree atype, tree init,
}
else
CONSTRUCTOR_APPEND_ELT (*p, idx, eltinit);
+ /* Reuse the result of cxx_eval_constant_expression call
+ from the first iteration to all others if it is a constant
+ initializer that doesn't require relocations. */
+ if (reuse
+ && max > 1
+ && (initializer_constant_valid_p (eltinit, TREE_TYPE (eltinit))
+ == null_pointer_node))
+ {
+ if (new_ctx.ctor != ctx->ctor)
+ eltinit = new_ctx.ctor;
+ for (i = 1; i < max; ++i)
+ {
+ idx = build_int_cst (size_type_node, i);
+ CONSTRUCTOR_APPEND_ELT (*p, idx, unshare_constructor (eltinit));
+ }
+ break;
+ }
}
if (!*non_constant_p)
@@ -2734,7 +2922,8 @@ non_const_var_error (tree r)
inform (DECL_SOURCE_LOCATION (r),
"%q#D is volatile", r);
else if (!DECL_INITIAL (r)
- || !TREE_CONSTANT (DECL_INITIAL (r)))
+ || !TREE_CONSTANT (DECL_INITIAL (r))
+ || !DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r))
inform (DECL_SOURCE_LOCATION (r),
"%qD was not initialized with a constant "
"expression", r);
@@ -2893,16 +3082,39 @@ cxx_eval_store_expression (const constexpr_ctx *ctx, tree t,
else
{
gcc_assert (TREE_CODE (index) == FIELD_DECL);
- for (unsigned HOST_WIDE_INT idx = 0;
+
+ /* We must keep the CONSTRUCTOR's ELTS in FIELD order.
+ Usually we meet initializers in that order, but it is
+ possible for base types to be placed not in program
+ order. */
+ tree fields = TYPE_FIELDS (DECL_CONTEXT (index));
+ unsigned HOST_WIDE_INT idx;
+
+ for (idx = 0;
vec_safe_iterate (CONSTRUCTOR_ELTS (*valp), idx, &cep);
- idx++)
- if (index == cep->index)
- break;
- if (!cep)
+ idx++, fields = DECL_CHAIN (fields))
{
- constructor_elt ce = { index, NULL_TREE };
- cep = vec_safe_push (CONSTRUCTOR_ELTS (*valp), ce);
+ if (index == cep->index)
+ goto found;
+
+ /* The field we're initializing must be on the field
+ list. Look to see if it is present before the
+ field the current ELT initializes. */
+ for (; fields != cep->index; fields = DECL_CHAIN (fields))
+ if (index == fields)
+ goto insert;
}
+
+ /* We fell off the end of the CONSTRUCTOR, so insert a new
+ entry at the end. */
+ insert:
+ {
+ constructor_elt ce = { index, NULL_TREE };
+
+ vec_safe_insert (CONSTRUCTOR_ELTS (*valp), idx, ce);
+ cep = CONSTRUCTOR_ELT (*valp, idx);
+ }
+ found:;
}
valp = &cep->value;
}
@@ -2924,40 +3136,37 @@ cxx_eval_store_expression (const constexpr_ctx *ctx, tree t,
init = cxx_eval_constant_expression (&new_ctx, init, false,
non_constant_p, overflow_p);
+ /* Don't share a CONSTRUCTOR that might be changed later. */
+ init = unshare_constructor (init);
if (target == object)
+ /* The hash table might have moved since the get earlier. */
+ valp = ctx->values->get (object);
+
+ if (TREE_CODE (init) == CONSTRUCTOR)
{
- /* The hash table might have moved since the get earlier. */
- valp = ctx->values->get (object);
- if (TREE_CODE (init) == CONSTRUCTOR)
- {
- /* An outer ctx->ctor might be pointing to *valp, so replace
- its contents. */
- CONSTRUCTOR_ELTS (*valp) = CONSTRUCTOR_ELTS (init);
- TREE_CONSTANT (*valp) = TREE_CONSTANT (init);
- TREE_SIDE_EFFECTS (*valp) = TREE_SIDE_EFFECTS (init);
- }
- else
- *valp = init;
+ /* An outer ctx->ctor might be pointing to *valp, so replace
+ its contents. */
+ CONSTRUCTOR_ELTS (*valp) = CONSTRUCTOR_ELTS (init);
+ TREE_CONSTANT (*valp) = TREE_CONSTANT (init);
+ TREE_SIDE_EFFECTS (*valp) = TREE_SIDE_EFFECTS (init);
}
else
- {
- *valp = init;
-
- /* Update TREE_CONSTANT and TREE_SIDE_EFFECTS on enclosing
- CONSTRUCTORs. */
- tree elt;
- unsigned i;
- bool c = TREE_CONSTANT (init);
- bool s = TREE_SIDE_EFFECTS (init);
- if (!c || s)
- FOR_EACH_VEC_SAFE_ELT (ctors, i, elt)
- {
- if (!c)
- TREE_CONSTANT (elt) = false;
- if (s)
- TREE_SIDE_EFFECTS (elt) = true;
- }
- }
+ *valp = init;
+
+ /* Update TREE_CONSTANT and TREE_SIDE_EFFECTS on enclosing
+ CONSTRUCTORs, if any. */
+ tree elt;
+ unsigned i;
+ bool c = TREE_CONSTANT (init);
+ bool s = TREE_SIDE_EFFECTS (init);
+ if (!c || s)
+ FOR_EACH_VEC_SAFE_ELT (ctors, i, elt)
+ {
+ if (!c)
+ TREE_CONSTANT (elt) = false;
+ if (s)
+ TREE_SIDE_EFFECTS (elt) = true;
+ }
release_tree_vector (ctors);
if (*non_constant_p)
@@ -3153,16 +3362,27 @@ cxx_eval_loop_expr (const constexpr_ctx *ctx, tree t,
bool *non_constant_p, bool *overflow_p,
tree *jump_target)
{
+ constexpr_ctx new_ctx = *ctx;
+
tree body = TREE_OPERAND (t, 0);
- while (true)
+ do
{
- cxx_eval_statement_list (ctx, body,
+ hash_set<tree> save_exprs;
+ new_ctx.save_exprs = &save_exprs;
+
+ cxx_eval_statement_list (&new_ctx, body,
non_constant_p, overflow_p, jump_target);
- if (returns (jump_target) || breaks (jump_target) || *non_constant_p)
- break;
+
+ /* Forget saved values of SAVE_EXPRs. */
+ for (hash_set<tree>::iterator iter = save_exprs.begin();
+ iter != save_exprs.end(); ++iter)
+ new_ctx.values->remove (*iter);
}
+ while (!returns (jump_target) && !breaks (jump_target) && !*non_constant_p);
+
if (breaks (jump_target))
*jump_target = NULL_TREE;
+
return NULL_TREE;
}
@@ -3268,8 +3488,13 @@ cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t,
}
if (CONSTANT_CLASS_P (t))
{
- if (TREE_OVERFLOW (t) && (!flag_permissive || ctx->quiet))
- *overflow_p = true;
+ if (TREE_OVERFLOW (t))
+ {
+ if (!ctx->quiet)
+ permerror (input_location, "overflow in constant expression");
+ if (!flag_permissive || ctx->quiet)
+ *overflow_p = true;
+ }
return t;
}
@@ -3363,6 +3588,8 @@ cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t,
init = cxx_eval_constant_expression (ctx, init,
false,
non_constant_p, overflow_p);
+ /* Don't share a CONSTRUCTOR that might be changed. */
+ init = unshare_constructor (init);
ctx->values->put (r, init);
}
else if (ctx == &new_ctx)
@@ -3407,6 +3634,7 @@ cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t,
if (lval)
{
tree slot = TARGET_EXPR_SLOT (t);
+ r = unshare_constructor (r);
ctx->values->put (slot, r);
return slot;
}
@@ -3441,6 +3669,8 @@ cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t,
r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0), false,
non_constant_p, overflow_p);
ctx->values->put (t, r);
+ if (ctx->save_exprs)
+ ctx->save_exprs->add (t);
}
break;
@@ -3864,7 +4094,10 @@ cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant,
bool non_constant_p = false;
bool overflow_p = false;
hash_map<tree,tree> map;
- constexpr_ctx ctx = { NULL, &map, NULL, NULL, allow_non_constant, strict };
+
+ constexpr_ctx ctx = { NULL, &map, NULL, NULL, NULL,
+ allow_non_constant, strict };
+
tree type = initialized_type (t);
tree r = t;
if (AGGREGATE_TYPE_P (type) || VECTOR_TYPE_P (type))
@@ -3931,6 +4164,12 @@ cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant,
if (!non_constant_p && overflow_p)
non_constant_p = true;
+ /* Unshare the result unless it's a CONSTRUCTOR in which case it's already
+ unshared. */
+ bool should_unshare = true;
+ if (r == t || TREE_CODE (r) == CONSTRUCTOR)
+ should_unshare = false;
+
if (non_constant_p && !allow_non_constant)
return error_mark_node;
else if (non_constant_p && TREE_CONSTANT (r))
@@ -3947,6 +4186,9 @@ cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant,
else if (non_constant_p || r == t)
return t;
+ if (should_unshare)
+ r = unshare_expr (r);
+
if (TREE_CODE (r) == CONSTRUCTOR && CLASS_TYPE_P (TREE_TYPE (r)))
{
if (TREE_CODE (t) == TARGET_EXPR
@@ -3972,7 +4214,9 @@ is_sub_constant_expr (tree t)
bool non_constant_p = false;
bool overflow_p = false;
hash_map <tree, tree> map;
- constexpr_ctx ctx = { NULL, &map, NULL, NULL, true, true };
+
+ constexpr_ctx ctx = { NULL, &map, NULL, NULL, NULL, true, true };
+
cxx_eval_constant_expression (&ctx, t, false, &non_constant_p,
&overflow_p);
return !non_constant_p && !overflow_p;
@@ -4093,7 +4337,7 @@ maybe_constant_value_1 (tree t, tree decl)
return r;
}
-static GTY((cache, deletable)) cache_map cv_cache;
+static GTY((deletable)) hash_map<tree, tree> *cv_cache;
/* If T is a constant expression, returns its reduced value.
Otherwise, if T does not have TREE_CONSTANT set, returns T.
@@ -4102,21 +4346,32 @@ static GTY((cache, deletable)) cache_map cv_cache;
tree
maybe_constant_value (tree t, tree decl)
{
- tree ret = cv_cache.get (t);
- if (!ret)
- {
- ret = maybe_constant_value_1 (t, decl);
- cv_cache.put (t, ret);
- }
+ if (cv_cache == NULL)
+ cv_cache = hash_map<tree, tree>::create_ggc (101);
+
+ if (tree *cached = cv_cache->get (t))
+ return *cached;
+
+ tree ret = maybe_constant_value_1 (t, decl);
+ cv_cache->put (t, ret);
return ret;
}
+/* Dispose of the whole CV_CACHE. */
+
+static void
+clear_cv_cache (void)
+{
+ if (cv_cache != NULL)
+ cv_cache->empty ();
+}
+
/* Dispose of the whole CV_CACHE and FOLD_CACHE. */
void
clear_cv_and_fold_caches (void)
{
- gt_cleare_cache (cv_cache);
+ clear_cv_cache ();
clear_fold_cache ();
}
@@ -4850,8 +5105,16 @@ potential_constant_expression_1 (tree t, bool want_rval, bool strict,
return false;
return true;
- case IF_STMT:
case COND_EXPR:
+ if (COND_EXPR_IS_VEC_DELETE (t))
+ {
+ if (flags & tf_error)
+ error_at (location_of (t),
+ "%<delete[]%> is not a constant-expression");
+ return false;
+ }
+ /* Fall through. */
+ case IF_STMT:
case VEC_COND_EXPR:
/* If the condition is a known constant, we know which of the legs we
care about; otherwise we only require that the condition and
diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c
index d83e9de..13f7b7c 100644
--- a/gcc/cp/cp-gimplify.c
+++ b/gcc/cp/cp-gimplify.c
@@ -386,7 +386,8 @@ genericize_omp_for_stmt (tree *stmt_p, int *walk_subtrees, void *data)
tree clab = begin_bc_block (bc_continue, locus);
cp_walk_tree (&OMP_FOR_BODY (stmt), cp_genericize_r, data, NULL);
- cp_walk_tree (&OMP_FOR_CLAUSES (stmt), cp_genericize_r, data, NULL);
+ if (TREE_CODE (stmt) != OMP_TASKLOOP)
+ cp_walk_tree (&OMP_FOR_CLAUSES (stmt), cp_genericize_r, data, NULL);
cp_walk_tree (&OMP_FOR_INIT (stmt), cp_genericize_r, data, NULL);
cp_walk_tree (&OMP_FOR_COND (stmt), cp_genericize_r, data, NULL);
cp_walk_tree (&OMP_FOR_INCR (stmt), cp_genericize_r, data, NULL);
@@ -1021,10 +1022,16 @@ cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data)
&& omp_var_to_track (stmt))
omp_cxx_notice_variable (wtd->omp_ctx, stmt);
- if (is_invisiref_parm (stmt)
- /* Don't dereference parms in a thunk, pass the references through. */
- && !(DECL_THUNK_P (current_function_decl)
- && TREE_CODE (stmt) == PARM_DECL))
+ /* Don't dereference parms in a thunk, pass the references through. */
+ if ((TREE_CODE (stmt) == CALL_EXPR && CALL_FROM_THUNK_P (stmt))
+ || (TREE_CODE (stmt) == AGGR_INIT_EXPR && AGGR_INIT_FROM_THUNK_P (stmt)))
+ {
+ *walk_subtrees = 0;
+ return NULL;
+ }
+
+ /* Otherwise, do dereference invisible reference parms. */
+ if (is_invisiref_parm (stmt))
{
*stmt_p = convert_from_reference (stmt);
*walk_subtrees = 0;
@@ -1266,7 +1273,9 @@ cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data)
if (TREE_CODE (d) == VAR_DECL)
gcc_assert (CP_DECL_THREAD_LOCAL_P (d) == DECL_THREAD_LOCAL_P (d));
}
- else if (TREE_CODE (stmt) == OMP_PARALLEL || TREE_CODE (stmt) == OMP_TASK)
+ else if (TREE_CODE (stmt) == OMP_PARALLEL
+ || TREE_CODE (stmt) == OMP_TASK
+ || TREE_CODE (stmt) == OMP_TASKLOOP)
{
struct cp_genericize_omp_taskreg omp_ctx;
tree c, decl;
@@ -1306,7 +1315,10 @@ cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data)
default:
break;
}
- cp_walk_tree (&OMP_BODY (stmt), cp_genericize_r, data, NULL);
+ if (TREE_CODE (stmt) == OMP_TASKLOOP)
+ genericize_omp_for_stmt (stmt_p, walk_subtrees, data);
+ else
+ cp_walk_tree (&OMP_BODY (stmt), cp_genericize_r, data, NULL);
wtd->omp_ctx = omp_ctx.outer;
splay_tree_delete (omp_ctx.variables);
}
@@ -1374,8 +1386,7 @@ cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data)
genericize_break_stmt (stmt_p);
else if (TREE_CODE (stmt) == OMP_FOR
|| TREE_CODE (stmt) == OMP_SIMD
- || TREE_CODE (stmt) == OMP_DISTRIBUTE
- || TREE_CODE (stmt) == OMP_TASKLOOP)
+ || TREE_CODE (stmt) == OMP_DISTRIBUTE)
genericize_omp_for_stmt (stmt_p, walk_subtrees, data);
else if ((flag_sanitize
& (SANITIZE_NULL | SANITIZE_ALIGNMENT | SANITIZE_VPTR))
@@ -1894,14 +1905,15 @@ c_fully_fold (tree x, bool /*in_init*/, bool */*maybe_const*/)
return cp_fold_rvalue (x);
}
-static GTY((cache, deletable)) cache_map fold_cache;
+static GTY((deletable)) hash_map<tree, tree> *fold_cache;
/* Dispose of the whole FOLD_CACHE. */
void
clear_fold_cache (void)
{
- gt_cleare_cache (fold_cache);
+ if (fold_cache != NULL)
+ fold_cache->empty ();
}
/* This function tries to fold an expression X.
@@ -1931,8 +1943,11 @@ cp_fold (tree x)
if (DECL_P (x) || CONSTANT_CLASS_P (x))
return x;
- if (tree cached = fold_cache.get (x))
- return cached;
+ if (fold_cache == NULL)
+ fold_cache = hash_map<tree, tree>::create_ggc (101);
+
+ if (tree *cached = fold_cache->get (x))
+ return *cached;
code = TREE_CODE (x);
switch (code)
@@ -1990,7 +2005,6 @@ cp_fold (tree x)
case BIT_NOT_EXPR:
case TRUTH_NOT_EXPR:
case FIXED_CONVERT_EXPR:
- case UNARY_PLUS_EXPR:
case INDIRECT_REF:
loc = EXPR_LOCATION (x);
@@ -2010,6 +2024,14 @@ cp_fold (tree x)
|| !VOID_TYPE_P (TREE_TYPE (TREE_OPERAND (x, 0))));
break;
+ case UNARY_PLUS_EXPR:
+ op0 = cp_fold_rvalue (TREE_OPERAND (x, 0));
+ if (op0 == error_mark_node)
+ x = error_mark_node;
+ else
+ x = fold_convert (TREE_TYPE (x), op0);
+ break;
+
case POSTDECREMENT_EXPR:
case POSTINCREMENT_EXPR:
case INIT_EXPR:
@@ -2068,6 +2090,25 @@ cp_fold (tree x)
else
x = fold (x);
+ if (TREE_NO_WARNING (org_x)
+ && warn_nonnull_compare
+ && COMPARISON_CLASS_P (org_x))
+ {
+ if (x == error_mark_node || TREE_CODE (x) == INTEGER_CST)
+ ;
+ else if (COMPARISON_CLASS_P (x))
+ TREE_NO_WARNING (x) = 1;
+ /* Otherwise give up on optimizing these, let GIMPLE folders
+ optimize those later on. */
+ else if (op0 != TREE_OPERAND (org_x, 0)
+ || op1 != TREE_OPERAND (org_x, 1))
+ {
+ x = build2_loc (loc, code, TREE_TYPE (org_x), op0, op1);
+ TREE_NO_WARNING (x) = 1;
+ }
+ else
+ x = org_x;
+ }
break;
case VEC_COND_EXPR:
@@ -2098,6 +2139,12 @@ cp_fold (tree x)
else
x = fold (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);
+
break;
case CALL_EXPR:
@@ -2151,7 +2198,8 @@ cp_fold (tree x)
TODO:
Do constexpr expansion of expressions where the call itself is not
constant, but the call followed by an INDIRECT_REF is. */
- if (callee && DECL_DECLARED_CONSTEXPR_P (callee))
+ if (callee && DECL_DECLARED_CONSTEXPR_P (callee)
+ && !flag_no_inline)
r = maybe_constant_value (x);
optimize = sv;
@@ -2254,10 +2302,10 @@ cp_fold (tree x)
return org_x;
}
- fold_cache.put (org_x, x);
+ fold_cache->put (org_x, x);
/* Prevent that we try to fold an already folded result again. */
if (x != org_x)
- fold_cache.put (x, x);
+ fold_cache->put (x, x);
return x;
}
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index 7800ae8..0f7e08f 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -107,6 +107,7 @@ operator == (const cp_expr &lhs, tree rhs)
/* Usage of TREE_LANG_FLAG_?:
0: IDENTIFIER_MARKED (IDENTIFIER_NODEs)
NEW_EXPR_USE_GLOBAL (in NEW_EXPR).
+ COND_EXPR_IS_VEC_DELETE (in COND_EXPR).
DELETE_EXPR_USE_GLOBAL (in DELETE_EXPR).
COMPOUND_EXPR_OVERLOADED (in COMPOUND_EXPR).
CLEANUP_P (in TRY_BLOCK)
@@ -404,6 +405,9 @@ typedef struct ptrmem_cst * ptrmem_cst_t;
#define STMT_EXPR_NO_SCOPE(NODE) \
TREE_LANG_FLAG_0 (STMT_EXPR_CHECK (NODE))
+#define COND_EXPR_IS_VEC_DELETE(NODE) \
+ TREE_LANG_FLAG_0 (COND_EXPR_CHECK (NODE))
+
/* Returns nonzero iff TYPE1 and TYPE2 are the same type, in the usual
sense of `same'. */
#define same_type_p(TYPE1, TYPE2) \
@@ -1984,7 +1988,7 @@ struct GTY(()) lang_type {
#define CLASSTYPE_VBASECLASSES(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->vbases)
/* The type corresponding to NODE when NODE is used as a base class,
- i.e., NODE without virtual base classes. */
+ i.e., NODE without virtual base classes or tail padding. */
#define CLASSTYPE_AS_BASE(NODE) (LANG_TYPE_CLASS_CHECK (NODE)->as_base)
@@ -2522,12 +2526,14 @@ struct GTY(()) lang_decl {
*/
#define FOR_EACH_CLONE(CLONE, FN) \
- if (TREE_CODE (FN) == FUNCTION_DECL \
- && (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (FN) \
- || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (FN))) \
- for (CLONE = DECL_CHAIN (FN); \
- CLONE && DECL_CLONED_FUNCTION_P (CLONE); \
- CLONE = DECL_CHAIN (CLONE))
+ if (!(TREE_CODE (FN) == FUNCTION_DECL \
+ && (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (FN) \
+ || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (FN))))\
+ ; \
+ else \
+ for (CLONE = DECL_CHAIN (FN); \
+ CLONE && DECL_CLONED_FUNCTION_P (CLONE); \
+ CLONE = DECL_CHAIN (CLONE))
/* Nonzero if NODE has DECL_DISCRIMINATOR and not DECL_ACCESS. */
#define DECL_DISCRIMINATOR_P(NODE) \
@@ -3393,7 +3399,7 @@ extern void decl_shadowed_for_var_insert (tree, tree);
TREE_LANG_FLAG_0 (STRING_CST_CHECK (NODE))
/* Indicates whether a COMPONENT_REF has been parenthesized, or an
- INDIRECT_REF comes from parenthesizing a VAR_DECL. Currently only set
+ INDIRECT_REF comes from parenthesizing a _DECL. Currently only set
some of the time in C++14 mode. */
#define REF_PARENTHESIZED_P(NODE) \
@@ -3409,6 +3415,11 @@ extern void decl_shadowed_for_var_insert (tree, tree);
#define AGGR_INIT_ZERO_FIRST(NODE) \
TREE_LANG_FLAG_2 (AGGR_INIT_EXPR_CHECK (NODE))
+/* Nonzero means that the call is the jump from a thunk to the
+ thunked-to function. */
+#define AGGR_INIT_FROM_THUNK_P(NODE) \
+ (AGGR_INIT_EXPR_CHECK (NODE)->base.protected_flag)
+
/* AGGR_INIT_EXPR accessors. These are equivalent to the CALL_EXPR
accessors, except for AGGR_INIT_EXPR_SLOT (which takes the place of
CALL_EXPR_STATIC_CHAIN). */
@@ -5516,45 +5527,9 @@ extern cp_parameter_declarator *no_parameters;
/* True if we saw "#pragma GCC java_exceptions". */
extern bool pragma_java_exceptions;
-/* Data structure for a mapping from tree to tree that's only used as a cache;
- we don't GC-mark trees in the map, and we clear the map when collecting
- garbage. Global variables of this type must be marked
- GTY((cache,deletable)) so that the gt_cleare_cache function is called by
- ggc_collect but we don't try to load the map pointer from a PCH.
-
- FIXME improve to use keep_cache_entry. */
-class cache_map
-{
- /* Use a lazily initialized pointer rather than a map member since a
- hash_map can't be constructed in a static initializer. */
- hash_map<tree, tree> *map;
-
-public:
- tree get (tree key)
- {
- if (map)
- if (tree *slot = map->get (key))
- return *slot;
- return NULL_TREE;
- }
-
- bool put (tree key, tree val)
- {
- if (!map)
- map = new hash_map<tree, tree>;
- return map->put (key, val);
- }
-
- friend inline void gt_cleare_cache (cache_map &cm)
- {
- if (cm.map)
- cm.map->empty();
- }
-};
-
/* in call.c */
extern bool check_dtor_name (tree, tree);
-bool magic_varargs_p (tree);
+int magic_varargs_p (tree);
extern tree build_conditional_expr (location_t, tree, tree, tree,
tsubst_flags_t);
@@ -5612,6 +5587,7 @@ extern tree make_temporary_var_for_ref_to_temp (tree, tree);
extern bool type_has_extended_temps (tree);
extern tree strip_top_quals (tree);
extern bool reference_related_p (tree, tree);
+extern int remaining_arguments (tree);
extern tree perform_implicit_conversion (tree, tree, tsubst_flags_t);
extern tree perform_implicit_conversion_flags (tree, tree, tsubst_flags_t, int);
extern tree build_integral_nontype_arg_conv (tree, tree, tsubst_flags_t);
@@ -5628,6 +5604,7 @@ extern tree get_function_version_dispatcher (tree);
/* in class.c */
extern tree build_vfield_ref (tree, tree);
+extern tree build_if_in_charge (tree true_stmt, tree false_stmt = void_node);
extern tree build_base_path (enum tree_code, tree,
tree, int, tsubst_flags_t);
extern tree convert_to_base (tree, tree, bool, bool,
@@ -5666,6 +5643,7 @@ extern void invalidate_class_lookup_cache (void);
extern void maybe_note_name_used_in_class (tree, tree);
extern void note_name_declared_in_class (tree, tree);
extern tree get_vtbl_decl_for_binfo (tree);
+extern bool vptr_via_virtual_p (tree);
extern void debug_class (tree);
extern void debug_thunks (tree);
extern void set_linkage_according_to_type (tree, tree);
@@ -5834,8 +5812,6 @@ extern tree fndecl_declared_return_type (tree);
extern bool undeduced_auto_decl (tree);
extern void require_deduced_type (tree);
-extern bool defer_mark_used_calls;
-extern GTY(()) vec<tree, va_gc> *deferred_mark_used_calls;
extern tree finish_case_label (location_t, tree, tree);
extern tree cxx_maybe_build_cleanup (tree, tsubst_flags_t);
@@ -6360,6 +6336,7 @@ extern tree finish_label_stmt (tree);
extern void finish_label_decl (tree);
extern cp_expr finish_parenthesized_expr (cp_expr);
extern tree force_paren_expr (tree);
+extern tree maybe_undo_parenthesized_ref (tree);
extern tree finish_non_static_data_member (tree, tree, tree);
extern tree begin_stmt_expr (void);
extern tree finish_stmt_expr_expr (tree, tree);
@@ -6933,6 +6910,7 @@ extern void cp_ubsan_maybe_instrument_member_call (tree);
extern void cp_ubsan_instrument_member_accesses (tree *);
extern tree cp_ubsan_maybe_instrument_downcast (location_t, tree, tree, tree);
extern tree cp_ubsan_maybe_instrument_cast_to_vbase (location_t, tree, tree);
+extern void cp_ubsan_maybe_initialize_vtbl_ptrs (tree);
/* -- end of C++ */
diff --git a/gcc/cp/cp-ubsan.c b/gcc/cp/cp-ubsan.c
index 7454c0a..be24a5c 100644
--- a/gcc/cp/cp-ubsan.c
+++ b/gcc/cp/cp-ubsan.c
@@ -70,10 +70,15 @@ cp_ubsan_instrument_vptr (location_t loc, tree op, tree type, bool is_addr,
vptr = fold_convert_loc (loc, pointer_sized_int_node, vptr);
vptr = fold_convert_loc (loc, uint64_type_node, vptr);
if (ckind == UBSAN_DOWNCAST_POINTER)
- vptr = fold_build3 (COND_EXPR, uint64_type_node,
- fold_build2 (NE_EXPR, boolean_type_node, op,
- build_zero_cst (TREE_TYPE (op))),
- vptr, build_int_cst (uint64_type_node, 0));
+ {
+ tree cond = build2_loc (loc, NE_EXPR, boolean_type_node, op,
+ build_zero_cst (TREE_TYPE (op)));
+ /* This is a compiler generated comparison, don't emit
+ e.g. -Wnonnull-compare warning for it. */
+ TREE_NO_WARNING (cond) = 1;
+ vptr = build3_loc (loc, COND_EXPR, uint64_type_node, cond,
+ vptr, build_int_cst (uint64_type_node, 0));
+ }
tree ti_decl = get_tinfo_decl (type);
mark_used (ti_decl);
tree ptype = build_pointer_type (type);
@@ -267,3 +272,66 @@ cp_ubsan_maybe_instrument_cast_to_vbase (location_t loc, tree type, tree op)
return cp_ubsan_maybe_instrument_vptr (loc, op, type, true,
UBSAN_CAST_TO_VBASE);
}
+
+/* Called from initialize_vtbl_ptrs via dfs_walk. BINFO is the base
+ which we want to initialize the vtable pointer for, DATA is
+ TREE_LIST whose TREE_VALUE is the this ptr expression. */
+
+static tree
+cp_ubsan_dfs_initialize_vtbl_ptrs (tree binfo, void *data)
+{
+ if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
+ return dfs_skip_bases;
+
+ if (!BINFO_PRIMARY_P (binfo))
+ {
+ tree base_ptr = TREE_VALUE ((tree) data);
+
+ base_ptr = build_base_path (PLUS_EXPR, base_ptr, binfo, /*nonnull=*/1,
+ tf_warning_or_error);
+
+ /* Compute the location of the vtpr. */
+ tree vtbl_ptr
+ = build_vfield_ref (cp_build_indirect_ref (base_ptr, RO_NULL,
+ tf_warning_or_error),
+ TREE_TYPE (binfo));
+ gcc_assert (vtbl_ptr != error_mark_node);
+
+ /* Assign NULL to the vptr. */
+ tree vtbl = build_zero_cst (TREE_TYPE (vtbl_ptr));
+ tree stmt = cp_build_modify_expr (vtbl_ptr, NOP_EXPR, vtbl,
+ tf_warning_or_error);
+ if (vptr_via_virtual_p (binfo))
+ /* If this vptr comes from a virtual base of the complete object, only
+ clear it if we're in charge of virtual bases. */
+ stmt = build_if_in_charge (stmt);
+ finish_expr_stmt (stmt);
+ }
+
+ return NULL_TREE;
+}
+
+/* Initialize all the vtable pointers in the object pointed to by
+ ADDR to NULL, so that we catch invalid calls to methods before
+ mem-initializers are completed. */
+
+void
+cp_ubsan_maybe_initialize_vtbl_ptrs (tree addr)
+{
+ if (!cp_ubsan_instrument_vptr_p (NULL_TREE))
+ return;
+
+ tree type = TREE_TYPE (TREE_TYPE (addr));
+ tree list = build_tree_list (type, addr);
+ /* We cannot rely on the vtable being set up. We have to indirect via the
+ vtt_parm. */
+ int save_in_base_initializer = in_base_initializer;
+ in_base_initializer = 1;
+
+ /* Walk through the hierarchy, initializing the vptr in each base
+ class to NULL. */
+ dfs_walk_once (TYPE_BINFO (type), cp_ubsan_dfs_initialize_vtbl_ptrs,
+ NULL, list);
+
+ in_base_initializer = save_in_base_initializer;
+}
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 30eef5c..9260f4c 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -227,11 +227,6 @@ struct GTY((for_user)) named_label_entry {
function, two inside the body of a function in a local class, etc.) */
int function_depth;
-/* To avoid unwanted recursion, finish_function defers all mark_used calls
- encountered during its execution until it finishes. */
-bool defer_mark_used_calls;
-vec<tree, va_gc> *deferred_mark_used_calls;
-
/* States indicating how grokdeclarator() should handle declspecs marked
with __attribute__((deprecated)). An object declared as
__attribute__((deprecated)) suppresses warnings of uses of other
@@ -1207,16 +1202,19 @@ check_redeclaration_exception_specification (tree new_decl,
specialization, of that function shall have an
exception-specification with the same set of type-ids. */
if (! DECL_IS_BUILTIN (old_decl)
- && flag_exceptions
&& !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
{
const char *msg
= "declaration of %q+F has a different exception specifier";
bool complained = true;
- if (! DECL_IN_SYSTEM_HEADER (old_decl))
- error (msg, new_decl);
- else
+ if (DECL_IN_SYSTEM_HEADER (old_decl))
complained = pedwarn (0, OPT_Wsystem_headers, msg, new_decl);
+ else if (!flag_exceptions)
+ /* We used to silently permit mismatched eh specs with
+ -fno-exceptions, so make them a pedwarn now. */
+ complained = pedwarn (0, OPT_Wpedantic, msg, new_decl);
+ else
+ error (msg, new_decl);
if (complained)
inform (0, "from previous declaration %q+F", old_decl);
}
@@ -2033,8 +2031,17 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
at newdecl, which will be ggc_freed. */
if (TREE_CODE (newdecl) == TYPE_DECL)
{
+ /* But NEWTYPE might have an attribute, honor that. */
+ tree tem = TREE_TYPE (newdecl);
newtype = oldtype;
+ if (TYPE_USER_ALIGN (tem))
+ {
+ if (TYPE_ALIGN (tem) > TYPE_ALIGN (newtype))
+ TYPE_ALIGN (newtype) = TYPE_ALIGN (tem);
+ TYPE_USER_ALIGN (newtype) = true;
+ }
+
/* And remove the new type from the variants list. */
if (TYPE_NAME (TREE_TYPE (newdecl)) == newdecl)
{
@@ -2646,7 +2653,7 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
Before releasing the node, be sore to remove function from symbol
table that might have been inserted there to record comdat group.
- Be sure to however do not free DECL_STRUCT_FUNCTION becuase this
+ Be sure to however do not free DECL_STRUCT_FUNCTION because this
structure is shared in between newdecl and oldecl. */
if (TREE_CODE (newdecl) == FUNCTION_DECL)
DECL_STRUCT_FUNCTION (newdecl) = NULL;
@@ -6256,8 +6263,11 @@ make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
return;
/* We defer emission of local statics until the corresponding
- DECL_EXPR is expanded. */
- defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
+ DECL_EXPR is expanded. But with constexpr its function might never
+ be expanded, so go ahead and tell cgraph about the variable now. */
+ defer_p = ((DECL_FUNCTION_SCOPE_P (decl)
+ && !DECL_DECLARED_CONSTEXPR_P (DECL_CONTEXT (decl)))
+ || DECL_VIRTUAL_P (decl));
/* Defer template instantiations. */
if (DECL_LANG_SPECIFIC (decl)
@@ -6499,6 +6509,19 @@ is_concept_var (tree decl)
&& DECL_DECLARED_CONCEPT_P (decl));
}
+/* A helper function to be called via walk_tree. If any label exists
+ under *TP, it is (going to be) forced. Set has_forced_label_in_static. */
+
+static tree
+notice_forced_label_r (tree *tp, int *walk_subtrees, void *)
+{
+ if (TYPE_P (*tp))
+ *walk_subtrees = 0;
+ if (TREE_CODE (*tp) == LABEL_DECL)
+ cfun->has_forced_label_in_static = 1;
+ return NULL_TREE;
+}
+
/* Finish processing of a declaration;
install its line number and initial value.
If the length of an array type is not known before,
@@ -6744,13 +6767,17 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
&& !DECL_ARTIFICIAL (decl))
{
push_local_name (decl);
- if (DECL_CONSTRUCTOR_P (current_function_decl)
- || DECL_DESTRUCTOR_P (current_function_decl))
- /* Normally local_decls is populated during GIMPLE lowering,
- but [cd]tors are never actually compiled directly. We need
- to put statics on the list so we can deal with the label
- address extension. FIXME. */
- add_local_decl (cfun, decl);
+ /* Normally has_forced_label_in_static is set during GIMPLE
+ lowering, but [cd]tors are never actually compiled directly.
+ We need to set this early so we can deal with the label
+ address extension. */
+ if ((DECL_CONSTRUCTOR_P (current_function_decl)
+ || DECL_DESTRUCTOR_P (current_function_decl))
+ && init)
+ {
+ walk_tree (&init, notice_forced_label_r, NULL, NULL);
+ add_local_decl (cfun, decl);
+ }
/* And make sure it's in the symbol table for
c_parse_final_cleanups to find. */
varpool_node::get_create (decl);
@@ -12590,6 +12617,20 @@ lookup_and_check_tag (enum tag_types tag_code, tree name,
decl,
template_header_p
| DECL_SELF_REFERENCE_P (decl));
+ if (template_header_p && t && CLASS_TYPE_P (t)
+ && (!CLASSTYPE_TEMPLATE_INFO (t)
+ || (!PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))))
+ {
+ error ("%qT is not a template", t);
+ inform (location_of (t), "previous declaration here");
+ if (TYPE_CLASS_SCOPE_P (t)
+ && CLASSTYPE_TEMPLATE_INFO (TYPE_CONTEXT (t)))
+ inform (input_location,
+ "perhaps you want to explicitly add %<%T::%>",
+ TYPE_CONTEXT (t));
+ t = error_mark_node;
+ }
+
return t;
}
else if (decl && TREE_CODE (decl) == TREE_LIST)
@@ -13698,6 +13739,43 @@ implicit_default_ctor_p (tree fn)
&& sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)));
}
+/* Clobber the contents of *this to let the back end know that the object
+ storage is dead when we enter the constructor or leave the destructor. */
+
+static tree
+build_clobber_this ()
+{
+ /* Clobbering an empty base is pointless, and harmful if its one byte
+ TYPE_SIZE overlays real data. */
+ if (is_empty_class (current_class_type))
+ return void_node;
+
+ /* If we have virtual bases, clobber the whole object, but only if we're in
+ charge. If we don't have virtual bases, clobber the as-base type so we
+ don't mess with tail padding. */
+ bool vbases = CLASSTYPE_VBASECLASSES (current_class_type);
+
+ tree ctype = current_class_type;
+ if (!vbases)
+ ctype = CLASSTYPE_AS_BASE (ctype);
+
+ tree clobber = build_constructor (ctype, NULL);
+ TREE_THIS_VOLATILE (clobber) = true;
+
+ tree thisref = current_class_ref;
+ if (ctype != current_class_type)
+ {
+ thisref = build_nop (build_reference_type (ctype), current_class_ptr);
+ thisref = convert_from_reference (thisref);
+ }
+
+ tree exprstmt = build2 (MODIFY_EXPR, void_type_node, thisref, clobber);
+ if (vbases)
+ exprstmt = build_if_in_charge (exprstmt);
+
+ return exprstmt;
+}
+
/* Create the FUNCTION_DECL for a function definition.
DECLSPECS and DECLARATOR are the parts of the declaration;
they describe the function's name and the type it returns,
@@ -14095,31 +14173,30 @@ start_preparsed_function (tree decl1, tree attrs, int flags)
if (DECL_DESTRUCTOR_P (decl1)
|| (DECL_CONSTRUCTOR_P (decl1)
&& targetm.cxx.cdtor_returns_this ()))
- {
- cdtor_label = create_artificial_label (input_location);
- }
+ cdtor_label = create_artificial_label (input_location);
start_fname_decls ();
store_parm_decls (current_function_parms);
if (!processing_template_decl
- && flag_lifetime_dse && DECL_CONSTRUCTOR_P (decl1)
+ && (flag_lifetime_dse > 1)
+ && DECL_CONSTRUCTOR_P (decl1)
+ && !DECL_CLONED_FUNCTION_P (decl1)
+ /* Clobbering an empty base is harmful if it overlays real data. */
+ && !is_empty_class (current_class_type)
/* We can't clobber safely for an implicitly-defined default constructor
because part of the initialization might happen before we enter the
constructor, via AGGR_INIT_ZERO_FIRST (c++/68006). */
&& !implicit_default_ctor_p (decl1))
- {
- /* Insert a clobber to let the back end know that the object storage
- is dead when we enter the constructor. */
- tree btype = CLASSTYPE_AS_BASE (current_class_type);
- tree clobber = build_constructor (btype, NULL);
- TREE_THIS_VOLATILE (clobber) = true;
- tree bref = build_nop (build_reference_type (btype), current_class_ptr);
- bref = convert_from_reference (bref);
- tree exprstmt = build2 (MODIFY_EXPR, btype, bref, clobber);
- finish_expr_stmt (exprstmt);
- }
+ finish_expr_stmt (build_clobber_this ());
+
+ if (!processing_template_decl
+ && DECL_CONSTRUCTOR_P (decl1)
+ && (flag_sanitize & SANITIZE_VPTR)
+ && !DECL_CLONED_FUNCTION_P (decl1)
+ && !implicit_default_ctor_p (decl1))
+ cp_ubsan_maybe_initialize_vtbl_ptrs (current_class_ptr);
return true;
}
@@ -14329,19 +14406,10 @@ begin_destructor_body (void)
initialize_vtbl_ptrs (current_class_ptr);
finish_compound_stmt (compound_stmt);
- if (flag_lifetime_dse)
- {
- /* Insert a cleanup to let the back end know that the object is dead
- when we exit the destructor, either normally or via exception. */
- tree btype = CLASSTYPE_AS_BASE (current_class_type);
- tree clobber = build_constructor (btype, NULL);
- TREE_THIS_VOLATILE (clobber) = true;
- tree bref = build_nop (build_reference_type (btype),
- current_class_ptr);
- bref = convert_from_reference (bref);
- tree exprstmt = build2 (MODIFY_EXPR, btype, bref, clobber);
- finish_decl_cleanup (NULL_TREE, exprstmt);
- }
+ if (flag_lifetime_dse
+ /* Clobbering an empty base is harmful if it overlays real data. */
+ && !is_empty_class (current_class_type))
+ finish_decl_cleanup (NULL_TREE, build_clobber_this ());
/* And insert cleanups for our bases and members so that they
will be properly destroyed if we throw. */
@@ -14361,35 +14429,6 @@ finish_destructor_body (void)
and member cleanups will be run when the function returns. */
add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
- /* In a virtual destructor, we must call delete. */
- if (DECL_VIRTUAL_P (current_function_decl))
- {
- tree if_stmt;
- tree virtual_size = cxx_sizeof (current_class_type);
-
- /* [class.dtor]
-
- At the point of definition of a virtual destructor (including
- an implicit definition), non-placement operator delete shall
- be looked up in the scope of the destructor's class and if
- found shall be accessible and unambiguous. */
- exprstmt = build_op_delete_call (DELETE_EXPR, current_class_ptr,
- virtual_size,
- /*global_p=*/false,
- /*placement=*/NULL_TREE,
- /*alloc_fn=*/NULL_TREE,
- tf_warning_or_error);
-
- if_stmt = begin_if_stmt ();
- finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
- current_in_charge_parm,
- integer_one_node),
- if_stmt);
- finish_expr_stmt (exprstmt);
- finish_then_clause (if_stmt);
- finish_if_stmt (if_stmt);
- }
-
if (targetm.cxx.cdtor_returns_this ())
{
tree val;
@@ -14534,9 +14573,6 @@ finish_function (int flags)
if (c_dialect_objc ())
objc_finish_function ();
- gcc_assert (!defer_mark_used_calls);
- defer_mark_used_calls = true;
-
record_key_method_defined (fndecl);
fntype = TREE_TYPE (fndecl);
@@ -14786,17 +14822,6 @@ finish_function (int flags)
/* Clean up. */
current_function_decl = NULL_TREE;
- defer_mark_used_calls = false;
- if (deferred_mark_used_calls)
- {
- unsigned int i;
- tree decl;
-
- FOR_EACH_VEC_SAFE_ELT (deferred_mark_used_calls, i, decl)
- mark_used (decl);
- vec_free (deferred_mark_used_calls);
- }
-
invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION, fndecl);
return fndecl;
}
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index 73b0d28..b3cc99a 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -5140,14 +5140,6 @@ mark_used (tree decl, tsubst_flags_t complain)
if (DECL_ODR_USED (decl))
return true;
- /* If within finish_function, defer the rest until that function
- finishes, otherwise it might recurse. */
- if (defer_mark_used_calls)
- {
- vec_safe_push (deferred_mark_used_calls, decl);
- return true;
- }
-
/* Normally, we can wait until instantiation-time to synthesize DECL.
However, if DECL is a static data member initialized with a constant
or a constexpr function, we need it right now because a reference to
diff --git a/gcc/cp/except.c b/gcc/cp/except.c
index c73a16b..5336710 100644
--- a/gcc/cp/except.c
+++ b/gcc/cp/except.c
@@ -1040,7 +1040,8 @@ nothrow_libfn_p (const_tree fn)
unless the system headers are playing rename tricks, and if
they are, we don't want to be confused by them. */
id = DECL_NAME (fn);
- return !!libc_name_p (IDENTIFIER_POINTER (id), IDENTIFIER_LENGTH (id));
+ return !!libc_name::libc_name_p (IDENTIFIER_POINTER (id),
+ IDENTIFIER_LENGTH (id));
}
/* Returns nonzero if an exception of type FROM will be caught by a
diff --git a/gcc/cp/friend.c b/gcc/cp/friend.c
index 36b000f..5e4b2d1 100644
--- a/gcc/cp/friend.c
+++ b/gcc/cp/friend.c
@@ -255,6 +255,18 @@ make_friend_class (tree type, tree friend_type, bool complain)
friend_type);
return;
}
+ if (TYPE_TEMPLATE_INFO (friend_type)
+ && !PRIMARY_TEMPLATE_P (TYPE_TI_TEMPLATE (friend_type)))
+ {
+ error ("%qT is not a template", friend_type);
+ inform (location_of (friend_type), "previous declaration here");
+ if (TYPE_CLASS_SCOPE_P (friend_type)
+ && CLASSTYPE_TEMPLATE_INFO (TYPE_CONTEXT (friend_type))
+ && currently_open_class (TYPE_CONTEXT (friend_type)))
+ inform (input_location, "perhaps you need explicit template "
+ "arguments in your nested-name-specifier");
+ return;
+ }
}
else if (same_type_p (type, friend_type))
{
diff --git a/gcc/cp/init.c b/gcc/cp/init.c
index 68cc1a7..5997d53 100644
--- a/gcc/cp/init.c
+++ b/gcc/cp/init.c
@@ -1243,12 +1243,7 @@ expand_virtual_init (tree binfo, tree decl)
/* The actual initializer is the VTT value only in the subobject
constructor. In maybe_clone_body we'll substitute NULL for
the vtt_parm in the case of the non-subobject constructor. */
- vtbl = build3 (COND_EXPR,
- TREE_TYPE (vtbl),
- build2 (EQ_EXPR, boolean_type_node,
- current_in_charge_parm, integer_zero_node),
- vtbl2,
- vtbl);
+ vtbl = build_if_in_charge (vtbl, vtbl2);
}
/* Compute the location of the vtpr. */
@@ -1741,11 +1736,7 @@ expand_default_init (tree binfo, tree true_exp, tree exp, tree init, int flags,
&parms, binfo, flags,
complain);
base = fold_build_cleanup_point_expr (void_type_node, base);
- rval = build3 (COND_EXPR, void_type_node,
- build2 (EQ_EXPR, boolean_type_node,
- current_in_charge_parm, integer_zero_node),
- base,
- complete);
+ rval = build_if_in_charge (complete, base);
}
else
{
@@ -2439,7 +2430,8 @@ warn_placement_new_too_small (tree type, tree nelts, tree size, tree oper)
though the size of a member of a union may be viewed as extending
to the end of the union itself (it is by __builtin_object_size). */
if ((TREE_CODE (oper) == VAR_DECL || use_obj_size)
- && DECL_SIZE_UNIT (oper))
+ && DECL_SIZE_UNIT (oper)
+ && tree_fits_uhwi_p (DECL_SIZE_UNIT (oper)))
{
/* Use the size of the entire array object when the expression
refers to a variable or its size depends on an expression
@@ -2447,7 +2439,8 @@ warn_placement_new_too_small (tree type, tree nelts, tree size, tree oper)
bytes_avail = tree_to_uhwi (DECL_SIZE_UNIT (oper));
exact_size = !use_obj_size;
}
- else if (TYPE_SIZE_UNIT (TREE_TYPE (oper)))
+ else if (TYPE_SIZE_UNIT (TREE_TYPE (oper))
+ && tree_fits_uhwi_p (TYPE_SIZE_UNIT (TREE_TYPE (oper))))
{
/* Use the size of the type of the destination buffer object
as the optimistic estimate of the available space in it. */
@@ -2872,6 +2865,14 @@ build_new_1 (vec<tree, va_gc> **placement, tree type, tree nelts,
return error_mark_node;
}
alloc_fn = OVL_CURRENT (alloc_fn);
+ if (TREE_CODE (alloc_fn) != FUNCTION_DECL
+ || TREE_CODE (TREE_TYPE (alloc_fn)) != FUNCTION_TYPE
+ || !POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (alloc_fn))))
+ {
+ if (complain & tf_error)
+ error ("%qD is not a function returning a pointer", alloc_fn);
+ return error_mark_node;
+ }
class_addr = build1 (ADDR_EXPR, jclass_node, class_decl);
alloc_call = cp_build_function_call_nary (alloc_fn, complain,
class_addr, NULL_TREE);
@@ -3678,12 +3679,14 @@ build_vec_delete_1 (tree base, tree maxindex, tree type,
body = integer_zero_node;
/* Outermost wrapper: If pointer is null, punt. */
- body = fold_build3_loc (input_location, COND_EXPR, void_type_node,
- fold_build2_loc (input_location,
- NE_EXPR, boolean_type_node, base,
- fold_convert (TREE_TYPE (base),
- nullptr_node)),
- body, integer_zero_node);
+ tree cond = build2_loc (input_location, NE_EXPR, boolean_type_node, base,
+ fold_convert (TREE_TYPE (base), nullptr_node));
+ /* This is a compiler generated comparison, don't emit
+ e.g. -Wnonnull-compare warning for it. */
+ TREE_NO_WARNING (cond) = 1;
+ body = build3_loc (input_location, COND_EXPR, void_type_node,
+ cond, body, integer_zero_node);
+ COND_EXPR_IS_VEC_DELETE (body) = true;
body = build1 (NOP_EXPR, void_type_node, body);
if (controller)
@@ -4520,9 +4523,8 @@ build_delete (tree otype, tree addr, special_function_kind auto_delete,
{
/* Handle deleting a null pointer. */
warning_sentinel s (warn_address);
- ifexp = fold (cp_build_binary_op (input_location,
- NE_EXPR, addr, nullptr_node,
- complain));
+ ifexp = cp_build_binary_op (input_location, NE_EXPR, addr,
+ nullptr_node, complain);
if (ifexp == error_mark_node)
return error_mark_node;
/* This is a compiler generated comparison, don't emit
diff --git a/gcc/cp/lambda.c b/gcc/cp/lambda.c
index 296c6f7..cdc11fe 100644
--- a/gcc/cp/lambda.c
+++ b/gcc/cp/lambda.c
@@ -29,6 +29,7 @@ along with GCC; see the file COPYING3. If not see
#include "cgraph.h"
#include "tree-iterator.h"
#include "toplev.h"
+#include "gimplify.h"
/* Constructor for a lambda expression. */
@@ -952,23 +953,18 @@ maybe_add_lambda_conv_op (tree type)
if (generic_lambda_p)
{
- if (DECL_PACK_P (tgt))
- {
- tree a = make_pack_expansion (tgt);
- if (decltype_call)
- CALL_EXPR_ARG (decltype_call, ix) = copy_node (a);
- PACK_EXPANSION_LOCAL_P (a) = true;
- CALL_EXPR_ARG (call, ix) = a;
- }
- else
- {
- ++processing_template_decl;
- tree a = forward_parm (tgt);
- --processing_template_decl;
- CALL_EXPR_ARG (call, ix) = a;
- if (decltype_call)
- CALL_EXPR_ARG (decltype_call, ix) = copy_node (a);
- }
+ ++processing_template_decl;
+ tree a = forward_parm (tgt);
+ --processing_template_decl;
+
+ CALL_EXPR_ARG (call, ix) = a;
+ if (decltype_call)
+ CALL_EXPR_ARG (decltype_call, ix) = unshare_expr (a);
+
+ if (PACK_EXPANSION_P (a))
+ /* Set this after unsharing so it's not in decltype_call. */
+ PACK_EXPANSION_LOCAL_P (a) = true;
+
++ix;
}
else
diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c
index 410c7f4..0e44409 100644
--- a/gcc/cp/mangle.c
+++ b/gcc/cp/mangle.c
@@ -223,6 +223,7 @@ static void write_local_name (tree, const tree, const tree);
static void dump_substitution_candidates (void);
static tree mangle_decl_string (const tree);
static int local_class_index (tree);
+static void maybe_check_abi_tags (tree, tree = NULL_TREE);
/* Control functions. */
@@ -263,9 +264,9 @@ static void write_java_integer_type_codes (const tree);
#define write_unsigned_number(NUMBER) \
write_number ((NUMBER), /*unsigned_p=*/1, 10)
-/* If DECL is a template instance, return nonzero and, if
- TEMPLATE_INFO is non-NULL, set *TEMPLATE_INFO to its template info.
- Otherwise return zero. */
+/* If DECL is a template instance (including the uninstantiated template
+ itself), return nonzero and, if TEMPLATE_INFO is non-NULL, set
+ *TEMPLATE_INFO to its template info. Otherwise return zero. */
static int
decl_is_template_id (const tree decl, tree* const template_info)
@@ -289,7 +290,8 @@ decl_is_template_id (const tree decl, tree* const template_info)
{
/* Check if this is a primary template. */
if (DECL_LANG_SPECIFIC (decl) != NULL
- && DECL_USE_TEMPLATE (decl)
+ && VAR_OR_FUNCTION_DECL_P (decl)
+ && DECL_TEMPLATE_INFO (decl)
&& PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl))
&& TREE_CODE (decl) != TEMPLATE_DECL)
{
@@ -3599,6 +3601,9 @@ mangle_decl (const tree decl)
{
gcc_assert (TREE_CODE (decl) != TYPE_DECL
|| !no_linkage_check (TREE_TYPE (decl), true));
+ if (abi_version_at_least (10))
+ if (tree fn = decl_function_context (decl))
+ maybe_check_abi_tags (fn, decl);
id = get_mangled_id (decl);
}
SET_DECL_ASSEMBLER_NAME (decl, id);
@@ -3937,26 +3942,39 @@ mangle_conv_op_name_for_type (const tree type)
/* Handle ABI backwards compatibility for past bugs where we didn't call
check_abi_tags in places where it's needed: call check_abi_tags and warn if
- it makes a difference. */
+ it makes a difference. If FOR_DECL is non-null, it's the declaration
+ that we're actually trying to mangle; if it's null, we're mangling the
+ guard variable for T. */
static void
-maybe_check_abi_tags (tree t)
+maybe_check_abi_tags (tree t, tree for_decl)
{
+ if (DECL_ASSEMBLER_NAME_SET_P (t))
+ return;
+
tree attr = lookup_attribute ("abi_tag", DECL_ATTRIBUTES (t));
tree oldtags = NULL_TREE;
if (attr)
oldtags = TREE_VALUE (attr);
- check_abi_tags (t);
+ mangle_decl (t);
if (!attr)
attr = lookup_attribute ("abi_tag", DECL_ATTRIBUTES (t));
if (attr && TREE_VALUE (attr) != oldtags
&& abi_version_crosses (10))
- warning_at (DECL_SOURCE_LOCATION (t), OPT_Wabi,
- "the mangled name of the initialization guard variable for"
- "%qD changes between -fabi-version=%d and -fabi-version=%d",
- t, flag_abi_version, warn_abi_version);
+ {
+ if (for_decl)
+ warning_at (DECL_SOURCE_LOCATION (for_decl), OPT_Wabi,
+ "the mangled name of %qD changes between "
+ "-fabi-version=%d and -fabi-version=%d",
+ for_decl, flag_abi_version, warn_abi_version);
+ else
+ warning_at (DECL_SOURCE_LOCATION (t), OPT_Wabi,
+ "the mangled name of the initialization guard variable for"
+ "%qD changes between -fabi-version=%d and -fabi-version=%d",
+ t, flag_abi_version, warn_abi_version);
+ }
}
/* Write out the appropriate string for this variable when generating
@@ -3971,15 +3989,7 @@ write_guarded_var_name (const tree variable)
to the reference, not the temporary. */
write_string (IDENTIFIER_POINTER (DECL_NAME (variable)) + 4);
else
- {
- /* Before ABI v10 we were failing to call check_abi_tags here. So if
- we're in pre-10 mode, wait until after write_name to call it. */
- if (abi_version_at_least (10))
- maybe_check_abi_tags (variable);
- write_name (variable, /*ignore_local_scope=*/0);
- if (!abi_version_at_least (10))
- maybe_check_abi_tags (variable);
- }
+ write_name (variable, /*ignore_local_scope=*/0);
}
/* Return an identifier for the name of an initialization guard
@@ -3988,6 +3998,8 @@ write_guarded_var_name (const tree variable)
tree
mangle_guard_variable (const tree variable)
{
+ if (abi_version_at_least (10))
+ maybe_check_abi_tags (variable);
start_mangling (variable);
write_string ("_ZGV");
write_guarded_var_name (variable);
diff --git a/gcc/cp/method.c b/gcc/cp/method.c
index f455b32..38f2a54 100644
--- a/gcc/cp/method.c
+++ b/gcc/cp/method.c
@@ -481,9 +481,12 @@ tree
forward_parm (tree parm)
{
tree exp = convert_from_reference (parm);
- if (TREE_CODE (TREE_TYPE (parm)) != REFERENCE_TYPE
- || TYPE_REF_IS_RVALUE (TREE_TYPE (parm)))
- exp = move (exp);
+ tree type = TREE_TYPE (parm);
+ if (DECL_PACK_P (parm))
+ type = PACK_EXPANSION_PATTERN (type);
+ exp = build_static_cast (type, exp, tf_warning_or_error);
+ if (DECL_PACK_P (parm))
+ exp = make_pack_expansion (exp);
return exp;
}
@@ -1376,9 +1379,18 @@ synthesized_method_walk (tree ctype, special_function_kind sfk, bool const_p,
/* If that user-written default constructor would satisfy the
requirements of a constexpr constructor (7.1.5), the
- implicitly-defined default constructor is constexpr. */
+ implicitly-defined default constructor is constexpr.
+
+ The implicitly-defined copy/move assignment operator is constexpr if
+ - X is a literal type, and
+ - the assignment operator selected to copy/move each direct base class
+ subobject is a constexpr function, and
+ - for each non-static data member of X that is of class type (or array
+ thereof), the assignment operator selected to copy/move that member is a
+ constexpr function. */
if (constexpr_p)
- *constexpr_p = ctor_p;
+ *constexpr_p = ctor_p
+ || (assign_p && cxx_dialect >= cxx14);
move_p = false;
switch (sfk)
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 18f3902..00e211e 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -2104,7 +2104,7 @@ static tree cp_parser_selection_statement
static tree cp_parser_condition
(cp_parser *);
static tree cp_parser_iteration_statement
- (cp_parser *, bool);
+ (cp_parser *, bool *, bool);
static bool cp_parser_for_init_statement
(cp_parser *, tree *decl);
static tree cp_parser_for
@@ -2127,7 +2127,7 @@ static void cp_parser_declaration_statement
static tree cp_parser_implicitly_scoped_statement
(cp_parser *, bool *, const token_indent_info &, vec<tree> * = NULL);
static void cp_parser_already_scoped_statement
- (cp_parser *, const token_indent_info &);
+ (cp_parser *, bool *, const token_indent_info &);
/* Declarations [gram.dcl.dcl] */
@@ -3172,6 +3172,8 @@ cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree id,
&& !strcmp (IDENTIFIER_POINTER (id), "thread_local"))
inform (location, "C++11 %<thread_local%> only available with "
"-std=c++11 or -std=gnu++11");
+ else if (!flag_concepts && id == ridpointers[(int)RID_CONCEPT])
+ inform (location, "%<concept%> only available with -fconcepts");
else if (processing_template_decl && current_class_type
&& TYPE_BINFO (current_class_type))
{
@@ -9779,8 +9781,6 @@ cp_parser_lambda_expression (cp_parser* parser)
= auto_is_implicit_function_template_parm_p;
}
- pop_deferring_access_checks ();
-
/* This field is only used during parsing of the lambda. */
LAMBDA_EXPR_THIS_CAPTURE (lambda_expr) = NULL_TREE;
@@ -9796,6 +9796,8 @@ cp_parser_lambda_expression (cp_parser* parser)
cp_parser_end_tentative_firewall (parser, start, lambda_expr);
+ pop_deferring_access_checks ();
+
return lambda_expr;
}
@@ -10390,7 +10392,7 @@ cp_parser_statement (cp_parser* parser, tree in_statement_expr,
case RID_WHILE:
case RID_DO:
case RID_FOR:
- statement = cp_parser_iteration_statement (parser, false);
+ statement = cp_parser_iteration_statement (parser, if_p, false);
break;
case RID_CILK_FOR:
@@ -10945,7 +10947,7 @@ cp_parser_selection_statement (cp_parser* parser, bool *if_p,
else
{
/* This if statement does not have an else clause. If
- NESTED_IF is true, then the then-clause is an if
+ NESTED_IF is true, then the then-clause has an if
statement which does have an else clause. We warn
about the potential ambiguity. */
if (nested_if)
@@ -11351,6 +11353,8 @@ cp_convert_range_for (tree statement, tree range_decl, tree range_expr,
/*is_constant_init*/false, NULL_TREE,
LOOKUP_ONLYCONVERTING);
+ if (cxx_dialect >= cxx1z)
+ iter_type = cv_unqualified (TREE_TYPE (end_expr));
end = build_decl (input_location, VAR_DECL,
get_identifier ("__for_end"), iter_type);
TREE_USED (end) = 1;
@@ -11486,9 +11490,21 @@ cp_parser_perform_range_for_lookup (tree range, tree *begin, tree *end)
/* The unqualified type of the __begin and __end temporaries should
be the same, as required by the multiple auto declaration. */
if (!same_type_p (iter_type, cv_unqualified (TREE_TYPE (*end))))
- error ("inconsistent begin/end types in range-based %<for%> "
- "statement: %qT and %qT",
- TREE_TYPE (*begin), TREE_TYPE (*end));
+ {
+ if (cxx_dialect >= cxx1z
+ && (build_x_binary_op (input_location, NE_EXPR,
+ *begin, ERROR_MARK,
+ *end, ERROR_MARK,
+ NULL, tf_none)
+ != error_mark_node))
+ /* P0184R0 allows __begin and __end to have different types,
+ but make sure they are comparable so we can give a better
+ diagnostic. */;
+ else
+ error ("inconsistent begin/end types in range-based %<for%> "
+ "statement: %qT and %qT",
+ TREE_TYPE (*begin), TREE_TYPE (*end));
+ }
return iter_type;
}
}
@@ -11528,7 +11544,7 @@ cp_parser_range_for_member_function (tree range, tree identifier)
Returns the new WHILE_STMT, DO_STMT, FOR_STMT or RANGE_FOR_STMT. */
static tree
-cp_parser_iteration_statement (cp_parser* parser, bool ivdep)
+cp_parser_iteration_statement (cp_parser* parser, bool *if_p, bool ivdep)
{
cp_token *token;
enum rid keyword;
@@ -11566,7 +11582,7 @@ cp_parser_iteration_statement (cp_parser* parser, bool ivdep)
cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
/* Parse the dependent statement. */
parser->in_statement = IN_ITERATION_STMT;
- cp_parser_already_scoped_statement (parser, guard_tinfo);
+ cp_parser_already_scoped_statement (parser, if_p, guard_tinfo);
parser->in_statement = in_statement;
/* We're done with the while-statement. */
finish_while_stmt (statement);
@@ -11611,7 +11627,7 @@ cp_parser_iteration_statement (cp_parser* parser, bool ivdep)
/* Parse the body of the for-statement. */
parser->in_statement = IN_ITERATION_STMT;
- cp_parser_already_scoped_statement (parser, guard_tinfo);
+ cp_parser_already_scoped_statement (parser, if_p, guard_tinfo);
parser->in_statement = in_statement;
/* We're done with the for-statement. */
@@ -11921,7 +11937,7 @@ cp_parser_implicitly_scoped_statement (cp_parser* parser, bool *if_p,
scope. */
static void
-cp_parser_already_scoped_statement (cp_parser* parser,
+cp_parser_already_scoped_statement (cp_parser* parser, bool *if_p,
const token_indent_info &guard_tinfo)
{
/* If the token is a `{', then we must take special action. */
@@ -11930,7 +11946,7 @@ cp_parser_already_scoped_statement (cp_parser* parser,
token_indent_info body_tinfo
= get_token_indent_info (cp_lexer_peek_token (parser->lexer));
- cp_parser_statement (parser, NULL_TREE, false, NULL);
+ cp_parser_statement (parser, NULL_TREE, false, if_p);
token_indent_info next_tinfo
= get_token_indent_info (cp_lexer_peek_token (parser->lexer));
warn_for_misleading_indentation (guard_tinfo, body_tinfo, next_tinfo);
@@ -14668,13 +14684,10 @@ cp_parser_type_parameter (cp_parser* parser, bool *is_parameter_pack)
cp_parser_require (parser, CPP_GREATER, RT_GREATER);
// If template requirements are present, parse them.
- if (flag_concepts)
- {
- tree reqs = get_shorthand_constraints (current_template_parms);
- if (tree r = cp_parser_requires_clause_opt (parser))
- reqs = conjoin_constraints (reqs, make_predicate_constraint (r));
- TEMPLATE_PARMS_CONSTRAINTS (current_template_parms) = reqs;
- }
+ tree reqs = get_shorthand_constraints (current_template_parms);
+ if (tree r = cp_parser_requires_clause_opt (parser))
+ reqs = conjoin_constraints (reqs, make_predicate_constraint (r));
+ TEMPLATE_PARMS_CONSTRAINTS (current_template_parms) = reqs;
/* Look for the `class' or 'typename' keywords. */
cp_parser_type_parameter_key (parser);
@@ -19745,6 +19758,8 @@ cp_parser_late_return_type_opt (cp_parser* parser, cp_declarator *declarator,
/* A late-specified return type is indicated by an initial '->'. */
if (token->type != CPP_DEREF
&& token->keyword != RID_REQUIRES
+ && !(token->type == CPP_NAME
+ && token->u.value == ridpointers[RID_REQUIRES])
&& !(declare_simd_p || cilk_simd_fn_vector_p || oacc_routine_p))
return NULL_TREE;
@@ -24104,7 +24119,8 @@ cp_parser_std_attribute_spec (cp_parser *parser)
static tree
cp_parser_std_attribute_spec_seq (cp_parser *parser)
{
- tree attr_specs = NULL;
+ tree attr_specs = NULL_TREE;
+ tree attr_last = NULL_TREE;
while (true)
{
@@ -24114,11 +24130,13 @@ cp_parser_std_attribute_spec_seq (cp_parser *parser)
if (attr_spec == error_mark_node)
return error_mark_node;
- TREE_CHAIN (attr_spec) = attr_specs;
- attr_specs = attr_spec;
+ if (attr_last)
+ TREE_CHAIN (attr_last) = attr_spec;
+ else
+ attr_specs = attr_last = attr_spec;
+ attr_last = tree_last (attr_last);
}
- attr_specs = nreverse (attr_specs);
return attr_specs;
}
@@ -24203,6 +24221,8 @@ cp_parser_requires_clause (cp_parser *parser)
++processing_template_decl;
tree expr = cp_parser_binary_expression (parser, false, false,
PREC_NOT_OPERATOR, NULL);
+ if (check_for_bare_parameter_packs (expr))
+ expr = error_mark_node;
--processing_template_decl;
return expr;
}
@@ -24211,8 +24231,20 @@ cp_parser_requires_clause (cp_parser *parser)
static tree
cp_parser_requires_clause_opt (cp_parser *parser)
{
- if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_REQUIRES))
- return NULL_TREE;
+ cp_token *tok = cp_lexer_peek_token (parser->lexer);
+ if (tok->keyword != RID_REQUIRES)
+ {
+ if (!flag_concepts && tok->type == CPP_NAME
+ && tok->u.value == ridpointers[RID_REQUIRES])
+ {
+ error_at (cp_lexer_peek_token (parser->lexer)->location,
+ "%<requires%> only available with -fconcepts");
+ /* Parse and discard the requires-clause. */
+ cp_lexer_consume_token (parser->lexer);
+ cp_parser_requires_clause (parser);
+ }
+ return NULL_TREE;
+ }
cp_lexer_consume_token (parser->lexer);
return cp_parser_requires_clause (parser);
}
@@ -25603,13 +25635,10 @@ cp_parser_explicit_template_declaration (cp_parser* parser, bool member_p)
cp_parser_skip_to_end_of_template_parameter_list (parser);
/* Manage template requirements */
- if (flag_concepts)
- {
- tree reqs = get_shorthand_constraints (current_template_parms);
- if (tree r = cp_parser_requires_clause_opt (parser))
- reqs = conjoin_constraints (reqs, make_predicate_constraint (r));
- TEMPLATE_PARMS_CONSTRAINTS (current_template_parms) = reqs;
- }
+ tree reqs = get_shorthand_constraints (current_template_parms);
+ if (tree r = cp_parser_requires_clause_opt (parser))
+ reqs = conjoin_constraints (reqs, make_predicate_constraint (r));
+ TEMPLATE_PARMS_CONSTRAINTS (current_template_parms) = reqs;
cp_parser_template_declaration_after_parameters (parser, parameter_list,
member_p);
@@ -27443,8 +27472,7 @@ cp_parser_cache_defarg (cp_parser *parser, bool nsdmi)
case CPP_EOF:
case CPP_PRAGMA_EOL:
error_at (token->location, "file ends in default argument");
- done = true;
- break;
+ return error_mark_node;
case CPP_NAME:
case CPP_SCOPE:
@@ -30057,7 +30085,7 @@ cp_parser_oacc_data_clause (cp_parser *parser, pragma_omp_clause c_kind,
kind = GOMP_MAP_FORCE_ALLOC;
break;
case PRAGMA_OACC_CLAUSE_DELETE:
- kind = GOMP_MAP_FORCE_DEALLOC;
+ kind = GOMP_MAP_DELETE;
break;
case PRAGMA_OACC_CLAUSE_DEVICE:
kind = GOMP_MAP_FORCE_TO;
@@ -35331,9 +35359,9 @@ cp_parser_oacc_loop (cp_parser *parser, cp_token *pragma_tok, char *p_name,
{
clauses = c_oacc_split_loop_clauses (clauses, cclauses);
if (*cclauses)
- finish_omp_clauses (*cclauses, false);
+ *cclauses = finish_omp_clauses (*cclauses, false);
if (clauses)
- finish_omp_clauses (clauses, false);
+ clauses = finish_omp_clauses (clauses, false);
}
tree block = begin_omp_structured_block ();
@@ -37281,7 +37309,7 @@ cp_parser_pragma (cp_parser *parser, enum pragma_context context)
cp_parser_error (parser, "for, while or do statement expected");
return false;
}
- cp_parser_iteration_statement (parser, true);
+ cp_parser_iteration_statement (parser, NULL, true);
return true;
}
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index a55dc10..2d93a5c 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -178,6 +178,7 @@ static int check_cv_quals_for_unify (int, tree, tree);
static void template_parm_level_and_index (tree, int*, int*);
static int unify_pack_expansion (tree, tree, tree,
tree, unification_kind_t, bool, bool);
+static tree copy_template_args (tree);
static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
@@ -329,7 +330,8 @@ get_template_info (const_tree t)
if (!t || t == error_mark_node)
return NULL;
- if (TREE_CODE (t) == NAMESPACE_DECL)
+ if (TREE_CODE (t) == NAMESPACE_DECL
+ || TREE_CODE (t) == PARM_DECL)
return NULL;
if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
@@ -369,16 +371,20 @@ template_class_depth (tree type)
{
int depth;
- for (depth = 0;
- type && TREE_CODE (type) != NAMESPACE_DECL;
- type = (TREE_CODE (type) == FUNCTION_DECL)
- ? CP_DECL_CONTEXT (type) : CP_TYPE_CONTEXT (type))
+ for (depth = 0; type && TREE_CODE (type) != NAMESPACE_DECL; )
{
tree tinfo = get_template_info (type);
if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
&& uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
++depth;
+
+ if (DECL_P (type))
+ type = CP_DECL_CONTEXT (type);
+ else if (LAMBDA_TYPE_P (type))
+ type = LAMBDA_TYPE_EXTRA_SCOPE (type);
+ else
+ type = CP_TYPE_CONTEXT (type);
}
return depth;
@@ -6944,7 +6950,8 @@ canonicalize_type_argument (tree arg, tsubst_flags_t complain)
tree canon = strip_typedefs (arg, &removed_attributes);
if (removed_attributes
&& (complain & tf_warning))
- warning (0, "ignoring attributes on template argument %qT", arg);
+ warning (OPT_Wignored_attributes,
+ "ignoring attributes on template argument %qT", arg);
return canon;
}
@@ -8845,8 +8852,9 @@ for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
break;
case TYPENAME_TYPE:
- if (!fn)
- WALK_SUBTREE (TYPENAME_TYPE_FULLNAME (t));
+ /* A template-id in a TYPENAME_TYPE might be a deduced context after
+ partial instantiation. */
+ WALK_SUBTREE (TYPENAME_TYPE_FULLNAME (t));
break;
case CONSTRUCTOR:
@@ -10180,11 +10188,11 @@ instantiate_class_template_1 (tree type)
template <class U> friend class T::C;
otherwise. */
+ /* Bump processing_template_decl in case this is something like
+ template <class T> friend struct A<T>::B. */
+ ++processing_template_decl;
friend_type = tsubst (friend_type, args,
tf_warning_or_error, NULL_TREE);
- /* Bump processing_template_decl for correct
- dependent_type_p calculation. */
- ++processing_template_decl;
if (dependent_type_p (friend_type))
adjust_processing_template_decl = true;
--processing_template_decl;
@@ -10623,10 +10631,6 @@ gen_elem_of_pack_expansion_instantiation (tree pattern,
sequence, the value of the expression is as follows; the program is
ill-formed if the operator is not listed in this table.
- * 1
- + 0
- & -1
- | 0
&& true
|| false
, void() */
@@ -10638,14 +10642,6 @@ expand_empty_fold (tree t, tsubst_flags_t complain)
if (!FOLD_EXPR_MODIFY_P (t))
switch (code)
{
- case MULT_EXPR:
- return integer_one_node;
- case PLUS_EXPR:
- return integer_zero_node;
- case BIT_AND_EXPR:
- return integer_minus_one_node;
- case BIT_IOR_EXPR:
- return integer_zero_node;
case TRUTH_ANDIF_EXPR:
return boolean_true_node;
case TRUTH_ORIF_EXPR:
@@ -11037,11 +11033,12 @@ tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
/* For each argument in each argument pack, substitute into the
pattern. */
result = make_tree_vec (len);
+ tree elem_args = copy_template_args (args);
for (i = 0; i < len; ++i)
{
t = gen_elem_of_pack_expansion_instantiation (pattern, packs,
i,
- args, complain,
+ elem_args, complain,
in_decl);
TREE_VEC_ELT (result, i) = t;
if (t == error_mark_node)
@@ -11117,6 +11114,51 @@ get_pattern_parm (tree parm, tree tmpl)
return patparm;
}
+/* Make an argument pack out of the TREE_VEC VEC. */
+
+static tree
+make_argument_pack (tree vec)
+{
+ tree pack;
+ tree elt = TREE_VEC_ELT (vec, 0);
+ if (TYPE_P (elt))
+ pack = cxx_make_type (TYPE_ARGUMENT_PACK);
+ else
+ {
+ pack = make_node (NONTYPE_ARGUMENT_PACK);
+ TREE_TYPE (pack) = TREE_TYPE (elt);
+ TREE_CONSTANT (pack) = 1;
+ }
+ SET_ARGUMENT_PACK_ARGS (pack, vec);
+ return pack;
+}
+
+/* Return an exact copy of template args T that can be modified
+ independently. */
+
+static tree
+copy_template_args (tree t)
+{
+ if (t == error_mark_node)
+ return t;
+
+ int len = TREE_VEC_LENGTH (t);
+ tree new_vec = make_tree_vec (len);
+
+ for (int i = 0; i < len; ++i)
+ {
+ tree elt = TREE_VEC_ELT (t, i);
+ if (elt && TREE_CODE (elt) == TREE_VEC)
+ elt = copy_template_args (elt);
+ TREE_VEC_ELT (new_vec, i) = elt;
+ }
+
+ NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_vec)
+ = NON_DEFAULT_TEMPLATE_ARGS_COUNT (t);
+
+ return new_vec;
+}
+
/* Substitute ARGS into the vector or list of template arguments T. */
static tree
@@ -12333,6 +12375,8 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
/* The initializer must not be expanded until it is required;
see [temp.inst]. */
DECL_INITIAL (r) = NULL_TREE;
+ if (VAR_P (r))
+ DECL_MODE (r) = VOIDmode;
if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
SET_DECL_RTL (r, NULL);
DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
@@ -13834,10 +13878,13 @@ tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
if (r == NULL_TREE)
{
- /* We get here for a use of 'this' in an NSDMI. */
+ /* We get here for a use of 'this' in an NSDMI as part of a
+ constructor call or as part of an aggregate initialization. */
if (DECL_NAME (t) == this_identifier
- && current_function_decl
- && DECL_CONSTRUCTOR_P (current_function_decl))
+ && ((current_function_decl
+ && DECL_CONSTRUCTOR_P (current_function_decl))
+ || (current_class_ref
+ && TREE_CODE (current_class_ref) == PLACEHOLDER_EXPR)))
return current_class_ptr;
/* This can happen for a parameter name used later in a function
@@ -14074,7 +14121,8 @@ tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
}
case SIZEOF_EXPR:
- if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
+ if (PACK_EXPANSION_P (TREE_OPERAND (t, 0))
+ || ARGUMENT_PACK_P (TREE_OPERAND (t, 0)))
{
tree expanded, op = TREE_OPERAND (t, 0);
int len = 0;
@@ -14085,7 +14133,11 @@ tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
++cp_unevaluated_operand;
++c_inhibit_evaluation_warnings;
/* We only want to compute the number of arguments. */
- expanded = tsubst_pack_expansion (op, args, complain, in_decl);
+ if (PACK_EXPANSION_P (op))
+ expanded = tsubst_pack_expansion (op, args, complain, in_decl);
+ else
+ expanded = tsubst_template_args (ARGUMENT_PACK_ARGS (op),
+ args, complain, in_decl);
--cp_unevaluated_operand;
--c_inhibit_evaluation_warnings;
@@ -14101,13 +14153,15 @@ tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
return error_mark_node;
else if (PACK_EXPANSION_P (expanded)
|| (TREE_CODE (expanded) == TREE_VEC
- && len > 0
- && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
+ && pack_expansion_args_count (expanded)))
+
{
- if (TREE_CODE (expanded) == TREE_VEC)
- expanded = TREE_VEC_ELT (expanded, len - 1);
+ if (PACK_EXPANSION_P (expanded))
+ /* OK. */;
+ else if (TREE_VEC_LENGTH (expanded) == 1)
+ expanded = TREE_VEC_ELT (expanded, 0);
else
- PACK_EXPANSION_SIZEOF_P (expanded) = true;
+ expanded = make_argument_pack (expanded);
if (TYPE_P (expanded))
return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR,
@@ -15969,6 +16023,10 @@ tsubst_copy_and_build (tree t,
else
r = build_x_indirect_ref (input_location, r, RO_UNARY_STAR,
complain|decltype_flag);
+
+ if (TREE_CODE (r) == INDIRECT_REF)
+ REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
+
RETURN (r);
}
@@ -16166,7 +16224,8 @@ tsubst_copy_and_build (tree t,
length, stride, TREE_TYPE (op1)));
}
case SIZEOF_EXPR:
- if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
+ if (PACK_EXPANSION_P (TREE_OPERAND (t, 0))
+ || ARGUMENT_PACK_P (TREE_OPERAND (t, 0)))
RETURN (tsubst_copy (t, args, complain, in_decl));
/* Fall through */
@@ -17044,8 +17103,6 @@ tsubst_copy_and_build (tree t,
else
gcc_unreachable ();
LAMBDA_EXPR_EXTRA_SCOPE (r) = scope;
- LAMBDA_EXPR_RETURN_TYPE (r)
- = tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl);
gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (t) == NULL_TREE
&& LAMBDA_EXPR_PENDING_PROXIES (t) == NULL);
@@ -17056,6 +17113,9 @@ tsubst_copy_and_build (tree t,
declaration of the op() for later calls to lambda_function. */
complete_type (type);
+ if (tree fn = lambda_function (type))
+ LAMBDA_EXPR_RETURN_TYPE (r) = TREE_TYPE (TREE_TYPE (fn));
+
LAMBDA_EXPR_THIS_CAPTURE (r) = NULL_TREE;
insert_pending_capture_proxies ();
@@ -20296,7 +20356,7 @@ more_specialized_fn (tree pat1, tree pat2, int len)
if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
{
- int i, len2 = list_length (args2);
+ int i, len2 = remaining_arguments (args2);
tree parmvec = make_tree_vec (1);
tree argvec = make_tree_vec (len2);
tree ta = args2;
@@ -20320,7 +20380,7 @@ more_specialized_fn (tree pat1, tree pat2, int len)
}
else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
{
- int i, len1 = list_length (args1);
+ int i, len1 = remaining_arguments (args1);
tree parmvec = make_tree_vec (1);
tree argvec = make_tree_vec (len1);
tree ta = args1;
@@ -21681,7 +21741,8 @@ instantiate_decl (tree d, int defer_ok,
if (TREE_CODE (d) == FUNCTION_DECL)
{
deleted_p = DECL_DELETED_FN (code_pattern);
- pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE
+ pattern_defined = ((DECL_SAVED_TREE (code_pattern) != NULL_TREE
+ && DECL_INITIAL (code_pattern) != error_mark_node)
|| DECL_DEFAULTED_OUTSIDE_CLASS_P (code_pattern)
|| deleted_p);
}
@@ -21881,7 +21942,7 @@ instantiate_decl (tree d, int defer_ok,
if (enter_context)
pop_nested_class ();
- if (variable_template_p (td))
+ if (variable_template_p (gen_tmpl))
note_variable_template_instantiation (d);
}
else if (TREE_CODE (d) == FUNCTION_DECL && DECL_DEFAULTED_FN (code_pattern))
diff --git a/gcc/cp/rtti.c b/gcc/cp/rtti.c
index 69c3905..244c34d 100644
--- a/gcc/cp/rtti.c
+++ b/gcc/cp/rtti.c
@@ -507,12 +507,13 @@ get_typeid (tree type, tsubst_flags_t complain)
static tree
ifnonnull (tree test, tree result, tsubst_flags_t complain)
{
- return build3 (COND_EXPR, TREE_TYPE (result),
- build2 (EQ_EXPR, boolean_type_node, test,
- cp_convert (TREE_TYPE (test), nullptr_node,
- complain)),
- cp_convert (TREE_TYPE (result), nullptr_node, complain),
- result);
+ tree cond = build2 (NE_EXPR, boolean_type_node, test,
+ cp_convert (TREE_TYPE (test), nullptr_node, complain));
+ /* This is a compiler generated comparison, don't emit
+ e.g. -Wnonnull-compare warning for it. */
+ TREE_NO_WARNING (cond) = 1;
+ return build3 (COND_EXPR, TREE_TYPE (result), cond, result,
+ cp_convert (TREE_TYPE (result), nullptr_node, complain));
}
/* Execute a dynamic cast, as described in section 5.2.6 of the 9/93 working
diff --git a/gcc/cp/search.c b/gcc/cp/search.c
index 7924611..503e34b 100644
--- a/gcc/cp/search.c
+++ b/gcc/cp/search.c
@@ -1751,9 +1751,11 @@ adjust_result_of_qualified_name_lookup (tree decl,
if (base && base != error_mark_node)
{
BASELINK_ACCESS_BINFO (decl) = base;
- BASELINK_BINFO (decl)
+ tree decl_binfo
= lookup_base (base, BINFO_TYPE (BASELINK_BINFO (decl)),
ba_unique, NULL, tf_none);
+ if (decl_binfo && decl_binfo != error_mark_node)
+ BASELINK_BINFO (decl) = decl_binfo;
}
}
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index f0288ea..1574e60 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -1649,7 +1649,15 @@ force_paren_expr (tree expr)
if (TREE_CODE (expr) == COMPONENT_REF)
REF_PARENTHESIZED_P (expr) = true;
- else if (type_dependent_expression_p (expr))
+ else if (type_dependent_expression_p (expr)
+ /* When processing_template_decl, a SCOPE_REF may actually be
+ referring to a non-static data member of the current class, in
+ which case its TREE_TYPE may not be properly cv-qualified (the
+ cv-qualifiers of the implicit *this object haven't yet been taken
+ into account) so we have to delay building a static_cast until
+ instantiation. */
+ || (processing_template_decl
+ && TREE_CODE (expr) == SCOPE_REF))
expr = build1 (PAREN_EXPR, TREE_TYPE (expr), expr);
else if (VAR_P (expr) && DECL_HARD_REGISTER (expr))
/* We can't bind a hard register variable to a reference. */;
@@ -1673,6 +1681,30 @@ force_paren_expr (tree expr)
return expr;
}
+/* If T is an id-expression obfuscated by force_paren_expr, undo the
+ obfuscation and return the underlying id-expression. Otherwise
+ return T. */
+
+tree
+maybe_undo_parenthesized_ref (tree t)
+{
+ if (cxx_dialect >= cxx14
+ && INDIRECT_REF_P (t)
+ && REF_PARENTHESIZED_P (t))
+ {
+ t = TREE_OPERAND (t, 0);
+ while (TREE_CODE (t) == NON_LVALUE_EXPR
+ || TREE_CODE (t) == NOP_EXPR)
+ t = TREE_OPERAND (t, 0);
+
+ gcc_assert (TREE_CODE (t) == ADDR_EXPR
+ || TREE_CODE (t) == STATIC_CAST_EXPR);
+ t = TREE_OPERAND (t, 0);
+ }
+
+ return t;
+}
+
/* Finish a parenthesized expression EXPR. */
cp_expr
@@ -2256,6 +2288,10 @@ finish_call_expr (tree fn, vec<tree, va_gc> **args, bool disallow_virtual,
gcc_assert (!TYPE_P (fn));
+ /* If FN may be a FUNCTION_DECL obfuscated by force_paren_expr, undo
+ it so that we can tell this is a call to a known function. */
+ fn = maybe_undo_parenthesized_ref (fn);
+
orig_fn = fn;
if (processing_template_decl)
@@ -2273,6 +2309,7 @@ finish_call_expr (tree fn, vec<tree, va_gc> **args, bool disallow_virtual,
related to CWG issues 515 and 1005. */
|| (TREE_CODE (fn) != COMPONENT_REF
&& non_static_member_function_p (fn)
+ && !DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (get_first_fn (fn))
&& current_class_ref
&& type_dependent_expression_p (current_class_ref)))
{
@@ -2351,8 +2388,16 @@ finish_call_expr (tree fn, vec<tree, va_gc> **args, bool disallow_virtual,
[class.access.base] says that we need to convert 'this' to B* as
part of the access, so we pass 'B' to maybe_dummy_object. */
- object = maybe_dummy_object (BINFO_TYPE (BASELINK_ACCESS_BINFO (fn)),
- NULL);
+ if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (get_first_fn (fn)))
+ {
+ /* A constructor call always uses a dummy object. (This constructor
+ call which has the form A::A () is actually invalid and we are
+ going to reject it later in build_new_method_call.) */
+ object = build_dummy_object (BINFO_TYPE (BASELINK_ACCESS_BINFO (fn)));
+ }
+ else
+ object = maybe_dummy_object (BINFO_TYPE (BASELINK_ACCESS_BINFO (fn)),
+ NULL);
if (processing_template_decl)
{
@@ -4030,6 +4075,7 @@ simplify_aggr_init_expr (tree *tp)
AGGR_INIT_EXPR_ARGP (aggr_init_expr));
TREE_NOTHROW (call_expr) = TREE_NOTHROW (aggr_init_expr);
CALL_EXPR_LIST_INIT_P (call_expr) = CALL_EXPR_LIST_INIT_P (aggr_init_expr);
+ CALL_FROM_THUNK_P (call_expr) = AGGR_INIT_FROM_THUNK_P (aggr_init_expr);
if (style == ctor)
{
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
index 3203aca..5d9de34 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -464,14 +464,22 @@ build_aggr_init_expr (tree type, tree init)
{
slot = build_local_temp (type);
- if (TREE_CODE(init) == CALL_EXPR)
- rval = build_aggr_init_array (void_type_node, fn, slot,
- call_expr_nargs (init),
- CALL_EXPR_ARGP (init));
+ if (TREE_CODE (init) == CALL_EXPR)
+ {
+ rval = build_aggr_init_array (void_type_node, fn, slot,
+ call_expr_nargs (init),
+ CALL_EXPR_ARGP (init));
+ AGGR_INIT_FROM_THUNK_P (rval)
+ = CALL_FROM_THUNK_P (init);
+ }
else
- rval = build_aggr_init_array (void_type_node, fn, slot,
- aggr_init_expr_nargs (init),
- AGGR_INIT_EXPR_ARGP (init));
+ {
+ rval = build_aggr_init_array (void_type_node, fn, slot,
+ aggr_init_expr_nargs (init),
+ AGGR_INIT_EXPR_ARGP (init));
+ AGGR_INIT_FROM_THUNK_P (rval)
+ = AGGR_INIT_FROM_THUNK_P (init);
+ }
TREE_SIDE_EFFECTS (rval) = 1;
AGGR_INIT_VIA_CTOR_P (rval) = is_ctor;
TREE_NOTHROW (rval) = TREE_NOTHROW (init);
@@ -816,9 +824,8 @@ build_cplus_array_type (tree elt_type, tree index_type)
if (elt_type == error_mark_node || index_type == error_mark_node)
return error_mark_node;
- bool dependent = (processing_template_decl
- && (dependent_type_p (elt_type)
- || (index_type && dependent_type_p (index_type))));
+ bool dependent = (uses_template_parms (elt_type)
+ || (index_type && uses_template_parms (index_type)));
if (elt_type != TYPE_MAIN_VARIANT (elt_type))
/* Start with an array of the TYPE_MAIN_VARIANT. */
@@ -1429,6 +1436,9 @@ strip_typedefs (tree t, bool *remove_attributes)
result = make_typename_type (strip_typedefs (TYPE_CONTEXT (t),
remove_attributes),
fullname, typename_type, tf_none);
+ /* Handle 'typedef typename A::N N;' */
+ if (typedef_variant_p (result))
+ result = TYPE_MAIN_VARIANT (DECL_ORIGINAL_TYPE (TYPE_NAME (result)));
}
break;
case DECLTYPE_TYPE:
@@ -1447,7 +1457,18 @@ strip_typedefs (tree t, bool *remove_attributes)
}
if (!result)
- result = TYPE_MAIN_VARIANT (t);
+ {
+ if (typedef_variant_p (t))
+ {
+ /* Explicitly get the underlying type, as TYPE_MAIN_VARIANT doesn't
+ strip typedefs with attributes. */
+ result = TYPE_MAIN_VARIANT (DECL_ORIGINAL_TYPE (TYPE_NAME (t)));
+ result = strip_typedefs (result);
+ }
+ else
+ result = TYPE_MAIN_VARIANT (t);
+ }
+ gcc_assert (!typedef_variant_p (result));
if (TYPE_USER_ALIGN (t) != TYPE_USER_ALIGN (result)
|| TYPE_ALIGN (t) != TYPE_ALIGN (result))
{
@@ -2592,8 +2613,10 @@ build_ctor_subob_ref (tree index, tree type, tree obj)
{
/* When the destination object refers to a flexible array member
verify that it matches the type of the source object except
- for its domain. */
- gcc_assert (comptypes (type, objtype, COMPARE_REDECLARATION));
+ for its domain and qualifiers. */
+ gcc_assert (comptypes (TYPE_MAIN_VARIANT (type),
+ TYPE_MAIN_VARIANT (objtype),
+ COMPARE_REDECLARATION));
}
else
gcc_assert (same_type_ignoring_top_level_qualifiers_p (type, objtype));
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index 5e62220..9e61090 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -3974,6 +3974,38 @@ build_vec_cmp (tree_code code, tree type,
return build3 (VEC_COND_EXPR, type, cmp, minus_one_vec, zero_vec);
}
+/* Possibly warn about an address never being NULL. */
+
+static void
+warn_for_null_address (location_t location, tree op, tsubst_flags_t complain)
+{
+ if (!warn_address
+ || (complain & tf_warning) == 0
+ || c_inhibit_evaluation_warnings != 0
+ || TREE_NO_WARNING (op))
+ return;
+
+ tree cop = fold_non_dependent_expr (op);
+
+ if (TREE_CODE (cop) == ADDR_EXPR
+ && decl_with_nonnull_addr_p (TREE_OPERAND (cop, 0))
+ && !TREE_NO_WARNING (cop))
+ warning_at (location, OPT_Waddress, "the address of %qD will never "
+ "be NULL", TREE_OPERAND (cop, 0));
+
+ if (CONVERT_EXPR_P (op)
+ && TREE_CODE (TREE_TYPE (TREE_OPERAND (op, 0))) == REFERENCE_TYPE)
+ {
+ tree inner_op = op;
+ STRIP_NOPS (inner_op);
+
+ if (DECL_P (inner_op))
+ warning_at (location, OPT_Waddress,
+ "the compiler can assume that the address of "
+ "%qD will never be NULL", inner_op);
+ }
+}
+
/* Build a binary-operation expression without default conversions.
CODE is the kind of expression to build.
LOCATION is the location_t of the operator in the source code.
@@ -4332,7 +4364,7 @@ cp_build_binary_op (location_t location,
{
tree m1 = build_all_ones_cst (TREE_TYPE (op0));
tree z = build_zero_cst (TREE_TYPE (op0));
- op1 = build_conditional_expr (location, op1, z, m1, complain);
+ op1 = build_conditional_expr (location, op1, m1, z, complain);
}
else if (!COMPARISON_CLASS_P (op1))
op1 = cp_build_binary_op (EXPR_LOCATION (op1), NE_EXPR, op1,
@@ -4520,32 +4552,7 @@ cp_build_binary_op (location_t location,
else
result_type = type0;
- if (TREE_CODE (op0) == ADDR_EXPR
- && decl_with_nonnull_addr_p (TREE_OPERAND (op0, 0)))
- {
- if ((complain & tf_warning)
- && c_inhibit_evaluation_warnings == 0
- && !TREE_NO_WARNING (op0))
- warning (OPT_Waddress, "the address of %qD will never be NULL",
- TREE_OPERAND (op0, 0));
- }
-
- if (CONVERT_EXPR_P (op0)
- && TREE_CODE (TREE_TYPE (TREE_OPERAND (op0, 0)))
- == REFERENCE_TYPE)
- {
- tree inner_op0 = op0;
- STRIP_NOPS (inner_op0);
-
- if ((complain & tf_warning)
- && c_inhibit_evaluation_warnings == 0
- && !TREE_NO_WARNING (op0)
- && DECL_P (inner_op0))
- warning_at (location, OPT_Waddress,
- "the compiler can assume that the address of "
- "%qD will never be NULL",
- inner_op0);
- }
+ warn_for_null_address (location, op0, complain);
}
else if (((code1 == POINTER_TYPE || TYPE_PTRDATAMEM_P (type1))
&& null_ptr_cst_p (op0))
@@ -4559,32 +4566,7 @@ cp_build_binary_op (location_t location,
else
result_type = type1;
- if (TREE_CODE (op1) == ADDR_EXPR
- && decl_with_nonnull_addr_p (TREE_OPERAND (op1, 0)))
- {
- if ((complain & tf_warning)
- && c_inhibit_evaluation_warnings == 0
- && !TREE_NO_WARNING (op1))
- warning (OPT_Waddress, "the address of %qD will never be NULL",
- TREE_OPERAND (op1, 0));
- }
-
- if (CONVERT_EXPR_P (op1)
- && TREE_CODE (TREE_TYPE (TREE_OPERAND (op1, 0)))
- == REFERENCE_TYPE)
- {
- tree inner_op1 = op1;
- STRIP_NOPS (inner_op1);
-
- if ((complain & tf_warning)
- && c_inhibit_evaluation_warnings == 0
- && !TREE_NO_WARNING (op1)
- && DECL_P (inner_op1))
- warning_at (location, OPT_Waddress,
- "the compiler can assume that the address of "
- "%qD will never be NULL",
- inner_op1);
- }
+ warn_for_null_address (location, op1, complain);
}
else if ((code0 == POINTER_TYPE && code1 == POINTER_TYPE)
|| (TYPE_PTRDATAMEM_P (type0) && TYPE_PTRDATAMEM_P (type1)))
@@ -6704,11 +6686,7 @@ build_static_cast_1 (tree type, tree expr, bool c_cast_p,
tree lref = cp_build_reference_type (TREE_TYPE (type), false);
result = (perform_direct_initialization_if_possible
(lref, expr, c_cast_p, complain));
- result = cp_fold_convert (type, result);
- /* Make sure we don't fold back down to a named rvalue reference,
- because that would be an lvalue. */
- if (DECL_P (result))
- result = build1 (NON_LVALUE_EXPR, type, result);
+ result = build1 (NON_LVALUE_EXPR, type, result);
return convert_from_reference (result);
}
else
@@ -8917,17 +8895,7 @@ check_return_expr (tree retval, bool *no_warning)
/* If we had an id-expression obfuscated by force_paren_expr, we need
to undo it so we can try to treat it as an rvalue below. */
- if (cxx_dialect >= cxx14
- && INDIRECT_REF_P (retval)
- && REF_PARENTHESIZED_P (retval))
- {
- retval = TREE_OPERAND (retval, 0);
- while (TREE_CODE (retval) == NON_LVALUE_EXPR
- || TREE_CODE (retval) == NOP_EXPR)
- retval = TREE_OPERAND (retval, 0);
- gcc_assert (TREE_CODE (retval) == ADDR_EXPR);
- retval = TREE_OPERAND (retval, 0);
- }
+ retval = maybe_undo_parenthesized_ref (retval);
/* Under C++11 [12.8/32 class.copy], a returned lvalue is sometimes
treated as an rvalue for the purposes of overload resolution to
diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c
index 2a76c96..b921689 100644
--- a/gcc/cp/typeck2.c
+++ b/gcc/cp/typeck2.c
@@ -1499,9 +1499,24 @@ process_init_constructor_union (tree type, tree init,
constructor_elt *ce;
int len;
- /* If the initializer was empty, use default zero initialization. */
+ /* If the initializer was empty, use the union's NSDMI if it has one.
+ Otherwise use default zero initialization. */
if (vec_safe_is_empty (CONSTRUCTOR_ELTS (init)))
- return 0;
+ {
+ for (tree field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
+ {
+ if (DECL_INITIAL (field))
+ {
+ CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (init),
+ field,
+ get_nsdmi (field, /*in_ctor=*/false));
+ break;
+ }
+ }
+
+ if (vec_safe_is_empty (CONSTRUCTOR_ELTS (init)))
+ return 0;
+ }
len = CONSTRUCTOR_ELTS (init)->length ();
if (len > 1)
@@ -2128,7 +2143,7 @@ merge_exception_specifiers (tree list, tree add)
return add;
noex = TREE_PURPOSE (list);
gcc_checking_assert (!TREE_PURPOSE (add)
- || errorcount
+ || errorcount || !flag_exceptions
|| cp_tree_equal (noex, TREE_PURPOSE (add)));
/* Combine the dynamic-exception-specifiers, if any. */
diff --git a/gcc/df-problems.c b/gcc/df-problems.c
index 6313888..f7bf3c8 100644
--- a/gcc/df-problems.c
+++ b/gcc/df-problems.c
@@ -517,10 +517,7 @@ df_rd_transfer_function (int bb_index)
bitmap_ior_into (&tmp, gen);
changed = !bitmap_equal_p (&tmp, out);
if (changed)
- {
- bitmap_clear (out);
- bb_info->out = tmp;
- }
+ bitmap_move (out, &tmp);
else
bitmap_clear (&tmp);
}
diff --git a/gcc/diagnostic-show-locus.c b/gcc/diagnostic-show-locus.c
index 3acdb32..bf95666 100644
--- a/gcc/diagnostic-show-locus.c
+++ b/gcc/diagnostic-show-locus.c
@@ -117,7 +117,10 @@ class layout_point
class layout_range
{
public:
- layout_range (const location_range *loc_range);
+ layout_range (const expanded_location *start_exploc,
+ const expanded_location *finish_exploc,
+ bool show_caret_p,
+ const expanded_location *caret_exploc);
bool contains_point (int row, int column) const;
@@ -328,11 +331,14 @@ colorizer::finish_state (int state)
Initialize various layout_point fields from expanded_location
equivalents; we've already filtered on file. */
-layout_range::layout_range (const location_range *loc_range)
-: m_start (loc_range->m_start),
- m_finish (loc_range->m_finish),
- m_show_caret_p (loc_range->m_show_caret_p),
- m_caret (loc_range->m_caret)
+layout_range::layout_range (const expanded_location *start_exploc,
+ const expanded_location *finish_exploc,
+ bool show_caret_p,
+ const expanded_location *caret_exploc)
+: m_start (*start_exploc),
+ m_finish (*finish_exploc),
+ m_show_caret_p (show_caret_p),
+ m_caret (*caret_exploc)
{
}
@@ -457,6 +463,82 @@ get_line_width_without_trailing_whitespace (const char *line, int line_width)
return result;
}
+/* Helper function for layout's ctor, for sanitizing locations relative
+ to the primary location within a diagnostic.
+
+ Compare LOC_A and LOC_B to see if it makes sense to print underlines
+ connecting their expanded locations. Doing so is only guaranteed to
+ make sense if the locations share the same macro expansion "history"
+ i.e. they can be traced through the same macro expansions, eventually
+ reaching an ordinary map.
+
+ This may be too strong a condition, but it effectively sanitizes
+ PR c++/70105, which has an example of printing an expression where the
+ final location of the expression is in a different macro, which
+ erroneously was leading to hundreds of lines of irrelevant source
+ being printed. */
+
+static bool
+compatible_locations_p (location_t loc_a, location_t loc_b)
+{
+ if (IS_ADHOC_LOC (loc_a))
+ loc_a = get_location_from_adhoc_loc (line_table, loc_a);
+ if (IS_ADHOC_LOC (loc_b))
+ loc_b = get_location_from_adhoc_loc (line_table, loc_b);
+
+ /* If either location is one of the special locations outside of a
+ linemap, they are only compatible if they are equal. */
+ if (loc_a < RESERVED_LOCATION_COUNT
+ || loc_b < RESERVED_LOCATION_COUNT)
+ return loc_a == loc_b;
+
+ const line_map *map_a = linemap_lookup (line_table, loc_a);
+ linemap_assert (map_a);
+
+ const line_map *map_b = linemap_lookup (line_table, loc_b);
+ linemap_assert (map_b);
+
+ /* Are they within the same map? */
+ if (map_a == map_b)
+ {
+ /* Are both within the same macro expansion? */
+ if (linemap_macro_expansion_map_p (map_a))
+ {
+ /* Expand each location towards the spelling location, and
+ recurse. */
+ const line_map_macro *macro_map = linemap_check_macro (map_a);
+ source_location loc_a_toward_spelling
+ = linemap_macro_map_loc_unwind_toward_spelling (line_table,
+ macro_map,
+ loc_a);
+ source_location loc_b_toward_spelling
+ = linemap_macro_map_loc_unwind_toward_spelling (line_table,
+ macro_map,
+ loc_b);
+ return compatible_locations_p (loc_a_toward_spelling,
+ loc_b_toward_spelling);
+ }
+
+ /* Otherwise they are within the same ordinary map. */
+ return true;
+ }
+ else
+ {
+ /* Within different maps. */
+
+ /* If either is within a macro expansion, they are incompatible. */
+ if (linemap_macro_expansion_map_p (map_a)
+ || linemap_macro_expansion_map_p (map_b))
+ return false;
+
+ /* Within two different ordinary maps; they are compatible iff they
+ are in the same file. */
+ const line_map_ordinary *ord_map_a = linemap_check_ordinary (map_a);
+ const line_map_ordinary *ord_map_b = linemap_check_ordinary (map_b);
+ return ord_map_a->to_file == ord_map_b->to_file;
+ }
+}
+
/* Implementation of class layout. */
/* Constructor for class layout.
@@ -473,7 +555,7 @@ layout::layout (diagnostic_context * context,
: m_context (context),
m_pp (context->printer),
m_diagnostic_kind (diagnostic->kind),
- m_exploc (diagnostic->richloc->lazily_expand_location ()),
+ m_exploc (diagnostic->richloc->get_expanded_location (0)),
m_colorizer (context, diagnostic),
m_colorize_source_p (context->colorize_source_p),
m_layout_ranges (rich_location::MAX_RANGES),
@@ -481,31 +563,57 @@ layout::layout (diagnostic_context * context,
m_x_offset (0)
{
rich_location *richloc = diagnostic->richloc;
+ source_location primary_loc = richloc->get_range (0)->m_loc;
+
for (unsigned int idx = 0; idx < richloc->get_num_locations (); idx++)
{
/* This diagnostic printer can only cope with "sufficiently sane" ranges.
Ignore any ranges that are awkward to handle. */
const location_range *loc_range = richloc->get_range (idx);
+ /* Split the "range" into caret and range information. */
+ source_range src_range = get_range_from_loc (line_table, loc_range->m_loc);
+
+ /* Expand the various locations. */
+ expanded_location start
+ = linemap_client_expand_location_to_spelling_point (src_range.m_start);
+ expanded_location finish
+ = linemap_client_expand_location_to_spelling_point (src_range.m_finish);
+ expanded_location caret
+ = linemap_client_expand_location_to_spelling_point (loc_range->m_loc);
+
/* If any part of the range isn't in the same file as the primary
location of this diagnostic, ignore the range. */
- if (loc_range->m_start.file != m_exploc.file)
+ if (start.file != m_exploc.file)
continue;
- if (loc_range->m_finish.file != m_exploc.file)
+ if (finish.file != m_exploc.file)
continue;
if (loc_range->m_show_caret_p)
- if (loc_range->m_caret.file != m_exploc.file)
+ if (caret.file != m_exploc.file)
continue;
+ /* Sanitize the caret location for non-primary ranges. */
+ if (m_layout_ranges.length () > 0)
+ if (loc_range->m_show_caret_p)
+ if (!compatible_locations_p (loc_range->m_loc, primary_loc))
+ /* Discard any non-primary ranges that can't be printed
+ sanely relative to the primary location. */
+ continue;
+
/* Everything is now known to be in the correct source file,
but it may require further sanitization. */
- layout_range ri (loc_range);
+ layout_range ri (&start, &finish, loc_range->m_show_caret_p, &caret);
/* If we have a range that finishes before it starts (perhaps
from something built via macro expansion), printing the
range is likely to be nonsensical. Also, attempting to do so
- breaks assumptions within the printing code (PR c/68473). */
- if (loc_range->m_start.line > loc_range->m_finish.line)
+ breaks assumptions within the printing code (PR c/68473).
+ Similarly, don't attempt to print ranges if one or both ends
+ of the range aren't sane to print relative to the
+ primary location (PR c++/70105). */
+ if (start.line > finish.line
+ || !compatible_locations_p (src_range.m_start, primary_loc)
+ || !compatible_locations_p (src_range.m_finish, primary_loc))
{
/* Is this the primary location? */
if (m_layout_ranges.length () == 0)
diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c
index 322f2d9..6a679cb 100644
--- a/gcc/diagnostic.c
+++ b/gcc/diagnostic.c
@@ -1338,17 +1338,3 @@ real_abort (void)
{
abort ();
}
-
-/* Display the given source_range instance, with MSG as a descriptive
- comment. This issues a "note" diagnostic at the range.
-
- This is declared within libcpp, but implemented here, since it
- makes use of the diagnostic-printing machinery. */
-
-DEBUG_FUNCTION void
-source_range::debug (const char *msg) const
-{
- rich_location richloc (line_table, m_start);
- richloc.add_range (m_start, m_finish, false);
- inform_at_rich_loc (&richloc, "%s", msg);
-}
diff --git a/gcc/diagnostic.h b/gcc/diagnostic.h
index 017ddca..ff57357 100644
--- a/gcc/diagnostic.h
+++ b/gcc/diagnostic.h
@@ -339,7 +339,7 @@ diagnostic_num_locations (const diagnostic_info * diagnostic)
static inline expanded_location
diagnostic_expand_location (const diagnostic_info * diagnostic, int which = 0)
{
- return diagnostic->richloc->get_range (which)->m_caret;
+ return diagnostic->richloc->get_expanded_location (which);
}
/* This is somehow the right-side margin of a caret line, that is, we
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index 476d089..a5a8b23 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -954,9 +954,13 @@ typedef _Complex float __attribute__((mode(TC))) _Complex128;
typedef _Complex float __attribute__((mode(XC))) _Complex80;
@end smallexample
-On PowerPC 64-bit Linux systems there are currently problems in using
-the complex @code{__float128} type. When these problems are fixed,
-you would use:
+In order to use @code{__float128} and @code{__ibm128} on PowerPC Linux
+systems, you must use the @option{-mfloat128}. It is expected in
+future versions of GCC that @code{__float128} will be enabled
+automatically. In addition, there are currently problems in using the
+complex @code{__float128} type. When these problems are fixed, you
+would use the following syntax to declare @code{_Complex128} to be a
+complex @code{__float128} type:
@smallexample
typedef _Complex float __attribute__((mode(KC))) _Complex128;
@@ -1473,23 +1477,6 @@ that it installed previously.
The preprocessor symbols @code{__SEG_FS} and @code{__SEG_GS} are
defined when these address spaces are supported.
-
-@item __seg_tls
-@cindex @code{__seg_tls} x86 named address space
-Some operating systems define either the @code{%fs} or @code{%gs}
-segment as the thread-local storage base for each thread. Objects
-within this address space are accessed with the appropriate
-segment override prefix.
-
-The pointer located at address 0 within the segment contains the
-offset of the segment within the generic address space. Thus this
-address space is considered a subspace of the generic address space,
-and the known segment offset is applied when converting addresses
-to and from the generic address space.
-
-The preprocessor symbol @code{__SEG_TLS} is defined when this
-address space is supported.
-
@end table
@node Zero Length
@@ -2789,29 +2776,40 @@ refer to the following subsections for details.
@item leaf
@cindex @code{leaf} function attribute
-Calls to external functions with this attribute must return to the current
-compilation unit only by return or by exception handling. In particular, leaf
-functions are not allowed to call callback function passed to it from the current
-compilation unit or directly call functions exported by the unit or longjmp
-into the unit. Leaf function might still call functions from other compilation
-units and thus they are not necessarily leaf in the sense that they contain no
-function calls at all.
-
-The attribute is intended for library functions to improve dataflow analysis.
-The compiler takes the hint that any data not escaping the current compilation unit can
-not be used or modified by the leaf function. For example, the @code{sin} function
-is a leaf function, but @code{qsort} is not.
-
-Note that leaf functions might invoke signals and signal handlers might be
-defined in the current compilation unit and use static variables. The only
-compliant way to write such a signal handler is to declare such variables
-@code{volatile}.
-
-The attribute has no effect on functions defined within the current compilation
-unit. This is to allow easy merging of multiple compilation units into one,
-for example, by using the link-time optimization. For this reason the
-attribute is not allowed on types to annotate indirect calls.
-
+Calls to external functions with this attribute must return to the
+current compilation unit only by return or by exception handling. In
+particular, a leaf function is not allowed to invoke callback functions
+passed to it from the current compilation unit, directly call functions
+exported by the unit, or @code{longjmp} into the unit. Leaf functions
+might still call functions from other compilation units and thus they
+are not necessarily leaf in the sense that they contain no function
+calls at all.
+
+The attribute is intended for library functions to improve dataflow
+analysis. The compiler takes the hint that any data not escaping the
+current compilation unit cannot be used or modified by the leaf
+function. For example, the @code{sin} function is a leaf function, but
+@code{qsort} is not.
+
+Note that leaf functions might indirectly run a signal handler defined
+in the current compilation unit that uses static variables. Similarly,
+when lazy symbol resolution is in effect, leaf functions might invoke
+indirect functions whose resolver function or implementation function is
+defined in the current compilation unit and uses static variables. There
+is no standard-compliant way to write such a signal handler, resolver
+function, or implementation function, and the best that you can do is to
+remove the @code{leaf} attribute or mark all such static variables
+@code{volatile}. Lastly, for ELF-based systems that support symbol
+interposition, care should be taken that functions defined in the
+current compilation unit do not unexpectedly interpose other symbols
+based on the defined standards mode and defined feature test macros;
+otherwise an inadvertent callback would be added.
+
+The attribute has no effect on functions defined within the current
+compilation unit. This is to allow easy merging of multiple compilation
+units into one, for example, by using the link-time optimization. For
+this reason the attribute is not allowed on types to annotate indirect
+calls.
@item malloc
@cindex @code{malloc} function attribute
@@ -3051,7 +3049,7 @@ int square (int) __attribute__ ((pure));
says that the hypothetical function @code{square} is safe to call
fewer times than the program says.
-Some of common examples of pure functions are @code{strlen} or @code{memcmp}.
+Some common examples of pure functions are @code{strlen} or @code{memcmp}.
Interesting non-pure functions are functions with infinite loops or those
depending on volatile memory or other system resource, that may change between
two consecutive calls (such as @code{feof} in a multithreading environment).
@@ -7458,10 +7456,10 @@ note that some assembler dialects use semicolons to start a comment.
@end table
@subsubheading Remarks
-Using extended @code{asm} typically produces smaller, safer, and more
-efficient code, and in most cases it is a better solution than basic
-@code{asm}. However, there are two situations where only basic @code{asm}
-can be used:
+Using extended @code{asm} (@pxref{Extended Asm}) typically produces
+smaller, safer, and more efficient code, and in most cases it is a
+better solution than basic @code{asm}. However, there are two
+situations where only basic @code{asm} can be used:
@itemize @bullet
@item
@@ -7498,9 +7496,24 @@ assembly code when optimizing. This can lead to unexpected duplicate
symbol errors during compilation if your assembly code defines symbols or
labels.
-Since GCC does not parse the @var{AssemblerInstructions}, it has no
-visibility of any symbols it references. This may result in GCC discarding
-those symbols as unreferenced.
+@strong{Warning:} The C standards do not specify semantics for @code{asm},
+making it a potential source of incompatibilities between compilers. These
+incompatibilities may not produce compiler warnings/errors.
+
+GCC does not parse basic @code{asm}'s @var{AssemblerInstructions}, which
+means there is no way to communicate to the compiler what is happening
+inside them. GCC has no visibility of symbols in the @code{asm} and may
+discard them as unreferenced. It also does not know about side effects of
+the assembler code, such as modifications to memory or registers. Unlike
+some compilers, GCC assumes that no changes to either memory or registers
+occur. This assumption may change in a future release.
+
+To avoid complications from future changes to the semantics and the
+compatibility issues between compilers, consider replacing basic @code{asm}
+with extended @code{asm}. See
+@uref{https://gcc.gnu.org/wiki/ConvertBasicAsmToExtended, How to convert
+from basic asm to extended asm} for information about how to perform this
+conversion.
The compiler copies the assembler instructions in a basic @code{asm}
verbatim to the assembly language output file, without
@@ -10144,6 +10157,8 @@ in the Cilk Plus language manual which can be found at
@node Other Builtins
@section Other Built-in Functions Provided by GCC
@cindex built-in functions
+@findex __builtin_alloca
+@findex __builtin_alloca_with_align
@findex __builtin_call_with_static_chain
@findex __builtin_fpclassify
@findex __builtin_isfinite
@@ -10232,6 +10247,9 @@ in the Cilk Plus language manual which can be found at
@findex clog
@findex clogf
@findex clogl
+@findex clog10
+@findex clog10f
+@findex clog10l
@findex conj
@findex conjf
@findex conjl
@@ -10648,6 +10666,10 @@ that are recognized in any mode since ISO C90 reserves these names for
the purpose to which ISO C99 puts them. All these functions have
corresponding versions prefixed with @code{__builtin_}.
+There are also GNU extension functions @code{clog10}, @code{clog10f} and
+@code{clog10l} which names are reserved by ISO C99 for future use.
+All these functions have versions prefixed with @code{__builtin_}.
+
The ISO C94 functions
@code{iswalnum}, @code{iswalpha}, @code{iswcntrl}, @code{iswdigit},
@code{iswgraph}, @code{iswlower}, @code{iswprint}, @code{iswpunct},
@@ -10690,6 +10712,93 @@ In the same fashion, GCC provides @code{fpclassify}, @code{isfinite},
@code{__builtin_} prefixed. The @code{isinf} and @code{isnan}
built-in functions appear both with and without the @code{__builtin_} prefix.
+@deftypefn {Built-in Function} void *__builtin_alloca (size_t size)
+The @code{__builtin_alloca} function must be called at block scope.
+The function allocates an object @var{size} bytes large on the stack
+of the calling function. The object is aligned on the default stack
+alignment boundary for the target determined by the
+@code{__BIGGEST_ALIGNMENT__} macro. The @code{__builtin_alloca}
+function returns a pointer to the first byte of the allocated object.
+The lifetime of the allocated object ends just before the calling
+function returns to its caller. This is so even when
+@code{__builtin_alloca} is called within a nested block.
+
+For example, the following function allocates eight objects of @code{n}
+bytes each on the stack, storing a pointer to each in consecutive elements
+of the array @code{a}. It then passes the array to function @code{g}
+which can safely use the storage pointed to by each of the array elements.
+
+@smallexample
+void f (unsigned n)
+@{
+ void *a [8];
+ for (int i = 0; i != 8; ++i)
+ a [i] = __builtin_alloca (n);
+
+ g (a, n); // @r{safe}
+@}
+@end smallexample
+
+Since the @code{__builtin_alloca} function doesn't validate its argument
+it is the responsibility of its caller to make sure the argument doesn't
+cause it to exceed the stack size limit.
+The @code{__builtin_alloca} function is provided to make it possible to
+allocate on the stack arrays of bytes with an upper bound that may be
+computed at run time. Since C99 Variable Length Arrays offer
+similar functionality under a portable, more convenient, and safer
+interface they are recommended instead, in both C99 and C++ programs
+where GCC provides them as an extension.
+@xref{Variable Length}, for details.
+
+@end deftypefn
+
+@deftypefn {Built-in Function} void *__builtin_alloca_with_align (size_t size, size_t alignment)
+The @code{__builtin_alloca_with_align} function must be called at block
+scope. The function allocates an object @var{size} bytes large on
+the stack of the calling function. The allocated object is aligned on
+the boundary specified by the argument @var{alignment} whose unit is given
+in bits (not bytes). The @var{size} argument must be positive and not
+exceed the stack size limit. The @var{alignment} argument must be a constant
+integer expression that evaluates to a power of 2 greater than or equal to
+@code{CHAR_BIT} and less than some unspecified maximum. Invocations
+with other values are rejected with an error indicating the valid bounds.
+The function returns a pointer to the first byte of the allocated object.
+The lifetime of the allocated object ends at the end of the block in which
+the function was called. The allocated storage is released no later than
+just before the calling function returns to its caller, but may be released
+at the end of the block in which the function was called.
+
+For example, in the following function the call to @code{g} is unsafe
+because when @code{overalign} is non-zero, the space allocated by
+@code{__builtin_alloca_with_align} may have been released at the end
+of the @code{if} statement in which it was called.
+
+@smallexample
+void f (unsigned n, bool overalign)
+@{
+ void *p;
+ if (overalign)
+ p = __builtin_alloca_with_align (n, 64 /* bits */);
+ else
+ p = __builtin_alloc (n);
+
+ g (p, n); // @r{unsafe}
+@}
+@end smallexample
+
+Since the @code{__builtin_alloca_with_align} function doesn't validate its
+@var{size} argument it is the responsibility of its caller to make sure
+the argument doesn't cause it to exceed the stack size limit.
+The @code{__builtin_alloca_with_align} function is provided to make
+it possible to allocate on the stack overaligned arrays of bytes with
+an upper bound that may be computed at run time. Since C99
+Variable Length Arrays offer the same functionality under
+a portable, more convenient, and safer interface they are recommended
+instead, in both C99 and C++ programs where GCC provides them as
+an extension. @xref{Variable Length}, for details.
+
+@end deftypefn
+
@deftypefn {Built-in Function} int __builtin_types_compatible_p (@var{type1}, @var{type2})
You can use the built-in function @code{__builtin_types_compatible_p} to
diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
index 4155370..811fdfb 100644
--- a/gcc/doc/install.texi
+++ b/gcc/doc/install.texi
@@ -1758,6 +1758,10 @@ When this option is specified more detailed information on memory
allocation is gathered. This information is printed when using
@option{-fmem-report}.
+@item --enable-valgrind-annotations
+Mark selected memory related operations in the compiler when run under
+valgrind to suppress false positives.
+
@item --enable-nls
@itemx --disable-nls
The @option{--enable-nls} option enables Native Language Support (NLS),
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 2bd793d..e9763d4 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -267,7 +267,7 @@ Objective-C and Objective-C++ Dialects}.
-Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral @gol
-Wformat-security -Wformat-signedness -Wformat-y2k -Wframe-address @gol
-Wframe-larger-than=@var{len} -Wno-free-nonheap-object -Wjump-misses-init @gol
--Wignored-qualifiers -Wincompatible-pointer-types @gol
+-Wignored-qualifiers -Wignored-attributes -Wincompatible-pointer-types @gol
-Wimplicit -Wimplicit-function-declaration -Wimplicit-int @gol
-Winit-self -Winline -Wno-int-conversion @gol
-Wno-int-to-pointer-cast -Winvalid-memory-model -Wno-invalid-offsetof @gol
@@ -303,7 +303,7 @@ Objective-C and Objective-C++ Dialects}.
-Wunsuffixed-float-constants -Wunused -Wunused-function @gol
-Wunused-label -Wunused-local-typedefs -Wunused-parameter @gol
-Wno-unused-result -Wunused-value @gol -Wunused-variable @gol
--Wunused-const-variable @gol
+-Wunused-const-variable -Wunused-const-variable=@var{n} @gol
-Wunused-but-set-parameter -Wunused-but-set-variable @gol
-Wuseless-cast -Wvariadic-macros -Wvector-operation-performance @gol
-Wvla -Wvolatile-register-var -Wwrite-strings @gol
@@ -408,7 +408,7 @@ Objective-C and Objective-C++ Dialects}.
-ftree-parallelize-loops=@var{n} -ftree-pre -ftree-partial-pre -ftree-pta @gol
-ftree-reassoc -ftree-sink -ftree-slsr -ftree-sra @gol
-ftree-switch-conversion -ftree-tail-merge -ftree-ter @gol
--ftree-vectorize -ftree-vrp @gol
+-ftree-vectorize -ftree-vrp -funconstrained-commons @gol
-funit-at-a-time -funroll-all-loops -funroll-loops @gol
-funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops @gol
-fipa-ra -fvariable-expansion-in-unroller -fvect-cost-model -fvpt @gol
@@ -712,7 +712,7 @@ Objective-C and Objective-C++ Dialects}.
@gccoptlist{-msmall-model -mno-lsim}
@emph{FT32 Options}
-@gccoptlist{-msim -mlra}
+@gccoptlist{-msim -mlra -mnodiv}
@emph{FRV Options}
@gccoptlist{-mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 @gol
@@ -2238,6 +2238,16 @@ return value even without this option. In all other cases, when
exhaustion is signalled by throwing @code{std::bad_alloc}. See also
@samp{new (nothrow)}.
+@item -fconcepts
+@opindex fconcepts
+Enable support for the C++ Extensions for Concepts Technical
+Specification, ISO 19217 (2015), which allows code like
+
+@smallexample
+template <class T> concept bool Addable = requires (T t) @{ t + t; @};
+template <Addable T> T add (T a, T b) @{ return a + b; @}
+@end smallexample
+
@item -fconstexpr-depth=@var{n}
@opindex fconstexpr-depth
Set the maximum nested evaluation depth for C++11 constexpr functions
@@ -2756,7 +2766,8 @@ Requires @option{-flto} to be enabled. Enabled by default.
@item -Wnarrowing @r{(C++ and Objective-C++ only)}
@opindex Wnarrowing
@opindex Wno-narrowing
-Warn when a narrowing conversion prohibited by C++11 occurs within
+With @option{-std=gnu++98} or @option{-std=c++98}, warn when a narrowing
+conversion prohibited by C++11 occurs within
@samp{@{ @}}, e.g.
@smallexample
@@ -2765,10 +2776,13 @@ int i = @{ 2.2 @}; // error: narrowing from double to int
This flag is included in @option{-Wall} and @option{-Wc++11-compat}.
-With @option{-std=c++11}, @option{-Wno-narrowing} suppresses the diagnostic
-required by the standard. Note that this does not affect the meaning
-of well-formed code; narrowing conversions are still considered
-ill-formed in SFINAE context.
+When a later standard is in effect, e.g. when using @option{-std=c++11},
+narrowing conversions are diagnosed by default, as required by the standard.
+A narrowing conversion from a constant produces an error,
+and a narrowing conversion from a non-constant produces a warning,
+but @option{-Wno-narrowing} suppresses the diagnostic.
+Note that this does not affect the meaning of well-formed code;
+narrowing conversions are still considered ill-formed in SFINAE contexts.
@item -Wnoexcept @r{(C++ and Objective-C++ only)}
@opindex Wnoexcept
@@ -3872,6 +3886,14 @@ even without this option.
This warning is also enabled by @option{-Wextra}.
+@item -Wignored-attributes @r{(C and C++ only)}
+@opindex Wignored-attributes
+@opindex Wno-ignored-attributes
+Warn when an attribute is ignored. This is different from the
+@option{-Wattributes} option in that it warns whenever the compiler decides
+to drop an attribute, not that the attribute is either unknown, used in a
+wrong place, etc. This warning is enabled by default.
+
@item -Wmain
@opindex Wmain
@opindex Wno-main
@@ -4227,23 +4249,39 @@ its return value. The default is @option{-Wunused-result}.
@opindex Wunused-variable
@opindex Wno-unused-variable
Warn whenever a local or static variable is unused aside from its
-declaration. This option implies @option{-Wunused-const-variable} for C,
+declaration. This option implies @option{-Wunused-const-variable=1} for C,
but not for C++. This warning is enabled by @option{-Wall}.
To suppress this warning use the @code{unused} attribute
(@pxref{Variable Attributes}).
@item -Wunused-const-variable
+@itemx -Wunused-const-variable=@var{n}
@opindex Wunused-const-variable
@opindex Wno-unused-const-variable
Warn whenever a constant static variable is unused aside from its declaration.
-This warning is enabled by @option{-Wunused-variable} for C, but not for C++.
-In C++ this is normally not an error since const variables take the place of
-@code{#define}s in C++.
+@option{-Wunused-const-variable=1} is enabled by @option{-Wunused-variable}
+for C, but not for C++. In C this declares variable storage, but in C++ this
+is not an error since const variables take the place of @code{#define}s.
To suppress this warning use the @code{unused} attribute
(@pxref{Variable Attributes}).
+@table @gcctabopt
+@item -Wunused-const-variable=1
+This is the warning level that is enabled by @option{-Wunused-variable} for
+C. It warns only about unused static const variables defined in the main
+compilation unit, but not about static const variables declared in any
+header included.
+
+@item -Wunused-const-variable=2
+This warning level also warns for unused constant static variables in
+headers (excluding system headers). This is the warning level of
+@option{-Wunused-const-variable} and must be explicitly requested since
+in C++ this isn't an error and in C it might be harder to clean up all
+headers included.
+@end table
+
@item -Wunused-value
@opindex Wunused-value
@opindex Wno-unused-value
@@ -6521,11 +6559,14 @@ life-range analysis. This option is effective only with
@item -fno-branch-count-reg
@opindex fno-branch-count-reg
-Do not use ``decrement and branch'' instructions on a count register,
-but instead generate a sequence of instructions that decrement a
-register, compare it against zero, then branch based upon the result.
-This option is only meaningful on architectures that support such
-instructions, which include x86, PowerPC, IA-64 and S/390.
+Avoid running a pass scanning for opportunities to use ``decrement and
+branch'' instructions on a count register instead of generating sequences
+of instructions that decrement a register, compare it against zero, and
+then branch based upon the result. This option is only meaningful on
+architectures that support such instructions, which include x86, PowerPC,
+IA-64 and S/390. Note that the @option{-fno-branch-count-reg} option
+doesn't remove the decrement and branch instructions from the generated
+instruction stream introduced by other optimization passes.
Enabled by default at @option{-O1} and higher.
@@ -6666,6 +6707,12 @@ the loop optimizer itself cannot prove that these assumptions are valid.
If you use @option{-Wunsafe-loop-optimizations}, the compiler warns you
if it finds this kind of loop.
+@item -funconstrained-commons
+@opindex funconstrained-commons
+This option tells the compiler that variables declared in common blocks
+(e.g. Fortran) may later be overridden with longer trailing arrays. This
+prevents certain optimizations that depend on knowing the array bounds.
+
@item -fcrossjumping
@opindex fcrossjumping
Perform cross-jumping transformation.
@@ -6789,7 +6836,12 @@ value, and any changes during the lifetime of the object are dead when
the object is destroyed. Normally dead store elimination will take
advantage of this; if your code relies on the value of the object
storage persisting beyond the lifetime of the object, you can use this
-flag to disable this optimization.
+flag to disable this optimization. To preserve stores before the
+constructor starts (e.g. because your operator new clears the object
+storage) but still treat the object as dead after the destructor you,
+can use @option{-flifetime-dse=1}. The default behavior can be
+explicitly selected with @option{-flifetime-dse=2}.
+@option{-flifetime-dse=0} is equivalent to @option{-fno-lifetime-dse}.
@item -flive-range-shrinkage
@opindex flive-range-shrinkage
@@ -9549,6 +9601,11 @@ Enable emission of special debug stores within HSA kernels which are
then read and reported by libgomp plugin. Generation of these stores
is disabled by default, use @option{--param hsa-gen-debug-stores=1} to
enable it.
+
+@item max-speculative-devirt-maydefs
+The maximum number of may-defs we analyze when looking for a must-def
+specifying the dynamic type of an object that invokes a virtual call
+we may be able to devirtualize speculatively.
@end table
@end table
@@ -12859,12 +12916,10 @@ corresponding flag to the linker.
@item -mno-low-precision-recip-sqrt
@opindex -mlow-precision-recip-sqrt
@opindex -mno-low-precision-recip-sqrt
-The square root estimate uses two steps instead of three for double-precision,
-and one step instead of two for single-precision.
-Thus reducing latency and precision.
-This is only relevant if @option{-ffast-math} activates
-reciprocal square root estimate instructions.
-Which in turn depends on the target processor.
+When calculating the reciprocal square root approximation,
+uses one less step than otherwise, thus reducing latency and precision.
+This is only relevant if @option{-ffast-math} enables the reciprocal square root
+approximation, which in turn depends on the target processor.
@item -march=@var{name}
@opindex march
@@ -13955,9 +14010,10 @@ Permissible names are: @samp{arm2}, @samp{arm250},
@samp{arm1156t2-s}, @samp{arm1156t2f-s}, @samp{arm1176jz-s}, @samp{arm1176jzf-s},
@samp{generic-armv7-a}, @samp{cortex-a5}, @samp{cortex-a7}, @samp{cortex-a8},
@samp{cortex-a9}, @samp{cortex-a12}, @samp{cortex-a15}, @samp{cortex-a17},
-@samp{cortex-a35}, @samp{cortex-a53}, @samp{cortex-a57}, @samp{cortex-a72},
-@samp{cortex-r4},
-@samp{cortex-r4f}, @samp{cortex-r5}, @samp{cortex-r7}, @samp{cortex-m7},
+@samp{cortex-a32}, @samp{cortex-a35}, @samp{cortex-a53}, @samp{cortex-a57},
+@samp{cortex-a72}, @samp{cortex-r4},
+@samp{cortex-r4f}, @samp{cortex-r5}, @samp{cortex-r7}, @samp{cortex-r8},
+@samp{cortex-m7},
@samp{cortex-m4},
@samp{cortex-m3},
@samp{cortex-m1},
@@ -15776,6 +15832,10 @@ I/O functions are needed.
Enable Local Register Allocation. This is still experimental for FT32,
so by default the compiler uses standard reload.
+@item -mnodiv
+@opindex mnodiv
+Do not use div and mod instructions.
+
@end table
@node FRV Options
diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi
index f9ecfce..4c83719 100644
--- a/gcc/doc/md.texi
+++ b/gcc/doc/md.texi
@@ -5283,7 +5283,9 @@ Arithmetic-shift operand 1 left by a number of bits specified by operand
2, and store the result in operand 0. Here @var{m} is the mode of
operand 0 and operand 1; operand 2's mode is specified by the
instruction pattern, and the compiler will convert the operand to that
-mode before generating the instruction. The meaning of out-of-range shift
+mode before generating the instruction. The shift or rotate expander
+or instruction pattern should explicitly specify the mode of the operand 2,
+it should never be @code{VOIDmode}. The meaning of out-of-range shift
counts can optionally be specified by @code{TARGET_SHIFT_TRUNCATION_MASK}.
@xref{TARGET_SHIFT_TRUNCATION_MASK}. Operand 2 is always a scalar type.
diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
index 6d548aa..c5354cf 100644
--- a/gcc/doc/sourcebuild.texi
+++ b/gcc/doc/sourcebuild.texi
@@ -1606,6 +1606,9 @@ ARM target prefers @code{LDRD} and @code{STRD} instructions over
@subsubsection AArch64-specific attributes
@table @code
+@item aarch64_asm_<ext>_ok
+AArch64 assembler supports the architecture extension @code{ext} via the
+@code{.arch_extension} pseudo-op.
@item aarch64_tiny
AArch64 target which generates instruction sequences for tiny memory model.
@item aarch64_small
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index 8b3bccd..745910f 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -2861,7 +2861,7 @@ A target hook which can change allocno class for given pseudo from
@end deftypefn
@deftypefn {Target Hook} bool TARGET_LRA_P (void)
-A target hook which returns true if we use LRA instead of reload pass. It means that LRA was ported to the target. The default version of this target hook returns always false.
+A target hook which returns true if we use LRA instead of reload pass. The default version of this target hook returns always false, but new ports should use LRA.
@end deftypefn
@deftypefn {Target Hook} int TARGET_REGISTER_PRIORITY (int)
diff --git a/gcc/dse.c b/gcc/dse.c
index 99f23ca..b036161 100644
--- a/gcc/dse.c
+++ b/gcc/dse.c
@@ -242,9 +242,6 @@ struct store_info
/* Canonized MEM address for use by canon_true_dependence. */
rtx mem_addr;
- /* If this is non-zero, it is the alias set of a spill location. */
- alias_set_type alias_set;
-
/* The offset of the first and byte before the last byte associated
with the operation. */
HOST_WIDE_INT begin, end;
@@ -306,9 +303,6 @@ struct read_info_type
/* The id of the mem group of the base address. */
int group_id;
- /* If this is non-zero, it is the alias set of a spill location. */
- alias_set_type alias_set;
-
/* The offset of the first and byte after the last byte associated
with the operation. If begin == end == 0, the read did not have
a constant offset. */
@@ -576,19 +570,6 @@ static object_allocator<deferred_change> deferred_change_pool
static deferred_change *deferred_change_list = NULL;
-/* The group that holds all of the clear_alias_sets. */
-static group_info *clear_alias_group;
-
-/* The modes of the clear_alias_sets. */
-static htab_t clear_alias_mode_table;
-
-/* Hash table element to look up the mode for an alias set. */
-struct clear_alias_mode_holder
-{
- alias_set_type alias_set;
- machine_mode mode;
-};
-
/* This is true except if cfun->stdarg -- i.e. we cannot do
this for vararg functions because they play games with the frame. */
static bool stores_off_frame_dead_at_return;
@@ -596,7 +577,6 @@ static bool stores_off_frame_dead_at_return;
/* Counter for stats. */
static int globally_deleted;
static int locally_deleted;
-static int spill_deleted;
static bitmap all_blocks;
@@ -613,22 +593,6 @@ static unsigned int current_position;
----------------------------------------------------------------------------*/
-/* Find the entry associated with ALIAS_SET. */
-
-static struct clear_alias_mode_holder *
-clear_alias_set_lookup (alias_set_type alias_set)
-{
- struct clear_alias_mode_holder tmp_holder;
- void **slot;
-
- tmp_holder.alias_set = alias_set;
- slot = htab_find_slot (clear_alias_mode_table, &tmp_holder, NO_INSERT);
- gcc_assert (*slot);
-
- return (struct clear_alias_mode_holder *) *slot;
-}
-
-
/* Hashtable callbacks for maintaining the "bases" field of
store_group_info, given that the addresses are function invariants. */
@@ -665,37 +629,13 @@ get_group_info (rtx base)
group_info *gi;
group_info **slot;
- if (base)
- {
- /* Find the store_base_info structure for BASE, creating a new one
- if necessary. */
- tmp_gi.rtx_base = base;
- slot = rtx_group_table->find_slot (&tmp_gi, INSERT);
- gi = *slot;
- }
- else
- {
- if (!clear_alias_group)
- {
- clear_alias_group = gi = group_info_pool.allocate ();
- memset (gi, 0, sizeof (struct group_info));
- gi->id = rtx_group_next_id++;
- gi->store1_n = BITMAP_ALLOC (&dse_bitmap_obstack);
- gi->store1_p = BITMAP_ALLOC (&dse_bitmap_obstack);
- gi->store2_n = BITMAP_ALLOC (&dse_bitmap_obstack);
- gi->store2_p = BITMAP_ALLOC (&dse_bitmap_obstack);
- gi->escaped_p = BITMAP_ALLOC (&dse_bitmap_obstack);
- gi->escaped_n = BITMAP_ALLOC (&dse_bitmap_obstack);
- gi->group_kill = BITMAP_ALLOC (&dse_bitmap_obstack);
- gi->process_globally = false;
- gi->offset_map_size_n = 0;
- gi->offset_map_size_p = 0;
- gi->offset_map_n = NULL;
- gi->offset_map_p = NULL;
- rtx_group_vec.safe_push (gi);
- }
- return clear_alias_group;
- }
+ gcc_assert (base != NULL_RTX);
+
+ /* Find the store_base_info structure for BASE, creating a new one
+ if necessary. */
+ tmp_gi.rtx_base = base;
+ slot = rtx_group_table->find_slot (&tmp_gi, INSERT);
+ gi = *slot;
if (gi == NULL)
{
@@ -732,7 +672,6 @@ dse_step0 (void)
{
locally_deleted = 0;
globally_deleted = 0;
- spill_deleted = 0;
bitmap_obstack_initialize (&dse_bitmap_obstack);
gcc_obstack_init (&dse_obstack);
@@ -749,8 +688,6 @@ dse_step0 (void)
stores_off_frame_dead_at_return = !cfun->stdarg;
init_alias_analysis ();
-
- clear_alias_group = NULL;
}
@@ -919,15 +856,8 @@ delete_dead_store_insn (insn_info_t insn_info)
if (!check_for_inc_dec_1 (insn_info))
return;
if (dump_file && (dump_flags & TDF_DETAILS))
- {
- fprintf (dump_file, "Locally deleting insn %d ",
- INSN_UID (insn_info->insn));
- if (insn_info->store_rec->alias_set)
- fprintf (dump_file, "alias set %d\n",
- (int) insn_info->store_rec->alias_set);
- else
- fprintf (dump_file, "\n");
- }
+ fprintf (dump_file, "Locally deleting insn %d\n",
+ INSN_UID (insn_info->insn));
free_store_info (insn_info);
read_info = insn_info->read_rec;
@@ -1057,13 +987,8 @@ free_read_records (bb_info_t bb_info)
while (*ptr)
{
read_info_t next = (*ptr)->next;
- if ((*ptr)->alias_set == 0)
- {
- read_info_type_pool.remove (*ptr);
- *ptr = next;
- }
- else
- ptr = &(*ptr)->next;
+ read_info_type_pool.remove (*ptr);
+ *ptr = next;
}
}
@@ -1137,7 +1062,6 @@ const_or_frame_p (rtx x)
static bool
canon_address (rtx mem,
- alias_set_type *alias_set_out,
int *group_id,
HOST_WIDE_INT *offset,
cselib_val **base)
@@ -1147,8 +1071,6 @@ canon_address (rtx mem,
rtx expanded_address, address;
int expanded;
- *alias_set_out = 0;
-
cselib_lookup (mem_address, address_mode, 1, GET_MODE (mem));
if (dump_file && (dump_flags & TDF_DETAILS))
@@ -1347,7 +1269,6 @@ record_store (rtx body, bb_info_t bb_info)
rtx mem, rhs, const_rhs, mem_addr;
HOST_WIDE_INT offset = 0;
HOST_WIDE_INT width = 0;
- alias_set_type spill_alias_set;
insn_info_t insn_info = bb_info->last_insn;
store_info *store_info = NULL;
int group_id;
@@ -1410,7 +1331,7 @@ record_store (rtx body, bb_info_t bb_info)
if (MEM_VOLATILE_P (mem))
insn_info->cannot_delete = true;
- if (!canon_address (mem, &spill_alias_set, &group_id, &offset, &base))
+ if (!canon_address (mem, &group_id, &offset, &base))
{
clear_rhs_from_active_local_stores ();
return 0;
@@ -1421,26 +1342,7 @@ record_store (rtx body, bb_info_t bb_info)
else
width = GET_MODE_SIZE (GET_MODE (mem));
- if (spill_alias_set)
- {
- bitmap store1 = clear_alias_group->store1_p;
- bitmap store2 = clear_alias_group->store2_p;
-
- gcc_assert (GET_MODE (mem) != BLKmode);
-
- if (!bitmap_set_bit (store1, spill_alias_set))
- bitmap_set_bit (store2, spill_alias_set);
-
- if (clear_alias_group->offset_map_size_p < spill_alias_set)
- clear_alias_group->offset_map_size_p = spill_alias_set;
-
- store_info = rtx_store_info_pool.allocate ();
-
- if (dump_file && (dump_flags & TDF_DETAILS))
- fprintf (dump_file, " processing spill store %d(%s)\n",
- (int) spill_alias_set, GET_MODE_NAME (GET_MODE (mem)));
- }
- else if (group_id >= 0)
+ if (group_id >= 0)
{
/* In the restrictive case where the base is a constant or the
frame pointer we can do global analysis. */
@@ -1506,21 +1408,16 @@ record_store (rtx body, bb_info_t bb_info)
last = NULL;
redundant_reason = NULL;
mem = canon_rtx (mem);
- /* For alias_set != 0 canon_true_dependence should be never called. */
- if (spill_alias_set)
- mem_addr = NULL_RTX;
+
+ if (group_id < 0)
+ mem_addr = base->val_rtx;
else
{
- if (group_id < 0)
- mem_addr = base->val_rtx;
- else
- {
- group_info *group = rtx_group_vec[group_id];
- mem_addr = group->canon_base_addr;
- }
- if (offset)
- mem_addr = plus_constant (get_address_mode (mem), mem_addr, offset);
+ group_info *group = rtx_group_vec[group_id];
+ mem_addr = group->canon_base_addr;
}
+ if (offset)
+ mem_addr = plus_constant (get_address_mode (mem), mem_addr, offset);
while (ptr)
{
@@ -1534,29 +1431,7 @@ record_store (rtx body, bb_info_t bb_info)
while (!s_info->is_set)
s_info = s_info->next;
- if (s_info->alias_set != spill_alias_set)
- del = false;
- else if (s_info->alias_set)
- {
- struct clear_alias_mode_holder *entry
- = clear_alias_set_lookup (s_info->alias_set);
- /* Generally, spills cannot be processed if and of the
- references to the slot have a different mode. But if
- we are in the same block and mode is exactly the same
- between this store and one before in the same block,
- we can still delete it. */
- if ((GET_MODE (mem) == GET_MODE (s_info->mem))
- && (GET_MODE (mem) == entry->mode))
- {
- del = true;
- set_all_positions_unneeded (s_info);
- }
- if (dump_file && (dump_flags & TDF_DETAILS))
- fprintf (dump_file, " trying spill store in insn=%d alias_set=%d\n",
- INSN_UID (ptr->insn), (int) s_info->alias_set);
- }
- else if ((s_info->group_id == group_id)
- && (s_info->cse_base == base))
+ if (s_info->group_id == group_id && s_info->cse_base == base)
{
HOST_WIDE_INT i;
if (dump_file && (dump_flags & TDF_DETAILS))
@@ -1609,10 +1484,9 @@ record_store (rtx body, bb_info_t bb_info)
the value of store_info. If it is, set the rhs to NULL to
keep it from being used to remove a load. */
{
- if (canon_true_dependence (s_info->mem,
- GET_MODE (s_info->mem),
- s_info->mem_addr,
- mem, mem_addr))
+ if (canon_output_dependence (s_info->mem, true,
+ mem, GET_MODE (mem),
+ mem_addr))
{
s_info->rhs = NULL;
s_info->const_rhs = NULL;
@@ -1647,7 +1521,6 @@ record_store (rtx body, bb_info_t bb_info)
store_info->next = insn_info->store_rec;
insn_info->store_rec = store_info;
store_info->mem = mem;
- store_info->alias_set = spill_alias_set;
store_info->mem_addr = mem_addr;
store_info->cse_base = base;
if (width > HOST_BITS_PER_WIDE_INT)
@@ -2071,7 +1944,6 @@ check_mem_read_rtx (rtx *loc, bb_info_t bb_info)
insn_info_t insn_info;
HOST_WIDE_INT offset = 0;
HOST_WIDE_INT width = 0;
- alias_set_type spill_alias_set = 0;
cselib_val *base = NULL;
int group_id;
read_info_t read_info;
@@ -2093,7 +1965,7 @@ check_mem_read_rtx (rtx *loc, bb_info_t bb_info)
if (MEM_READONLY_P (mem))
return;
- if (!canon_address (mem, &spill_alias_set, &group_id, &offset, &base))
+ if (!canon_address (mem, &group_id, &offset, &base))
{
if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, " adding wild read, canon_address failure.\n");
@@ -2109,64 +1981,21 @@ check_mem_read_rtx (rtx *loc, bb_info_t bb_info)
read_info = read_info_type_pool.allocate ();
read_info->group_id = group_id;
read_info->mem = mem;
- read_info->alias_set = spill_alias_set;
read_info->begin = offset;
read_info->end = offset + width;
read_info->next = insn_info->read_rec;
insn_info->read_rec = read_info;
- /* For alias_set != 0 canon_true_dependence should be never called. */
- if (spill_alias_set)
- mem_addr = NULL_RTX;
+ if (group_id < 0)
+ mem_addr = base->val_rtx;
else
{
- if (group_id < 0)
- mem_addr = base->val_rtx;
- else
- {
- group_info *group = rtx_group_vec[group_id];
- mem_addr = group->canon_base_addr;
- }
- if (offset)
- mem_addr = plus_constant (get_address_mode (mem), mem_addr, offset);
+ group_info *group = rtx_group_vec[group_id];
+ mem_addr = group->canon_base_addr;
}
+ if (offset)
+ mem_addr = plus_constant (get_address_mode (mem), mem_addr, offset);
- /* We ignore the clobbers in store_info. The is mildly aggressive,
- but there really should not be a clobber followed by a read. */
-
- if (spill_alias_set)
- {
- insn_info_t i_ptr = active_local_stores;
- insn_info_t last = NULL;
-
- if (dump_file && (dump_flags & TDF_DETAILS))
- fprintf (dump_file, " processing spill load %d\n",
- (int) spill_alias_set);
-
- while (i_ptr)
- {
- store_info *store_info = i_ptr->store_rec;
-
- /* Skip the clobbers. */
- while (!store_info->is_set)
- store_info = store_info->next;
-
- if (store_info->alias_set == spill_alias_set)
- {
- if (dump_file && (dump_flags & TDF_DETAILS))
- dump_insn_info ("removing from active", i_ptr);
-
- active_local_stores_len--;
- if (last)
- last->next_local_store = i_ptr->next_local_store;
- else
- active_local_stores = i_ptr->next_local_store;
- }
- else
- last = i_ptr;
- i_ptr = i_ptr->next_local_store;
- }
- }
- else if (group_id >= 0)
+ if (group_id >= 0)
{
/* This is the restricted case where the base is a constant or
the frame pointer and offset is a constant. */
@@ -2294,11 +2123,10 @@ check_mem_read_rtx (rtx *loc, bb_info_t bb_info)
bb_info->regs_live))
return;
- if (!store_info->alias_set)
- remove = canon_true_dependence (store_info->mem,
- GET_MODE (store_info->mem),
- store_info->mem_addr,
- mem, mem_addr);
+ remove = canon_true_dependence (store_info->mem,
+ GET_MODE (store_info->mem),
+ store_info->mem_addr,
+ mem, mem_addr);
if (remove)
{
@@ -2556,6 +2384,8 @@ scan_insn (bb_info_t bb_info, rtx_insn *insn)
active_local_stores = insn_info;
}
}
+ else
+ clear_rhs_from_active_local_stores ();
}
}
else if (SIBLING_CALL_P (insn) && reload_completed)
@@ -2729,16 +2559,12 @@ dse_step1 (void)
/* Skip the clobbers. */
while (!store_info->is_set)
store_info = store_info->next;
- if (store_info->alias_set && !i_ptr->cannot_delete)
- delete_dead_store_insn (i_ptr);
- else
- if (store_info->group_id >= 0)
- {
- group_info *group
- = rtx_group_vec[store_info->group_id];
- if (group->frame_related && !i_ptr->cannot_delete)
- delete_dead_store_insn (i_ptr);
- }
+ if (store_info->group_id >= 0)
+ {
+ group_info *group = rtx_group_vec[store_info->group_id];
+ if (group->frame_related && !i_ptr->cannot_delete)
+ delete_dead_store_insn (i_ptr);
+ }
i_ptr = i_ptr->next_local_store;
}
@@ -2867,10 +2693,10 @@ dse_step2_init (void)
}
-/* Init the offset tables for the normal case. */
+/* Init the offset tables. */
static bool
-dse_step2_nospill (void)
+dse_step2 (void)
{
unsigned int i;
group_info *group;
@@ -2882,9 +2708,6 @@ dse_step2_nospill (void)
bitmap_iterator bi;
unsigned int j;
- if (group == clear_alias_group)
- continue;
-
memset (group->offset_map_n, 0, sizeof (int) * group->offset_map_size_n);
memset (group->offset_map_p, 0, sizeof (int) * group->offset_map_size_p);
bitmap_clear (group->group_kill);
@@ -2944,7 +2767,7 @@ get_bitmap_index (group_info *group_info, HOST_WIDE_INT offset)
may be NULL. */
static void
-scan_stores_nospill (store_info *store_info, bitmap gen, bitmap kill)
+scan_stores (store_info *store_info, bitmap gen, bitmap kill)
{
while (store_info)
{
@@ -2967,35 +2790,11 @@ scan_stores_nospill (store_info *store_info, bitmap gen, bitmap kill)
}
-/* Process the STORE_INFOs into the bitmaps into GEN and KILL. KILL
- may be NULL. */
-
-static void
-scan_stores_spill (store_info *store_info, bitmap gen, bitmap kill)
-{
- while (store_info)
- {
- if (store_info->alias_set)
- {
- int index = get_bitmap_index (clear_alias_group,
- store_info->alias_set);
- if (index != 0)
- {
- bitmap_set_bit (gen, index);
- if (kill)
- bitmap_clear_bit (kill, index);
- }
- }
- store_info = store_info->next;
- }
-}
-
-
/* Process the READ_INFOs into the bitmaps into GEN and KILL. KILL
may be NULL. */
static void
-scan_reads_nospill (insn_info_t insn_info, bitmap gen, bitmap kill)
+scan_reads (insn_info_t insn_info, bitmap gen, bitmap kill)
{
read_info_t read_info = insn_info->read_rec;
int i;
@@ -3085,30 +2884,6 @@ scan_reads_nospill (insn_info_t insn_info, bitmap gen, bitmap kill)
}
}
-/* Process the READ_INFOs into the bitmaps into GEN and KILL. KILL
- may be NULL. */
-
-static void
-scan_reads_spill (read_info_t read_info, bitmap gen, bitmap kill)
-{
- while (read_info)
- {
- if (read_info->alias_set)
- {
- int index = get_bitmap_index (clear_alias_group,
- read_info->alias_set);
- if (index != 0)
- {
- if (kill)
- bitmap_set_bit (kill, index);
- bitmap_clear_bit (gen, index);
- }
- }
-
- read_info = read_info->next;
- }
-}
-
/* Return the insn in BB_INFO before the first wild read or if there
are no wild reads in the block, return the last insn. */
@@ -3147,16 +2922,12 @@ find_insn_before_first_wild_read (bb_info_t bb_info)
anything that happens is hidden by the wild read. */
static void
-dse_step3_scan (bool for_spills, basic_block bb)
+dse_step3_scan (basic_block bb)
{
bb_info_t bb_info = bb_table[bb->index];
insn_info_t insn_info;
- if (for_spills)
- /* There are no wild reads in the spill case. */
- insn_info = bb_info->last_insn;
- else
- insn_info = find_insn_before_first_wild_read (bb_info);
+ insn_info = find_insn_before_first_wild_read (bb_info);
/* In the spill case or in the no_spill case if there is no wild
read in the block, we will need a kill set. */
@@ -3177,17 +2948,8 @@ dse_step3_scan (bool for_spills, basic_block bb)
this phase. */
if (insn_info->insn && INSN_P (insn_info->insn))
{
- /* Process the read(s) last. */
- if (for_spills)
- {
- scan_stores_spill (insn_info->store_rec, bb_info->gen, bb_info->kill);
- scan_reads_spill (insn_info->read_rec, bb_info->gen, bb_info->kill);
- }
- else
- {
- scan_stores_nospill (insn_info->store_rec, bb_info->gen, bb_info->kill);
- scan_reads_nospill (insn_info, bb_info->gen, bb_info->kill);
- }
+ scan_stores (insn_info->store_rec, bb_info->gen, bb_info->kill);
+ scan_reads (insn_info, bb_info->gen, bb_info->kill);
}
insn_info = insn_info->prev_insn;
@@ -3242,7 +3004,7 @@ mark_reachable_blocks (sbitmap unreachable_blocks, basic_block bb)
/* Build the transfer functions for the function. */
static void
-dse_step3 (bool for_spills)
+dse_step3 ()
{
basic_block bb;
sbitmap unreachable_blocks = sbitmap_alloc (last_basic_block_for_fn (cfun));
@@ -3265,7 +3027,7 @@ dse_step3 (bool for_spills)
else if (bb->index == EXIT_BLOCK)
dse_step3_exit_block_scan (bb_info);
else
- dse_step3_scan (for_spills, bb);
+ dse_step3_scan (bb);
if (EDGE_COUNT (bb->succs) == 0)
mark_reachable_blocks (unreachable_blocks, bb);
@@ -3466,7 +3228,7 @@ dse_step4 (void)
static void
-dse_step5_nospill (void)
+dse_step5 (void)
{
basic_block bb;
FOR_EACH_BB_FN (bb, cfun)
@@ -3501,27 +3263,21 @@ dse_step5_nospill (void)
while (!store_info->is_set)
store_info = store_info->next;
- if (store_info->alias_set)
- deleted = false;
- else
+ HOST_WIDE_INT i;
+ group_info *group_info = rtx_group_vec[store_info->group_id];
+
+ for (i = store_info->begin; i < store_info->end; i++)
{
- HOST_WIDE_INT i;
- group_info *group_info
- = rtx_group_vec[store_info->group_id];
+ int index = get_bitmap_index (group_info, i);
- for (i = store_info->begin; i < store_info->end; i++)
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "i = %d, index = %d\n", (int)i, index);
+ if (index == 0 || !bitmap_bit_p (v, index))
{
- int index = get_bitmap_index (group_info, i);
-
if (dump_file && (dump_flags & TDF_DETAILS))
- fprintf (dump_file, "i = %d, index = %d\n", (int)i, index);
- if (index == 0 || !bitmap_bit_p (v, index))
- {
- if (dump_file && (dump_flags & TDF_DETAILS))
- fprintf (dump_file, "failing at i = %d\n", (int)i);
- deleted = false;
- break;
- }
+ fprintf (dump_file, "failing at i = %d\n", (int)i);
+ deleted = false;
+ break;
}
}
if (deleted)
@@ -3542,7 +3298,7 @@ dse_step5_nospill (void)
&& INSN_P (insn_info->insn)
&& (!deleted))
{
- scan_stores_nospill (insn_info->store_rec, v, NULL);
+ scan_stores (insn_info->store_rec, v, NULL);
if (insn_info->wild_read)
{
if (dump_file && (dump_flags & TDF_DETAILS))
@@ -3556,7 +3312,7 @@ dse_step5_nospill (void)
fprintf (dump_file, "regular read\n");
else if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, "non-frame wild read\n");
- scan_reads_nospill (insn_info, v, NULL);
+ scan_reads (insn_info, v, NULL);
}
}
@@ -3665,23 +3421,23 @@ rest_of_handle_dse (void)
dse_step0 ();
dse_step1 ();
dse_step2_init ();
- if (dse_step2_nospill ())
+ if (dse_step2 ())
{
df_set_flags (DF_LR_RUN_DCE);
df_analyze ();
if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, "doing global processing\n");
- dse_step3 (false);
+ dse_step3 ();
dse_step4 ();
- dse_step5_nospill ();
+ dse_step5 ();
}
dse_step6 ();
dse_step7 ();
if (dump_file)
- fprintf (dump_file, "dse: local deletions = %d, global deletions = %d, spill deletions = %d\n",
- locally_deleted, globally_deleted, spill_deleted);
+ fprintf (dump_file, "dse: local deletions = %d, global deletions = %d\n",
+ locally_deleted, globally_deleted);
/* DSE can eliminate potentially-trapping MEMs.
Remove any EH edges associated with them. */
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index d8ca1b7..0bbff87 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -1325,7 +1325,7 @@ new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
dw_loc_descr_ref descr = ggc_cleared_alloc<dw_loc_descr_node> ();
descr->dw_loc_opc = op;
-#if ENABLE_CHECKING
+#if CHECKING_P
descr->dw_loc_frame_offset = -1;
#endif
descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
@@ -15369,14 +15369,14 @@ resolve_args_picking_1 (dw_loc_descr_ref loc, unsigned initial_frame_offset,
/* If we already met this node, there is nothing to compute anymore. */
if (visited.add (l))
{
-#if ENABLE_CHECKING
+#if CHECKING_P
/* Make sure that the stack size is consistent wherever the execution
flow comes from. */
gcc_assert ((unsigned) l->dw_loc_frame_offset == frame_offset_);
#endif
break;
}
-#if ENABLE_CHECKING
+#if CHECKING_P
l->dw_loc_frame_offset = frame_offset_;
#endif
@@ -21055,7 +21055,7 @@ gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
DW_TAG_common_block and DW_TAG_variable. */
loc = loc_list_from_tree (com_decl, 2, NULL);
}
- else if (DECL_EXTERNAL (decl))
+ else if (DECL_EXTERNAL (decl_or_origin))
add_AT_flag (com_die, DW_AT_declaration, 1);
if (want_pubnames ())
add_pubname_string (cnam, com_die); /* ??? needed? */
@@ -21070,8 +21070,9 @@ gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
remove_AT (com_die, DW_AT_declaration);
}
var_die = new_die (DW_TAG_variable, com_die, decl);
- add_name_and_src_coords_attributes (var_die, decl);
- add_type_attribute (var_die, TREE_TYPE (decl), decl_quals (decl), false,
+ add_name_and_src_coords_attributes (var_die, decl_or_origin);
+ add_type_attribute (var_die, TREE_TYPE (decl_or_origin),
+ decl_quals (decl_or_origin), false,
context_die);
add_AT_flag (var_die, DW_AT_external, 1);
if (loc)
@@ -21093,9 +21094,10 @@ gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
}
add_AT_location_description (var_die, DW_AT_location, loc);
}
- else if (DECL_EXTERNAL (decl))
+ else if (DECL_EXTERNAL (decl_or_origin))
add_AT_flag (var_die, DW_AT_declaration, 1);
- equate_decl_number_to_die (decl, var_die);
+ if (decl)
+ equate_decl_number_to_die (decl, var_die);
return;
}
@@ -25639,11 +25641,29 @@ prune_unused_types_walk_loc_descr (dw_loc_descr_ref loc)
for (; loc != NULL; loc = loc->dw_loc_next)
switch (loc->dw_loc_opc)
{
+ case DW_OP_GNU_implicit_pointer:
+ case DW_OP_GNU_convert:
+ case DW_OP_GNU_reinterpret:
+ if (loc->dw_loc_oprnd1.val_class == dw_val_class_die_ref)
+ prune_unused_types_mark (loc->dw_loc_oprnd1.v.val_die_ref.die, 1);
+ break;
case DW_OP_call2:
case DW_OP_call4:
case DW_OP_call_ref:
+ case DW_OP_GNU_const_type:
+ case DW_OP_GNU_parameter_ref:
+ gcc_assert (loc->dw_loc_oprnd1.val_class == dw_val_class_die_ref);
prune_unused_types_mark (loc->dw_loc_oprnd1.v.val_die_ref.die, 1);
break;
+ case DW_OP_GNU_regval_type:
+ case DW_OP_GNU_deref_type:
+ gcc_assert (loc->dw_loc_oprnd2.val_class == dw_val_class_die_ref);
+ prune_unused_types_mark (loc->dw_loc_oprnd2.v.val_die_ref.die, 1);
+ break;
+ case DW_OP_GNU_entry_value:
+ gcc_assert (loc->dw_loc_oprnd1.val_class == dw_val_class_loc);
+ prune_unused_types_walk_loc_descr (loc->dw_loc_oprnd1.v.val_loc);
+ break;
default:
break;
}
@@ -27261,12 +27281,15 @@ optimize_location_lists (dw_die_ref die)
static void
flush_limbo_die_list (void)
{
- limbo_die_node *node, *next_node;
+ limbo_die_node *node;
- for (node = limbo_die_list; node; node = next_node)
+ /* get_context_die calls force_decl_die, which can put new DIEs on the
+ limbo list in LTO mode when nested functions are put in a different
+ partition than that of their parent function. */
+ while ((node = limbo_die_list))
{
dw_die_ref die = node->die;
- next_node = node->next;
+ limbo_die_list = node->next;
if (die->die_parent == NULL)
{
@@ -27304,8 +27327,6 @@ flush_limbo_die_list (void)
}
}
}
-
- limbo_die_list = NULL;
}
/* Output stuff that dwarf requires at the end of every file,
@@ -27665,10 +27686,15 @@ dwarf2out_finish (const char *filename)
static void
dwarf2out_early_finish (void)
{
- limbo_die_node *node;
+ /* The point here is to flush out the limbo list so that it is empty
+ and we don't need to stream it for LTO. */
+ flush_limbo_die_list ();
+
+ gen_scheduled_generic_parms_dies ();
+ gen_remaining_tmpl_value_param_die_attribute ();
/* Add DW_AT_linkage_name for all deferred DIEs. */
- for (node = deferred_asm_name; node; node = node->next)
+ for (limbo_die_node *node = deferred_asm_name; node; node = node->next)
{
tree decl = node->created_for;
if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl)
@@ -27682,13 +27708,6 @@ dwarf2out_early_finish (void)
}
}
deferred_asm_name = NULL;
-
- /* The point here is to flush out the limbo list so that it is empty
- and we don't need to stream it for LTO. */
- flush_limbo_die_list ();
-
- gen_scheduled_generic_parms_dies ();
- gen_remaining_tmpl_value_param_die_attribute ();
}
/* Reset all state within dwarf2out.c so that we can rerun the compiler
diff --git a/gcc/dwarf2out.h b/gcc/dwarf2out.h
index a96ac38..91b3d6b 100644
--- a/gcc/dwarf2out.h
+++ b/gcc/dwarf2out.h
@@ -239,7 +239,7 @@ struct GTY((chain_next ("%h.dw_loc_next"))) dw_loc_descr_node {
frame offset. */
unsigned int frame_offset_rel : 1;
int dw_loc_addr;
-#if ENABLE_CHECKING
+#if CHECKING_P
/* When translating a function into a DWARF procedure, contains the frame
offset *before* evaluating this operation. It is -1 when not yet
initialized. */
diff --git a/gcc/explow.c b/gcc/explow.c
index cd7c568..249318f 100644
--- a/gcc/explow.c
+++ b/gcc/explow.c
@@ -1566,7 +1566,7 @@ probe_stack_range (HOST_WIDE_INT first, rtx size)
stack_pointer_rtx,
plus_constant (Pmode,
size, first)));
- emit_library_call (stack_check_libfunc, LCT_NORMAL, VOIDmode, 1, addr,
+ emit_library_call (stack_check_libfunc, LCT_THROW, VOIDmode, 1, addr,
Pmode);
}
diff --git a/gcc/expmed.c b/gcc/expmed.c
index 829b967..31d905b 100644
--- a/gcc/expmed.c
+++ b/gcc/expmed.c
@@ -658,24 +658,28 @@ store_bit_field_using_insv (const extraction_insn *insv, rtx op0,
{
if (GET_MODE_BITSIZE (GET_MODE (value)) >= bitsize)
{
+ rtx tmp;
/* Optimization: Don't bother really extending VALUE
if it has all the bits we will actually use. However,
if we must narrow it, be sure we do it correctly. */
if (GET_MODE_SIZE (GET_MODE (value)) < GET_MODE_SIZE (op_mode))
{
- rtx tmp;
-
tmp = simplify_subreg (op_mode, value1, GET_MODE (value), 0);
if (! tmp)
tmp = simplify_gen_subreg (op_mode,
force_reg (GET_MODE (value),
value1),
GET_MODE (value), 0);
- value1 = tmp;
}
else
- value1 = gen_lowpart (op_mode, value1);
+ {
+ tmp = gen_lowpart_if_possible (op_mode, value1);
+ if (! tmp)
+ tmp = gen_lowpart (op_mode, force_reg (GET_MODE (value),
+ value1));
+ }
+ value1 = tmp;
}
else if (CONST_INT_P (value))
value1 = gen_int_mode (INTVAL (value), op_mode);
diff --git a/gcc/expr.c b/gcc/expr.c
index 29e9356..29d22b0 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -6643,14 +6643,29 @@ store_field (rtx target, HOST_WIDE_INT bitsize, HOST_WIDE_INT bitpos,
/* Except for initialization of full bytes from a CONSTRUCTOR, which
we will handle specially below. */
&& !(TREE_CODE (exp) == CONSTRUCTOR
- && bitsize % BITS_PER_UNIT == 0))
+ && bitsize % BITS_PER_UNIT == 0)
+ /* And except for bitwise copying of TREE_ADDRESSABLE types,
+ where the FIELD_DECL has the right bitsize, but TREE_TYPE (exp)
+ includes some extra padding. store_expr / expand_expr will in
+ that case call get_inner_reference that will have the bitsize
+ we check here and thus the block move will not clobber the
+ padding that shouldn't be clobbered. In the future we could
+ replace the TREE_ADDRESSABLE check with a check that
+ get_base_address needs to live in memory. */
+ && (!TREE_ADDRESSABLE (TREE_TYPE (exp))
+ || TREE_CODE (exp) != COMPONENT_REF
+ || TREE_CODE (DECL_SIZE (TREE_OPERAND (exp, 1))) != INTEGER_CST
+ || (bitsize % BITS_PER_UNIT != 0)
+ || (bitpos % BITS_PER_UNIT != 0)
+ || (compare_tree_int (DECL_SIZE (TREE_OPERAND (exp, 1)), bitsize)
+ != 0)))
/* If we are expanding a MEM_REF of a non-BLKmode non-addressable
decl we must use bitfield operations. */
|| (bitsize >= 0
&& TREE_CODE (exp) == MEM_REF
&& TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
&& DECL_P (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
- && !TREE_ADDRESSABLE (TREE_OPERAND (TREE_OPERAND (exp, 0),0 ))
+ && !TREE_ADDRESSABLE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
&& DECL_MODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0)) != BLKmode))
{
rtx temp;
@@ -10506,7 +10521,11 @@ expand_expr_real_1 (tree exp, rtx target, machine_mode tmode,
if (op0 == orig_op0)
op0 = copy_rtx (op0);
- set_mem_attributes (op0, exp, 0);
+ /* Don't set memory attributes if the base expression is
+ SSA_NAME that got expanded as a MEM. In that case, we should
+ just honor its original memory attributes. */
+ if (TREE_CODE (tem) != SSA_NAME || !MEM_P (orig_op0))
+ set_mem_attributes (op0, exp, 0);
if (REG_P (XEXP (op0, 0)))
mark_reg_pointer (XEXP (op0, 0), MEM_ALIGN (op0));
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 4992f4b..0f4bf7e 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -3008,8 +3008,15 @@ operand_equal_p (const_tree arg0, const_tree arg1, unsigned int flags)
flags &= ~OEP_ADDRESS_OF;
return OP_SAME (0);
- case REALPART_EXPR:
case IMAGPART_EXPR:
+ /* Require the same offset. */
+ if (!operand_equal_p (TYPE_SIZE (TREE_TYPE (arg0)),
+ TYPE_SIZE (TREE_TYPE (arg1)),
+ flags & ~OEP_ADDRESS_OF))
+ return 0;
+
+ /* Fallthru. */
+ case REALPART_EXPR:
case VIEW_CONVERT_EXPR:
return OP_SAME (0);
@@ -3025,6 +3032,9 @@ operand_equal_p (const_tree arg0, const_tree arg1, unsigned int flags)
TYPE_SIZE (TREE_TYPE (arg1)),
flags)))
return 0;
+ /* Verify that access happens in similar types. */
+ if (!types_compatible_p (TREE_TYPE (arg0), TREE_TYPE (arg1)))
+ return 0;
/* Verify that accesses are TBAA compatible. */
if (!alias_ptr_types_compatible_p
(TREE_TYPE (TREE_OPERAND (arg0, 1)),
@@ -3049,17 +3059,29 @@ operand_equal_p (const_tree arg0, const_tree arg1, unsigned int flags)
case ARRAY_REF:
case ARRAY_RANGE_REF:
- /* Operands 2 and 3 may be null.
- Compare the array index by value if it is constant first as we
- may have different types but same value here. */
if (!OP_SAME (0))
return 0;
flags &= ~OEP_ADDRESS_OF;
+ /* Compare the array index by value if it is constant first as we
+ may have different types but same value here. */
return ((tree_int_cst_equal (TREE_OPERAND (arg0, 1),
TREE_OPERAND (arg1, 1))
|| OP_SAME (1))
&& OP_SAME_WITH_NULL (2)
- && OP_SAME_WITH_NULL (3));
+ && OP_SAME_WITH_NULL (3)
+ /* Compare low bound and element size as with OEP_ADDRESS_OF
+ we have to account for the offset of the ref. */
+ && (TREE_TYPE (TREE_OPERAND (arg0, 0))
+ == TREE_TYPE (TREE_OPERAND (arg1, 0))
+ || (operand_equal_p (array_ref_low_bound
+ (CONST_CAST_TREE (arg0)),
+ array_ref_low_bound
+ (CONST_CAST_TREE (arg1)), flags)
+ && operand_equal_p (array_ref_element_size
+ (CONST_CAST_TREE (arg0)),
+ array_ref_element_size
+ (CONST_CAST_TREE (arg1)),
+ flags))));
case COMPONENT_REF:
/* Handle operand 2 the same as for ARRAY_REF. Operand 0
@@ -3570,8 +3592,11 @@ fold_truth_not_expr (location_t loc, tree arg)
if (code == ERROR_MARK)
return NULL_TREE;
- return build2_loc (loc, code, type, TREE_OPERAND (arg, 0),
- TREE_OPERAND (arg, 1));
+ tree ret = build2_loc (loc, code, type, TREE_OPERAND (arg, 0),
+ TREE_OPERAND (arg, 1));
+ if (TREE_NO_WARNING (arg))
+ TREE_NO_WARNING (ret) = 1;
+ return ret;
}
switch (code)
@@ -6091,11 +6116,9 @@ extract_muldiv_1 (tree t, tree c, enum tree_code code, tree wide_type,
{
tree tem = const_binop (code, fold_convert (ctype, t),
fold_convert (ctype, c));
- /* If the multiplication overflowed to INT_MIN then we lost sign
- information on it and a subsequent multiplication might
- spuriously overflow. See PR68142. */
- if (TREE_OVERFLOW (tem)
- && wi::eq_p (tem, wi::min_value (TYPE_PRECISION (ctype), SIGNED)))
+ /* If the multiplication overflowed, we lost information on it.
+ See PR68142 and PR69845. */
+ if (TREE_OVERFLOW (tem))
return NULL_TREE;
return tem;
}
@@ -6351,18 +6374,19 @@ extract_muldiv_1 (tree t, tree c, enum tree_code code, tree wide_type,
bool overflow_p = false;
bool overflow_mul_p;
signop sign = TYPE_SIGN (ctype);
- wide_int mul = wi::mul (op1, c, sign, &overflow_mul_p);
+ unsigned prec = TYPE_PRECISION (ctype);
+ wide_int mul = wi::mul (wide_int::from (op1, prec,
+ TYPE_SIGN (TREE_TYPE (op1))),
+ wide_int::from (c, prec,
+ TYPE_SIGN (TREE_TYPE (c))),
+ sign, &overflow_mul_p);
overflow_p = TREE_OVERFLOW (c) | TREE_OVERFLOW (op1);
if (overflow_mul_p
&& ((sign == UNSIGNED && tcode != MULT_EXPR) || sign == SIGNED))
overflow_p = true;
if (!overflow_p)
- {
- mul = wide_int::from (mul, TYPE_PRECISION (ctype),
- TYPE_SIGN (TREE_TYPE (op1)));
- return fold_build2 (tcode, ctype, fold_convert (ctype, op0),
- wide_int_to_tree (ctype, mul));
- }
+ return fold_build2 (tcode, ctype, fold_convert (ctype, op0),
+ wide_int_to_tree (ctype, mul));
}
/* If these operations "cancel" each other, we have the main
@@ -8314,6 +8338,20 @@ pointer_may_wrap_p (tree base, tree offset, HOST_WIDE_INT bitpos)
return total.to_uhwi () > (unsigned HOST_WIDE_INT) size;
}
+/* Return a positive integer when the symbol DECL is known to have
+ a nonzero address, zero when it's known not to (e.g., it's a weak
+ symbol), and a negative integer when the symbol is not yet in the
+ symbol table and so whether or not its address is zero is unknown. */
+static int
+maybe_nonzero_address (tree decl)
+{
+ if (DECL_P (decl) && decl_in_symtab_p (decl))
+ if (struct symtab_node *symbol = symtab_node::get_create (decl))
+ return symbol->nonzero_address ();
+
+ return -1;
+}
+
/* Subroutine of fold_binary. This routine performs all of the
transformations that are common to the equality/inequality
operators (EQ_EXPR and NE_EXPR) and the ordering operators
@@ -8614,6 +8652,39 @@ fold_comparison (location_t loc, enum tree_code code, tree type,
base1 = build_fold_addr_expr_loc (loc, base1);
return fold_build2_loc (loc, code, type, base0, base1);
}
+ /* Comparison between an ordinary (non-weak) symbol and a null
+ pointer can be eliminated since such symbols must have a non
+ null address. In C, relational expressions between pointers
+ to objects and null pointers are undefined. The results
+ below follow the C++ rules with the additional property that
+ every object pointer compares greater than a null pointer.
+ */
+ else if (DECL_P (base0)
+ && maybe_nonzero_address (base0) > 0
+ /* Avoid folding references to struct members at offset 0 to
+ prevent tests like '&ptr->firstmember == 0' from getting
+ eliminated. When ptr is null, although the -> expression
+ is strictly speaking invalid, GCC retains it as a matter
+ of QoI. See PR c/44555. */
+ && (offset0 == NULL_TREE && bitpos0 != 0)
+ /* The caller guarantees that when one of the arguments is
+ constant (i.e., null in this case) it is second. */
+ && integer_zerop (arg1))
+ {
+ switch (code)
+ {
+ case EQ_EXPR:
+ case LE_EXPR:
+ case LT_EXPR:
+ return boolean_false_node;
+ case GE_EXPR:
+ case GT_EXPR:
+ case NE_EXPR:
+ return boolean_true_node;
+ default:
+ gcc_unreachable ();
+ }
+ }
}
/* Transform comparisons of the form X +- C1 CMP Y +- C2 to
@@ -13484,16 +13555,9 @@ tree_single_nonzero_warnv_p (tree t, bool *strict_overflow_p)
/* For objects in symbol table check if we know they are non-zero.
Don't do anything for variables and functions before symtab is built;
it is quite possible that they will be declared weak later. */
- if (DECL_P (base) && decl_in_symtab_p (base))
- {
- struct symtab_node *symbol;
-
- symbol = symtab_node::get_create (base);
- if (symbol)
- return symbol->nonzero_address ();
- else
- return false;
- }
+ int nonzero_addr = maybe_nonzero_address (base);
+ if (nonzero_addr >= 0)
+ return nonzero_addr;
/* Function local objects are never NULL. */
if (DECL_P (base)
@@ -14196,17 +14260,20 @@ fold_indirect_ref_1 (location_t loc, tree type, tree op0)
if (TREE_CODE (op00type) == VECTOR_TYPE
&& type == TREE_TYPE (op00type))
{
- HOST_WIDE_INT offset = tree_to_shwi (op01);
tree part_width = TYPE_SIZE (type);
- unsigned HOST_WIDE_INT part_widthi = tree_to_shwi (part_width)/BITS_PER_UNIT;
- unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
- tree index = bitsize_int (indexi);
-
- if (offset / part_widthi < TYPE_VECTOR_SUBPARTS (op00type))
- return fold_build3_loc (loc,
- BIT_FIELD_REF, type, op00,
- part_width, index);
-
+ unsigned HOST_WIDE_INT max_offset
+ = (tree_to_uhwi (part_width) / BITS_PER_UNIT
+ * TYPE_VECTOR_SUBPARTS (op00type));
+ if (tree_int_cst_sign_bit (op01) == 0
+ && compare_tree_int (op01, max_offset) == -1)
+ {
+ unsigned HOST_WIDE_INT offset = tree_to_uhwi (op01);
+ unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
+ tree index = bitsize_int (indexi);
+ return fold_build3_loc (loc,
+ BIT_FIELD_REF, type, op00,
+ part_width, index);
+ }
}
/* ((foo*)&complexfoo)[1] => __imag__ complexfoo */
else if (TREE_CODE (op00type) == COMPLEX_TYPE
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 5cf25a4..961167b 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,150 @@
+2016-04-09 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR fortran/68566
+ * array.c (match_array_element_spec): Add check for non-integer.
+ * simplify.c (gfc_simplify_reshape): If source shape is NULL return.
+
+2016-04-06 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c/70436
+ * openmp.c (gfc_find_omp_udr): Add explicit braces to resolve a
+ future -Wparentheses warning.
+
+2016-04-04 Andre Vehreschild <vehre@gcc.gnu.org>
+
+ PR fortran/67538
+ * resolve.c (resolve_allocate_expr): Emit error message when no
+ array spec and no array valued source= expression is given in an
+ F2008 allocate() for an array to allocate.
+
+2016-04-04 Andre Vehreschild <vehre@gcc.gnu.org>
+
+ PR fortran/65795
+ * trans-array.c (gfc_array_allocate): When the array is a coarray,
+ do not nullyfing its allocatable components in array_allocate, because
+ the nullify missed the array ref and nullifies the wrong component.
+ Cosmetics.
+
+2016-03-29 Andre Vehreschild <vehre@gcc.gnu.org>
+
+ PR fortran/70397
+ * trans-expr.c (gfc_class_len_or_zero_get): Add function to return a
+ constant zero tree, when the class to get the _len component from is
+ not unlimited polymorphic.
+ (gfc_copy_class_to_class): Use the new function.
+ * trans.h: Added interface of new function gfc_class_len_or_zero_get.
+
+2016-03-28 Alessandro Fanfarillo <fanfarillo.gcc@gmail.com>
+
+ * trans-decl.c (gfc_build_builtin_function_decls):
+ caf_stop_numeric and caf_stop_str definition.
+ * trans-stmt.c (gfc_trans_stop): invoke external functions
+ for stop and stop_str when coarrays are used.
+ * trans.h: extern for new functions.
+
+2016-03-19 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR fortran/69043
+ * scanner.c (load_file): Update to use S_ISREG macro.
+
+2016-03-17 Thomas Schwinge <thomas@codesourcery.com>
+
+ * gfortran.h (enum gfc_omp_map_op): Rename OMP_MAP_FORCE_DEALLOC
+ to OMP_MAP_DELETE. Adjust all users.
+
+2016-03-13 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+ Jim MacArthur <jim.macarthur@codethink.co.uk>
+
+ PR fortran/69043
+ * scanner.c (load_file): Check that included file is regular.
+
+2016-03-12 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+ Harold Anlauf <anlauf@gmx.de>
+
+ PR fortran/69520
+ * invoke.texi: Explain use of the 'no-' construct within the
+ -fcheck= option.
+ * options.c (gfc_handle_runtime_check_option): Enable use of
+ 'no-' prefix for the various options with -fcheck= to allow
+ negating previously enabled check options.
+
+2016-03-12 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/70031
+ * decl.c (gfc_match_prefix): Treat the 'module' prefix in the
+ same way as the others, rather than fixing it to come last.
+ (gfc_match_function_decl, gfc_match_subroutine): After errors
+ in 'copy_prefix', emit them immediately in the case of module
+ procedures to prevent a later ICE.
+
+ PR fortran/69524
+ * decl.c (gfc_match_submod_proc): Permit 'module procedure'
+ declarations within the contains section of modules as well as
+ submodules.
+ * resolve.c (resolve_fl_procedure): Likewise.
+ *trans-decl.c (build_function_decl): Change the gcc_assert to
+ allow all forms of module procedure declarations within module
+ contains sections.
+
+2016-02-28 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/68147
+ PR fortran/47674
+ * frontend-passes.c (realloc_string_callback): Don't set
+ walk_subtrees.
+
+2016-02-28 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ * dump-parse-tree.c (show_code_node): Print association
+ list of a block if present. Handle EXEC_END_BLOCK.
+
+2016-02-28 Harald Anlauf <anlauf@gmx.de>
+ Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR fortran/56007
+ * match.c (gfc_match_iterator): Add diagnostic for array variable
+ as do loop index.
+
+2016-02-27 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+ Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/69910
+ * io.c (gfc_match_open): Check that open status is an expression
+ constant before comparing string to 'scratch' with NEWUNIT.
+
+2016-02-27 Alessandro Fanfarillo <fanfarillo.gcc@gmail.com>
+
+ * trans.c (gfc_allocate_allocatable): size conversion
+ from byte to number of elements for event variables.
+ * trans-types.c (gfc_get_derived_type): event variables
+ represented as a pointer (like lock variable).
+
+2016-02-23 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR fortran/61156
+ * scanner.c (add_path_to_list): If include path is not a directory,
+ issue a fatal error.
+
+2016-02-23 Andre Vehreschild <vehre@gcc.gnu.org>
+
+ PR fortran/67451
+ * trans-array.c (gfc_array_allocate): Take the attributes from the
+ expression to allocate and not from the source=-expression.
+
+2016-02-20 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/69423
+ * trans-decl.c (create_function_arglist): Deferred character
+ length functions, with and without declared results, address
+ the passed reference type as '.result' and the local string
+ length as '..result'.
+ (gfc_null_and_pass_deferred_len): Helper function to null and
+ return deferred string lengths, as needed.
+ (gfc_trans_deferred_vars): Call it, thereby reducing repeated
+ code, add call for deferred arrays and reroute pointer function
+ results. Avoid using 'tmp' for anything other that a temporary
+ tree by introducing 'type_of_array' for the arrayspec type.
+
2015-02-16 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/69742
diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c
index 2fc9dfa..1430e80 100644
--- a/gcc/fortran/array.c
+++ b/gcc/fortran/array.c
@@ -421,10 +421,15 @@ match_array_element_spec (gfc_array_spec *as)
if (!gfc_expr_check_typed (*upper, gfc_current_ns, false))
return AS_UNKNOWN;
- if ((*upper)->expr_type == EXPR_FUNCTION && (*upper)->ts.type == BT_UNKNOWN
- && (*upper)->symtree && strcmp ((*upper)->symtree->name, "null") == 0)
- {
- gfc_error ("Expecting a scalar INTEGER expression at %C");
+ if (((*upper)->expr_type == EXPR_CONSTANT
+ && (*upper)->ts.type != BT_INTEGER) ||
+ ((*upper)->expr_type == EXPR_FUNCTION
+ && (*upper)->ts.type == BT_UNKNOWN
+ && (*upper)->symtree
+ && strcmp ((*upper)->symtree->name, "null") == 0))
+ {
+ gfc_error ("Expecting a scalar INTEGER expression at %C, found %s",
+ gfc_basic_typename ((*upper)->ts.type));
return AS_UNKNOWN;
}
@@ -448,10 +453,15 @@ match_array_element_spec (gfc_array_spec *as)
if (!gfc_expr_check_typed (*upper, gfc_current_ns, false))
return AS_UNKNOWN;
- if ((*upper)->expr_type == EXPR_FUNCTION && (*upper)->ts.type == BT_UNKNOWN
- && (*upper)->symtree && strcmp ((*upper)->symtree->name, "null") == 0)
+ if (((*upper)->expr_type == EXPR_CONSTANT
+ && (*upper)->ts.type != BT_INTEGER) ||
+ ((*upper)->expr_type == EXPR_FUNCTION
+ && (*upper)->ts.type == BT_UNKNOWN
+ && (*upper)->symtree
+ && strcmp ((*upper)->symtree->name, "null") == 0))
{
- gfc_error ("Expecting a scalar INTEGER expression at %C");
+ gfc_error ("Expecting a scalar INTEGER expression at %C, found %s",
+ gfc_basic_typename ((*upper)->ts.type));
return AS_UNKNOWN;
}
diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c
index d3ddda2..80ec39c 100644
--- a/gcc/fortran/decl.c
+++ b/gcc/fortran/decl.c
@@ -764,7 +764,7 @@ char_len_param_value (gfc_expr **expr, bool *deferred)
gfc_reduce_init_expr (e);
if ((e->ref && e->ref->type == REF_ARRAY
- && e->ref->u.ar.type != AR_ELEMENT)
+ && e->ref->u.ar.type != AR_ELEMENT)
|| (!e->ref && e->expr_type == EXPR_ARRAY))
{
gfc_free_expr (e);
@@ -1183,8 +1183,8 @@ gfc_verify_c_interop_param (gfc_symbol *sym)
else if (sym->attr.optional == 1
&& !gfc_notify_std (GFC_STD_F2008_TS, "Variable %qs "
"at %L with OPTIONAL attribute in "
- "procedure %qs which is BIND(C)",
- sym->name, &(sym->declared_at),
+ "procedure %qs which is BIND(C)",
+ sym->name, &(sym->declared_at),
sym->ns->proc_name->name))
retval = false;
@@ -1195,8 +1195,8 @@ gfc_verify_c_interop_param (gfc_symbol *sym)
&& !gfc_notify_std (GFC_STD_F2008_TS, "Assumed-shape array %qs "
"at %L as dummy argument to the BIND(C) "
"procedure %qs at %L", sym->name,
- &(sym->declared_at),
- sym->ns->proc_name->name,
+ &(sym->declared_at),
+ sym->ns->proc_name->name,
&(sym->ns->proc_name->declared_at)))
retval = false;
}
@@ -1286,7 +1286,7 @@ build_sym (const char *name, gfc_charlen *cl, bool cl_deferred,
{
/* Set the binding label and verify that if a NAME= was specified
then only one identifier was in the entity-decl-list. */
- if (!set_binding_label (&sym->binding_label, sym->name,
+ if (!set_binding_label (&sym->binding_label, sym->name,
num_idents_on_line))
return false;
}
@@ -1505,7 +1505,7 @@ add_init_expr_to_sym (const char *name, gfc_expr **initp, locus *var_locus)
else if (init->value.constructor)
{
gfc_constructor *c;
- c = gfc_constructor_first (init->value.constructor);
+ c = gfc_constructor_first (init->value.constructor);
clen = c->expr->value.character.length;
}
else
@@ -1570,7 +1570,7 @@ add_init_expr_to_sym (const char *name, gfc_expr **initp, locus *var_locus)
lower = sym->as->lower[dim];
- /* If the lower bound is an array element from another
+ /* If the lower bound is an array element from another
parameterized array, then it is marked with EXPR_VARIABLE and
is an initialization expression. Try to reduce it. */
if (lower->expr_type == EXPR_VARIABLE)
@@ -1998,7 +1998,7 @@ variable_decl (int elem)
as->type = AS_IMPLIED_SHAPE;
if (as->type == AS_IMPLIED_SHAPE
- && !gfc_notify_std (GFC_STD_F2008, "Implied-shape array at %L",
+ && !gfc_notify_std (GFC_STD_F2008, "Implied-shape array at %L",
&var_locus))
{
m = MATCH_ERROR;
@@ -2314,8 +2314,8 @@ gfc_match_old_kind_spec (gfc_typespec *ts)
return MATCH_ERROR;
}
- if (!gfc_notify_std (GFC_STD_GNU,
- "Nonstandard type declaration %s*%d at %C",
+ if (!gfc_notify_std (GFC_STD_GNU,
+ "Nonstandard type declaration %s*%d at %C",
gfc_basic_typename(ts->type), original_kind))
return MATCH_ERROR;
@@ -2918,7 +2918,7 @@ gfc_match_decl_type_spec (gfc_typespec *ts, int implicit_flag)
/* This is essential to force the construction of
unlimited polymorphic component class containers. */
upe->attr.zero_comp = 1;
- if (!gfc_add_flavor (&upe->attr, FL_DERIVED, NULL,
+ if (!gfc_add_flavor (&upe->attr, FL_DERIVED, NULL,
&gfc_current_locus))
return MATCH_ERROR;
}
@@ -3938,7 +3938,7 @@ match_attr_spec (void)
&& gfc_state_stack->previous->state == COMP_MODULE)
{
if (!gfc_notify_std (GFC_STD_F2003, "Attribute %s "
- "at %L in a TYPE definition", attr,
+ "at %L in a TYPE definition", attr,
&seen_at[d]))
{
m = MATCH_ERROR;
@@ -4345,7 +4345,7 @@ set_verify_bind_c_com_block (gfc_common_head *com_block, int num_idents)
bool retval = true;
/* destLabel, common name, typespec (which may have binding label). */
- if (!set_binding_label (&com_block->binding_label, com_block->name,
+ if (!set_binding_label (&com_block->binding_label, com_block->name,
num_idents))
return false;
@@ -4606,6 +4606,19 @@ gfc_match_prefix (gfc_typespec *ts)
{
found_prefix = false;
+ /* MODULE is a prefix like PURE, ELEMENTAL, etc., having a
+ corresponding attribute seems natural and distinguishes these
+ procedures from procedure types of PROC_MODULE, which these are
+ as well. */
+ if (gfc_match ("module% ") == MATCH_YES)
+ {
+ if (!gfc_notify_std (GFC_STD_F2008, "MODULE prefix at %C"))
+ goto error;
+
+ current_attr.module_procedure = 1;
+ found_prefix = true;
+ }
+
if (!seen_type && ts != NULL
&& gfc_match_decl_type_spec (ts, 0) == MATCH_YES
&& gfc_match_space () == MATCH_YES)
@@ -4670,21 +4683,6 @@ gfc_match_prefix (gfc_typespec *ts)
/* At this point, the next item is not a prefix. */
gcc_assert (gfc_matching_prefix);
- /* MODULE should be the last prefix before FUNCTION or SUBROUTINE.
- Since this is a prefix like PURE, ELEMENTAL, etc., having a
- corresponding attribute seems natural and distinguishes these
- procedures from procedure types of PROC_MODULE, which these are
- as well. */
- if ((gfc_current_state () == COMP_INTERFACE
- || gfc_current_state () == COMP_CONTAINS)
- && gfc_match ("module% ") == MATCH_YES)
- {
- if (!gfc_notify_std (GFC_STD_F2008, "MODULE prefix at %C"))
- goto error;
- else
- current_attr.module_procedure = 1;
- }
-
gfc_matching_prefix = false;
return MATCH_YES;
@@ -5142,7 +5140,7 @@ match_procedure_interface (gfc_symbol **proc_if)
if ((*proc_if)->attr.flavor == FL_UNKNOWN
&& (*proc_if)->ts.type == BT_UNKNOWN
- && !gfc_add_flavor (&(*proc_if)->attr, FL_PROCEDURE,
+ && !gfc_add_flavor (&(*proc_if)->attr, FL_PROCEDURE,
(*proc_if)->name, NULL))
return MATCH_ERROR;
}
@@ -5639,10 +5637,17 @@ gfc_match_function_decl (void)
if (!gfc_add_function (&sym->attr, sym->name, NULL))
goto cleanup;
- if (!gfc_missing_attr (&sym->attr, NULL)
- || !copy_prefix (&sym->attr, &sym->declared_at))
+ if (!gfc_missing_attr (&sym->attr, NULL))
goto cleanup;
+ if (!copy_prefix (&sym->attr, &sym->declared_at))
+ {
+ if(!sym->attr.module_procedure)
+ goto cleanup;
+ else
+ gfc_error_check ();
+ }
+
/* Delay matching the function characteristics until after the
specification block by signalling kind=-1. */
sym->declared_at = old_loc;
@@ -5666,6 +5671,7 @@ gfc_match_function_decl (void)
sym->result = result;
}
+
/* Warn if this procedure has the same name as an intrinsic. */
do_warn_intrinsic_shadow (sym, true);
@@ -5890,7 +5896,7 @@ gfc_match_entry (void)
gfc_error ("Missing required parentheses before BIND(C) at %C");
return MATCH_ERROR;
}
- if (!gfc_add_is_bind_c (&(entry->attr), entry->name,
+ if (!gfc_add_is_bind_c (&(entry->attr), entry->name,
&(entry->declared_at), 1))
return MATCH_ERROR;
}
@@ -6096,7 +6102,7 @@ gfc_match_subroutine (void)
gfc_error ("Missing required parentheses before BIND(C) at %C");
return MATCH_ERROR;
}
- if (!gfc_add_is_bind_c (&(sym->attr), sym->name,
+ if (!gfc_add_is_bind_c (&(sym->attr), sym->name,
&(sym->declared_at), 1))
return MATCH_ERROR;
}
@@ -6108,7 +6114,12 @@ gfc_match_subroutine (void)
}
if (!copy_prefix (&sym->attr, &sym->declared_at))
- return MATCH_ERROR;
+ {
+ if(!sym->attr.module_procedure)
+ return MATCH_ERROR;
+ else
+ gfc_error_check ();
+ }
/* Warn if it has the same name as an intrinsic. */
do_warn_intrinsic_shadow (sym, false);
@@ -6516,7 +6527,7 @@ gfc_match_end (gfc_statement *st)
if (!eos_ok && (*st == ST_END_SUBROUTINE || *st == ST_END_FUNCTION))
{
if (!gfc_notify_std (GFC_STD_F2008, "END statement "
- "instead of %s statement at %L",
+ "instead of %s statement at %L",
abreviated_modproc_decl ? "END PROCEDURE"
: gfc_ascii_statement(*st), &old_loc))
goto cleanup;
@@ -7148,16 +7159,16 @@ access_attr_decl (gfc_statement st)
if (gfc_get_symbol (name, NULL, &sym))
goto done;
- if (!gfc_add_access (&sym->attr,
- (st == ST_PUBLIC)
- ? ACCESS_PUBLIC : ACCESS_PRIVATE,
+ if (!gfc_add_access (&sym->attr,
+ (st == ST_PUBLIC)
+ ? ACCESS_PUBLIC : ACCESS_PRIVATE,
sym->name, NULL))
return MATCH_ERROR;
if (sym->attr.generic && (dt_sym = gfc_find_dt_in_generic (sym))
- && !gfc_add_access (&dt_sym->attr,
- (st == ST_PUBLIC)
- ? ACCESS_PUBLIC : ACCESS_PRIVATE,
+ && !gfc_add_access (&dt_sym->attr,
+ (st == ST_PUBLIC)
+ ? ACCESS_PUBLIC : ACCESS_PRIVATE,
sym->name, NULL))
return MATCH_ERROR;
@@ -7481,7 +7492,7 @@ gfc_match_save (void)
switch (m)
{
case MATCH_YES:
- if (!gfc_add_save (&sym->attr, SAVE_EXPLICIT, sym->name,
+ if (!gfc_add_save (&sym->attr, SAVE_EXPLICIT, sym->name,
&gfc_current_locus))
return MATCH_ERROR;
goto next_item;
@@ -7697,7 +7708,8 @@ gfc_match_submod_proc (void)
if (gfc_current_state () != COMP_CONTAINS
|| !(gfc_state_stack->previous
- && gfc_state_stack->previous->state == COMP_SUBMODULE))
+ && (gfc_state_stack->previous->state == COMP_SUBMODULE
+ || gfc_state_stack->previous->state == COMP_MODULE)))
return MATCH_NO;
m = gfc_match (" module% procedure% %n", name);
@@ -8127,7 +8139,7 @@ gfc_match_derived_decl (void)
return MATCH_ERROR;
else if (sym->attr.access == ACCESS_UNKNOWN
&& gensym->attr.access != ACCESS_UNKNOWN
- && !gfc_add_access (&sym->attr, gensym->attr.access,
+ && !gfc_add_access (&sym->attr, gensym->attr.access,
sym->name, NULL))
return MATCH_ERROR;
diff --git a/gcc/fortran/dump-parse-tree.c b/gcc/fortran/dump-parse-tree.c
index c96133f..8d50d75 100644
--- a/gcc/fortran/dump-parse-tree.c
+++ b/gcc/fortran/dump-parse-tree.c
@@ -1773,6 +1773,7 @@ show_code_node (int level, gfc_code *c)
{
const char* blocktype;
gfc_namespace *saved_ns;
+ gfc_association_list *alist;
if (c->ext.block.assoc)
blocktype = "ASSOCIATE";
@@ -1780,6 +1781,12 @@ show_code_node (int level, gfc_code *c)
blocktype = "BLOCK";
show_indent ();
fprintf (dumpfile, "%s ", blocktype);
+ for (alist = c->ext.block.assoc; alist; alist = alist->next)
+ {
+ fprintf (dumpfile, " %s = ", alist->name);
+ show_expr (alist->target);
+ }
+
++show_level;
ns = c->ext.block.ns;
saved_ns = gfc_current_ns;
@@ -1793,6 +1800,11 @@ show_code_node (int level, gfc_code *c)
break;
}
+ case EXEC_END_BLOCK:
+ /* Only come here when there is a label on an
+ END ASSOCIATE construct. */
+ break;
+
case EXEC_SELECT:
d = c->block;
fputs ("SELECT CASE ", dumpfile);
diff --git a/gcc/fortran/frontend-passes.c b/gcc/fortran/frontend-passes.c
index 156ea2b..7eeb5a6 100644
--- a/gcc/fortran/frontend-passes.c
+++ b/gcc/fortran/frontend-passes.c
@@ -153,14 +153,13 @@ gfc_run_passes (gfc_namespace *ns)
*/
static int
-realloc_string_callback (gfc_code **c, int *walk_subtrees,
+realloc_string_callback (gfc_code **c, int *walk_subtrees ATTRIBUTE_UNUSED,
void *data ATTRIBUTE_UNUSED)
{
gfc_expr *expr1, *expr2;
gfc_code *co = *c;
gfc_expr *n;
- *walk_subtrees = 0;
if (co->op != EXEC_ASSIGN)
return 0;
diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
index 33fffd8..a0fb5fd 100644
--- a/gcc/fortran/gfortran.h
+++ b/gcc/fortran/gfortran.h
@@ -1112,8 +1112,8 @@ enum gfc_omp_map_op
OMP_MAP_TO,
OMP_MAP_FROM,
OMP_MAP_TOFROM,
+ OMP_MAP_DELETE,
OMP_MAP_FORCE_ALLOC,
- OMP_MAP_FORCE_DEALLOC,
OMP_MAP_FORCE_TO,
OMP_MAP_FORCE_FROM,
OMP_MAP_FORCE_TOFROM,
diff --git a/gcc/fortran/invoke.texi b/gcc/fortran/invoke.texi
index 7fbbc4b..e90656e 100644
--- a/gcc/fortran/invoke.texi
+++ b/gcc/fortran/invoke.texi
@@ -1398,7 +1398,8 @@ library needs to be linked.
@cindex checking array temporaries
Enable the generation of run-time checks; the argument shall be
-a comma-delimited list of the following keywords.
+a comma-delimited list of the following keywords. Prefixing a check with
+@option{no-} disables it if it was activated by a previous specification.
@table @asis
@item @samp{all}
@@ -1444,6 +1445,13 @@ Note: This check does not work for OpenMP programs and is disabled if used
together with @option{-frecursive} and @option{-fopenmp}.
@end table
+Example: Assuming you have a file @file{foo.f90}, the command
+@smallexample
+ gfortran -fcheck=all,no-array-temps foo.f90
+@end smallexample
+will compile the file with all checks enabled as specified above except
+warnings for generated array temporaries.
+
@item -fbounds-check
@opindex @code{fbounds-check}
diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c
index fddd36b..da0e1c5 100644
--- a/gcc/fortran/io.c
+++ b/gcc/fortran/io.c
@@ -1890,13 +1890,16 @@ gfc_match_open (void)
goto cleanup;
}
- if (!(open->file || (open->status
- && gfc_wide_strncasecmp (open->status->value.character.string,
- "scratch", 7) == 0)))
- {
- gfc_error ("NEWUNIT specifier must have FILE= "
- "or STATUS='scratch' at %C");
- goto cleanup;
+ if (!open->file && open->status)
+ {
+ if (open->status->expr_type == EXPR_CONSTANT
+ && gfc_wide_strncasecmp (open->status->value.character.string,
+ "scratch", 7) != 0)
+ {
+ gfc_error ("NEWUNIT specifier must have FILE= "
+ "or STATUS='scratch' at %C");
+ goto cleanup;
+ }
}
}
else if (!open->unit)
diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c
index ef41781..2490f85 100644
--- a/gcc/fortran/match.c
+++ b/gcc/fortran/match.c
@@ -877,6 +877,12 @@ gfc_match_iterator (gfc_iterator *iter, int init_flag)
if (m != MATCH_YES)
return MATCH_NO;
+ if (var->symtree->n.sym->attr.dimension)
+ {
+ gfc_error ("Loop variable at %C cannot be an array");
+ goto cleanup;
+ }
+
/* F2008, C617 & C565. */
if (var->symtree->n.sym->attr.codimension)
{
diff --git a/gcc/fortran/openmp.c b/gcc/fortran/openmp.c
index 51ab96e..0dd1a92 100644
--- a/gcc/fortran/openmp.c
+++ b/gcc/fortran/openmp.c
@@ -175,24 +175,26 @@ gfc_find_omp_udr (gfc_namespace *ns, const char *name, gfc_typespec *ts)
st = gfc_find_symtree (ns->omp_udr_root, name);
if (st != NULL)
- for (omp_udr = st->n.omp_udr; omp_udr; omp_udr = omp_udr->next)
- if (ts == NULL)
- return omp_udr;
- else if (gfc_compare_types (&omp_udr->ts, ts))
- {
- if (ts->type == BT_CHARACTER)
- {
- if (omp_udr->ts.u.cl->length == NULL)
- return omp_udr;
- if (ts->u.cl->length == NULL)
- continue;
- if (gfc_compare_expr (omp_udr->ts.u.cl->length,
- ts->u.cl->length,
- INTRINSIC_EQ) != 0)
- continue;
- }
+ {
+ for (omp_udr = st->n.omp_udr; omp_udr; omp_udr = omp_udr->next)
+ if (ts == NULL)
return omp_udr;
- }
+ else if (gfc_compare_types (&omp_udr->ts, ts))
+ {
+ if (ts->type == BT_CHARACTER)
+ {
+ if (omp_udr->ts.u.cl->length == NULL)
+ return omp_udr;
+ if (ts->u.cl->length == NULL)
+ continue;
+ if (gfc_compare_expr (omp_udr->ts.u.cl->length,
+ ts->u.cl->length,
+ INTRINSIC_EQ) != 0)
+ continue;
+ }
+ return omp_udr;
+ }
+ }
/* Don't escape an interface block. */
if (ns && !ns->has_import_set
@@ -764,7 +766,7 @@ gfc_match_omp_clauses (gfc_omp_clauses **cp, uint64_t mask,
if ((mask & OMP_CLAUSE_DELETE)
&& gfc_match ("delete ( ") == MATCH_YES
&& gfc_match_omp_map_clause (&c->lists[OMP_LIST_MAP],
- OMP_MAP_FORCE_DEALLOC))
+ OMP_MAP_DELETE))
continue;
if ((mask & OMP_CLAUSE_PRESENT)
&& gfc_match ("present ( ") == MATCH_YES
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
index f8d8f8d..0fcda1d 100644
--- a/gcc/fortran/options.c
+++ b/gcc/fortran/options.c
@@ -515,6 +515,15 @@ gfc_handle_runtime_check_option (const char *arg)
result = 1;
break;
}
+ else if (optname[n] && pos > 3 && strncmp ("no-", arg, 3) == 0
+ && strncmp (optname[n], arg+3, pos-3) == 0)
+ {
+ gfc_option.rtcheck &= ~optmask[n];
+ arg += pos;
+ pos = 0;
+ result = 1;
+ break;
+ }
}
if (!result)
gfc_fatal_error ("Argument to %<-fcheck%> is not valid: %s", arg);
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 556c846..f5cd588 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -7217,7 +7217,15 @@ resolve_allocate_expr (gfc_expr *e, gfc_code *code, bool *array_alloc_wo_spec)
if (!gfc_notify_std (GFC_STD_F2008, "Array specification required "
"in ALLOCATE statement at %L", &e->where))
goto failure;
- *array_alloc_wo_spec = true;
+ if (code->expr3->rank != 0)
+ *array_alloc_wo_spec = true;
+ else
+ {
+ gfc_error ("Array specification or array-valued SOURCE= "
+ "expression required in ALLOCATE statement at %L",
+ &e->where);
+ goto failure;
+ }
}
else
{
@@ -11905,7 +11913,7 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag)
"in %qs at %L", sym->name, &sym->declared_at);
return false;
}
- if (sym->attr.external && sym->attr.function
+ if (sym->attr.external && sym->attr.function && !sym->attr.module_procedure
&& ((sym->attr.if_source == IFSRC_DECL && !sym->attr.procedure)
|| sym->attr.contained))
{
diff --git a/gcc/fortran/scanner.c b/gcc/fortran/scanner.c
index c1d7945..f4dedd6 100644
--- a/gcc/fortran/scanner.c
+++ b/gcc/fortran/scanner.c
@@ -336,7 +336,7 @@ add_path_to_list (gfc_directorylist **list, const char *path,
}
else if (!S_ISDIR (st.st_mode))
{
- gfc_warning_now (0, "%qs is not a directory", path);
+ gfc_fatal_error ("%qs is not a directory", path);
return;
}
@@ -2200,6 +2200,8 @@ load_file (const char *realfilename, const char *displayedname, bool initial)
FILE *input;
int len, line_len;
bool first_line;
+ struct stat st;
+ int stat_result;
const char *filename;
/* If realfilename and displayedname are different and non-null then
surely realfilename is the preprocessed form of
@@ -2227,6 +2229,7 @@ load_file (const char *realfilename, const char *displayedname, bool initial)
}
else
input = gfc_open_file (realfilename);
+
if (input == NULL)
{
gfc_error_now ("Can't open file %qs", filename);
@@ -2242,6 +2245,15 @@ load_file (const char *realfilename, const char *displayedname, bool initial)
current_file->filename, current_file->line, filename);
return false;
}
+ stat_result = stat (realfilename, &st);
+ if (stat_result == 0 && !S_ISREG(st.st_mode))
+ {
+ fprintf (stderr, "%s:%d: Error: Included path '%s'"
+ " is not a regular file\n",
+ current_file->filename, current_file->line, filename);
+ fclose (input);
+ return false;
+ }
}
/* Load the file.
diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c
index 12a8f32..a631010 100644
--- a/gcc/fortran/simplify.c
+++ b/gcc/fortran/simplify.c
@@ -5163,6 +5163,9 @@ gfc_simplify_reshape (gfc_expr *source, gfc_expr *shape_exp,
|| !is_constant_array_expr (order_exp))
return NULL;
+ if (source->shape == NULL)
+ return NULL;
+
/* Proceed with simplification, unpacking the array. */
mpz_init (index);
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c
index 2ff2833..825dfb8 100644
--- a/gcc/fortran/trans-array.c
+++ b/gcc/fortran/trans-array.c
@@ -5401,17 +5401,8 @@ gfc_array_allocate (gfc_se * se, gfc_expr * expr, tree status, tree errmsg,
if (!retrieve_last_ref (&ref, &prev_ref))
return false;
- if (ref->u.ar.type == AR_FULL && expr3 != NULL)
- {
- /* F08:C633: Array shape from expr3. */
- ref = expr3->ref;
-
- /* Find the last reference in the chain. */
- if (!retrieve_last_ref (&ref, &prev_ref))
- return false;
- alloc_w_e3_arr_spec = true;
- }
-
+ /* Take the allocatable and coarray properties solely from the expr-ref's
+ attributes and not from source=-expression. */
if (!prev_ref)
{
allocatable = expr->symtree->n.sym->attr.allocatable;
@@ -5428,6 +5419,17 @@ gfc_array_allocate (gfc_se * se, gfc_expr * expr, tree status, tree errmsg,
if (!dimension)
gcc_assert (coarray);
+ if (ref->u.ar.type == AR_FULL && expr3 != NULL)
+ {
+ /* F08:C633: Array shape from expr3. */
+ ref = expr3->ref;
+
+ /* Find the last reference in the chain. */
+ if (!retrieve_last_ref (&ref, &prev_ref))
+ return false;
+ alloc_w_e3_arr_spec = true;
+ }
+
/* Figure out the size of the array. */
switch (ref->u.ar.type)
{
@@ -5463,7 +5465,8 @@ gfc_array_allocate (gfc_se * se, gfc_expr * expr, tree status, tree errmsg,
gfc_init_block (&set_descriptor_block);
size = gfc_array_init_size (se->expr, alloc_w_e3_arr_spec ? expr->rank
: ref->u.ar.as->rank,
- ref->u.ar.as->corank, &offset, lower, upper,
+ coarray ? ref->u.ar.as->corank : 0,
+ &offset, lower, upper,
&se->pre, &set_descriptor_block, &overflow,
expr3_elem_size, nelems, expr3, e3_arr_desc,
e3_is_array_constr, expr);
@@ -5547,8 +5550,8 @@ gfc_array_allocate (gfc_se * se, gfc_expr * expr, tree status, tree errmsg,
else
gfc_add_expr_to_block (&se->pre, set_descriptor);
- if ((expr->ts.type == BT_DERIVED)
- && expr->ts.u.derived->attr.alloc_comp)
+ if (expr->ts.type == BT_DERIVED && expr->ts.u.derived->attr.alloc_comp
+ && !coarray)
{
tmp = gfc_nullify_alloc_comp (expr->ts.u.derived, se->expr,
ref->u.ar.as->rank);
diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c
index 21d0ba8..309baf1 100644
--- a/gcc/fortran/trans-decl.c
+++ b/gcc/fortran/trans-decl.c
@@ -137,6 +137,8 @@ tree gfor_fndecl_caf_sendget;
tree gfor_fndecl_caf_sync_all;
tree gfor_fndecl_caf_sync_memory;
tree gfor_fndecl_caf_sync_images;
+tree gfor_fndecl_caf_stop_str;
+tree gfor_fndecl_caf_stop_numeric;
tree gfor_fndecl_caf_error_stop;
tree gfor_fndecl_caf_error_stop_str;
tree gfor_fndecl_caf_atomic_def;
@@ -2062,7 +2064,12 @@ build_function_decl (gfc_symbol * sym, bool global)
tree result_decl;
gfc_formal_arglist *f;
- gcc_assert (!sym->attr.external);
+ bool module_procedure = sym->attr.module_procedure
+ && sym->ns
+ && sym->ns->proc_name
+ && sym->ns->proc_name->attr.flavor == FL_MODULE;
+
+ gcc_assert (!sym->attr.external || module_procedure);
if (sym->backend_decl)
return;
@@ -2234,7 +2241,12 @@ create_function_arglist (gfc_symbol * sym)
PARM_DECL,
get_identifier (".__result"),
len_type);
- if (!sym->ts.u.cl->length)
+ if (POINTER_TYPE_P (len_type))
+ {
+ sym->ts.u.cl->passed_length = length;
+ TREE_USED (length) = 1;
+ }
+ else if (!sym->ts.u.cl->length)
{
sym->ts.u.cl->backend_decl = length;
TREE_USED (length) = 1;
@@ -2271,13 +2283,6 @@ create_function_arglist (gfc_symbol * sym)
type = gfc_sym_type (arg);
arg->backend_decl = backend_decl;
type = build_reference_type (type);
-
- if (POINTER_TYPE_P (len_type))
- {
- sym->ts.u.cl->passed_length = length;
- sym->ts.u.cl->backend_decl =
- build_fold_indirect_ref_loc (input_location, length);
- }
}
}
@@ -3547,6 +3552,18 @@ gfc_build_builtin_function_decls (void)
/* CAF's ERROR STOP doesn't return. */
TREE_THIS_VOLATILE (gfor_fndecl_caf_error_stop_str) = 1;
+ gfor_fndecl_caf_stop_numeric = gfc_build_library_function_decl_with_spec (
+ get_identifier (PREFIX("caf_stop_numeric")), ".R.",
+ void_type_node, 1, gfc_int4_type_node);
+ /* CAF's STOP doesn't return. */
+ TREE_THIS_VOLATILE (gfor_fndecl_caf_stop_numeric) = 1;
+
+ gfor_fndecl_caf_stop_str = gfc_build_library_function_decl_with_spec (
+ get_identifier (PREFIX("caf_stop_str")), ".R.",
+ void_type_node, 2, pchar_type_node, gfc_int4_type_node);
+ /* CAF's STOP doesn't return. */
+ TREE_THIS_VOLATILE (gfor_fndecl_caf_stop_str) = 1;
+
gfor_fndecl_caf_atomic_def = gfc_build_library_function_decl_with_spec (
get_identifier (PREFIX("caf_atomic_define")), "R..RW",
void_type_node, 7, pvoid_type_node, size_type_node, integer_type_node,
@@ -3917,6 +3934,62 @@ init_intent_out_dt (gfc_symbol * proc_sym, gfc_wrapped_block * block)
}
+/* Helper function to manage deferred string lengths. */
+
+static tree
+gfc_null_and_pass_deferred_len (gfc_symbol *sym, stmtblock_t *init,
+ locus *loc)
+{
+ tree tmp;
+
+ /* Character length passed by reference. */
+ tmp = sym->ts.u.cl->passed_length;
+ tmp = build_fold_indirect_ref_loc (input_location, tmp);
+ tmp = fold_convert (gfc_charlen_type_node, tmp);
+
+ if (!sym->attr.dummy || sym->attr.intent == INTENT_OUT)
+ /* Zero the string length when entering the scope. */
+ gfc_add_modify (init, sym->ts.u.cl->backend_decl,
+ build_int_cst (gfc_charlen_type_node, 0));
+ else
+ {
+ tree tmp2;
+
+ tmp2 = fold_build2_loc (input_location, MODIFY_EXPR,
+ gfc_charlen_type_node,
+ sym->ts.u.cl->backend_decl, tmp);
+ if (sym->attr.optional)
+ {
+ tree present = gfc_conv_expr_present (sym);
+ tmp2 = build3_loc (input_location, COND_EXPR,
+ void_type_node, present, tmp2,
+ build_empty_stmt (input_location));
+ }
+ gfc_add_expr_to_block (init, tmp2);
+ }
+
+ gfc_restore_backend_locus (loc);
+
+ /* Pass the final character length back. */
+ if (sym->attr.intent != INTENT_IN)
+ {
+ tmp = fold_build2_loc (input_location, MODIFY_EXPR,
+ gfc_charlen_type_node, tmp,
+ sym->ts.u.cl->backend_decl);
+ if (sym->attr.optional)
+ {
+ tree present = gfc_conv_expr_present (sym);
+ tmp = build3_loc (input_location, COND_EXPR,
+ void_type_node, present, tmp,
+ build_empty_stmt (input_location));
+ }
+ }
+ else
+ tmp = NULL_TREE;
+
+ return tmp;
+}
+
/* Generate function entry and exit code, and add it to the function body.
This includes:
Allocation and initialization of array variables.
@@ -3966,7 +4039,19 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, gfc_wrapped_block * block)
/* An automatic character length, pointer array result. */
if (proc_sym->ts.type == BT_CHARACTER
&& TREE_CODE (proc_sym->ts.u.cl->backend_decl) == VAR_DECL)
- gfc_trans_dummy_character (proc_sym, proc_sym->ts.u.cl, block);
+ {
+ tmp = NULL;
+ if (proc_sym->ts.deferred)
+ {
+ gfc_save_backend_locus (&loc);
+ gfc_set_backend_locus (&proc_sym->declared_at);
+ gfc_start_block (&init);
+ tmp = gfc_null_and_pass_deferred_len (proc_sym, &init, &loc);
+ gfc_add_init_cleanup (block, gfc_finish_block (&init), tmp);
+ }
+ else
+ gfc_trans_dummy_character (proc_sym, proc_sym->ts.u.cl, block);
+ }
}
else if (proc_sym->ts.type == BT_CHARACTER)
{
@@ -3993,7 +4078,8 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, gfc_wrapped_block * block)
/* Pass back the string length on exit. */
tmp = proc_sym->ts.u.cl->backend_decl;
- if (TREE_CODE (tmp) != INDIRECT_REF)
+ if (TREE_CODE (tmp) != INDIRECT_REF
+ && proc_sym->ts.u.cl->passed_length)
{
tmp = proc_sym->ts.u.cl->passed_length;
tmp = build_fold_indirect_ref_loc (input_location, tmp);
@@ -4072,21 +4158,21 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, gfc_wrapped_block * block)
= gfc_class_set_static_fields (sym->backend_decl, vptr, tmp);
TREE_CONSTANT (DECL_INITIAL (sym->backend_decl)) = 1;
}
- else if (sym->attr.dimension || sym->attr.codimension
- || (IS_CLASS_ARRAY (sym) && !CLASS_DATA (sym)->attr.allocatable))
+ else if ((sym->attr.dimension || sym->attr.codimension
+ || (IS_CLASS_ARRAY (sym) && !CLASS_DATA (sym)->attr.allocatable)))
{
bool is_classarray = IS_CLASS_ARRAY (sym);
symbol_attribute *array_attr;
gfc_array_spec *as;
- array_type tmp;
+ array_type type_of_array;
array_attr = is_classarray ? &CLASS_DATA (sym)->attr : &sym->attr;
as = is_classarray ? CLASS_DATA (sym)->as : sym->as;
/* Assumed-size Cray pointees need to be treated as AS_EXPLICIT. */
- tmp = as->type;
- if (tmp == AS_ASSUMED_SIZE && as->cp_was_assumed)
- tmp = AS_EXPLICIT;
- switch (tmp)
+ type_of_array = as->type;
+ if (type_of_array == AS_ASSUMED_SIZE && as->cp_was_assumed)
+ type_of_array = AS_EXPLICIT;
+ switch (type_of_array)
{
case AS_EXPLICIT:
if (sym->attr.dummy || sym->attr.result)
@@ -4169,6 +4255,15 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, gfc_wrapped_block * block)
case AS_DEFERRED:
seen_trans_deferred_array = true;
gfc_trans_deferred_array (sym, block);
+ if (sym->ts.type == BT_CHARACTER && sym->ts.deferred
+ && sym->attr.result)
+ {
+ gfc_start_block (&init);
+ gfc_save_backend_locus (&loc);
+ gfc_set_backend_locus (&sym->declared_at);
+ tmp = gfc_null_and_pass_deferred_len (sym, &init, &loc);
+ gfc_add_init_cleanup (block, gfc_finish_block (&init), tmp);
+ }
break;
default:
@@ -4183,6 +4278,7 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, gfc_wrapped_block * block)
continue;
else if ((!sym->attr.dummy || sym->ts.deferred)
&& (sym->attr.allocatable
+ || (sym->attr.pointer && sym->attr.result)
|| (sym->ts.type == BT_CLASS
&& CLASS_DATA (sym)->attr.allocatable)))
{
@@ -4190,96 +4286,50 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, gfc_wrapped_block * block)
{
tree descriptor = NULL_TREE;
- /* Nullify and automatic deallocation of allocatable
- scalars. */
- e = gfc_lval_expr_from_sym (sym);
- if (sym->ts.type == BT_CLASS)
- gfc_add_data_component (e);
-
- gfc_init_se (&se, NULL);
- if (sym->ts.type != BT_CLASS
- || sym->ts.u.derived->attr.dimension
- || sym->ts.u.derived->attr.codimension)
- {
- se.want_pointer = 1;
- gfc_conv_expr (&se, e);
- }
- else if (sym->ts.type == BT_CLASS
- && !CLASS_DATA (sym)->attr.dimension
- && !CLASS_DATA (sym)->attr.codimension)
- {
- se.want_pointer = 1;
- gfc_conv_expr (&se, e);
- }
- else
- {
- se.descriptor_only = 1;
- gfc_conv_expr (&se, e);
- descriptor = se.expr;
- se.expr = gfc_conv_descriptor_data_addr (se.expr);
- se.expr = build_fold_indirect_ref_loc (input_location, se.expr);
- }
- gfc_free_expr (e);
-
gfc_save_backend_locus (&loc);
gfc_set_backend_locus (&sym->declared_at);
gfc_start_block (&init);
- if (!sym->attr.dummy || sym->attr.intent == INTENT_OUT)
+ if (!sym->attr.pointer)
{
- /* Nullify when entering the scope. */
- tmp = fold_build2_loc (input_location, MODIFY_EXPR,
- TREE_TYPE (se.expr), se.expr,
- fold_convert (TREE_TYPE (se.expr),
- null_pointer_node));
- if (sym->attr.optional)
+ /* Nullify and automatic deallocation of allocatable
+ scalars. */
+ e = gfc_lval_expr_from_sym (sym);
+ if (sym->ts.type == BT_CLASS)
+ gfc_add_data_component (e);
+
+ gfc_init_se (&se, NULL);
+ if (sym->ts.type != BT_CLASS
+ || sym->ts.u.derived->attr.dimension
+ || sym->ts.u.derived->attr.codimension)
{
- tree present = gfc_conv_expr_present (sym);
- tmp = build3_loc (input_location, COND_EXPR,
- void_type_node, present, tmp,
- build_empty_stmt (input_location));
+ se.want_pointer = 1;
+ gfc_conv_expr (&se, e);
+ }
+ else if (sym->ts.type == BT_CLASS
+ && !CLASS_DATA (sym)->attr.dimension
+ && !CLASS_DATA (sym)->attr.codimension)
+ {
+ se.want_pointer = 1;
+ gfc_conv_expr (&se, e);
}
- gfc_add_expr_to_block (&init, tmp);
- }
-
- if ((sym->attr.dummy || sym->attr.result)
- && sym->ts.type == BT_CHARACTER
- && sym->ts.deferred)
- {
- /* Character length passed by reference. */
- tmp = sym->ts.u.cl->passed_length;
- tmp = build_fold_indirect_ref_loc (input_location, tmp);
- tmp = fold_convert (gfc_charlen_type_node, tmp);
-
- if (!sym->attr.dummy || sym->attr.intent == INTENT_OUT)
- /* Zero the string length when entering the scope. */
- gfc_add_modify (&init, sym->ts.u.cl->backend_decl,
- build_int_cst (gfc_charlen_type_node, 0));
else
{
- tree tmp2;
-
- tmp2 = fold_build2_loc (input_location, MODIFY_EXPR,
- gfc_charlen_type_node,
- sym->ts.u.cl->backend_decl, tmp);
- if (sym->attr.optional)
- {
- tree present = gfc_conv_expr_present (sym);
- tmp2 = build3_loc (input_location, COND_EXPR,
- void_type_node, present, tmp2,
- build_empty_stmt (input_location));
- }
- gfc_add_expr_to_block (&init, tmp2);
+ se.descriptor_only = 1;
+ gfc_conv_expr (&se, e);
+ descriptor = se.expr;
+ se.expr = gfc_conv_descriptor_data_addr (se.expr);
+ se.expr = build_fold_indirect_ref_loc (input_location, se.expr);
}
+ gfc_free_expr (e);
- gfc_restore_backend_locus (&loc);
-
- /* Pass the final character length back. */
- if (sym->attr.intent != INTENT_IN)
+ if (!sym->attr.dummy || sym->attr.intent == INTENT_OUT)
{
+ /* Nullify when entering the scope. */
tmp = fold_build2_loc (input_location, MODIFY_EXPR,
- gfc_charlen_type_node, tmp,
- sym->ts.u.cl->backend_decl);
+ TREE_TYPE (se.expr), se.expr,
+ fold_convert (TREE_TYPE (se.expr),
+ null_pointer_node));
if (sym->attr.optional)
{
tree present = gfc_conv_expr_present (sym);
@@ -4287,16 +4337,21 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, gfc_wrapped_block * block)
void_type_node, present, tmp,
build_empty_stmt (input_location));
}
+ gfc_add_expr_to_block (&init, tmp);
}
- else
- tmp = NULL_TREE;
}
+
+ if ((sym->attr.dummy || sym->attr.result)
+ && sym->ts.type == BT_CHARACTER
+ && sym->ts.deferred
+ && sym->ts.u.cl->passed_length)
+ tmp = gfc_null_and_pass_deferred_len (sym, &init, &loc);
else
gfc_restore_backend_locus (&loc);
/* Deallocate when leaving the scope. Nullifying is not
needed. */
- if (!sym->attr.result && !sym->attr.dummy
+ if (!sym->attr.result && !sym->attr.dummy && !sym->attr.pointer
&& !sym->ns->proc_name->attr.is_main_program)
{
if (sym->ts.type == BT_CLASS
@@ -4313,6 +4368,7 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, gfc_wrapped_block * block)
gfc_free_expr (expr);
}
}
+
if (sym->ts.type == BT_CLASS)
{
/* Initialize _vptr to declared type. */
@@ -4353,19 +4409,9 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, gfc_wrapped_block * block)
if (sym->attr.dummy)
{
gfc_start_block (&init);
-
- /* Character length passed by reference. */
- tmp = sym->ts.u.cl->passed_length;
- tmp = build_fold_indirect_ref_loc (input_location, tmp);
- tmp = fold_convert (gfc_charlen_type_node, tmp);
- gfc_add_modify (&init, sym->ts.u.cl->backend_decl, tmp);
- /* Pass the final character length back. */
- if (sym->attr.intent != INTENT_IN)
- tmp = fold_build2_loc (input_location, MODIFY_EXPR,
- gfc_charlen_type_node, tmp,
- sym->ts.u.cl->backend_decl);
- else
- tmp = NULL_TREE;
+ gfc_save_backend_locus (&loc);
+ gfc_set_backend_locus (&sym->declared_at);
+ tmp = gfc_null_and_pass_deferred_len (sym, &init, &loc);
gfc_add_init_cleanup (block, gfc_finish_block (&init), tmp);
}
}
@@ -4427,6 +4473,7 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, gfc_wrapped_block * block)
gfc_add_init_cleanup (block, gfc_finish_block (&tmpblock), NULL_TREE);
}
+
struct module_hasher : ggc_ptr_hash<module_htab_entry>
{
typedef const char *compare_type;
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c
index 4baadc8..8d039a6 100644
--- a/gcc/fortran/trans-expr.c
+++ b/gcc/fortran/trans-expr.c
@@ -173,6 +173,29 @@ gfc_class_len_get (tree decl)
}
+/* Try to get the _len component of a class. When the class is not unlimited
+ poly, i.e. no _len field exists, then return a zero node. */
+
+tree
+gfc_class_len_or_zero_get (tree decl)
+{
+ tree len;
+ /* For class arrays decl may be a temporary descriptor handle, the vptr is
+ then available through the saved descriptor. */
+ if (TREE_CODE (decl) == VAR_DECL && DECL_LANG_SPECIFIC (decl)
+ && GFC_DECL_SAVED_DESCRIPTOR (decl))
+ decl = GFC_DECL_SAVED_DESCRIPTOR (decl);
+ if (POINTER_TYPE_P (TREE_TYPE (decl)))
+ decl = build_fold_indirect_ref_loc (input_location, decl);
+ len = gfc_advance_chain (TYPE_FIELDS (TREE_TYPE (decl)),
+ CLASS_LEN_FIELD);
+ return len != NULL_TREE ? fold_build3_loc (input_location, COMPONENT_REF,
+ TREE_TYPE (len), decl, len,
+ NULL_TREE)
+ : integer_zero_node;
+}
+
+
/* Get the specified FIELD from the VPTR. */
static tree
@@ -250,6 +273,7 @@ gfc_vptr_size_get (tree vptr)
#undef CLASS_DATA_FIELD
#undef CLASS_VPTR_FIELD
+#undef CLASS_LEN_FIELD
#undef VTABLE_HASH_FIELD
#undef VTABLE_SIZE_FIELD
#undef VTABLE_EXTENDS_FIELD
@@ -1120,7 +1144,7 @@ gfc_copy_class_to_class (tree from, tree to, tree nelems, bool unlimited)
if (unlimited)
{
if (from != NULL_TREE && unlimited)
- from_len = gfc_class_len_get (from);
+ from_len = gfc_class_len_or_zero_get (from);
else
from_len = integer_zero_node;
}
diff --git a/gcc/fortran/trans-openmp.c b/gcc/fortran/trans-openmp.c
index 5990202..a905ca6 100644
--- a/gcc/fortran/trans-openmp.c
+++ b/gcc/fortran/trans-openmp.c
@@ -2119,12 +2119,12 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses,
case OMP_MAP_TOFROM:
OMP_CLAUSE_SET_MAP_KIND (node, GOMP_MAP_TOFROM);
break;
+ case OMP_MAP_DELETE:
+ OMP_CLAUSE_SET_MAP_KIND (node, GOMP_MAP_DELETE);
+ break;
case OMP_MAP_FORCE_ALLOC:
OMP_CLAUSE_SET_MAP_KIND (node, GOMP_MAP_FORCE_ALLOC);
break;
- case OMP_MAP_FORCE_DEALLOC:
- OMP_CLAUSE_SET_MAP_KIND (node, GOMP_MAP_FORCE_DEALLOC);
- break;
case OMP_MAP_FORCE_TO:
OMP_CLAUSE_SET_MAP_KIND (node, GOMP_MAP_FORCE_TO);
break;
diff --git a/gcc/fortran/trans-stmt.c b/gcc/fortran/trans-stmt.c
index cb54499..2fc43ed 100644
--- a/gcc/fortran/trans-stmt.c
+++ b/gcc/fortran/trans-stmt.c
@@ -635,7 +635,9 @@ gfc_trans_stop (gfc_code *code, bool error_stop)
? (flag_coarray == GFC_FCOARRAY_LIB
? gfor_fndecl_caf_error_stop_str
: gfor_fndecl_error_stop_string)
- : gfor_fndecl_stop_string,
+ : (flag_coarray == GFC_FCOARRAY_LIB
+ ? gfor_fndecl_caf_stop_str
+ : gfor_fndecl_stop_string),
2, build_int_cst (pchar_type_node, 0), tmp);
}
else if (code->expr1->ts.type == BT_INTEGER)
@@ -646,7 +648,9 @@ gfc_trans_stop (gfc_code *code, bool error_stop)
? (flag_coarray == GFC_FCOARRAY_LIB
? gfor_fndecl_caf_error_stop
: gfor_fndecl_error_stop_numeric)
- : gfor_fndecl_stop_numeric_f08, 1,
+ : (flag_coarray == GFC_FCOARRAY_LIB
+ ? gfor_fndecl_caf_stop_numeric
+ : gfor_fndecl_stop_numeric_f08), 1,
fold_convert (gfc_int4_type_node, se.expr));
}
else
@@ -657,7 +661,9 @@ gfc_trans_stop (gfc_code *code, bool error_stop)
? (flag_coarray == GFC_FCOARRAY_LIB
? gfor_fndecl_caf_error_stop_str
: gfor_fndecl_error_stop_string)
- : gfor_fndecl_stop_string,
+ : (flag_coarray == GFC_FCOARRAY_LIB
+ ? gfor_fndecl_caf_stop_str
+ : gfor_fndecl_stop_string),
2, se.expr, se.string_length);
}
diff --git a/gcc/fortran/trans-types.c b/gcc/fortran/trans-types.c
index f3d0841..a71cf0b 100644
--- a/gcc/fortran/trans-types.c
+++ b/gcc/fortran/trans-types.c
@@ -2370,7 +2370,8 @@ gfc_get_derived_type (gfc_symbol * derived)
if (derived->attr.unlimited_polymorphic
|| (flag_coarray == GFC_FCOARRAY_LIB
&& derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
- && derived->intmod_sym_id == ISOFORTRAN_LOCK_TYPE))
+ && (derived->intmod_sym_id == ISOFORTRAN_LOCK_TYPE
+ || derived->intmod_sym_id == ISOFORTRAN_EVENT_TYPE)))
return ptr_type_node;
if (flag_coarray != GFC_FCOARRAY_LIB
diff --git a/gcc/fortran/trans.c b/gcc/fortran/trans.c
index e71430b..c6688d3 100644
--- a/gcc/fortran/trans.c
+++ b/gcc/fortran/trans.c
@@ -820,7 +820,7 @@ gfc_allocate_allocatable (stmtblock_t * block, tree mem, tree size, tree token,
the FE only passes the pointer around and leaves the actual
representation to the library. Hence, we have to convert back to the
number of elements. */
- if (lock_var)
+ if (lock_var || event_var)
size = fold_build2_loc (input_location, TRUNC_DIV_EXPR, size_type_node,
size, TYPE_SIZE_UNIT (ptr_type_node));
diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h
index 316ee9b..512615a 100644
--- a/gcc/fortran/trans.h
+++ b/gcc/fortran/trans.h
@@ -365,6 +365,7 @@ tree gfc_class_set_static_fields (tree, tree, tree);
tree gfc_class_data_get (tree);
tree gfc_class_vptr_get (tree);
tree gfc_class_len_get (tree);
+tree gfc_class_len_or_zero_get (tree);
gfc_expr * gfc_find_and_cut_at_last_class_ref (gfc_expr *);
/* Get an accessor to the class' vtab's * field, when a class handle is
available. */
@@ -762,6 +763,8 @@ extern GTY(()) tree gfor_fndecl_caf_sendget;
extern GTY(()) tree gfor_fndecl_caf_sync_all;
extern GTY(()) tree gfor_fndecl_caf_sync_memory;
extern GTY(()) tree gfor_fndecl_caf_sync_images;
+extern GTY(()) tree gfor_fndecl_caf_stop_numeric;
+extern GTY(()) tree gfor_fndecl_caf_stop_str;
extern GTY(()) tree gfor_fndecl_caf_error_stop;
extern GTY(()) tree gfor_fndecl_caf_error_stop_str;
extern GTY(()) tree gfor_fndecl_caf_atomic_def;
diff --git a/gcc/function.h b/gcc/function.h
index c4368cd..501ef68 100644
--- a/gcc/function.h
+++ b/gcc/function.h
@@ -328,6 +328,10 @@ struct GTY(()) function {
from nested functions. */
unsigned int has_nonlocal_label : 1;
+ /* Nonzero if function being compiled has a forced label
+ placed into static storage. */
+ unsigned int has_forced_label_in_static : 1;
+
/* Nonzero if we've set cannot_be_copied_reason. I.e. if
(cannot_be_copied_set && !cannot_be_copied_reason), the function
can in fact be copied. */
diff --git a/gcc/fwprop.c b/gcc/fwprop.c
index c4587d7..d8cb9fa 100644
--- a/gcc/fwprop.c
+++ b/gcc/fwprop.c
@@ -999,10 +999,27 @@ try_fwprop_subst (df_ref use, rtx *loc, rtx new_rtx, rtx_insn *def_insn,
making a new one if one does not already exist. */
if (set_reg_equal)
{
- if (dump_file)
- fprintf (dump_file, " Setting REG_EQUAL note\n");
+ /* If there are any paradoxical SUBREGs, don't add REG_EQUAL note,
+ because the bits in there can be anything and so might not
+ match the REG_EQUAL note content. See PR70574. */
+ subrtx_var_iterator::array_type array;
+ FOR_EACH_SUBRTX_VAR (iter, array, *loc, NONCONST)
+ {
+ rtx x = *iter;
+ if (SUBREG_P (x) && paradoxical_subreg_p (x))
+ {
+ set_reg_equal = false;
+ break;
+ }
+ }
- note = set_unique_reg_note (insn, REG_EQUAL, copy_rtx (new_rtx));
+ if (set_reg_equal)
+ {
+ if (dump_file)
+ fprintf (dump_file, " Setting REG_EQUAL note\n");
+
+ note = set_unique_reg_note (insn, REG_EQUAL, copy_rtx (new_rtx));
+ }
}
}
@@ -1300,14 +1317,19 @@ forward_propagate_and_simplify (df_ref use, rtx_insn *def_insn, rtx def_set)
that isn't mentioned in USE_SET, as the note would be invalid
otherwise. We also don't want to install a note if we are merely
propagating a pseudo since verifying that this pseudo isn't dead
- is a pain; moreover such a note won't help anything. */
+ is a pain; moreover such a note won't help anything.
+ If the use is a paradoxical subreg, make sure we don't add a
+ REG_EQUAL note for it, because it is not equivalent, it is one
+ possible value for it, but we can't rely on it holding that value.
+ See PR70574. */
set_reg_equal = (note == NULL_RTX
&& REG_P (SET_DEST (use_set))
&& !REG_P (src)
&& !(GET_CODE (src) == SUBREG
&& REG_P (SUBREG_REG (src)))
&& !reg_mentioned_p (SET_DEST (use_set),
- SET_SRC (use_set)));
+ SET_SRC (use_set))
+ && !paradoxical_subreg_p (DF_REF_REG (use)));
}
if (GET_MODE (*loc) == VOIDmode)
diff --git a/gcc/gcc-rich-location.c b/gcc/gcc-rich-location.c
index 9ab4314..a03ce0e 100644
--- a/gcc/gcc-rich-location.c
+++ b/gcc/gcc-rich-location.c
@@ -41,28 +41,6 @@ along with GCC; see the file COPYING3. If not see
#include "cpplib.h"
#include "diagnostic.h"
-/* Extract any source range information from EXPR and write it
- to *R. */
-
-static bool
-get_range_for_expr (tree expr, location_range *r)
-{
- if (EXPR_HAS_RANGE (expr))
- {
- source_range sr = EXPR_LOCATION_RANGE (expr);
-
- /* Do we have meaningful data? */
- if (sr.m_start && sr.m_finish)
- {
- r->m_start = expand_location (sr.m_start);
- r->m_finish = expand_location (sr.m_finish);
- return true;
- }
- }
-
- return false;
-}
-
/* Add a range to the rich_location, covering expression EXPR. */
void
@@ -70,10 +48,8 @@ gcc_rich_location::add_expr (tree expr)
{
gcc_assert (expr);
- location_range r;
- r.m_show_caret_p = false;
- if (get_range_for_expr (expr, &r))
- add_range (&r);
+ if (CAN_HAVE_RANGE_P (expr))
+ add_range (EXPR_LOCATION (expr), false);
}
/* If T is an expression, add a range for it to the rich_location. */
diff --git a/gcc/gcc.c b/gcc/gcc.c
index eaa4653..1af5920 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -1019,7 +1019,7 @@ proper position among the other output files. */
%{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!nostartfiles:%S}} \
%{static:} %{L*} %(mfwrap) %(link_libgcc) " \
VTABLE_VERIFICATION_SPEC " " SANITIZER_EARLY_SPEC " %o " CHKP_SPEC " \
- %{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*} 1):\
+ %{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1):\
%:include(libgomp.spec)%(link_gomp)}\
%{fcilkplus:%:include(libcilkrts.spec)%(link_cilkrts)}\
%{fgnu-tm:%:include(libitm.spec)%(link_itm)}\
@@ -1183,7 +1183,7 @@ static const char *const multilib_defaults_raw[] = MULTILIB_DEFAULTS;
for targets that use different start files and suchlike. */
#ifndef GOMP_SELF_SPECS
#define GOMP_SELF_SPECS \
- "%{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*} 1): " \
+ "%{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1): " \
"-pthread}"
#endif
@@ -9764,7 +9764,7 @@ replace_extension_spec_func (int argc, const char **argv)
return result;
}
-/* Returns "" if the n in ARGV[1] == -opt=<n> is greater than ARGV[2].
+/* Returns "" if ARGV[ARGC - 2] is greater than ARGV[ARGC-1].
Otherwise, return NULL. */
static const char *
@@ -9775,29 +9775,13 @@ greater_than_spec_func (int argc, const char **argv)
if (argc == 1)
return NULL;
- gcc_assert (argc == 3);
- gcc_assert (argv[0][0] == '-');
- gcc_assert (argv[0][1] == '\0');
+ gcc_assert (argc >= 2);
- /* Point p to <n> in in -opt=<n>. */
- const char *p = argv[1];
- while (true)
- {
- char c = *p;
- if (c == '\0')
- gcc_unreachable ();
-
- ++p;
-
- if (c == '=')
- break;
- }
-
- long arg = strtol (p, &converted, 10);
- gcc_assert (converted != p);
+ long arg = strtol (argv[argc - 2], &converted, 10);
+ gcc_assert (converted != argv[argc - 2]);
- long lim = strtol (argv[2], &converted, 10);
- gcc_assert (converted != argv[2]);
+ long lim = strtol (argv[argc - 1], &converted, 10);
+ gcc_assert (converted != argv[argc - 1]);
if (arg > lim)
return "";
diff --git a/gcc/gcse.c b/gcc/gcse.c
index 500de7a..a3a7dc3 100644
--- a/gcc/gcse.c
+++ b/gcc/gcse.c
@@ -810,7 +810,7 @@ want_to_gcse_p (rtx x, machine_mode mode, int *max_distance_ptr)
*max_distance_ptr = max_distance;
}
- return can_assign_to_reg_without_clobbers_p (x);
+ return can_assign_to_reg_without_clobbers_p (x, mode);
}
}
@@ -818,9 +818,9 @@ want_to_gcse_p (rtx x, machine_mode mode, int *max_distance_ptr)
static GTY(()) rtx_insn *test_insn;
-/* Return true if we can assign X to a pseudo register such that the
- resulting insn does not result in clobbering a hard register as a
- side-effect.
+/* Return true if we can assign X to a pseudo register of mode MODE
+ such that the resulting insn does not result in clobbering a hard
+ register as a side-effect.
Additionally, if the target requires it, check that the resulting insn
can be copied. If it cannot, this means that X is special and probably
@@ -831,14 +831,14 @@ static GTY(()) rtx_insn *test_insn;
maybe live hard regs. */
bool
-can_assign_to_reg_without_clobbers_p (rtx x)
+can_assign_to_reg_without_clobbers_p (rtx x, machine_mode mode)
{
int num_clobbers = 0;
int icode;
bool can_assign = false;
/* If this is a valid operand, we are OK. If it's VOIDmode, we aren't. */
- if (general_operand (x, GET_MODE (x)))
+ if (general_operand (x, mode))
return 1;
else if (GET_MODE (x) == VOIDmode)
return 0;
@@ -857,7 +857,7 @@ can_assign_to_reg_without_clobbers_p (rtx x)
/* Now make an insn like the one we would make when GCSE'ing and see if
valid. */
- PUT_MODE (SET_DEST (PATTERN (test_insn)), GET_MODE (x));
+ PUT_MODE (SET_DEST (PATTERN (test_insn)), mode);
SET_SRC (PATTERN (test_insn)) = x;
icode = recog (PATTERN (test_insn), test_insn, &num_clobbers);
@@ -3796,10 +3796,8 @@ compute_ld_motion_mems (void)
{
rtx src = SET_SRC (PATTERN (insn));
rtx dest = SET_DEST (PATTERN (insn));
- rtx note = find_reg_equal_equiv_note (insn);
- rtx src_eq;
- /* Check for a simple LOAD... */
+ /* Check for a simple load. */
if (MEM_P (src) && simple_mem (src))
{
ptr = ldst_entry (src);
@@ -3814,12 +3812,11 @@ compute_ld_motion_mems (void)
invalidate_any_buried_refs (src);
}
- if (note != 0 && REG_NOTE_KIND (note) == REG_EQUAL)
- src_eq = XEXP (note, 0);
- else
- src_eq = NULL_RTX;
-
- if (src_eq != NULL_RTX
+ /* Check for a simple load through a REG_EQUAL note. */
+ rtx note = find_reg_equal_equiv_note (insn), src_eq;
+ if (note
+ && REG_NOTE_KIND (note) == REG_EQUAL
+ && (src_eq = XEXP (note, 0))
&& !(MEM_P (src_eq) && simple_mem (src_eq)))
invalidate_any_buried_refs (src_eq);
@@ -3830,19 +3827,30 @@ compute_ld_motion_mems (void)
if (MEM_P (dest) && simple_mem (dest))
{
ptr = ldst_entry (dest);
-
+ machine_mode src_mode = GET_MODE (src);
if (! MEM_P (src)
&& GET_CODE (src) != ASM_OPERANDS
/* Check for REG manually since want_to_gcse_p
returns 0 for all REGs. */
- && can_assign_to_reg_without_clobbers_p (src))
+ && can_assign_to_reg_without_clobbers_p (src,
+ src_mode))
ptr->stores = alloc_INSN_LIST (insn, ptr->stores);
else
ptr->invalid = 1;
}
}
else
- invalidate_any_buried_refs (PATTERN (insn));
+ {
+ /* Invalidate all MEMs in the pattern and... */
+ invalidate_any_buried_refs (PATTERN (insn));
+
+ /* ...in REG_EQUAL notes for PARALLELs with single SET. */
+ rtx note = find_reg_equal_equiv_note (insn), src_eq;
+ if (note
+ && REG_NOTE_KIND (note) == REG_EQUAL
+ && (src_eq = XEXP (note, 0)))
+ invalidate_any_buried_refs (src_eq);
+ }
}
}
}
diff --git a/gcc/gdbhooks.py b/gcc/gdbhooks.py
index 0d5cc976d..1212312 100644
--- a/gcc/gdbhooks.py
+++ b/gcc/gdbhooks.py
@@ -133,6 +133,7 @@ Instead (for now) you must access m_vecdata:
import os.path
import re
import sys
+import tempfile
import gdb
import gdb.printing
@@ -589,4 +590,164 @@ class BreakOnPass(gdb.Command):
BreakOnPass()
+class DumpFn(gdb.Command):
+ """
+ A custom command to dump a gimple/rtl function to file. By default, it
+ dumps the current function using 0 as dump_flags, but the function and flags
+ can also be specified. If /f <file> are passed as the first two arguments,
+ the dump is written to that file. Otherwise, a temporary file is created
+ and opened in the text editor specified in the EDITOR environment variable.
+
+ Examples of use:
+ (gdb) dump-fn
+ (gdb) dump-fn /f foo.1.txt
+ (gdb) dump-fn cfun->decl
+ (gdb) dump-fn /f foo.1.txt cfun->decl
+ (gdb) dump-fn cfun->decl 0
+ (gdb) dump-fn cfun->decl dump_flags
+ """
+
+ def __init__(self):
+ gdb.Command.__init__(self, 'dump-fn', gdb.COMMAND_USER)
+
+ def invoke(self, arg, from_tty):
+ # Parse args, check number of args
+ args = gdb.string_to_argv(arg)
+ if len(args) >= 1 and args[0] == "/f":
+ if len(args) == 1:
+ print ("Missing file argument")
+ return
+ filename = args[1]
+ editor_mode = False
+ base_arg = 2
+ else:
+ editor = os.getenv("EDITOR", "")
+ if editor == "":
+ print ("EDITOR environment variable not defined")
+ return
+ editor_mode = True
+ base_arg = 0
+ if len(args) - base_arg > 2:
+ print ("Too many arguments")
+ return
+
+ # Set func
+ if len(args) - base_arg >= 1:
+ funcname = args[base_arg]
+ printfuncname = "function %s" % funcname
+ else:
+ funcname = "cfun ? cfun->decl : current_function_decl"
+ printfuncname = "current function"
+ func = gdb.parse_and_eval(funcname)
+ if func == 0:
+ print ("Could not find %s" % printfuncname)
+ return
+ func = "(tree)%u" % func
+
+ # Set flags
+ if len(args) - base_arg >= 2:
+ flags = gdb.parse_and_eval(args[base_arg + 1])
+ else:
+ flags = 0
+
+ # Get tempory file, if necessary
+ if editor_mode:
+ f = tempfile.NamedTemporaryFile(delete=False, suffix=".txt")
+ filename = f.name
+ f.close()
+
+ # Open file
+ fp = gdb.parse_and_eval("fopen (\"%s\", \"w\")" % filename)
+ if fp == 0:
+ print ("Could not open file: %s" % filename)
+ return
+ fp = "(FILE *)%u" % fp
+
+ # Dump function to file
+ _ = gdb.parse_and_eval("dump_function_to_file (%s, %s, %u)" %
+ (func, fp, flags))
+
+ # Close file
+ ret = gdb.parse_and_eval("fclose (%s)" % fp)
+ if ret != 0:
+ print ("Could not close file: %s" % filename)
+ return
+
+ # Open file in editor, if necessary
+ if editor_mode:
+ os.system("( %s \"%s\"; rm \"%s\" ) &" %
+ (editor, filename, filename))
+
+DumpFn()
+
+class DotFn(gdb.Command):
+ """
+ A custom command to show a gimple/rtl function control flow graph.
+ By default, it show the current function, but the function can also be
+ specified.
+
+ Examples of use:
+ (gdb) dot-fn
+ (gdb) dot-fn cfun
+ (gdb) dot-fn cfun 0
+ (gdb) dot-fn cfun dump_flags
+ """
+ def __init__(self):
+ gdb.Command.__init__(self, 'dot-fn', gdb.COMMAND_USER)
+
+ def invoke(self, arg, from_tty):
+ # Parse args, check number of args
+ args = gdb.string_to_argv(arg)
+ if len(args) > 2:
+ print("Too many arguments")
+ return
+
+ # Set func
+ if len(args) >= 1:
+ funcname = args[0]
+ printfuncname = "function %s" % funcname
+ else:
+ funcname = "cfun"
+ printfuncname = "current function"
+ func = gdb.parse_and_eval(funcname)
+ if func == 0:
+ print("Could not find %s" % printfuncname)
+ return
+ func = "(struct function *)%s" % func
+
+ # Set flags
+ if len(args) >= 2:
+ flags = gdb.parse_and_eval(args[1])
+ else:
+ flags = 0
+
+ # Get temp file
+ f = tempfile.NamedTemporaryFile(delete=False)
+ filename = f.name
+
+ # Close and reopen temp file to get C FILE*
+ f.close()
+ fp = gdb.parse_and_eval("fopen (\"%s\", \"w\")" % filename)
+ if fp == 0:
+ print("Cannot open temp file")
+ return
+ fp = "(FILE *)%u" % fp
+
+ # Write graph to temp file
+ _ = gdb.parse_and_eval("start_graph_dump (%s, \"<debug>\")" % fp)
+ _ = gdb.parse_and_eval("print_graph_cfg (%s, %s, %u)"
+ % (fp, func, flags))
+ _ = gdb.parse_and_eval("end_graph_dump (%s)" % fp)
+
+ # Close temp file
+ ret = gdb.parse_and_eval("fclose (%s)" % fp)
+ if ret != 0:
+ print("Could not close temp file: %s" % filename)
+ return
+
+ # Show graph in temp file
+ os.system("( dot -Tx11 \"%s\"; rm \"%s\" ) &" % (filename, filename))
+
+DotFn()
+
print('Successfully loaded GDB hooks for GCC')
diff --git a/gcc/genmatch.c b/gcc/genmatch.c
index 19218fd..1f5f45c 100644
--- a/gcc/genmatch.c
+++ b/gcc/genmatch.c
@@ -548,7 +548,7 @@ struct operand {
virtual void gen_transform (FILE *, int, const char *, bool, int,
const char *, capture_info *,
dt_operand ** = 0,
- bool = true)
+ int = 0)
{ gcc_unreachable (); }
};
@@ -590,7 +590,7 @@ struct expr : public operand
bool force_single_use;
virtual void gen_transform (FILE *f, int, const char *, bool, int,
const char *, capture_info *,
- dt_operand ** = 0, bool = true);
+ dt_operand ** = 0, int = 0);
};
/* An operator that is represented by native C code. This is always
@@ -622,7 +622,7 @@ struct c_expr : public operand
vec<id_tab> ids;
virtual void gen_transform (FILE *f, int, const char *, bool, int,
const char *, capture_info *,
- dt_operand ** = 0, bool = true);
+ dt_operand ** = 0, int = 0);
};
/* A wrapper around another operand that captures its value. */
@@ -637,7 +637,7 @@ struct capture : public operand
operand *what;
virtual void gen_transform (FILE *f, int, const char *, bool, int,
const char *, capture_info *,
- dt_operand ** = 0, bool = true);
+ dt_operand ** = 0, int = 0);
};
/* if expression. */
@@ -2149,7 +2149,7 @@ get_operand_type (id_base *op, const char *in_type,
void
expr::gen_transform (FILE *f, int indent, const char *dest, bool gimple,
int depth, const char *in_type, capture_info *cinfo,
- dt_operand **indexes, bool)
+ dt_operand **indexes, int)
{
id_base *opr = operation;
/* When we delay operator substituting during lowering of fors we
@@ -2213,9 +2213,8 @@ expr::gen_transform (FILE *f, int indent, const char *dest, bool gimple,
i == 0 ? NULL : op0type);
ops[i]->gen_transform (f, indent, dest, gimple, depth + 1, optype,
cinfo, indexes,
- ((!(*opr == COND_EXPR)
- && !(*opr == VEC_COND_EXPR))
- || i != 0));
+ (*opr == COND_EXPR
+ || *opr == VEC_COND_EXPR) && i == 0 ? 1 : 2);
}
const char *opr_name;
@@ -2306,7 +2305,7 @@ expr::gen_transform (FILE *f, int indent, const char *dest, bool gimple,
void
c_expr::gen_transform (FILE *f, int indent, const char *dest,
bool, int, const char *, capture_info *,
- dt_operand **, bool)
+ dt_operand **, int)
{
if (dest && nr_stmts == 1)
fprintf_indent (f, indent, "%s = ", dest);
@@ -2378,7 +2377,7 @@ c_expr::gen_transform (FILE *f, int indent, const char *dest,
void
capture::gen_transform (FILE *f, int indent, const char *dest, bool gimple,
int depth, const char *in_type, capture_info *cinfo,
- dt_operand **indexes, bool expand_compares)
+ dt_operand **indexes, int cond_handling)
{
if (what && is_a<expr *> (what))
{
@@ -2394,20 +2393,29 @@ capture::gen_transform (FILE *f, int indent, const char *dest, bool gimple,
fprintf_indent (f, indent, "%s = captures[%u];\n", dest, where);
/* ??? Stupid tcc_comparison GENERIC trees in COND_EXPRs. Deal
- with substituting a capture of that.
- ??? Returning false here will also not allow any other patterns
- to match. */
- if (gimple && expand_compares
+ with substituting a capture of that. */
+ if (gimple
+ && cond_handling != 0
&& cinfo->info[where].cond_expr_cond_p)
{
- fprintf_indent (f, indent, "if (COMPARISON_CLASS_P (%s))\n", dest);
- fprintf_indent (f, indent, " {\n");
- fprintf_indent (f, indent, " if (!seq) return false;\n");
- fprintf_indent (f, indent, " %s = gimple_build (seq, TREE_CODE (%s),"
- " TREE_TYPE (%s), TREE_OPERAND (%s, 0),"
- " TREE_OPERAND (%s, 1));\n",
- dest, dest, dest, dest, dest);
- fprintf_indent (f, indent, " }\n");
+ /* If substituting into a cond_expr condition, unshare. */
+ if (cond_handling == 1)
+ fprintf_indent (f, indent, "%s = unshare_expr (%s);\n", dest, dest);
+ /* If substituting elsewhere we might need to decompose it. */
+ else if (cond_handling == 2)
+ {
+ /* ??? Returning false here will also not allow any other patterns
+ to match unless this generator was split out. */
+ fprintf_indent (f, indent, "if (COMPARISON_CLASS_P (%s))\n", dest);
+ fprintf_indent (f, indent, " {\n");
+ fprintf_indent (f, indent, " if (!seq) return false;\n");
+ fprintf_indent (f, indent, " %s = gimple_build (seq,"
+ " TREE_CODE (%s),"
+ " TREE_TYPE (%s), TREE_OPERAND (%s, 0),"
+ " TREE_OPERAND (%s, 1));\n",
+ dest, dest, dest, dest, dest);
+ fprintf_indent (f, indent, " }\n");
+ }
}
}
@@ -2615,7 +2623,7 @@ dt_node::gen_kids (FILE *f, int indent, bool gimple)
preds.safe_push (op);
else
{
- if (gimple)
+ if (gimple && !e->is_generic)
gimple_exprs.safe_push (op);
else
generic_exprs.safe_push (op);
@@ -3043,18 +3051,14 @@ dt_simplify::gen_1 (FILE *f, int indent, bool gimple, operand *result)
"type", e->expr_type,
j == 0 ? NULL : "TREE_TYPE (res_ops[0])");
/* We need to expand GENERIC conditions we captured from
- COND_EXPRs. */
- bool expand_generic_cond_exprs_p
- = (!is_predicate
- /* But avoid doing that if the GENERIC condition is
- valid - which it is in the first operand of COND_EXPRs
- and VEC_COND_EXRPs. */
- && ((!(*opr == COND_EXPR)
- && !(*opr == VEC_COND_EXPR))
- || j != 0));
+ COND_EXPRs and we need to unshare them when substituting
+ into COND_EXPRs. */
+ int cond_handling = 0;
+ if (!is_predicate)
+ cond_handling = ((*opr == COND_EXPR
+ || *opr == VEC_COND_EXPR) && j == 0) ? 1 : 2;
e->ops[j]->gen_transform (f, indent, dest, true, 1, optype,
- &cinfo,
- indexes, expand_generic_cond_exprs_p);
+ &cinfo, indexes, cond_handling);
}
/* Re-fold the toplevel result. It's basically an embedded
@@ -3068,7 +3072,7 @@ dt_simplify::gen_1 (FILE *f, int indent, bool gimple, operand *result)
|| result->type == operand::OP_C_EXPR)
{
result->gen_transform (f, indent, "res_ops[0]", true, 1, "type",
- &cinfo, indexes, false);
+ &cinfo, indexes);
fprintf_indent (f, indent, "*res_code = TREE_CODE (res_ops[0]);\n");
if (is_a <capture *> (result)
&& cinfo.info[as_a <capture *> (result)->where].cond_expr_cond_p)
diff --git a/gcc/genrecog.c b/gcc/genrecog.c
index f8b8ef4..47e4266 100644
--- a/gcc/genrecog.c
+++ b/gcc/genrecog.c
@@ -4037,7 +4037,7 @@ match_pattern_2 (state *s, md_rtx_info *info, position *pos, rtx pattern)
/* Check the mode first, to distinguish things like SImode
and DImode register_operands, as described above. */
machine_mode mode = GET_MODE (e->pattern);
- if (safe_predicate_mode (pred, mode))
+ if (pred && safe_predicate_mode (pred, mode))
s = add_decision (s, rtx_test::mode (e->pos), mode, true);
/* Assign to operands[] first, so that the rtx usually doesn't
diff --git a/gcc/gimple-expr.c b/gcc/gimple-expr.c
index 15bef7f..29e9c0a 100644
--- a/gcc/gimple-expr.c
+++ b/gcc/gimple-expr.c
@@ -519,8 +519,8 @@ create_tmp_reg_fn (struct function *fn, tree type, const char *prefix)
*OP1_P, *OP2_P and *OP3_P respectively. */
void
-extract_ops_from_tree_1 (tree expr, enum tree_code *subcode_p, tree *op1_p,
- tree *op2_p, tree *op3_p)
+extract_ops_from_tree (tree expr, enum tree_code *subcode_p, tree *op1_p,
+ tree *op2_p, tree *op3_p)
{
enum gimple_rhs_class grhs_class;
diff --git a/gcc/gimple-expr.h b/gcc/gimple-expr.h
index 7f9c90d..f2ccd29 100644
--- a/gcc/gimple-expr.h
+++ b/gcc/gimple-expr.h
@@ -35,8 +35,8 @@ extern tree create_tmp_reg (tree, const char * = NULL);
extern tree create_tmp_reg_fn (struct function *, tree, const char *);
-extern void extract_ops_from_tree_1 (tree, enum tree_code *, tree *, tree *,
- tree *);
+extern void extract_ops_from_tree (tree, enum tree_code *, tree *, tree *,
+ tree *);
extern void gimple_cond_get_ops_from_tree (tree, enum tree_code *, tree *,
tree *);
extern bool is_gimple_lvalue (tree);
@@ -146,15 +146,15 @@ is_gimple_constant (const_tree t)
}
}
-/* A wrapper around extract_ops_from_tree_1, for callers which expect
- to see only a maximum of two operands. */
+/* A wrapper around extract_ops_from_tree with 3 ops, for callers which
+ expect to see only a maximum of two operands. */
static inline void
extract_ops_from_tree (tree expr, enum tree_code *code, tree *op0,
tree *op1)
{
tree op2;
- extract_ops_from_tree_1 (expr, code, op0, op1, &op2);
+ extract_ops_from_tree (expr, code, op0, op1, &op2);
gcc_assert (op2 == NULL_TREE);
}
diff --git a/gcc/gimple-match-head.c b/gcc/gimple-match-head.c
index 3e6d15f..c86a4ff 100644
--- a/gcc/gimple-match-head.c
+++ b/gcc/gimple-match-head.c
@@ -38,6 +38,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-pass.h"
#include "internal-fn.h"
#include "case-cfn-macros.h"
+#include "gimplify.h"
/* Forward declarations of the private auto-generated matchers.
diff --git a/gcc/gimple-ssa-split-paths.c b/gcc/gimple-ssa-split-paths.c
index ac6de81..d566f64 100644
--- a/gcc/gimple-ssa-split-paths.c
+++ b/gcc/gimple-ssa-split-paths.c
@@ -294,6 +294,24 @@ split_paths ()
basic_block pred0 = EDGE_PRED (bb, 0)->src;
transform_duplicate (pred0, bb);
changed = true;
+
+ /* If BB has an outgoing edge marked as IRREDUCIBLE, then
+ duplicating BB may result in an irreducible region turning
+ into a natural loop.
+
+ Long term we might want to hook this into the block
+ duplication code, but as we've seen with similar changes
+ for edge removal, that can be somewhat risky. */
+ if (EDGE_SUCC (bb, 0)->flags & EDGE_IRREDUCIBLE_LOOP
+ || EDGE_SUCC (bb, 1)->flags & EDGE_IRREDUCIBLE_LOOP)
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file,
+ "Join block %d has EDGE_IRREDUCIBLE_LOOP set. "
+ "Scheduling loop fixups.\n",
+ bb->index);
+ loops_state_set (LOOPS_NEED_FIXUP);
+ }
}
}
diff --git a/gcc/gimple.c b/gcc/gimple.c
index 850e546..b0e19d5 100644
--- a/gcc/gimple.c
+++ b/gcc/gimple.c
@@ -387,7 +387,7 @@ gimple_build_assign (tree lhs, tree rhs MEM_STAT_DECL)
enum tree_code subcode;
tree op1, op2, op3;
- extract_ops_from_tree_1 (rhs, &subcode, &op1, &op2, &op3);
+ extract_ops_from_tree (rhs, &subcode, &op1, &op2, &op3);
return gimple_build_assign (lhs, subcode, op1, op2, op3 PASS_MEM_STAT);
}
@@ -1578,7 +1578,7 @@ gimple_assign_set_rhs_from_tree (gimple_stmt_iterator *gsi, tree expr)
enum tree_code subcode;
tree op1, op2, op3;
- extract_ops_from_tree_1 (expr, &subcode, &op1, &op2, &op3);
+ extract_ops_from_tree (expr, &subcode, &op1, &op2, &op3);
gimple_assign_set_rhs_with_ops (gsi, subcode, op1, op2, op3);
}
diff --git a/gcc/gimplify-me.c b/gcc/gimplify-me.c
index c80a4ff..28e467b 100644
--- a/gcc/gimplify-me.c
+++ b/gcc/gimplify-me.c
@@ -299,7 +299,8 @@ gimple_regimplify_operands (gimple *stmt, gimple_stmt_iterator *gsi_p)
if (need_temp)
{
tree temp = create_tmp_reg (TREE_TYPE (lhs));
- if (gimple_in_ssa_p (cfun))
+ if (gimple_in_ssa_p (cfun)
+ && is_gimple_reg_type (TREE_TYPE (lhs)))
temp = make_ssa_name (temp);
gimple_set_lhs (stmt, temp);
post_stmt = gimple_build_assign (lhs, temp);
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index 7be6bd7..e49bdaa 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -1414,7 +1414,10 @@ force_labels_r (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
if (TYPE_P (*tp))
*walk_subtrees = 0;
if (TREE_CODE (*tp) == LABEL_DECL)
- FORCED_LABEL (*tp) = 1;
+ {
+ FORCED_LABEL (*tp) = 1;
+ cfun->has_forced_label_in_static = 1;
+ }
return NULL_TREE;
}
@@ -1436,14 +1439,22 @@ gimplify_decl_expr (tree *stmt_p, gimple_seq *seq_p)
if ((TREE_CODE (decl) == TYPE_DECL
|| TREE_CODE (decl) == VAR_DECL)
&& !TYPE_SIZES_GIMPLIFIED (TREE_TYPE (decl)))
- gimplify_type_sizes (TREE_TYPE (decl), seq_p);
+ {
+ gimplify_type_sizes (TREE_TYPE (decl), seq_p);
+ if (TREE_CODE (TREE_TYPE (decl)) == REFERENCE_TYPE)
+ gimplify_type_sizes (TREE_TYPE (TREE_TYPE (decl)), seq_p);
+ }
/* ??? DECL_ORIGINAL_TYPE is streamed for LTO so it needs to be gimplified
in case its size expressions contain problematic nodes like CALL_EXPR. */
if (TREE_CODE (decl) == TYPE_DECL
&& DECL_ORIGINAL_TYPE (decl)
&& !TYPE_SIZES_GIMPLIFIED (DECL_ORIGINAL_TYPE (decl)))
- gimplify_type_sizes (DECL_ORIGINAL_TYPE (decl), seq_p);
+ {
+ gimplify_type_sizes (DECL_ORIGINAL_TYPE (decl), seq_p);
+ if (TREE_CODE (DECL_ORIGINAL_TYPE (decl)) == REFERENCE_TYPE)
+ gimplify_type_sizes (TREE_TYPE (DECL_ORIGINAL_TYPE (decl)), seq_p);
+ }
if (TREE_CODE (decl) == VAR_DECL && !DECL_EXTERNAL (decl))
{
@@ -4830,7 +4841,8 @@ gimplify_modify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
}
notice_special_calls (call_stmt);
if (!gimple_call_noreturn_p (call_stmt)
- || TREE_ADDRESSABLE (TREE_TYPE (*to_p)))
+ || TREE_ADDRESSABLE (TREE_TYPE (*to_p))
+ || TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (*to_p))) != INTEGER_CST)
gimple_call_set_lhs (call_stmt, *to_p);
assign = call_stmt;
}
@@ -4838,6 +4850,8 @@ gimplify_modify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
{
assign = gimple_build_assign (*to_p, *from_p);
gimple_set_location (assign, EXPR_LOCATION (*expr_p));
+ if (COMPARISON_CLASS_P (*from_p))
+ gimple_set_no_warning (assign, TREE_NO_WARNING (*from_p));
}
if (gimplify_ctxp->into_ssa && is_gimple_reg (*to_p))
@@ -5177,6 +5191,32 @@ gimplify_asm_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p)
ret = tret;
}
+ /* If the constraint does not allow memory make sure we gimplify
+ it to a register if it is not already but its base is. This
+ happens for complex and vector components. */
+ if (!allows_mem)
+ {
+ tree op = TREE_VALUE (link);
+ if (! is_gimple_val (op)
+ && is_gimple_reg_type (TREE_TYPE (op))
+ && is_gimple_reg (get_base_address (op)))
+ {
+ tree tem = create_tmp_reg (TREE_TYPE (op));
+ tree ass;
+ if (is_inout)
+ {
+ ass = build2 (MODIFY_EXPR, TREE_TYPE (tem),
+ tem, unshare_expr (op));
+ gimplify_and_add (ass, pre_p);
+ }
+ ass = build2 (MODIFY_EXPR, TREE_TYPE (tem), op, tem);
+ gimplify_and_add (ass, post_p);
+
+ TREE_VALUE (link) = tem;
+ tret = GS_OK;
+ }
+ }
+
vec_safe_push (outputs, link);
TREE_CHAIN (link) = NULL_TREE;
@@ -6264,16 +6304,30 @@ omp_notice_variable (struct gimplify_omp_ctx *ctx, tree decl, bool in_code)
if ((n->value & (GOVD_SEEN | GOVD_LOCAL)) == 0
&& (flags & (GOVD_SEEN | GOVD_LOCAL)) == GOVD_SEEN
- && DECL_SIZE (decl)
- && TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST)
+ && DECL_SIZE (decl))
{
- splay_tree_node n2;
- tree t = DECL_VALUE_EXPR (decl);
- gcc_assert (TREE_CODE (t) == INDIRECT_REF);
- t = TREE_OPERAND (t, 0);
- gcc_assert (DECL_P (t));
- n2 = splay_tree_lookup (ctx->variables, (splay_tree_key) t);
- n2->value |= GOVD_SEEN;
+ if (TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST)
+ {
+ splay_tree_node n2;
+ tree t = DECL_VALUE_EXPR (decl);
+ gcc_assert (TREE_CODE (t) == INDIRECT_REF);
+ t = TREE_OPERAND (t, 0);
+ gcc_assert (DECL_P (t));
+ n2 = splay_tree_lookup (ctx->variables, (splay_tree_key) t);
+ n2->value |= GOVD_SEEN;
+ }
+ else if (lang_hooks.decls.omp_privatize_by_reference (decl)
+ && TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (decl)))
+ && (TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (decl))))
+ != INTEGER_CST))
+ {
+ splay_tree_node n2;
+ tree t = TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (decl)));
+ gcc_assert (DECL_P (t));
+ n2 = splay_tree_lookup (ctx->variables, (splay_tree_key) t);
+ if (n2)
+ n2->value |= GOVD_SEEN;
+ }
}
shared = ((flags | n->value) & GOVD_SHARED) != 0;
@@ -7688,6 +7742,8 @@ gimplify_adjust_omp_clauses_1 (splay_tree_node n, void *data)
&& (flags & GOVD_WRITTEN) == 0
&& omp_shared_to_firstprivate_optimizable_decl_p (decl))
OMP_CLAUSE_SHARED_READONLY (clause) = 1;
+ else if (code == OMP_CLAUSE_FIRSTPRIVATE && (flags & GOVD_EXPLICIT) == 0)
+ OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT (clause) = 1;
else if (code == OMP_CLAUSE_MAP && (flags & GOVD_MAP_0LEN_ARRAY) != 0)
{
tree nc = build_omp_clause (input_location, OMP_CLAUSE_MAP);
@@ -7931,6 +7987,34 @@ gimplify_adjust_omp_clauses (gimple_seq *pre_p, gimple_seq body, tree *list_p,
break;
}
decl = OMP_CLAUSE_DECL (c);
+ /* Data clasues associated with acc parallel reductions must be
+ compatible with present_or_copy. Warn and adjust the clause
+ if that is not the case. */
+ if (ctx->region_type == ORT_ACC_PARALLEL)
+ {
+ tree t = DECL_P (decl) ? decl : TREE_OPERAND (decl, 0);
+ n = NULL;
+
+ if (DECL_P (t))
+ n = splay_tree_lookup (ctx->variables, (splay_tree_key) t);
+
+ if (n && (n->value & GOVD_REDUCTION))
+ {
+ enum gomp_map_kind kind = OMP_CLAUSE_MAP_KIND (c);
+
+ OMP_CLAUSE_MAP_IN_REDUCTION (c) = 1;
+ if ((kind & GOMP_MAP_TOFROM) != GOMP_MAP_TOFROM
+ && kind != GOMP_MAP_FORCE_PRESENT
+ && kind != GOMP_MAP_POINTER)
+ {
+ warning_at (OMP_CLAUSE_LOCATION (c), 0,
+ "incompatible data clause with reduction "
+ "on %qE; promoting to present_or_copy",
+ DECL_NAME (t));
+ OMP_CLAUSE_SET_MAP_KIND (c, GOMP_MAP_TOFROM);
+ }
+ }
+ }
if (!DECL_P (decl))
{
if ((ctx->region_type & ORT_TARGET) != 0
@@ -8062,6 +8146,33 @@ gimplify_adjust_omp_clauses (gimple_seq *pre_p, gimple_seq body, tree *list_p,
case OMP_CLAUSE_REDUCTION:
decl = OMP_CLAUSE_DECL (c);
+ /* OpenACC reductions need a present_or_copy data clause.
+ Add one if necessary. Error is the reduction is private. */
+ if (ctx->region_type == ORT_ACC_PARALLEL)
+ {
+ n = splay_tree_lookup (ctx->variables, (splay_tree_key) decl);
+ if (n->value & (GOVD_PRIVATE | GOVD_FIRSTPRIVATE))
+ error_at (OMP_CLAUSE_LOCATION (c), "invalid private "
+ "reduction on %qE", DECL_NAME (decl));
+ else if ((n->value & GOVD_MAP) == 0)
+ {
+ tree next = OMP_CLAUSE_CHAIN (c);
+ tree nc = build_omp_clause (UNKNOWN_LOCATION, OMP_CLAUSE_MAP);
+ OMP_CLAUSE_SET_MAP_KIND (nc, GOMP_MAP_TOFROM);
+ OMP_CLAUSE_DECL (nc) = decl;
+ OMP_CLAUSE_CHAIN (c) = nc;
+ lang_hooks.decls.omp_finish_clause (nc, pre_p);
+ while (1)
+ {
+ OMP_CLAUSE_MAP_IN_REDUCTION (nc) = 1;
+ if (OMP_CLAUSE_CHAIN (nc) == NULL)
+ break;
+ nc = OMP_CLAUSE_CHAIN (nc);
+ }
+ OMP_CLAUSE_CHAIN (nc) = next;
+ n->value |= GOVD_MAP;
+ }
+ }
if (DECL_P (decl)
&& omp_shared_to_firstprivate_optimizable_decl_p (decl))
omp_mark_stores (gimplify_omp_ctxp->outer_context, decl);
@@ -8168,7 +8279,7 @@ gimplify_oacc_declare_1 (tree clause)
case GOMP_MAP_ALLOC:
case GOMP_MAP_FORCE_ALLOC:
case GOMP_MAP_FORCE_TO:
- new_op = GOMP_MAP_FORCE_DEALLOC;
+ new_op = GOMP_MAP_DELETE;
ret = true;
break;
@@ -9822,64 +9933,66 @@ gimplify_omp_ordered (tree expr, gimple_seq body)
tree sink_c = NULL_TREE;
if (gimplify_omp_ctxp)
- for (c = OMP_ORDERED_CLAUSES (expr); c; c = OMP_CLAUSE_CHAIN (c))
- if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_DEPEND
- && gimplify_omp_ctxp->loop_iter_var.is_empty ()
- && (OMP_CLAUSE_DEPEND_KIND (c) == OMP_CLAUSE_DEPEND_SINK
- || OMP_CLAUSE_DEPEND_KIND (c) == OMP_CLAUSE_DEPEND_SOURCE))
- {
- error_at (OMP_CLAUSE_LOCATION (c),
- "%<ordered%> construct with %<depend%> clause must be "
- "closely nested inside a loop with %<ordered%> clause "
- "with a parameter");
- failures++;
- }
- else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_DEPEND
- && OMP_CLAUSE_DEPEND_KIND (c) == OMP_CLAUSE_DEPEND_SINK)
- {
- bool fail = false;
- for (decls = OMP_CLAUSE_DECL (c), i = 0;
- decls && TREE_CODE (decls) == TREE_LIST;
- decls = TREE_CHAIN (decls), ++i)
- if (i >= gimplify_omp_ctxp->loop_iter_var.length () / 2)
- continue;
- else if (TREE_VALUE (decls)
- != gimplify_omp_ctxp->loop_iter_var[2 * i])
+ {
+ for (c = OMP_ORDERED_CLAUSES (expr); c; c = OMP_CLAUSE_CHAIN (c))
+ if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_DEPEND
+ && gimplify_omp_ctxp->loop_iter_var.is_empty ()
+ && (OMP_CLAUSE_DEPEND_KIND (c) == OMP_CLAUSE_DEPEND_SINK
+ || OMP_CLAUSE_DEPEND_KIND (c) == OMP_CLAUSE_DEPEND_SOURCE))
+ {
+ error_at (OMP_CLAUSE_LOCATION (c),
+ "%<ordered%> construct with %<depend%> clause must be "
+ "closely nested inside a loop with %<ordered%> clause "
+ "with a parameter");
+ failures++;
+ }
+ else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_DEPEND
+ && OMP_CLAUSE_DEPEND_KIND (c) == OMP_CLAUSE_DEPEND_SINK)
+ {
+ bool fail = false;
+ for (decls = OMP_CLAUSE_DECL (c), i = 0;
+ decls && TREE_CODE (decls) == TREE_LIST;
+ decls = TREE_CHAIN (decls), ++i)
+ if (i >= gimplify_omp_ctxp->loop_iter_var.length () / 2)
+ continue;
+ else if (TREE_VALUE (decls)
+ != gimplify_omp_ctxp->loop_iter_var[2 * i])
+ {
+ error_at (OMP_CLAUSE_LOCATION (c),
+ "variable %qE is not an iteration "
+ "of outermost loop %d, expected %qE",
+ TREE_VALUE (decls), i + 1,
+ gimplify_omp_ctxp->loop_iter_var[2 * i]);
+ fail = true;
+ failures++;
+ }
+ else
+ TREE_VALUE (decls)
+ = gimplify_omp_ctxp->loop_iter_var[2 * i + 1];
+ if (!fail && i != gimplify_omp_ctxp->loop_iter_var.length () / 2)
{
error_at (OMP_CLAUSE_LOCATION (c),
- "variable %qE is not an iteration "
- "of outermost loop %d, expected %qE",
- TREE_VALUE (decls), i + 1,
- gimplify_omp_ctxp->loop_iter_var[2 * i]);
- fail = true;
+ "number of variables in %<depend(sink)%> "
+ "clause does not match number of "
+ "iteration variables");
+ failures++;
+ }
+ sink_c = c;
+ }
+ else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_DEPEND
+ && OMP_CLAUSE_DEPEND_KIND (c) == OMP_CLAUSE_DEPEND_SOURCE)
+ {
+ if (source_c)
+ {
+ error_at (OMP_CLAUSE_LOCATION (c),
+ "more than one %<depend(source)%> clause on an "
+ "%<ordered%> construct");
failures++;
}
else
- TREE_VALUE (decls)
- = gimplify_omp_ctxp->loop_iter_var[2 * i + 1];
- if (!fail && i != gimplify_omp_ctxp->loop_iter_var.length () / 2)
- {
- error_at (OMP_CLAUSE_LOCATION (c),
- "number of variables in %<depend(sink)%> "
- "clause does not match number of "
- "iteration variables");
- failures++;
- }
- sink_c = c;
- }
- else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_DEPEND
- && OMP_CLAUSE_DEPEND_KIND (c) == OMP_CLAUSE_DEPEND_SOURCE)
- {
- if (source_c)
- {
- error_at (OMP_CLAUSE_LOCATION (c),
- "more than one %<depend(source)%> clause on an "
- "%<ordered%> construct");
- failures++;
- }
- else
- source_c = c;
- }
+ source_c = c;
+ }
+ }
if (source_c && sink_c)
{
error_at (OMP_CLAUSE_LOCATION (source_c),
@@ -10773,8 +10886,23 @@ gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
goto expr_2;
}
- case FMA_EXPR:
case VEC_COND_EXPR:
+ {
+ enum gimplify_status r0, r1, r2;
+
+ r0 = gimplify_expr (&TREE_OPERAND (*expr_p, 0), pre_p,
+ post_p, is_gimple_condexpr, fb_rvalue);
+ r1 = gimplify_expr (&TREE_OPERAND (*expr_p, 1), pre_p,
+ post_p, is_gimple_val, fb_rvalue);
+ r2 = gimplify_expr (&TREE_OPERAND (*expr_p, 2), pre_p,
+ post_p, is_gimple_val, fb_rvalue);
+
+ ret = MIN (MIN (r0, r1), r2);
+ recalculate_side_effects (*expr_p);
+ }
+ break;
+
+ case FMA_EXPR:
case VEC_PERM_EXPR:
/* Classified as tcc_expression. */
goto expr_3;
@@ -11573,24 +11701,28 @@ gimplify_va_arg_expr (tree *expr_p, gimple_seq *pre_p,
{
static bool gave_help;
bool warned;
+ /* Use the expansion point to handle cases such as passing bool (defined
+ in a system header) through `...'. */
+ source_location xloc
+ = expansion_point_location_if_in_system_header (loc);
/* Unfortunately, this is merely undefined, rather than a constraint
violation, so we cannot make this an error. If this call is never
executed, the program is still strictly conforming. */
- warned = warning_at (loc, 0,
- "%qT is promoted to %qT when passed through %<...%>",
+ warned = warning_at (xloc, 0,
+ "%qT is promoted to %qT when passed through %<...%>",
type, promoted_type);
if (!gave_help && warned)
{
gave_help = true;
- inform (loc, "(so you should pass %qT not %qT to %<va_arg%>)",
+ inform (xloc, "(so you should pass %qT not %qT to %<va_arg%>)",
promoted_type, type);
}
/* We can, however, treat "undefined" any way we please.
Call abort to encourage the user to fix the program. */
if (warned)
- inform (loc, "if this code is reached, the program will abort");
+ inform (xloc, "if this code is reached, the program will abort");
/* Before the abort, allow the evaluation of the va_list
expression to exit or longjmp. */
gimplify_and_add (valist, pre_p);
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE
index 038e434..cc38613 100644
--- a/gcc/go/gofrontend/MERGE
+++ b/gcc/go/gofrontend/MERGE
@@ -1,4 +1,4 @@
-1c3747d20789c73447ff71cbc739f7423c4bdf67
+8e7b5e777333fa4cd070d96e94ea82e3e1132739
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
diff --git a/gcc/graph.c b/gcc/graph.c
index 1b28c67..dd5bc4e 100644
--- a/gcc/graph.c
+++ b/gcc/graph.c
@@ -29,6 +29,7 @@ along with GCC; see the file COPYING3. If not see
#include "cfganal.h"
#include "cfgloop.h"
#include "graph.h"
+#include "dumpfile.h"
/* DOT files with the .dot extension are recognized as document templates
by a well-known piece of word processing software out of Redmond, WA.
@@ -272,14 +273,13 @@ draw_cfg_edges (pretty_printer *pp, struct function *fun)
subgraphs right for GraphViz, which requires nodes to be defined
before edges to cluster nodes properly. */
-void
-print_graph_cfg (const char *base, struct function *fun)
+void DEBUG_FUNCTION
+print_graph_cfg (FILE *fp, struct function *fun)
{
- const char *funcname = function_name (fun);
- FILE *fp = open_graph_file (base, "a");
pretty_printer graph_slim_pp;
graph_slim_pp.buffer->stream = fp;
pretty_printer *const pp = &graph_slim_pp;
+ const char *funcname = function_name (fun);
pp_printf (pp, "subgraph \"cluster_%s\" {\n"
"\tstyle=\"dashed\";\n"
"\tcolor=\"black\";\n"
@@ -289,6 +289,30 @@ print_graph_cfg (const char *base, struct function *fun)
draw_cfg_edges (pp, fun);
pp_printf (pp, "}\n");
pp_flush (pp);
+}
+
+/* Overload with additional flag argument. */
+
+void DEBUG_FUNCTION
+print_graph_cfg (FILE *fp, struct function *fun, int flags)
+{
+ int saved_dump_flags = dump_flags;
+ dump_flags = flags;
+ print_graph_cfg (fp, fun);
+ dump_flags = saved_dump_flags;
+}
+
+
+/* Print a graphical representation of the CFG of function FUN.
+ First print all basic blocks. Draw all edges at the end to get
+ subgraphs right for GraphViz, which requires nodes to be defined
+ before edges to cluster nodes properly. */
+
+void
+print_graph_cfg (const char *base, struct function *fun)
+{
+ FILE *fp = open_graph_file (base, "a");
+ print_graph_cfg (fp, fun);
fclose (fp);
}
diff --git a/gcc/graphite-isl-ast-to-gimple.c b/gcc/graphite-isl-ast-to-gimple.c
index d3614e4..88609c0 100644
--- a/gcc/graphite-isl-ast-to-gimple.c
+++ b/gcc/graphite-isl-ast-to-gimple.c
@@ -821,7 +821,8 @@ graphite_create_new_loop_guard (edge entry_edge,
if (integer_onep (cond_expr))
exit_edge = entry_edge;
else
- exit_edge = create_empty_if_region_on_edge (entry_edge, cond_expr);
+ exit_edge = create_empty_if_region_on_edge (entry_edge,
+ unshare_expr (cond_expr));
return exit_edge;
}
@@ -1403,6 +1404,8 @@ gsi_insert_earliest (gimple_seq seq)
void translate_isl_ast_to_gimple::
collect_all_ssa_names (tree new_expr, vec<tree> *vec_ssa)
{
+ if (new_expr == NULL_TREE)
+ return;
/* Rename all uses in new_expr. */
if (TREE_CODE (new_expr) == SSA_NAME)
@@ -1801,7 +1804,7 @@ get_new_name (basic_block new_bb, tree op,
basic_block old_bb, phi_node_kind phi_kind) const
{
/* For constants the names are the same. */
- if (is_constant (op))
+ if (TREE_CODE (op) != SSA_NAME)
return op;
return get_rename (new_bb, op, old_bb, phi_kind);
@@ -2436,7 +2439,7 @@ copy_cond_phi_args (gphi *phi, gphi *new_phi, vec<tree> iv_map, bool postpone)
fprintf (dump_file, "\n");
}
gsi_insert_earliest (stmts);
- new_phi_args [i] = new_name;
+ new_phi_args[i] = new_expr;
continue;
}
diff --git a/gcc/graphite-scop-detection.c b/gcc/graphite-scop-detection.c
index 03b1c49..7615842 100644
--- a/gcc/graphite-scop-detection.c
+++ b/gcc/graphite-scop-detection.c
@@ -273,8 +273,10 @@ trivially_empty_bb_p (basic_block bb)
static inline bool
same_close_phi_node (gphi *p1, gphi *p2)
{
- return operand_equal_p (gimple_phi_arg_def (p1, 0),
- gimple_phi_arg_def (p2, 0), 0);
+ return (types_compatible_p (TREE_TYPE (gimple_phi_result (p1)),
+ TREE_TYPE (gimple_phi_result (p2)))
+ && operand_equal_p (gimple_phi_arg_def (p1, 0),
+ gimple_phi_arg_def (p2, 0), 0));
}
static void make_close_phi_nodes_unique (basic_block bb);
@@ -834,7 +836,9 @@ scop_detection::merge_sese (sese_l first, sese_l second) const
{
/* Find the first empty succ (with single exit) of combined.exit. */
basic_block imm_succ = combined.exit->dest;
- if (single_succ_p (imm_succ) && trivially_empty_bb_p (imm_succ))
+ if (single_succ_p (imm_succ)
+ && single_pred_p (imm_succ)
+ && trivially_empty_bb_p (imm_succ))
combined.exit = single_succ_edge (imm_succ);
else
{
diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c
index b62789f8..22a09a1 100644
--- a/gcc/graphite-sese-to-poly.c
+++ b/gcc/graphite-sese-to-poly.c
@@ -672,7 +672,7 @@ pdr_add_memory_accesses (isl_map *acc, dr_info &dri)
aff = extract_affine (scop, afn,
isl_space_domain (isl_map_get_space (acc)));
- acc = set_index (acc, i + 1, aff);
+ acc = set_index (acc, nb_subscripts - i , aff);
}
return isl_map_coalesce (acc);
diff --git a/gcc/hsa-brig.c b/gcc/hsa-brig.c
index cfbac58..a943e37 100644
--- a/gcc/hsa-brig.c
+++ b/gcc/hsa-brig.c
@@ -605,10 +605,7 @@ emit_directive_variable (struct hsa_symbol *symbol)
dirvar.init = 0;
dirvar.type = lendian16 (symbol->m_type);
dirvar.segment = symbol->m_segment;
- /* TODO: Once we are able to access global variables, we must copy their
- alignment. */
- dirvar.align = MAX (hsa_natural_alignment (dirvar.type),
- (BrigAlignment8_t) BRIG_ALIGNMENT_4);
+ dirvar.align = symbol->m_align;
dirvar.linkage = symbol->m_linkage;
dirvar.dim.lo = symbol->m_dim;
dirvar.dim.hi = symbol->m_dim >> 32;
@@ -643,6 +640,8 @@ emit_function_directives (hsa_function_representation *f, bool is_declaration)
if (!f->m_declaration_p)
for (int i = 0; f->m_global_symbols.iterate (i, &sym); i++)
{
+ gcc_assert (!sym->m_emitted_to_brig);
+ sym->m_emitted_to_brig = true;
emit_directive_variable (sym);
brig_insn_count++;
}
@@ -930,62 +929,101 @@ emit_immediate_scalar_to_buffer (tree value, char *data, unsigned need_len)
return len;
}
-void
-hsa_op_immed::emit_to_buffer (tree value)
+char *
+hsa_op_immed::emit_to_buffer (unsigned *brig_repr_size)
{
- unsigned total_len = m_brig_repr_size;
-
- /* As we can have a constructor with fewer elements, fill the memory
- with zeros. */
- m_brig_repr = XCNEWVEC (char, total_len);
- char *p = m_brig_repr;
+ char *brig_repr;
+ *brig_repr_size = hsa_get_imm_brig_type_len (m_type);
- if (TREE_CODE (value) == VECTOR_CST)
+ if (m_tree_value != NULL_TREE)
{
- int i, num = VECTOR_CST_NELTS (value);
- for (i = 0; i < num; i++)
+ /* Update brig_repr_size for special tree values. */
+ if (TREE_CODE (m_tree_value) == STRING_CST)
+ *brig_repr_size = TREE_STRING_LENGTH (m_tree_value);
+ else if (TREE_CODE (m_tree_value) == CONSTRUCTOR)
+ *brig_repr_size
+ = tree_to_uhwi (TYPE_SIZE_UNIT (TREE_TYPE (m_tree_value)));
+
+ unsigned total_len = *brig_repr_size;
+
+ /* As we can have a constructor with fewer elements, fill the memory
+ with zeros. */
+ brig_repr = XCNEWVEC (char, total_len);
+ char *p = brig_repr;
+
+ if (TREE_CODE (m_tree_value) == VECTOR_CST)
+ {
+ int i, num = VECTOR_CST_NELTS (m_tree_value);
+ for (i = 0; i < num; i++)
+ {
+ tree v = VECTOR_CST_ELT (m_tree_value, i);
+ unsigned actual = emit_immediate_scalar_to_buffer (v, p, 0);
+ total_len -= actual;
+ p += actual;
+ }
+ /* Vectors should have the exact size. */
+ gcc_assert (total_len == 0);
+ }
+ else if (TREE_CODE (m_tree_value) == STRING_CST)
+ memcpy (brig_repr, TREE_STRING_POINTER (m_tree_value),
+ TREE_STRING_LENGTH (m_tree_value));
+ else if (TREE_CODE (m_tree_value) == COMPLEX_CST)
{
+ gcc_assert (total_len % 2 == 0);
unsigned actual;
actual
- = emit_immediate_scalar_to_buffer (VECTOR_CST_ELT (value, i), p, 0);
- total_len -= actual;
+ = emit_immediate_scalar_to_buffer (TREE_REALPART (m_tree_value), p,
+ total_len / 2);
+
+ gcc_assert (actual == total_len / 2);
p += actual;
+
+ actual
+ = emit_immediate_scalar_to_buffer (TREE_IMAGPART (m_tree_value), p,
+ total_len / 2);
+ gcc_assert (actual == total_len / 2);
}
- /* Vectors should have the exact size. */
- gcc_assert (total_len == 0);
- }
- else if (TREE_CODE (value) == STRING_CST)
- memcpy (m_brig_repr, TREE_STRING_POINTER (value),
- TREE_STRING_LENGTH (value));
- else if (TREE_CODE (value) == COMPLEX_CST)
- {
- gcc_assert (total_len % 2 == 0);
- unsigned actual;
- actual
- = emit_immediate_scalar_to_buffer (TREE_REALPART (value), p,
- total_len / 2);
-
- gcc_assert (actual == total_len / 2);
- p += actual;
-
- actual
- = emit_immediate_scalar_to_buffer (TREE_IMAGPART (value), p,
- total_len / 2);
- gcc_assert (actual == total_len / 2);
+ else if (TREE_CODE (m_tree_value) == CONSTRUCTOR)
+ {
+ unsigned len = vec_safe_length (CONSTRUCTOR_ELTS (m_tree_value));
+ for (unsigned i = 0; i < len; i++)
+ {
+ tree v = CONSTRUCTOR_ELT (m_tree_value, i)->value;
+ unsigned actual = emit_immediate_scalar_to_buffer (v, p, 0);
+ total_len -= actual;
+ p += actual;
+ }
+ }
+ else
+ emit_immediate_scalar_to_buffer (m_tree_value, p, total_len);
}
- else if (TREE_CODE (value) == CONSTRUCTOR)
+ else
{
- unsigned len = vec_safe_length (CONSTRUCTOR_ELTS (value));
- for (unsigned i = 0; i < len; i++)
+ hsa_bytes bytes;
+
+ switch (*brig_repr_size)
{
- tree v = CONSTRUCTOR_ELT (value, i)->value;
- unsigned actual = emit_immediate_scalar_to_buffer (v, p, 0);
- total_len -= actual;
- p += actual;
+ case 1:
+ bytes.b8 = (uint8_t) m_int_value;
+ break;
+ case 2:
+ bytes.b16 = (uint16_t) m_int_value;
+ break;
+ case 4:
+ bytes.b32 = (uint32_t) m_int_value;
+ break;
+ case 8:
+ bytes.b64 = (uint64_t) m_int_value;
+ break;
+ default:
+ gcc_unreachable ();
}
+
+ brig_repr = XNEWVEC (char, *brig_repr_size);
+ memcpy (brig_repr, &bytes, *brig_repr_size);
}
- else
- emit_immediate_scalar_to_buffer (value, p, total_len);
+
+ return brig_repr;
}
/* Emit an immediate BRIG operand IMM. The BRIG type of the immediate might
@@ -997,17 +1035,21 @@ hsa_op_immed::emit_to_buffer (tree value)
static void
emit_immediate_operand (hsa_op_immed *imm)
{
+ unsigned brig_repr_size;
+ char *brig_repr = imm->emit_to_buffer (&brig_repr_size);
struct BrigOperandConstantBytes out;
memset (&out, 0, sizeof (out));
out.base.byteCount = lendian16 (sizeof (out));
out.base.kind = lendian16 (BRIG_KIND_OPERAND_CONSTANT_BYTES);
- uint32_t byteCount = lendian32 (imm->m_brig_repr_size);
+ uint32_t byteCount = lendian32 (brig_repr_size);
out.type = lendian16 (imm->m_type);
out.bytes = lendian32 (brig_data.add (&byteCount, sizeof (byteCount)));
brig_operand.add (&out, sizeof (out));
- brig_data.add (imm->m_brig_repr, imm->m_brig_repr_size);
+ brig_data.add (brig_repr, brig_repr_size);
brig_data.round_size_up (4);
+
+ free (brig_repr);
}
/* Emit a register BRIG operand REG. */
@@ -1535,10 +1577,6 @@ emit_switch_insn (hsa_insn_sbr *sbr)
brig_code.add (&repr, sizeof (repr));
brig_insn_count++;
-
- /* Emit jump to default label. */
- hsa_bb *hbb = hsa_bb_for_bb (sbr->m_default_bb);
- emit_unconditional_jump (&hbb->m_label_ref);
}
/* Emit a HSA convert instruction and all necessary directives, schedule
@@ -1803,7 +1841,7 @@ emit_basic_insn (hsa_insn_basic *insn)
repr.base.type = lendian16 (type);
repr.base.operands = lendian32 (emit_insn_operands (insn));
- if ((type & BRIG_TYPE_PACK_MASK) != BRIG_TYPE_PACK_NONE)
+ if (hsa_type_packed_p (type))
{
if (hsa_type_float_p (type)
&& !hsa_opcode_floating_bit_insn_p (insn->m_opcode))
@@ -2006,8 +2044,6 @@ hsa_brig_emit_omp_symbols (void)
emit_directive_variable (hsa_num_threads);
}
-static GTY(()) tree hsa_cdtor_statements[2];
-
/* Create and return __hsa_global_variables symbol that contains
all informations consumed by libgomp to link global variables
with their string names used by an HSA kernel. */
@@ -2408,6 +2444,7 @@ hsa_output_libgomp_mapping (tree brig_decl)
= builtin_decl_explicit (BUILT_IN_GOMP_OFFLOAD_REGISTER);
gcc_checking_assert (offload_register);
+ tree *hsa_ctor_stmts = hsa_get_ctor_statements ();
append_to_statement_list
(build_call_expr (offload_register, 4,
build_int_cstu (unsigned_type_node,
@@ -2416,15 +2453,15 @@ hsa_output_libgomp_mapping (tree brig_decl)
build_fold_addr_expr (hsa_libgomp_host_table),
build_int_cst (integer_type_node, GOMP_DEVICE_HSA),
build_fold_addr_expr (hsa_img_descriptor)),
- &hsa_cdtor_statements[0]);
+ hsa_ctor_stmts);
- cgraph_build_static_cdtor ('I', hsa_cdtor_statements[0],
- DEFAULT_INIT_PRIORITY);
+ cgraph_build_static_cdtor ('I', *hsa_ctor_stmts, DEFAULT_INIT_PRIORITY);
tree offload_unregister
= builtin_decl_explicit (BUILT_IN_GOMP_OFFLOAD_UNREGISTER);
gcc_checking_assert (offload_unregister);
+ tree *hsa_dtor_stmts = hsa_get_dtor_statements ();
append_to_statement_list
(build_call_expr (offload_unregister, 4,
build_int_cstu (unsigned_type_node,
@@ -2433,9 +2470,8 @@ hsa_output_libgomp_mapping (tree brig_decl)
build_fold_addr_expr (hsa_libgomp_host_table),
build_int_cst (integer_type_node, GOMP_DEVICE_HSA),
build_fold_addr_expr (hsa_img_descriptor)),
- &hsa_cdtor_statements[1]);
- cgraph_build_static_cdtor ('D', hsa_cdtor_statements[1],
- DEFAULT_INIT_PRIORITY);
+ hsa_dtor_stmts);
+ cgraph_build_static_cdtor ('D', *hsa_dtor_stmts, DEFAULT_INIT_PRIORITY);
}
/* Emit the brig module we have compiled to a section in the final assembly and
diff --git a/gcc/hsa-dump.c b/gcc/hsa-dump.c
index c5f1f69..985caca 100644
--- a/gcc/hsa-dump.c
+++ b/gcc/hsa-dump.c
@@ -621,16 +621,6 @@ hsa_m_atomicop_name (enum BrigAtomicOperation op)
}
}
-/* Return byte alignment for given BrigAlignment8_t value. */
-
-static unsigned
-hsa_byte_alignment (BrigAlignment8_t alignment)
-{
- gcc_assert (alignment != BRIG_ALIGNMENT_NONE);
-
- return 1 << (alignment - 1);
-}
-
/* Dump textual representation of HSA IL register REG to file F. */
static void
@@ -657,8 +647,6 @@ dump_hsa_immed (FILE *f, hsa_op_immed *imm)
print_generic_expr (f, imm->m_tree_value, 0);
else
{
- gcc_checking_assert (imm->m_brig_repr_size <= 8);
-
if (unsigned_int_type)
fprintf (f, HOST_WIDE_INT_PRINT_DEC, imm->m_int_value);
else
@@ -716,11 +704,15 @@ dump_hsa_symbol (FILE *f, hsa_symbol *symbol)
name = buf;
}
- fprintf (f, "%s_%s %s", hsa_seg_name (symbol->m_segment),
+ fprintf (f, "align(%u) %s_%s %s", hsa_byte_alignment (symbol->m_align),
+ hsa_seg_name (symbol->m_segment),
hsa_type_name (symbol->m_type & ~BRIG_TYPE_ARRAY_MASK), name);
if (symbol->m_type & BRIG_TYPE_ARRAY_MASK)
fprintf (f, "[%lu]", (unsigned long) symbol->m_dim);
+
+ if (symbol->m_directive_offset)
+ fprintf (f, " /* BRIG offset: %u */", symbol->m_directive_offset);
}
/* Dump textual representation of HSA IL operand OP to file F. */
@@ -928,8 +920,6 @@ dump_hsa_insn_1 (FILE *f, hsa_insn_basic *insn, int *indent)
if (i != sbr->m_jump_table.length () - 1)
fprintf (f, ", ");
}
-
- fprintf (f, "]");
}
else if (is_a <hsa_insn_arg_block *> (insn))
{
diff --git a/gcc/hsa-gen.c b/gcc/hsa-gen.c
index 768c2cf..5baf607 100644
--- a/gcc/hsa-gen.c
+++ b/gcc/hsa-gen.c
@@ -162,19 +162,19 @@ hsa_symbol::hsa_symbol ()
m_directive_offset (0), m_type (BRIG_TYPE_NONE),
m_segment (BRIG_SEGMENT_NONE), m_linkage (BRIG_LINKAGE_NONE), m_dim (0),
m_cst_value (NULL), m_global_scope_p (false), m_seen_error (false),
- m_allocation (BRIG_ALLOCATION_AUTOMATIC)
+ m_allocation (BRIG_ALLOCATION_AUTOMATIC), m_emitted_to_brig (false)
{
}
hsa_symbol::hsa_symbol (BrigType16_t type, BrigSegment8_t segment,
BrigLinkage8_t linkage, bool global_scope_p,
- BrigAllocation allocation)
+ BrigAllocation allocation, BrigAlignment8_t align)
: m_decl (NULL_TREE), m_name (NULL), m_name_number (0),
m_directive_offset (0), m_type (type), m_segment (segment),
m_linkage (linkage), m_dim (0), m_cst_value (NULL),
m_global_scope_p (global_scope_p), m_seen_error (false),
- m_allocation (allocation)
+ m_allocation (allocation), m_emitted_to_brig (false), m_align (align)
{
}
@@ -211,10 +211,12 @@ hsa_symbol::fillup_for_decl (tree decl)
/* Constructor of class representing global HSA function/kernel information and
state. FNDECL is function declaration, KERNEL_P is true if the function
is going to become a HSA kernel. If the function has body, SSA_NAMES_COUNT
- should be set to number of SSA names used in the function. */
+ should be set to number of SSA names used in the function.
+ MODIFIED_CFG is set to true in case we modified control-flow graph
+ of the function. */
hsa_function_representation::hsa_function_representation
- (tree fdecl, bool kernel_p, unsigned ssa_names_count)
+ (tree fdecl, bool kernel_p, unsigned ssa_names_count, bool modified_cfg)
: m_name (NULL),
m_reg_count (0), m_input_args (vNULL),
m_output_arg (NULL), m_spill_symbols (vNULL), m_global_symbols (vNULL),
@@ -223,7 +225,8 @@ hsa_function_representation::hsa_function_representation
m_in_ssa (true), m_kern_p (kernel_p), m_declaration_p (false),
m_decl (fdecl), m_internal_fn (NULL), m_shadow_reg (NULL),
m_kernel_dispatch_count (0), m_maximum_omp_data_size (0),
- m_seen_error (false), m_temp_symbol_count (0), m_ssa_map ()
+ m_seen_error (false), m_temp_symbol_count (0), m_ssa_map (),
+ m_modified_cfg (modified_cfg)
{
int sym_init_len = (vec_safe_length (cfun->local_decls) / 2) + 1;;
m_local_symbols = new hash_table <hsa_noop_symbol_hasher> (sym_init_len);
@@ -319,6 +322,16 @@ hsa_function_representation::init_extra_bbs ()
hsa_init_new_bb (EXIT_BLOCK_PTR_FOR_FN (cfun));
}
+void
+hsa_function_representation::update_dominance ()
+{
+ if (m_modified_cfg)
+ {
+ free_dominance_info (CDI_DOMINATORS);
+ calculate_dominance_info (CDI_DOMINATORS);
+ }
+}
+
hsa_symbol *
hsa_function_representation::create_hsa_temporary (BrigType16_t type)
{
@@ -754,11 +767,13 @@ mem_type_for_type (BrigType16_t type)
unsigned type?). */
if ((type & BRIG_TYPE_PACK_MASK) == BRIG_TYPE_PACK_128)
return BRIG_TYPE_B128;
- else if (hsa_btype_p (type))
+ else if (hsa_btype_p (type) || hsa_type_packed_p (type))
{
unsigned bitsize = hsa_type_bit_size (type);
if (bitsize < 128)
return hsa_uint_for_bitsize (bitsize);
+ else
+ return hsa_bittype_for_bitsize (bitsize);
}
return type;
}
@@ -878,32 +893,57 @@ get_symbol_for_decl (tree decl)
gcc_checking_assert (slot);
if (*slot)
{
+ hsa_symbol *sym = (*slot);
+
/* If the symbol is problematic, mark current function also as
problematic. */
- if ((*slot)->m_seen_error)
+ if (sym->m_seen_error)
hsa_fail_cfun ();
+ /* PR hsa/70234: If a global variable was marked to be emitted,
+ but HSAIL generation of a function using the variable fails,
+ we should retry to emit the variable in context of a different
+ function.
+
+ Iterate elements whether a symbol is already in m_global_symbols
+ of not. */
+ if (is_in_global_vars && !sym->m_emitted_to_brig)
+ {
+ for (unsigned i = 0; i < hsa_cfun->m_global_symbols.length (); i++)
+ if (hsa_cfun->m_global_symbols[i] == sym)
+ return *slot;
+ hsa_cfun->m_global_symbols.safe_push (sym);
+ }
+
return *slot;
}
else
{
hsa_symbol *sym;
gcc_assert (TREE_CODE (decl) == VAR_DECL);
+ BrigAlignment8_t align = hsa_object_alignment (decl);
if (is_in_global_vars)
{
sym = new hsa_symbol (BRIG_TYPE_NONE, BRIG_SEGMENT_GLOBAL,
BRIG_LINKAGE_PROGRAM, true,
- BRIG_ALLOCATION_PROGRAM);
+ BRIG_ALLOCATION_PROGRAM, align);
hsa_cfun->m_global_symbols.safe_push (sym);
}
else
{
+ /* As generation of efficient memory copy instructions relies
+ on alignment greater or equal to 8 bytes,
+ we need to increase alignment of all aggregate types.. */
+ if (AGGREGATE_TYPE_P (TREE_TYPE (decl)))
+ align = MAX ((BrigAlignment8_t) BRIG_ALIGNMENT_8, align);
+
/* PARM_DECL and RESULT_DECL should be already in m_local_symbols. */
gcc_assert (TREE_CODE (decl) == VAR_DECL);
sym = new hsa_symbol (BRIG_TYPE_NONE, BRIG_SEGMENT_PRIVATE,
BRIG_LINKAGE_FUNCTION);
+ sym->m_align = align;
hsa_cfun->m_private_variables.safe_push (sym);
}
@@ -1035,8 +1075,7 @@ hsa_op_with_type::get_in_type (BrigType16_t dtype, hsa_bb *hbb)
hsa_op_immed::hsa_op_immed (tree tree_val, bool min32int)
: hsa_op_with_type (BRIG_KIND_OPERAND_CONSTANT_BYTES,
hsa_type_for_tree_type (TREE_TYPE (tree_val), NULL,
- min32int)),
- m_brig_repr (NULL)
+ min32int))
{
if (hsa_seen_error ())
return;
@@ -1046,30 +1085,20 @@ hsa_op_immed::hsa_op_immed (tree tree_val, bool min32int)
|| TREE_CODE (tree_val) == INTEGER_CST))
|| TREE_CODE (tree_val) == CONSTRUCTOR);
m_tree_value = tree_val;
- m_brig_repr_size = hsa_get_imm_brig_type_len (m_type);
-
- if (TREE_CODE (m_tree_value) == STRING_CST)
- m_brig_repr_size = TREE_STRING_LENGTH (m_tree_value);
- else if (TREE_CODE (m_tree_value) == CONSTRUCTOR)
- {
- m_brig_repr_size
- = tree_to_uhwi (TYPE_SIZE_UNIT (TREE_TYPE (m_tree_value)));
- /* Verify that all elements of a constructor are constants. */
- for (unsigned i = 0;
- i < vec_safe_length (CONSTRUCTOR_ELTS (m_tree_value)); i++)
- {
- tree v = CONSTRUCTOR_ELT (m_tree_value, i)->value;
- if (!CONSTANT_CLASS_P (v))
- {
- HSA_SORRY_AT (EXPR_LOCATION (tree_val),
- "HSA ctor should have only constants");
- return;
- }
- }
- }
-
- emit_to_buffer (m_tree_value);
+ /* Verify that all elements of a constructor are constants. */
+ if (TREE_CODE (m_tree_value) == CONSTRUCTOR)
+ for (unsigned i = 0;
+ i < vec_safe_length (CONSTRUCTOR_ELTS (m_tree_value)); i++)
+ {
+ tree v = CONSTRUCTOR_ELT (m_tree_value, i)->value;
+ if (!CONSTANT_CLASS_P (v))
+ {
+ HSA_SORRY_AT (EXPR_LOCATION (tree_val),
+ "HSA ctor should have only constants");
+ return;
+ }
+ }
}
/* Constructor of class representing HSA immediate values. INTEGER_VALUE is the
@@ -1077,38 +1106,14 @@ hsa_op_immed::hsa_op_immed (tree tree_val, bool min32int)
hsa_op_immed::hsa_op_immed (HOST_WIDE_INT integer_value, BrigType16_t type)
: hsa_op_with_type (BRIG_KIND_OPERAND_CONSTANT_BYTES, type),
- m_tree_value (NULL), m_brig_repr (NULL)
+ m_tree_value (NULL)
{
gcc_assert (hsa_type_integer_p (type));
m_int_value = integer_value;
- m_brig_repr_size = hsa_type_bit_size (type) / BITS_PER_UNIT;
-
- hsa_bytes bytes;
-
- switch (m_brig_repr_size)
- {
- case 1:
- bytes.b8 = (uint8_t) m_int_value;
- break;
- case 2:
- bytes.b16 = (uint16_t) m_int_value;
- break;
- case 4:
- bytes.b32 = (uint32_t) m_int_value;
- break;
- case 8:
- bytes.b64 = (uint64_t) m_int_value;
- break;
- default:
- gcc_unreachable ();
- }
-
- m_brig_repr = XNEWVEC (char, m_brig_repr_size);
- memcpy (m_brig_repr, &bytes, m_brig_repr_size);
}
hsa_op_immed::hsa_op_immed ()
- : hsa_op_with_type (BRIG_KIND_NONE, BRIG_TYPE_NONE), m_brig_repr (NULL)
+ : hsa_op_with_type (BRIG_KIND_NONE, BRIG_TYPE_NONE)
{
}
@@ -1124,7 +1129,6 @@ hsa_op_immed::operator new (size_t)
hsa_op_immed::~hsa_op_immed ()
{
- free (m_brig_repr);
}
/* Change type of the immediate value to T. */
@@ -1511,7 +1515,7 @@ hsa_insn_br::operator new (size_t)
hsa_insn_sbr::hsa_insn_sbr (hsa_op_reg *index, unsigned jump_count)
: hsa_insn_basic (1, BRIG_OPCODE_SBR, BRIG_TYPE_B1, index),
- m_width (BRIG_WIDTH_1), m_jump_table (vNULL), m_default_bb (NULL),
+ m_width (BRIG_WIDTH_1), m_jump_table (vNULL),
m_label_code_list (new hsa_op_code_list (jump_count))
{
}
@@ -2105,9 +2109,17 @@ gen_hsa_addr (tree ref, hsa_bb *hbb, HOST_WIDE_INT *output_bitsize = NULL,
}
if (TMR_INDEX2 (ref))
{
- hsa_op_base *disp2 = hsa_cfun->reg_for_gimple_ssa
- (TMR_INDEX2 (ref))->get_in_type (addrtype, hbb);
- reg = add_addr_regs_if_needed (reg, as_a <hsa_op_reg *> (disp2), hbb);
+ if (TREE_CODE (TMR_INDEX2 (ref)) == SSA_NAME)
+ {
+ hsa_op_base *disp2 = hsa_cfun->reg_for_gimple_ssa
+ (TMR_INDEX2 (ref))->get_in_type (addrtype, hbb);
+ reg = add_addr_regs_if_needed (reg, as_a <hsa_op_reg *> (disp2),
+ hbb);
+ }
+ else if (TREE_CODE (TMR_INDEX2 (ref)) == INTEGER_CST)
+ offset += wi::to_offset (TMR_INDEX2 (ref));
+ else
+ gcc_unreachable ();
}
offset += wi::to_offset (TMR_OFFSET (ref));
break;
@@ -2165,6 +2177,30 @@ out:
return new hsa_op_address (symbol, reg, hwi_offset);
}
+/* Generate HSA address operand for a given tree memory reference REF. If
+ instructions need to be created to calculate the address, they will be added
+ to the end of HBB. OUTPUT_ALIGN is alignment of the created address. */
+
+static hsa_op_address *
+gen_hsa_addr_with_align (tree ref, hsa_bb *hbb, BrigAlignment8_t *output_align)
+{
+ hsa_op_address *addr = gen_hsa_addr (ref, hbb);
+ if (addr->m_reg || !addr->m_symbol)
+ *output_align = hsa_object_alignment (ref);
+ else
+ {
+ /* If the address consists only of a symbol and an offset, we
+ compute the alignment ourselves to take into account any alignment
+ promotions we might have done for the HSA symbol representation. */
+ unsigned align = hsa_byte_alignment (addr->m_symbol->m_align);
+ unsigned misalign = addr->m_imm_offset & (align - 1);
+ if (misalign)
+ align = (misalign & -misalign);
+ *output_align = hsa_alignment_encoding (BITS_PER_UNIT * align);
+ }
+ return addr;
+}
+
/* Generate HSA address for a function call argument of given TYPE.
INDEX is used to generate corresponding name of the arguments.
Special value -1 represents fact that result value is created. */
@@ -2187,30 +2223,14 @@ gen_hsa_addr_for_arg (tree tree_type, int index)
return new hsa_op_address (sym);
}
-/* Generate HSA instructions that calculate address of VAL including all
- necessary conversions to flat addressing and place the result into DEST.
+/* Generate HSA instructions that process all necessary conversions
+ of an ADDR to flat addressing and place the result into DEST.
Instructions are appended to HBB. */
static void
-gen_hsa_addr_insns (tree val, hsa_op_reg *dest, hsa_bb *hbb)
+convert_addr_to_flat_segment (hsa_op_address *addr, hsa_op_reg *dest,
+ hsa_bb *hbb)
{
- /* Handle cases like tmp = NULL, where we just emit a move instruction
- to a register. */
- if (TREE_CODE (val) == INTEGER_CST)
- {
- hsa_op_immed *c = new hsa_op_immed (val);
- hsa_insn_basic *insn = new hsa_insn_basic (2, BRIG_OPCODE_MOV,
- dest->m_type, dest, c);
- hbb->append_insn (insn);
- return;
- }
-
- hsa_op_address *addr;
-
- gcc_assert (dest->m_type == hsa_get_segment_addr_type (BRIG_SEGMENT_FLAT));
- if (TREE_CODE (val) == ADDR_EXPR)
- val = TREE_OPERAND (val, 0);
- addr = gen_hsa_addr (val, hbb);
hsa_insn_basic *insn = new hsa_insn_basic (2, BRIG_OPCODE_LDA);
insn->set_op (1, addr);
if (addr->m_symbol && addr->m_symbol->m_segment != BRIG_SEGMENT_GLOBAL)
@@ -2239,6 +2259,34 @@ gen_hsa_addr_insns (tree val, hsa_op_reg *dest, hsa_bb *hbb)
}
}
+/* Generate HSA instructions that calculate address of VAL including all
+ necessary conversions to flat addressing and place the result into DEST.
+ Instructions are appended to HBB. */
+
+static void
+gen_hsa_addr_insns (tree val, hsa_op_reg *dest, hsa_bb *hbb)
+{
+ /* Handle cases like tmp = NULL, where we just emit a move instruction
+ to a register. */
+ if (TREE_CODE (val) == INTEGER_CST)
+ {
+ hsa_op_immed *c = new hsa_op_immed (val);
+ hsa_insn_basic *insn = new hsa_insn_basic (2, BRIG_OPCODE_MOV,
+ dest->m_type, dest, c);
+ hbb->append_insn (insn);
+ return;
+ }
+
+ hsa_op_address *addr;
+
+ gcc_assert (dest->m_type == hsa_get_segment_addr_type (BRIG_SEGMENT_FLAT));
+ if (TREE_CODE (val) == ADDR_EXPR)
+ val = TREE_OPERAND (val, 0);
+ addr = gen_hsa_addr (val, hbb);
+
+ convert_addr_to_flat_segment (addr, dest, hbb);
+}
+
/* Return an HSA register or HSA immediate value operand corresponding to
gimple operand OP. */
@@ -2371,7 +2419,7 @@ hsa_bitmemref_alignment (tree ref)
unsigned HOST_WIDE_INT bits = bit_offset % BITS_PER_UNIT;
unsigned HOST_WIDE_INT byte_bits = bit_offset - bits;
- BrigAlignment8_t base = hsa_alignment_encoding (get_object_alignment (ref));
+ BrigAlignment8_t base = hsa_object_alignment (ref);
if (byte_bits == 0)
return base;
return MIN (base, hsa_alignment_encoding (byte_bits & -byte_bits));
@@ -2510,7 +2558,7 @@ gen_hsa_insns_for_load (hsa_op_reg *dest, tree rhs, tree type, hsa_bb *hbb)
false));
hsa_insn_mem *mem = new hsa_insn_mem (BRIG_OPCODE_LD, mtype, dest,
addr);
- mem->set_align (hsa_alignment_encoding (get_object_alignment (rhs)));
+ mem->set_align (hsa_object_alignment (rhs));
hbb->append_insn (mem);
}
}
@@ -2629,7 +2677,7 @@ gen_hsa_insns_for_store (tree lhs, hsa_op_base *src, hsa_bb *hbb)
mtype = mem_type;
}
else
- req_align = hsa_alignment_encoding (get_object_alignment (lhs));
+ req_align = hsa_object_alignment (lhs);
hsa_insn_mem *mem = new hsa_insn_mem (BRIG_OPCODE_ST, mtype, src, addr);
mem->set_align (req_align);
@@ -2640,7 +2688,7 @@ gen_hsa_insns_for_store (tree lhs, hsa_op_base *src, hsa_bb *hbb)
we can modify the above in place. */
if (hsa_op_immed *imm = dyn_cast <hsa_op_immed *> (src))
{
- if ((imm->m_type & BRIG_TYPE_PACK_MASK) == BRIG_TYPE_PACK_NONE)
+ if (!hsa_type_packed_p (imm->m_type))
imm->m_type = mem->m_type;
else
{
@@ -2669,17 +2717,19 @@ gen_hsa_insns_for_store (tree lhs, hsa_op_base *src, hsa_bb *hbb)
}
/* Generate memory copy instructions that are going to be used
- for copying a HSA symbol SRC_SYMBOL (or SRC_REG) to TARGET memory,
- represented by pointer in a register. */
+ for copying a SRC memory to TARGET memory,
+ represented by pointer in a register. MIN_ALIGN is minimal alignment
+ of provided HSA addresses. */
static void
gen_hsa_memory_copy (hsa_bb *hbb, hsa_op_address *target, hsa_op_address *src,
- unsigned size)
+ unsigned size, BrigAlignment8_t min_align)
{
hsa_op_address *addr;
hsa_insn_mem *mem;
unsigned offset = 0;
+ unsigned min_byte_align = hsa_byte_alignment (min_align);
while (size)
{
@@ -2693,6 +2743,9 @@ gen_hsa_memory_copy (hsa_bb *hbb, hsa_op_address *target, hsa_op_address *src,
else
s = 1;
+ if (s > min_byte_align)
+ s = min_byte_align;
+
BrigType16_t t = get_integer_type_by_bytes (s, false);
hsa_op_reg *tmp = new hsa_op_reg (t);
@@ -2728,17 +2781,19 @@ build_memset_value (unsigned HOST_WIDE_INT constant, unsigned byte_size)
}
/* Generate memory set instructions that are going to be used
- for setting a CONSTANT byte value to TARGET memory of SIZE bytes. */
+ for setting a CONSTANT byte value to TARGET memory of SIZE bytes.
+ MIN_ALIGN is minimal alignment of provided HSA addresses. */
static void
gen_hsa_memory_set (hsa_bb *hbb, hsa_op_address *target,
unsigned HOST_WIDE_INT constant,
- unsigned size)
+ unsigned size, BrigAlignment8_t min_align)
{
hsa_op_address *addr;
hsa_insn_mem *mem;
unsigned offset = 0;
+ unsigned min_byte_align = hsa_byte_alignment (min_align);
while (size)
{
@@ -2752,6 +2807,9 @@ gen_hsa_memory_set (hsa_bb *hbb, hsa_op_address *target,
else
s = 1;
+ if (s > min_byte_align)
+ s = min_byte_align;
+
addr = new hsa_op_address (target->m_symbol, target->m_reg,
target->m_imm_offset + offset);
@@ -2768,10 +2826,12 @@ gen_hsa_memory_set (hsa_bb *hbb, hsa_op_address *target,
/* Generate HSAIL instructions for a single assignment
of an empty constructor to an ADDR_LHS. Constructor is passed as a
- tree RHS and all instructions are appended to HBB. */
+ tree RHS and all instructions are appended to HBB. ALIGN is
+ alignment of the address. */
void
-gen_hsa_ctor_assignment (hsa_op_address *addr_lhs, tree rhs, hsa_bb *hbb)
+gen_hsa_ctor_assignment (hsa_op_address *addr_lhs, tree rhs, hsa_bb *hbb,
+ BrigAlignment8_t align)
{
if (vec_safe_length (CONSTRUCTOR_ELTS (rhs)))
{
@@ -2781,7 +2841,7 @@ gen_hsa_ctor_assignment (hsa_op_address *addr_lhs, tree rhs, hsa_bb *hbb)
}
unsigned size = tree_to_uhwi (TYPE_SIZE_UNIT (TREE_TYPE (rhs)));
- gen_hsa_memory_set (hbb, addr_lhs, 0, size);
+ gen_hsa_memory_set (hbb, addr_lhs, 0, size, align);
}
/* Generate HSA instructions for a single assignment of RHS to LHS.
@@ -2810,16 +2870,21 @@ gen_hsa_insns_for_single_assignment (tree lhs, tree rhs, hsa_bb *hbb)
}
else
{
- hsa_op_address *addr_lhs = gen_hsa_addr (lhs, hbb);
+ BrigAlignment8_t lhs_align;
+ hsa_op_address *addr_lhs = gen_hsa_addr_with_align (lhs, hbb,
+ &lhs_align);
if (TREE_CODE (rhs) == CONSTRUCTOR)
- gen_hsa_ctor_assignment (addr_lhs, rhs, hbb);
+ gen_hsa_ctor_assignment (addr_lhs, rhs, hbb, lhs_align);
else
{
- hsa_op_address *addr_rhs = gen_hsa_addr (rhs, hbb);
+ BrigAlignment8_t rhs_align;
+ hsa_op_address *addr_rhs = gen_hsa_addr_with_align (rhs, hbb,
+ &rhs_align);
unsigned size = tree_to_uhwi (TYPE_SIZE_UNIT (TREE_TYPE (rhs)));
- gen_hsa_memory_copy (hbb, addr_lhs, addr_rhs, size);
+ gen_hsa_memory_copy (hbb, addr_lhs, addr_rhs, size,
+ MIN (lhs_align, rhs_align));
}
}
}
@@ -3022,7 +3087,7 @@ gen_hsa_binary_operation (int opcode, hsa_op_reg *dest,
&& is_a <hsa_op_immed *> (op2))
{
hsa_op_immed *i = dyn_cast <hsa_op_immed *> (op2);
- i->set_type (hsa_uint_for_bitsize (hsa_type_bit_size (i->m_type)));
+ i->set_type (hsa_unsigned_type_for_type (i->m_type));
}
hsa_insn_basic *insn = new hsa_insn_basic (3, opcode, dest->m_type, dest,
@@ -3233,27 +3298,21 @@ gen_hsa_insns_for_operation_assignment (gimple *assign, hsa_bb *hbb)
ctrl = r;
}
- hsa_op_with_type *rhs2_reg = hsa_reg_or_immed_for_gimple_op (rhs2, hbb);
- hsa_op_with_type *rhs3_reg = hsa_reg_or_immed_for_gimple_op (rhs3, hbb);
-
- BrigType16_t btype = hsa_bittype_for_type (dest->m_type);
- hsa_op_reg *tmp = new hsa_op_reg (btype);
+ hsa_op_with_type *op2 = hsa_reg_or_immed_for_gimple_op (rhs2, hbb);
+ hsa_op_with_type *op3 = hsa_reg_or_immed_for_gimple_op (rhs3, hbb);
- rhs2_reg->m_type = btype;
- rhs3_reg->m_type = btype;
+ BrigType16_t utype = hsa_unsigned_type_for_type (dest->m_type);
+ if (is_a <hsa_op_immed *> (op2))
+ op2->m_type = utype;
+ if (is_a <hsa_op_immed *> (op3))
+ op3->m_type = utype;
hsa_insn_basic *insn
- = new hsa_insn_basic (4, BRIG_OPCODE_CMOV, tmp->m_type, tmp, ctrl,
- rhs2_reg, rhs3_reg);
+ = new hsa_insn_basic (4, BRIG_OPCODE_CMOV,
+ hsa_bittype_for_type (dest->m_type),
+ dest, ctrl, op2, op3);
hbb->append_insn (insn);
-
- /* As operands of a CMOV insn must be Bx types, we have to emit
- a conversion insn. */
- hsa_insn_basic *mov = new hsa_insn_basic (2, BRIG_OPCODE_MOV,
- dest->m_type, dest, tmp);
- hbb->append_insn (mov);
-
return;
}
case COMPLEX_EXPR:
@@ -3377,11 +3436,48 @@ get_switch_size (gswitch *s)
static void
gen_hsa_insns_for_switch_stmt (gswitch *s, hsa_bb *hbb)
{
+ gimple_stmt_iterator it = gsi_for_stmt (s);
+ gsi_prev (&it);
+
+ /* Create preambule that verifies that index - lowest_label >= 0. */
+ edge e = split_block (hbb->m_bb, gsi_stmt (it));
+ e->flags &= ~EDGE_FALLTHRU;
+ e->flags |= EDGE_TRUE_VALUE;
+
function *func = DECL_STRUCT_FUNCTION (current_function_decl);
tree index_tree = gimple_switch_index (s);
tree lowest = get_switch_low (s);
+ tree highest = get_switch_high (s);
hsa_op_reg *index = hsa_cfun->reg_for_gimple_ssa (index_tree);
+
+ hsa_op_reg *cmp1_reg = new hsa_op_reg (BRIG_TYPE_B1);
+ hsa_op_immed *cmp1_immed = new hsa_op_immed (lowest);
+ hbb->append_insn (new hsa_insn_cmp (BRIG_COMPARE_GE, cmp1_reg->m_type,
+ cmp1_reg, index, cmp1_immed));
+
+ hsa_op_reg *cmp2_reg = new hsa_op_reg (BRIG_TYPE_B1);
+ hsa_op_immed *cmp2_immed = new hsa_op_immed (highest);
+ hbb->append_insn (new hsa_insn_cmp (BRIG_COMPARE_LE, cmp2_reg->m_type,
+ cmp2_reg, index, cmp2_immed));
+
+ hsa_op_reg *cmp_reg = new hsa_op_reg (BRIG_TYPE_B1);
+ hbb->append_insn (new hsa_insn_basic (3, BRIG_OPCODE_AND, cmp_reg->m_type,
+ cmp_reg, cmp1_reg, cmp2_reg));
+
+ hbb->append_insn (new hsa_insn_br (cmp_reg));
+
+ tree default_label = gimple_switch_default_label (s);
+ basic_block default_label_bb = label_to_block_fn (func,
+ CASE_LABEL (default_label));
+
+ make_edge (e->src, default_label_bb, EDGE_FALSE_VALUE);
+
+ hsa_cfun->m_modified_cfg = true;
+
+ /* Basic block with the SBR instruction. */
+ hbb = hsa_init_new_bb (e->dest);
+
hsa_op_reg *sub_index = new hsa_op_reg (index->m_type);
hbb->append_insn (new hsa_insn_basic (3, BRIG_OPCODE_SUB, sub_index->m_type,
sub_index, index,
@@ -3393,11 +3489,6 @@ gen_hsa_insns_for_switch_stmt (gswitch *s, hsa_bb *hbb)
unsigned HOST_WIDE_INT size = tree_to_uhwi (get_switch_size (s));
hsa_insn_sbr *sbr = new hsa_insn_sbr (sub_index, size + 1);
- tree default_label = gimple_switch_default_label (s);
- basic_block default_label_bb = label_to_block_fn (func,
- CASE_LABEL (default_label));
-
- sbr->m_default_bb = default_label_bb;
/* Prepare array with default label destination. */
for (unsigned HOST_WIDE_INT i = 0; i <= size; i++)
@@ -3460,10 +3551,13 @@ get_format_argument_type (tree formal_arg_type, BrigType16_t actual_arg_type)
/* Generate HSA instructions for a direct call instruction.
Instructions will be appended to HBB, which also needs to be the
- corresponding structure to the basic_block of STMT. */
+ corresponding structure to the basic_block of STMT.
+ If ASSIGN_LHS is false, do not copy HSA function result argument into the
+ corresponding HSA representation of the gimple statement LHS. */
static void
-gen_hsa_insns_for_direct_call (gimple *stmt, hsa_bb *hbb)
+gen_hsa_insns_for_direct_call (gimple *stmt, hsa_bb *hbb,
+ bool assign_lhs = true)
{
tree decl = gimple_call_fndecl (stmt);
verify_function_arguments (decl);
@@ -3492,9 +3586,10 @@ gen_hsa_insns_for_direct_call (gimple *stmt, hsa_bb *hbb)
if (AGGREGATE_TYPE_P (TREE_TYPE (parm)))
{
addr = gen_hsa_addr_for_arg (TREE_TYPE (parm), i);
- hsa_op_address *src = gen_hsa_addr (parm, hbb);
+ BrigAlignment8_t align;
+ hsa_op_address *src = gen_hsa_addr_with_align (parm, hbb, &align);
gen_hsa_memory_copy (hbb, addr, src,
- addr->m_symbol->total_byte_size ());
+ addr->m_symbol->total_byte_size (), align);
}
else
{
@@ -3544,7 +3639,7 @@ gen_hsa_insns_for_direct_call (gimple *stmt, hsa_bb *hbb)
/* Even if result of a function call is unused, we have to emit
declaration for the result. */
- if (result)
+ if (result && assign_lhs)
{
tree lhs_type = TREE_TYPE (result);
@@ -3553,9 +3648,11 @@ gen_hsa_insns_for_direct_call (gimple *stmt, hsa_bb *hbb)
if (AGGREGATE_TYPE_P (lhs_type))
{
- hsa_op_address *result_addr = gen_hsa_addr (result, hbb);
+ BrigAlignment8_t align;
+ hsa_op_address *result_addr
+ = gen_hsa_addr_with_align (result, hbb, &align);
gen_hsa_memory_copy (hbb, result_addr, addr,
- addr->m_symbol->total_byte_size ());
+ addr->m_symbol->total_byte_size (), align);
}
else
{
@@ -3664,9 +3761,12 @@ gen_hsa_insns_for_return (greturn *stmt, hsa_bb *hbb)
if (AGGREGATE_TYPE_P (TREE_TYPE (retval)))
{
- hsa_op_address *retval_addr = gen_hsa_addr (retval, hbb);
+ BrigAlignment8_t align;
+ hsa_op_address *retval_addr = gen_hsa_addr_with_align (retval, hbb,
+ &align);
gen_hsa_memory_copy (hbb, addr, retval_addr,
- hsa_cfun->m_output_arg->total_byte_size ());
+ hsa_cfun->m_output_arg->total_byte_size (),
+ align);
}
else
{
@@ -3768,20 +3868,19 @@ gen_set_num_threads (tree value, hsa_bb *hbb)
hbb->append_insn (basic);
}
-static GTY (()) tree hsa_kernel_dispatch_type = NULL;
-
/* Return byte offset of a FIELD_NAME in GOMP_hsa_kernel_dispatch which
is defined in plugin-hsa.c. */
static HOST_WIDE_INT
get_hsa_kernel_dispatch_offset (const char *field_name)
{
- if (hsa_kernel_dispatch_type == NULL)
+ tree *hsa_kernel_dispatch_type = hsa_get_kernel_dispatch_type ();
+ if (*hsa_kernel_dispatch_type == NULL)
{
/* Collection of information needed for a dispatch of a kernel from a
kernel. Keep in sync with libgomp's plugin-hsa.c. */
- hsa_kernel_dispatch_type = make_node (RECORD_TYPE);
+ *hsa_kernel_dispatch_type = make_node (RECORD_TYPE);
tree id_f1 = build_decl (BUILTINS_LOCATION, FIELD_DECL,
get_identifier ("queue"), ptr_type_node);
DECL_CHAIN (id_f1) = NULL_TREE;
@@ -3831,12 +3930,12 @@ get_hsa_kernel_dispatch_offset (const char *field_name)
DECL_CHAIN (id_f12) = id_f11;
- finish_builtin_struct (hsa_kernel_dispatch_type, "__hsa_kernel_dispatch",
+ finish_builtin_struct (*hsa_kernel_dispatch_type, "__hsa_kernel_dispatch",
id_f12, NULL_TREE);
- TYPE_ARTIFICIAL (hsa_kernel_dispatch_type) = 1;
+ TYPE_ARTIFICIAL (*hsa_kernel_dispatch_type) = 1;
}
- for (tree chain = TYPE_FIELDS (hsa_kernel_dispatch_type);
+ for (tree chain = TYPE_FIELDS (*hsa_kernel_dispatch_type);
chain != NULL_TREE; chain = TREE_CHAIN (chain))
if (strcmp (field_name, IDENTIFIER_POINTER (DECL_NAME (chain))) == 0)
return int_byte_position (chain);
@@ -4055,7 +4154,9 @@ gen_hsa_clrsb (gcall *call, hsa_bb *hbb)
hsa_op_with_type *arg = hsa_reg_or_immed_for_gimple_op (rhs1, hbb);
BrigType16_t bittype = hsa_bittype_for_type (arg->m_type);
unsigned bitsize = tree_to_uhwi (TYPE_SIZE (TREE_TYPE (rhs1)));
- gcc_checking_assert (bitsize >= 32);
+
+ /* FIRSTBIT instruction is defined just for 32 and 64-bits wide integers. */
+ gcc_checking_assert (bitsize == 32 || bitsize == 64);
/* Set true to MOST_SIG if the most significant bit is set to one. */
hsa_op_immed *c = new hsa_op_immed (1ul << (bitsize - 1),
@@ -4098,9 +4199,10 @@ gen_hsa_clrsb (gcall *call, hsa_bb *hbb)
new hsa_op_immed (0, arg->m_type));
hbb->append_insn (cmp);
- /* Return the number of leading bits, or 31 if the input value is zero. */
+ /* Return the number of leading bits,
+ or (bitsize - 1) if the input value is zero. */
cmov = new hsa_insn_basic (4, BRIG_OPCODE_CMOV, BRIG_TYPE_B32, NULL, is_zero,
- new hsa_op_immed (31, BRIG_TYPE_U32),
+ new hsa_op_immed (bitsize - 1, BRIG_TYPE_U32),
leading_bits->get_in_type (BRIG_TYPE_B32, hbb));
hbb->append_insn (cmov);
cmov->set_output_in_type (dest, 0, hbb);
@@ -4410,6 +4512,195 @@ get_address_from_value (tree val, hsa_bb *hbb)
}
}
+/* Expand assignment of a result of a string BUILTIN to DST.
+ Size of the operation is N bytes, where instructions
+ will be append to HBB. */
+
+static void
+expand_lhs_of_string_op (gimple *stmt,
+ unsigned HOST_WIDE_INT n, hsa_bb *hbb,
+ enum built_in_function builtin)
+{
+ /* If LHS is expected, we need to emit a PHI instruction. */
+ tree lhs = gimple_call_lhs (stmt);
+ if (!lhs)
+ return;
+
+ hsa_op_reg *lhs_reg = hsa_cfun->reg_for_gimple_ssa (lhs);
+
+ hsa_op_with_type *dst_reg
+ = hsa_reg_or_immed_for_gimple_op (gimple_call_arg (stmt, 0), hbb);
+ hsa_op_with_type *tmp;
+
+ switch (builtin)
+ {
+ case BUILT_IN_MEMPCPY:
+ {
+ tmp = new hsa_op_reg (dst_reg->m_type);
+ hsa_insn_basic *add
+ = new hsa_insn_basic (3, BRIG_OPCODE_ADD, tmp->m_type,
+ tmp, dst_reg,
+ new hsa_op_immed (n, dst_reg->m_type));
+ hbb->append_insn (add);
+ break;
+ }
+ case BUILT_IN_MEMCPY:
+ case BUILT_IN_MEMSET:
+ tmp = dst_reg;
+ break;
+ default:
+ gcc_unreachable ();
+ }
+
+ hbb->append_insn (new hsa_insn_basic (2, BRIG_OPCODE_MOV, lhs_reg->m_type,
+ lhs_reg, tmp));
+}
+
+#define HSA_MEMORY_BUILTINS_LIMIT 128
+
+/* Expand a string builtin (from a gimple STMT) in a way that
+ according to MISALIGNED_FLAG we process either direct emission
+ (a bunch of memory load and store instructions), or we emit a function call
+ of a library function (for instance 'memcpy'). Actually, a basic block
+ for direct emission is just prepared, where caller is responsible
+ for emission of corresponding instructions.
+ All instruction are appended to HBB. */
+
+hsa_bb *
+expand_string_operation_builtin (gimple *stmt, hsa_bb *hbb,
+ hsa_op_reg *misaligned_flag)
+{
+ edge e = split_block (hbb->m_bb, stmt);
+ basic_block condition_bb = e->src;
+ hbb->append_insn (new hsa_insn_br (misaligned_flag));
+
+ /* Prepare the control flow. */
+ edge condition_edge = EDGE_SUCC (condition_bb, 0);
+ basic_block call_bb = split_edge (condition_edge);
+
+ basic_block expanded_bb = split_edge (EDGE_SUCC (call_bb, 0));
+ basic_block cont_bb = EDGE_SUCC (expanded_bb, 0)->dest;
+ basic_block merge_bb = split_edge (EDGE_PRED (cont_bb, 0));
+
+ condition_edge->flags &= ~EDGE_FALLTHRU;
+ condition_edge->flags |= EDGE_TRUE_VALUE;
+ make_edge (condition_bb, expanded_bb, EDGE_FALSE_VALUE);
+
+ redirect_edge_succ (EDGE_SUCC (call_bb, 0), merge_bb);
+
+ hsa_cfun->m_modified_cfg = true;
+
+ hsa_init_new_bb (expanded_bb);
+
+ /* Slow path: function call. */
+ gen_hsa_insns_for_direct_call (stmt, hsa_init_new_bb (call_bb), false);
+
+ return hsa_bb_for_bb (expanded_bb);
+}
+
+/* Expand a memory copy BUILTIN (BUILT_IN_MEMCPY, BUILT_IN_MEMPCPY) from
+ a gimple STMT and store all necessary instruction to HBB basic block. */
+
+static void
+expand_memory_copy (gimple *stmt, hsa_bb *hbb, enum built_in_function builtin)
+{
+ tree byte_size = gimple_call_arg (stmt, 2);
+
+ if (!tree_fits_uhwi_p (byte_size))
+ {
+ gen_hsa_insns_for_direct_call (stmt, hbb);
+ return;
+ }
+
+ unsigned HOST_WIDE_INT n = tree_to_uhwi (byte_size);
+
+ if (n > HSA_MEMORY_BUILTINS_LIMIT)
+ {
+ gen_hsa_insns_for_direct_call (stmt, hbb);
+ return;
+ }
+
+ tree dst = gimple_call_arg (stmt, 0);
+ tree src = gimple_call_arg (stmt, 1);
+
+ hsa_op_address *dst_addr = get_address_from_value (dst, hbb);
+ hsa_op_address *src_addr = get_address_from_value (src, hbb);
+
+ /* As gen_hsa_memory_copy relies on memory alignment
+ greater or equal to 8 bytes, we need to verify the alignment. */
+ BrigType16_t addrtype = hsa_get_segment_addr_type (BRIG_SEGMENT_FLAT);
+ hsa_op_reg *src_addr_reg = new hsa_op_reg (addrtype);
+ hsa_op_reg *dst_addr_reg = new hsa_op_reg (addrtype);
+
+ convert_addr_to_flat_segment (src_addr, src_addr_reg, hbb);
+ convert_addr_to_flat_segment (dst_addr, dst_addr_reg, hbb);
+
+ /* Process BIT OR for source and destination addresses. */
+ hsa_op_reg *or_reg = new hsa_op_reg (addrtype);
+ gen_hsa_binary_operation (BRIG_OPCODE_OR, or_reg, src_addr_reg,
+ dst_addr_reg, hbb);
+
+ /* Process BIT AND with 0x7 to identify the desired alignment
+ of 8 bytes. */
+ hsa_op_reg *masked = new hsa_op_reg (addrtype);
+
+ gen_hsa_binary_operation (BRIG_OPCODE_AND, masked, or_reg,
+ new hsa_op_immed (7, addrtype), hbb);
+
+ hsa_op_reg *misaligned = new hsa_op_reg (BRIG_TYPE_B1);
+ hbb->append_insn (new hsa_insn_cmp (BRIG_COMPARE_NE, misaligned->m_type,
+ misaligned, masked,
+ new hsa_op_immed (0, masked->m_type)));
+
+ hsa_bb *native_impl_bb
+ = expand_string_operation_builtin (stmt, hbb, misaligned);
+
+ gen_hsa_memory_copy (native_impl_bb, dst_addr, src_addr, n, BRIG_ALIGNMENT_8);
+ hsa_bb *merge_bb
+ = hsa_init_new_bb (EDGE_SUCC (native_impl_bb->m_bb, 0)->dest);
+ expand_lhs_of_string_op (stmt, n, merge_bb, builtin);
+}
+
+
+/* Expand a memory set BUILTIN (BUILT_IN_MEMSET, BUILT_IN_BZERO) from
+ a gimple STMT and store all necessary instruction to HBB basic block.
+ The operation set N bytes with a CONSTANT value. */
+
+static void
+expand_memory_set (gimple *stmt, unsigned HOST_WIDE_INT n,
+ unsigned HOST_WIDE_INT constant, hsa_bb *hbb,
+ enum built_in_function builtin)
+{
+ tree dst = gimple_call_arg (stmt, 0);
+ hsa_op_address *dst_addr = get_address_from_value (dst, hbb);
+
+ /* As gen_hsa_memory_set relies on memory alignment
+ greater or equal to 8 bytes, we need to verify the alignment. */
+ BrigType16_t addrtype = hsa_get_segment_addr_type (BRIG_SEGMENT_FLAT);
+ hsa_op_reg *dst_addr_reg = new hsa_op_reg (addrtype);
+ convert_addr_to_flat_segment (dst_addr, dst_addr_reg, hbb);
+
+ /* Process BIT AND with 0x7 to identify the desired alignment
+ of 8 bytes. */
+ hsa_op_reg *masked = new hsa_op_reg (addrtype);
+
+ gen_hsa_binary_operation (BRIG_OPCODE_AND, masked, dst_addr_reg,
+ new hsa_op_immed (7, addrtype), hbb);
+
+ hsa_op_reg *misaligned = new hsa_op_reg (BRIG_TYPE_B1);
+ hbb->append_insn (new hsa_insn_cmp (BRIG_COMPARE_NE, misaligned->m_type,
+ misaligned, masked,
+ new hsa_op_immed (0, masked->m_type)));
+
+ hsa_bb *native_impl_bb
+ = expand_string_operation_builtin (stmt, hbb, misaligned);
+
+ gen_hsa_memory_set (native_impl_bb, dst_addr, constant, n, BRIG_ALIGNMENT_8);
+ hsa_bb *merge_bb
+ = hsa_init_new_bb (EDGE_SUCC (native_impl_bb->m_bb, 0)->dest);
+ expand_lhs_of_string_op (stmt, n, merge_bb, builtin);
+}
+
/* Return string for MEMMODEL. */
static const char *
@@ -4554,8 +4845,13 @@ gen_hsa_ternary_atomic_for_builtin (bool ret_orig,
hsa_op_address *addr;
addr = get_address_from_value (gimple_call_arg (stmt, 0), hbb);
- /* TODO: Warn if addr has private segment, because the finalizer will not
- accept that (and it does not make much sense). */
+ if (addr->m_symbol && addr->m_symbol->m_segment == BRIG_SEGMENT_PRIVATE)
+ {
+ HSA_SORRY_AT (gimple_location (stmt),
+ "HSA does not implement atomic operations in private "
+ "segment");
+ return;
+ }
hsa_op_base *op = hsa_reg_or_immed_for_gimple_op (gimple_call_arg (stmt, 1),
hbb);
@@ -4735,8 +5031,6 @@ gen_hsa_insn_for_internal_fn_call (gcall *stmt, hsa_bb *hbb)
}
}
-#define HSA_MEMORY_BUILTINS_LIMIT 128
-
/* Generate HSA instructions for the given call statement STMT. Instructions
will be appended to HBB. */
@@ -5093,58 +5387,11 @@ gen_hsa_insns_for_call (gimple *stmt, hsa_bb *hbb)
case BUILT_IN_MEMCPY:
case BUILT_IN_MEMPCPY:
{
- tree byte_size = gimple_call_arg (stmt, 2);
-
- if (!tree_fits_uhwi_p (byte_size))
- {
- gen_hsa_insns_for_direct_call (stmt, hbb);
- return;
- }
-
- unsigned n = tree_to_uhwi (byte_size);
-
- if (n > HSA_MEMORY_BUILTINS_LIMIT)
- {
- gen_hsa_insns_for_direct_call (stmt, hbb);
- return;
- }
-
- tree dst = gimple_call_arg (stmt, 0);
- tree src = gimple_call_arg (stmt, 1);
-
- hsa_op_address *dst_addr = get_address_from_value (dst, hbb);
- hsa_op_address *src_addr = get_address_from_value (src, hbb);
-
- gen_hsa_memory_copy (hbb, dst_addr, src_addr, n);
-
- tree lhs = gimple_call_lhs (stmt);
- if (lhs)
- {
- hsa_op_reg *lhs_reg = hsa_cfun->reg_for_gimple_ssa (lhs);
- hsa_op_with_type *dst_reg = hsa_reg_or_immed_for_gimple_op (dst,
- hbb);
- hsa_op_with_type *tmp;
-
- if (builtin == BUILT_IN_MEMPCPY)
- {
- tmp = new hsa_op_reg (dst_reg->m_type);
- hsa_insn_basic *add
- = new hsa_insn_basic (3, BRIG_OPCODE_ADD, tmp->m_type,
- tmp, dst_reg,
- new hsa_op_immed (n, dst_reg->m_type));
- hbb->append_insn (add);
- }
- else
- tmp = dst_reg;
-
- hsa_build_append_simple_mov (lhs_reg, tmp, hbb);
- }
-
+ expand_memory_copy (stmt, hbb, builtin);
break;
}
case BUILT_IN_MEMSET:
{
- tree dst = gimple_call_arg (stmt, 0);
tree c = gimple_call_arg (stmt, 1);
if (TREE_CODE (c) != INTEGER_CST)
@@ -5161,7 +5408,7 @@ gen_hsa_insns_for_call (gimple *stmt, hsa_bb *hbb)
return;
}
- unsigned n = tree_to_uhwi (byte_size);
+ unsigned HOST_WIDE_INT n = tree_to_uhwi (byte_size);
if (n > HSA_MEMORY_BUILTINS_LIMIT)
{
@@ -5169,22 +5416,15 @@ gen_hsa_insns_for_call (gimple *stmt, hsa_bb *hbb)
return;
}
- hsa_op_address *dst_addr;
- dst_addr = get_address_from_value (dst, hbb);
unsigned HOST_WIDE_INT constant
= tree_to_uhwi (fold_convert (unsigned_char_type_node, c));
- gen_hsa_memory_set (hbb, dst_addr, constant, n);
-
- tree lhs = gimple_call_lhs (stmt);
- if (lhs)
- gen_hsa_insns_for_single_assignment (lhs, dst, hbb);
+ expand_memory_set (stmt, n, constant, hbb, builtin);
break;
}
case BUILT_IN_BZERO:
{
- tree dst = gimple_call_arg (stmt, 0);
tree byte_size = gimple_call_arg (stmt, 1);
if (!tree_fits_uhwi_p (byte_size))
@@ -5193,7 +5433,7 @@ gen_hsa_insns_for_call (gimple *stmt, hsa_bb *hbb)
return;
}
- unsigned n = tree_to_uhwi (byte_size);
+ unsigned HOST_WIDE_INT n = tree_to_uhwi (byte_size);
if (n > HSA_MEMORY_BUILTINS_LIMIT)
{
@@ -5201,10 +5441,7 @@ gen_hsa_insns_for_call (gimple *stmt, hsa_bb *hbb)
return;
}
- hsa_op_address *dst_addr;
- dst_addr = get_address_from_value (dst, hbb);
-
- gen_hsa_memory_set (hbb, dst_addr, 0, n);
+ expand_memory_set (stmt, n, 0, hbb, builtin);
break;
}
@@ -5327,7 +5564,8 @@ gen_hsa_phi_from_gimple_phi (gimple *phi_stmt, hsa_bb *hbb)
hsa_op_address *addr = gen_hsa_addr (TREE_OPERAND (op, 0),
hbb_src);
- hsa_op_reg *dest = new hsa_op_reg (BRIG_TYPE_U64);
+ hsa_op_reg *dest
+ = new hsa_op_reg (hsa_get_segment_addr_type (BRIG_SEGMENT_FLAT));
hsa_insn_basic *insn
= new hsa_insn_basic (2, BRIG_OPCODE_LDA, BRIG_TYPE_U64,
dest, addr);
@@ -5485,7 +5723,7 @@ gen_body_from_gimple ()
gen_hsa_phi_from_gimple_phi (gsi_stmt (gsi), hbb);
}
- if (dump_file)
+ if (dump_file && (dump_flags & TDF_DETAILS))
{
fprintf (dump_file, "------- Generated SSA form -------\n");
dump_hsa_cfun (dump_file);
@@ -5568,9 +5806,11 @@ gen_function_def_parameters ()
private_arg = hsa_cfun->create_hsa_temporary (arg->m_type);
private_arg->fillup_for_decl (parm);
+ BrigAlignment8_t align = MIN (arg->m_align, private_arg->m_align);
+
hsa_op_address *private_arg_addr = new hsa_op_address (private_arg);
gen_hsa_memory_copy (prologue, private_arg_addr, parm_addr,
- arg->total_byte_size ());
+ arg->total_byte_size (), align);
}
else
private_arg = arg;
@@ -5753,13 +5993,13 @@ LD: hard_work_3 ();
*/
-static void
-convert_switch_statements ()
+static bool
+convert_switch_statements (void)
{
function *func = DECL_STRUCT_FUNCTION (current_function_decl);
basic_block bb;
- bool need_update = false;
+ bool modified_cfg = false;
FOR_EACH_BB_FN (bb, func)
{
@@ -5777,7 +6017,7 @@ convert_switch_statements ()
if (transformable_switch_to_sbr_p (s))
continue;
- need_update = true;
+ modified_cfg = true;
unsigned labels = gimple_switch_num_labels (s);
tree index = gimple_switch_index (s);
@@ -5944,11 +6184,7 @@ convert_switch_statements ()
if (dump_file)
dump_function_to_file (current_function_decl, dump_file, TDF_DETAILS);
- if (need_update)
- {
- free_dominance_info (CDI_DOMINATORS);
- calculate_dominance_info (CDI_DOMINATORS);
- }
+ return modified_cfg;
}
/* Expand builtins that can't be handled by HSA back-end. */
@@ -6048,9 +6284,11 @@ generate_hsa (bool kernel)
if (hsa_num_threads == NULL)
emit_hsa_module_variables ();
+ bool modified_cfg = convert_switch_statements ();
/* Initialize hsa_cfun. */
hsa_cfun = new hsa_function_representation (cfun->decl, kernel,
- SSANAMES (cfun)->length ());
+ SSANAMES (cfun)->length (),
+ modified_cfg);
hsa_cfun->init_extra_bbs ();
if (flag_tm)
@@ -6088,21 +6326,22 @@ generate_hsa (bool kernel)
s->m_gridified_kernel_p);
}
-#ifdef ENABLE_CHECKING
- for (unsigned i = 0; i < hsa_cfun->m_ssa_map.length (); i++)
- if (hsa_cfun->m_ssa_map[i])
- hsa_cfun->m_ssa_map[i]->verify_ssa ();
-
- basic_block bb;
- FOR_EACH_BB_FN (bb, cfun)
+ if (flag_checking)
{
- hsa_bb *hbb = hsa_bb_for_bb (bb);
+ for (unsigned i = 0; i < hsa_cfun->m_ssa_map.length (); i++)
+ if (hsa_cfun->m_ssa_map[i])
+ hsa_cfun->m_ssa_map[i]->verify_ssa ();
- for (hsa_insn_basic *insn = hbb->m_first_insn; insn; insn = insn->m_next)
- insn->verify ();
- }
+ basic_block bb;
+ FOR_EACH_BB_FN (bb, cfun)
+ {
+ hsa_bb *hbb = hsa_bb_for_bb (bb);
-#endif
+ for (hsa_insn_basic *insn = hbb->m_first_insn; insn;
+ insn = insn->m_next)
+ insn->verify ();
+ }
+ }
hsa_regalloc ();
hsa_brig_emit_function ();
@@ -6154,7 +6393,6 @@ pass_gen_hsail::execute (function *)
hsa_function_summary *s
= hsa_summaries->get (cgraph_node::get_create (current_function_decl));
- convert_switch_statements ();
expand_builtins ();
generate_hsa (s->m_kind == HSA_KERNEL);
TREE_ASM_WRITTEN (current_function_decl) = 1;
diff --git a/gcc/hsa-regalloc.c b/gcc/hsa-regalloc.c
index f8e83ecf..50bf511 100644
--- a/gcc/hsa-regalloc.c
+++ b/gcc/hsa-regalloc.c
@@ -580,10 +580,9 @@ linear_scan_regalloc (struct m_reg_class_desc *classes)
/* Sort all intervals by increasing start point. */
gcc_assert (ind2reg.length () == (size_t) hsa_cfun->m_reg_count);
-#ifdef ENABLE_CHECKING
- for (unsigned i = 0; i < ind2reg.length (); i++)
- gcc_assert (ind2reg[i]);
-#endif
+ if (flag_checking)
+ for (unsigned i = 0; i < ind2reg.length (); i++)
+ gcc_assert (ind2reg[i]);
ind2reg.qsort (cmp_begin);
for (i = 0; i < 4; i++)
@@ -606,7 +605,7 @@ linear_scan_regalloc (struct m_reg_class_desc *classes)
spill_at_interval (reg, active);
/* Some interesting dumping as we go. */
- if (dump_file)
+ if (dump_file && (dump_flags & TDF_DETAILS))
{
fprintf (dump_file, " reg%d: [%5d, %5d)->",
reg->m_order, reg->m_lr_begin, reg->m_lr_end);
@@ -638,7 +637,7 @@ linear_scan_regalloc (struct m_reg_class_desc *classes)
BITMAP_FREE (work);
free (bbs);
- if (dump_file)
+ if (dump_file && (dump_flags & TDF_DETAILS))
{
fprintf (dump_file, "------- After liveness: -------\n");
dump_hsa_cfun_regalloc (dump_file);
@@ -701,9 +700,10 @@ regalloc (void)
void
hsa_regalloc (void)
{
+ hsa_cfun->update_dominance ();
naive_outof_ssa ();
- if (dump_file)
+ if (dump_file && (dump_flags & TDF_DETAILS))
{
fprintf (dump_file, "------- After out-of-SSA: -------\n");
dump_hsa_cfun (dump_file);
@@ -711,7 +711,7 @@ hsa_regalloc (void)
regalloc ();
- if (dump_file)
+ if (dump_file && (dump_flags & TDF_DETAILS))
{
fprintf (dump_file, "------- After register allocation: -------\n");
dump_hsa_cfun (dump_file);
diff --git a/gcc/hsa.c b/gcc/hsa.c
index f0b3205..ff97870 100644
--- a/gcc/hsa.c
+++ b/gcc/hsa.c
@@ -39,6 +39,7 @@ along with GCC; see the file COPYING3. If not see
#include "hsa.h"
#include "internal-fn.h"
#include "ctype.h"
+#include "builtins.h"
/* Structure containing intermediate HSA representation of the generated
function. */
@@ -472,6 +473,22 @@ hsa_bittype_for_type (BrigType16_t t)
return hsa_bittype_for_bitsize (hsa_type_bit_size (t));
}
+/* Return HSA unsigned integer type with the same size as the type T. */
+
+BrigType16_t
+hsa_unsigned_type_for_type (BrigType16_t t)
+{
+ return hsa_uint_for_bitsize (hsa_type_bit_size (t));
+}
+
+/* Return true if TYPE is a packed HSA type. */
+
+bool
+hsa_type_packed_p (BrigType16_t type)
+{
+ return (type & BRIG_TYPE_PACK_MASK) != BRIG_TYPE_PACK_NONE;
+}
+
/* Return true if and only if TYPE is a floating point number type. */
bool
@@ -554,6 +571,25 @@ hsa_alignment_encoding (unsigned n)
}
}
+/* Return HSA alignment encoding alignment of T got
+ by get_object_alignment. */
+
+BrigAlignment8_t
+hsa_object_alignment (tree t)
+{
+ return hsa_alignment_encoding (get_object_alignment (t));
+}
+
+/* Return byte alignment for given BrigAlignment8_t value. */
+
+unsigned
+hsa_byte_alignment (BrigAlignment8_t alignment)
+{
+ gcc_assert (alignment != BRIG_ALIGNMENT_NONE);
+
+ return 1 << (alignment - 1);
+}
+
/* Return natural alignment of HSA TYPE. */
BrigAlignment8_t
@@ -696,6 +732,31 @@ hsa_add_kernel_dependency (tree caller, const char *called_function)
s->safe_push (called_function);
}
+/* Expansion to HSA needs a few gc roots to hold types, constructors etc. In
+ order to minimize the number of GTY roots, we'll root them all in the
+ following array. The individual elements should only be accessed by the
+ very simple getters (of a pointer-to-tree) below. */
+
+static GTY(()) tree hsa_tree_gt_roots[3];
+
+tree *
+hsa_get_ctor_statements (void)
+{
+ return &hsa_tree_gt_roots[0];
+}
+
+tree *
+hsa_get_dtor_statements (void)
+{
+ return &hsa_tree_gt_roots[1];
+}
+
+tree *
+hsa_get_kernel_dispatch_type (void)
+{
+ return &hsa_tree_gt_roots[2];
+}
+
/* Modify the name P in-place so that it is a valid HSA identifier. */
void
diff --git a/gcc/hsa.h b/gcc/hsa.h
index f0436f3..1b57a3c 100644
--- a/gcc/hsa.h
+++ b/gcc/hsa.h
@@ -60,7 +60,8 @@ struct hsa_symbol
/* Constructor. */
hsa_symbol (BrigType16_t type, BrigSegment8_t segment,
BrigLinkage8_t linkage, bool global_scope_p = false,
- BrigAllocation allocation = BRIG_ALLOCATION_AUTOMATIC);
+ BrigAllocation allocation = BRIG_ALLOCATION_AUTOMATIC,
+ BrigAlignment8_t align = BRIG_ALIGNMENT_8);
/* Return total size of the symbol. */
unsigned HOST_WIDE_INT total_byte_size ();
@@ -110,6 +111,12 @@ struct hsa_symbol
/* Symbol allocation. */
BrigAllocation m_allocation;
+ /* Flag used for global variables if a variable is already emitted or not. */
+ bool m_emitted_to_brig;
+
+ /* Alignment of the symbol. */
+ BrigAlignment8_t m_align;
+
private:
/* Default constructor. */
hsa_symbol ();
@@ -168,25 +175,23 @@ public:
~hsa_op_immed ();
void set_type (BrigKind16_t t);
+ /* Function returns pointer to a buffer that contains binary representation
+ of the immeadiate value. The buffer has length of BRIG_SIZE and
+ a caller is responsible for deallocation of the buffer. */
+ char *emit_to_buffer (unsigned *brig_size);
+
/* Value as represented by middle end. */
tree m_tree_value;
/* Integer value representation. */
HOST_WIDE_INT m_int_value;
- /* Brig data representation. */
- char *m_brig_repr;
-
- /* Brig data representation size in bytes. */
- unsigned m_brig_repr_size;
-
private:
/* Make the default constructor inaccessible. */
hsa_op_immed ();
/* All objects are deallocated by destroying their pool, so make delete
inaccessible too. */
void operator delete (void *) {}
- void emit_to_buffer (tree value);
};
/* Report whether or not P is a an immediate operand. */
@@ -199,6 +204,17 @@ is_a_helper <hsa_op_immed *>::test (hsa_op_base *p)
return p->m_kind == BRIG_KIND_OPERAND_CONSTANT_BYTES;
}
+/* Likewise, but for a more specified base. */
+
+template <>
+template <>
+inline bool
+is_a_helper <hsa_op_immed *>::test (hsa_op_with_type *p)
+{
+ return p->m_kind == BRIG_KIND_OPERAND_CONSTANT_BYTES;
+}
+
+
/* HSA register operand. */
class hsa_op_reg : public hsa_op_with_type
@@ -548,9 +564,6 @@ public:
/* Jump table. */
vec <basic_block> m_jump_table;
- /* Default label basic block. */
- basic_block m_default_bb;
-
/* Code list for label references. */
hsa_op_code_list *m_label_code_list;
@@ -1105,7 +1118,8 @@ class hsa_function_representation
{
public:
hsa_function_representation (tree fdecl, bool kernel_p,
- unsigned ssa_names_count);
+ unsigned ssa_names_count,
+ bool modified_cfg = false);
hsa_function_representation (hsa_internal_fn *fn);
~hsa_function_representation ();
@@ -1121,6 +1135,9 @@ public:
so we need hsa_bb instances of them. */
void init_extra_bbs ();
+ /* Update CFG dominators if m_modified_cfg flag is set. */
+ void update_dominance ();
+
/* Return linkage of the representation. */
BrigLinkage8_t get_linkage ();
@@ -1201,6 +1218,9 @@ public:
/* SSA names mapping. */
vec <hsa_op_reg_p> m_ssa_map;
+
+ /* Flag whether a function needs update of dominators before RA. */
+ bool m_modified_cfg;
};
enum hsa_function_kind
@@ -1326,11 +1346,15 @@ BrigType16_t hsa_bittype_for_bitsize (unsigned bitsize);
BrigType16_t hsa_uint_for_bitsize (unsigned bitsize);
BrigType16_t hsa_float_for_bitsize (unsigned bitsize);
BrigType16_t hsa_bittype_for_type (BrigType16_t t);
+BrigType16_t hsa_unsigned_type_for_type (BrigType16_t t);
+bool hsa_type_packed_p (BrigType16_t type);
bool hsa_type_float_p (BrigType16_t type);
bool hsa_type_integer_p (BrigType16_t type);
bool hsa_btype_p (BrigType16_t type);
BrigAlignment8_t hsa_alignment_encoding (unsigned n);
BrigAlignment8_t hsa_natural_alignment (BrigType16_t type);
+BrigAlignment8_t hsa_object_alignment (tree t);
+unsigned hsa_byte_alignment (BrigAlignment8_t alignment);
void hsa_destroy_operand (hsa_op_base *op);
void hsa_destroy_insn (hsa_insn_basic *insn);
void hsa_add_kern_decl_mapping (tree decl, char *name, unsigned, bool);
@@ -1340,6 +1364,9 @@ char *hsa_get_decl_kernel_mapping_name (unsigned i);
unsigned hsa_get_decl_kernel_mapping_omp_size (unsigned i);
bool hsa_get_decl_kernel_mapping_gridified (unsigned i);
void hsa_free_decl_kernel_mapping (void);
+tree *hsa_get_ctor_statements (void);
+tree *hsa_get_dtor_statements (void);
+tree *hsa_get_kernel_dispatch_type (void);
void hsa_add_kernel_dependency (tree caller, const char *called_function);
void hsa_sanitize_name (char *p);
char *hsa_brig_function_name (const char *p);
diff --git a/gcc/ipa-chkp.c b/gcc/ipa-chkp.c
index 4a6b43e..5f5df64 100644
--- a/gcc/ipa-chkp.c
+++ b/gcc/ipa-chkp.c
@@ -470,7 +470,7 @@ chkp_instrumentable_p (tree fndecl)
return (!lookup_attribute ("bnd_legacy", DECL_ATTRIBUTES (fndecl))
&& (!flag_chkp_instrument_marked_only
|| lookup_attribute ("bnd_instrument", DECL_ATTRIBUTES (fndecl)))
- && (!fn || !copy_forbidden (fn, fndecl)));
+ && (!fn || !copy_forbidden (fn)));
}
/* Return clone created for instrumentation of NODE or NULL. */
@@ -644,22 +644,22 @@ chkp_versioning (void)
FOR_EACH_DEFINED_FUNCTION (node)
{
+ tree decl = node->decl;
if (!node->instrumentation_clone
&& !node->instrumented_version
&& !node->alias
&& !node->thunk.thunk_p
- && (!DECL_BUILT_IN (node->decl)
- || (DECL_BUILT_IN_CLASS (node->decl) == BUILT_IN_NORMAL
- && DECL_FUNCTION_CODE (node->decl) < BEGIN_CHKP_BUILTINS)))
+ && (!DECL_BUILT_IN (decl)
+ || (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
+ && DECL_FUNCTION_CODE (decl) < BEGIN_CHKP_BUILTINS)))
{
- if (chkp_instrumentable_p (node->decl))
- chkp_maybe_create_clone (node->decl);
- else if ((reason = copy_forbidden (DECL_STRUCT_FUNCTION (node->decl),
- node->decl)))
+ if (chkp_instrumentable_p (decl))
+ chkp_maybe_create_clone (decl);
+ else if ((reason = copy_forbidden (DECL_STRUCT_FUNCTION (decl))))
{
- if (warning_at (DECL_SOURCE_LOCATION (node->decl), OPT_Wchkp,
+ if (warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wchkp,
"function cannot be instrumented"))
- inform (DECL_SOURCE_LOCATION (node->decl), reason, node->decl);
+ inform (DECL_SOURCE_LOCATION (decl), reason, decl);
}
}
}
diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c
index b2036d5..2cf018b 100644
--- a/gcc/ipa-devirt.c
+++ b/gcc/ipa-devirt.c
@@ -393,7 +393,7 @@ odr_vtable_hasher::hash (const odr_type_d *odr_type)
When STRICT is true, we compare types by their names for purposes of
ODR violation warnings. When strict is false, we consider variants
- equivalent, becuase it is all that matters for devirtualization machinery.
+ equivalent, because it is all that matters for devirtualization machinery.
*/
bool
@@ -705,6 +705,29 @@ odr_subtypes_equivalent_p (tree t1, tree t2,
return odr_types_equivalent_p (t1, t2, false, NULL, visited, loc1, loc2);
}
+/* Return true if DECL1 and DECL2 are identical methods. Consider
+ name equivalent to name.localalias.xyz. */
+
+static bool
+methods_equal_p (tree decl1, tree decl2)
+{
+ if (DECL_ASSEMBLER_NAME (decl1) == DECL_ASSEMBLER_NAME (decl2))
+ return true;
+ const char sep = symbol_table::symbol_suffix_separator ();
+
+ const char *name1 = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl1));
+ const char *ptr1 = strchr (name1, sep);
+ int len1 = ptr1 ? ptr1 - name1 : strlen (name1);
+
+ const char *name2 = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl2));
+ const char *ptr2 = strchr (name2, sep);
+ int len2 = ptr2 ? ptr2 - name2 : strlen (name2);
+
+ if (len1 != len2)
+ return false;
+ return !strncmp (name1, name2, len1);
+}
+
/* Compare two virtual tables, PREVAILING and VTABLE and output ODR
violation warnings. */
@@ -758,8 +781,8 @@ compare_virtual_tables (varpool_node *prevailing, varpool_node *vtable)
accept the other case. */
while (!end2
&& (end1
- || (DECL_ASSEMBLER_NAME (ref1->referred->decl)
- != DECL_ASSEMBLER_NAME (ref2->referred->decl)
+ || (methods_equal_p (ref1->referred->decl,
+ ref2->referred->decl)
&& TREE_CODE (ref1->referred->decl) == FUNCTION_DECL))
&& TREE_CODE (ref2->referred->decl) != FUNCTION_DECL)
{
@@ -785,8 +808,7 @@ compare_virtual_tables (varpool_node *prevailing, varpool_node *vtable)
}
while (!end1
&& (end2
- || (DECL_ASSEMBLER_NAME (ref2->referred->decl)
- != DECL_ASSEMBLER_NAME (ref1->referred->decl)
+ || (methods_equal_p (ref2->referred->decl, ref1->referred->decl)
&& TREE_CODE (ref2->referred->decl) == FUNCTION_DECL))
&& TREE_CODE (ref1->referred->decl) != FUNCTION_DECL)
{
@@ -823,8 +845,7 @@ compare_virtual_tables (varpool_node *prevailing, varpool_node *vtable)
if (!end1 && !end2)
{
- if (DECL_ASSEMBLER_NAME (ref1->referred->decl)
- == DECL_ASSEMBLER_NAME (ref2->referred->decl))
+ if (methods_equal_p (ref1->referred->decl, ref2->referred->decl))
continue;
class_type->odr_violated = true;
@@ -920,11 +941,14 @@ compare_virtual_tables (varpool_node *prevailing, varpool_node *vtable)
"unit");
gcc_assert (TREE_CODE (ref2->referred->decl)
== FUNCTION_DECL);
- inform (DECL_SOURCE_LOCATION (ref1->referred->decl),
- "virtual method %qD", ref1->referred->decl);
- inform (DECL_SOURCE_LOCATION (ref2->referred->decl),
+ inform (DECL_SOURCE_LOCATION
+ (ref1->referred->ultimate_alias_target ()->decl),
+ "virtual method %qD",
+ ref1->referred->ultimate_alias_target ()->decl);
+ inform (DECL_SOURCE_LOCATION
+ (ref2->referred->ultimate_alias_target ()->decl),
"ought to match virtual method %qD but does not",
- ref2->referred->decl);
+ ref2->referred->ultimate_alias_target ()->decl);
}
else
inform (DECL_SOURCE_LOCATION
@@ -2414,10 +2438,14 @@ maybe_record_node (vec <cgraph_node *> &nodes,
{
gcc_assert (!target_node->global.inlined_to);
gcc_assert (target_node->real_symbol_p ());
+ /* When sanitizing, do not assume that __cxa_pure_virtual is not called
+ by valid program. */
+ if (flag_sanitize & SANITIZE_UNREACHABLE)
+ ;
/* Only add pure virtual if it is the only possible target. This way
we will preserve the diagnostics about pure virtual called in many
cases without disabling optimization in other. */
- if (pure_virtual)
+ else if (pure_virtual)
{
if (nodes.length ())
return;
@@ -3177,10 +3205,11 @@ possible_polymorphic_call_targets (tree otr_type,
if (!outer_type->all_derivations_known)
{
- if (!speculative && final_warning_records)
+ if (!speculative && final_warning_records
+ && nodes.length () == 1
+ && TREE_CODE (TREE_TYPE (nodes[0]->decl)) == METHOD_TYPE)
{
if (complete
- && nodes.length () == 1
&& warn_suggest_final_types
&& !outer_type->derived_types.length ())
{
@@ -3196,7 +3225,6 @@ possible_polymorphic_call_targets (tree otr_type,
}
if (complete
&& warn_suggest_final_methods
- && nodes.length () == 1
&& types_same_for_odr (DECL_CONTEXT (nodes[0]->decl),
outer_type->type))
{
@@ -3350,8 +3378,7 @@ possible_polymorphic_call_target_p (tree otr_type,
bool final;
if (TREE_CODE (TREE_TYPE (n->decl)) == FUNCTION_TYPE
- && ((fcode = DECL_FUNCTION_CODE (n->decl))
- == BUILT_IN_UNREACHABLE
+ && ((fcode = DECL_FUNCTION_CODE (n->decl)) == BUILT_IN_UNREACHABLE
|| fcode == BUILT_IN_TRAP))
return true;
diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c
index ef04c55..aa6589c 100644
--- a/gcc/ipa-icf.c
+++ b/gcc/ipa-icf.c
@@ -1697,6 +1697,11 @@ sem_function::parse (cgraph_node *node, bitmap_obstack *stack)
if (lookup_attribute_by_prefix ("omp ", DECL_ATTRIBUTES (node->decl)) != NULL)
return NULL;
+ /* PR ipa/70306. */
+ if (DECL_STATIC_CONSTRUCTOR (node->decl)
+ || DECL_STATIC_DESTRUCTOR (node->decl))
+ return NULL;
+
sem_function *f = new sem_function (node, 0, stack);
f->init ();
@@ -2209,6 +2214,16 @@ sem_variable::merge (sem_item *alias_item)
"adress of original and alias may be compared.\n\n");
return false;
}
+
+ if (DECL_ALIGN (original->decl) < DECL_ALIGN (alias->decl))
+ {
+ if (dump_file)
+ fprintf (dump_file, "Not unifying; "
+ "original and alias have incompatible alignments\n\n");
+
+ return false;
+ }
+
if (DECL_COMDAT_GROUP (original->decl) != DECL_COMDAT_GROUP (alias->decl))
{
if (dump_file)
diff --git a/gcc/ipa-inline-transform.c b/gcc/ipa-inline-transform.c
index 759ab78..f966fb0 100644
--- a/gcc/ipa-inline-transform.c
+++ b/gcc/ipa-inline-transform.c
@@ -301,9 +301,11 @@ inline_call (struct cgraph_edge *e, bool update_original,
struct cgraph_node *callee = e->callee->ultimate_alias_target ();
bool new_edges_found = false;
+ int estimated_growth = 0;
+ if (! update_overall_summary)
+ estimated_growth = estimate_edge_growth (e);
/* This is used only for assert bellow. */
#if 0
- int estimated_growth = estimate_edge_growth (e);
bool predicated = inline_edge_summary (e)->predicate != NULL;
#endif
@@ -327,8 +329,7 @@ inline_call (struct cgraph_edge *e, bool update_original,
{
struct gcc_options opts = global_options;
- cl_optimization_restore (&opts,
- TREE_OPTIMIZATION (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (to->decl)));
+ cl_optimization_restore (&opts, opts_for_fn (to->decl));
opts.x_flag_strict_aliasing = false;
if (dump_file)
fprintf (dump_file, "Dropping flag_strict_aliasing on %s:%i\n",
@@ -373,7 +374,13 @@ inline_call (struct cgraph_edge *e, bool update_original,
new_edges_found = ipa_propagate_indirect_call_infos (curr, new_edges);
check_speculations (e->callee);
if (update_overall_summary)
- inline_update_overall_summary (to);
+ inline_update_overall_summary (to);
+ else
+ /* Update self size by the estimate so overall function growth limits
+ work for further inlining into this function. Before inlining
+ the function we inlined to again we expect the caller to update
+ the overall summary. */
+ inline_summaries->get (to)->size += estimated_growth;
new_size = inline_summaries->get (to)->size;
if (callee->calls_comdat_local)
diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c
index 07e661e..55899ef 100644
--- a/gcc/ipa-inline.c
+++ b/gcc/ipa-inline.c
@@ -2163,7 +2163,8 @@ flatten_function (struct cgraph_node *node, bool early)
recursion. */
static bool
-inline_to_all_callers (struct cgraph_node *node, void *data)
+inline_to_all_callers_1 (struct cgraph_node *node, void *data,
+ hash_set<cgraph_node *> *callers)
{
int *num_calls = (int *)data;
bool callee_removed = false;
@@ -2193,7 +2194,10 @@ inline_to_all_callers (struct cgraph_node *node, void *data)
inline_summaries->get (node->callers->caller)->size);
}
- inline_call (node->callers, true, NULL, NULL, true, &callee_removed);
+ /* Remember which callers we inlined to, delaying updating the
+ overall summary. */
+ callers->add (node->callers->caller);
+ inline_call (node->callers, true, NULL, NULL, false, &callee_removed);
if (dump_file)
fprintf (dump_file,
" Inlined into %s which now has %i size\n",
@@ -2211,6 +2215,23 @@ inline_to_all_callers (struct cgraph_node *node, void *data)
return false;
}
+/* Wrapper around inline_to_all_callers_1 doing delayed overall summary
+ update. */
+
+static bool
+inline_to_all_callers (struct cgraph_node *node, void *data)
+{
+ hash_set<cgraph_node *> callers;
+ bool res = inline_to_all_callers_1 (node, data, &callers);
+ /* Perform the delayed update of the overall summary of all callers
+ processed. This avoids quadratic behavior in the cases where
+ we have a lot of calls to the same function. */
+ for (hash_set<cgraph_node *>::iterator i = callers.begin ();
+ i != callers.end (); ++i)
+ inline_update_overall_summary (*i);
+ return res;
+}
+
/* Output overall time estimate. */
static void
dump_overall_stats (void)
@@ -2590,10 +2611,13 @@ early_inline_small_functions (struct cgraph_node *node)
fprintf (dump_file, " Inlining %s into %s.\n",
xstrdup_for_dump (callee->name ()),
xstrdup_for_dump (e->caller->name ()));
- inline_call (e, true, NULL, NULL, true);
+ inline_call (e, true, NULL, NULL, false);
inlined = true;
}
+ if (inlined)
+ inline_update_overall_summary (node);
+
return inlined;
}
@@ -2664,7 +2688,7 @@ early_inliner (function *fun)
/* If some always_inline functions was inlined, apply the changes.
This way we will not account always inline into growth limits and
moreover we will inline calls from always inlines that we skipped
- previously becuase of conditional above. */
+ previously because of conditional above. */
if (inlined)
{
timevar_push (TV_INTEGRATION);
diff --git a/gcc/ipa-polymorphic-call.c b/gcc/ipa-polymorphic-call.c
index 91c41f9..0ebbd4a 100644
--- a/gcc/ipa-polymorphic-call.c
+++ b/gcc/ipa-polymorphic-call.c
@@ -38,6 +38,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-dfa.h"
#include "gimple-pretty-print.h"
#include "tree-into-ssa.h"
+#include "params.h"
/* Return true when TYPE contains an polymorphic type and thus is interesting
for devirtualization machinery. */
@@ -812,7 +813,7 @@ walk_ssa_copies (tree op, hash_set<tree> **global_visited = NULL)
ptr = ptr.foo;
This pattern is implicitly produced for casts to non-primary
bases. When doing context analysis, we do not really care
- about the case pointer is NULL, becuase the call will be
+ about the case pointer is NULL, because the call will be
undefined anyway. */
if (gimple_code (SSA_NAME_DEF_STMT (op)) == GIMPLE_PHI)
{
@@ -1094,14 +1095,15 @@ struct type_change_info
tree known_current_type;
HOST_WIDE_INT known_current_offset;
+ /* Set to nonzero if we possibly missed some dynamic type changes and we
+ should consider the set to be speculative. */
+ unsigned speculative;
+
/* Set to true if dynamic type change has been detected. */
bool type_maybe_changed;
/* Set to true if multiple types have been encountered. known_current_type
must be disregarded in that case. */
bool multiple_types_encountered;
- /* Set to true if we possibly missed some dynamic type changes and we should
- consider the set to be speculative. */
- bool speculative;
bool seen_unanalyzed_store;
};
@@ -1338,6 +1340,19 @@ record_known_type (struct type_change_info *tci, tree type, HOST_WIDE_INT offset
tci->type_maybe_changed = true;
}
+
+/* The maximum number of may-defs we visit when looking for a must-def
+ that changes the dynamic type in check_stmt_for_type_change. Tuned
+ after the PR12392 testcase which unlimited spends 40% time within
+ these alias walks and 8% with the following limit. */
+
+static inline bool
+csftc_abort_walking_p (unsigned speculative)
+{
+ unsigned max = PARAM_VALUE (PARAM_MAX_SPECULATIVE_DEVIRT_MAYDEFS);
+ return speculative > max ? true : false;
+}
+
/* Callback of walk_aliased_vdefs and a helper function for
detect_type_change to check whether a particular statement may modify
the virtual table pointer, and if possible also determine the new type of
@@ -1384,15 +1399,15 @@ check_stmt_for_type_change (ao_ref *ao ATTRIBUTE_UNUSED, tree vdef, void *data)
&size, &max_size, &reverse);
if (size != max_size || max_size == -1)
{
- tci->speculative = true;
- return false;
+ tci->speculative++;
+ return csftc_abort_walking_p (tci->speculative);
}
if (op && TREE_CODE (op) == MEM_REF)
{
if (!tree_fits_shwi_p (TREE_OPERAND (op, 1)))
{
- tci->speculative = true;
- return false;
+ tci->speculative++;
+ return csftc_abort_walking_p (tci->speculative);
}
offset += tree_to_shwi (TREE_OPERAND (op, 1))
* BITS_PER_UNIT;
@@ -1402,8 +1417,8 @@ check_stmt_for_type_change (ao_ref *ao ATTRIBUTE_UNUSED, tree vdef, void *data)
;
else
{
- tci->speculative = true;
- return false;
+ tci->speculative++;
+ return csftc_abort_walking_p (tci->speculative);
}
op = walk_ssa_copies (op);
}
@@ -1438,8 +1453,8 @@ check_stmt_for_type_change (ao_ref *ao ATTRIBUTE_UNUSED, tree vdef, void *data)
fprintf (dump_file, " Function call may change dynamic type:");
print_gimple_stmt (dump_file, stmt, 0, 0);
}
- tci->speculative = true;
- return false;
+ tci->speculative++;
+ return csftc_abort_walking_p (tci->speculative);
}
/* Check for inlined virtual table store. */
else if (noncall_stmt_may_be_vtbl_ptr_store (stmt))
@@ -1461,7 +1476,7 @@ check_stmt_for_type_change (ao_ref *ao ATTRIBUTE_UNUSED, tree vdef, void *data)
if (dump_file)
fprintf (dump_file, " Unanalyzed store may change type.\n");
tci->seen_unanalyzed_store = true;
- tci->speculative = true;
+ tci->speculative++;
}
else
record_known_type (tci, type, offset);
@@ -1646,7 +1661,7 @@ ipa_polymorphic_call_context::get_dynamic_type (tree instance,
tci.otr_type = otr_type;
tci.type_maybe_changed = false;
tci.multiple_types_encountered = false;
- tci.speculative = false;
+ tci.speculative = 0;
tci.seen_unanalyzed_store = false;
walk_aliased_vdefs (&ao, gimple_vuse (stmt), check_stmt_for_type_change,
diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c
index d62c704..65482ba 100644
--- a/gcc/ipa-prop.c
+++ b/gcc/ipa-prop.c
@@ -1639,11 +1639,11 @@ ipa_compute_jump_functions_for_edge (struct ipa_func_body_info *fbi,
unsigned HOST_WIDE_INT hwi_bitpos;
unsigned align;
- if (get_pointer_alignment_1 (arg, &align, &hwi_bitpos)
+ get_pointer_alignment_1 (arg, &align, &hwi_bitpos);
+ if (align > BITS_PER_UNIT
&& align % BITS_PER_UNIT == 0
&& hwi_bitpos % BITS_PER_UNIT == 0)
{
- gcc_checking_assert (align != 0);
jfunc->alignment.known = true;
jfunc->alignment.align = align / BITS_PER_UNIT;
jfunc->alignment.misalign = hwi_bitpos / BITS_PER_UNIT;
diff --git a/gcc/ipa-reference.c b/gcc/ipa-reference.c
index 6a3f6c3..b52db42 100644
--- a/gcc/ipa-reference.c
+++ b/gcc/ipa-reference.c
@@ -104,7 +104,7 @@ static splay_tree reference_vars_to_consider;
static we are considering. This is added to the local info when asm
code is found that clobbers all memory. */
static bitmap all_module_statics;
-/* Set of all statics that should be ignored becuase they are touched by
+/* Set of all statics that should be ignored because they are touched by
-fno-ipa-reference code. */
static bitmap ignore_module_statics;
diff --git a/gcc/ipa-visibility.c b/gcc/ipa-visibility.c
index 8198a3d..e4c3f7c 100644
--- a/gcc/ipa-visibility.c
+++ b/gcc/ipa-visibility.c
@@ -452,6 +452,84 @@ update_visibility_by_resolution_info (symtab_node * node)
}
}
+/* Try to get rid of weakref. */
+
+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;
+
+ gcc_assert (node->weakref);
+
+ /* Weakrefs with no target defined can not be optimized. */
+ if (!node->analyzed)
+ return;
+ symtab_node *target = node->get_alias_target ();
+
+ /* Weakrefs to weakrefs can be optimized only if target can be. */
+ if (target->weakref)
+ optimize_weakref (target);
+ if (target->weakref)
+ return;
+
+ /* 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)
+ 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
+ GNU as to translate it via .weakref directive. So do not optimize when
+ DECL_PRESERVED is set and .weakref is supported. */
+ else if ((!DECL_PRESERVE_P (target->decl)
+ || IDENTIFIER_TRANSPARENT_ALIAS (DECL_ASSEMBLER_NAME (node->decl)))
+ && !DECL_WEAK (target->decl)
+ && !DECL_EXTERNAL (target->decl)
+ && ((target->definition && !target->can_be_discarded_p ())
+ || target->resolution != LDPR_UNDEF))
+ strip_weakref = true;
+ if (!strip_weakref)
+ return;
+ node->weakref = false;
+ IDENTIFIER_TRANSPARENT_ALIAS (DECL_ASSEMBLER_NAME (node->decl)) = 0;
+ TREE_CHAIN (DECL_ASSEMBLER_NAME (node->decl)) = NULL_TREE;
+ DECL_ATTRIBUTES (node->decl) = remove_attribute ("weakref",
+ DECL_ATTRIBUTES
+ (node->decl));
+
+ if (dump_file)
+ fprintf (dump_file, "Optimizing weakref %s %s\n",
+ node->name(),
+ static_alias ? "as static alias" : "as transparent alias");
+
+ if (static_alias)
+ {
+ /* make_decl_local will shortcircuit if it doesn't see TREE_PUBLIC.
+ be sure it really clears the WEAK flag. */
+ TREE_PUBLIC (node->decl) = true;
+ node->make_decl_local ();
+ node->forced_by_abi = false;
+ node->resolution = LDPR_PREVAILING_DEF_IRONLY;
+ node->externally_visible = false;
+ gcc_assert (!DECL_WEAK (node->decl));
+ node->transparent_alias = false;
+ }
+ else
+ {
+ symtab->change_decl_assembler_name
+ (node->decl, DECL_ASSEMBLER_NAME (node->get_alias_target ()->decl));
+ node->transparent_alias = true;
+ node->copy_visibility_from (target);
+ }
+ gcc_assert (node->alias);
+}
+
/* Decide on visibility of all symbols. */
static unsigned int
@@ -594,6 +672,8 @@ function_and_variable_visibility (bool whole_program)
}
update_visibility_by_resolution_info (node);
+ if (node->weakref)
+ optimize_weakref (node);
}
FOR_EACH_DEFINED_FUNCTION (node)
{
@@ -660,6 +740,8 @@ function_and_variable_visibility (bool whole_program)
|| ! (ADDR_SPACE_GENERIC_P
(TYPE_ADDR_SPACE (TREE_TYPE (vnode->decl))))))
DECL_COMMON (vnode->decl) = 0;
+ if (vnode->weakref)
+ optimize_weakref (vnode);
}
FOR_EACH_DEFINED_VARIABLE (vnode)
{
diff --git a/gcc/ipa.c b/gcc/ipa.c
index 3c8fc00..6722d3b 100644
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -41,7 +41,7 @@ along with GCC; see the file COPYING3. If not see
static bool
has_addr_references_p (struct cgraph_node *node,
- void *data ATTRIBUTE_UNUSED)
+ void *)
{
int i;
struct ipa_ref *ref = NULL;
@@ -52,6 +52,14 @@ has_addr_references_p (struct cgraph_node *node,
return false;
}
+/* Return true when NODE can be target of an indirect call. */
+
+static bool
+is_indirect_call_target_p (struct cgraph_node *node, void *)
+{
+ return node->indirect_call_target;
+}
+
/* Look for all functions inlined to NODE and update their inlined_to pointers
to INLINED_TO. */
@@ -172,23 +180,24 @@ walk_polymorphic_call_targets (hash_set<void *> *reachable_call_targets,
(TYPE_METHOD_BASETYPE (TREE_TYPE (n->decl))))
continue;
- symtab_node *body = n->function_symbol ();
+ n->indirect_call_target = true;
+ symtab_node *body = n->function_symbol ();
/* Prior inlining, keep alive bodies of possible targets for
devirtualization. */
- if (n->definition
- && (before_inlining_p
- && opt_for_fn (body->decl, optimize)
- && opt_for_fn (body->decl, flag_devirtualize)))
- {
- /* Be sure that we will not optimize out alias target
- body. */
- if (DECL_EXTERNAL (n->decl)
- && n->alias
- && before_inlining_p)
- reachable->add (body);
- reachable->add (n);
- }
+ if (n->definition
+ && (before_inlining_p
+ && opt_for_fn (body->decl, optimize)
+ && opt_for_fn (body->decl, flag_devirtualize)))
+ {
+ /* Be sure that we will not optimize out alias target
+ body. */
+ if (DECL_EXTERNAL (n->decl)
+ && n->alias
+ && before_inlining_p)
+ reachable->add (body);
+ reachable->add (n);
+ }
/* Even after inlining we want to keep the possible targets in the
boundary, so late passes can still produce direct call even if
the chance for inlining is lost. */
@@ -323,6 +332,7 @@ symbol_table::remove_unreachable_nodes (FILE *file)
FOR_EACH_FUNCTION (node)
{
node->used_as_abstract_origin = false;
+ node->indirect_call_target = false;
if (node->definition
&& !node->global.inlined_to
&& !node->in_other_partition
@@ -659,7 +669,14 @@ symbol_table::remove_unreachable_nodes (FILE *file)
fprintf (file, " %s", node->name ());
node->address_taken = false;
changed = true;
- if (node->local_p ())
+ if (node->local_p ()
+ /* Virtual functions may be kept in cgraph just because
+ of possible later devirtualization. Do not mark them as
+ local too early so we won't optimize them out before
+ we are done with polymorphic call analysis. */
+ && (!before_inlining_p
+ || !node->call_for_symbol_and_aliases
+ (is_indirect_call_target_p, NULL, true)))
{
node->local.local = true;
if (file)
diff --git a/gcc/ira-color.c b/gcc/ira-color.c
index 1e4c64f..8433479 100644
--- a/gcc/ira-color.c
+++ b/gcc/ira-color.c
@@ -2728,6 +2728,43 @@ allocno_cost_compare_func (const void *v1p, const void *v2p)
return ALLOCNO_NUM (p1) - ALLOCNO_NUM (p2);
}
+/* Return savings on removed copies when ALLOCNO is assigned to
+ HARD_REGNO. */
+static int
+allocno_copy_cost_saving (ira_allocno_t allocno, int hard_regno)
+{
+ int cost = 0;
+ enum machine_mode allocno_mode = ALLOCNO_MODE (allocno);
+ enum reg_class rclass;
+ ira_copy_t cp, next_cp;
+
+ rclass = REGNO_REG_CLASS (hard_regno);
+ if (ira_reg_class_max_nregs[rclass][allocno_mode]
+ > ira_class_hard_regs_num[rclass])
+ /* For the above condition the cost can be wrong. Use the allocno
+ class in this case. */
+ rclass = ALLOCNO_CLASS (allocno);
+ for (cp = ALLOCNO_COPIES (allocno); cp != NULL; cp = next_cp)
+ {
+ if (cp->first == allocno)
+ {
+ next_cp = cp->next_first_allocno_copy;
+ if (ALLOCNO_HARD_REGNO (cp->second) != hard_regno)
+ continue;
+ }
+ else if (cp->second == allocno)
+ {
+ next_cp = cp->next_second_allocno_copy;
+ if (ALLOCNO_HARD_REGNO (cp->first) != hard_regno)
+ continue;
+ }
+ else
+ gcc_unreachable ();
+ cost += cp->freq * ira_register_move_cost[allocno_mode][rclass][rclass];
+ }
+ return cost;
+}
+
/* We used Chaitin-Briggs coloring to assign as many pseudos as
possible to hard registers. Let us try to improve allocation with
cost point of view. This function improves the allocation by
@@ -2768,9 +2805,7 @@ improve_allocation (void)
continue;
check++;
aclass = ALLOCNO_CLASS (a);
- allocno_costs = ALLOCNO_UPDATED_HARD_REG_COSTS (a);
- if (allocno_costs == NULL)
- allocno_costs = ALLOCNO_HARD_REG_COSTS (a);
+ allocno_costs = ALLOCNO_HARD_REG_COSTS (a);
if ((hregno = ALLOCNO_HARD_REGNO (a)) < 0)
base_cost = ALLOCNO_UPDATED_MEMORY_COST (a);
else if (allocno_costs == NULL)
@@ -2779,7 +2814,8 @@ improve_allocation (void)
case). */
continue;
else
- base_cost = allocno_costs[ira_class_hard_reg_index[aclass][hregno]];
+ base_cost = (allocno_costs[ira_class_hard_reg_index[aclass][hregno]]
+ - allocno_copy_cost_saving (a, hregno));
try_p = false;
get_conflict_and_start_profitable_regs (a, false,
conflicting_regs,
@@ -2797,6 +2833,7 @@ improve_allocation (void)
k = allocno_costs == NULL ? 0 : j;
costs[hregno] = (allocno_costs == NULL
? ALLOCNO_UPDATED_CLASS_COST (a) : allocno_costs[k]);
+ costs[hregno] -= allocno_copy_cost_saving (a, hregno);
costs[hregno] -= base_cost;
if (costs[hregno] < 0)
try_p = true;
@@ -2835,14 +2872,13 @@ improve_allocation (void)
k = (ira_class_hard_reg_index
[ALLOCNO_CLASS (conflict_a)][conflict_hregno]);
ira_assert (k >= 0);
- if ((allocno_costs = ALLOCNO_UPDATED_HARD_REG_COSTS (conflict_a))
+ if ((allocno_costs = ALLOCNO_HARD_REG_COSTS (conflict_a))
!= NULL)
spill_cost -= allocno_costs[k];
- else if ((allocno_costs = ALLOCNO_HARD_REG_COSTS (conflict_a))
- != NULL)
- spill_cost -= allocno_costs[k];
else
spill_cost -= ALLOCNO_UPDATED_CLASS_COST (conflict_a);
+ spill_cost
+ += allocno_copy_cost_saving (conflict_a, conflict_hregno);
conflict_nregs
= hard_regno_nregs[conflict_hregno][ALLOCNO_MODE (conflict_a)];
for (r = conflict_hregno;
diff --git a/gcc/ira.c b/gcc/ira.c
index 6b4a104..8ac153b 100644
--- a/gcc/ira.c
+++ b/gcc/ira.c
@@ -3225,13 +3225,18 @@ memref_referenced_p (rtx memref, rtx x)
}
/* TRUE if some insn in the range (START, END] references a memory location
- that would be affected by a store to MEMREF. */
+ that would be affected by a store to MEMREF.
+
+ Callers should not call this routine if START is after END in the
+ RTL chain. */
+
static int
memref_used_between_p (rtx memref, rtx_insn *start, rtx_insn *end)
{
rtx_insn *insn;
- for (insn = NEXT_INSN (start); insn != NEXT_INSN (end);
+ for (insn = NEXT_INSN (start);
+ insn && insn != NEXT_INSN (end);
insn = NEXT_INSN (insn))
{
if (!NONDEBUG_INSN_P (insn))
@@ -3245,6 +3250,7 @@ memref_used_between_p (rtx memref, rtx_insn *start, rtx_insn *end)
return 1;
}
+ gcc_assert (insn == NEXT_INSN (end));
return 0;
}
@@ -3319,9 +3325,6 @@ adjust_cleared_regs (rtx loc, const_rtx old_rtx ATTRIBUTE_UNUSED, void *data)
return NULL_RTX;
}
-/* Nonzero if we recorded an equivalence for a LABEL_REF. */
-static int recorded_label_ref;
-
/* Find registers that are equivalent to a single value throughout the
compilation (either because they can be referenced in memory or are
set once from a single constant). Lower their priority for a
@@ -3331,10 +3334,8 @@ static int recorded_label_ref;
value into the using insn. If it succeeds, we can eliminate the
register completely.
- Initialize init_insns in ira_reg_equiv array.
-
- Return non-zero if jump label rebuilding should be done. */
-static int
+ Initialize init_insns in ira_reg_equiv array. */
+static void
update_equiv_regs (void)
{
rtx_insn *insn;
@@ -3342,10 +3343,7 @@ update_equiv_regs (void)
int loop_depth;
bitmap cleared_regs;
bool *pdx_subregs;
-
- /* We need to keep track of whether or not we recorded a LABEL_REF so
- that we know if the jump optimizer needs to be rerun. */
- recorded_label_ref = 0;
+ bitmap_head seen_insns;
/* Use pdx_subregs to show whether a reg is used in a paradoxical
subreg. */
@@ -3578,17 +3576,6 @@ update_equiv_regs (void)
= gen_rtx_INSN_LIST (VOIDmode, insn,
ira_reg_equiv[regno].init_insns);
- /* Record whether or not we created a REG_EQUIV note for a LABEL_REF.
- We might end up substituting the LABEL_REF for uses of the
- pseudo here or later. That kind of transformation may turn an
- indirect jump into a direct jump, in which case we must rerun the
- jump optimizer to ensure that the JUMP_LABEL fields are valid. */
- if (GET_CODE (x) == LABEL_REF
- || (GET_CODE (x) == CONST
- && GET_CODE (XEXP (x, 0)) == PLUS
- && (GET_CODE (XEXP (XEXP (x, 0), 0)) == LABEL_REF)))
- recorded_label_ref = 1;
-
reg_equiv[regno].replacement = x;
reg_equiv[regno].src_p = &SET_SRC (set);
reg_equiv[regno].loop_depth = (short) loop_depth;
@@ -3626,11 +3613,14 @@ update_equiv_regs (void)
/* A second pass, to gather additional equivalences with memory. This needs
to be done after we know which registers we are going to replace. */
+ bitmap_initialize (&seen_insns, NULL);
for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
{
rtx set, src, dest;
unsigned regno;
+ bitmap_set_bit (&seen_insns, INSN_UID (insn));
+
if (! INSN_P (insn))
continue;
@@ -3671,6 +3661,7 @@ update_equiv_regs (void)
rtx_insn *init_insn =
as_a <rtx_insn *> (XEXP (reg_equiv[regno].init_insns, 0));
if (validate_equiv_mem (init_insn, src, dest)
+ && bitmap_bit_p (&seen_insns, INSN_UID (init_insn))
&& ! memref_used_between_p (dest, init_insn, insn)
/* Attaching a REG_EQUIV note will fail if INIT_INSN has
multiple sets. */
@@ -3681,9 +3672,15 @@ update_equiv_regs (void)
ira_reg_equiv[regno].init_insns
= gen_rtx_INSN_LIST (VOIDmode, insn, NULL_RTX);
df_notes_rescan (init_insn);
+ if (dump_file)
+ fprintf (dump_file,
+ "Adding REG_EQUIV to insn %d for source of insn %d\n",
+ INSN_UID (init_insn),
+ INSN_UID (insn));
}
}
}
+ bitmap_clear (&seen_insns);
cleared_regs = BITMAP_ALLOC (NULL);
/* Now scan all regs killed in an insn to see if any of them are
@@ -3706,9 +3703,9 @@ update_equiv_regs (void)
if (! INSN_P (insn))
continue;
- /* Don't substitute into a non-local goto, this confuses CFG. */
- if (JUMP_P (insn)
- && find_reg_note (insn, REG_NON_LOCAL_GOTO, NULL_RTX))
+ /* Don't substitute into jumps. indirect_jump_optimize does
+ this for anything we are prepared to handle. */
+ if (JUMP_P (insn))
continue;
for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
@@ -3860,11 +3857,60 @@ update_equiv_regs (void)
end_alias_analysis ();
free (reg_equiv);
free (pdx_subregs);
- return recorded_label_ref;
}
-
+/* A pass over indirect jumps, converting simple cases to direct jumps.
+ Combine does this optimization too, but only within a basic block. */
+static void
+indirect_jump_optimize (void)
+{
+ basic_block bb;
+ bool rebuild_p = false;
+ FOR_EACH_BB_REVERSE_FN (bb, cfun)
+ {
+ rtx_insn *insn = BB_END (bb);
+ if (!JUMP_P (insn)
+ || find_reg_note (insn, REG_NON_LOCAL_GOTO, NULL_RTX))
+ continue;
+
+ rtx x = pc_set (insn);
+ if (!x || !REG_P (SET_SRC (x)))
+ continue;
+
+ int regno = REGNO (SET_SRC (x));
+ if (DF_REG_DEF_COUNT (regno) == 1)
+ {
+ df_ref def = DF_REG_DEF_CHAIN (regno);
+ if (!DF_REF_IS_ARTIFICIAL (def))
+ {
+ rtx_insn *def_insn = DF_REF_INSN (def);
+ rtx lab = NULL_RTX;
+ rtx set = single_set (def_insn);
+ if (set && GET_CODE (SET_SRC (set)) == LABEL_REF)
+ lab = SET_SRC (set);
+ else
+ {
+ rtx eqnote = find_reg_note (def_insn, REG_EQUAL, NULL_RTX);
+ if (eqnote && GET_CODE (XEXP (eqnote, 0)) == LABEL_REF)
+ lab = XEXP (eqnote, 0);
+ }
+ if (lab && validate_replace_rtx (SET_SRC (x), lab, insn))
+ rebuild_p = true;
+ }
+ }
+ }
+
+ if (rebuild_p)
+ {
+ timevar_push (TV_JUMP);
+ rebuild_jump_labels (get_insns ());
+ if (purge_all_dead_edges ())
+ delete_unreachable_blocks ();
+ timevar_pop (TV_JUMP);
+ }
+}
+
/* Set up fields memory, constant, and invariant from init_insns in
the structures of array ira_reg_equiv. */
static void
@@ -5090,7 +5136,6 @@ ira (FILE *f)
{
bool loops_p;
int ira_max_point_before_emit;
- int rebuild_p;
bool saved_flag_caller_saves = flag_caller_saves;
enum ira_region saved_flag_ira_region = flag_ira_region;
@@ -5167,6 +5212,10 @@ ira (FILE *f)
df_clear_flags (DF_NO_INSN_RESCAN);
+ indirect_jump_optimize ();
+ if (delete_trivially_dead_insns (get_insns (), max_reg_num ()))
+ df_analyze ();
+
regstat_init_n_sets_and_refs ();
regstat_compute_ri ();
@@ -5184,32 +5233,12 @@ ira (FILE *f)
if (resize_reg_info () && flag_ira_loop_pressure)
ira_set_pseudo_classes (true, ira_dump_file);
- rebuild_p = update_equiv_regs ();
+ update_equiv_regs ();
setup_reg_equiv ();
setup_reg_equiv_init ();
- bool update_regstat = false;
-
- if (optimize && rebuild_p)
- {
- timevar_push (TV_JUMP);
- rebuild_jump_labels (get_insns ());
- if (purge_all_dead_edges ())
- {
- delete_unreachable_blocks ();
- update_regstat = true;
- }
- timevar_pop (TV_JUMP);
- }
-
allocated_reg_info_size = max_reg_num ();
- if (delete_trivially_dead_insns (get_insns (), max_reg_num ()))
- {
- df_analyze ();
- update_regstat = true;
- }
-
/* It is not worth to do such improvement when we use a simple
allocation because of -O0 usage or because the function is too
big. */
@@ -5319,7 +5348,7 @@ ira (FILE *f)
check_allocation ();
#endif
- if (update_regstat || max_regno != max_regno_before_ira)
+ if (max_regno != max_regno_before_ira)
{
regstat_free_n_sets_and_refs ();
regstat_free_ri ();
@@ -5404,9 +5433,8 @@ do_reload (void)
{
df_set_flags (DF_NO_INSN_RESCAN);
build_insn_chain ();
-
- need_dce = reload (get_insns (), ira_conflicts_p);
+ need_dce = reload (get_insns (), ira_conflicts_p);
}
timevar_pop (TV_RELOAD);
@@ -5484,6 +5512,20 @@ do_reload (void)
inform (DECL_SOURCE_LOCATION (decl), "for %qD", decl);
}
+ /* If we are doing generic stack checking, give a warning if this
+ function's frame size is larger than we expect. */
+ if (flag_stack_check == GENERIC_STACK_CHECK)
+ {
+ HOST_WIDE_INT size = get_frame_size () + STACK_CHECK_FIXED_FRAME_SIZE;
+
+ for (int i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+ if (df_regs_ever_live_p (i) && !fixed_regs[i] && call_used_regs[i])
+ size += UNITS_PER_WORD;
+
+ if (size > STACK_CHECK_MAX_FRAME_SIZE)
+ warning (0, "frame size too large for reliable stack checking");
+ }
+
if (pic_offset_table_regno != INVALID_REGNUM)
pic_offset_table_rtx = gen_rtx_REG (Pmode, pic_offset_table_regno);
diff --git a/gcc/loop-invariant.c b/gcc/loop-invariant.c
index 707f044..dcbe932 100644
--- a/gcc/loop-invariant.c
+++ b/gcc/loop-invariant.c
@@ -52,6 +52,7 @@ along with GCC; see the file COPYING3. If not see
#include "cfgloop.h"
#include "expr.h"
#include "params.h"
+#include "rtl-iter.h"
#include "dumpfile.h"
/* The data stored for the loop. */
@@ -754,6 +755,130 @@ create_new_invariant (struct def *def, rtx_insn *insn, bitmap depends_on,
return inv;
}
+/* Return a canonical version of X for the address, from the point of view,
+ that all multiplications are represented as MULT instead of the multiply
+ by a power of 2 being represented as ASHIFT.
+
+ Callers should prepare a copy of X because this function may modify it
+ in place. */
+
+static void
+canonicalize_address_mult (rtx x)
+{
+ subrtx_var_iterator::array_type array;
+ FOR_EACH_SUBRTX_VAR (iter, array, x, NONCONST)
+ {
+ rtx sub = *iter;
+
+ if (GET_CODE (sub) == ASHIFT
+ && CONST_INT_P (XEXP (sub, 1))
+ && INTVAL (XEXP (sub, 1)) < GET_MODE_BITSIZE (GET_MODE (sub))
+ && INTVAL (XEXP (sub, 1)) >= 0)
+ {
+ HOST_WIDE_INT shift = INTVAL (XEXP (sub, 1));
+ PUT_CODE (sub, MULT);
+ XEXP (sub, 1) = gen_int_mode ((HOST_WIDE_INT) 1 << shift,
+ GET_MODE (sub));
+ iter.skip_subrtxes ();
+ }
+ }
+}
+
+/* Maximum number of sub expressions in address. We set it to
+ a small integer since it's unlikely to have a complicated
+ address expression. */
+
+#define MAX_CANON_ADDR_PARTS (5)
+
+/* Collect sub expressions in address X with PLUS as the seperator.
+ Sub expressions are stored in vector ADDR_PARTS. */
+
+static void
+collect_address_parts (rtx x, vec<rtx> *addr_parts)
+{
+ subrtx_var_iterator::array_type array;
+ FOR_EACH_SUBRTX_VAR (iter, array, x, NONCONST)
+ {
+ rtx sub = *iter;
+
+ if (GET_CODE (sub) != PLUS)
+ {
+ addr_parts->safe_push (sub);
+ iter.skip_subrtxes ();
+ }
+ }
+}
+
+/* Compare function for sorting sub expressions X and Y based on
+ precedence defined for communitive operations. */
+
+static int
+compare_address_parts (const void *x, const void *y)
+{
+ const rtx *rx = (const rtx *)x;
+ const rtx *ry = (const rtx *)y;
+ int px = commutative_operand_precedence (*rx);
+ int py = commutative_operand_precedence (*ry);
+
+ return (py - px);
+}
+
+/* Return a canonical version address for X by following steps:
+ 1) Rewrite ASHIFT into MULT recursively.
+ 2) Divide address into sub expressions with PLUS as the
+ separator.
+ 3) Sort sub expressions according to precedence defined
+ for communative operations.
+ 4) Simplify CONST_INT_P sub expressions.
+ 5) Create new canonicalized address and return.
+ Callers should prepare a copy of X because this function may
+ modify it in place. */
+
+static rtx
+canonicalize_address (rtx x)
+{
+ rtx res;
+ unsigned int i, j;
+ machine_mode mode = GET_MODE (x);
+ auto_vec<rtx, MAX_CANON_ADDR_PARTS> addr_parts;
+
+ /* Rewrite ASHIFT into MULT. */
+ canonicalize_address_mult (x);
+ /* Divide address into sub expressions. */
+ collect_address_parts (x, &addr_parts);
+ /* Unlikely to have very complicated address. */
+ if (addr_parts.length () < 2
+ || addr_parts.length () > MAX_CANON_ADDR_PARTS)
+ return x;
+
+ /* Sort sub expressions according to canonicalization precedence. */
+ addr_parts.qsort (compare_address_parts);
+
+ /* Simplify all constant int summary if possible. */
+ for (i = 0; i < addr_parts.length (); i++)
+ if (CONST_INT_P (addr_parts[i]))
+ break;
+
+ for (j = i + 1; j < addr_parts.length (); j++)
+ {
+ gcc_assert (CONST_INT_P (addr_parts[j]));
+ addr_parts[i] = simplify_gen_binary (PLUS, mode,
+ addr_parts[i],
+ addr_parts[j]);
+ }
+
+ /* Chain PLUS operators to the left for !CONST_INT_P sub expressions. */
+ res = addr_parts[0];
+ for (j = 1; j < i; j++)
+ res = simplify_gen_binary (PLUS, mode, res, addr_parts[j]);
+
+ /* Pickup the last CONST_INT_P sub expression. */
+ if (i < addr_parts.length ())
+ res = simplify_gen_binary (PLUS, mode, res, addr_parts[i]);
+
+ return res;
+}
+
/* Given invariant DEF and its address USE, check if the corresponding
invariant expr can be propagated into the use or not. */
@@ -761,7 +886,7 @@ static bool
inv_can_prop_to_addr_use (struct def *def, df_ref use)
{
struct invariant *inv;
- rtx *pos = DF_REF_REAL_LOC (use), def_set;
+ rtx *pos = DF_REF_REAL_LOC (use), def_set, use_set;
rtx_insn *use_insn = DF_REF_INSN (use);
rtx_insn *def_insn;
bool ok;
@@ -778,6 +903,29 @@ inv_can_prop_to_addr_use (struct def *def, df_ref use)
validate_unshare_change (use_insn, pos, SET_SRC (def_set), true);
ok = verify_changes (0);
+ /* Try harder with canonicalization in address expression. */
+ if (!ok && (use_set = single_set (use_insn)) != NULL_RTX)
+ {
+ rtx src, dest, mem = NULL_RTX;
+
+ src = SET_SRC (use_set);
+ dest = SET_DEST (use_set);
+ if (MEM_P (src))
+ mem = src;
+ else if (MEM_P (dest))
+ mem = dest;
+
+ if (mem != NULL_RTX
+ && !memory_address_addr_space_p (GET_MODE (mem),
+ XEXP (mem, 0),
+ MEM_ADDR_SPACE (mem)))
+ {
+ rtx addr = canonicalize_address (copy_rtx (XEXP (mem, 0)));
+ if (memory_address_addr_space_p (GET_MODE (mem),
+ addr, MEM_ADDR_SPACE (mem)))
+ ok = true;
+ }
+ }
cancel_changes (0);
return ok;
}
diff --git a/gcc/lower-subreg.c b/gcc/lower-subreg.c
index 5432d05..f7b3ac4 100644
--- a/gcc/lower-subreg.c
+++ b/gcc/lower-subreg.c
@@ -614,7 +614,8 @@ simplify_subreg_concatn (machine_mode outermode, rtx op,
innermode = GET_MODE (op);
gcc_assert (byte < GET_MODE_SIZE (innermode));
- gcc_assert (GET_MODE_SIZE (outermode) <= GET_MODE_SIZE (innermode));
+ if (GET_MODE_SIZE (outermode) > GET_MODE_SIZE (innermode))
+ return NULL_RTX;
inner_size = GET_MODE_SIZE (innermode) / XVECLEN (op, 0);
part = XVECEXP (op, 0, byte / inner_size);
diff --git a/gcc/lra-assigns.c b/gcc/lra-assigns.c
index 1d9693a..fb3de84 100644
--- a/gcc/lra-assigns.c
+++ b/gcc/lra-assigns.c
@@ -1620,7 +1620,12 @@ lra_assign (void)
timevar_pop (TV_LRA_ASSIGN);
if (former_reload_pseudo_spill_p)
lra_assignment_iter_after_spill++;
- if (lra_assignment_iter_after_spill > LRA_MAX_ASSIGNMENT_ITERATION_NUMBER)
+ /* This is conditional on flag_checking because valid code can take
+ more than this maximum number of iteration, but at the same time
+ the test can uncover errors in machine descriptions. */
+ if (flag_checking
+ && (lra_assignment_iter_after_spill
+ > LRA_MAX_ASSIGNMENT_ITERATION_NUMBER))
internal_error
("Maximum number of LRA assignment passes is achieved (%d)\n",
LRA_MAX_ASSIGNMENT_ITERATION_NUMBER);
diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c
index f33f8c5..c00afe7 100644
--- a/gcc/lra-constraints.c
+++ b/gcc/lra-constraints.c
@@ -840,6 +840,36 @@ narrow_reload_pseudo_class (rtx reg, enum reg_class cl)
lra_change_class (REGNO (reg), rclass, " Change to", true);
}
+/* Searches X for any reference to a reg with the same value as REGNO,
+ returning the rtx of the reference found if any. Otherwise,
+ returns NULL_RTX. */
+static rtx
+regno_val_use_in (unsigned int regno, rtx x)
+{
+ const char *fmt;
+ int i, j;
+ rtx tem;
+
+ if (REG_P (x) && lra_reg_info[REGNO (x)].val == lra_reg_info[regno].val)
+ return x;
+
+ fmt = GET_RTX_FORMAT (GET_CODE (x));
+ for (i = GET_RTX_LENGTH (GET_CODE (x)) - 1; i >= 0; i--)
+ {
+ if (fmt[i] == 'e')
+ {
+ if ((tem = regno_val_use_in (regno, XEXP (x, i))))
+ return tem;
+ }
+ else if (fmt[i] == 'E')
+ for (j = XVECLEN (x, i) - 1; j >= 0; j--)
+ if ((tem = regno_val_use_in (regno , XVECEXP (x, i, j))))
+ return tem;
+ }
+
+ return NULL_RTX;
+}
+
/* Generate reloads for matching OUT and INS (array of input operand
numbers with end marker -1) with reg class GOAL_CLASS. Add input
and output reloads correspondingly to the lists *BEFORE and *AFTER.
@@ -942,7 +972,8 @@ match_reload (signed char out, signed char *ins, enum reg_class goal_class,
= (! early_clobber_p && ins[1] < 0 && REG_P (in_rtx)
&& (int) REGNO (in_rtx) < lra_new_regno_start
&& find_regno_note (curr_insn, REG_DEAD, REGNO (in_rtx))
- && (out < 0 || regno_use_in (REGNO (in_rtx), out_rtx) == NULL_RTX)
+ && (out < 0
+ || regno_val_use_in (REGNO (in_rtx), out_rtx) == NULL_RTX)
? lra_create_new_reg (inmode, in_rtx, goal_class, "")
: lra_create_new_reg_with_unique_value (outmode, out_rtx,
goal_class, ""));
@@ -2883,6 +2914,7 @@ process_address_1 (int nop, bool check_only_p,
{
struct address_info ad;
rtx new_reg;
+ HOST_WIDE_INT scale;
rtx op = *curr_id->operand_loc[nop];
const char *constraint = curr_static_id->operand[nop].constraint;
enum constraint_num cn = lookup_constraint (constraint);
@@ -3130,14 +3162,14 @@ process_address_1 (int nop, bool check_only_p,
*ad.inner = simplify_gen_binary (PLUS, GET_MODE (new_reg),
new_reg, *ad.index);
}
- else if (get_index_scale (&ad) == 1)
+ else if ((scale = get_index_scale (&ad)) == 1)
{
/* The last transformation to one reg will be made in
curr_insn_transform function. */
end_sequence ();
return false;
}
- else
+ else if (scale != 0)
{
/* base + scale * index => base + new_reg,
case (1) above.
@@ -3149,6 +3181,17 @@ process_address_1 (int nop, bool check_only_p,
*ad.inner = simplify_gen_binary (PLUS, GET_MODE (new_reg),
*ad.base_term, new_reg);
}
+ else
+ {
+ enum reg_class cl = base_reg_class (ad.mode, ad.as,
+ SCRATCH, SCRATCH);
+ rtx addr = *ad.inner;
+
+ new_reg = lra_create_new_reg (Pmode, NULL_RTX, cl, "addr");
+ /* addr => new_base. */
+ lra_emit_move (new_reg, addr);
+ *ad.inner = new_reg;
+ }
*before = get_insns ();
end_sequence ();
return true;
@@ -4941,6 +4984,7 @@ split_reg (bool before_p, int original_regno, rtx_insn *insn,
rtx_insn *restore, *save;
bool after_p;
bool call_save_p;
+ machine_mode mode;
if (original_regno < FIRST_PSEUDO_REGISTER)
{
@@ -4948,24 +4992,37 @@ split_reg (bool before_p, int original_regno, rtx_insn *insn,
hard_regno = original_regno;
call_save_p = false;
nregs = 1;
+ mode = lra_reg_info[hard_regno].biggest_mode;
+ machine_mode reg_rtx_mode = GET_MODE (regno_reg_rtx[hard_regno]);
+ /* A reg can have a biggest_mode of VOIDmode if it was only ever seen
+ as part of a multi-word register. In that case, or if the biggest
+ mode was larger than a register, just use the reg_rtx. Otherwise,
+ limit the size to that of the biggest access in the function. */
+ if (mode == VOIDmode
+ || GET_MODE_SIZE (mode) > GET_MODE_SIZE (reg_rtx_mode))
+ {
+ original_reg = regno_reg_rtx[hard_regno];
+ mode = reg_rtx_mode;
+ }
+ else
+ original_reg = gen_rtx_REG (mode, hard_regno);
}
else
{
+ mode = PSEUDO_REGNO_MODE (original_regno);
hard_regno = reg_renumber[original_regno];
- nregs = hard_regno_nregs[hard_regno][PSEUDO_REGNO_MODE (original_regno)];
+ nregs = hard_regno_nregs[hard_regno][mode];
rclass = lra_get_allocno_class (original_regno);
original_reg = regno_reg_rtx[original_regno];
call_save_p = need_for_call_save_p (original_regno);
}
- original_reg = regno_reg_rtx[original_regno];
lra_assert (hard_regno >= 0);
if (lra_dump_file != NULL)
fprintf (lra_dump_file,
" ((((((((((((((((((((((((((((((((((((((((((((((((\n");
+
if (call_save_p)
{
- machine_mode mode = GET_MODE (original_reg);
-
mode = HARD_REGNO_CALLER_SAVE_MODE (hard_regno,
hard_regno_nregs[hard_regno][mode],
mode);
@@ -4973,8 +5030,7 @@ split_reg (bool before_p, int original_regno, rtx_insn *insn,
}
else
{
- rclass = choose_split_class (rclass, hard_regno,
- GET_MODE (original_reg));
+ rclass = choose_split_class (rclass, hard_regno, mode);
if (rclass == NO_REGS)
{
if (lra_dump_file != NULL)
@@ -4992,8 +5048,7 @@ split_reg (bool before_p, int original_regno, rtx_insn *insn,
}
return false;
}
- new_reg = lra_create_new_reg (GET_MODE (original_reg), original_reg,
- rclass, "split");
+ new_reg = lra_create_new_reg (mode, original_reg, rclass, "split");
reg_renumber[REGNO (new_reg)] = hard_regno;
}
save = emit_spill_move (true, new_reg, original_reg);
@@ -5819,6 +5874,24 @@ get_regno (rtx reg)
return -1;
}
+/* Delete a move INSN with destination reg DREGNO and a previous
+ clobber insn with the same regno. The inheritance/split code can
+ generate moves with preceding clobber and when we delete such moves
+ we should delete the clobber insn too to keep the correct life
+ info. */
+static void
+delete_move_and_clobber (rtx_insn *insn, int dregno)
+{
+ rtx_insn *prev_insn = PREV_INSN (insn);
+
+ lra_set_insn_deleted (insn);
+ lra_assert (dregno >= 0);
+ if (prev_insn != NULL && NONDEBUG_INSN_P (prev_insn)
+ && GET_CODE (PATTERN (prev_insn)) == CLOBBER
+ && dregno == get_regno (XEXP (PATTERN (prev_insn), 0)))
+ lra_set_insn_deleted (prev_insn);
+}
+
/* Remove inheritance/split pseudos which are in REMOVE_PSEUDOS and
return true if we did any change. The undo transformations for
inheritance looks like
@@ -5891,7 +5964,7 @@ remove_inheritance_pseudos (bitmap remove_pseudos)
? "split" : "inheritance");
dump_insn_slim (lra_dump_file, curr_insn);
}
- lra_set_insn_deleted (curr_insn);
+ delete_move_and_clobber (curr_insn, dregno);
done_p = true;
}
else if (bitmap_bit_p (remove_pseudos, sregno)
@@ -6091,7 +6164,7 @@ undo_optional_reloads (void)
INSN_UID (insn));
dump_insn_slim (lra_dump_file, insn);
}
- lra_set_insn_deleted (insn);
+ delete_move_and_clobber (insn, REGNO (dest));
continue;
}
/* We should not worry about generation memory-memory
diff --git a/gcc/lra-lives.c b/gcc/lra-lives.c
index 67dda47..8811198 100644
--- a/gcc/lra-lives.c
+++ b/gcc/lra-lives.c
@@ -700,12 +700,13 @@ process_bb_lives (basic_block bb, int &curr_point, bool dead_insn_p)
/* Update max ref width and hard reg usage. */
for (reg = curr_id->regs; reg != NULL; reg = reg->next)
- if (reg->regno >= FIRST_PSEUDO_REGISTER
- && (GET_MODE_SIZE (reg->biggest_mode)
- > GET_MODE_SIZE (lra_reg_info[reg->regno].biggest_mode)))
- lra_reg_info[reg->regno].biggest_mode = reg->biggest_mode;
- else if (reg->regno < FIRST_PSEUDO_REGISTER)
- lra_hard_reg_usage[reg->regno] += freq;
+ {
+ if (GET_MODE_SIZE (reg->biggest_mode)
+ > GET_MODE_SIZE (lra_reg_info[reg->regno].biggest_mode))
+ lra_reg_info[reg->regno].biggest_mode = reg->biggest_mode;
+ if (reg->regno < FIRST_PSEUDO_REGISTER)
+ lra_hard_reg_usage[reg->regno] += freq;
+ }
call_p = CALL_P (curr_insn);
src_regno = (set != NULL_RTX && REG_P (SET_SRC (set))
@@ -1208,7 +1209,7 @@ lra_create_live_ranges_1 (bool all_p, bool dead_insn_p)
conservative because of recent transformation. Here in this
file we recalculate it again as it costs practically
nothing. */
- if (regno_reg_rtx[i] != NULL_RTX)
+ if (i >= FIRST_PSEUDO_REGISTER && regno_reg_rtx[i] != NULL_RTX)
lra_reg_info[i].biggest_mode = GET_MODE (regno_reg_rtx[i]);
else
lra_reg_info[i].biggest_mode = VOIDmode;
diff --git a/gcc/lra-remat.c b/gcc/lra-remat.c
index 785d531..187ee3e 100644
--- a/gcc/lra-remat.c
+++ b/gcc/lra-remat.c
@@ -413,6 +413,10 @@ operand_to_remat (rtx_insn *insn)
if (reg->regno >= FIRST_PSEUDO_REGISTER
&& bitmap_bit_p (&subreg_regs, reg->regno))
return -1;
+
+ /* Don't allow hard registers to be rematerialized. */
+ if (reg->regno < FIRST_PSEUDO_REGISTER)
+ return -1;
}
if (found_reg == NULL)
return -1;
@@ -718,21 +722,46 @@ calculate_local_reg_remat_bb_data (void)
-/* Return true if REGNO is an input operand of INSN. */
+/* Return true if REG overlaps an input operand of INSN. */
static bool
-input_regno_present_p (rtx_insn *insn, int regno)
+reg_overlap_for_remat_p (lra_insn_reg *reg, rtx_insn *insn)
{
int iter;
lra_insn_recog_data_t id = lra_get_insn_recog_data (insn);
struct lra_static_insn_data *static_id = id->insn_static_data;
- struct lra_insn_reg *reg;
-
+ unsigned regno = reg->regno;
+ int nregs;
+
+ if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] >= 0)
+ regno = reg_renumber[regno];
+ if (regno >= FIRST_PSEUDO_REGISTER)
+ nregs = 1;
+ else
+ nregs = hard_regno_nregs[regno][reg->biggest_mode];
+
+ struct lra_insn_reg *reg2;
+
for (iter = 0; iter < 2; iter++)
- for (reg = (iter == 0 ? id->regs : static_id->hard_regs);
- reg != NULL;
- reg = reg->next)
- if (reg->type == OP_IN && reg->regno == regno)
- return true;
+ for (reg2 = (iter == 0 ? id->regs : static_id->hard_regs);
+ reg2 != NULL;
+ reg2 = reg2->next)
+ {
+ if (reg2->type != OP_IN)
+ continue;
+ unsigned regno2 = reg2->regno;
+ int nregs2;
+
+ if (regno2 >= FIRST_PSEUDO_REGISTER && reg_renumber[regno2] >= 0)
+ regno2 = reg_renumber[regno2];
+ if (regno >= FIRST_PSEUDO_REGISTER)
+ nregs2 = 1;
+ else
+ nregs2 = hard_regno_nregs[regno2][reg->biggest_mode];
+
+ if ((regno2 + nregs2 - 1 >= regno && regno2 < regno + nregs)
+ || (regno + nregs - 1 >= regno2 && regno < regno2 + nregs2))
+ return true;
+ }
return false;
}
@@ -833,7 +862,7 @@ calculate_gen_cands (void)
&& dst_regno == cand->regno)
continue;
if (cand->regno == reg->regno
- || input_regno_present_p (insn2, reg->regno))
+ || reg_overlap_for_remat_p (reg, insn2))
{
bitmap_clear_bit (gen_cands, cand->index);
bitmap_set_bit (&temp_bitmap, uid);
@@ -1219,7 +1248,7 @@ do_remat (void)
&& dst_regno == cand->regno)
continue;
if (cand->regno == reg->regno
- || input_regno_present_p (cand->insn, reg->regno))
+ || reg_overlap_for_remat_p (reg, cand->insn))
bitmap_set_bit (&temp_bitmap, cand->index);
}
diff --git a/gcc/lra-spills.c b/gcc/lra-spills.c
index 5709ef1..7e5f637 100644
--- a/gcc/lra-spills.c
+++ b/gcc/lra-spills.c
@@ -528,11 +528,12 @@ spill_pseudos (void)
if (removed_pseudo_p)
{
lra_assert (DEBUG_INSN_P (insn));
- lra_set_insn_deleted (insn);
+ lra_invalidate_insn_data (insn);
+ INSN_VAR_LOCATION_LOC (insn) = gen_rtx_UNKNOWN_VAR_LOC ();
if (lra_dump_file != NULL)
fprintf (lra_dump_file,
- "Debug insn #%u is deleted as containing removed pseudo\n",
- INSN_UID (insn));
+ "Debug insn #%u is reset because it referenced "
+ "removed pseudo\n", INSN_UID (insn));
}
bitmap_and_compl_into (df_get_live_in (bb), &spilled_pseudos);
bitmap_and_compl_into (df_get_live_out (bb), &spilled_pseudos);
diff --git a/gcc/lra.c b/gcc/lra.c
index ee92ca5..a724ef7 100644
--- a/gcc/lra.c
+++ b/gcc/lra.c
@@ -1742,20 +1742,29 @@ lra_process_new_insns (rtx_insn *insn, rtx_insn *before, rtx_insn *after,
}
if (before != NULL_RTX)
{
+ if (cfun->can_throw_non_call_exceptions)
+ copy_reg_eh_region_note_forward (insn, before, NULL);
emit_insn_before (before, insn);
push_insns (PREV_INSN (insn), PREV_INSN (before));
setup_sp_offset (before, PREV_INSN (insn));
}
if (after != NULL_RTX)
{
+ if (cfun->can_throw_non_call_exceptions)
+ copy_reg_eh_region_note_forward (insn, after, NULL);
for (last = after; NEXT_INSN (last) != NULL_RTX; last = NEXT_INSN (last))
;
emit_insn_after (after, insn);
push_insns (last, insn);
setup_sp_offset (after, last);
}
+ if (cfun->can_throw_non_call_exceptions)
+ {
+ rtx note = find_reg_note (insn, REG_EH_REGION, NULL_RTX);
+ if (note && !insn_could_throw_p (insn))
+ remove_note (insn, note);
+ }
}
-
/* Replace all references to register OLD_REGNO in *LOC with pseudo
@@ -1958,6 +1967,10 @@ restore_scratches (void)
for (i = 0; scratches.iterate (i, &loc); i++)
{
+ /* Ignore already deleted insns. */
+ if (NOTE_P (loc->insn)
+ && NOTE_KIND (loc->insn) == NOTE_INSN_DELETED)
+ continue;
if (last != loc->insn)
{
last = loc->insn;
diff --git a/gcc/lto-streamer-in.c b/gcc/lto-streamer-in.c
index 48a1c86..dd48777 100644
--- a/gcc/lto-streamer-in.c
+++ b/gcc/lto-streamer-in.c
@@ -1008,6 +1008,7 @@ input_struct_function_base (struct function *fn, struct data_in *data_in,
fn->after_inlining = bp_unpack_value (&bp, 1);
fn->stdarg = bp_unpack_value (&bp, 1);
fn->has_nonlocal_label = bp_unpack_value (&bp, 1);
+ fn->has_forced_label_in_static = bp_unpack_value (&bp, 1);
fn->calls_alloca = bp_unpack_value (&bp, 1);
fn->calls_setjmp = bp_unpack_value (&bp, 1);
fn->has_force_vectorize_loops = bp_unpack_value (&bp, 1);
diff --git a/gcc/lto-streamer-out.c b/gcc/lto-streamer-out.c
index 997a28b..6703d41 100644
--- a/gcc/lto-streamer-out.c
+++ b/gcc/lto-streamer-out.c
@@ -2014,6 +2014,7 @@ output_struct_function_base (struct output_block *ob, struct function *fn)
bp_pack_value (&bp, fn->after_inlining, 1);
bp_pack_value (&bp, fn->stdarg, 1);
bp_pack_value (&bp, fn->has_nonlocal_label, 1);
+ bp_pack_value (&bp, fn->has_forced_label_in_static, 1);
bp_pack_value (&bp, fn->calls_alloca, 1);
bp_pack_value (&bp, fn->calls_setjmp, 1);
bp_pack_value (&bp, fn->has_force_vectorize_loops, 1);
diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c
index ed20b4e..f240812 100644
--- a/gcc/lto-wrapper.c
+++ b/gcc/lto-wrapper.c
@@ -68,7 +68,7 @@ static unsigned int nr;
static char **input_names;
static char **output_names;
static char **offload_names;
-static const char *offloadbegin, *offloadend;
+static char *offload_objects_file_name;
static char *makefile;
const char tool_name[] = "lto-wrapper";
@@ -84,6 +84,8 @@ tool_cleanup (bool)
maybe_unlink (ltrans_output_file);
if (flto_out)
maybe_unlink (flto_out);
+ if (offload_objects_file_name)
+ maybe_unlink (offload_objects_file_name);
if (makefile)
maybe_unlink (makefile);
for (i = 0; i < nr; ++i)
@@ -840,40 +842,32 @@ copy_file (const char *dest, const char *src)
}
}
-/* Find the crtoffloadbegin.o and crtoffloadend.o files in LIBRARY_PATH, make
- copies and store the names of the copies in offloadbegin and offloadend. */
+/* Find the crtoffloadtable.o file in LIBRARY_PATH, make copy and pass name of
+ the copy to the linker. */
static void
-find_offloadbeginend (void)
+find_crtoffloadtable (void)
{
char **paths = NULL;
const char *library_path = getenv ("LIBRARY_PATH");
if (!library_path)
return;
- unsigned n_paths = parse_env_var (library_path, &paths, "/crtoffloadbegin.o");
+ unsigned n_paths = parse_env_var (library_path, &paths, "/crtoffloadtable.o");
unsigned i;
for (i = 0; i < n_paths; i++)
if (access_check (paths[i], R_OK) == 0)
{
- size_t len = strlen (paths[i]);
- char *tmp = xstrdup (paths[i]);
- strcpy (paths[i] + len - strlen ("begin.o"), "end.o");
- if (access_check (paths[i], R_OK) != 0)
- fatal_error (input_location,
- "installation error, can't find crtoffloadend.o");
- /* The linker will delete the filenames we give it, so make
- copies. */
- offloadbegin = make_temp_file (".o");
- offloadend = make_temp_file (".o");
- copy_file (offloadbegin, tmp);
- copy_file (offloadend, paths[i]);
- free (tmp);
+ /* The linker will delete the filename we give it, so make a copy. */
+ char *crtoffloadtable = make_temp_file (".crtoffloadtable.o");
+ copy_file (crtoffloadtable, paths[i]);
+ printf ("%s\n", crtoffloadtable);
+ XDELETEVEC (crtoffloadtable);
break;
}
if (i == n_paths)
fatal_error (input_location,
- "installation error, can't find crtoffloadbegin.o");
+ "installation error, can't find crtoffloadtable.o");
free_array_of_ptrs ((void **) paths, n_paths);
}
@@ -970,8 +964,8 @@ run_gcc (unsigned argc, char *argv[])
int new_head_argc;
bool have_lto = false;
bool have_offload = false;
- unsigned lto_argc = 0, offload_argc = 0;
- char **lto_argv, **offload_argv;
+ unsigned lto_argc = 0;
+ char **lto_argv;
/* Get the driver and options. */
collect_gcc = getenv ("COLLECT_GCC");
@@ -987,10 +981,9 @@ run_gcc (unsigned argc, char *argv[])
&decoded_options,
&decoded_options_count);
- /* Allocate arrays for input object files with LTO or offload IL,
+ /* Allocate array for input object files with LTO IL,
and for possible preceding arguments. */
lto_argv = XNEWVEC (char *, argc);
- offload_argv = XNEWVEC (char *, argc);
/* Look at saved options in the IL files. */
for (i = 1; i < argc; ++i)
@@ -1002,6 +995,15 @@ run_gcc (unsigned argc, char *argv[])
int consumed;
char *filename = argv[i];
+ if (strncmp (argv[i], "-foffload-objects=",
+ sizeof ("-foffload-objects=") - 1) == 0)
+ {
+ have_offload = true;
+ offload_objects_file_name
+ = argv[i] + sizeof ("-foffload-objects=") - 1;
+ continue;
+ }
+
if ((p = strrchr (argv[i], '@'))
&& p != argv[i]
&& sscanf (p, "@%li%n", &loffset, &consumed) >= 1
@@ -1026,15 +1028,6 @@ run_gcc (unsigned argc, char *argv[])
have_lto = true;
lto_argv[lto_argc++] = argv[i];
}
-
- if (find_and_merge_options (fd, file_offset, OFFLOAD_SECTION_NAME_PREFIX,
- &offload_fdecoded_options,
- &offload_fdecoded_options_count, collect_gcc))
- {
- have_offload = true;
- offload_argv[offload_argc++] = argv[i];
- }
-
close (fd);
}
@@ -1133,47 +1126,102 @@ run_gcc (unsigned argc, char *argv[])
if (have_offload)
{
- compile_images_for_offload_targets (offload_argc, offload_argv,
+ unsigned i, num_offload_files;
+ char **offload_argv;
+ FILE *f;
+
+ f = fopen (offload_objects_file_name, "r");
+ if (f == NULL)
+ fatal_error (input_location, "cannot open %s: %m",
+ offload_objects_file_name);
+ if (fscanf (f, "%u ", &num_offload_files) != 1)
+ fatal_error (input_location, "cannot read %s: %m",
+ offload_objects_file_name);
+ offload_argv = XCNEWVEC (char *, num_offload_files);
+
+ /* Read names of object files with offload. */
+ for (i = 0; i < num_offload_files; i++)
+ {
+ const unsigned piece = 32;
+ char *buf, *filename = XNEWVEC (char, piece);
+ size_t len;
+
+ buf = filename;
+cont1:
+ if (!fgets (buf, piece, f))
+ break;
+ len = strlen (filename);
+ if (filename[len - 1] != '\n')
+ {
+ filename = XRESIZEVEC (char, filename, len + piece);
+ buf = filename + len;
+ goto cont1;
+ }
+ filename[len - 1] = '\0';
+ offload_argv[i] = filename;
+ }
+ fclose (f);
+ if (offload_argv[num_offload_files - 1] == NULL)
+ fatal_error (input_location, "invalid format of %s",
+ offload_objects_file_name);
+ maybe_unlink (offload_objects_file_name);
+ offload_objects_file_name = NULL;
+
+ /* Look at saved offload options in files. */
+ for (i = 0; i < num_offload_files; i++)
+ {
+ char *p;
+ long loffset;
+ int fd, consumed;
+ off_t file_offset = 0;
+ char *filename = offload_argv[i];
+
+ if ((p = strrchr (offload_argv[i], '@'))
+ && p != offload_argv[i]
+ && sscanf (p, "@%li%n", &loffset, &consumed) >= 1
+ && strlen (p) == (unsigned int) consumed)
+ {
+ filename = XNEWVEC (char, p - offload_argv[i] + 1);
+ memcpy (filename, offload_argv[i], p - offload_argv[i]);
+ filename[p - offload_argv[i]] = '\0';
+ file_offset = (off_t) loffset;
+ }
+ fd = open (filename, O_RDONLY | O_BINARY);
+ if (fd == -1)
+ fatal_error (input_location, "cannot open %s: %m", filename);
+ if (!find_and_merge_options (fd, file_offset,
+ OFFLOAD_SECTION_NAME_PREFIX,
+ &offload_fdecoded_options,
+ &offload_fdecoded_options_count,
+ collect_gcc))
+ fatal_error (input_location, "cannot read %s: %m", filename);
+ close (fd);
+ if (filename != offload_argv[i])
+ XDELETEVEC (filename);
+ }
+
+ compile_images_for_offload_targets (num_offload_files, offload_argv,
offload_fdecoded_options,
offload_fdecoded_options_count,
decoded_options,
decoded_options_count);
+
+ free_array_of_ptrs ((void **) offload_argv, num_offload_files);
+
if (offload_names)
{
- find_offloadbeginend ();
+ find_crtoffloadtable ();
for (i = 0; offload_names[i]; i++)
printf ("%s\n", offload_names[i]);
free_array_of_ptrs ((void **) offload_names, i);
}
}
- if (offloadbegin)
- printf ("%s\n", offloadbegin);
-
/* If object files contain offload sections, but do not contain LTO sections,
then there is no need to perform a link-time recompilation, i.e.
lto-wrapper is used only for a compilation of offload images. */
if (have_offload && !have_lto)
- {
- for (i = 1; i < argc; ++i)
- if (strncmp (argv[i], "-fresolution=",
- sizeof ("-fresolution=") - 1) != 0
- && strncmp (argv[i], "-flinker-output=",
- sizeof ("-flinker-output=") - 1) != 0)
- {
- char *out_file;
- /* Can be ".o" or ".so". */
- char *ext = strrchr (argv[i], '.');
- if (ext == NULL)
- out_file = make_temp_file ("");
- else
- out_file = make_temp_file (ext);
- /* The linker will delete the files we give it, so make copies. */
- copy_file (out_file, argv[i]);
- printf ("%s\n", out_file);
- }
- goto finish;
- }
+ goto finish;
if (lto_mode == LTO_MODE_LTO)
{
@@ -1402,11 +1450,7 @@ cont:
}
finish:
- if (offloadend)
- printf ("%s\n", offloadend);
-
XDELETE (lto_argv);
- XDELETE (offload_argv);
obstack_free (&argv_obstack, NULL);
}
diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog
index 6496fd9..dbb69a2 100644
--- a/gcc/lto/ChangeLog
+++ b/gcc/lto/ChangeLog
@@ -1,3 +1,14 @@
+2016-03-17 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR lto/70258
+ * lto-lang.c (lto_post_options): Set flag_pic to flag_pie for
+ PIE.
+
+2016-03-08 Jakub Jelinek <jakub@redhat.com>
+
+ * lto-symtab.h (lto_symtab_prevail_decl): Fix spelling
+ - becuase -> because.
+
2016-02-15 Tom de Vries <tom@codesourcery.com>
PR lto/69655
diff --git a/gcc/lto/lto-lang.c b/gcc/lto/lto-lang.c
index 691e9e2..b5efe3a 100644
--- a/gcc/lto/lto-lang.c
+++ b/gcc/lto/lto-lang.c
@@ -836,7 +836,7 @@ lto_post_options (const char **pfilename ATTRIBUTE_UNUSED)
/* If -fPIC or -fPIE was used at compile time, be sure that
flag_pie is 2. */
flag_pie = MAX (flag_pie, flag_pic);
- flag_pic = 0;
+ flag_pic = flag_pie;
break;
case LTO_LINKER_OUTPUT_EXEC: /* Normal executable */
diff --git a/gcc/lto/lto-symtab.h b/gcc/lto/lto-symtab.h
index 2dccde6e..821e2e0 100644
--- a/gcc/lto/lto-symtab.h
+++ b/gcc/lto/lto-symtab.h
@@ -25,7 +25,7 @@ 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
disturb debug_tree and diagnostics.
- We are safe to modify them as we wish, becuase the declarations disappear
+ We are safe to modify them as we wish, because the declarations disappear
from the IL after the merging. */
inline void
diff --git a/gcc/match.pd b/gcc/match.pd
index a0c6a3a..75aa601 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -293,7 +293,8 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
/* X % -Y is the same as X % Y. */
(simplify
(trunc_mod @0 (convert? (negate @1)))
- (if (!TYPE_UNSIGNED (type)
+ (if (INTEGRAL_TYPE_P (type)
+ && !TYPE_UNSIGNED (type)
&& !TYPE_OVERFLOW_TRAPS (type)
&& tree_nop_conversion_p (type, TREE_TYPE (@1))
/* Avoid this transformation if X might be INT_MIN or
@@ -1063,7 +1064,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
/* If the constant operation overflows we cannot do the transform
as we would introduce undefined overflow, for example
with (a - 1) + INT_MIN. */
- (with { tree cst = fold_binary (outer_op == inner_op
+ (with { tree cst = const_binop (outer_op == inner_op
? PLUS_EXPR : MINUS_EXPR, type, @1, @2); }
(if (cst && !TREE_OVERFLOW (cst))
(inner_op @0 { cst; } ))))))
@@ -1072,7 +1073,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(for outer_op (plus minus)
(simplify
(outer_op (minus CONSTANT_CLASS_P@1 @0) CONSTANT_CLASS_P@2)
- (with { tree cst = fold_binary (outer_op, type, @1, @2); }
+ (with { tree cst = const_binop (outer_op, type, @1, @2); }
(if (cst && !TREE_OVERFLOW (cst))
(minus { cst; } @0)))))
@@ -1270,7 +1271,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
RROTATE_EXPR by a new constant. */
(simplify
(lrotate @0 INTEGER_CST@1)
- (rrotate @0 { fold_binary (MINUS_EXPR, TREE_TYPE (@1),
+ (rrotate @0 { const_binop (MINUS_EXPR, TREE_TYPE (@1),
build_int_cst (TREE_TYPE (@1),
element_precision (type)), @1); }))
@@ -1553,7 +1554,8 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
/* A truncation to an unsigned type (a zero-extension) should be
canonicalized as bitwise and of a mask. */
- (if (final_int && inter_int && inside_int
+ (if (GIMPLE /* PR70366: doing this in GENERIC breaks -Wconversion. */
+ && final_int && inter_int && inside_int
&& final_prec == inside_prec
&& final_prec > inter_prec
&& inter_unsignedp)
@@ -1596,7 +1598,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(simplify
(plus @0 REAL_CST@1)
(if (REAL_VALUE_NEGATIVE (TREE_REAL_CST (@1)))
- (with { tree tem = fold_unary (NEGATE_EXPR, type, @1); }
+ (with { tree tem = const_unop (NEGATE_EXPR, type, @1); }
(if (!TREE_OVERFLOW (tem) || !flag_trapping_math)
(minus @0 { tem; })))))
@@ -1751,26 +1753,26 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(cnd (logical_inverted_value truth_valued_p@0) @1 @2)
(cnd @0 @2 @1)))
-/* A + (B vcmp C ? 1 : 0) -> A - (B vcmp C), since vector comparisons
- return all-1 or all-0 results. */
+/* A + (B vcmp C ? 1 : 0) -> A - (B vcmp C ? -1 : 0), since vector comparisons
+ return all -1 or all 0 results. */
/* ??? We could instead convert all instances of the vec_cond to negate,
but that isn't necessarily a win on its own. */
(simplify
- (plus:c @3 (view_convert? (vec_cond @0 integer_each_onep@1 integer_zerop@2)))
+ (plus:c @3 (view_convert? (vec_cond:s @0 integer_each_onep@1 integer_zerop@2)))
(if (VECTOR_TYPE_P (type)
- && TYPE_VECTOR_SUBPARTS (type) == TYPE_VECTOR_SUBPARTS (TREE_TYPE (@0))
+ && TYPE_VECTOR_SUBPARTS (type) == TYPE_VECTOR_SUBPARTS (TREE_TYPE (@1))
&& (TYPE_MODE (TREE_TYPE (type))
- == TYPE_MODE (TREE_TYPE (TREE_TYPE (@0)))))
- (minus @3 (view_convert @0))))
+ == TYPE_MODE (TREE_TYPE (TREE_TYPE (@1)))))
+ (minus @3 (view_convert (vec_cond @0 (negate @1) @2)))))
-/* ... likewise A - (B vcmp C ? 1 : 0) -> A + (B vcmp C). */
+/* ... likewise A - (B vcmp C ? 1 : 0) -> A + (B vcmp C ? -1 : 0). */
(simplify
- (minus @3 (view_convert? (vec_cond @0 integer_each_onep@1 integer_zerop@2)))
+ (minus @3 (view_convert? (vec_cond:s @0 integer_each_onep@1 integer_zerop@2)))
(if (VECTOR_TYPE_P (type)
- && TYPE_VECTOR_SUBPARTS (type) == TYPE_VECTOR_SUBPARTS (TREE_TYPE (@0))
+ && TYPE_VECTOR_SUBPARTS (type) == TYPE_VECTOR_SUBPARTS (TREE_TYPE (@1))
&& (TYPE_MODE (TREE_TYPE (type))
- == TYPE_MODE (TREE_TYPE (TREE_TYPE (@0)))))
- (plus @3 (view_convert @0))))
+ == TYPE_MODE (TREE_TYPE (TREE_TYPE (@1)))))
+ (plus @3 (view_convert (vec_cond @0 (negate @1) @2)))))
/* Simplifications of comparisons. */
@@ -1863,7 +1865,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(simplify
(cmp @0 @0)
(if (! FLOAT_TYPE_P (TREE_TYPE (@0))
- || ! HONOR_NANS (TYPE_MODE (TREE_TYPE (@0))))
+ || ! HONOR_NANS (@0))
{ constant_boolean_node (true, type); }
(if (cmp != EQ_EXPR)
(eq @0 @0)))))
@@ -1872,7 +1874,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(cmp @0 @0)
(if (cmp != NE_EXPR
|| ! FLOAT_TYPE_P (TREE_TYPE (@0))
- || ! HONOR_NANS (TYPE_MODE (TREE_TYPE (@0))))
+ || ! HONOR_NANS (@0))
{ constant_boolean_node (false, type); })))
(for cmp (unle unge uneq)
(simplify
@@ -2149,7 +2151,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(if (FLOAT_TYPE_P (TREE_TYPE (@0))
|| (ANY_INTEGRAL_TYPE_P (TREE_TYPE (@0))
&& TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (@0))))
- (with { tree tem = fold_unary (NEGATE_EXPR, TREE_TYPE (@0), @1); }
+ (with { tree tem = const_unop (NEGATE_EXPR, TREE_TYPE (@0), @1); }
(if (tem && !TREE_OVERFLOW (tem))
(scmp @0 { tem; }))))))
diff --git a/gcc/mem-stats.h b/gcc/mem-stats.h
index 0b1dda2..d3a324e 100644
--- a/gcc/mem-stats.h
+++ b/gcc/mem-stats.h
@@ -190,10 +190,11 @@ struct mem_usage
{
char *location_string = loc->to_string ();
- fprintf (stderr, "%-48s %10li:%5.1f%%%10li%10li:%5.1f%%%10s\n",
- location_string,
- (long)m_allocated, get_percent (m_allocated, total.m_allocated),
- (long)m_peak, (long)m_times,
+ fprintf (stderr, "%-48s %10" PRIu64 ":%5.1f%%"
+ "%10" PRIu64 "%10" PRIu64 ":%5.1f%%%10s\n",
+ location_string, (uint64_t)m_allocated,
+ get_percent (m_allocated, total.m_allocated),
+ (uint64_t)m_peak, (uint64_t)m_times,
get_percent (m_times, total.m_times), loc->m_ggc ? "ggc" : "heap");
free (location_string);
@@ -204,8 +205,8 @@ struct mem_usage
dump_footer () const
{
print_dash_line ();
- fprintf (stderr, "%s%54li%27li\n", "Total", (long)m_allocated,
- (long)m_times);
+ fprintf (stderr, "%s%54" PRIu64 "%27" PRIu64 "\n", "Total",
+ (uint64_t)m_allocated, (uint64_t)m_times);
print_dash_line ();
}
diff --git a/gcc/omp-low.c b/gcc/omp-low.c
index fcbb3e0..7335abc 100644
--- a/gcc/omp-low.c
+++ b/gcc/omp-low.c
@@ -241,8 +241,9 @@ struct oacc_loop
tree routine; /* Pseudo-loop enclosing a routine. */
unsigned mask; /* Partitioning mask. */
- unsigned flags; /* Partitioning flags. */
- tree chunk_size; /* Chunk size. */
+ unsigned flags; /* Partitioning flags. */
+ unsigned ifns; /* Contained loop abstraction functions. */
+ tree chunk_size; /* Chunk size. */
gcall *head_end; /* Final marker of head sequence. */
};
@@ -2121,7 +2122,8 @@ scan_sharing_clauses (tree clauses, omp_context *ctx,
else
install_var_field (decl, true, 3, ctx,
base_pointers_restrict);
- if (is_gimple_omp_offloaded (ctx->stmt))
+ if (is_gimple_omp_offloaded (ctx->stmt)
+ && !OMP_CLAUSE_MAP_IN_REDUCTION (c))
install_var_local (decl, ctx);
}
}
@@ -2378,19 +2380,21 @@ scan_sharing_clauses (tree clauses, omp_context *ctx,
gcc_checking_assert (!scan_array_reductions
|| !is_gimple_omp_oacc (ctx->stmt));
if (scan_array_reductions)
- for (c = clauses; c; c = OMP_CLAUSE_CHAIN (c))
- if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
- && OMP_CLAUSE_REDUCTION_PLACEHOLDER (c))
- {
- scan_omp (&OMP_CLAUSE_REDUCTION_GIMPLE_INIT (c), ctx);
- scan_omp (&OMP_CLAUSE_REDUCTION_GIMPLE_MERGE (c), ctx);
- }
- else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
- && OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ (c))
- scan_omp (&OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ (c), ctx);
- else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LINEAR
- && OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c))
- scan_omp (&OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c), ctx);
+ {
+ for (c = clauses; c; c = OMP_CLAUSE_CHAIN (c))
+ if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
+ && OMP_CLAUSE_REDUCTION_PLACEHOLDER (c))
+ {
+ scan_omp (&OMP_CLAUSE_REDUCTION_GIMPLE_INIT (c), ctx);
+ scan_omp (&OMP_CLAUSE_REDUCTION_GIMPLE_MERGE (c), ctx);
+ }
+ else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
+ && OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ (c))
+ scan_omp (&OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ (c), ctx);
+ else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LINEAR
+ && OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c))
+ scan_omp (&OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c), ctx);
+ }
}
/* Create a new name for omp child function. Returns an identifier. If
@@ -3236,19 +3240,26 @@ check_omp_nesting_restrictions (gimple *stmt, omp_context *ctx)
/* No nesting of non-OpenACC STMT (that is, an OpenMP one, or a GOMP builtin)
inside an OpenACC CTX. */
if (!(is_gimple_omp (stmt)
- && is_gimple_omp_oacc (stmt)))
- {
- for (omp_context *octx = ctx; octx != NULL; octx = octx->outer)
- if (is_gimple_omp (octx->stmt)
- && is_gimple_omp_oacc (octx->stmt)
- /* Except for atomic codes that we share with OpenMP. */
- && ! (gimple_code (stmt) == GIMPLE_OMP_ATOMIC_LOAD
- || gimple_code (stmt) == GIMPLE_OMP_ATOMIC_STORE))
- {
- error_at (gimple_location (stmt),
- "non-OpenACC construct inside of OpenACC region");
- return false;
- }
+ && is_gimple_omp_oacc (stmt))
+ /* Except for atomic codes that we share with OpenMP. */
+ && !(gimple_code (stmt) == GIMPLE_OMP_ATOMIC_LOAD
+ || gimple_code (stmt) == GIMPLE_OMP_ATOMIC_STORE))
+ {
+ if (get_oacc_fn_attrib (cfun->decl) != NULL)
+ {
+ error_at (gimple_location (stmt),
+ "non-OpenACC construct inside of OpenACC routine");
+ return false;
+ }
+ else
+ for (omp_context *octx = ctx; octx != NULL; octx = octx->outer)
+ if (is_gimple_omp (octx->stmt)
+ && is_gimple_omp_oacc (octx->stmt))
+ {
+ error_at (gimple_location (stmt),
+ "non-OpenACC construct inside of OpenACC region");
+ return false;
+ }
}
if (ctx != NULL)
@@ -3715,6 +3726,14 @@ check_omp_nesting_restrictions (gimple *stmt, omp_context *ctx)
kind == OMP_CLAUSE_DEPEND_SOURCE ? "source" : "sink");
return false;
}
+ if (is_gimple_omp_offloaded (stmt)
+ && get_oacc_fn_attrib (cfun->decl) != NULL)
+ {
+ error_at (gimple_location (stmt),
+ "OpenACC region inside of OpenACC routine, nested "
+ "parallelism not supported yet");
+ return false;
+ }
for (; ctx != NULL; ctx = ctx->outer)
{
if (gimple_code (ctx->stmt) != GIMPLE_OMP_TARGET)
@@ -4821,7 +4840,7 @@ lower_rec_input_clauses (tree clauses, gimple_seq *ilist, gimple_seq *dlist,
gimplify_assign (ptr, x, ilist);
}
}
- else if (is_reference (var) && !is_oacc_parallel (ctx))
+ else if (is_reference (var))
{
/* For references that are being privatized for Fortran,
allocate new backing storage for the new pointer
@@ -5557,7 +5576,8 @@ lower_oacc_reductions (location_t loc, tree clauses, tree level, bool inner,
tree orig = OMP_CLAUSE_DECL (c);
tree var = maybe_lookup_decl (orig, ctx);
tree ref_to_res = NULL_TREE;
- tree incoming, outgoing;
+ tree incoming, outgoing, v1, v2, v3;
+ bool is_private = false;
enum tree_code rcode = OMP_CLAUSE_REDUCTION_CODE (c);
if (rcode == MINUS_EXPR)
@@ -5570,7 +5590,6 @@ lower_oacc_reductions (location_t loc, tree clauses, tree level, bool inner,
if (!var)
var = orig;
- gcc_assert (!is_reference (var));
incoming = outgoing = var;
@@ -5606,22 +5625,38 @@ lower_oacc_reductions (location_t loc, tree clauses, tree level, bool inner,
for (; cls; cls = OMP_CLAUSE_CHAIN (cls))
if (OMP_CLAUSE_CODE (cls) == OMP_CLAUSE_REDUCTION
&& orig == OMP_CLAUSE_DECL (cls))
- goto has_outer_reduction;
+ {
+ incoming = outgoing = lookup_decl (orig, probe);
+ goto has_outer_reduction;
+ }
+ else if ((OMP_CLAUSE_CODE (cls) == OMP_CLAUSE_FIRSTPRIVATE
+ || OMP_CLAUSE_CODE (cls) == OMP_CLAUSE_PRIVATE)
+ && orig == OMP_CLAUSE_DECL (cls))
+ {
+ is_private = true;
+ goto do_lookup;
+ }
}
do_lookup:
/* This is the outermost construct with this reduction,
see if there's a mapping for it. */
if (gimple_code (outer->stmt) == GIMPLE_OMP_TARGET
- && maybe_lookup_field (orig, outer))
+ && maybe_lookup_field (orig, outer) && !is_private)
{
ref_to_res = build_receiver_ref (orig, false, outer);
if (is_reference (orig))
ref_to_res = build_simple_mem_ref (ref_to_res);
+ tree type = TREE_TYPE (var);
+ if (POINTER_TYPE_P (type))
+ type = TREE_TYPE (type);
+
outgoing = var;
- incoming = omp_reduction_init_op (loc, rcode, TREE_TYPE (var));
+ incoming = omp_reduction_init_op (loc, rcode, type);
}
+ else if (ctx->outer)
+ incoming = outgoing = lookup_decl (orig, ctx->outer);
else
incoming = outgoing = orig;
@@ -5631,6 +5666,37 @@ lower_oacc_reductions (location_t loc, tree clauses, tree level, bool inner,
if (!ref_to_res)
ref_to_res = integer_zero_node;
+ if (is_reference (orig))
+ {
+ tree type = TREE_TYPE (var);
+ const char *id = IDENTIFIER_POINTER (DECL_NAME (var));
+
+ if (!inner)
+ {
+ tree x = create_tmp_var (TREE_TYPE (type), id);
+ gimplify_assign (var, build_fold_addr_expr (x), fork_seq);
+ }
+
+ v1 = create_tmp_var (type, id);
+ v2 = create_tmp_var (type, id);
+ v3 = create_tmp_var (type, id);
+
+ gimplify_assign (v1, var, fork_seq);
+ gimplify_assign (v2, var, fork_seq);
+ gimplify_assign (v3, var, fork_seq);
+
+ var = build_simple_mem_ref (var);
+ v1 = build_simple_mem_ref (v1);
+ v2 = build_simple_mem_ref (v2);
+ v3 = build_simple_mem_ref (v3);
+ outgoing = build_simple_mem_ref (outgoing);
+
+ if (TREE_CODE (incoming) != INTEGER_CST)
+ incoming = build_simple_mem_ref (incoming);
+ }
+ else
+ v1 = v2 = v3 = var;
+
/* Determine position in reduction buffer, which may be used
by target. */
enum machine_mode mode = TYPE_MODE (TREE_TYPE (var));
@@ -5660,20 +5726,20 @@ lower_oacc_reductions (location_t loc, tree clauses, tree level, bool inner,
= build_call_expr_internal_loc (loc, IFN_GOACC_REDUCTION,
TREE_TYPE (var), 6, init_code,
unshare_expr (ref_to_res),
- var, level, op, off);
+ v1, level, op, off);
tree fini_call
= build_call_expr_internal_loc (loc, IFN_GOACC_REDUCTION,
TREE_TYPE (var), 6, fini_code,
unshare_expr (ref_to_res),
- var, level, op, off);
+ v2, level, op, off);
tree teardown_call
= build_call_expr_internal_loc (loc, IFN_GOACC_REDUCTION,
TREE_TYPE (var), 6, teardown_code,
- ref_to_res, var, level, op, off);
+ ref_to_res, v3, level, op, off);
- gimplify_assign (var, setup_call, &before_fork);
- gimplify_assign (var, init_call, &after_fork);
- gimplify_assign (var, fini_call, &before_join);
+ gimplify_assign (v1, setup_call, &before_fork);
+ gimplify_assign (v2, init_call, &after_fork);
+ gimplify_assign (v3, fini_call, &before_join);
gimplify_assign (outgoing, teardown_call, &after_join);
}
@@ -5915,9 +5981,6 @@ lower_reduction_clauses (tree clauses, gimple_seq *stmt_seqp, omp_context *ctx)
}
}
- if (is_gimple_omp_oacc (ctx->stmt))
- return;
-
stmt = gimple_build_call (builtin_decl_explicit (BUILT_IN_GOMP_ATOMIC_START),
0);
gimple_seq_add_stmt (stmt_seqp, stmt);
@@ -6091,8 +6154,15 @@ lower_send_clauses (tree clauses, gimple_seq *ilist, gimple_seq *olist,
switch (OMP_CLAUSE_CODE (c))
{
- case OMP_CLAUSE_PRIVATE:
case OMP_CLAUSE_FIRSTPRIVATE:
+ if (OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT (c)
+ && !by_ref
+ && is_task_ctx (ctx))
+ TREE_NO_WARNING (var) = 1;
+ do_in = true;
+ break;
+
+ case OMP_CLAUSE_PRIVATE:
case OMP_CLAUSE_COPYIN:
case OMP_CLAUSE__LOOPTEMP_:
do_in = true;
@@ -15660,7 +15730,6 @@ lower_omp_target (gimple_stmt_iterator *gsi_p, omp_context *ctx)
location_t loc = gimple_location (stmt);
bool offloaded, data_region;
unsigned int map_cnt = 0;
- bool has_depend = false;
offloaded = is_gimple_omp_offloaded (stmt);
switch (gimple_omp_target_kind (stmt))
@@ -15695,7 +15764,6 @@ lower_omp_target (gimple_stmt_iterator *gsi_p, omp_context *ctx)
dep_bind = gimple_build_bind (NULL, NULL, make_node (BLOCK));
lower_depend_clauses (gimple_omp_target_clauses_ptr (stmt),
&dep_ilist, &dep_olist);
- has_depend = true;
}
tgt_bind = NULL;
@@ -15730,7 +15798,7 @@ lower_omp_target (gimple_stmt_iterator *gsi_p, omp_context *ctx)
case GOMP_MAP_TOFROM:
case GOMP_MAP_POINTER:
case GOMP_MAP_TO_PSET:
- case GOMP_MAP_FORCE_DEALLOC:
+ case GOMP_MAP_DELETE:
case GOMP_MAP_RELEASE:
case GOMP_MAP_ALWAYS_TO:
case GOMP_MAP_ALWAYS_FROM:
@@ -15804,7 +15872,10 @@ lower_omp_target (gimple_stmt_iterator *gsi_p, omp_context *ctx)
if (!maybe_lookup_field (var, ctx))
continue;
- if (offloaded)
+ /* Don't remap oacc parallel reduction variables, because the
+ intermediate result must be local to each gang. */
+ if (offloaded && !(OMP_CLAUSE_CODE (c) == OMP_CLAUSE_MAP
+ && OMP_CLAUSE_MAP_IN_REDUCTION (c)))
{
x = build_receiver_ref (var, true, ctx);
tree new_var = lookup_decl (var, ctx);
@@ -16052,7 +16123,12 @@ lower_omp_target (gimple_stmt_iterator *gsi_p, omp_context *ctx)
{
gcc_assert (is_gimple_omp_oacc (ctx->stmt));
if (!is_reference (var))
- var = build_fold_addr_expr (var);
+ {
+ if (is_gimple_reg (var)
+ && OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT (c))
+ TREE_NO_WARNING (var) = 1;
+ var = build_fold_addr_expr (var);
+ }
else
talign = TYPE_ALIGN_UNIT (TREE_TYPE (TREE_TYPE (ovar)));
gimplify_assign (x, var, &ilist);
@@ -16067,7 +16143,16 @@ lower_omp_target (gimple_stmt_iterator *gsi_p, omp_context *ctx)
|| map_kind == GOMP_MAP_POINTER
|| map_kind == GOMP_MAP_TO_PSET
|| map_kind == GOMP_MAP_FORCE_DEVICEPTR)
- gimplify_assign (avar, var, &ilist);
+ {
+ /* If we need to initialize a temporary
+ with VAR because it is not addressable, and
+ the variable hasn't been initialized yet, then
+ we'll get a warning for the store to avar.
+ Don't warn in that case, the mapping might
+ be implicit. */
+ TREE_NO_WARNING (var) = 1;
+ gimplify_assign (avar, var, &ilist);
+ }
avar = build_fold_addr_expr (avar);
gimplify_assign (x, avar, &ilist);
if ((GOMP_MAP_COPY_FROM_P (map_kind)
@@ -16193,49 +16278,16 @@ lower_omp_target (gimple_stmt_iterator *gsi_p, omp_context *ctx)
type = TREE_TYPE (ovar);
if (is_reference (ovar))
type = TREE_TYPE (type);
- bool use_firstprivate_int, force_addr;
- use_firstprivate_int = false;
- force_addr = false;
if ((INTEGRAL_TYPE_P (type)
&& TYPE_PRECISION (type) <= POINTER_SIZE)
|| TREE_CODE (type) == POINTER_TYPE)
- use_firstprivate_int = true;
- if (has_depend)
- {
- if (is_reference (var))
- use_firstprivate_int = false;
- else if (is_gimple_reg (var))
- {
- if (DECL_HAS_VALUE_EXPR_P (var))
- {
- tree v = get_base_address (var);
- if (DECL_P (v) && TREE_ADDRESSABLE (v))
- {
- use_firstprivate_int = false;
- force_addr = true;
- }
- else
- switch (TREE_CODE (v))
- {
- case INDIRECT_REF:
- case MEM_REF:
- use_firstprivate_int = false;
- force_addr = true;
- break;
- default:
- break;
- }
- }
- }
- else
- use_firstprivate_int = false;
- }
- if (use_firstprivate_int)
{
tkind = GOMP_MAP_FIRSTPRIVATE_INT;
tree t = var;
if (is_reference (var))
t = build_simple_mem_ref (var);
+ else if (OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT (c))
+ TREE_NO_WARNING (var) = 1;
if (TREE_CODE (type) != POINTER_TYPE)
t = fold_convert (pointer_sized_int_node, t);
t = fold_convert (TREE_TYPE (x), t);
@@ -16243,10 +16295,12 @@ lower_omp_target (gimple_stmt_iterator *gsi_p, omp_context *ctx)
}
else if (is_reference (var))
gimplify_assign (x, var, &ilist);
- else if (!force_addr && is_gimple_reg (var))
+ else if (is_gimple_reg (var))
{
tree avar = create_tmp_var (TREE_TYPE (var));
mark_addressable (avar);
+ if (OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT (c))
+ TREE_NO_WARNING (var) = 1;
gimplify_assign (avar, var, &ilist);
avar = build_fold_addr_expr (avar);
gimplify_assign (x, avar, &ilist);
@@ -16379,40 +16433,9 @@ lower_omp_target (gimple_stmt_iterator *gsi_p, omp_context *ctx)
type = TREE_TYPE (var);
if (is_reference (var))
type = TREE_TYPE (type);
- bool use_firstprivate_int;
- use_firstprivate_int = false;
if ((INTEGRAL_TYPE_P (type)
&& TYPE_PRECISION (type) <= POINTER_SIZE)
|| TREE_CODE (type) == POINTER_TYPE)
- use_firstprivate_int = true;
- if (has_depend)
- {
- tree v = lookup_decl_in_outer_ctx (var, ctx);
- if (is_reference (v))
- use_firstprivate_int = false;
- else if (is_gimple_reg (v))
- {
- if (DECL_HAS_VALUE_EXPR_P (v))
- {
- v = get_base_address (v);
- if (DECL_P (v) && TREE_ADDRESSABLE (v))
- use_firstprivate_int = false;
- else
- switch (TREE_CODE (v))
- {
- case INDIRECT_REF:
- case MEM_REF:
- use_firstprivate_int = false;
- break;
- default:
- break;
- }
- }
- }
- else
- use_firstprivate_int = false;
- }
- if (use_firstprivate_int)
{
x = build_receiver_ref (var, false, ctx);
if (TREE_CODE (type) != POINTER_TYPE)
@@ -16472,13 +16495,7 @@ lower_omp_target (gimple_stmt_iterator *gsi_p, omp_context *ctx)
x = build_fold_addr_expr_loc (clause_loc, x);
}
else
- {
- tree atmp
- = builtin_decl_explicit (BUILT_IN_ALLOCA_WITH_ALIGN);
- tree rtype = TREE_TYPE (TREE_TYPE (new_var));
- tree al = size_int (TYPE_ALIGN (rtype));
- x = build_call_expr_loc (clause_loc, atmp, 2, x, al);
- }
+ break;
x = fold_convert_loc (clause_loc, TREE_TYPE (new_var), x);
gimplify_expr (&x, &new_body, NULL, is_gimple_val, fb_rvalue);
@@ -16545,7 +16562,8 @@ lower_omp_target (gimple_stmt_iterator *gsi_p, omp_context *ctx)
}
/* Handle GOMP_MAP_FIRSTPRIVATE_{POINTER,REFERENCE} in second pass,
so that firstprivate vars holding OMP_CLAUSE_SIZE if needed
- are already handled. */
+ are already handled. Similarly OMP_CLAUSE_PRIVATE for VLAs
+ or references to VLAs. */
for (c = clauses; c; c = OMP_CLAUSE_CHAIN (c))
switch (OMP_CLAUSE_CODE (c))
{
@@ -16687,6 +16705,27 @@ lower_omp_target (gimple_stmt_iterator *gsi_p, omp_context *ctx)
gimple_seq_add_stmt (&new_body,
gimple_build_assign (new_pvar, x));
}
+ else if (is_reference (var) && !is_gimple_omp_oacc (ctx->stmt))
+ {
+ location_t clause_loc = OMP_CLAUSE_LOCATION (c);
+ tree new_var = lookup_decl (var, ctx);
+ tree x = TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (new_var)));
+ if (TREE_CONSTANT (x))
+ break;
+ else
+ {
+ tree atmp
+ = builtin_decl_explicit (BUILT_IN_ALLOCA_WITH_ALIGN);
+ tree rtype = TREE_TYPE (TREE_TYPE (new_var));
+ tree al = size_int (TYPE_ALIGN (rtype));
+ x = build_call_expr_loc (clause_loc, atmp, 2, x, al);
+ }
+
+ x = fold_convert_loc (clause_loc, TREE_TYPE (new_var), x);
+ gimplify_expr (&x, &new_body, NULL, is_gimple_val, fb_rvalue);
+ gimple_seq_add_stmt (&new_body,
+ gimple_build_assign (new_var, x));
+ }
break;
}
@@ -17241,7 +17280,7 @@ grid_find_single_omp_among_assignments (gimple_seq seq, location_t target_loc,
static tree
grid_find_ungridifiable_statement (gimple_stmt_iterator *gsi,
bool *handled_ops_p,
- struct walk_stmt_info *)
+ struct walk_stmt_info *wi)
{
*handled_ops_p = false;
gimple *stmt = gsi_stmt (*gsi);
@@ -17251,6 +17290,7 @@ grid_find_ungridifiable_statement (gimple_stmt_iterator *gsi,
if (gimple_call_noreturn_p (as_a <gcall *> (stmt)))
{
*handled_ops_p = true;
+ wi->info = stmt;
return error_mark_node;
}
break;
@@ -17266,8 +17306,19 @@ grid_find_ungridifiable_statement (gimple_stmt_iterator *gsi,
case GIMPLE_OMP_TARGET:
case GIMPLE_OMP_ORDERED:
*handled_ops_p = true;
+ wi->info = stmt;
return error_mark_node;
+ case GIMPLE_OMP_FOR:
+ if ((gimple_omp_for_kind (stmt) & GF_OMP_FOR_SIMD)
+ && gimple_omp_for_combined_into_p (stmt))
+ {
+ *handled_ops_p = true;
+ wi->info = stmt;
+ return error_mark_node;
+ }
+ break;
+
default:
break;
}
@@ -17509,10 +17560,11 @@ grid_target_follows_gridifiable_pattern (gomp_target *target, tree *group_size_p
struct walk_stmt_info wi;
memset (&wi, 0, sizeof (wi));
- if (gimple *bad = walk_gimple_seq (gimple_omp_body (gfor),
- grid_find_ungridifiable_statement,
- NULL, &wi))
+ if (walk_gimple_seq (gimple_omp_body (gfor),
+ grid_find_ungridifiable_statement,
+ NULL, &wi))
{
+ gimple *bad = (gimple *) wi.info;
if (dump_enabled_p ())
{
if (is_gimple_call (bad))
@@ -17520,6 +17572,11 @@ grid_target_follows_gridifiable_pattern (gomp_target *target, tree *group_size_p
"Will not turn target construct into a gridified "
" GPGPU kernel because the inner loop contains "
"call to a noreturn function\n");
+ if (gimple_code (bad) == GIMPLE_OMP_FOR)
+ dump_printf_loc (MSG_NOTE, tloc,
+ "Will not turn target construct into a gridified "
+ " GPGPU kernel because the inner loop contains "
+ "a simd construct\n");
else
dump_printf_loc (MSG_NOTE, tloc,
"Will not turn target construct into a gridified "
@@ -18846,7 +18903,9 @@ simd_clone_adjust_argument_types (struct cgraph_node *node)
adjustments.create (args.length ());
unsigned i, j, veclen;
struct ipa_parm_adjustment adj;
- for (i = 0; i < node->simdclone->nargs; ++i)
+ struct cgraph_simd_clone *sc = node->simdclone;
+
+ for (i = 0; i < sc->nargs; ++i)
{
memset (&adj, 0, sizeof (adj));
tree parm = args[i];
@@ -18854,10 +18913,10 @@ simd_clone_adjust_argument_types (struct cgraph_node *node)
adj.base_index = i;
adj.base = parm;
- node->simdclone->args[i].orig_arg = node->definition ? parm : NULL_TREE;
- node->simdclone->args[i].orig_type = parm_type;
+ sc->args[i].orig_arg = node->definition ? parm : NULL_TREE;
+ sc->args[i].orig_type = parm_type;
- switch (node->simdclone->args[i].arg_type)
+ switch (sc->args[i].arg_type)
{
default:
/* No adjustment necessary for scalar arguments. */
@@ -18866,29 +18925,29 @@ simd_clone_adjust_argument_types (struct cgraph_node *node)
case SIMD_CLONE_ARG_TYPE_LINEAR_UVAL_CONSTANT_STEP:
case SIMD_CLONE_ARG_TYPE_LINEAR_UVAL_VARIABLE_STEP:
if (node->definition)
- node->simdclone->args[i].simd_array
+ sc->args[i].simd_array
= create_tmp_simd_array (IDENTIFIER_POINTER (DECL_NAME (parm)),
TREE_TYPE (parm_type),
- node->simdclone->simdlen);
+ sc->simdlen);
adj.op = IPA_PARM_OP_COPY;
break;
case SIMD_CLONE_ARG_TYPE_LINEAR_VAL_CONSTANT_STEP:
case SIMD_CLONE_ARG_TYPE_LINEAR_VAL_VARIABLE_STEP:
case SIMD_CLONE_ARG_TYPE_VECTOR:
if (INTEGRAL_TYPE_P (parm_type) || POINTER_TYPE_P (parm_type))
- veclen = node->simdclone->vecsize_int;
+ veclen = sc->vecsize_int;
else
- veclen = node->simdclone->vecsize_float;
+ veclen = sc->vecsize_float;
veclen /= GET_MODE_BITSIZE (TYPE_MODE (parm_type));
- if (veclen > node->simdclone->simdlen)
- veclen = node->simdclone->simdlen;
+ if (veclen > sc->simdlen)
+ veclen = sc->simdlen;
adj.arg_prefix = "simd";
if (POINTER_TYPE_P (parm_type))
adj.type = build_vector_type (pointer_sized_int_node, veclen);
else
adj.type = build_vector_type (parm_type, veclen);
- node->simdclone->args[i].vector_type = adj.type;
- for (j = veclen; j < node->simdclone->simdlen; j += veclen)
+ sc->args[i].vector_type = adj.type;
+ for (j = veclen; j < sc->simdlen; j += veclen)
{
adjustments.safe_push (adj);
if (j == veclen)
@@ -18897,23 +18956,21 @@ simd_clone_adjust_argument_types (struct cgraph_node *node)
adj.op = IPA_PARM_OP_NEW;
adj.arg_prefix = "simd";
adj.base_index = i;
- adj.type = node->simdclone->args[i].vector_type;
+ adj.type = sc->args[i].vector_type;
}
}
if (node->definition)
- node->simdclone->args[i].simd_array
+ sc->args[i].simd_array
= create_tmp_simd_array (IDENTIFIER_POINTER (DECL_NAME (parm)),
- parm_type, node->simdclone->simdlen);
+ parm_type, sc->simdlen);
}
adjustments.safe_push (adj);
}
- if (node->simdclone->inbranch)
+ if (sc->inbranch)
{
- tree base_type
- = simd_clone_compute_base_data_type (node->simdclone->origin,
- node->simdclone);
+ tree base_type = simd_clone_compute_base_data_type (sc->origin, sc);
memset (&adj, 0, sizeof (adj));
adj.op = IPA_PARM_OP_NEW;
@@ -18921,31 +18978,41 @@ simd_clone_adjust_argument_types (struct cgraph_node *node)
adj.base_index = i;
if (INTEGRAL_TYPE_P (base_type) || POINTER_TYPE_P (base_type))
- veclen = node->simdclone->vecsize_int;
+ veclen = sc->vecsize_int;
else
- veclen = node->simdclone->vecsize_float;
+ veclen = sc->vecsize_float;
veclen /= GET_MODE_BITSIZE (TYPE_MODE (base_type));
- if (veclen > node->simdclone->simdlen)
- veclen = node->simdclone->simdlen;
- if (POINTER_TYPE_P (base_type))
+ if (veclen > sc->simdlen)
+ veclen = sc->simdlen;
+ if (sc->mask_mode != VOIDmode)
+ adj.type
+ = lang_hooks.types.type_for_mode (sc->mask_mode, 1);
+ else if (POINTER_TYPE_P (base_type))
adj.type = build_vector_type (pointer_sized_int_node, veclen);
else
adj.type = build_vector_type (base_type, veclen);
adjustments.safe_push (adj);
- for (j = veclen; j < node->simdclone->simdlen; j += veclen)
+ for (j = veclen; j < sc->simdlen; j += veclen)
adjustments.safe_push (adj);
/* We have previously allocated one extra entry for the mask. Use
it and fill it. */
- struct cgraph_simd_clone *sc = node->simdclone;
sc->nargs++;
+ if (sc->mask_mode != VOIDmode)
+ base_type = boolean_type_node;
if (node->definition)
{
sc->args[i].orig_arg
= build_decl (UNKNOWN_LOCATION, PARM_DECL, NULL, base_type);
- sc->args[i].simd_array
- = create_tmp_simd_array ("mask", base_type, sc->simdlen);
+ if (sc->mask_mode == VOIDmode)
+ sc->args[i].simd_array
+ = create_tmp_simd_array ("mask", base_type, sc->simdlen);
+ else if (veclen < sc->simdlen)
+ sc->args[i].simd_array
+ = create_tmp_simd_array ("mask", adj.type, sc->simdlen / veclen);
+ else
+ sc->args[i].simd_array = NULL_TREE;
}
sc->args[i].orig_type = base_type;
sc->args[i].arg_type = SIMD_CLONE_ARG_TYPE_MASK;
@@ -19013,6 +19080,27 @@ simd_clone_init_simd_arrays (struct cgraph_node *node,
node->simdclone->args[i].vector_arg = arg;
tree array = node->simdclone->args[i].simd_array;
+ if (node->simdclone->mask_mode != VOIDmode
+ && node->simdclone->args[i].arg_type == SIMD_CLONE_ARG_TYPE_MASK)
+ {
+ if (array == NULL_TREE)
+ continue;
+ unsigned int l
+ = tree_to_uhwi (TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (array))));
+ for (k = 0; k <= l; k++)
+ {
+ if (k)
+ {
+ arg = DECL_CHAIN (arg);
+ j++;
+ }
+ tree t = build4 (ARRAY_REF, TREE_TYPE (TREE_TYPE (array)),
+ array, size_int (k), NULL, NULL);
+ t = build2 (MODIFY_EXPR, TREE_TYPE (t), t, arg);
+ gimplify_and_add (t, &seq);
+ }
+ continue;
+ }
if (TYPE_VECTOR_SUBPARTS (TREE_TYPE (arg)) == node->simdclone->simdlen)
{
tree ptype = build_pointer_type (TREE_TYPE (TREE_TYPE (array)));
@@ -19383,7 +19471,7 @@ simd_clone_adjust (struct cgraph_node *node)
e->probability = REG_BR_PROB_BASE;
gsi = gsi_last_bb (incr_bb);
gimple *g = gimple_build_assign (iter2, PLUS_EXPR, iter1,
- build_int_cst (unsigned_type_node, 1));
+ build_int_cst (unsigned_type_node, 1));
gsi_insert_after (&gsi, g, GSI_CONTINUE_LINKING);
/* Mostly annotate the loop for the vectorizer (the rest is done below). */
@@ -19399,21 +19487,68 @@ simd_clone_adjust (struct cgraph_node *node)
gimple_stmt_iterator gsi = gsi_last_bb (loop->header);
tree mask_array
= node->simdclone->args[node->simdclone->nargs - 1].simd_array;
- tree mask = make_ssa_name (TREE_TYPE (TREE_TYPE (mask_array)));
- tree aref = build4 (ARRAY_REF,
- TREE_TYPE (TREE_TYPE (mask_array)),
- mask_array, iter1,
- NULL, NULL);
- g = gimple_build_assign (mask, aref);
- gsi_insert_after (&gsi, g, GSI_CONTINUE_LINKING);
- int bitsize = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (aref)));
- if (!INTEGRAL_TYPE_P (TREE_TYPE (aref)))
+ tree mask;
+ if (node->simdclone->mask_mode != VOIDmode)
{
- aref = build1 (VIEW_CONVERT_EXPR,
- build_nonstandard_integer_type (bitsize, 0), mask);
- mask = make_ssa_name (TREE_TYPE (aref));
+ tree shift_cnt;
+ if (mask_array == NULL_TREE)
+ {
+ tree arg = node->simdclone->args[node->simdclone->nargs
+ - 1].vector_arg;
+ mask = get_or_create_ssa_default_def (cfun, arg);
+ shift_cnt = iter1;
+ }
+ else
+ {
+ tree maskt = TREE_TYPE (mask_array);
+ int c = tree_to_uhwi (TYPE_MAX_VALUE (TYPE_DOMAIN (maskt)));
+ c = node->simdclone->simdlen / (c + 1);
+ int s = exact_log2 (c);
+ gcc_assert (s > 0);
+ c--;
+ tree idx = make_ssa_name (TREE_TYPE (iter1));
+ g = gimple_build_assign (idx, RSHIFT_EXPR, iter1,
+ build_int_cst (NULL_TREE, s));
+ gsi_insert_after (&gsi, g, GSI_CONTINUE_LINKING);
+ mask = make_ssa_name (TREE_TYPE (TREE_TYPE (mask_array)));
+ tree aref = build4 (ARRAY_REF,
+ TREE_TYPE (TREE_TYPE (mask_array)),
+ mask_array, idx, NULL, NULL);
+ g = gimple_build_assign (mask, aref);
+ gsi_insert_after (&gsi, g, GSI_CONTINUE_LINKING);
+ shift_cnt = make_ssa_name (TREE_TYPE (iter1));
+ g = gimple_build_assign (shift_cnt, BIT_AND_EXPR, iter1,
+ build_int_cst (TREE_TYPE (iter1), c));
+ gsi_insert_after (&gsi, g, GSI_CONTINUE_LINKING);
+ }
+ g = gimple_build_assign (make_ssa_name (TREE_TYPE (mask)),
+ RSHIFT_EXPR, mask, shift_cnt);
+ gsi_insert_after (&gsi, g, GSI_CONTINUE_LINKING);
+ mask = gimple_assign_lhs (g);
+ g = gimple_build_assign (make_ssa_name (TREE_TYPE (mask)),
+ BIT_AND_EXPR, mask,
+ build_int_cst (TREE_TYPE (mask), 1));
+ gsi_insert_after (&gsi, g, GSI_CONTINUE_LINKING);
+ mask = gimple_assign_lhs (g);
+ }
+ else
+ {
+ mask = make_ssa_name (TREE_TYPE (TREE_TYPE (mask_array)));
+ tree aref = build4 (ARRAY_REF,
+ TREE_TYPE (TREE_TYPE (mask_array)),
+ mask_array, iter1, NULL, NULL);
g = gimple_build_assign (mask, aref);
gsi_insert_after (&gsi, g, GSI_CONTINUE_LINKING);
+ int bitsize = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (aref)));
+ if (!INTEGRAL_TYPE_P (TREE_TYPE (aref)))
+ {
+ aref = build1 (VIEW_CONVERT_EXPR,
+ build_nonstandard_integer_type (bitsize, 0),
+ mask);
+ mask = make_ssa_name (TREE_TYPE (aref));
+ g = gimple_build_assign (mask, aref);
+ gsi_insert_after (&gsi, g, GSI_CONTINUE_LINKING);
+ }
}
g = gimple_build_cond (EQ_EXPR, mask, build_zero_cst (TREE_TYPE (mask)),
@@ -20393,6 +20528,7 @@ new_oacc_loop_raw (oacc_loop *parent, location_t loc)
loop->routine = NULL_TREE;
loop->mask = loop->flags = 0;
+ loop->ifns = 0;
loop->chunk_size = 0;
loop->head_end = NULL;
@@ -20454,6 +20590,9 @@ new_oacc_loop_routine (oacc_loop *parent, gcall *call, tree decl, tree attrs)
static oacc_loop *
finish_oacc_loop (oacc_loop *loop)
{
+ /* If the loop has been collapsed, don't partition it. */
+ if (!loop->ifns)
+ loop->mask = loop->flags = 0;
return loop->parent;
}
@@ -20584,43 +20723,54 @@ oacc_loop_discover_walk (oacc_loop *loop, basic_block bb)
if (!gimple_call_internal_p (call))
continue;
- if (gimple_call_internal_fn (call) != IFN_UNIQUE)
- continue;
-
- enum ifn_unique_kind kind
- = (enum ifn_unique_kind) TREE_INT_CST_LOW (gimple_call_arg (call, 0));
- if (kind == IFN_UNIQUE_OACC_HEAD_MARK
- || kind == IFN_UNIQUE_OACC_TAIL_MARK)
+ switch (gimple_call_internal_fn (call))
{
- if (gimple_call_num_args (call) == 2)
- {
- gcc_assert (marker && !remaining);
- marker = 0;
- if (kind == IFN_UNIQUE_OACC_TAIL_MARK)
- loop = finish_oacc_loop (loop);
- else
- loop->head_end = call;
- }
- else
- {
- int count = TREE_INT_CST_LOW (gimple_call_arg (call, 2));
+ default:
+ break;
+
+ case IFN_GOACC_LOOP:
+ /* Count the goacc loop abstraction fns, to determine if the
+ loop was collapsed already. */
+ loop->ifns++;
+ break;
- if (!marker)
+ case IFN_UNIQUE:
+ enum ifn_unique_kind kind
+ = (enum ifn_unique_kind) (TREE_INT_CST_LOW
+ (gimple_call_arg (call, 0)));
+ if (kind == IFN_UNIQUE_OACC_HEAD_MARK
+ || kind == IFN_UNIQUE_OACC_TAIL_MARK)
+ {
+ if (gimple_call_num_args (call) == 2)
{
- if (kind == IFN_UNIQUE_OACC_HEAD_MARK)
- loop = new_oacc_loop (loop, call);
- remaining = count;
+ gcc_assert (marker && !remaining);
+ marker = 0;
+ if (kind == IFN_UNIQUE_OACC_TAIL_MARK)
+ loop = finish_oacc_loop (loop);
+ else
+ loop->head_end = call;
}
- gcc_assert (count == remaining);
- if (remaining)
+ else
{
- remaining--;
- if (kind == IFN_UNIQUE_OACC_HEAD_MARK)
- loop->heads[marker] = call;
- else
- loop->tails[remaining] = call;
+ int count = TREE_INT_CST_LOW (gimple_call_arg (call, 2));
+
+ if (!marker)
+ {
+ if (kind == IFN_UNIQUE_OACC_HEAD_MARK)
+ loop = new_oacc_loop (loop, call);
+ remaining = count;
+ }
+ gcc_assert (count == remaining);
+ if (remaining)
+ {
+ remaining--;
+ if (kind == IFN_UNIQUE_OACC_HEAD_MARK)
+ loop->heads[marker] = call;
+ else
+ loop->tails[remaining] = call;
+ }
+ marker++;
}
- marker++;
}
}
}
@@ -20723,13 +20873,19 @@ oacc_loop_xform_head_tail (gcall *from, int level)
}
/* Transform the IFN_GOACC_LOOP internal functions by providing the
- determined partitioning mask and chunking argument. */
+ determined partitioning mask and chunking argument. END_MARKER
+ points at the end IFN_HEAD_TAIL call intgroducing the loop. IFNS
+ is the number of IFN_GOACC_LOOP calls for the loop. MASK_ARG is
+ the replacement partitioning mask and CHUNK_ARG is the replacement
+ chunking arg. */
static void
-oacc_loop_xform_loop (gcall *end_marker, tree mask_arg, tree chunk_arg)
+oacc_loop_xform_loop (gcall *end_marker, unsigned ifns,
+ tree mask_arg, tree chunk_arg)
{
gimple_stmt_iterator gsi = gsi_for_stmt (end_marker);
+ gcc_checking_assert (ifns);
for (;;)
{
for (; !gsi_end_p (gsi); gsi_next (&gsi))
@@ -20749,13 +20905,13 @@ oacc_loop_xform_loop (gcall *end_marker, tree mask_arg, tree chunk_arg)
*gimple_call_arg_ptr (call, 5) = mask_arg;
*gimple_call_arg_ptr (call, 4) = chunk_arg;
- if (TREE_INT_CST_LOW (gimple_call_arg (call, 0))
- == IFN_GOACC_LOOP_BOUND)
+ ifns--;
+ if (!ifns)
return;
}
- /* If we didn't see LOOP_BOUND, it should be in the single
- successor block. */
+ /* The LOOP_BOUND ifn could be in the single successor
+ block. */
basic_block bb = single_succ (gsi_bb (gsi));
gsi = gsi_start_bb (bb);
}
@@ -20778,7 +20934,7 @@ oacc_loop_process (oacc_loop *loop)
tree mask_arg = build_int_cst (unsigned_type_node, mask);
tree chunk_arg = loop->chunk_size;
- oacc_loop_xform_loop (loop->head_end, mask_arg, chunk_arg);
+ oacc_loop_xform_loop (loop->head_end, loop->ifns, mask_arg, chunk_arg);
for (ix = 0; ix != GOMP_DIM_MAX && loop->heads[ix]; ix++)
{
diff --git a/gcc/opts.c b/gcc/opts.c
index 2f45312..0f9431a 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -766,13 +766,18 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set,
default value. */
if (opts->x_flag_pie == -1)
{
- if (opts->x_flag_pic == 0)
+ /* We initialize opts->x_flag_pic to -1 so that we can tell if
+ -fpic, -fPIC, -fno-pic or -fno-PIC is used. */
+ if (opts->x_flag_pic == -1)
opts->x_flag_pie = DEFAULT_FLAG_PIE;
else
opts->x_flag_pie = 0;
}
+ /* If -fPIE or -fpie is used, turn on PIC. */
if (opts->x_flag_pie)
opts->x_flag_pic = opts->x_flag_pie;
+ else if (opts->x_flag_pic == -1)
+ opts->x_flag_pic = 0;
if (opts->x_flag_pic && !opts->x_flag_pie)
opts->x_flag_shlib = 1;
opts->x_flag_opts_finished = true;
diff --git a/gcc/params.def b/gcc/params.def
index c0494fa..dbff305 100644
--- a/gcc/params.def
+++ b/gcc/params.def
@@ -502,7 +502,7 @@ DEFPARAM(PARAM_LIM_EXPENSIVE,
DEFPARAM(PARAM_IV_CONSIDER_ALL_CANDIDATES_BOUND,
"iv-consider-all-candidates-bound",
"Bound on number of candidates below that all candidates are considered in iv optimizations.",
- 30, 0, 0)
+ 40, 0, 0)
/* The induction variable optimizations give up on loops that contain more
induction variable uses. */
@@ -1191,7 +1191,7 @@ DEFPARAM (PARAM_MAX_SSA_NAME_QUERY_DEPTH,
"max-ssa-name-query-depth",
"Maximum recursion depth allowed when querying a property of an"
" SSA name.",
- 2, 1, 0)
+ 3, 1, 0)
DEFPARAM (PARAM_MAX_RTL_IF_CONVERSION_INSNS,
"max-rtl-if-conversion-insns",
@@ -1203,6 +1203,12 @@ DEFPARAM (PARAM_HSA_GEN_DEBUG_STORES,
"hsa-gen-debug-stores",
"Level of hsa debug stores verbosity",
0, 0, 1)
+
+DEFPARAM (PARAM_MAX_SPECULATIVE_DEVIRT_MAYDEFS,
+ "max-speculative-devirt-maydefs",
+ "Maximum number of may-defs visited when devirtualizing "
+ "speculatively", 50, 0, 0)
+
/*
Local variables:
diff --git a/gcc/passes.c b/gcc/passes.c
index 1bf89ed..e896181 100644
--- a/gcc/passes.c
+++ b/gcc/passes.c
@@ -2214,7 +2214,7 @@ execute_one_ipa_transform_pass (struct cgraph_node *node,
check_profile_consistency (pass->static_pass_number, 1, true);
if (dump_file)
- do_per_function (execute_function_dump, NULL);
+ do_per_function (execute_function_dump, pass);
pass_fini_dump_file (pass);
current_pass = NULL;
@@ -2334,6 +2334,33 @@ execute_one_pass (opt_pass *pass)
/* Do it! */
todo_after = pass->execute (cfun);
+
+ if (todo_after & TODO_discard_function)
+ {
+ pass_fini_dump_file (pass);
+
+ gcc_assert (cfun);
+ /* As cgraph_node::release_body expects release dominators info,
+ we have to release it. */
+ if (dom_info_available_p (CDI_DOMINATORS))
+ free_dominance_info (CDI_DOMINATORS);
+
+ if (dom_info_available_p (CDI_POST_DOMINATORS))
+ free_dominance_info (CDI_POST_DOMINATORS);
+
+ tree fn = cfun->decl;
+ pop_cfun ();
+ gcc_assert (!cfun);
+ cgraph_node::get (fn)->release_body ();
+
+ current_pass = NULL;
+ redirect_edge_var_map_empty ();
+
+ ggc_collect ();
+
+ return true;
+ }
+
do_per_function (clear_last_verified, NULL);
/* Stop timevar. */
@@ -2351,15 +2378,15 @@ execute_one_pass (opt_pass *pass)
check_profile_consistency (pass->static_pass_number, 1, true);
verify_interpass_invariants ();
- if (dump_file)
- do_per_function (execute_function_dump, pass);
- if (pass->type == IPA_PASS)
+ if (pass->type == IPA_PASS
+ && ((ipa_opt_pass_d *)pass)->function_transform)
{
struct cgraph_node *node;
- if (((ipa_opt_pass_d *)pass)->function_transform)
- FOR_EACH_FUNCTION_WITH_GIMPLE_BODY (node)
- node->ipa_transforms_to_apply.safe_push ((ipa_opt_pass_d *)pass);
+ FOR_EACH_FUNCTION_WITH_GIMPLE_BODY (node)
+ node->ipa_transforms_to_apply.safe_push ((ipa_opt_pass_d *)pass);
}
+ else if (dump_file)
+ do_per_function (execute_function_dump, pass);
if (!current_function_decl)
symtab->process_new_functions ();
@@ -2373,23 +2400,6 @@ execute_one_pass (opt_pass *pass)
current_pass = NULL;
redirect_edge_var_map_empty ();
- if (todo_after & TODO_discard_function)
- {
- gcc_assert (cfun);
- /* As cgraph_node::release_body expects release dominators info,
- we have to release it. */
- if (dom_info_available_p (CDI_DOMINATORS))
- free_dominance_info (CDI_DOMINATORS);
-
- if (dom_info_available_p (CDI_POST_DOMINATORS))
- free_dominance_info (CDI_POST_DOMINATORS);
-
- tree fn = cfun->decl;
- pop_cfun ();
- gcc_assert (!cfun);
- cgraph_node::get (fn)->release_body ();
- }
-
/* Signal this is a suitable GC collection point. */
if (!((todo_after | pass->todo_flags_finish) & TODO_do_not_ggc_collect))
ggc_collect ();
diff --git a/gcc/po/ChangeLog b/gcc/po/ChangeLog
index 141202b..33cc5ec 100644
--- a/gcc/po/ChangeLog
+++ b/gcc/po/ChangeLog
@@ -1,3 +1,27 @@
+2016-04-08 Joseph Myers <joseph@codesourcery.com>
+
+ * gcc.pot: Regenerate.
+
+2016-03-17 Joseph Myers <joseph@codesourcery.com>
+
+ * fr.po: Update.
+
+2016-03-12 Joseph Myers <joseph@codesourcery.com>
+
+ * sv.po: Update.
+
+2016-03-08 Joseph Myers <joseph@codesourcery.com>
+
+ * sv.po: Update.
+
+2016-02-29 Joseph Myers <joseph@codesourcery.com>
+
+ * sv.po: Update.
+
+2016-02-22 Joseph Myers <joseph@codesourcery.com>
+
+ * sv.po, vi.po: Update.
+
2016-02-15 Joseph Myers <joseph@codesourcery.com>
* sv.po: Update.
diff --git a/gcc/po/fr.po b/gcc/po/fr.po
index 80ebf4c..1baca52 100644
--- a/gcc/po/fr.po
+++ b/gcc/po/fr.po
@@ -5,7 +5,7 @@
#
# Michel Robitaille <robitail@IRO.UMontreal.CA>, traducteur depuis/since 1996.
# François-Xavier Coudert <fxcoudert@gmail.com>, 2008.
-# Stéphane Aulery <lkppo@free.fr>, 2015.
+# Stéphane Aulery <lkppo@free.fr>, 2015, 2016.
#
# Vocabulaire utilisé
# lvalue = membre gauche
@@ -122,10 +122,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: gcc 5.2.0\n"
+"Project-Id-Version: gcc 6.1-b20160131\n"
"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
"POT-Creation-Date: 2016-01-31 15:50+0000\n"
-"PO-Revision-Date: 2015-12-30 14:31+0100\n"
+"PO-Revision-Date: 2016-03-17 00:28+0100\n"
"Last-Translator: Stéphane Aulery <lkppo@free.fr>\n"
"Language-Team: French <traduc@traduc.org>\n"
"Language: fr\n"
@@ -391,185 +391,125 @@ msgid "Options:\n"
msgstr "Options :\n"
#: gcc.c:3384
-#, fuzzy
-#| msgid " -pass-exit-codes Exit with highest error code from a phase\n"
msgid " -pass-exit-codes Exit with highest error code from a phase.\n"
-msgstr " -pass-exit-codes Quitter avec le plus grand code d’erreur d’une phase\n"
+msgstr " -pass-exit-codes Quitter avec le plus grand code d’erreur d’une phase.\n"
#: gcc.c:3385
-#, fuzzy
-#| msgid " --help Display this information\n"
msgid " --help Display this information.\n"
-msgstr " --help Afficher cette aide\n"
+msgstr " --help Afficher cette aide.\n"
#: gcc.c:3386
-#, fuzzy
-#| msgid " --target-help Display target specific command line options\n"
msgid " --target-help Display target specific command line options.\n"
-msgstr " --target-help Afficher les options de ligne de commande spécifiques à la cible\n"
+msgstr " --target-help Afficher les options de ligne de commande spécifiques à la cible.\n"
#: gcc.c:3387
-#, fuzzy
-#| msgid " --help={common|optimizers|params|target|warnings|[^]{joined|separate|undocumented}}[,...]\n"
msgid " --help={common|optimizers|params|target|warnings|[^]{joined|separate|undocumented}}[,...].\n"
-msgstr " --help={common|optimizers|params|target|warnings|[^]{joined|separate|undocumented}}[,…]\n"
+msgstr " --help={common|optimizers|params|target|warnings|[^]{joined|separate|undocumented}}[,…].\n"
#: gcc.c:3388
-#, fuzzy
-#| msgid " Display specific types of command line options\n"
msgid " Display specific types of command line options.\n"
-msgstr " Afficher les types spécifiques des options de la ligne de commande\n"
+msgstr " Afficher les types spécifiques des options de la ligne de commande.\n"
#: gcc.c:3390
-#, fuzzy
-#| msgid " (Use '-v --help' to display command line options of sub-processes)\n"
msgid " (Use '-v --help' to display command line options of sub-processes).\n"
-msgstr " (Utiliser « -v --help » pour afficher les options de la ligne de commande des sous-processus)\n"
+msgstr " (Utiliser « -v --help » pour afficher les options de la ligne de commande des sous-processus).\n"
#: gcc.c:3391
-#, fuzzy
-#| msgid " --version Display compiler version information\n"
msgid " --version Display compiler version information.\n"
-msgstr " --help Afficher des informations sur la version du compilateur\n"
+msgstr " --help Afficher des informations sur la version du compilateur.\n"
#: gcc.c:3392
-#, fuzzy
-#| msgid " -dumpspecs Display all of the built in spec strings\n"
msgid " -dumpspecs Display all of the built in spec strings.\n"
-msgstr " -dumpspecs Afficher tous les chaînes de specs internes\n"
+msgstr " -dumpspecs Afficher tous les chaînes de specs internes.\n"
#: gcc.c:3393
-#, fuzzy
-#| msgid " -dumpversion Display the version of the compiler\n"
msgid " -dumpversion Display the version of the compiler.\n"
-msgstr " -dumpversion Afficher la version du compilateur\n"
+msgstr " -dumpversion Afficher la version du compilateur.\n"
#: gcc.c:3394
-#, fuzzy
-#| msgid " -dumpmachine Display the compiler's target processor\n"
msgid " -dumpmachine Display the compiler's target processor.\n"
-msgstr " -dumpmachine Afficher le processeur ciblé par le compilateur\n"
+msgstr " -dumpmachine Afficher le processeur ciblé par le compilateur.\n"
#: gcc.c:3395
-#, fuzzy
-#| msgid " -print-search-dirs Display the directories in the compiler's search path\n"
msgid " -print-search-dirs Display the directories in the compiler's search path.\n"
-msgstr " -print-search-dirs Afficher les répertoires du chemin de recherche du compilateur\n"
+msgstr " -print-search-dirs Afficher les répertoires du chemin de recherche du compilateur.\n"
#: gcc.c:3396
-#, fuzzy
-#| msgid " -print-libgcc-file-name Display the name of the compiler's companion library\n"
msgid " -print-libgcc-file-name Display the name of the compiler's companion library.\n"
-msgstr " -print-libgcc-file-name Afficher le nom de la bibliothèque accompagnant le compilateur\n"
+msgstr " -print-libgcc-file-name Afficher le nom de la bibliothèque accompagnant le compilateur.\n"
#: gcc.c:3397
-#, fuzzy
-#| msgid " -print-file-name=<lib> Display the full path to library <lib>\n"
msgid " -print-file-name=<lib> Display the full path to library <lib>.\n"
-msgstr " -print-file-name=<lib> Afficher le chemin d’accès complet vers la bibliothèque <lib>\n"
+msgstr " -print-file-name=<lib> Afficher le chemin d’accès complet vers la bibliothèque <lib>.\n"
#: gcc.c:3398
-#, fuzzy
-#| msgid " -print-prog-name=<prog> Display the full path to compiler component <prog>\n"
msgid " -print-prog-name=<prog> Display the full path to compiler component <prog>.\n"
-msgstr " -print-prog-name=<prog> Afficher le chemin d’accès complet vers le composant du compilateur <prog>\n"
+msgstr " -print-prog-name=<prog> Afficher le chemin d’accès complet vers le composant du compilateur <prog>.\n"
#: gcc.c:3399
-#, fuzzy
-#| msgid ""
-#| " -print-multiarch Display the target's normalized GNU triplet, used as\n"
-#| " a component in the library path\n"
msgid ""
" -print-multiarch Display the target's normalized GNU triplet, used as\n"
" a component in the library path.\n"
msgstr ""
" -print-multiarch Afficher le triplet GNU normalisé de la cible, utilisé comme\n"
-" un composant dans le chemin d’accès de la bibliothèque\n"
+" un composant dans le chemin d’accès de la bibliothèque.\n"
#: gcc.c:3402
-#, fuzzy
-#| msgid " -print-multi-directory Display the root directory for versions of libgcc\n"
msgid " -print-multi-directory Display the root directory for versions of libgcc.\n"
-msgstr " -print-multi-directory Afficher la racine du répertoire des versions de libgcc\n"
+msgstr " -print-multi-directory Afficher la racine du répertoire des versions de libgcc.\n"
#: gcc.c:3403
-#, fuzzy
-#| msgid ""
-#| " -print-multi-lib Display the mapping between command line options and\n"
-#| " multiple library search directories\n"
msgid ""
" -print-multi-lib Display the mapping between command line options and\n"
" multiple library search directories.\n"
msgstr ""
" -print-multi-lib Afficher la table de correspondance entre les options de\n"
" la ligne de commande et les multiples répertoires de\n"
-" recherche des bibliothèques\n"
+" recherche des bibliothèques.\n"
#: gcc.c:3406
-#, fuzzy
-#| msgid " -print-multi-os-directory Display the relative path to OS libraries\n"
msgid " -print-multi-os-directory Display the relative path to OS libraries.\n"
-msgstr " -print-multi-os-directory Afficher le chemin relatif du répertoire vers les bibliothèques de l’OS\n"
+msgstr " -print-multi-os-directory Afficher le chemin relatif du répertoire vers les bibliothèques de l’OS.\n"
#: gcc.c:3407
-#, fuzzy
-#| msgid " -print-sysroot Display the target libraries directory\n"
msgid " -print-sysroot Display the target libraries directory.\n"
-msgstr " -print-sysroot Afficher le répertoire des bibliothèques de la cible\n"
+msgstr " -print-sysroot Afficher le répertoire des bibliothèques de la cible.\n"
#: gcc.c:3408
-#, fuzzy
-#| msgid " -print-sysroot-headers-suffix Display the sysroot suffix used to find headers\n"
msgid " -print-sysroot-headers-suffix Display the sysroot suffix used to find headers.\n"
-msgstr " -print-sysroot-headers-suffix Afficher le suffixe de la racine système utilisé pour trouver les en-têtes\n"
+msgstr " -print-sysroot-headers-suffix Afficher le suffixe de la racine système utilisé pour trouver les en-têtes.\n"
#: gcc.c:3409
-#, fuzzy
-#| msgid " -Wa,<options> Pass comma-separated <options> on to the assembler\n"
msgid " -Wa,<options> Pass comma-separated <options> on to the assembler.\n"
-msgstr " -Wa,<options> Passer les <options> séparées par des virgules à l’assembleur\n"
+msgstr " -Wa,<options> Passer les <options> séparées par des virgules à l’assembleur.\n"
#: gcc.c:3410
-#, fuzzy
-#| msgid " -Wp,<options> Pass comma-separated <options> on to the preprocessor\n"
msgid " -Wp,<options> Pass comma-separated <options> on to the preprocessor.\n"
-msgstr " -Wp,<options> Passer les <options> séparées par des virgules au préprocesseur\n"
+msgstr " -Wp,<options> Passer les <options> séparées par des virgules au préprocesseur.\n"
#: gcc.c:3411
-#, fuzzy
-#| msgid " -Wl,<options> Pass comma-separated <options> on to the linker\n"
msgid " -Wl,<options> Pass comma-separated <options> on to the linker.\n"
-msgstr " -Wl,<options> Passer les <options> séparées par des virgules à l'éditeur de liens\n"
+msgstr " -Wl,<options> Passer les <options> séparées par des virgules à l'éditeur de liens.\n"
#: gcc.c:3412
-#, fuzzy
-#| msgid " -Xassembler <arg> Pass <arg> on to the assembler\n"
msgid " -Xassembler <arg> Pass <arg> on to the assembler.\n"
-msgstr " -Xassembler <argument> Passer l’<argument> à l’assembleur\n"
+msgstr " -Xassembler <argument> Passer l’<argument> à l’assembleur.\n"
#: gcc.c:3413
-#, fuzzy
-#| msgid " -Xpreprocessor <arg> Pass <arg> on to the preprocessor\n"
msgid " -Xpreprocessor <arg> Pass <arg> on to the preprocessor.\n"
-msgstr " -Xpreprocessor <argument> Passer l’<argument> au préprocesseur\n"
+msgstr " -Xpreprocessor <argument> Passer l’<argument> au préprocesseur.\n"
#: gcc.c:3414
-#, fuzzy
-#| msgid " -Xlinker <arg> Pass <arg> on to the linker\n"
msgid " -Xlinker <arg> Pass <arg> on to the linker.\n"
-msgstr " -Xlinker <argument> Passer l’<argument> à l’éditeur de liens\n"
+msgstr " -Xlinker <argument> Passer l’<argument> à l’éditeur de liens.\n"
#: gcc.c:3415
-#, fuzzy
-#| msgid " -save-temps Do not delete intermediate files\n"
msgid " -save-temps Do not delete intermediate files.\n"
-msgstr " -save-temps ne pas détruire les fichiers intermédiaires\n"
+msgstr " -save-temps Ne pas détruire les fichiers intermédiaires.\n"
#: gcc.c:3416
-#, fuzzy
-#| msgid " -save-temps=<arg> Do not delete intermediate files\n"
msgid " -save-temps=<arg> Do not delete intermediate files.\n"
-msgstr " -save-temps=<arg> ne pas détruire les fichiers intermédiaires\n"
+msgstr " -save-temps=<arg> Ne pas détruire les fichiers intermédiaires.\n"
#: gcc.c:3417
msgid ""
@@ -578,28 +518,20 @@ msgid ""
msgstr ""
#: gcc.c:3420
-#, fuzzy
-#| msgid " -pipe Use pipes rather than intermediate files\n"
msgid " -pipe Use pipes rather than intermediate files.\n"
-msgstr " -pipe utiliser des pipes au lieu de fichiers intermédiaires\n"
+msgstr " -pipe Utiliser des pipes au lieu de fichiers intermédiaires.\n"
#: gcc.c:3421
-#, fuzzy
-#| msgid " -time Time the execution of each subprocess\n"
msgid " -time Time the execution of each subprocess.\n"
-msgstr " -time mesurer le temps d'exécution de chaque sous-processus\n"
+msgstr " -time Mesurer le temps d'exécution de chaque sous-processus.\n"
#: gcc.c:3422
-#, fuzzy
-#| msgid " -specs=<file> Override built-in specs with the contents of <file>\n"
msgid " -specs=<file> Override built-in specs with the contents of <file>.\n"
-msgstr " -specs=<fichier> écraser les specs internes à l'aide du contenu du <fichier>\n"
+msgstr " -specs=<fichier> Écraser les specs internes à l'aide du contenu du <fichier>.\n"
#: gcc.c:3423
-#, fuzzy
-#| msgid " -std=<standard> Assume that the input sources are for <standard>\n"
msgid " -std=<standard> Assume that the input sources are for <standard>.\n"
-msgstr " -std=<standard> Présumer que les fichiers sources respectent le <standard>\n"
+msgstr " -std=<standard> Présumer que les fichiers sources respectent le <standard>.\n"
#: gcc.c:3424
msgid ""
@@ -608,76 +540,52 @@ msgid ""
msgstr ""
#: gcc.c:3427
-#, fuzzy
-#| msgid " -B <directory> Add <directory> to the compiler's search paths\n"
msgid " -B <directory> Add <directory> to the compiler's search paths.\n"
-msgstr " -B <répertoire> ajouter le <répertoire> aux chemins de recherche du compilateur\n"
+msgstr " -B <répertoire> Ajouter le <répertoire> aux chemins de recherche du compilateur.\n"
#: gcc.c:3428
-#, fuzzy
-#| msgid " -v Display the programs invoked by the compiler\n"
msgid " -v Display the programs invoked by the compiler.\n"
-msgstr " -v afficher les programmes invoqués par le compilateur\n"
+msgstr " -v Afficher les programmes invoqués par le compilateur.\n"
#: gcc.c:3429
-#, fuzzy
-#| msgid " -### Like -v but options quoted and commands not executed\n"
msgid " -### Like -v but options quoted and commands not executed.\n"
-msgstr " -### identique à -v mais les options et les commandes entre guillemets ne sont pas exécutées\n"
+msgstr " -### Identique à -v mais les options et les commandes entre guillemets ne sont pas exécutées.\n"
#: gcc.c:3430
-#, fuzzy
-#| msgid " -E Preprocess only; do not compile, assemble or link\n"
msgid " -E Preprocess only; do not compile, assemble or link.\n"
-msgstr " -E pré-traiter seulement ; ne pas compiler, assembler ou éditer les liens\n"
+msgstr " -E Pré-traiter seulement ; ne pas compiler, assembler ou éditer les liens.\n"
#: gcc.c:3431
-#, fuzzy
-#| msgid " -S Compile only; do not assemble or link\n"
msgid " -S Compile only; do not assemble or link.\n"
-msgstr " -S compiler seulement ; ne pas assembler ou éditer les liens\n"
+msgstr " -S Compiler seulement ; ne pas assembler ou éditer les liens.\n"
#: gcc.c:3432
-#, fuzzy
-#| msgid " -c Compile and assemble, but do not link\n"
msgid " -c Compile and assemble, but do not link.\n"
-msgstr " -S compiler et assembler, mais ne pas éditer les liens\n"
+msgstr " -S Compiler et assembler, mais ne pas éditer les liens.\n"
#: gcc.c:3433
-#, fuzzy
-#| msgid " -o <file> Place the output into <file>\n"
msgid " -o <file> Place the output into <file>.\n"
-msgstr " -o <fichier> placer la sortie dans le <fichier>\n"
+msgstr " -o <fichier> Placer la sortie dans le <fichier>.\n"
#: gcc.c:3434
-#, fuzzy
-#| msgid " -pie Create a position independent executable\n"
msgid " -pie Create a position independent executable.\n"
-msgstr " -pipe créer un exécutable à chargement aléatoire en mémoire (PIE)\n"
+msgstr " -pipe Créer un exécutable à chargement aléatoire en mémoire (PIE).\n"
#: gcc.c:3435
-#, fuzzy
-#| msgid " -shared Create a shared library\n"
msgid " -shared Create a shared library.\n"
-msgstr " -shared créer une bibliothèque partagée\n"
+msgstr " -shared Créer une bibliothèque partagée.\n"
#: gcc.c:3436
-#, fuzzy
-#| msgid ""
-#| " -x <language> Specify the language of the following input files\n"
-#| " Permissible languages include: c c++ assembler none\n"
-#| " 'none' means revert to the default behavior of\n"
-#| " guessing the language based on the file's extension\n"
msgid ""
" -x <language> Specify the language of the following input files.\n"
" Permissible languages include: c c++ assembler none\n"
" 'none' means revert to the default behavior of\n"
" guessing the language based on the file's extension.\n"
msgstr ""
-" -x <langage> spécifier le langage des fichiers suivants d'entrée\n"
+" -x <langage> Spécifier le langage des fichiers suivants d'entrée.\n"
" Les langages permis sont: c c++ assembler none\n"
" « none » signifiant d'utiliser le comportement par défaut\n"
-" en tentant d'identifier le langage par l'extension du fichier\n"
+" en tentant d'identifier le langage par l'extension du fichier.\n"
#: gcc.c:3443
#, c-format
@@ -944,10 +852,9 @@ msgstr ""
"%s.\n"
#: gcov-tool.c:526
-#, fuzzy, c-format
-#| msgid "Copyright %s 2014-2015 Free Software Foundation, Inc.\n"
+#, c-format
msgid "Copyright %s 2014-2016 Free Software Foundation, Inc.\n"
-msgstr "Copyright %s 2014-2015 Free Software Foundation, Inc.\n"
+msgstr "Copyright %s 2014-2016 Free Software Foundation, Inc.\n"
#: gcov-tool.c:529 gcov.c:506
#, c-format
@@ -1405,10 +1312,8 @@ msgstr "incapable de générer des recharges pour:"
#. What to print when a switch has no documentation.
#: opts.c:184
-#, fuzzy
-#| msgid "This switch lacks documentation"
msgid "This option lacks documentation."
-msgstr "Cette option manque de documentation"
+msgstr "Cette option manque de documentation."
#: opts.c:185
msgid "Uses of this option are diagnosed."
@@ -1457,70 +1362,48 @@ msgid " All options with the desired characteristics have already been displayed
msgstr ""
#: opts.c:1332
-#, fuzzy
-#| msgid "The following options are language-independent:\n"
msgid "The following options are target specific"
-msgstr "Les options suivantes sont indépendantes du langage:\n"
+msgstr "Les options suivantes sont spécifiques à la cible"
#: opts.c:1335
-#, fuzzy
-#| msgid "The following options are language-independent:\n"
msgid "The following options control compiler warning messages"
-msgstr "Les options suivantes sont indépendantes du langage:\n"
+msgstr "Les options suivantes contrôlent les messages d’avertissement du compilateur"
#: opts.c:1338
-#, fuzzy
-#| msgid "Perform loop optimizations"
msgid "The following options control optimizations"
-msgstr "Exécuter l'optimisation des boucles"
+msgstr "Les options suivantes contrôlent les optimisations"
#: opts.c:1341 opts.c:1380
-#, fuzzy
-#| msgid "The following options are language-independent:\n"
msgid "The following options are language-independent"
-msgstr "Les options suivantes sont indépendantes du langage:\n"
+msgstr "Les options suivantes sont indépendantes du langage"
#: opts.c:1344
-#, fuzzy
-#| msgid "The --param option recognizes the following as parameters:\n"
msgid "The --param option recognizes the following as parameters"
-msgstr "L'option --param reconnaît les paramètres suivant:\n"
+msgstr "L'option --param reconnaît les paramètres suivant"
#: opts.c:1350
-#, fuzzy
-#| msgid "The following options are language-independent:\n"
msgid "The following options are specific to just the language "
-msgstr "Les options suivantes sont indépendantes du langage:\n"
+msgstr "Les options suivantes sont spécifiques au langage "
#: opts.c:1352
-#, fuzzy
-#| msgid "The following options are language-independent:\n"
msgid "The following options are supported by the language "
-msgstr "Les options suivantes sont indépendantes du langage:\n"
+msgstr "Les options suivantes sont prises en charge pour le langage "
#: opts.c:1363
-#, fuzzy
-#| msgid "The following options are language-independent:\n"
msgid "The following options are not documented"
-msgstr "Les options suivantes sont indépendantes du langage:\n"
+msgstr "Les options suivantes sont non documentées"
#: opts.c:1365
-#, fuzzy
-#| msgid "The following options are language-independent:\n"
msgid "The following options take separate arguments"
-msgstr "Les options suivantes sont indépendantes du langage:\n"
+msgstr "Les options suivantes prennent des arguments séparées"
#: opts.c:1367
-#, fuzzy
-#| msgid "The following options are language-independent:\n"
msgid "The following options take joined arguments"
-msgstr "Les options suivantes sont indépendantes du langage:\n"
+msgstr "Les options suivantes prennent des arguments communs"
#: opts.c:1378
-#, fuzzy
-#| msgid "The following options are language-independent:\n"
msgid "The following options are language-related"
-msgstr "Les options suivantes sont indépendantes du langage:\n"
+msgstr "Les options suivantes concernent les langages"
#: plugin.c:796
msgid "Event"
@@ -1610,10 +1493,9 @@ msgid "%s%s%s %sversion %s (%s) compiled by CC, "
msgstr "%s%s%s %sversion %s (%s) compilé par CC, "
#: toplev.c:646
-#, fuzzy, c-format
-#| msgid "GMP version %s, MPFR version %s, MPC version %s\n"
+#, c-format
msgid "GMP version %s, MPFR version %s, MPC version %s, isl version %s\n"
-msgstr "GMP version %s, MPFR version %s, MPC version %s\n"
+msgstr "GMP version %s, MPFR version %s, MPC version %s, isl version %s\n"
#: toplev.c:648
#, c-format
@@ -1676,20 +1558,16 @@ msgid "--param large-function-growth limit reached"
msgstr "--param large-function-growth limite atteinte"
#: cif-code.def:70
-#, fuzzy
-#| msgid "--param large-function-growth limit reached"
msgid "--param large-stack-frame-growth limit reached"
-msgstr "--param large-function-growth limite atteinte"
+msgstr "--param large-stack-frame-growth limite atteinte"
#: cif-code.def:72
msgid "--param max-inline-insns-single limit reached"
msgstr "--param max-inline-insns-single limite atteinte"
#: cif-code.def:74
-#, fuzzy
-#| msgid "--param max-inline-insns-single limit reached"
msgid "--param max-inline-insns-auto limit reached"
-msgstr "--param max-inline-insns-single limite atteinte"
+msgstr "--param max-inline-insns-auto limite atteinte"
#: cif-code.def:76
msgid "--param inline-unit-growth limit reached"
@@ -1708,10 +1586,8 @@ msgid "function not declared inline and code size would grow"
msgstr ""
#: cif-code.def:92
-#, fuzzy
-#| msgid "mismatched braces in specs"
msgid "mismatched arguments"
-msgstr "accolades non concordantes dans les specs"
+msgstr "arguments non concordantes"
#: cif-code.def:96
#, fuzzy
@@ -1763,7 +1639,7 @@ msgstr "votre fonction sera mal compilée"
#: cif-code.def:133
msgid "unreachable"
-msgstr ""
+msgstr "introuvable"
#. The remainder are real diagnostic types.
#: diagnostic.def:33
@@ -1805,10 +1681,8 @@ msgstr "débogage : "
#. These two would be re-classified as DK_WARNING or DK_ERROR, so the
#. prefix does not matter.
#: diagnostic.def:43
-#, fuzzy
-#| msgid "warning: "
msgid "pedwarn: "
-msgstr "attention : "
+msgstr "pédant : "
#: diagnostic.def:44
msgid "permerror: "
@@ -1825,16 +1699,14 @@ msgid "The minimal estimated speedup allowing inliner to ignore inline-insns-sin
msgstr ""
#: params.def:71
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions in a single function eligible for inlining"
+#, no-c-format
msgid "The maximum number of instructions in a single function eligible for inlining."
-msgstr "Le nombre maximum d'instructions dans une fonction simple éligible au type enligne"
+msgstr "Le nombre maximum d'instructions dans une fonction simple éligible au type enligne."
#: params.def:83
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions when automatically inlining"
+#, no-c-format
msgid "The maximum number of instructions when automatically inlining."
-msgstr "Le nombre maximum d'instructions lorsqu'automatiquement de type enligne"
+msgstr "Le nombre maximum d'instructions lorsqu'automatiquement de type enligne."
#: params.def:88
#, fuzzy, no-c-format
@@ -1891,22 +1763,19 @@ msgid "If -ftree-vectorize is used, the minimal loop bound of a loop to be consi
msgstr ""
#: params.def:152
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions to consider to fill a delay slot"
+#, no-c-format
msgid "The maximum number of instructions to consider to fill a delay slot."
-msgstr "Le nombre maximum d'instructions à considérer pour remplir une slot délai"
+msgstr "Le nombre maximum d'instructions à considérer pour remplir une slot délai."
#: params.def:163
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions to consider to find accurate live register information"
+#, no-c-format
msgid "The maximum number of instructions to consider to find accurate live register information."
-msgstr "Le nombre maximum d'instructions à considérer pour repérer un registre d'information actif et précis"
+msgstr "Le nombre maximum d'instructions à considérer pour repérer un registre d'information actif et précis."
#: params.def:173
-#, fuzzy, no-c-format
-#| msgid "The maximum length of scheduling's pending operations list"
+#, no-c-format
msgid "The maximum length of scheduling's pending operations list."
-msgstr "La longueur maximale de la liste des opération en attente d'ordonnancement"
+msgstr "La longueur maximale de la liste des opération en attente d'ordonnancement."
#: params.def:180
#, fuzzy, no-c-format
@@ -1915,16 +1784,14 @@ msgid "The maximum number of backtrack attempts the scheduler should make when m
msgstr "Le nombre maximum d'instructions à considérer à inclure dans une boucle"
#: params.def:185
-#, fuzzy, no-c-format
-#| msgid "The size of function body to be considered large"
+#, no-c-format
msgid "The size of function body to be considered large."
-msgstr "La taille du corps de la fonction est considéré comme étant grande"
+msgstr "La taille du corps de la fonction est considéré comme étant grande."
#: params.def:189
-#, fuzzy, no-c-format
-#| msgid "Maximal growth due to inlining of large function (in percent)"
+#, no-c-format
msgid "Maximal growth due to inlining of large function (in percent)."
-msgstr "Croissance maximal en raison de l'enlignage d'une grande fonction (en pourcentage)"
+msgstr "Croissance maximal en raison de l'enlignage d'une grande fonction (en pourcentage)."
#: params.def:193
#, fuzzy, no-c-format
@@ -1933,16 +1800,15 @@ msgid "The size of translation unit to be considered large."
msgstr "La taille du corps de la fonction est considéré comme étant grande"
#: params.def:197
-#, fuzzy, no-c-format
-#| msgid "how much can given compilation unit grow because of the inlining (in percent)"
+#, no-c-format
msgid "How much can given compilation unit grow because of the inlining (in percent)."
-msgstr "quelle croissance d'une unité de compilation peut être tolérée en raison de l'enlignage (en pourcentage)"
+msgstr "Quelle croissance d'une unité de compilation peut être tolérée en raison de l'enlignage (en pourcentage)."
#: params.def:201
#, fuzzy, no-c-format
#| msgid "how much can given compilation unit grow because of the inlining (in percent)"
msgid "How much can given compilation unit grow because of the interprocedural constant propagation (in percent)."
-msgstr "quelle croissance d'une unité de compilation peut être tolérée en raison de l'enlignage (en pourcentage)"
+msgstr "Quelle croissance d'une unité de compilation peut être tolérée en raison de l'enlignage (en pourcentage)"
#: params.def:205
#, no-c-format
@@ -1962,10 +1828,9 @@ msgid "Maximal stack frame growth due to inlining (in percent)."
msgstr "Croissance maximal en raison de l'enlignage d'une grande fonction (en pourcentage)"
#: params.def:220
-#, fuzzy, no-c-format
-#| msgid "The maximum amount of memory to be allocated by GCSE"
+#, no-c-format
msgid "The maximum amount of memory to be allocated by GCSE."
-msgstr "La taille maximale de mémoire à être alloué par GCSE"
+msgstr "La taille maximale de mémoire à être alloué par GCSE."
#: params.def:227
#, fuzzy, no-c-format
@@ -2004,34 +1869,29 @@ msgid "Maximum depth of sqrt chains to use when synthesizing exponentiation by a
msgstr ""
#: params.def:287
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions to consider to unroll in a loop"
+#, no-c-format
msgid "The maximum number of instructions to consider to unroll in a loop."
-msgstr "Le nombre maximum d'instructions à considérer à inclure dans une boucle"
+msgstr "Le nombre maximum d'instructions à considérer à inclure dans une boucle."
#: params.def:293
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions to consider to unroll in a loop on average"
+#, no-c-format
msgid "The maximum number of instructions to consider to unroll in a loop on average."
-msgstr "Le nombre maximum d'instructions à considérer à inclure dans une boucle en moyenne"
+msgstr "Le nombre maximum d'instructions à considérer à inclure dans une boucle en moyenne."
#: params.def:298
-#, fuzzy, no-c-format
-#| msgid "The maximum number of unrollings of a single loop"
+#, no-c-format
msgid "The maximum number of unrollings of a single loop."
-msgstr "Le nombre maximum d'instructions à inclure dans une boucle simple"
+msgstr "Le nombre maximum d'instructions à inclure dans une boucle simple."
#: params.def:303
-#, fuzzy, no-c-format
-#| msgid "The maximum number of insns of a peeled loop"
+#, no-c-format
msgid "The maximum number of insns of a peeled loop."
-msgstr "Le nombre maximum d'insns de boucle réduite"
+msgstr "Le nombre maximum d'insns de boucle réduite."
#: params.def:308
-#, fuzzy, no-c-format
-#| msgid "The maximum number of peelings of a single loop"
+#, no-c-format
msgid "The maximum number of peelings of a single loop."
-msgstr "Le nombre maximum de passes de réduction d'une boucle simple"
+msgstr "Le nombre maximum de passes de réduction d'une boucle simple."
#: params.def:313
#, fuzzy, no-c-format
@@ -2040,22 +1900,19 @@ msgid "The maximum number of branches on the path through the peeled sequence."
msgstr "Le nombre maximum d'insns d'une boucle complètement réduite"
#: params.def:318
-#, fuzzy, no-c-format
-#| msgid "The maximum number of insns of a completely peeled loop"
+#, no-c-format
msgid "The maximum number of insns of a completely peeled loop."
-msgstr "Le nombre maximum d'insns d'une boucle complètement réduite"
+msgstr "Le nombre maximum d'insns d'une boucle complètement réduite."
#: params.def:323
-#, fuzzy, no-c-format
-#| msgid "The maximum number of peelings of a single loop that is peeled completely"
+#, no-c-format
msgid "The maximum number of peelings of a single loop that is peeled completely."
-msgstr "Le nombre maximum de réductions d'une boucle simple qui a été complètement réduite"
+msgstr "Le nombre maximum de réductions d'une boucle simple qui a été complètement réduite."
#: params.def:328
-#, fuzzy, no-c-format
-#| msgid "The maximum number of insns of a peeled loop that rolls only once"
+#, no-c-format
msgid "The maximum number of insns of a peeled loop that rolls only once."
-msgstr "Le nombre maximum d'insns d'une boucle réduite qui tourne une seule fois"
+msgstr "Le nombre maximum d'insns d'une boucle réduite qui tourne une seule fois."
#: params.def:333
#, fuzzy, no-c-format
@@ -2064,16 +1921,14 @@ msgid "The maximum depth of a loop nest we completely peel."
msgstr "Le nombre maximum d'insns d'une boucle complètement réduite"
#: params.def:339
-#, fuzzy, no-c-format
-#| msgid "The maximum number of insns of an unswitched loop"
+#, no-c-format
msgid "The maximum number of insns of an unswitched loop."
-msgstr "Le nombre maximum d'insns d'une boucle sans branchement"
+msgstr "Le nombre maximum d'insns d'une boucle sans branchement."
#: params.def:344
-#, fuzzy, no-c-format
-#| msgid "The maximum number of unswitchings in a single loop"
+#, no-c-format
msgid "The maximum number of unswitchings in a single loop."
-msgstr "Le nombre maximum de non branchement dans une boucle simple"
+msgstr "Le nombre maximum de non branchement dans une boucle simple."
#: params.def:351
#, no-c-format
@@ -2111,10 +1966,9 @@ msgid "A basic block profile count is considered hot if it contributes to the gi
msgstr ""
#: params.def:386
-#, fuzzy, no-c-format
-#| msgid "Select fraction of the maximal frequency of executions of basic block in function given basic block needs to have to be considered hot"
+#, no-c-format
msgid "Select fraction of the maximal frequency of executions of basic block in function given basic block needs to have to be considered hot."
-msgstr "Sélectionner la fraction de la fréquence maximale d'exécutions du bloc de base dans la fonction selon le bloc de base donné doit être considéré comme chaud « hot »"
+msgstr "Sélectionner la fraction de la fréquence maximale d'exécutions du bloc de base dans la fonction selon le bloc de base donné doit être considéré comme chaud « hot »."
#: params.def:391
#, no-c-format
@@ -2144,46 +1998,39 @@ msgid "Set the estimated probability in percentage for builtin expect. The defau
msgstr ""
#: params.def:434
-#, fuzzy, no-c-format
-#| msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is available"
+#, no-c-format
msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is available."
-msgstr "Le pourcentage de fonction, pondéré par la fréquence d'exécutions, qui doit être couvert la formation de la trace. Utilisé lorsque le feedback par profile est disponible"
+msgstr "Le pourcentage de fonction, pondéré par la fréquence d'exécutions, qui doit être couvert la formation de la trace. Utilisé lorsque le feedback par profile est disponible."
#: params.def:438
-#, fuzzy, no-c-format
-#| msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is not available"
+#, no-c-format
msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is not available."
-msgstr "Le pourcentage de fonction, pondéré par la fréquence d'exécutions, qui doit être couvert la formation de la trace. Utilisé lorsque le feedback par profilage n'est disponible"
+msgstr "Le pourcentage de fonction, pondéré par la fréquence d'exécutions, qui doit être couvert la formation de la trace. Utilisé lorsque le feedback par profilage n'est disponible."
#: params.def:442
-#, fuzzy, no-c-format
-#| msgid "Maximal code growth caused by tail duplication (in percent)"
+#, no-c-format
msgid "Maximal code growth caused by tail duplication (in percent)."
-msgstr "Croissance maximal du code en raison de duplication de queue (en pourcentage)"
+msgstr "Croissance maximal du code en raison de duplication de queue (en pourcentage)."
#: params.def:446
-#, fuzzy, no-c-format
-#| msgid "Stop reverse growth if the reverse probability of best edge is less than this threshold (in percent)"
+#, no-c-format
msgid "Stop reverse growth if the reverse probability of best edge is less than this threshold (in percent)."
-msgstr "Stopper la croissance renversée si la probabilité inverse des meilleures bordures est inférieure à ce seuil (en pourcentage)"
+msgstr "Stopper la croissance renversée si la probabilité inverse des meilleures bordures est inférieure à ce seuil (en pourcentage)."
#: params.def:450
-#, fuzzy, no-c-format
-#| msgid "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is available"
+#, no-c-format
msgid "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is available."
-msgstr "Stopper la croissance anticipée si la probabilité des meilleures bordures est inférieure à ce seuil (en pourcentage). Utilisé lorsque le feedback par profilage est disponible"
+msgstr "Stopper la croissance anticipée si la probabilité des meilleures bordures est inférieure à ce seuil (en pourcentage). Utilisé lorsque le feedback par profilage est disponible."
#: params.def:454
-#, fuzzy, no-c-format
-#| msgid "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is not available"
+#, no-c-format
msgid "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is not available."
-msgstr "Stopper la croissance anticipée si la probabilité des meilleures bordures est inférieure à ce seuil (en pourcentage). Utilisé lorsque le feedback par profilage n'est pas disponible"
+msgstr "Stopper la croissance anticipée si la probabilité des meilleures bordures est inférieure à ce seuil (en pourcentage). Utilisé lorsque le feedback par profilage n'est pas disponible."
#: params.def:460
-#, fuzzy, no-c-format
-#| msgid "The maximum number of incoming edges to consider for crossjumping"
+#, no-c-format
msgid "The maximum number of incoming edges to consider for crossjumping."
-msgstr "Le nombre maximum de bordures à considérer pour les sauts croisés"
+msgstr "Le nombre maximum de bordures à considérer pour les sauts croisés."
#: params.def:466
#, fuzzy, no-c-format
@@ -2203,10 +2050,9 @@ msgid "The maximum number of insns to duplicate when unfactoring computed gotos.
msgstr "Le nombre maximum d'insns d'une boucle sans branchement"
#: params.def:484
-#, fuzzy, no-c-format
-#| msgid "The maximum length of path considered in cse"
+#, no-c-format
msgid "The maximum length of path considered in cse."
-msgstr "La longueur maximale des chemins considérés dans cse"
+msgstr "La longueur maximale des chemins considérés dans cse."
#: params.def:488
#, fuzzy, no-c-format
@@ -2262,28 +2108,24 @@ msgid "Max number of loop peels to enhancement alignment of data references in a
msgstr ""
#: params.def:550
-#, fuzzy, no-c-format
-#| msgid "The maximum memory locations recorded by cselib"
+#, no-c-format
msgid "The maximum memory locations recorded by cselib."
-msgstr "Le nombre maximum de localisations mémoire enregistrées par cselib"
+msgstr "Le nombre maximum de localisations mémoire enregistrées par cselib."
#: params.def:563
-#, fuzzy, no-c-format
-#| msgid "Minimum heap expansion to trigger garbage collection, as a percentage of the total size of the heap"
+#, no-c-format
msgid "Minimum heap expansion to trigger garbage collection, as a percentage of the total size of the heap."
msgstr "L'expansion minimale des tas pour lancer la collecte des rebuts, en pourcentage de la taille totale du tas."
#: params.def:568
-#, fuzzy, no-c-format
-#| msgid "Minimum heap size before we start collecting garbage, in kilobytes"
+#, no-c-format
msgid "Minimum heap size before we start collecting garbage, in kilobytes."
msgstr "La taille minimale du tas avant de lancer la collecte des rebuts, en ko."
#: params.def:576
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions to search backward when looking for equivalent reload"
+#, no-c-format
msgid "The maximum number of instructions to search backward when looking for equivalent reload."
-msgstr "Le nombre maximum d'instructions à rechercher antérieurement lors d'une recherche d'une recharge équivalente"
+msgstr "Le nombre maximum d'instructions à rechercher antérieurement lors d'une recherche d'une recharge équivalente."
#: params.def:581
#, no-c-format
@@ -2417,22 +2259,19 @@ msgid "The number of prefetches that can run at the same time."
msgstr ""
#: params.def:743
-#, fuzzy, no-c-format
-#| msgid "The size of L1 cache"
+#, no-c-format
msgid "The size of L1 cache."
-msgstr "La taille du cache L1"
+msgstr "La taille du cache L1."
#: params.def:750
-#, fuzzy, no-c-format
-#| msgid "The size of L1 cache"
+#, no-c-format
msgid "The size of L1 cache line."
-msgstr "La taille du cache L1"
+msgstr "La taille du cache L1."
#: params.def:757
-#, fuzzy, no-c-format
-#| msgid "The size of L2 cache"
+#, no-c-format
msgid "The size of L2 cache."
-msgstr "La taille du cache L2"
+msgstr "La taille du cache L2."
#: params.def:768
#, no-c-format
@@ -2803,16 +2642,12 @@ msgid "format"
msgstr "format"
#: c-family/c-format.c:418
-#, fuzzy
-#| msgid "field width"
msgid "field width specifier"
-msgstr "largeur de champ"
+msgstr "spécificateur de largeur de champ"
#: c-family/c-format.c:419
-#, fuzzy
-#| msgid "field precision"
msgid "field precision specifier"
-msgstr "champ de précision"
+msgstr "spécificateur de champ de précision"
#: c-family/c-format.c:536 c-family/c-format.c:560 config/i386/msformat-c.c:42
msgid "' ' flag"
@@ -2915,10 +2750,8 @@ msgid "'q' flag"
msgstr "fanion « q »"
#: c-family/c-format.c:593
-#, fuzzy
-#| msgid "the `'' printf flag"
msgid "the 'q' diagnostic flag"
-msgstr "le fanion « ' » de printf"
+msgstr "le fanion « d » de diagnostique"
#: c-family/c-format.c:606 config/i386/msformat-c.c:63
msgid "assignment suppression"
diff --git a/gcc/po/gcc.pot b/gcc/po/gcc.pot
index 7be3ce9..586be70 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: http://gcc.gnu.org/bugs.html\n"
-"POT-Creation-Date: 2016-01-31 15:50+0000\n"
+"POT-Creation-Date: 2016-04-08 20:55+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"
@@ -88,54 +88,54 @@ msgstr ""
msgid "const/copy propagation disabled"
msgstr ""
-#: diagnostic.c:211
+#: diagnostic.c:212
#, c-format
msgid "%s: all warnings being treated as errors"
msgstr ""
-#: diagnostic.c:216
+#: diagnostic.c:217
#, c-format
msgid "%s: some warnings being treated as errors"
msgstr ""
-#: diagnostic.c:310 input.c:169 c-family/c-opts.c:1310 cp/error.c:1193
+#: diagnostic.c:292 input.c:169 c-family/c-opts.c:1310 cp/error.c:1193
#: fortran/cpp.c:576 fortran/error.c:998 fortran/error.c:1018
msgid "<built-in>"
msgstr ""
-#: diagnostic.c:433
+#: diagnostic.c:451
#, c-format
msgid "compilation terminated due to -Wfatal-errors.\n"
msgstr ""
-#: diagnostic.c:444
+#: diagnostic.c:462
#, c-format
msgid "compilation terminated due to -fmax-errors=%u.\n"
msgstr ""
-#: diagnostic.c:465
+#: diagnostic.c:483
#, c-format
msgid ""
"Please submit a full bug report,\n"
"with preprocessed source if appropriate.\n"
msgstr ""
-#: diagnostic.c:471
+#: diagnostic.c:489
#, c-format
msgid "See %s for instructions.\n"
msgstr ""
-#: diagnostic.c:480
+#: diagnostic.c:498
#, c-format
msgid "compilation terminated.\n"
msgstr ""
-#: diagnostic.c:759
+#: diagnostic.c:787
#, c-format
msgid "%s:%d: confused by earlier errors, bailing out\n"
msgstr ""
-#: diagnostic.c:1283
+#: diagnostic.c:1311
#, c-format
msgid "Internal compiler error: Error reporting routines re-entered.\n"
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:3940 config/arc/arc.c:4714 config/i386/i386.c:15932
+#: final.c:3940 config/arc/arc.c:4817 config/i386/i386.c:15968
#: config/pdp11/pdp11.c:1691
#, c-format
msgid "floating constant misused"
msgstr ""
-#: final.c:3998 config/arc/arc.c:4786 config/i386/i386.c:16030
+#: final.c:3998 config/arc/arc.c:4889 config/i386/i386.c:16066
#: config/pdp11/pdp11.c:1732
#, c-format
msgid "invalid expression as operand"
@@ -536,39 +536,39 @@ msgid ""
"bugreport.\n"
msgstr ""
-#: gcc.c:7701
+#: gcc.c:7757
#, c-format
msgid "install: %s%s\n"
msgstr ""
-#: gcc.c:7704
+#: gcc.c:7760
#, c-format
msgid "programs: %s\n"
msgstr ""
-#: gcc.c:7706
+#: gcc.c:7762
#, c-format
msgid "libraries: %s\n"
msgstr ""
-#: gcc.c:7823
+#: gcc.c:7879
#, c-format
msgid ""
"\n"
"For bug reporting instructions, please see:\n"
msgstr ""
-#: gcc.c:7839 gcov-tool.c:525
+#: gcc.c:7895 gcov-tool.c:525
#, c-format
msgid "%s %s%s\n"
msgstr ""
-#: gcc.c:7842 gcov-tool.c:527 gcov.c:504 fortran/gfortranspec.c:280
+#: gcc.c:7898 gcov-tool.c:527 gcov.c:504 fortran/gfortranspec.c:280
#: java/jcf-dump.c:1229
msgid "(C)"
msgstr ""
-#: gcc.c:7843 fortran/gfortranspec.c:281 java/jcf-dump.c:1230
+#: gcc.c:7899 fortran/gfortranspec.c:281 java/jcf-dump.c:1230
#, c-format
msgid ""
"This is free software; see the source for copying conditions. There is NO\n"
@@ -576,7 +576,7 @@ msgid ""
"\n"
msgstr ""
-#: gcc.c:8148
+#: gcc.c:8204
#, c-format
msgid ""
"\n"
@@ -585,14 +585,14 @@ msgid ""
"\n"
msgstr ""
-#: gcc.c:8149
+#: gcc.c:8205
#, c-format
msgid ""
"Use \"-Wl,OPTION\" to pass \"OPTION\" to the linker.\n"
"\n"
msgstr ""
-#: gcc.c:9441
+#: gcc.c:9497
#, c-format
msgid ""
"Assembler options\n"
@@ -600,7 +600,7 @@ msgid ""
"\n"
msgstr ""
-#: gcc.c:9442
+#: gcc.c:9498
#, c-format
msgid ""
"Use \"-Wa,OPTION\" to pass \"OPTION\" to the assembler.\n"
@@ -1077,7 +1077,7 @@ msgstr ""
msgid "GCSE disabled"
msgstr ""
-#: gimple-ssa-isolate-paths.c:440 c/c-typeck.c:9752
+#: gimple-ssa-isolate-paths.c:440 c/c-typeck.c:9765
#, gcc-internal-format
msgid "function returns address of local variable"
msgstr ""
@@ -1180,11 +1180,11 @@ msgstr ""
msgid "cannot optimize loop, the loop counter may overflow"
msgstr ""
-#: lra-assigns.c:1417 reload1.c:2111
+#: lra-assigns.c:1417 reload1.c:2089
msgid "this is the insn:"
msgstr ""
-#: lra-constraints.c:3493 reload.c:3830
+#: lra-constraints.c:3564 reload.c:3830
msgid "unable to generate reloads for:"
msgstr ""
@@ -1197,92 +1197,92 @@ msgstr ""
msgid "Uses of this option are diagnosed."
msgstr ""
-#: opts.c:1056
+#: opts.c:1061
#, c-format
msgid "default %d minimum %d maximum %d"
msgstr ""
-#: opts.c:1123
+#: opts.c:1128
#, c-format
msgid "Same as %s. Use the latter option instead."
msgstr ""
-#: opts.c:1131
+#: opts.c:1136
#, c-format
msgid "%s Same as %s."
msgstr ""
-#: opts.c:1202
+#: opts.c:1207
msgid "[default]"
msgstr ""
-#: opts.c:1213
+#: opts.c:1218
msgid "[enabled]"
msgstr ""
-#: opts.c:1213
+#: opts.c:1218
msgid "[disabled]"
msgstr ""
-#: opts.c:1232
+#: opts.c:1237
#, c-format
msgid " No options with the desired characteristics were found\n"
msgstr ""
-#: opts.c:1241
+#: opts.c:1246
#, c-format
msgid ""
" None found. Use --help=%s to show *all* the options supported by the %s "
"front-end.\n"
msgstr ""
-#: opts.c:1247
+#: opts.c:1252
#, c-format
msgid ""
" All options with the desired characteristics have already been displayed\n"
msgstr ""
-#: opts.c:1332
+#: opts.c:1337
msgid "The following options are target specific"
msgstr ""
-#: opts.c:1335
+#: opts.c:1340
msgid "The following options control compiler warning messages"
msgstr ""
-#: opts.c:1338
+#: opts.c:1343
msgid "The following options control optimizations"
msgstr ""
-#: opts.c:1341 opts.c:1380
+#: opts.c:1346 opts.c:1385
msgid "The following options are language-independent"
msgstr ""
-#: opts.c:1344
+#: opts.c:1349
msgid "The --param option recognizes the following as parameters"
msgstr ""
-#: opts.c:1350
+#: opts.c:1355
msgid "The following options are specific to just the language "
msgstr ""
-#: opts.c:1352
+#: opts.c:1357
msgid "The following options are supported by the language "
msgstr ""
-#: opts.c:1363
+#: opts.c:1368
msgid "The following options are not documented"
msgstr ""
-#: opts.c:1365
+#: opts.c:1370
msgid "The following options take separate arguments"
msgstr ""
-#: opts.c:1367
+#: opts.c:1372
msgid "The following options take joined arguments"
msgstr ""
-#: opts.c:1378
+#: opts.c:1383
msgid "The following options are language-related"
msgstr ""
@@ -1302,16 +1302,16 @@ msgid ""
msgstr ""
#. It's the compiler's fault.
-#: reload1.c:6135
+#: reload1.c:6113
msgid "could not find a spill register"
msgstr ""
#. It's the compiler's fault.
-#: reload1.c:8029
+#: reload1.c:8009
msgid "VOIDmode on an output"
msgstr ""
-#: reload1.c:8790
+#: reload1.c:8770
msgid "failure trying to reload:"
msgstr ""
@@ -1323,16 +1323,16 @@ msgstr ""
msgid "insn does not satisfy its constraints:"
msgstr ""
-#: targhooks.c:1675
+#: targhooks.c:1679
#, c-format
msgid "created and used with differing settings of '%s'"
msgstr ""
-#: targhooks.c:1690
+#: targhooks.c:1694
msgid "created and used with different settings of -fpic"
msgstr ""
-#: targhooks.c:1692
+#: targhooks.c:1696
msgid "created and used with different settings of -fpie"
msgstr ""
@@ -1397,7 +1397,7 @@ msgstr ""
msgid "options enabled: "
msgstr ""
-#: tree-diagnostic.c:295 c/c-decl.c:5174 c/c-typeck.c:6798 cp/error.c:684
+#: tree-diagnostic.c:295 c/c-decl.c:5203 c/c-typeck.c:6812 cp/error.c:684
#: cp/error.c:992 c-family/c-pretty-print.c:408
#, gcc-internal-format
msgid "<anonymous>"
@@ -2591,59 +2591,71 @@ msgstr ""
#: params.def:1155
#, 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:1160
+#, 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:1160
+#: params.def:1165
#, no-c-format
msgid ""
"Maximum number of instructions to copy when duplicating blocks on a finite "
"state automaton jump thread path."
msgstr ""
-#: params.def:1165
+#: params.def:1170
#, no-c-format
msgid ""
"Maximum number of basic blocks on a finite state automaton jump thread path."
msgstr ""
-#: params.def:1170
+#: params.def:1175
#, no-c-format
msgid ""
"Maximum number of new jump thread paths to create for a finite state "
"automaton."
msgstr ""
-#: params.def:1175
+#: params.def:1180
#, no-c-format
msgid "Chunk size of omp schedule for loops parallelized by parloops."
msgstr ""
-#: params.def:1180
+#: params.def:1185
#, no-c-format
msgid ""
"Schedule type of omp schedule for loops parallelized by parloops (static, "
"dynamic, guided, auto, runtime)."
msgstr ""
-#: params.def:1187
+#: params.def:1192
#, no-c-format
msgid ""
"Maximum recursion depth allowed when querying a property of an SSA name."
msgstr ""
-#: params.def:1193
+#: params.def:1198
#, no-c-format
msgid ""
"Maximum number of insns in a basic block to consider for RTL if-conversion."
msgstr ""
-#: params.def:1199
+#: params.def:1204
#, no-c-format
msgid "Level of hsa debug stores verbosity"
msgstr ""
+#: params.def:1209
+#, no-c-format
+msgid "Maximum number of may-defs visited when devirtualizing speculatively"
+msgstr ""
+
#: c-family/c-format.c:417
msgid "format"
msgstr ""
@@ -2917,48 +2929,48 @@ msgstr ""
msgid "<command-line>"
msgstr ""
-#: config/aarch64/aarch64.c:4410 config/arm/arm.c:21889 config/arm/arm.c:21902
-#: config/arm/arm.c:21927 config/nios2/nios2.c:2642
+#: config/aarch64/aarch64.c:4451 config/arm/arm.c:21954 config/arm/arm.c:21967
+#: config/arm/arm.c:21992 config/nios2/nios2.c:2642
#, c-format
msgid "Unsupported operand for code '%c'"
msgstr ""
-#: config/aarch64/aarch64.c:4422 config/aarch64/aarch64.c:4438
-#: config/aarch64/aarch64.c:4451 config/aarch64/aarch64.c:4463
-#: config/aarch64/aarch64.c:4474 config/aarch64/aarch64.c:4497
-#: config/aarch64/aarch64.c:4550 config/aarch64/aarch64.c:4753
+#: config/aarch64/aarch64.c:4463 config/aarch64/aarch64.c:4479
+#: config/aarch64/aarch64.c:4492 config/aarch64/aarch64.c:4504
+#: config/aarch64/aarch64.c:4515 config/aarch64/aarch64.c:4538
+#: config/aarch64/aarch64.c:4591 config/aarch64/aarch64.c:4794
#, c-format
msgid "invalid operand for '%%%c'"
msgstr ""
-#: config/aarch64/aarch64.c:4517 config/aarch64/aarch64.c:4530
-#: config/aarch64/aarch64.c:4540
+#: config/aarch64/aarch64.c:4558 config/aarch64/aarch64.c:4571
+#: config/aarch64/aarch64.c:4581
#, c-format
msgid "incompatible floating point / vector register operand for '%%%c'"
msgstr ""
-#: config/aarch64/aarch64.c:4586 config/arm/arm.c:22434
+#: config/aarch64/aarch64.c:4627 config/arm/arm.c:22499
#, c-format
msgid "missing operand"
msgstr ""
-#: config/aarch64/aarch64.c:4648
+#: config/aarch64/aarch64.c:4689
#, c-format
msgid "invalid constant"
msgstr ""
-#: config/aarch64/aarch64.c:4651
+#: config/aarch64/aarch64.c:4692
#, c-format
msgid "invalid operand"
msgstr ""
-#: config/aarch64/aarch64.c:4764
+#: config/aarch64/aarch64.c:4805
#, c-format
msgid "invalid operand prefix '%%%c'"
msgstr ""
-#: config/alpha/alpha.c:5102 config/i386/i386.c:17104
-#: config/rs6000/rs6000.c:20267 config/sparc/sparc.c:8720
+#: config/alpha/alpha.c:5102 config/i386/i386.c:17140
+#: config/rs6000/rs6000.c:20265 config/sparc/sparc.c:8644
#, c-format
msgid "'%%&' used without any local dynamic TLS references"
msgstr ""
@@ -2974,18 +2986,18 @@ msgid "invalid %%r value"
msgstr ""
#: config/alpha/alpha.c:5200 config/ia64/ia64.c:5436
-#: config/rs6000/rs6000.c:19947 config/xtensa/xtensa.c:2357
+#: config/rs6000/rs6000.c:19945 config/xtensa/xtensa.c:2357
#, c-format
msgid "invalid %%R value"
msgstr ""
-#: config/alpha/alpha.c:5206 config/rs6000/rs6000.c:19867
+#: config/alpha/alpha.c:5206 config/rs6000/rs6000.c:19865
#: config/xtensa/xtensa.c:2324
#, c-format
msgid "invalid %%N value"
msgstr ""
-#: config/alpha/alpha.c:5214 config/rs6000/rs6000.c:19895
+#: config/alpha/alpha.c:5214 config/rs6000/rs6000.c:19893
#, c-format
msgid "invalid %%P value"
msgstr ""
@@ -3016,7 +3028,7 @@ msgid "invalid %%U value"
msgstr ""
#: config/alpha/alpha.c:5300 config/alpha/alpha.c:5311
-#: config/rs6000/rs6000.c:19955
+#: config/rs6000/rs6000.c:19953
#, c-format
msgid "invalid %%s value"
msgstr ""
@@ -3026,7 +3038,7 @@ msgstr ""
msgid "invalid %%C value"
msgstr ""
-#: config/alpha/alpha.c:5359 config/rs6000/rs6000.c:19731
+#: config/alpha/alpha.c:5359 config/rs6000/rs6000.c:19729
#, c-format
msgid "invalid %%E value"
msgstr ""
@@ -3037,7 +3049,7 @@ msgid "unknown relocation unspec"
msgstr ""
#: config/alpha/alpha.c:5393 config/cr16/cr16.c:1531
-#: config/rs6000/rs6000.c:20272 config/spu/spu.c:1446
+#: config/rs6000/rs6000.c:20270 config/spu/spu.c:1446
#, c-format
msgid "invalid %%xn code"
msgstr ""
@@ -3047,82 +3059,82 @@ msgstr ""
msgid "invalid operand address"
msgstr ""
-#: config/arc/arc.c:2863
+#: config/arc/arc.c:2966
#, c-format
msgid "invalid operand to %%Z code"
msgstr ""
-#: config/arc/arc.c:2871
+#: config/arc/arc.c:2974
#, c-format
msgid "invalid operand to %%z code"
msgstr ""
-#: config/arc/arc.c:2879
+#: config/arc/arc.c:2982
#, c-format
msgid "invalid operand to %%M code"
msgstr ""
-#: config/arc/arc.c:3028 config/m32r/m32r.c:2105
+#: config/arc/arc.c:3131 config/m32r/m32r.c:2105
#, c-format
msgid "invalid operand to %%R code"
msgstr ""
-#: config/arc/arc.c:3067 config/m32r/m32r.c:2128
+#: config/arc/arc.c:3170 config/m32r/m32r.c:2128
#, c-format
msgid "invalid operand to %%H/%%L code"
msgstr ""
-#: config/arc/arc.c:3115 config/m32r/m32r.c:2199
+#: config/arc/arc.c:3218 config/m32r/m32r.c:2199
#, c-format
msgid "invalid operand to %%U code"
msgstr ""
-#: config/arc/arc.c:3126
+#: config/arc/arc.c:3229
#, c-format
msgid "invalid operand to %%V code"
msgstr ""
-#: config/arc/arc.c:3183
+#: config/arc/arc.c:3286
#, c-format
msgid "invalid operand to %%O code"
msgstr ""
#. Unknown flag.
#. Undocumented flag.
-#: config/arc/arc.c:3209 config/epiphany/epiphany.c:1286
-#: config/m32r/m32r.c:2226 config/nds32/nds32.c:2291 config/sparc/sparc.c:8903
+#: config/arc/arc.c:3312 config/epiphany/epiphany.c:1286
+#: config/m32r/m32r.c:2226 config/nds32/nds32.c:2291 config/sparc/sparc.c:8827
#, c-format
msgid "invalid operand output code"
msgstr ""
-#: config/arc/arc.c:4780
+#: config/arc/arc.c:4883
#, c-format
msgid "invalid UNSPEC as operand: %d"
msgstr ""
-#: config/arm/arm.c:18957 config/arm/arm.c:18982 config/arm/arm.c:18992
-#: config/arm/arm.c:19001 config/arm/arm.c:19009
+#: config/arm/arm.c:19021 config/arm/arm.c:19046 config/arm/arm.c:19056
+#: config/arm/arm.c:19065 config/arm/arm.c:19073
#, c-format
msgid "invalid shift operand"
msgstr ""
-#: config/arm/arm.c:21765 config/arm/arm.c:21783
+#: config/arm/arm.c:21830 config/arm/arm.c:21848
#, c-format
msgid "predicated Thumb instruction"
msgstr ""
-#: config/arm/arm.c:21771
+#: config/arm/arm.c:21836
#, c-format
msgid "predicated instruction in conditional sequence"
msgstr ""
-#: config/arm/arm.c:22004 config/arm/arm.c:22026 config/arm/arm.c:22036
-#: config/arm/arm.c:22046 config/arm/arm.c:22056 config/arm/arm.c:22095
-#: config/arm/arm.c:22113 config/arm/arm.c:22138 config/arm/arm.c:22153
-#: config/arm/arm.c:22180 config/arm/arm.c:22187 config/arm/arm.c:22205
-#: config/arm/arm.c:22212 config/arm/arm.c:22220 config/arm/arm.c:22241
-#: config/arm/arm.c:22248 config/arm/arm.c:22381 config/arm/arm.c:22388
-#: config/arm/arm.c:22415 config/arm/arm.c:22422 config/bfin/bfin.c:1436
+#: config/arm/arm.c:22069 config/arm/arm.c:22091 config/arm/arm.c:22101
+#: config/arm/arm.c:22111 config/arm/arm.c:22121 config/arm/arm.c:22160
+#: config/arm/arm.c:22178 config/arm/arm.c:22203 config/arm/arm.c:22218
+#: config/arm/arm.c:22245 config/arm/arm.c:22252 config/arm/arm.c:22270
+#: config/arm/arm.c:22277 config/arm/arm.c:22285 config/arm/arm.c:22306
+#: config/arm/arm.c:22313 config/arm/arm.c:22446 config/arm/arm.c:22453
+#: config/arm/arm.c:22480 config/arm/arm.c:22487 config/bfin/bfin.c:1436
#: config/bfin/bfin.c:1443 config/bfin/bfin.c:1450 config/bfin/bfin.c:1457
#: config/bfin/bfin.c:1466 config/bfin/bfin.c:1473 config/bfin/bfin.c:1480
#: config/bfin/bfin.c:1487
@@ -3130,89 +3142,89 @@ msgstr ""
msgid "invalid operand for code '%c'"
msgstr ""
-#: config/arm/arm.c:22108
+#: config/arm/arm.c:22173
#, c-format
msgid "instruction never executed"
msgstr ""
#. Former Maverick support, removed after GCC-4.7.
-#: config/arm/arm.c:22129
+#: config/arm/arm.c:22194
#, c-format
msgid "obsolete Maverick format code '%c'"
msgstr ""
-#: config/arm/arm.c:23548
+#: config/arm/arm.c:23613
msgid "function parameters cannot have __fp16 type"
msgstr ""
-#: config/arm/arm.c:23558
+#: config/arm/arm.c:23623
msgid "functions cannot return __fp16 type"
msgstr ""
-#: config/avr/avr.c:2117
+#: config/avr/avr.c:2127
#, c-format
msgid "address operand requires constraint for X, Y, or Z register"
msgstr ""
-#: config/avr/avr.c:2275
+#: config/avr/avr.c:2285
msgid "operands to %T/%t must be reg + const_int:"
msgstr ""
-#: config/avr/avr.c:2325 config/avr/avr.c:2392
+#: config/avr/avr.c:2335 config/avr/avr.c:2402
msgid "bad address, not an I/O address:"
msgstr ""
-#: config/avr/avr.c:2334
+#: config/avr/avr.c:2344
msgid "bad address, not a constant:"
msgstr ""
-#: config/avr/avr.c:2352 config/avr/avr.c:2359
+#: config/avr/avr.c:2362 config/avr/avr.c:2369
msgid "bad address, not (reg+disp):"
msgstr ""
-#: config/avr/avr.c:2366
+#: config/avr/avr.c:2376
msgid "bad address, not post_inc or pre_dec:"
msgstr ""
-#: config/avr/avr.c:2378
+#: config/avr/avr.c:2388
msgid "internal compiler error. Bad address:"
msgstr ""
-#: config/avr/avr.c:2411
+#: config/avr/avr.c:2421
#, c-format
msgid "Unsupported code '%c' for fixed-point:"
msgstr ""
-#: config/avr/avr.c:2419
+#: config/avr/avr.c:2429
msgid "internal compiler error. Unknown mode:"
msgstr ""
-#: config/avr/avr.c:3412 config/avr/avr.c:4342 config/avr/avr.c:4791
+#: config/avr/avr.c:3422 config/avr/avr.c:4352 config/avr/avr.c:4801
msgid "invalid insn:"
msgstr ""
-#: config/avr/avr.c:3466 config/avr/avr.c:3571 config/avr/avr.c:3629
-#: config/avr/avr.c:3675 config/avr/avr.c:3694 config/avr/avr.c:3886
-#: config/avr/avr.c:4194 config/avr/avr.c:4478 config/avr/avr.c:4684
-#: config/avr/avr.c:4848 config/avr/avr.c:4942 config/avr/avr.c:5138
+#: config/avr/avr.c:3476 config/avr/avr.c:3581 config/avr/avr.c:3639
+#: config/avr/avr.c:3685 config/avr/avr.c:3704 config/avr/avr.c:3896
+#: config/avr/avr.c:4204 config/avr/avr.c:4488 config/avr/avr.c:4694
+#: config/avr/avr.c:4858 config/avr/avr.c:4952 config/avr/avr.c:5148
msgid "incorrect insn:"
msgstr ""
-#: config/avr/avr.c:3710 config/avr/avr.c:3985 config/avr/avr.c:4265
-#: config/avr/avr.c:4550 config/avr/avr.c:4730 config/avr/avr.c:4998
-#: config/avr/avr.c:5196
+#: config/avr/avr.c:3720 config/avr/avr.c:3995 config/avr/avr.c:4275
+#: config/avr/avr.c:4560 config/avr/avr.c:4740 config/avr/avr.c:5008
+#: config/avr/avr.c:5206
msgid "unknown move insn:"
msgstr ""
-#: config/avr/avr.c:5627
+#: config/avr/avr.c:5637
msgid "bad shift insn:"
msgstr ""
-#: config/avr/avr.c:5735 config/avr/avr.c:6216 config/avr/avr.c:6631
+#: config/avr/avr.c:5745 config/avr/avr.c:6226 config/avr/avr.c:6641
msgid "internal compiler error. Incorrect shift:"
msgstr ""
-#: config/avr/avr.c:7968
+#: config/avr/avr.c:7978
msgid "unsupported fixed-point conversion"
msgstr ""
@@ -3242,9 +3254,9 @@ msgid "invalid const_double operand"
msgstr ""
#: config/cris/cris.c:612 config/ft32/ft32.c:104 config/moxie/moxie.c:103
-#: diagnostic.c:1325 final.c:3407 final.c:3409 fold-const.c:276 gcc.c:5211
-#: gcc.c:5225 loop-iv.c:3043 loop-iv.c:3052 rtl-error.c:101 toplev.c:335
-#: tree-ssa-loop-niter.c:2328 tree-vrp.c:7476 cp/typeck.c:6081 java/expr.c:382
+#: final.c:3407 final.c:3409 fold-const.c:277 gcc.c:5211 gcc.c:5225
+#: loop-iv.c:3043 loop-iv.c:3052 rtl-error.c:101 toplev.c:335
+#: tree-ssa-loop-niter.c:2328 tree-vrp.c:7480 cp/typeck.c:6065 java/expr.c:382
#: lto/lto-object.c:184 lto/lto-object.c:281 lto/lto-object.c:338
#: lto/lto-object.c:362
#, gcc-internal-format, gfc-internal-format
@@ -3465,63 +3477,63 @@ msgstr ""
msgid "bad output_condmove_single operand"
msgstr ""
-#: config/i386/i386.c:16024
+#: config/i386/i386.c:16060
#, c-format
msgid "invalid UNSPEC as operand"
msgstr ""
-#: config/i386/i386.c:16728
+#: config/i386/i386.c:16764
#, c-format
msgid "invalid operand size for operand code 'O'"
msgstr ""
-#: config/i386/i386.c:16763
+#: config/i386/i386.c:16799
#, c-format
msgid "invalid operand size for operand code 'z'"
msgstr ""
-#: config/i386/i386.c:16833
+#: config/i386/i386.c:16869
#, c-format
msgid "invalid operand type used with operand code 'Z'"
msgstr ""
-#: config/i386/i386.c:16838
+#: config/i386/i386.c:16874
#, c-format
msgid "invalid operand size for operand code 'Z'"
msgstr ""
-#: config/i386/i386.c:16914
+#: config/i386/i386.c:16950
#, c-format
msgid "operand is not a condition code, invalid operand code 'Y'"
msgstr ""
-#: config/i386/i386.c:16987
+#: config/i386/i386.c:17023
#, c-format
msgid "operand is not a condition code, invalid operand code 'D'"
msgstr ""
-#: config/i386/i386.c:17004
+#: config/i386/i386.c:17040
#, c-format
msgid "operand is not a condition code, invalid operand code '%c'"
msgstr ""
-#: config/i386/i386.c:17017
+#: config/i386/i386.c:17053
#, c-format
msgid ""
"operand is not an offsettable memory reference, invalid operand code 'H'"
msgstr ""
-#: config/i386/i386.c:17182
+#: config/i386/i386.c:17218
#, c-format
msgid "invalid operand code '%c'"
msgstr ""
-#: config/i386/i386.c:17240
+#: config/i386/i386.c:17276
#, c-format
msgid "invalid constraints for operand"
msgstr ""
-#: config/i386/i386.c:27663
+#: config/i386/i386.c:27726
msgid "unknown insn mode"
msgstr ""
@@ -3566,7 +3578,7 @@ msgstr ""
msgid "invalid %%P operand"
msgstr ""
-#: config/iq2000/iq2000.c:3143 config/rs6000/rs6000.c:19885
+#: config/iq2000/iq2000.c:3143 config/rs6000/rs6000.c:19883
#, c-format
msgid "invalid %%p value"
msgstr ""
@@ -3630,7 +3642,7 @@ msgid "post-increment address is not a register"
msgstr ""
#: config/m32r/m32r.c:2328 config/m32r/m32r.c:2343
-#: config/rs6000/rs6000.c:31239
+#: config/rs6000/rs6000.c:31258
msgid "bad address"
msgstr ""
@@ -3730,12 +3742,12 @@ msgstr ""
msgid "MMIX Internal: This is not a constant:"
msgstr ""
-#: config/msp430/msp430.c:3594
+#: config/msp430/msp430.c:3609
#, c-format
msgid "invalid operand prefix"
msgstr ""
-#: config/msp430/msp430.c:3628
+#: config/msp430/msp430.c:3643
#, c-format
msgid "invalid zero extract"
msgstr ""
@@ -3799,233 +3811,233 @@ msgstr ""
msgid "-mtoc-fusion requires medium/large code model"
msgstr ""
-#: config/rs6000/rs6000.c:9490
+#: config/rs6000/rs6000.c:9485
msgid "bad move"
msgstr ""
-#: config/rs6000/rs6000.c:19528
+#: config/rs6000/rs6000.c:19526
msgid "Bad 128-bit move"
msgstr ""
-#: config/rs6000/rs6000.c:19719
+#: config/rs6000/rs6000.c:19717
#, c-format
msgid "invalid %%e value"
msgstr ""
-#: config/rs6000/rs6000.c:19740
+#: config/rs6000/rs6000.c:19738
#, c-format
msgid "invalid %%f value"
msgstr ""
-#: config/rs6000/rs6000.c:19749
+#: config/rs6000/rs6000.c:19747
#, c-format
msgid "invalid %%F value"
msgstr ""
-#: config/rs6000/rs6000.c:19758
+#: config/rs6000/rs6000.c:19756
#, c-format
msgid "invalid %%G value"
msgstr ""
-#: config/rs6000/rs6000.c:19793
+#: config/rs6000/rs6000.c:19791
#, c-format
msgid "invalid %%j code"
msgstr ""
-#: config/rs6000/rs6000.c:19803
+#: config/rs6000/rs6000.c:19801
#, c-format
msgid "invalid %%J code"
msgstr ""
-#: config/rs6000/rs6000.c:19813
+#: config/rs6000/rs6000.c:19811
#, c-format
msgid "invalid %%k value"
msgstr ""
-#: config/rs6000/rs6000.c:19828 config/xtensa/xtensa.c:2343
+#: config/rs6000/rs6000.c:19826 config/xtensa/xtensa.c:2343
#, c-format
msgid "invalid %%K value"
msgstr ""
-#: config/rs6000/rs6000.c:19875
+#: config/rs6000/rs6000.c:19873
#, c-format
msgid "invalid %%O value"
msgstr ""
-#: config/rs6000/rs6000.c:19922
+#: config/rs6000/rs6000.c:19920
#, c-format
msgid "invalid %%q value"
msgstr ""
-#: config/rs6000/rs6000.c:19975
+#: config/rs6000/rs6000.c:19973
#, c-format
msgid "invalid %%T value"
msgstr ""
-#: config/rs6000/rs6000.c:19987
+#: config/rs6000/rs6000.c:19985
#, c-format
msgid "invalid %%u value"
msgstr ""
-#: config/rs6000/rs6000.c:20001 config/xtensa/xtensa.c:2313
+#: config/rs6000/rs6000.c:19999 config/xtensa/xtensa.c:2313
#, c-format
msgid "invalid %%v value"
msgstr ""
-#: config/rs6000/rs6000.c:20068 config/xtensa/xtensa.c:2364
+#: config/rs6000/rs6000.c:20066 config/xtensa/xtensa.c:2364
#, c-format
msgid "invalid %%x value"
msgstr ""
-#: config/rs6000/rs6000.c:20216
+#: config/rs6000/rs6000.c:20214
#, c-format
msgid "invalid %%y value, try using the 'Z' constraint"
msgstr ""
-#: config/rs6000/rs6000.c:20893
+#: config/rs6000/rs6000.c:20892
msgid "__float128 and __ibm128 cannot be used in the same expression"
msgstr ""
-#: config/rs6000/rs6000.c:20899
+#: config/rs6000/rs6000.c:20898
msgid "__ibm128 and long double cannot be used in the same expression"
msgstr ""
-#: config/rs6000/rs6000.c:20905
+#: config/rs6000/rs6000.c:20904
msgid "__float128 and long double cannot be used in the same expression"
msgstr ""
-#: config/rs6000/rs6000.c:34288
+#: config/rs6000/rs6000.c:34309
msgid "AltiVec argument passed to unprototyped function"
msgstr ""
-#: config/rs6000/rs6000.c:35986
+#: config/rs6000/rs6000.c:36007
msgid "Could not generate addis value for fusion"
msgstr ""
-#: config/rs6000/rs6000.c:36058
+#: config/rs6000/rs6000.c:36079
msgid "Unable to generate load/store offset for fusion"
msgstr ""
-#: config/rs6000/rs6000.c:36162
+#: config/rs6000/rs6000.c:36183
msgid "Bad GPR fusion"
msgstr ""
-#: config/rs6000/rs6000.c:36380
+#: config/rs6000/rs6000.c:36401
msgid "emit_fusion_p9_load, bad reg #1"
msgstr ""
-#: config/rs6000/rs6000.c:36417
+#: config/rs6000/rs6000.c:36438
msgid "emit_fusion_p9_load, bad reg #2"
msgstr ""
-#: config/rs6000/rs6000.c:36420
+#: config/rs6000/rs6000.c:36441
msgid "emit_fusion_p9_load not MEM"
msgstr ""
-#: config/rs6000/rs6000.c:36458
+#: config/rs6000/rs6000.c:36479
msgid "emit_fusion_p9_store, bad reg #1"
msgstr ""
-#: config/rs6000/rs6000.c:36495
+#: config/rs6000/rs6000.c:36516
msgid "emit_fusion_p9_store, bad reg #2"
msgstr ""
-#: config/rs6000/rs6000.c:36498
+#: config/rs6000/rs6000.c:36519
msgid "emit_fusion_p9_store not MEM"
msgstr ""
-#: config/s390/s390.c:6997
+#: config/s390/s390.c:7147
#, c-format
msgid "symbolic memory references are only supported on z10 or later"
msgstr ""
-#: config/s390/s390.c:7008
+#: config/s390/s390.c:7158
#, c-format
msgid "cannot decompose address"
msgstr ""
-#: config/s390/s390.c:7076
+#: config/s390/s390.c:7227
#, c-format
msgid "invalid comparison operator for 'E' output modifier"
msgstr ""
-#: config/s390/s390.c:7099
+#: config/s390/s390.c:7250
#, c-format
msgid "invalid reference for 'J' output modifier"
msgstr ""
-#: config/s390/s390.c:7117
+#: config/s390/s390.c:7268
#, c-format
msgid "invalid address for 'O' output modifier"
msgstr ""
-#: config/s390/s390.c:7139
+#: config/s390/s390.c:7290
#, c-format
msgid "invalid address for 'R' output modifier"
msgstr ""
-#: config/s390/s390.c:7157
+#: config/s390/s390.c:7308
#, c-format
msgid "memory reference expected for 'S' output modifier"
msgstr ""
-#: config/s390/s390.c:7167
+#: config/s390/s390.c:7318
#, c-format
msgid "invalid address for 'S' output modifier"
msgstr ""
-#: config/s390/s390.c:7188
+#: config/s390/s390.c:7339
#, c-format
msgid "register or memory expression expected for 'N' output modifier"
msgstr ""
-#: config/s390/s390.c:7199
+#: config/s390/s390.c:7350
#, c-format
msgid "register or memory expression expected for 'M' output modifier"
msgstr ""
-#: config/s390/s390.c:7284 config/s390/s390.c:7305
+#: config/s390/s390.c:7435 config/s390/s390.c:7456
#, c-format
msgid "invalid constant for output modifier '%c'"
msgstr ""
-#: config/s390/s390.c:7302
+#: config/s390/s390.c:7453
#, c-format
msgid "invalid constant - try using an output modifier"
msgstr ""
-#: config/s390/s390.c:7343
+#: config/s390/s390.c:7494
#, c-format
msgid "invalid constant vector for output modifier '%c'"
msgstr ""
-#: config/s390/s390.c:7350
+#: config/s390/s390.c:7501
#, c-format
msgid "invalid expression - try using an output modifier"
msgstr ""
-#: config/s390/s390.c:7353
+#: config/s390/s390.c:7504
#, c-format
msgid "invalid expression for output modifier '%c'"
msgstr ""
-#: config/s390/s390.c:11001
+#: config/s390/s390.c:11350
msgid "Vector argument passed to unprototyped function"
msgstr ""
-#: config/s390/s390.c:14505
+#: config/s390/s390.c:15008
msgid "types differ in signess"
msgstr ""
-#: config/s390/s390.c:14515
+#: config/s390/s390.c:15018
msgid "binary operator does not support two vector bool operands"
msgstr ""
-#: config/s390/s390.c:14518
+#: config/s390/s390.c:15021
msgid "binary operator does not support vector bool operand"
msgstr ""
-#: config/s390/s390.c:14526
+#: config/s390/s390.c:15029
msgid ""
"binary operator does not support mixing vector bool with floating point "
"vector operands"
@@ -4041,55 +4053,55 @@ msgstr ""
msgid "invalid operand to %%S"
msgstr ""
-#: config/sh/sh.c:10038
+#: config/sh/sh.c:10040
msgid "created and used with different architectures / ABIs"
msgstr ""
-#: config/sh/sh.c:10040
+#: config/sh/sh.c:10042
msgid "created and used with different ABIs"
msgstr ""
-#: config/sh/sh.c:10042
+#: config/sh/sh.c:10044
msgid "created and used with different endianness"
msgstr ""
-#: config/sparc/sparc.c:8729 config/sparc/sparc.c:8735
+#: config/sparc/sparc.c:8653 config/sparc/sparc.c:8659
#, c-format
msgid "invalid %%Y operand"
msgstr ""
-#: config/sparc/sparc.c:8805
+#: config/sparc/sparc.c:8729
#, c-format
msgid "invalid %%A operand"
msgstr ""
-#: config/sparc/sparc.c:8815
+#: config/sparc/sparc.c:8739
#, c-format
msgid "invalid %%B operand"
msgstr ""
-#: config/sparc/sparc.c:8844 config/tilegx/tilegx.c:5095
+#: config/sparc/sparc.c:8768 config/tilegx/tilegx.c:5095
#: config/tilepro/tilepro.c:4510
#, c-format
msgid "invalid %%C operand"
msgstr ""
-#: config/sparc/sparc.c:8861 config/tilegx/tilegx.c:5128
+#: config/sparc/sparc.c:8785 config/tilegx/tilegx.c:5128
#, c-format
msgid "invalid %%D operand"
msgstr ""
-#: config/sparc/sparc.c:8877
+#: config/sparc/sparc.c:8801
#, c-format
msgid "invalid %%f operand"
msgstr ""
-#: config/sparc/sparc.c:8889
+#: config/sparc/sparc.c:8813
#, c-format
msgid "invalid %%s operand"
msgstr ""
-#: config/sparc/sparc.c:8934
+#: config/sparc/sparc.c:8858
#, c-format
msgid "floating-point constant not a valid immediate operand"
msgstr ""
@@ -4226,23 +4238,23 @@ msgstr ""
msgid "illegal operand detected"
msgstr ""
-#: config/visium/visium.c:3140
+#: config/visium/visium.c:3195
msgid "illegal operand "
msgstr ""
-#: config/visium/visium.c:3191
+#: config/visium/visium.c:3246
msgid "illegal operand address (1)"
msgstr ""
-#: config/visium/visium.c:3198
+#: config/visium/visium.c:3253
msgid "illegal operand address (2)"
msgstr ""
-#: config/visium/visium.c:3213
+#: config/visium/visium.c:3268
msgid "illegal operand address (3)"
msgstr ""
-#: config/visium/visium.c:3221
+#: config/visium/visium.c:3276
msgid "illegal operand address (4)"
msgstr ""
@@ -4286,177 +4298,177 @@ msgstr ""
msgid "({anonymous})"
msgstr ""
-#: c/c-parser.c:2146 c/c-parser.c:2160 c/c-parser.c:4743 c/c-parser.c:5149
-#: c/c-parser.c:5271 c/c-parser.c:5630 c/c-parser.c:5796 c/c-parser.c:5827
-#: c/c-parser.c:6025 c/c-parser.c:8763 c/c-parser.c:8798 c/c-parser.c:8829
-#: c/c-parser.c:8876 c/c-parser.c:9057 c/c-parser.c:9837 c/c-parser.c:9907
-#: c/c-parser.c:9950 c/c-parser.c:14445 c/c-parser.c:14469 c/c-parser.c:14487
-#: c/c-parser.c:14700 c/c-parser.c:14743 c/c-parser.c:2951 c/c-parser.c:9050
-#: cp/parser.c:26217 cp/parser.c:26790
+#: c/c-parser.c:2144 c/c-parser.c:2158 c/c-parser.c:4746 c/c-parser.c:5152
+#: c/c-parser.c:5274 c/c-parser.c:5633 c/c-parser.c:5799 c/c-parser.c:5830
+#: c/c-parser.c:6045 c/c-parser.c:8785 c/c-parser.c:8820 c/c-parser.c:8851
+#: c/c-parser.c:8898 c/c-parser.c:9079 c/c-parser.c:9859 c/c-parser.c:9929
+#: c/c-parser.c:9972 c/c-parser.c:14467 c/c-parser.c:14491 c/c-parser.c:14509
+#: c/c-parser.c:14722 c/c-parser.c:14765 c/c-parser.c:2949 c/c-parser.c:9072
+#: cp/parser.c:26281 cp/parser.c:26854
#, gcc-internal-format
msgid "expected %<;%>"
msgstr ""
#. Look for the two `(' tokens.
-#: c/c-parser.c:2187 c/c-parser.c:2889 c/c-parser.c:3186 c/c-parser.c:3253
-#: c/c-parser.c:3902 c/c-parser.c:4091 c/c-parser.c:4096 c/c-parser.c:5314
-#: c/c-parser.c:5508 c/c-parser.c:5712 c/c-parser.c:5961 c/c-parser.c:6084
-#: c/c-parser.c:7143 c/c-parser.c:7568 c/c-parser.c:7609 c/c-parser.c:7742
-#: c/c-parser.c:7934 c/c-parser.c:7951 c/c-parser.c:7977 c/c-parser.c:9348
-#: c/c-parser.c:9420 c/c-parser.c:10453 c/c-parser.c:10654 c/c-parser.c:10793
-#: c/c-parser.c:10848 c/c-parser.c:10945 c/c-parser.c:11125 c/c-parser.c:11169
-#: c/c-parser.c:11213 c/c-parser.c:11257 c/c-parser.c:11301 c/c-parser.c:11346
-#: c/c-parser.c:11381 c/c-parser.c:11449 c/c-parser.c:11698 c/c-parser.c:11844
-#: c/c-parser.c:11970 c/c-parser.c:12121 c/c-parser.c:12224 c/c-parser.c:12267
-#: c/c-parser.c:12314 c/c-parser.c:12358 c/c-parser.c:12424 c/c-parser.c:12460
-#: c/c-parser.c:12587 c/c-parser.c:12669 c/c-parser.c:12777 c/c-parser.c:12812
-#: c/c-parser.c:12860 c/c-parser.c:12918 c/c-parser.c:14647 c/c-parser.c:16570
-#: c/c-parser.c:16780 c/c-parser.c:17218 c/c-parser.c:17276 c/c-parser.c:17701
-#: c/c-parser.c:10924 cp/parser.c:24034 cp/parser.c:26793
+#: c/c-parser.c:2185 c/c-parser.c:2887 c/c-parser.c:3184 c/c-parser.c:3251
+#: c/c-parser.c:3900 c/c-parser.c:4089 c/c-parser.c:4094 c/c-parser.c:5317
+#: c/c-parser.c:5511 c/c-parser.c:5715 c/c-parser.c:5981 c/c-parser.c:6104
+#: c/c-parser.c:7163 c/c-parser.c:7588 c/c-parser.c:7629 c/c-parser.c:7762
+#: c/c-parser.c:7956 c/c-parser.c:7973 c/c-parser.c:7999 c/c-parser.c:9370
+#: c/c-parser.c:9442 c/c-parser.c:10475 c/c-parser.c:10676 c/c-parser.c:10815
+#: c/c-parser.c:10870 c/c-parser.c:10967 c/c-parser.c:11147 c/c-parser.c:11191
+#: c/c-parser.c:11235 c/c-parser.c:11279 c/c-parser.c:11323 c/c-parser.c:11368
+#: c/c-parser.c:11403 c/c-parser.c:11471 c/c-parser.c:11720 c/c-parser.c:11866
+#: c/c-parser.c:11992 c/c-parser.c:12143 c/c-parser.c:12246 c/c-parser.c:12289
+#: c/c-parser.c:12336 c/c-parser.c:12380 c/c-parser.c:12446 c/c-parser.c:12482
+#: c/c-parser.c:12609 c/c-parser.c:12691 c/c-parser.c:12799 c/c-parser.c:12834
+#: c/c-parser.c:12882 c/c-parser.c:12940 c/c-parser.c:14669 c/c-parser.c:16592
+#: c/c-parser.c:16802 c/c-parser.c:17240 c/c-parser.c:17298 c/c-parser.c:17723
+#: c/c-parser.c:10946 cp/parser.c:24066 cp/parser.c:26857
#, gcc-internal-format
msgid "expected %<(%>"
msgstr ""
-#: c/c-parser.c:2193 c/c-parser.c:7170 c/c-parser.c:7576 c/c-parser.c:7617
-#: c/c-parser.c:7753 cp/parser.c:26215 cp/parser.c:26808
+#: c/c-parser.c:2191 c/c-parser.c:7190 c/c-parser.c:7596 c/c-parser.c:7637
+#: c/c-parser.c:7773 cp/parser.c:26279 cp/parser.c:26872
#, gcc-internal-format
msgid "expected %<,%>"
msgstr ""
-#: c/c-parser.c:2214 c/c-parser.c:2581 c/c-parser.c:2904 c/c-parser.c:3227
-#: c/c-parser.c:3264 c/c-parser.c:3479 c/c-parser.c:3665 c/c-parser.c:3727
-#: c/c-parser.c:3779 c/c-parser.c:3909 c/c-parser.c:4191 c/c-parser.c:4207
-#: c/c-parser.c:4216 c/c-parser.c:5317 c/c-parser.c:5523 c/c-parser.c:5859
-#: c/c-parser.c:6019 c/c-parser.c:6092 c/c-parser.c:6671 c/c-parser.c:6901
-#: c/c-parser.c:6984 c/c-parser.c:7083 c/c-parser.c:7286 c/c-parser.c:7488
-#: c/c-parser.c:7507 c/c-parser.c:7531 c/c-parser.c:7586 c/c-parser.c:7693
-#: c/c-parser.c:7766 c/c-parser.c:7943 c/c-parser.c:7968 c/c-parser.c:7992
-#: c/c-parser.c:8215 c/c-parser.c:8606 c/c-parser.c:9142 c/c-parser.c:9163
-#: c/c-parser.c:9371 c/c-parser.c:9426 c/c-parser.c:9809 c/c-parser.c:10490
-#: c/c-parser.c:10657 c/c-parser.c:10796 c/c-parser.c:10882 c/c-parser.c:11026
-#: c/c-parser.c:11132 c/c-parser.c:11176 c/c-parser.c:11220 c/c-parser.c:11264
-#: c/c-parser.c:11308 c/c-parser.c:11352 c/c-parser.c:11409 c/c-parser.c:11416
-#: c/c-parser.c:11456 c/c-parser.c:11611 c/c-parser.c:11669 c/c-parser.c:11718
-#: c/c-parser.c:11790 c/c-parser.c:11942 c/c-parser.c:12067 c/c-parser.c:12128
-#: c/c-parser.c:12231 c/c-parser.c:12274 c/c-parser.c:12339 c/c-parser.c:12381
-#: c/c-parser.c:12411 c/c-parser.c:12439 c/c-parser.c:12475 c/c-parser.c:12617
-#: c/c-parser.c:12635 c/c-parser.c:12641 c/c-parser.c:12725 c/c-parser.c:12736
-#: c/c-parser.c:12756 c/c-parser.c:12766 c/c-parser.c:12783 c/c-parser.c:12819
-#: c/c-parser.c:12831 c/c-parser.c:12879 c/c-parser.c:12887 c/c-parser.c:12922
-#: c/c-parser.c:14529 c/c-parser.c:14708 c/c-parser.c:14754 c/c-parser.c:16759
-#: c/c-parser.c:16836 c/c-parser.c:17254 c/c-parser.c:17338 c/c-parser.c:17710
-#: cp/parser.c:24066 cp/parser.c:26838
+#: c/c-parser.c:2212 c/c-parser.c:2579 c/c-parser.c:2902 c/c-parser.c:3225
+#: c/c-parser.c:3262 c/c-parser.c:3477 c/c-parser.c:3663 c/c-parser.c:3725
+#: c/c-parser.c:3777 c/c-parser.c:3907 c/c-parser.c:4189 c/c-parser.c:4205
+#: c/c-parser.c:4214 c/c-parser.c:5320 c/c-parser.c:5526 c/c-parser.c:5862
+#: c/c-parser.c:6039 c/c-parser.c:6112 c/c-parser.c:6691 c/c-parser.c:6921
+#: c/c-parser.c:7004 c/c-parser.c:7103 c/c-parser.c:7306 c/c-parser.c:7508
+#: c/c-parser.c:7527 c/c-parser.c:7551 c/c-parser.c:7606 c/c-parser.c:7713
+#: c/c-parser.c:7788 c/c-parser.c:7965 c/c-parser.c:7990 c/c-parser.c:8014
+#: c/c-parser.c:8237 c/c-parser.c:8628 c/c-parser.c:9164 c/c-parser.c:9185
+#: c/c-parser.c:9393 c/c-parser.c:9448 c/c-parser.c:9831 c/c-parser.c:10512
+#: c/c-parser.c:10679 c/c-parser.c:10818 c/c-parser.c:10904 c/c-parser.c:11048
+#: c/c-parser.c:11154 c/c-parser.c:11198 c/c-parser.c:11242 c/c-parser.c:11286
+#: c/c-parser.c:11330 c/c-parser.c:11374 c/c-parser.c:11431 c/c-parser.c:11438
+#: c/c-parser.c:11478 c/c-parser.c:11633 c/c-parser.c:11691 c/c-parser.c:11740
+#: c/c-parser.c:11812 c/c-parser.c:11964 c/c-parser.c:12089 c/c-parser.c:12150
+#: c/c-parser.c:12253 c/c-parser.c:12296 c/c-parser.c:12361 c/c-parser.c:12403
+#: c/c-parser.c:12433 c/c-parser.c:12461 c/c-parser.c:12497 c/c-parser.c:12639
+#: c/c-parser.c:12657 c/c-parser.c:12663 c/c-parser.c:12747 c/c-parser.c:12758
+#: c/c-parser.c:12778 c/c-parser.c:12788 c/c-parser.c:12805 c/c-parser.c:12841
+#: c/c-parser.c:12853 c/c-parser.c:12901 c/c-parser.c:12909 c/c-parser.c:12944
+#: c/c-parser.c:14551 c/c-parser.c:14730 c/c-parser.c:14776 c/c-parser.c:16781
+#: c/c-parser.c:16858 c/c-parser.c:17276 c/c-parser.c:17360 c/c-parser.c:17732
+#: cp/parser.c:24098 cp/parser.c:26902
#, gcc-internal-format
msgid "expected %<)%>"
msgstr ""
-#: c/c-parser.c:3584 c/c-parser.c:4511 c/c-parser.c:4547 c/c-parser.c:6076
-#: c/c-parser.c:7684 c/c-parser.c:8040 c/c-parser.c:8189 c/c-parser.c:10592
-#: c/c-parser.c:17613 c/c-parser.c:17615 c/c-parser.c:17954 cp/parser.c:7022
-#: cp/parser.c:26802
+#: c/c-parser.c:3582 c/c-parser.c:4513 c/c-parser.c:4549 c/c-parser.c:6096
+#: c/c-parser.c:7704 c/c-parser.c:8062 c/c-parser.c:8211 c/c-parser.c:10614
+#: c/c-parser.c:17635 c/c-parser.c:17637 c/c-parser.c:17976 cp/parser.c:7024
+#: cp/parser.c:26866
#, gcc-internal-format
msgid "expected %<]%>"
msgstr ""
-#: c/c-parser.c:3760
+#: c/c-parser.c:3758
msgid "expected %<;%>, %<,%> or %<)%>"
msgstr ""
-#: c/c-parser.c:4369 c/c-parser.c:14470 cp/parser.c:26796 cp/parser.c:28719
+#: c/c-parser.c:4371 c/c-parser.c:14492 cp/parser.c:26860 cp/parser.c:28783
#, gcc-internal-format
msgid "expected %<}%>"
msgstr ""
-#: c/c-parser.c:4680 c/c-parser.c:9391 c/c-parser.c:15180 c/c-parser.c:2769
-#: c/c-parser.c:2972 c/c-parser.c:8945 cp/parser.c:17108 cp/parser.c:26799
+#: c/c-parser.c:4683 c/c-parser.c:9413 c/c-parser.c:15202 c/c-parser.c:2767
+#: c/c-parser.c:2970 c/c-parser.c:8967 cp/parser.c:17138 cp/parser.c:26863
#, gcc-internal-format
msgid "expected %<{%>"
msgstr ""
-#: c/c-parser.c:4912 c/c-parser.c:4921 c/c-parser.c:5983 c/c-parser.c:6325
-#: c/c-parser.c:7218 c/c-parser.c:9156 c/c-parser.c:9539 c/c-parser.c:9600
-#: c/c-parser.c:10579 c/c-parser.c:11395 c/c-parser.c:11529 c/c-parser.c:11901
-#: c/c-parser.c:11993 c/c-parser.c:12621 c/c-parser.c:16627 c/c-parser.c:16683
-#: c/c-parser.c:11018 cp/parser.c:26832 cp/parser.c:27930 cp/parser.c:30618
+#: c/c-parser.c:4915 c/c-parser.c:4924 c/c-parser.c:6003 c/c-parser.c:6345
+#: c/c-parser.c:7238 c/c-parser.c:9178 c/c-parser.c:9561 c/c-parser.c:9622
+#: c/c-parser.c:10601 c/c-parser.c:11417 c/c-parser.c:11551 c/c-parser.c:11923
+#: c/c-parser.c:12015 c/c-parser.c:12643 c/c-parser.c:16649 c/c-parser.c:16705
+#: c/c-parser.c:11040 cp/parser.c:26896 cp/parser.c:27994 cp/parser.c:30668
#, gcc-internal-format
msgid "expected %<:%>"
msgstr ""
-#: c/c-parser.c:5170 cp/semantics.c:613
+#: c/c-parser.c:5173 cp/semantics.c:613
msgid "Cilk array notation cannot be used as a computed goto expression"
msgstr ""
-#: c/c-parser.c:5229
+#: c/c-parser.c:5232
msgid "Cilk array notation cannot be used for a throw expression"
msgstr ""
-#: c/c-parser.c:5519 cp/semantics.c:1133
+#: c/c-parser.c:5522 cp/semantics.c:1136
msgid "Cilk array notation cannot be used as a condition for switch statement"
msgstr ""
-#: c/c-parser.c:5565 cp/semantics.c:788
+#: c/c-parser.c:5568 cp/semantics.c:791
msgid "Cilk array notation cannot be used as a condition for while statement"
msgstr ""
-#: c/c-parser.c:5616 cp/parser.c:26726
+#: c/c-parser.c:5619 cp/parser.c:26790
#, gcc-internal-format
msgid "expected %<while%>"
msgstr ""
-#: c/c-parser.c:5623 cp/semantics.c:847
+#: c/c-parser.c:5626 cp/semantics.c:850
msgid ""
"Cilk array notation cannot be used as a condition for a do-while statement"
msgstr ""
-#: c/c-parser.c:5823 cp/semantics.c:966
+#: c/c-parser.c:5826 cp/semantics.c:969
msgid "Cilk array notation cannot be used in a condition for a for-loop"
msgstr ""
-#: c/c-parser.c:7437
+#: c/c-parser.c:7457
msgid "expected %<.%>"
msgstr ""
-#: c/c-parser.c:8616 c/c-parser.c:8648 c/c-parser.c:8888 cp/parser.c:28504
-#: cp/parser.c:28578
+#: c/c-parser.c:8638 c/c-parser.c:8670 c/c-parser.c:8910 cp/parser.c:28568
+#: cp/parser.c:28642
#, gcc-internal-format
msgid "expected %<@end%>"
msgstr ""
-#: c/c-parser.c:9305 cp/parser.c:26817
+#: c/c-parser.c:9327 cp/parser.c:26881
#, gcc-internal-format
msgid "expected %<>%>"
msgstr ""
-#: c/c-parser.c:12071 c/c-parser.c:12835 cp/parser.c:26841
+#: c/c-parser.c:12093 c/c-parser.c:12857 cp/parser.c:26905
#, gcc-internal-format
msgid "expected %<,%> or %<)%>"
msgstr ""
-#: c/c-parser.c:14182 c/c-parser.c:14226 c/c-parser.c:14454 c/c-parser.c:14689
-#: c/c-parser.c:16821 c/c-parser.c:17440 c/c-parser.c:4570 cp/parser.c:26820
+#: c/c-parser.c:14204 c/c-parser.c:14248 c/c-parser.c:14476 c/c-parser.c:14711
+#: c/c-parser.c:16843 c/c-parser.c:17462 c/c-parser.c:4572 cp/parser.c:26884
#, gcc-internal-format
msgid "expected %<=%>"
msgstr ""
-#: c/c-parser.c:15223 c/c-parser.c:15213 cp/parser.c:33985
+#: c/c-parser.c:15245 c/c-parser.c:15235 cp/parser.c:34035
#, gcc-internal-format
msgid "expected %<#pragma omp section%> or %<}%>"
msgstr ""
-#: c/c-parser.c:17601 c/c-parser.c:10538 cp/parser.c:26805 cp/parser.c:29859
+#: c/c-parser.c:17623 c/c-parser.c:10560 cp/parser.c:26869 cp/parser.c:29923
#, gcc-internal-format
msgid "expected %<[%>"
msgstr ""
-#: c/c-typeck.c:7385
+#: c/c-typeck.c:7399
msgid "(anonymous)"
msgstr ""
-#: cp/call.c:9442
+#: cp/call.c:9453
msgid "candidate 1:"
msgstr ""
-#: cp/call.c:9443
+#: cp/call.c:9454
msgid "candidate 2:"
msgstr ""
@@ -4674,98 +4686,98 @@ msgstr ""
msgid "%r%s:%d:%R in constexpr expansion of %qs"
msgstr ""
-#: cp/pt.c:1941 cp/semantics.c:5165
+#: cp/pt.c:1947 cp/semantics.c:5214
msgid "candidates are:"
msgstr ""
-#: cp/pt.c:20936
+#: cp/pt.c:21039
msgid "candidate is:"
msgid_plural "candidates are:"
msgstr[0] ""
msgstr[1] ""
-#: cp/rtti.c:544
+#: cp/rtti.c:545
msgid "target is not pointer or reference to class"
msgstr ""
-#: cp/rtti.c:549
+#: cp/rtti.c:550
msgid "target is not pointer or reference to complete type"
msgstr ""
-#: cp/rtti.c:555
+#: cp/rtti.c:556
msgid "target is not pointer or reference"
msgstr ""
-#: cp/rtti.c:571
+#: cp/rtti.c:572
msgid "source is not a pointer"
msgstr ""
-#: cp/rtti.c:576
+#: cp/rtti.c:577
msgid "source is not a pointer to class"
msgstr ""
-#: cp/rtti.c:581
+#: cp/rtti.c:582
msgid "source is a pointer to incomplete type"
msgstr ""
-#: cp/rtti.c:596
+#: cp/rtti.c:597
msgid "source is not of class type"
msgstr ""
-#: cp/rtti.c:601
+#: cp/rtti.c:602
msgid "source is of incomplete class type"
msgstr ""
-#: cp/rtti.c:610
+#: cp/rtti.c:611
msgid "conversion casts away constness"
msgstr ""
-#: cp/rtti.c:766
+#: cp/rtti.c:767
msgid "source type is not polymorphic"
msgstr ""
-#: cp/typeck.c:5836 c/c-typeck.c:4079
+#: cp/typeck.c:5820 c/c-typeck.c:4093
#, gcc-internal-format
msgid "wrong type argument to unary minus"
msgstr ""
-#: cp/typeck.c:5837 c/c-typeck.c:4066
+#: cp/typeck.c:5821 c/c-typeck.c:4080
#, gcc-internal-format
msgid "wrong type argument to unary plus"
msgstr ""
-#: cp/typeck.c:5864 c/c-typeck.c:4105
+#: cp/typeck.c:5848 c/c-typeck.c:4119
#, gcc-internal-format
msgid "wrong type argument to bit-complement"
msgstr ""
-#: cp/typeck.c:5871 c/c-typeck.c:4113
+#: cp/typeck.c:5855 c/c-typeck.c:4127
#, gcc-internal-format
msgid "wrong type argument to abs"
msgstr ""
-#: cp/typeck.c:5883 c/c-typeck.c:4125
+#: cp/typeck.c:5867 c/c-typeck.c:4139
#, gcc-internal-format
msgid "wrong type argument to conjugation"
msgstr ""
-#: cp/typeck.c:5901
+#: cp/typeck.c:5885
msgid "in argument to unary !"
msgstr ""
-#: cp/typeck.c:5947
+#: cp/typeck.c:5931
msgid "no pre-increment operator for type"
msgstr ""
-#: cp/typeck.c:5949
+#: cp/typeck.c:5933
msgid "no post-increment operator for type"
msgstr ""
-#: cp/typeck.c:5951
+#: cp/typeck.c:5935
msgid "no pre-decrement operator for type"
msgstr ""
-#: cp/typeck.c:5953
+#: cp/typeck.c:5937
msgid "no post-decrement operator for type"
msgstr ""
@@ -4926,13 +4938,13 @@ msgstr ""
msgid "%s tag"
msgstr ""
-#: fortran/io.c:2963
+#: fortran/io.c:2966
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:4182
+#: fortran/io.c:4185
#, c-format
msgid "%s tag with INQUIRE"
msgstr ""
@@ -5038,11 +5050,11 @@ msgstr ""
msgid "implied END DO"
msgstr ""
-#: fortran/parse.c:1852 fortran/resolve.c:10520
+#: fortran/parse.c:1852 fortran/resolve.c:10531
msgid "assignment"
msgstr ""
-#: fortran/parse.c:1855 fortran/resolve.c:10571 fortran/resolve.c:10574
+#: fortran/parse.c:1855 fortran/resolve.c:10582 fortran/resolve.c:10585
msgid "pointer assignment"
msgstr ""
@@ -5228,19 +5240,19 @@ msgstr ""
msgid "ALLOCATE object"
msgstr ""
-#: fortran/resolve.c:7337 fortran/resolve.c:8781
+#: fortran/resolve.c:7345 fortran/resolve.c:8792
msgid "STAT variable"
msgstr ""
-#: fortran/resolve.c:7381 fortran/resolve.c:8793
+#: fortran/resolve.c:7389 fortran/resolve.c:8804
msgid "ERRMSG variable"
msgstr ""
-#: fortran/resolve.c:8623
+#: fortran/resolve.c:8634
msgid "item in READ"
msgstr ""
-#: fortran/resolve.c:8805
+#: fortran/resolve.c:8816
msgid "ACQUIRED_LOCK variable"
msgstr ""
@@ -5249,30 +5261,30 @@ msgstr ""
msgid "Different CHARACTER lengths (%ld/%ld) in array constructor"
msgstr ""
-#: fortran/trans-array.c:5473
+#: fortran/trans-array.c:5484
msgid "Integer overflow when calculating the amount of memory to allocate"
msgstr ""
-#: fortran/trans-decl.c:5443
+#: fortran/trans-decl.c:5490
#, c-format
msgid ""
"Actual string length does not match the declared one for dummy argument "
"'%s' (%ld/%ld)"
msgstr ""
-#: fortran/trans-decl.c:5451
+#: fortran/trans-decl.c:5498
#, c-format
msgid ""
"Actual string length is shorter than the declared one for dummy argument "
"'%s' (%ld/%ld)"
msgstr ""
-#: fortran/trans-expr.c:8109
+#: fortran/trans-expr.c:8140
#, c-format
msgid "Target of rank remapping is too small (%ld < %ld)"
msgstr ""
-#: fortran/trans-expr.c:9314
+#: fortran/trans-expr.c:9345
msgid "Assignment of scalar to unallocated array"
msgstr ""
@@ -5302,16 +5314,16 @@ msgstr ""
msgid "Assigned label is not a target label"
msgstr ""
-#: fortran/trans-stmt.c:1095
+#: fortran/trans-stmt.c:1101
#, c-format
msgid "Invalid image number %d in SYNC IMAGES"
msgstr ""
-#: fortran/trans-stmt.c:1890 fortran/trans-stmt.c:2175
+#: fortran/trans-stmt.c:1898 fortran/trans-stmt.c:2183
msgid "Loop variable has been modified"
msgstr ""
-#: fortran/trans-stmt.c:2030
+#: fortran/trans-stmt.c:2038
msgid "DO step value is zero"
msgstr ""
@@ -5650,24 +5662,24 @@ msgstr ""
msgid "-Xbind-now and -Xbind-lazy are incompatible"
msgstr ""
-#: config/s390/tpf.h:110
-msgid "static is not supported on TPF-OS"
+#: config/sparc/linux64.h:149 config/sparc/linux64.h:156
+#: config/sparc/netbsd-elf.h:108 config/sparc/netbsd-elf.h:117
+#: config/sparc/sol2.h:219 config/sparc/sol2.h:225
+msgid "may not use both -m32 and -m64"
msgstr ""
-#: config/sparc/sol2.h:219 config/sparc/sol2.h:225 config/sparc/linux64.h:149
-#: config/sparc/linux64.h:156 config/sparc/netbsd-elf.h:108
-#: config/sparc/netbsd-elf.h:117
-msgid "may not use both -m32 and -m64"
+#: config/s390/tpf.h:110
+msgid "static is not supported on TPF-OS"
msgstr ""
#: config/i386/mingw-w64.h:87 config/i386/mingw32.h:117
-#: config/i386/cygwin-w64.h:64 config/i386/cygwin.h:130
+#: config/i386/cygwin.h:130 config/i386/cygwin-w64.h:64
msgid "shared and mdll are not compatible"
msgstr ""
-#: config/i386/freebsd.h:82 config/i386/freebsd64.h:35
#: config/alpha/freebsd.h:33 config/rs6000/sysv4.h:731 config/dragonfly.h:76
-#: config/ia64/freebsd.h:26 config/sparc/freebsd.h:45
+#: config/ia64/freebsd.h:26 config/i386/freebsd.h:82
+#: config/i386/freebsd64.h:35 config/sparc/freebsd.h:45
msgid "consider using '-pg' instead of '-p' with gprof(1)"
msgstr ""
@@ -5680,6 +5692,14 @@ msgid ""
"objc-cpp-output is deprecated; please use objective-c-cpp-output instead"
msgstr ""
+#: config/tilegx/tilegx.h:546 config/tilegx/tilegx.h:551 config/arm/arm.h:102
+msgid "-mbig-endian and -mlittle-endian may not be used together"
+msgstr ""
+
+#: config/moxie/moxiebox.h:43
+msgid "this target is little-endian"
+msgstr ""
+
#: config/pa/pa-hpux10.h:102 config/pa/pa-hpux10.h:105
#: config/pa/pa-hpux10.h:113 config/pa/pa-hpux10.h:116
#: config/pa/pa-hpux11.h:134 config/pa/pa-hpux11.h:137
@@ -5696,14 +5716,6 @@ msgstr ""
msgid " profiling support are only provided in archive format"
msgstr ""
-#: config/rs6000/darwin.h:95
-msgid " conflicting code gen style switches are used"
-msgstr ""
-
-#: fortran/lang-specs.h:54 fortran/lang-specs.h:68
-msgid "gfortran does not support -E without -cpp"
-msgstr ""
-
#: config/cris/cris.h:184
msgid "do not specify both -march=... and -mcpu=..."
msgstr ""
@@ -5712,21 +5724,17 @@ msgstr ""
msgid "may not use both -EB and -EL"
msgstr ""
-#: config/mips/r3900.h:37
-msgid "-mhard-float not supported"
-msgstr ""
-
-#: config/mips/r3900.h:39
-msgid "-msingle-float and -msoft-float cannot both be specified"
-msgstr ""
-
#: objcp/lang-specs.h:58
msgid ""
"objc++-cpp-output is deprecated; please use objective-c++-cpp-output instead"
msgstr ""
-#: config/rs6000/freebsd64.h:171
-msgid "consider using `-pg' instead of `-p' with gprof(1)"
+#: config/rs6000/darwin.h:95
+msgid " conflicting code gen style switches are used"
+msgstr ""
+
+#: fortran/lang-specs.h:54 fortran/lang-specs.h:68
+msgid "gfortran does not support -E without -cpp"
msgstr ""
#: config/sh/sh.h:375 config/sh/sh.h:378
@@ -5753,14 +5761,18 @@ msgstr ""
msgid "-mfloat-abi=soft and -mfloat-abi=hard may not be used together"
msgstr ""
-#: config/arm/arm.h:102 config/tilegx/tilegx.h:546 config/tilegx/tilegx.h:551
-msgid "-mbig-endian and -mlittle-endian may not be used together"
-msgstr ""
-
#: config/vax/netbsd-elf.h:51
msgid "the -shared option is not currently supported for VAX ELF"
msgstr ""
+#: config/mips/r3900.h:37
+msgid "-mhard-float not supported"
+msgstr ""
+
+#: config/mips/r3900.h:39
+msgid "-msingle-float and -msoft-float cannot both be specified"
+msgstr ""
+
#: config/vax/vax.h:46 config/vax/vax.h:47
msgid "profiling not supported with -mg"
msgstr ""
@@ -5773,6 +5785,10 @@ msgstr ""
msgid "the m210 does not have little endian support"
msgstr ""
+#: config/rs6000/freebsd64.h:171
+msgid "consider using `-pg' instead of `-p' with gprof(1)"
+msgstr ""
+
#: config/lynx.h:69
msgid "cannot use mthreads and mlegacy-threads together"
msgstr ""
@@ -5991,10 +6007,10 @@ msgstr ""
msgid "Allow dollar signs in entity names."
msgstr ""
-#: fortran/lang.opt:437 config/alpha/alpha.opt:31 common.opt:728
-#: common.opt:916 common.opt:920 common.opt:924 common.opt:928 common.opt:1417
-#: common.opt:1566 common.opt:1570 common.opt:1796 common.opt:1942
-#: common.opt:2586
+#: fortran/lang.opt:437 config/alpha/alpha.opt:31 common.opt:732
+#: common.opt:920 common.opt:924 common.opt:928 common.opt:932 common.opt:1421
+#: common.opt:1570 common.opt:1574 common.opt:1800 common.opt:1946
+#: common.opt:2598
msgid "Does nothing. Preserved for backward compatibility."
msgstr ""
@@ -6130,123 +6146,123 @@ msgstr ""
msgid "Set default accessibility of module entities to PRIVATE."
msgstr ""
-#: fortran/lang.opt:591
+#: fortran/lang.opt:595
msgid "Try to lay out derived types as compactly as possible."
msgstr ""
-#: fortran/lang.opt:599
+#: fortran/lang.opt:603
msgid "Protect parentheses in expressions."
msgstr ""
-#: fortran/lang.opt:603
+#: fortran/lang.opt:607
msgid "Enable range checking during compilation."
msgstr ""
-#: fortran/lang.opt:607
+#: fortran/lang.opt:611
msgid "Interpret any REAL(4) as a REAL(8)."
msgstr ""
-#: fortran/lang.opt:611
+#: fortran/lang.opt:615
msgid "Interpret any REAL(4) as a REAL(10)."
msgstr ""
-#: fortran/lang.opt:615
+#: fortran/lang.opt:619
msgid "Interpret any REAL(4) as a REAL(16)."
msgstr ""
-#: fortran/lang.opt:619
+#: fortran/lang.opt:623
msgid "Interpret any REAL(8) as a REAL(4)."
msgstr ""
-#: fortran/lang.opt:623
+#: fortran/lang.opt:627
msgid "Interpret any REAL(8) as a REAL(10)."
msgstr ""
-#: fortran/lang.opt:627
+#: fortran/lang.opt:631
msgid "Interpret any REAL(8) as a REAL(16)."
msgstr ""
-#: fortran/lang.opt:631
+#: fortran/lang.opt:635
msgid "Reallocate the LHS in assignments."
msgstr ""
-#: fortran/lang.opt:635
+#: fortran/lang.opt:639
msgid "Use a 4-byte record marker for unformatted files."
msgstr ""
-#: fortran/lang.opt:639
+#: fortran/lang.opt:643
msgid "Use an 8-byte record marker for unformatted files."
msgstr ""
-#: fortran/lang.opt:643
+#: fortran/lang.opt:647
msgid "Allocate local variables on the stack to allow indirect recursion."
msgstr ""
-#: fortran/lang.opt:647
+#: fortran/lang.opt:651
msgid "Copy array sections into a contiguous block on procedure entry."
msgstr ""
-#: fortran/lang.opt:651
+#: fortran/lang.opt:655
msgid ""
"-fcoarray=<none|single|lib>\tSpecify which coarray parallelization should be "
"used."
msgstr ""
-#: fortran/lang.opt:654
+#: fortran/lang.opt:658
#, c-format
msgid "Unrecognized option: %qs"
msgstr ""
-#: fortran/lang.opt:667
+#: fortran/lang.opt:671
msgid "-fcheck=[...]\tSpecify which runtime checks are to be performed."
msgstr ""
-#: fortran/lang.opt:671
+#: fortran/lang.opt:675
msgid "Append a second underscore if the name already contains an underscore."
msgstr ""
-#: fortran/lang.opt:679
+#: fortran/lang.opt:683
msgid "Apply negative sign to zero values."
msgstr ""
-#: fortran/lang.opt:683
+#: fortran/lang.opt:687
msgid "Append underscores to externally visible names."
msgstr ""
-#: fortran/lang.opt:687 c-family/c.opt:1139 c-family/c.opt:1163
-#: c-family/c.opt:1389 config/pa/pa.opt:42 config/pa/pa.opt:66
-#: config/sh/sh.opt:213 common.opt:1070 common.opt:1297 common.opt:1649
-#: common.opt:1992 common.opt:2028 common.opt:2117 common.opt:2121
-#: common.opt:2217 common.opt:2299 common.opt:2307 common.opt:2315
-#: common.opt:2323 common.opt:2424 common.opt:2546
+#: fortran/lang.opt:691 c-family/c.opt:1155 c-family/c.opt:1179
+#: c-family/c.opt:1409 config/pa/pa.opt:42 config/pa/pa.opt:66
+#: config/sh/sh.opt:213 common.opt:1074 common.opt:1301 common.opt:1653
+#: common.opt:1999 common.opt:2035 common.opt:2124 common.opt:2128
+#: common.opt:2224 common.opt:2306 common.opt:2314 common.opt:2322
+#: common.opt:2330 common.opt:2431 common.opt:2558
msgid "Does nothing. Preserved for backward compatibility."
msgstr ""
-#: fortran/lang.opt:727
+#: fortran/lang.opt:731
msgid "Statically link the GNU Fortran helper library (libgfortran)."
msgstr ""
-#: fortran/lang.opt:731
+#: fortran/lang.opt:735
msgid "Conform to the ISO Fortran 2003 standard."
msgstr ""
-#: fortran/lang.opt:735
+#: fortran/lang.opt:739
msgid "Conform to the ISO Fortran 2008 standard."
msgstr ""
-#: fortran/lang.opt:739
+#: fortran/lang.opt:743
msgid "Conform to the ISO Fortran 2008 standard including TS 29113."
msgstr ""
-#: fortran/lang.opt:743
+#: fortran/lang.opt:747
msgid "Conform to the ISO Fortran 95 standard."
msgstr ""
-#: fortran/lang.opt:747
+#: fortran/lang.opt:751
msgid "Conform to nothing in particular."
msgstr ""
-#: fortran/lang.opt:751
+#: fortran/lang.opt:755
msgid "Accept extensions to support legacy code."
msgstr ""
@@ -6263,15 +6279,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:216 c-family/c.opt:220
-#: c-family/c.opt:232 c-family/c.opt:1585 c-family/c.opt:1593
-#: config/darwin.opt:53 common.opt:336 common.opt:339 common.opt:2801
+#: c-family/c.opt:232 c-family/c.opt:1601 c-family/c.opt:1609
+#: config/darwin.opt:53 common.opt:336 common.opt:339 common.opt:2813
#, 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:208 c-family/c.opt:1581
-#: c-family/c.opt:1601 c-family/c.opt:1605 c-family/c.opt:1609
+#: c-family/c.opt:200 c-family/c.opt:208 c-family/c.opt:1597
+#: c-family/c.opt:1617 c-family/c.opt:1621 c-family/c.opt:1625
#, c-format
msgid "missing path after %qs"
msgstr ""
@@ -6585,1178 +6601,1182 @@ msgid "Warn whenever type qualifiers are ignored."
msgstr ""
#: c-family/c.opt:487
+msgid "Warn whenever attributes are ignored."
+msgstr ""
+
+#: c-family/c.opt:491
msgid ""
"Warn when there is a conversion between pointers that have incompatible "
"types."
msgstr ""
-#: c-family/c.opt:491
+#: c-family/c.opt:495
msgid "Warn about variables which are initialized to themselves."
msgstr ""
-#: c-family/c.opt:495
+#: c-family/c.opt:499
msgid "Warn about implicit declarations."
msgstr ""
-#: c-family/c.opt:499
+#: c-family/c.opt:503
msgid "Warn about implicit conversions from \"float\" to \"double\"."
msgstr ""
-#: c-family/c.opt:503
+#: c-family/c.opt:507
msgid "Warn about implicit function declarations."
msgstr ""
-#: c-family/c.opt:507
+#: c-family/c.opt:511
msgid "Warn when a declaration does not specify a type."
msgstr ""
-#: c-family/c.opt:514
+#: c-family/c.opt:518
msgid ""
"Warn about C++11 inheriting constructors when the base has a variadic "
"constructor."
msgstr ""
-#: c-family/c.opt:518
+#: c-family/c.opt:522
msgid ""
"Warn about incompatible integer to pointer and pointer to integer "
"conversions."
msgstr ""
-#: c-family/c.opt:522
+#: c-family/c.opt:526
msgid ""
"Warn when there is a cast to a pointer from an integer of a different size."
msgstr ""
-#: c-family/c.opt:526
+#: c-family/c.opt:530
msgid "Warn about invalid uses of the \"offsetof\" macro."
msgstr ""
-#: c-family/c.opt:530
+#: c-family/c.opt:534
msgid "Warn about PCH files that are found but not used."
msgstr ""
-#: c-family/c.opt:534
+#: c-family/c.opt:538
msgid "Warn when a jump misses a variable initialization."
msgstr ""
-#: c-family/c.opt:538
+#: c-family/c.opt:542
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:542
+#: c-family/c.opt:546
msgid ""
"Warn when a logical operator is suspiciously always evaluating to true or "
"false."
msgstr ""
-#: c-family/c.opt:546
+#: c-family/c.opt:550
msgid ""
"Warn when logical not is used on the left hand side operand of a comparison."
msgstr ""
-#: c-family/c.opt:550
+#: c-family/c.opt:554
msgid "Do not warn about using \"long long\" when -pedantic."
msgstr ""
-#: c-family/c.opt:554
+#: c-family/c.opt:558
msgid "Warn about suspicious declarations of \"main\"."
msgstr ""
-#: c-family/c.opt:562
+#: c-family/c.opt:566
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:566
+#: c-family/c.opt:570
msgid ""
"Warn when the indentation of the code does not reflect the block structure."
msgstr ""
-#: c-family/c.opt:570
+#: c-family/c.opt:574
msgid "Warn about possibly missing braces around initializers."
msgstr ""
-#: c-family/c.opt:574
+#: c-family/c.opt:578
msgid "Warn about global functions without previous declarations."
msgstr ""
-#: c-family/c.opt:578
+#: c-family/c.opt:582
msgid "Warn about missing fields in struct initializers."
msgstr ""
-#: c-family/c.opt:582
+#: c-family/c.opt:586
msgid "Warn on direct multiple inheritance."
msgstr ""
-#: c-family/c.opt:586
+#: c-family/c.opt:590
msgid "Warn on namespace definition."
msgstr ""
-#: c-family/c.opt:590
+#: c-family/c.opt:594
msgid "Warn about missing sized deallocation functions."
msgstr ""
-#: c-family/c.opt:594
+#: c-family/c.opt:598
msgid ""
"Warn about suspicious length parameters to certain string functions if the "
"argument uses sizeof."
msgstr ""
-#: c-family/c.opt:598
+#: c-family/c.opt:602
msgid "Warn when sizeof is applied on a parameter declared as an array."
msgstr ""
-#: c-family/c.opt:602
+#: c-family/c.opt:606
msgid "Warn about functions which might be candidates for format attributes."
msgstr ""
-#: c-family/c.opt:606
+#: c-family/c.opt:610
msgid ""
"Suggest that the override keyword be used when the declaration of a virtual"
msgstr ""
-#: c-family/c.opt:611
+#: c-family/c.opt:615
msgid "Warn about enumerated switches, with no default, missing a case."
msgstr ""
-#: c-family/c.opt:615
+#: c-family/c.opt:619
msgid "Warn about enumerated switches missing a \"default:\" statement."
msgstr ""
-#: c-family/c.opt:619
+#: c-family/c.opt:623
msgid "Warn about all enumerated switches missing a specific case."
msgstr ""
-#: c-family/c.opt:623
+#: c-family/c.opt:627
msgid "Warn about switches with boolean controlling expression."
msgstr ""
-#: c-family/c.opt:627
+#: c-family/c.opt:631
msgid "Warn on primary template declaration."
msgstr ""
-#: c-family/c.opt:635
+#: c-family/c.opt:639
msgid "Warn about user-specified include directories that do not exist."
msgstr ""
-#: c-family/c.opt:639
+#: c-family/c.opt:643
msgid ""
"Warn about function parameters declared without a type specifier in K&R-"
"style functions."
msgstr ""
-#: c-family/c.opt:643
+#: c-family/c.opt:647
msgid "Warn about global functions without prototypes."
msgstr ""
-#: c-family/c.opt:646 c-family/c.opt:1008 c-family/c.opt:1015
-#: c-family/c.opt:1189 c-family/c.opt:1208 c-family/c.opt:1231
-#: c-family/c.opt:1237 c-family/c.opt:1244 c-family/c.opt:1268
-#: c-family/c.opt:1279 c-family/c.opt:1282 c-family/c.opt:1285
-#: c-family/c.opt:1288 c-family/c.opt:1291 c-family/c.opt:1328
-#: c-family/c.opt:1459 c-family/c.opt:1483 c-family/c.opt:1501
-#: c-family/c.opt:1532 c-family/c.opt:1536 c-family/c.opt:1552
-#: config/ia64/ia64.opt:167 config/ia64/ia64.opt:170 c-family/c-opts.c:415
+#: c-family/c.opt:650 c-family/c.opt:1024 c-family/c.opt:1031
+#: c-family/c.opt:1205 c-family/c.opt:1224 c-family/c.opt:1247
+#: c-family/c.opt:1253 c-family/c.opt:1260 c-family/c.opt:1284
+#: c-family/c.opt:1295 c-family/c.opt:1298 c-family/c.opt:1301
+#: c-family/c.opt:1304 c-family/c.opt:1307 c-family/c.opt:1344
+#: c-family/c.opt:1475 c-family/c.opt:1499 c-family/c.opt:1517
+#: c-family/c.opt:1548 c-family/c.opt:1552 c-family/c.opt:1568
+#: config/ia64/ia64.opt:167 config/ia64/ia64.opt:170 c-family/c-opts.c:419
#, gcc-internal-format
msgid "switch %qs is no longer supported"
msgstr ""
-#: c-family/c.opt:650
+#: c-family/c.opt:654
msgid "Warn about use of multi-character character constants."
msgstr ""
-#: c-family/c.opt:654
+#: c-family/c.opt:658
msgid ""
"Warn about narrowing conversions within { } that are ill-formed in C++11."
msgstr ""
-#: c-family/c.opt:658
+#: c-family/c.opt:662
msgid "Warn about \"extern\" declarations not at file scope."
msgstr ""
-#: c-family/c.opt:662
+#: c-family/c.opt:666
msgid ""
"Warn when a noexcept expression evaluates to false even though the "
"expression can't actually throw."
msgstr ""
-#: c-family/c.opt:666
+#: c-family/c.opt:670
msgid ""
"Warn when non-templatized friend functions are declared within a template."
msgstr ""
-#: c-family/c.opt:670
+#: c-family/c.opt:674
msgid "Warn about non-virtual destructors."
msgstr ""
-#: c-family/c.opt:674
+#: c-family/c.opt:678
msgid ""
"Warn about NULL being passed to argument slots marked as requiring non-NULL."
msgstr ""
-#: c-family/c.opt:686
+#: c-family/c.opt:694
msgid ""
"-Wnormalized=<none|id|nfc|nfkc>\tWarn about non-normalised Unicode strings."
msgstr ""
-#: c-family/c.opt:693
+#: c-family/c.opt:701
msgid "argument %qs to %<-Wnormalized%> not recognized"
msgstr ""
-#: c-family/c.opt:709
+#: c-family/c.opt:717
msgid "Warn if a C-style cast is used in a program."
msgstr ""
-#: c-family/c.opt:713
+#: c-family/c.opt:721
msgid "Warn for obsolescent usage in a declaration."
msgstr ""
-#: c-family/c.opt:717
+#: c-family/c.opt:725
msgid "Warn if an old-style parameter definition is used."
msgstr ""
-#: c-family/c.opt:721
+#: c-family/c.opt:729
msgid "Warn if a simd directive is overridden by the vectorizer cost model."
msgstr ""
-#: c-family/c.opt:725
+#: c-family/c.opt:733
msgid ""
"Warn if a string is longer than the maximum portable length specified by the "
"standard."
msgstr ""
-#: c-family/c.opt:729
+#: c-family/c.opt:737
msgid "Warn about overloaded virtual function names."
msgstr ""
-#: c-family/c.opt:733
+#: c-family/c.opt:741
msgid "Warn about overriding initializers without side effects."
msgstr ""
-#: c-family/c.opt:737
+#: c-family/c.opt:745
msgid "Warn about overriding initializers with side effects."
msgstr ""
-#: c-family/c.opt:741
+#: c-family/c.opt:749
msgid "Warn about packed bit-fields whose offset changed in GCC 4.4."
msgstr ""
-#: c-family/c.opt:745
+#: c-family/c.opt:753
msgid "Warn about possibly missing parentheses."
msgstr ""
-#: c-family/c.opt:753
+#: c-family/c.opt:761
msgid "Warn when converting the type of pointers to member functions."
msgstr ""
-#: c-family/c.opt:757
+#: c-family/c.opt:765
msgid "Warn about function pointer arithmetic."
msgstr ""
-#: c-family/c.opt:761
+#: c-family/c.opt:769
msgid "Warn when a pointer differs in signedness in an assignment."
msgstr ""
-#: c-family/c.opt:765
+#: c-family/c.opt:773
msgid "Warn when a pointer is cast to an integer of a different size."
msgstr ""
-#: c-family/c.opt:769
+#: c-family/c.opt:777
msgid "Warn about misuses of pragmas."
msgstr ""
-#: c-family/c.opt:773
+#: c-family/c.opt:781
msgid ""
"Warn if a property for an Objective-C object has no assign semantics "
"specified."
msgstr ""
-#: c-family/c.opt:777
+#: c-family/c.opt:785
msgid "Warn if inherited methods are unimplemented."
msgstr ""
-#: c-family/c.opt:781
+#: c-family/c.opt:789 c-family/c.opt:793
msgid "Warn for placement new expressions with undefined behavior."
msgstr ""
-#: c-family/c.opt:785
+#: c-family/c.opt:797
msgid "Warn about multiple declarations of the same object."
msgstr ""
-#: c-family/c.opt:789
+#: c-family/c.opt:801
msgid "Warn when the compiler reorders code."
msgstr ""
-#: c-family/c.opt:793
+#: c-family/c.opt:805
msgid ""
"Warn whenever a function's return type defaults to \"int\" (C), or about "
"inconsistent return types (C++)."
msgstr ""
-#: c-family/c.opt:797
+#: c-family/c.opt:809
msgid "Warn on suspicious constructs involving reverse scalar storage order."
msgstr ""
-#: c-family/c.opt:801
+#: c-family/c.opt:813
msgid "Warn if a selector has multiple methods."
msgstr ""
-#: c-family/c.opt:805
+#: c-family/c.opt:817
msgid "Warn about possible violations of sequence point rules."
msgstr ""
-#: c-family/c.opt:809
+#: c-family/c.opt:821
msgid "Warn if a local declaration hides an instance variable."
msgstr ""
-#: c-family/c.opt:813 c-family/c.opt:817
+#: c-family/c.opt:825 c-family/c.opt:829
msgid "Warn if left shift of a signed value overflows."
msgstr ""
-#: c-family/c.opt:821
+#: c-family/c.opt:833
msgid "Warn if shift count is negative."
msgstr ""
-#: c-family/c.opt:825
+#: c-family/c.opt:837
msgid "Warn if shift count >= width of type."
msgstr ""
-#: c-family/c.opt:829
+#: c-family/c.opt:841
msgid "Warn if left shifting a negative value."
msgstr ""
-#: c-family/c.opt:833
+#: c-family/c.opt:845
msgid "Warn about signed-unsigned comparisons."
msgstr ""
-#: c-family/c.opt:841
+#: c-family/c.opt:853
msgid ""
"Warn for implicit type conversions between signed and unsigned integers."
msgstr ""
-#: c-family/c.opt:845
+#: c-family/c.opt:857
msgid "Warn when overload promotes from unsigned to signed."
msgstr ""
-#: c-family/c.opt:849
+#: c-family/c.opt:861
msgid "Warn about uncasted NULL used as sentinel."
msgstr ""
-#: c-family/c.opt:853
+#: c-family/c.opt:865
msgid "Warn about unprototyped function declarations."
msgstr ""
-#: c-family/c.opt:865
+#: c-family/c.opt:877
msgid "Warn if type signatures of candidate methods do not match exactly."
msgstr ""
-#: c-family/c.opt:869
+#: c-family/c.opt:881
msgid ""
"Warn when __sync_fetch_and_nand and __sync_nand_and_fetch built-in functions "
"are used."
msgstr ""
-#: c-family/c.opt:873
+#: c-family/c.opt:885
msgid "Deprecated. This switch has no effect."
msgstr ""
-#: c-family/c.opt:881
+#: c-family/c.opt:893
msgid "Warn if a comparison always evaluates to true or false."
msgstr ""
-#: c-family/c.opt:885
+#: c-family/c.opt:897
msgid "Warn if a throw expression will always result in a call to terminate()."
msgstr ""
-#: c-family/c.opt:889
+#: c-family/c.opt:901
msgid "Warn about features not present in traditional C."
msgstr ""
-#: c-family/c.opt:893
+#: c-family/c.opt:905
msgid ""
"Warn of prototypes causing type conversions different from what would happen "
"in the absence of prototype."
msgstr ""
-#: c-family/c.opt:897
+#: c-family/c.opt:909
msgid ""
"Warn if trigraphs are encountered that might affect the meaning of the "
"program."
msgstr ""
-#: c-family/c.opt:901
+#: c-family/c.opt:913
msgid "Warn about @selector()s without previously declared methods."
msgstr ""
-#: c-family/c.opt:905
+#: c-family/c.opt:917
msgid "Warn if an undefined macro is used in an #if directive."
msgstr ""
-#: c-family/c.opt:917
+#: c-family/c.opt:929
msgid "Warn about unrecognized pragmas."
msgstr ""
-#: c-family/c.opt:921
+#: c-family/c.opt:933
msgid "Warn about unsuffixed float constants."
msgstr ""
-#: c-family/c.opt:929
+#: c-family/c.opt:941
msgid "Warn when typedefs locally defined in a function are not used."
msgstr ""
-#: c-family/c.opt:933
+#: c-family/c.opt:945
msgid "Warn about macros defined in the main file that are not used."
msgstr ""
-#: c-family/c.opt:937
+#: c-family/c.opt:949
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:945
+#: c-family/c.opt:957 c-family/c.opt:961
msgid "Warn when a const variable is unused."
msgstr ""
-#: c-family/c.opt:949
+#: c-family/c.opt:965
msgid "Warn about using variadic macros."
msgstr ""
-#: c-family/c.opt:953
+#: c-family/c.opt:969
msgid ""
"Warn about questionable usage of the macros used to retrieve variable "
"arguments."
msgstr ""
-#: c-family/c.opt:957
+#: c-family/c.opt:973
msgid "Warn if a variable length array is used."
msgstr ""
-#: c-family/c.opt:961
+#: c-family/c.opt:977
msgid "Warn when a register variable is declared volatile."
msgstr ""
-#: c-family/c.opt:965
+#: c-family/c.opt:981
msgid "Warn on direct virtual inheritance."
msgstr ""
-#: c-family/c.opt:969
+#: c-family/c.opt:985
msgid "Warn if a virtual base has a non-trivial move assignment operator."
msgstr ""
-#: c-family/c.opt:973
+#: c-family/c.opt:989
msgid ""
"In C++, nonzero means warn about deprecated conversion from string literals "
"to 'char *'. In C, similar warning, except that the conversion is of course "
"not deprecated by the ISO C standard."
msgstr ""
-#: c-family/c.opt:977
+#: c-family/c.opt:993
msgid "Warn when a literal '0' is used as null pointer."
msgstr ""
-#: c-family/c.opt:981
+#: c-family/c.opt:997
msgid "Warn about useless casts."
msgstr ""
-#: c-family/c.opt:985
+#: c-family/c.opt:1001
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:989
+#: c-family/c.opt:1005
msgid "A synonym for -std=c89 (for C) or -std=c++98 (for C++)."
msgstr ""
-#: c-family/c.opt:997
+#: c-family/c.opt:1013
msgid ""
"The version of the C++ ABI used for -Wabi warnings and link compatibility "
"aliases."
msgstr ""
-#: c-family/c.opt:1001
+#: c-family/c.opt:1017
msgid "Enforce class member access control semantics."
msgstr ""
-#: c-family/c.opt:1005
+#: c-family/c.opt:1021
msgid "-fada-spec-parent=unit Dump Ada specs as child units of given parent."
msgstr ""
-#: c-family/c.opt:1012
+#: c-family/c.opt:1028
msgid "Allow variadic functions without named parameter."
msgstr ""
-#: c-family/c.opt:1016 c-family/c.opt:1245 c-family/c.opt:1533
-#: c-family/c.opt:1537 c-family/c.opt:1553
+#: c-family/c.opt:1032 c-family/c.opt:1261 c-family/c.opt:1549
+#: c-family/c.opt:1553 c-family/c.opt:1569
msgid "No longer supported."
msgstr ""
-#: c-family/c.opt:1020
+#: c-family/c.opt:1036
msgid "Recognize the \"asm\" keyword."
msgstr ""
-#: c-family/c.opt:1028
+#: c-family/c.opt:1044
msgid "Recognize built-in functions."
msgstr ""
-#: c-family/c.opt:1035
+#: c-family/c.opt:1051
msgid "Where shorter, use canonicalized paths to systems headers."
msgstr ""
-#: c-family/c.opt:1039
+#: c-family/c.opt:1055
msgid "Add Pointer Bounds Checker instrumentation. fchkp-* flags are used to"
msgstr ""
-#: c-family/c.opt:1044
+#: c-family/c.opt:1060
msgid "Generate pointer bounds checks for variables with incomplete type."
msgstr ""
-#: c-family/c.opt:1048
+#: c-family/c.opt:1064
msgid ""
"Use zero bounds for all incoming arguments in 'main' function. It helps when"
msgstr ""
-#: c-family/c.opt:1053
+#: c-family/c.opt:1069
msgid ""
"Forces Pointer Bounds Checker to use narrowed bounds for address of the first"
msgstr ""
-#: c-family/c.opt:1059
+#: c-family/c.opt:1075
msgid ""
"Control how Pointer Bounds Checker handle pointers to object fields. When"
msgstr ""
-#: c-family/c.opt:1064
+#: c-family/c.opt:1080
msgid ""
"Forces Pointer Bounds Checker to use bounds of the innermost arrays in case "
"of"
msgstr ""
-#: c-family/c.opt:1069
+#: c-family/c.opt:1085
msgid "Allow Pointer Bounds Checker optimizations. By default allowed"
msgstr ""
-#: c-family/c.opt:1074
+#: c-family/c.opt:1090
msgid ""
"Allow to use *_nobnd versions of string functions by Pointer Bounds Checker."
msgstr ""
-#: c-family/c.opt:1078
+#: c-family/c.opt:1094
msgid ""
"Allow to use *_nochk versions of string functions by Pointer Bounds Checker."
msgstr ""
-#: c-family/c.opt:1082
+#: c-family/c.opt:1098
msgid "Use statically initialized variable for vars bounds instead of"
msgstr ""
-#: c-family/c.opt:1087
+#: c-family/c.opt:1103
msgid "Use statically initialized variable for constant bounds instead of"
msgstr ""
-#: c-family/c.opt:1092
+#: c-family/c.opt:1108
msgid "With this option zero size obtained dynamically for objects with"
msgstr ""
-#: c-family/c.opt:1097
+#: c-family/c.opt:1113
msgid "Generate checks for all read accesses to memory."
msgstr ""
-#: c-family/c.opt:1101
+#: c-family/c.opt:1117
msgid "Generate checks for all write accesses to memory."
msgstr ""
-#: c-family/c.opt:1105
+#: c-family/c.opt:1121
msgid "Generate bounds stores for pointer writes."
msgstr ""
-#: c-family/c.opt:1109
+#: c-family/c.opt:1125
msgid "Generate bounds passing for calls."
msgstr ""
-#: c-family/c.opt:1113
+#: c-family/c.opt:1129
msgid "Instrument only functions marked with bnd_instrument attribute."
msgstr ""
-#: c-family/c.opt:1117
+#: c-family/c.opt:1133
msgid "Transform instrumented builtin calls into calls to wrappers."
msgstr ""
-#: c-family/c.opt:1127
+#: c-family/c.opt:1143
msgid "Enable Cilk Plus."
msgstr ""
-#: c-family/c.opt:1131
+#: c-family/c.opt:1147
msgid "Enable support for C++ concepts."
msgstr ""
-#: c-family/c.opt:1135
+#: c-family/c.opt:1151
msgid "Allow the arguments of the '?' operator to have different types."
msgstr ""
-#: c-family/c.opt:1142
+#: c-family/c.opt:1158
#, c-format
msgid "no class name specified with %qs"
msgstr ""
-#: c-family/c.opt:1143
+#: c-family/c.opt:1159
msgid "-fconst-string-class=<name>\tUse class <name> for constant strings."
msgstr ""
-#: c-family/c.opt:1147
+#: c-family/c.opt:1163
msgid "-fconstexpr-depth=<number>\tSpecify maximum constexpr recursion depth."
msgstr ""
-#: c-family/c.opt:1151
+#: c-family/c.opt:1167
msgid "Emit debug annotations during preprocessing."
msgstr ""
-#: c-family/c.opt:1155
+#: c-family/c.opt:1171
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:1159
+#: c-family/c.opt:1175
msgid "Factor complex constructors and destructors to favor space over speed."
msgstr ""
-#: c-family/c.opt:1167
+#: c-family/c.opt:1183
msgid "Preprocess directives only."
msgstr ""
-#: c-family/c.opt:1171
+#: c-family/c.opt:1187
msgid "Permit '$' as an identifier character."
msgstr ""
-#: c-family/c.opt:1175
+#: c-family/c.opt:1191
msgid "Write all declarations as Ada code transitively."
msgstr ""
-#: c-family/c.opt:1179
+#: c-family/c.opt:1195
msgid "Write all declarations as Ada code for the given file only."
msgstr ""
-#: c-family/c.opt:1186
+#: c-family/c.opt:1202
msgid "Generate code to check exception specifications."
msgstr ""
-#: c-family/c.opt:1193
+#: c-family/c.opt:1209
msgid ""
"-fexec-charset=<cset>\tConvert all strings and character constants to "
"character set <cset>."
msgstr ""
-#: c-family/c.opt:1197
+#: c-family/c.opt:1213
msgid "Permit universal character names (\\u and \\U) in identifiers."
msgstr ""
-#: c-family/c.opt:1201
+#: c-family/c.opt:1217
msgid ""
"-finput-charset=<cset>\tSpecify the default character set for source files."
msgstr ""
-#: c-family/c.opt:1205
+#: c-family/c.opt:1221
msgid ""
"Support dynamic initialization of thread-local variables in a different "
"translation unit."
msgstr ""
-#: c-family/c.opt:1212
+#: c-family/c.opt:1228
msgid "Scope of for-init-statement variables is local to the loop."
msgstr ""
-#: c-family/c.opt:1216
+#: c-family/c.opt:1232
msgid "Do not assume that standard C libraries and \"main\" exist."
msgstr ""
-#: c-family/c.opt:1220
+#: c-family/c.opt:1236
msgid "Recognize GNU-defined keywords."
msgstr ""
-#: c-family/c.opt:1224
+#: c-family/c.opt:1240
msgid "Generate code for GNU runtime environment."
msgstr ""
-#: c-family/c.opt:1228
+#: c-family/c.opt:1244
msgid "Use traditional GNU semantics for inline functions."
msgstr ""
-#: c-family/c.opt:1234
+#: c-family/c.opt:1250
msgid ""
"-fhandle-exceptions has been renamed -fexceptions (and is now on by default)"
msgstr ""
-#: c-family/c.opt:1241
+#: c-family/c.opt:1257
msgid "Assume normal C execution environment."
msgstr ""
-#: c-family/c.opt:1249
+#: c-family/c.opt:1265
msgid "Export functions even if they can be inlined."
msgstr ""
-#: c-family/c.opt:1253
+#: c-family/c.opt:1269
msgid "Emit implicit instantiations of inline templates."
msgstr ""
-#: c-family/c.opt:1257
+#: c-family/c.opt:1273
msgid "Emit implicit instantiations of templates."
msgstr ""
-#: c-family/c.opt:1261
+#: c-family/c.opt:1277
msgid "Inject friend functions into enclosing namespace."
msgstr ""
-#: c-family/c.opt:1265
+#: c-family/c.opt:1281
msgid "Don't emit dllexported inline functions unless needed."
msgstr ""
-#: c-family/c.opt:1272
+#: c-family/c.opt:1288
msgid ""
"Allow implicit conversions between vectors with differing numbers of "
"subparts and/or differing element types."
msgstr ""
-#: c-family/c.opt:1276
+#: c-family/c.opt:1292
msgid "Don't warn about uses of Microsoft extensions."
msgstr ""
-#: c-family/c.opt:1295
+#: c-family/c.opt:1311
msgid "Generate code for NeXT (Apple Mac OS X) runtime environment."
msgstr ""
-#: c-family/c.opt:1299
+#: c-family/c.opt:1315
msgid "Assume that receivers of Objective-C messages may be nil."
msgstr ""
-#: c-family/c.opt:1303
+#: c-family/c.opt:1319
msgid ""
"Allow access to instance variables as if they were local declarations within "
"instance method implementations."
msgstr ""
-#: c-family/c.opt:1307
+#: c-family/c.opt:1323
msgid ""
"-fvisibility=[private|protected|public|package]\tSet the default symbol "
"visibility."
msgstr ""
-#: c-family/c.opt:1310
+#: c-family/c.opt:1326
#, c-format
msgid "unrecognized ivar visibility value %qs"
msgstr ""
-#: c-family/c.opt:1332
+#: c-family/c.opt:1348
msgid ""
"Treat a throw() exception specification as noexcept to improve code size."
msgstr ""
-#: c-family/c.opt:1336
+#: c-family/c.opt:1352
msgid ""
"Specify which ABI to use for Objective-C family code and meta-data "
"generation."
msgstr ""
-#: c-family/c.opt:1342
+#: c-family/c.opt:1358
msgid ""
"Generate special Objective-C methods to initialize/destroy non-POD C++ "
"ivars, if needed."
msgstr ""
-#: c-family/c.opt:1346
+#: c-family/c.opt:1362
msgid "Allow fast jumps to the message dispatcher."
msgstr ""
-#: c-family/c.opt:1352
+#: c-family/c.opt:1368
msgid "Enable Objective-C exception and synchronization syntax."
msgstr ""
-#: c-family/c.opt:1356
+#: c-family/c.opt:1372
msgid "Enable garbage collection (GC) in Objective-C/Objective-C++ programs."
msgstr ""
-#: c-family/c.opt:1360
+#: c-family/c.opt:1376
msgid ""
"Enable inline checks for nil receivers with the NeXT runtime and ABI version "
"2."
msgstr ""
-#: c-family/c.opt:1365
+#: c-family/c.opt:1381
msgid "Enable Objective-C setjmp exception handling runtime."
msgstr ""
-#: c-family/c.opt:1369
+#: c-family/c.opt:1385
msgid "Conform to the Objective-C 1.0 language as implemented in GCC 4.0."
msgstr ""
-#: c-family/c.opt:1373
+#: c-family/c.opt:1389
msgid "Enable OpenACC."
msgstr ""
-#: c-family/c.opt:1377
+#: c-family/c.opt:1393
+msgid "Specify default OpenACC compute dimensions."
+msgstr ""
+
+#: c-family/c.opt:1397
msgid "Enable OpenMP (implies -frecursive in Fortran)."
msgstr ""
-#: c-family/c.opt:1381
+#: c-family/c.opt:1401
msgid "Enable OpenMP's SIMD directives."
msgstr ""
-#: c-family/c.opt:1385
+#: c-family/c.opt:1405
msgid "Recognize C++ keywords like \"compl\" and \"xor\"."
msgstr ""
-#: c-family/c.opt:1396
+#: c-family/c.opt:1416
msgid "Look for and use PCH files even when preprocessing."
msgstr ""
-#: c-family/c.opt:1400
+#: c-family/c.opt:1420
msgid "Downgrade conformance errors to warnings."
msgstr ""
-#: c-family/c.opt:1404
+#: c-family/c.opt:1424
msgid "Enable Plan 9 language extensions."
msgstr ""
-#: c-family/c.opt:1408
+#: c-family/c.opt:1428
msgid "Treat the input file as already preprocessed."
msgstr ""
-#: c-family/c.opt:1416
+#: c-family/c.opt:1436
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:1420
+#: c-family/c.opt:1440
msgid ""
"-fno-pretty-templates Do not pretty-print template specializations as the "
"template signature followed by the arguments."
msgstr ""
-#: c-family/c.opt:1424
+#: c-family/c.opt:1444
msgid ""
"Used in Fix-and-Continue mode to indicate that object files may be swapped "
"in at runtime."
msgstr ""
-#: c-family/c.opt:1428
+#: c-family/c.opt:1448
msgid "Enable automatic template instantiation."
msgstr ""
-#: c-family/c.opt:1432
+#: c-family/c.opt:1452
msgid "Generate run time type descriptor information."
msgstr ""
-#: c-family/c.opt:1436
-msgid "Use the same size for double as for float."
-msgstr ""
-
-#: c-family/c.opt:1440 ada/gcc-interface/lang.opt:77
+#: c-family/c.opt:1456 ada/gcc-interface/lang.opt:77
msgid "Use the narrowest integer type possible for enumeration types."
msgstr ""
-#: c-family/c.opt:1444
+#: c-family/c.opt:1460
msgid "Force the underlying type for \"wchar_t\" to be \"unsigned short\"."
msgstr ""
-#: c-family/c.opt:1448
+#: c-family/c.opt:1464
msgid "When \"signed\" or \"unsigned\" is not given make the bitfield signed."
msgstr ""
-#: c-family/c.opt:1452 ada/gcc-interface/lang.opt:81
+#: c-family/c.opt:1468 ada/gcc-interface/lang.opt:81
msgid "Make \"char\" signed by default."
msgstr ""
-#: c-family/c.opt:1456
+#: c-family/c.opt:1472
msgid "Enable C++14 sized deallocation support."
msgstr ""
-#: c-family/c.opt:1463
+#: c-family/c.opt:1479
msgid ""
"-fsso-struct=[big-endian|little-endian]\tSet the default scalar storage "
"order."
msgstr ""
-#: c-family/c.opt:1466
+#: c-family/c.opt:1482
#, c-format
msgid "unrecognized scalar storage order value %qs"
msgstr ""
-#: c-family/c.opt:1476
+#: c-family/c.opt:1492
msgid "Display statistics accumulated during compilation."
msgstr ""
-#: c-family/c.opt:1480
+#: c-family/c.opt:1496
msgid ""
"Assume that values of enumeration type are always within the minimum range "
"of that type."
msgstr ""
-#: c-family/c.opt:1487
+#: c-family/c.opt:1503
msgid "-ftabstop=<number>\tDistance between tab stops for column reporting."
msgstr ""
-#: c-family/c.opt:1491
+#: c-family/c.opt:1507
msgid ""
"Set the maximum number of template instantiation notes for a single warning "
"or error."
msgstr ""
-#: c-family/c.opt:1498
+#: c-family/c.opt:1514
msgid ""
"-ftemplate-depth=<number>\tSpecify maximum template instantiation depth."
msgstr ""
-#: c-family/c.opt:1505
+#: c-family/c.opt:1521
msgid ""
"-fno-threadsafe-statics\tDo not generate thread-safe code for initializing "
"local statics."
msgstr ""
-#: c-family/c.opt:1509
+#: c-family/c.opt:1525
msgid ""
"When \"signed\" or \"unsigned\" is not given make the bitfield unsigned."
msgstr ""
-#: c-family/c.opt:1513
+#: c-family/c.opt:1529
msgid "Make \"char\" unsigned by default."
msgstr ""
-#: c-family/c.opt:1517
+#: c-family/c.opt:1533
msgid "Use __cxa_atexit to register destructors."
msgstr ""
-#: c-family/c.opt:1521
+#: c-family/c.opt:1537
msgid "Use __cxa_get_exception_ptr in exception handling."
msgstr ""
-#: c-family/c.opt:1525
+#: c-family/c.opt:1541
msgid "Marks all inlined functions and methods as having hidden visibility."
msgstr ""
-#: c-family/c.opt:1529
+#: c-family/c.opt:1545
msgid "Changes visibility to match Microsoft Visual Studio by default."
msgstr ""
-#: c-family/c.opt:1541
+#: c-family/c.opt:1557
msgid "Emit common-like symbols as weak symbols."
msgstr ""
-#: c-family/c.opt:1545
+#: c-family/c.opt:1561
msgid ""
"-fwide-exec-charset=<cset>\tConvert all wide strings and character constants "
"to character set <cset>."
msgstr ""
-#: c-family/c.opt:1549
+#: c-family/c.opt:1565
msgid "Generate a #line directive pointing at the current working directory."
msgstr ""
-#: c-family/c.opt:1557
+#: c-family/c.opt:1573
msgid ""
"Generate lazy class lookup (via objc_getClass()) for use in Zero-Link mode."
msgstr ""
-#: c-family/c.opt:1561
+#: c-family/c.opt:1577
msgid "Dump declarations to a .decl file."
msgstr ""
-#: c-family/c.opt:1565
+#: c-family/c.opt:1581
msgid ""
"-femit-struct-debug-baseonly\tAggressive reduced debug info for structs."
msgstr ""
-#: c-family/c.opt:1569
+#: c-family/c.opt:1585
msgid ""
"-femit-struct-debug-reduced\tConservative reduced debug info for structs."
msgstr ""
-#: c-family/c.opt:1573
+#: c-family/c.opt:1589
msgid ""
"-femit-struct-debug-detailed=<spec-list>\tDetailed reduced debug info for "
"structs."
msgstr ""
-#: c-family/c.opt:1577
+#: c-family/c.opt:1593
msgid ""
"Interpret imaginary, fixed-point, or other gnu number suffix as the "
"corresponding"
msgstr ""
-#: c-family/c.opt:1582
+#: c-family/c.opt:1598
msgid "-idirafter <dir>\tAdd <dir> to the end of the system include path."
msgstr ""
-#: c-family/c.opt:1586
+#: c-family/c.opt:1602
msgid "-imacros <file>\tAccept definition of macros in <file>."
msgstr ""
-#: c-family/c.opt:1590
+#: c-family/c.opt:1606
msgid "-imultilib <dir>\tSet <dir> to be the multilib include subdirectory."
msgstr ""
-#: c-family/c.opt:1594
+#: c-family/c.opt:1610
msgid "-include <file>\tInclude the contents of <file> before other files."
msgstr ""
-#: c-family/c.opt:1598
+#: c-family/c.opt:1614
msgid "-iprefix <path>\tSpecify <path> as a prefix for next two options."
msgstr ""
-#: c-family/c.opt:1602
+#: c-family/c.opt:1618
msgid "-isysroot <dir>\tSet <dir> to be the system root directory."
msgstr ""
-#: c-family/c.opt:1606
+#: c-family/c.opt:1622
msgid "-isystem <dir>\tAdd <dir> to the start of the system include path."
msgstr ""
-#: c-family/c.opt:1610
+#: c-family/c.opt:1626
msgid "-iquote <dir>\tAdd <dir> to the end of the quote include path."
msgstr ""
-#: c-family/c.opt:1614
+#: c-family/c.opt:1630
msgid "-iwithprefix <dir>\tAdd <dir> to the end of the system include path."
msgstr ""
-#: c-family/c.opt:1618
+#: c-family/c.opt:1634
msgid ""
"-iwithprefixbefore <dir>\tAdd <dir> to the end of the main include path."
msgstr ""
-#: c-family/c.opt:1628
+#: c-family/c.opt:1644
msgid ""
"Do not search standard system include directories (those specified with -"
"isystem will still be used)."
msgstr ""
-#: c-family/c.opt:1632
+#: c-family/c.opt:1648
msgid "Do not search standard system include directories for C++."
msgstr ""
-#: c-family/c.opt:1644
+#: c-family/c.opt:1660
msgid "Generate C header of platform-specific features."
msgstr ""
-#: c-family/c.opt:1648
+#: c-family/c.opt:1664
msgid "Remap file names when including files."
msgstr ""
-#: c-family/c.opt:1652 c-family/c.opt:1656
+#: c-family/c.opt:1668 c-family/c.opt:1672
msgid ""
"Conform to the ISO 1998 C++ standard revised by the 2003 technical "
"corrigendum."
msgstr ""
-#: c-family/c.opt:1660
+#: c-family/c.opt:1676
msgid "Conform to the ISO 2011 C++ standard."
msgstr ""
-#: c-family/c.opt:1664
+#: c-family/c.opt:1680
msgid "Deprecated in favor of -std=c++11."
msgstr ""
-#: c-family/c.opt:1668
+#: c-family/c.opt:1684
msgid "Deprecated in favor of -std=c++14."
msgstr ""
-#: c-family/c.opt:1672
+#: c-family/c.opt:1688
msgid "Conform to the ISO 2014 C++ standard."
msgstr ""
-#: c-family/c.opt:1676
+#: c-family/c.opt:1692
msgid ""
"Conform to the ISO 2017(?) C++ draft standard (experimental and incomplete "
"support)."
msgstr ""
-#: c-family/c.opt:1683 c-family/c.opt:1780
+#: c-family/c.opt:1699 c-family/c.opt:1796
msgid "Conform to the ISO 2011 C standard."
msgstr ""
-#: c-family/c.opt:1687
+#: c-family/c.opt:1703
msgid "Deprecated in favor of -std=c11."
msgstr ""
-#: c-family/c.opt:1691 c-family/c.opt:1695 c-family/c.opt:1764
+#: c-family/c.opt:1707 c-family/c.opt:1711 c-family/c.opt:1780
msgid "Conform to the ISO 1990 C standard."
msgstr ""
-#: c-family/c.opt:1699 c-family/c.opt:1772
+#: c-family/c.opt:1715 c-family/c.opt:1788
msgid "Conform to the ISO 1999 C standard."
msgstr ""
-#: c-family/c.opt:1703
+#: c-family/c.opt:1719
msgid "Deprecated in favor of -std=c99."
msgstr ""
-#: c-family/c.opt:1707 c-family/c.opt:1712
+#: c-family/c.opt:1723 c-family/c.opt:1728
msgid "Conform to the ISO 1998 C++ standard revised by the 2003 technical"
msgstr ""
-#: c-family/c.opt:1717
+#: c-family/c.opt:1733
msgid "Conform to the ISO 2011 C++ standard with GNU extensions."
msgstr ""
-#: c-family/c.opt:1721
+#: c-family/c.opt:1737
msgid "Deprecated in favor of -std=gnu++11."
msgstr ""
-#: c-family/c.opt:1725
+#: c-family/c.opt:1741
msgid "Deprecated in favor of -std=gnu++14."
msgstr ""
-#: c-family/c.opt:1729
+#: c-family/c.opt:1745
msgid "Conform to the ISO 2014 C++ standard with GNU extensions."
msgstr ""
-#: c-family/c.opt:1733
+#: c-family/c.opt:1749
msgid ""
"Conform to the ISO 201z(7?) C++ draft standard with GNU extensions "
"(experimental and incomplete support)."
msgstr ""
-#: c-family/c.opt:1740
+#: c-family/c.opt:1756
msgid "Conform to the ISO 2011 C standard with GNU extensions."
msgstr ""
-#: c-family/c.opt:1744
+#: c-family/c.opt:1760
msgid "Deprecated in favor of -std=gnu11."
msgstr ""
-#: c-family/c.opt:1748 c-family/c.opt:1752
+#: c-family/c.opt:1764 c-family/c.opt:1768
msgid "Conform to the ISO 1990 C standard with GNU extensions."
msgstr ""
-#: c-family/c.opt:1756
+#: c-family/c.opt:1772
msgid "Conform to the ISO 1999 C standard with GNU extensions."
msgstr ""
-#: c-family/c.opt:1760
+#: c-family/c.opt:1776
msgid "Deprecated in favor of -std=gnu99."
msgstr ""
-#: c-family/c.opt:1768
+#: c-family/c.opt:1784
msgid "Conform to the ISO 1990 C standard as amended in 1994."
msgstr ""
-#: c-family/c.opt:1776
+#: c-family/c.opt:1792
msgid "Deprecated in favor of -std=iso9899:1999."
msgstr ""
-#: c-family/c.opt:1787
+#: c-family/c.opt:1803
msgid "Enable traditional preprocessing."
msgstr ""
-#: c-family/c.opt:1791
+#: c-family/c.opt:1807
msgid "-trigraphs\tSupport ISO C trigraphs."
msgstr ""
-#: c-family/c.opt:1795
+#: c-family/c.opt:1811
msgid "Do not predefine system-specific and GCC-specific macros."
msgstr ""
@@ -8428,7 +8448,7 @@ msgid "PC relative literal loads."
msgstr ""
#: config/aarch64/aarch64.opt:154
-msgid "When calculating a sqrt approximation, run fewer steps."
+msgid "When calculating the reciprocal square root approximation,"
msgstr ""
#: config/linux.opt:24
@@ -8793,6 +8813,10 @@ msgstr ""
msgid "Use LRA instead of reload."
msgstr ""
+#: config/ft32/ft32.opt:31
+msgid "Avoid use of the DIV and MOD instructions"
+msgstr ""
+
#: config/h8300/h8300.opt:23
msgid "Generate H8S code."
msgstr ""
@@ -10205,11 +10229,11 @@ msgstr ""
msgid "Known ARM CPUs (for use with the -mcpu= and -mtune= options):"
msgstr ""
-#: config/arm/arm-tables.opt:335
+#: config/arm/arm-tables.opt:341
msgid "Known ARM architectures (for use with the -march= option):"
msgstr ""
-#: config/arm/arm-tables.opt:432
+#: config/arm/arm-tables.opt:438
msgid "Known ARM FPUs (for use with the -mfpu= option):"
msgstr ""
@@ -13460,6 +13484,10 @@ msgstr ""
msgid "Enable double load/store instructions for ARC HS."
msgstr ""
+#: config/arc/arc.opt:419
+msgid "Specify the name of the target floating point configuration."
+msgstr ""
+
#: java/lang.opt:122
msgid "Warn if deprecated empty statements are found."
msgstr ""
@@ -13725,1831 +13753,1839 @@ msgid ""
msgstr ""
#: common.opt:621
+msgid "Warn if comparing pointer parameter with nonnull attribute with NULL."
+msgstr ""
+
+#: common.opt:625
msgid ""
"Warn if dereferencing a NULL pointer may lead to erroneous or undefined "
"behavior."
msgstr ""
-#: common.opt:625
+#: common.opt:629
msgid "Warn if the loop cannot be optimized due to nontrivial assumptions."
msgstr ""
-#: common.opt:632
+#: common.opt:636
msgid ""
"Warn about some C++ One Definition Rule violations during link time "
"optimization."
msgstr ""
-#: common.opt:636
+#: common.opt:640
msgid "Warn about overflow in arithmetic expressions."
msgstr ""
-#: common.opt:640
+#: common.opt:644
msgid ""
"During link time optimization warn about mismatched types of global "
"declarations."
msgstr ""
-#: common.opt:644
+#: common.opt:648
msgid "Warn when the packed attribute has no effect on struct layout."
msgstr ""
-#: common.opt:648
+#: common.opt:652
msgid "Warn when padding is required to align structure members."
msgstr ""
-#: common.opt:652
+#: common.opt:656
msgid "Issue warnings needed for strict compliance to the standard."
msgstr ""
-#: common.opt:656
+#: common.opt:660
msgid ""
"Warn about returning a pointer/reference to a local or temporary variable."
msgstr ""
-#: common.opt:660
+#: common.opt:664
msgid "Warn when one local variable shadows another."
msgstr ""
-#: common.opt:664
+#: common.opt:668
msgid "Warn when not issuing stack smashing protection for some reason."
msgstr ""
-#: common.opt:668
+#: common.opt:672
msgid "Warn if stack usage might be larger than specified amount."
msgstr ""
-#: common.opt:672 common.opt:676
+#: common.opt:676 common.opt:680
msgid "Warn about code which might break strict aliasing rules."
msgstr ""
-#: common.opt:680 common.opt:684
+#: common.opt:684 common.opt:688
msgid "Warn about optimizations that assume that signed overflow is undefined."
msgstr ""
-#: common.opt:688
+#: common.opt:692
msgid ""
"Warn about functions which might be candidates for __attribute__((const))."
msgstr ""
-#: common.opt:692
+#: common.opt:696
msgid ""
"Warn about functions which might be candidates for __attribute__((pure))."
msgstr ""
-#: common.opt:696
+#: common.opt:700
msgid ""
"Warn about functions which might be candidates for __attribute__((noreturn))."
msgstr ""
-#: common.opt:700
+#: common.opt:704
msgid ""
"Warn about C++ polymorphic types where adding final keyword would improve "
"code quality."
msgstr ""
-#: common.opt:704
+#: common.opt:708
msgid ""
"Warn about C++ virtual methods where adding final keyword would improve code "
"quality."
msgstr ""
-#: common.opt:708
+#: common.opt:712
msgid "Do not suppress warnings from system headers."
msgstr ""
-#: common.opt:712
+#: common.opt:716
msgid "Warn whenever a trampoline is generated."
msgstr ""
-#: common.opt:716
+#: common.opt:720
msgid ""
"Warn if a comparison is always true or always false due to the limited range "
"of the data type."
msgstr ""
-#: common.opt:720
+#: common.opt:724
msgid "Warn about uninitialized automatic variables."
msgstr ""
-#: common.opt:724
+#: common.opt:728
msgid "Warn about maybe uninitialized automatic variables."
msgstr ""
-#: common.opt:732
+#: common.opt:736
msgid "Enable all -Wunused- warnings."
msgstr ""
-#: common.opt:736
+#: common.opt:740
msgid "Warn when a function parameter is only set, otherwise unused."
msgstr ""
-#: common.opt:740
+#: common.opt:744
msgid "Warn when a variable is only set, otherwise unused."
msgstr ""
-#: common.opt:744
+#: common.opt:748
msgid "Warn when a function is unused."
msgstr ""
-#: common.opt:748
+#: common.opt:752
msgid "Warn when a label is unused."
msgstr ""
-#: common.opt:752
+#: common.opt:756
msgid "Warn when a function parameter is unused."
msgstr ""
-#: common.opt:756
+#: common.opt:760
msgid "Warn when an expression value is unused."
msgstr ""
-#: common.opt:760
+#: common.opt:764
msgid "Warn when a variable is unused."
msgstr ""
-#: common.opt:764
+#: common.opt:768
msgid "Warn in case profiles in -fprofile-use do not match."
msgstr ""
-#: common.opt:768
+#: common.opt:772
msgid "Warn when a vector operation is compiled outside the SIMD."
msgstr ""
-#: common.opt:784
+#: common.opt:788
msgid "-aux-info <file>\tEmit declaration information into <file>."
msgstr ""
-#: common.opt:803
+#: common.opt:807
msgid "-d<letters>\tEnable dumps from specific passes of the compiler."
msgstr ""
-#: common.opt:807
+#: common.opt:811
msgid "-dumpbase <file>\tSet the file basename to be used for dumps."
msgstr ""
-#: common.opt:811
+#: common.opt:815
msgid "-dumpdir <dir>\tSet the directory name to be used for dumps."
msgstr ""
-#: common.opt:880
+#: common.opt:884
msgid "The version of the C++ ABI in use."
msgstr ""
-#: common.opt:884
+#: common.opt:888
msgid "Aggressively optimize loops using language constraints."
msgstr ""
-#: common.opt:888
+#: common.opt:892
msgid "Align the start of functions."
msgstr ""
-#: common.opt:895
+#: common.opt:899
msgid "Align labels which are only reached by jumping."
msgstr ""
-#: common.opt:902
+#: common.opt:906
msgid "Align all labels."
msgstr ""
-#: common.opt:909
+#: common.opt:913
msgid "Align the start of loops."
msgstr ""
-#: common.opt:932
+#: common.opt:936
msgid "Select what to sanitize."
msgstr ""
-#: common.opt:936
+#: common.opt:940
msgid "-fasan-shadow-offset=<number>\tUse custom shadow memory offset."
msgstr ""
-#: common.opt:940
+#: common.opt:944
msgid "-fsanitize-sections=<sec1,sec2,...>\tSanitize global variables"
msgstr ""
-#: common.opt:945
+#: common.opt:949
msgid "After diagnosing undefined behavior attempt to continue execution."
msgstr ""
-#: common.opt:949
+#: common.opt:953
msgid "This switch is deprecated; use -fsanitize-recover= instead."
msgstr ""
-#: common.opt:953
+#: common.opt:957
msgid ""
"Use trap instead of a library function for undefined behavior sanitization."
msgstr ""
-#: common.opt:957
+#: common.opt:961
msgid "Generate unwind tables that are exact at each instruction boundary."
msgstr ""
-#: common.opt:961
+#: common.opt:965
msgid "Generate auto-inc/dec instructions."
msgstr ""
-#: common.opt:965
+#: common.opt:969
msgid "Use sample profile information for call graph node weights. The default"
msgstr ""
-#: common.opt:970
+#: common.opt:974
msgid "Use sample profile information for call graph node weights. The profile"
msgstr ""
-#: common.opt:979
+#: common.opt:983
msgid "Generate code to check bounds before indexing arrays."
msgstr ""
-#: common.opt:983
+#: common.opt:987
msgid "Replace add, compare, branch with branch on count register."
msgstr ""
-#: common.opt:987
+#: common.opt:991
msgid "Use profiling information for branch probabilities."
msgstr ""
-#: common.opt:991
+#: common.opt:995
msgid ""
"Perform branch target load optimization before prologue / epilogue threading."
msgstr ""
-#: common.opt:995
+#: common.opt:999
msgid ""
"Perform branch target load optimization after prologue / epilogue threading."
msgstr ""
-#: common.opt:999
+#: common.opt:1003
msgid ""
"Restrict target load migration not to re-use registers in any basic block."
msgstr ""
-#: common.opt:1003
+#: common.opt:1007
msgid ""
"-fcall-saved-<register>\tMark <register> as being preserved across functions."
msgstr ""
-#: common.opt:1007
+#: common.opt:1011
msgid ""
"-fcall-used-<register>\tMark <register> as being corrupted by function calls."
msgstr ""
-#: common.opt:1014
+#: common.opt:1018
msgid "Save registers around function calls."
msgstr ""
-#: common.opt:1018
+#: common.opt:1022
msgid "This switch is deprecated; do not use."
msgstr ""
-#: common.opt:1022
+#: common.opt:1026
msgid "Check the return value of new in C++."
msgstr ""
-#: common.opt:1026
+#: common.opt:1030
msgid "Perform internal consistency checkings."
msgstr ""
-#: common.opt:1030
+#: common.opt:1034
msgid ""
"Looks for opportunities to reduce stack adjustments and stack references."
msgstr ""
-#: common.opt:1034
+#: common.opt:1038
msgid "Do not put uninitialized globals in the common section."
msgstr ""
-#: common.opt:1042
+#: common.opt:1046
msgid ""
"-fcompare-debug[=<opts>]\tCompile with and without e.g. -gtoggle, and "
"compare the final-insns dump."
msgstr ""
-#: common.opt:1046
+#: common.opt:1050
msgid "Run only the second compilation of -fcompare-debug."
msgstr ""
-#: common.opt:1050
+#: common.opt:1054
msgid "Perform comparison elimination after register allocation has finished."
msgstr ""
-#: common.opt:1054
+#: common.opt:1058
msgid "Do not perform optimizations increasing noticeably stack usage."
msgstr ""
-#: common.opt:1058
+#: common.opt:1062
msgid "Perform a register copy-propagation optimization pass."
msgstr ""
-#: common.opt:1062
+#: common.opt:1066
msgid "Perform cross-jumping optimization."
msgstr ""
-#: common.opt:1066
+#: common.opt:1070
msgid "When running CSE, follow jumps to their targets."
msgstr ""
-#: common.opt:1074
+#: common.opt:1078
msgid "Omit range reduction step when performing complex division."
msgstr ""
-#: common.opt:1078
+#: common.opt:1082
msgid "Complex multiplication and division follow Fortran rules."
msgstr ""
-#: common.opt:1082
+#: common.opt:1086
msgid "Place data items into their own section."
msgstr ""
-#: common.opt:1086
+#: common.opt:1090
msgid "List all available debugging counters with their limits and counts."
msgstr ""
-#: common.opt:1090
+#: common.opt:1094
msgid ""
"-fdbg-cnt=<counter>:<limit>[,<counter>:<limit>,...]\tSet the debug counter "
"limit."
msgstr ""
-#: common.opt:1094
+#: common.opt:1098
msgid "Map one directory name to another in debug information."
msgstr ""
-#: common.opt:1098
+#: common.opt:1102
msgid "Output .debug_types section when using DWARF v4 debuginfo."
msgstr ""
-#: common.opt:1104
+#: common.opt:1108
msgid "Defer popping functions args from stack until later."
msgstr ""
-#: common.opt:1108
+#: common.opt:1112
msgid "Attempt to fill delay slots of branch instructions."
msgstr ""
-#: common.opt:1112
+#: common.opt:1116
msgid "Delete dead instructions that may throw exceptions."
msgstr ""
-#: common.opt:1116
+#: common.opt:1120
msgid "Delete useless null pointer checks."
msgstr ""
-#: common.opt:1120
+#: common.opt:1124
msgid ""
"Stream extra data to support more aggressive devirtualization in LTO local "
"transformation mode."
msgstr ""
-#: common.opt:1124
+#: common.opt:1128
msgid "Perform speculative devirtualization."
msgstr ""
-#: common.opt:1128
+#: common.opt:1132
msgid "Try to convert virtual calls to direct ones."
msgstr ""
-#: common.opt:1132
+#: common.opt:1136
msgid ""
"-fdiagnostics-show-location=[once|every-line]\tHow often to emit source "
"location at the beginning of line-wrapped diagnostics."
msgstr ""
-#: common.opt:1149
+#: common.opt:1153
msgid "Show the source line with a caret indicating the column."
msgstr ""
-#: common.opt:1157
+#: common.opt:1161
msgid "-fdiagnostics-color=[never|always|auto]\tColorize diagnostics."
msgstr ""
-#: common.opt:1177
+#: common.opt:1181
msgid ""
"Amend appropriate diagnostic messages with the command line option that "
"controls them."
msgstr ""
-#: common.opt:1181
+#: common.opt:1185
msgid ""
"-fdisable-[tree|rtl|ipa]-<pass>=range1+range2 disables an optimization pass."
msgstr ""
-#: common.opt:1185
+#: common.opt:1189
msgid ""
"-fenable-[tree|rtl|ipa]-<pass>=range1+range2 enables an optimization pass."
msgstr ""
-#: common.opt:1189
+#: common.opt:1193
msgid "-fdump-<type>\tDump various compiler internals to a file."
msgstr ""
-#: common.opt:1196
+#: common.opt:1200
msgid ""
"-fdump-final-insns=filename\tDump to filename the insns at the end of "
"translation."
msgstr ""
-#: common.opt:1200
+#: common.opt:1204
msgid "-fdump-go-spec=filename\tWrite all declarations to file as Go code."
msgstr ""
-#: common.opt:1204
+#: common.opt:1208
msgid "Suppress output of addresses in debugging dumps."
msgstr ""
-#: common.opt:1208
+#: common.opt:1212
msgid "Collect and dump debug information into temporary file if ICE in C/C++"
msgstr ""
-#: common.opt:1213
+#: common.opt:1217
msgid ""
"Dump detailed information on GCC's internal representation of source code "
"locations."
msgstr ""
-#: common.opt:1217
+#: common.opt:1221
msgid "Dump optimization passes."
msgstr ""
-#: common.opt:1221
+#: common.opt:1225
msgid ""
"Suppress output of instruction numbers, line number notes and addresses in "
"debugging dumps."
msgstr ""
-#: common.opt:1225
+#: common.opt:1229
msgid "Suppress output of previous and next insn numbers in debugging dumps."
msgstr ""
-#: common.opt:1229
+#: common.opt:1233
msgid "Enable CFI tables via GAS assembler directives."
msgstr ""
-#: common.opt:1233
+#: common.opt:1237
msgid "Perform early inlining."
msgstr ""
-#: common.opt:1237
+#: common.opt:1241
msgid "Perform DWARF duplicate elimination."
msgstr ""
-#: common.opt:1241
+#: common.opt:1245
msgid "Perform interprocedural reduction of aggregates."
msgstr ""
-#: common.opt:1245
+#: common.opt:1249
msgid "Perform unused symbol elimination in debug info."
msgstr ""
-#: common.opt:1249
+#: common.opt:1253
msgid "Perform unused type elimination in debug info."
msgstr ""
-#: common.opt:1253
+#: common.opt:1257
msgid "Do not suppress C++ class debug information."
msgstr ""
-#: common.opt:1257
+#: common.opt:1261
msgid "Enable exception handling."
msgstr ""
-#: common.opt:1261
+#: common.opt:1265
msgid "Perform a number of minor, expensive optimizations."
msgstr ""
-#: common.opt:1265
+#: common.opt:1269
msgid ""
"-fexcess-precision=[fast|standard]\tSpecify handling of excess floating-"
"point precision."
msgstr ""
-#: common.opt:1268
+#: common.opt:1272
#, c-format
msgid "unknown excess precision style %qs"
msgstr ""
-#: common.opt:1281
+#: common.opt:1285
msgid ""
"Output lto objects containing both the intermediate language and binary "
"output."
msgstr ""
-#: common.opt:1285
+#: common.opt:1289
msgid "Assume no NaNs or infinities are generated."
msgstr ""
-#: common.opt:1289
+#: common.opt:1293
msgid ""
"-ffixed-<register>\tMark <register> as being unavailable to the compiler."
msgstr ""
-#: common.opt:1293
+#: common.opt:1297
msgid "Don't allocate floats and doubles in extended-precision registers."
msgstr ""
-#: common.opt:1301
+#: common.opt:1305
msgid "Perform a forward propagation pass on RTL."
msgstr ""
-#: common.opt:1305
+#: common.opt:1309
msgid ""
"-ffp-contract=[off|on|fast] Perform floating-point expression contraction."
msgstr ""
-#: common.opt:1308
+#: common.opt:1312
#, c-format
msgid "unknown floating point contraction style %qs"
msgstr ""
-#: common.opt:1325
+#: common.opt:1329
msgid "Allow function addresses to be held in registers."
msgstr ""
-#: common.opt:1329
+#: common.opt:1333
msgid "Place each function into its own section."
msgstr ""
-#: common.opt:1333
+#: common.opt:1337
msgid "Perform global common subexpression elimination."
msgstr ""
-#: common.opt:1337
+#: common.opt:1341
msgid ""
"Perform enhanced load motion during global common subexpression elimination."
msgstr ""
-#: common.opt:1341
+#: common.opt:1345
msgid "Perform store motion after global common subexpression elimination."
msgstr ""
-#: common.opt:1345
+#: common.opt:1349
msgid ""
"Perform redundant load after store elimination in global common subexpression"
msgstr ""
-#: common.opt:1350
+#: common.opt:1354
msgid ""
"Perform global common subexpression elimination after register allocation has"
msgstr ""
-#: common.opt:1367
+#: common.opt:1371
msgid ""
"-fgnat-encodings=[all|gdb|minimal]\tSelect the balance between GNAT "
"encodings and standard DWARF emitted in the debug information"
msgstr ""
-#: common.opt:1372
+#: common.opt:1376
msgid "Enable in and out of Graphite representation."
msgstr ""
-#: common.opt:1376
+#: common.opt:1380
msgid "Enable Graphite Identity transformation."
msgstr ""
-#: common.opt:1380
+#: common.opt:1384
msgid "Enable hoisting adjacent loads to encourage generating conditional move"
msgstr ""
-#: common.opt:1389
+#: common.opt:1393
msgid "Mark all loops as parallel."
msgstr ""
-#: common.opt:1393 common.opt:1397 common.opt:1401 common.opt:1405
-#: common.opt:2388
+#: common.opt:1397 common.opt:1401 common.opt:1405 common.opt:1409
+#: common.opt:2395
msgid "Enable loop nest transforms. Same as -floop-nest-optimize."
msgstr ""
-#: common.opt:1409
+#: common.opt:1413
msgid "Enable support for GNU transactional memory."
msgstr ""
-#: common.opt:1413
+#: common.opt:1417
msgid "Use STB_GNU_UNIQUE if supported by the assembler."
msgstr ""
-#: common.opt:1421
+#: common.opt:1425
msgid "Enable the loop nest optimizer."
msgstr ""
-#: common.opt:1425
+#: common.opt:1429
msgid "Force bitfield accesses to match their type width."
msgstr ""
-#: common.opt:1429
+#: common.opt:1433
msgid "Enable guessing of branch probabilities."
msgstr ""
-#: common.opt:1437
+#: common.opt:1441
msgid "Process #ident directives."
msgstr ""
-#: common.opt:1441
+#: common.opt:1445
msgid "Perform conversion of conditional jumps to branchless equivalents."
msgstr ""
-#: common.opt:1445
+#: common.opt:1449
msgid "Perform conversion of conditional jumps to conditional execution."
msgstr ""
-#: common.opt:1449
+#: common.opt:1453
msgid ""
"-fstack-reuse=[all|named_vars|none] Set stack reuse level for local "
"variables."
msgstr ""
-#: common.opt:1452
+#: common.opt:1456
#, c-format
msgid "unknown Stack Reuse Level %qs"
msgstr ""
-#: common.opt:1465
+#: common.opt:1469
msgid "Convert conditional jumps in innermost loops to branchless equivalents."
msgstr ""
-#: common.opt:1469
+#: common.opt:1473
msgid "Also if-convert conditional jumps containing memory writes."
msgstr ""
-#: common.opt:1477
+#: common.opt:1481
msgid "Do not generate .size directives."
msgstr ""
-#: common.opt:1481
+#: common.opt:1485
msgid "Perform indirect inlining."
msgstr ""
-#: common.opt:1487
+#: common.opt:1491
msgid ""
"Enable inlining of function declared \"inline\", disabling disables all "
"inlining."
msgstr ""
-#: common.opt:1491
+#: common.opt:1495
msgid ""
"Integrate functions into their callers when code size is known not to grow."
msgstr ""
-#: common.opt:1495
+#: common.opt:1499
msgid ""
"Integrate functions not declared \"inline\" into their callers when "
"profitable."
msgstr ""
-#: common.opt:1499
+#: common.opt:1503
msgid "Integrate functions only required by their single caller."
msgstr ""
-#: common.opt:1506
+#: common.opt:1510
msgid ""
"-finline-limit=<number>\tLimit the size of inlined functions to <number>."
msgstr ""
-#: common.opt:1510
+#: common.opt:1514
msgid ""
"Inline __atomic operations when a lock free instruction sequence is "
"available."
msgstr ""
-#: common.opt:1514
+#: common.opt:1518
msgid "Instrument function entry and exit with profiling calls."
msgstr ""
-#: common.opt:1518
+#: common.opt:1522
msgid ""
"-finstrument-functions-exclude-function-list=name,... Do not instrument "
"listed functions."
msgstr ""
-#: common.opt:1522
+#: common.opt:1526
msgid ""
"-finstrument-functions-exclude-file-list=filename,... Do not instrument "
"functions listed in files."
msgstr ""
-#: common.opt:1526
+#: common.opt:1530
msgid "Perform interprocedural constant propagation."
msgstr ""
-#: common.opt:1530
+#: common.opt:1534
msgid "Perform cloning to make Interprocedural constant propagation stronger."
msgstr ""
-#: common.opt:1534
+#: common.opt:1538
msgid ""
"Perform alignment discovery and propagation to make Interprocedural constant "
"propagation stronger."
msgstr ""
-#: common.opt:1538
+#: common.opt:1542
msgid "Perform interprocedural profile propagation."
msgstr ""
-#: common.opt:1542
+#: common.opt:1546
msgid "Perform interprocedural points-to analysis."
msgstr ""
-#: common.opt:1546
+#: common.opt:1550
msgid "Discover pure and const functions."
msgstr ""
-#: common.opt:1550
+#: common.opt:1554
msgid "Perform Identical Code Folding for functions and read-only variables."
msgstr ""
-#: common.opt:1554
+#: common.opt:1558
msgid "Perform Identical Code Folding for functions."
msgstr ""
-#: common.opt:1558
+#: common.opt:1562
msgid "Perform Identical Code Folding for variables."
msgstr ""
-#: common.opt:1562
+#: common.opt:1566
msgid "Discover readonly and non addressable static variables."
msgstr ""
-#: common.opt:1574
+#: common.opt:1578
msgid "-fira-algorithm=[CB|priority] Set the used IRA algorithm."
msgstr ""
-#: common.opt:1577
+#: common.opt:1581
#, c-format
msgid "unknown IRA algorithm %qs"
msgstr ""
-#: common.opt:1587
+#: common.opt:1591
msgid "-fira-region=[one|all|mixed] Set regions for IRA."
msgstr ""
-#: common.opt:1590
+#: common.opt:1594
#, c-format
msgid "unknown IRA region %qs"
msgstr ""
-#: common.opt:1603 common.opt:1608
+#: common.opt:1607 common.opt:1612
msgid "Use IRA based register pressure calculation"
msgstr ""
-#: common.opt:1613
+#: common.opt:1617
msgid "Share slots for saving different hard registers."
msgstr ""
-#: common.opt:1617
+#: common.opt:1621
msgid "Share stack slots for spilled pseudo-registers."
msgstr ""
-#: common.opt:1621
+#: common.opt:1625
msgid "-fira-verbose=<number>\tControl IRA's level of diagnostic messages."
msgstr ""
-#: common.opt:1625
+#: common.opt:1629
msgid "Optimize induction variables on trees."
msgstr ""
-#: common.opt:1629
+#: common.opt:1633
msgid "Use jump tables for sufficiently large switch statements."
msgstr ""
-#: common.opt:1633
+#: common.opt:1637
msgid "Generate code for functions even if they are fully inlined."
msgstr ""
-#: common.opt:1637
+#: common.opt:1641
msgid "Generate code for static functions even if they are never called."
msgstr ""
-#: common.opt:1641
+#: common.opt:1645
msgid "Emit static const variables even if they are not used."
msgstr ""
-#: common.opt:1645
+#: common.opt:1649
msgid "Give external symbols a leading underscore."
msgstr ""
-#: common.opt:1653
+#: common.opt:1657
msgid "Do CFG-sensitive rematerialization in LRA."
msgstr ""
-#: common.opt:1657
+#: common.opt:1661
msgid "Enable link-time optimization."
msgstr ""
-#: common.opt:1661
+#: common.opt:1665
msgid "Link-time optimization with number of parallel jobs or jobserver."
msgstr ""
-#: common.opt:1664
+#: common.opt:1668
#, c-format
msgid "unknown LTO partitioning model %qs"
msgstr ""
-#: common.opt:1683
+#: common.opt:1687
msgid "Specify the algorithm to partition symbols and vars at linktime."
msgstr ""
-#: common.opt:1688
+#: common.opt:1692
msgid ""
"-flto-compression-level=<number>\tUse zlib compression level <number> for IL."
msgstr ""
-#: common.opt:1692
+#: common.opt:1696
msgid "Merge C++ types using One Definition Rule."
msgstr ""
-#: common.opt:1696
+#: common.opt:1700
msgid "Report various link-time optimization statistics."
msgstr ""
-#: common.opt:1700
+#: common.opt:1704
msgid "Report various link-time optimization statistics for WPA only."
msgstr ""
-#: common.opt:1704
+#: common.opt:1708
msgid "Set errno after built-in math functions."
msgstr ""
-#: common.opt:1708
+#: common.opt:1712
msgid "-fmax-errors=<number>\tMaximum number of errors to report."
msgstr ""
-#: common.opt:1712
+#: common.opt:1716
msgid "Report on permanent memory allocation."
msgstr ""
-#: common.opt:1716
+#: common.opt:1720
msgid "Report on permanent memory allocation in WPA only."
msgstr ""
-#: common.opt:1723
+#: common.opt:1727
msgid "Attempt to merge identical constants and constant variables."
msgstr ""
-#: common.opt:1727
+#: common.opt:1731
msgid "Attempt to merge identical constants across compilation units."
msgstr ""
-#: common.opt:1731
+#: common.opt:1735
msgid "Attempt to merge identical debug strings across compilation units."
msgstr ""
-#: common.opt:1735
+#: common.opt:1739
msgid ""
"-fmessage-length=<number>\tLimit diagnostics to <number> characters per "
"line. 0 suppresses line-wrapping."
msgstr ""
-#: common.opt:1739
+#: common.opt:1743
msgid "Perform SMS based modulo scheduling before the first scheduling pass."
msgstr ""
-#: common.opt:1743
+#: common.opt:1747
msgid "Perform SMS based modulo scheduling with register moves allowed."
msgstr ""
-#: common.opt:1747
+#: common.opt:1751
msgid "Move loop invariant computations out of loops."
msgstr ""
-#: common.opt:1751
+#: common.opt:1755
msgid "Use the RTL dead code elimination pass."
msgstr ""
-#: common.opt:1755
+#: common.opt:1759
msgid "Use the RTL dead store elimination pass."
msgstr ""
-#: common.opt:1759
+#: common.opt:1763
msgid ""
"Enable/Disable the traditional scheduling in loops that already passed "
"modulo scheduling."
msgstr ""
-#: common.opt:1763
+#: common.opt:1767
msgid "Support synchronous non-call exceptions."
msgstr ""
-#: common.opt:1766
+#: common.opt:1770
#, c-format
msgid "options or targets missing after %qs"
msgstr ""
-#: common.opt:1767
+#: common.opt:1771
msgid ""
"-foffload=<targets>=<options> Specify offloading targets and options for "
"them."
msgstr ""
-#: common.opt:1771
+#: common.opt:1775
msgid ""
"-foffload-abi=[lp64|ilp32] Set the ABI to use in an offload compiler."
msgstr ""
-#: common.opt:1774
+#: common.opt:1778
#, c-format
msgid "unknown offload ABI %qs"
msgstr ""
-#: common.opt:1784
+#: common.opt:1788
msgid "When possible do not generate stack frames."
msgstr ""
-#: common.opt:1788
+#: common.opt:1792
msgid "Enable all optimization info dumps on stderr."
msgstr ""
-#: common.opt:1792
+#: common.opt:1796
msgid "-fopt-info[-<type>=filename]\tDump compiler optimization details."
msgstr ""
-#: common.opt:1800
+#: common.opt:1804
msgid "Optimize sibling and tail recursive calls."
msgstr ""
-#: common.opt:1804
+#: common.opt:1808
msgid "Perform partial inlining."
msgstr ""
-#: common.opt:1808 common.opt:1812
+#: common.opt:1812 common.opt:1816
msgid "Report on memory allocation before interprocedural optimization."
msgstr ""
-#: common.opt:1816
+#: common.opt:1820
msgid "Pack structure members together without holes."
msgstr ""
-#: common.opt:1820
+#: common.opt:1824
msgid "-fpack-struct=<number>\tSet initial maximum structure member alignment."
msgstr ""
-#: common.opt:1824
+#: common.opt:1828
msgid "Return small aggregates in memory, not registers."
msgstr ""
-#: common.opt:1828
+#: common.opt:1832
msgid "Perform loop peeling."
msgstr ""
-#: common.opt:1832
+#: common.opt:1836
msgid "Enable machine specific peephole optimizations."
msgstr ""
-#: common.opt:1836
+#: common.opt:1840
msgid "Enable an RTL peephole pass before sched2."
msgstr ""
-#: common.opt:1840
+#: common.opt:1844
msgid "Generate position-independent code if possible (large mode)."
msgstr ""
-#: common.opt:1844
+#: common.opt:1848
msgid ""
"Generate position-independent code for executables if possible (large mode)."
msgstr ""
-#: common.opt:1848
+#: common.opt:1852
msgid "Generate position-independent code if possible (small mode)."
msgstr ""
-#: common.opt:1852
+#: common.opt:1856
msgid ""
"Generate position-independent code for executables if possible (small mode)."
msgstr ""
-#: common.opt:1856
+#: common.opt:1860
msgid ""
"Use PLT for PIC calls (-fno-plt: load the address from GOT at call site)."
msgstr ""
-#: common.opt:1860
+#: common.opt:1864
msgid "Specify a plugin to load."
msgstr ""
-#: common.opt:1864
+#: common.opt:1868
msgid ""
"-fplugin-arg-<name>-<key>[=<value>]\tSpecify argument <key>=<value> for "
"plugin <name>."
msgstr ""
-#: common.opt:1868
+#: common.opt:1872
msgid "Run predictive commoning optimization."
msgstr ""
-#: common.opt:1872
+#: common.opt:1876
msgid "Generate prefetch instructions, if available, for arrays in loops."
msgstr ""
-#: common.opt:1876
+#: common.opt:1880
msgid "Enable basic program profiling code."
msgstr ""
-#: common.opt:1880
+#: common.opt:1884
msgid "Insert arc-based program profiling code."
msgstr ""
-#: common.opt:1884
+#: common.opt:1888
msgid "Set the top-level directory for storing the profile data."
msgstr ""
-#: common.opt:1889
+#: common.opt:1893
msgid "Enable correction of flow inconsistent profile data input."
msgstr ""
-#: common.opt:1893
+#: common.opt:1897
msgid ""
"Enable common options for generating profile info for profile feedback "
"directed optimizations."
msgstr ""
-#: common.opt:1897
+#: common.opt:1901
msgid ""
"Enable common options for generating profile info for profile feedback "
"directed optimizations, and set -fprofile-dir=."
msgstr ""
-#: common.opt:1901
+#: common.opt:1905
msgid ""
"Enable common options for performing profile feedback directed optimizations."
msgstr ""
-#: common.opt:1905
+#: common.opt:1909
msgid ""
"Enable common options for performing profile feedback directed "
"optimizations, and set -fprofile-dir=."
msgstr ""
-#: common.opt:1909
+#: common.opt:1913
msgid "Insert code to profile values of expressions."
msgstr ""
-#: common.opt:1913
+#: common.opt:1917
msgid "Report on consistency of profile."
msgstr ""
-#: common.opt:1917
+#: common.opt:1921
msgid "Enable function reordering that improves code placement."
msgstr ""
-#: common.opt:1924
+#: common.opt:1928
msgid "-frandom-seed=<string>\tMake compile reproducible using <string>."
msgstr ""
-#: common.opt:1934
+#: common.opt:1938
msgid "Record gcc command line switches in the object file."
msgstr ""
-#: common.opt:1938
+#: common.opt:1942
msgid "Return small aggregates in registers."
msgstr ""
-#: common.opt:1946
+#: common.opt:1950
msgid "Tell DSE that the storage for a C++ object is dead when the constructor"
msgstr ""
-#: common.opt:1951
+#: common.opt:1958
msgid "Relief of register pressure through live range shrinkage."
msgstr ""
-#: common.opt:1955
+#: common.opt:1962
msgid "Perform a register renaming optimization pass."
msgstr ""
-#: common.opt:1959
+#: common.opt:1966
msgid "Perform a target dependent instruction fusion optimization pass."
msgstr ""
-#: common.opt:1963
+#: common.opt:1970
msgid "Reorder basic blocks to improve code placement."
msgstr ""
-#: common.opt:1967
+#: common.opt:1974
msgid ""
"-freorder-blocks-algorithm=[simple|stc] Set the used basic block reordering "
"algorithm."
msgstr ""
-#: common.opt:1970
+#: common.opt:1977
#, c-format
msgid "unknown basic block reordering algorithm %qs"
msgstr ""
-#: common.opt:1980
+#: common.opt:1987
msgid "Reorder basic blocks and partition into hot and cold sections."
msgstr ""
-#: common.opt:1984
+#: common.opt:1991
msgid "Reorder functions to improve code placement."
msgstr ""
-#: common.opt:1988
+#: common.opt:1995
msgid "Add a common subexpression elimination pass after loop optimizations."
msgstr ""
-#: common.opt:1996
+#: common.opt:2003
msgid "Disable optimizations that assume default FP rounding behavior."
msgstr ""
-#: common.opt:2000
+#: common.opt:2007
msgid "Enable scheduling across basic blocks."
msgstr ""
-#: common.opt:2004
+#: common.opt:2011
msgid "Enable register pressure sensitive insn scheduling."
msgstr ""
-#: common.opt:2008
+#: common.opt:2015
msgid "Allow speculative motion of non-loads."
msgstr ""
-#: common.opt:2012
+#: common.opt:2019
msgid "Allow speculative motion of some loads."
msgstr ""
-#: common.opt:2016
+#: common.opt:2023
msgid "Allow speculative motion of more loads."
msgstr ""
-#: common.opt:2020
+#: common.opt:2027
msgid "-fsched-verbose=<number>\tSet the verbosity level of the scheduler."
msgstr ""
-#: common.opt:2024
+#: common.opt:2031
msgid "If scheduling post reload, do superblock scheduling."
msgstr ""
-#: common.opt:2032
+#: common.opt:2039
msgid "Reschedule instructions before register allocation."
msgstr ""
-#: common.opt:2036
+#: common.opt:2043
msgid "Reschedule instructions after register allocation."
msgstr ""
-#: common.opt:2043
+#: common.opt:2050
msgid "Schedule instructions using selective scheduling algorithm."
msgstr ""
-#: common.opt:2047
+#: common.opt:2054
msgid "Run selective scheduling after reload."
msgstr ""
-#: common.opt:2051
+#: common.opt:2058
msgid "Perform software pipelining of inner loops during selective scheduling."
msgstr ""
-#: common.opt:2055
+#: common.opt:2062
msgid "Perform software pipelining of outer loops during selective scheduling."
msgstr ""
-#: common.opt:2059
+#: common.opt:2066
msgid "Reschedule pipelined regions without pipelining."
msgstr ""
-#: common.opt:2063
+#: common.opt:2070
msgid ""
"Allow interposing function (or variables) by ones with different semantics "
"(or initializer) respectively by dynamic linker."
msgstr ""
-#: common.opt:2069
+#: common.opt:2076
msgid "Allow premature scheduling of queued insns."
msgstr ""
-#: common.opt:2073
+#: common.opt:2080
msgid ""
"-fsched-stalled-insns=<number>\tSet number of queued insns that can be "
"prematurely scheduled."
msgstr ""
-#: common.opt:2081
+#: common.opt:2088
msgid ""
"Set dependence distance checking in premature scheduling of queued insns."
msgstr ""
-#: common.opt:2085
+#: common.opt:2092
msgid ""
"-fsched-stalled-insns-dep=<number>\tSet dependence distance checking in "
"premature scheduling of queued insns."
msgstr ""
-#: common.opt:2089
+#: common.opt:2096
msgid "Enable the group heuristic in the scheduler."
msgstr ""
-#: common.opt:2093
+#: common.opt:2100
msgid "Enable the critical path heuristic in the scheduler."
msgstr ""
-#: common.opt:2097
+#: common.opt:2104
msgid "Enable the speculative instruction heuristic in the scheduler."
msgstr ""
-#: common.opt:2101
+#: common.opt:2108
msgid "Enable the rank heuristic in the scheduler."
msgstr ""
-#: common.opt:2105
+#: common.opt:2112
msgid "Enable the last instruction heuristic in the scheduler."
msgstr ""
-#: common.opt:2109
+#: common.opt:2116
msgid "Enable the dependent count heuristic in the scheduler."
msgstr ""
-#: common.opt:2113
+#: common.opt:2120
msgid "Access data in the same section from shared anchor points."
msgstr ""
-#: common.opt:2125
+#: common.opt:2132
msgid "Turn on Redundant Extensions Elimination pass."
msgstr ""
-#: common.opt:2129
+#: common.opt:2136
msgid "Show column numbers in diagnostics, when available. Default on."
msgstr ""
-#: common.opt:2133
+#: common.opt:2140
msgid "Emit function prologues only before parts of the function that need it,"
msgstr ""
-#: common.opt:2138
+#: common.opt:2145
msgid "Disable optimizations observable by IEEE signaling NaNs."
msgstr ""
-#: common.opt:2142
+#: common.opt:2149
msgid ""
"Disable floating point optimizations that ignore the IEEE signedness of zero."
msgstr ""
-#: common.opt:2146
+#: common.opt:2153
msgid "Convert floating point constants to single precision constants."
msgstr ""
-#: common.opt:2150
+#: common.opt:2157
msgid "Split lifetimes of induction variables when loops are unrolled."
msgstr ""
-#: common.opt:2154
+#: common.opt:2161
msgid "Generate discontiguous stack frames."
msgstr ""
-#: common.opt:2158
+#: common.opt:2165
msgid "Split wide types into independent registers."
msgstr ""
-#: common.opt:2162
+#: common.opt:2169
msgid "Enable backward propagation of use properties at the SSA level."
msgstr ""
-#: common.opt:2166
+#: common.opt:2173
msgid "Optimize conditional patterns using SSA PHI nodes."
msgstr ""
-#: common.opt:2170
+#: common.opt:2177
msgid ""
"Optimize amount of stdarg registers saved to stack at start of function."
msgstr ""
-#: common.opt:2174
+#: common.opt:2181
msgid "Apply variable expansion when loops are unrolled."
msgstr ""
-#: common.opt:2178
+#: common.opt:2185
msgid ""
"-fstack-check=[no|generic|specific]\tInsert stack checking code into the "
"program."
msgstr ""
-#: common.opt:2182
+#: common.opt:2189
msgid ""
"Insert stack checking code into the program. Same as -fstack-check=specific."
msgstr ""
-#: common.opt:2189
+#: common.opt:2196
msgid ""
"-fstack-limit-register=<register>\tTrap if the stack goes past <register>."
msgstr ""
-#: common.opt:2193
+#: common.opt:2200
msgid "-fstack-limit-symbol=<name>\tTrap if the stack goes past symbol <name>."
msgstr ""
-#: common.opt:2197
+#: common.opt:2204
msgid "Use propolice as a stack protection method."
msgstr ""
-#: common.opt:2201
+#: common.opt:2208
msgid "Use a stack protection method for every function."
msgstr ""
-#: common.opt:2205
+#: common.opt:2212
msgid "Use a smart stack protection method for certain functions."
msgstr ""
-#: common.opt:2209
+#: common.opt:2216
msgid ""
"Use stack protection method only for functions with the stack_protect "
"attribute."
msgstr ""
-#: common.opt:2213
+#: common.opt:2220
msgid "Output stack usage information on a per-function basis."
msgstr ""
-#: common.opt:2225
+#: common.opt:2232
msgid "Assume strict aliasing rules apply."
msgstr ""
-#: common.opt:2229
+#: common.opt:2236
msgid "Treat signed overflow as undefined."
msgstr ""
-#: common.opt:2233
+#: common.opt:2240
msgid "Implement __atomic operations via libcalls to legacy __sync functions."
msgstr ""
-#: common.opt:2237
+#: common.opt:2244
msgid "Check for syntax errors, then stop."
msgstr ""
-#: common.opt:2241
+#: common.opt:2248
msgid "Create data files needed by \"gcov\"."
msgstr ""
-#: common.opt:2245
+#: common.opt:2252
msgid "Perform jump threading optimizations."
msgstr ""
-#: common.opt:2249
+#: common.opt:2256
msgid "Report the time taken by each compiler pass."
msgstr ""
-#: common.opt:2253
+#: common.opt:2260
msgid ""
"-ftls-model=[global-dynamic|local-dynamic|initial-exec|local-exec]\tSet the "
"default thread-local storage code generation model."
msgstr ""
-#: common.opt:2256
+#: common.opt:2263
#, c-format
msgid "unknown TLS model %qs"
msgstr ""
-#: common.opt:2272
+#: common.opt:2279
msgid "Reorder top level functions, variables, and asms."
msgstr ""
-#: common.opt:2276
+#: common.opt:2283
msgid "Perform superblock formation via tail duplication."
msgstr ""
-#: common.opt:2283
+#: common.opt:2290
msgid "Assume floating-point operations can trap."
msgstr ""
-#: common.opt:2287
+#: common.opt:2294
msgid "Trap for signed overflow in addition, subtraction and multiplication."
msgstr ""
-#: common.opt:2291
+#: common.opt:2298
msgid "Enable SSA-CCP optimization on trees."
msgstr ""
-#: common.opt:2295
+#: common.opt:2302
msgid "Enable SSA-BIT-CCP optimization on trees."
msgstr ""
-#: common.opt:2303
+#: common.opt:2310
msgid "Enable loop header copying on trees."
msgstr ""
-#: common.opt:2311
+#: common.opt:2318
msgid "Enable SSA coalescing of user variables."
msgstr ""
-#: common.opt:2319
+#: common.opt:2326
msgid "Enable copy propagation on trees."
msgstr ""
-#: common.opt:2327
+#: common.opt:2334
msgid "Transform condition stores into unconditional ones."
msgstr ""
-#: common.opt:2331
+#: common.opt:2338
msgid "Perform conversions of switch initializations."
msgstr ""
-#: common.opt:2335
+#: common.opt:2342
msgid "Enable SSA dead code elimination optimization on trees."
msgstr ""
-#: common.opt:2339
+#: common.opt:2346
msgid "Enable dominator optimizations."
msgstr ""
-#: common.opt:2343
+#: common.opt:2350
msgid "Enable tail merging on trees."
msgstr ""
-#: common.opt:2347
+#: common.opt:2354
msgid "Enable dead store elimination."
msgstr ""
-#: common.opt:2351
+#: common.opt:2358
msgid "Enable forward propagation on trees."
msgstr ""
-#: common.opt:2355
+#: common.opt:2362
msgid "Enable Full Redundancy Elimination (FRE) on trees."
msgstr ""
-#: common.opt:2359
+#: common.opt:2366
msgid "Enable string length optimizations on trees."
msgstr ""
-#: common.opt:2363
+#: common.opt:2370
msgid "Detect paths that trigger erroneous or undefined behavior due to"
msgstr ""
-#: common.opt:2369
+#: common.opt:2376
msgid ""
"Detect paths that trigger erroneous or undefined behavior due a null value"
msgstr ""
-#: common.opt:2376
+#: common.opt:2383
msgid "Enable loop distribution on trees."
msgstr ""
-#: common.opt:2380
+#: common.opt:2387
msgid "Enable loop distribution for patterns transformed into a library call."
msgstr ""
-#: common.opt:2384
+#: common.opt:2391
msgid "Enable loop invariant motion on trees."
msgstr ""
-#: common.opt:2392
+#: common.opt:2399
msgid "Create canonical induction variables in loops."
msgstr ""
-#: common.opt:2396
+#: common.opt:2403
msgid "Enable loop optimizations on tree level."
msgstr ""
-#: common.opt:2400
+#: common.opt:2407
msgid "Enable automatic parallelization of loops."
msgstr ""
-#: common.opt:2404
+#: common.opt:2411
msgid "Enable hoisting loads from conditional pointers."
msgstr ""
-#: common.opt:2408
+#: common.opt:2415
msgid "Enable SSA-PRE optimization on trees."
msgstr ""
-#: common.opt:2412
+#: common.opt:2419
msgid ""
"In SSA-PRE optimization on trees, enable partial-partial redundancy "
"elimination."
msgstr ""
-#: common.opt:2416
+#: common.opt:2423
msgid "Perform function-local points-to analysis on trees."
msgstr ""
-#: common.opt:2420
+#: common.opt:2427
msgid "Enable reassociation on tree level."
msgstr ""
-#: common.opt:2428
+#: common.opt:2435
msgid "Enable SSA code sinking on trees."
msgstr ""
-#: common.opt:2432
+#: common.opt:2439
msgid "Perform straight-line strength reduction."
msgstr ""
-#: common.opt:2436
+#: common.opt:2443
msgid "Perform scalar replacement of aggregates."
msgstr ""
-#: common.opt:2440
+#: common.opt:2447
msgid "Replace temporary expressions in the SSA->normal pass."
msgstr ""
-#: common.opt:2444
+#: common.opt:2451
msgid "Perform live range splitting during the SSA->normal pass."
msgstr ""
-#: common.opt:2448
+#: common.opt:2455
msgid "Perform Value Range Propagation on trees."
msgstr ""
-#: common.opt:2452
+#: common.opt:2459
msgid "Split paths leading to loop backedges."
msgstr ""
-#: common.opt:2456
+#: common.opt:2463
+msgid "Assume common declarations may be overridden with ones with a larger"
+msgstr ""
+
+#: common.opt:2468
msgid "Compile whole compilation unit at a time."
msgstr ""
-#: common.opt:2460
+#: common.opt:2472
msgid "Perform loop unrolling when iteration count is known."
msgstr ""
-#: common.opt:2464
+#: common.opt:2476
msgid "Perform loop unrolling for all loops."
msgstr ""
-#: common.opt:2471
+#: common.opt:2483
msgid "Allow loop optimizations to assume that the loops behave in normal way."
msgstr ""
-#: common.opt:2475
+#: common.opt:2487
msgid "Allow optimization for floating-point arithmetic which may change the"
msgstr ""
-#: common.opt:2480
+#: common.opt:2492
msgid "Same as -fassociative-math for expressions which include division."
msgstr ""
-#: common.opt:2488
+#: common.opt:2500
msgid "Allow math optimizations that may violate IEEE or ISO standards."
msgstr ""
-#: common.opt:2492
+#: common.opt:2504
msgid "Perform loop unswitching."
msgstr ""
-#: common.opt:2496
+#: common.opt:2508
msgid "Just generate unwind tables for exception handling."
msgstr ""
-#: common.opt:2500
+#: common.opt:2512
msgid "Use the bfd linker instead of the default linker."
msgstr ""
-#: common.opt:2504
+#: common.opt:2516
msgid "Use the gold linker instead of the default linker."
msgstr ""
-#: common.opt:2516
+#: common.opt:2528
msgid "Perform variable tracking."
msgstr ""
-#: common.opt:2524
+#: common.opt:2536
msgid "Perform variable tracking by annotating assignments."
msgstr ""
-#: common.opt:2530
+#: common.opt:2542
msgid "Toggle -fvar-tracking-assignments."
msgstr ""
-#: common.opt:2538
+#: common.opt:2550
msgid ""
"Perform variable tracking and also tag variables that are uninitialized."
msgstr ""
-#: common.opt:2542
+#: common.opt:2554
msgid "Enable vectorization on trees."
msgstr ""
-#: common.opt:2550
+#: common.opt:2562
msgid "Enable loop vectorization on trees."
msgstr ""
-#: common.opt:2554
+#: common.opt:2566
msgid "Enable basic block vectorization (SLP) on trees."
msgstr ""
-#: common.opt:2558
+#: common.opt:2570
msgid "Specifies the cost model for vectorization."
msgstr ""
-#: common.opt:2562
+#: common.opt:2574
msgid ""
"Specifies the vectorization cost model for code marked with a simd directive."
msgstr ""
-#: common.opt:2565
+#: common.opt:2577
#, c-format
msgid "unknown vectorizer cost model %qs"
msgstr ""
-#: common.opt:2578
+#: common.opt:2590
msgid ""
"Enables the dynamic vectorizer cost model. Preserved for backward "
"compatibility."
msgstr ""
-#: common.opt:2582
+#: common.opt:2594
msgid ""
"Enables the unlimited vectorizer cost model. Preserved for backward "
"compatibility."
msgstr ""
-#: common.opt:2590
+#: common.opt:2602
msgid "Enable copy propagation of scalar-evolution information."
msgstr ""
-#: common.opt:2600
+#: common.opt:2612
msgid "Add extra commentary to assembler output."
msgstr ""
-#: common.opt:2604
+#: common.opt:2616
msgid ""
"-fvisibility=[default|internal|hidden|protected]\tSet the default symbol "
"visibility."
msgstr ""
-#: common.opt:2607
+#: common.opt:2619
#, c-format
msgid "unrecognized visibility value %qs"
msgstr ""
-#: common.opt:2623
+#: common.opt:2635
msgid "Validate vtable pointers before using them."
msgstr ""
-#: common.opt:2626
+#: common.opt:2638
#, c-format
msgid "unknown vtable verify initialization priority %qs"
msgstr ""
-#: common.opt:2639
+#: common.opt:2651
msgid "Output vtable verification counters."
msgstr ""
-#: common.opt:2643
+#: common.opt:2655
msgid "Output vtable verification pointer sets information."
msgstr ""
-#: common.opt:2647
+#: common.opt:2659
msgid "Use expression value profiles in optimizations."
msgstr ""
-#: common.opt:2651
+#: common.opt:2663
msgid "Construct webs and split unrelated uses of single variable."
msgstr ""
-#: common.opt:2655
+#: common.opt:2667
msgid "Enable conditional dead code elimination for builtin calls."
msgstr ""
-#: common.opt:2659
+#: common.opt:2671
msgid "Perform whole program optimizations."
msgstr ""
-#: common.opt:2663
+#: common.opt:2675
msgid "Assume signed arithmetic overflow wraps around."
msgstr ""
-#: common.opt:2667
+#: common.opt:2679
msgid "Put zero initialized data in the bss section."
msgstr ""
-#: common.opt:2671
+#: common.opt:2683
msgid "Generate debug information in default format."
msgstr ""
-#: common.opt:2675
+#: common.opt:2687
msgid "Generate debug information in COFF format."
msgstr ""
-#: common.opt:2679
+#: common.opt:2691
msgid "Generate debug information in default version of DWARF format."
msgstr ""
-#: common.opt:2683
+#: common.opt:2695
msgid "Generate debug information in DWARF v2 (or later) format."
msgstr ""
-#: common.opt:2687
+#: common.opt:2699
msgid "Generate debug information in default extended format."
msgstr ""
-#: common.opt:2691
+#: common.opt:2703
msgid "Don't generate DWARF pubnames and pubtypes sections."
msgstr ""
-#: common.opt:2695
+#: common.opt:2707
msgid "Generate DWARF pubnames and pubtypes sections."
msgstr ""
-#: common.opt:2699
+#: common.opt:2711
msgid "Generate DWARF pubnames and pubtypes sections with GNU extensions."
msgstr ""
-#: common.opt:2703
+#: common.opt:2715
msgid "Don't record gcc command line switches in DWARF DW_AT_producer."
msgstr ""
-#: common.opt:2707
+#: common.opt:2719
msgid "Record gcc command line switches in DWARF DW_AT_producer."
msgstr ""
-#: common.opt:2711
+#: common.opt:2723
msgid "Don't generate debug information in separate .dwo files."
msgstr ""
-#: common.opt:2715
+#: common.opt:2727
msgid "Generate debug information in separate .dwo files."
msgstr ""
-#: common.opt:2719
+#: common.opt:2731
msgid "Generate debug information in STABS format."
msgstr ""
-#: common.opt:2723
+#: common.opt:2735
msgid "Generate debug information in extended STABS format."
msgstr ""
-#: common.opt:2727
+#: common.opt:2739
msgid "Emit DWARF additions beyond selected version."
msgstr ""
-#: common.opt:2731
+#: common.opt:2743
msgid "Don't emit DWARF additions beyond selected version."
msgstr ""
-#: common.opt:2735
+#: common.opt:2747
msgid "Toggle debug information generation."
msgstr ""
-#: common.opt:2739
+#: common.opt:2751
msgid "Generate debug information in VMS format."
msgstr ""
-#: common.opt:2743
+#: common.opt:2755
msgid "Generate debug information in XCOFF format."
msgstr ""
-#: common.opt:2747
+#: common.opt:2759
msgid "Generate debug information in extended XCOFF format."
msgstr ""
-#: common.opt:2765
+#: common.opt:2777
msgid "Generate compressed debug sections."
msgstr ""
-#: common.opt:2769
+#: common.opt:2781
msgid "-gz=<format>\tGenerate compressed debug sections in format <format>."
msgstr ""
-#: common.opt:2776
+#: common.opt:2788
msgid "-iplugindir=<dir>\tSet <dir> to be the default plugin directory."
msgstr ""
-#: common.opt:2780
+#: common.opt:2792
msgid "-imultiarch <dir>\tSet <dir> to be the multiarch include subdirectory."
msgstr ""
-#: common.opt:2802
+#: common.opt:2814
msgid "-o <file>\tPlace output into <file>."
msgstr ""
-#: common.opt:2806
+#: common.opt:2818
msgid "Enable function profiling."
msgstr ""
-#: common.opt:2816
+#: common.opt:2828
msgid "Like -pedantic but issue them as errors."
msgstr ""
-#: common.opt:2856
+#: common.opt:2868
msgid "Do not display functions compiled or elapsed time."
msgstr ""
-#: common.opt:2888
+#: common.opt:2900
msgid "Enable verbose output."
msgstr ""
-#: common.opt:2892
+#: common.opt:2904
msgid "Display the compiler's version."
msgstr ""
-#: common.opt:2896
+#: common.opt:2908
msgid "Suppress warnings."
msgstr ""
-#: common.opt:2906
+#: common.opt:2918
msgid "Create a shared library."
msgstr ""
-#: common.opt:2951
+#: common.opt:2963
msgid "Don't create a position independent executable."
msgstr ""
-#: common.opt:2955
+#: common.opt:2967
msgid "Create a position independent executable."
msgstr ""
-#: common.opt:2962
+#: common.opt:2974
msgid "Use caller save register across calls if possible."
msgstr ""
-#: go/gofrontend/expressions.cc:93 c-family/c-common.c:1524 cp/cvt.c:1174
-#: cp/cvt.c:1423
+#: go/gofrontend/expressions.cc:93 c-family/c-common.c:1524 cp/cvt.c:1175
+#: cp/cvt.c:1424
#, gcc-internal-format
msgid "value computed is not used"
msgstr ""
@@ -15575,8 +15611,8 @@ msgstr ""
msgid "expected boolean type"
msgstr ""
-#: go/gofrontend/expressions.cc:4015 c/c-parser.c:12533 c/c-parser.c:12540
-#: cp/parser.c:31595 cp/parser.c:31602
+#: go/gofrontend/expressions.cc:4015 c/c-parser.c:12555 c/c-parser.c:12562
+#: cp/parser.c:31645 cp/parser.c:31652
#, gcc-internal-format
msgid "expected integer"
msgstr ""
@@ -15908,77 +15944,77 @@ msgstr ""
msgid "cannot use type %s as type %s"
msgstr ""
-#: go/gofrontend/types.cc:3500
+#: go/gofrontend/types.cc:3503
msgid "different receiver types"
msgstr ""
-#: go/gofrontend/types.cc:3520 go/gofrontend/types.cc:3533
-#: go/gofrontend/types.cc:3548
+#: go/gofrontend/types.cc:3523 go/gofrontend/types.cc:3536
+#: go/gofrontend/types.cc:3551
msgid "different number of parameters"
msgstr ""
-#: go/gofrontend/types.cc:3541
+#: go/gofrontend/types.cc:3544
msgid "different parameter types"
msgstr ""
-#: go/gofrontend/types.cc:3556
+#: go/gofrontend/types.cc:3559
msgid "different varargs"
msgstr ""
-#: go/gofrontend/types.cc:3565 go/gofrontend/types.cc:3578
-#: go/gofrontend/types.cc:3593
+#: go/gofrontend/types.cc:3568 go/gofrontend/types.cc:3581
+#: go/gofrontend/types.cc:3596
msgid "different number of results"
msgstr ""
-#: go/gofrontend/types.cc:3586
+#: go/gofrontend/types.cc:3589
msgid "different result types"
msgstr ""
-#: go/gofrontend/types.cc:7393
+#: go/gofrontend/types.cc:7396
#, c-format
msgid "need explicit conversion; missing method %s%s%s"
msgstr ""
-#: go/gofrontend/types.cc:7410 go/gofrontend/types.cc:7552
+#: go/gofrontend/types.cc:7413 go/gofrontend/types.cc:7555
#, c-format
msgid "incompatible type for method %s%s%s"
msgstr ""
-#: go/gofrontend/types.cc:7414 go/gofrontend/types.cc:7556
+#: go/gofrontend/types.cc:7417 go/gofrontend/types.cc:7559
#, c-format
msgid "incompatible type for method %s%s%s (%s)"
msgstr ""
-#: go/gofrontend/types.cc:7493 go/gofrontend/types.cc:7506
+#: go/gofrontend/types.cc:7496 go/gofrontend/types.cc:7509
msgid "pointer to interface type has no methods"
msgstr ""
-#: go/gofrontend/types.cc:7495 go/gofrontend/types.cc:7508
+#: go/gofrontend/types.cc:7498 go/gofrontend/types.cc:7511
msgid "type has no methods"
msgstr ""
-#: go/gofrontend/types.cc:7529
+#: go/gofrontend/types.cc:7532
#, c-format
msgid "ambiguous method %s%s%s"
msgstr ""
-#: go/gofrontend/types.cc:7532
+#: go/gofrontend/types.cc:7535
#, c-format
msgid "missing method %s%s%s"
msgstr ""
-#: go/gofrontend/types.cc:7573
+#: go/gofrontend/types.cc:7576
#, c-format
msgid "method %s%s%s requires a pointer receiver"
msgstr ""
-#: go/gofrontend/types.cc:7591
+#: go/gofrontend/types.cc:7594
#, 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-common.c:8641 objc/objc-act.c:4956
+#: attribs.c:436 c-family/c-common.c:8643 objc/objc-act.c:4956
#: objc/objc-act.c:6925 objc/objc-act.c:8114 objc/objc-act.c:8165
#, gcc-internal-format
msgid "%qE attribute directive ignored"
@@ -16093,7 +16129,7 @@ msgstr ""
msgid "invalid third argument to %<__builtin_prefetch%>; using zero"
msgstr ""
-#: builtins.c:4176 gimplify.c:2403
+#: builtins.c:4176 gimplify.c:2414
#, gcc-internal-format
msgid "too few arguments to function %<va_start%>"
msgstr ""
@@ -16184,7 +16220,7 @@ msgstr ""
#. All valid uses of __builtin_va_arg_pack () are removed during
#. inlining.
-#: builtins.c:5831 expr.c:10546
+#: builtins.c:5831 expr.c:10565
#, gcc-internal-format
msgid "%Kinvalid use of %<__builtin_va_arg_pack ()%>"
msgstr ""
@@ -16213,64 +16249,64 @@ msgstr ""
msgid "target format does not support infinity"
msgstr ""
-#: builtins.c:8838
+#: builtins.c:8916
#, gcc-internal-format
msgid "%<va_start%> used in function with fixed args"
msgstr ""
-#: builtins.c:8846
+#: builtins.c:8924
#, gcc-internal-format
msgid "wrong number of arguments to function %<va_start%>"
msgstr ""
-#: builtins.c:8861
+#: builtins.c:8939
#, gcc-internal-format
msgid "%<__builtin_next_arg%> called without an argument"
msgstr ""
-#: builtins.c:8866
+#: builtins.c:8944
#, gcc-internal-format
msgid "wrong number of arguments to function %<__builtin_next_arg%>"
msgstr ""
-#: builtins.c:8898
+#: builtins.c:8976
#, gcc-internal-format
msgid "second parameter of %<va_start%> not last named argument"
msgstr ""
-#: builtins.c:8911
+#: builtins.c:8989
#, gcc-internal-format
msgid ""
-"undefined behaviour when second parameter of %<va_start%> is declared with "
+"undefined behavior when second parameter of %<va_start%> is declared with "
"%<register%> storage"
msgstr ""
-#: builtins.c:8940
+#: builtins.c:9018
#, gcc-internal-format
msgid "%Kfirst argument of %D must be a pointer, second integer constant"
msgstr ""
-#: builtins.c:8953
+#: builtins.c:9031
#, gcc-internal-format
msgid "%Klast argument of %D is not integer constant between 0 and 3"
msgstr ""
-#: builtins.c:8998 builtins.c:9149 builtins.c:9206
+#: builtins.c:9076 builtins.c:9227 builtins.c:9284
#, gcc-internal-format
msgid "%Kcall to %D will always overflow destination buffer"
msgstr ""
-#: builtins.c:9139
+#: builtins.c:9217
#, gcc-internal-format
msgid "%Kcall to %D might overflow destination buffer"
msgstr ""
-#: builtins.c:9227
+#: builtins.c:9305
#, gcc-internal-format
msgid "%Kattempt to free a non-heap object %qD"
msgstr ""
-#: builtins.c:9230
+#: builtins.c:9308
#, gcc-internal-format
msgid "%Kattempt to free a non-heap object"
msgstr ""
@@ -16285,74 +16321,74 @@ msgstr ""
msgid "passing too large argument on stack"
msgstr ""
-#: cfgexpand.c:1631 function.c:986 varasm.c:2158
+#: cfgexpand.c:1643 function.c:986 varasm.c:2158
#, gcc-internal-format
msgid "size of variable %q+D is too large"
msgstr ""
-#: cfgexpand.c:1643
+#: cfgexpand.c:1655
#, gcc-internal-format
msgid "cannot allocate stack for variable %q+D, naked function."
msgstr ""
-#: cfgexpand.c:2699
+#: cfgexpand.c:2711
#, gcc-internal-format
msgid "too many alternatives in %<asm%>"
msgstr ""
-#: cfgexpand.c:2706
+#: cfgexpand.c:2718
#, gcc-internal-format
msgid "operand constraints for %<asm%> differ in number of alternatives"
msgstr ""
-#: cfgexpand.c:2727
+#: cfgexpand.c:2739
#, gcc-internal-format
msgid "asm-specifier for variable %qE conflicts with asm clobber list"
msgstr ""
-#: cfgexpand.c:2801
+#: cfgexpand.c:2813
#, gcc-internal-format
msgid "more than %d operands in %<asm%>"
msgstr ""
#. ??? Diagnose during gimplification?
-#: cfgexpand.c:2854
+#: cfgexpand.c:2866
#, gcc-internal-format
msgid "unknown register name %qs in %<asm%>"
msgstr ""
#. ??? Diagnose during gimplification?
-#: cfgexpand.c:2875
+#: cfgexpand.c:2887
#, gcc-internal-format
msgid "PIC register clobbered by %qs in %<asm%>"
msgstr ""
-#: cfgexpand.c:2980
+#: cfgexpand.c:2992
#, gcc-internal-format, gfc-internal-format
msgid "output number %d not directly addressable"
msgstr ""
-#: cfgexpand.c:3061
+#: cfgexpand.c:3073
#, gcc-internal-format
msgid "asm operand %d probably doesn%'t match constraints"
msgstr ""
-#: cfgexpand.c:3244
+#: cfgexpand.c:3256
#, gcc-internal-format
msgid "asm clobber conflict with output operand"
msgstr ""
-#: cfgexpand.c:3248
+#: cfgexpand.c:3260
#, gcc-internal-format
msgid "asm clobber conflict with input operand"
msgstr ""
-#: cfgexpand.c:6203
+#: cfgexpand.c:6215
#, gcc-internal-format
msgid "stack protector not protecting local variables: variable length buffer"
msgstr ""
-#: cfgexpand.c:6207
+#: cfgexpand.c:6219
#, gcc-internal-format, gfc-internal-format
msgid ""
"stack protector not protecting function: all local arrays are less than %d "
@@ -16449,87 +16485,87 @@ msgstr ""
msgid "%s does not support can_remove_branch_p"
msgstr ""
-#: cfghooks.c:457
+#: cfghooks.c:470
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support redirect_edge_and_branch_force"
msgstr ""
-#: cfghooks.c:495
+#: cfghooks.c:508
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support split_block"
msgstr ""
-#: cfghooks.c:562
+#: cfghooks.c:575
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support move_block_after"
msgstr ""
-#: cfghooks.c:575
+#: cfghooks.c:588
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support delete_basic_block"
msgstr ""
-#: cfghooks.c:622
+#: cfghooks.c:635
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support split_edge"
msgstr ""
-#: cfghooks.c:697
+#: cfghooks.c:710
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support create_basic_block"
msgstr ""
-#: cfghooks.c:738
+#: cfghooks.c:751
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support can_merge_blocks_p"
msgstr ""
-#: cfghooks.c:749
+#: cfghooks.c:762
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support predict_edge"
msgstr ""
-#: cfghooks.c:758
+#: cfghooks.c:771
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support predicted_by_p"
msgstr ""
-#: cfghooks.c:772
+#: cfghooks.c:785
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support merge_blocks"
msgstr ""
-#: cfghooks.c:853
+#: cfghooks.c:866
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support make_forwarder_block"
msgstr ""
-#: cfghooks.c:1009
+#: cfghooks.c:1022
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support force_nonfallthru"
msgstr ""
-#: cfghooks.c:1037
+#: cfghooks.c:1050
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support can_duplicate_block_p"
msgstr ""
-#: cfghooks.c:1059
+#: cfghooks.c:1072
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support duplicate_block"
msgstr ""
-#: cfghooks.c:1153
+#: cfghooks.c:1166
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support block_ends_with_call_p"
msgstr ""
-#: cfghooks.c:1164
+#: cfghooks.c:1177
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support block_ends_with_condjump_p"
msgstr ""
-#: cfghooks.c:1182
+#: cfghooks.c:1195
#, gcc-internal-format, gfc-internal-format
msgid "%s does not support flow_call_edges_add"
msgstr ""
@@ -16854,342 +16890,342 @@ msgstr ""
msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)"
msgstr ""
-#: cgraph.c:2724
+#: cgraph.c:2728
#, gcc-internal-format
msgid "caller edge count is negative"
msgstr ""
-#: cgraph.c:2729
+#: cgraph.c:2733
#, gcc-internal-format
msgid "caller edge frequency is negative"
msgstr ""
-#: cgraph.c:2734
+#: cgraph.c:2738
#, gcc-internal-format
msgid "caller edge frequency is too large"
msgstr ""
-#: cgraph.c:2818
+#: cgraph.c:2822
#, gcc-internal-format, gfc-internal-format
msgid "aux field set for edge %s->%s"
msgstr ""
-#: cgraph.c:2825
+#: cgraph.c:2829
#, gcc-internal-format
msgid "execution count is negative"
msgstr ""
-#: cgraph.c:2830
+#: cgraph.c:2834
#, gcc-internal-format
msgid "inline clone in same comdat group list"
msgstr ""
-#: cgraph.c:2835
+#: cgraph.c:2839
#, gcc-internal-format
msgid "local symbols must be defined"
msgstr ""
-#: cgraph.c:2840
+#: cgraph.c:2844
#, gcc-internal-format
msgid "externally visible inline clone"
msgstr ""
-#: cgraph.c:2845
+#: cgraph.c:2849
#, gcc-internal-format
msgid "inline clone with address taken"
msgstr ""
-#: cgraph.c:2850
+#: cgraph.c:2854
#, gcc-internal-format
msgid "inline clone is forced to output"
msgstr ""
-#: cgraph.c:2857
+#: cgraph.c:2861
#, gcc-internal-format, gfc-internal-format
msgid "aux field set for indirect edge from %s"
msgstr ""
-#: cgraph.c:2864
+#: cgraph.c:2868
#, 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:2879
+#: cgraph.c:2883
#, gcc-internal-format, gfc-internal-format
msgid "comdat-local function called by %s outside its comdat"
msgstr ""
-#: cgraph.c:2889
+#: cgraph.c:2893
#, gcc-internal-format
msgid "inlined_to pointer is wrong"
msgstr ""
-#: cgraph.c:2894
+#: cgraph.c:2898
#, gcc-internal-format
msgid "multiple inline callers"
msgstr ""
-#: cgraph.c:2901
+#: cgraph.c:2905
#, gcc-internal-format
msgid "inlined_to pointer set for noninline callers"
msgstr ""
-#: cgraph.c:2920
+#: cgraph.c:2924
#, gcc-internal-format, gfc-internal-format
msgid "caller edge frequency %i does not match BB frequency %i"
msgstr ""
-#: cgraph.c:2938
+#: cgraph.c:2942
#, gcc-internal-format, gfc-internal-format
msgid "indirect call frequency %i does not match BB frequency %i"
msgstr ""
-#: cgraph.c:2947
+#: cgraph.c:2951
#, gcc-internal-format
msgid "inlined_to pointer is set but no predecessors found"
msgstr ""
-#: cgraph.c:2952
+#: cgraph.c:2956
#, gcc-internal-format
msgid "inlined_to pointer refers to itself"
msgstr ""
-#: cgraph.c:2964
+#: cgraph.c:2968
#, gcc-internal-format
msgid "cgraph_node has wrong clone_of"
msgstr ""
-#: cgraph.c:2976
+#: cgraph.c:2980
#, gcc-internal-format
msgid "cgraph_node has wrong clone list"
msgstr ""
-#: cgraph.c:2982
+#: cgraph.c:2986
#, gcc-internal-format
msgid "cgraph_node is in clone list but it is not clone"
msgstr ""
-#: cgraph.c:2987
+#: cgraph.c:2991
#, gcc-internal-format
msgid "cgraph_node has wrong prev_clone pointer"
msgstr ""
-#: cgraph.c:2992
+#: cgraph.c:2996
#, gcc-internal-format
msgid "double linked list of clones corrupted"
msgstr ""
-#: cgraph.c:3004
+#: cgraph.c:3008
#, gcc-internal-format
msgid "Alias has call edges"
msgstr ""
-#: cgraph.c:3012
+#: cgraph.c:3016
#, gcc-internal-format
msgid "Alias has non-alias reference"
msgstr ""
-#: cgraph.c:3017
+#: cgraph.c:3021
#, gcc-internal-format
msgid "Alias has more than one alias reference"
msgstr ""
-#: cgraph.c:3024
+#: cgraph.c:3028
#, gcc-internal-format
msgid "Analyzed alias has no reference"
msgstr ""
-#: cgraph.c:3033
+#: cgraph.c:3037
#, gcc-internal-format
msgid "Instrumentation clone does not reference original node"
msgstr ""
-#: cgraph.c:3040
+#: cgraph.c:3044
#, gcc-internal-format
msgid "Not instrumented node has non-NULL original declaration"
msgstr ""
-#: cgraph.c:3050
+#: cgraph.c:3054
#, gcc-internal-format
msgid "Instrumented node has wrong original declaration"
msgstr ""
-#: cgraph.c:3068
+#: cgraph.c:3072
#, gcc-internal-format
msgid "Node has more than one chkp reference"
msgstr ""
-#: cgraph.c:3073
+#: cgraph.c:3077
#, gcc-internal-format
msgid "Wrong node is referenced with chkp reference"
msgstr ""
-#: cgraph.c:3081
+#: cgraph.c:3085
#, gcc-internal-format
msgid "Analyzed node has no reference to instrumented version"
msgstr ""
-#: cgraph.c:3095
+#: cgraph.c:3099
#, gcc-internal-format
msgid "Alias chain for instrumented node is broken"
msgstr ""
-#: cgraph.c:3104
+#: cgraph.c:3108
#, gcc-internal-format
msgid "No edge out of thunk node"
msgstr ""
-#: cgraph.c:3109
+#: cgraph.c:3113
#, gcc-internal-format
msgid "More than one edge out of thunk node"
msgstr ""
-#: cgraph.c:3114
+#: cgraph.c:3118
#, gcc-internal-format
msgid "Thunk is not supposed to have body"
msgstr ""
-#: cgraph.c:3120
+#: cgraph.c:3124
#, gcc-internal-format
msgid "Instrumentation thunk has wrong edge callee"
msgstr ""
-#: cgraph.c:3156
+#: cgraph.c:3160
#, gcc-internal-format
msgid "shared call_stmt:"
msgstr ""
-#: cgraph.c:3164
+#: cgraph.c:3168
#, gcc-internal-format
msgid "edge points to wrong declaration:"
msgstr ""
-#: cgraph.c:3173
+#: cgraph.c:3177
#, gcc-internal-format
msgid ""
"an indirect edge with unknown callee corresponding to a call_stmt with a "
"known declaration:"
msgstr ""
-#: cgraph.c:3183
+#: cgraph.c:3187
#, gcc-internal-format
msgid "missing callgraph edge for call stmt:"
msgstr ""
-#: cgraph.c:3193
+#: cgraph.c:3197
#, gcc-internal-format
msgid "reference to dead statement"
msgstr ""
-#: cgraph.c:3206
+#: cgraph.c:3210
#, gcc-internal-format, gfc-internal-format
msgid "edge %s->%s has no corresponding call_stmt"
msgstr ""
-#: cgraph.c:3218
+#: cgraph.c:3222
#, gcc-internal-format, gfc-internal-format
msgid "an indirect edge from %s has no corresponding call_stmt"
msgstr ""
-#: cgraph.c:3229
+#: cgraph.c:3233
#, gcc-internal-format
msgid "verify_cgraph_node failed"
msgstr ""
-#: cgraph.c:3328 varpool.c:304
+#: cgraph.c:3332 varpool.c:304
#, gcc-internal-format, gfc-internal-format
msgid "%s: section %s is missing"
msgstr ""
-#: cgraphunit.c:682
+#: cgraphunit.c:680
#, gcc-internal-format
msgid "%<weakref%> attribute should be accompanied with an %<alias%> attribute"
msgstr ""
-#: cgraphunit.c:734 cgraphunit.c:770
+#: cgraphunit.c:732 cgraphunit.c:768
#, gcc-internal-format
msgid "%<externally_visible%> attribute have effect only on public objects"
msgstr ""
-#: cgraphunit.c:741
+#: cgraphunit.c:739
#, gcc-internal-format
msgid "%<weakref%> attribute ignored because function is defined"
msgstr ""
-#: cgraphunit.c:753
+#: cgraphunit.c:751
#, gcc-internal-format
msgid "always_inline function might not be inlinable"
msgstr ""
-#: cgraphunit.c:778
+#: cgraphunit.c:776
#, gcc-internal-format
msgid "%<weakref%> attribute ignored because variable is initialized"
msgstr ""
#. include_self=
-#: cgraphunit.c:937 c/c-decl.c:10747
+#: cgraphunit.c:936 c/c-decl.c:10760
#, gcc-internal-format
msgid "%q+F used but never defined"
msgstr ""
-#: cgraphunit.c:939 c/c-decl.c:10756 cp/decl.c:895
+#: cgraphunit.c:938 c/c-decl.c:10769 cp/decl.c:890
#, gcc-internal-format
msgid "%q+F declared %<static%> but never defined"
msgstr ""
-#: cgraphunit.c:978
+#: cgraphunit.c:982
#, gcc-internal-format
msgid "%qD defined but not used"
msgstr ""
-#: cgraphunit.c:1267 c-family/c-pragma.c:335
+#: cgraphunit.c:1271 c-family/c-pragma.c:335
#, gcc-internal-format
msgid "%q+D aliased to undefined symbol %qE"
msgstr ""
-#: cgraphunit.c:1283
+#: cgraphunit.c:1287
#, gcc-internal-format
msgid "%q+D aliased to external symbol %qE"
msgstr ""
-#: cgraphunit.c:1304
+#: cgraphunit.c:1308
#, gcc-internal-format
msgid "%q+D alias in between function and variable is not supported"
msgstr ""
-#: cgraphunit.c:1306
+#: cgraphunit.c:1310
#, gcc-internal-format
msgid "%q+D aliased declaration"
msgstr ""
-#: cgraphunit.c:1377
+#: cgraphunit.c:1381
#, gcc-internal-format
msgid "failed to reclaim unneeded function"
msgstr ""
-#: cgraphunit.c:1405
+#: cgraphunit.c:1409
#, gcc-internal-format
msgid "failed to reclaim unneeded function in same comdat group"
msgstr ""
-#: cgraphunit.c:1647
+#: cgraphunit.c:1651
#, gcc-internal-format
msgid "generic thunk code fails for method %qD which uses %<...%>"
msgstr ""
-#: cgraphunit.c:2001
+#: cgraphunit.c:2008
#, gcc-internal-format
msgid "size of return value of %q+D is %u bytes"
msgstr ""
-#: cgraphunit.c:2004
+#: cgraphunit.c:2011
#, gcc-internal-format
msgid "size of return value of %q+D is larger than %wd bytes"
msgstr ""
-#: cgraphunit.c:2498
+#: cgraphunit.c:2505
#, gcc-internal-format
msgid "nodes with unreleased memory found"
msgstr ""
@@ -17234,7 +17270,7 @@ msgstr ""
msgid "pex_init failed: %m"
msgstr ""
-#: collect-utils.c:192 collect2.c:2370 collect2.c:2568 gcc.c:8289
+#: collect-utils.c:192 collect2.c:2370 collect2.c:2568 gcc.c:8345
#, gcc-internal-format
msgid "%s: %m"
msgstr ""
@@ -17244,7 +17280,7 @@ msgstr ""
msgid "COLLECT_LTO_WRAPPER must be set"
msgstr ""
-#: collect2.c:966 gcc.c:7246 lto-wrapper.c:1393
+#: collect2.c:966 gcc.c:7255 lto-wrapper.c:1479
#: config/i386/intelmic-mkoffload.c:554 config/nvptx/mkoffload.c:403
#, gcc-internal-format
msgid "atexit failed"
@@ -17255,7 +17291,7 @@ msgstr ""
msgid "no arguments"
msgstr ""
-#: collect2.c:1303 opts.c:885
+#: collect2.c:1303 opts.c:890
#, gcc-internal-format
msgid "LTO support has not been enabled in this configuration"
msgstr ""
@@ -17355,40 +17391,40 @@ msgstr ""
msgid "conversion to incomplete type"
msgstr ""
-#: convert.c:944
+#: convert.c:942
#, gcc-internal-format
msgid ""
"can%'t convert a vector of type %qT to type %qT which has different size"
msgstr ""
-#: convert.c:952
+#: convert.c:950
#, gcc-internal-format
msgid "aggregate value used where an integer was expected"
msgstr ""
-#: convert.c:1043
+#: convert.c:1035
#, gcc-internal-format
msgid "pointer value used where a complex was expected"
msgstr ""
-#: convert.c:1047
+#: convert.c:1039
#, gcc-internal-format
msgid "aggregate value used where a complex was expected"
msgstr ""
-#: convert.c:1081
+#: convert.c:1073
#, gcc-internal-format
msgid ""
"can%'t convert a value of type %qT to vector type %qT which has different "
"size"
msgstr ""
-#: convert.c:1089
+#: convert.c:1081
#, gcc-internal-format
msgid "can%'t convert value to a vector"
msgstr ""
-#: convert.c:1128
+#: convert.c:1120
#, gcc-internal-format
msgid "aggregate value used where a fixed-point was expected"
msgstr ""
@@ -17457,7 +17493,7 @@ msgstr ""
msgid "error writing %qs"
msgstr ""
-#: coverage.c:1215
+#: coverage.c:1211
#, gcc-internal-format, gfc-internal-format
msgid "cannot open %s"
msgstr ""
@@ -17502,7 +17538,7 @@ msgstr ""
msgid "global constructors not supported on this target"
msgstr ""
-#: diagnostic.c:1301
+#: diagnostic.c:1329
#, gcc-internal-format, gfc-internal-format
msgid "in %s, at %s:%d"
msgstr ""
@@ -17549,27 +17585,27 @@ msgstr ""
msgid "non-delegitimized UNSPEC %s (%d) found in variable location"
msgstr ""
-#: dwarf2out.c:25294
+#: dwarf2out.c:25296
#, gcc-internal-format
msgid "-feliminate-dwarf2-dups is broken for C++, ignoring"
msgstr ""
-#: emit-rtl.c:2731
+#: emit-rtl.c:2732
#, gcc-internal-format
msgid "invalid rtl sharing found in the insn"
msgstr ""
-#: emit-rtl.c:2733
+#: emit-rtl.c:2734
#, gcc-internal-format
msgid "shared rtx"
msgstr ""
-#: emit-rtl.c:2735
+#: emit-rtl.c:2736
#, gcc-internal-format
msgid "internal consistency failure"
msgstr ""
-#: emit-rtl.c:3858
+#: emit-rtl.c:3859
#, gcc-internal-format
msgid "ICE: emit_insn used where emit_jump_insn needed:\n"
msgstr ""
@@ -17661,12 +17697,12 @@ msgid ""
"truncated into %wu-bit"
msgstr ""
-#: expr.c:10553
+#: expr.c:10572
#, gcc-internal-format
msgid "%Kcall to %qs declared with attribute error: %s"
msgstr ""
-#: expr.c:10560
+#: expr.c:10579
#, gcc-internal-format
msgid "%Kcall to %qs declared with attribute warning: %s"
msgstr ""
@@ -17696,52 +17732,52 @@ msgstr ""
msgid "large fixed-point constant implicitly truncated to fixed-point type"
msgstr ""
-#: fold-const.c:3901 fold-const.c:3911
+#: fold-const.c:3943 fold-const.c:3953
#, gcc-internal-format, gfc-internal-format
msgid "comparison is always %d due to width of bit-field"
msgstr ""
-#: fold-const.c:5274 tree-ssa-reassoc.c:2064
+#: fold-const.c:5316 tree-ssa-reassoc.c:2144
#, gcc-internal-format
msgid "assuming signed overflow does not occur when simplifying range test"
msgstr ""
-#: fold-const.c:5723 fold-const.c:5737
+#: fold-const.c:5765 fold-const.c:5779
#, gcc-internal-format, gfc-internal-format
msgid "comparison is always %d"
msgstr ""
-#: fold-const.c:5872
+#: fold-const.c:5914
#, gcc-internal-format
msgid "%<or%> of unmatched not-equal tests is always 1"
msgstr ""
-#: fold-const.c:5877
+#: fold-const.c:5919
#, gcc-internal-format
msgid "%<and%> of mutually exclusive equal-tests is always 0"
msgstr ""
-#: fold-const.c:8226
+#: fold-const.c:8267
#, gcc-internal-format
msgid ""
"assuming signed overflow does not occur when reducing constant in comparison"
msgstr ""
-#: fold-const.c:8382
+#: fold-const.c:8437
#, gcc-internal-format
msgid ""
"assuming signed overflow does not occur when changing X +- C1 cmp C2 to X "
"cmp C2 -+ C1"
msgstr ""
-#: fold-const.c:8620
+#: fold-const.c:8708
#, gcc-internal-format
msgid ""
"assuming signed overflow does not occur when combining constants around a "
"comparison"
msgstr ""
-#: fold-const.c:12185
+#: fold-const.c:12274
#, gcc-internal-format
msgid "fold check: original tree changed by fold"
msgstr ""
@@ -17751,7 +17787,7 @@ msgstr ""
msgid "total size of local objects too large"
msgstr ""
-#: function.c:1758 gimplify.c:5289
+#: function.c:1758 gimplify.c:5331
#, gcc-internal-format
msgid "impossible constraint in %<asm%>"
msgstr ""
@@ -17831,7 +17867,7 @@ msgstr ""
msgid "%s (program %s)"
msgstr ""
-#: gcc.c:3585 opts-common.c:1117 opts-common.c:1141 opts-global.c:136
+#: gcc.c:3585 opts-common.c:1158 opts-common.c:1182 opts-global.c:136
#, gcc-internal-format
msgid "unrecognized command line option %qs"
msgstr ""
@@ -17980,152 +18016,152 @@ msgstr ""
msgid "%s: -fcompare-debug failure"
msgstr ""
-#: gcc.c:7416
+#: gcc.c:7425
#, gcc-internal-format
msgid "spec failure: more than one arg to SYSROOT_SUFFIX_SPEC"
msgstr ""
-#: gcc.c:7440
+#: gcc.c:7449
#, gcc-internal-format
msgid "spec failure: more than one arg to SYSROOT_HEADERS_SUFFIX_SPEC"
msgstr ""
-#: gcc.c:7684
+#: gcc.c:7740
#, gcc-internal-format
msgid "unrecognized command line option %<-%s%>; did you mean %<-%s%>?"
msgstr ""
-#: gcc.c:7688
+#: gcc.c:7744
#, gcc-internal-format
msgid "unrecognized command line option %<-%s%>"
msgstr ""
-#: gcc.c:7814
+#: gcc.c:7870
#, gcc-internal-format
msgid "not configured with sysroot headers suffix"
msgstr ""
-#: gcc.c:7875
+#: gcc.c:7931
#, gcc-internal-format
msgid "no input files"
msgstr ""
-#: gcc.c:7926
+#: gcc.c:7982
#, gcc-internal-format
msgid "cannot specify -o with -c, -S or -E with multiple files"
msgstr ""
-#: gcc.c:7967
+#: gcc.c:8023
#, gcc-internal-format, gfc-internal-format
msgid "%s: %s compiler not installed on this system"
msgstr ""
-#: gcc.c:7991
+#: gcc.c:8047
#, gcc-internal-format
msgid "recompiling with -fcompare-debug"
msgstr ""
-#: gcc.c:8007
+#: gcc.c:8063
#, gcc-internal-format
msgid "during -fcompare-debug recompilation"
msgstr ""
-#: gcc.c:8016
+#: gcc.c:8072
#, gcc-internal-format
msgid "comparing final insns dumps"
msgstr ""
-#: gcc.c:8133
+#: gcc.c:8189
#, gcc-internal-format, gfc-internal-format
msgid "-fuse-linker-plugin, but %s not found"
msgstr ""
-#: gcc.c:8166
+#: gcc.c:8222
#, gcc-internal-format, gfc-internal-format
msgid "%s: linker input file unused because linking not done"
msgstr ""
-#: gcc.c:8218
+#: gcc.c:8274
#, gcc-internal-format, gfc-internal-format
msgid "language %s not recognized"
msgstr ""
-#: gcc.c:8457
+#: gcc.c:8513
#, gcc-internal-format
msgid "multilib spec %qs is invalid"
msgstr ""
-#: gcc.c:8659
+#: gcc.c:8715
#, gcc-internal-format
msgid "multilib exclusions %qs is invalid"
msgstr ""
-#: gcc.c:8723
+#: gcc.c:8779
#, gcc-internal-format
msgid "multilib select %qs %qs is invalid"
msgstr ""
-#: gcc.c:8885
+#: gcc.c:8941
#, gcc-internal-format
msgid "multilib select %qs is invalid"
msgstr ""
-#: gcc.c:8925
+#: gcc.c:8981
#, gcc-internal-format
msgid "multilib exclusion %qs is invalid"
msgstr ""
-#: gcc.c:9140
+#: gcc.c:9196
#, gcc-internal-format
msgid "environment variable %qs not defined"
msgstr ""
-#: gcc.c:9279 gcc.c:9284
+#: gcc.c:9335 gcc.c:9340
#, gcc-internal-format
msgid "invalid version number %qs"
msgstr ""
-#: gcc.c:9327
+#: gcc.c:9383
#, gcc-internal-format, gfc-internal-format
msgid "too few arguments to %%:version-compare"
msgstr ""
-#: gcc.c:9333
+#: gcc.c:9389
#, gcc-internal-format, gfc-internal-format
msgid "too many arguments to %%:version-compare"
msgstr ""
-#: gcc.c:9375
+#: gcc.c:9431
#, gcc-internal-format
msgid "unknown operator %qs in %%:version-compare"
msgstr ""
-#: gcc.c:9499
+#: gcc.c:9555
#, gcc-internal-format, gfc-internal-format
msgid "too many arguments to %%:compare-debug-dump-opt"
msgstr ""
-#: gcc.c:9572
+#: gcc.c:9628
#, gcc-internal-format, gfc-internal-format
msgid "too many arguments to %%:compare-debug-self-opt"
msgstr ""
-#: gcc.c:9608
+#: gcc.c:9664
#, gcc-internal-format, gfc-internal-format
msgid "too few arguments to %%:compare-debug-auxbase-opt"
msgstr ""
-#: gcc.c:9612
+#: gcc.c:9668
#, gcc-internal-format, gfc-internal-format
msgid "too many arguments to %%:compare-debug-auxbase-opt"
msgstr ""
-#: gcc.c:9619
+#: gcc.c:9675
#, gcc-internal-format, gfc-internal-format
msgid "argument to %%:compare-debug-auxbase-opt does not end in .gk"
msgstr ""
-#: gcc.c:9693
+#: gcc.c:9749
#, gcc-internal-format, gfc-internal-format
msgid "too few arguments to %%:replace-extension"
msgstr ""
@@ -18160,12 +18196,12 @@ msgstr ""
msgid "scale needs to be non-negative\n"
msgstr ""
-#: gcse.c:3978
+#: gcse.c:3986
#, gcc-internal-format, gfc-internal-format
msgid "%s: %d basic blocks and %d edges/basic block"
msgstr ""
-#: gcse.c:3990
+#: gcse.c:3998
#, gcc-internal-format, gfc-internal-format
msgid ""
"%s: %d basic blocks and %d registers; increase --param max-gcse-memory above "
@@ -18254,11 +18290,11 @@ msgstr ""
msgid "can%'t write PCH file"
msgstr ""
-#: gimple-ssa-isolate-paths.c:290 gimple-ssa-isolate-paths.c:447 tree.c:12571
-#: tree.c:12608 c/c-typeck.c:2845 c/c-typeck.c:2929 c/c-typeck.c:9659
-#: c/c-typeck.c:9676 cp/call.c:6149 cp/constexpr.c:746 cp/decl2.c:5100
-#: cp/pt.c:7573 cp/semantics.c:1728 cp/typeck.c:1640 cp/typeck.c:1833
-#: cp/typeck.c:3652
+#: gimple-ssa-isolate-paths.c:290 gimple-ssa-isolate-paths.c:447 tree.c:12589
+#: tree.c:12626 c/c-typeck.c:2847 c/c-typeck.c:2931 c/c-typeck.c:9672
+#: c/c-typeck.c:9689 cp/call.c:6152 cp/constexpr.c:757 cp/constexpr.c:1958
+#: cp/decl2.c:5112 cp/pt.c:7580 cp/semantics.c:1763 cp/typeck.c:1640
+#: cp/typeck.c:1833 cp/typeck.c:3660
#, gcc-internal-format
msgid "declared here"
msgstr ""
@@ -18273,6 +18309,11 @@ msgstr ""
msgid "null pointer dereference"
msgstr ""
+#: gimple-ssa-nonnull-compare.c:102
+#, gcc-internal-format
+msgid "nonnull argument %qD compared to NULL"
+msgstr ""
+
#: gimple-streamer-in.c:210
#, gcc-internal-format, gfc-internal-format
msgid "bytecode stream: unknown GIMPLE statement tag %s"
@@ -18283,208 +18324,218 @@ msgstr ""
msgid "gimple check: expected %s(%s), have %s(%s) in %s, at %s:%d"
msgstr ""
-#: gimplify.c:2555
+#: gimplify.c:2566
#, gcc-internal-format
msgid "using result of function returning %<void%>"
msgstr ""
-#: gimplify.c:5174
+#: gimplify.c:5190
#, gcc-internal-format, gfc-internal-format
msgid "invalid lvalue in asm output %d"
msgstr ""
-#: gimplify.c:5290
+#: gimplify.c:5332
#, gcc-internal-format, gfc-internal-format
msgid "non-memory input %d must stay in memory"
msgstr ""
-#: gimplify.c:5330 gimplify.c:5339
+#: gimplify.c:5372 gimplify.c:5381
#, gcc-internal-format, gfc-internal-format
msgid "memory input %d is not directly addressable"
msgstr ""
-#: gimplify.c:5871
+#: gimplify.c:5913
#, gcc-internal-format
msgid "threadprivate variable %qE used in target region"
msgstr ""
-#: gimplify.c:5873
+#: gimplify.c:5915
#, gcc-internal-format
msgid "enclosing target region"
msgstr ""
-#: gimplify.c:5885
+#: gimplify.c:5927
#, gcc-internal-format
msgid "threadprivate variable %qE used in untied task"
msgstr ""
-#: gimplify.c:5887
+#: gimplify.c:5929
#, gcc-internal-format
msgid "enclosing task"
msgstr ""
-#: gimplify.c:5949
+#: gimplify.c:5991
#, gcc-internal-format
msgid "%qE not specified in enclosing %s"
msgstr ""
-#: gimplify.c:5951
+#: gimplify.c:5993
#, gcc-internal-format, gfc-internal-format
msgid "enclosing %s"
msgstr ""
-#: gimplify.c:6061
+#: gimplify.c:6103
#, gcc-internal-format
msgid "%qE not specified in enclosing OpenACC %qs construct"
msgstr ""
-#: gimplify.c:6063
+#: gimplify.c:6105
#, gcc-internal-format
msgid "enclosing OpenACC %qs construct"
msgstr ""
-#: gimplify.c:6174 gimplify.c:6764
+#: gimplify.c:6156
+#, gcc-internal-format
+msgid "%qE with %<link%> clause used in %<routine%> function"
+msgstr ""
+
+#: gimplify.c:6164
+#, gcc-internal-format
+msgid "%qE requires a %<declare%> directive for use in a %<routine%> function"
+msgstr ""
+
+#: gimplify.c:6240 gimplify.c:6844
#, gcc-internal-format
msgid "variable %qE declared in enclosing %<host_data%> region"
msgstr ""
-#: gimplify.c:6192
+#: gimplify.c:6258
#, gcc-internal-format
msgid "%qD referenced in target region does not have a mappable type"
msgstr ""
-#: gimplify.c:6296 gimplify.c:6328
+#: gimplify.c:6376 gimplify.c:6408
#, gcc-internal-format
msgid "iteration variable %qE is predetermined linear"
msgstr ""
-#: gimplify.c:6299
+#: gimplify.c:6379
#, gcc-internal-format
msgid "iteration variable %qE should be private"
msgstr ""
-#: gimplify.c:6313
+#: gimplify.c:6393
#, gcc-internal-format
msgid "iteration variable %qE should not be firstprivate"
msgstr ""
-#: gimplify.c:6316
+#: gimplify.c:6396
#, gcc-internal-format
msgid "iteration variable %qE should not be reduction"
msgstr ""
-#: gimplify.c:6319
+#: gimplify.c:6399
#, gcc-internal-format
msgid "iteration variable %qE should not be linear"
msgstr ""
-#: gimplify.c:6322
+#: gimplify.c:6402
#, gcc-internal-format
msgid "iteration variable %qE should not be lastprivate"
msgstr ""
-#: gimplify.c:6325
+#: gimplify.c:6405
#, gcc-internal-format
msgid "iteration variable %qE should not be private"
msgstr ""
-#: gimplify.c:6638
+#: gimplify.c:6718
#, gcc-internal-format
msgid ""
"%<linear%> clause for variable other than loop iterator specified on "
"construct combined with %<distribute%>"
msgstr ""
-#: gimplify.c:6833
+#: gimplify.c:6913
#, gcc-internal-format
msgid "mapping field %qE of variable length structure"
msgstr ""
-#: gimplify.c:7009
+#: gimplify.c:7089
#, gcc-internal-format
msgid "%qE appears more than once in map clauses"
msgstr ""
-#: gimplify.c:7301
+#: gimplify.c:7381
#, gcc-internal-format
msgid ""
"copyprivate variable %qE is not threadprivate or private in outer context"
msgstr ""
-#: gimplify.c:7321
+#: gimplify.c:7401
#, gcc-internal-format
msgid "%s variable %qE is private in outer context"
msgstr ""
-#: gimplify.c:7347
+#: gimplify.c:7427
#, gcc-internal-format
msgid "expected %qs %<if%> clause modifier rather than %qs"
msgstr ""
-#: gimplify.c:7847
+#: gimplify.c:7929
#, gcc-internal-format
msgid ""
"same variable used in %<firstprivate%> and %<lastprivate%> clauses on "
"%<distribute%> construct"
msgstr ""
-#: gimplify.c:9806 omp-low.c:3611
+#: gimplify.c:9889 omp-low.c:3621
#, 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:9824
+#: gimplify.c:9907
#, gcc-internal-format
msgid "variable %qE is not an iteration of outermost loop %d, expected %qE"
msgstr ""
-#: gimplify.c:9837
+#: gimplify.c:9920
#, gcc-internal-format
msgid ""
"number of variables in %<depend(sink)%> clause does not match number of "
"iteration variables"
msgstr ""
-#: gimplify.c:9850
+#: gimplify.c:9933
#, gcc-internal-format
msgid "more than one %<depend(source)%> clause on an %<ordered%> construct"
msgstr ""
-#: gimplify.c:9860
+#: gimplify.c:9944
#, gcc-internal-format
msgid ""
"%<depend(source)%> clause specified together with %<depend(sink:)%> clauses "
"on the same construct"
msgstr ""
-#: gimplify.c:10773
+#: gimplify.c:10872
#, gcc-internal-format
msgid "expected %<_Cilk_spawn%> before %<_Cilk_sync%>"
msgstr ""
-#: gimplify.c:11069
+#: gimplify.c:11168
#, gcc-internal-format
msgid "gimplification failed"
msgstr ""
-#: gimplify.c:11539
+#: gimplify.c:11638
#, gcc-internal-format
msgid "first argument to %<va_arg%> not of type %<va_list%>"
msgstr ""
-#: gimplify.c:11555
+#: gimplify.c:11658
#, gcc-internal-format
msgid "%qT is promoted to %qT when passed through %<...%>"
msgstr ""
-#: gimplify.c:11560
+#: gimplify.c:11663
#, gcc-internal-format
msgid "(so you should pass %qT not %qT to %<va_arg%>)"
msgstr ""
-#: gimplify.c:11567
+#: gimplify.c:11670
#, gcc-internal-format
msgid "if this code is reached, the program will abort"
msgstr ""
@@ -18499,7 +18550,7 @@ msgstr ""
msgid "could not open Go dump file %qs: %m"
msgstr ""
-#: graph.c:54 toplev.c:1491 java/jcf-parse.c:1751 java/jcf-parse.c:1890
+#: graph.c:55 toplev.c:1491 java/jcf-parse.c:1751 java/jcf-parse.c:1890
#: objc/objc-act.c:461
#, gcc-internal-format
msgid "can%'t open %s: %m"
@@ -18510,38 +18561,38 @@ msgstr ""
msgid "Graphite loop optimizations cannot be used (isl is not available)."
msgstr ""
-#: hsa-brig.c:900
+#: hsa-brig.c:899
#, gcc-internal-format
msgid "Support for HSA does not implement immediate 16 bit FPU operands"
msgstr ""
-#: hsa-gen.c:1191
+#: hsa-gen.c:1195
#, gcc-internal-format
msgid "HSA SSA name defined by instruction that is supposed to be using it"
msgstr ""
-#: hsa-gen.c:1195 hsa-gen.c:1208
+#: hsa-gen.c:1199 hsa-gen.c:1212
#, gcc-internal-format
msgid "HSA SSA verification failed"
msgstr ""
-#: hsa-gen.c:1204
+#: hsa-gen.c:1208
#, gcc-internal-format
msgid ""
"HSA SSA name not among operands of instruction that is supposed to use it"
msgstr ""
-#: hsa-gen.c:1464
+#: hsa-gen.c:1468
#, gcc-internal-format
msgid "HSA instruction uses a register but is not among recorded register uses"
msgstr ""
-#: hsa-gen.c:1468
+#: hsa-gen.c:1472
#, gcc-internal-format
msgid "HSA instruction verification failed"
msgstr ""
-#: hsa.c:239
+#: hsa.c:240
#, gcc-internal-format
msgid "HSA image ops not handled"
msgstr ""
@@ -18571,326 +18622,326 @@ msgstr ""
msgid "function cannot be instrumented"
msgstr ""
-#: ipa-devirt.c:728 ipa-devirt.c:881
+#: ipa-devirt.c:751 ipa-devirt.c:902
#, gcc-internal-format
msgid "virtual table of type %qD violates one definition rule"
msgstr ""
-#: ipa-devirt.c:731
+#: ipa-devirt.c:754
#, gcc-internal-format
msgid ""
"variable of same assembler name as the virtual table is defined in another "
"translation unit"
msgstr ""
-#: ipa-devirt.c:770
+#: ipa-devirt.c:793
#, gcc-internal-format
msgid "virtual table of type %qD contains RTTI information"
msgstr ""
-#: ipa-devirt.c:776
+#: ipa-devirt.c:799
#, gcc-internal-format
msgid "but is prevailed by one without from other translation unit"
msgstr ""
-#: ipa-devirt.c:780
+#: ipa-devirt.c:803
#, gcc-internal-format
msgid "RTTI will not work on this type"
msgstr ""
-#: ipa-devirt.c:811 ipa-devirt.c:840 ipa-devirt.c:911
+#: ipa-devirt.c:833 ipa-devirt.c:861 ipa-devirt.c:932
#, gcc-internal-format
msgid "virtual table of type %qD violates one definition rule "
msgstr ""
-#: ipa-devirt.c:817
+#: ipa-devirt.c:839
#, gcc-internal-format
msgid ""
"the conflicting type defined in another translation unit has virtual table "
"of different size"
msgstr ""
-#: ipa-devirt.c:846
+#: ipa-devirt.c:867
#, gcc-internal-format
msgid ""
"the conflicting type defined in another translation unit with different RTTI "
"information"
msgstr ""
-#: ipa-devirt.c:889 ipa-devirt.c:919
+#: ipa-devirt.c:910 ipa-devirt.c:940
#, gcc-internal-format
msgid "the conflicting type defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:893
+#: ipa-devirt.c:914
#, gcc-internal-format
msgid "contains additional virtual method %qD"
msgstr ""
-#: ipa-devirt.c:900
+#: ipa-devirt.c:921
#, gcc-internal-format
msgid ""
"the conflicting type defined in another translation unit has virtual table "
"with more entries"
msgstr ""
-#: ipa-devirt.c:924
+#: ipa-devirt.c:946
#, gcc-internal-format
msgid "virtual method %qD"
msgstr ""
-#: ipa-devirt.c:926
+#: ipa-devirt.c:950
#, gcc-internal-format
msgid "ought to match virtual method %qD but does not"
msgstr ""
-#: ipa-devirt.c:932
+#: ipa-devirt.c:956
#, gcc-internal-format
msgid ""
"the conflicting type defined in another translation unit has virtual table "
"with different contents"
msgstr ""
-#: ipa-devirt.c:962
+#: ipa-devirt.c:986
#, gcc-internal-format
msgid "type %qT violates the C++ One Definition Rule"
msgstr ""
-#: ipa-devirt.c:973 ipa-devirt.c:988 ipa-devirt.c:1238 ipa-devirt.c:1330
-#: ipa-devirt.c:1369 ipa-devirt.c:1387
+#: ipa-devirt.c:997 ipa-devirt.c:1012 ipa-devirt.c:1262 ipa-devirt.c:1354
+#: ipa-devirt.c:1393 ipa-devirt.c:1411
#, gcc-internal-format
msgid "a different type is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:980
+#: ipa-devirt.c:1004
#, gcc-internal-format
msgid "the first difference of corresponding definitions is field %qD"
msgstr ""
-#: ipa-devirt.c:990
+#: ipa-devirt.c:1014
#, gcc-internal-format
msgid "the first difference of corresponding definitions is method %qD"
msgstr ""
-#: ipa-devirt.c:1084
+#: ipa-devirt.c:1108
#, gcc-internal-format
msgid ""
"type %qT defined in anonymous namespace can not match type %qT across the "
"translation unit boundary"
msgstr ""
-#: ipa-devirt.c:1089
+#: ipa-devirt.c:1113
#, gcc-internal-format
msgid ""
"type %qT defined in anonymous namespace can not match across the translation "
"unit boundary"
msgstr ""
-#: ipa-devirt.c:1094
+#: ipa-devirt.c:1118
#, gcc-internal-format
msgid "the incompatible type defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1117
+#: ipa-devirt.c:1141
#, gcc-internal-format
msgid "type name %<%s%> should match type name %<%s%>"
msgstr ""
-#: ipa-devirt.c:1121 ipa-devirt.c:1213
+#: ipa-devirt.c:1145 ipa-devirt.c:1237
#, gcc-internal-format
msgid "the incompatible type is defined here"
msgstr ""
-#: ipa-devirt.c:1149
+#: ipa-devirt.c:1173
#, gcc-internal-format
msgid "array types have different bounds"
msgstr ""
-#: ipa-devirt.c:1164
+#: ipa-devirt.c:1188
#, gcc-internal-format
msgid "return value type mismatch"
msgstr ""
-#: ipa-devirt.c:1179
+#: ipa-devirt.c:1203
#, gcc-internal-format
msgid "implicit this pointer type mismatch"
msgstr ""
-#: ipa-devirt.c:1182
+#: ipa-devirt.c:1206
#, gcc-internal-format, gfc-internal-format
msgid "type mismatch in parameter %i"
msgstr ""
-#: ipa-devirt.c:1193
+#: ipa-devirt.c:1217
#, gcc-internal-format
msgid "types have different parameter counts"
msgstr ""
-#: ipa-devirt.c:1204
+#: ipa-devirt.c:1228
#, gcc-internal-format
msgid "type %qT itself violate the C++ One Definition Rule"
msgstr ""
-#: ipa-devirt.c:1210
+#: ipa-devirt.c:1234
#, gcc-internal-format
msgid "type %qT should match type %qT"
msgstr ""
-#: ipa-devirt.c:1245
+#: ipa-devirt.c:1269
#, gcc-internal-format
msgid "a type with different qualifiers is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1263
+#: ipa-devirt.c:1287
#, gcc-internal-format
msgid "a type with different attributes is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1278
+#: ipa-devirt.c:1302
#, gcc-internal-format
msgid ""
"an enum with different value name is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1287
+#: ipa-devirt.c:1311
#, gcc-internal-format
msgid "an enum with different values is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1295
+#: ipa-devirt.c:1319
#, gcc-internal-format
msgid ""
"an enum with mismatching number of values is defined in another translation "
"unit"
msgstr ""
-#: ipa-devirt.c:1313
+#: ipa-devirt.c:1337
#, gcc-internal-format
msgid "a type with different precision is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1320
+#: ipa-devirt.c:1344
#, gcc-internal-format
msgid "a type with different signedness is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1345
+#: ipa-devirt.c:1369
#, gcc-internal-format
msgid ""
"it is defined as a pointer in different address space in another translation "
"unit"
msgstr ""
-#: ipa-devirt.c:1354
+#: ipa-devirt.c:1378
#, gcc-internal-format
msgid ""
"it is defined as a pointer to different type in another translation unit"
msgstr ""
-#: ipa-devirt.c:1414
+#: ipa-devirt.c:1438
#, gcc-internal-format
msgid "an array of different size is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1429
+#: ipa-devirt.c:1453
#, gcc-internal-format
msgid "has different return value in another translation unit"
msgstr ""
-#: ipa-devirt.c:1452 ipa-devirt.c:1464
+#: ipa-devirt.c:1476 ipa-devirt.c:1488
#, gcc-internal-format
msgid "has different parameters in another translation unit"
msgstr ""
-#: ipa-devirt.c:1487
+#: ipa-devirt.c:1511
#, gcc-internal-format
msgid "a type defined in another translation unit is not polymorphic"
msgstr ""
-#: ipa-devirt.c:1491
+#: ipa-devirt.c:1515
#, gcc-internal-format
msgid "a type defined in another translation unit is polymorphic"
msgstr ""
-#: ipa-devirt.c:1509 ipa-devirt.c:1565
+#: ipa-devirt.c:1533 ipa-devirt.c:1589
#, gcc-internal-format
msgid ""
"a type with different virtual table pointers is defined in another "
"translation unit"
msgstr ""
-#: ipa-devirt.c:1516 ipa-devirt.c:1570
+#: ipa-devirt.c:1540 ipa-devirt.c:1594
#, gcc-internal-format
msgid "a type with different bases is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1524
+#: ipa-devirt.c:1548
#, gcc-internal-format
msgid "a field with different name is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1538
+#: ipa-devirt.c:1562
#, gcc-internal-format
msgid ""
"a field of same name but different type is defined in another translation "
"unit"
msgstr ""
-#: ipa-devirt.c:1551
+#: ipa-devirt.c:1575
#, gcc-internal-format
msgid "fields has different layout in another translation unit"
msgstr ""
-#: ipa-devirt.c:1574
+#: ipa-devirt.c:1598
#, gcc-internal-format
msgid ""
"a type with different number of fields is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1598
+#: ipa-devirt.c:1622
#, gcc-internal-format
msgid "a different method of same type is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1606
+#: ipa-devirt.c:1630
#, gcc-internal-format
msgid ""
"s definition that differs by virtual keyword in another translation unit"
msgstr ""
-#: ipa-devirt.c:1613
+#: ipa-devirt.c:1637
#, gcc-internal-format
msgid "virtual table layout differs in another translation unit"
msgstr ""
-#: ipa-devirt.c:1622
+#: ipa-devirt.c:1646
#, gcc-internal-format
msgid "method with incompatible type is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1630
+#: ipa-devirt.c:1654
#, gcc-internal-format
msgid ""
"a type with different number of methods is defined in another translation "
"unit"
msgstr ""
-#: ipa-devirt.c:1652
+#: ipa-devirt.c:1676
#, gcc-internal-format
msgid "a type with different size is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1660
+#: ipa-devirt.c:1684
#, gcc-internal-format
msgid "a type with different alignment is defined in another translation unit"
msgstr ""
-#: ipa-devirt.c:1783
+#: ipa-devirt.c:1807
#, gcc-internal-format
msgid "the extra base is defined here"
msgstr ""
-#: ipa-devirt.c:3750
+#: ipa-devirt.c:3777
#, gcc-internal-format
msgid "Declaring type %qD final would enable devirtualization of %i call"
msgid_plural ""
@@ -18898,7 +18949,7 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: ipa-devirt.c:3759
+#: ipa-devirt.c:3786
#, gcc-internal-format
msgid ""
"Declaring type %qD final would enable devirtualization of %i call executed "
@@ -18909,7 +18960,7 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: ipa-devirt.c:3788
+#: ipa-devirt.c:3815
#, gcc-internal-format
msgid ""
"Declaring virtual destructor of %qD final would enable devirtualization of "
@@ -18920,7 +18971,7 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: ipa-devirt.c:3796
+#: ipa-devirt.c:3823
#, gcc-internal-format
msgid "Declaring method %qD final would enable devirtualization of %i call"
msgid_plural ""
@@ -18928,7 +18979,7 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: ipa-devirt.c:3804
+#: ipa-devirt.c:3831
#, gcc-internal-format
msgid ""
"Declaring virtual destructor of %qD final would enable devirtualization of "
@@ -18939,7 +18990,7 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: ipa-devirt.c:3814
+#: ipa-devirt.c:3841
#, gcc-internal-format
msgid ""
"Declaring method %qD final would enable devirtualization of %i call executed "
@@ -18965,21 +19016,26 @@ msgstr ""
msgid "ipa reference summary is missing in ltrans unit"
msgstr ""
-#: ira.c:2308 ira.c:2322 ira.c:2336
+#: ira.c:2309 ira.c:2323 ira.c:2337
#, gcc-internal-format, gfc-internal-format
msgid "%s cannot be used in asm here"
msgstr ""
-#: ira.c:5481
+#: ira.c:5511
#, gcc-internal-format
msgid "frame pointer required, but reserved"
msgstr ""
-#: ira.c:5482
+#: ira.c:5512
#, gcc-internal-format
msgid "for %qD"
msgstr ""
+#: ira.c:5526
+#, gcc-internal-format
+msgid "frame size too large for reliable stack checking"
+msgstr ""
+
#: lra-assigns.c:1395 reload1.c:1254
#, gcc-internal-format
msgid "%<asm%> operand has impossible constraints"
@@ -18990,17 +19046,17 @@ msgstr ""
msgid "unable to find a register to spill"
msgstr ""
-#: lra-assigns.c:1625
+#: lra-assigns.c:1630
#, gcc-internal-format, gfc-internal-format
msgid "Maximum number of LRA assignment passes is achieved (%d)\n"
msgstr ""
-#: lra-constraints.c:3495 reload.c:3831 reload.c:4086
+#: lra-constraints.c:3566 reload.c:3831 reload.c:4086
#, gcc-internal-format
msgid "inconsistent operand constraints in an %<asm%>"
msgstr ""
-#: lra-constraints.c:4344
+#: lra-constraints.c:4429
#, gcc-internal-format, gfc-internal-format
msgid "Max. number of generated reload insns per insn is achieved (%d)\n"
msgstr ""
@@ -19045,7 +19101,7 @@ msgstr ""
msgid "cannot find LTO section refs in %s"
msgstr ""
-#: lto-cgraph.c:1933
+#: lto-cgraph.c:1935
#, gcc-internal-format, gfc-internal-format
msgid "invalid offload table in %s"
msgstr ""
@@ -19092,12 +19148,12 @@ msgstr ""
msgid "Reference statement index not found"
msgstr ""
-#: lto-streamer-in.c:1512
+#: lto-streamer-in.c:1513
#, gcc-internal-format, gfc-internal-format
msgid "cannot read LTO mode table from %s"
msgstr ""
-#: lto-streamer-in.c:1610
+#: lto-streamer-in.c:1611
#, gcc-internal-format, gfc-internal-format
msgid "unsupported mode %s\n"
msgstr ""
@@ -19119,57 +19175,72 @@ msgid ""
"%d"
msgstr ""
-#: lto-wrapper.c:112
+#: lto-wrapper.c:114
#, gcc-internal-format
msgid "deleting LTRANS file %s: %m"
msgstr ""
-#: lto-wrapper.c:149
+#: lto-wrapper.c:151
#, gcc-internal-format
msgid "malformed COLLECT_GCC_OPTIONS"
msgstr ""
-#: lto-wrapper.c:304 lto-wrapper.c:316
+#: lto-wrapper.c:307
+#, gcc-internal-format, gfc-internal-format
+msgid "Option %s with different values"
+msgstr ""
+
+#: lto-wrapper.c:318 lto-wrapper.c:330
#, gcc-internal-format, gfc-internal-format
msgid "Option %s not used consistently in all LTO input files"
msgstr ""
-#: lto-wrapper.c:771
+#: lto-wrapper.c:815
#, gcc-internal-format, gfc-internal-format
msgid "problem with building target image for %s\n"
msgstr ""
-#: lto-wrapper.c:791
+#: lto-wrapper.c:835
#, gcc-internal-format
msgid "reading input file"
msgstr ""
-#: lto-wrapper.c:796
+#: lto-wrapper.c:840
#, gcc-internal-format
msgid "writing output file"
msgstr ""
-#: lto-wrapper.c:822
+#: lto-wrapper.c:870
#, gcc-internal-format
-msgid "installation error, can't find crtoffloadend.o"
+msgid "installation error, can't find crtoffloadtable.o"
msgstr ""
-#: lto-wrapper.c:834
+#: lto-wrapper.c:974
#, gcc-internal-format
-msgid "installation error, can't find crtoffloadbegin.o"
+msgid "environment variable COLLECT_GCC must be set"
msgstr ""
-#: lto-wrapper.c:938
+#: lto-wrapper.c:978 config/nvptx/mkoffload.c:361
#, gcc-internal-format
-msgid "environment variable COLLECT_GCC must be set"
+msgid "environment variable COLLECT_GCC_OPTIONS must be set"
msgstr ""
-#: lto-wrapper.c:942 config/nvptx/mkoffload.c:361
+#: lto-wrapper.c:1135 lto-wrapper.c:1191
#, gcc-internal-format
-msgid "environment variable COLLECT_GCC_OPTIONS must be set"
+msgid "cannot open %s: %m"
msgstr ""
-#: lto-wrapper.c:1211
+#: lto-wrapper.c:1138 lto-wrapper.c:1197
+#, gcc-internal-format
+msgid "cannot read %s: %m"
+msgstr ""
+
+#: lto-wrapper.c:1165
+#, gcc-internal-format, gfc-internal-format
+msgid "invalid format of %s"
+msgstr ""
+
+#: lto-wrapper.c:1301
#, gcc-internal-format
msgid "fopen: %s: %m"
msgstr ""
@@ -19204,112 +19275,117 @@ msgstr ""
msgid "attribute(target_clones(\"default\")) is not valid for current target"
msgstr ""
-#: omp-low.c:2202 omp-low.c:2370
+#: omp-low.c:2203 omp-low.c:2371
#, gcc-internal-format
msgid "Clause not supported yet"
msgstr ""
-#: omp-low.c:2967 omp-low.c:20751
+#: omp-low.c:2970 omp-low.c:21009
#, gcc-internal-format
msgid "%<seq%> overrides other OpenACC loop specifiers"
msgstr ""
-#: omp-low.c:2970
+#: omp-low.c:2973
#, gcc-internal-format
msgid "%<auto%> conflicts with other OpenACC loop specifiers"
msgstr ""
-#: omp-low.c:2974
+#: omp-low.c:2977
#, gcc-internal-format
msgid "inner loop uses same OpenACC parallelism as containing loop"
msgstr ""
-#: omp-low.c:3021
+#: omp-low.c:3024
#, gcc-internal-format
msgid "argument not permitted on %qs clause in OpenACC %<parallel%>"
msgstr ""
-#: omp-low.c:3249
+#: omp-low.c:3250
+#, gcc-internal-format
+msgid "non-OpenACC construct inside of OpenACC routine"
+msgstr ""
+
+#: omp-low.c:3259
#, gcc-internal-format
msgid "non-OpenACC construct inside of OpenACC region"
msgstr ""
-#: omp-low.c:3274
+#: omp-low.c:3284
#, gcc-internal-format
msgid ""
"%<ordered simd threads%> must be closely nested inside of %<for simd%> region"
msgstr ""
-#: omp-low.c:3282
+#: omp-low.c:3292
#, gcc-internal-format
msgid ""
"OpenMP constructs other than %<#pragma omp ordered simd%> may not be nested "
"inside %<simd%> region"
msgstr ""
-#: omp-low.c:3294
+#: omp-low.c:3304
#, gcc-internal-format
msgid ""
"only %<distribute%> or %<parallel%> regions are allowed to be strictly "
"nested inside %<teams%> region"
msgstr ""
-#: omp-low.c:3311
+#: omp-low.c:3321
#, gcc-internal-format
msgid ""
"%<distribute%> region must be strictly nested inside %<teams%> construct"
msgstr ""
-#: omp-low.c:3352
+#: omp-low.c:3362
#, gcc-internal-format
msgid ""
"OpenACC loop directive must be associated with an OpenACC compute region"
msgstr ""
-#: omp-low.c:3374
+#: omp-low.c:3384
#, gcc-internal-format
msgid "orphaned %qs construct"
msgstr ""
-#: omp-low.c:3403
+#: omp-low.c:3413
#, gcc-internal-format
msgid "%<#pragma omp cancel for%> inside %<nowait%> for construct"
msgstr ""
-#: omp-low.c:3408
+#: omp-low.c:3418
#, gcc-internal-format
msgid "%<#pragma omp cancel for%> inside %<ordered%> for construct"
msgstr ""
-#: omp-low.c:3428 omp-low.c:3441
+#: omp-low.c:3438 omp-low.c:3451
#, gcc-internal-format
msgid "%<#pragma omp cancel sections%> inside %<nowait%> sections construct"
msgstr ""
-#: omp-low.c:3467
+#: omp-low.c:3477
#, gcc-internal-format
msgid ""
"%<%s taskgroup%> construct not closely nested inside of %<taskgroup%> region"
msgstr ""
-#: omp-low.c:3481
+#: omp-low.c:3491
#, gcc-internal-format
msgid "invalid arguments"
msgstr ""
-#: omp-low.c:3487
+#: omp-low.c:3497
#, gcc-internal-format
msgid "%<%s %s%> construct not closely nested inside of %qs"
msgstr ""
-#: omp-low.c:3515
+#: omp-low.c:3525
#, 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:3522
+#: omp-low.c:3532
#, gcc-internal-format
msgid ""
"work-sharing region may not be closely nested inside of work-sharing, "
@@ -19317,189 +19393,201 @@ msgid ""
"region"
msgstr ""
-#: omp-low.c:3551
+#: omp-low.c:3561
#, gcc-internal-format
msgid ""
"%<master%> region may not be closely nested inside of work-sharing, explicit "
"%<task%> or %<taskloop%> region"
msgstr ""
-#: omp-low.c:3575 omp-low.c:3714
+#: omp-low.c:3585 omp-low.c:3724
#, gcc-internal-format
msgid "%<depend(%s)%> is only allowed in %<omp ordered%>"
msgstr ""
-#: omp-low.c:3603
+#: omp-low.c:3613
#, gcc-internal-format
msgid ""
"%<ordered%> construct with %<depend%> clause must be closely nested inside "
"an %<ordered%> loop"
msgstr ""
-#: omp-low.c:3620
+#: omp-low.c:3630
#, gcc-internal-format
msgid "invalid depend kind in omp %<ordered%> %<depend%>"
msgstr ""
-#: omp-low.c:3635
+#: omp-low.c:3645
#, gcc-internal-format
msgid "%<ordered%> %<simd%> must be closely nested inside %<simd%> region"
msgstr ""
-#: omp-low.c:3648
+#: omp-low.c:3658
#, gcc-internal-format
msgid ""
"%<ordered%> region may not be closely nested inside of %<critical%>, "
"%<ordered%>, explicit %<task%> or %<taskloop%> region"
msgstr ""
-#: omp-low.c:3659 omp-low.c:3672
+#: omp-low.c:3669 omp-low.c:3682
#, gcc-internal-format
msgid ""
"%<ordered%> region must be closely nested inside a loop region with an "
"%<ordered%> clause"
msgstr ""
-#: omp-low.c:3689
+#: omp-low.c:3699
#, gcc-internal-format
msgid ""
"%<critical%> region may not be nested inside a %<critical%> region with the "
"same name"
msgstr ""
-#: omp-low.c:3701
+#: omp-low.c:3711
#, gcc-internal-format
msgid "%<teams%> construct not closely nested inside of %<target%> construct"
msgstr ""
-#: omp-low.c:3727
+#: omp-low.c:3732
+#, gcc-internal-format
+msgid ""
+"OpenACC region inside of OpenACC routine, nested parallelism not supported "
+"yet"
+msgstr ""
+
+#: omp-low.c:3745
#, gcc-internal-format
msgid "OpenACC construct inside of non-OpenACC region"
msgstr ""
-#: omp-low.c:3772
+#: omp-low.c:3790
#, gcc-internal-format
msgid "%s %qs construct inside of %s %qs region"
msgstr ""
-#: omp-low.c:3785 omp-low.c:3792
+#: omp-low.c:3803 omp-low.c:3810
#, gcc-internal-format
msgid "%qs construct inside of %qs region"
msgstr ""
-#: omp-low.c:3904
+#: omp-low.c:3922
#, gcc-internal-format
msgid "setjmp/longjmp inside simd construct"
msgstr ""
-#: omp-low.c:7936
+#: omp-low.c:7961
#, gcc-internal-format
msgid "%<depend(sink)%> clause waiting for lexically later iteration"
msgstr ""
-#: omp-low.c:8023
+#: omp-low.c:8048
#, gcc-internal-format
msgid "%<depend(sink)%> refers to iteration never in the iteration space"
msgstr ""
-#: omp-low.c:12563
+#: omp-low.c:12588
#, gcc-internal-format
msgid "multiple loop axes specified for routine"
msgstr ""
-#: omp-low.c:14578
+#: omp-low.c:14600
#, gcc-internal-format
msgid ""
"ignoring sink clause with offset that is not a multiple of the loop step"
msgstr ""
-#: omp-low.c:14601
+#: omp-low.c:14623
#, gcc-internal-format
msgid "first offset must be in opposite direction of loop iterations"
msgstr ""
-#: omp-low.c:17957
+#: omp-low.c:18031
#, gcc-internal-format, gfc-internal-format
msgid "invalid exit from %s structured block"
msgstr ""
-#: omp-low.c:17959 omp-low.c:17964
+#: omp-low.c:18033 omp-low.c:18038
#, gcc-internal-format, gfc-internal-format
msgid "invalid entry to %s structured block"
msgstr ""
#. Otherwise, be vague and lazy, but efficient.
-#: omp-low.c:17968
+#: omp-low.c:18042
#, gcc-internal-format, gfc-internal-format
msgid "invalid branch to/from %s structured block"
msgstr ""
-#: omp-low.c:18501
+#: omp-low.c:18575
#, gcc-internal-format
msgid "ignoring large linear step"
msgstr ""
-#: omp-low.c:18508
+#: omp-low.c:18582
#, gcc-internal-format
msgid "ignoring zero linear step"
msgstr ""
-#: omp-low.c:20778
+#: omp-low.c:20449
+#, gcc-internal-format, gfc-internal-format
+msgid "-fopenacc-dim operand is malformed at '%s'"
+msgstr ""
+
+#: omp-low.c:21036
#, gcc-internal-format, gfc-internal-format
msgid "%s uses same OpenACC parallelism as containing loop"
msgstr ""
-#: omp-low.c:20780 omp-low.c:20809
+#: omp-low.c:21038 omp-low.c:21067
#, gcc-internal-format
msgid "containing loop here"
msgstr ""
-#: omp-low.c:20784
+#: omp-low.c:21042
#, gcc-internal-format, gfc-internal-format
msgid "%s uses OpenACC parallelism disallowed by containing routine"
msgstr ""
-#: omp-low.c:20789
+#: omp-low.c:21047
#, gcc-internal-format
msgid "routine %qD declared here"
msgstr ""
-#: omp-low.c:20802
+#: omp-low.c:21060
#, gcc-internal-format
msgid "incorrectly nested OpenACC loop parallelism"
msgstr ""
-#: omp-low.c:20866
+#: omp-low.c:21124
#, gcc-internal-format
msgid "insufficient partitioning available to parallelize loop"
msgstr ""
-#: optabs.c:4177
+#: optabs.c:4194
#, gcc-internal-format
msgid "indirect jumps are not available on this target"
msgstr ""
-#: opts-common.c:1038
+#: opts-common.c:1079
#, gcc-internal-format
msgid "command line option %qs is not supported by this configuration"
msgstr ""
-#: opts-common.c:1048
+#: opts-common.c:1089
#, gcc-internal-format
msgid "missing argument to %qs"
msgstr ""
-#: opts-common.c:1054
+#: opts-common.c:1095
#, gcc-internal-format
msgid "argument to %qs should be a non-negative integer"
msgstr ""
-#: opts-common.c:1069
+#: opts-common.c:1110
#, gcc-internal-format
msgid "unrecognized argument in option %qs"
msgstr ""
-#: opts-common.c:1087
+#: opts-common.c:1128
#, gcc-internal-format
msgid "valid arguments to %qs are: %s"
msgstr ""
@@ -19515,32 +19603,32 @@ msgstr ""
msgid "command line option %qs is valid for %s but not for %s"
msgstr ""
-#: opts-global.c:360
+#: opts-global.c:364
#, gcc-internal-format
msgid "unrecognized command line option %<-fdump-%s%>"
msgstr ""
-#: opts-global.c:365
+#: opts-global.c:369
#, gcc-internal-format
msgid "unrecognized command line option %<-fopt-info-%s%>"
msgstr ""
-#: opts-global.c:386 opts-global.c:394
+#: opts-global.c:390 opts-global.c:398
#, gcc-internal-format
msgid "plugin support is disabled; configure with --enable-plugin"
msgstr ""
-#: opts-global.c:418
+#: opts-global.c:422
#, gcc-internal-format
msgid "unrecognized register name %qs"
msgstr ""
-#: opts-global.c:430
+#: opts-global.c:440
#, gcc-internal-format
msgid "-fasan-shadow-offset should only be used with -fsanitize=kernel-address"
msgstr ""
-#: opts-global.c:433
+#: opts-global.c:443
#, gcc-internal-format
msgid "unrecognized shadow offset %qs"
msgstr ""
@@ -19588,58 +19676,58 @@ msgstr ""
msgid "section anchors must be disabled when toplevel reorder is disabled"
msgstr ""
-#: opts.c:808 config/darwin.c:3113
+#: opts.c:813 config/darwin.c:3113
#, gcc-internal-format
msgid ""
"-freorder-blocks-and-partition does not work with exceptions on this "
"architecture"
msgstr ""
-#: opts.c:824
+#: opts.c:829
#, gcc-internal-format
msgid ""
"-freorder-blocks-and-partition does not support unwind info on this "
"architecture"
msgstr ""
-#: opts.c:842 config/pa/pa.c:526
+#: opts.c:847 config/pa/pa.c:526
#, gcc-internal-format
msgid "-freorder-blocks-and-partition does not work on this architecture"
msgstr ""
-#: opts.c:893
+#: opts.c:898
#, gcc-internal-format
msgid "-fno-fat-lto-objects are supported only with linker plugin"
msgstr ""
-#: opts.c:906
+#: opts.c:911
#, gcc-internal-format
msgid "%<-fsplit-stack%> is not supported by this compiler configuration"
msgstr ""
-#: opts.c:939
+#: opts.c:944
#, gcc-internal-format
msgid "-fsanitize=address is incompatible with -fsanitize=kernel-address"
msgstr ""
-#: opts.c:947
+#: opts.c:952
#, gcc-internal-format
msgid ""
"-fsanitize=address and -fsanitize=kernel-address are incompatible with -"
"fsanitize=thread"
msgstr ""
-#: opts.c:953
+#: opts.c:958
#, gcc-internal-format
msgid "-fsanitize-recover=thread is not supported"
msgstr ""
-#: opts.c:956
+#: opts.c:961
#, gcc-internal-format
msgid "-fsanitize-recover=leak is not supported"
msgstr ""
-#: opts.c:1370
+#: opts.c:1375
#, gcc-internal-format
msgid "unrecognized include_flags 0x%x passed to print_specific_help"
msgstr ""
@@ -19977,22 +20065,22 @@ msgstr ""
msgid "output operand %d must use %<&%> constraint"
msgstr ""
-#: regcprop.c:1152
+#: regcprop.c:1171
#, gcc-internal-format, gfc-internal-format
msgid "validate_value_data: [%u] Bad next_regno for empty chain (%u)"
msgstr ""
-#: regcprop.c:1164
+#: regcprop.c:1183
#, gcc-internal-format, gfc-internal-format
msgid "validate_value_data: Loop in regno chain (%u)"
msgstr ""
-#: regcprop.c:1167
+#: regcprop.c:1186
#, gcc-internal-format, gfc-internal-format
msgid "validate_value_data: [%u] Bad oldest_regno (%u)"
msgstr ""
-#: regcprop.c:1179
+#: regcprop.c:1198
#, gcc-internal-format, gfc-internal-format
msgid "validate_value_data: [%u] Non-empty reg in chain (%s %u %i)"
msgstr ""
@@ -20013,8 +20101,8 @@ msgid "can%'t use %qs as a fixed register"
msgstr ""
#: reginfo.c:750 config/ia64/ia64.c:5940 config/ia64/ia64.c:5947
-#: config/pa/pa.c:437 config/pa/pa.c:444 config/sh/sh.c:9625
-#: config/sh/sh.c:9632 config/spu/spu.c:4903 config/spu/spu.c:4910
+#: config/pa/pa.c:437 config/pa/pa.c:444 config/sh/sh.c:9627
+#: config/sh/sh.c:9634 config/spu/spu.c:4903 config/spu/spu.c:4910
#, gcc-internal-format, gfc-internal-format
msgid "unknown register name: %s"
msgstr ""
@@ -20034,7 +20122,7 @@ msgstr ""
msgid "register of %qD used for multiple global register variables"
msgstr ""
-#: reginfo.c:777 config/rs6000/rs6000.c:27626
+#: reginfo.c:777 config/rs6000/rs6000.c:27645
#, gcc-internal-format
msgid "conflicts with %qD"
msgstr ""
@@ -20059,37 +20147,27 @@ msgstr ""
msgid "%<&%> constraint used with no register class"
msgstr ""
-#: reload1.c:1274
-#, gcc-internal-format
-msgid "frame size too large for reliable stack checking"
-msgstr ""
-
-#: reload1.c:1277
-#, gcc-internal-format
-msgid "try reducing the number of local variables"
-msgstr ""
-
-#: reload1.c:2098
+#: reload1.c:2076
#, gcc-internal-format
msgid "can%'t find a register in class %qs while reloading %<asm%>"
msgstr ""
-#: reload1.c:2103
+#: reload1.c:2081
#, gcc-internal-format
msgid "unable to find a register to spill in class %qs"
msgstr ""
-#: reload1.c:4719
+#: reload1.c:4697
#, gcc-internal-format
msgid "%<asm%> operand requires impossible reload"
msgstr ""
-#: reload1.c:6140
+#: reload1.c:6118
#, gcc-internal-format
msgid "%<asm%> operand constraint incompatible with operand size"
msgstr ""
-#: reload1.c:8030
+#: reload1.c:8010
#, gcc-internal-format
msgid "output operand is constant in %<asm%>"
msgstr ""
@@ -20412,17 +20490,17 @@ msgid ""
"list."
msgstr ""
-#: symtab.c:1567
+#: symtab.c:1622
#, gcc-internal-format
msgid "function %q+D part of alias cycle"
msgstr ""
-#: symtab.c:1569
+#: symtab.c:1624
#, gcc-internal-format
msgid "variable %q+D part of alias cycle"
msgstr ""
-#: symtab.c:1597
+#: symtab.c:1652
#, gcc-internal-format
msgid "section of alias %q+D must match section of its target"
msgstr ""
@@ -20442,12 +20520,12 @@ msgstr ""
msgid "nested function trampolines not supported on this target"
msgstr ""
-#: targhooks.c:1326
+#: targhooks.c:1330
#, gcc-internal-format
msgid "target attribute is not supported on this machine"
msgstr ""
-#: targhooks.c:1340
+#: targhooks.c:1344
#, gcc-internal-format
msgid "#pragma GCC target is not supported for this machine"
msgstr ""
@@ -20812,8 +20890,7 @@ msgstr ""
#: tree-cfg.c:2965
#, gcc-internal-format
msgid ""
-"mode precision of non-integral result does not match field size of "
-"BIT_FIELD_REF"
+"mode size of non-integral result does not match field size of BIT_FIELD_REF"
msgstr ""
#: tree-cfg.c:2973
@@ -21120,7 +21197,7 @@ msgid ""
"the same number of elements as the result"
msgstr ""
-#: tree-cfg.c:4007 c/c-typeck.c:4955
+#: tree-cfg.c:4007 c/c-typeck.c:4969
#, gcc-internal-format
msgid "type mismatch in conditional expression"
msgstr ""
@@ -21563,89 +21640,89 @@ msgstr ""
msgid "BB %i has incorrect fallthru edge"
msgstr ""
-#: tree-inline.c:3542
+#: tree-inline.c:3528
#, gcc-internal-format
msgid "function %q+F can never be copied because it receives a non-local goto"
msgstr ""
-#: tree-inline.c:3556
+#: tree-inline.c:3535
#, 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:3596
+#: tree-inline.c:3575
#, 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:3610
+#: tree-inline.c:3589
#, gcc-internal-format
msgid "function %q+F can never be inlined because it uses setjmp"
msgstr ""
-#: tree-inline.c:3624
+#: tree-inline.c:3603
#, gcc-internal-format
msgid ""
"function %q+F can never be inlined because it uses variable argument lists"
msgstr ""
-#: tree-inline.c:3636
+#: tree-inline.c:3615
#, gcc-internal-format
msgid ""
"function %q+F can never be inlined because it uses setjmp-longjmp exception "
"handling"
msgstr ""
-#: tree-inline.c:3644
+#: tree-inline.c:3623
#, gcc-internal-format
msgid "function %q+F can never be inlined because it uses non-local goto"
msgstr ""
-#: tree-inline.c:3656
+#: tree-inline.c:3635
#, gcc-internal-format
msgid ""
"function %q+F can never be inlined because it uses __builtin_return or "
"__builtin_apply_args"
msgstr ""
-#: tree-inline.c:3676
+#: tree-inline.c:3655
#, gcc-internal-format
msgid "function %q+F can never be inlined because it contains a computed goto"
msgstr ""
-#: tree-inline.c:3777
+#: tree-inline.c:3756
#, gcc-internal-format
msgid ""
"function %q+F can never be inlined because it is suppressed using -fno-inline"
msgstr ""
-#: tree-inline.c:3785
+#: tree-inline.c:3764
#, gcc-internal-format
msgid ""
"function %q+F can never be inlined because it uses attributes conflicting "
"with inlining"
msgstr ""
-#: tree-inline.c:4446
+#: tree-inline.c:4425
#, gcc-internal-format
msgid "inlining failed in call to always_inline %q+F: %s"
msgstr ""
-#: tree-inline.c:4449 tree-inline.c:4469
+#: tree-inline.c:4428 tree-inline.c:4448
#, gcc-internal-format
msgid "called from here"
msgstr ""
-#: tree-inline.c:4452 tree-inline.c:4472
+#: tree-inline.c:4431 tree-inline.c:4451
#, gcc-internal-format
msgid "called from this function"
msgstr ""
-#: tree-inline.c:4465
+#: tree-inline.c:4444
#, gcc-internal-format
msgid "inlining failed in call to %q+F: %s"
msgstr ""
@@ -21660,8 +21737,8 @@ msgstr ""
msgid "cannot update SSA form"
msgstr ""
-#: tree-into-ssa.c:3282 tree-outof-ssa.c:847 tree-outof-ssa.c:906
-#: tree-ssa-coalesce.c:936 tree-ssa-live.c:1290
+#: tree-into-ssa.c:3282 tree-outof-ssa.c:851 tree-outof-ssa.c:910
+#: tree-ssa-coalesce.c:1010 tree-ssa-live.c:1290
#, gcc-internal-format
msgid "SSA corruption"
msgstr ""
@@ -21873,88 +21950,88 @@ msgid ""
"this target"
msgstr ""
-#: tree-vect-generic.c:263
+#: tree-vect-generic.c:265
#, gcc-internal-format
msgid "vector operation will be expanded piecewise"
msgstr ""
-#: tree-vect-generic.c:266
+#: tree-vect-generic.c:268
#, gcc-internal-format
msgid "vector operation will be expanded in parallel"
msgstr ""
-#: tree-vect-generic.c:317
+#: tree-vect-generic.c:319
#, gcc-internal-format
msgid "vector operation will be expanded with a single scalar operation"
msgstr ""
-#: tree-vect-generic.c:885
+#: tree-vect-generic.c:887
#, gcc-internal-format
msgid "vector condition will be expanded piecewise"
msgstr ""
-#: tree-vect-generic.c:1302
+#: tree-vect-generic.c:1304
#, gcc-internal-format
msgid "vector shuffling operation will be expanded piecewise"
msgstr ""
-#: tree-vect-loop.c:3378
+#: tree-vect-loop.c:3381
#, gcc-internal-format
msgid "vectorization did not happen for a simd loop"
msgstr ""
-#: tree-vrp.c:6498 tree-vrp.c:6538 tree-vrp.c:6619
+#: tree-vrp.c:6500 tree-vrp.c:6540 tree-vrp.c:6621
#, gcc-internal-format
msgid "array subscript is above array bounds"
msgstr ""
-#: tree-vrp.c:6522
+#: tree-vrp.c:6524
#, gcc-internal-format
msgid "array subscript is outside array bounds"
msgstr ""
-#: tree-vrp.c:6551 tree-vrp.c:6606
+#: tree-vrp.c:6553 tree-vrp.c:6608
#, gcc-internal-format
msgid "array subscript is below array bounds"
msgstr ""
-#: tree-vrp.c:7458
+#: tree-vrp.c:7462
#, gcc-internal-format
msgid ""
"assuming signed overflow does not occur when simplifying conditional to "
"constant"
msgstr ""
-#: tree-vrp.c:7464 tree-vrp.c:9428 tree-vrp.c:9472 tree-vrp.c:9535
+#: tree-vrp.c:7468 tree-vrp.c:9432 tree-vrp.c:9476 tree-vrp.c:9539
#, gcc-internal-format
msgid "assuming signed overflow does not occur when simplifying conditional"
msgstr ""
-#: tree-vrp.c:7508
+#: tree-vrp.c:7512
#, gcc-internal-format
msgid "comparison always false due to limited range of data type"
msgstr ""
-#: tree-vrp.c:7510
+#: tree-vrp.c:7514
#, gcc-internal-format
msgid "comparison always true due to limited range of data type"
msgstr ""
-#: tree-vrp.c:9027
+#: tree-vrp.c:9031
#, gcc-internal-format
msgid ""
"assuming signed overflow does not occur when simplifying %</%> or %<%%%> to "
"%<>>%> or %<&%>"
msgstr ""
-#: tree-vrp.c:9092
+#: tree-vrp.c:9096
#, gcc-internal-format
msgid ""
"assuming signed overflow does not occur when simplifying %<min/max (X,Y)%> "
"to %<X%> or %<Y%>"
msgstr ""
-#: tree-vrp.c:9145
+#: tree-vrp.c:9149
#, gcc-internal-format
msgid ""
"assuming signed overflow does not occur when simplifying %<abs (X)%> to %<X"
@@ -21976,169 +22053,169 @@ msgstr ""
msgid "ignoring attributes applied to %qT after definition"
msgstr ""
-#: tree.c:6322
+#: tree.c:6328
#, gcc-internal-format
msgid "%q+D already declared with dllexport attribute: dllimport ignored"
msgstr ""
-#: tree.c:6334
+#: tree.c:6340
#, gcc-internal-format
msgid ""
"%q+D redeclared without dllimport attribute after being referenced with dll "
"linkage"
msgstr ""
-#: tree.c:6349
+#: tree.c:6355
#, gcc-internal-format
msgid "%q+D redeclared without dllimport attribute: previous dllimport ignored"
msgstr ""
-#: tree.c:6392 tree.c:6404 tree.c:6414 c-family/c-common.c:6586
-#: c-family/c-common.c:6605 c-family/c-common.c:6623 c-family/c-common.c:6653
-#: c-family/c-common.c:6681 c-family/c-common.c:6709 c-family/c-common.c:6725
-#: c-family/c-common.c:6740 c-family/c-common.c:6758 c-family/c-common.c:6773
-#: c-family/c-common.c:6805 c-family/c-common.c:6822 c-family/c-common.c:6839
-#: c-family/c-common.c:6877 c-family/c-common.c:6900 c-family/c-common.c:6917
-#: c-family/c-common.c:6945 c-family/c-common.c:6966 c-family/c-common.c:6987
-#: c-family/c-common.c:7014 c-family/c-common.c:7043 c-family/c-common.c:7080
-#: c-family/c-common.c:7133 c-family/c-common.c:7191 c-family/c-common.c:7249
-#: c-family/c-common.c:7338 c-family/c-common.c:7368 c-family/c-common.c:7422
-#: c-family/c-common.c:7893 c-family/c-common.c:7930 c-family/c-common.c:7986
-#: c-family/c-common.c:8042 c-family/c-common.c:8120 c-family/c-common.c:8247
-#: c-family/c-common.c:8309 c-family/c-common.c:8416 c-family/c-common.c:8432
-#: c-family/c-common.c:8448 c-family/c-common.c:8469 c-family/c-common.c:8539
-#: c-family/c-common.c:8566 c-family/c-common.c:8614 c-family/c-common.c:8794
-#: c-family/c-common.c:8815 c-family/c-common.c:8928 c-family/c-common.c:8955
-#: c-family/c-common.c:9268 c-family/c-common.c:9291 c-family/c-common.c:9330
-#: c-family/c-common.c:9412 c-family/c-common.c:9455 c-family/c-common.c:9592
-#: config/darwin.c:2021 config/arm/arm.c:6479 config/arm/arm.c:6507
-#: config/arm/arm.c:6524 config/avr/avr.c:8961 config/h8300/h8300.c:5477
-#: config/h8300/h8300.c:5501 config/i386/i386.c:6833 config/i386/i386.c:44470
-#: config/ia64/ia64.c:756 config/rs6000/rs6000.c:31016 config/spu/spu.c:3738
-#: ada/gcc-interface/utils.c:5965 ada/gcc-interface/utils.c:5991
+#: tree.c:6398 tree.c:6410 tree.c:6420 c-family/c-common.c:6588
+#: c-family/c-common.c:6607 c-family/c-common.c:6625 c-family/c-common.c:6655
+#: c-family/c-common.c:6683 c-family/c-common.c:6711 c-family/c-common.c:6727
+#: c-family/c-common.c:6742 c-family/c-common.c:6760 c-family/c-common.c:6775
+#: c-family/c-common.c:6807 c-family/c-common.c:6824 c-family/c-common.c:6841
+#: c-family/c-common.c:6879 c-family/c-common.c:6902 c-family/c-common.c:6919
+#: c-family/c-common.c:6947 c-family/c-common.c:6968 c-family/c-common.c:6989
+#: c-family/c-common.c:7016 c-family/c-common.c:7045 c-family/c-common.c:7082
+#: c-family/c-common.c:7135 c-family/c-common.c:7193 c-family/c-common.c:7251
+#: c-family/c-common.c:7340 c-family/c-common.c:7370 c-family/c-common.c:7424
+#: c-family/c-common.c:7895 c-family/c-common.c:7932 c-family/c-common.c:7988
+#: c-family/c-common.c:8044 c-family/c-common.c:8122 c-family/c-common.c:8249
+#: c-family/c-common.c:8311 c-family/c-common.c:8418 c-family/c-common.c:8434
+#: c-family/c-common.c:8450 c-family/c-common.c:8471 c-family/c-common.c:8541
+#: c-family/c-common.c:8568 c-family/c-common.c:8616 c-family/c-common.c:8796
+#: c-family/c-common.c:8817 c-family/c-common.c:8930 c-family/c-common.c:8957
+#: c-family/c-common.c:9270 c-family/c-common.c:9293 c-family/c-common.c:9332
+#: c-family/c-common.c:9414 c-family/c-common.c:9457 c-family/c-common.c:9594
+#: config/darwin.c:2021 config/arm/arm.c:6488 config/arm/arm.c:6516
+#: config/arm/arm.c:6533 config/avr/avr.c:8971 config/h8300/h8300.c:5477
+#: config/h8300/h8300.c:5501 config/i386/i386.c:6862 config/i386/i386.c:44531
+#: config/ia64/ia64.c:756 config/rs6000/rs6000.c:31035 config/spu/spu.c:3738
+#: ada/gcc-interface/utils.c:5986 ada/gcc-interface/utils.c:6012
#: lto/lto-lang.c:243
#, gcc-internal-format
msgid "%qE attribute ignored"
msgstr ""
-#: tree.c:6432
+#: tree.c:6438
#, gcc-internal-format
msgid "inline function %q+D declared as dllimport: attribute ignored"
msgstr ""
-#: tree.c:6440
+#: tree.c:6446
#, gcc-internal-format
msgid "function %q+D definition is marked dllimport"
msgstr ""
-#: tree.c:6448
+#: tree.c:6454
#, gcc-internal-format
msgid "variable %q+D definition is marked dllimport"
msgstr ""
-#: tree.c:6476
+#: tree.c:6482
#, gcc-internal-format
msgid "external linkage required for symbol %q+D because of %qE attribute"
msgstr ""
-#: tree.c:6490
+#: tree.c:6496
#, gcc-internal-format
msgid ""
"%qE implies default visibility, but %qD has already been declared with a "
"different visibility"
msgstr ""
-#: tree.c:8239
+#: tree.c:8245
#, gcc-internal-format
msgid "arrays of functions are not meaningful"
msgstr ""
-#: tree.c:8408
+#: tree.c:8414
#, gcc-internal-format
msgid "function return type cannot be function"
msgstr ""
-#: tree.c:9635 tree.c:9720 tree.c:9781
+#: tree.c:9641 tree.c:9726 tree.c:9787
#, gcc-internal-format, gfc-internal-format
msgid "tree check: %s, have %s in %s, at %s:%d"
msgstr ""
-#: tree.c:9672
+#: tree.c:9678
#, gcc-internal-format, gfc-internal-format
msgid "tree check: expected none of %s, have %s in %s, at %s:%d"
msgstr ""
-#: tree.c:9685
+#: tree.c:9691
#, gcc-internal-format
msgid "tree check: expected class %qs, have %qs (%s) in %s, at %s:%d"
msgstr ""
-#: tree.c:9734
+#: tree.c:9740
#, gcc-internal-format
msgid "tree check: did not expect class %qs, have %qs (%s) in %s, at %s:%d"
msgstr ""
-#: tree.c:9747
+#: tree.c:9753
#, gcc-internal-format, gfc-internal-format
msgid "tree check: expected omp_clause %s, have %s in %s, at %s:%d"
msgstr ""
-#: tree.c:9807
+#: tree.c:9813
#, gcc-internal-format
msgid ""
"tree check: expected tree that contains %qs structure, have %qs in %s, at %s:"
"%d"
msgstr ""
-#: tree.c:9821
+#: tree.c:9827
#, 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:9833
+#: tree.c:9839
#, 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:9846
+#: tree.c:9852
#, 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:9859
+#: tree.c:9865
#, 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:12566
+#: tree.c:12584
#, gcc-internal-format
msgid "%qD is deprecated: %s"
msgstr ""
-#: tree.c:12569
+#: tree.c:12587
#, gcc-internal-format
msgid "%qD is deprecated"
msgstr ""
-#: tree.c:12593 tree.c:12615
+#: tree.c:12611 tree.c:12633
#, gcc-internal-format
msgid "%qE is deprecated: %s"
msgstr ""
-#: tree.c:12596 tree.c:12618
+#: tree.c:12614 tree.c:12636
#, gcc-internal-format
msgid "%qE is deprecated"
msgstr ""
-#: tree.c:12602 tree.c:12623
+#: tree.c:12620 tree.c:12641
#, gcc-internal-format, gfc-internal-format
msgid "type is deprecated: %s"
msgstr ""
-#: tree.c:12605 tree.c:12626
+#: tree.c:12623 tree.c:12644
#, gcc-internal-format
msgid "type is deprecated"
msgstr ""
@@ -22165,264 +22242,264 @@ msgstr ""
#. main variant only.
#.
#. Convenience macro for matching individual fields.
-#: tree.c:13028
+#: tree.c:13048
#, gcc-internal-format
msgid "type variant differs by "
msgstr ""
-#: tree.c:13068
+#: tree.c:13088
#, gcc-internal-format
msgid "type variant has different TYPE_SIZE_UNIT"
msgstr ""
-#: tree.c:13070
+#: tree.c:13090
#, gcc-internal-format
msgid "type variant's TYPE_SIZE_UNIT"
msgstr ""
-#: tree.c:13072
+#: tree.c:13092
#, gcc-internal-format
msgid "type's TYPE_SIZE_UNIT"
msgstr ""
-#: tree.c:13092
+#: tree.c:13112
#, gcc-internal-format
msgid "type variant with TYPE_ALIAS_SET_KNOWN_P"
msgstr ""
-#: tree.c:13105
+#: tree.c:13125
#, gcc-internal-format
msgid "type variant has different TYPE_VFIELD"
msgstr ""
-#: tree.c:13122
+#: tree.c:13142
#, gcc-internal-format
msgid "type variant has TYPE_METHODS"
msgstr ""
-#: tree.c:13147
+#: tree.c:13167
#, gcc-internal-format
msgid "type variant has different TYPE_BINFO"
msgstr ""
-#: tree.c:13149
+#: tree.c:13169
#, gcc-internal-format
msgid "type variant's TYPE_BINFO"
msgstr ""
-#: tree.c:13151
+#: tree.c:13171
#, gcc-internal-format
msgid "type's TYPE_BINFO"
msgstr ""
-#: tree.c:13189
+#: tree.c:13209
#, gcc-internal-format
msgid "type variant has different TYPE_FIELDS"
msgstr ""
-#: tree.c:13191
+#: tree.c:13211
#, gcc-internal-format
msgid "first mismatch is field"
msgstr ""
-#: tree.c:13193
+#: tree.c:13213
#, gcc-internal-format
msgid "and field"
msgstr ""
-#: tree.c:13210
+#: tree.c:13230
#, gcc-internal-format
msgid "type variant has different TREE_TYPE"
msgstr ""
-#: tree.c:13212 tree.c:13223
+#: tree.c:13232 tree.c:13243
#, gcc-internal-format
msgid "type variant's TREE_TYPE"
msgstr ""
-#: tree.c:13214 tree.c:13225
+#: tree.c:13234 tree.c:13245
#, gcc-internal-format
msgid "type's TREE_TYPE"
msgstr ""
-#: tree.c:13221
+#: tree.c:13241
#, gcc-internal-format
msgid "type is not compatible with its vairant"
msgstr ""
-#: tree.c:13520
+#: tree.c:13540
#, gcc-internal-format
msgid "Main variant is not defined"
msgstr ""
-#: tree.c:13525
+#: tree.c:13545
#, gcc-internal-format
msgid "TYPE_MAIN_VARIANT has different TYPE_MAIN_VARIANT"
msgstr ""
-#: tree.c:13537
+#: tree.c:13557
#, gcc-internal-format
msgid "TYPE_CANONICAL has different TYPE_CANONICAL"
msgstr ""
-#: tree.c:13555
+#: tree.c:13575
#, gcc-internal-format
msgid "TYPE_CANONICAL is not compatible"
msgstr ""
-#: tree.c:13563
+#: tree.c:13583
#, gcc-internal-format
msgid "TYPE_MODE of TYPE_CANONICAL is not compatible"
msgstr ""
-#: tree.c:13569
+#: tree.c:13589
#, gcc-internal-format
msgid "TYPE_CANONICAL of main variant is not main variant"
msgstr ""
-#: tree.c:13585
+#: tree.c:13605
#, gcc-internal-format
msgid "TYPE_VFIELD is not FIELD_DECL nor TREE_LIST"
msgstr ""
-#: tree.c:13595
+#: tree.c:13615
#, gcc-internal-format
msgid "TYPE_NEXT_PTR_TO is not POINTER_TYPE"
msgstr ""
-#: tree.c:13605
+#: tree.c:13625
#, gcc-internal-format
msgid "TYPE_NEXT_REF_TO is not REFERENCE_TYPE"
msgstr ""
-#: tree.c:13623
+#: tree.c:13643
#, gcc-internal-format
msgid "TYPE_MINVAL non-NULL"
msgstr ""
-#: tree.c:13635
+#: tree.c:13655
#, gcc-internal-format
msgid "TYPE_METHODS is not FUNCTION_DECL, TEMPLATE_DECL nor error_mark_node"
msgstr ""
-#: tree.c:13646
+#: tree.c:13666
#, gcc-internal-format
msgid "TYPE_METHOD_BASETYPE is not record nor union"
msgstr ""
-#: tree.c:13657
+#: tree.c:13677
#, gcc-internal-format
msgid "TYPE_OFFSET_BASETYPE is not record nor union"
msgstr ""
-#: tree.c:13675
+#: tree.c:13695
#, gcc-internal-format
msgid "TYPE_ARRAY_MAX_SIZE not INTEGER_CST"
msgstr ""
-#: tree.c:13682
+#: tree.c:13702
#, gcc-internal-format
msgid "TYPE_MAXVAL non-NULL"
msgstr ""
-#: tree.c:13694
+#: tree.c:13714
#, gcc-internal-format
msgid "TYPE_BINFO is not TREE_BINFO"
msgstr ""
-#: tree.c:13702
+#: tree.c:13722
#, gcc-internal-format
msgid "TYPE_BINFO type is not TYPE_MAIN_VARIANT"
msgstr ""
-#: tree.c:13709
+#: tree.c:13729
#, gcc-internal-format
msgid "TYPE_LANG_SLOT_1 (binfo) field is non-NULL"
msgstr ""
-#: tree.c:13725
+#: tree.c:13745
#, gcc-internal-format
msgid "Enum value is not CONST_DECL or INTEGER_CST"
msgstr ""
-#: tree.c:13733
+#: tree.c:13753
#, gcc-internal-format
msgid "Enum value type is not INTEGER_TYPE nor convertible to the enum"
msgstr ""
-#: tree.c:13740
+#: tree.c:13760
#, gcc-internal-format
msgid "Enum value name is not IDENTIFIER_NODE"
msgstr ""
-#: tree.c:13750
+#: tree.c:13770
#, gcc-internal-format
msgid "Array TYPE_DOMAIN is not integer type"
msgstr ""
-#: tree.c:13759
+#: tree.c:13779
#, gcc-internal-format
msgid "TYPE_FIELDS defined in incomplete type"
msgstr ""
-#: tree.c:13779
+#: tree.c:13799
#, gcc-internal-format
msgid "Wrong tree in TYPE_FIELDS list"
msgstr ""
-#: tree.c:13794
+#: tree.c:13814
#, gcc-internal-format
msgid "TYPE_CACHED_VALUES_P is %i while TYPE_CACHED_VALUES is %p"
msgstr ""
-#: tree.c:13800
+#: tree.c:13820
#, gcc-internal-format
msgid "TYPE_CACHED_VALUES is not TREE_VEC"
msgstr ""
-#: tree.c:13813
+#: tree.c:13833
#, gcc-internal-format
msgid "wrong TYPE_CACHED_VALUES entry"
msgstr ""
-#: tree.c:13826
+#: tree.c:13846
#, gcc-internal-format
msgid "TREE_PURPOSE is non-NULL in TYPE_ARG_TYPES list"
msgstr ""
-#: tree.c:13832
+#: tree.c:13852
#, gcc-internal-format
msgid "Wrong entry in TYPE_ARG_TYPES list"
msgstr ""
-#: tree.c:13839
+#: tree.c:13859
#, gcc-internal-format
msgid "TYPE_VALUES_RAW field is non-NULL"
msgstr ""
-#: tree.c:13851
+#: tree.c:13871
#, gcc-internal-format
msgid "TYPE_CACHED_VALUES_P is set while it should not"
msgstr ""
-#: tree.c:13857
+#: tree.c:13877
#, gcc-internal-format
msgid "TYPE_STRING_FLAG is set on wrong type code"
msgstr ""
-#: tree.c:13869
+#: tree.c:13889
#, gcc-internal-format
msgid ""
"TYPE_STRING_FLAG is set on type that does not look like char nor array of "
"chars"
msgstr ""
-#: tree.c:13881
+#: tree.c:13901
#, gcc-internal-format
msgid "TYPE_METHOD_BASETYPE is not main variant"
msgstr ""
-#: tree.c:13888
+#: tree.c:13908
#, gcc-internal-format
msgid "verify_type failed"
msgstr ""
@@ -22547,7 +22624,7 @@ msgid ""
"requested alignment for %q+D is greater than implemented alignment of %wu"
msgstr ""
-#: varasm.c:2132 c/c-decl.c:4790 c/c-parser.c:1439
+#: varasm.c:2132 c/c-decl.c:4819 c/c-parser.c:1439
#, gcc-internal-format
msgid "storage size of %q+D isn%'t known"
msgstr ""
@@ -22562,62 +22639,62 @@ msgstr ""
msgid "initializer for floating value is not a floating constant"
msgstr ""
-#: varasm.c:5059
+#: varasm.c:5064
#, gcc-internal-format
msgid "invalid initial value for member %qE"
msgstr ""
-#: varasm.c:5319
+#: varasm.c:5324
#, gcc-internal-format
msgid "%+D declared weak after being used"
msgstr ""
-#: varasm.c:5402
+#: varasm.c:5407
#, gcc-internal-format
msgid "weak declaration of %q+D must be public"
msgstr ""
-#: varasm.c:5406
+#: varasm.c:5411
#, gcc-internal-format
msgid "weak declaration of %q+D not supported"
msgstr ""
-#: varasm.c:5435 varasm.c:5739
+#: varasm.c:5440 varasm.c:5744
#, gcc-internal-format
msgid "only weak aliases are supported in this configuration"
msgstr ""
-#: varasm.c:5629
+#: varasm.c:5634
#, gcc-internal-format
msgid "weakref is not supported in this configuration"
msgstr ""
-#: varasm.c:5661
+#: varasm.c:5666
#, gcc-internal-format
msgid "ifunc is not supported on this target"
msgstr ""
-#: varasm.c:5719
+#: varasm.c:5724
#, gcc-internal-format
msgid "weakref %q+D ultimately targets itself"
msgstr ""
-#: varasm.c:5721
+#: varasm.c:5726
#, gcc-internal-format
msgid "weakref %q+D must have static linkage"
msgstr ""
-#: varasm.c:5728
+#: varasm.c:5733
#, gcc-internal-format
msgid "alias definitions not supported in this configuration"
msgstr ""
-#: varasm.c:5736
+#: varasm.c:5741
#, gcc-internal-format
msgid "ifunc is not supported in this configuration"
msgstr ""
-#: varasm.c:5954 config/sol2.c:154 config/i386/winnt.c:260
+#: varasm.c:5959 config/sol2.c:157 config/i386/winnt.c:260
#, gcc-internal-format
msgid "visibility attribute not supported in this configuration; ignored"
msgstr ""
@@ -22697,7 +22774,8 @@ msgid ""
"required to support"
msgstr ""
-#: c-family/c-common.c:1126 c-family/c-common.c:1138 cp/constexpr.c:1473
+#: c-family/c-common.c:1126 c-family/c-common.c:1138 cp/constexpr.c:1612
+#: cp/constexpr.c:3494
#, gcc-internal-format
msgid "overflow in constant expression"
msgstr ""
@@ -22782,1442 +22860,1449 @@ msgstr ""
msgid "type-punning to incomplete type might break strict-aliasing rules"
msgstr ""
-#: c-family/c-common.c:1573
+#: c-family/c-common.c:1575
#, gcc-internal-format
msgid "dereferencing type-punned pointer will break strict-aliasing rules"
msgstr ""
-#: c-family/c-common.c:1580 c-family/c-common.c:1598
+#: c-family/c-common.c:1582 c-family/c-common.c:1600
#, gcc-internal-format
msgid "dereferencing type-punned pointer might break strict-aliasing rules"
msgstr ""
-#: c-family/c-common.c:1732
+#: c-family/c-common.c:1734
#, 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-common.c:1739
+#: c-family/c-common.c:1741
#, 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-common.c:1744
+#: c-family/c-common.c:1746
#, 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-common.c:1756
+#: c-family/c-common.c:1758
#, 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-common.c:1772
+#: c-family/c-common.c:1774
#, 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-common.c:1779
+#: c-family/c-common.c:1781
#, 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-common.c:1784
+#: c-family/c-common.c:1786
#, 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-common.c:1796
+#: c-family/c-common.c:1798
#, 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-common.c:1812
+#: c-family/c-common.c:1814
#, 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-common.c:1819
+#: c-family/c-common.c:1821
#, 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-common.c:1824
+#: c-family/c-common.c:1826
#, 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-common.c:1836
+#: c-family/c-common.c:1838
#, 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-common.c:1852
+#: c-family/c-common.c:1854
#, 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-common.c:1859
+#: c-family/c-common.c:1861
#, 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-common.c:1864
+#: c-family/c-common.c:1866
#, 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-common.c:1876
+#: c-family/c-common.c:1878
#, 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-common.c:1905 c-family/c-common.c:1912
+#: c-family/c-common.c:1907 c-family/c-common.c:1914
#, gcc-internal-format
msgid "%<_Atomic%>-qualified parameter type %qT of %q+D"
msgstr ""
-#: c-family/c-common.c:1922
+#: c-family/c-common.c:1924
#, gcc-internal-format
msgid "first argument of %q+D should be %<int%>"
msgstr ""
-#: c-family/c-common.c:1931
+#: c-family/c-common.c:1933
#, gcc-internal-format
msgid "second argument of %q+D should be %<char **%>"
msgstr ""
-#: c-family/c-common.c:1940
+#: c-family/c-common.c:1942
#, gcc-internal-format
msgid "third argument of %q+D should probably be %<char **%>"
msgstr ""
-#: c-family/c-common.c:1951
+#: c-family/c-common.c:1953
#, gcc-internal-format
msgid "%q+D takes only zero or two arguments"
msgstr ""
-#: c-family/c-common.c:1955
+#: c-family/c-common.c:1957
#, gcc-internal-format
msgid "%q+D declared as variadic function"
msgstr ""
-#: c-family/c-common.c:2023
+#: c-family/c-common.c:2025
#, 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:2063
+#: c-family/c-common.c:2065
#, gcc-internal-format
msgid "__builtin_shuffle last argument must be an integer vector"
msgstr ""
-#: c-family/c-common.c:2072
+#: c-family/c-common.c:2074
#, gcc-internal-format
msgid "__builtin_shuffle arguments must be vectors"
msgstr ""
-#: c-family/c-common.c:2079
+#: c-family/c-common.c:2081
#, gcc-internal-format
msgid "__builtin_shuffle argument vectors must be of the same type"
msgstr ""
-#: c-family/c-common.c:2090
+#: c-family/c-common.c:2092
#, 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:2100
+#: c-family/c-common.c:2102
#, 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:2327
+#: c-family/c-common.c:2329
#, gcc-internal-format
msgid "negative integer implicitly converted to unsigned type"
msgstr ""
-#: c-family/c-common.c:2333
+#: c-family/c-common.c:2335
#, gcc-internal-format
msgid "conversion of unsigned constant value to negative integer"
msgstr ""
-#: c-family/c-common.c:2484 c-family/c-common.c:2546
+#: c-family/c-common.c:2486 c-family/c-common.c:2548
#, gcc-internal-format
msgid "conversion to %qT from %qT may change the sign of the result"
msgstr ""
-#: c-family/c-common.c:2604
+#: c-family/c-common.c:2606
#, gcc-internal-format
msgid "conversion to %qT from boolean expression"
msgstr ""
-#: c-family/c-common.c:2613 c-family/c-common.c:2617
+#: c-family/c-common.c:2615 c-family/c-common.c:2619
#, gcc-internal-format
msgid "conversion to %qT alters %qT constant value"
msgstr ""
-#: c-family/c-common.c:2637 c-family/c-common.c:2645
+#: c-family/c-common.c:2639 c-family/c-common.c:2647
#, gcc-internal-format
msgid "conversion to %qT from %qT may alter its value"
msgstr ""
-#: c-family/c-common.c:2641
+#: c-family/c-common.c:2643
#, gcc-internal-format
msgid "conversion to %qT from %qT discards imaginary component"
msgstr ""
-#: c-family/c-common.c:2676
+#: c-family/c-common.c:2678
#, gcc-internal-format
msgid "large integer implicitly truncated to unsigned type"
msgstr ""
-#: c-family/c-common.c:2682 c-family/c-common.c:2689 c-family/c-common.c:2697
+#: c-family/c-common.c:2684 c-family/c-common.c:2691 c-family/c-common.c:2699
#, gcc-internal-format
msgid "overflow in implicit constant conversion"
msgstr ""
-#: c-family/c-common.c:2869
+#: c-family/c-common.c:2871
#, gcc-internal-format
msgid "operation on %qE may be undefined"
msgstr ""
-#: c-family/c-common.c:3176
+#: c-family/c-common.c:3178
#, gcc-internal-format
msgid "case label does not reduce to an integer constant"
msgstr ""
-#: c-family/c-common.c:3222
+#: c-family/c-common.c:3224
#, gcc-internal-format
msgid "case label value is less than minimum value for type"
msgstr ""
-#: c-family/c-common.c:3232
+#: c-family/c-common.c:3234
#, gcc-internal-format
msgid "case label value exceeds maximum value for type"
msgstr ""
-#: c-family/c-common.c:3241
+#: c-family/c-common.c:3243
#, gcc-internal-format
msgid "lower value in case label range less than minimum value for type"
msgstr ""
-#: c-family/c-common.c:3251
+#: c-family/c-common.c:3253
#, gcc-internal-format
msgid "upper value in case label range exceeds maximum value for type"
msgstr ""
-#: c-family/c-common.c:3334
+#: c-family/c-common.c:3336
#, 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:3864
+#: c-family/c-common.c:3866
#, gcc-internal-format
msgid "invalid operands to binary %s (have %qT and %qT)"
msgstr ""
-#: c-family/c-common.c:4114
+#: c-family/c-common.c:4116
#, gcc-internal-format
msgid "comparison is always false due to limited range of data type"
msgstr ""
-#: c-family/c-common.c:4117
+#: c-family/c-common.c:4119
#, gcc-internal-format
msgid "comparison is always true due to limited range of data type"
msgstr ""
-#: c-family/c-common.c:4207
+#: c-family/c-common.c:4209
#, gcc-internal-format
msgid "comparison of unsigned expression >= 0 is always true"
msgstr ""
-#: c-family/c-common.c:4214
+#: c-family/c-common.c:4216
#, gcc-internal-format
msgid "comparison of unsigned expression < 0 is always false"
msgstr ""
-#: c-family/c-common.c:4257
+#: c-family/c-common.c:4259
#, gcc-internal-format
msgid "pointer of type %<void *%> used in arithmetic"
msgstr ""
-#: c-family/c-common.c:4266
+#: c-family/c-common.c:4268
#, gcc-internal-format
msgid "pointer to a function used in arithmetic"
msgstr ""
-#: c-family/c-common.c:4478
+#: c-family/c-common.c:4480
#, gcc-internal-format
msgid "the address of %qD will always evaluate as %<true%>"
msgstr ""
-#: c-family/c-common.c:4560
+#: c-family/c-common.c:4562
#, gcc-internal-format
msgid ""
"the compiler can assume that the address of %qD will always evaluate to "
"%<true%>"
msgstr ""
-#: c-family/c-common.c:4587 cp/semantics.c:660 cp/typeck.c:8470
+#: c-family/c-common.c:4589 cp/semantics.c:660 cp/typeck.c:8450
#, gcc-internal-format
msgid "suggest parentheses around assignment used as truth value"
msgstr ""
-#: c-family/c-common.c:4666 c/c-decl.c:4097 c/c-typeck.c:13557
+#: c-family/c-common.c:4668 c/c-decl.c:4126 c/c-typeck.c:13560
#, gcc-internal-format
msgid "invalid use of %<restrict%>"
msgstr ""
-#: c-family/c-common.c:4866
+#: c-family/c-common.c:4868
#, gcc-internal-format
msgid "invalid application of %<sizeof%> to a function type"
msgstr ""
-#: c-family/c-common.c:4876
+#: c-family/c-common.c:4878
#, gcc-internal-format
msgid "ISO C++ does not permit %<alignof%> applied to a function type"
msgstr ""
-#: c-family/c-common.c:4879
+#: c-family/c-common.c:4881
#, gcc-internal-format
msgid "ISO C does not permit %<_Alignof%> applied to a function type"
msgstr ""
-#: c-family/c-common.c:4890
+#: c-family/c-common.c:4892
#, gcc-internal-format
msgid "invalid application of %qs to a void type"
msgstr ""
-#: c-family/c-common.c:4899
+#: c-family/c-common.c:4901
#, gcc-internal-format
msgid "invalid application of %qs to incomplete type %qT"
msgstr ""
-#: c-family/c-common.c:4907
+#: c-family/c-common.c:4909
#, gcc-internal-format
msgid "invalid application of %qs to array type %qT of incomplete element type"
msgstr ""
-#: c-family/c-common.c:4949
+#: c-family/c-common.c:4951
#, gcc-internal-format
msgid "%<__alignof%> applied to a bit-field"
msgstr ""
-#: c-family/c-common.c:5828
+#: c-family/c-common.c:5830
#, gcc-internal-format
msgid "cannot disable built-in function %qs"
msgstr ""
-#: c-family/c-common.c:6020
+#: c-family/c-common.c:6022
#, gcc-internal-format
msgid "pointers are not permitted as case values"
msgstr ""
-#: c-family/c-common.c:6027
+#: c-family/c-common.c:6029
#, gcc-internal-format
msgid "range expressions in switch statements are non-standard"
msgstr ""
-#: c-family/c-common.c:6053
+#: c-family/c-common.c:6055
#, gcc-internal-format
msgid "empty range specified"
msgstr ""
-#: c-family/c-common.c:6114
+#: c-family/c-common.c:6116
#, gcc-internal-format
msgid "duplicate (or overlapping) case value"
msgstr ""
-#: c-family/c-common.c:6116
+#: c-family/c-common.c:6118
#, gcc-internal-format
msgid "this is the first entry overlapping that value"
msgstr ""
-#: c-family/c-common.c:6120
+#: c-family/c-common.c:6122
#, gcc-internal-format
msgid "duplicate case value"
msgstr ""
-#: c-family/c-common.c:6121 c-family/c-common.c:12667
+#: c-family/c-common.c:6123 c-family/c-common.c:12700
#, gcc-internal-format
msgid "previously used here"
msgstr ""
-#: c-family/c-common.c:6125
+#: c-family/c-common.c:6127
#, gcc-internal-format
msgid "multiple default labels in one switch"
msgstr ""
-#: c-family/c-common.c:6127
+#: c-family/c-common.c:6129
#, gcc-internal-format
msgid "this is the first default label"
msgstr ""
-#: c-family/c-common.c:6171
+#: c-family/c-common.c:6173
#, gcc-internal-format
msgid "case value %qs not in enumerated type"
msgstr ""
-#: c-family/c-common.c:6176
+#: c-family/c-common.c:6178
#, gcc-internal-format
msgid "case value %qs not in enumerated type %qT"
msgstr ""
-#: c-family/c-common.c:6237
+#: c-family/c-common.c:6239
#, gcc-internal-format
msgid "switch missing default case"
msgstr ""
-#: c-family/c-common.c:6282
+#: c-family/c-common.c:6284
#, gcc-internal-format
msgid "switch condition has boolean value"
msgstr ""
-#: c-family/c-common.c:6355
+#: c-family/c-common.c:6357
#, gcc-internal-format
msgid "enumeration value %qE not handled in switch"
msgstr ""
-#: c-family/c-common.c:6381
+#: c-family/c-common.c:6383
#, gcc-internal-format
msgid "taking the address of a label is non-standard"
msgstr ""
-#: c-family/c-common.c:6575
+#: c-family/c-common.c:6577
#, gcc-internal-format
msgid "%qE attribute ignored for field of type %qT"
msgstr ""
-#: c-family/c-common.c:6672 c-family/c-common.c:6700 c-family/c-common.c:6796
+#: c-family/c-common.c:6674 c-family/c-common.c:6702 c-family/c-common.c:6798
#, gcc-internal-format
msgid "%qE attribute ignored due to conflict with attribute %qs"
msgstr ""
-#: c-family/c-common.c:6860 c-family/c-common.c:6866 c-family/c-common.c:9417
-#: c-family/c-common.c:9439 c-family/c-common.c:9445
+#: c-family/c-common.c:6862 c-family/c-common.c:6868 c-family/c-common.c:9419
+#: c-family/c-common.c:9441 c-family/c-common.c:9447
#, gcc-internal-format
msgid "%qE attribute ignored due to conflict with %qs attribute"
msgstr ""
-#: c-family/c-common.c:6922 lto/lto-lang.c:248
+#: c-family/c-common.c:6924 lto/lto-lang.c:248
#, gcc-internal-format
msgid "%qE attribute has no effect on unit local functions"
msgstr ""
-#: c-family/c-common.c:7074
+#: c-family/c-common.c:7076
#, gcc-internal-format
msgid "%qE attribute have effect only on public objects"
msgstr ""
-#: c-family/c-common.c:7103
+#: c-family/c-common.c:7105
#, gcc-internal-format
msgid "%qE attribute only affects top level objects"
msgstr ""
-#: c-family/c-common.c:7157
+#: c-family/c-common.c:7159
#, gcc-internal-format
msgid "scalar_storage_order is not supported because endianness is not uniform"
msgstr ""
-#: c-family/c-common.c:7174
+#: c-family/c-common.c:7176
#, gcc-internal-format
msgid ""
"scalar_storage_order argument must be one of \"big-endian\" or \"little-"
"endian\""
msgstr ""
-#: c-family/c-common.c:7270
+#: c-family/c-common.c:7272
#, gcc-internal-format
msgid "destructor priorities are not supported"
msgstr ""
-#: c-family/c-common.c:7272
+#: c-family/c-common.c:7274
#, gcc-internal-format
msgid "constructor priorities are not supported"
msgstr ""
-#: c-family/c-common.c:7294
+#: c-family/c-common.c:7296
#, gcc-internal-format, gfc-internal-format
msgid "destructor priorities from 0 to %d are reserved for the implementation"
msgstr ""
-#: c-family/c-common.c:7299
+#: c-family/c-common.c:7301
#, gcc-internal-format, gfc-internal-format
msgid "constructor priorities from 0 to %d are reserved for the implementation"
msgstr ""
-#: c-family/c-common.c:7307
+#: c-family/c-common.c:7309
#, gcc-internal-format, gfc-internal-format
msgid "destructor priorities must be integers from 0 to %d inclusive"
msgstr ""
-#: c-family/c-common.c:7310
+#: c-family/c-common.c:7312
#, gcc-internal-format, gfc-internal-format
msgid "constructor priorities must be integers from 0 to %d inclusive"
msgstr ""
-#: c-family/c-common.c:7466
+#: c-family/c-common.c:7468
#, gcc-internal-format
msgid "unknown machine mode %qE"
msgstr ""
-#: c-family/c-common.c:7495
+#: c-family/c-common.c:7497
#, gcc-internal-format
msgid "specifying vector types with __attribute__ ((mode)) is deprecated"
msgstr ""
-#: c-family/c-common.c:7498
+#: c-family/c-common.c:7500
#, gcc-internal-format
msgid "use __attribute__ ((vector_size)) instead"
msgstr ""
-#: c-family/c-common.c:7507
+#: c-family/c-common.c:7509
#, gcc-internal-format
msgid "unable to emulate %qs"
msgstr ""
-#: c-family/c-common.c:7518
+#: c-family/c-common.c:7520
#, gcc-internal-format
msgid "invalid pointer mode %qs"
msgstr ""
-#: c-family/c-common.c:7535
+#: c-family/c-common.c:7537
#, gcc-internal-format
msgid "signedness of type and machine mode %qs don%'t match"
msgstr ""
-#: c-family/c-common.c:7546
+#: c-family/c-common.c:7548
#, gcc-internal-format
msgid "no data type for mode %qs"
msgstr ""
-#: c-family/c-common.c:7556
+#: c-family/c-common.c:7558
#, gcc-internal-format
msgid "cannot use mode %qs for enumeral types"
msgstr ""
-#: c-family/c-common.c:7583
+#: c-family/c-common.c:7585
#, gcc-internal-format
msgid "mode %qs applied to inappropriate type"
msgstr ""
-#: c-family/c-common.c:7605
+#: c-family/c-common.c:7607
#, gcc-internal-format
msgid "section attributes are not supported for this target"
msgstr ""
-#: c-family/c-common.c:7613
+#: c-family/c-common.c:7615
#, gcc-internal-format
msgid "section attribute not allowed for %q+D"
msgstr ""
-#: c-family/c-common.c:7619
+#: c-family/c-common.c:7621
#, gcc-internal-format
msgid "section attribute argument not a string constant"
msgstr ""
-#: c-family/c-common.c:7628
+#: c-family/c-common.c:7630
#, gcc-internal-format
msgid "section attribute cannot be specified for local variables"
msgstr ""
-#: c-family/c-common.c:7638 config/bfin/bfin.c:4773 config/bfin/bfin.c:4824
+#: c-family/c-common.c:7640 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-common.c:7646
+#: c-family/c-common.c:7648
#, gcc-internal-format
msgid "section of %q+D cannot be overridden"
msgstr ""
-#: c-family/c-common.c:7672
+#: c-family/c-common.c:7674
#, gcc-internal-format
msgid "requested alignment is not an integer constant"
msgstr ""
-#: c-family/c-common.c:7680
+#: c-family/c-common.c:7682
#, gcc-internal-format
msgid "requested alignment is not a positive power of 2"
msgstr ""
-#: c-family/c-common.c:7685
+#: c-family/c-common.c:7687
#, gcc-internal-format
msgid "requested alignment is too large"
msgstr ""
-#: c-family/c-common.c:7768
+#: c-family/c-common.c:7770
#, gcc-internal-format, gfc-internal-format
msgid "requested alignment %d is larger than %d"
msgstr ""
-#: c-family/c-common.c:7834
+#: c-family/c-common.c:7836
#, gcc-internal-format
msgid "alignment may not be specified for %q+D"
msgstr ""
-#: c-family/c-common.c:7852
+#: c-family/c-common.c:7854
#, gcc-internal-format
msgid ""
"alignment for %q+D was previously specified as %d and may not be decreased"
msgstr ""
-#: c-family/c-common.c:7856
+#: c-family/c-common.c:7858
#, gcc-internal-format
msgid "alignment for %q+D must be at least %d"
msgstr ""
-#: c-family/c-common.c:7881
+#: c-family/c-common.c:7883
#, gcc-internal-format
msgid "inline function %q+D declared weak"
msgstr ""
-#: c-family/c-common.c:7886
+#: c-family/c-common.c:7888
#, gcc-internal-format
msgid "indirect function %q+D cannot be declared weak"
msgstr ""
-#: c-family/c-common.c:7910
+#: c-family/c-common.c:7912
#, gcc-internal-format
msgid "%qE attribute is only applicable on functions"
msgstr ""
-#: c-family/c-common.c:7941
+#: c-family/c-common.c:7943
#, gcc-internal-format
msgid "%q+D defined both normally and as %qE attribute"
msgstr ""
-#: c-family/c-common.c:7949
+#: c-family/c-common.c:7951
#, gcc-internal-format
msgid "weak %q+D cannot be defined %qE"
msgstr ""
-#: c-family/c-common.c:7966 c-family/c-common.c:8510
+#: c-family/c-common.c:7968 c-family/c-common.c:8512
#, gcc-internal-format
msgid "attribute %qE argument not a string"
msgstr ""
-#: c-family/c-common.c:7996
+#: c-family/c-common.c:7998
#, gcc-internal-format
msgid "%+D declared alias after being used"
msgstr ""
-#: c-family/c-common.c:7998
+#: c-family/c-common.c:8000
#, gcc-internal-format
msgid "%+D declared ifunc after being used"
msgstr ""
-#: c-family/c-common.c:8049
+#: c-family/c-common.c:8051
#, gcc-internal-format
msgid "indirect function %q+D cannot be declared weakref"
msgstr ""
-#: c-family/c-common.c:8071
+#: c-family/c-common.c:8073
#, gcc-internal-format
msgid "weakref attribute must appear before alias attribute"
msgstr ""
-#: c-family/c-common.c:8083
+#: c-family/c-common.c:8085
#, gcc-internal-format
msgid "%+D declared weakref after being used"
msgstr ""
-#: c-family/c-common.c:8107
+#: c-family/c-common.c:8109
#, gcc-internal-format
msgid "%qE attribute ignored on non-class types"
msgstr ""
-#: c-family/c-common.c:8113
+#: c-family/c-common.c:8115
#, gcc-internal-format
msgid "%qE attribute ignored because %qT is already defined"
msgstr ""
-#: c-family/c-common.c:8126
+#: c-family/c-common.c:8128
#, gcc-internal-format
msgid "visibility argument not a string"
msgstr ""
-#: c-family/c-common.c:8138
+#: c-family/c-common.c:8140
#, gcc-internal-format
msgid "%qE attribute ignored on types"
msgstr ""
-#: c-family/c-common.c:8154
+#: c-family/c-common.c:8156
#, gcc-internal-format
msgid ""
"visibility argument must be one of \"default\", \"hidden\", \"protected\" or "
"\"internal\""
msgstr ""
-#: c-family/c-common.c:8165
+#: c-family/c-common.c:8167
#, gcc-internal-format
msgid "%qD redeclared with different visibility"
msgstr ""
-#: c-family/c-common.c:8168 c-family/c-common.c:8172
+#: c-family/c-common.c:8170 c-family/c-common.c:8174
#, gcc-internal-format
msgid "%qD was declared %qs which implies default visibility"
msgstr ""
-#: c-family/c-common.c:8255
+#: c-family/c-common.c:8257
#, gcc-internal-format
msgid "tls_model argument not a string"
msgstr ""
-#: c-family/c-common.c:8268
+#: c-family/c-common.c:8270
#, gcc-internal-format
msgid ""
"tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-"
"dynamic\" or \"global-dynamic\""
msgstr ""
-#: c-family/c-common.c:8288 c-family/c-common.c:8587 c-family/c-common.c:9634
+#: c-family/c-common.c:8290 c-family/c-common.c:8589 c-family/c-common.c:9636
#: config/m32c/m32c.c:2932
#, gcc-internal-format
msgid "%qE attribute applies only to functions"
msgstr ""
-#: c-family/c-common.c:8336
+#: c-family/c-common.c:8338
#, gcc-internal-format
msgid "alloc_size parameter outside range"
msgstr ""
-#: c-family/c-common.c:8361
+#: c-family/c-common.c:8363
#, gcc-internal-format
msgid "alloc_align parameter outside range"
msgstr ""
-#: c-family/c-common.c:8385
+#: c-family/c-common.c:8387
#, gcc-internal-format
msgid "assume_aligned parameter not integer constant"
msgstr ""
-#: c-family/c-common.c:8496 c/c-parser.c:16374
+#: c-family/c-common.c:8498 c/c-parser.c:16396
#, 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-common.c:8524
+#: c-family/c-common.c:8526
#, gcc-internal-format
msgid ""
"only %<inbranch%> and %<notinbranch%> flags are allowed for %<__simd__%> "
"attribute"
msgstr ""
-#: c-family/c-common.c:8593 c-family/c-common.c:9640
+#: c-family/c-common.c:8595 c-family/c-common.c:9642
#, gcc-internal-format
msgid "can%'t set %qE attribute after definition"
msgstr ""
-#: c-family/c-common.c:8651
+#: c-family/c-common.c:8653
#, gcc-internal-format
msgid "%qE attribute duplicated"
msgstr ""
-#: c-family/c-common.c:8653
+#: c-family/c-common.c:8655
#, gcc-internal-format
msgid "%qE attribute follows %qE"
msgstr ""
-#: c-family/c-common.c:8752
+#: c-family/c-common.c:8754
#, gcc-internal-format
msgid "type was previously declared %qE"
msgstr ""
-#: c-family/c-common.c:8765 cp/class.c:4575
+#: c-family/c-common.c:8767 cp/class.c:4621
#, gcc-internal-format
msgid ""
"%<transaction_safe_dynamic%> may only be specified for a virtual function"
msgstr ""
-#: c-family/c-common.c:8823
+#: c-family/c-common.c:8825
#, gcc-internal-format
msgid "%qE argument not an identifier"
msgstr ""
-#: c-family/c-common.c:8834
+#: c-family/c-common.c:8836
#, gcc-internal-format
msgid "%qD is not compatible with %qD"
msgstr ""
-#: c-family/c-common.c:8837
+#: c-family/c-common.c:8839
#, gcc-internal-format
msgid "%qE argument is not a function"
msgstr ""
-#: c-family/c-common.c:8885
+#: c-family/c-common.c:8887
#, gcc-internal-format
msgid "deprecated message is not a string"
msgstr ""
-#: c-family/c-common.c:8926
+#: c-family/c-common.c:8928
#, gcc-internal-format
msgid "%qE attribute ignored for %qE"
msgstr ""
-#: c-family/c-common.c:8989
+#: c-family/c-common.c:8991
#, gcc-internal-format
msgid "invalid vector type for attribute %qE"
msgstr ""
-#: c-family/c-common.c:8995 ada/gcc-interface/utils.c:3745
+#: c-family/c-common.c:8997 ada/gcc-interface/utils.c:3766
#, gcc-internal-format
msgid "vector size not an integral multiple of component size"
msgstr ""
-#: c-family/c-common.c:9001 ada/gcc-interface/utils.c:3752
+#: c-family/c-common.c:9003 ada/gcc-interface/utils.c:3773
#, gcc-internal-format
msgid "zero vector size"
msgstr ""
-#: c-family/c-common.c:9009
+#: c-family/c-common.c:9011
#, gcc-internal-format
msgid "number of components of the vector not a power of two"
msgstr ""
-#: c-family/c-common.c:9037 ada/gcc-interface/utils.c:5825
+#: c-family/c-common.c:9039 ada/gcc-interface/utils.c:5846
#, gcc-internal-format
msgid "nonnull attribute without arguments on a non-prototype"
msgstr ""
-#: c-family/c-common.c:9056 ada/gcc-interface/utils.c:5839
+#: c-family/c-common.c:9058 ada/gcc-interface/utils.c:5860
#, gcc-internal-format, gfc-internal-format
msgid "nonnull argument has invalid operand number (argument %lu)"
msgstr ""
-#: c-family/c-common.c:9078 ada/gcc-interface/utils.c:5861
+#: c-family/c-common.c:9080 ada/gcc-interface/utils.c:5882
#, gcc-internal-format, gfc-internal-format
msgid ""
"nonnull argument with out-of-range operand number (argument %lu, operand %lu)"
msgstr ""
-#: c-family/c-common.c:9086 ada/gcc-interface/utils.c:5870
+#: c-family/c-common.c:9088 ada/gcc-interface/utils.c:5891
#, gcc-internal-format, gfc-internal-format
msgid ""
"nonnull argument references non-pointer operand (argument %lu, operand %lu)"
msgstr ""
-#: c-family/c-common.c:9180
+#: c-family/c-common.c:9182
#, gcc-internal-format
msgid "not enough variable arguments to fit a sentinel"
msgstr ""
-#: c-family/c-common.c:9194
+#: c-family/c-common.c:9196
#, gcc-internal-format
msgid "missing sentinel in function call"
msgstr ""
-#: c-family/c-common.c:9236
+#: c-family/c-common.c:9238
#, gcc-internal-format, gfc-internal-format
msgid "null argument where non-null required (argument %lu)"
msgstr ""
-#: c-family/c-common.c:9302
+#: c-family/c-common.c:9304
#, gcc-internal-format
msgid "cleanup argument not an identifier"
msgstr ""
-#: c-family/c-common.c:9309
+#: c-family/c-common.c:9311
#, gcc-internal-format
msgid "cleanup argument not a function"
msgstr ""
-#: c-family/c-common.c:9346
+#: c-family/c-common.c:9348
#, gcc-internal-format
msgid "%qE attribute requires prototypes with named arguments"
msgstr ""
-#: c-family/c-common.c:9354
+#: c-family/c-common.c:9356
#, gcc-internal-format
msgid "%qE attribute only applies to variadic functions"
msgstr ""
-#: c-family/c-common.c:9370 ada/gcc-interface/utils.c:5912
+#: c-family/c-common.c:9372 ada/gcc-interface/utils.c:5933
#, gcc-internal-format
msgid "requested position is not an integer constant"
msgstr ""
-#: c-family/c-common.c:9378 ada/gcc-interface/utils.c:5919
+#: c-family/c-common.c:9380 ada/gcc-interface/utils.c:5940
#, gcc-internal-format
msgid "requested position is less than zero"
msgstr ""
-#: c-family/c-common.c:9534
+#: c-family/c-common.c:9536
#, gcc-internal-format, gfc-internal-format
msgid "bad option %s to optimize attribute"
msgstr ""
-#: c-family/c-common.c:9537
+#: c-family/c-common.c:9539
#, gcc-internal-format, gfc-internal-format
msgid "bad option %s to pragma attribute"
msgstr ""
-#: c-family/c-common.c:9657
+#: c-family/c-common.c:9659
#, gcc-internal-format
msgid "returns_nonnull attribute on a function not returning a pointer"
msgstr ""
-#: c-family/c-common.c:9672
+#: c-family/c-common.c:9674
#, gcc-internal-format
msgid "%qE attribute is only valid on %<struct%> type"
msgstr ""
-#: c-family/c-common.c:9797
+#: c-family/c-common.c:9799
#, gcc-internal-format
msgid "not enough arguments to function %qE"
msgstr ""
-#: c-family/c-common.c:9803 c-family/c-common.c:10777 c/c-typeck.c:3201
+#: c-family/c-common.c:9805 c-family/c-common.c:10806 c/c-typeck.c:3213
#, gcc-internal-format
msgid "too many arguments to function %qE"
msgstr ""
-#: c-family/c-common.c:9834 c-family/c-common.c:9880
+#: c-family/c-common.c:9842
+#, 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:9863 c-family/c-common.c:9909
#, gcc-internal-format
msgid "non-floating-point argument in call to function %qE"
msgstr ""
-#: c-family/c-common.c:9857
+#: c-family/c-common.c:9886
#, gcc-internal-format
msgid "non-floating-point arguments in call to function %qE"
msgstr ""
-#: c-family/c-common.c:9873
+#: c-family/c-common.c:9902
#, gcc-internal-format
msgid "non-const integer argument %u in call to function %qE"
msgstr ""
-#: c-family/c-common.c:9893
+#: c-family/c-common.c:9922
#, gcc-internal-format
msgid "non-integer argument 3 in call to function %qE"
msgstr ""
-#: c-family/c-common.c:9909
+#: c-family/c-common.c:9938
#, gcc-internal-format
msgid "argument %u in call to function %qE does not have integral type"
msgstr ""
-#: c-family/c-common.c:9916
+#: c-family/c-common.c:9945
#, gcc-internal-format
msgid ""
"argument 3 in call to function %qE does not have pointer to integer type"
msgstr ""
-#: c-family/c-common.c:10229
+#: c-family/c-common.c:10258
#, gcc-internal-format
msgid "cannot apply %<offsetof%> to static data member %qD"
msgstr ""
-#: c-family/c-common.c:10234
+#: c-family/c-common.c:10263
#, gcc-internal-format
msgid "cannot apply %<offsetof%> when %<operator[]%> is overloaded"
msgstr ""
-#: c-family/c-common.c:10241
+#: c-family/c-common.c:10270
#, gcc-internal-format
msgid "cannot apply %<offsetof%> to a non constant address"
msgstr ""
-#: c-family/c-common.c:10254 cp/typeck.c:5749
+#: c-family/c-common.c:10283 cp/typeck.c:5733
#, gcc-internal-format
msgid "attempt to take address of bit-field structure member %qD"
msgstr ""
-#: c-family/c-common.c:10306
+#: c-family/c-common.c:10335
#, gcc-internal-format
msgid "index %E denotes an offset greater than size of %qT"
msgstr ""
-#: c-family/c-common.c:10346
+#: c-family/c-common.c:10375
#, gcc-internal-format
msgid ""
"the omitted middle operand in ?: will always be %<true%>, suggest explicit "
"middle operand"
msgstr ""
-#: c-family/c-common.c:10367
+#: c-family/c-common.c:10396
#, gcc-internal-format
msgid "assignment of member %qD in read-only object"
msgstr ""
-#: c-family/c-common.c:10369
+#: c-family/c-common.c:10398
#, gcc-internal-format
msgid "increment of member %qD in read-only object"
msgstr ""
-#: c-family/c-common.c:10371
+#: c-family/c-common.c:10400
#, gcc-internal-format
msgid "decrement of member %qD in read-only object"
msgstr ""
-#: c-family/c-common.c:10373
+#: c-family/c-common.c:10402
#, gcc-internal-format
msgid "member %qD in read-only object used as %<asm%> output"
msgstr ""
-#: c-family/c-common.c:10377
+#: c-family/c-common.c:10406
#, gcc-internal-format
msgid "assignment of read-only member %qD"
msgstr ""
-#: c-family/c-common.c:10378
+#: c-family/c-common.c:10407
#, gcc-internal-format
msgid "increment of read-only member %qD"
msgstr ""
-#: c-family/c-common.c:10379
+#: c-family/c-common.c:10408
#, gcc-internal-format
msgid "decrement of read-only member %qD"
msgstr ""
-#: c-family/c-common.c:10380
+#: c-family/c-common.c:10409
#, gcc-internal-format
msgid "read-only member %qD used as %<asm%> output"
msgstr ""
-#: c-family/c-common.c:10384
+#: c-family/c-common.c:10413
#, gcc-internal-format
msgid "assignment of read-only variable %qD"
msgstr ""
-#: c-family/c-common.c:10385
+#: c-family/c-common.c:10414
#, gcc-internal-format
msgid "increment of read-only variable %qD"
msgstr ""
-#: c-family/c-common.c:10386
+#: c-family/c-common.c:10415
#, gcc-internal-format
msgid "decrement of read-only variable %qD"
msgstr ""
-#: c-family/c-common.c:10387
+#: c-family/c-common.c:10416
#, gcc-internal-format
msgid "read-only variable %qD used as %<asm%> output"
msgstr ""
-#: c-family/c-common.c:10390
+#: c-family/c-common.c:10419
#, gcc-internal-format
msgid "assignment of read-only parameter %qD"
msgstr ""
-#: c-family/c-common.c:10391
+#: c-family/c-common.c:10420
#, gcc-internal-format
msgid "increment of read-only parameter %qD"
msgstr ""
-#: c-family/c-common.c:10392
+#: c-family/c-common.c:10421
#, gcc-internal-format
msgid "decrement of read-only parameter %qD"
msgstr ""
-#: c-family/c-common.c:10393
+#: c-family/c-common.c:10422
#, gcc-internal-format
msgid "read-only parameter %qD use as %<asm%> output"
msgstr ""
-#: c-family/c-common.c:10398
+#: c-family/c-common.c:10427
#, gcc-internal-format
msgid "assignment of read-only named return value %qD"
msgstr ""
-#: c-family/c-common.c:10400
+#: c-family/c-common.c:10429
#, gcc-internal-format
msgid "increment of read-only named return value %qD"
msgstr ""
-#: c-family/c-common.c:10402
+#: c-family/c-common.c:10431
#, gcc-internal-format
msgid "decrement of read-only named return value %qD"
msgstr ""
-#: c-family/c-common.c:10404
+#: c-family/c-common.c:10433
#, gcc-internal-format
msgid "read-only named return value %qD used as %<asm%>output"
msgstr ""
-#: c-family/c-common.c:10409
+#: c-family/c-common.c:10438
#, gcc-internal-format
msgid "assignment of function %qD"
msgstr ""
-#: c-family/c-common.c:10410
+#: c-family/c-common.c:10439
#, gcc-internal-format
msgid "increment of function %qD"
msgstr ""
-#: c-family/c-common.c:10411
+#: c-family/c-common.c:10440
#, gcc-internal-format
msgid "decrement of function %qD"
msgstr ""
-#: c-family/c-common.c:10412
+#: c-family/c-common.c:10441
#, gcc-internal-format
msgid "function %qD used as %<asm%> output"
msgstr ""
-#: c-family/c-common.c:10415 c/c-typeck.c:4551
+#: c-family/c-common.c:10444 c/c-typeck.c:4565
#, gcc-internal-format
msgid "assignment of read-only location %qE"
msgstr ""
-#: c-family/c-common.c:10416 c/c-typeck.c:4554
+#: c-family/c-common.c:10445 c/c-typeck.c:4568
#, gcc-internal-format
msgid "increment of read-only location %qE"
msgstr ""
-#: c-family/c-common.c:10417 c/c-typeck.c:4557
+#: c-family/c-common.c:10446 c/c-typeck.c:4571
#, gcc-internal-format
msgid "decrement of read-only location %qE"
msgstr ""
-#: c-family/c-common.c:10418
+#: c-family/c-common.c:10447
#, gcc-internal-format
msgid "read-only location %qE used as %<asm%> output"
msgstr ""
-#: c-family/c-common.c:10432
+#: c-family/c-common.c:10461
#, gcc-internal-format
msgid "lvalue required as left operand of assignment"
msgstr ""
-#: c-family/c-common.c:10435
+#: c-family/c-common.c:10464
#, gcc-internal-format
msgid "lvalue required as increment operand"
msgstr ""
-#: c-family/c-common.c:10438
+#: c-family/c-common.c:10467
#, gcc-internal-format
msgid "lvalue required as decrement operand"
msgstr ""
-#: c-family/c-common.c:10441
+#: c-family/c-common.c:10470
#, gcc-internal-format
msgid "lvalue required as unary %<&%> operand"
msgstr ""
-#: c-family/c-common.c:10444
+#: c-family/c-common.c:10473
#, gcc-internal-format
msgid "lvalue required in asm statement"
msgstr ""
-#: c-family/c-common.c:10461
+#: c-family/c-common.c:10490
#, gcc-internal-format
msgid "invalid type argument (have %qT)"
msgstr ""
-#: c-family/c-common.c:10465
+#: c-family/c-common.c:10494
#, gcc-internal-format
msgid "invalid type argument of array indexing (have %qT)"
msgstr ""
-#: c-family/c-common.c:10470
+#: c-family/c-common.c:10499
#, gcc-internal-format
msgid "invalid type argument of unary %<*%> (have %qT)"
msgstr ""
-#: c-family/c-common.c:10475
+#: c-family/c-common.c:10504
#, gcc-internal-format
msgid "invalid type argument of %<->%> (have %qT)"
msgstr ""
-#: c-family/c-common.c:10480
+#: c-family/c-common.c:10509
#, gcc-internal-format
msgid "invalid type argument of %<->*%> (have %qT)"
msgstr ""
-#: c-family/c-common.c:10485
+#: c-family/c-common.c:10514
#, gcc-internal-format
msgid "invalid type argument of implicit conversion (have %qT)"
msgstr ""
-#: c-family/c-common.c:10627 cp/init.c:2721 cp/init.c:2740
+#: c-family/c-common.c:10656 cp/init.c:2782 cp/init.c:2801
#, gcc-internal-format
msgid "size of array is too large"
msgstr ""
-#: c-family/c-common.c:10680 c-family/c-common.c:10751 c/c-typeck.c:3447
+#: c-family/c-common.c:10709 c-family/c-common.c:10780 c/c-typeck.c:3459
#, gcc-internal-format
msgid "too few arguments to function %qE"
msgstr ""
-#: c-family/c-common.c:10710
+#: c-family/c-common.c:10739
#, gcc-internal-format
msgid "operand type %qT is incompatible with argument %d of %qE"
msgstr ""
-#: c-family/c-common.c:10844
+#: c-family/c-common.c:10873
#, gcc-internal-format
msgid "incorrect number of arguments to function %qE"
msgstr ""
-#: c-family/c-common.c:10859
+#: c-family/c-common.c:10888
#, gcc-internal-format
msgid "argument 1 of %qE must be a non-void pointer type"
msgstr ""
-#: c-family/c-common.c:10868
+#: c-family/c-common.c:10897
#, gcc-internal-format
msgid "argument 1 of %qE must be a pointer to a constant size type"
msgstr ""
-#: c-family/c-common.c:10879
+#: c-family/c-common.c:10908
#, gcc-internal-format
msgid "argument 1 of %qE must be a pointer to a nonzero size object"
msgstr ""
-#: c-family/c-common.c:10894
+#: c-family/c-common.c:10923
#, gcc-internal-format
msgid "argument %d of %qE must be a pointer type"
msgstr ""
-#: c-family/c-common.c:10902
+#: c-family/c-common.c:10931
#, gcc-internal-format
msgid "size mismatch in argument %d of %qE"
msgstr ""
-#: c-family/c-common.c:10918
+#: c-family/c-common.c:10947
#, gcc-internal-format
msgid "invalid memory model argument %d of %qE"
msgstr ""
-#: c-family/c-common.c:10925
+#: c-family/c-common.c:10954
#, gcc-internal-format
msgid "non-integer memory model argument %d of %qE"
msgstr ""
-#: c-family/c-common.c:11519
+#: c-family/c-common.c:11552
#, gcc-internal-format
msgid "array subscript has type %<char%>"
msgstr ""
-#: c-family/c-common.c:11554 c-family/c-common.c:11557
+#: c-family/c-common.c:11587 c-family/c-common.c:11590
#, gcc-internal-format
msgid "suggest parentheses around %<+%> inside %<<<%>"
msgstr ""
-#: c-family/c-common.c:11560 c-family/c-common.c:11563
+#: c-family/c-common.c:11593 c-family/c-common.c:11596
#, gcc-internal-format
msgid "suggest parentheses around %<-%> inside %<<<%>"
msgstr ""
-#: c-family/c-common.c:11569 c-family/c-common.c:11572
+#: c-family/c-common.c:11602 c-family/c-common.c:11605
#, gcc-internal-format
msgid "suggest parentheses around %<+%> inside %<>>%>"
msgstr ""
-#: c-family/c-common.c:11575 c-family/c-common.c:11578
+#: c-family/c-common.c:11608 c-family/c-common.c:11611
#, gcc-internal-format
msgid "suggest parentheses around %<-%> inside %<>>%>"
msgstr ""
-#: c-family/c-common.c:11584 c-family/c-common.c:11587
+#: c-family/c-common.c:11617 c-family/c-common.c:11620
#, gcc-internal-format
msgid "suggest parentheses around %<&&%> within %<||%>"
msgstr ""
-#: c-family/c-common.c:11594 c-family/c-common.c:11598
+#: c-family/c-common.c:11627 c-family/c-common.c:11631
#, gcc-internal-format
msgid "suggest parentheses around arithmetic in operand of %<|%>"
msgstr ""
-#: c-family/c-common.c:11602 c-family/c-common.c:11605
+#: c-family/c-common.c:11635 c-family/c-common.c:11638
#, gcc-internal-format
msgid "suggest parentheses around comparison in operand of %<|%>"
msgstr ""
-#: c-family/c-common.c:11610
+#: c-family/c-common.c:11643
#, gcc-internal-format
msgid ""
"suggest parentheses around operand of %<!%> or change %<|%> to %<||%> or %<!"
"%> to %<~%>"
msgstr ""
-#: c-family/c-common.c:11618 c-family/c-common.c:11622
+#: c-family/c-common.c:11651 c-family/c-common.c:11655
#, gcc-internal-format
msgid "suggest parentheses around arithmetic in operand of %<^%>"
msgstr ""
-#: c-family/c-common.c:11626 c-family/c-common.c:11629
+#: c-family/c-common.c:11659 c-family/c-common.c:11662
#, gcc-internal-format
msgid "suggest parentheses around comparison in operand of %<^%>"
msgstr ""
-#: c-family/c-common.c:11635 c-family/c-common.c:11638
+#: c-family/c-common.c:11668 c-family/c-common.c:11671
#, gcc-internal-format
msgid "suggest parentheses around %<+%> in operand of %<&%>"
msgstr ""
-#: c-family/c-common.c:11641 c-family/c-common.c:11644
+#: c-family/c-common.c:11674 c-family/c-common.c:11677
#, gcc-internal-format
msgid "suggest parentheses around %<-%> in operand of %<&%>"
msgstr ""
-#: c-family/c-common.c:11648 c-family/c-common.c:11651
+#: c-family/c-common.c:11681 c-family/c-common.c:11684
#, gcc-internal-format
msgid "suggest parentheses around comparison in operand of %<&%>"
msgstr ""
-#: c-family/c-common.c:11656
+#: c-family/c-common.c:11689
#, gcc-internal-format
msgid ""
"suggest parentheses around operand of %<!%> or change %<&%> to %<&&%> or %<!"
"%> to %<~%>"
msgstr ""
-#: c-family/c-common.c:11663 c-family/c-common.c:11666
+#: c-family/c-common.c:11696 c-family/c-common.c:11699
#, gcc-internal-format
msgid "suggest parentheses around comparison in operand of %<==%>"
msgstr ""
-#: c-family/c-common.c:11671 c-family/c-common.c:11674
+#: c-family/c-common.c:11704 c-family/c-common.c:11707
#, gcc-internal-format
msgid "suggest parentheses around comparison in operand of %<!=%>"
msgstr ""
-#: c-family/c-common.c:11684 c-family/c-common.c:11690
+#: c-family/c-common.c:11717 c-family/c-common.c:11723
#, gcc-internal-format
msgid "comparisons like %<X<=Y<=Z%> do not have their mathematical meaning"
msgstr ""
-#: c-family/c-common.c:11706
+#: c-family/c-common.c:11739
#, gcc-internal-format
msgid "label %q+D defined but not used"
msgstr ""
-#: c-family/c-common.c:11708
+#: c-family/c-common.c:11741
#, gcc-internal-format
msgid "label %q+D declared but not defined"
msgstr ""
-#: c-family/c-common.c:11724
+#: c-family/c-common.c:11757
#, gcc-internal-format
msgid "division by zero"
msgstr ""
-#: c-family/c-common.c:11756 c/c-typeck.c:11061 c/c-typeck.c:11228
-#: cp/typeck.c:4836
+#: c-family/c-common.c:11789 c/c-typeck.c:11074 c/c-typeck.c:11231
+#: cp/typeck.c:4820
#, gcc-internal-format
msgid "comparison between types %qT and %qT"
msgstr ""
-#: c-family/c-common.c:11807
+#: c-family/c-common.c:11840
#, gcc-internal-format
msgid "comparison between signed and unsigned integer expressions"
msgstr ""
-#: c-family/c-common.c:11858
+#: c-family/c-common.c:11891
#, gcc-internal-format
msgid "promoted ~unsigned is always non-zero"
msgstr ""
-#: c-family/c-common.c:11861
+#: c-family/c-common.c:11894
#, gcc-internal-format
msgid "comparison of promoted ~unsigned with constant"
msgstr ""
-#: c-family/c-common.c:11871
+#: c-family/c-common.c:11904
#, gcc-internal-format
msgid "comparison of promoted ~unsigned with unsigned"
msgstr ""
-#: c-family/c-common.c:11922
+#: c-family/c-common.c:11955
#, gcc-internal-format
msgid "unused parameter %qD"
msgstr ""
-#: c-family/c-common.c:12066
+#: c-family/c-common.c:12099
#, gcc-internal-format
msgid "typedef %qD locally defined but not used"
msgstr ""
-#: c-family/c-common.c:12103 c-family/c-common.c:12129
+#: c-family/c-common.c:12136 c-family/c-common.c:12162
#, gcc-internal-format
msgid "comparison of constant %qE with boolean expression is always false"
msgstr ""
-#: c-family/c-common.c:12106 c-family/c-common.c:12126
+#: c-family/c-common.c:12139 c-family/c-common.c:12159
#, gcc-internal-format
msgid "comparison of constant %qE with boolean expression is always true"
msgstr ""
-#: c-family/c-common.c:12175
+#: c-family/c-common.c:12208
#, gcc-internal-format
msgid "result of %qE requires %u bits to represent, but %qT only has %u bits"
msgstr ""
-#: c-family/c-common.c:12424
+#: c-family/c-common.c:12457
#, gcc-internal-format
msgid "index value is out of bound"
msgstr ""
-#: c-family/c-common.c:12496 c-family/c-common.c:12544
-#: c-family/c-common.c:12559 cp/call.c:4689 cp/call.c:4696
+#: c-family/c-common.c:12529 c-family/c-common.c:12577
+#: c-family/c-common.c:12592 cp/call.c:4692 cp/call.c:4699
#, 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:12630
+#: c-family/c-common.c:12663
#, gcc-internal-format
msgid "built-in function %qE must be directly called"
msgstr ""
-#: c-family/c-common.c:12666
+#: c-family/c-common.c:12699
#, gcc-internal-format
msgid "duplicated %<if%> condition"
msgstr ""
-#: c-family/c-common.c:12693 c/c-decl.c:5884
+#: c-family/c-common.c:12726 c/c-decl.c:5913
#, gcc-internal-format
msgid "size of array %qE is too large"
msgstr ""
-#: c-family/c-common.c:12695 c/c-decl.c:5887
+#: c-family/c-common.c:12728 c/c-decl.c:5916
#, gcc-internal-format
msgid "size of unnamed array is too large"
msgstr ""
@@ -24571,21 +24656,16 @@ msgstr ""
msgid "strftime formats cannot format arguments"
msgstr ""
-#: c-family/c-indentation.c:56
+#: c-family/c-indentation.c:66
#, gcc-internal-format
msgid ""
"-Wmisleading-indentation is disabled from this point onwards, since column-"
"tracking was disabled due to the size of the code/headers"
msgstr ""
-#: c-family/c-indentation.c:583
-#, gcc-internal-format
-msgid "statement is indented as if it were guarded by..."
-msgstr ""
-
-#: c-family/c-indentation.c:585
+#: c-family/c-indentation.c:606
#, gcc-internal-format
-msgid "...this %qs clause, but it is not"
+msgid "this %qs clause does not guard..."
msgstr ""
#: c-family/c-lex.c:222
@@ -24669,7 +24749,7 @@ msgstr ""
msgid "repeated %<@%> before Objective-C string"
msgstr ""
-#: c-family/c-lex.c:1138 cp/parser.c:3932
+#: c-family/c-lex.c:1138 cp/parser.c:3934
#, gcc-internal-format
msgid "unsupported non-standard concatenation of string literals"
msgstr ""
@@ -24694,7 +24774,7 @@ msgstr ""
msgid "%<#pragma omp atomic capture%> uses two different variables for memory"
msgstr ""
-#: c-family/c-omp.c:480 cp/semantics.c:8014
+#: c-family/c-omp.c:480 cp/semantics.c:8071
#, gcc-internal-format
msgid "invalid type for iteration variable %qE"
msgstr ""
@@ -24704,22 +24784,22 @@ msgstr ""
msgid "%qE is not initialized"
msgstr ""
-#: c-family/c-omp.c:514 cp/semantics.c:7902
+#: c-family/c-omp.c:514 cp/semantics.c:7959
#, gcc-internal-format
msgid "missing controlling predicate"
msgstr ""
-#: c-family/c-omp.c:599 cp/semantics.c:7566
+#: c-family/c-omp.c:599 cp/semantics.c:7623
#, gcc-internal-format
msgid "invalid controlling predicate"
msgstr ""
-#: c-family/c-omp.c:606 cp/semantics.c:7908
+#: c-family/c-omp.c:606 cp/semantics.c:7965
#, gcc-internal-format
msgid "missing increment expression"
msgstr ""
-#: c-family/c-omp.c:670 cp/semantics.c:7681
+#: c-family/c-omp.c:670 cp/semantics.c:7738
#, gcc-internal-format
msgid "invalid increment expression"
msgstr ""
@@ -24749,32 +24829,32 @@ msgstr ""
msgid "%qD is not an function argument"
msgstr ""
-#: c-family/c-opts.c:316
+#: c-family/c-opts.c:320
#, gcc-internal-format
msgid "-I- specified twice"
msgstr ""
-#: c-family/c-opts.c:319
+#: c-family/c-opts.c:323
#, gcc-internal-format
msgid "obsolete option -I- used, please use -iquote instead"
msgstr ""
-#: c-family/c-opts.c:397
+#: c-family/c-opts.c:401
#, gcc-internal-format
msgid "%<-Wabi=1%> is not supported, using =2"
msgstr ""
-#: c-family/c-opts.c:589 fortran/cpp.c:350
+#: c-family/c-opts.c:593 fortran/cpp.c:350
#, gcc-internal-format
msgid "output filename specified twice"
msgstr ""
-#: c-family/c-opts.c:768
+#: c-family/c-opts.c:772
#, gcc-internal-format
msgid "-fexcess-precision=standard for C++"
msgstr ""
-#: c-family/c-opts.c:791
+#: c-family/c-opts.c:795
#, gcc-internal-format
msgid "-fno-gnu89-inline is only supported in GNU99 or C99 mode"
msgstr ""
@@ -25112,116 +25192,116 @@ msgstr ""
msgid "option %qs is valid for %s but not for %s"
msgstr ""
-#: c-family/c-pragma.c:837
+#: c-family/c-pragma.c:840
#, gcc-internal-format
msgid "#pragma GCC option is not allowed inside functions"
msgstr ""
-#: c-family/c-pragma.c:850
+#: c-family/c-pragma.c:853
#, gcc-internal-format
msgid "%<#pragma GCC option%> is not a string"
msgstr ""
-#: c-family/c-pragma.c:877
+#: c-family/c-pragma.c:880
#, gcc-internal-format
msgid ""
"%<#pragma GCC target (string [,string]...)%> does not have a final %<)%>"
msgstr ""
-#: c-family/c-pragma.c:883
+#: c-family/c-pragma.c:886
#, gcc-internal-format
msgid "#pragma GCC target string... is badly formed"
msgstr ""
-#: c-family/c-pragma.c:906
+#: c-family/c-pragma.c:909
#, gcc-internal-format
msgid "#pragma GCC optimize is not allowed inside functions"
msgstr ""
-#: c-family/c-pragma.c:919
+#: c-family/c-pragma.c:922
#, gcc-internal-format
msgid "%<#pragma GCC optimize%> is not a string or number"
msgstr ""
-#: c-family/c-pragma.c:945
+#: c-family/c-pragma.c:948
#, gcc-internal-format
msgid ""
"%<#pragma GCC optimize (string [,string]...)%> does not have a final %<)%>"
msgstr ""
-#: c-family/c-pragma.c:951
+#: c-family/c-pragma.c:954
#, gcc-internal-format
msgid "#pragma GCC optimize string... is badly formed"
msgstr ""
-#: c-family/c-pragma.c:992
+#: c-family/c-pragma.c:995
#, gcc-internal-format
msgid "junk at end of %<#pragma push_options%>"
msgstr ""
-#: c-family/c-pragma.c:1022
+#: c-family/c-pragma.c:1025
#, gcc-internal-format
msgid "junk at end of %<#pragma pop_options%>"
msgstr ""
-#: c-family/c-pragma.c:1029
+#: c-family/c-pragma.c:1032
#, gcc-internal-format
msgid ""
"%<#pragma GCC pop_options%> without a corresponding %<#pragma GCC "
"push_options%>"
msgstr ""
-#: c-family/c-pragma.c:1071
+#: c-family/c-pragma.c:1074
#, gcc-internal-format
msgid "junk at end of %<#pragma reset_options%>"
msgstr ""
-#: c-family/c-pragma.c:1109 c-family/c-pragma.c:1116
+#: c-family/c-pragma.c:1112 c-family/c-pragma.c:1119
#, gcc-internal-format
msgid "expected a string after %<#pragma message%>"
msgstr ""
-#: c-family/c-pragma.c:1111
+#: c-family/c-pragma.c:1114
#, gcc-internal-format
msgid "malformed %<#pragma message%>, ignored"
msgstr ""
-#: c-family/c-pragma.c:1121
+#: c-family/c-pragma.c:1124
#, gcc-internal-format
msgid "junk at end of %<#pragma message%>"
msgstr ""
-#: c-family/c-pragma.c:1124
+#: c-family/c-pragma.c:1127
#, gcc-internal-format, gfc-internal-format
msgid "#pragma message: %s"
msgstr ""
-#: c-family/c-pragma.c:1161
+#: c-family/c-pragma.c:1164
#, gcc-internal-format
msgid "invalid location for %<pragma %s%>, ignored"
msgstr ""
-#: c-family/c-pragma.c:1168 c-family/c-pragma.c:1182
+#: c-family/c-pragma.c:1171 c-family/c-pragma.c:1185
#, gcc-internal-format
msgid "malformed %<#pragma %s%>, ignored"
msgstr ""
-#: c-family/c-pragma.c:1188
+#: c-family/c-pragma.c:1191
#, gcc-internal-format
msgid "junk at end of %<#pragma %s%>"
msgstr ""
-#: c-family/c-pragma.c:1206
+#: c-family/c-pragma.c:1209
#, gcc-internal-format
msgid "%<#pragma STDC FLOAT_CONST_DECIMAL64%> is not supported for C++"
msgstr ""
-#: c-family/c-pragma.c:1215
+#: c-family/c-pragma.c:1218
#, gcc-internal-format
msgid "%<#pragma STDC FLOAT_CONST_DECIMAL64%> is not supported on this target"
msgstr ""
-#: c-family/c-pragma.c:1221
+#: c-family/c-pragma.c:1224
#, gcc-internal-format
msgid "ISO C does not support %<#pragma STDC FLOAT_CONST_DECIMAL64%>"
msgstr ""
@@ -25271,7 +25351,7 @@ msgstr ""
msgid "wrong type argument to %s"
msgstr ""
-#: c-family/cilk.c:93 cp/parser.c:6516
+#: c-family/cilk.c:93 cp/parser.c:6518
#, gcc-internal-format
msgid "%<_Cilk_spawn%> may only be used inside a function"
msgstr ""
@@ -25316,7 +25396,7 @@ msgstr ""
msgid "too many input files"
msgstr ""
-#: common/config/aarch64/aarch64-common.c:228 config/aarch64/aarch64.c:8192
+#: common/config/aarch64/aarch64-common.c:228 config/aarch64/aarch64.c:8241
#, gcc-internal-format
msgid "unknown value %qs for -mcpu"
msgstr ""
@@ -25418,7 +25498,7 @@ msgid ""
"128, 256, or 512"
msgstr ""
-#: common/config/rs6000/rs6000-common.c:172 config/sparc/sparc.c:1321
+#: common/config/rs6000/rs6000-common.c:172 config/sparc/sparc.c:1320
#, gcc-internal-format, gfc-internal-format
msgid "unknown -mdebug-%s switch"
msgstr ""
@@ -25762,172 +25842,172 @@ msgstr ""
msgid "%Ktotal size and element size must be a non-zero constant immediate"
msgstr ""
-#: config/aarch64/aarch64.c:722
+#: config/aarch64/aarch64.c:721
#, gcc-internal-format
msgid "%qs is incompatible with %s %s"
msgstr ""
-#: config/aarch64/aarch64.c:724
+#: config/aarch64/aarch64.c:723
#, gcc-internal-format
msgid "%qs feature modifier is incompatible with %s %s"
msgstr ""
-#: config/aarch64/aarch64.c:7882
+#: config/aarch64/aarch64.c:7907
#, gcc-internal-format, gfc-internal-format
msgid "unknown flag passed in -moverride=%s (%s)"
msgstr ""
-#: config/aarch64/aarch64.c:7926
+#: config/aarch64/aarch64.c:7951
#, gcc-internal-format, gfc-internal-format
msgid "%s string ill-formed\n"
msgstr ""
-#: config/aarch64/aarch64.c:7983
+#: config/aarch64/aarch64.c:8008
#, gcc-internal-format, gfc-internal-format
msgid "tuning string missing in option (%s)"
msgstr ""
-#: config/aarch64/aarch64.c:8001
+#: config/aarch64/aarch64.c:8026
#, gcc-internal-format, gfc-internal-format
msgid "unknown tuning option (%s)"
msgstr ""
-#: config/aarch64/aarch64.c:8189
+#: config/aarch64/aarch64.c:8238
#, gcc-internal-format
msgid "missing cpu name in -mcpu=%qs"
msgstr ""
-#: config/aarch64/aarch64.c:8195
+#: config/aarch64/aarch64.c:8244
#, gcc-internal-format
msgid "invalid feature modifier in -mcpu=%qs"
msgstr ""
-#: config/aarch64/aarch64.c:8222
+#: config/aarch64/aarch64.c:8271
#, gcc-internal-format
msgid "missing arch name in -march=%qs"
msgstr ""
-#: config/aarch64/aarch64.c:8225
+#: config/aarch64/aarch64.c:8274
#, gcc-internal-format
msgid "unknown value %qs for -march"
msgstr ""
-#: config/aarch64/aarch64.c:8228
+#: config/aarch64/aarch64.c:8277
#, gcc-internal-format
msgid "invalid feature modifier in -march=%qs"
msgstr ""
-#: config/aarch64/aarch64.c:8254
+#: config/aarch64/aarch64.c:8303
#, gcc-internal-format
msgid "missing cpu name in -mtune=%qs"
msgstr ""
-#: config/aarch64/aarch64.c:8257
+#: config/aarch64/aarch64.c:8306
#, gcc-internal-format
msgid "unknown value %qs for -mtune"
msgstr ""
-#: config/aarch64/aarch64.c:8359 config/arm/arm.c:2999
+#: config/aarch64/aarch64.c:8408 config/arm/arm.c:3007
#, gcc-internal-format, gfc-internal-format
msgid "switch -mcpu=%s conflicts with -march=%s switch"
msgstr ""
-#: config/aarch64/aarch64.c:8394
+#: config/aarch64/aarch64.c:8443
#, gcc-internal-format
msgid "Assembler does not support -mabi=ilp32"
msgstr ""
-#: config/aarch64/aarch64.c:8460
+#: config/aarch64/aarch64.c:8509
#, gcc-internal-format
msgid "code model %qs with -f%s"
msgstr ""
-#: config/aarch64/aarch64.c:8641
+#: config/aarch64/aarch64.c:8674
#, gcc-internal-format, gfc-internal-format
msgid "missing architecture name in 'arch' target %s"
msgstr ""
-#: config/aarch64/aarch64.c:8644
+#: config/aarch64/aarch64.c:8677
#, gcc-internal-format
msgid "unknown value %qs for 'arch' target %s"
msgstr ""
-#: config/aarch64/aarch64.c:8647
+#: config/aarch64/aarch64.c:8680
#, gcc-internal-format
msgid "invalid feature modifier %qs for 'arch' target %s"
msgstr ""
-#: config/aarch64/aarch64.c:8681
+#: config/aarch64/aarch64.c:8714
#, gcc-internal-format, gfc-internal-format
msgid "missing cpu name in 'cpu' target %s"
msgstr ""
-#: config/aarch64/aarch64.c:8684
+#: config/aarch64/aarch64.c:8717
#, gcc-internal-format
msgid "unknown value %qs for 'cpu' target %s"
msgstr ""
-#: config/aarch64/aarch64.c:8687
+#: config/aarch64/aarch64.c:8720
#, gcc-internal-format
msgid "invalid feature modifier %qs for 'cpu' target %s"
msgstr ""
-#: config/aarch64/aarch64.c:8718
+#: config/aarch64/aarch64.c:8751
#, gcc-internal-format
msgid "unknown value %qs for 'tune' target %s"
msgstr ""
-#: config/aarch64/aarch64.c:8758
+#: config/aarch64/aarch64.c:8791
#, gcc-internal-format
msgid "missing feature modifier in target %s %qs"
msgstr ""
-#: config/aarch64/aarch64.c:8763
+#: config/aarch64/aarch64.c:8796
#, gcc-internal-format
msgid "invalid feature modifier in target %s %qs"
msgstr ""
-#: config/aarch64/aarch64.c:8811
+#: config/aarch64/aarch64.c:8846
#, gcc-internal-format, gfc-internal-format
msgid "malformed target %s"
msgstr ""
-#: config/aarch64/aarch64.c:8859
+#: config/aarch64/aarch64.c:8894
#, gcc-internal-format
msgid "target %s %qs does not accept an argument"
msgstr ""
-#: config/aarch64/aarch64.c:8868
+#: config/aarch64/aarch64.c:8903
#, gcc-internal-format
msgid "target %s %qs does not allow a negated form"
msgstr ""
-#: config/aarch64/aarch64.c:8923
+#: config/aarch64/aarch64.c:8958
#, gcc-internal-format, gfc-internal-format
msgid "target %s %s=%s is not valid"
msgstr ""
-#: config/aarch64/aarch64.c:8989
+#: config/aarch64/aarch64.c:9024
#, gcc-internal-format, gfc-internal-format
msgid "malformed target %s value"
msgstr ""
-#: config/aarch64/aarch64.c:9006
+#: config/aarch64/aarch64.c:9041
#, gcc-internal-format
msgid "target %s %qs is invalid"
msgstr ""
-#: config/aarch64/aarch64.c:9015
+#: config/aarch64/aarch64.c:9050
#, gcc-internal-format
msgid "malformed target %s list %qs"
msgstr ""
-#: config/aarch64/aarch64.c:10852
+#: config/aarch64/aarch64.c:10893
#, gcc-internal-format
msgid "%Klane %wd out of range %wd - %wd"
msgstr ""
-#: config/aarch64/aarch64.c:10854
+#: config/aarch64/aarch64.c:10895
#, gcc-internal-format
msgid "lane %wd out of range %wd - %wd"
msgstr ""
@@ -25987,8 +26067,8 @@ msgstr ""
msgid "bad value %qs for -mmemory-latency"
msgstr ""
-#: config/alpha/alpha.c:6652 config/alpha/alpha.c:6655 config/arc/arc.c:5375
-#: config/arc/arc.c:5654 config/s390/s390.c:830 config/tilegx/tilegx.c:3540
+#: config/alpha/alpha.c:6652 config/alpha/alpha.c:6655 config/arc/arc.c:5480
+#: config/arc/arc.c:5759 config/s390/s390.c:852 config/tilegx/tilegx.c:3540
#: config/tilepro/tilepro.c:3107
#, gcc-internal-format
msgid "bad builtin fcode"
@@ -26029,151 +26109,171 @@ msgstr ""
msgid "FPX extensions not available on pre-ARC600 cores"
msgstr ""
-#: config/arc/arc.c:728
+#: config/arc/arc.c:730
+#, gcc-internal-format
+msgid "No FPX/FPU mixing allowed"
+msgstr ""
+
+#: config/arc/arc.c:735
#, gcc-internal-format
msgid "This multiplier configuration is not available for HS cores"
msgstr ""
-#: config/arc/arc.c:734
+#: config/arc/arc.c:741
#, gcc-internal-format, gfc-internal-format
msgid "PIC is not supported for %s. Generating non-PIC code only.."
msgstr ""
-#: config/arc/arc.c:740
+#: config/arc/arc.c:747
#, gcc-internal-format
msgid "-matomic is only supported for ARC700 or ARC HS cores"
msgstr ""
-#: config/arc/arc.c:744
+#: config/arc/arc.c:751
#, gcc-internal-format
msgid "-mll64 is only supported for ARC HS cores"
msgstr ""
-#: config/arc/arc.c:1218
+#: config/arc/arc.c:758
+#, gcc-internal-format
+msgid "FPU double precision options are available for ARC HS only"
+msgstr ""
+
+#: config/arc/arc.c:760
+#, gcc-internal-format
+msgid "FPU double precision assist options are not available for ARC HS"
+msgstr ""
+
+#: config/arc/arc.c:763
+#, gcc-internal-format
+msgid "FPU options are available for ARCv2 architecture only"
+msgstr ""
+
+#: config/arc/arc.c:1293
#, gcc-internal-format, gfc-internal-format
msgid "multiply option implies r%d is fixed"
msgstr ""
-#: config/arc/arc.c:1395 config/epiphany/epiphany.c:489
+#: config/arc/arc.c:1493 config/epiphany/epiphany.c:489
#: config/epiphany/epiphany.c:529
#, gcc-internal-format
msgid "argument of %qE attribute is not a string constant"
msgstr ""
-#: config/arc/arc.c:1404
+#: config/arc/arc.c:1502
#, gcc-internal-format
msgid "argument of %qE attribute is not \"ilink1\" or \"ilink2\""
msgstr ""
-#: config/arc/arc.c:1412
+#: config/arc/arc.c:1510
#, gcc-internal-format
msgid "argument of %qE attribute is not \"ilink\""
msgstr ""
-#: config/arc/arc.c:5274
+#: config/arc/arc.c:5379
#, gcc-internal-format
msgid "__builtin_arc_aligned with non-constant alignment"
msgstr ""
-#: config/arc/arc.c:5282
+#: config/arc/arc.c:5387
#, gcc-internal-format
msgid "invalid alignment value for __builtin_arc_aligned"
msgstr ""
-#: config/arc/arc.c:5409
+#: config/arc/arc.c:5514
#, gcc-internal-format
msgid "builtin operand should be an unsigned 6-bit value"
msgstr ""
-#: config/arc/arc.c:5450
+#: config/arc/arc.c:5555
#, gcc-internal-format
msgid "operand 1 should be an unsigned 3-bit immediate"
msgstr ""
-#: config/arc/arc.c:5491 config/arc/arc.c:5588
+#: config/arc/arc.c:5596 config/arc/arc.c:5693
#, gcc-internal-format
msgid "operand 2 should be an unsigned 3-bit value (I0-I7)"
msgstr ""
-#: config/arc/arc.c:5524 config/arc/arc.c:5556
+#: config/arc/arc.c:5629 config/arc/arc.c:5661
#, gcc-internal-format
msgid "operand 1 should be an unsigned 3-bit value (I0-I7)"
msgstr ""
-#: config/arc/arc.c:5528 config/arc/arc.c:5560
+#: config/arc/arc.c:5633 config/arc/arc.c:5665
#, gcc-internal-format
msgid "operand 2 should be an unsigned 8-bit value"
msgstr ""
-#: config/arc/arc.c:5592
+#: config/arc/arc.c:5697
#, gcc-internal-format
msgid "operand 3 should be an unsigned 8-bit value"
msgstr ""
-#: config/arc/arc.c:5625
+#: config/arc/arc.c:5730
#, gcc-internal-format
msgid "operand 4 should be an unsigned 8-bit value (0-255)"
msgstr ""
-#: config/arc/arc.c:5629
+#: config/arc/arc.c:5734
#, gcc-internal-format
msgid "operand 3 should be an unsigned 3-bit value (I0-I7)"
msgstr ""
-#: config/arc/arc.c:5636
+#: config/arc/arc.c:5741
#, gcc-internal-format
msgid "operand 2 should be an unsigned 3-bit value (subreg 0-7)"
msgstr ""
-#: config/arc/arc.c:5639
+#: config/arc/arc.c:5744
#, gcc-internal-format
msgid "operand 2 should be an even 3-bit value (subreg 0,2,4,6)"
msgstr ""
-#: config/arc/arc.c:5686
+#: config/arc/arc.c:5791
#, gcc-internal-format, gfc-internal-format
msgid "builtin requires an immediate for operand %d"
msgstr ""
-#: config/arc/arc.c:5691
+#: config/arc/arc.c:5796
#, gcc-internal-format, gfc-internal-format
msgid "operand %d should be a 6 bit unsigned immediate"
msgstr ""
-#: config/arc/arc.c:5695
+#: config/arc/arc.c:5800
#, gcc-internal-format, gfc-internal-format
msgid "operand %d should be a 8 bit unsigned immediate"
msgstr ""
-#: config/arc/arc.c:5699
+#: config/arc/arc.c:5804
#, gcc-internal-format, gfc-internal-format
msgid "operand %d should be a 3 bit unsigned immediate"
msgstr ""
-#: config/arc/arc.c:5702
+#: config/arc/arc.c:5807
#, gcc-internal-format, gfc-internal-format
msgid "unknown builtin immediate operand type for operand %d"
msgstr ""
-#: config/arc/arc.c:5753
+#: config/arc/arc.c:5858
#, gcc-internal-format
msgid ""
"register number must be a compile-time constant. Try giving higher "
"optimization levels"
msgstr ""
-#: config/arc/arc.c:5773
+#: config/arc/arc.c:5878
#, gcc-internal-format
msgid ""
"operand for sleep instruction must be an unsigned 6 bit compile-time constant"
msgstr ""
-#: config/arc/arc.c:6346
+#: config/arc/arc.c:6451
#, gcc-internal-format
msgid "Insn addresses not set after shorten_branches"
msgstr ""
-#: config/arc/arc.c:6550
+#: config/arc/arc.c:6660
#, gcc-internal-format
msgid "insn addresses not freed"
msgstr ""
@@ -26440,184 +26540,184 @@ msgstr ""
msgid "-mslow-flash-data only supports non-pic code on armv7-m targets"
msgstr ""
-#: config/arm/arm.c:2880
+#: config/arm/arm.c:2888
#, gcc-internal-format
msgid "target CPU does not support THUMB instructions"
msgstr ""
-#: config/arm/arm.c:2923
+#: config/arm/arm.c:2931
#, gcc-internal-format
msgid "target CPU does not support unaligned accesses"
msgstr ""
-#: config/arm/arm.c:3128
+#: config/arm/arm.c:3136
#, gcc-internal-format
msgid "target CPU does not support interworking"
msgstr ""
-#: config/arm/arm.c:3134
+#: config/arm/arm.c:3142
#, gcc-internal-format
msgid "-mapcs-stack-check incompatible with -mno-apcs-frame"
msgstr ""
-#: config/arm/arm.c:3142
+#: config/arm/arm.c:3150
#, gcc-internal-format
msgid "-fpic and -mapcs-reent are incompatible"
msgstr ""
-#: config/arm/arm.c:3145
+#: config/arm/arm.c:3153
#, gcc-internal-format
msgid "APCS reentrant code not supported. Ignored"
msgstr ""
-#: config/arm/arm.c:3148
+#: config/arm/arm.c:3156
#, gcc-internal-format
msgid "passing floating point arguments in fp regs not yet supported"
msgstr ""
-#: config/arm/arm.c:3193
+#: config/arm/arm.c:3201
#, gcc-internal-format
msgid "iwmmxt requires an AAPCS compatible ABI for proper operation"
msgstr ""
-#: config/arm/arm.c:3196
+#: config/arm/arm.c:3204
#, gcc-internal-format
msgid "iwmmxt abi requires an iwmmxt capable cpu"
msgstr ""
-#: config/arm/arm.c:3225
+#: config/arm/arm.c:3233
#, gcc-internal-format
msgid "AAPCS does not support -mcaller-super-interworking"
msgstr ""
-#: config/arm/arm.c:3228
+#: config/arm/arm.c:3236
#, gcc-internal-format
msgid "AAPCS does not support -mcallee-super-interworking"
msgstr ""
-#: config/arm/arm.c:3233
+#: config/arm/arm.c:3241
#, gcc-internal-format
msgid "__fp16 and no ldrh"
msgstr ""
-#: config/arm/arm.c:3249
+#: config/arm/arm.c:3257
#, gcc-internal-format
msgid "-mfloat-abi=hard and VFP"
msgstr ""
-#: config/arm/arm.c:3285
+#: config/arm/arm.c:3293
#, gcc-internal-format
msgid "structure size boundary can only be set to 8, 32 or 64"
msgstr ""
-#: config/arm/arm.c:3287
+#: config/arm/arm.c:3295
#, gcc-internal-format
msgid "structure size boundary can only be set to 8 or 32"
msgstr ""
-#: config/arm/arm.c:3298
+#: config/arm/arm.c:3306
#, gcc-internal-format
msgid "RTP PIC is incompatible with -msingle-pic-base"
msgstr ""
-#: config/arm/arm.c:3310
+#: config/arm/arm.c:3318
#, gcc-internal-format
msgid "-mpic-register= is useless without -fpic"
msgstr ""
-#: config/arm/arm.c:3319
+#: config/arm/arm.c:3327
#, gcc-internal-format, gfc-internal-format
msgid "unable to use '%s' for PIC register"
msgstr ""
-#: config/arm/arm.c:3342
+#: config/arm/arm.c:3350
#, gcc-internal-format
msgid "-freorder-blocks-and-partition not supported on this architecture"
msgstr ""
-#: config/arm/arm.c:5489
+#: config/arm/arm.c:5498
#, gcc-internal-format
msgid "non-AAPCS derived PCS variant"
msgstr ""
-#: config/arm/arm.c:5491
+#: config/arm/arm.c:5500
#, gcc-internal-format
msgid "variadic functions must use the base AAPCS variant"
msgstr ""
-#: config/arm/arm.c:5510
+#: config/arm/arm.c:5519
#, gcc-internal-format
msgid "PCS variant"
msgstr ""
-#: config/arm/arm.c:5705
+#: config/arm/arm.c:5714
#, gcc-internal-format
msgid "Thumb-1 hard-float VFP ABI"
msgstr ""
-#: config/arm/arm.c:6447 config/arm/arm.c:6465 config/avr/avr.c:8981
-#: config/avr/avr.c:8997 config/bfin/bfin.c:4672 config/bfin/bfin.c:4733
+#: config/arm/arm.c:6456 config/arm/arm.c:6474 config/avr/avr.c:8991
+#: config/avr/avr.c:9007 config/bfin/bfin.c:4672 config/bfin/bfin.c:4733
#: config/bfin/bfin.c:4762 config/epiphany/epiphany.c:472
-#: config/h8300/h8300.c:5453 config/i386/i386.c:6788 config/i386/i386.c:11968
-#: config/i386/i386.c:44374 config/i386/i386.c:44424 config/i386/i386.c:44494
+#: config/h8300/h8300.c:5453 config/i386/i386.c:6817 config/i386/i386.c:12002
+#: config/i386/i386.c:44435 config/i386/i386.c:44485 config/i386/i386.c:44555
#: config/m68k/m68k.c:748 config/mcore/mcore.c:3052 config/mep/mep.c:3884
-#: config/mep/mep.c:3898 config/mep/mep.c:3972 config/nvptx/nvptx.c:3796
-#: config/rl78/rl78.c:756 config/rs6000/rs6000.c:30942 config/rx/rx.c:2695
-#: config/rx/rx.c:2721 config/s390/s390.c:1024 config/sh/sh.c:9778
-#: config/sh/sh.c:9796 config/sh/sh.c:9825 config/sh/sh.c:9907
-#: config/sh/sh.c:9930 config/spu/spu.c:3680 config/stormy16/stormy16.c:2211
-#: config/v850/v850.c:2082 config/visium/visium.c:642
+#: config/mep/mep.c:3898 config/mep/mep.c:3972 config/nvptx/nvptx.c:3793
+#: config/rl78/rl78.c:756 config/rs6000/rs6000.c:30961 config/rx/rx.c:2695
+#: config/rx/rx.c:2721 config/s390/s390.c:1046 config/sh/sh.c:9780
+#: config/sh/sh.c:9798 config/sh/sh.c:9827 config/sh/sh.c:9909
+#: config/sh/sh.c:9932 config/spu/spu.c:3680 config/stormy16/stormy16.c:2211
+#: config/v850/v850.c:2082 config/visium/visium.c:699
#, gcc-internal-format
msgid "%qE attribute only applies to functions"
msgstr ""
-#: config/arm/arm.c:12901
+#: config/arm/arm.c:12912
#, gcc-internal-format
msgid "%K%s %wd out of range %wd - %wd"
msgstr ""
-#: config/arm/arm.c:12904
+#: config/arm/arm.c:12915
#, gcc-internal-format
msgid "%s %wd out of range %wd - %wd"
msgstr ""
-#: config/arm/arm.c:23535
+#: config/arm/arm.c:23600
#, gcc-internal-format
msgid "unable to compute real location of stacked parameter"
msgstr ""
-#: config/arm/arm.c:24153
+#: config/arm/arm.c:24211
#, gcc-internal-format
msgid "Unexpected thumb1 far jump"
msgstr ""
-#: config/arm/arm.c:24420
+#: config/arm/arm.c:24478
#, gcc-internal-format
msgid "no low registers available for popping high registers"
msgstr ""
-#: config/arm/arm.c:24664
+#: config/arm/arm.c:24722
#, gcc-internal-format
msgid "interrupt Service Routines cannot be coded in Thumb mode"
msgstr ""
-#: config/arm/arm.c:24889
+#: config/arm/arm.c:24947
#, gcc-internal-format
msgid "-fstack-check=specific for Thumb-1"
msgstr ""
-#: config/arm/arm.c:29901 config/i386/i386.c:6012 config/s390/s390.c:14004
+#: config/arm/arm.c:30008 config/i386/i386.c:6041 config/s390/s390.c:14504
#, gcc-internal-format
msgid "attribute %<target%> argument not a string"
msgstr ""
-#: config/arm/arm.c:29924
+#: config/arm/arm.c:30031
#, gcc-internal-format, gfc-internal-format
msgid "invalid fpu for attribute(target(\"%s\"))"
msgstr ""
-#: config/arm/arm.c:29930 config/i386/i386.c:6078 config/i386/i386.c:6125
-#: config/s390/s390.c:14070 config/s390/s390.c:14120 config/s390/s390.c:14137
+#: config/arm/arm.c:30037 config/i386/i386.c:6107 config/i386/i386.c:6154
+#: config/s390/s390.c:14570 config/s390/s390.c:14620 config/s390/s390.c:14637
#, gcc-internal-format, gfc-internal-format
msgid "attribute(target(\"%s\")) is unknown"
msgstr ""
@@ -26676,199 +26776,199 @@ msgstr ""
#. happen as options are provided by device-specs. It could be a
#. typo in a device-specs or calling the compiler proper directly
#. with -mmcu=<device>.
-#: config/avr/avr.c:368
+#: config/avr/avr.c:369
#, gcc-internal-format
msgid "unknown core architecture %qs specified with %qs"
msgstr ""
-#: config/avr/avr.c:425 config/mep/mep.c:354 config/visium/visium.c:343
+#: config/avr/avr.c:435 config/mep/mep.c:354 config/visium/visium.c:383
#, gcc-internal-format
msgid "-fpic is not supported"
msgstr ""
-#: config/avr/avr.c:427 config/mep/mep.c:356 config/visium/visium.c:345
+#: config/avr/avr.c:437 config/mep/mep.c:356 config/visium/visium.c:385
#, gcc-internal-format
msgid "-fPIC is not supported"
msgstr ""
-#: config/avr/avr.c:429
+#: config/avr/avr.c:439
#, gcc-internal-format
msgid "-fpie is not supported"
msgstr ""
-#: config/avr/avr.c:431
+#: config/avr/avr.c:441
#, gcc-internal-format
msgid "-fPIE is not supported"
msgstr ""
-#: config/avr/avr.c:703
+#: config/avr/avr.c:713
#, gcc-internal-format
msgid "function attributes %qs, %qs and %qs are mutually exclusive"
msgstr ""
-#: config/avr/avr.c:710
+#: config/avr/avr.c:720
#, gcc-internal-format
msgid "function attributes %qs and %qs have no effect on %qs function"
msgstr ""
-#: config/avr/avr.c:737
+#: config/avr/avr.c:747
#, gcc-internal-format
msgid "%qs function cannot have arguments"
msgstr ""
-#: config/avr/avr.c:740
+#: config/avr/avr.c:750
#, gcc-internal-format
msgid "%qs function cannot return a value"
msgstr ""
-#: config/avr/avr.c:747
+#: config/avr/avr.c:757
#, gcc-internal-format
msgid "%qs appears to be a misspelled %s handler"
msgstr ""
-#: config/avr/avr.c:974
+#: config/avr/avr.c:984
#, gcc-internal-format
msgid "%<builtin_return_address%> contains only 2 bytes of address"
msgstr ""
-#: config/avr/avr.c:2198
+#: config/avr/avr.c:2208
#, gcc-internal-format
msgid "pointer offset from symbol maybe incorrect"
msgstr ""
-#: config/avr/avr.c:2337
+#: config/avr/avr.c:2347
#, gcc-internal-format
msgid "accessing data memory with program memory address"
msgstr ""
-#: config/avr/avr.c:2398
+#: config/avr/avr.c:2408
#, gcc-internal-format
msgid "accessing program memory with data memory address"
msgstr ""
-#: config/avr/avr.c:2843
+#: config/avr/avr.c:2853
#, gcc-internal-format, gfc-internal-format
msgid "fixed register %s used to pass parameter to function"
msgstr ""
-#: config/avr/avr.c:3114
+#: config/avr/avr.c:3124
#, gcc-internal-format
msgid "writing to address space %qs not supported"
msgstr ""
-#: config/avr/avr.c:9014 config/bfin/bfin.c:4794 config/i386/winnt.c:58
+#: config/avr/avr.c:9024 config/bfin/bfin.c:4794 config/i386/winnt.c:58
#: config/mep/mep.c:3788 config/mep/mep.c:3926
#, gcc-internal-format
msgid "%qE attribute only applies to variables"
msgstr ""
-#: config/avr/avr.c:9025 config/mep/mep.c:3936
+#: config/avr/avr.c:9035 config/mep/mep.c:3936
#, gcc-internal-format
msgid "%qE attribute allows only an integer constant argument"
msgstr ""
-#: config/avr/avr.c:9035
+#: config/avr/avr.c:9045
#, gcc-internal-format
msgid "%qE attribute address out of range"
msgstr ""
-#: config/avr/avr.c:9048
+#: config/avr/avr.c:9058
#, gcc-internal-format
msgid "both %s and %qE attribute provide address"
msgstr ""
-#: config/avr/avr.c:9058
+#: config/avr/avr.c:9068
#, gcc-internal-format
msgid "%qE attribute on non-volatile variable"
msgstr ""
-#: config/avr/avr.c:9262
+#: config/avr/avr.c:9272
#, gcc-internal-format
msgid "%qT uses address space %qs beyond flash of %d KiB"
msgstr ""
-#: config/avr/avr.c:9265
+#: config/avr/avr.c:9275
#, gcc-internal-format
msgid "%s %q+D uses address space %qs beyond flash of %d KiB"
msgstr ""
-#: config/avr/avr.c:9271
+#: config/avr/avr.c:9281
#, gcc-internal-format
msgid "pointer targeting address space %qs must be const in %qT"
msgstr ""
-#: config/avr/avr.c:9274
+#: config/avr/avr.c:9284
#, gcc-internal-format
msgid "pointer targeting address space %qs must be const in %s %q+D"
msgstr ""
-#: config/avr/avr.c:9312
+#: config/avr/avr.c:9322
#, gcc-internal-format
msgid "variable %q+D located in address space %qs beyond flash of %d KiB"
msgstr ""
-#: config/avr/avr.c:9317
+#: config/avr/avr.c:9327
#, gcc-internal-format
msgid ""
"variable %q+D located in address space %qs which is not supported for "
"architecture %qs"
msgstr ""
-#: config/avr/avr.c:9333
+#: config/avr/avr.c:9343
#, 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:9373
+#: config/avr/avr.c:9383
#, gcc-internal-format
msgid "static IO declaration for %q+D needs an address"
msgstr ""
-#: config/avr/avr.c:9405
+#: config/avr/avr.c:9415
#, gcc-internal-format
msgid "IO definition for %q+D needs an address"
msgstr ""
-#: config/avr/avr.c:9589
+#: config/avr/avr.c:9599
#, gcc-internal-format
msgid "only uninitialized variables can be placed in the .noinit section"
msgstr ""
-#: config/avr/avr.c:9630
+#: config/avr/avr.c:9640
#, gcc-internal-format
msgid "uninitialized variable %q+D put into program memory area"
msgstr ""
-#: config/avr/avr.c:9740
+#: config/avr/avr.c:9750
#, gcc-internal-format
msgid "architecture %qs supported for assembler only"
msgstr ""
-#: config/avr/avr.c:12259
+#: config/avr/avr.c:12269
#, gcc-internal-format
msgid "conversion from address space %qs to address space %qs"
msgstr ""
-#: config/avr/avr.c:13315
+#: config/avr/avr.c:13325
#, gcc-internal-format, gfc-internal-format
msgid "%s expects a compile time integer constant"
msgstr ""
-#: config/avr/avr.c:13329
+#: config/avr/avr.c:13339
#, gcc-internal-format, gfc-internal-format
msgid "%s expects a compile time long integer constant as first argument"
msgstr ""
-#: config/avr/avr.c:13357
+#: config/avr/avr.c:13367
#, 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:13366
+#: config/avr/avr.c:13376
#, gcc-internal-format
msgid "rounding result will always be 0"
msgstr ""
@@ -27271,55 +27371,55 @@ msgstr ""
msgid "can%'t set position in PCH file: %m"
msgstr ""
-#: config/i386/i386.c:4066
+#: config/i386/i386.c:4088
#, gcc-internal-format, gfc-internal-format
msgid "wrong arg %s to option %s"
msgstr ""
-#: config/i386/i386.c:4073
+#: config/i386/i386.c:4095
#, gcc-internal-format, gfc-internal-format
msgid "size ranges of option %s should be increasing"
msgstr ""
-#: config/i386/i386.c:4084
+#: config/i386/i386.c:4106
#, gcc-internal-format, gfc-internal-format
msgid "wrong stringop strategy name %s specified for option %s"
msgstr ""
#. rep; movq isn't available in 32-bit code.
-#: config/i386/i386.c:4094
+#: config/i386/i386.c:4116
#, gcc-internal-format, gfc-internal-format
msgid ""
"stringop strategy name %s specified for option %s not supported for 32-bit "
"code"
msgstr ""
-#: config/i386/i386.c:4109
+#: config/i386/i386.c:4131
#, gcc-internal-format, gfc-internal-format
msgid "unknown alignment %s specified for option %s"
msgstr ""
-#: config/i386/i386.c:4120
+#: config/i386/i386.c:4142
#, gcc-internal-format, gfc-internal-format
msgid "the max value for the last size range should be -1 for option %s"
msgstr ""
-#: config/i386/i386.c:4128
+#: config/i386/i386.c:4150
#, gcc-internal-format, gfc-internal-format
msgid "too many size ranges specified in option %s"
msgstr ""
-#: config/i386/i386.c:4182
+#: config/i386/i386.c:4204
#, gcc-internal-format, gfc-internal-format
msgid "Unknown parameter to option -mtune-ctrl: %s"
msgstr ""
-#: config/i386/i386.c:4570
+#: config/i386/i386.c:4592
#, gcc-internal-format
msgid "Intel MCU psABI isn%'t supported in %s mode"
msgstr ""
-#: config/i386/i386.c:4617
+#: config/i386/i386.c:4639
#, gcc-internal-format, gfc-internal-format
msgid ""
"%stune=x86-64%s is deprecated; use %stune=k8%s or %stune=generic%s instead "
@@ -27327,348 +27427,348 @@ msgid ""
msgstr ""
#. rep; movq isn't available in 32-bit code.
-#: config/i386/i386.c:4644
+#: config/i386/i386.c:4666
#, gcc-internal-format
msgid "-mstringop-strategy=rep_8byte not supported for 32-bit code"
msgstr ""
-#: config/i386/i386.c:4661
+#: config/i386/i386.c:4683
#, gcc-internal-format
msgid "address mode %qs not supported in the %s bit mode"
msgstr ""
-#: config/i386/i386.c:4687 config/i386/i386.c:4696 config/i386/i386.c:4708
-#: config/i386/i386.c:4719 config/i386/i386.c:4730
+#: config/i386/i386.c:4709 config/i386/i386.c:4718 config/i386/i386.c:4730
+#: config/i386/i386.c:4741 config/i386/i386.c:4752
#, gcc-internal-format
msgid "code model %qs not supported in the %s bit mode"
msgstr ""
-#: config/i386/i386.c:4699 config/i386/i386.c:4711
+#: config/i386/i386.c:4721 config/i386/i386.c:4733
#, gcc-internal-format
msgid "code model %qs not supported in x32 mode"
msgstr ""
-#: config/i386/i386.c:4717 config/i386/i386.c:4726 config/i386/i386.c:5808
+#: config/i386/i386.c:4739 config/i386/i386.c:4748 config/i386/i386.c:5837
#, gcc-internal-format, gfc-internal-format
msgid "code model %s does not support PIC mode"
msgstr ""
-#: config/i386/i386.c:4754
+#: config/i386/i386.c:4776
#, gcc-internal-format
msgid "-masm=intel not supported in this configuration"
msgstr ""
-#: config/i386/i386.c:4759
+#: config/i386/i386.c:4781
#, gcc-internal-format, gfc-internal-format
msgid "%i-bit mode not compiled in"
msgstr ""
-#: config/i386/i386.c:4772 config/i386/i386.c:5003
+#: config/i386/i386.c:4794 config/i386/i386.c:5025
#, gcc-internal-format
msgid "CPU you selected does not support x86-64 instruction set"
msgstr ""
-#: config/i386/i386.c:4964 config/i386/i386.c:4967
+#: config/i386/i386.c:4986 config/i386/i386.c:4989
#, gcc-internal-format
msgid "Intel MPX does not support x32"
msgstr ""
-#: config/i386/i386.c:4970
+#: config/i386/i386.c:4992
#, gcc-internal-format, gfc-internal-format
msgid "generic CPU can be used only for %stune=%s %s"
msgstr ""
-#: config/i386/i386.c:4973
+#: config/i386/i386.c:4995
#, gcc-internal-format, gfc-internal-format
msgid "intel CPU can be used only for %stune=%s %s"
msgstr ""
-#: config/i386/i386.c:4976
+#: config/i386/i386.c:4998
#, gcc-internal-format, gfc-internal-format
msgid "bad value (%s) for %sarch=%s %s"
msgstr ""
-#: config/i386/i386.c:5019
+#: config/i386/i386.c:5041
#, gcc-internal-format, gfc-internal-format
msgid "bad value (%s) for %stune=%s %s"
msgstr ""
-#: config/i386/i386.c:5083
+#: config/i386/i386.c:5105
#, gcc-internal-format
msgid "-mregparm is ignored in 64-bit mode"
msgstr ""
-#: config/i386/i386.c:5085
+#: config/i386/i386.c:5107
#, gcc-internal-format
msgid "-mregparm is ignored for Intel MCU psABI"
msgstr ""
-#: config/i386/i386.c:5088
+#: config/i386/i386.c:5110
#, gcc-internal-format, gfc-internal-format
msgid "-mregparm=%d is not between 0 and %d"
msgstr ""
-#: config/i386/i386.c:5119
+#: config/i386/i386.c:5141
#, gcc-internal-format, gfc-internal-format
msgid "%srtd%s is ignored in 64bit mode"
msgstr ""
-#: config/i386/i386.c:5197
+#: config/i386/i386.c:5219
#, gcc-internal-format
msgid "-mpreferred-stack-boundary is not supported for this target"
msgstr ""
-#: config/i386/i386.c:5200
+#: config/i386/i386.c:5222
#, gcc-internal-format, gfc-internal-format
msgid "-mpreferred-stack-boundary=%d is not between %d and %d"
msgstr ""
-#: config/i386/i386.c:5223
+#: config/i386/i386.c:5245
#, gcc-internal-format, gfc-internal-format
msgid "-mincoming-stack-boundary=%d is not between %d and 12"
msgstr ""
-#: config/i386/i386.c:5236
+#: config/i386/i386.c:5258
#, gcc-internal-format
msgid "-mnop-mcount is not compatible with this target"
msgstr ""
-#: config/i386/i386.c:5239
+#: config/i386/i386.c:5261
#, gcc-internal-format
msgid "-mnop-mcount is not implemented for -fPIC"
msgstr ""
-#: config/i386/i386.c:5244
+#: config/i386/i386.c:5266
#, gcc-internal-format, gfc-internal-format
msgid "%ssseregparm%s used without SSE enabled"
msgstr ""
-#: config/i386/i386.c:5254
+#: config/i386/i386.c:5276
#, gcc-internal-format
msgid "SSE instruction set disabled, using 387 arithmetics"
msgstr ""
-#: config/i386/i386.c:5261
+#: config/i386/i386.c:5283
#, gcc-internal-format
msgid "387 instruction set disabled, using SSE arithmetics"
msgstr ""
-#: config/i386/i386.c:5309
+#: config/i386/i386.c:5331
#, gcc-internal-format, gfc-internal-format
msgid "stack probing requires %saccumulate-outgoing-args%s for correctness"
msgstr ""
-#: config/i386/i386.c:5320
+#: config/i386/i386.c:5342
#, gcc-internal-format, gfc-internal-format
msgid "fixed ebp register requires %saccumulate-outgoing-args%s"
msgstr ""
-#: config/i386/i386.c:5433
+#: config/i386/i386.c:5455
#, gcc-internal-format
msgid "-mfentry isn%'t supported for 32-bit in combination with -fpic"
msgstr ""
-#: config/i386/i386.c:5440
+#: config/i386/i386.c:5462
#, gcc-internal-format
msgid "-mno-fentry isn%'t compatible with SEH"
msgstr ""
-#: config/i386/i386.c:5499 config/rs6000/rs6000.c:4824
+#: config/i386/i386.c:5528 config/rs6000/rs6000.c:4825
#, gcc-internal-format, gfc-internal-format
msgid "unknown option for -mrecip=%s"
msgstr ""
-#: config/i386/i386.c:6106
+#: config/i386/i386.c:6135
#, gcc-internal-format, gfc-internal-format
msgid "option(\"%s\") was already specified"
msgstr ""
-#: config/i386/i386.c:6801 config/i386/i386.c:6852
+#: config/i386/i386.c:6830 config/i386/i386.c:6881
#, gcc-internal-format
msgid "fastcall and regparm attributes are not compatible"
msgstr ""
-#: config/i386/i386.c:6806
+#: config/i386/i386.c:6835
#, gcc-internal-format
msgid "regparam and thiscall attributes are not compatible"
msgstr ""
-#: config/i386/i386.c:6813 config/i386/i386.c:44394
+#: config/i386/i386.c:6842 config/i386/i386.c:44455
#, gcc-internal-format
msgid "%qE attribute requires an integer constant argument"
msgstr ""
-#: config/i386/i386.c:6819
+#: config/i386/i386.c:6848
#, gcc-internal-format
msgid "argument to %qE attribute larger than %d"
msgstr ""
-#: config/i386/i386.c:6844 config/i386/i386.c:6887
+#: config/i386/i386.c:6873 config/i386/i386.c:6916
#, gcc-internal-format
msgid "fastcall and cdecl attributes are not compatible"
msgstr ""
-#: config/i386/i386.c:6848
+#: config/i386/i386.c:6877
#, gcc-internal-format
msgid "fastcall and stdcall attributes are not compatible"
msgstr ""
-#: config/i386/i386.c:6856 config/i386/i386.c:6905
+#: config/i386/i386.c:6885 config/i386/i386.c:6934
#, gcc-internal-format
msgid "fastcall and thiscall attributes are not compatible"
msgstr ""
-#: config/i386/i386.c:6866 config/i386/i386.c:6883
+#: config/i386/i386.c:6895 config/i386/i386.c:6912
#, gcc-internal-format
msgid "stdcall and cdecl attributes are not compatible"
msgstr ""
-#: config/i386/i386.c:6870
+#: config/i386/i386.c:6899
#, gcc-internal-format
msgid "stdcall and fastcall attributes are not compatible"
msgstr ""
-#: config/i386/i386.c:6874 config/i386/i386.c:6901
+#: config/i386/i386.c:6903 config/i386/i386.c:6930
#, gcc-internal-format
msgid "stdcall and thiscall attributes are not compatible"
msgstr ""
-#: config/i386/i386.c:6891 config/i386/i386.c:6909
+#: config/i386/i386.c:6920 config/i386/i386.c:6938
#, gcc-internal-format
msgid "cdecl and thiscall attributes are not compatible"
msgstr ""
-#: config/i386/i386.c:6897
+#: config/i386/i386.c:6926
#, gcc-internal-format
msgid "%qE attribute is used for non-class method"
msgstr ""
-#: config/i386/i386.c:7135
+#: config/i386/i386.c:7164
#, gcc-internal-format
msgid "calling %qD with attribute sseregparm without SSE/SSE2 enabled"
msgstr ""
-#: config/i386/i386.c:7138
+#: config/i386/i386.c:7167
#, gcc-internal-format
msgid "calling %qT with attribute sseregparm without SSE/SSE2 enabled"
msgstr ""
-#: config/i386/i386.c:7466
+#: config/i386/i386.c:7495
#, gcc-internal-format
msgid "X32 does not support ms_abi attribute"
msgstr ""
-#: config/i386/i386.c:7498
+#: config/i386/i386.c:7527
#, gcc-internal-format
msgid "ms_hook_prologue is not compatible with nested function"
msgstr ""
-#: config/i386/i386.c:7807
+#: config/i386/i386.c:7840
#, gcc-internal-format
msgid "AVX512F vector argument without AVX512F enabled changes the ABI"
msgstr ""
-#: config/i386/i386.c:7813
+#: config/i386/i386.c:7846
#, gcc-internal-format
msgid "AVX512F vector return without AVX512F enabled changes the ABI"
msgstr ""
-#: config/i386/i386.c:7827
+#: config/i386/i386.c:7860
#, gcc-internal-format
msgid "AVX vector argument without AVX enabled changes the ABI"
msgstr ""
-#: config/i386/i386.c:7833
+#: config/i386/i386.c:7866
#, gcc-internal-format
msgid "AVX vector return without AVX enabled changes the ABI"
msgstr ""
-#: config/i386/i386.c:7849
+#: config/i386/i386.c:7882
#, gcc-internal-format
msgid "SSE vector argument without SSE enabled changes the ABI"
msgstr ""
-#: config/i386/i386.c:7855
+#: config/i386/i386.c:7888
#, gcc-internal-format
msgid "SSE vector return without SSE enabled changes the ABI"
msgstr ""
-#: config/i386/i386.c:7869
+#: config/i386/i386.c:7902
#, gcc-internal-format
msgid "MMX vector argument without MMX enabled changes the ABI"
msgstr ""
-#: config/i386/i386.c:7875
+#: config/i386/i386.c:7908
#, gcc-internal-format
msgid "MMX vector return without MMX enabled changes the ABI"
msgstr ""
-#: config/i386/i386.c:8057
+#: config/i386/i386.c:8090
#, 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:8174
+#: config/i386/i386.c:8207
#, gcc-internal-format
msgid "the ABI of passing union with long double has changed in GCC 4.4"
msgstr ""
-#: config/i386/i386.c:8292
+#: config/i386/i386.c:8325
#, gcc-internal-format
msgid ""
"the ABI of passing structure with complex float member has changed in GCC 4.4"
msgstr ""
-#: config/i386/i386.c:8455
+#: config/i386/i386.c:8488
#, gcc-internal-format
msgid "SSE register return with SSE disabled"
msgstr ""
-#: config/i386/i386.c:8461
+#: config/i386/i386.c:8494
#, gcc-internal-format
msgid "SSE register argument with SSE disabled"
msgstr ""
-#: config/i386/i386.c:8477
+#: config/i386/i386.c:8510
#, gcc-internal-format
msgid "x87 register return with x87 disabled"
msgstr ""
-#: config/i386/i386.c:8772 config/i386/i386.c:9037
+#: config/i386/i386.c:8805 config/i386/i386.c:9070
#, gcc-internal-format
msgid "calling %qD with SSE calling convention without SSE/SSE2 enabled"
msgstr ""
-#: config/i386/i386.c:8774 config/i386/i386.c:9039 config/i386/i386.c:9532
+#: config/i386/i386.c:8807 config/i386/i386.c:9072 config/i386/i386.c:9565
#, 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:9432
+#: config/i386/i386.c:9465
#, 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:9530
+#: config/i386/i386.c:9563
#, gcc-internal-format
msgid "calling %qD with SSE caling convention without SSE/SSE2 enabled"
msgstr ""
-#: config/i386/i386.c:12657
+#: config/i386/i386.c:12691
#, gcc-internal-format
msgid "ms_hook_prologue attribute isn%'t compatible with -mfentry for 32-bit"
msgstr ""
-#: config/i386/i386.c:13721
+#: config/i386/i386.c:13757
#, gcc-internal-format
msgid "-fsplit-stack does not support fastcall with nested function"
msgstr ""
-#: config/i386/i386.c:13741
+#: config/i386/i386.c:13777
#, gcc-internal-format
msgid ""
"-fsplit-stack does not support 2 register parameters for a nested function"
@@ -27676,268 +27776,268 @@ msgstr ""
#. FIXME: We could make this work by pushing a register
#. around the addition and comparison.
-#: config/i386/i386.c:13752
+#: config/i386/i386.c:13788
#, gcc-internal-format
msgid "-fsplit-stack does not support 3 register parameters"
msgstr ""
-#: config/i386/i386.c:16563
+#: config/i386/i386.c:16599
#, gcc-internal-format
msgid "extended registers have no high halves"
msgstr ""
-#: config/i386/i386.c:16578
+#: config/i386/i386.c:16614
#, gcc-internal-format
msgid "unsupported operand size for extended register"
msgstr ""
-#: config/i386/i386.c:16770
+#: config/i386/i386.c:16806
#, gcc-internal-format
msgid "non-integer operand used with operand code 'z'"
msgstr ""
-#: config/i386/i386.c:36322
+#: config/i386/i386.c:36396
#, gcc-internal-format
msgid "No dispatcher found for the versioning attributes"
msgstr ""
-#: config/i386/i386.c:36372
+#: config/i386/i386.c:36446
#, gcc-internal-format, gfc-internal-format
msgid "No dispatcher found for %s"
msgstr ""
-#: config/i386/i386.c:36382
+#: config/i386/i386.c:36456
#, gcc-internal-format, gfc-internal-format
msgid "No dispatcher found for the versioning attributes : %s"
msgstr ""
-#: config/i386/i386.c:36630
+#: config/i386/i386.c:36704
#, gcc-internal-format
msgid ""
"Function versions cannot be marked as gnu_inline, bodies have to be generated"
msgstr ""
-#: config/i386/i386.c:36635 config/i386/i386.c:37063
+#: config/i386/i386.c:36709 config/i386/i386.c:37137
#, gcc-internal-format
msgid "Virtual function multiversioning not supported"
msgstr ""
-#: config/i386/i386.c:36698
+#: config/i386/i386.c:36772
#, gcc-internal-format
msgid "missing %<target%> attribute for multi-versioned %D"
msgstr ""
-#: config/i386/i386.c:36701
+#: config/i386/i386.c:36775
#, gcc-internal-format
msgid "previous declaration of %D"
msgstr ""
-#: config/i386/i386.c:36920
+#: config/i386/i386.c:36994
#, gcc-internal-format
msgid "multiversioning needs ifunc which is not supported on this target"
msgstr ""
-#: config/i386/i386.c:37306
+#: config/i386/i386.c:37380
#, gcc-internal-format
msgid "Parameter to builtin must be a string constant or literal"
msgstr ""
-#: config/i386/i386.c:37331 config/i386/i386.c:37381
+#: config/i386/i386.c:37405 config/i386/i386.c:37455
#, gcc-internal-format, gfc-internal-format
msgid "Parameter to builtin not valid: %s"
msgstr ""
-#: config/i386/i386.c:37792 config/i386/i386.c:39143
+#: config/i386/i386.c:37866 config/i386/i386.c:39217
#, gcc-internal-format
msgid "the last argument must be a 2-bit immediate"
msgstr ""
-#: config/i386/i386.c:38187
+#: config/i386/i386.c:38261
#, gcc-internal-format
msgid "the fifth argument must be an 8-bit immediate"
msgstr ""
-#: config/i386/i386.c:38282
+#: config/i386/i386.c:38356
#, gcc-internal-format
msgid "the third argument must be an 8-bit immediate"
msgstr ""
-#: config/i386/i386.c:39074
+#: config/i386/i386.c:39148
#, gcc-internal-format
msgid "the last argument must be an 1-bit immediate"
msgstr ""
-#: config/i386/i386.c:39089
+#: config/i386/i386.c:39163
#, gcc-internal-format
msgid "the last argument must be a 3-bit immediate"
msgstr ""
-#: config/i386/i386.c:39122
+#: config/i386/i386.c:39196
#, gcc-internal-format
msgid "the last argument must be a 4-bit immediate"
msgstr ""
-#: config/i386/i386.c:39162
+#: config/i386/i386.c:39236
#, gcc-internal-format
msgid "the last argument must be a 1-bit immediate"
msgstr ""
-#: config/i386/i386.c:39175
+#: config/i386/i386.c:39249
#, gcc-internal-format
msgid "the last argument must be a 5-bit immediate"
msgstr ""
-#: config/i386/i386.c:39185
+#: config/i386/i386.c:39259
#, gcc-internal-format
msgid "the next to last argument must be an 8-bit immediate"
msgstr ""
-#: config/i386/i386.c:39189 config/i386/i386.c:39953
+#: config/i386/i386.c:39263 config/i386/i386.c:40027
#, gcc-internal-format
msgid "the last argument must be an 8-bit immediate"
msgstr ""
-#: config/i386/i386.c:39356
+#: config/i386/i386.c:39430
#, gcc-internal-format
msgid "the third argument must be comparison constant"
msgstr ""
-#: config/i386/i386.c:39361
+#: config/i386/i386.c:39435
#, gcc-internal-format
msgid "incorrect comparison mode"
msgstr ""
-#: config/i386/i386.c:39367 config/i386/i386.c:39568
+#: config/i386/i386.c:39441 config/i386/i386.c:39642
#, gcc-internal-format
msgid "incorrect rounding operand"
msgstr ""
-#: config/i386/i386.c:39550
+#: config/i386/i386.c:39624
#, gcc-internal-format
msgid "the immediate argument must be a 4-bit immediate"
msgstr ""
-#: config/i386/i386.c:39556
+#: config/i386/i386.c:39630
#, gcc-internal-format
msgid "the immediate argument must be a 5-bit immediate"
msgstr ""
-#: config/i386/i386.c:39559
+#: config/i386/i386.c:39633
#, gcc-internal-format
msgid "the immediate argument must be an 8-bit immediate"
msgstr ""
-#: config/i386/i386.c:39951
+#: config/i386/i386.c:40025
#, gcc-internal-format
msgid "the last argument must be a 32-bit immediate"
msgstr ""
-#: config/i386/i386.c:40033 config/rs6000/rs6000.c:13952
+#: config/i386/i386.c:40107 config/rs6000/rs6000.c:13947
#, gcc-internal-format
msgid "selector must be an integer constant in the range 0..%wi"
msgstr ""
-#: config/i386/i386.c:40227
+#: config/i386/i386.c:40301
#, gcc-internal-format
msgid "%qE needs unknown isa option"
msgstr ""
-#: config/i386/i386.c:40231
+#: config/i386/i386.c:40305
#, gcc-internal-format
msgid "%qE needs isa option %s"
msgstr ""
-#: config/i386/i386.c:40993
+#: config/i386/i386.c:41067
#, gcc-internal-format
msgid "last argument must be an immediate"
msgstr ""
-#: config/i386/i386.c:41602 config/i386/i386.c:41784
+#: config/i386/i386.c:41676 config/i386/i386.c:41858
#, gcc-internal-format
msgid "the last argument must be scale 1, 2, 4, 8"
msgstr ""
-#: config/i386/i386.c:41837
+#: config/i386/i386.c:41911
#, gcc-internal-format
msgid "the forth argument must be scale 1, 2, 4, 8"
msgstr ""
-#: config/i386/i386.c:41843
+#: config/i386/i386.c:41917
#, gcc-internal-format
msgid "incorrect hint operand"
msgstr ""
-#: config/i386/i386.c:41862
+#: config/i386/i386.c:41936
#, gcc-internal-format
msgid "the xabort's argument must be an 8-bit immediate"
msgstr ""
-#: config/i386/i386.c:44381
+#: config/i386/i386.c:44442
#, gcc-internal-format
msgid "%qE attribute only available for 32-bit"
msgstr ""
-#: config/i386/i386.c:44402
+#: config/i386/i386.c:44463
#, gcc-internal-format
msgid "argument to %qE attribute is neither zero, nor one"
msgstr ""
-#: config/i386/i386.c:44435 config/i386/i386.c:44444
+#: config/i386/i386.c:44496 config/i386/i386.c:44505
#, gcc-internal-format
msgid "ms_abi and sysv_abi attributes are not compatible"
msgstr ""
-#: config/i386/i386.c:44480 config/rs6000/rs6000.c:31025
+#: config/i386/i386.c:44541 config/rs6000/rs6000.c:31044
#, gcc-internal-format
msgid "%qE incompatible attribute ignored"
msgstr ""
-#: config/i386/i386.c:47412
+#: config/i386/i386.c:47478
#, gcc-internal-format
msgid "alternatives not allowed in asm flag output"
msgstr ""
-#: config/i386/i386.c:47476
+#: config/i386/i386.c:47542
#, gcc-internal-format
msgid "unknown asm flag output %qs"
msgstr ""
-#: config/i386/i386.c:47505
+#: config/i386/i386.c:47571
#, gcc-internal-format
msgid "invalid type for asm flag output"
msgstr ""
-#: config/i386/i386.c:53657
+#: config/i386/i386.c:53731
#, gcc-internal-format
msgid "Unknown architecture specific memory model"
msgstr ""
-#: config/i386/i386.c:53664
+#: config/i386/i386.c:53738
#, gcc-internal-format
msgid "HLE_ACQUIRE not used with ACQUIRE or stronger memory model"
msgstr ""
-#: config/i386/i386.c:53670
+#: config/i386/i386.c:53744
#, gcc-internal-format
msgid "HLE_RELEASE not used with RELEASE or stronger memory model"
msgstr ""
-#: config/i386/i386.c:53694
+#: config/i386/i386.c:53768 config/i386/i386.c:53883
#, gcc-internal-format, gfc-internal-format
msgid "unsupported simdlen %d"
msgstr ""
-#: config/i386/i386.c:53713
+#: config/i386/i386.c:53787
#, gcc-internal-format
msgid "unsupported return type %qT for simd\n"
msgstr ""
-#: config/i386/i386.c:53735
+#: config/i386/i386.c:53809
#, gcc-internal-format
msgid "unsupported argument type %qT for simd\n"
msgstr ""
-#: config/i386/i386.c:54021
+#: config/i386/i386.c:54129
#, gcc-internal-format
msgid ""
"Pointer Checker requires MPX support on this target. Use -mmpx options to "
@@ -28033,13 +28133,13 @@ msgstr ""
msgid "%qE attribute requires a string constant argument"
msgstr ""
-#: config/ia64/ia64.c:5928 config/pa/pa.c:425 config/sh/sh.c:9614
+#: config/ia64/ia64.c:5928 config/pa/pa.c:425 config/sh/sh.c:9616
#: config/spu/spu.c:4892
#, gcc-internal-format
msgid "value of -mfixed-range must have form REG1-REG2"
msgstr ""
-#: config/ia64/ia64.c:5955 config/pa/pa.c:452 config/sh/sh.c:9640
+#: config/ia64/ia64.c:5955 config/pa/pa.c:452 config/sh/sh.c:9642
#: config/spu/spu.c:4918
#, gcc-internal-format, gfc-internal-format
msgid "%s-%s is an empty range"
@@ -28111,7 +28211,7 @@ msgid "%qE attribute is not supported for R8C target"
msgstr ""
#. The argument must be a constant integer.
-#: config/m32c/m32c.c:2940 config/sh/sh.c:9833 config/sh/sh.c:9939
+#: config/m32c/m32c.c:2940 config/sh/sh.c:9835 config/sh/sh.c:9941
#, gcc-internal-format
msgid "%qE attribute argument not an integer constant"
msgstr ""
@@ -28171,7 +28271,7 @@ msgstr ""
msgid "interrupt_thread is available only on fido"
msgstr ""
-#: config/m68k/m68k.c:1096 config/rs6000/rs6000.c:24271
+#: config/m68k/m68k.c:1096 config/rs6000/rs6000.c:24279
#, gcc-internal-format
msgid "stack limit expression is not supported"
msgstr ""
@@ -28410,7 +28510,7 @@ msgstr ""
msgid "argument %d of %qE must be a multiple of %d"
msgstr ""
-#: config/mep/mep.c:6144 c/c-typeck.c:6610
+#: config/mep/mep.c:6144 c/c-typeck.c:6624
#, gcc-internal-format
msgid "incompatible type for argument %d of %qE"
msgstr ""
@@ -28813,33 +28913,33 @@ msgstr ""
msgid "msp430_select_hwmult_lib needs one or more arguments"
msgstr ""
-#: config/msp430/msp430.c:762
+#: config/msp430/msp430.c:776
#, gcc-internal-format, gfc-internal-format
msgid "MCU '%s' supports %s ISA but -mcpu option is set to %s"
msgstr ""
-#: config/msp430/msp430.c:768
+#: config/msp430/msp430.c:782
#, 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:774
+#: config/msp430/msp430.c:788
#, gcc-internal-format, gfc-internal-format
msgid "MCU '%s' supports %s hardware multiply, but -mhwmult is set to 16-bit"
msgstr ""
-#: config/msp430/msp430.c:777
+#: config/msp430/msp430.c:791
#, 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:780
+#: config/msp430/msp430.c:794
#, gcc-internal-format, gfc-internal-format
msgid "MCU '%s' supports %s hardware multiply, but -mhwmult is set to f5series"
msgstr ""
-#: config/msp430/msp430.c:796
+#: config/msp430/msp430.c:810
#, gcc-internal-format, gfc-internal-format
msgid ""
"Unrecognised MCU name '%s', assuming that it is just a MSP430 with no "
@@ -28847,76 +28947,76 @@ msgid ""
"Use the -mcpu and -mhwmult options to set these explicitly."
msgstr ""
-#: config/msp430/msp430.c:800
+#: config/msp430/msp430.c:814
#, gcc-internal-format, gfc-internal-format
msgid ""
"Unrecognised MCU name '%s', assuming that it has no hardware multiply.\n"
"Use the -mhwmult option to set this explicitly."
msgstr ""
-#: config/msp430/msp430.c:810
+#: config/msp430/msp430.c:824
#, gcc-internal-format, gfc-internal-format
msgid ""
"Unrecognised 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:817
+#: config/msp430/msp430.c:831
#, gcc-internal-format, gfc-internal-format
msgid "Unrecognised MCU name '%s'."
msgstr ""
-#: config/msp430/msp430.c:826
+#: config/msp430/msp430.c:840
#, gcc-internal-format
msgid "-mlarge requires a 430X-compatible -mmcu="
msgstr ""
-#: config/msp430/msp430.c:829
+#: config/msp430/msp430.c:843
#, gcc-internal-format
msgid "-mcode-region=upper requires 430X-compatible cpu"
msgstr ""
-#: config/msp430/msp430.c:831
+#: config/msp430/msp430.c:845
#, gcc-internal-format
msgid "-mdata-region=upper requires 430X-compatible cpu"
msgstr ""
-#: config/msp430/msp430.c:1834
+#: config/msp430/msp430.c:1848
#, gcc-internal-format
msgid "unrecognised interrupt vector argument of %qE attribute"
msgstr ""
-#: config/msp430/msp430.c:1843
+#: config/msp430/msp430.c:1857
#, gcc-internal-format
msgid "numeric argument of %qE attribute must be in range 0..63"
msgstr ""
-#: config/msp430/msp430.c:1849
+#: config/msp430/msp430.c:1863
#, gcc-internal-format
msgid "argument of %qE attribute is not a string constant or number"
msgstr ""
-#: config/msp430/msp430.c:2458
+#: config/msp430/msp430.c:2473
#, gcc-internal-format
msgid "__delay_cycles() only takes constant arguments"
msgstr ""
-#: config/msp430/msp430.c:2468
+#: config/msp430/msp430.c:2483
#, gcc-internal-format
msgid "__delay_cycles only takes non-negative cycle counts."
msgstr ""
-#: config/msp430/msp430.c:2488
+#: config/msp430/msp430.c:2503
#, gcc-internal-format
msgid "__delay_cycles is limited to 32-bit loop counts."
msgstr ""
-#: config/msp430/msp430.c:2558
+#: config/msp430/msp430.c:2573
#, gcc-internal-format
msgid "MSP430 builtin functions only work inside interrupt handlers"
msgstr ""
-#: config/msp430/msp430.c:2570 config/rx/rx.c:2634 config/xtensa/xtensa.c:3346
+#: config/msp430/msp430.c:2585 config/rx/rx.c:2634 config/xtensa/xtensa.c:3346
#: config/xtensa/xtensa.c:3372
#, gcc-internal-format
msgid "bad builtin code"
@@ -29152,18 +29252,12 @@ msgstr ""
msgid "cannot open intermediate ptx file"
msgstr ""
-#. The stabs testcases want to know stabs isn't supported.
-#: config/nvptx/nvptx.c:165
-#, gcc-internal-format
-msgid "stabs debug format not supported"
-msgstr ""
-
-#: config/nvptx/nvptx.c:1540
+#: config/nvptx/nvptx.c:1545
#, gcc-internal-format
msgid "cannot emit unaligned pointers in ptx assembly"
msgstr ""
-#: config/nvptx/nvptx.c:3801
+#: config/nvptx/nvptx.c:3798
#, gcc-internal-format
msgid "%qE attribute requires a void return type"
msgstr ""
@@ -29310,51 +29404,51 @@ msgstr ""
msgid "junk at end of #pragma longcall"
msgstr ""
-#: config/rs6000/rs6000-c.c:4498
+#: config/rs6000/rs6000-c.c:4512
#, gcc-internal-format
msgid ""
"vec_lvsl is deprecated for little endian; use assignment for unaligned loads "
"and stores"
msgstr ""
-#: config/rs6000/rs6000-c.c:4501
+#: config/rs6000/rs6000-c.c:4515
#, gcc-internal-format
msgid ""
"vec_lvsr is deprecated for little endian; use assignment for unaligned loads "
"and stores"
msgstr ""
-#: config/rs6000/rs6000-c.c:4517
+#: config/rs6000/rs6000-c.c:4531
#, gcc-internal-format, gfc-internal-format
msgid "%s only accepts %d arguments"
msgstr ""
-#: config/rs6000/rs6000-c.c:4522
+#: config/rs6000/rs6000-c.c:4536
#, gcc-internal-format, gfc-internal-format
msgid "%s only accepts 1 argument"
msgstr ""
-#: config/rs6000/rs6000-c.c:4527
+#: config/rs6000/rs6000-c.c:4541
#, gcc-internal-format, gfc-internal-format
msgid "%s only accepts 2 arguments"
msgstr ""
-#: config/rs6000/rs6000-c.c:4593
+#: config/rs6000/rs6000-c.c:4607
#, gcc-internal-format
msgid "vec_extract only accepts 2 arguments"
msgstr ""
-#: config/rs6000/rs6000-c.c:4695
+#: config/rs6000/rs6000-c.c:4709
#, gcc-internal-format
msgid "vec_insert only accepts 3 arguments"
msgstr ""
-#: config/rs6000/rs6000-c.c:4827
+#: config/rs6000/rs6000-c.c:4841
#, gcc-internal-format
msgid "passing arg %d of %qE discards qualifiers frompointer target type"
msgstr ""
-#: config/rs6000/rs6000-c.c:4871
+#: config/rs6000/rs6000-c.c:4885
#, gcc-internal-format
msgid "invalid parameter combination for AltiVec intrinsic"
msgstr ""
@@ -29496,411 +29590,411 @@ msgstr ""
msgid "-mpower9-vector requires -mpower8-vector"
msgstr ""
-#: config/rs6000/rs6000.c:4211
+#: config/rs6000/rs6000.c:4212
#, gcc-internal-format
msgid "-mallow-movmisalign requires -mvsx"
msgstr ""
-#: config/rs6000/rs6000.c:4226
+#: config/rs6000/rs6000.c:4227
#, gcc-internal-format
msgid "-mefficient-unaligned-vsx requires -mvsx"
msgstr ""
-#: config/rs6000/rs6000.c:4234
+#: config/rs6000/rs6000.c:4235
#, gcc-internal-format
msgid "-mefficient-unaligned-vsx requires -mallow-movmisalign"
msgstr ""
-#: config/rs6000/rs6000.c:4244
+#: config/rs6000/rs6000.c:4245
#, gcc-internal-format
msgid "-mfloat128 requires VSX support"
msgstr ""
-#: config/rs6000/rs6000.c:4258
+#: config/rs6000/rs6000.c:4259
#, gcc-internal-format
msgid "-mfloat128-hardware requires full ISA 3.0 support"
msgstr ""
-#: config/rs6000/rs6000.c:4325
+#: config/rs6000/rs6000.c:4326
#, gcc-internal-format, gfc-internal-format
msgid "unknown vectorization library ABI type (%s) for -mveclibabi= switch"
msgstr ""
-#: config/rs6000/rs6000.c:4337
+#: config/rs6000/rs6000.c:4338
#, gcc-internal-format
msgid "target attribute or pragma changes long double size"
msgstr ""
-#: config/rs6000/rs6000.c:4360 config/rs6000/rs6000.c:4375
+#: config/rs6000/rs6000.c:4361 config/rs6000/rs6000.c:4376
#, gcc-internal-format
msgid "target attribute or pragma changes AltiVec ABI"
msgstr ""
-#: config/rs6000/rs6000.c:4388
+#: config/rs6000/rs6000.c:4389
#, gcc-internal-format
msgid "target attribute or pragma changes darwin64 ABI"
msgstr ""
-#: config/rs6000/rs6000.c:4454
+#: config/rs6000/rs6000.c:4455
#, gcc-internal-format
msgid "target attribute or pragma changes single precision floating point"
msgstr ""
-#: config/rs6000/rs6000.c:4457
+#: config/rs6000/rs6000.c:4458
#, gcc-internal-format
msgid "target attribute or pragma changes double precision floating point"
msgstr ""
-#: config/rs6000/rs6000.c:6724
+#: config/rs6000/rs6000.c:6718
#, 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:9829
+#: config/rs6000/rs6000.c:9824
#, gcc-internal-format
msgid ""
"GCC vector returned by reference: non-standard ABI extension with no "
"compatibility guarantee"
msgstr ""
-#: config/rs6000/rs6000.c:9982
+#: config/rs6000/rs6000.c:9977
#, 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:10152
+#: config/rs6000/rs6000.c:10147
#, 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:10414
+#: config/rs6000/rs6000.c:10409
#, 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:11274
+#: config/rs6000/rs6000.c:11269
#, gcc-internal-format
msgid "the ABI of passing homogeneous float aggregates has changed in GCC 5"
msgstr ""
-#: config/rs6000/rs6000.c:11449
+#: config/rs6000/rs6000.c:11444
#, gcc-internal-format
msgid ""
"GCC vector passed by reference: non-standard ABI extension with no "
"compatibility guarantee"
msgstr ""
-#: config/rs6000/rs6000.c:12237
+#: config/rs6000/rs6000.c:12232
#, gcc-internal-format, gfc-internal-format
msgid "internal error: builtin function %s already processed"
msgstr ""
-#: config/rs6000/rs6000.c:12679
+#: config/rs6000/rs6000.c:12674
#, gcc-internal-format
msgid "argument 1 must be an 8-bit field value"
msgstr ""
-#: config/rs6000/rs6000.c:12726
+#: config/rs6000/rs6000.c:12721
#, gcc-internal-format
msgid "argument 1 must be a 5-bit signed literal"
msgstr ""
-#: config/rs6000/rs6000.c:12829 config/rs6000/rs6000.c:14415
+#: config/rs6000/rs6000.c:12824 config/rs6000/rs6000.c:14410
#, gcc-internal-format
msgid "argument 2 must be a 5-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:12868
+#: config/rs6000/rs6000.c:12863
#, gcc-internal-format
msgid "argument 1 of __builtin_altivec_predicate must be a constant"
msgstr ""
-#: config/rs6000/rs6000.c:12920
+#: config/rs6000/rs6000.c:12915
#, gcc-internal-format
msgid "argument 1 of __builtin_altivec_predicate is out of range"
msgstr ""
-#: config/rs6000/rs6000.c:13294
+#: config/rs6000/rs6000.c:13289
#, gcc-internal-format, gfc-internal-format
msgid "builtin %s is only valid in 64-bit mode"
msgstr ""
-#: config/rs6000/rs6000.c:13343
+#: config/rs6000/rs6000.c:13338
#, gcc-internal-format, gfc-internal-format
msgid "argument %d must be an unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:13345
+#: config/rs6000/rs6000.c:13340
#, gcc-internal-format, gfc-internal-format
msgid "argument %d is an unsigned literal that is out of range"
msgstr ""
-#: config/rs6000/rs6000.c:13483
+#: config/rs6000/rs6000.c:13478
#, gcc-internal-format, gfc-internal-format
msgid "builtin %s only accepts a string argument"
msgstr ""
#. Invalid CPU argument.
-#: config/rs6000/rs6000.c:13502
+#: config/rs6000/rs6000.c:13497
#, gcc-internal-format, gfc-internal-format
msgid "cpu %s is an invalid argument to builtin %s"
msgstr ""
#. Invalid HWCAP argument.
-#: config/rs6000/rs6000.c:13530
+#: config/rs6000/rs6000.c:13525
#, gcc-internal-format, gfc-internal-format
msgid "hwcap %s is an invalid argument to builtin %s"
msgstr ""
-#: config/rs6000/rs6000.c:13603
+#: config/rs6000/rs6000.c:13598
#, gcc-internal-format
msgid "argument 3 must be a 4-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:13621
+#: config/rs6000/rs6000.c:13616
#, gcc-internal-format
msgid "argument 3 must be a 2-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:13641
+#: config/rs6000/rs6000.c:13636
#, gcc-internal-format
msgid "argument 3 must be a 1-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:13653
+#: config/rs6000/rs6000.c:13648
#, gcc-internal-format
msgid "argument 1 must be 0 or 2"
msgstr ""
-#: config/rs6000/rs6000.c:13665
+#: config/rs6000/rs6000.c:13660
#, gcc-internal-format
msgid "argument 1 must be a 1-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:13679
+#: config/rs6000/rs6000.c:13674
#, gcc-internal-format
msgid "argument 2 must be a 6-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:13691
+#: config/rs6000/rs6000.c:13686
#, gcc-internal-format
msgid "argument 2 must be 0 or 1"
msgstr ""
-#: config/rs6000/rs6000.c:13698
+#: config/rs6000/rs6000.c:13693
#, gcc-internal-format
msgid "argument 3 must be in the range 0..15"
msgstr ""
-#: config/rs6000/rs6000.c:13885
+#: config/rs6000/rs6000.c:13880
#, gcc-internal-format
msgid "argument to %qs must be a 2-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:14038
+#: config/rs6000/rs6000.c:14033
#, gcc-internal-format
msgid "unresolved overload for Altivec builtin %qF"
msgstr ""
-#: config/rs6000/rs6000.c:14168
+#: config/rs6000/rs6000.c:14163
#, gcc-internal-format
msgid "argument to dss must be a 2-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:14535
+#: config/rs6000/rs6000.c:14530
#, gcc-internal-format
msgid "argument 1 of __builtin_paired_predicate must be a constant"
msgstr ""
-#: config/rs6000/rs6000.c:14582
+#: config/rs6000/rs6000.c:14577
#, gcc-internal-format
msgid "argument 1 of __builtin_paired_predicate is out of range"
msgstr ""
-#: config/rs6000/rs6000.c:14607
+#: config/rs6000/rs6000.c:14602
#, gcc-internal-format
msgid "argument 1 of __builtin_spe_predicate must be a constant"
msgstr ""
-#: config/rs6000/rs6000.c:14679
+#: config/rs6000/rs6000.c:14674
#, gcc-internal-format
msgid "argument 1 of __builtin_spe_predicate is out of range"
msgstr ""
-#: config/rs6000/rs6000.c:14761
+#: config/rs6000/rs6000.c:14756
#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s is only valid for the cell processor"
msgstr ""
-#: config/rs6000/rs6000.c:14763
+#: config/rs6000/rs6000.c:14758
#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s requires the -mvsx option"
msgstr ""
-#: config/rs6000/rs6000.c:14765
+#: config/rs6000/rs6000.c:14760
#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s requires the -mhtm option"
msgstr ""
-#: config/rs6000/rs6000.c:14767
+#: config/rs6000/rs6000.c:14762
#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s requires the -maltivec option"
msgstr ""
-#: config/rs6000/rs6000.c:14769
+#: config/rs6000/rs6000.c:14764
#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s requires the -mpaired option"
msgstr ""
-#: config/rs6000/rs6000.c:14771
+#: config/rs6000/rs6000.c:14766
#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s requires the -mspe option"
msgstr ""
-#: config/rs6000/rs6000.c:14774
+#: config/rs6000/rs6000.c:14769
#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s requires the -mhard-dfp and -mpower8-vector options"
msgstr ""
-#: config/rs6000/rs6000.c:14777
+#: config/rs6000/rs6000.c:14772
#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s requires the -mhard-dfp option"
msgstr ""
-#: config/rs6000/rs6000.c:14779
+#: config/rs6000/rs6000.c:14774
#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s requires the -mpower8-vector option"
msgstr ""
-#: config/rs6000/rs6000.c:14782
+#: config/rs6000/rs6000.c:14777
#, gcc-internal-format, gfc-internal-format
msgid ""
"Builtin function %s requires the -mhard-float and -mlong-double-128 options"
msgstr ""
-#: config/rs6000/rs6000.c:14785
+#: config/rs6000/rs6000.c:14780
#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s requires the -mhard-float option"
msgstr ""
-#: config/rs6000/rs6000.c:14787
+#: config/rs6000/rs6000.c:14782
#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s is not supported with the current options"
msgstr ""
-#: config/rs6000/rs6000.c:16341
+#: config/rs6000/rs6000.c:16336
#, gcc-internal-format, gfc-internal-format
msgid "internal error: builtin function %s had no type"
msgstr ""
-#: config/rs6000/rs6000.c:16349
+#: config/rs6000/rs6000.c:16344
#, gcc-internal-format, gfc-internal-format
msgid "internal error: builtin function %s had an unexpected return type %s"
msgstr ""
-#: config/rs6000/rs6000.c:16366
+#: config/rs6000/rs6000.c:16361
#, gcc-internal-format, gfc-internal-format
msgid ""
"internal error: builtin function %s, argument %d had unexpected argument "
"type %s"
msgstr ""
-#: config/rs6000/rs6000.c:24241
+#: config/rs6000/rs6000.c:24249
#, gcc-internal-format
msgid "stack frame too large"
msgstr ""
-#: config/rs6000/rs6000.c:27624
+#: config/rs6000/rs6000.c:27643
#, gcc-internal-format
msgid "-fsplit-stack uses register r29"
msgstr ""
-#: config/rs6000/rs6000.c:27632
+#: config/rs6000/rs6000.c:27651
#, gcc-internal-format
msgid "Stack frame larger than 2G is not supported for -fsplit-stack"
msgstr ""
-#: config/rs6000/rs6000.c:28630
+#: config/rs6000/rs6000.c:28649
#, gcc-internal-format
msgid "no profiling of 64-bit code for this ABI"
msgstr ""
-#: config/rs6000/rs6000.c:30712
+#: config/rs6000/rs6000.c:30731
#, 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:30794
+#: config/rs6000/rs6000.c:30813
#, gcc-internal-format
msgid "use of %<long double%> in AltiVec types is invalid"
msgstr ""
-#: config/rs6000/rs6000.c:30796
+#: config/rs6000/rs6000.c:30815
#, gcc-internal-format
msgid "use of boolean types in AltiVec types is invalid"
msgstr ""
-#: config/rs6000/rs6000.c:30798
+#: config/rs6000/rs6000.c:30817
#, gcc-internal-format
msgid "use of %<complex%> in AltiVec types is invalid"
msgstr ""
-#: config/rs6000/rs6000.c:30800
+#: config/rs6000/rs6000.c:30819
#, gcc-internal-format
msgid "use of decimal floating point types in AltiVec types is invalid"
msgstr ""
-#: config/rs6000/rs6000.c:30806
+#: config/rs6000/rs6000.c:30825
#, gcc-internal-format
msgid ""
"use of %<long%> in AltiVec types is invalid for 64-bit code without -mvsx"
msgstr ""
-#: config/rs6000/rs6000.c:30809
+#: config/rs6000/rs6000.c:30828
#, gcc-internal-format
msgid "use of %<long%> in AltiVec types is deprecated; use %<int%>"
msgstr ""
-#: config/rs6000/rs6000.c:30814
+#: config/rs6000/rs6000.c:30833
#, gcc-internal-format
msgid "use of %<long long%> in AltiVec types is invalid without -mvsx"
msgstr ""
-#: config/rs6000/rs6000.c:30817
+#: config/rs6000/rs6000.c:30836
#, gcc-internal-format
msgid "use of %<double%> in AltiVec types is invalid without -mvsx"
msgstr ""
-#: config/rs6000/rs6000.c:34323
+#: config/rs6000/rs6000.c:34344
#, gcc-internal-format, gfc-internal-format
msgid "emitting microcode insn %s\t[%s] #%d"
msgstr ""
-#: config/rs6000/rs6000.c:34327
+#: config/rs6000/rs6000.c:34348
#, gcc-internal-format, gfc-internal-format
msgid "emitting conditional microcode insn %s\t[%s] #%d"
msgstr ""
-#: config/rs6000/rs6000.c:34627
+#: config/rs6000/rs6000.c:34648
#, gcc-internal-format, gfc-internal-format
msgid "invalid cpu \"%s\" for %s\"%s\"%s"
msgstr ""
-#: config/rs6000/rs6000.c:34630
+#: config/rs6000/rs6000.c:34651
#, gcc-internal-format, gfc-internal-format
msgid "%s\"%s\"%s is not allowed"
msgstr ""
-#: config/rs6000/rs6000.c:34632
+#: config/rs6000/rs6000.c:34653
#, gcc-internal-format, gfc-internal-format
msgid "%s\"%s\"%s is invalid"
msgstr ""
@@ -30211,71 +30305,71 @@ msgstr ""
msgid "constant argument %d for builtin %qF is out of range for target type"
msgstr ""
-#: config/s390/s390.c:732
+#: config/s390/s390.c:754
#, gcc-internal-format
msgid "constant argument %d for builtin %qF is out of range (0.."
msgstr ""
-#: config/s390/s390.c:749
+#: config/s390/s390.c:771
#, gcc-internal-format
msgid "constant argument %d for builtin %qF is out of range ("
msgstr ""
-#: config/s390/s390.c:800
+#: config/s390/s390.c:822
#, gcc-internal-format
msgid ""
"Builtin %qF is not supported without -mhtm (default with -march=zEC12 and "
"higher)."
msgstr ""
-#: config/s390/s390.c:806
+#: config/s390/s390.c:828
#, gcc-internal-format
msgid ""
"Builtin %qF is not supported without -mvx (default with -march=z13 and "
"higher)."
msgstr ""
-#: config/s390/s390.c:826
+#: config/s390/s390.c:848
#, gcc-internal-format
msgid "Unresolved overloaded builtin"
msgstr ""
-#: config/s390/s390.c:833 config/tilegx/tilegx.c:3543
+#: config/s390/s390.c:855 config/tilegx/tilegx.c:3543
#: config/tilepro/tilepro.c:3110
#, gcc-internal-format
msgid "bad builtin icode"
msgstr ""
-#: config/s390/s390.c:869
+#: config/s390/s390.c:891
#, gcc-internal-format
msgid "constant value required for builtin %qF argument %d"
msgstr ""
-#: config/s390/s390.c:946
+#: config/s390/s390.c:968
#, gcc-internal-format
msgid "Invalid argument %d for builtin %qF"
msgstr ""
-#: config/s390/s390.c:1047
+#: config/s390/s390.c:1069
#, 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:9455
+#: config/s390/s390.c:9641
#, gcc-internal-format
msgid "total size of local variables exceeds architecture limit"
msgstr ""
-#: config/s390/s390.c:10552
+#: config/s390/s390.c:10741
#, 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:10568
+#: config/s390/s390.c:10757
#, gcc-internal-format
msgid ""
"frame size of function %qs is %wd bytes which is more than half the stack "
@@ -30283,100 +30377,105 @@ msgid ""
"function."
msgstr ""
-#: config/s390/s390.c:10596
+#: config/s390/s390.c:10785
#, gcc-internal-format
msgid "frame size of %qs is %wd bytes"
msgstr ""
-#: config/s390/s390.c:10600
+#: config/s390/s390.c:10789
#, gcc-internal-format
msgid "%qs uses dynamic stack allocation"
msgstr ""
-#: config/s390/s390.c:13657
+#: config/s390/s390.c:11167
+#, gcc-internal-format
+msgid "CPUs older than z900 are not supported for -fsplit-stack"
+msgstr ""
+
+#: config/s390/s390.c:14157
#, 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:13669
+#: config/s390/s390.c:14169
#, 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:13681
+#: config/s390/s390.c:14181
#, gcc-internal-format, gfc-internal-format
msgid "z/Architecture mode not supported on %s"
msgstr ""
-#: config/s390/s390.c:13684
+#: config/s390/s390.c:14184
#, gcc-internal-format
msgid "64-bit ABI not supported in ESA/390 mode"
msgstr ""
-#: config/s390/s390.c:13701
+#: config/s390/s390.c:14201
#, gcc-internal-format, gfc-internal-format
msgid "hardware vector support not available on %s"
msgstr ""
-#: config/s390/s390.c:13704
+#: config/s390/s390.c:14204
#, gcc-internal-format
msgid "hardware vector support not available with -msoft-float"
msgstr ""
-#: config/s390/s390.c:13732
+#: config/s390/s390.c:14232
#, gcc-internal-format, gfc-internal-format
msgid "hardware decimal floating point instructions not available on %s"
msgstr ""
-#: config/s390/s390.c:13736
+#: config/s390/s390.c:14236
#, gcc-internal-format
msgid ""
"hardware decimal floating point instructions not available in ESA/390 mode"
msgstr ""
-#: config/s390/s390.c:13748
+#: config/s390/s390.c:14248
#, gcc-internal-format
msgid "-mhard-dfp can%'t be used in conjunction with -msoft-float"
msgstr ""
-#: config/s390/s390.c:13756
+#: config/s390/s390.c:14256
#, gcc-internal-format
msgid ""
"-mbackchain -mpacked-stack -mhard-float are not supported in combination"
msgstr ""
-#: config/s390/s390.c:13762
+#: config/s390/s390.c:14262
#, gcc-internal-format
msgid "stack size must be greater than the stack guard value"
msgstr ""
-#: config/s390/s390.c:13764
+#: config/s390/s390.c:14264
#, gcc-internal-format
msgid "stack size must not be greater than 64k"
msgstr ""
-#: config/s390/s390.c:13767
+#: config/s390/s390.c:14267
#, gcc-internal-format
msgid "-mstack-guard implies use of -mstack-size"
msgstr ""
#. argument is not a plain number
-#: config/s390/s390.c:13861
+#: config/s390/s390.c:14361
#, gcc-internal-format
msgid "arguments to %qs should be non-negative integers"
msgstr ""
-#: config/s390/s390.c:13868
+#: config/s390/s390.c:14368
#, gcc-internal-format
msgid "argument to %qs is too large (max. %d)"
msgstr ""
#. Value is not allowed for the target attribute.
-#: config/s390/s390.c:14076
+#: config/s390/s390.c:14576
#, gcc-internal-format
msgid "Value %qs is not supported by attribute %<target%>"
msgstr ""
@@ -30393,53 +30492,53 @@ msgid ""
"outgoing-args for correctness"
msgstr ""
-#: config/sh/sh.c:8499
+#: config/sh/sh.c:8501
#, gcc-internal-format
msgid "__builtin_saveregs not supported by this subtarget"
msgstr ""
-#: config/sh/sh.c:9702
+#: config/sh/sh.c:9704
#, gcc-internal-format
msgid "%qE attribute only applies to interrupt functions"
msgstr ""
-#: config/sh/sh.c:9772
+#: config/sh/sh.c:9774
#, gcc-internal-format
msgid "%qE attribute is supported only for SH2A"
msgstr ""
-#: config/sh/sh.c:9802
+#: config/sh/sh.c:9804
#, gcc-internal-format
msgid "attribute interrupt_handler is not compatible with -m5-compact"
msgstr ""
-#: config/sh/sh.c:9819
+#: config/sh/sh.c:9821
#, gcc-internal-format
msgid "%qE attribute only applies to SH2A"
msgstr ""
-#: config/sh/sh.c:9841
+#: config/sh/sh.c:9843
#, 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:9914
+#: config/sh/sh.c:9916
#, gcc-internal-format
msgid "%qE attribute argument not a string constant"
msgstr ""
-#: config/sh/sh.c:12762
+#: config/sh/sh.c:12764
#, gcc-internal-format
msgid "r0 needs to be available as a call-clobbered register"
msgstr ""
-#: config/sh/sh.c:12783
+#: config/sh/sh.c:12785
#, gcc-internal-format
msgid "need a second call-clobbered general purpose register"
msgstr ""
-#: config/sh/sh.c:12791
+#: config/sh/sh.c:12793
#, gcc-internal-format
msgid "need a call-clobbered target register"
msgstr ""
@@ -30456,27 +30555,27 @@ msgstr ""
msgid "-mrelax is only supported for RTP PIC"
msgstr ""
-#: config/sparc/sparc.c:1343
+#: config/sparc/sparc.c:1342
#, gcc-internal-format, gfc-internal-format
msgid "%s is not supported by this configuration"
msgstr ""
-#: config/sparc/sparc.c:1350
+#: config/sparc/sparc.c:1349
#, gcc-internal-format
msgid "-mlong-double-64 not allowed with -m64"
msgstr ""
-#: config/sparc/sparc.c:1370
+#: config/sparc/sparc.c:1369
#, gcc-internal-format, gfc-internal-format
msgid "bad value (%s) for -mcmodel= switch"
msgstr ""
-#: config/sparc/sparc.c:1375
+#: config/sparc/sparc.c:1374
#, gcc-internal-format
msgid "-mcmodel= is not supported on 32 bit systems"
msgstr ""
-#: config/sparc/sparc.c:1382
+#: config/sparc/sparc.c:1381
#, gcc-internal-format
msgid "-fcall-saved-REG is not supported for out registers"
msgstr ""
@@ -30681,7 +30780,7 @@ msgstr ""
msgid "too much stack space to prepare: %d"
msgstr ""
-#: config/visium/visium.c:648
+#: config/visium/visium.c:705
#, gcc-internal-format
msgid "an interrupt handler cannot be compiled with -muser-mode"
msgstr ""
@@ -30812,53 +30911,53 @@ msgstr ""
msgid "subprogram %q+F not marked Inline"
msgstr ""
-#: ada/gcc-interface/trans.c:6222
+#: ada/gcc-interface/trans.c:6241
#, gcc-internal-format
msgid "out-of-bounds access may be optimized away"
msgstr ""
-#: ada/gcc-interface/trans.c:6224
+#: ada/gcc-interface/trans.c:6243
#, gcc-internal-format
msgid "containing loop"
msgstr ""
-#: ada/gcc-interface/utils.c:3736
+#: ada/gcc-interface/utils.c:3757
#, gcc-internal-format
msgid "invalid element type for attribute %qs"
msgstr ""
-#: ada/gcc-interface/utils.c:3760
+#: ada/gcc-interface/utils.c:3781
#, gcc-internal-format
msgid "number of components of vector not a power of two"
msgstr ""
-#: ada/gcc-interface/utils.c:5774 ada/gcc-interface/utils.c:5948
-#: ada/gcc-interface/utils.c:6010
+#: ada/gcc-interface/utils.c:5795 ada/gcc-interface/utils.c:5969
+#: ada/gcc-interface/utils.c:6031
#, gcc-internal-format
msgid "%qs attribute ignored"
msgstr ""
-#: ada/gcc-interface/utils.c:5891
+#: ada/gcc-interface/utils.c:5912
#, gcc-internal-format
msgid "%qs attribute requires prototypes with named arguments"
msgstr ""
-#: ada/gcc-interface/utils.c:5900
+#: ada/gcc-interface/utils.c:5921
#, gcc-internal-format
msgid "%qs attribute only applies to variadic functions"
msgstr ""
-#: ada/gcc-interface/utils.c:5970
+#: ada/gcc-interface/utils.c:5991
#, gcc-internal-format
msgid "%qE attribute has no effect"
msgstr ""
-#: ada/gcc-interface/utils.c:6094
+#: ada/gcc-interface/utils.c:6115
#, gcc-internal-format
msgid "attribute %qs applies to array types only"
msgstr ""
-#: c/c-array-notation.c:217 c/c-array-notation.c:246 cp/call.c:7780
+#: c/c-array-notation.c:217 c/c-array-notation.c:246 cp/call.c:7795
#: cp/cp-array-notation.c:250
#, gcc-internal-format
msgid "Invalid builtin arguments"
@@ -30917,8 +31016,8 @@ msgstr ""
#. an unprototyped function, it is compile-time undefined;
#. making it a constraint in that case was rejected in
#. DR#252.
-#: c/c-convert.c:98 c/c-typeck.c:2114 c/c-typeck.c:6117 c/c-typeck.c:11678
-#: cp/typeck.c:1956 cp/typeck.c:7580 cp/typeck.c:8307
+#: c/c-convert.c:98 c/c-typeck.c:2116 c/c-typeck.c:6131 c/c-typeck.c:11681
+#: cp/typeck.c:1956 cp/typeck.c:7560 cp/typeck.c:8287
#, gcc-internal-format
msgid "void value not ignored as it ought to be"
msgstr ""
@@ -30948,7 +31047,7 @@ msgstr ""
msgid "GCC supports only %u nested scopes"
msgstr ""
-#: c/c-decl.c:1195 cp/decl.c:363
+#: c/c-decl.c:1195 cp/decl.c:358
#, gcc-internal-format
msgid "label %q+D used but not defined"
msgstr ""
@@ -30968,7 +31067,7 @@ msgstr ""
msgid "unused variable %q+D"
msgstr ""
-#: c/c-decl.c:1275 cp/decl.c:642
+#: c/c-decl.c:1275 cp/decl.c:637
#, gcc-internal-format
msgid "variable %qD set but not used"
msgstr ""
@@ -30978,7 +31077,7 @@ msgstr ""
msgid "type of array %q+D completed incompatibly with implicit initialization"
msgstr ""
-#: c/c-decl.c:1559 c/c-decl.c:6362 c/c-decl.c:7231 c/c-decl.c:7970
+#: c/c-decl.c:1559 c/c-decl.c:6391 c/c-decl.c:7263 c/c-decl.c:8002
#, gcc-internal-format
msgid "originally defined here"
msgstr ""
@@ -31047,7 +31146,7 @@ msgstr ""
msgid "built-in function %q+D declared as non-function"
msgstr ""
-#: c/c-decl.c:1838 c/c-decl.c:2008 c/c-decl.c:2787
+#: c/c-decl.c:1838 c/c-decl.c:2008 c/c-decl.c:2816
#, gcc-internal-format
msgid "declaration of %q+D shadows a built-in function"
msgstr ""
@@ -31187,220 +31286,220 @@ msgstr ""
msgid "redundant redeclaration of %q+D"
msgstr ""
-#: c/c-decl.c:2762
+#: c/c-decl.c:2791
#, gcc-internal-format
msgid "declaration of %q+D shadows previous non-variable"
msgstr ""
-#: c/c-decl.c:2768
+#: c/c-decl.c:2797
#, gcc-internal-format
msgid "declaration of %q+D shadows a parameter"
msgstr ""
-#: c/c-decl.c:2780 cp/name-lookup.c:1270
+#: c/c-decl.c:2809 cp/name-lookup.c:1270
#, gcc-internal-format
msgid "declaration of %qD shadows a global declaration"
msgstr ""
-#: c/c-decl.c:2792
+#: c/c-decl.c:2821
#, gcc-internal-format
msgid "declaration of %q+D shadows a previous local"
msgstr ""
-#: c/c-decl.c:2797 cp/name-lookup.c:1213 cp/name-lookup.c:1255
+#: c/c-decl.c:2826 cp/name-lookup.c:1213 cp/name-lookup.c:1255
#: cp/name-lookup.c:1273
#, gcc-internal-format
msgid "shadowed declaration is here"
msgstr ""
-#: c/c-decl.c:2923
+#: c/c-decl.c:2952
#, gcc-internal-format
msgid "nested extern declaration of %qD"
msgstr ""
-#: c/c-decl.c:3098 c/c-decl.c:3101
+#: c/c-decl.c:3127 c/c-decl.c:3130
#, gcc-internal-format
msgid "implicit declaration of function %qE"
msgstr ""
-#: c/c-decl.c:3347
+#: c/c-decl.c:3376
#, gcc-internal-format
msgid "incompatible implicit declaration of built-in function %qD"
msgstr ""
-#: c/c-decl.c:3354
+#: c/c-decl.c:3383
#, gcc-internal-format
msgid "include %qs or provide a declaration of %qD"
msgstr ""
-#: c/c-decl.c:3363
+#: c/c-decl.c:3392
#, gcc-internal-format
msgid "incompatible implicit declaration of function %qD"
msgstr ""
-#: c/c-decl.c:3417
+#: c/c-decl.c:3446
#, gcc-internal-format
msgid "%qE undeclared here (not in a function)"
msgstr ""
-#: c/c-decl.c:3423
+#: c/c-decl.c:3452
#, gcc-internal-format
msgid "%qE undeclared (first use in this function)"
msgstr ""
-#: c/c-decl.c:3426
+#: c/c-decl.c:3455
#, gcc-internal-format
msgid ""
"each undeclared identifier is reported only once for each function it "
"appears in"
msgstr ""
-#: c/c-decl.c:3474 cp/decl.c:2916
+#: c/c-decl.c:3503 cp/decl.c:2923
#, gcc-internal-format
msgid "label %qE referenced outside of any function"
msgstr ""
-#: c/c-decl.c:3510
+#: c/c-decl.c:3539
#, gcc-internal-format
msgid "jump into scope of identifier with variably modified type"
msgstr ""
-#: c/c-decl.c:3513
+#: c/c-decl.c:3542
#, gcc-internal-format
msgid "jump skips variable initialization"
msgstr ""
-#: c/c-decl.c:3514 c/c-decl.c:3569 c/c-decl.c:3658
+#: c/c-decl.c:3543 c/c-decl.c:3598 c/c-decl.c:3687
#, gcc-internal-format
msgid "label %qD defined here"
msgstr ""
-#: c/c-decl.c:3515 c/c-decl.c:3786 c/c-typeck.c:7867 cp/class.c:1419
-#: cp/class.c:3254 cp/decl.c:3752 cp/friend.c:328 cp/friend.c:337
-#: cp/parser.c:3146 cp/parser.c:3225 cp/parser.c:3253 cp/parser.c:5992
+#: c/c-decl.c:3544 c/c-decl.c:3815 c/c-typeck.c:7878 cp/class.c:1437
+#: cp/class.c:3302 cp/decl.c:3759 cp/friend.c:340 cp/friend.c:349
+#: cp/parser.c:3146 cp/parser.c:3227 cp/parser.c:3255 cp/parser.c:5994
#, gcc-internal-format
msgid "%qD declared here"
msgstr ""
-#: c/c-decl.c:3568 c/c-decl.c:3657
+#: c/c-decl.c:3597 c/c-decl.c:3686
#, gcc-internal-format
msgid "jump into statement expression"
msgstr ""
-#: c/c-decl.c:3590
+#: c/c-decl.c:3619
#, gcc-internal-format
msgid "duplicate label declaration %qE"
msgstr ""
-#: c/c-decl.c:3688 cp/decl.c:3294
+#: c/c-decl.c:3717 cp/decl.c:3301
#, gcc-internal-format
msgid "duplicate label %qD"
msgstr ""
-#: c/c-decl.c:3719
+#: c/c-decl.c:3748
#, gcc-internal-format
msgid ""
"traditional C lacks a separate namespace for labels, identifier %qE conflicts"
msgstr ""
-#: c/c-decl.c:3784
+#: c/c-decl.c:3813
#, gcc-internal-format
msgid "switch jumps over variable initialization"
msgstr ""
-#: c/c-decl.c:3785 c/c-decl.c:3796
+#: c/c-decl.c:3814 c/c-decl.c:3825
#, gcc-internal-format
msgid "switch starts here"
msgstr ""
-#: c/c-decl.c:3795
+#: c/c-decl.c:3824
#, gcc-internal-format
msgid "switch jumps into statement expression"
msgstr ""
-#: c/c-decl.c:3878
+#: c/c-decl.c:3907
#, gcc-internal-format
msgid "%qE defined as wrong kind of tag"
msgstr ""
-#: c/c-decl.c:4107
+#: c/c-decl.c:4136
#, gcc-internal-format
msgid "unnamed struct/union that defines no instances"
msgstr ""
-#: c/c-decl.c:4117
+#: c/c-decl.c:4146
#, gcc-internal-format
msgid "empty declaration with storage class specifier does not redeclare tag"
msgstr ""
-#: c/c-decl.c:4132
+#: c/c-decl.c:4161
#, gcc-internal-format
msgid "empty declaration with type qualifier does not redeclare tag"
msgstr ""
-#: c/c-decl.c:4143
+#: c/c-decl.c:4172
#, gcc-internal-format
msgid "empty declaration with %<_Alignas%> does not redeclare tag"
msgstr ""
-#: c/c-decl.c:4165 c/c-decl.c:4173
+#: c/c-decl.c:4194 c/c-decl.c:4202
#, gcc-internal-format
msgid "useless type name in empty declaration"
msgstr ""
-#: c/c-decl.c:4181
+#: c/c-decl.c:4210
#, gcc-internal-format
msgid "%<inline%> in empty declaration"
msgstr ""
-#: c/c-decl.c:4187
+#: c/c-decl.c:4216
#, gcc-internal-format
msgid "%<_Noreturn%> in empty declaration"
msgstr ""
-#: c/c-decl.c:4193
+#: c/c-decl.c:4222
#, gcc-internal-format
msgid "%<auto%> in file-scope empty declaration"
msgstr ""
-#: c/c-decl.c:4199
+#: c/c-decl.c:4228
#, gcc-internal-format
msgid "%<register%> in file-scope empty declaration"
msgstr ""
-#: c/c-decl.c:4206
+#: c/c-decl.c:4235
#, gcc-internal-format
msgid "useless storage class specifier in empty declaration"
msgstr ""
-#: c/c-decl.c:4212
+#: c/c-decl.c:4241
#, gcc-internal-format
msgid "useless %qs in empty declaration"
msgstr ""
-#: c/c-decl.c:4225
+#: c/c-decl.c:4254
#, gcc-internal-format
msgid "useless type qualifier in empty declaration"
msgstr ""
-#: c/c-decl.c:4232
+#: c/c-decl.c:4261
#, gcc-internal-format
msgid "useless %<_Alignas%> in empty declaration"
msgstr ""
-#: c/c-decl.c:4239 c/c-parser.c:1702
+#: c/c-decl.c:4268 c/c-parser.c:1700
#, gcc-internal-format
msgid "empty declaration"
msgstr ""
-#: c/c-decl.c:4310
+#: c/c-decl.c:4339
#, gcc-internal-format
msgid ""
"ISO C90 does not support %<static%> or type qualifiers in parameter array "
"declarators"
msgstr ""
-#: c/c-decl.c:4314
+#: c/c-decl.c:4343
#, gcc-internal-format
msgid "ISO C90 does not support %<[*]%> array declarators"
msgstr ""
@@ -31408,33 +31507,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:4320 c/c-decl.c:6802
+#: c/c-decl.c:4349 c/c-decl.c:6831
#, gcc-internal-format
msgid "%<[*]%> not allowed in other than function prototype scope"
msgstr ""
-#: c/c-decl.c:4407 cp/decl2.c:1463
+#: c/c-decl.c:4436 cp/decl2.c:1463
#, gcc-internal-format
msgid "%q+D in declare target directive does not have mappable type"
msgstr ""
-#: c/c-decl.c:4456
+#: c/c-decl.c:4485
#, gcc-internal-format
msgid "%q+D is usually a function"
msgstr ""
-#: c/c-decl.c:4465
+#: c/c-decl.c:4494
#, gcc-internal-format
msgid "typedef %qD is initialized (use __typeof__ instead)"
msgstr ""
-#: c/c-decl.c:4470
+#: c/c-decl.c:4499
#, 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:4476
+#: c/c-decl.c:4505
#, gcc-internal-format
msgid "parameter %qD is initialized"
msgstr ""
@@ -31443,257 +31542,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:4495 c/c-decl.c:4510 c/c-typeck.c:7171
+#: c/c-decl.c:4524 c/c-decl.c:4539 c/c-typeck.c:7185
#, gcc-internal-format
msgid "variable-sized object may not be initialized"
msgstr ""
-#: c/c-decl.c:4501
+#: c/c-decl.c:4530
#, gcc-internal-format
msgid "variable %qD has initializer but incomplete type"
msgstr ""
-#: c/c-decl.c:4590
+#: c/c-decl.c:4619
#, gcc-internal-format
msgid "inline function %q+D given attribute noinline"
msgstr ""
-#: c/c-decl.c:4640
+#: c/c-decl.c:4669
#, gcc-internal-format
msgid "uninitialized const member in %qT is invalid in C++"
msgstr ""
-#: c/c-decl.c:4642
+#: c/c-decl.c:4671
#, gcc-internal-format
msgid "%qD should be initialized"
msgstr ""
-#: c/c-decl.c:4718
+#: c/c-decl.c:4747
#, gcc-internal-format
msgid "initializer fails to determine size of %q+D"
msgstr ""
-#: c/c-decl.c:4723
+#: c/c-decl.c:4752
#, gcc-internal-format
msgid "array size missing in %q+D"
msgstr ""
-#: c/c-decl.c:4735
+#: c/c-decl.c:4764
#, gcc-internal-format
msgid "zero or negative size array %q+D"
msgstr ""
-#: c/c-decl.c:4806
+#: c/c-decl.c:4835
#, gcc-internal-format
msgid "storage size of %q+D isn%'t constant"
msgstr ""
-#: c/c-decl.c:4856
+#: c/c-decl.c:4885
#, gcc-internal-format
msgid "ignoring asm-specifier for non-static local variable %q+D"
msgstr ""
-#: c/c-decl.c:4886
+#: c/c-decl.c:4915
#, gcc-internal-format
msgid "cannot put object with volatile field into register"
msgstr ""
-#: c/c-decl.c:4972
+#: c/c-decl.c:5001
#, gcc-internal-format
msgid "uninitialized const %qD is invalid in C++"
msgstr ""
-#: c/c-decl.c:5029
+#: c/c-decl.c:5058
#, gcc-internal-format
msgid "ISO C forbids forward parameter declarations"
msgstr ""
-#: c/c-decl.c:5126
+#: c/c-decl.c:5155
#, gcc-internal-format
msgid "defining a type in a compound literal is invalid in C++"
msgstr ""
-#: c/c-decl.c:5180 c/c-decl.c:5195
+#: c/c-decl.c:5209 c/c-decl.c:5224
#, gcc-internal-format
msgid "bit-field %qs width not an integer constant"
msgstr ""
-#: c/c-decl.c:5190
+#: c/c-decl.c:5219
#, gcc-internal-format
msgid "bit-field %qs width not an integer constant expression"
msgstr ""
-#: c/c-decl.c:5201
+#: c/c-decl.c:5230
#, gcc-internal-format
msgid "negative width in bit-field %qs"
msgstr ""
-#: c/c-decl.c:5206
+#: c/c-decl.c:5235
#, gcc-internal-format
msgid "zero width for bit-field %qs"
msgstr ""
-#: c/c-decl.c:5216
+#: c/c-decl.c:5245
#, gcc-internal-format
msgid "bit-field %qs has invalid type"
msgstr ""
-#: c/c-decl.c:5226
+#: c/c-decl.c:5255
#, gcc-internal-format
msgid "type of bit-field %qs is a GCC extension"
msgstr ""
-#: c/c-decl.c:5232
+#: c/c-decl.c:5261
#, gcc-internal-format
msgid "width of %qs exceeds its type"
msgstr ""
-#: c/c-decl.c:5245
+#: c/c-decl.c:5274
#, gcc-internal-format
msgid "%qs is narrower than values of its type"
msgstr ""
-#: c/c-decl.c:5260
+#: c/c-decl.c:5289
#, gcc-internal-format
msgid "ISO C90 forbids array %qE whose size can%'t be evaluated"
msgstr ""
-#: c/c-decl.c:5263
+#: c/c-decl.c:5292
#, gcc-internal-format
msgid "ISO C90 forbids array whose size can%'t be evaluated"
msgstr ""
-#: c/c-decl.c:5270
+#: c/c-decl.c:5299
#, gcc-internal-format
msgid "ISO C90 forbids variable length array %qE"
msgstr ""
-#: c/c-decl.c:5272
+#: c/c-decl.c:5301
#, gcc-internal-format
msgid "ISO C90 forbids variable length array"
msgstr ""
-#: c/c-decl.c:5451 c/c-decl.c:5814 c/c-decl.c:5824
+#: c/c-decl.c:5480 c/c-decl.c:5843 c/c-decl.c:5853
#, gcc-internal-format
msgid "variably modified %qE at file scope"
msgstr ""
-#: c/c-decl.c:5453
+#: c/c-decl.c:5482
#, gcc-internal-format
msgid "variably modified field at file scope"
msgstr ""
-#: c/c-decl.c:5473
+#: c/c-decl.c:5502
#, gcc-internal-format
msgid "type defaults to %<int%> in declaration of %qE"
msgstr ""
-#: c/c-decl.c:5477
+#: c/c-decl.c:5506
#, gcc-internal-format
msgid "type defaults to %<int%> in type name"
msgstr ""
-#: c/c-decl.c:5509
+#: c/c-decl.c:5538
#, gcc-internal-format
msgid "duplicate %<const%>"
msgstr ""
-#: c/c-decl.c:5511
+#: c/c-decl.c:5540
#, gcc-internal-format
msgid "duplicate %<restrict%>"
msgstr ""
-#: c/c-decl.c:5513
+#: c/c-decl.c:5542
#, gcc-internal-format
msgid "duplicate %<volatile%>"
msgstr ""
-#: c/c-decl.c:5515
+#: c/c-decl.c:5544
#, gcc-internal-format
msgid "duplicate %<_Atomic%>"
msgstr ""
-#: c/c-decl.c:5518
+#: c/c-decl.c:5547
#, gcc-internal-format, gfc-internal-format
msgid "conflicting named address spaces (%s vs %s)"
msgstr ""
-#: c/c-decl.c:5541 c/c-parser.c:2585
+#: c/c-decl.c:5570 c/c-parser.c:2583
#, gcc-internal-format
msgid "%<_Atomic%>-qualified array type"
msgstr ""
-#: c/c-decl.c:5555
+#: c/c-decl.c:5584
#, gcc-internal-format
msgid "function definition declared %<auto%>"
msgstr ""
-#: c/c-decl.c:5557
+#: c/c-decl.c:5586
#, gcc-internal-format
msgid "function definition declared %<register%>"
msgstr ""
-#: c/c-decl.c:5559
+#: c/c-decl.c:5588
#, gcc-internal-format
msgid "function definition declared %<typedef%>"
msgstr ""
-#: c/c-decl.c:5561
+#: c/c-decl.c:5590
#, gcc-internal-format
msgid "function definition declared %qs"
msgstr ""
-#: c/c-decl.c:5579
+#: c/c-decl.c:5608
#, gcc-internal-format
msgid "storage class specified for structure field %qE"
msgstr ""
-#: c/c-decl.c:5582
+#: c/c-decl.c:5611
#, gcc-internal-format
msgid "storage class specified for structure field"
msgstr ""
-#: c/c-decl.c:5586
+#: c/c-decl.c:5615
#, gcc-internal-format
msgid "storage class specified for parameter %qE"
msgstr ""
-#: c/c-decl.c:5589
+#: c/c-decl.c:5618
#, gcc-internal-format
msgid "storage class specified for unnamed parameter"
msgstr ""
-#: c/c-decl.c:5592 cp/decl.c:9888
+#: c/c-decl.c:5621 cp/decl.c:9911
#, gcc-internal-format
msgid "storage class specified for typename"
msgstr ""
-#: c/c-decl.c:5609
+#: c/c-decl.c:5638
#, gcc-internal-format
msgid "%qE initialized and declared %<extern%>"
msgstr ""
-#: c/c-decl.c:5613
+#: c/c-decl.c:5642
#, gcc-internal-format
msgid "%qE has both %<extern%> and initializer"
msgstr ""
-#: c/c-decl.c:5618
+#: c/c-decl.c:5647
#, gcc-internal-format
msgid "file-scope declaration of %qE specifies %<auto%>"
msgstr ""
-#: c/c-decl.c:5622
+#: c/c-decl.c:5651
#, gcc-internal-format
msgid "file-scope declaration of %qE specifies %<register%>"
msgstr ""
-#: c/c-decl.c:5627
+#: c/c-decl.c:5656
#, gcc-internal-format
msgid "nested function %qE declared %<extern%>"
msgstr ""
-#: c/c-decl.c:5630
+#: c/c-decl.c:5659
#, gcc-internal-format
msgid "function-scope %qE implicitly auto and declared %qs"
msgstr ""
@@ -31701,699 +31800,699 @@ 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:5677 c/c-decl.c:6035
+#: c/c-decl.c:5706 c/c-decl.c:6064
#, gcc-internal-format
msgid "static or type qualifiers in non-parameter array declarator"
msgstr ""
-#: c/c-decl.c:5725
+#: c/c-decl.c:5754
#, gcc-internal-format
msgid "declaration of %qE as array of voids"
msgstr ""
-#: c/c-decl.c:5727
+#: c/c-decl.c:5756
#, gcc-internal-format
msgid "declaration of type name as array of voids"
msgstr ""
-#: c/c-decl.c:5734
+#: c/c-decl.c:5763
#, gcc-internal-format
msgid "declaration of %qE as array of functions"
msgstr ""
-#: c/c-decl.c:5737
+#: c/c-decl.c:5766
#, gcc-internal-format
msgid "declaration of type name as array of functions"
msgstr ""
-#: c/c-decl.c:5745 c/c-decl.c:7725
+#: c/c-decl.c:5774 c/c-decl.c:7757
#, gcc-internal-format
msgid "invalid use of structure with flexible array member"
msgstr ""
-#: c/c-decl.c:5771
+#: c/c-decl.c:5800
#, gcc-internal-format
msgid "size of array %qE has non-integer type"
msgstr ""
-#: c/c-decl.c:5775
+#: c/c-decl.c:5804
#, gcc-internal-format
msgid "size of unnamed array has non-integer type"
msgstr ""
-#: c/c-decl.c:5785
+#: c/c-decl.c:5814
#, gcc-internal-format
msgid "ISO C forbids zero-size array %qE"
msgstr ""
-#: c/c-decl.c:5788
+#: c/c-decl.c:5817
#, gcc-internal-format
msgid "ISO C forbids zero-size array"
msgstr ""
-#: c/c-decl.c:5797
+#: c/c-decl.c:5826
#, gcc-internal-format
msgid "size of array %qE is negative"
msgstr ""
-#: c/c-decl.c:5799
+#: c/c-decl.c:5828
#, gcc-internal-format
msgid "size of unnamed array is negative"
msgstr ""
-#: c/c-decl.c:5923 c/c-decl.c:6532
+#: c/c-decl.c:5952 c/c-decl.c:6561
#, gcc-internal-format
msgid "ISO C90 does not support flexible array members"
msgstr ""
#. C99 6.7.5.2p4
-#: c/c-decl.c:5945
+#: c/c-decl.c:5974
#, gcc-internal-format
msgid "%<[*]%> not in a declaration"
msgstr ""
-#: c/c-decl.c:5958
+#: c/c-decl.c:5987
#, gcc-internal-format
msgid "array type has incomplete element type %qT"
msgstr ""
-#: c/c-decl.c:5964
+#: c/c-decl.c:5993
#, gcc-internal-format
msgid ""
"declaration of %qE as multidimensional array must have bounds for all "
"dimensions except the first"
msgstr ""
-#: c/c-decl.c:5968
+#: c/c-decl.c:5997
#, gcc-internal-format
msgid ""
"declaration of multidimensional array must have bounds for all dimensions "
"except the first"
msgstr ""
-#: c/c-decl.c:6071
+#: c/c-decl.c:6100
#, gcc-internal-format
msgid "%qE declared as function returning a function"
msgstr ""
-#: c/c-decl.c:6074
+#: c/c-decl.c:6103
#, gcc-internal-format
msgid "type name declared as function returning a function"
msgstr ""
-#: c/c-decl.c:6081
+#: c/c-decl.c:6110
#, gcc-internal-format
msgid "%qE declared as function returning an array"
msgstr ""
-#: c/c-decl.c:6084
+#: c/c-decl.c:6113
#, gcc-internal-format
msgid "type name declared as function returning an array"
msgstr ""
-#: c/c-decl.c:6112
+#: c/c-decl.c:6141
#, gcc-internal-format
msgid "function definition has qualified void return type"
msgstr ""
-#: c/c-decl.c:6115 cp/decl.c:10018
+#: c/c-decl.c:6144 cp/decl.c:10041
#, gcc-internal-format
msgid "type qualifiers ignored on function return type"
msgstr ""
-#: c/c-decl.c:6144 c/c-decl.c:6328 c/c-decl.c:6382 c/c-decl.c:6466
-#: c/c-decl.c:6582 c/c-parser.c:2587
+#: c/c-decl.c:6173 c/c-decl.c:6357 c/c-decl.c:6411 c/c-decl.c:6495
+#: c/c-decl.c:6611 c/c-parser.c:2585
#, gcc-internal-format
msgid "%<_Atomic%>-qualified function type"
msgstr ""
-#: c/c-decl.c:6150 c/c-decl.c:6334 c/c-decl.c:6471 c/c-decl.c:6587
+#: c/c-decl.c:6179 c/c-decl.c:6363 c/c-decl.c:6500 c/c-decl.c:6616
#, gcc-internal-format
msgid "ISO C forbids qualified function types"
msgstr ""
-#: c/c-decl.c:6219
+#: c/c-decl.c:6248
#, gcc-internal-format
msgid "%qs combined with %<auto%> qualifier for %qE"
msgstr ""
-#: c/c-decl.c:6223
+#: c/c-decl.c:6252
#, gcc-internal-format
msgid "%qs combined with %<register%> qualifier for %qE"
msgstr ""
-#: c/c-decl.c:6229
+#: c/c-decl.c:6258
#, gcc-internal-format
msgid "%qs specified for auto variable %qE"
msgstr ""
-#: c/c-decl.c:6245
+#: c/c-decl.c:6274
#, gcc-internal-format
msgid "%qs specified for parameter %qE"
msgstr ""
-#: c/c-decl.c:6248
+#: c/c-decl.c:6277
#, gcc-internal-format
msgid "%qs specified for unnamed parameter"
msgstr ""
-#: c/c-decl.c:6254
+#: c/c-decl.c:6283
#, gcc-internal-format
msgid "%qs specified for structure field %qE"
msgstr ""
-#: c/c-decl.c:6257
+#: c/c-decl.c:6286
#, gcc-internal-format
msgid "%qs specified for structure field"
msgstr ""
-#: c/c-decl.c:6272
+#: c/c-decl.c:6301
#, gcc-internal-format
msgid "bit-field %qE has atomic type"
msgstr ""
-#: c/c-decl.c:6274
+#: c/c-decl.c:6303
#, gcc-internal-format
msgid "bit-field has atomic type"
msgstr ""
-#: c/c-decl.c:6283
+#: c/c-decl.c:6312
#, gcc-internal-format
msgid "alignment specified for typedef %qE"
msgstr ""
-#: c/c-decl.c:6285
+#: c/c-decl.c:6314
#, gcc-internal-format
msgid "alignment specified for %<register%> object %qE"
msgstr ""
-#: c/c-decl.c:6290
+#: c/c-decl.c:6319
#, gcc-internal-format
msgid "alignment specified for parameter %qE"
msgstr ""
-#: c/c-decl.c:6292
+#: c/c-decl.c:6321
#, gcc-internal-format
msgid "alignment specified for unnamed parameter"
msgstr ""
-#: c/c-decl.c:6297
+#: c/c-decl.c:6326
#, gcc-internal-format
msgid "alignment specified for bit-field %qE"
msgstr ""
-#: c/c-decl.c:6299
+#: c/c-decl.c:6328
#, gcc-internal-format
msgid "alignment specified for unnamed bit-field"
msgstr ""
-#: c/c-decl.c:6302
+#: c/c-decl.c:6331
#, gcc-internal-format
msgid "alignment specified for function %qE"
msgstr ""
-#: c/c-decl.c:6309
+#: c/c-decl.c:6338
#, gcc-internal-format
msgid "%<_Alignas%> specifiers cannot reduce alignment of %qE"
msgstr ""
-#: c/c-decl.c:6312
+#: c/c-decl.c:6341
#, gcc-internal-format
msgid "%<_Alignas%> specifiers cannot reduce alignment of unnamed field"
msgstr ""
-#: c/c-decl.c:6343
+#: c/c-decl.c:6372
#, gcc-internal-format
msgid "typedef %q+D declared %<inline%>"
msgstr ""
-#: c/c-decl.c:6345
+#: c/c-decl.c:6374
#, gcc-internal-format
msgid "typedef %q+D declared %<_Noreturn%>"
msgstr ""
-#: c/c-decl.c:6388
+#: c/c-decl.c:6417
#, gcc-internal-format
msgid "ISO C forbids const or volatile function types"
msgstr ""
#. C99 6.7.2.1p8
-#: c/c-decl.c:6399
+#: c/c-decl.c:6428
#, gcc-internal-format
msgid "a member of a structure or union cannot have a variably modified type"
msgstr ""
-#: c/c-decl.c:6416 cp/decl.c:9093
+#: c/c-decl.c:6445 cp/decl.c:9116
#, gcc-internal-format
msgid "variable or field %qE declared void"
msgstr ""
-#: c/c-decl.c:6456
+#: c/c-decl.c:6485
#, gcc-internal-format
msgid "attributes in parameter array declarator ignored"
msgstr ""
-#: c/c-decl.c:6498
+#: c/c-decl.c:6527
#, gcc-internal-format
msgid "parameter %q+D declared %<inline%>"
msgstr ""
-#: c/c-decl.c:6500
+#: c/c-decl.c:6529
#, gcc-internal-format
msgid "parameter %q+D declared %<_Noreturn%>"
msgstr ""
-#: c/c-decl.c:6513
+#: c/c-decl.c:6542
#, gcc-internal-format
msgid "field %qE declared as a function"
msgstr ""
-#: c/c-decl.c:6520
+#: c/c-decl.c:6549
#, gcc-internal-format
msgid "field %qE has incomplete type"
msgstr ""
-#: c/c-decl.c:6522
+#: c/c-decl.c:6551
#, gcc-internal-format
msgid "unnamed field has incomplete type"
msgstr ""
-#: c/c-decl.c:6553 c/c-decl.c:6564 c/c-decl.c:6567
+#: c/c-decl.c:6582 c/c-decl.c:6593 c/c-decl.c:6596
#, gcc-internal-format
msgid "invalid storage class for function %qE"
msgstr ""
-#: c/c-decl.c:6624
+#: c/c-decl.c:6653
#, gcc-internal-format
msgid "cannot inline function %<main%>"
msgstr ""
-#: c/c-decl.c:6626
+#: c/c-decl.c:6655
#, gcc-internal-format
msgid "%<main%> declared %<_Noreturn%>"
msgstr ""
-#: c/c-decl.c:6637
+#: c/c-decl.c:6666
#, gcc-internal-format
msgid "ISO C99 does not support %<_Noreturn%>"
msgstr ""
-#: c/c-decl.c:6640
+#: c/c-decl.c:6669
#, gcc-internal-format
msgid "ISO C90 does not support %<_Noreturn%>"
msgstr ""
-#: c/c-decl.c:6669
+#: c/c-decl.c:6698
#, gcc-internal-format
msgid "variable previously declared %<static%> redeclared %<extern%>"
msgstr ""
-#: c/c-decl.c:6679
+#: c/c-decl.c:6708
#, gcc-internal-format
msgid "variable %q+D declared %<inline%>"
msgstr ""
-#: c/c-decl.c:6681
+#: c/c-decl.c:6710
#, gcc-internal-format
msgid "variable %q+D declared %<_Noreturn%>"
msgstr ""
-#: c/c-decl.c:6716
+#: c/c-decl.c:6745
#, gcc-internal-format
msgid "non-nested function with variably modified type"
msgstr ""
-#: c/c-decl.c:6718
+#: c/c-decl.c:6747
#, gcc-internal-format
msgid "object with variably modified type must have no linkage"
msgstr ""
-#: c/c-decl.c:6808 c/c-decl.c:8403
+#: c/c-decl.c:6837 c/c-decl.c:8442
#, gcc-internal-format
msgid "function declaration isn%'t a prototype"
msgstr ""
-#: c/c-decl.c:6817
+#: c/c-decl.c:6846
#, gcc-internal-format
msgid "parameter names (without types) in function declaration"
msgstr ""
-#: c/c-decl.c:6855
+#: c/c-decl.c:6884
#, gcc-internal-format
msgid "parameter %u (%q+D) has incomplete type"
msgstr ""
-#: c/c-decl.c:6859
+#: c/c-decl.c:6888
#, gcc-internal-format, gfc-internal-format
msgid "parameter %u has incomplete type"
msgstr ""
-#: c/c-decl.c:6870
+#: c/c-decl.c:6899
#, gcc-internal-format
msgid "parameter %u (%q+D) has void type"
msgstr ""
-#: c/c-decl.c:6874
+#: c/c-decl.c:6903
#, gcc-internal-format, gfc-internal-format
msgid "parameter %u has void type"
msgstr ""
-#: c/c-decl.c:6957
+#: c/c-decl.c:6986
#, gcc-internal-format
msgid "%<void%> as only parameter may not be qualified"
msgstr ""
-#: c/c-decl.c:6961 c/c-decl.c:6997
+#: c/c-decl.c:6990 c/c-decl.c:7026
#, gcc-internal-format
msgid "%<void%> must be the only parameter"
msgstr ""
-#: c/c-decl.c:6991
+#: c/c-decl.c:7020
#, gcc-internal-format
msgid "parameter %q+D has just a forward declaration"
msgstr ""
-#: c/c-decl.c:7037
+#: c/c-decl.c:7066
#, 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:7043
+#: c/c-decl.c:7072
#, 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:7142
+#: c/c-decl.c:7174
#, gcc-internal-format
msgid "enum type defined here"
msgstr ""
-#: c/c-decl.c:7148
+#: c/c-decl.c:7180
#, gcc-internal-format
msgid "struct defined here"
msgstr ""
-#: c/c-decl.c:7154
+#: c/c-decl.c:7186
#, gcc-internal-format
msgid "union defined here"
msgstr ""
-#: c/c-decl.c:7227
+#: c/c-decl.c:7259
#, gcc-internal-format
msgid "redefinition of %<union %E%>"
msgstr ""
-#: c/c-decl.c:7229
+#: c/c-decl.c:7261
#, gcc-internal-format
msgid "redefinition of %<struct %E%>"
msgstr ""
-#: c/c-decl.c:7238
+#: c/c-decl.c:7270
#, gcc-internal-format
msgid "nested redefinition of %<union %E%>"
msgstr ""
-#: c/c-decl.c:7240
+#: c/c-decl.c:7272
#, gcc-internal-format
msgid "nested redefinition of %<struct %E%>"
msgstr ""
-#: c/c-decl.c:7273 c/c-decl.c:7989
+#: c/c-decl.c:7305 c/c-decl.c:8021
#, gcc-internal-format
msgid "defining type in %qs expression is invalid in C++"
msgstr ""
-#: c/c-decl.c:7341 cp/decl.c:4573
+#: c/c-decl.c:7373 cp/decl.c:4580
#, gcc-internal-format
msgid "declaration does not declare anything"
msgstr ""
-#: c/c-decl.c:7346
+#: c/c-decl.c:7378
#, gcc-internal-format
msgid "ISO C99 doesn%'t support unnamed structs/unions"
msgstr ""
-#: c/c-decl.c:7349
+#: c/c-decl.c:7381
#, gcc-internal-format
msgid "ISO C90 doesn%'t support unnamed structs/unions"
msgstr ""
-#: c/c-decl.c:7440 c/c-decl.c:7458 c/c-decl.c:7519
+#: c/c-decl.c:7472 c/c-decl.c:7490 c/c-decl.c:7551
#, gcc-internal-format
msgid "duplicate member %q+D"
msgstr ""
-#: c/c-decl.c:7545
+#: c/c-decl.c:7577
#, gcc-internal-format
msgid "empty struct has size 0 in C, size 1 in C++"
msgstr ""
-#: c/c-decl.c:7548
+#: c/c-decl.c:7580
#, gcc-internal-format
msgid "empty union has size 0 in C, size 1 in C++"
msgstr ""
-#: c/c-decl.c:7634
+#: c/c-decl.c:7666
#, gcc-internal-format
msgid "union has no named members"
msgstr ""
-#: c/c-decl.c:7636
+#: c/c-decl.c:7668
#, gcc-internal-format
msgid "union has no members"
msgstr ""
-#: c/c-decl.c:7641
+#: c/c-decl.c:7673
#, gcc-internal-format
msgid "struct has no named members"
msgstr ""
-#: c/c-decl.c:7643
+#: c/c-decl.c:7675
#, gcc-internal-format
msgid "struct has no members"
msgstr ""
-#: c/c-decl.c:7705 cp/decl.c:10967
+#: c/c-decl.c:7737 cp/decl.c:10990
#, gcc-internal-format
msgid "flexible array member in union"
msgstr ""
-#: c/c-decl.c:7711
+#: c/c-decl.c:7743
#, gcc-internal-format
msgid "flexible array member not at end of struct"
msgstr ""
-#: c/c-decl.c:7717
+#: c/c-decl.c:7749
#, gcc-internal-format
msgid "flexible array member in otherwise empty struct"
msgstr ""
-#: c/c-decl.c:7747
+#: c/c-decl.c:7779
#, gcc-internal-format
msgid "type %qT is too large"
msgstr ""
-#: c/c-decl.c:7870
+#: c/c-decl.c:7902
#, gcc-internal-format
msgid "union cannot be made transparent"
msgstr ""
-#: c/c-decl.c:7961
+#: c/c-decl.c:7993
#, 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:7968
+#: c/c-decl.c:8000
#, gcc-internal-format
msgid "redeclaration of %<enum %E%>"
msgstr ""
-#: c/c-decl.c:8045
+#: c/c-decl.c:8079
#, gcc-internal-format
-msgid "enumeration values exceed range of largest integer"
+msgid "specified mode too small for enumeral values"
msgstr ""
-#: c/c-decl.c:8064
+#: c/c-decl.c:8094
#, gcc-internal-format
-msgid "specified mode too small for enumeral values"
+msgid "enumeration values exceed range of largest integer"
msgstr ""
-#: c/c-decl.c:8169 c/c-decl.c:8185
+#: c/c-decl.c:8208 c/c-decl.c:8224
#, gcc-internal-format
msgid "enumerator value for %qE is not an integer constant"
msgstr ""
-#: c/c-decl.c:8180
+#: c/c-decl.c:8219
#, gcc-internal-format
msgid "enumerator value for %qE is not an integer constant expression"
msgstr ""
-#: c/c-decl.c:8204
+#: c/c-decl.c:8243
#, gcc-internal-format
msgid "overflow in enumeration values"
msgstr ""
-#: c/c-decl.c:8212
+#: c/c-decl.c:8251
#, gcc-internal-format
msgid "ISO C restricts enumerator values to range of %<int%>"
msgstr ""
-#: c/c-decl.c:8298 cp/decl.c:4875 cp/decl.c:13770
+#: c/c-decl.c:8337 cp/decl.c:4882 cp/decl.c:13842
#, gcc-internal-format
msgid "inline function %qD given attribute noinline"
msgstr ""
-#: c/c-decl.c:8316
+#: c/c-decl.c:8355
#, gcc-internal-format
msgid "return type is an incomplete type"
msgstr ""
-#: c/c-decl.c:8327
+#: c/c-decl.c:8366
#, gcc-internal-format
msgid "return type defaults to %<int%>"
msgstr ""
-#: c/c-decl.c:8353
+#: c/c-decl.c:8392
#, gcc-internal-format
msgid "%q+D defined as variadic function without prototype"
msgstr ""
-#: c/c-decl.c:8412
+#: c/c-decl.c:8451
#, gcc-internal-format
msgid "no previous prototype for %qD"
msgstr ""
-#: c/c-decl.c:8421
+#: c/c-decl.c:8460
#, gcc-internal-format
msgid "%qD was used with no prototype before its definition"
msgstr ""
-#: c/c-decl.c:8429 cp/decl.c:13913
+#: c/c-decl.c:8468 cp/decl.c:13985
#, gcc-internal-format
msgid "no previous declaration for %qD"
msgstr ""
-#: c/c-decl.c:8439
+#: c/c-decl.c:8478
#, gcc-internal-format
msgid "%qD was used with no declaration before its definition"
msgstr ""
-#: c/c-decl.c:8458
+#: c/c-decl.c:8497
#, gcc-internal-format
msgid "return type of %qD is not %<int%>"
msgstr ""
-#: c/c-decl.c:8460
+#: c/c-decl.c:8499
#, gcc-internal-format
msgid "%<_Atomic%>-qualified return type of %qD"
msgstr ""
-#: c/c-decl.c:8467
+#: c/c-decl.c:8506
#, gcc-internal-format
msgid "%qD is normally a non-static function"
msgstr ""
-#: c/c-decl.c:8504
+#: c/c-decl.c:8543
#, gcc-internal-format
msgid "old-style parameter declarations in prototyped function definition"
msgstr ""
-#: c/c-decl.c:8519
+#: c/c-decl.c:8558
#, gcc-internal-format
msgid "traditional C rejects ISO C style function definitions"
msgstr ""
-#: c/c-decl.c:8535
+#: c/c-decl.c:8574
#, gcc-internal-format
msgid "parameter name omitted"
msgstr ""
-#: c/c-decl.c:8572
+#: c/c-decl.c:8611
#, gcc-internal-format
msgid "old-style function definition"
msgstr ""
-#: c/c-decl.c:8581
+#: c/c-decl.c:8620
#, gcc-internal-format
msgid "parameter name missing from parameter list"
msgstr ""
-#: c/c-decl.c:8596
+#: c/c-decl.c:8635
#, gcc-internal-format
msgid "%qD declared as a non-parameter"
msgstr ""
-#: c/c-decl.c:8602
+#: c/c-decl.c:8641
#, gcc-internal-format
msgid "multiple parameters named %qD"
msgstr ""
-#: c/c-decl.c:8611
+#: c/c-decl.c:8650
#, gcc-internal-format
msgid "parameter %qD declared with void type"
msgstr ""
-#: c/c-decl.c:8640 c/c-decl.c:8645
+#: c/c-decl.c:8679 c/c-decl.c:8684
#, gcc-internal-format
msgid "type of %qD defaults to %<int%>"
msgstr ""
-#: c/c-decl.c:8665
+#: c/c-decl.c:8704
#, gcc-internal-format
msgid "parameter %qD has incomplete type"
msgstr ""
-#: c/c-decl.c:8672
+#: c/c-decl.c:8711
#, gcc-internal-format
msgid "declaration for parameter %qD but no such parameter"
msgstr ""
-#: c/c-decl.c:8722
+#: c/c-decl.c:8761
#, gcc-internal-format
msgid "number of arguments doesn%'t match built-in prototype"
msgstr ""
-#: c/c-decl.c:8733
+#: c/c-decl.c:8772
#, gcc-internal-format
msgid "number of arguments doesn%'t match prototype"
msgstr ""
-#: c/c-decl.c:8736 c/c-decl.c:8783 c/c-decl.c:8797
+#: c/c-decl.c:8775 c/c-decl.c:8822 c/c-decl.c:8836
#, gcc-internal-format
msgid "prototype declaration"
msgstr ""
-#: c/c-decl.c:8775
+#: c/c-decl.c:8814
#, gcc-internal-format
msgid "promoted argument %qD doesn%'t match built-in prototype"
msgstr ""
-#: c/c-decl.c:8780
+#: c/c-decl.c:8819
#, gcc-internal-format
msgid "promoted argument %qD doesn%'t match prototype"
msgstr ""
-#: c/c-decl.c:8790
+#: c/c-decl.c:8829
#, gcc-internal-format
msgid "argument %qD doesn%'t match built-in prototype"
msgstr ""
-#: c/c-decl.c:8795
+#: c/c-decl.c:8834
#, gcc-internal-format
msgid "argument %qD doesn%'t match prototype"
msgstr ""
-#: c/c-decl.c:9052 cp/decl.c:14709
+#: c/c-decl.c:9091 cp/decl.c:14739
#, gcc-internal-format
msgid "no return statement in function returning non-void"
msgstr ""
-#: c/c-decl.c:9072 cp/decl.c:14741
+#: c/c-decl.c:9111 cp/decl.c:14771
#, gcc-internal-format
msgid "parameter %qD set but not used"
msgstr ""
@@ -32401,228 +32500,228 @@ msgstr ""
#. If we get here, declarations have been used in a for loop without
#. the C99 for loop scope. This doesn't make much sense, so don't
#. allow it.
-#: c/c-decl.c:9166
+#: c/c-decl.c:9205
#, gcc-internal-format
msgid "%<for%> loop initial declarations are only allowed in C99 or C11 mode"
msgstr ""
-#: c/c-decl.c:9171
+#: c/c-decl.c:9210
#, gcc-internal-format
msgid ""
"use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code"
msgstr ""
-#: c/c-decl.c:9206
+#: c/c-decl.c:9245
#, gcc-internal-format
msgid "declaration of static variable %qD in %<for%> loop initial declaration"
msgstr ""
-#: c/c-decl.c:9210
+#: c/c-decl.c:9249
#, gcc-internal-format
msgid ""
"declaration of %<extern%> variable %qD in %<for%> loop initial declaration"
msgstr ""
-#: c/c-decl.c:9217
+#: c/c-decl.c:9256
#, gcc-internal-format
msgid "%<struct %E%> declared in %<for%> loop initial declaration"
msgstr ""
-#: c/c-decl.c:9222
+#: c/c-decl.c:9261
#, gcc-internal-format
msgid "%<union %E%> declared in %<for%> loop initial declaration"
msgstr ""
-#: c/c-decl.c:9226
+#: c/c-decl.c:9265
#, gcc-internal-format
msgid "%<enum %E%> declared in %<for%> loop initial declaration"
msgstr ""
-#: c/c-decl.c:9230
+#: c/c-decl.c:9269
#, gcc-internal-format
msgid "declaration of non-variable %qD in %<for%> loop initial declaration"
msgstr ""
-#: c/c-decl.c:9504
+#: c/c-decl.c:9517
#, gcc-internal-format
msgid "incompatible address space qualifiers %qs and %qs"
msgstr ""
-#: c/c-decl.c:9554 c/c-decl.c:9911 c/c-decl.c:10401
+#: c/c-decl.c:9567 c/c-decl.c:9924 c/c-decl.c:10414
#, gcc-internal-format
msgid "duplicate %qE"
msgstr ""
-#: c/c-decl.c:9580 c/c-decl.c:9923 c/c-decl.c:10244
+#: c/c-decl.c:9593 c/c-decl.c:9936 c/c-decl.c:10257
#, gcc-internal-format
msgid "two or more data types in declaration specifiers"
msgstr ""
-#: c/c-decl.c:9592 cp/parser.c:26637
+#: c/c-decl.c:9605 cp/parser.c:26701
#, gcc-internal-format
msgid "%<long long long%> is too long for GCC"
msgstr ""
-#: c/c-decl.c:9605
+#: c/c-decl.c:9618
#, gcc-internal-format
msgid "ISO C90 does not support %<long long%>"
msgstr ""
-#: c/c-decl.c:9802 c/c-parser.c:7881
+#: c/c-decl.c:9815 c/c-parser.c:7903
#, gcc-internal-format
msgid "ISO C90 does not support complex types"
msgstr ""
-#: c/c-decl.c:9848
+#: c/c-decl.c:9861
#, gcc-internal-format
msgid "ISO C does not support saturating types"
msgstr ""
-#: c/c-decl.c:9966
+#: c/c-decl.c:9979
#, gcc-internal-format
msgid "ISO C does not support %<__int%d%> types"
msgstr ""
-#: c/c-decl.c:9986
+#: c/c-decl.c:9999
#, gcc-internal-format
msgid "%<__int%d%> is not supported on this target"
msgstr ""
-#: c/c-decl.c:10028
+#: c/c-decl.c:10041
#, gcc-internal-format
msgid "ISO C90 does not support boolean types"
msgstr ""
-#: c/c-decl.c:10202
+#: c/c-decl.c:10215
#, gcc-internal-format
msgid "ISO C does not support decimal floating point"
msgstr ""
-#: c/c-decl.c:10225 c/c-decl.c:10491 c/c-parser.c:7386
+#: c/c-decl.c:10238 c/c-decl.c:10504 c/c-parser.c:7406
#, gcc-internal-format
msgid "fixed-point types not supported for this target"
msgstr ""
-#: c/c-decl.c:10227
+#: c/c-decl.c:10240
#, gcc-internal-format
msgid "ISO C does not support fixed-point types"
msgstr ""
-#: c/c-decl.c:10262
+#: c/c-decl.c:10275
#, gcc-internal-format
msgid "C++ lookup of %qD would return a field, not a type"
msgstr ""
-#: c/c-decl.c:10275
+#: c/c-decl.c:10288
#, gcc-internal-format
msgid "%qE fails to be a typedef or built in type"
msgstr ""
-#: c/c-decl.c:10323
+#: c/c-decl.c:10336
#, gcc-internal-format
msgid "%qE is not at beginning of declaration"
msgstr ""
-#: c/c-decl.c:10344
+#: c/c-decl.c:10357
#, gcc-internal-format
msgid "%qE used with %<auto%>"
msgstr ""
-#: c/c-decl.c:10346
+#: c/c-decl.c:10359
#, gcc-internal-format
msgid "%qE used with %<register%>"
msgstr ""
-#: c/c-decl.c:10348
+#: c/c-decl.c:10361
#, gcc-internal-format
msgid "%qE used with %<typedef%>"
msgstr ""
-#: c/c-decl.c:10362 c/c-parser.c:6963
+#: c/c-decl.c:10375 c/c-parser.c:6983
#, gcc-internal-format
msgid "ISO C99 does not support %qE"
msgstr ""
-#: c/c-decl.c:10365 c/c-parser.c:6966
+#: c/c-decl.c:10378 c/c-parser.c:6986
#, gcc-internal-format
msgid "ISO C90 does not support %qE"
msgstr ""
-#: c/c-decl.c:10377
+#: c/c-decl.c:10390
#, gcc-internal-format
msgid "%<__thread%> before %<extern%>"
msgstr ""
-#: c/c-decl.c:10386
+#: c/c-decl.c:10399
#, gcc-internal-format
msgid "%<__thread%> before %<static%>"
msgstr ""
-#: c/c-decl.c:10399
+#: c/c-decl.c:10412
#, gcc-internal-format
msgid "duplicate %<_Thread_local%> or %<__thread%>"
msgstr ""
-#: c/c-decl.c:10407
+#: c/c-decl.c:10420
#, gcc-internal-format
msgid "multiple storage classes in declaration specifiers"
msgstr ""
-#: c/c-decl.c:10415
+#: c/c-decl.c:10428
#, gcc-internal-format
msgid "%qs used with %qE"
msgstr ""
-#: c/c-decl.c:10488
+#: c/c-decl.c:10501
#, gcc-internal-format
msgid "%<_Sat%> is used without %<_Fract%> or %<_Accum%>"
msgstr ""
-#: c/c-decl.c:10503
+#: c/c-decl.c:10516
#, gcc-internal-format
msgid "ISO C does not support plain %<complex%> meaning %<double complex%>"
msgstr ""
-#: c/c-decl.c:10554 c/c-decl.c:10567 c/c-decl.c:10593
+#: c/c-decl.c:10567 c/c-decl.c:10580 c/c-decl.c:10606
#, gcc-internal-format
msgid "ISO C does not support complex integer types"
msgstr ""
-#: c/c-decl.c:10991 cp/semantics.c:5245
+#: c/c-decl.c:11004 cp/semantics.c:5294
#, 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:10995 cp/semantics.c:5249
+#: c/c-decl.c:11008 cp/semantics.c:5298
#, 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:11001 cp/typeck.c:4425
+#: c/c-fold.c:319 c/c-typeck.c:11014 cp/typeck.c:4465
#, gcc-internal-format
msgid "left shift of negative value"
msgstr ""
-#: c/c-fold.c:331 c/c-typeck.c:11010 cp/typeck.c:4433
+#: c/c-fold.c:331 c/c-typeck.c:11023 cp/typeck.c:4473
#, gcc-internal-format
msgid "left shift count is negative"
msgstr ""
-#: c/c-fold.c:332 c/c-typeck.c:10949 cp/typeck.c:4379
+#: c/c-fold.c:332 c/c-typeck.c:10962 cp/typeck.c:4419
#, gcc-internal-format
msgid "right shift count is negative"
msgstr ""
-#: c/c-fold.c:338 c/c-typeck.c:11017 cp/typeck.c:4441
+#: c/c-fold.c:338 c/c-typeck.c:11030 cp/typeck.c:4481
#, gcc-internal-format
msgid "left shift count >= width of type"
msgstr ""
-#: c/c-fold.c:339 c/c-typeck.c:10961 cp/typeck.c:4387
+#: c/c-fold.c:339 c/c-typeck.c:10974 cp/typeck.c:4427
#, gcc-internal-format
msgid "right shift count >= width of type"
msgstr ""
@@ -32637,78 +32736,78 @@ msgstr ""
msgid "version control conflict marker in file"
msgstr ""
-#: c/c-parser.c:1086 cp/parser.c:26844
+#: c/c-parser.c:1086 cp/parser.c:26908
#, gcc-internal-format
msgid "expected end of line"
msgstr ""
-#: c/c-parser.c:1419
+#: c/c-parser.c:1420
#, gcc-internal-format
msgid "ISO C forbids an empty translation unit"
msgstr ""
-#: c/c-parser.c:1526 c/c-parser.c:8992
+#: c/c-parser.c:1524 c/c-parser.c:9014
#, gcc-internal-format
msgid "ISO C does not allow extra %<;%> outside of a function"
msgstr ""
-#: c/c-parser.c:1659 c/c-parser.c:2411 c/c-parser.c:3810
+#: c/c-parser.c:1657 c/c-parser.c:2409 c/c-parser.c:3808
#, gcc-internal-format
msgid "unknown type name %qE"
msgstr ""
-#: c/c-parser.c:1663
+#: c/c-parser.c:1661
#, gcc-internal-format
msgid "use %<struct%> keyword to refer to the type"
msgstr ""
-#: c/c-parser.c:1665
+#: c/c-parser.c:1663
#, gcc-internal-format
msgid "use %<union%> keyword to refer to the type"
msgstr ""
-#: c/c-parser.c:1667
+#: c/c-parser.c:1665
#, gcc-internal-format
msgid "use %<enum%> keyword to refer to the type"
msgstr ""
-#: c/c-parser.c:1687 c/c-parser.c:10141 c/c-parser.c:15125 c/c-parser.c:16010
-#: cp/parser.c:33903 cp/parser.c:34795 cp/parser.c:37305
+#: c/c-parser.c:1685 c/c-parser.c:10163 c/c-parser.c:15147 c/c-parser.c:16032
+#: cp/parser.c:33953 cp/parser.c:34845 cp/parser.c:37356
#, gcc-internal-format
msgid "expected declaration specifiers"
msgstr ""
-#: c/c-parser.c:1696
+#: c/c-parser.c:1694
#, gcc-internal-format
msgid "%<__auto_type%> in empty declaration"
msgstr ""
-#: c/c-parser.c:1718 c/c-parser.c:3089
+#: c/c-parser.c:1716 c/c-parser.c:3087
#, gcc-internal-format
msgid "expected %<;%>, identifier or %<(%>"
msgstr ""
-#: c/c-parser.c:1736 cp/parser.c:28493 cp/parser.c:28567
+#: c/c-parser.c:1734 cp/parser.c:28557 cp/parser.c:28631
#, gcc-internal-format
msgid "prefix attributes are ignored for methods"
msgstr ""
-#: c/c-parser.c:1771
+#: c/c-parser.c:1769
#, gcc-internal-format
msgid "prefix attributes are ignored for implementations"
msgstr ""
-#: c/c-parser.c:1792
+#: c/c-parser.c:1790
#, gcc-internal-format
msgid "unexpected attribute"
msgstr ""
-#: c/c-parser.c:1834
+#: c/c-parser.c:1832
#, gcc-internal-format
msgid "%<__auto_type%> requires a plain identifier as declarator"
msgstr ""
-#: c/c-parser.c:1851
+#: c/c-parser.c:1849
#, gcc-internal-format
msgid "data definition has no type or storage class"
msgstr ""
@@ -32716,28 +32815,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:1866
+#: c/c-parser.c:1864
#, gcc-internal-format
msgid ""
"attributes should be specified before the declarator in a function definition"
msgstr ""
-#: c/c-parser.c:1886
+#: c/c-parser.c:1884
#, gcc-internal-format
msgid "%<__auto_type%> used with a bit-field initializer"
msgstr ""
-#: c/c-parser.c:1957 c/c-parser.c:2045
+#: c/c-parser.c:1955 c/c-parser.c:2043
#, gcc-internal-format
msgid "%<__auto_type%> requires an initialized data declaration"
msgstr ""
-#: c/c-parser.c:2008
+#: c/c-parser.c:2006
#, gcc-internal-format
msgid "%<__auto_type%> may only be used with a single declarator"
msgstr ""
-#: c/c-parser.c:2037 cp/parser.c:12425
+#: c/c-parser.c:2035 cp/parser.c:12445
#, gcc-internal-format
msgid "expected %<,%> or %<;%>"
msgstr ""
@@ -32745,263 +32844,263 @@ 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:2051 c/c-parser.c:2067
+#: c/c-parser.c:2049 c/c-parser.c:2065
#, gcc-internal-format
msgid "expected %<=%>, %<,%>, %<;%>, %<asm%> or %<__attribute__%>"
msgstr ""
-#: c/c-parser.c:2059
+#: c/c-parser.c:2057
#, gcc-internal-format
msgid "ISO C forbids nested functions"
msgstr ""
-#: c/c-parser.c:2182
+#: c/c-parser.c:2180
#, gcc-internal-format
msgid "ISO C99 does not support %<_Static_assert%>"
msgstr ""
-#: c/c-parser.c:2185
+#: c/c-parser.c:2183
#, gcc-internal-format
msgid "ISO C90 does not support %<_Static_assert%>"
msgstr ""
-#: c/c-parser.c:2210 c/c-parser.c:3878 c/c-parser.c:10199 cp/parser.c:37010
+#: c/c-parser.c:2208 c/c-parser.c:3876 c/c-parser.c:10221 cp/parser.c:37061
#, gcc-internal-format
msgid "expected string literal"
msgstr ""
-#: c/c-parser.c:2218
+#: c/c-parser.c:2216
#, gcc-internal-format
msgid "expression in static assertion is not an integer"
msgstr ""
-#: c/c-parser.c:2227
+#: c/c-parser.c:2225
#, gcc-internal-format
msgid "expression in static assertion is not an integer constant expression"
msgstr ""
-#: c/c-parser.c:2232
+#: c/c-parser.c:2230
#, gcc-internal-format
msgid "expression in static assertion is not constant"
msgstr ""
-#: c/c-parser.c:2237
+#: c/c-parser.c:2235
#, gcc-internal-format
msgid "static assertion failed: %E"
msgstr ""
-#: c/c-parser.c:2552
+#: c/c-parser.c:2550
#, gcc-internal-format
msgid "%<_Atomic%> in Objective-C"
msgstr ""
-#: c/c-parser.c:2556
+#: c/c-parser.c:2554
#, gcc-internal-format
msgid "%<_Atomic%> with OpenMP"
msgstr ""
-#: c/c-parser.c:2559
+#: c/c-parser.c:2557
#, gcc-internal-format
msgid "ISO C99 does not support the %<_Atomic%> qualifier"
msgstr ""
-#: c/c-parser.c:2562
+#: c/c-parser.c:2560
#, gcc-internal-format
msgid "ISO C90 does not support the %<_Atomic%> qualifier"
msgstr ""
-#: c/c-parser.c:2589
+#: c/c-parser.c:2587
#, gcc-internal-format
msgid "%<_Atomic%> applied to a qualified type"
msgstr ""
-#: c/c-parser.c:2704
+#: c/c-parser.c:2702
#, gcc-internal-format
msgid "empty enum is invalid"
msgstr ""
-#: c/c-parser.c:2708 c/c-parser.c:3650 c/c-parser.c:4434 c/c-parser.c:4730
-#: c/c-parser.c:6071 c/c-parser.c:6158 c/c-parser.c:6833 c/c-parser.c:7444
-#: c/c-parser.c:7665 c/c-parser.c:7690 c/c-parser.c:7958 c/c-parser.c:8265
-#: c/c-parser.c:8297 c/c-parser.c:8576 c/c-parser.c:8625 c/c-parser.c:8785
-#: c/c-parser.c:8815 c/c-parser.c:8823 c/c-parser.c:8852 c/c-parser.c:8865
-#: c/c-parser.c:9170 c/c-parser.c:9294 c/c-parser.c:9734 c/c-parser.c:9769
-#: c/c-parser.c:9822 c/c-parser.c:9875 c/c-parser.c:9891 c/c-parser.c:9937
-#: c/c-parser.c:10513 c/c-parser.c:10552 c/c-parser.c:12501 c/c-parser.c:12735
-#: c/c-parser.c:14532 c/c-parser.c:17283 c/c-parser.c:17611 cp/parser.c:26847
-#: cp/parser.c:29336 cp/parser.c:29366 cp/parser.c:29436 cp/parser.c:31561
-#: cp/parser.c:36724 cp/parser.c:37449
+#: c/c-parser.c:2706 c/c-parser.c:3648 c/c-parser.c:4436 c/c-parser.c:4733
+#: c/c-parser.c:6091 c/c-parser.c:6178 c/c-parser.c:6853 c/c-parser.c:7464
+#: c/c-parser.c:7685 c/c-parser.c:7710 c/c-parser.c:7980 c/c-parser.c:8287
+#: c/c-parser.c:8319 c/c-parser.c:8598 c/c-parser.c:8647 c/c-parser.c:8807
+#: c/c-parser.c:8837 c/c-parser.c:8845 c/c-parser.c:8874 c/c-parser.c:8887
+#: c/c-parser.c:9192 c/c-parser.c:9316 c/c-parser.c:9756 c/c-parser.c:9791
+#: c/c-parser.c:9844 c/c-parser.c:9897 c/c-parser.c:9913 c/c-parser.c:9959
+#: c/c-parser.c:10535 c/c-parser.c:10574 c/c-parser.c:12523 c/c-parser.c:12757
+#: c/c-parser.c:14554 c/c-parser.c:17305 c/c-parser.c:17633 cp/parser.c:26911
+#: cp/parser.c:29400 cp/parser.c:29430 cp/parser.c:29500 cp/parser.c:31611
+#: cp/parser.c:36775 cp/parser.c:37500
#, gcc-internal-format
msgid "expected identifier"
msgstr ""
-#: c/c-parser.c:2746 cp/parser.c:17326
+#: c/c-parser.c:2744 cp/parser.c:17356
#, gcc-internal-format
msgid "comma at end of enumerator list"
msgstr ""
-#: c/c-parser.c:2752
+#: c/c-parser.c:2750
#, gcc-internal-format
msgid "expected %<,%> or %<}%>"
msgstr ""
-#: c/c-parser.c:2783
+#: c/c-parser.c:2781
#, gcc-internal-format
msgid "ISO C forbids forward references to %<enum%> types"
msgstr ""
-#: c/c-parser.c:2899
+#: c/c-parser.c:2897
#, gcc-internal-format
msgid "expected class name"
msgstr ""
-#: c/c-parser.c:2918
+#: c/c-parser.c:2916
#, gcc-internal-format
msgid "extra semicolon in struct or union specified"
msgstr ""
-#: c/c-parser.c:2947
+#: c/c-parser.c:2945
#, gcc-internal-format
msgid "no semicolon at end of struct or union"
msgstr ""
-#: c/c-parser.c:3051 c/c-parser.c:4244
+#: c/c-parser.c:3049 c/c-parser.c:4242
#, gcc-internal-format
msgid "expected specifier-qualifier-list"
msgstr ""
-#: c/c-parser.c:3062
+#: c/c-parser.c:3060
#, gcc-internal-format
msgid "ISO C forbids member declarations with no members"
msgstr ""
-#: c/c-parser.c:3152
+#: c/c-parser.c:3150
#, gcc-internal-format
msgid "expected %<,%>, %<;%> or %<}%>"
msgstr ""
-#: c/c-parser.c:3159
+#: c/c-parser.c:3157
#, gcc-internal-format
msgid "expected %<:%>, %<,%>, %<;%>, %<}%> or %<__attribute__%>"
msgstr ""
-#: c/c-parser.c:3212
+#: c/c-parser.c:3210
#, gcc-internal-format
msgid "%<typeof%> applied to a bit-field"
msgstr ""
-#: c/c-parser.c:3249
+#: c/c-parser.c:3247
#, gcc-internal-format
msgid "ISO C99 does not support %<_Alignas%>"
msgstr ""
-#: c/c-parser.c:3252
+#: c/c-parser.c:3250
#, gcc-internal-format
msgid "ISO C90 does not support %<_Alignas%>"
msgstr ""
-#: c/c-parser.c:3487
+#: c/c-parser.c:3485
#, gcc-internal-format
msgid "expected identifier or %<(%>"
msgstr ""
-#: c/c-parser.c:3548 c/c-parser.c:3577
+#: c/c-parser.c:3546 c/c-parser.c:3575
#, gcc-internal-format
msgid "array notations cannot be used in declaration"
msgstr ""
-#: c/c-parser.c:3716
+#: c/c-parser.c:3714
#, gcc-internal-format
msgid "ISO C requires a named argument before %<...%>"
msgstr ""
-#: c/c-parser.c:3817
+#: c/c-parser.c:3815
#, gcc-internal-format
msgid "expected declaration specifiers or %<...%>"
msgstr ""
-#: c/c-parser.c:3872
+#: c/c-parser.c:3870
#, gcc-internal-format
msgid "wide string literal in %<asm%>"
msgstr ""
-#: c/c-parser.c:4344
+#: c/c-parser.c:4346
#, gcc-internal-format
msgid "ISO C forbids empty initializer braces"
msgstr ""
-#: c/c-parser.c:4399
+#: c/c-parser.c:4401
#, gcc-internal-format
msgid "obsolete use of designated initializer with %<:%>"
msgstr ""
-#: c/c-parser.c:4543
+#: c/c-parser.c:4545
#, gcc-internal-format
msgid "ISO C forbids specifying range of elements to initialize"
msgstr ""
-#: c/c-parser.c:4555
+#: c/c-parser.c:4557
#, gcc-internal-format
msgid "ISO C90 forbids specifying subobject to initialize"
msgstr ""
-#: c/c-parser.c:4563
+#: c/c-parser.c:4565
#, gcc-internal-format
msgid "obsolete use of designated initializer without %<=%>"
msgstr ""
-#: c/c-parser.c:4745
+#: c/c-parser.c:4748
#, gcc-internal-format
msgid "ISO C forbids label declarations"
msgstr ""
-#: c/c-parser.c:4751 c/c-parser.c:4829
+#: c/c-parser.c:4754 c/c-parser.c:4832
#, gcc-internal-format
msgid "expected declaration or statement"
msgstr ""
-#: c/c-parser.c:4781 c/c-parser.c:4809
+#: c/c-parser.c:4784 c/c-parser.c:4812
#, gcc-internal-format
msgid "ISO C90 forbids mixed declarations and code"
msgstr ""
-#: c/c-parser.c:4837
+#: c/c-parser.c:4840
#, gcc-internal-format
msgid "expected %<}%> before %<else%>"
msgstr ""
-#: c/c-parser.c:4842 cp/parser.c:10795
+#: c/c-parser.c:4845 cp/parser.c:10801
#, gcc-internal-format
msgid "%<else%> without a previous %<if%>"
msgstr ""
-#: c/c-parser.c:4859
+#: c/c-parser.c:4862
#, gcc-internal-format
msgid "label at end of compound statement"
msgstr ""
-#: c/c-parser.c:4916
+#: c/c-parser.c:4919
#, gcc-internal-format
msgid "expected %<:%> or %<...%>"
msgstr ""
-#: c/c-parser.c:4947
+#: c/c-parser.c:4950
#, 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:5141 cp/parser.c:10396
+#: c/c-parser.c:5144 cp/parser.c:10402
#, gcc-internal-format
msgid "-fcilkplus must be enabled to use %<_Cilk_for%>"
msgstr ""
-#: c/c-parser.c:5151 cp/parser.c:10422
+#: c/c-parser.c:5154 cp/parser.c:10428
#, gcc-internal-format
msgid "-fcilkplus must be enabled to use %<_Cilk_sync%>"
msgstr ""
-#: c/c-parser.c:5178
+#: c/c-parser.c:5181
#, gcc-internal-format
msgid "expected identifier or %<*%>"
msgstr ""
@@ -33010,1124 +33109,1124 @@ 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:5261 cp/parser.c:10500
+#: c/c-parser.c:5264 cp/parser.c:10506
#, gcc-internal-format
msgid "expected statement"
msgstr ""
-#: c/c-parser.c:5358 cp/parser.c:11887
+#: c/c-parser.c:5361 cp/parser.c:11907
#, gcc-internal-format
msgid "suggest braces around empty body in an %<if%> statement"
msgstr ""
-#: c/c-parser.c:5392 cp/parser.c:11890
+#: c/c-parser.c:5395 cp/parser.c:11910
#, gcc-internal-format
msgid "suggest braces around empty body in an %<else%> statement"
msgstr ""
-#: c/c-parser.c:5434
+#: c/c-parser.c:5437
#, gcc-internal-format
msgid "if statement cannot contain %<Cilk_spawn%>"
msgstr ""
-#: c/c-parser.c:5608
+#: c/c-parser.c:5611
#, gcc-internal-format
msgid "suggest braces around empty body in %<do%> statement"
msgstr ""
-#: c/c-parser.c:5734 c/c-parser.c:5764
+#: c/c-parser.c:5737 c/c-parser.c:5767
#, gcc-internal-format
msgid "multiple iterating variables in fast enumeration"
msgstr ""
-#: c/c-parser.c:5788
+#: c/c-parser.c:5791
#, gcc-internal-format
msgid "invalid iterating variable in fast enumeration"
msgstr ""
-#: c/c-parser.c:5809 cp/parser.c:11150
+#: c/c-parser.c:5812 cp/parser.c:11156
#, gcc-internal-format
msgid "missing loop condition in loop with %<GCC ivdep%> pragma"
msgstr ""
-#: c/c-parser.c:5841
+#: c/c-parser.c:5844
#, gcc-internal-format
msgid "missing collection in fast enumeration"
msgstr ""
-#: c/c-parser.c:5941
+#: c/c-parser.c:5961
#, gcc-internal-format
msgid "%E qualifier ignored on asm"
msgstr ""
-#: c/c-parser.c:6296
+#: c/c-parser.c:6316
#, gcc-internal-format
msgid "ISO C forbids omitting the middle term of a ?: expression"
msgstr ""
-#: c/c-parser.c:6796
+#: c/c-parser.c:6816
#, gcc-internal-format
msgid "traditional C rejects the unary plus operator"
msgstr ""
-#: c/c-parser.c:6937
+#: c/c-parser.c:6957
#, gcc-internal-format
msgid "%<sizeof%> applied to a bit-field"
msgstr ""
-#: c/c-parser.c:7023
+#: c/c-parser.c:7043
#, gcc-internal-format
msgid "ISO C does not allow %<%E (expression)%>"
msgstr ""
-#: c/c-parser.c:7054
+#: c/c-parser.c:7074
#, gcc-internal-format
msgid "cannot take address of %qs"
msgstr ""
-#: c/c-parser.c:7138
+#: c/c-parser.c:7158
#, gcc-internal-format
msgid "ISO C99 does not support %<_Generic%>"
msgstr ""
-#: c/c-parser.c:7141
+#: c/c-parser.c:7161
#, gcc-internal-format
msgid "ISO C90 does not support %<_Generic%>"
msgstr ""
-#: c/c-parser.c:7207
+#: c/c-parser.c:7227
#, gcc-internal-format
msgid "%<_Generic%> association has function type"
msgstr ""
-#: c/c-parser.c:7210
+#: c/c-parser.c:7230
#, gcc-internal-format
msgid "%<_Generic%> association has incomplete type"
msgstr ""
-#: c/c-parser.c:7214
+#: c/c-parser.c:7234
#, gcc-internal-format
msgid "%<_Generic%> association has variable length type"
msgstr ""
-#: c/c-parser.c:7238
+#: c/c-parser.c:7258
#, gcc-internal-format
msgid "duplicate %<default%> case in %<_Generic%>"
msgstr ""
-#: c/c-parser.c:7239
+#: c/c-parser.c:7259
#, gcc-internal-format
msgid "original %<default%> is here"
msgstr ""
-#: c/c-parser.c:7247
+#: c/c-parser.c:7267
#, gcc-internal-format
msgid "%<_Generic%> specifies two compatible types"
msgstr ""
-#: c/c-parser.c:7248
+#: c/c-parser.c:7268
#, gcc-internal-format
msgid "compatible type is here"
msgstr ""
-#: c/c-parser.c:7271
+#: c/c-parser.c:7291
#, gcc-internal-format
msgid "%<_Generic> selector matches multiple associations"
msgstr ""
-#: c/c-parser.c:7273
+#: c/c-parser.c:7293
#, gcc-internal-format
msgid "other match is here"
msgstr ""
-#: c/c-parser.c:7294
+#: c/c-parser.c:7314
#, gcc-internal-format
msgid ""
"%<_Generic%> selector of type %qT is not compatible with any association"
msgstr ""
-#: c/c-parser.c:7458 c/c-parser.c:8026 c/c-parser.c:8047
+#: c/c-parser.c:7478 c/c-parser.c:8048 c/c-parser.c:8069
#, gcc-internal-format
msgid "expected expression"
msgstr ""
-#: c/c-parser.c:7476
+#: c/c-parser.c:7496
#, gcc-internal-format
msgid "braced-group within expression allowed only inside a function"
msgstr ""
-#: c/c-parser.c:7490
+#: c/c-parser.c:7510
#, gcc-internal-format
msgid "ISO C forbids braced-groups within expressions"
msgstr ""
-#: c/c-parser.c:7538
+#: c/c-parser.c:7558
#, gcc-internal-format
msgid "ISO C does not support %<__FUNCTION__%> predefined identifier"
msgstr ""
-#: c/c-parser.c:7547
+#: c/c-parser.c:7567
#, gcc-internal-format
msgid "ISO C does not support %<__PRETTY_FUNCTION__%> predefined identifier"
msgstr ""
-#: c/c-parser.c:7556
+#: c/c-parser.c:7576
#, gcc-internal-format
msgid "ISO C90 does not support %<__func__%> predefined identifier"
msgstr ""
-#: c/c-parser.c:7717
+#: c/c-parser.c:7737
#, gcc-internal-format
msgid "wrong number of arguments to %<__builtin_choose_expr%>"
msgstr ""
-#: c/c-parser.c:7733
+#: c/c-parser.c:7753
#, gcc-internal-format
msgid "first argument to %<__builtin_choose_expr%> not a constant"
msgstr ""
-#: c/c-parser.c:7802
+#: c/c-parser.c:7824
#, gcc-internal-format
msgid "wrong number of arguments to %<__builtin_call_with_static_chain%>"
msgstr ""
-#: c/c-parser.c:7815
+#: c/c-parser.c:7837
#, gcc-internal-format
msgid ""
"first argument to %<__builtin_call_with_static_chain%> must be a call "
"expression"
msgstr ""
-#: c/c-parser.c:7819
+#: c/c-parser.c:7841
#, gcc-internal-format
msgid ""
"second argument to %<__builtin_call_with_static_chain%> must be a pointer "
"type"
msgstr ""
-#: c/c-parser.c:7845
+#: c/c-parser.c:7867
#, gcc-internal-format
msgid "wrong number of arguments to %<__builtin_complex%>"
msgstr ""
-#: c/c-parser.c:7867
+#: c/c-parser.c:7889
#, gcc-internal-format
msgid "%<__builtin_complex%> operand not of real binary floating-point type"
msgstr ""
-#: c/c-parser.c:7876
+#: c/c-parser.c:7898
#, gcc-internal-format
msgid "%<__builtin_complex%> operands of different types"
msgstr ""
-#: c/c-parser.c:7924 cp/parser.c:6588
+#: c/c-parser.c:7946 cp/parser.c:6590
#, gcc-internal-format
msgid "wrong number of arguments to %<__builtin_shuffle%>"
msgstr ""
-#: c/c-parser.c:8005 cp/parser.c:6533
+#: c/c-parser.c:8027 cp/parser.c:6535
#, gcc-internal-format
msgid "-fcilkplus must be enabled to use %<_Cilk_spawn%>"
msgstr ""
-#: c/c-parser.c:8012 cp/parser.c:6539
+#: c/c-parser.c:8034 cp/parser.c:6541
#, gcc-internal-format
msgid "consecutive %<_Cilk_spawn%> keywords are not permitted"
msgstr ""
-#: c/c-parser.c:8083
+#: c/c-parser.c:8105
#, gcc-internal-format
msgid "compound literal has variable size"
msgstr ""
-#: c/c-parser.c:8094
+#: c/c-parser.c:8116
#, gcc-internal-format
msgid "compound literal qualified by address-space qualifier"
msgstr ""
-#: c/c-parser.c:8098
+#: c/c-parser.c:8120
#, gcc-internal-format
msgid "ISO C90 forbids compound literals"
msgstr ""
-#: c/c-parser.c:8233 cp/parser.c:6841
+#: c/c-parser.c:8255 cp/parser.c:6843
#, gcc-internal-format
msgid ""
"%<memset%> used with constant zero length parameter; this could be due to "
"transposed parameters"
msgstr ""
-#: c/c-parser.c:8596
+#: c/c-parser.c:8618
#, gcc-internal-format
msgid "expected identifier or %<)%>"
msgstr ""
-#: c/c-parser.c:8692
+#: c/c-parser.c:8714
#, gcc-internal-format
msgid "extra semicolon"
msgstr ""
-#: c/c-parser.c:8940
+#: c/c-parser.c:8962
#, gcc-internal-format
msgid "extra semicolon in method definition specified"
msgstr ""
-#: c/c-parser.c:9072
+#: c/c-parser.c:9094
#, gcc-internal-format
msgid "method attributes must be specified at the end only"
msgstr ""
-#: c/c-parser.c:9092
+#: c/c-parser.c:9114
#, gcc-internal-format
msgid "expected %<;%> or %<{%> after method attribute definition"
msgstr ""
-#: c/c-parser.c:9213
+#: c/c-parser.c:9235
#, gcc-internal-format
msgid "objective-c method declaration is expected"
msgstr ""
-#: c/c-parser.c:9648
+#: c/c-parser.c:9670
#, gcc-internal-format
msgid "no type or storage class may be specified here,"
msgstr ""
-#: c/c-parser.c:9738 c/c-parser.c:9795 cp/parser.c:29396
+#: c/c-parser.c:9760 c/c-parser.c:9817 cp/parser.c:29460
#, gcc-internal-format
msgid "unknown property attribute"
msgstr ""
-#: c/c-parser.c:9759 cp/parser.c:29356
+#: c/c-parser.c:9781 cp/parser.c:29420
#, gcc-internal-format
msgid "missing %<=%> (after %<getter%> attribute)"
msgstr ""
-#: c/c-parser.c:9762 cp/parser.c:29359
+#: c/c-parser.c:9784 cp/parser.c:29423
#, gcc-internal-format
msgid "missing %<=%> (after %<setter%> attribute)"
msgstr ""
-#: c/c-parser.c:9776 cp/parser.c:29374
+#: c/c-parser.c:9798 cp/parser.c:29438
#, gcc-internal-format
msgid "the %<setter%> attribute may only be specified once"
msgstr ""
-#: c/c-parser.c:9781 cp/parser.c:29380
+#: c/c-parser.c:9803 cp/parser.c:29444
#, gcc-internal-format
msgid "setter name must terminate with %<:%>"
msgstr ""
-#: c/c-parser.c:9788 cp/parser.c:29388
+#: c/c-parser.c:9810 cp/parser.c:29452
#, gcc-internal-format
msgid "the %<getter%> attribute may only be specified once"
msgstr ""
-#: c/c-parser.c:9990
+#: c/c-parser.c:10012
#, gcc-internal-format
msgid "%<#pragma acc update%> may only be used in compound statements"
msgstr ""
-#: c/c-parser.c:10001 cp/parser.c:37088
+#: c/c-parser.c:10023 cp/parser.c:37139
#, gcc-internal-format
msgid "%<#pragma omp barrier%> may only be used in compound statements"
msgstr ""
-#: c/c-parser.c:10012 cp/parser.c:37103
+#: c/c-parser.c:10034 cp/parser.c:37154
#, gcc-internal-format
msgid "%<#pragma omp flush%> may only be used in compound statements"
msgstr ""
-#: c/c-parser.c:10023 cp/parser.c:37119
+#: c/c-parser.c:10045 cp/parser.c:37170
#, gcc-internal-format
msgid "%<#pragma omp taskwait%> may only be used in compound statements"
msgstr ""
-#: c/c-parser.c:10034 cp/parser.c:37135
+#: c/c-parser.c:10056 cp/parser.c:37186
#, gcc-internal-format
msgid "%<#pragma omp taskyield%> may only be used in compound statements"
msgstr ""
-#: c/c-parser.c:10045 cp/parser.c:37151
+#: c/c-parser.c:10067 cp/parser.c:37202
#, gcc-internal-format
msgid "%<#pragma omp cancel%> may only be used in compound statements"
msgstr ""
-#: c/c-parser.c:10056 cp/parser.c:37167
+#: c/c-parser.c:10078 cp/parser.c:37218
#, gcc-internal-format
msgid ""
"%<#pragma omp cancellation point%> may only be used in compound statements"
msgstr ""
-#: c/c-parser.c:10076 cp/parser.c:37240
+#: c/c-parser.c:10098 cp/parser.c:37291
#, gcc-internal-format
msgid ""
"%<#pragma omp section%> may only be used in %<#pragma omp sections%> "
"construct"
msgstr ""
-#: c/c-parser.c:10095 cp/parser.c:37259
+#: c/c-parser.c:10117 cp/parser.c:37310
#, gcc-internal-format
msgid "for, while or do statement expected"
msgstr ""
-#: c/c-parser.c:10107 cp/parser.c:37078
+#: c/c-parser.c:10129 cp/parser.c:37129
#, gcc-internal-format
msgid "%<#pragma GCC pch_preprocess%> must be first"
msgstr ""
-#: c/c-parser.c:10120
+#: c/c-parser.c:10142
#, gcc-internal-format
msgid "%<#pragma grainsize%> ignored because -fcilkplus is not enabled"
msgstr ""
-#: c/c-parser.c:10128
+#: c/c-parser.c:10150
#, gcc-internal-format
msgid "%<#pragma grainsize%> must be inside a function"
msgstr ""
-#: c/c-parser.c:10439 cp/parser.c:29786
+#: c/c-parser.c:10461 cp/parser.c:29850
#, gcc-internal-format
msgid "too many %qs clauses"
msgstr ""
-#: c/c-parser.c:10460 cp/parser.c:30345
+#: c/c-parser.c:10482 cp/parser.c:30395
#, gcc-internal-format
msgid "expected integer expression before ')'"
msgstr ""
-#: c/c-parser.c:10475
+#: c/c-parser.c:10497
#, gcc-internal-format
msgid "expression must be integral"
msgstr ""
-#: c/c-parser.c:10604 c/c-parser.c:10612 cp/parser.c:29914 cp/parser.c:29922
+#: c/c-parser.c:10626 c/c-parser.c:10634 cp/parser.c:29978 cp/parser.c:29986
#, gcc-internal-format
msgid "%qD is not a constant"
msgstr ""
-#: c/c-parser.c:10764 c/c-parser.c:17144 cp/parser.c:30091
+#: c/c-parser.c:10786 c/c-parser.c:17166
#, gcc-internal-format
msgid "%qD is not a variable"
msgstr ""
-#: c/c-parser.c:10768 cp/parser.c:30095
+#: c/c-parser.c:10790 cp/semantics.c:6709
#, gcc-internal-format
msgid "%qD is not a pointer variable"
msgstr ""
-#: c/c-parser.c:10808 cp/parser.c:30423
+#: c/c-parser.c:10830 cp/parser.c:30473
#, gcc-internal-format
msgid "collapse argument needs positive constant integer expression"
msgstr ""
-#: c/c-parser.c:10878 cp/parser.c:30479
+#: c/c-parser.c:10900 cp/parser.c:30529
#, gcc-internal-format
msgid "expected %<none%>"
msgstr ""
-#: c/c-parser.c:10880 cp/parser.c:30481
+#: c/c-parser.c:10902 cp/parser.c:30531
#, gcc-internal-format
msgid "expected %<none%> or %<shared%>"
msgstr ""
-#: c/c-parser.c:10980 cp/parser.c:30581
+#: c/c-parser.c:11002 cp/parser.c:30631
#, gcc-internal-format
msgid "expected %<data%>, %<update%>, %<enter%> or %<exit%>"
msgstr ""
-#: c/c-parser.c:11000 c/c-parser.c:15839 c/c-parser.c:15924 cp/parser.c:30599
-#: cp/parser.c:34579 cp/parser.c:34667
+#: c/c-parser.c:11022 c/c-parser.c:15861 c/c-parser.c:15946 cp/parser.c:30649
+#: cp/parser.c:34629 cp/parser.c:34717
#, gcc-internal-format
msgid "expected %<data%>"
msgstr ""
-#: c/c-parser.c:11047 cp/parser.c:30652
+#: c/c-parser.c:11069 cp/parser.c:30702
#, gcc-internal-format
msgid "too many %<if%> clauses with %qs modifier"
msgstr ""
-#: c/c-parser.c:11054 cp/parser.c:30659
+#: c/c-parser.c:11076 cp/parser.c:30709
#, gcc-internal-format
msgid "too many %<if%> clauses"
msgstr ""
-#: c/c-parser.c:11056 cp/parser.c:30661
+#: c/c-parser.c:11078 cp/parser.c:30711
#, gcc-internal-format
msgid "too many %<if%> clauses without modifier"
msgstr ""
-#: c/c-parser.c:11062 cp/parser.c:30667
+#: c/c-parser.c:11084 cp/parser.c:30717
#, gcc-internal-format
msgid ""
"if any %<if%> clause has modifier, then all %<if%> clauses have to use "
"modifier"
msgstr ""
-#: c/c-parser.c:11136 c/c-parser.c:11180 c/c-parser.c:11224 c/c-parser.c:11268
-#: c/c-parser.c:11312 c/c-parser.c:11356 c/c-parser.c:11460 c/c-parser.c:11586
-#: c/c-parser.c:11667 c/c-parser.c:12065 c/c-parser.c:12132 c/c-parser.c:12235
-#: c/c-parser.c:12278 c/c-parser.c:12787
+#: c/c-parser.c:11158 c/c-parser.c:11202 c/c-parser.c:11246 c/c-parser.c:11290
+#: c/c-parser.c:11334 c/c-parser.c:11378 c/c-parser.c:11482 c/c-parser.c:11608
+#: c/c-parser.c:11689 c/c-parser.c:12087 c/c-parser.c:12154 c/c-parser.c:12257
+#: c/c-parser.c:12300 c/c-parser.c:12809
#, gcc-internal-format
msgid "expected integer expression"
msgstr ""
-#: c/c-parser.c:11147
+#: c/c-parser.c:11169
#, gcc-internal-format
msgid "%<num_gangs%> value must be positive"
msgstr ""
-#: c/c-parser.c:11191
+#: c/c-parser.c:11213
#, gcc-internal-format
msgid "%<num_threads%> value must be positive"
msgstr ""
-#: c/c-parser.c:11235
+#: c/c-parser.c:11257
#, gcc-internal-format
msgid "%<num_tasks%> value must be positive"
msgstr ""
-#: c/c-parser.c:11279 cp/semantics.c:6828
+#: c/c-parser.c:11301 cp/semantics.c:6885
#, gcc-internal-format
msgid "%<grainsize%> value must be positive"
msgstr ""
-#: c/c-parser.c:11324 cp/semantics.c:6857
+#: c/c-parser.c:11346 cp/semantics.c:6914
#, gcc-internal-format
msgid "%<priority%> value must be non-negative"
msgstr ""
-#: c/c-parser.c:11385 c/c-parser.c:11391 cp/parser.c:30878 cp/parser.c:30885
+#: c/c-parser.c:11407 c/c-parser.c:11413 cp/parser.c:30928 cp/parser.c:30935
#, gcc-internal-format
msgid "expected %<tofrom%>"
msgstr ""
-#: c/c-parser.c:11399 c/c-parser.c:11405 cp/parser.c:30894 cp/parser.c:30901
+#: c/c-parser.c:11421 c/c-parser.c:11427 cp/parser.c:30944 cp/parser.c:30951
#, gcc-internal-format
msgid "expected %<scalar%>"
msgstr ""
-#: c/c-parser.c:11471
+#: c/c-parser.c:11493
#, gcc-internal-format
msgid "%<num_workers%> value must be positive"
msgstr ""
-#: c/c-parser.c:11535 cp/parser.c:30207
+#: c/c-parser.c:11557 cp/parser.c:30257
#, gcc-internal-format
msgid "too many %<static%> arguments"
msgstr ""
-#: c/c-parser.c:11569 cp/parser.c:30240
+#: c/c-parser.c:11591 cp/parser.c:30290
#, gcc-internal-format
msgid "unexpected argument"
msgstr ""
-#: c/c-parser.c:11595
+#: c/c-parser.c:11617
#, gcc-internal-format
msgid "%<%s%> value must be positive"
msgstr ""
-#: c/c-parser.c:11724 cp/semantics.c:6941
+#: c/c-parser.c:11746 cp/semantics.c:6998
#, gcc-internal-format
msgid "%<tile%> value must be integral"
msgstr ""
-#: c/c-parser.c:11737 cp/semantics.c:6955
+#: c/c-parser.c:11759 cp/semantics.c:7012
#, gcc-internal-format
msgid "%<tile%> value must be positive"
msgstr ""
-#: c/c-parser.c:11803 cp/parser.c:30958
+#: c/c-parser.c:11825 cp/parser.c:31008
#, gcc-internal-format
msgid "ordered argument needs positive constant integer expression"
msgstr ""
-#: c/c-parser.c:11894
+#: c/c-parser.c:11916
#, gcc-internal-format
msgid ""
"expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%>, %<min%> "
"or %<max%>"
msgstr ""
-#: c/c-parser.c:12003 cp/parser.c:31171
+#: c/c-parser.c:12025 cp/parser.c:31221
#, gcc-internal-format
msgid "both %<monotonic%> and %<nonmonotonic%> modifiers specified"
msgstr ""
-#: c/c-parser.c:12056 cp/parser.c:31187
+#: c/c-parser.c:12078 cp/parser.c:31237
#, gcc-internal-format
msgid "schedule %<runtime%> does not take a %<chunk_size%> parameter"
msgstr ""
-#: c/c-parser.c:12060 cp/parser.c:31190
+#: c/c-parser.c:12082 cp/parser.c:31240
#, gcc-internal-format
msgid "schedule %<auto%> does not take a %<chunk_size%> parameter"
msgstr ""
-#: c/c-parser.c:12082 cp/parser.c:31210
+#: c/c-parser.c:12104 cp/parser.c:31260
#, gcc-internal-format
msgid "invalid schedule kind"
msgstr ""
-#: c/c-parser.c:12143
+#: c/c-parser.c:12165
#, gcc-internal-format
msgid "%<vector_length%> value must be positive"
msgstr ""
-#: c/c-parser.c:12245
+#: c/c-parser.c:12267
#, gcc-internal-format
msgid "%<num_teams%> value must be positive"
msgstr ""
-#: c/c-parser.c:12288 cp/semantics.c:6340
+#: c/c-parser.c:12310 cp/semantics.c:6389
#, gcc-internal-format
msgid "%<thread_limit%> value must be positive"
msgstr ""
-#: c/c-parser.c:12330 cp/semantics.c:6450
+#: c/c-parser.c:12352 cp/semantics.c:6499
#, gcc-internal-format
msgid ""
"%<aligned%> clause alignment expression must be positive constant integer "
"expression"
msgstr ""
-#: c/c-parser.c:12391 cp/parser.c:31468
+#: c/c-parser.c:12413 cp/parser.c:31518
#, gcc-internal-format
msgid "using parameters for %<linear%> step is not supported yet"
msgstr ""
-#: c/c-parser.c:12396
+#: c/c-parser.c:12418
#, gcc-internal-format
msgid "%<linear%> clause step expression must be integral"
msgstr ""
-#: c/c-parser.c:12434
+#: c/c-parser.c:12456
#, gcc-internal-format
msgid ""
"%<safelen%> clause expression must be positive constant integer expression"
msgstr ""
-#: c/c-parser.c:12470
+#: c/c-parser.c:12492
#, gcc-internal-format
msgid ""
"%<simdlen%> clause expression must be positive constant integer expression"
msgstr ""
-#: c/c-parser.c:12639 cp/parser.c:31704 cp/parser.c:31927
+#: c/c-parser.c:12661 cp/parser.c:31754 cp/parser.c:31977
#, gcc-internal-format
msgid "invalid depend kind"
msgstr ""
-#: c/c-parser.c:12723 cp/parser.c:31777
+#: c/c-parser.c:12745 cp/parser.c:31827
#, gcc-internal-format
msgid "invalid map kind"
msgstr ""
-#: c/c-parser.c:12817 cp/parser.c:31874
+#: c/c-parser.c:12839 cp/parser.c:31924
#, gcc-internal-format
msgid "invalid dist_schedule kind"
msgstr ""
-#: c/c-parser.c:12886
+#: c/c-parser.c:12908
#, gcc-internal-format
msgid "invalid proc_bind kind"
msgstr ""
-#: c/c-parser.c:13099 cp/parser.c:32152
+#: c/c-parser.c:13121 cp/parser.c:32202
#, gcc-internal-format
msgid "expected %<#pragma acc%> clause"
msgstr ""
-#: c/c-parser.c:13110 c/c-parser.c:13393 cp/parser.c:32163 cp/parser.c:32479
+#: c/c-parser.c:13132 c/c-parser.c:13415 cp/parser.c:32213 cp/parser.c:32529
#, gcc-internal-format
msgid "%qs is not valid for %qs"
msgstr ""
-#: c/c-parser.c:13256 cp/parser.c:32339
+#: c/c-parser.c:13278 cp/parser.c:32389
#, gcc-internal-format
msgid "%qs must be the first clause of %qs"
msgstr ""
-#: c/c-parser.c:13382 cp/parser.c:32468
+#: c/c-parser.c:13404 cp/parser.c:32518
#, gcc-internal-format
msgid "expected %<#pragma omp%> clause"
msgstr ""
-#: c/c-parser.c:13520 cp/parser.c:35090
+#: c/c-parser.c:13542 cp/parser.c:35140
#, gcc-internal-format
msgid "no valid clauses specified in %<#pragma acc declare%>"
msgstr ""
-#: c/c-parser.c:13530 cp/parser.c:35100
+#: c/c-parser.c:13552 cp/parser.c:35150
#, gcc-internal-format
msgid "array section in %<#pragma acc declare%>"
msgstr ""
-#: c/c-parser.c:13554 cp/parser.c:35124
+#: c/c-parser.c:13576 cp/parser.c:35174
#, gcc-internal-format
msgid "%qD must be a global variable in%<#pragma acc declare link%>"
msgstr ""
-#: c/c-parser.c:13565 cp/parser.c:35135
+#: c/c-parser.c:13587 cp/parser.c:35185
#, gcc-internal-format
msgid "invalid OpenACC clause at file scope"
msgstr ""
-#: c/c-parser.c:13572 cp/parser.c:35142
+#: c/c-parser.c:13594 cp/parser.c:35192
#, gcc-internal-format
msgid "invalid use of %<extern%> variable %qD in %<#pragma acc declare%>"
msgstr ""
-#: c/c-parser.c:13580 cp/parser.c:35150
+#: c/c-parser.c:13602 cp/parser.c:35200
#, gcc-internal-format
msgid "invalid use of %<global%> variable %qD in %<#pragma acc declare%>"
msgstr ""
-#: c/c-parser.c:13592 cp/parser.c:35162
+#: c/c-parser.c:13614 cp/parser.c:35212
#, gcc-internal-format
msgid "variable %qD used more than once with %<#pragma acc declare%>"
msgstr ""
-#: c/c-parser.c:13678 cp/parser.c:35245
+#: c/c-parser.c:13700 cp/parser.c:35295
#, gcc-internal-format
msgid "expected %<data%> in %<#pragma acc enter data%>"
msgstr ""
-#: c/c-parser.c:13687 cp/parser.c:35255
+#: c/c-parser.c:13709 cp/parser.c:35305
#, gcc-internal-format
msgid "invalid pragma"
msgstr ""
-#: c/c-parser.c:13704 cp/parser.c:35272
+#: c/c-parser.c:13726 cp/parser.c:35322
#, gcc-internal-format
msgid "%<#pragma acc enter data%> has no data movement clause"
msgstr ""
-#: c/c-parser.c:13906 cp/parser.c:36352
+#: c/c-parser.c:13928 cp/parser.c:36403
#, gcc-internal-format
msgid "%<#pragma acc routine%> not at file scope"
msgstr ""
-#: c/c-parser.c:13923 cp/parser.c:2829
+#: c/c-parser.c:13945 cp/parser.c:2829
#, gcc-internal-format
msgid "%qE has not been declared"
msgstr ""
-#: c/c-parser.c:13929
+#: c/c-parser.c:13951
#, gcc-internal-format
msgid "expected function name"
msgstr ""
-#: c/c-parser.c:13968
+#: c/c-parser.c:13990
#, gcc-internal-format
msgid "%<#pragma acc routine%> %s"
msgstr ""
-#: c/c-parser.c:13975 cp/parser.c:36565
+#: c/c-parser.c:13997 cp/parser.c:36616
#, gcc-internal-format
msgid "%<#pragma acc routine%> already applied to %D"
msgstr ""
-#: c/c-parser.c:13978 cp/parser.c:36572
+#: c/c-parser.c:14000 cp/parser.c:36623
#, gcc-internal-format
msgid "%<#pragma acc routine%> must be applied before %s"
msgstr ""
-#: c/c-parser.c:14015 cp/parser.c:35445
+#: c/c-parser.c:14037 cp/parser.c:35495
#, gcc-internal-format
msgid ""
"%<#pragma acc update%> must contain at least one %<device%> or %<host%> or "
"%<self%> clause"
msgstr ""
-#: c/c-parser.c:14423 cp/parser.c:32850 cp/parser.c:32876
+#: c/c-parser.c:14445 cp/parser.c:32900 cp/parser.c:32926
#, gcc-internal-format
msgid "invalid form of %<#pragma omp atomic%>"
msgstr ""
-#: c/c-parser.c:14427 cp/parser.c:32907 cp/parser.c:32923
+#: c/c-parser.c:14449 cp/parser.c:32957 cp/parser.c:32973
#, gcc-internal-format
msgid "invalid operator for %<#pragma omp atomic%>"
msgstr ""
-#: c/c-parser.c:14476 cp/semantics.c:8342 cp/semantics.c:8352
+#: c/c-parser.c:14498 cp/semantics.c:8399 cp/semantics.c:8409
#, gcc-internal-format
msgid ""
"%<#pragma omp atomic capture%> uses two different expressions for memory"
msgstr ""
-#: c/c-parser.c:14541 c/c-parser.c:14563
+#: c/c-parser.c:14563 c/c-parser.c:14585
#, gcc-internal-format
msgid "expected %<(%> or end of line"
msgstr ""
-#: c/c-parser.c:14601 cp/parser.c:33421
+#: c/c-parser.c:14623 cp/parser.c:33471
#, gcc-internal-format
msgid "%<ordered%> clause parameter is less than %<collapse%>"
msgstr ""
-#: c/c-parser.c:14612 cp/parser.c:33432
+#: c/c-parser.c:14634 cp/parser.c:33482
#, gcc-internal-format
msgid ""
"%<linear%> clause may not be specified together with %<ordered%> clause with "
"a parameter"
msgstr ""
-#: c/c-parser.c:14631 cp/parser.c:33459 cp/parser.c:37626
+#: c/c-parser.c:14653 cp/parser.c:33509 cp/parser.c:37677
#, gcc-internal-format
msgid "for statement expected"
msgstr ""
-#: c/c-parser.c:14637 cp/parser.c:33465
+#: c/c-parser.c:14659 cp/parser.c:33515
#, gcc-internal-format
msgid "_Cilk_for statement expected"
msgstr ""
-#: c/c-parser.c:14706 cp/semantics.c:7892 cp/semantics.c:7979
+#: c/c-parser.c:14728 cp/semantics.c:7949 cp/semantics.c:8036
#, gcc-internal-format
msgid "expected iteration declaration or initialization"
msgstr ""
-#: c/c-parser.c:14791
+#: c/c-parser.c:14813
#, gcc-internal-format
msgid "not enough perfectly nested loops"
msgstr ""
-#: c/c-parser.c:14847 cp/parser.c:33689
+#: c/c-parser.c:14869 cp/parser.c:33739
#, gcc-internal-format
msgid "collapsed loops not perfectly nested"
msgstr ""
-#: c/c-parser.c:14894 cp/parser.c:33508 cp/parser.c:33550 cp/pt.c:14869
+#: c/c-parser.c:14916 cp/parser.c:33558 cp/parser.c:33600 cp/pt.c:14952
#, gcc-internal-format
msgid "iteration variable %qD should not be firstprivate"
msgstr ""
-#: c/c-parser.c:14984 cp/parser.c:33755
+#: c/c-parser.c:15006 cp/parser.c:33805
#, gcc-internal-format
msgid "%<ordered%> clause with parameter may not be specified on %qs construct"
msgstr ""
-#: c/c-parser.c:15139
+#: c/c-parser.c:15161
#, gcc-internal-format
msgid ""
"%<#pragma omp ordered%> with %<depend> clause may only be used in compound "
"statements"
msgstr ""
-#: c/c-parser.c:15341 cp/parser.c:34107
+#: c/c-parser.c:15363 cp/parser.c:34157
#, gcc-internal-format
msgid "expected %<for%> after %qs"
msgstr ""
-#: c/c-parser.c:15539 cp/parser.c:34300
+#: c/c-parser.c:15561 cp/parser.c:34350
#, gcc-internal-format
msgid "expected %<point%>"
msgstr ""
-#: c/c-parser.c:15739 cp/parser.c:34521
+#: c/c-parser.c:15761 cp/parser.c:34571
#, 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:15752 cp/parser.c:34534
+#: c/c-parser.c:15774 cp/parser.c:34584
#, gcc-internal-format
msgid "%<#pragma omp target data%> must contain at least one %<map%> clause"
msgstr ""
-#: c/c-parser.c:15787 cp/parser.c:34746
+#: c/c-parser.c:15809 cp/parser.c:34796
#, gcc-internal-format
msgid "%<#pragma omp target update%> may only be used in compound statements"
msgstr ""
-#: c/c-parser.c:15800 cp/parser.c:34759
+#: c/c-parser.c:15822 cp/parser.c:34809
#, gcc-internal-format
msgid ""
"%<#pragma omp target update%> must contain at least one %<from%> or %<to%> "
"clauses"
msgstr ""
-#: c/c-parser.c:15847 cp/parser.c:34587
+#: c/c-parser.c:15869 cp/parser.c:34637
#, gcc-internal-format
msgid ""
"%<#pragma omp target enter data%> may only be used in compound statements"
msgstr ""
-#: c/c-parser.c:15873 cp/parser.c:34614
+#: c/c-parser.c:15895 cp/parser.c:34664
#, 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:15885 cp/parser.c:34626
+#: c/c-parser.c:15907 cp/parser.c:34676
#, gcc-internal-format
msgid ""
"%<#pragma omp target enter data%> must contain at least one %<map%> clause"
msgstr ""
-#: c/c-parser.c:15932 cp/parser.c:34675
+#: c/c-parser.c:15954 cp/parser.c:34725
#, gcc-internal-format
msgid ""
"%<#pragma omp target exit data%> may only be used in compound statements"
msgstr ""
-#: c/c-parser.c:15960
+#: c/c-parser.c:15982
#, 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:15973 cp/parser.c:34716
+#: c/c-parser.c:15995 cp/parser.c:34766
#, gcc-internal-format
msgid ""
"%<#pragma omp target exit data%> must contain at least one %<map%> clause"
msgstr ""
-#: c/c-parser.c:16179 cp/parser.c:34967
+#: c/c-parser.c:16201 cp/parser.c:35017
#, 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:16230
+#: c/c-parser.c:16252
#, 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:16281 c/c-parser.c:16309
+#: c/c-parser.c:16303 c/c-parser.c:16331
#, gcc-internal-format
msgid ""
"%<#pragma omp declare simd%> must be followed by function declaration or "
"definition"
msgstr ""
-#: c/c-parser.c:16330
+#: c/c-parser.c:16352
#, 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:16344
+#: c/c-parser.c:16366
#, gcc-internal-format
msgid ""
"%<#pragma omp declare simd%> not immediately followed by a function "
"declaration or definition"
msgstr ""
-#: c/c-parser.c:16352 cp/parser.c:35621
+#: c/c-parser.c:16374 cp/parser.c:35671
#, gcc-internal-format
msgid ""
"%<#pragma omp declare simd%> not immediately followed by a single function "
"declaration or definition"
msgstr ""
-#: c/c-parser.c:16468 cp/parser.c:35692
+#: c/c-parser.c:16490 cp/parser.c:35742
#, 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:16487 cp/parser.c:35711
+#: c/c-parser.c:16509 cp/parser.c:35761
#, gcc-internal-format
msgid "%qD specified both in declare target %<link%> and %<to%> clauses"
msgstr ""
-#: c/c-parser.c:16525 cp/parser.c:35755
+#: c/c-parser.c:16547 cp/parser.c:35805
#, gcc-internal-format
msgid "expected %<target%>"
msgstr ""
-#: c/c-parser.c:16532 cp/parser.c:35762
+#: c/c-parser.c:16554 cp/parser.c:35812
#, gcc-internal-format
msgid "expected %<declare%>"
msgstr ""
-#: c/c-parser.c:16538 cp/parser.c:35769
+#: c/c-parser.c:16560 cp/parser.c:35819
#, gcc-internal-format
msgid ""
"%<#pragma omp end declare target%> without corresponding %<#pragma omp "
"declare target%>"
msgstr ""
-#: c/c-parser.c:16566
+#: c/c-parser.c:16588
#, gcc-internal-format
msgid "%<#pragma omp declare reduction%> not at file or block scope"
msgstr ""
-#: c/c-parser.c:16616
+#: c/c-parser.c:16638
#, gcc-internal-format
msgid ""
"expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%>, %<min%> "
"or identifier"
msgstr ""
-#: c/c-parser.c:16643
+#: c/c-parser.c:16665
#, gcc-internal-format
msgid "predeclared arithmetic type in %<#pragma omp declare reduction%>"
msgstr ""
-#: c/c-parser.c:16647
+#: c/c-parser.c:16669
#, gcc-internal-format
msgid "function or array type in %<#pragma omp declare reduction%>"
msgstr ""
-#: c/c-parser.c:16650
+#: c/c-parser.c:16672
#, gcc-internal-format
msgid ""
"const, volatile or restrict qualified type in %<#pragma omp declare reduction"
"%>"
msgstr ""
-#: c/c-parser.c:16658
+#: c/c-parser.c:16680
#, gcc-internal-format
msgid "redeclaration of %qs %<#pragma omp declare reduction%> for type %qT"
msgstr ""
-#: c/c-parser.c:16667
+#: c/c-parser.c:16689
#, gcc-internal-format
msgid "previous %<#pragma omp declare reduction%>"
msgstr ""
-#: c/c-parser.c:16784
+#: c/c-parser.c:16806
#, gcc-internal-format
msgid "expected %<omp_priv%> or function-name"
msgstr ""
-#: c/c-parser.c:16795
+#: c/c-parser.c:16817
#, gcc-internal-format
msgid "expected function-name %<(%>"
msgstr ""
-#: c/c-parser.c:16814
+#: c/c-parser.c:16836
#, gcc-internal-format
msgid "one of the initializer call arguments should be %<&omp_priv%>"
msgstr ""
-#: c/c-parser.c:16934 cp/parser.c:36213
+#: c/c-parser.c:16956 cp/parser.c:36264
#, gcc-internal-format
msgid "expected %<simd%> or %<reduction%> or %<target%>"
msgstr ""
-#: c/c-parser.c:17146 cp/semantics.c:7365
+#: c/c-parser.c:17168 cp/semantics.c:7422
#, gcc-internal-format
msgid "%qE declared %<threadprivate%> after first use"
msgstr ""
-#: c/c-parser.c:17148 cp/semantics.c:7367
+#: c/c-parser.c:17170 cp/semantics.c:7424
#, gcc-internal-format
msgid "automatic variable %qE cannot be %<threadprivate%>"
msgstr ""
-#: c/c-parser.c:17152 cp/semantics.c:7369
+#: c/c-parser.c:17174 cp/semantics.c:7426
#, gcc-internal-format
msgid "%<threadprivate%> %qE has incomplete type"
msgstr ""
-#: c/c-parser.c:17183
+#: c/c-parser.c:17205
#, gcc-internal-format
msgid "pragma simd ignored because -fcilkplus is not enabled"
msgstr ""
-#: c/c-parser.c:17189
+#: c/c-parser.c:17211
#, gcc-internal-format
msgid "pragma simd must be inside a function"
msgstr ""
-#: c/c-parser.c:17233 cp/parser.c:37397
+#: c/c-parser.c:17255 cp/parser.c:37448
#, gcc-internal-format
msgid "vectorlength must be an integer constant"
msgstr ""
-#: c/c-parser.c:17235 cp/parser.c:37400
+#: c/c-parser.c:17257 cp/parser.c:37451
#, gcc-internal-format
msgid "vectorlength must be a power of 2"
msgstr ""
-#: c/c-parser.c:17318 cp/parser.c:37507
+#: c/c-parser.c:17340 cp/parser.c:37558
#, gcc-internal-format
msgid "step size must be an integer constant expression or an integer variable"
msgstr ""
-#: c/c-parser.c:17417 cp/parser.c:37600
+#: c/c-parser.c:17439 cp/parser.c:37651
#, gcc-internal-format
msgid "expected %<#pragma simd%> clause"
msgstr ""
-#: c/c-parser.c:17461 cp/parser.c:37049
+#: c/c-parser.c:17483 cp/parser.c:37100
#, gcc-internal-format
msgid "%<#pragma cilk grainsize%> is not followed by %<_Cilk_for%>"
msgstr ""
-#: c/c-parser.c:17760 cp/parser.c:36941
+#: c/c-parser.c:17782 cp/parser.c:36992
#, gcc-internal-format
msgid "%<__transaction_cancel%> without transactional memory support enabled"
msgstr ""
-#: c/c-parser.c:17766 cp/parser.c:36947
+#: c/c-parser.c:17788 cp/parser.c:36998
#, gcc-internal-format
msgid "%<__transaction_cancel%> within a %<__transaction_relaxed%>"
msgstr ""
-#: c/c-parser.c:17775 cp/parser.c:36956
+#: c/c-parser.c:17797 cp/parser.c:37007
#, gcc-internal-format
msgid ""
"outer %<__transaction_cancel%> not within outer %<__transaction_atomic%>"
msgstr ""
-#: c/c-parser.c:17777 cp/parser.c:36959
+#: c/c-parser.c:17799 cp/parser.c:37010
#, gcc-internal-format
msgid " or a %<transaction_may_cancel_outer%> function"
msgstr ""
-#: c/c-parser.c:17783 cp/parser.c:36965
+#: c/c-parser.c:17805 cp/parser.c:37016
#, gcc-internal-format
msgid "%<__transaction_cancel%> not within %<__transaction_atomic%>"
msgstr ""
-#: c/c-parser.c:17851 cp/cp-array-notation.c:1407
+#: c/c-parser.c:17873 cp/cp-array-notation.c:1407
#, gcc-internal-format
msgid "base of array section must be pointer or array type"
msgstr ""
-#: c/c-parser.c:17860 cp/parser.c:7011
+#: c/c-parser.c:17882 cp/parser.c:7013
#, gcc-internal-format
msgid "expected %<:%> or numeral"
msgstr ""
-#: c/c-parser.c:17871
+#: c/c-parser.c:17893
#, gcc-internal-format
msgid ""
"start-index and length fields necessary for using array notations in pointers"
msgstr ""
-#: c/c-parser.c:17878 c/c-parser.c:17921
+#: c/c-parser.c:17900 c/c-parser.c:17943
#, gcc-internal-format
msgid "array notations cannot be used with function type"
msgstr ""
-#: c/c-parser.c:17887
+#: c/c-parser.c:17909
#, gcc-internal-format
msgid ""
"start-index and length fields necessary for using array notations in "
"dimensionless arrays"
msgstr ""
-#: c/c-parser.c:17899
+#: c/c-parser.c:17921
#, gcc-internal-format
msgid ""
"start-index and length fields necessary for using array notations in "
"variable-length arrays"
msgstr ""
-#: c/c-parser.c:17949 c/c-parser.c:17952
+#: c/c-parser.c:17971 c/c-parser.c:17974
#, gcc-internal-format
msgid "expected array notation expression"
msgstr ""
@@ -34137,7 +34236,7 @@ msgstr ""
msgid "%qD has an incomplete type %qT"
msgstr ""
-#: c/c-typeck.c:231 c/c-typeck.c:9487 c/c-typeck.c:9529 cp/call.c:3968
+#: c/c-typeck.c:231 c/c-typeck.c:9500 c/c-typeck.c:9542 cp/call.c:3970
#, gcc-internal-format
msgid "invalid use of void expression"
msgstr ""
@@ -34168,142 +34267,142 @@ msgstr ""
msgid "%qT and %qT are in disjoint named address spaces"
msgstr ""
-#: c/c-typeck.c:568 c/c-typeck.c:593
+#: c/c-typeck.c:570 c/c-typeck.c:595
#, gcc-internal-format
msgid "function types not truly compatible in ISO C"
msgstr ""
-#: c/c-typeck.c:737
+#: c/c-typeck.c:739
#, gcc-internal-format
msgid "can%'t mix operands of decimal float and vector types"
msgstr ""
-#: c/c-typeck.c:742
+#: c/c-typeck.c:744
#, gcc-internal-format
msgid "can%'t mix operands of decimal float and complex types"
msgstr ""
-#: c/c-typeck.c:747
+#: c/c-typeck.c:749
#, gcc-internal-format
msgid "can%'t mix operands of decimal float and other float types"
msgstr ""
-#: c/c-typeck.c:1244
+#: c/c-typeck.c:1246
#, gcc-internal-format
msgid "pointers to arrays with different qualifiers are incompatible in ISO C"
msgstr ""
-#: c/c-typeck.c:1248
+#: c/c-typeck.c:1250
#, gcc-internal-format
msgid "types are not quite compatible"
msgstr ""
-#: c/c-typeck.c:1252
+#: c/c-typeck.c:1254
#, gcc-internal-format
msgid "pointer target types incompatible in C++"
msgstr ""
-#: c/c-typeck.c:1584
+#: c/c-typeck.c:1586
#, gcc-internal-format
msgid "function return types not compatible due to %<volatile%>"
msgstr ""
-#: c/c-typeck.c:1834
+#: c/c-typeck.c:1836
#, gcc-internal-format
msgid "converting an array compound literal to a pointer is ill-formed in C++"
msgstr ""
-#: c/c-typeck.c:2345
+#: c/c-typeck.c:2347
#, gcc-internal-format
msgid "%qT has no member named %qE; did you mean %qE?"
msgstr ""
-#: c/c-typeck.c:2348
+#: c/c-typeck.c:2350
#, gcc-internal-format
msgid "%qT has no member named %qE"
msgstr ""
-#: c/c-typeck.c:2357
+#: c/c-typeck.c:2359
#, gcc-internal-format
msgid "accessing a member %qE of an atomic structure %qE"
msgstr ""
-#: c/c-typeck.c:2360
+#: c/c-typeck.c:2362
#, gcc-internal-format
msgid "accessing a member %qE of an atomic union %qE"
msgstr ""
-#: c/c-typeck.c:2420
+#: c/c-typeck.c:2422
#, gcc-internal-format
msgid "%qE is a pointer; did you mean to use %<->%>?"
msgstr ""
-#: c/c-typeck.c:2426
+#: c/c-typeck.c:2428
#, gcc-internal-format
msgid "request for member %qE in something not a structure or union"
msgstr ""
-#: c/c-typeck.c:2477
+#: c/c-typeck.c:2479
#, gcc-internal-format
msgid "dereferencing pointer to incomplete type %qT"
msgstr ""
-#: c/c-typeck.c:2484
+#: c/c-typeck.c:2486
#, gcc-internal-format
msgid "dereferencing %<void *%> pointer"
msgstr ""
-#: c/c-typeck.c:2537
+#: c/c-typeck.c:2539
#, gcc-internal-format
msgid "rank of the array's index is greater than 1"
msgstr ""
-#: c/c-typeck.c:2550
+#: c/c-typeck.c:2552
#, gcc-internal-format
msgid "subscripted value is neither array nor pointer nor vector"
msgstr ""
-#: c/c-typeck.c:2560 cp/typeck.c:3142 cp/typeck.c:3229
+#: c/c-typeck.c:2562 cp/typeck.c:3150 cp/typeck.c:3237
#, gcc-internal-format
msgid "array subscript is not an integer"
msgstr ""
-#: c/c-typeck.c:2566
+#: c/c-typeck.c:2568
#, gcc-internal-format
msgid "subscripted value is pointer to function"
msgstr ""
-#: c/c-typeck.c:2619
+#: c/c-typeck.c:2621
#, gcc-internal-format
msgid "ISO C forbids subscripting %<register%> array"
msgstr ""
-#: c/c-typeck.c:2622
+#: c/c-typeck.c:2624
#, gcc-internal-format
msgid "ISO C90 forbids subscripting non-lvalue array"
msgstr ""
-#: c/c-typeck.c:2736
+#: c/c-typeck.c:2738
#, gcc-internal-format
msgid "enum constant defined here"
msgstr ""
-#: c/c-typeck.c:2842 cp/typeck.c:1638
+#: c/c-typeck.c:2844 cp/typeck.c:1638
#, gcc-internal-format
msgid "%<sizeof%> on array function parameter %qE will return size of %qT"
msgstr ""
-#: c/c-typeck.c:2992
+#: c/c-typeck.c:2994
#, gcc-internal-format
msgid "called object %qE is not a function or function pointer"
msgstr ""
-#: c/c-typeck.c:2997
+#: c/c-typeck.c:2999
#, gcc-internal-format
msgid "called object %qD is not a function or function pointer"
msgstr ""
-#: c/c-typeck.c:3003
+#: c/c-typeck.c:3005
#, gcc-internal-format
msgid "called object is not a function or function pointer"
msgstr ""
@@ -34311,373 +34410,373 @@ 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:3033
+#: c/c-typeck.c:3035
#, gcc-internal-format
msgid "function called through a non-compatible type"
msgstr ""
-#: c/c-typeck.c:3038 c/c-typeck.c:3075
+#: c/c-typeck.c:3040 c/c-typeck.c:3087
#, gcc-internal-format
msgid "function with qualified void return type called"
msgstr ""
-#: c/c-typeck.c:3199
+#: c/c-typeck.c:3211
#, gcc-internal-format
msgid "too many arguments to method %qE"
msgstr ""
-#: c/c-typeck.c:3237
+#: c/c-typeck.c:3249
#, gcc-internal-format, gfc-internal-format
msgid "type of formal parameter %d is incomplete"
msgstr ""
-#: c/c-typeck.c:3254
+#: c/c-typeck.c:3266
#, gcc-internal-format
msgid ""
"passing argument %d of %qE as integer rather than floating due to prototype"
msgstr ""
-#: c/c-typeck.c:3260
+#: c/c-typeck.c:3272
#, gcc-internal-format
msgid ""
"passing argument %d of %qE as integer rather than complex due to prototype"
msgstr ""
-#: c/c-typeck.c:3266
+#: c/c-typeck.c:3278
#, gcc-internal-format
msgid ""
"passing argument %d of %qE as complex rather than floating due to prototype"
msgstr ""
-#: c/c-typeck.c:3272
+#: c/c-typeck.c:3284
#, gcc-internal-format
msgid ""
"passing argument %d of %qE as floating rather than integer due to prototype"
msgstr ""
-#: c/c-typeck.c:3278
+#: c/c-typeck.c:3290
#, gcc-internal-format
msgid ""
"passing argument %d of %qE as complex rather than integer due to prototype"
msgstr ""
-#: c/c-typeck.c:3284
+#: c/c-typeck.c:3296
#, gcc-internal-format
msgid ""
"passing argument %d of %qE as floating rather than complex due to prototype"
msgstr ""
-#: c/c-typeck.c:3298
+#: c/c-typeck.c:3310
#, gcc-internal-format
msgid ""
"passing argument %d of %qE as %<float%> rather than %<double%> due to "
"prototype"
msgstr ""
-#: c/c-typeck.c:3324
+#: c/c-typeck.c:3336
#, gcc-internal-format
msgid "passing argument %d of %qE as %qT rather than %qT due to prototype"
msgstr ""
-#: c/c-typeck.c:3346
+#: c/c-typeck.c:3358
#, gcc-internal-format
msgid "passing argument %d of %qE with different width due to prototype"
msgstr ""
-#: c/c-typeck.c:3370
+#: c/c-typeck.c:3382
#, gcc-internal-format
msgid "passing argument %d of %qE as unsigned due to prototype"
msgstr ""
-#: c/c-typeck.c:3375
+#: c/c-typeck.c:3387
#, gcc-internal-format
msgid "passing argument %d of %qE as signed due to prototype"
msgstr ""
-#: c/c-typeck.c:3411 cp/call.c:6766
+#: c/c-typeck.c:3423 cp/call.c:6769
#, gcc-internal-format
msgid "implicit conversion from %qT to %qT when passing argument to function"
msgstr ""
-#: c/c-typeck.c:3603 c/c-typeck.c:3608
+#: c/c-typeck.c:3617 c/c-typeck.c:3622 cp/typeck.c:4534 cp/typeck.c:4776
#, gcc-internal-format
msgid "comparison with string literal results in unspecified behavior"
msgstr ""
-#: c/c-typeck.c:3622
+#: c/c-typeck.c:3636
#, gcc-internal-format
msgid "comparison between %qT and %qT"
msgstr ""
-#: c/c-typeck.c:3671
+#: c/c-typeck.c:3685
#, gcc-internal-format
msgid "pointer of type %<void *%> used in subtraction"
msgstr ""
-#: c/c-typeck.c:3674
+#: c/c-typeck.c:3688
#, gcc-internal-format
msgid "pointer to a function used in subtraction"
msgstr ""
-#: c/c-typeck.c:3686
+#: c/c-typeck.c:3700
#, gcc-internal-format
msgid "arithmetic on pointer to an incomplete type"
msgstr ""
-#: c/c-typeck.c:3691 cp/typeck.c:5309
+#: c/c-typeck.c:3705 cp/typeck.c:5293
#, gcc-internal-format
msgid "arithmetic on pointer to an empty aggregate"
msgstr ""
-#: c/c-typeck.c:4099
+#: c/c-typeck.c:4113
#, gcc-internal-format
msgid "ISO C does not support %<~%> for complex conjugation"
msgstr ""
-#: c/c-typeck.c:4138
+#: c/c-typeck.c:4152
#, gcc-internal-format
msgid "wrong type argument to unary exclamation mark"
msgstr ""
-#: c/c-typeck.c:4195
+#: c/c-typeck.c:4209
#, gcc-internal-format
msgid "increment of enumeration value is invalid in C++"
msgstr ""
-#: c/c-typeck.c:4198
+#: c/c-typeck.c:4212
#, gcc-internal-format
msgid "decrement of enumeration value is invalid in C++"
msgstr ""
-#: c/c-typeck.c:4214
+#: c/c-typeck.c:4228
#, gcc-internal-format
msgid "ISO C does not support %<++%> and %<--%> on complex types"
msgstr ""
-#: c/c-typeck.c:4237 c/c-typeck.c:4271
+#: c/c-typeck.c:4251 c/c-typeck.c:4285
#, gcc-internal-format
msgid "wrong type argument to increment"
msgstr ""
-#: c/c-typeck.c:4239 c/c-typeck.c:4274
+#: c/c-typeck.c:4253 c/c-typeck.c:4288
#, gcc-internal-format
msgid "wrong type argument to decrement"
msgstr ""
-#: c/c-typeck.c:4259
+#: c/c-typeck.c:4273
#, gcc-internal-format
msgid "increment of pointer to an incomplete type %qT"
msgstr ""
-#: c/c-typeck.c:4263
+#: c/c-typeck.c:4277
#, gcc-internal-format
msgid "decrement of pointer to an incomplete type %qT"
msgstr ""
-#: c/c-typeck.c:4367
+#: c/c-typeck.c:4381
#, gcc-internal-format
msgid "taking address of expression of type %<void%>"
msgstr ""
-#: c/c-typeck.c:4425
+#: c/c-typeck.c:4439
#, gcc-internal-format
msgid "cannot take address of bit-field %qD"
msgstr ""
-#: c/c-typeck.c:4438
+#: c/c-typeck.c:4452
#, gcc-internal-format
msgid "cannot take address of scalar with reverse storage order"
msgstr ""
-#: c/c-typeck.c:4445
+#: c/c-typeck.c:4459
#, gcc-internal-format
msgid "address of array with reverse scalar storage order requested"
msgstr ""
-#: c/c-typeck.c:4617
+#: c/c-typeck.c:4631
#, gcc-internal-format
msgid "global register variable %qD used in nested function"
msgstr ""
-#: c/c-typeck.c:4620
+#: c/c-typeck.c:4634
#, gcc-internal-format
msgid "register variable %qD used in nested function"
msgstr ""
-#: c/c-typeck.c:4625
+#: c/c-typeck.c:4639
#, gcc-internal-format
msgid "address of global register variable %qD requested"
msgstr ""
-#: c/c-typeck.c:4627
+#: c/c-typeck.c:4641
#, gcc-internal-format
msgid "address of register variable %qD requested"
msgstr ""
-#: c/c-typeck.c:4728
+#: c/c-typeck.c:4742
#, gcc-internal-format
msgid "non-lvalue array in conditional expression"
msgstr ""
-#: c/c-typeck.c:4784 cp/call.c:5086
+#: c/c-typeck.c:4798 cp/call.c:5089
#, gcc-internal-format
msgid ""
"implicit conversion from %qT to %qT to match other result of conditional"
msgstr ""
-#: c/c-typeck.c:4858
+#: c/c-typeck.c:4872
#, gcc-internal-format
msgid "ISO C forbids conditional expr with only one void side"
msgstr ""
-#: c/c-typeck.c:4875
+#: c/c-typeck.c:4889
#, gcc-internal-format
msgid "pointers to disjoint address spaces used in conditional expression"
msgstr ""
-#: c/c-typeck.c:4886 c/c-typeck.c:4903
+#: c/c-typeck.c:4900 c/c-typeck.c:4917
#, gcc-internal-format
msgid "pointer to array loses qualifier in conditional expression"
msgstr ""
-#: c/c-typeck.c:4891 c/c-typeck.c:4908
+#: c/c-typeck.c:4905 c/c-typeck.c:4922
#, gcc-internal-format
msgid "ISO C forbids conditional expr between %<void *%> and function pointer"
msgstr ""
-#: c/c-typeck.c:4921
+#: c/c-typeck.c:4935
#, gcc-internal-format
msgid "pointer type mismatch in conditional expression"
msgstr ""
-#: c/c-typeck.c:4930 c/c-typeck.c:4941
+#: c/c-typeck.c:4944 c/c-typeck.c:4955
#, gcc-internal-format
msgid "pointer/integer type mismatch in conditional expression"
msgstr ""
-#: c/c-typeck.c:5044 cp/typeck.c:6454
+#: c/c-typeck.c:5058 cp/typeck.c:6438
#, gcc-internal-format
msgid "spawned function call cannot be part of a comma expression"
msgstr ""
-#: c/c-typeck.c:5078
+#: c/c-typeck.c:5092
#, gcc-internal-format
msgid "left-hand operand of comma expression has no effect"
msgstr ""
-#: c/c-typeck.c:5096 c/c-typeck.c:10212
+#: c/c-typeck.c:5110 c/c-typeck.c:10225
#, gcc-internal-format
msgid "right-hand operand of comma expression has no effect"
msgstr ""
-#: c/c-typeck.c:5165
+#: c/c-typeck.c:5179
msgid "cast adds %q#v qualifier to function type"
msgstr ""
-#: c/c-typeck.c:5171
+#: c/c-typeck.c:5185
msgid "cast discards %qv qualifier from pointer target type"
msgstr ""
-#: c/c-typeck.c:5206
+#: c/c-typeck.c:5220
#, 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:5243
+#: c/c-typeck.c:5257
#, gcc-internal-format
msgid "cast specifies array type"
msgstr ""
-#: c/c-typeck.c:5249
+#: c/c-typeck.c:5263
#, gcc-internal-format
msgid "cast specifies function type"
msgstr ""
-#: c/c-typeck.c:5264
+#: c/c-typeck.c:5278
#, gcc-internal-format
msgid "ISO C forbids casting nonscalar to the same type"
msgstr ""
-#: c/c-typeck.c:5284
+#: c/c-typeck.c:5298
#, gcc-internal-format
msgid "ISO C forbids casts to union type"
msgstr ""
-#: c/c-typeck.c:5294
+#: c/c-typeck.c:5308
#, gcc-internal-format
msgid "cast to union type from type not present in union"
msgstr ""
-#: c/c-typeck.c:5329
+#: c/c-typeck.c:5343
#, gcc-internal-format, gfc-internal-format
msgid ""
"cast to %s address space pointer from disjoint generic address space pointer"
msgstr ""
-#: c/c-typeck.c:5334
+#: c/c-typeck.c:5348
#, gcc-internal-format, gfc-internal-format
msgid ""
"cast to generic address space pointer from disjoint %s address space pointer"
msgstr ""
-#: c/c-typeck.c:5339
+#: c/c-typeck.c:5353
#, gcc-internal-format, gfc-internal-format
msgid "cast to %s address space pointer from disjoint %s address space pointer"
msgstr ""
-#: c/c-typeck.c:5358
+#: c/c-typeck.c:5372
#, gcc-internal-format
msgid "cast increases required alignment of target type"
msgstr ""
-#: c/c-typeck.c:5369
+#: c/c-typeck.c:5383
#, gcc-internal-format
msgid "cast from pointer to integer of different size"
msgstr ""
-#: c/c-typeck.c:5374
+#: c/c-typeck.c:5388
#, gcc-internal-format
msgid "cast from function call of type %qT to non-matching type %qT"
msgstr ""
-#: c/c-typeck.c:5383 cp/typeck.c:7429
+#: c/c-typeck.c:5397 cp/typeck.c:7409
#, gcc-internal-format
msgid "cast to pointer from integer of different size"
msgstr ""
-#: c/c-typeck.c:5397
+#: c/c-typeck.c:5411
#, gcc-internal-format
msgid "ISO C forbids conversion of function pointer to object pointer type"
msgstr ""
-#: c/c-typeck.c:5406
+#: c/c-typeck.c:5420
#, gcc-internal-format
msgid "ISO C forbids conversion of object pointer to function pointer type"
msgstr ""
-#: c/c-typeck.c:5493
+#: c/c-typeck.c:5507
#, gcc-internal-format
msgid "defining a type in a cast is invalid in C++"
msgstr ""
-#: c/c-typeck.c:5535
+#: c/c-typeck.c:5549
#, gcc-internal-format
msgid "assignment to expression with array type"
msgstr ""
-#: c/c-typeck.c:5658 c/c-typeck.c:6098
+#: c/c-typeck.c:5672 c/c-typeck.c:6112
#, gcc-internal-format
msgid "enum conversion in assignment is invalid in C++"
msgstr ""
-#: c/c-typeck.c:5850 c/c-typeck.c:5868 c/c-typeck.c:5887
+#: c/c-typeck.c:5864 c/c-typeck.c:5882 c/c-typeck.c:5901
#, gcc-internal-format
msgid "(near initialization for %qs)"
msgstr ""
-#: c/c-typeck.c:5902
+#: c/c-typeck.c:5916
#, gcc-internal-format
msgid "array initialized from parenthesized string constant"
msgstr ""
@@ -34693,2102 +34792,2097 @@ 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:5978 c/c-typeck.c:6007 c/c-typeck.c:6036 c/c-typeck.c:6614
+#: c/c-typeck.c:5992 c/c-typeck.c:6021 c/c-typeck.c:6050 c/c-typeck.c:6628
#, gcc-internal-format
msgid "expected %qT but argument is of type %qT"
msgstr ""
-#: c/c-typeck.c:6096
+#: c/c-typeck.c:6110
#, gcc-internal-format
msgid "enum conversion when passing argument %d of %qE is invalid in C++"
msgstr ""
-#: c/c-typeck.c:6100 c/c-typeck.c:8698
+#: c/c-typeck.c:6114 c/c-typeck.c:8710
#, gcc-internal-format
msgid "enum conversion in initialization is invalid in C++"
msgstr ""
-#: c/c-typeck.c:6102
+#: c/c-typeck.c:6116
#, gcc-internal-format
msgid "enum conversion in return is invalid in C++"
msgstr ""
-#: c/c-typeck.c:6133
+#: c/c-typeck.c:6147
#, gcc-internal-format
msgid "cannot pass rvalue to reference parameter"
msgstr ""
-#: c/c-typeck.c:6266 c/c-typeck.c:6531
+#: c/c-typeck.c:6280 c/c-typeck.c:6545
msgid ""
"passing argument %d of %qE makes %q#v qualified function pointer from "
"unqualified"
msgstr ""
-#: c/c-typeck.c:6269 c/c-typeck.c:6534
+#: c/c-typeck.c:6283 c/c-typeck.c:6548
msgid "assignment makes %q#v qualified function pointer from unqualified"
msgstr ""
-#: c/c-typeck.c:6272 c/c-typeck.c:6536
+#: c/c-typeck.c:6286 c/c-typeck.c:6550
msgid "initialization makes %q#v qualified function pointer from unqualified"
msgstr ""
-#: c/c-typeck.c:6275 c/c-typeck.c:6538
+#: c/c-typeck.c:6289 c/c-typeck.c:6552
msgid "return makes %q#v qualified function pointer from unqualified"
msgstr ""
-#: c/c-typeck.c:6283 c/c-typeck.c:6450 c/c-typeck.c:6493
+#: c/c-typeck.c:6297 c/c-typeck.c:6464 c/c-typeck.c:6507
msgid ""
"passing argument %d of %qE discards %qv qualifier from pointer target type"
msgstr ""
-#: c/c-typeck.c:6285 c/c-typeck.c:6452 c/c-typeck.c:6495
+#: c/c-typeck.c:6299 c/c-typeck.c:6466 c/c-typeck.c:6509
msgid "assignment discards %qv qualifier from pointer target type"
msgstr ""
-#: c/c-typeck.c:6287 c/c-typeck.c:6454 c/c-typeck.c:6497
+#: c/c-typeck.c:6301 c/c-typeck.c:6468 c/c-typeck.c:6511
msgid "initialization discards %qv qualifier from pointer target type"
msgstr ""
-#: c/c-typeck.c:6289 c/c-typeck.c:6456 c/c-typeck.c:6499
+#: c/c-typeck.c:6303 c/c-typeck.c:6470 c/c-typeck.c:6513
msgid "return discards %qv qualifier from pointer target type"
msgstr ""
-#: c/c-typeck.c:6298
+#: c/c-typeck.c:6312
#, gcc-internal-format
msgid "ISO C prohibits argument conversion to union type"
msgstr ""
-#: c/c-typeck.c:6360
+#: c/c-typeck.c:6374
#, gcc-internal-format
msgid "request for implicit conversion from %qT to %qT not permitted in C++"
msgstr ""
-#: c/c-typeck.c:6372
+#: c/c-typeck.c:6386
#, gcc-internal-format
msgid "passing argument %d of %qE from pointer to non-enclosed address space"
msgstr ""
-#: c/c-typeck.c:6376
+#: c/c-typeck.c:6390
#, gcc-internal-format
msgid "assignment from pointer to non-enclosed address space"
msgstr ""
-#: c/c-typeck.c:6380
+#: c/c-typeck.c:6394
#, gcc-internal-format
msgid "initialization from pointer to non-enclosed address space"
msgstr ""
-#: c/c-typeck.c:6384
+#: c/c-typeck.c:6398
#, gcc-internal-format
msgid "return from pointer to non-enclosed address space"
msgstr ""
-#: c/c-typeck.c:6402
+#: c/c-typeck.c:6416
#, gcc-internal-format
msgid "argument %d of %qE might be a candidate for a format attribute"
msgstr ""
-#: c/c-typeck.c:6408
+#: c/c-typeck.c:6422
#, gcc-internal-format
msgid "assignment left-hand side might be a candidate for a format attribute"
msgstr ""
-#: c/c-typeck.c:6413
+#: c/c-typeck.c:6427
#, gcc-internal-format
msgid ""
"initialization left-hand side might be a candidate for a format attribute"
msgstr ""
-#: c/c-typeck.c:6418 cp/typeck.c:8445
+#: c/c-typeck.c:6432 cp/typeck.c:8425
#, gcc-internal-format
msgid "return type might be a candidate for a format attribute"
msgstr ""
-#: c/c-typeck.c:6467
+#: c/c-typeck.c:6481
#, gcc-internal-format
msgid ""
"ISO C forbids passing argument %d of %qE between function pointer and %<void "
"*%>"
msgstr ""
-#: c/c-typeck.c:6470
+#: c/c-typeck.c:6484
#, gcc-internal-format
msgid "ISO C forbids assignment between function pointer and %<void *%>"
msgstr ""
-#: c/c-typeck.c:6472
+#: c/c-typeck.c:6486
#, gcc-internal-format
msgid "ISO C forbids initialization between function pointer and %<void *%>"
msgstr ""
-#: c/c-typeck.c:6474
+#: c/c-typeck.c:6488
#, gcc-internal-format
msgid "ISO C forbids return between function pointer and %<void *%>"
msgstr ""
-#: c/c-typeck.c:6511
+#: c/c-typeck.c:6525
#, gcc-internal-format
msgid "pointer targets in passing argument %d of %qE differ in signedness"
msgstr ""
-#: c/c-typeck.c:6513
+#: c/c-typeck.c:6527
#, gcc-internal-format
msgid "pointer targets in assignment differ in signedness"
msgstr ""
-#: c/c-typeck.c:6515
+#: c/c-typeck.c:6529
#, gcc-internal-format
msgid "pointer targets in initialization differ in signedness"
msgstr ""
-#: c/c-typeck.c:6517
+#: c/c-typeck.c:6531
#, gcc-internal-format
msgid "pointer targets in return differ in signedness"
msgstr ""
-#: c/c-typeck.c:6548
+#: c/c-typeck.c:6562
#, gcc-internal-format
msgid "passing argument %d of %qE from incompatible pointer type"
msgstr ""
-#: c/c-typeck.c:6550
+#: c/c-typeck.c:6564
#, gcc-internal-format
msgid "assignment from incompatible pointer type"
msgstr ""
-#: c/c-typeck.c:6551
+#: c/c-typeck.c:6565
#, gcc-internal-format
msgid "initialization from incompatible pointer type"
msgstr ""
-#: c/c-typeck.c:6553
+#: c/c-typeck.c:6567
#, 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:6561 c/c-typeck.c:7055 cp/typeck.c:1992
+#: c/c-typeck.c:6575 c/c-typeck.c:7069 cp/typeck.c:1992
#, gcc-internal-format
msgid "invalid use of non-lvalue array"
msgstr ""
-#: c/c-typeck.c:6572
+#: c/c-typeck.c:6586
#, gcc-internal-format
msgid "passing argument %d of %qE makes pointer from integer without a cast"
msgstr ""
-#: c/c-typeck.c:6574
+#: c/c-typeck.c:6588
#, gcc-internal-format
msgid "assignment makes pointer from integer without a cast"
msgstr ""
-#: c/c-typeck.c:6576
+#: c/c-typeck.c:6590
#, gcc-internal-format
msgid "initialization makes pointer from integer without a cast"
msgstr ""
-#: c/c-typeck.c:6578
+#: c/c-typeck.c:6592
#, gcc-internal-format
msgid "return makes pointer from integer without a cast"
msgstr ""
-#: c/c-typeck.c:6587
+#: c/c-typeck.c:6601
#, gcc-internal-format
msgid "passing argument %d of %qE makes integer from pointer without a cast"
msgstr ""
-#: c/c-typeck.c:6589
+#: c/c-typeck.c:6603
#, gcc-internal-format
msgid "assignment makes integer from pointer without a cast"
msgstr ""
-#: c/c-typeck.c:6591
+#: c/c-typeck.c:6605
#, gcc-internal-format
msgid "initialization makes integer from pointer without a cast"
msgstr ""
-#: c/c-typeck.c:6593
+#: c/c-typeck.c:6607
#, gcc-internal-format
msgid "return makes integer from pointer without a cast"
msgstr ""
-#: c/c-typeck.c:6617
+#: c/c-typeck.c:6631
#, gcc-internal-format
msgid "incompatible types when assigning to type %qT from type %qT"
msgstr ""
-#: c/c-typeck.c:6622
+#: c/c-typeck.c:6636
#, gcc-internal-format
msgid "incompatible types when initializing type %qT using type %qT"
msgstr ""
-#: c/c-typeck.c:6627
+#: c/c-typeck.c:6641
#, gcc-internal-format
msgid "incompatible types when returning type %qT but %qT was expected"
msgstr ""
-#: c/c-typeck.c:6691
+#: c/c-typeck.c:6705
#, gcc-internal-format
msgid "traditional C rejects automatic aggregate initialization"
msgstr ""
-#: c/c-typeck.c:6928 c/c-typeck.c:7810 cp/typeck2.c:1023
+#: c/c-typeck.c:6942 c/c-typeck.c:7821 cp/typeck2.c:1025
#, gcc-internal-format
msgid "initialization of a flexible array member"
msgstr ""
-#: c/c-typeck.c:6938 cp/typeck2.c:1038
+#: c/c-typeck.c:6952 cp/typeck2.c:1040
#, gcc-internal-format
msgid "char-array initialized from wide string"
msgstr ""
-#: c/c-typeck.c:6947
+#: c/c-typeck.c:6961
#, gcc-internal-format
msgid "wide character array initialized from non-wide string"
msgstr ""
-#: c/c-typeck.c:6953
+#: c/c-typeck.c:6967
#, gcc-internal-format
msgid "wide character array initialized from incompatible wide string"
msgstr ""
-#: c/c-typeck.c:6987
+#: c/c-typeck.c:7001
#, gcc-internal-format
msgid "array of inappropriate type initialized from string constant"
msgstr ""
-#: c/c-typeck.c:7074 c/c-typeck.c:7098 c/c-typeck.c:7101 c/c-typeck.c:7109
-#: c/c-typeck.c:7149 c/c-typeck.c:8637 c/c-typeck.c:8671
+#: c/c-typeck.c:7088 c/c-typeck.c:7112 c/c-typeck.c:7115 c/c-typeck.c:7123
+#: c/c-typeck.c:7163 c/c-typeck.c:8649 c/c-typeck.c:8683
#, gcc-internal-format
msgid "initializer element is not constant"
msgstr ""
-#: c/c-typeck.c:7083
+#: c/c-typeck.c:7097
#, gcc-internal-format
msgid "array initialized from non-constant array expression"
msgstr ""
-#: c/c-typeck.c:7114 c/c-typeck.c:7162 c/c-typeck.c:8681
+#: c/c-typeck.c:7128 c/c-typeck.c:7176 c/c-typeck.c:8693
#, gcc-internal-format
msgid "initializer element is not a constant expression"
msgstr ""
-#: c/c-typeck.c:7156 c/c-typeck.c:8676
+#: c/c-typeck.c:7170 c/c-typeck.c:8688
#, gcc-internal-format
msgid "initializer element is not computable at load time"
msgstr ""
-#: c/c-typeck.c:7175
+#: c/c-typeck.c:7189
#, gcc-internal-format
msgid "invalid initializer"
msgstr ""
-#: c/c-typeck.c:7450 cp/decl.c:6073
+#: c/c-typeck.c:7464 cp/decl.c:6080
#, gcc-internal-format
msgid "opaque vector types cannot be initialized"
msgstr ""
-#: c/c-typeck.c:7669
+#: c/c-typeck.c:7680
#, gcc-internal-format
msgid "extra brace group at end of initializer"
msgstr ""
-#: c/c-typeck.c:7747
+#: c/c-typeck.c:7758
#, gcc-internal-format
msgid "braces around scalar initializer"
msgstr ""
-#: c/c-typeck.c:7807 c/c-typeck.c:9110
+#: c/c-typeck.c:7818 c/c-typeck.c:9122
#, gcc-internal-format
msgid "initialization of flexible array member in a nested context"
msgstr ""
-#: c/c-typeck.c:7841
+#: c/c-typeck.c:7852
#, gcc-internal-format
msgid "missing braces around initializer"
msgstr ""
-#: c/c-typeck.c:7863
+#: c/c-typeck.c:7874
#, gcc-internal-format
msgid "missing initializer for field %qD of %qT"
msgstr ""
-#: c/c-typeck.c:7887
+#: c/c-typeck.c:7898
#, gcc-internal-format
msgid "empty scalar initializer"
msgstr ""
-#: c/c-typeck.c:7892
+#: c/c-typeck.c:7903
#, gcc-internal-format
msgid "extra elements in scalar initializer"
msgstr ""
-#: c/c-typeck.c:8004 c/c-typeck.c:8085
+#: c/c-typeck.c:8015 c/c-typeck.c:8097
#, gcc-internal-format
msgid "array index in non-array initializer"
msgstr ""
-#: c/c-typeck.c:8009 c/c-typeck.c:8147
+#: c/c-typeck.c:8020 c/c-typeck.c:8159
#, gcc-internal-format
msgid "field name not in record or union initializer"
msgstr ""
-#: c/c-typeck.c:8058
+#: c/c-typeck.c:8070
#, gcc-internal-format
msgid "array index in initializer not of integer type"
msgstr ""
-#: c/c-typeck.c:8067 c/c-typeck.c:8076
+#: c/c-typeck.c:8079 c/c-typeck.c:8088
#, gcc-internal-format
msgid "array index in initializer is not an integer constant expression"
msgstr ""
-#: c/c-typeck.c:8081 c/c-typeck.c:8083
+#: c/c-typeck.c:8093 c/c-typeck.c:8095
#, gcc-internal-format
msgid "nonconstant array index in initializer"
msgstr ""
-#: c/c-typeck.c:8087 c/c-typeck.c:8090
+#: c/c-typeck.c:8099 c/c-typeck.c:8102
#, gcc-internal-format
msgid "array index in initializer exceeds array bounds"
msgstr ""
-#: c/c-typeck.c:8109
+#: c/c-typeck.c:8121
#, gcc-internal-format
msgid "empty index range in initializer"
msgstr ""
-#: c/c-typeck.c:8118
+#: c/c-typeck.c:8130
#, gcc-internal-format
msgid "array index range in initializer exceeds array bounds"
msgstr ""
-#: c/c-typeck.c:8154
+#: c/c-typeck.c:8166
#, gcc-internal-format
msgid "unknown field %qE specified in initializer"
msgstr ""
-#: c/c-typeck.c:8207 c/c-typeck.c:8237 c/c-typeck.c:8771
+#: c/c-typeck.c:8219 c/c-typeck.c:8249 c/c-typeck.c:8783
#, gcc-internal-format
msgid "initialized field with side-effects overwritten"
msgstr ""
-#: c/c-typeck.c:8211 c/c-typeck.c:8241 c/c-typeck.c:8774
+#: c/c-typeck.c:8223 c/c-typeck.c:8253 c/c-typeck.c:8786
#, gcc-internal-format
msgid "initialized field overwritten"
msgstr ""
-#: c/c-typeck.c:8993
+#: c/c-typeck.c:9005
#, gcc-internal-format
msgid "excess elements in char array initializer"
msgstr ""
-#: c/c-typeck.c:9000 c/c-typeck.c:9069
+#: c/c-typeck.c:9012 c/c-typeck.c:9081
#, gcc-internal-format
msgid "excess elements in struct initializer"
msgstr ""
-#: c/c-typeck.c:9015
+#: c/c-typeck.c:9027
#, gcc-internal-format
msgid ""
"positional initialization of field in %<struct%> declared with "
"%<designated_init%> attribute"
msgstr ""
-#: c/c-typeck.c:9084
+#: c/c-typeck.c:9096
#, gcc-internal-format
msgid "non-static initialization of a flexible array member"
msgstr ""
-#: c/c-typeck.c:9183
+#: c/c-typeck.c:9195
#, gcc-internal-format
msgid "excess elements in union initializer"
msgstr ""
-#: c/c-typeck.c:9205
+#: c/c-typeck.c:9217
#, gcc-internal-format
msgid "traditional C rejects initialization of unions"
msgstr ""
-#: c/c-typeck.c:9273
+#: c/c-typeck.c:9285
#, gcc-internal-format
msgid "excess elements in array initializer"
msgstr ""
-#: c/c-typeck.c:9307
+#: c/c-typeck.c:9319
#, gcc-internal-format
msgid "excess elements in vector initializer"
msgstr ""
-#: c/c-typeck.c:9339
+#: c/c-typeck.c:9351
#, gcc-internal-format
msgid "excess elements in scalar initializer"
msgstr ""
-#: c/c-typeck.c:9578
+#: c/c-typeck.c:9591
#, gcc-internal-format
msgid "ISO C forbids %<goto *expr;%>"
msgstr ""
-#: c/c-typeck.c:9606 cp/typeck.c:8674
+#: c/c-typeck.c:9619 cp/typeck.c:8654
#, gcc-internal-format
msgid "function declared %<noreturn%> has a %<return%> statement"
msgstr ""
-#: c/c-typeck.c:9616 cp/cp-array-notation.c:1087
+#: c/c-typeck.c:9629 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:9623 cp/typeck.c:8665
+#: c/c-typeck.c:9636 cp/typeck.c:8645
#, gcc-internal-format
msgid "use of %<_Cilk_spawn%> in a return statement is not allowed"
msgstr ""
-#: c/c-typeck.c:9651 c/c-typeck.c:9655
+#: c/c-typeck.c:9664 c/c-typeck.c:9668
#, gcc-internal-format
msgid "%<return%> with no value, in function returning non-void"
msgstr ""
-#: c/c-typeck.c:9669
+#: c/c-typeck.c:9682
#, gcc-internal-format
msgid "%<return%> with a value, in function returning void"
msgstr ""
-#: c/c-typeck.c:9672
+#: c/c-typeck.c:9685
#, gcc-internal-format
msgid "ISO C forbids %<return%> with expression, in function returning void"
msgstr ""
-#: c/c-typeck.c:9748
+#: c/c-typeck.c:9761
#, gcc-internal-format
msgid "function returns address of label"
msgstr ""
-#: c/c-typeck.c:9839 cp/semantics.c:1143
+#: c/c-typeck.c:9852 cp/semantics.c:1146
#, gcc-internal-format
msgid "switch quantity not an integer"
msgstr ""
-#: c/c-typeck.c:9864
+#: c/c-typeck.c:9877
#, gcc-internal-format
msgid "%<long%> switch expression not converted to %<int%> in ISO C"
msgstr ""
-#: c/c-typeck.c:9902 c/c-typeck.c:9910
+#: c/c-typeck.c:9915 c/c-typeck.c:9923
#, gcc-internal-format
msgid "case label is not an integer constant expression"
msgstr ""
-#: c/c-typeck.c:9916 cp/parser.c:10618
+#: c/c-typeck.c:9929 cp/parser.c:10624
#, gcc-internal-format
msgid "case label not within a switch statement"
msgstr ""
-#: c/c-typeck.c:9918
+#: c/c-typeck.c:9931
#, gcc-internal-format
msgid "%<default%> label not within a switch statement"
msgstr ""
-#: c/c-typeck.c:9990
+#: c/c-typeck.c:10003
#, gcc-internal-format
msgid "rank-mismatch between if-statement%'s condition and the then-block"
msgstr ""
-#: c/c-typeck.c:9996
+#: c/c-typeck.c:10009
#, gcc-internal-format
msgid "rank-mismatch between if-statement%'s condition and the else-block"
msgstr ""
-#: c/c-typeck.c:10032 cp/parser.c:10949
+#: c/c-typeck.c:10045 cp/parser.c:10955
#, gcc-internal-format
msgid "suggest explicit braces to avoid ambiguous %<else%>"
msgstr ""
-#: c/c-typeck.c:10154 cp/parser.c:11725
+#: c/c-typeck.c:10167 cp/parser.c:11745
#, gcc-internal-format
msgid "break statement not within loop or switch"
msgstr ""
-#: c/c-typeck.c:10156 cp/parser.c:11751
+#: c/c-typeck.c:10169 cp/parser.c:11771
#, gcc-internal-format
msgid "continue statement not within a loop"
msgstr ""
-#: c/c-typeck.c:10161 cp/parser.c:11738
+#: c/c-typeck.c:10174 cp/parser.c:11758
#, gcc-internal-format
msgid "break statement used with OpenMP for loop"
msgstr ""
-#: c/c-typeck.c:10166
+#: c/c-typeck.c:10179
#, gcc-internal-format
msgid "break statement within %<#pragma simd%> loop body"
msgstr ""
-#: c/c-typeck.c:10168 cp/parser.c:11755
+#: c/c-typeck.c:10181 cp/parser.c:11775
#, gcc-internal-format
msgid "continue statement within %<#pragma simd%> loop body"
msgstr ""
-#: c/c-typeck.c:10194 cp/cp-gimplify.c:443
+#: c/c-typeck.c:10207 cp/cp-gimplify.c:444
#, gcc-internal-format
msgid "statement with no effect"
msgstr ""
-#: c/c-typeck.c:10238
+#: c/c-typeck.c:10251
#, gcc-internal-format
msgid "expression statement has incomplete type"
msgstr ""
-#: c/c-typeck.c:11039 c/c-typeck.c:11206 cp/typeck.c:4806
+#: c/c-typeck.c:11052 c/c-typeck.c:11209 cp/typeck.c:4790
#, gcc-internal-format
msgid "comparing vectors with different element types"
msgstr ""
-#: c/c-typeck.c:11046 c/c-typeck.c:11213 cp/typeck.c:4818
+#: c/c-typeck.c:11059 c/c-typeck.c:11216 cp/typeck.c:4802
#, gcc-internal-format
msgid "comparing vectors with different number of elements"
msgstr ""
-#: c/c-typeck.c:11077 cp/typeck.c:4488
+#: c/c-typeck.c:11090 cp/typeck.c:4528
#, gcc-internal-format
msgid "comparing floating point with == or != is unsafe"
msgstr ""
-#: c/c-typeck.c:11091 c/c-typeck.c:11116 cp/typeck.c:4509 cp/typeck.c:4553
-#, gcc-internal-format
-msgid "nonnull argument %qD compared to NULL"
-msgstr ""
-
-#: c/c-typeck.c:11099 c/c-typeck.c:11124
+#: c/c-typeck.c:11107 c/c-typeck.c:11127
#, 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:11105 c/c-typeck.c:11130
+#: c/c-typeck.c:11113 c/c-typeck.c:11133
#, 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:11151 c/c-typeck.c:11271
+#: c/c-typeck.c:11154 c/c-typeck.c:11274
#, gcc-internal-format
msgid "comparison of pointers to disjoint address spaces"
msgstr ""
-#: c/c-typeck.c:11158 c/c-typeck.c:11164
+#: c/c-typeck.c:11161 c/c-typeck.c:11167
#, gcc-internal-format
msgid "ISO C forbids comparison of %<void *%> with function pointer"
msgstr ""
-#: c/c-typeck.c:11171 c/c-typeck.c:11281
+#: c/c-typeck.c:11174 c/c-typeck.c:11284
#, gcc-internal-format
msgid "comparison of distinct pointer types lacks a cast"
msgstr ""
-#: c/c-typeck.c:11183 c/c-typeck.c:11188 c/c-typeck.c:11307 c/c-typeck.c:11312
+#: c/c-typeck.c:11186 c/c-typeck.c:11191 c/c-typeck.c:11310 c/c-typeck.c:11315
#, gcc-internal-format
msgid "comparison between pointer and integer"
msgstr ""
-#: c/c-typeck.c:11259
+#: c/c-typeck.c:11262
#, gcc-internal-format
msgid "comparison of complete and incomplete pointers"
msgstr ""
-#: c/c-typeck.c:11261
+#: c/c-typeck.c:11264
#, gcc-internal-format
msgid "ISO C forbids ordered comparisons of pointers to functions"
msgstr ""
-#: c/c-typeck.c:11266
+#: c/c-typeck.c:11269
#, gcc-internal-format
msgid "ordered comparison of pointer with null pointer"
msgstr ""
-#: c/c-typeck.c:11289 c/c-typeck.c:11292 c/c-typeck.c:11299 c/c-typeck.c:11302
-#: cp/typeck.c:4869 cp/typeck.c:4876
+#: c/c-typeck.c:11292 c/c-typeck.c:11295 c/c-typeck.c:11302 c/c-typeck.c:11305
+#: cp/typeck.c:4853 cp/typeck.c:4860
#, gcc-internal-format
msgid "ordered comparison of pointer with integer zero"
msgstr ""
-#: c/c-typeck.c:11353 cp/typeck.c:4955
+#: c/c-typeck.c:11356 cp/typeck.c:4939
#, gcc-internal-format
msgid ""
"implicit conversion from %qT to %qT to match other operand of binary "
"expression"
msgstr ""
-#: c/c-typeck.c:11666
+#: c/c-typeck.c:11669
#, gcc-internal-format
msgid "used array that cannot be converted to pointer where scalar is required"
msgstr ""
-#: c/c-typeck.c:11670
+#: c/c-typeck.c:11673
#, gcc-internal-format
msgid "used struct type value where scalar is required"
msgstr ""
-#: c/c-typeck.c:11674
+#: c/c-typeck.c:11677
#, gcc-internal-format
msgid "used union type value where scalar is required"
msgstr ""
-#: c/c-typeck.c:11690
+#: c/c-typeck.c:11693
#, gcc-internal-format
msgid "used vector type where scalar is required"
msgstr ""
-#: c/c-typeck.c:11880 cp/semantics.c:8449
+#: c/c-typeck.c:11883 cp/semantics.c:8506
#, gcc-internal-format
msgid ""
"%<#pragma omp cancel must specify one of %<parallel%>, %<for%>, %<sections%> "
"or %<taskgroup%> clauses"
msgstr ""
-#: c/c-typeck.c:11919 cp/semantics.c:8486
+#: c/c-typeck.c:11922 cp/semantics.c:8543
#, gcc-internal-format
msgid ""
"%<#pragma omp cancellation point must specify one of %<parallel%>, %<for%>, "
"%<sections%> or %<taskgroup%> clauses"
msgstr ""
-#: c/c-typeck.c:11969 c/c-typeck.c:13075 cp/semantics.c:4458
-#: cp/semantics.c:6572
+#: c/c-typeck.c:11972 c/c-typeck.c:13078 cp/semantics.c:4507
+#: cp/semantics.c:6621
#, gcc-internal-format
msgid "bit-field %qE in %qs clause"
msgstr ""
-#: c/c-typeck.c:11978 c/c-typeck.c:13092 cp/semantics.c:4467
-#: cp/semantics.c:6589
+#: c/c-typeck.c:11981 c/c-typeck.c:13095 cp/semantics.c:4516
+#: cp/semantics.c:6638
#, gcc-internal-format
msgid "%qE is a member of a union"
msgstr ""
-#: c/c-typeck.c:11988 cp/semantics.c:4479 cp/semantics.c:6612
+#: c/c-typeck.c:11991 cp/semantics.c:4528 cp/semantics.c:6661
#, gcc-internal-format
msgid "%qD is not a variable in %qs clause"
msgstr ""
-#: c/c-typeck.c:11992 c/c-typeck.c:13109 cp/semantics.c:4483
-#: cp/semantics.c:6615
+#: c/c-typeck.c:11995 c/c-typeck.c:13112 cp/semantics.c:4532
+#: cp/semantics.c:6664
#, gcc-internal-format
msgid "%qE is not a variable in %qs clause"
msgstr ""
-#: c/c-typeck.c:12000 c/c-typeck.c:13116 c/c-typeck.c:13201
-#: cp/semantics.c:4500 cp/semantics.c:6621 cp/semantics.c:6767
+#: c/c-typeck.c:12003 c/c-typeck.c:13119 c/c-typeck.c:13204
+#: cp/semantics.c:4549 cp/semantics.c:6670 cp/semantics.c:6824
#, gcc-internal-format
msgid "%qD is threadprivate variable in %qs clause"
msgstr ""
-#: c/c-typeck.c:12022 cp/semantics.c:4531
+#: c/c-typeck.c:12025 cp/semantics.c:4580
#, gcc-internal-format
msgid "low bound %qE of array section does not have integral type"
msgstr ""
-#: c/c-typeck.c:12029 cp/semantics.c:4538
+#: c/c-typeck.c:12032 cp/semantics.c:4587
#, gcc-internal-format
msgid "length %qE of array section does not have integral type"
msgstr ""
-#: c/c-typeck.c:12056 c/c-typeck.c:12120 c/c-typeck.c:12378
-#: cp/semantics.c:4574 cp/semantics.c:4638
+#: c/c-typeck.c:12059 c/c-typeck.c:12123 c/c-typeck.c:12381
+#: cp/semantics.c:4623 cp/semantics.c:4687
#, gcc-internal-format
msgid "zero length array section in %qs clause"
msgstr ""
-#: c/c-typeck.c:12075 cp/semantics.c:4593
+#: c/c-typeck.c:12078 cp/semantics.c:4642
#, gcc-internal-format
msgid "for unknown bound array type length expression must be specified"
msgstr ""
-#: c/c-typeck.c:12083 cp/semantics.c:4601
+#: c/c-typeck.c:12086 cp/semantics.c:4650
#, gcc-internal-format
msgid "negative low bound in array section in %qs clause"
msgstr ""
-#: c/c-typeck.c:12092 c/c-typeck.c:12202 cp/semantics.c:4610
-#: cp/semantics.c:4720
+#: c/c-typeck.c:12095 c/c-typeck.c:12205 cp/semantics.c:4659
+#: cp/semantics.c:4769
#, gcc-internal-format
msgid "negative length in array section in %qs clause"
msgstr ""
-#: c/c-typeck.c:12109 cp/semantics.c:4627
+#: c/c-typeck.c:12112 cp/semantics.c:4676
#, gcc-internal-format
msgid "low bound %qE above array section size in %qs clause"
msgstr ""
-#: c/c-typeck.c:12146 cp/semantics.c:4664
+#: c/c-typeck.c:12149 cp/semantics.c:4713
#, gcc-internal-format
msgid "length %qE above array section size in %qs clause"
msgstr ""
-#: c/c-typeck.c:12161 cp/semantics.c:4679
+#: c/c-typeck.c:12164 cp/semantics.c:4728
#, gcc-internal-format
msgid "high bound %qE above array section size in %qs clause"
msgstr ""
-#: c/c-typeck.c:12194 cp/semantics.c:4712
+#: c/c-typeck.c:12197 cp/semantics.c:4761
#, gcc-internal-format
msgid "for pointer type length expression must be specified"
msgstr ""
-#: c/c-typeck.c:12212 c/c-typeck.c:12321 cp/semantics.c:4730
-#: cp/semantics.c:4842
+#: c/c-typeck.c:12215 c/c-typeck.c:12324 cp/semantics.c:4779
+#: cp/semantics.c:4891
#, gcc-internal-format
msgid "array section is not contiguous in %qs clause"
msgstr ""
-#: c/c-typeck.c:12220 cp/semantics.c:4738
+#: c/c-typeck.c:12223 cp/semantics.c:4787
#, gcc-internal-format
msgid "%qE does not have pointer or array type"
msgstr ""
-#: c/c-typeck.c:12598 c/c-typeck.c:12608
+#: c/c-typeck.c:12601 c/c-typeck.c:12611
#, gcc-internal-format
msgid "%qD in %<reduction%> clause is a zero size array"
msgstr ""
-#: c/c-typeck.c:12666
+#: c/c-typeck.c:12669
#, gcc-internal-format
msgid "%qE has invalid type for %<reduction(%s)%>"
msgstr ""
-#: c/c-typeck.c:12675 cp/semantics.c:5649
+#: c/c-typeck.c:12678 cp/semantics.c:5698
#, gcc-internal-format
msgid "user defined reduction not found for %qE"
msgstr ""
-#: c/c-typeck.c:12763
+#: c/c-typeck.c:12766
#, gcc-internal-format
msgid "variable length element type in array %<reduction%> clause"
msgstr ""
-#: c/c-typeck.c:12781 c/c-typeck.c:13259 cp/semantics.c:7083
+#: c/c-typeck.c:12784 c/c-typeck.c:13262 cp/semantics.c:7140
#, gcc-internal-format
msgid "%<nowait%> clause must not be used together with %<copyprivate%>"
msgstr ""
-#: c/c-typeck.c:12793 cp/semantics.c:7123
+#: c/c-typeck.c:12796 cp/semantics.c:7180
#, gcc-internal-format
msgid "%qE must be %<threadprivate%> for %<copyin%>"
msgstr ""
-#: c/c-typeck.c:12807 cp/semantics.c:5811
+#: c/c-typeck.c:12810 cp/semantics.c:5860
#, gcc-internal-format
msgid ""
"modifier should not be specified in %<linear%> clause on %<simd%> or %<for%> "
"constructs"
msgstr ""
-#: c/c-typeck.c:12815
+#: c/c-typeck.c:12818
#, gcc-internal-format
msgid ""
"linear clause applied to non-integral non-pointer variable with type %qT"
msgstr ""
-#: c/c-typeck.c:12835 cp/semantics.c:5878
+#: c/c-typeck.c:12838 cp/semantics.c:5927
#, gcc-internal-format
msgid "%<linear%> clause step %qE is neither constant nor a parameter"
msgstr ""
-#: c/c-typeck.c:12865 c/c-typeck.c:13194 cp/semantics.c:5962
-#: cp/semantics.c:6760
+#: c/c-typeck.c:12868 c/c-typeck.c:13197 cp/semantics.c:6011
+#: cp/semantics.c:6817
#, gcc-internal-format
msgid "%qE is not a variable in clause %qs"
msgstr ""
-#: c/c-typeck.c:12874 c/c-typeck.c:12901 c/c-typeck.c:12927
+#: c/c-typeck.c:12877 c/c-typeck.c:12904 c/c-typeck.c:12930
#, gcc-internal-format
msgid "%qE appears more than once in data clauses"
msgstr ""
-#: c/c-typeck.c:12880 c/c-typeck.c:12906 c/c-typeck.c:13150 c/c-typeck.c:13167
-#: cp/semantics.c:5976 cp/semantics.c:6028 cp/semantics.c:6666
-#: cp/semantics.c:6683
+#: c/c-typeck.c:12883 c/c-typeck.c:12909 c/c-typeck.c:13153 c/c-typeck.c:13170
+#: cp/semantics.c:6025 cp/semantics.c:6077 cp/semantics.c:6723
+#: cp/semantics.c:6740
#, gcc-internal-format
msgid "%qD appears both in data and map clauses"
msgstr ""
-#: c/c-typeck.c:12894 cp/semantics.c:6017
+#: c/c-typeck.c:12897 cp/semantics.c:6066
#, gcc-internal-format
msgid "%qE is not a variable in clause %<firstprivate%>"
msgstr ""
-#: c/c-typeck.c:12920 cp/semantics.c:6056
+#: c/c-typeck.c:12923 cp/semantics.c:6105
#, gcc-internal-format
msgid "%qE is not a variable in clause %<lastprivate%>"
msgstr ""
-#: c/c-typeck.c:12939 cp/semantics.c:6406
+#: c/c-typeck.c:12942 cp/semantics.c:6455
#, gcc-internal-format
msgid "%qE is not a variable in %<aligned%> clause"
msgstr ""
-#: c/c-typeck.c:12946
+#: c/c-typeck.c:12949
#, gcc-internal-format
msgid "%qE in %<aligned%> clause is neither a pointer nor an array"
msgstr ""
-#: c/c-typeck.c:12953
+#: c/c-typeck.c:12956
#, gcc-internal-format
msgid "%qE appears more than once in %<aligned%> clauses"
msgstr ""
-#: c/c-typeck.c:13008 cp/semantics.c:6488
+#: c/c-typeck.c:13011 cp/semantics.c:6537
#, gcc-internal-format
msgid "%qE is not a variable in %<depend%> clause"
msgstr ""
-#: c/c-typeck.c:13030 cp/semantics.c:6519
+#: c/c-typeck.c:13033 cp/semantics.c:6568
#, gcc-internal-format
msgid "array section does not have mappable type in %qs clause"
msgstr ""
-#: c/c-typeck.c:13047 c/c-typeck.c:13159 cp/semantics.c:6536
-#: cp/semantics.c:6675
+#: c/c-typeck.c:13050 c/c-typeck.c:13162 cp/semantics.c:6585
+#: cp/semantics.c:6732
#, gcc-internal-format
msgid "%qD appears more than once in motion clauses"
msgstr ""
-#: c/c-typeck.c:13050 c/c-typeck.c:13161 cp/semantics.c:6539
-#: cp/semantics.c:6677
+#: c/c-typeck.c:13053 c/c-typeck.c:13164 cp/semantics.c:6588
+#: cp/semantics.c:6734
#, gcc-internal-format
msgid "%qD appears more than once in map clauses"
msgstr ""
-#: c/c-typeck.c:13082 cp/semantics.c:6579
+#: c/c-typeck.c:13085 cp/semantics.c:6628
#, gcc-internal-format
msgid "%qE does not have a mappable type in %qs clause"
msgstr ""
-#: c/c-typeck.c:13135 c/c-typeck.c:13208 cp/semantics.c:6651
-#: cp/semantics.c:6774
+#: c/c-typeck.c:13138 c/c-typeck.c:13211 cp/semantics.c:6700
+#: cp/semantics.c:6831
#, gcc-internal-format
msgid "%qD does not have a mappable type in %qs clause"
msgstr ""
-#: c/c-typeck.c:13145 cp/semantics.c:5970 cp/semantics.c:6023
-#: cp/semantics.c:6062 cp/semantics.c:6661
+#: c/c-typeck.c:13148 cp/semantics.c:6019 cp/semantics.c:6072
+#: cp/semantics.c:6111 cp/semantics.c:6718
#, gcc-internal-format
msgid "%qD appears more than once in data clauses"
msgstr ""
-#: c/c-typeck.c:13189 cp/semantics.c:6754
+#: c/c-typeck.c:13192 cp/semantics.c:6811
#, gcc-internal-format
msgid "%qE is neither a variable nor a function name in clause %qs"
msgstr ""
-#: c/c-typeck.c:13217 cp/semantics.c:6783
+#: c/c-typeck.c:13220 cp/semantics.c:6840
#, gcc-internal-format
msgid "%qE appears more than once on the same %<declare target%> directive"
msgstr ""
-#: c/c-typeck.c:13231 cp/semantics.c:6798
+#: c/c-typeck.c:13234 cp/semantics.c:6855
#, gcc-internal-format
msgid "%qD is not an argument in %<uniform%> clause"
msgstr ""
-#: c/c-typeck.c:13234 cp/semantics.c:6800
+#: c/c-typeck.c:13237 cp/semantics.c:6857
#, gcc-internal-format
msgid "%qE is not an argument in %<uniform%> clause"
msgstr ""
-#: c/c-typeck.c:13249
+#: c/c-typeck.c:13252
#, gcc-internal-format
msgid "%qs variable is neither a pointer nor an array"
msgstr ""
-#: c/c-typeck.c:13324 cp/semantics.c:6216
+#: c/c-typeck.c:13327 cp/semantics.c:6265
#, gcc-internal-format
msgid "%<nonmonotonic%> modifier specified for %qs schedule kind"
msgstr ""
-#: c/c-typeck.c:13355 cp/semantics.c:6975
+#: c/c-typeck.c:13358 cp/semantics.c:7032
#, gcc-internal-format
msgid "%<inbranch%> clause is incompatible with %<notinbranch%>"
msgstr ""
-#: c/c-typeck.c:13405 cp/semantics.c:7166
+#: c/c-typeck.c:13408 cp/semantics.c:7223
#, gcc-internal-format
msgid "%qE is predetermined %qs for %qs"
msgstr ""
-#: c/c-typeck.c:13425 cp/semantics.c:7057
+#: c/c-typeck.c:13428 cp/semantics.c:7114
#, gcc-internal-format
msgid "%<simdlen%> clause value is bigger than %<safelen%> clause value"
msgstr ""
-#: c/c-typeck.c:13437 cp/semantics.c:7070
+#: c/c-typeck.c:13440 cp/semantics.c:7127
#, gcc-internal-format
msgid ""
"%<nonmonotonic%> schedule modifier specified together with %<ordered%> clause"
msgstr ""
-#: c/c-typeck.c:13455 cp/semantics.c:7037
+#: c/c-typeck.c:13458 cp/semantics.c:7094
#, gcc-internal-format
msgid ""
"%<linear%> clause step is a parameter %qD not specified in %<uniform%> clause"
msgstr ""
-#: c/c-typeck.c:13583
+#: c/c-typeck.c:13586
#, gcc-internal-format
msgid "cannot use %<va_arg%> with reverse storage order"
msgstr ""
-#: c/c-typeck.c:13588
+#: c/c-typeck.c:13591
#, gcc-internal-format
msgid "second argument to %<va_arg%> is of incomplete type %qT"
msgstr ""
-#: c/c-typeck.c:13594
+#: c/c-typeck.c:13597
#, gcc-internal-format
msgid "C++ requires promoted type, not enum type, in %<va_arg%>"
msgstr ""
#. A bad conversion for 'this' must be discarding cv-quals.
-#: cp/call.c:3311
+#: cp/call.c:3313
#, gcc-internal-format
msgid " passing %qT as %<this%> argument discards qualifiers"
msgstr ""
-#: cp/call.c:3315
+#: cp/call.c:3317
#, gcc-internal-format
msgid " no known conversion for implicit %<this%> parameter from %qT to %qT"
msgstr ""
-#: cp/call.c:3322
+#: cp/call.c:3324
#, 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:3329
+#: cp/call.c:3331
#, gcc-internal-format
msgid " no known conversion from %qT to %qT"
msgstr ""
-#: cp/call.c:3332
+#: cp/call.c:3334
#, gcc-internal-format
msgid " no known conversion for argument %d from %qT to %qT"
msgstr ""
-#: cp/call.c:3343 cp/pt.c:6088
+#: cp/call.c:3345 cp/pt.c:6094
#, 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:3368
+#: cp/call.c:3370
#, gcc-internal-format
msgid "%s%D(%T, %T, %T) <built-in>"
msgstr ""
-#: cp/call.c:3373
+#: cp/call.c:3375
#, gcc-internal-format
msgid "%s%D(%T, %T) <built-in>"
msgstr ""
-#: cp/call.c:3377
+#: cp/call.c:3379
#, gcc-internal-format
msgid "%s%D(%T) <built-in>"
msgstr ""
-#: cp/call.c:3381
+#: cp/call.c:3383
#, gcc-internal-format
msgid "%s%T <conversion>"
msgstr ""
-#: cp/call.c:3383
+#: cp/call.c:3385
#, gcc-internal-format
msgid "%s%#D <near match>"
msgstr ""
-#: cp/call.c:3385
+#: cp/call.c:3387
#, gcc-internal-format
msgid "%s%#D <deleted>"
msgstr ""
-#: cp/call.c:3387
+#: cp/call.c:3389
#, gcc-internal-format
msgid "%s%#D"
msgstr ""
-#: cp/call.c:3406
+#: cp/call.c:3408
#, gcc-internal-format
msgid ""
" return type %qT of explicit conversion function cannot be converted to %qT "
"with a qualification conversion"
msgstr ""
-#: cp/call.c:3412
+#: cp/call.c:3414
#, 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:3423
+#: cp/call.c:3425
#, gcc-internal-format
msgid ""
" substitution of deduced template arguments resulted in errors seen above"
msgstr ""
#. Re-run template unification with diagnostics.
-#: cp/call.c:3428
+#: cp/call.c:3430
#, gcc-internal-format
msgid " template argument deduction/substitution failed:"
msgstr ""
-#: cp/call.c:3442
+#: cp/call.c:3444
#, gcc-internal-format
msgid ""
" a constructor taking a single argument of its own class type is invalid"
msgstr ""
-#: cp/call.c:3806
+#: cp/call.c:3808
#, gcc-internal-format
msgid "conversion from %qT to %qT is ambiguous"
msgstr ""
-#: cp/call.c:3933
+#: cp/call.c:3935
#, gcc-internal-format
msgid ""
"conversion from %qT to %qT not considered for non-type template argument"
msgstr ""
-#: cp/call.c:4051
+#: cp/call.c:4053
#, gcc-internal-format
msgid "no matching function for call to %<%D(%A)%>"
msgstr ""
-#: cp/call.c:4054
+#: cp/call.c:4056
#, 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:4289
+#: cp/call.c:4291
#, gcc-internal-format
msgid ""
"pointer-to-member function %E cannot be called without an object; consider "
"using .* or ->*"
msgstr ""
-#: cp/call.c:4360
+#: cp/call.c:4362
#, gcc-internal-format
msgid "no match for call to %<(%T) (%A)%>"
msgstr ""
-#: cp/call.c:4373
+#: cp/call.c:4375
#, gcc-internal-format
msgid "call of %<(%T) (%A)%> is ambiguous"
msgstr ""
-#: cp/call.c:4421
+#: cp/call.c:4423
#, gcc-internal-format
msgid "ambiguous overload for "
msgstr ""
-#: cp/call.c:4422
+#: cp/call.c:4424
#, gcc-internal-format
msgid "no match for "
msgstr ""
-#: cp/call.c:4425
+#: cp/call.c:4427
#, gcc-internal-format
msgid " (operand types are %qT, %qT, and %qT)"
msgstr ""
-#: cp/call.c:4427
+#: cp/call.c:4429
#, gcc-internal-format
msgid " (operand types are %qT and %qT)"
msgstr ""
-#: cp/call.c:4429
+#: cp/call.c:4431
#, gcc-internal-format
msgid " (operand type is %qT)"
msgstr ""
-#: cp/call.c:4449
+#: cp/call.c:4451
#, gcc-internal-format
msgid "ternary %<operator?:%>"
msgstr ""
-#: cp/call.c:4453
+#: cp/call.c:4455
#, gcc-internal-format
msgid "ternary %<operator?:%> in %<%E ? %E : %E%>"
msgstr ""
-#: cp/call.c:4462 cp/call.c:4493 cp/call.c:4502
+#: cp/call.c:4464 cp/call.c:4495 cp/call.c:4504
#, gcc-internal-format
msgid "%<operator%s%>"
msgstr ""
-#: cp/call.c:4465
+#: cp/call.c:4467
#, gcc-internal-format
msgid "%<operator%s%> in %<%E%s%>"
msgstr ""
-#: cp/call.c:4472
+#: cp/call.c:4474
#, gcc-internal-format
msgid "%<operator[]%>"
msgstr ""
-#: cp/call.c:4475
+#: cp/call.c:4477
#, gcc-internal-format
msgid "%<operator[]%> in %<%E[%E]%>"
msgstr ""
-#: cp/call.c:4483
+#: cp/call.c:4485
#, gcc-internal-format
msgid "%qs"
msgstr ""
-#: cp/call.c:4486
+#: cp/call.c:4488
#, gcc-internal-format
msgid "%qs in %<%s %E%>"
msgstr ""
-#: cp/call.c:4496
+#: cp/call.c:4498
#, gcc-internal-format
msgid "%<operator%s%> in %<%E %s %E%>"
msgstr ""
-#: cp/call.c:4505
+#: cp/call.c:4507
#, gcc-internal-format
msgid "%<operator%s%> in %<%s%E%>"
msgstr ""
-#: cp/call.c:4614
+#: cp/call.c:4616
#, gcc-internal-format
msgid "ISO C++ forbids omitting the middle term of a ?: expression"
msgstr ""
-#: cp/call.c:4672
+#: cp/call.c:4675
#, 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:4749
+#: cp/call.c:4752
#, gcc-internal-format
msgid "incompatible vector types in conditional expression: %qT, %qT and %qT"
msgstr ""
-#: cp/call.c:4839
+#: cp/call.c:4842
#, 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:4844
+#: cp/call.c:4847
#, 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:4895 cp/call.c:5011 cp/call.c:5154
+#: cp/call.c:4898 cp/call.c:5014 cp/call.c:5157
#, gcc-internal-format
msgid "operands to ?: have different types %qT and %qT"
msgstr ""
-#: cp/call.c:4898
+#: cp/call.c:4901
#, gcc-internal-format
msgid " and each type can be converted to the other"
msgstr ""
-#: cp/call.c:5099
+#: cp/call.c:5102
#, gcc-internal-format
msgid "enumeral mismatch in conditional expression: %qT vs %qT"
msgstr ""
-#: cp/call.c:5111
+#: cp/call.c:5114
#, gcc-internal-format
msgid "enumeral and non-enumeral type in conditional expression"
msgstr ""
-#: cp/call.c:5574
+#: cp/call.c:5577
#, gcc-internal-format
msgid "no %<%D(int)%> declared for postfix %qs, trying prefix operator instead"
msgstr ""
-#: cp/call.c:5576
+#: cp/call.c:5579
#, gcc-internal-format
msgid "no %<%D(int)%> declared for postfix %qs"
msgstr ""
-#: cp/call.c:5682
+#: cp/call.c:5685
#, gcc-internal-format
msgid "comparison between %q#T and %q#T"
msgstr ""
-#: cp/call.c:5953
+#: cp/call.c:5956
#, gcc-internal-format
msgid ""
"exception cleanup for this placement new selects non-placement operator "
"delete"
msgstr ""
-#: cp/call.c:5956
+#: cp/call.c:5959
#, gcc-internal-format
msgid ""
"%qD is a usual (non-placement) deallocation function in C++14 (or with -"
"fsized-deallocation)"
msgstr ""
-#: cp/call.c:5991
+#: cp/call.c:5994
#, gcc-internal-format
msgid "%qD is a usual (non-placement) deallocation function"
msgstr ""
-#: cp/call.c:6108
+#: cp/call.c:6111
#, gcc-internal-format
msgid "no corresponding deallocation function for %qD"
msgstr ""
-#: cp/call.c:6114
+#: cp/call.c:6117
#, gcc-internal-format
msgid "no suitable %<operator %s%> for %qT"
msgstr ""
-#: cp/call.c:6136
+#: cp/call.c:6139
#, gcc-internal-format
msgid "%q#D is private within this context"
msgstr ""
-#: cp/call.c:6138
+#: cp/call.c:6141
#, gcc-internal-format
msgid "declared private here"
msgstr ""
-#: cp/call.c:6142
+#: cp/call.c:6145
#, gcc-internal-format
msgid "%q#D is protected within this context"
msgstr ""
-#: cp/call.c:6144
+#: cp/call.c:6147
#, gcc-internal-format
msgid "declared protected here"
msgstr ""
-#: cp/call.c:6148
+#: cp/call.c:6151
#, gcc-internal-format
msgid "%q#D is inaccessible within this context"
msgstr ""
-#: cp/call.c:6201
+#: cp/call.c:6204
#, gcc-internal-format
msgid "passing NULL to non-pointer argument %P of %qD"
msgstr ""
-#: cp/call.c:6205
+#: cp/call.c:6208
#, gcc-internal-format
msgid "converting to non-pointer type %qT from NULL"
msgstr ""
-#: cp/call.c:6214
+#: cp/call.c:6217
#, gcc-internal-format
msgid "converting %<false%> to pointer type for argument %P of %qD"
msgstr ""
-#: cp/call.c:6218
+#: cp/call.c:6221
#, gcc-internal-format
msgid "converting %<false%> to pointer type %qT"
msgstr ""
-#: cp/call.c:6281
+#: cp/call.c:6284
#, gcc-internal-format
msgid "too many braces around initializer for %qT"
msgstr ""
-#: cp/call.c:6292
+#: cp/call.c:6295
#, gcc-internal-format
msgid "converting to %qT from %qT requires direct-initialization"
msgstr ""
-#: cp/call.c:6300
+#: cp/call.c:6303
#, gcc-internal-format
msgid "invalid user-defined conversion from %qT to %qT"
msgstr ""
-#: cp/call.c:6317 cp/call.c:6341 cp/call.c:6459 cp/call.c:6551 cp/call.c:6593
-#: cp/call.c:6621
+#: cp/call.c:6320 cp/call.c:6344 cp/call.c:6462 cp/call.c:6554 cp/call.c:6596
+#: cp/call.c:6624
#, gcc-internal-format
msgid " initializing argument %P of %qD"
msgstr ""
-#: cp/call.c:6337 cp/cvt.c:224
+#: cp/call.c:6340 cp/cvt.c:224
#, gcc-internal-format
msgid "invalid conversion from %qT to %qT"
msgstr ""
-#: cp/call.c:6371 cp/call.c:6378
+#: cp/call.c:6374 cp/call.c:6381
#, gcc-internal-format
msgid ""
"converting to %qT from initializer list would use explicit constructor %qD"
msgstr ""
-#: cp/call.c:6374
+#: cp/call.c:6377
#, gcc-internal-format
msgid "in C++11 and above a default constructor can be explicit"
msgstr ""
-#: cp/call.c:6607
+#: cp/call.c:6610
#, gcc-internal-format
msgid "cannot bind %qT lvalue to %qT"
msgstr ""
-#: cp/call.c:6611 cp/call.c:9934
+#: cp/call.c:6614 cp/call.c:9945
#, gcc-internal-format
msgid ""
"invalid initialization of non-const reference of type %qT from an rvalue of "
"type %qT"
msgstr ""
-#: cp/call.c:6614
+#: cp/call.c:6617
#, gcc-internal-format
msgid "binding %qT to reference of type %qT discards qualifiers"
msgstr ""
-#: cp/call.c:6650
+#: cp/call.c:6653
#, gcc-internal-format
msgid "cannot bind bitfield %qE to %qT"
msgstr ""
-#: cp/call.c:6653 cp/call.c:6670
+#: cp/call.c:6656 cp/call.c:6673
#, gcc-internal-format
msgid "cannot bind packed field %qE to %qT"
msgstr ""
-#: cp/call.c:6656
+#: cp/call.c:6659
#, gcc-internal-format
msgid "cannot bind rvalue %qE to %qT"
msgstr ""
-#: cp/call.c:6783 cp/cvt.c:1737
+#: cp/call.c:6786 cp/cvt.c:1738
#, gcc-internal-format
msgid ""
"scoped enum %qT passed through ... as %qT before -fabi-version=6, %qT after"
msgstr ""
-#: cp/call.c:6824
+#: cp/call.c:6827
#, gcc-internal-format
msgid ""
"passing objects of non-trivially-copyable type %q#T through %<...%> is "
"conditionally supported"
msgstr ""
-#: cp/call.c:6855
+#: cp/call.c:6858
#, gcc-internal-format
msgid "cannot receive reference type %qT through %<...%>"
msgstr ""
-#: cp/call.c:6865
+#: cp/call.c:6868
#, gcc-internal-format
msgid ""
"receiving objects of non-trivially-copyable type %q#T through %<...%> is "
"conditionally-supported"
msgstr ""
-#: cp/call.c:6925
+#: cp/call.c:6928
#, gcc-internal-format
msgid "recursive evaluation of default argument for %q#D"
msgstr ""
-#: cp/call.c:6934
+#: cp/call.c:6937
#, gcc-internal-format
msgid ""
"call to %qD uses the default argument for parameter %P, which is not yet "
"defined"
msgstr ""
-#: cp/call.c:7036
+#: cp/call.c:7039
#, gcc-internal-format
msgid "argument of function call might be a candidate for a format attribute"
msgstr ""
-#: cp/call.c:7083
+#: cp/call.c:7088
#, gcc-internal-format
msgid "use of multiversioned function without a default"
msgstr ""
-#: cp/call.c:7364
+#: cp/call.c:7369
#, gcc-internal-format
msgid "passing %qT as %<this%> argument discards qualifiers"
msgstr ""
-#: cp/call.c:7367 cp/call.c:7483 cp/call.c:9164 cp/name-lookup.c:5710
+#: cp/call.c:7372 cp/call.c:7488 cp/call.c:9175 cp/name-lookup.c:5728
#, gcc-internal-format
msgid " in call to %qD"
msgstr ""
-#: cp/call.c:7397
+#: cp/call.c:7402
#, gcc-internal-format
msgid "%qT is not an accessible base of %qT"
msgstr ""
-#: cp/call.c:7479
+#: cp/call.c:7484
#, gcc-internal-format
msgid "deducing %qT as %qT"
msgstr ""
-#: cp/call.c:7485
+#: cp/call.c:7490
#, gcc-internal-format
msgid " (you can disable this with -fno-deduce-init-list)"
msgstr ""
-#: cp/call.c:7851
+#: cp/call.c:7866
#, gcc-internal-format
msgid "could not find class$ field in java interface type %qT"
msgstr ""
-#: cp/call.c:8026
+#: cp/call.c:8037
#, gcc-internal-format
msgid "constructor delegates to itself"
msgstr ""
-#: cp/call.c:8116
+#: cp/call.c:8127
#, gcc-internal-format
msgid "call to non-function %qD"
msgstr ""
-#: cp/call.c:8162 cp/typeck.c:2775
+#: cp/call.c:8173 cp/pt.c:13654 cp/typeck.c:2783
#, gcc-internal-format
msgid "cannot call constructor %<%T::%D%> directly"
msgstr ""
-#: cp/call.c:8164
+#: cp/call.c:8175
#, gcc-internal-format
msgid "for a function-style cast, remove the redundant %<::%D%>"
msgstr ""
-#: cp/call.c:8294
+#: cp/call.c:8305
#, gcc-internal-format
msgid "no matching function for call to %<%T::operator %T(%A)%#V%>"
msgstr ""
-#: cp/call.c:8307
+#: cp/call.c:8318
#, gcc-internal-format
msgid "no matching function for call to %<%T::%s(%A)%#V%>"
msgstr ""
-#: cp/call.c:8333
+#: cp/call.c:8344
#, gcc-internal-format
msgid "no matching function for call to %<%s(%A)%>"
msgstr ""
-#: cp/call.c:8336
+#: cp/call.c:8347
#, gcc-internal-format
msgid "call of overloaded %<%s(%A)%> is ambiguous"
msgstr ""
-#: cp/call.c:8357
+#: cp/call.c:8368
#, gcc-internal-format
msgid "pure virtual %q#D called from non-static data member initializer"
msgstr ""
-#: cp/call.c:8383
+#: cp/call.c:8394
#, gcc-internal-format
msgid "cannot call member function %qD without object"
msgstr ""
-#: cp/call.c:9162
+#: cp/call.c:9173
#, gcc-internal-format
msgid "passing %qT chooses %qT over %qT"
msgstr ""
-#: cp/call.c:9222
+#: cp/call.c:9233
#, gcc-internal-format
msgid "choosing %qD over %qD"
msgstr ""
-#: cp/call.c:9223
+#: cp/call.c:9234
#, gcc-internal-format
msgid " for conversion from %qT to %qT"
msgstr ""
-#: cp/call.c:9226
+#: cp/call.c:9237
#, gcc-internal-format
msgid " because conversion sequence for the argument is better"
msgstr ""
-#: cp/call.c:9388
+#: cp/call.c:9399
#, gcc-internal-format
msgid "default argument mismatch in overload resolution"
msgstr ""
-#: cp/call.c:9392
+#: cp/call.c:9403
#, gcc-internal-format
msgid " candidate 1: %q+#F"
msgstr ""
-#: cp/call.c:9394
+#: cp/call.c:9405
#, gcc-internal-format
msgid " candidate 2: %q+#F"
msgstr ""
-#: cp/call.c:9439
+#: cp/call.c:9450
#, 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:9617
+#: cp/call.c:9628
#, gcc-internal-format
msgid "could not convert %qE from %qT to %qT"
msgstr ""
-#: cp/call.c:9811
+#: cp/call.c:9822
#, gcc-internal-format
msgid "a temporary bound to %qD only persists until the constructor exits"
msgstr ""
-#: cp/call.c:9938
+#: cp/call.c:9949
#, gcc-internal-format
msgid ""
"invalid initialization of reference of type %qT from expression of type %qT"
msgstr ""
-#: cp/class.c:305
+#: cp/class.c:323
#, 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:309
+#: cp/class.c:327
#, gcc-internal-format
msgid ""
"cannot convert from base class %qT to derived class %qT because the base is "
"virtual"
msgstr ""
-#: cp/class.c:316
+#: cp/class.c:334
#, 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:321
+#: cp/class.c:339
#, gcc-internal-format
msgid ""
"cannot convert from base class %qT to derived class %qT via virtual base %qT"
msgstr ""
-#: cp/class.c:1036
+#: cp/class.c:1054
#, gcc-internal-format
msgid "Java class %qT cannot have a destructor"
msgstr ""
-#: cp/class.c:1038
+#: cp/class.c:1056
#, gcc-internal-format
msgid "Java class %qT cannot have an implicit non-trivial destructor"
msgstr ""
-#: cp/class.c:1174
+#: cp/class.c:1192
#, gcc-internal-format
msgid "%q#D inherited from %qT"
msgstr ""
-#: cp/class.c:1177
+#: cp/class.c:1195
#, gcc-internal-format
msgid "conflicts with version inherited from %qT"
msgstr ""
-#: cp/class.c:1191
+#: cp/class.c:1209
#, gcc-internal-format
msgid "%q+#D cannot be overloaded"
msgstr ""
-#: cp/class.c:1192
+#: cp/class.c:1210
#, gcc-internal-format
msgid "with %q+#D"
msgstr ""
-#: cp/class.c:1265
+#: cp/class.c:1283
#, gcc-internal-format
msgid "conflicting access specifications for method %q+D, ignored"
msgstr ""
-#: cp/class.c:1268
+#: cp/class.c:1286
#, gcc-internal-format
msgid "conflicting access specifications for field %qE, ignored"
msgstr ""
-#: cp/class.c:1331 cp/class.c:1339
+#: cp/class.c:1349 cp/class.c:1357
#, gcc-internal-format
msgid "%q+D invalid in %q#T"
msgstr ""
-#: cp/class.c:1332
+#: cp/class.c:1350
#, gcc-internal-format
msgid " because of local method %q+#D with same name"
msgstr ""
-#: cp/class.c:1340
+#: cp/class.c:1358
#, gcc-internal-format
msgid " because of local member %q+#D with same name"
msgstr ""
-#: cp/class.c:1395
+#: cp/class.c:1413
#, gcc-internal-format
msgid "%qD inherits the %E ABI tag that %qT (used in its return type) has"
msgstr ""
-#: cp/class.c:1398 cp/class.c:1404 cp/class.c:1410 cp/class.c:1421
+#: cp/class.c:1416 cp/class.c:1422 cp/class.c:1428 cp/class.c:1439
#, gcc-internal-format
msgid "%qT declared here"
msgstr ""
-#: cp/class.c:1402
+#: cp/class.c:1420
#, gcc-internal-format
msgid "%qD inherits the %E ABI tag that %qT (used in its type) has"
msgstr ""
-#: cp/class.c:1408
+#: cp/class.c:1426
#, gcc-internal-format
msgid "%qT does not have the %E ABI tag that base %qT has"
msgstr ""
-#: cp/class.c:1415
+#: cp/class.c:1433
#, 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:1690
+#: cp/class.c:1717
#, gcc-internal-format
msgid "cannot derive from %<final%> base %qT in derived type %qT"
msgstr ""
-#: cp/class.c:2115
+#: cp/class.c:2163
#, gcc-internal-format
msgid "all member functions in class %qT are private"
msgstr ""
-#: cp/class.c:2127
+#: cp/class.c:2175
#, gcc-internal-format
msgid "%q#T only defines a private destructor and has no friends"
msgstr ""
-#: cp/class.c:2172
+#: cp/class.c:2220
#, gcc-internal-format
msgid "%q#T only defines private constructors and has no friends"
msgstr ""
-#: cp/class.c:2565
+#: cp/class.c:2613
#, gcc-internal-format
msgid "no unique final overrider for %qD in %qT"
msgstr ""
-#: cp/class.c:2926
+#: cp/class.c:2974
#, gcc-internal-format
msgid "%qD can be marked override"
msgstr ""
-#: cp/class.c:2938
+#: cp/class.c:2986
#, gcc-internal-format
msgid "%q+#D marked %<final%>, but is not virtual"
msgstr ""
-#: cp/class.c:2940
+#: cp/class.c:2988
#, gcc-internal-format
msgid "%q+#D marked %<override%>, but does not override"
msgstr ""
-#: cp/class.c:3010
+#: cp/class.c:3058
#, gcc-internal-format
msgid "%qD was hidden"
msgstr ""
-#: cp/class.c:3012
+#: cp/class.c:3060
#, gcc-internal-format
msgid " by %qD"
msgstr ""
-#: cp/class.c:3046 cp/decl2.c:1538
+#: cp/class.c:3094 cp/decl2.c:1538
#, gcc-internal-format
msgid "%q#D invalid; an anonymous union can only have non-static data members"
msgstr ""
-#: cp/class.c:3050
+#: cp/class.c:3098
#, gcc-internal-format
msgid "%q#D invalid; an anonymous struct can only have non-static data members"
msgstr ""
-#: cp/class.c:3062 cp/decl2.c:1545
+#: cp/class.c:3110 cp/decl2.c:1545
#, gcc-internal-format
msgid "private member %q#D in anonymous union"
msgstr ""
-#: cp/class.c:3065
+#: cp/class.c:3113
#, gcc-internal-format
msgid "private member %q#D in anonymous struct"
msgstr ""
-#: cp/class.c:3071 cp/decl2.c:1548
+#: cp/class.c:3119 cp/decl2.c:1548
#, gcc-internal-format
msgid "protected member %q#D in anonymous union"
msgstr ""
-#: cp/class.c:3074
+#: cp/class.c:3122
#, gcc-internal-format
msgid "protected member %q#D in anonymous struct"
msgstr ""
-#: cp/class.c:3253
+#: cp/class.c:3301
#, gcc-internal-format
msgid "the ellipsis in %qD is not inherited"
msgstr ""
-#: cp/class.c:3428
+#: cp/class.c:3476
#, gcc-internal-format
msgid "bit-field %q+#D with non-integral type"
msgstr ""
-#: cp/class.c:3444
+#: cp/class.c:3492
#, gcc-internal-format
msgid "bit-field %q+D width not an integer constant"
msgstr ""
-#: cp/class.c:3449
+#: cp/class.c:3497
#, gcc-internal-format
msgid "negative width in bit-field %q+D"
msgstr ""
-#: cp/class.c:3454
+#: cp/class.c:3502
#, gcc-internal-format
msgid "zero width for bit-field %q+D"
msgstr ""
-#: cp/class.c:3464
+#: cp/class.c:3512
#, gcc-internal-format
msgid "width of %qD exceeds its type"
msgstr ""
-#: cp/class.c:3469
+#: cp/class.c:3517
#, gcc-internal-format
msgid "%qD is too small to hold all values of %q#T"
msgstr ""
-#: cp/class.c:3529
+#: cp/class.c:3577
#, gcc-internal-format
msgid "member %q+#D with constructor not allowed in union"
msgstr ""
-#: cp/class.c:3532
+#: cp/class.c:3580
#, gcc-internal-format
msgid "member %q+#D with destructor not allowed in union"
msgstr ""
-#: cp/class.c:3534
+#: cp/class.c:3582
#, gcc-internal-format
msgid "member %q+#D with copy assignment operator not allowed in union"
msgstr ""
-#: cp/class.c:3538
+#: cp/class.c:3586
#, gcc-internal-format
msgid "unrestricted unions only available with -std=c++11 or -std=gnu++11"
msgstr ""
-#: cp/class.c:3575
+#: cp/class.c:3623
#, gcc-internal-format
msgid "multiple fields in union %qT initialized"
msgstr ""
-#: cp/class.c:3663
+#: cp/class.c:3711
#, 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:3669
+#: cp/class.c:3717
#, gcc-internal-format
msgid ""
"in C++98 %q+D may not have reference type %qT because it is a member of a "
"union"
msgstr ""
-#: cp/class.c:3679
+#: cp/class.c:3727
#, gcc-internal-format
msgid "field %q+D invalidly declared function type"
msgstr ""
-#: cp/class.c:3685
+#: cp/class.c:3733
#, gcc-internal-format
msgid "field %q+D invalidly declared method type"
msgstr ""
-#: cp/class.c:3745
+#: cp/class.c:3793
#, gcc-internal-format
msgid "ignoring packed attribute because of unpacked non-POD field %q#D"
msgstr ""
-#: cp/class.c:3793
+#: cp/class.c:3841
#, gcc-internal-format
msgid "member %q+D cannot be declared both %<const%> and %<mutable%>"
msgstr ""
-#: cp/class.c:3799
+#: cp/class.c:3847
#, gcc-internal-format
msgid "member %q+D cannot be declared as a %<mutable%> reference"
msgstr ""
-#: cp/class.c:3861
+#: cp/class.c:3909
#, gcc-internal-format
msgid "field %q#D with same name as class"
msgstr ""
-#: cp/class.c:3884
+#: cp/class.c:3932
#, gcc-internal-format
msgid "%q#T has pointer data members"
msgstr ""
-#: cp/class.c:3889
+#: cp/class.c:3937
#, gcc-internal-format
msgid " but does not override %<%T(const %T&)%>"
msgstr ""
-#: cp/class.c:3891
+#: cp/class.c:3939
#, gcc-internal-format
msgid " or %<operator=(const %T&)%>"
msgstr ""
-#: cp/class.c:3895
+#: cp/class.c:3943
#, gcc-internal-format
msgid " but does not override %<operator=(const %T&)%>"
msgstr ""
-#: cp/class.c:4301
+#: cp/class.c:4347
#, gcc-internal-format
msgid "alignment of %qD increased in -fabi-version=9 (GCC 5.2)"
msgstr ""
-#: cp/class.c:4304
+#: cp/class.c:4350
#, gcc-internal-format
msgid "alignment of %qD will increase in -fabi-version=9"
msgstr ""
-#: cp/class.c:4558
+#: cp/class.c:4604
#, gcc-internal-format
msgid "initializer specified for non-virtual method %q+D"
msgstr ""
-#: cp/class.c:4995
+#: cp/class.c:5041
#, gcc-internal-format
msgid "method overrides both %<transaction_pure%> and %qE methods"
msgstr ""
-#: cp/class.c:5016
+#: cp/class.c:5062
#, gcc-internal-format
msgid "method declared %qE overriding %qE method"
msgstr ""
-#: cp/class.c:5595 cp/constexpr.c:217
+#: cp/class.c:5641 cp/constexpr.c:217
#, gcc-internal-format
msgid ""
"enclosing class of constexpr non-static member function %q+#D is not a "
"literal type"
msgstr ""
-#: cp/class.c:5620
+#: cp/class.c:5666
#, gcc-internal-format
msgid "%q+T is not literal because:"
msgstr ""
-#: cp/class.c:5622
+#: cp/class.c:5668
#, gcc-internal-format
msgid " %q+T has a non-trivial destructor"
msgstr ""
-#: cp/class.c:5627
+#: cp/class.c:5673
#, 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:5662
+#: cp/class.c:5708
#, gcc-internal-format
msgid " base class %qT of %q+T is non-literal"
msgstr ""
-#: cp/class.c:5677
+#: cp/class.c:5723
#, gcc-internal-format
msgid " non-static data member %qD has non-literal type"
msgstr ""
-#: cp/class.c:5684
+#: cp/class.c:5730
#, gcc-internal-format
msgid " non-static data member %qD has volatile type"
msgstr ""
-#: cp/class.c:5802
+#: cp/class.c:5848
#, gcc-internal-format
msgid "base class %q#T has accessible non-virtual destructor"
msgstr ""
-#: cp/class.c:5831
+#: cp/class.c:5877
#, gcc-internal-format
msgid "non-static reference %q#D in class without a constructor"
msgstr ""
-#: cp/class.c:5837
+#: cp/class.c:5883
#, 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:5863
+#: cp/class.c:5909
#, gcc-internal-format
msgid ""
"%q+D declared to take const reference, but implicit declaration would take "
"non-const"
msgstr ""
-#: cp/class.c:6140
+#: cp/class.c:6186
#, gcc-internal-format
msgid "direct base %qT inaccessible in %qT due to ambiguity"
msgstr ""
-#: cp/class.c:6152
+#: cp/class.c:6198
#, gcc-internal-format
msgid "virtual base %qT inaccessible in %qT due to ambiguity"
msgstr ""
-#: cp/class.c:6380
+#: cp/class.c:6426
#, gcc-internal-format
msgid ""
"offset of %qD is not ABI-compliant and may change in a future version of GCC"
msgstr ""
-#: cp/class.c:6535
+#: cp/class.c:6581
#, gcc-internal-format
msgid "size of type %qT is too large (%qE bytes)"
msgstr ""
-#: cp/class.c:6744
+#: cp/class.c:6786
#, gcc-internal-format
msgid "zero-size array member %qD not at end of %q#T"
msgstr ""
-#: cp/class.c:6746
+#: cp/class.c:6788
#, gcc-internal-format
msgid "zero-size array member %qD in an otherwise empty %q#T"
msgstr ""
-#: cp/class.c:6751 cp/class.c:6774
+#: cp/class.c:6793 cp/class.c:6816
#, gcc-internal-format
msgid "in the definition of %q#T"
msgstr ""
-#: cp/class.c:6756
+#: cp/class.c:6798
#, gcc-internal-format
msgid "flexible array member %qD not at end of %q#T"
msgstr ""
-#: cp/class.c:6758
+#: cp/class.c:6800
#, gcc-internal-format
msgid "flexible array member %qD in an otherwise empty %q#T"
msgstr ""
-#: cp/class.c:6771
+#: cp/class.c:6813
#, gcc-internal-format
msgid "next member %q#D declared here"
msgstr ""
-#: cp/class.c:6868 cp/decl.c:12877 cp/parser.c:21917
+#: cp/class.c:6910 cp/decl.c:12913 cp/parser.c:21949
#, gcc-internal-format
msgid "redefinition of %q#T"
msgstr ""
-#: cp/class.c:7014
+#: cp/class.c:7056
#, gcc-internal-format
msgid "%q#T has virtual functions and accessible non-virtual destructor"
msgstr ""
-#: cp/class.c:7042
+#: cp/class.c:7084
#, gcc-internal-format
msgid "type transparent %q#T does not have any fields"
msgstr ""
-#: cp/class.c:7048
+#: cp/class.c:7090
#, gcc-internal-format
msgid "type transparent class %qT has base classes"
msgstr ""
-#: cp/class.c:7052
+#: cp/class.c:7094
#, gcc-internal-format
msgid "type transparent class %qT has virtual functions"
msgstr ""
-#: cp/class.c:7058
+#: cp/class.c:7100
#, 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:7222
+#: cp/class.c:7264
#, gcc-internal-format
msgid ""
"definition of std::initializer_list does not match #include "
"<initializer_list>"
msgstr ""
-#: cp/class.c:7233
+#: cp/class.c:7275
#, gcc-internal-format
msgid "trying to finish struct, but kicked out due to previous parse errors"
msgstr ""
-#: cp/class.c:7769
+#: cp/class.c:7811
#, gcc-internal-format
msgid "language string %<\"%E\"%> not recognized"
msgstr ""
-#: cp/class.c:7859
+#: cp/class.c:7901
#, gcc-internal-format
msgid "cannot resolve overloaded function %qD based on conversion to type %qT"
msgstr ""
-#: cp/class.c:8006
+#: cp/class.c:8048
#, gcc-internal-format
msgid "no matches converting function %qD to type %q#T"
msgstr ""
-#: cp/class.c:8034
+#: cp/class.c:8076
#, gcc-internal-format
msgid "converting overloaded function %qD to type %q#T is ambiguous"
msgstr ""
-#: cp/class.c:8061
+#: cp/class.c:8103
#, gcc-internal-format
msgid "assuming pointer to member %qD"
msgstr ""
-#: cp/class.c:8064
+#: cp/class.c:8106
#, gcc-internal-format
msgid "(a pointer to member can only be formed with %<&%E%>)"
msgstr ""
-#: cp/class.c:8139 cp/class.c:8174
+#: cp/class.c:8181 cp/class.c:8216
#, gcc-internal-format
msgid "not enough type information"
msgstr ""
-#: cp/class.c:8157 cp/cvt.c:171 cp/cvt.c:198 cp/cvt.c:247
+#: cp/class.c:8199 cp/cvt.c:171 cp/cvt.c:198 cp/cvt.c:247
#, gcc-internal-format
msgid "cannot convert %qE from type %qT to type %qT"
msgstr ""
@@ -36798,12 +36892,12 @@ msgstr ""
#. A name N used in a class S shall refer to the same declaration
#. in its context and when re-evaluated in the completed scope of
#. S.
-#: cp/class.c:8435
+#: cp/class.c:8477
#, gcc-internal-format
msgid "declaration of %q#D"
msgstr ""
-#: cp/class.c:8437
+#: cp/class.c:8479
#, gcc-internal-format
msgid "changes meaning of %qD from %q#D"
msgstr ""
@@ -36843,270 +36937,281 @@ msgstr ""
msgid "constexpr constructor does not have empty body"
msgstr ""
-#: cp/constexpr.c:573
+#: cp/constexpr.c:584
#, gcc-internal-format
msgid "body of %<constexpr%> constructor cannot be a function-try-block"
msgstr ""
-#: cp/constexpr.c:704
+#: cp/constexpr.c:715
#, gcc-internal-format
msgid ""
"%<constexpr%> constructor for union %qT must initialize exactly one non-"
"static data member"
msgstr ""
-#: cp/constexpr.c:744
+#: cp/constexpr.c:755
#, gcc-internal-format
msgid ""
"member %qD must be initialized by mem-initializer in %<constexpr%> "
"constructor"
msgstr ""
-#: cp/constexpr.c:776
+#: cp/constexpr.c:787
#, gcc-internal-format
msgid "body of constexpr function %qD not a return-statement"
msgstr ""
-#: cp/constexpr.c:830
+#: cp/constexpr.c:841
#, gcc-internal-format
msgid "%qD is not usable as a constexpr function because:"
msgstr ""
-#: cp/constexpr.c:1185 cp/constexpr.c:4304
+#: cp/constexpr.c:1295 cp/constexpr.c:4591
#, gcc-internal-format
msgid "call to internal function"
msgstr ""
-#: cp/constexpr.c:1203
+#: cp/constexpr.c:1313
#, gcc-internal-format
msgid "expression %qE does not designate a constexpr function"
msgstr ""
-#: cp/constexpr.c:1221 cp/constexpr.c:4321
+#: cp/constexpr.c:1331 cp/constexpr.c:4608
#, gcc-internal-format
msgid "call to non-constexpr function %qD"
msgstr ""
+#: cp/constexpr.c:1393
+#, gcc-internal-format
+msgid "%qD called in a constant expression before its definition is complete"
+msgstr ""
+
#. The definition of fun was somehow unsuitable.
-#: cp/constexpr.c:1265
+#: cp/constexpr.c:1398
#, gcc-internal-format
msgid "%qD called in a constant expression"
msgstr ""
-#: cp/constexpr.c:1269
+#: cp/constexpr.c:1402
#, gcc-internal-format
msgid "%qD used before its definition"
msgstr ""
-#: cp/constexpr.c:1322
+#: cp/constexpr.c:1442
#, gcc-internal-format
msgid "call has circular dependency"
msgstr ""
-#: cp/constexpr.c:1333
+#: cp/constexpr.c:1453
#, 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:1394
+#: cp/constexpr.c:1525
#, gcc-internal-format
msgid "constexpr call flows off the end of the function"
msgstr ""
-#: cp/constexpr.c:1466
+#: cp/constexpr.c:1605
#, gcc-internal-format
msgid "%q+E is not a constant expression"
msgstr ""
-#: cp/constexpr.c:1506
+#: cp/constexpr.c:1645
#, gcc-internal-format
msgid "right operand of shift expression %q+E is negative"
msgstr ""
-#: cp/constexpr.c:1513
+#: cp/constexpr.c:1652
#, gcc-internal-format
msgid ""
"right operand of shift expression %q+E is >= than the precision of the left "
"operand"
msgstr ""
-#: cp/constexpr.c:1531
+#: cp/constexpr.c:1670
#, gcc-internal-format
msgid "left operand of shift expression %q+E is negative"
msgstr ""
-#: cp/constexpr.c:1550
+#: cp/constexpr.c:1689
#, gcc-internal-format
msgid "shift expression %q+E overflows"
msgstr ""
-#: cp/constexpr.c:1831
+#: cp/constexpr.c:1956
#, gcc-internal-format
-msgid "negative array subscript"
+msgid ""
+"array subscript value %qE is outside the bounds of array %qD of type %qT"
msgstr ""
-#: cp/constexpr.c:1844
+#: cp/constexpr.c:1961
#, gcc-internal-format
-msgid "array subscript out of bound"
+msgid "array subscript value %qE is outside the bounds of array type %qT"
msgstr ""
-#: cp/constexpr.c:1869
+#: cp/constexpr.c:2050
#, gcc-internal-format
msgid "accessing uninitialized array element"
msgstr ""
-#: cp/constexpr.c:1924 cp/constexpr.c:2003 cp/constexpr.c:3305
+#: cp/constexpr.c:2105 cp/constexpr.c:2189 cp/constexpr.c:3561
#, gcc-internal-format
msgid "%qE is not a constant expression"
msgstr ""
-#: cp/constexpr.c:1930
+#: cp/constexpr.c:2111
#, gcc-internal-format
msgid "mutable %qD is not usable in a constant expression"
msgstr ""
-#: cp/constexpr.c:1951
+#: cp/constexpr.c:2132
#, gcc-internal-format
msgid ""
"accessing %qD member instead of initialized %qD member in constant expression"
msgstr ""
-#: cp/constexpr.c:1963
+#: cp/constexpr.c:2149
#, gcc-internal-format
msgid "accessing uninitialized member %qD"
msgstr ""
-#: cp/constexpr.c:2648
+#: cp/constexpr.c:2867
#, gcc-internal-format
msgid "accessing value of %qE through a %qT glvalue in a constant expression"
msgstr ""
-#: cp/constexpr.c:2689
+#: cp/constexpr.c:2908
#, gcc-internal-format
msgid "the value of %qD is not usable in a constant expression"
msgstr ""
-#: cp/constexpr.c:2696
+#: cp/constexpr.c:2915
#, gcc-internal-format
msgid "%qD used in its own initializer"
msgstr ""
-#: cp/constexpr.c:2701
+#: cp/constexpr.c:2920
#, gcc-internal-format
msgid "%q#D is not const"
msgstr ""
-#: cp/constexpr.c:2704
+#: cp/constexpr.c:2923
#, gcc-internal-format
msgid "%q#D is volatile"
msgstr ""
-#: cp/constexpr.c:2708
+#: cp/constexpr.c:2928
#, gcc-internal-format
msgid "%qD was not initialized with a constant expression"
msgstr ""
-#: cp/constexpr.c:2717
+#: cp/constexpr.c:2937
#, gcc-internal-format
msgid "%qD was not declared %<constexpr%>"
msgstr ""
-#: cp/constexpr.c:2720
+#: cp/constexpr.c:2940
#, gcc-internal-format
msgid "%qD does not have integral or enumeration type"
msgstr ""
-#: cp/constexpr.c:2828
+#: cp/constexpr.c:3048
#, gcc-internal-format
msgid "modification of %qE is not a constant-expression"
msgstr ""
-#: cp/constexpr.c:3349 cp/constexpr.c:4673
+#: cp/constexpr.c:3607 cp/constexpr.c:4960
#, gcc-internal-format
msgid "temporary of non-literal type %qT in a constant expression"
msgstr ""
-#: cp/constexpr.c:3670
+#: cp/constexpr.c:3931
#, gcc-internal-format
msgid "a reinterpret_cast is not a constant-expression"
msgstr ""
-#: cp/constexpr.c:3681 cp/constexpr.c:4411
+#: cp/constexpr.c:3942 cp/constexpr.c:4698
#, gcc-internal-format
msgid "reinterpret_cast from integer to pointer"
msgstr ""
-#: cp/constexpr.c:3741 cp/constexpr.c:4562 cp/constexpr.c:4841
+#: cp/constexpr.c:4002 cp/constexpr.c:4849 cp/constexpr.c:5136
#, gcc-internal-format
msgid "expression %qE is not a constant-expression"
msgstr ""
-#: cp/constexpr.c:3811
+#: cp/constexpr.c:4072
#, gcc-internal-format
msgid "statement is not a constant-expression"
msgstr ""
-#: cp/constexpr.c:3814
+#: cp/constexpr.c:4075
#, gcc-internal-format
msgid "unexpected expression %qE of kind %s"
msgstr ""
-#: cp/constexpr.c:3881
+#: cp/constexpr.c:4145
#, gcc-internal-format
msgid ""
"%qE is not a constant expression because it refers to mutable subobjects of "
"%qT"
msgstr ""
-#: cp/constexpr.c:3894
+#: cp/constexpr.c:4158
#, gcc-internal-format
msgid ""
"conversion from pointer type %qT to arithmetic type %qT in a constant-"
"expression"
msgstr ""
-#: cp/constexpr.c:4240
+#: cp/constexpr.c:4527
#, gcc-internal-format
msgid "expression %qE has side-effects"
msgstr ""
-#: cp/constexpr.c:4437
+#: cp/constexpr.c:4724
#, gcc-internal-format
msgid ""
"address-of an object %qE with thread local or automatic storage is not a "
"constant expression"
msgstr ""
-#: cp/constexpr.c:4469
+#: cp/constexpr.c:4756
#, gcc-internal-format
msgid "use of %<this%> in a constant expression"
msgstr ""
-#: cp/constexpr.c:4574
+#: cp/constexpr.c:4861
#, gcc-internal-format
msgid ""
"typeid-expression is not a constant expression because %qE is of polymorphic "
"type"
msgstr ""
-#: cp/constexpr.c:4636
+#: cp/constexpr.c:4923
#, gcc-internal-format
msgid "cast to non-integral type %qT in a constant expression"
msgstr ""
-#: cp/constexpr.c:4721
+#: cp/constexpr.c:5008
#, gcc-internal-format
msgid "division by zero is not a constant-expression"
msgstr ""
-#: cp/constexpr.c:4849
+#: cp/constexpr.c:5113
+#, gcc-internal-format
+msgid "%<delete[]%> is not a constant-expression"
+msgstr ""
+
+#: cp/constexpr.c:5144
#, gcc-internal-format
msgid "non-constant array initialization"
msgstr ""
-#: cp/constexpr.c:4866
+#: cp/constexpr.c:5161
#, gcc-internal-format, gfc-internal-format
msgid "unexpected AST of kind %s"
msgstr ""
@@ -37181,17 +37286,17 @@ msgstr ""
msgid "try statements are not allowed inside loops marked with #pragma simd"
msgstr ""
-#: cp/cp-gimplify.c:1343
+#: cp/cp-gimplify.c:1355
#, gcc-internal-format
msgid "throw will always call terminate()"
msgstr ""
-#: cp/cp-gimplify.c:1346
+#: cp/cp-gimplify.c:1358
#, gcc-internal-format
msgid "in C++11 destructors default to noexcept"
msgstr ""
-#: cp/cp-gimplify.c:1357
+#: cp/cp-gimplify.c:1369
#, gcc-internal-format
msgid ""
"in C++11 this throw will terminate because destructors default to noexcept"
@@ -37232,7 +37337,7 @@ msgstr ""
msgid "conversion from %qT to %qT discards qualifiers"
msgstr ""
-#: cp/cvt.c:489 cp/typeck.c:7008
+#: cp/cvt.c:489 cp/typeck.c:6988
#, gcc-internal-format
msgid "casting %qT to %qT does not dereference pointer"
msgstr ""
@@ -37242,349 +37347,349 @@ msgstr ""
msgid "cannot convert type %qT to type %qT"
msgstr ""
-#: cp/cvt.c:753
+#: cp/cvt.c:754
#, gcc-internal-format
msgid "conversion from %q#T to %q#T"
msgstr ""
-#: cp/cvt.c:770
+#: cp/cvt.c:771
#, gcc-internal-format
msgid ""
"the result of the conversion is unspecified because %qE is outside the range "
"of type %qT"
msgstr ""
-#: cp/cvt.c:781 cp/cvt.c:825
+#: cp/cvt.c:782 cp/cvt.c:826
#, gcc-internal-format
msgid "%q#T used where a %qT was expected"
msgstr ""
-#: cp/cvt.c:790
+#: cp/cvt.c:791
#, gcc-internal-format
msgid "could not convert %qE from %<void%> to %<bool%>"
msgstr ""
-#: cp/cvt.c:841
+#: cp/cvt.c:842
#, gcc-internal-format
msgid "%q#T used where a floating point value was expected"
msgstr ""
-#: cp/cvt.c:900
+#: cp/cvt.c:901
#, gcc-internal-format
msgid "conversion from %qT to non-scalar type %qT requested"
msgstr ""
-#: cp/cvt.c:960
+#: cp/cvt.c:961
#, gcc-internal-format
msgid "pseudo-destructor is not called"
msgstr ""
-#: cp/cvt.c:1037
+#: cp/cvt.c:1038
#, gcc-internal-format
msgid "conversion to void will not access object of incomplete type %qT"
msgstr ""
-#: cp/cvt.c:1041
+#: cp/cvt.c:1042
#, gcc-internal-format
msgid ""
"indirection will not access object of incomplete type %qT in second operand "
"of conditional expression"
msgstr ""
-#: cp/cvt.c:1046
+#: cp/cvt.c:1047
#, gcc-internal-format
msgid ""
"indirection will not access object of incomplete type %qT in third operand "
"of conditional expression"
msgstr ""
-#: cp/cvt.c:1051
+#: cp/cvt.c:1052
#, gcc-internal-format
msgid ""
"indirection will not access object of incomplete type %qT in right operand "
"of comma operator"
msgstr ""
-#: cp/cvt.c:1056
+#: cp/cvt.c:1057
#, gcc-internal-format
msgid ""
"indirection will not access object of incomplete type %qT in left operand of "
"comma operator"
msgstr ""
-#: cp/cvt.c:1061
+#: cp/cvt.c:1062
#, gcc-internal-format
msgid "indirection will not access object of incomplete type %qT in statement"
msgstr ""
-#: cp/cvt.c:1065
+#: cp/cvt.c:1066
#, gcc-internal-format
msgid ""
"indirection will not access object of incomplete type %qT in for increment "
"expression"
msgstr ""
-#: cp/cvt.c:1081
+#: cp/cvt.c:1082
#, gcc-internal-format
msgid "conversion to void will not access object of type %qT"
msgstr ""
-#: cp/cvt.c:1085
+#: cp/cvt.c:1086
#, gcc-internal-format
msgid ""
"implicit dereference will not access object of type %qT in second operand of "
"conditional expression"
msgstr ""
-#: cp/cvt.c:1090
+#: cp/cvt.c:1091
#, gcc-internal-format
msgid ""
"implicit dereference will not access object of type %qT in third operand of "
"conditional expression"
msgstr ""
-#: cp/cvt.c:1095
+#: cp/cvt.c:1096
#, gcc-internal-format
msgid ""
"implicit dereference will not access object of type %qT in right operand of "
"comma operator"
msgstr ""
-#: cp/cvt.c:1100
+#: cp/cvt.c:1101
#, gcc-internal-format
msgid ""
"implicit dereference will not access object of type %qT in left operand of "
"comma operator"
msgstr ""
-#: cp/cvt.c:1105
+#: cp/cvt.c:1106
#, gcc-internal-format
msgid "implicit dereference will not access object of type %qT in statement"
msgstr ""
-#: cp/cvt.c:1109
+#: cp/cvt.c:1110
#, gcc-internal-format
msgid ""
"implicit dereference will not access object of type %qT in for increment "
"expression"
msgstr ""
-#: cp/cvt.c:1123
+#: cp/cvt.c:1124
#, gcc-internal-format
msgid ""
"conversion to void will not access object of non-trivially-copyable type %qT"
msgstr ""
-#: cp/cvt.c:1128
+#: cp/cvt.c:1129
#, gcc-internal-format
msgid ""
"indirection will not access object of non-trivially-copyable type %qT in "
"second operand of conditional expression"
msgstr ""
-#: cp/cvt.c:1133
+#: cp/cvt.c:1134
#, gcc-internal-format
msgid ""
"indirection will not access object of non-trivially-copyable type %qT in "
"third operand of conditional expression"
msgstr ""
-#: cp/cvt.c:1138
+#: cp/cvt.c:1139
#, gcc-internal-format
msgid ""
"indirection will not access object of non-trivially-copyable type %qT in "
"right operand of comma operator"
msgstr ""
-#: cp/cvt.c:1143
+#: cp/cvt.c:1144
#, gcc-internal-format
msgid ""
"indirection will not access object of non-trivially-copyable type %qT in "
"left operand of comma operator"
msgstr ""
-#: cp/cvt.c:1148
+#: cp/cvt.c:1149
#, gcc-internal-format
msgid ""
"indirection will not access object of non-trivially-copyable type %qT in "
"statement"
msgstr ""
-#: cp/cvt.c:1153
+#: cp/cvt.c:1154
#, gcc-internal-format
msgid ""
"indirection will not access object of non-trivially-copyable type %qT in for "
"increment expression"
msgstr ""
-#: cp/cvt.c:1191
+#: cp/cvt.c:1192
#, gcc-internal-format
msgid "conversion to void will not access object %qE of incomplete type %qT"
msgstr ""
-#: cp/cvt.c:1195
+#: cp/cvt.c:1196
#, gcc-internal-format
msgid ""
"variable %qE of incomplete type %qT will not be accessed in second operand "
"of conditional expression"
msgstr ""
-#: cp/cvt.c:1200
+#: cp/cvt.c:1201
#, gcc-internal-format
msgid ""
"variable %qE of incomplete type %qT will not be accessed in third operand of "
"conditional expression"
msgstr ""
-#: cp/cvt.c:1205
+#: cp/cvt.c:1206
#, gcc-internal-format
msgid ""
"variable %qE of incomplete type %qT will not be accessed in right operand of "
"comma operator"
msgstr ""
-#: cp/cvt.c:1210
+#: cp/cvt.c:1211
#, gcc-internal-format
msgid ""
"variable %qE of incomplete type %qT will not be accessed in left operand of "
"comma operator"
msgstr ""
-#: cp/cvt.c:1215
+#: cp/cvt.c:1216
#, gcc-internal-format
msgid "variable %qE of incomplete type %qT will not be accessed in statement"
msgstr ""
-#: cp/cvt.c:1219
+#: cp/cvt.c:1220
#, gcc-internal-format
msgid ""
"variable %qE of incomplete type %qT will not be accessed in for increment "
"expression"
msgstr ""
-#: cp/cvt.c:1269
+#: cp/cvt.c:1270
#, gcc-internal-format
msgid "conversion to void cannot resolve address of overloaded function"
msgstr ""
-#: cp/cvt.c:1273
+#: cp/cvt.c:1274
#, gcc-internal-format
msgid ""
"second operand of conditional expression cannot resolve address of "
"overloaded function"
msgstr ""
-#: cp/cvt.c:1277
+#: cp/cvt.c:1278
#, gcc-internal-format
msgid ""
"third operand of conditional expression cannot resolve address of overloaded "
"function"
msgstr ""
-#: cp/cvt.c:1281
+#: cp/cvt.c:1282
#, gcc-internal-format
msgid ""
"right operand of comma operator cannot resolve address of overloaded function"
msgstr ""
-#: cp/cvt.c:1285
+#: cp/cvt.c:1286
#, gcc-internal-format
msgid ""
"left operand of comma operator cannot resolve address of overloaded function"
msgstr ""
-#: cp/cvt.c:1289
+#: cp/cvt.c:1290
#, gcc-internal-format
msgid "statement cannot resolve address of overloaded function"
msgstr ""
-#: cp/cvt.c:1293
+#: cp/cvt.c:1294
#, gcc-internal-format
msgid "for increment expression cannot resolve address of overloaded function"
msgstr ""
-#: cp/cvt.c:1309
+#: cp/cvt.c:1310
#, gcc-internal-format
msgid ""
"second operand of conditional expression is a reference, not call, to "
"function %qE"
msgstr ""
-#: cp/cvt.c:1314
+#: cp/cvt.c:1315
#, gcc-internal-format
msgid ""
"third operand of conditional expression is a reference, not call, to "
"function %qE"
msgstr ""
-#: cp/cvt.c:1319
+#: cp/cvt.c:1320
#, gcc-internal-format
msgid ""
"right operand of comma operator is a reference, not call, to function %qE"
msgstr ""
-#: cp/cvt.c:1324
+#: cp/cvt.c:1325
#, gcc-internal-format
msgid ""
"left operand of comma operator is a reference, not call, to function %qE"
msgstr ""
-#: cp/cvt.c:1329
+#: cp/cvt.c:1330
#, gcc-internal-format
msgid "statement is a reference, not call, to function %qE"
msgstr ""
-#: cp/cvt.c:1334
+#: cp/cvt.c:1335
#, gcc-internal-format
msgid "for increment expression is a reference, not call, to function %qE"
msgstr ""
-#: cp/cvt.c:1361
+#: cp/cvt.c:1362
#, gcc-internal-format
msgid "second operand of conditional expression has no effect"
msgstr ""
-#: cp/cvt.c:1366
+#: cp/cvt.c:1367
#, gcc-internal-format
msgid "third operand of conditional expression has no effect"
msgstr ""
-#: cp/cvt.c:1371
+#: cp/cvt.c:1372
#, gcc-internal-format
msgid "right operand of comma operator has no effect"
msgstr ""
-#: cp/cvt.c:1375
+#: cp/cvt.c:1376
#, gcc-internal-format
msgid "left operand of comma operator has no effect"
msgstr ""
-#: cp/cvt.c:1379
+#: cp/cvt.c:1380
#, gcc-internal-format
msgid "statement has no effect"
msgstr ""
-#: cp/cvt.c:1383
+#: cp/cvt.c:1384
#, gcc-internal-format
msgid "for increment expression has no effect"
msgstr ""
-#: cp/cvt.c:1538
+#: cp/cvt.c:1539
#, gcc-internal-format
msgid "converting NULL to non-pointer type"
msgstr ""
-#: cp/cvt.c:1653
+#: cp/cvt.c:1654
#, gcc-internal-format
msgid "default type conversion can't deduce template argument for %qD"
msgstr ""
-#: cp/cvt.c:1668
+#: cp/cvt.c:1669
#, gcc-internal-format
msgid "ambiguous default type conversion from %qT"
msgstr ""
-#: cp/cvt.c:1671
+#: cp/cvt.c:1672
#, gcc-internal-format
msgid " candidate conversions include %qD and %qD"
msgstr ""
@@ -37594,152 +37699,152 @@ msgstr ""
msgid "template-parameter-"
msgstr ""
-#: cp/decl.c:634
+#: cp/decl.c:629
#, gcc-internal-format
msgid "unused variable %qD"
msgstr ""
-#: cp/decl.c:1177
+#: cp/decl.c:1172
#, gcc-internal-format
msgid "%qD was declared %<extern%> and later %<static%>"
msgstr ""
-#: cp/decl.c:1179 cp/decl.c:1900 cp/decl.c:1910 cp/decl.c:2440
+#: cp/decl.c:1174 cp/decl.c:1898 cp/decl.c:1908 cp/decl.c:2447
#, gcc-internal-format
msgid "previous declaration of %qD"
msgstr ""
-#: cp/decl.c:1221
+#: cp/decl.c:1219
#, gcc-internal-format
msgid "from previous declaration %q+F"
msgstr ""
-#: cp/decl.c:1255
+#: cp/decl.c:1253
#, gcc-internal-format
msgid "redeclaration %q+D differs in %<constexpr%>"
msgstr ""
-#: cp/decl.c:1256
+#: cp/decl.c:1254
#, gcc-internal-format
msgid "from previous declaration %q+D"
msgstr ""
-#: cp/decl.c:1285
+#: cp/decl.c:1283
#, gcc-internal-format
msgid "cannot specialize concept %q#D"
msgstr ""
-#: cp/decl.c:1307
+#: cp/decl.c:1305
#, gcc-internal-format
msgid "redeclaration of %q#D may not have default arguments"
msgstr ""
-#: cp/decl.c:1354
+#: cp/decl.c:1352
#, gcc-internal-format
msgid "literal operator template %q+D conflicts with raw literal operator %qD"
msgstr ""
-#: cp/decl.c:1359
+#: cp/decl.c:1357
#, gcc-internal-format
msgid "raw literal operator %q+D conflicts with literal operator template %qD"
msgstr ""
-#: cp/decl.c:1381
+#: cp/decl.c:1379
#, gcc-internal-format
msgid "function %qD redeclared as inline"
msgstr ""
-#: cp/decl.c:1384
+#: cp/decl.c:1382
#, gcc-internal-format
msgid "previous declaration of %qD with attribute noinline"
msgstr ""
-#: cp/decl.c:1392
+#: cp/decl.c:1390
#, gcc-internal-format
msgid "function %qD redeclared with attribute noinline"
msgstr ""
-#: cp/decl.c:1395
+#: cp/decl.c:1393
#, gcc-internal-format
msgid "previous declaration of %qD was inline"
msgstr ""
-#: cp/decl.c:1419 cp/decl.c:1497
+#: cp/decl.c:1417 cp/decl.c:1495
#, gcc-internal-format
msgid "shadowing built-in function %q#D"
msgstr ""
-#: cp/decl.c:1420 cp/decl.c:1498
+#: cp/decl.c:1418 cp/decl.c:1496
#, gcc-internal-format
msgid "shadowing library function %q#D"
msgstr ""
-#: cp/decl.c:1428
+#: cp/decl.c:1426
#, gcc-internal-format
msgid "library function %q#D redeclared as non-function %q#D"
msgstr ""
-#: cp/decl.c:1431
+#: cp/decl.c:1429
#, gcc-internal-format
msgid "declaration of %q+#D conflicts with built-in declaration %q#D"
msgstr ""
-#: cp/decl.c:1439
+#: cp/decl.c:1437
#, gcc-internal-format
msgid "redeclaration of %<pragma omp declare reduction%>"
msgstr ""
-#: cp/decl.c:1441
+#: cp/decl.c:1439
#, gcc-internal-format
msgid "previous %<pragma omp declare reduction%> declaration"
msgstr ""
-#: cp/decl.c:1492
+#: cp/decl.c:1490
#, gcc-internal-format
msgid "new declaration %q#D ambiguates built-in declaration %q#D"
msgstr ""
-#: cp/decl.c:1583
+#: cp/decl.c:1581
#, gcc-internal-format
msgid "%q#D redeclared as different kind of symbol"
msgstr ""
-#: cp/decl.c:1587 cp/decl.c:1608 cp/decl.c:1640 cp/name-lookup.c:586
+#: cp/decl.c:1585 cp/decl.c:1606 cp/decl.c:1638 cp/name-lookup.c:586
#, gcc-internal-format
msgid "previous declaration %q#D"
msgstr ""
-#: cp/decl.c:1606
+#: cp/decl.c:1604
#, gcc-internal-format
msgid "conflicting declaration of template %q+#D"
msgstr ""
-#: cp/decl.c:1625
+#: cp/decl.c:1623
#, gcc-internal-format
msgid "ambiguating new declaration %q+#D"
msgstr ""
-#: cp/decl.c:1627 cp/decl.c:1655
+#: cp/decl.c:1625 cp/decl.c:1653
#, gcc-internal-format
msgid "old declaration %q#D"
msgstr ""
-#: cp/decl.c:1637
+#: cp/decl.c:1635
#, gcc-internal-format
msgid "conflicting declaration of C function %q+#D"
msgstr ""
-#: cp/decl.c:1653
+#: cp/decl.c:1651
#, gcc-internal-format
msgid "ambiguating new declaration of %q+#D"
msgstr ""
-#: cp/decl.c:1663
+#: cp/decl.c:1661
#, gcc-internal-format
msgid "conflicting declaration %q+#D"
msgstr ""
-#: cp/decl.c:1665
+#: cp/decl.c:1663
#, gcc-internal-format
msgid "previous declaration as %q#D"
msgstr ""
@@ -37751,62 +37856,62 @@ msgstr ""
#. 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:1717
+#: cp/decl.c:1715
#, gcc-internal-format
msgid "conflicting declaration of namespace %q+D"
msgstr ""
-#: cp/decl.c:1719
+#: cp/decl.c:1717
#, gcc-internal-format
msgid "previous declaration of namespace %qD here"
msgstr ""
-#: cp/decl.c:1731
+#: cp/decl.c:1729
#, gcc-internal-format
msgid "%q#D previously defined here"
msgstr ""
-#: cp/decl.c:1732 cp/name-lookup.c:1168 cp/name-lookup.c:1191
+#: cp/decl.c:1730 cp/name-lookup.c:1168 cp/name-lookup.c:1191
#, gcc-internal-format
msgid "%q#D previously declared here"
msgstr ""
-#: cp/decl.c:1742
+#: cp/decl.c:1740
#, gcc-internal-format
msgid "prototype specified for %q#D"
msgstr ""
-#: cp/decl.c:1744
+#: cp/decl.c:1742
#, gcc-internal-format
msgid "previous non-prototype definition here"
msgstr ""
-#: cp/decl.c:1783
+#: cp/decl.c:1781
#, gcc-internal-format
msgid "conflicting declaration of %q+#D with %qL linkage"
msgstr ""
-#: cp/decl.c:1786
+#: cp/decl.c:1784
#, gcc-internal-format
msgid "previous declaration with %qL linkage"
msgstr ""
-#: cp/decl.c:1820 cp/decl.c:1828
+#: cp/decl.c:1818 cp/decl.c:1826
#, gcc-internal-format
msgid "default argument given for parameter %d of %q#D"
msgstr ""
-#: cp/decl.c:1823 cp/decl.c:1831
+#: cp/decl.c:1821 cp/decl.c:1829
#, gcc-internal-format
msgid "previous specification in %q#D here"
msgstr ""
-#: cp/decl.c:1897
+#: cp/decl.c:1895
#, gcc-internal-format
msgid "redundant redeclaration of %qD in same scope"
msgstr ""
-#: cp/decl.c:1908
+#: cp/decl.c:1906
#, gcc-internal-format
msgid "deleted definition of %q+D"
msgstr ""
@@ -37819,12 +37924,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:2306
+#: cp/decl.c:2313
#, gcc-internal-format
msgid "explicit specialization of %qD after first use"
msgstr ""
-#: cp/decl.c:2437
+#: cp/decl.c:2444
#, gcc-internal-format
msgid ""
"%qD: visibility attribute ignored because it conflicts with previous "
@@ -37832,27 +37937,27 @@ msgid ""
msgstr ""
#. Reject two definitions.
-#: cp/decl.c:2687 cp/decl.c:2716 cp/decl.c:2749 cp/decl.c:2766 cp/decl.c:2839
+#: cp/decl.c:2694 cp/decl.c:2723 cp/decl.c:2756 cp/decl.c:2773 cp/decl.c:2846
#, gcc-internal-format
msgid "redefinition of %q#D"
msgstr ""
-#: cp/decl.c:2703
+#: cp/decl.c:2710
#, gcc-internal-format
msgid "%qD conflicts with used function"
msgstr ""
-#: cp/decl.c:2713
+#: cp/decl.c:2720
#, gcc-internal-format
msgid "%q#D not declared in class"
msgstr ""
-#: cp/decl.c:2727 cp/decl.c:2776
+#: cp/decl.c:2734 cp/decl.c:2783
#, gcc-internal-format
msgid "%q+D redeclared inline with %<gnu_inline%> attribute"
msgstr ""
-#: cp/decl.c:2730 cp/decl.c:2779
+#: cp/decl.c:2737 cp/decl.c:2786
#, gcc-internal-format
msgid "%q+D redeclared inline without %<gnu_inline%> attribute"
msgstr ""
@@ -37860,392 +37965,392 @@ msgstr ""
#. is_primary=
#. is_partial=
#. is_friend_decl=
-#: cp/decl.c:2796
+#: cp/decl.c:2803
#, gcc-internal-format
msgid "redeclaration of friend %q#D may not have default template arguments"
msgstr ""
-#: cp/decl.c:2810
+#: cp/decl.c:2817
#, gcc-internal-format
msgid "thread-local declaration of %q#D follows non-thread-local declaration"
msgstr ""
-#: cp/decl.c:2813
+#: cp/decl.c:2820
#, gcc-internal-format
msgid "non-thread-local declaration of %q#D follows thread-local declaration"
msgstr ""
-#: cp/decl.c:2828 cp/decl.c:2847 cp/name-lookup.c:582 cp/name-lookup.c:1166
+#: cp/decl.c:2835 cp/decl.c:2854 cp/name-lookup.c:582 cp/name-lookup.c:1166
#: cp/name-lookup.c:1189
#, gcc-internal-format
msgid "redeclaration of %q#D"
msgstr ""
-#: cp/decl.c:2996
+#: cp/decl.c:3003
#, gcc-internal-format
msgid "jump to label %qD"
msgstr ""
-#: cp/decl.c:2997
+#: cp/decl.c:3004
#, gcc-internal-format
msgid "jump to case label"
msgstr ""
-#: cp/decl.c:2999
+#: cp/decl.c:3006
#, gcc-internal-format
msgid " from here"
msgstr ""
-#: cp/decl.c:3022 cp/decl.c:3241
+#: cp/decl.c:3029 cp/decl.c:3248
#, gcc-internal-format
msgid " exits OpenMP structured block"
msgstr ""
-#: cp/decl.c:3049
+#: cp/decl.c:3056
#, gcc-internal-format
msgid " crosses initialization of %q#D"
msgstr ""
-#: cp/decl.c:3052 cp/decl.c:3204
+#: cp/decl.c:3059 cp/decl.c:3211
#, gcc-internal-format
msgid " enters scope of %q#D which has non-trivial destructor"
msgstr ""
-#: cp/decl.c:3070 cp/decl.c:3212
+#: cp/decl.c:3077 cp/decl.c:3219
#, gcc-internal-format
msgid " enters try block"
msgstr ""
-#: cp/decl.c:3072 cp/decl.c:3194 cp/decl.c:3214
+#: cp/decl.c:3079 cp/decl.c:3201 cp/decl.c:3221
#, gcc-internal-format
msgid " enters catch block"
msgstr ""
-#: cp/decl.c:3085 cp/decl.c:3222
+#: cp/decl.c:3092 cp/decl.c:3229
#, gcc-internal-format
msgid " enters OpenMP structured block"
msgstr ""
-#: cp/decl.c:3098 cp/decl.c:3216
+#: cp/decl.c:3105 cp/decl.c:3223
#, gcc-internal-format
msgid " enters synchronized or atomic statement"
msgstr ""
-#: cp/decl.c:3201
+#: cp/decl.c:3208
#, gcc-internal-format
msgid " skips initialization of %q#D"
msgstr ""
-#: cp/decl.c:3258 cp/parser.c:11735 cp/parser.c:11762
+#: cp/decl.c:3265 cp/parser.c:11755 cp/parser.c:11782
#, gcc-internal-format
msgid "invalid exit from OpenMP structured block"
msgstr ""
-#: cp/decl.c:3290
+#: cp/decl.c:3297
#, gcc-internal-format
msgid "label named wchar_t"
msgstr ""
-#: cp/decl.c:3609
+#: cp/decl.c:3616
#, gcc-internal-format
msgid "%qD is not a type"
msgstr ""
-#: cp/decl.c:3616 cp/parser.c:6031
+#: cp/decl.c:3623 cp/parser.c:6033
#, gcc-internal-format
msgid "%qD used without template parameters"
msgstr ""
-#: cp/decl.c:3625
+#: cp/decl.c:3632
#, gcc-internal-format
msgid "%q#T is not a class"
msgstr ""
-#: cp/decl.c:3649 cp/decl.c:3741
+#: cp/decl.c:3656 cp/decl.c:3748
#, gcc-internal-format
msgid "no class template named %q#T in %q#T"
msgstr ""
-#: cp/decl.c:3650
+#: cp/decl.c:3657
#, gcc-internal-format
msgid "no type named %q#T in %q#T"
msgstr ""
-#: cp/decl.c:3662
+#: cp/decl.c:3669
#, gcc-internal-format
msgid "lookup of %qT in %qT is ambiguous"
msgstr ""
-#: cp/decl.c:3671
+#: cp/decl.c:3678
#, gcc-internal-format
msgid "%<typename %T::%D%> names %q#T, which is not a class template"
msgstr ""
-#: cp/decl.c:3678
+#: cp/decl.c:3685
#, gcc-internal-format
msgid "%<typename %T::%D%> names %q#T, which is not a type"
msgstr ""
-#: cp/decl.c:3750
+#: cp/decl.c:3757
#, gcc-internal-format
msgid "template parameters do not match template %qD"
msgstr ""
-#: cp/decl.c:4483
+#: cp/decl.c:4490
#, gcc-internal-format
msgid "an anonymous struct cannot have function members"
msgstr ""
-#: cp/decl.c:4486
+#: cp/decl.c:4493
#, gcc-internal-format
msgid "an anonymous union cannot have function members"
msgstr ""
-#: cp/decl.c:4504
+#: cp/decl.c:4511
#, gcc-internal-format
msgid "member %q+#D with constructor not allowed in anonymous aggregate"
msgstr ""
-#: cp/decl.c:4507
+#: cp/decl.c:4514
#, gcc-internal-format
msgid "member %q+#D with destructor not allowed in anonymous aggregate"
msgstr ""
-#: cp/decl.c:4510
+#: cp/decl.c:4517
#, gcc-internal-format
msgid ""
"member %q+#D with copy assignment operator not allowed in anonymous aggregate"
msgstr ""
-#: cp/decl.c:4528
+#: cp/decl.c:4535
#, gcc-internal-format
msgid "attribute ignored in declaration of %q#T"
msgstr ""
-#: cp/decl.c:4531
+#: cp/decl.c:4538
#, gcc-internal-format
msgid "attribute for %q#T must follow the %qs keyword"
msgstr ""
-#: cp/decl.c:4554
+#: cp/decl.c:4561
#, gcc-internal-format
msgid "multiple types in one declaration"
msgstr ""
-#: cp/decl.c:4559
+#: cp/decl.c:4566
#, gcc-internal-format
msgid "redeclaration of C++ built-in type %qT"
msgstr ""
-#: cp/decl.c:4577
+#: cp/decl.c:4584
#, gcc-internal-format
msgid "%<auto%> can only be specified for variables or function declarations"
msgstr ""
-#: cp/decl.c:4603
+#: cp/decl.c:4610
#, gcc-internal-format
msgid "missing type-name in typedef-declaration"
msgstr ""
-#: cp/decl.c:4611
+#: cp/decl.c:4618
#, gcc-internal-format
msgid "ISO C++ prohibits anonymous structs"
msgstr ""
-#: cp/decl.c:4618
+#: cp/decl.c:4625
#, gcc-internal-format
msgid "%<inline%> can only be specified for functions"
msgstr ""
-#: cp/decl.c:4621
+#: cp/decl.c:4628
#, gcc-internal-format
msgid "%<virtual%> can only be specified for functions"
msgstr ""
-#: cp/decl.c:4626
+#: cp/decl.c:4633
#, gcc-internal-format
msgid "%<friend%> can only be specified inside a class"
msgstr ""
-#: cp/decl.c:4629
+#: cp/decl.c:4636
#, gcc-internal-format
msgid "%<explicit%> can only be specified for constructors"
msgstr ""
-#: cp/decl.c:4632
+#: cp/decl.c:4639
#, gcc-internal-format
msgid "a storage class can only be specified for objects and functions"
msgstr ""
-#: cp/decl.c:4636
+#: cp/decl.c:4643
#, gcc-internal-format
msgid "%<const%> can only be specified for objects and functions"
msgstr ""
-#: cp/decl.c:4640
+#: cp/decl.c:4647
#, gcc-internal-format
msgid "%<volatile%> can only be specified for objects and functions"
msgstr ""
-#: cp/decl.c:4644
+#: cp/decl.c:4651
#, gcc-internal-format
msgid "%<__restrict%> can only be specified for objects and functions"
msgstr ""
-#: cp/decl.c:4648
+#: cp/decl.c:4655
#, gcc-internal-format
msgid "%<__thread%> can only be specified for objects and functions"
msgstr ""
-#: cp/decl.c:4652
+#: cp/decl.c:4659
#, gcc-internal-format
msgid "%<typedef%> was ignored in this declaration"
msgstr ""
-#: cp/decl.c:4655
+#: cp/decl.c:4662
#, gcc-internal-format
msgid "%<constexpr%> cannot be used for type declarations"
msgstr ""
-#: cp/decl.c:4677
+#: cp/decl.c:4684
#, gcc-internal-format
msgid "attribute ignored in explicit instantiation %q#T"
msgstr ""
-#: cp/decl.c:4680
+#: cp/decl.c:4687
#, gcc-internal-format
msgid "no attribute can be applied to an explicit instantiation"
msgstr ""
-#: cp/decl.c:4752
+#: cp/decl.c:4759
#, 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:4756
+#: cp/decl.c:4763
#, gcc-internal-format
msgid ""
"ignoring attributes applied to dependent type %qT without an associated "
"declaration"
msgstr ""
-#: cp/decl.c:4825 cp/decl2.c:889
+#: cp/decl.c:4832 cp/decl2.c:889
#, gcc-internal-format
msgid "typedef %qD is initialized (use decltype instead)"
msgstr ""
-#: cp/decl.c:4833
+#: cp/decl.c:4840
#, gcc-internal-format
msgid "declaration of %q#D has %<extern%> and is initialized"
msgstr ""
-#: cp/decl.c:4862
+#: cp/decl.c:4869
#, gcc-internal-format
msgid "definition of %q#D is marked %<dllimport%>"
msgstr ""
-#: cp/decl.c:4886
+#: cp/decl.c:4893
#, gcc-internal-format
msgid "%q+#D is not a static data member of %q#T"
msgstr ""
-#: cp/decl.c:4895
+#: cp/decl.c:4902
#, gcc-internal-format
msgid "non-member-template declaration of %qD"
msgstr ""
-#: cp/decl.c:4896
+#: cp/decl.c:4903
#, gcc-internal-format
msgid "does not match member template declaration here"
msgstr ""
-#: cp/decl.c:4909
+#: cp/decl.c:4916
#, gcc-internal-format
msgid "ISO C++ does not permit %<%T::%D%> to be defined as %<%T::%D%>"
msgstr ""
-#: cp/decl.c:4921
+#: cp/decl.c:4928
#, gcc-internal-format
msgid "duplicate initialization of %qD"
msgstr ""
-#: cp/decl.c:4926
+#: cp/decl.c:4933
#, gcc-internal-format
msgid "%qD declared %<constexpr%> outside its class"
msgstr ""
-#: cp/decl.c:4969
+#: cp/decl.c:4976
#, gcc-internal-format
msgid "declaration of %q#D outside of class is not definition"
msgstr ""
-#: cp/decl.c:5002
+#: cp/decl.c:5009
#, gcc-internal-format
msgid "%qD declared %<thread_local%> in %<constexpr%> function"
msgstr ""
-#: cp/decl.c:5005
+#: cp/decl.c:5012
#, gcc-internal-format
msgid "%qD declared %<static%> in %<constexpr%> function"
msgstr ""
-#: cp/decl.c:5070
+#: cp/decl.c:5077
#, gcc-internal-format
msgid "variable %q#D has initializer but incomplete type"
msgstr ""
-#: cp/decl.c:5076 cp/decl.c:5940
+#: cp/decl.c:5083 cp/decl.c:5947
#, gcc-internal-format
msgid "elements of array %q#D have incomplete type"
msgstr ""
-#: cp/decl.c:5083 cp/decl.c:6570
+#: cp/decl.c:5090 cp/decl.c:6593
#, gcc-internal-format
msgid "declaration of %q#D has no initializer"
msgstr ""
-#: cp/decl.c:5085
+#: cp/decl.c:5092
#, gcc-internal-format
msgid "aggregate %q#D has incomplete type and cannot be defined"
msgstr ""
-#: cp/decl.c:5119
+#: cp/decl.c:5126
#, gcc-internal-format
msgid "%qD declared as reference but not initialized"
msgstr ""
-#: cp/decl.c:5176
+#: cp/decl.c:5183
#, gcc-internal-format
msgid "name used in a GNU-style designated initializer for an array"
msgstr ""
-#: cp/decl.c:5182
+#: cp/decl.c:5189
#, gcc-internal-format
msgid "name %qD used in a GNU-style designated initializer for an array"
msgstr ""
-#: cp/decl.c:5198 cp/typeck2.c:1287 cp/typeck2.c:1397
+#: cp/decl.c:5205 cp/typeck2.c:1286 cp/typeck2.c:1396
#, gcc-internal-format
msgid "non-trivial designated initializers not supported"
msgstr ""
-#: cp/decl.c:5201
+#: cp/decl.c:5208
#, gcc-internal-format
msgid "C99 designator %qE is not an integral constant-expression"
msgstr ""
-#: cp/decl.c:5249
+#: cp/decl.c:5256
#, gcc-internal-format
msgid "initializer fails to determine size of %qD"
msgstr ""
-#: cp/decl.c:5255
+#: cp/decl.c:5262
#, gcc-internal-format
msgid "array size missing in %qD"
msgstr ""
-#: cp/decl.c:5266
+#: cp/decl.c:5273
#, gcc-internal-format
msgid "zero-size array %qD"
msgstr ""
@@ -38253,916 +38358,916 @@ msgstr ""
#. An automatic variable with an incomplete type: that is an error.
#. Don't talk about array types here, since we took care of that
#. message in grokdeclarator.
-#: cp/decl.c:5308
+#: cp/decl.c:5315
#, gcc-internal-format
msgid "storage size of %qD isn%'t known"
msgstr ""
-#: cp/decl.c:5331
+#: cp/decl.c:5338
#, gcc-internal-format
msgid "storage size of %qD isn%'t constant"
msgstr ""
-#: cp/decl.c:5377
+#: cp/decl.c:5384
#, 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:5381
+#: cp/decl.c:5388
#, gcc-internal-format
msgid "you can work around this by removing the initializer"
msgstr ""
-#: cp/decl.c:5408
+#: cp/decl.c:5415
#, gcc-internal-format
msgid "uninitialized const %qD"
msgstr ""
-#: cp/decl.c:5412
+#: cp/decl.c:5419
#, gcc-internal-format
msgid "uninitialized variable %qD in %<constexpr%> function"
msgstr ""
-#: cp/decl.c:5422
+#: cp/decl.c:5429
#, gcc-internal-format
msgid "%q#T has no user-provided default constructor"
msgstr ""
-#: cp/decl.c:5426
+#: cp/decl.c:5433
#, gcc-internal-format
msgid ""
"constructor is not user-provided because it is explicitly defaulted in the "
"class body"
msgstr ""
-#: cp/decl.c:5429
+#: cp/decl.c:5436
#, gcc-internal-format
msgid "and the implicitly-defined constructor does not initialize %q#D"
msgstr ""
-#: cp/decl.c:5552
+#: cp/decl.c:5559
#, gcc-internal-format
msgid "invalid type %qT as initializer for a vector of type %qT"
msgstr ""
-#: cp/decl.c:5593
+#: cp/decl.c:5600
#, gcc-internal-format
msgid "initializer for %qT must be brace-enclosed"
msgstr ""
-#: cp/decl.c:5619
+#: cp/decl.c:5626
#, gcc-internal-format
msgid "%<[%E] =%> used in a GNU-style designated initializer for class %qT"
msgstr ""
-#: cp/decl.c:5627
+#: cp/decl.c:5634
#, gcc-internal-format
msgid "%qT has no non-static data member named %qD"
msgstr ""
-#: cp/decl.c:5647
+#: cp/decl.c:5654
#, gcc-internal-format
msgid "invalid initializer for %q#D"
msgstr ""
-#: cp/decl.c:5677
+#: cp/decl.c:5684
#, gcc-internal-format
msgid "C99 designator %qE outside aggregate initializer"
msgstr ""
-#: cp/decl.c:5714 cp/decl.c:5919 cp/typeck2.c:1274 cp/typeck2.c:1485
-#: cp/typeck2.c:1514 cp/typeck2.c:1561
+#: cp/decl.c:5721 cp/decl.c:5926 cp/typeck2.c:1273 cp/typeck2.c:1482
+#: cp/typeck2.c:1526 cp/typeck2.c:1573
#, gcc-internal-format
msgid "too many initializers for %qT"
msgstr ""
-#: cp/decl.c:5753
+#: cp/decl.c:5760
#, gcc-internal-format
msgid "braces around scalar initializer for type %qT"
msgstr ""
-#: cp/decl.c:5860
+#: cp/decl.c:5867
#, gcc-internal-format
msgid "missing braces around initializer for %qT"
msgstr ""
-#: cp/decl.c:5942
+#: cp/decl.c:5949
#, gcc-internal-format
msgid "elements of array %q#T have incomplete type"
msgstr ""
-#: cp/decl.c:5950
+#: cp/decl.c:5957
#, gcc-internal-format
msgid "variable-sized compound literal"
msgstr ""
-#: cp/decl.c:6004
+#: cp/decl.c:6011
#, gcc-internal-format
msgid "%q#D has incomplete type"
msgstr ""
-#: cp/decl.c:6024
+#: cp/decl.c:6031
#, gcc-internal-format
msgid "scalar object %qD requires one element in initializer"
msgstr ""
-#: cp/decl.c:6067
+#: cp/decl.c:6074
#, gcc-internal-format
msgid "in C++98 %qD must be initialized by constructor, not by %<{...}%>"
msgstr ""
-#: cp/decl.c:6161
+#: cp/decl.c:6168
#, gcc-internal-format
msgid "array %qD initialized by parenthesized string literal %qE"
msgstr ""
-#: cp/decl.c:6192
+#: cp/decl.c:6199
#, gcc-internal-format
msgid "initializer invalid for static member with constructor"
msgstr ""
-#: cp/decl.c:6194
+#: cp/decl.c:6201
#, gcc-internal-format
msgid "non-constant in-class initialization invalid for static member %qD"
msgstr ""
-#: cp/decl.c:6199
+#: cp/decl.c:6206
#, gcc-internal-format
msgid "(an out of class initialization is required)"
msgstr ""
-#: cp/decl.c:6373
+#: cp/decl.c:6383
#, gcc-internal-format
msgid "reference %qD is initialized with itself"
msgstr ""
-#: cp/decl.c:6529
+#: cp/decl.c:6552
#, gcc-internal-format
msgid "assignment (not initialization) in declaration"
msgstr ""
-#: cp/decl.c:6681
+#: cp/decl.c:6704
#, gcc-internal-format
msgid "variable concept has no initializer"
msgstr ""
-#: cp/decl.c:6709
+#: cp/decl.c:6732
#, gcc-internal-format
msgid "shadowing previous type declaration of %q#D"
msgstr ""
-#: cp/decl.c:6779
+#: cp/decl.c:6806
#, gcc-internal-format
msgid "Java object %qD not allocated with %<new%>"
msgstr ""
-#: cp/decl.c:6827
+#: cp/decl.c:6854
#, gcc-internal-format
msgid "non-static data member %qD has Java class type"
msgstr ""
-#: cp/decl.c:6908
+#: cp/decl.c:6935
#, gcc-internal-format
msgid "function %q#D is initialized like a variable"
msgstr ""
-#: cp/decl.c:7342
+#: cp/decl.c:7369
#, gcc-internal-format
msgid ""
"non-local variable %qD declared %<__thread%> needs dynamic initialization"
msgstr ""
-#: cp/decl.c:7345
+#: cp/decl.c:7372
#, gcc-internal-format
msgid ""
"non-local variable %qD declared %<__thread%> has a non-trivial destructor"
msgstr ""
-#: cp/decl.c:7351
+#: cp/decl.c:7378
#, gcc-internal-format
msgid "C++11 %<thread_local%> allows dynamic initialization and destruction"
msgstr ""
-#: cp/decl.c:7578
+#: cp/decl.c:7605
#, gcc-internal-format
msgid "initializer fails to determine size of %qT"
msgstr ""
-#: cp/decl.c:7582
+#: cp/decl.c:7609
#, gcc-internal-format
msgid "array size missing in %qT"
msgstr ""
-#: cp/decl.c:7585
+#: cp/decl.c:7612
#, gcc-internal-format
msgid "zero-size array %qT"
msgstr ""
-#: cp/decl.c:7601
+#: cp/decl.c:7628
#, gcc-internal-format
msgid "destructor for alien class %qT cannot be a member"
msgstr ""
-#: cp/decl.c:7603
+#: cp/decl.c:7630
#, gcc-internal-format
msgid "constructor for alien class %qT cannot be a member"
msgstr ""
-#: cp/decl.c:7627
+#: cp/decl.c:7654
#, gcc-internal-format
msgid "%qD declared as a %<virtual%> variable"
msgstr ""
-#: cp/decl.c:7629
+#: cp/decl.c:7656
#, gcc-internal-format
msgid "%qD declared as an %<inline%> variable"
msgstr ""
-#: cp/decl.c:7631
+#: cp/decl.c:7658
#, gcc-internal-format
msgid ""
"%<const%> and %<volatile%> function specifiers on %qD invalid in variable "
"declaration"
msgstr ""
-#: cp/decl.c:7636
+#: cp/decl.c:7663
#, gcc-internal-format
msgid "%qD declared as a %<virtual%> parameter"
msgstr ""
-#: cp/decl.c:7638
+#: cp/decl.c:7665
#, gcc-internal-format
msgid "%qD declared as an %<inline%> parameter"
msgstr ""
-#: cp/decl.c:7640
+#: cp/decl.c:7667
#, gcc-internal-format
msgid ""
"%<const%> and %<volatile%> function specifiers on %qD invalid in parameter "
"declaration"
msgstr ""
-#: cp/decl.c:7645
+#: cp/decl.c:7672
#, gcc-internal-format
msgid "%qD declared as a %<virtual%> type"
msgstr ""
-#: cp/decl.c:7647
+#: cp/decl.c:7674
#, gcc-internal-format
msgid "%qD declared as an %<inline%> type"
msgstr ""
-#: cp/decl.c:7649
+#: cp/decl.c:7676
#, gcc-internal-format
msgid ""
"%<const%> and %<volatile%> function specifiers on %qD invalid in type "
"declaration"
msgstr ""
-#: cp/decl.c:7654
+#: cp/decl.c:7681
#, gcc-internal-format
msgid "%qD declared as a %<virtual%> field"
msgstr ""
-#: cp/decl.c:7656
+#: cp/decl.c:7683
#, gcc-internal-format
msgid "%qD declared as an %<inline%> field"
msgstr ""
-#: cp/decl.c:7658
+#: cp/decl.c:7685
#, gcc-internal-format
msgid ""
"%<const%> and %<volatile%> function specifiers on %qD invalid in field "
"declaration"
msgstr ""
-#: cp/decl.c:7665
+#: cp/decl.c:7692
#, gcc-internal-format
msgid "%q+D declared as a friend"
msgstr ""
-#: cp/decl.c:7671
+#: cp/decl.c:7698
#, gcc-internal-format
msgid "%q+D declared with an exception specification"
msgstr ""
-#: cp/decl.c:7704
+#: cp/decl.c:7731
#, gcc-internal-format
msgid "definition of %qD is not in namespace enclosing %qT"
msgstr ""
-#: cp/decl.c:7744
+#: cp/decl.c:7771
#, gcc-internal-format
msgid "static member function %q#D declared with type qualifiers"
msgstr ""
-#: cp/decl.c:7754
+#: cp/decl.c:7781
#, gcc-internal-format
msgid "concept %q#D declared with function parameters"
msgstr ""
-#: cp/decl.c:7760
+#: cp/decl.c:7787
#, gcc-internal-format
msgid "concept %q#D declared with a deduced return type"
msgstr ""
-#: cp/decl.c:7762
+#: cp/decl.c:7789
#, gcc-internal-format
msgid "concept %q#D with non-%<bool%> return type %qT"
msgstr ""
-#: cp/decl.c:7833
+#: cp/decl.c:7860
#, gcc-internal-format
msgid "concept %qD has no definition"
msgstr ""
-#: cp/decl.c:7901
+#: cp/decl.c:7928
#, gcc-internal-format
msgid "defining explicit specialization %qD in friend declaration"
msgstr ""
#. Something like `template <class T> friend void f<T>()'.
-#: cp/decl.c:7911
+#: cp/decl.c:7938
#, gcc-internal-format
msgid "invalid use of template-id %qD in declaration of primary template"
msgstr ""
-#: cp/decl.c:7929
+#: cp/decl.c:7956
#, gcc-internal-format
msgid ""
"default arguments are not allowed in declaration of friend template "
"specialization %qD"
msgstr ""
-#: cp/decl.c:7937
+#: cp/decl.c:7964
#, gcc-internal-format
msgid ""
"%<inline%> is not allowed in declaration of friend template specialization "
"%qD"
msgstr ""
-#: cp/decl.c:7984
+#: cp/decl.c:8011
#, gcc-internal-format
msgid "cannot declare %<::main%> to be a template"
msgstr ""
-#: cp/decl.c:7986
+#: cp/decl.c:8013
#, gcc-internal-format
msgid "cannot declare %<::main%> to be inline"
msgstr ""
-#: cp/decl.c:7988
+#: cp/decl.c:8015
#, gcc-internal-format
msgid "cannot declare %<::main%> to be constexpr"
msgstr ""
-#: cp/decl.c:7990
+#: cp/decl.c:8017
#, gcc-internal-format
msgid "cannot declare %<::main%> to be static"
msgstr ""
-#: cp/decl.c:8047
+#: cp/decl.c:8074
#, gcc-internal-format
msgid "static member function %qD cannot have cv-qualifier"
msgstr ""
-#: cp/decl.c:8048
+#: cp/decl.c:8075
#, gcc-internal-format
msgid "non-member function %qD cannot have cv-qualifier"
msgstr ""
-#: cp/decl.c:8056
+#: cp/decl.c:8083
#, gcc-internal-format
msgid "static member function %qD cannot have ref-qualifier"
msgstr ""
-#: cp/decl.c:8057
+#: cp/decl.c:8084
#, gcc-internal-format
msgid "non-member function %qD cannot have ref-qualifier"
msgstr ""
-#: cp/decl.c:8074
+#: cp/decl.c:8101
#, gcc-internal-format
msgid "literal operator with C linkage"
msgstr ""
-#: cp/decl.c:8083
+#: cp/decl.c:8110
#, gcc-internal-format
msgid "%qD has invalid argument list"
msgstr ""
-#: cp/decl.c:8091
+#: cp/decl.c:8118
#, gcc-internal-format
msgid "integer suffix %<%s%> shadowed by implementation"
msgstr ""
-#: cp/decl.c:8097
+#: cp/decl.c:8124
#, gcc-internal-format
msgid "floating point suffix %<%s%> shadowed by implementation"
msgstr ""
-#: cp/decl.c:8103
+#: cp/decl.c:8130
#, gcc-internal-format
msgid "%qD must be a non-member function"
msgstr ""
-#: cp/decl.c:8182
+#: cp/decl.c:8209
#, gcc-internal-format
msgid "%<::main%> must return %<int%>"
msgstr ""
-#: cp/decl.c:8224
+#: cp/decl.c:8251
#, gcc-internal-format
msgid "definition of implicitly-declared %qD"
msgstr ""
-#: cp/decl.c:8229
+#: cp/decl.c:8256
#, gcc-internal-format
msgid "definition of explicitly-defaulted %q+D"
msgstr ""
-#: cp/decl.c:8230
+#: cp/decl.c:8257
#, gcc-internal-format
msgid "%q+#D explicitly defaulted here"
msgstr ""
-#: cp/decl.c:8247 cp/decl2.c:787
+#: cp/decl.c:8274 cp/decl2.c:787
#, gcc-internal-format
msgid "no %q#D member function declared in class %qT"
msgstr ""
-#: cp/decl.c:8431
+#: cp/decl.c:8458
#, gcc-internal-format
msgid "cannot declare %<::main%> to be a global variable"
msgstr ""
-#: cp/decl.c:8439
+#: cp/decl.c:8466
#, gcc-internal-format
msgid "a non-template variable cannot be %<concept%>"
msgstr ""
-#: cp/decl.c:8446
+#: cp/decl.c:8473
#, gcc-internal-format
msgid "concept must have type %<bool%>"
msgstr ""
-#: cp/decl.c:8559
+#: cp/decl.c:8586
#, gcc-internal-format
msgid "in-class initialization of static data member %q#D of incomplete type"
msgstr ""
-#: cp/decl.c:8563
+#: cp/decl.c:8590
#, gcc-internal-format
msgid ""
"%<constexpr%> needed for in-class initialization of static data member %q#D "
"of non-integral type"
msgstr ""
-#: cp/decl.c:8566
+#: cp/decl.c:8593
#, gcc-internal-format
msgid "in-class initialization of static data member %q#D of non-literal type"
msgstr ""
-#: cp/decl.c:8579
+#: cp/decl.c:8606
#, gcc-internal-format
msgid ""
"invalid in-class initialization of static data member of non-integral type "
"%qT"
msgstr ""
-#: cp/decl.c:8585
+#: cp/decl.c:8612
#, gcc-internal-format
msgid "ISO C++ forbids in-class initialization of non-const static member %qD"
msgstr ""
-#: cp/decl.c:8589
+#: cp/decl.c:8616
#, gcc-internal-format
msgid ""
"ISO C++ forbids initialization of member constant %qD of non-integral type "
"%qT"
msgstr ""
-#: cp/decl.c:8688 cp/decl.c:8715
+#: cp/decl.c:8711 cp/decl.c:8738
#, gcc-internal-format
msgid "size of array %qD has non-integral type %qT"
msgstr ""
-#: cp/decl.c:8691 cp/decl.c:8717
+#: cp/decl.c:8714 cp/decl.c:8740
#, gcc-internal-format
msgid "size of array has non-integral type %qT"
msgstr ""
-#: cp/decl.c:8748 cp/decl.c:8801
+#: cp/decl.c:8771 cp/decl.c:8824
#, gcc-internal-format
msgid "size of array is not an integral constant-expression"
msgstr ""
-#: cp/decl.c:8767
+#: cp/decl.c:8790
#, gcc-internal-format
msgid "size of array %qD is negative"
msgstr ""
-#: cp/decl.c:8769 cp/init.c:3349
+#: cp/decl.c:8792 cp/init.c:3418
#, gcc-internal-format
msgid "size of array is negative"
msgstr ""
-#: cp/decl.c:8783
+#: cp/decl.c:8806
#, gcc-internal-format
msgid "ISO C++ forbids zero-size array %qD"
msgstr ""
-#: cp/decl.c:8785
+#: cp/decl.c:8808
#, gcc-internal-format
msgid "ISO C++ forbids zero-size array"
msgstr ""
-#: cp/decl.c:8798
+#: cp/decl.c:8821
#, gcc-internal-format
msgid "size of array %qD is not an integral constant-expression"
msgstr ""
-#: cp/decl.c:8807
+#: cp/decl.c:8830
#, gcc-internal-format
msgid "ISO C++ forbids variable length array %qD"
msgstr ""
-#: cp/decl.c:8809
+#: cp/decl.c:8832
#, gcc-internal-format
msgid "ISO C++ forbids variable length array"
msgstr ""
-#: cp/decl.c:8815
+#: cp/decl.c:8838
#, gcc-internal-format
msgid "variable length array %qD is used"
msgstr ""
-#: cp/decl.c:8818
+#: cp/decl.c:8841
#, gcc-internal-format
msgid "variable length array is used"
msgstr ""
-#: cp/decl.c:8869
+#: cp/decl.c:8892
#, gcc-internal-format
msgid "overflow in array dimension"
msgstr ""
-#: cp/decl.c:8922
+#: cp/decl.c:8945
#, gcc-internal-format
msgid "%qD declared as array of %qT"
msgstr ""
-#: cp/decl.c:8932
+#: cp/decl.c:8955
#, gcc-internal-format
msgid "declaration of %qD as array of void"
msgstr ""
-#: cp/decl.c:8934
+#: cp/decl.c:8957
#, gcc-internal-format
msgid "creating array of void"
msgstr ""
-#: cp/decl.c:8939
+#: cp/decl.c:8962
#, gcc-internal-format
msgid "declaration of %qD as array of functions"
msgstr ""
-#: cp/decl.c:8941
+#: cp/decl.c:8964
#, gcc-internal-format
msgid "creating array of functions"
msgstr ""
-#: cp/decl.c:8946
+#: cp/decl.c:8969
#, gcc-internal-format
msgid "declaration of %qD as array of references"
msgstr ""
-#: cp/decl.c:8948
+#: cp/decl.c:8971
#, gcc-internal-format
msgid "creating array of references"
msgstr ""
-#: cp/decl.c:8953
+#: cp/decl.c:8976
#, gcc-internal-format
msgid "declaration of %qD as array of function members"
msgstr ""
-#: cp/decl.c:8955
+#: cp/decl.c:8978
#, gcc-internal-format
msgid "creating array of function members"
msgstr ""
-#: cp/decl.c:8969
+#: cp/decl.c:8992
#, gcc-internal-format
msgid ""
"declaration of %qD as multidimensional array must have bounds for all "
"dimensions except the first"
msgstr ""
-#: cp/decl.c:8973
+#: cp/decl.c:8996
#, gcc-internal-format
msgid ""
"multidimensional array must have bounds for all dimensions except the first"
msgstr ""
-#: cp/decl.c:9032
+#: cp/decl.c:9055
#, gcc-internal-format
msgid "return type specification for constructor invalid"
msgstr ""
-#: cp/decl.c:9035
+#: cp/decl.c:9058
#, gcc-internal-format
msgid "qualifiers are not allowed on constructor declaration"
msgstr ""
-#: cp/decl.c:9045
+#: cp/decl.c:9068
#, gcc-internal-format
msgid "return type specification for destructor invalid"
msgstr ""
-#: cp/decl.c:9048
+#: cp/decl.c:9071
#, gcc-internal-format
msgid "qualifiers are not allowed on destructor declaration"
msgstr ""
-#: cp/decl.c:9062
+#: cp/decl.c:9085
#, gcc-internal-format
msgid "return type specified for %<operator %T%>"
msgstr ""
-#: cp/decl.c:9065
+#: cp/decl.c:9088
#, gcc-internal-format
msgid "qualifiers are not allowed on declaration of %<operator %T%>"
msgstr ""
-#: cp/decl.c:9089
+#: cp/decl.c:9112
#, gcc-internal-format
msgid "unnamed variable or field declared void"
msgstr ""
-#: cp/decl.c:9096
+#: cp/decl.c:9119
#, gcc-internal-format
msgid "variable or field declared void"
msgstr ""
-#: cp/decl.c:9300
+#: cp/decl.c:9323
#, gcc-internal-format
msgid "invalid use of qualified-name %<::%D%>"
msgstr ""
-#: cp/decl.c:9303 cp/decl.c:9323
+#: cp/decl.c:9326 cp/decl.c:9346
#, gcc-internal-format
msgid "invalid use of qualified-name %<%T::%D%>"
msgstr ""
-#: cp/decl.c:9306
+#: cp/decl.c:9329
#, gcc-internal-format
msgid "invalid use of qualified-name %<%D::%D%>"
msgstr ""
-#: cp/decl.c:9315
+#: cp/decl.c:9338
#, gcc-internal-format
msgid "%q#T is not a class or a namespace"
msgstr ""
-#: cp/decl.c:9339 cp/decl.c:9436 cp/decl.c:9445 cp/decl.c:10876
+#: cp/decl.c:9362 cp/decl.c:9459 cp/decl.c:9468 cp/decl.c:10899
#, gcc-internal-format
msgid "declaration of %qD as non-function"
msgstr ""
-#: cp/decl.c:9345
+#: cp/decl.c:9368
#, gcc-internal-format
msgid "declaration of %qD as non-member"
msgstr ""
-#: cp/decl.c:9381
+#: cp/decl.c:9404
#, gcc-internal-format
msgid "declarator-id missing; using reserved word %qD"
msgstr ""
-#: cp/decl.c:9428
+#: cp/decl.c:9451
#, gcc-internal-format
msgid "function definition does not declare parameters"
msgstr ""
-#: cp/decl.c:9453
+#: cp/decl.c:9476
#, gcc-internal-format
msgid "declaration of %qD as %<typedef%>"
msgstr ""
-#: cp/decl.c:9458
+#: cp/decl.c:9481
#, gcc-internal-format
msgid "declaration of %qD as parameter"
msgstr ""
-#: cp/decl.c:9491
+#: cp/decl.c:9514
#, gcc-internal-format
msgid "%<concept%> cannot appear in a typedef declaration"
msgstr ""
-#: cp/decl.c:9497
+#: cp/decl.c:9520
#, gcc-internal-format
msgid "%<constexpr%> cannot appear in a typedef declaration"
msgstr ""
-#: cp/decl.c:9505
+#: cp/decl.c:9528
#, gcc-internal-format
msgid "two or more data types in declaration of %qs"
msgstr ""
-#: cp/decl.c:9511
+#: cp/decl.c:9534
#, gcc-internal-format
msgid "conflicting specifiers in declaration of %qs"
msgstr ""
-#: cp/decl.c:9552
+#: cp/decl.c:9575
#, gcc-internal-format
msgid "ISO C++ does not support plain %<complex%> meaning %<double complex%>"
msgstr ""
-#: cp/decl.c:9600 cp/decl.c:9603 cp/decl.c:9606
+#: cp/decl.c:9623 cp/decl.c:9626 cp/decl.c:9629
#, gcc-internal-format
msgid "ISO C++ forbids declaration of %qs with no type"
msgstr ""
-#: cp/decl.c:9622
+#: cp/decl.c:9645
#, gcc-internal-format
msgid "%<__int%d%> is not supported by this target"
msgstr ""
-#: cp/decl.c:9628
+#: cp/decl.c:9651
#, gcc-internal-format
msgid "ISO C++ does not support %<__int%d%> for %qs"
msgstr ""
-#: cp/decl.c:9650 cp/decl.c:9670
+#: cp/decl.c:9673 cp/decl.c:9693
#, gcc-internal-format
msgid "%<signed%> or %<unsigned%> invalid for %qs"
msgstr ""
-#: cp/decl.c:9652
+#: cp/decl.c:9675
#, gcc-internal-format
msgid "%<signed%> and %<unsigned%> specified together for %qs"
msgstr ""
-#: cp/decl.c:9654
+#: cp/decl.c:9677
#, gcc-internal-format
msgid "%<long long%> invalid for %qs"
msgstr ""
-#: cp/decl.c:9656
+#: cp/decl.c:9679
#, gcc-internal-format
msgid "%<long%> invalid for %qs"
msgstr ""
-#: cp/decl.c:9658
+#: cp/decl.c:9681
#, gcc-internal-format
msgid "%<short%> invalid for %qs"
msgstr ""
-#: cp/decl.c:9660
+#: cp/decl.c:9683
#, gcc-internal-format
msgid "%<long%> or %<short%> invalid for %qs"
msgstr ""
-#: cp/decl.c:9662
+#: cp/decl.c:9685
#, gcc-internal-format
msgid "%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs"
msgstr ""
-#: cp/decl.c:9664
+#: cp/decl.c:9687
#, gcc-internal-format
msgid "%<long%> or %<short%> specified with char for %qs"
msgstr ""
-#: cp/decl.c:9666
+#: cp/decl.c:9689
#, gcc-internal-format
msgid "%<long%> and %<short%> specified together for %qs"
msgstr ""
-#: cp/decl.c:9672
+#: cp/decl.c:9695
#, gcc-internal-format
msgid "%<short%> or %<long%> invalid for %qs"
msgstr ""
-#: cp/decl.c:9680
+#: cp/decl.c:9703
#, gcc-internal-format
msgid "long, short, signed or unsigned used invalidly for %qs"
msgstr ""
-#: cp/decl.c:9748
+#: cp/decl.c:9771
#, gcc-internal-format
msgid "complex invalid for %qs"
msgstr ""
-#: cp/decl.c:9795
+#: cp/decl.c:9818
#, gcc-internal-format
msgid "member %qD cannot be declared both %<virtual%> and %<static%>"
msgstr ""
-#: cp/decl.c:9801
+#: cp/decl.c:9824
#, gcc-internal-format
msgid "member %qD cannot be declared both %<virtual%> and %<constexpr%>"
msgstr ""
-#: cp/decl.c:9811
+#: cp/decl.c:9834
#, gcc-internal-format
msgid "typedef declaration invalid in parameter declaration"
msgstr ""
-#: cp/decl.c:9816
+#: cp/decl.c:9839
#, gcc-internal-format
msgid "storage class specified for template parameter %qs"
msgstr ""
-#: cp/decl.c:9822
+#: cp/decl.c:9845
#, gcc-internal-format
msgid "storage class specifiers invalid in parameter declarations"
msgstr ""
-#: cp/decl.c:9826
+#: cp/decl.c:9849
#, gcc-internal-format
msgid "a parameter cannot be declared %<concept%>"
msgstr ""
-#: cp/decl.c:9831
+#: cp/decl.c:9854
#, gcc-internal-format
msgid "a parameter cannot be declared %<constexpr%>"
msgstr ""
-#: cp/decl.c:9841
+#: cp/decl.c:9864
#, gcc-internal-format
msgid "%<virtual%> outside class declaration"
msgstr ""
-#: cp/decl.c:9859
+#: cp/decl.c:9882
#, gcc-internal-format
msgid "multiple storage classes in declaration of %qs"
msgstr ""
-#: cp/decl.c:9882
+#: cp/decl.c:9905
#, gcc-internal-format
msgid "storage class specified for %qs"
msgstr ""
-#: cp/decl.c:9886
+#: cp/decl.c:9909
#, gcc-internal-format
msgid "storage class specified for parameter %qs"
msgstr ""
-#: cp/decl.c:9899
+#: cp/decl.c:9922
#, gcc-internal-format
msgid "nested function %qs declared %<extern%>"
msgstr ""
-#: cp/decl.c:9903
+#: cp/decl.c:9926
#, gcc-internal-format
msgid "top-level declaration of %qs specifies %<auto%>"
msgstr ""
-#: cp/decl.c:9910
+#: cp/decl.c:9933
#, gcc-internal-format
msgid "function-scope %qs implicitly auto and declared %<__thread%>"
msgstr ""
-#: cp/decl.c:9922
+#: cp/decl.c:9945
#, gcc-internal-format
msgid "storage class specifiers invalid in friend function declarations"
msgstr ""
-#: cp/decl.c:10034
+#: cp/decl.c:10057
#, gcc-internal-format
msgid "%qs declared as function returning a function"
msgstr ""
-#: cp/decl.c:10039
+#: cp/decl.c:10062
#, gcc-internal-format
msgid "%qs declared as function returning an array"
msgstr ""
-#: cp/decl.c:10063
+#: cp/decl.c:10086
#, gcc-internal-format
msgid "requires-clause on return type"
msgstr ""
-#: cp/decl.c:10082
+#: cp/decl.c:10105
#, gcc-internal-format
msgid "%qs function uses %<auto%> type specifier without trailing return type"
msgstr ""
-#: cp/decl.c:10085
+#: cp/decl.c:10108
#, gcc-internal-format
msgid "deduced return type only available with -std=c++14 or -std=gnu++14"
msgstr ""
-#: cp/decl.c:10091
+#: cp/decl.c:10114
#, gcc-internal-format
msgid "virtual function cannot have deduced return type"
msgstr ""
-#: cp/decl.c:10098
+#: cp/decl.c:10121
#, gcc-internal-format
msgid ""
"%qs function with trailing return type has %qT as its type rather than plain "
@@ -39171,515 +39276,515 @@ msgstr ""
#. Not using maybe_warn_cpp0x because this should
#. always be an error.
-#: cp/decl.c:10110
+#: cp/decl.c:10133
#, gcc-internal-format
msgid "trailing return type only available with -std=c++11 or -std=gnu++11"
msgstr ""
-#: cp/decl.c:10113
+#: cp/decl.c:10136
#, gcc-internal-format
msgid ""
"%qs function with trailing return type not declared with %<auto%> type "
"specifier"
msgstr ""
-#: cp/decl.c:10150
+#: cp/decl.c:10173
#, gcc-internal-format
msgid "destructor cannot be static member function"
msgstr ""
-#: cp/decl.c:10151
+#: cp/decl.c:10174
#, gcc-internal-format
msgid "constructor cannot be static member function"
msgstr ""
-#: cp/decl.c:10155
+#: cp/decl.c:10178
#, gcc-internal-format
msgid "destructors may not be cv-qualified"
msgstr ""
-#: cp/decl.c:10156
+#: cp/decl.c:10179
#, gcc-internal-format
msgid "constructors may not be cv-qualified"
msgstr ""
-#: cp/decl.c:10164
+#: cp/decl.c:10187
#, gcc-internal-format
msgid "destructors may not be ref-qualified"
msgstr ""
-#: cp/decl.c:10183
+#: cp/decl.c:10206
#, gcc-internal-format
msgid "constructors cannot be declared %<virtual%>"
msgstr ""
#. Cannot be both friend and virtual.
-#: cp/decl.c:10198
+#: cp/decl.c:10221
#, gcc-internal-format
msgid "virtual functions cannot be friends"
msgstr ""
-#: cp/decl.c:10202
+#: cp/decl.c:10225
#, gcc-internal-format
msgid "friend declaration not in class definition"
msgstr ""
-#: cp/decl.c:10204
+#: cp/decl.c:10227
#, gcc-internal-format
msgid "can%'t define friend function %qs in a local class definition"
msgstr ""
-#: cp/decl.c:10216
+#: cp/decl.c:10239
#, gcc-internal-format
msgid "a conversion function cannot have a trailing return type"
msgstr ""
-#: cp/decl.c:10227
+#: cp/decl.c:10250
#, gcc-internal-format
msgid "destructors may not have parameters"
msgstr ""
-#: cp/decl.c:10264
+#: cp/decl.c:10287
#, gcc-internal-format
msgid "cannot declare pointer to %q#T"
msgstr ""
-#: cp/decl.c:10277 cp/decl.c:10284
+#: cp/decl.c:10300 cp/decl.c:10307
#, gcc-internal-format
msgid "cannot declare reference to %q#T"
msgstr ""
-#: cp/decl.c:10286
+#: cp/decl.c:10309
#, gcc-internal-format
msgid "cannot declare pointer to %q#T member"
msgstr ""
-#: cp/decl.c:10315
+#: cp/decl.c:10338
#, gcc-internal-format
msgid "cannot declare reference to qualified function type %qT"
msgstr ""
-#: cp/decl.c:10316
+#: cp/decl.c:10339
#, gcc-internal-format
msgid "cannot declare pointer to qualified function type %qT"
msgstr ""
-#: cp/decl.c:10386
+#: cp/decl.c:10409
#, gcc-internal-format
msgid ""
"cannot declare reference to %q#T, which is not a typedef or a template type "
"argument"
msgstr ""
-#: cp/decl.c:10456
+#: cp/decl.c:10479
#, gcc-internal-format
msgid "template-id %qD used as a declarator"
msgstr ""
-#: cp/decl.c:10480
+#: cp/decl.c:10503
#, gcc-internal-format
msgid "member functions are implicitly friends of their class"
msgstr ""
-#: cp/decl.c:10485
+#: cp/decl.c:10508
#, gcc-internal-format
msgid "extra qualification %<%T::%> on member %qs"
msgstr ""
-#: cp/decl.c:10515
+#: cp/decl.c:10538
#, gcc-internal-format
msgid "cannot define member function %<%T::%s%> within %<%T%>"
msgstr ""
-#: cp/decl.c:10517
+#: cp/decl.c:10540
#, gcc-internal-format
msgid "cannot declare member function %<%T::%s%> within %<%T%>"
msgstr ""
-#: cp/decl.c:10525
+#: cp/decl.c:10548
#, gcc-internal-format
msgid "cannot declare member %<%T::%s%> within %qT"
msgstr ""
-#: cp/decl.c:10558
+#: cp/decl.c:10581
#, gcc-internal-format
msgid "non-parameter %qs cannot be a parameter pack"
msgstr ""
-#: cp/decl.c:10566
+#: cp/decl.c:10589
#, gcc-internal-format
msgid "data member may not have variably modified type %qT"
msgstr ""
-#: cp/decl.c:10568
+#: cp/decl.c:10591
#, gcc-internal-format
msgid "parameter may not have variably modified type %qT"
msgstr ""
-#: cp/decl.c:10579
+#: cp/decl.c:10602
#, gcc-internal-format
msgid "%<explicit%> outside class declaration"
msgstr ""
-#: cp/decl.c:10582
+#: cp/decl.c:10605
#, gcc-internal-format
msgid "%<explicit%> in friend declaration"
msgstr ""
-#: cp/decl.c:10585
+#: cp/decl.c:10608
#, gcc-internal-format
msgid ""
"only declarations of constructors and conversion operators can be %<explicit"
"%>"
msgstr ""
-#: cp/decl.c:10594
+#: cp/decl.c:10617
#, gcc-internal-format
msgid "non-member %qs cannot be declared %<mutable%>"
msgstr ""
-#: cp/decl.c:10599
+#: cp/decl.c:10622
#, gcc-internal-format
msgid "non-object member %qs cannot be declared %<mutable%>"
msgstr ""
-#: cp/decl.c:10605
+#: cp/decl.c:10628
#, gcc-internal-format
msgid "function %qs cannot be declared %<mutable%>"
msgstr ""
-#: cp/decl.c:10610
+#: cp/decl.c:10633
#, gcc-internal-format
msgid "static %qs cannot be declared %<mutable%>"
msgstr ""
-#: cp/decl.c:10615
+#: cp/decl.c:10638
#, gcc-internal-format
msgid "const %qs cannot be declared %<mutable%>"
msgstr ""
-#: cp/decl.c:10620
+#: cp/decl.c:10643
#, gcc-internal-format
msgid "reference %qs cannot be declared %<mutable%>"
msgstr ""
-#: cp/decl.c:10656
+#: cp/decl.c:10679
#, gcc-internal-format
msgid "typedef declared %<auto%>"
msgstr ""
-#: cp/decl.c:10661
+#: cp/decl.c:10684
#, gcc-internal-format
msgid "requires-clause on typedef"
msgstr ""
-#: cp/decl.c:10669
+#: cp/decl.c:10692
#, gcc-internal-format
msgid "typedef name may not be a nested-name-specifier"
msgstr ""
-#: cp/decl.c:10690
+#: cp/decl.c:10713
#, gcc-internal-format
msgid "ISO C++ forbids nested type %qD with same name as enclosing class"
msgstr ""
-#: cp/decl.c:10806
+#: cp/decl.c:10829
#, gcc-internal-format
msgid "%<inline%> specified for friend class declaration"
msgstr ""
-#: cp/decl.c:10814
+#: cp/decl.c:10837
#, gcc-internal-format
msgid "template parameters cannot be friends"
msgstr ""
-#: cp/decl.c:10816
+#: cp/decl.c:10839
#, gcc-internal-format
msgid "friend declaration requires class-key, i.e. %<friend class %T::%D%>"
msgstr ""
-#: cp/decl.c:10820
+#: cp/decl.c:10843
#, gcc-internal-format
msgid "friend declaration requires class-key, i.e. %<friend %#T%>"
msgstr ""
-#: cp/decl.c:10833
+#: cp/decl.c:10856
#, gcc-internal-format
msgid "trying to make class %qT a friend of global scope"
msgstr ""
-#: cp/decl.c:10853
+#: cp/decl.c:10876
#, gcc-internal-format
msgid "invalid qualifiers on non-member function type"
msgstr ""
-#: cp/decl.c:10857
+#: cp/decl.c:10880
#, gcc-internal-format
msgid "requires-clause on type-id"
msgstr ""
-#: cp/decl.c:10866
+#: cp/decl.c:10889
#, gcc-internal-format
msgid "abstract declarator %qT used as declaration"
msgstr ""
-#: cp/decl.c:10884
+#: cp/decl.c:10907
#, gcc-internal-format
msgid "requires-clause on declaration of non-function type %qT"
msgstr ""
-#: cp/decl.c:10902
+#: cp/decl.c:10925
#, gcc-internal-format
msgid "cannot use %<::%> in parameter declaration"
msgstr ""
-#: cp/decl.c:10907
+#: cp/decl.c:10930
#, gcc-internal-format
msgid "%<auto%> parameter not permitted in this context"
msgstr ""
-#: cp/decl.c:10909
+#: cp/decl.c:10932
#, gcc-internal-format
msgid "parameter declared %<auto%>"
msgstr ""
-#: cp/decl.c:10955
+#: cp/decl.c:10978
#, gcc-internal-format
msgid "non-static data member declared %<auto%>"
msgstr ""
#. Something like struct S { int N::j; };
-#: cp/decl.c:10987
+#: cp/decl.c:11009
#, gcc-internal-format
msgid "invalid use of %<::%>"
msgstr ""
-#: cp/decl.c:11009
+#: cp/decl.c:11031
#, gcc-internal-format
msgid "declaration of function %qD in invalid context"
msgstr ""
-#: cp/decl.c:11018
+#: cp/decl.c:11040
#, gcc-internal-format
msgid "function %qD declared %<virtual%> inside a union"
msgstr ""
-#: cp/decl.c:11027
+#: cp/decl.c:11049
#, gcc-internal-format
msgid "%qD cannot be declared %<virtual%>, since it is always static"
msgstr ""
-#: cp/decl.c:11043
+#: cp/decl.c:11065
#, gcc-internal-format
msgid "expected qualified name in friend declaration for destructor %qD"
msgstr ""
-#: cp/decl.c:11050
+#: cp/decl.c:11072
#, gcc-internal-format
msgid "declaration of %qD as member of %qT"
msgstr ""
-#: cp/decl.c:11056
+#: cp/decl.c:11078
#, gcc-internal-format
msgid "a destructor cannot be %<concept%>"
msgstr ""
-#: cp/decl.c:11061
+#: cp/decl.c:11083
#, gcc-internal-format
msgid "a destructor cannot be %<constexpr%>"
msgstr ""
-#: cp/decl.c:11067
+#: cp/decl.c:11089
#, gcc-internal-format
msgid "expected qualified name in friend declaration for constructor %qD"
msgstr ""
-#: cp/decl.c:11075
+#: cp/decl.c:11097
#, gcc-internal-format
msgid "a constructor cannot be %<concept%>"
msgstr ""
-#: cp/decl.c:11080
+#: cp/decl.c:11102
#, gcc-internal-format
msgid "a concept cannot be a member function"
msgstr ""
-#: cp/decl.c:11089
+#: cp/decl.c:11111
#, gcc-internal-format
msgid "specialization of variable template %qD declared as function"
msgstr ""
-#: cp/decl.c:11092
+#: cp/decl.c:11114
#, gcc-internal-format
msgid "variable template declared here"
msgstr ""
-#: cp/decl.c:11148
+#: cp/decl.c:11170
#, gcc-internal-format
msgid "field %qD has incomplete type %qT"
msgstr ""
-#: cp/decl.c:11153
+#: cp/decl.c:11175
#, gcc-internal-format
msgid "name %qT has incomplete type"
msgstr ""
-#: cp/decl.c:11163
+#: cp/decl.c:11185
#, gcc-internal-format
msgid "%qE is neither function nor member function; cannot be declared friend"
msgstr ""
-#: cp/decl.c:11222
+#: cp/decl.c:11244
#, gcc-internal-format
msgid "static data member %qE declared %<concept%>"
msgstr ""
-#: cp/decl.c:11226
+#: cp/decl.c:11248
#, gcc-internal-format
msgid "constexpr static data member %qD must have an initializer"
msgstr ""
-#: cp/decl.c:11234
+#: cp/decl.c:11256
#, gcc-internal-format
msgid "non-static data member %qE declared %<concept%>"
msgstr ""
-#: cp/decl.c:11238
+#: cp/decl.c:11260
#, gcc-internal-format
msgid "non-static data member %qE declared %<constexpr%>"
msgstr ""
-#: cp/decl.c:11288
+#: cp/decl.c:11310
#, gcc-internal-format
msgid "storage class %<auto%> invalid for function %qs"
msgstr ""
-#: cp/decl.c:11290
+#: cp/decl.c:11312
#, gcc-internal-format
msgid "storage class %<register%> invalid for function %qs"
msgstr ""
-#: cp/decl.c:11294
+#: cp/decl.c:11316
#, gcc-internal-format
msgid "storage class %<__thread%> invalid for function %qs"
msgstr ""
-#: cp/decl.c:11297
+#: cp/decl.c:11319
#, gcc-internal-format
msgid "storage class %<thread_local%> invalid for function %qs"
msgstr ""
-#: cp/decl.c:11302
+#: cp/decl.c:11324
#, gcc-internal-format
msgid "virt-specifiers in %qs not allowed outside a class definition"
msgstr ""
-#: cp/decl.c:11313
+#: cp/decl.c:11335
#, gcc-internal-format
msgid ""
"%<static%> specified invalid for function %qs declared out of global scope"
msgstr ""
-#: cp/decl.c:11317
+#: cp/decl.c:11339
#, gcc-internal-format
msgid ""
"%<inline%> specifier invalid for function %qs declared out of global scope"
msgstr ""
-#: cp/decl.c:11325
+#: cp/decl.c:11347
#, gcc-internal-format
msgid "virtual non-class function %qs"
msgstr ""
-#: cp/decl.c:11332
+#: cp/decl.c:11354
#, gcc-internal-format
msgid "%qs defined in a non-class scope"
msgstr ""
-#: cp/decl.c:11333
+#: cp/decl.c:11355
#, gcc-internal-format
msgid "%qs declared in a non-class scope"
msgstr ""
-#: cp/decl.c:11366
+#: cp/decl.c:11388
#, gcc-internal-format
msgid "cannot declare member function %qD to have static linkage"
msgstr ""
#. FIXME need arm citation
-#: cp/decl.c:11373
+#: cp/decl.c:11395
#, gcc-internal-format
msgid "cannot declare static function inside another function"
msgstr ""
-#: cp/decl.c:11407
+#: cp/decl.c:11429
#, gcc-internal-format
msgid ""
"%<static%> may not be used when defining (as opposed to declaring) a static "
"data member"
msgstr ""
-#: cp/decl.c:11414
+#: cp/decl.c:11436
#, gcc-internal-format
msgid "static member %qD declared %<register%>"
msgstr ""
-#: cp/decl.c:11420
+#: cp/decl.c:11442
#, gcc-internal-format
msgid "cannot explicitly declare member %q#D to have extern linkage"
msgstr ""
-#: cp/decl.c:11427
+#: cp/decl.c:11449
#, gcc-internal-format
msgid "declaration of constexpr variable %qD is not a definition"
msgstr ""
-#: cp/decl.c:11440
+#: cp/decl.c:11462
#, gcc-internal-format
msgid "%qs initialized and declared %<extern%>"
msgstr ""
-#: cp/decl.c:11444
+#: cp/decl.c:11466
#, gcc-internal-format
msgid "%qs has both %<extern%> and initializer"
msgstr ""
-#: cp/decl.c:11591
+#: cp/decl.c:11613
#, gcc-internal-format
msgid "default argument %qE uses %qD"
msgstr ""
-#: cp/decl.c:11594
+#: cp/decl.c:11616
#, gcc-internal-format
msgid "default argument %qE uses local variable %qD"
msgstr ""
-#: cp/decl.c:11679
+#: cp/decl.c:11701
#, gcc-internal-format
msgid "invalid use of cv-qualified type %qT in parameter declaration"
msgstr ""
-#: cp/decl.c:11683
+#: cp/decl.c:11705
#, gcc-internal-format
msgid "invalid use of type %<void%> in parameter declaration"
msgstr ""
-#: cp/decl.c:11696
+#: cp/decl.c:11718
#, gcc-internal-format
msgid "parameter %qD has Java class type"
msgstr ""
-#: cp/decl.c:11724
+#: cp/decl.c:11746
#, gcc-internal-format
msgid "parameter %qD invalidly declared method type"
msgstr ""
-#: cp/decl.c:11749
+#: cp/decl.c:11771
#, gcc-internal-format
msgid "parameter %qD includes pointer to array of unknown bound %qT"
msgstr ""
-#: cp/decl.c:11751
+#: cp/decl.c:11773
#, gcc-internal-format
msgid "parameter %qD includes reference to array of unknown bound %qT"
msgstr ""
@@ -39699,174 +39804,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:12001
+#: cp/decl.c:12023
#, gcc-internal-format
msgid "invalid constructor; you probably meant %<%T (const %T&)%>"
msgstr ""
-#: cp/decl.c:12123
+#: cp/decl.c:12145
#, gcc-internal-format
msgid "%qD may not be declared within a namespace"
msgstr ""
-#: cp/decl.c:12128
+#: cp/decl.c:12150
#, gcc-internal-format
msgid "%qD may not be declared as static"
msgstr ""
-#: cp/decl.c:12154
+#: cp/decl.c:12176
#, gcc-internal-format
msgid "%qD must be a nonstatic member function"
msgstr ""
-#: cp/decl.c:12163
+#: cp/decl.c:12185
#, gcc-internal-format
msgid ""
"%qD must be either a non-static member function or a non-member function"
msgstr ""
-#: cp/decl.c:12185
+#: cp/decl.c:12207
#, gcc-internal-format
msgid "%qD must have an argument of class or enumerated type"
msgstr ""
-#: cp/decl.c:12214
+#: cp/decl.c:12236
#, gcc-internal-format
msgid ""
"conversion to a reference to void will never use a type conversion operator"
msgstr ""
-#: cp/decl.c:12216
+#: cp/decl.c:12238
#, gcc-internal-format
msgid "conversion to void will never use a type conversion operator"
msgstr ""
-#: cp/decl.c:12223
+#: cp/decl.c:12245
#, gcc-internal-format
msgid ""
"conversion to a reference to the same type will never use a type conversion "
"operator"
msgstr ""
-#: cp/decl.c:12225
+#: cp/decl.c:12247
#, gcc-internal-format
msgid "conversion to the same type will never use a type conversion operator"
msgstr ""
-#: cp/decl.c:12233
+#: cp/decl.c:12255
#, gcc-internal-format
msgid ""
"conversion to a reference to a base class will never use a type conversion "
"operator"
msgstr ""
-#: cp/decl.c:12235
+#: cp/decl.c:12257
#, gcc-internal-format
msgid "conversion to a base class will never use a type conversion operator"
msgstr ""
#. 13.4.0.3
-#: cp/decl.c:12244
+#: cp/decl.c:12266
#, gcc-internal-format
msgid "ISO C++ prohibits overloading operator ?:"
msgstr ""
-#: cp/decl.c:12249
+#: cp/decl.c:12271
#, gcc-internal-format
msgid "%qD must not have variable number of arguments"
msgstr ""
-#: cp/decl.c:12300
+#: cp/decl.c:12322
#, gcc-internal-format
msgid "postfix %qD must take %<int%> as its argument"
msgstr ""
-#: cp/decl.c:12303
+#: cp/decl.c:12325
#, gcc-internal-format
msgid "postfix %qD must take %<int%> as its second argument"
msgstr ""
-#: cp/decl.c:12311
+#: cp/decl.c:12333
#, gcc-internal-format
msgid "%qD must take either zero or one argument"
msgstr ""
-#: cp/decl.c:12313
+#: cp/decl.c:12335
#, gcc-internal-format
msgid "%qD must take either one or two arguments"
msgstr ""
-#: cp/decl.c:12335
+#: cp/decl.c:12357
#, gcc-internal-format
msgid "prefix %qD should return %qT"
msgstr ""
-#: cp/decl.c:12341
+#: cp/decl.c:12363
#, gcc-internal-format
msgid "postfix %qD should return %qT"
msgstr ""
-#: cp/decl.c:12350
+#: cp/decl.c:12372
#, gcc-internal-format
msgid "%qD must take %<void%>"
msgstr ""
-#: cp/decl.c:12352 cp/decl.c:12361
+#: cp/decl.c:12374 cp/decl.c:12383
#, gcc-internal-format
msgid "%qD must take exactly one argument"
msgstr ""
-#: cp/decl.c:12363
+#: cp/decl.c:12385
#, gcc-internal-format
msgid "%qD must take exactly two arguments"
msgstr ""
-#: cp/decl.c:12372
+#: cp/decl.c:12394
#, gcc-internal-format
msgid "user-defined %qD always evaluates both arguments"
msgstr ""
-#: cp/decl.c:12386
+#: cp/decl.c:12408
#, gcc-internal-format
msgid "%qD should return by value"
msgstr ""
-#: cp/decl.c:12397 cp/decl.c:12402
+#: cp/decl.c:12419 cp/decl.c:12424
#, gcc-internal-format
msgid "%qD cannot have default arguments"
msgstr ""
-#: cp/decl.c:12460
+#: cp/decl.c:12482
#, gcc-internal-format
msgid "using template type parameter %qT after %qs"
msgstr ""
-#: cp/decl.c:12483
+#: cp/decl.c:12505
#, gcc-internal-format
msgid "using alias template specialization %qT after %qs"
msgstr ""
-#: cp/decl.c:12486
+#: cp/decl.c:12508
#, gcc-internal-format
msgid "using typedef-name %qD after %qs"
msgstr ""
-#: cp/decl.c:12488
+#: cp/decl.c:12510
#, gcc-internal-format
msgid "%qD has a previous declaration here"
msgstr ""
-#: cp/decl.c:12496
+#: cp/decl.c:12518
#, gcc-internal-format
msgid "%qT referred to as %qs"
msgstr ""
-#: cp/decl.c:12497 cp/decl.c:12504
+#: cp/decl.c:12519 cp/decl.c:12526
#, gcc-internal-format
msgid "%q+T has a previous declaration here"
msgstr ""
-#: cp/decl.c:12503
+#: cp/decl.c:12525
#, gcc-internal-format
msgid "%qT referred to as enum"
msgstr ""
@@ -39878,98 +39983,114 @@ msgstr ""
#. void f(class C); // No template header here
#.
#. then the required template argument is missing.
-#: cp/decl.c:12518
+#: cp/decl.c:12540
#, gcc-internal-format
msgid "template argument required for %<%s %T%>"
msgstr ""
-#: cp/decl.c:12572 cp/name-lookup.c:3192
+#: cp/decl.c:12594 cp/name-lookup.c:3195
#, gcc-internal-format
msgid "%qD has the same name as the class in which it is declared"
msgstr ""
-#: cp/decl.c:12602 cp/name-lookup.c:2682 cp/name-lookup.c:3520
-#: cp/name-lookup.c:3565 cp/parser.c:6041 cp/parser.c:24743
+#: cp/decl.c:12624 cp/friend.c:261 cp/parser.c:2971 cp/parser.c:6092
+#: cp/pt.c:8156
+#, gcc-internal-format
+msgid "%qT is not a template"
+msgstr ""
+
+#: cp/decl.c:12625 cp/friend.c:262 cp/tree.c:3719
+#, gcc-internal-format
+msgid "previous declaration here"
+msgstr ""
+
+#: cp/decl.c:12629
+#, gcc-internal-format
+msgid "perhaps you want to explicitly add %<%T::%>"
+msgstr ""
+
+#: cp/decl.c:12638 cp/name-lookup.c:2685 cp/name-lookup.c:3524
+#: cp/name-lookup.c:3569 cp/parser.c:6043 cp/parser.c:24810
#, gcc-internal-format
msgid "reference to %qD is ambiguous"
msgstr ""
-#: cp/decl.c:12723
+#: cp/decl.c:12759
#, gcc-internal-format
msgid "use of enum %q#D without previous declaration"
msgstr ""
-#: cp/decl.c:12756
+#: cp/decl.c:12792
#, gcc-internal-format
msgid "redeclaration of %qT as a non-template"
msgstr ""
-#: cp/decl.c:12757
+#: cp/decl.c:12793
#, gcc-internal-format
msgid "previous declaration %q+D"
msgstr ""
-#: cp/decl.c:12900
+#: cp/decl.c:12936
#, gcc-internal-format
msgid "derived union %qT invalid"
msgstr ""
-#: cp/decl.c:12909
+#: cp/decl.c:12945
#, gcc-internal-format
msgid "Java class %qT cannot have multiple bases"
msgstr ""
-#: cp/decl.c:12914
+#: cp/decl.c:12950
#, gcc-internal-format
msgid "%qT defined with multiple direct bases"
msgstr ""
-#: cp/decl.c:12923
+#: cp/decl.c:12959
#, gcc-internal-format
msgid "Java class %qT cannot have virtual bases"
msgstr ""
-#: cp/decl.c:12928
+#: cp/decl.c:12964
#, gcc-internal-format
msgid "%qT defined with direct virtual base"
msgstr ""
-#: cp/decl.c:12946
+#: cp/decl.c:12982
#, gcc-internal-format
msgid "base type %qT fails to be a struct or class type"
msgstr ""
-#: cp/decl.c:12979
+#: cp/decl.c:13015
#, gcc-internal-format
msgid "recursive type %qT undefined"
msgstr ""
-#: cp/decl.c:12981
+#: cp/decl.c:13017
#, gcc-internal-format
msgid "duplicate base type %qT invalid"
msgstr ""
-#: cp/decl.c:13111
+#: cp/decl.c:13147
#, gcc-internal-format
msgid "scoped/unscoped mismatch in enum %q#T"
msgstr ""
-#: cp/decl.c:13114 cp/decl.c:13122 cp/decl.c:13134 cp/parser.c:17226
+#: cp/decl.c:13150 cp/decl.c:13158 cp/decl.c:13170 cp/parser.c:17256
#, gcc-internal-format
msgid "previous definition here"
msgstr ""
-#: cp/decl.c:13119
+#: cp/decl.c:13155
#, gcc-internal-format
msgid "underlying type mismatch in enum %q#T"
msgstr ""
-#: cp/decl.c:13131
+#: cp/decl.c:13167
#, gcc-internal-format
msgid "different underlying type in enum %q#T"
msgstr ""
-#: cp/decl.c:13200
+#: cp/decl.c:13236
#, gcc-internal-format
msgid "underlying type %<%T%> of %<%T%> must be an integral type"
msgstr ""
@@ -39978,77 +40099,77 @@ msgstr ""
#.
#. IF no integral type can represent all the enumerator values, the
#. enumeration is ill-formed.
-#: cp/decl.c:13334
+#: cp/decl.c:13370
#, gcc-internal-format
msgid "no integral type can represent all of the enumerator values for %qT"
msgstr ""
-#: cp/decl.c:13503
+#: cp/decl.c:13538
#, gcc-internal-format
msgid "enumerator value for %qD is not an integer constant"
msgstr ""
-#: cp/decl.c:13550
+#: cp/decl.c:13585
#, gcc-internal-format
msgid "incremented enumerator value is too large for %<unsigned long%>"
msgstr ""
-#: cp/decl.c:13562
+#: cp/decl.c:13597
#, gcc-internal-format
msgid "overflow in enumeration values at %qD"
msgstr ""
-#: cp/decl.c:13582
+#: cp/decl.c:13617
#, gcc-internal-format
msgid "enumerator value %E is outside the range of underlying type %<%T%>"
msgstr ""
-#: cp/decl.c:13675
+#: cp/decl.c:13710
#, gcc-internal-format
msgid "return type %q#T is incomplete"
msgstr ""
-#: cp/decl.c:13677
+#: cp/decl.c:13712
#, gcc-internal-format
msgid "return type has Java class type %q#T"
msgstr ""
-#: cp/decl.c:13812 cp/typeck.c:8842
+#: cp/decl.c:13884 cp/typeck.c:8822
#, gcc-internal-format
msgid "%<operator=%> should return a reference to %<*this%>"
msgstr ""
-#: cp/decl.c:14156
+#: cp/decl.c:14227
#, gcc-internal-format
msgid "invalid function declaration"
msgstr ""
-#: cp/decl.c:14238
+#: cp/decl.c:14309
#, gcc-internal-format
msgid "parameter %qD declared void"
msgstr ""
-#: cp/decl.c:14628
+#: cp/decl.c:14658
#, gcc-internal-format
msgid "no return statements in function returning %qT"
msgstr ""
-#: cp/decl.c:14630 cp/typeck.c:8723
+#: cp/decl.c:14660 cp/typeck.c:8703
#, gcc-internal-format
msgid "only plain %<auto%> return type can be deduced to %<void%>"
msgstr ""
-#: cp/decl.c:14843
+#: cp/decl.c:14862
#, gcc-internal-format
msgid "invalid member function declaration"
msgstr ""
-#: cp/decl.c:14857
+#: cp/decl.c:14876
#, gcc-internal-format
msgid "%qD is already defined in class %qT"
msgstr ""
-#: cp/decl.c:15223 cp/decl2.c:5119 cp/decl2.c:5177
+#: cp/decl.c:15242 cp/decl2.c:5131 cp/decl2.c:5181
#, gcc-internal-format
msgid "use of %qD before deduction of %<auto%>"
msgstr ""
@@ -40090,7 +40211,7 @@ msgstr ""
msgid "deleting %qT is undefined"
msgstr ""
-#: cp/decl2.c:540 cp/pt.c:5166
+#: cp/decl2.c:540 cp/pt.c:5172
#, gcc-internal-format
msgid "template declaration of %q#D"
msgstr ""
@@ -40114,7 +40235,7 @@ msgstr ""
#. [temp.mem]
#.
#. A destructor shall not be a member template.
-#: cp/decl2.c:673 cp/pt.c:5136
+#: cp/decl2.c:673 cp/pt.c:5142
#, gcc-internal-format
msgid "destructor %qD declared as member template"
msgstr ""
@@ -40295,7 +40416,7 @@ msgstr ""
msgid "%qT declared with greater visibility than its base %qT"
msgstr ""
-#: cp/decl2.c:4255
+#: cp/decl2.c:4263
#, gcc-internal-format
msgid "%q#D, declared using anonymous type, is used but never defined"
msgstr ""
@@ -40304,62 +40425,62 @@ 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:4264
+#: cp/decl2.c:4272
#, gcc-internal-format
msgid ""
"anonymous type with no linkage used to declare variable %q#D with linkage"
msgstr ""
-#: cp/decl2.c:4268
+#: cp/decl2.c:4276
#, gcc-internal-format
msgid ""
"anonymous type with no linkage used to declare function %q#D with linkage"
msgstr ""
-#: cp/decl2.c:4272
+#: cp/decl2.c:4280
#, gcc-internal-format
msgid ""
"%q#D does not refer to the unqualified type, so it is not used for linkage"
msgstr ""
-#: cp/decl2.c:4280
+#: cp/decl2.c:4288
#, gcc-internal-format
msgid "%q#D, declared using local type %qT, is used but never defined"
msgstr ""
-#: cp/decl2.c:4284
+#: cp/decl2.c:4292
#, gcc-internal-format
msgid "type %qT with no linkage used to declare variable %q#D with linkage"
msgstr ""
-#: cp/decl2.c:4287
+#: cp/decl2.c:4295
#, gcc-internal-format
msgid "type %qT with no linkage used to declare function %q#D with linkage"
msgstr ""
-#: cp/decl2.c:4474 cp/decl2.c:4477
+#: cp/decl2.c:4482 cp/decl2.c:4485
#, gcc-internal-format
msgid "the program should also define %qD"
msgstr ""
-#: cp/decl2.c:4838
+#: cp/decl2.c:4846
#, gcc-internal-format
msgid "inline function %qD used but never defined"
msgstr ""
-#: cp/decl2.c:5027
+#: cp/decl2.c:5035
#, gcc-internal-format
msgid "default argument missing for parameter %P of %q+#D"
msgstr ""
#. We mark a lambda conversion op as deleted if we can't
#. generate it properly; see maybe_add_lambda_conv_op.
-#: cp/decl2.c:5091
+#: cp/decl2.c:5103
#, gcc-internal-format
msgid "converting lambda which uses %<...%> to function pointer"
msgstr ""
-#: cp/decl2.c:5098
+#: cp/decl2.c:5110
#, gcc-internal-format
msgid "use of deleted function %qD"
msgstr ""
@@ -40467,7 +40588,7 @@ msgstr ""
msgid "%qD is not a member of %qT"
msgstr ""
-#: cp/error.c:3712 cp/typeck.c:2759
+#: cp/error.c:3712 cp/typeck.c:2767
#, gcc-internal-format
msgid "%qD is not a member of %qD"
msgstr ""
@@ -40509,7 +40630,7 @@ msgstr ""
msgid "throwing NULL, which has integral, not pointer type"
msgstr ""
-#: cp/except.c:754 cp/init.c:2803
+#: cp/except.c:754 cp/init.c:2864
#, gcc-internal-format
msgid "%qD should never be overloaded"
msgstr ""
@@ -40536,27 +40657,27 @@ msgstr ""
msgid "cannot catch type %qT because it involves types of variable size"
msgstr ""
-#: cp/except.c:1093
+#: cp/except.c:1094
#, gcc-internal-format
msgid "exception of type %qT will be caught"
msgstr ""
-#: cp/except.c:1096
+#: cp/except.c:1097
#, gcc-internal-format
msgid " by earlier handler for %qT"
msgstr ""
-#: cp/except.c:1125
+#: cp/except.c:1126
#, gcc-internal-format
msgid "%<...%> handler must be the last handler for its try block"
msgstr ""
-#: cp/except.c:1207
+#: cp/except.c:1208
#, gcc-internal-format
msgid "noexcept-expression evaluates to %<false%> because of a call to %qD"
msgstr ""
-#: cp/except.c:1210
+#: cp/except.c:1211
#, gcc-internal-format
msgid "but %qD does not throw; perhaps it should be declared %<noexcept%>"
msgstr ""
@@ -40578,74 +40699,80 @@ msgstr ""
#. [temp.friend]
#. Friend declarations shall not declare partial
#. specializations.
-#: cp/friend.c:254 cp/friend.c:284
+#: cp/friend.c:254 cp/friend.c:296
#, gcc-internal-format
msgid "partial specialization %qT declared %<friend%>"
msgstr ""
-#: cp/friend.c:262
+#: cp/friend.c:266
+#, gcc-internal-format
+msgid ""
+"perhaps you need explicit template arguments in your nested-name-specifier"
+msgstr ""
+
+#: cp/friend.c:274
#, gcc-internal-format
msgid "class %qT is implicitly friends with itself"
msgstr ""
-#: cp/friend.c:320
+#: cp/friend.c:332
#, gcc-internal-format
msgid "%qT is not a member of %qT"
msgstr ""
-#: cp/friend.c:325
+#: cp/friend.c:337
#, gcc-internal-format
msgid "%qT is not a member class template of %qT"
msgstr ""
-#: cp/friend.c:334
+#: cp/friend.c:346
#, gcc-internal-format
msgid "%qT is not a nested class of %qT"
msgstr ""
#. template <class T> friend class T;
-#: cp/friend.c:348
+#: cp/friend.c:360
#, gcc-internal-format
msgid "template parameter type %qT declared %<friend%>"
msgstr ""
#. template <class T> friend class A; where A is not a template
-#: cp/friend.c:356
+#: cp/friend.c:368
#, gcc-internal-format
msgid "%q#T is not a template"
msgstr ""
-#: cp/friend.c:379
+#: cp/friend.c:391
#, gcc-internal-format
msgid "%qD is already a friend of %qT"
msgstr ""
-#: cp/friend.c:389
+#: cp/friend.c:401
#, gcc-internal-format
msgid "%qT is already a friend of %qT"
msgstr ""
-#: cp/friend.c:429
+#: cp/friend.c:441
#, gcc-internal-format
msgid "friend declaration %qD may not have virt-specifiers"
msgstr ""
-#: cp/friend.c:522
+#: cp/friend.c:534
#, gcc-internal-format
msgid "member %qD declared as friend before type %qT defined"
msgstr ""
-#: cp/friend.c:571
+#: cp/friend.c:583
#, gcc-internal-format
msgid "friend declaration %qD in local class without prior declaration"
msgstr ""
-#: cp/friend.c:594
+#: cp/friend.c:606
#, gcc-internal-format
msgid "friend declaration %q#D declares a non-template function"
msgstr ""
-#: cp/friend.c:598
+#: cp/friend.c:610
#, gcc-internal-format
msgid ""
"(if this is not what you intended, make sure the function template has "
@@ -40698,18 +40825,18 @@ msgstr ""
msgid "invalid initializer for array member %q#D"
msgstr ""
-#: cp/init.c:756 cp/init.c:780 cp/init.c:2242 cp/method.c:1217
+#: cp/init.c:756 cp/init.c:780 cp/init.c:2234 cp/method.c:1230
#, gcc-internal-format
msgid "uninitialized const member in %q#T"
msgstr ""
-#: cp/init.c:758 cp/init.c:775 cp/init.c:782 cp/init.c:2227 cp/init.c:2255
-#: cp/method.c:1220 cp/method.c:1231
+#: cp/init.c:758 cp/init.c:775 cp/init.c:782 cp/init.c:2219 cp/init.c:2247
+#: cp/method.c:1233 cp/method.c:1244
#, gcc-internal-format
msgid "%q#D should be initialized"
msgstr ""
-#: cp/init.c:773 cp/init.c:2214 cp/method.c:1228
+#: cp/init.c:773 cp/init.c:2206 cp/method.c:1241
#, gcc-internal-format
msgid "uninitialized reference member in %q#T"
msgstr ""
@@ -40760,304 +40887,309 @@ msgid ""
"base class %q#T should be explicitly initialized in the copy constructor"
msgstr ""
-#: cp/init.c:1370 cp/init.c:1389
+#: cp/init.c:1365 cp/init.c:1384
#, gcc-internal-format
msgid "class %qT does not have any field named %qD"
msgstr ""
-#: cp/init.c:1376
+#: cp/init.c:1371
#, gcc-internal-format
msgid ""
"%q#D is a static data member; it can only be initialized at its definition"
msgstr ""
-#: cp/init.c:1383
+#: cp/init.c:1378
#, gcc-internal-format
msgid "%q#D is not a non-static data member of %qT"
msgstr ""
-#: cp/init.c:1422
+#: cp/init.c:1417
#, gcc-internal-format
msgid "unnamed initializer for %qT, which has no base classes"
msgstr ""
-#: cp/init.c:1430
+#: cp/init.c:1425
#, gcc-internal-format
msgid "unnamed initializer for %qT, which uses multiple inheritance"
msgstr ""
-#: cp/init.c:1477
+#: cp/init.c:1472
#, gcc-internal-format
msgid "%qD is both a direct base and an indirect virtual base"
msgstr ""
-#: cp/init.c:1485
+#: cp/init.c:1480
#, gcc-internal-format
msgid "type %qT is not a direct or virtual base of %qT"
msgstr ""
-#: cp/init.c:1488
+#: cp/init.c:1483
#, gcc-internal-format
msgid "type %qT is not a direct base of %qT"
msgstr ""
-#: cp/init.c:1573
+#: cp/init.c:1568
#, gcc-internal-format
msgid "bad array initializer"
msgstr ""
-#: cp/init.c:1872 cp/semantics.c:3146
+#: cp/init.c:1864 cp/semantics.c:3194
#, gcc-internal-format
msgid "%qT is not a class type"
msgstr ""
-#: cp/init.c:1928
+#: cp/init.c:1920
#, gcc-internal-format
msgid "incomplete type %qT does not have member %qD"
msgstr ""
-#: cp/init.c:1942
+#: cp/init.c:1934
#, gcc-internal-format
msgid "invalid pointer to bit-field %qD"
msgstr ""
-#: cp/init.c:2023 cp/typeck.c:1831
+#: cp/init.c:2015 cp/typeck.c:1831
#, gcc-internal-format
msgid "invalid use of non-static member function %qD"
msgstr ""
-#: cp/init.c:2030 cp/semantics.c:1727
+#: cp/init.c:2022 cp/semantics.c:1762
#, gcc-internal-format
msgid "invalid use of non-static data member %qD"
msgstr ""
-#: cp/init.c:2211
+#: cp/init.c:2203
#, gcc-internal-format
msgid ""
"uninitialized reference member in %q#T using %<new%> without new-initializer"
msgstr ""
-#: cp/init.c:2219
+#: cp/init.c:2211
#, gcc-internal-format
msgid ""
"uninitialized reference member in base %q#T of %q#T using %<new%> without "
"new-initializer"
msgstr ""
-#: cp/init.c:2223
+#: cp/init.c:2215
#, gcc-internal-format
msgid "uninitialized reference member in base %q#T of %q#T"
msgstr ""
-#: cp/init.c:2239
+#: cp/init.c:2231
#, gcc-internal-format
msgid ""
"uninitialized const member in %q#T using %<new%> without new-initializer"
msgstr ""
-#: cp/init.c:2247
+#: cp/init.c:2239
#, gcc-internal-format
msgid ""
"uninitialized const member in base %q#T of %q#T using %<new%> without new-"
"initializer"
msgstr ""
-#: cp/init.c:2251
+#: cp/init.c:2243
#, gcc-internal-format
msgid "uninitialized const member in base %q#T of %q#T"
msgstr ""
-#: cp/init.c:2457
+#: cp/init.c:2518
#, 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:2469
+#: cp/init.c:2530
#, 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:2480
+#: cp/init.c:2541
#, 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:2594
+#: cp/init.c:2655
#, gcc-internal-format
msgid "integer overflow in array size"
msgstr ""
-#: cp/init.c:2604
+#: cp/init.c:2665
#, gcc-internal-format
msgid "array size in new-expression must be constant"
msgstr ""
-#: cp/init.c:2618
+#: cp/init.c:2679
#, gcc-internal-format
msgid "variably modified type not allowed in new-expression"
msgstr ""
-#: cp/init.c:2649
+#: cp/init.c:2710
#, gcc-internal-format
msgid "invalid type %<void%> for new"
msgstr ""
-#: cp/init.c:2692
+#: cp/init.c:2753
#, gcc-internal-format
msgid "uninitialized const in %<new%> of %q#T"
msgstr ""
-#: cp/init.c:2784
+#: cp/init.c:2845
#, gcc-internal-format
msgid "%qT isn%'t a valid Java class type"
msgstr ""
-#: cp/init.c:2797
+#: cp/init.c:2858
#, gcc-internal-format
msgid "call to Java constructor with %qs undefined"
msgstr ""
-#: cp/init.c:2813
+#: cp/init.c:2873
+#, gcc-internal-format
+msgid "%qD is not a function returning a pointer"
+msgstr ""
+
+#: cp/init.c:2882
#, gcc-internal-format
msgid "Java class %q#T object allocated using placement new"
msgstr ""
-#: cp/init.c:2857
+#: cp/init.c:2926
#, gcc-internal-format
msgid "no suitable %qD found in class %qT"
msgstr ""
-#: cp/init.c:2864 cp/search.c:1171
+#: cp/init.c:2933 cp/search.c:1171
#, gcc-internal-format
msgid "request for member %qD is ambiguous"
msgstr ""
-#: cp/init.c:3093
+#: cp/init.c:3162
#, gcc-internal-format
msgid "parenthesized initializer in array new"
msgstr ""
-#: cp/init.c:3331
+#: cp/init.c:3400
#, gcc-internal-format
msgid "size in array new must have integral type"
msgstr ""
-#: cp/init.c:3363
+#: cp/init.c:3432
#, gcc-internal-format
msgid "new cannot be applied to a reference type"
msgstr ""
-#: cp/init.c:3372
+#: cp/init.c:3441
#, gcc-internal-format
msgid "new cannot be applied to a function type"
msgstr ""
-#: cp/init.c:3416
+#: cp/init.c:3485
#, gcc-internal-format
msgid "call to Java constructor, while %<jclass%> undefined"
msgstr ""
-#: cp/init.c:3434
+#: cp/init.c:3503
#, gcc-internal-format
msgid "can%'t find %<class$%> in %qT"
msgstr ""
-#: cp/init.c:3494
+#: cp/init.c:3563
#, gcc-internal-format
msgid "possible problem detected in invocation of delete [] operator:"
msgstr ""
-#: cp/init.c:3498
+#: cp/init.c:3567
#, 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:3988
+#: cp/init.c:4059
#, gcc-internal-format
msgid "initializer ends prematurely"
msgstr ""
-#: cp/init.c:4073
+#: cp/init.c:4144
#, gcc-internal-format
msgid "cannot initialize multi-dimensional array with initializer"
msgstr ""
-#: cp/init.c:4280
+#: cp/init.c:4351
#, gcc-internal-format
msgid "unknown array size in delete"
msgstr ""
-#: cp/init.c:4304
+#: cp/init.c:4375
#, gcc-internal-format
msgid "possible problem detected in invocation of delete operator:"
msgstr ""
-#: cp/init.c:4309
+#: cp/init.c:4380
#, 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:4324
+#: cp/init.c:4395
#, gcc-internal-format
msgid ""
"deleting object of abstract class type %qT which has non-virtual destructor "
-"will cause undefined behaviour"
+"will cause undefined behavior"
msgstr ""
-#: cp/init.c:4329
+#: cp/init.c:4400
#, gcc-internal-format
msgid ""
"deleting object of polymorphic class type %qT which has non-virtual "
-"destructor might cause undefined behaviour"
+"destructor might cause undefined behavior"
msgstr ""
-#: cp/init.c:4627
+#: cp/init.c:4701
#, gcc-internal-format
msgid "type to vector delete is neither pointer or array type"
msgstr ""
-#: cp/lambda.c:461
+#: cp/lambda.c:462
#, gcc-internal-format
msgid "array of runtime bound cannot be captured by copy, only by reference"
msgstr ""
-#: cp/lambda.c:476
+#: cp/lambda.c:477
#, gcc-internal-format
msgid ""
"capture of variable-size type %qT that is not an N3639 array of runtime bound"
msgstr ""
-#: cp/lambda.c:480
+#: cp/lambda.c:481
#, gcc-internal-format
msgid "because the array element type %qT has variable size"
msgstr ""
-#: cp/lambda.c:491
+#: cp/lambda.c:492
#, gcc-internal-format
msgid "cannot capture %qE by reference"
msgstr ""
-#: cp/lambda.c:499
+#: cp/lambda.c:500
#, gcc-internal-format
msgid "capture by copy of incomplete type %qT"
msgstr ""
-#: cp/lambda.c:523
+#: cp/lambda.c:524
#, gcc-internal-format
msgid "already captured %qD in lambda expression"
msgstr ""
-#: cp/lambda.c:722
+#: cp/lambda.c:723
#, gcc-internal-format
msgid "%<this%> was not captured for this lambda function"
msgstr ""
@@ -41121,188 +41253,194 @@ msgid ""
"use of an undeclared name is deprecated)"
msgstr ""
-#: cp/mangle.c:2145
+#: cp/mangle.c:2146
#, gcc-internal-format
msgid "mangling typeof, use decltype instead"
msgstr ""
-#: cp/mangle.c:2149
+#: cp/mangle.c:2150
#, gcc-internal-format
msgid "mangling __underlying_type"
msgstr ""
-#: cp/mangle.c:2436
+#: cp/mangle.c:2437
#, gcc-internal-format
msgid "mangling unknown fixed point type"
msgstr ""
-#: cp/mangle.c:3009
+#: cp/mangle.c:3010
#, gcc-internal-format
msgid ""
"use of built-in trait %qE in function signature; use library traits instead"
msgstr ""
-#: cp/mangle.c:3014
+#: cp/mangle.c:3015
#, gcc-internal-format, gfc-internal-format
msgid "mangling %C"
msgstr ""
-#: cp/mangle.c:3091
+#: cp/mangle.c:3092
#, gcc-internal-format
msgid "omitted middle operand to %<?:%> operand cannot be mangled"
msgstr ""
-#: cp/mangle.c:3155
+#: cp/mangle.c:3156
#, gcc-internal-format
msgid "string literal in function template signature"
msgstr ""
-#: cp/mangle.c:3631
+#: cp/mangle.c:3639
#, gcc-internal-format
msgid ""
"a later -fabi-version= (or =0) avoids this error with a change in mangling"
msgstr ""
-#: cp/mangle.c:3658
+#: cp/mangle.c:3666
#, gcc-internal-format
msgid ""
"the mangled name of %qD changed between -fabi-version=%d (%D) and -fabi-"
"version=%d (%D)"
msgstr ""
-#: cp/mangle.c:3664
+#: cp/mangle.c:3672
#, gcc-internal-format
msgid ""
"the mangled name of %qD changes between -fabi-version=%d (%D) and -fabi-"
"version=%d (%D)"
msgstr ""
-#: cp/mangle.c:3953
+#: cp/mangle.c:3968
+#, gcc-internal-format
+msgid ""
+"the mangled name of %qD changes between -fabi-version=%d and -fabi-version=%d"
+msgstr ""
+
+#: cp/mangle.c:3973
#, 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:692 cp/method.c:1173
+#: cp/method.c:705 cp/method.c:1186
#, gcc-internal-format
msgid "non-static const member %q#D, can%'t use default assignment operator"
msgstr ""
-#: cp/method.c:698 cp/method.c:1179
+#: cp/method.c:711 cp/method.c:1192
#, gcc-internal-format
msgid ""
"non-static reference member %q#D, can%'t use default assignment operator"
msgstr ""
-#: cp/method.c:816
+#: cp/method.c:829
#, gcc-internal-format
msgid "synthesized method %qD first required here "
msgstr ""
-#: cp/method.c:1122
+#: cp/method.c:1135
#, gcc-internal-format
msgid "union member %q+D with non-trivial %qD"
msgstr ""
-#: cp/method.c:1132
+#: cp/method.c:1145
#, gcc-internal-format
msgid "defaulted constructor calls non-constexpr %qD"
msgstr ""
-#: cp/method.c:1196
+#: cp/method.c:1209
#, gcc-internal-format
msgid "initializer for %q#D is invalid"
msgstr ""
-#: cp/method.c:1248
+#: cp/method.c:1261
#, gcc-internal-format
msgid "defaulted default constructor does not initialize %q#D"
msgstr ""
-#: cp/method.c:1259
+#: cp/method.c:1272
#, 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:1417
+#: cp/method.c:1439
#, gcc-internal-format
msgid ""
"defaulted default constructor does not initialize any non-static data member"
msgstr ""
-#: cp/method.c:1494
+#: cp/method.c:1516
#, gcc-internal-format
msgid ""
"defaulted move assignment for %qT calls a non-trivial move assignment "
"operator for virtual base %qT"
msgstr ""
-#: cp/method.c:1600
+#: cp/method.c:1622
#, gcc-internal-format
msgid "a lambda closure type has a deleted default constructor"
msgstr ""
-#: cp/method.c:1603
+#: cp/method.c:1625
#, gcc-internal-format
msgid "a lambda closure type has a deleted copy assignment operator"
msgstr ""
-#: cp/method.c:1614
+#: cp/method.c:1636
#, 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:1634
+#: cp/method.c:1656
#, gcc-internal-format
msgid ""
"%q#D is implicitly deleted because the default definition would be ill-"
"formed:"
msgstr ""
-#: cp/method.c:1643
+#: cp/method.c:1665
msgid ""
"%q#F is implicitly deleted because its exception-specification does not "
"match the implicit exception-specification %qX"
msgstr ""
-#: cp/method.c:1961
+#: cp/method.c:1983
#, gcc-internal-format
msgid "defaulted declaration %q+D"
msgstr ""
-#: cp/method.c:1963
+#: cp/method.c:1985
#, gcc-internal-format
msgid "does not match expected signature %qD"
msgstr ""
-#: cp/method.c:1995
+#: cp/method.c:2017
msgid ""
"function %q+D defaulted on its redeclaration with an exception-specification "
"that differs from the implicit exception-specification %qX"
msgstr ""
-#: cp/method.c:2017
+#: cp/method.c:2039
#, 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:2063
+#: cp/method.c:2085
#, gcc-internal-format
msgid "a template cannot be defaulted"
msgstr ""
-#: cp/method.c:2091
+#: cp/method.c:2113
#, gcc-internal-format
msgid "%qD cannot be defaulted"
msgstr ""
-#: cp/method.c:2100
+#: cp/method.c:2122
#, gcc-internal-format
msgid "defaulted function %q+D with default argument"
msgstr ""
@@ -41473,8 +41611,8 @@ msgid "%qT is not a namespace"
msgstr ""
#. C++11 7.3.3/10.
-#: cp/name-lookup.c:2548 cp/name-lookup.c:2604 cp/name-lookup.c:2674
-#: cp/name-lookup.c:2689
+#: cp/name-lookup.c:2548 cp/name-lookup.c:2595 cp/name-lookup.c:2677
+#: cp/name-lookup.c:2692
#, gcc-internal-format
msgid "%qD is already declared in this scope"
msgstr ""
@@ -41484,111 +41622,121 @@ msgstr ""
msgid "%qD not declared"
msgstr ""
-#: cp/name-lookup.c:3341
+#: cp/name-lookup.c:3344
#, gcc-internal-format
msgid "using-declaration for non-member at class scope"
msgstr ""
-#: cp/name-lookup.c:3348
+#: cp/name-lookup.c:3351
#, gcc-internal-format
msgid "%<%T::%D%> names destructor"
msgstr ""
-#: cp/name-lookup.c:3361
+#: cp/name-lookup.c:3364
#, gcc-internal-format
msgid "%<%T::%D%> names constructor in %qT"
msgstr ""
-#: cp/name-lookup.c:3412
+#: cp/name-lookup.c:3415
#, gcc-internal-format
msgid "no members matching %<%T::%D%> in %q#T"
msgstr ""
-#: cp/name-lookup.c:3499
+#: cp/name-lookup.c:3502
#, gcc-internal-format
msgid "declaration of %qD not in a namespace surrounding %qD"
msgstr ""
-#: cp/name-lookup.c:3507
+#: cp/name-lookup.c:3510
#, gcc-internal-format
msgid "explicit qualification in declaration of %qD"
msgstr ""
-#: cp/name-lookup.c:3590
+#: cp/name-lookup.c:3583
+#, gcc-internal-format
+msgid "%qD has not been declared within %D"
+msgstr ""
+
+#: cp/name-lookup.c:3584
+#, gcc-internal-format
+msgid "only here as a friend"
+msgstr ""
+
+#: cp/name-lookup.c:3600
#, gcc-internal-format
msgid "%qD should have been declared inside %qD"
msgstr ""
-#: cp/name-lookup.c:3635
+#: cp/name-lookup.c:3645
#, gcc-internal-format
msgid "%qD attribute requires a single NTBS argument"
msgstr ""
-#: cp/name-lookup.c:3642
+#: cp/name-lookup.c:3652
#, gcc-internal-format
msgid ""
"%qD attribute is meaningless since members of the anonymous namespace get "
"local symbols"
msgstr ""
-#: cp/name-lookup.c:3652
+#: cp/name-lookup.c:3662
#, gcc-internal-format
msgid "ignoring %qD attribute on non-inline namespace"
msgstr ""
-#: cp/name-lookup.c:3658
+#: cp/name-lookup.c:3668
#, gcc-internal-format
msgid "ignoring %qD attribute on anonymous namespace"
msgstr ""
-#: cp/name-lookup.c:3677 cp/name-lookup.c:4090
+#: cp/name-lookup.c:3687 cp/name-lookup.c:4100
#, gcc-internal-format
msgid "%qD attribute directive ignored"
msgstr ""
-#: cp/name-lookup.c:3741
+#: cp/name-lookup.c:3751
#, gcc-internal-format
msgid "namespace alias %qD not allowed here, assuming %qD"
msgstr ""
-#: cp/name-lookup.c:4078
+#: cp/name-lookup.c:4088
#, gcc-internal-format
msgid "strong using only meaningful at namespace scope"
msgstr ""
-#: cp/name-lookup.c:4082
+#: cp/name-lookup.c:4092
#, gcc-internal-format
msgid "current namespace %qD does not enclose strongly used namespace %qD"
msgstr ""
-#: cp/name-lookup.c:4428
+#: cp/name-lookup.c:4438
#, gcc-internal-format
msgid "maximum limit of %d namespaces searched for %qE"
msgstr ""
-#: cp/name-lookup.c:4438
+#: cp/name-lookup.c:4448
#, gcc-internal-format
msgid "suggested alternative:"
msgid_plural "suggested alternatives:"
msgstr[0] ""
msgstr[1] ""
-#: cp/name-lookup.c:4442
+#: cp/name-lookup.c:4452
#, gcc-internal-format
msgid " %qE"
msgstr ""
-#: cp/name-lookup.c:5709
+#: cp/name-lookup.c:5727
#, gcc-internal-format
msgid "argument dependent lookup finds %q+D"
msgstr ""
-#: cp/name-lookup.c:6243
+#: cp/name-lookup.c:6261
#, gcc-internal-format
msgid "XXX entering pop_everything ()\n"
msgstr ""
-#: cp/name-lookup.c:6252
+#: cp/name-lookup.c:6270
#, gcc-internal-format
msgid "XXX leaving pop_everything ()\n"
msgstr ""
@@ -41608,15 +41756,15 @@ msgstr ""
msgid "LEXER_DEBUGGING_ENABLED_P is not set to true"
msgstr ""
-#: cp/parser.c:1349 cp/parser.c:35541
+#: cp/parser.c:1349 cp/parser.c:35591
#, gcc-internal-format
msgid ""
"%<#pragma omp declare simd%> not immediately followed by function "
"declaration or definition"
msgstr ""
-#: cp/parser.c:1387 cp/parser.c:36371 cp/parser.c:36476 cp/parser.c:36501
-#: cp/parser.c:36558
+#: cp/parser.c:1387 cp/parser.c:36422 cp/parser.c:36527 cp/parser.c:36552
+#: cp/parser.c:36609
#, gcc-internal-format
msgid ""
"%<#pragma acc routine%> not followed by a function declaration or definition"
@@ -41642,7 +41790,7 @@ msgstr ""
msgid "request for member %qE in non-class type %qT"
msgstr ""
-#: cp/parser.c:2826 cp/parser.c:17174
+#: cp/parser.c:2826 cp/parser.c:17204
#, gcc-internal-format
msgid "%<%T::%E%> has not been declared"
msgstr ""
@@ -41702,11 +41850,6 @@ msgstr ""
msgid "(perhaps a semicolon is missing after the definition of %qT)"
msgstr ""
-#: cp/parser.c:2971 cp/parser.c:6090 cp/pt.c:8149
-#, gcc-internal-format
-msgid "%qT is not a template"
-msgstr ""
-
#: cp/parser.c:2975
#, gcc-internal-format
msgid "%qE is not a class template"
@@ -41727,7 +41870,7 @@ msgstr ""
msgid "floating-point literal cannot appear in a constant-expression"
msgstr ""
-#: cp/parser.c:3017 cp/pt.c:15993
+#: cp/parser.c:3017 cp/pt.c:16072
#, gcc-internal-format
msgid ""
"a cast to a type other than an integral or enumeration type cannot appear in "
@@ -41836,1034 +41979,1039 @@ msgstr ""
msgid "C++11 %<thread_local%> only available with -std=c++11 or -std=gnu++11"
msgstr ""
-#: cp/parser.c:3200
+#: cp/parser.c:3176
+#, gcc-internal-format
+msgid "%<concept%> only available with -fconcepts"
+msgstr ""
+
+#: cp/parser.c:3202
#, gcc-internal-format
msgid "(perhaps %<typename %T::%E%> was intended)"
msgstr ""
-#: cp/parser.c:3218
+#: cp/parser.c:3220
#, gcc-internal-format
msgid "%qE in namespace %qE does not name a template type"
msgstr ""
-#: cp/parser.c:3222
+#: cp/parser.c:3224
#, gcc-internal-format
msgid "%qE in namespace %qE does not name a type"
msgstr ""
#. A<T>::A<T>()
-#: cp/parser.c:3231
+#: cp/parser.c:3233
#, gcc-internal-format
msgid "%<%T::%E%> names the constructor, not the type"
msgstr ""
-#: cp/parser.c:3234
+#: cp/parser.c:3236
#, gcc-internal-format
msgid "and %qT has no template constructors"
msgstr ""
-#: cp/parser.c:3239
+#: cp/parser.c:3241
#, gcc-internal-format
msgid "need %<typename%> before %<%T::%E%> because %qT is a dependent scope"
msgstr ""
-#: cp/parser.c:3246
+#: cp/parser.c:3248
#, gcc-internal-format
msgid "%qE in %q#T does not name a template type"
msgstr ""
-#: cp/parser.c:3250
+#: cp/parser.c:3252
#, gcc-internal-format
msgid "%qE in %q#T does not name a type"
msgstr ""
-#: cp/parser.c:3850
+#: cp/parser.c:3852
#, gcc-internal-format
msgid "expected string-literal"
msgstr ""
-#: cp/parser.c:3916
+#: cp/parser.c:3918
#, gcc-internal-format
msgid ""
"inconsistent user-defined literal suffixes %qD and %qD in string literal"
msgstr ""
-#: cp/parser.c:3964
+#: cp/parser.c:3966
#, gcc-internal-format
msgid "a wide string is invalid in this context"
msgstr ""
-#: cp/parser.c:4079
+#: cp/parser.c:4081
#, gcc-internal-format
msgid "unable to find character literal operator %qD with %qT argument"
msgstr ""
-#: cp/parser.c:4180
+#: cp/parser.c:4182
#, gcc-internal-format
msgid "integer literal exceeds range of %qT type"
msgstr ""
-#: cp/parser.c:4187
+#: cp/parser.c:4189
#, gcc-internal-format
msgid "floating literal exceeds range of %qT type"
msgstr ""
-#: cp/parser.c:4191
+#: cp/parser.c:4193
#, gcc-internal-format
msgid "floating literal truncated to zero"
msgstr ""
-#: cp/parser.c:4231
+#: cp/parser.c:4233
#, gcc-internal-format
msgid "unable to find numeric literal operator %qD"
msgstr ""
-#: cp/parser.c:4233
+#: cp/parser.c:4235
#, gcc-internal-format
msgid ""
"use -std=gnu++11 or -fext-numeric-literals to enable more built-in suffixes"
msgstr ""
-#: cp/parser.c:4285
+#: cp/parser.c:4287
#, gcc-internal-format
msgid "unable to find string literal operator %qD with %qT, %qT arguments"
msgstr ""
-#: cp/parser.c:4345 cp/parser.c:12291
+#: cp/parser.c:4347 cp/parser.c:12311
#, gcc-internal-format
msgid "expected declaration"
msgstr ""
-#: cp/parser.c:4607 cp/parser.c:4622
+#: cp/parser.c:4609 cp/parser.c:4624
#, gcc-internal-format
msgid "expected binary operator"
msgstr ""
-#: cp/parser.c:4628
+#: cp/parser.c:4630
#, gcc-internal-format
msgid "expected ..."
msgstr ""
-#: cp/parser.c:4638
+#: cp/parser.c:4640
#, gcc-internal-format
msgid "binary expression in operand of fold-expression"
msgstr ""
-#: cp/parser.c:4641
+#: cp/parser.c:4643
#, gcc-internal-format
msgid "conditional expression in operand of fold-expression"
msgstr ""
-#: cp/parser.c:4649
+#: cp/parser.c:4651
#, gcc-internal-format
msgid "mismatched operator in fold-expression"
msgstr ""
-#: cp/parser.c:4753
+#: cp/parser.c:4755
#, gcc-internal-format
msgid "fixed-point types not supported in C++"
msgstr ""
-#: cp/parser.c:4834
+#: cp/parser.c:4836
#, gcc-internal-format
msgid "ISO C++ forbids braced-groups within expressions"
msgstr ""
-#: cp/parser.c:4846
+#: cp/parser.c:4848
#, gcc-internal-format
msgid ""
"statement-expressions are not allowed outside functions nor in template-"
"argument lists"
msgstr ""
-#: cp/parser.c:4885
+#: cp/parser.c:4887
#, gcc-internal-format
msgid "fold-expressions only available with -std=c++1z or -std=gnu++1z"
msgstr ""
-#: cp/parser.c:4943 cp/parser.c:5114 cp/parser.c:5292
+#: cp/parser.c:4945 cp/parser.c:5116 cp/parser.c:5294
#, gcc-internal-format
msgid "expected primary-expression"
msgstr ""
-#: cp/parser.c:4973
+#: cp/parser.c:4975
#, gcc-internal-format
msgid "%<this%> may not be used in this context"
msgstr ""
-#: cp/parser.c:5109
+#: cp/parser.c:5111
#, gcc-internal-format
msgid "a template declaration cannot appear at block scope"
msgstr ""
-#: cp/parser.c:5267
+#: cp/parser.c:5269
#, gcc-internal-format
msgid "local variable %qD may not appear in this context"
msgstr ""
-#: cp/parser.c:5444
+#: cp/parser.c:5446
#, gcc-internal-format
msgid "expected id-expression"
msgstr ""
-#: cp/parser.c:5576
+#: cp/parser.c:5578
#, gcc-internal-format
msgid "scope %qT before %<~%> is not a class-name"
msgstr ""
-#: cp/parser.c:5605 cp/parser.c:7554
+#: cp/parser.c:5607 cp/parser.c:7560
#, gcc-internal-format
msgid "%<~auto%> only available with -std=c++14 or -std=gnu++14"
msgstr ""
-#: cp/parser.c:5716
+#: cp/parser.c:5718
#, gcc-internal-format
msgid "declaration of %<~%T%> as member of %qT"
msgstr ""
-#: cp/parser.c:5731
+#: cp/parser.c:5733
#, gcc-internal-format
msgid "typedef-name %qD used as destructor declarator"
msgstr ""
-#: cp/parser.c:5766
+#: cp/parser.c:5768
#, gcc-internal-format
msgid ""
"literal operator suffixes not preceded by %<_%> are reserved for future "
"standardization"
msgstr ""
-#: cp/parser.c:5777 cp/parser.c:19120
+#: cp/parser.c:5779 cp/parser.c:19150
#, gcc-internal-format
msgid "expected unqualified-id"
msgstr ""
-#: cp/parser.c:5884
+#: cp/parser.c:5886
#, gcc-internal-format
msgid "found %<:%> in nested-name-specifier, expected %<::%>"
msgstr ""
-#: cp/parser.c:5953
+#: cp/parser.c:5955
#, gcc-internal-format
msgid "decltype evaluates to %qT, which is not a class or enumeration type"
msgstr ""
-#: cp/parser.c:5979
+#: cp/parser.c:5981
#, gcc-internal-format
msgid "function template-id %qD in nested-name-specifier"
msgstr ""
-#: cp/parser.c:5987
+#: cp/parser.c:5989
#, gcc-internal-format
msgid "variable template-id %qD in nested-name-specifier"
msgstr ""
-#: cp/parser.c:6091 cp/typeck.c:2605 cp/typeck.c:2625
+#: cp/parser.c:6093 cp/typeck.c:2610 cp/typeck.c:2613 cp/typeck.c:2633
#, gcc-internal-format
msgid "%qD is not a template"
msgstr ""
-#: cp/parser.c:6169
+#: cp/parser.c:6171
#, gcc-internal-format
msgid "expected nested-name-specifier"
msgstr ""
-#: cp/parser.c:6370 cp/parser.c:8534
+#: cp/parser.c:6372 cp/parser.c:8540
#, gcc-internal-format
msgid "types may not be defined in casts"
msgstr ""
-#: cp/parser.c:6451
+#: cp/parser.c:6453
#, gcc-internal-format
msgid "types may not be defined in a %<typeid%> expression"
msgstr ""
-#: cp/parser.c:6509
+#: cp/parser.c:6511
#, gcc-internal-format
msgid "%<_Cilk_spawn%> must be followed by an expression"
msgstr ""
-#: cp/parser.c:6658
+#: cp/parser.c:6660
#, gcc-internal-format
msgid "ISO C++ forbids compound-literals"
msgstr ""
-#: cp/parser.c:6717
+#: cp/parser.c:6719
#, gcc-internal-format
msgid "two consecutive %<[%> shall only introduce an attribute"
msgstr ""
-#: cp/parser.c:7117
+#: cp/parser.c:7119
#, gcc-internal-format
msgid "braced list index is not allowed with array notation"
msgstr ""
-#: cp/parser.c:7210
+#: cp/parser.c:7212
#, gcc-internal-format
msgid "%qE does not have class type"
msgstr ""
-#: cp/parser.c:7299 cp/typeck.c:2498
+#: cp/parser.c:7305 cp/typeck.c:2498
#, gcc-internal-format
msgid "invalid use of %qD"
msgstr ""
-#: cp/parser.c:7308
+#: cp/parser.c:7314
#, gcc-internal-format
msgid "%<%D::%D%> is not a class member"
msgstr ""
-#: cp/parser.c:7606
+#: cp/parser.c:7612
#, gcc-internal-format
msgid "non-scalar type"
msgstr ""
-#: cp/parser.c:7705
+#: cp/parser.c:7711
#, gcc-internal-format
msgid "ISO C++ does not allow %<alignof%> with a non-type"
msgstr ""
-#: cp/parser.c:7790
+#: cp/parser.c:7796
#, gcc-internal-format
msgid "types may not be defined in %<noexcept%> expressions"
msgstr ""
-#: cp/parser.c:8068
+#: cp/parser.c:8074
#, gcc-internal-format
msgid "types may not be defined in a new-expression"
msgstr ""
-#: cp/parser.c:8084
+#: cp/parser.c:8090
#, gcc-internal-format
msgid "array bound forbidden after parenthesized type-id"
msgstr ""
-#: cp/parser.c:8086
+#: cp/parser.c:8092
#, gcc-internal-format
msgid "try removing the parentheses around the type-id"
msgstr ""
-#: cp/parser.c:8117
+#: cp/parser.c:8123
#, gcc-internal-format
msgid ""
"initialization of new-expression for type %<auto%> requires exactly one "
"element"
msgstr ""
-#: cp/parser.c:8165
+#: cp/parser.c:8171
#, gcc-internal-format
msgid "expected expression-list or type-id"
msgstr ""
-#: cp/parser.c:8194
+#: cp/parser.c:8200
#, gcc-internal-format
msgid "types may not be defined in a new-type-id"
msgstr ""
-#: cp/parser.c:8322
+#: cp/parser.c:8328
#, gcc-internal-format
msgid "expression in new-declarator must have integral or enumeration type"
msgstr ""
-#: cp/parser.c:8630
+#: cp/parser.c:8636
#, gcc-internal-format
msgid "use of old-style cast"
msgstr ""
-#: cp/parser.c:8777
+#: cp/parser.c:8783
#, gcc-internal-format
msgid "%<>>%> operator is treated as two right angle brackets in C++11"
msgstr ""
-#: cp/parser.c:8780
+#: cp/parser.c:8786
#, gcc-internal-format
msgid "suggest parentheses around %<>>%> expression"
msgstr ""
-#: cp/parser.c:8976
+#: cp/parser.c:8982
#, gcc-internal-format
msgid "ISO C++ does not allow ?: with omitted middle operand"
msgstr ""
-#: cp/parser.c:9684
+#: cp/parser.c:9690
#, gcc-internal-format
msgid "lambda-expression in unevaluated context"
msgstr ""
-#: cp/parser.c:9693
+#: cp/parser.c:9699
#, gcc-internal-format
msgid "lambda-expression in template-argument"
msgstr ""
-#: cp/parser.c:9844
+#: cp/parser.c:9850
#, gcc-internal-format
msgid "expected end of capture-list"
msgstr ""
-#: cp/parser.c:9858
+#: cp/parser.c:9864
#, gcc-internal-format
msgid ""
"explicit by-copy capture of %<this%> redundant with by-copy capture default"
msgstr ""
-#: cp/parser.c:9902
+#: cp/parser.c:9908
#, gcc-internal-format
msgid ""
"lambda capture initializers only available with -std=c++14 or -std=gnu++14"
msgstr ""
-#: cp/parser.c:9909
+#: cp/parser.c:9915
#, gcc-internal-format
msgid "empty initializer for lambda init-capture"
msgstr ""
-#: cp/parser.c:9932
+#: cp/parser.c:9938
#, gcc-internal-format
msgid "capture of non-variable %qD "
msgstr ""
-#: cp/parser.c:9935 cp/parser.c:9945 cp/semantics.c:3323 cp/semantics.c:3333
+#: cp/parser.c:9941 cp/parser.c:9951 cp/semantics.c:3371 cp/semantics.c:3381
#, gcc-internal-format
msgid "%q#D declared here"
msgstr ""
-#: cp/parser.c:9941
+#: cp/parser.c:9947
#, gcc-internal-format
msgid "capture of variable %qD with non-automatic storage duration"
msgstr ""
-#: cp/parser.c:9979
+#: cp/parser.c:9985
#, gcc-internal-format
msgid "explicit by-copy capture of %qD redundant with by-copy capture default"
msgstr ""
-#: cp/parser.c:9984
+#: cp/parser.c:9990
#, gcc-internal-format
msgid ""
"explicit by-reference capture of %qD redundant with by-reference capture "
"default"
msgstr ""
-#: cp/parser.c:10031
+#: cp/parser.c:10037
#, gcc-internal-format
msgid "lambda templates are only available with -std=c++14 or -std=gnu++14"
msgstr ""
-#: cp/parser.c:10061
+#: cp/parser.c:10067
#, gcc-internal-format
msgid "default argument specified for lambda parameter"
msgstr ""
-#: cp/parser.c:10540
+#: cp/parser.c:10546
#, gcc-internal-format
msgid "attributes at the beginning of statement are ignored"
msgstr ""
-#: cp/parser.c:10568
+#: cp/parser.c:10574
#, gcc-internal-format
msgid "expected labeled-statement"
msgstr ""
-#: cp/parser.c:10606
+#: cp/parser.c:10612
#, gcc-internal-format
msgid "case label %qE not within a switch statement"
msgstr ""
-#: cp/parser.c:10691
+#: cp/parser.c:10697
#, gcc-internal-format
msgid "need %<typename%> before %qE because %qT is a dependent scope"
msgstr ""
-#: cp/parser.c:10700
+#: cp/parser.c:10706
#, gcc-internal-format
msgid "%<%T::%D%> names the constructor, not the type"
msgstr ""
-#: cp/parser.c:10747
+#: cp/parser.c:10753
#, gcc-internal-format
msgid "compound-statement in constexpr function"
msgstr ""
-#: cp/parser.c:10989 cp/parser.c:26850
+#: cp/parser.c:10995 cp/parser.c:26914
#, gcc-internal-format
msgid "expected selection-statement"
msgstr ""
-#: cp/parser.c:11022
+#: cp/parser.c:11028
#, gcc-internal-format
msgid "types may not be defined in conditions"
msgstr ""
-#: cp/parser.c:11400
+#: cp/parser.c:11408
#, gcc-internal-format
msgid "range-based %<for%> expression of type %qT has incomplete type"
msgstr ""
-#: cp/parser.c:11438
+#: cp/parser.c:11446
#, gcc-internal-format
msgid ""
"range-based %<for%> expression of type %qT has an %<end%> member but not a "
"%<begin%>"
msgstr ""
-#: cp/parser.c:11444
+#: cp/parser.c:11452
#, gcc-internal-format
msgid ""
"range-based %<for%> expression of type %qT has a %<begin%> member but not an "
"%<end%>"
msgstr ""
-#: cp/parser.c:11485
+#: cp/parser.c:11504
#, gcc-internal-format
msgid ""
"inconsistent begin/end types in range-based %<for%> statement: %qT and %qT"
msgstr ""
-#: cp/parser.c:11619 cp/parser.c:26853
+#: cp/parser.c:11639 cp/parser.c:26917
#, gcc-internal-format
msgid "expected iteration-statement"
msgstr ""
-#: cp/parser.c:11667
+#: cp/parser.c:11687
#, gcc-internal-format
msgid ""
"range-based %<for%> loops only available with -std=c++11 or -std=gnu++11"
msgstr ""
-#: cp/parser.c:11741
+#: cp/parser.c:11761
#, gcc-internal-format
msgid "break statement used with Cilk Plus for loop"
msgstr ""
-#: cp/parser.c:11798
+#: cp/parser.c:11818
#, gcc-internal-format
msgid "%<goto%> in %<constexpr%> function"
msgstr ""
#. Issue a warning about this use of a GNU extension.
-#: cp/parser.c:11806
+#: cp/parser.c:11826
#, gcc-internal-format
msgid "ISO C++ forbids computed gotos"
msgstr ""
-#: cp/parser.c:11819 cp/parser.c:26856
+#: cp/parser.c:11839 cp/parser.c:26920
#, gcc-internal-format
msgid "expected jump-statement"
msgstr ""
-#: cp/parser.c:11976 cp/parser.c:22260
+#: cp/parser.c:11996 cp/parser.c:22292
#, gcc-internal-format
msgid "extra %<;%>"
msgstr ""
-#: cp/parser.c:12216
+#: cp/parser.c:12236
#, gcc-internal-format
msgid "%<__label__%> not at the beginning of a block"
msgstr ""
-#: cp/parser.c:12377
+#: cp/parser.c:12397
#, gcc-internal-format
msgid "inconsistent deduction for %qT: %qT and then %qT"
msgstr ""
-#: cp/parser.c:12397
+#: cp/parser.c:12417
#, gcc-internal-format
msgid "mixing declarations and function-definitions is forbidden"
msgstr ""
-#: cp/parser.c:12468
+#: cp/parser.c:12488
#, gcc-internal-format
msgid "initializer in range-based %<for%> loop"
msgstr ""
-#: cp/parser.c:12471
+#: cp/parser.c:12491
#, gcc-internal-format
msgid "multiple declarations in range-based %<for%> loop"
msgstr ""
-#: cp/parser.c:12612
+#: cp/parser.c:12632
#, 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:12676
+#: cp/parser.c:12696
#, gcc-internal-format
msgid "%<auto%> changes meaning in C++11; please remove it"
msgstr ""
-#: cp/parser.c:12712
+#: cp/parser.c:12732
#, gcc-internal-format
msgid "decl-specifier invalid in condition"
msgstr ""
-#: cp/parser.c:12804
+#: cp/parser.c:12824
#, gcc-internal-format
msgid "class definition may not be declared a friend"
msgstr ""
-#: cp/parser.c:12872 cp/parser.c:22667
+#: cp/parser.c:12892 cp/parser.c:22699
#, gcc-internal-format
msgid "templates may not be %<virtual%>"
msgstr ""
-#: cp/parser.c:12912
+#: cp/parser.c:12932
#, gcc-internal-format
msgid "invalid linkage-specification"
msgstr ""
-#: cp/parser.c:12999
+#: cp/parser.c:13019
#, gcc-internal-format
msgid ""
"static_assert without a message only available with -std=c++1z or -std=gnu+"
"+1z"
msgstr ""
-#: cp/parser.c:13193
+#: cp/parser.c:13213
#, gcc-internal-format
msgid "types may not be defined in %<decltype%> expressions"
msgstr ""
-#: cp/parser.c:13336
+#: cp/parser.c:13356
#, gcc-internal-format
msgid "types may not be defined in a conversion-type-id"
msgstr ""
-#: cp/parser.c:13363
+#: cp/parser.c:13383
#, gcc-internal-format
msgid "invalid use of %<auto%> in conversion operator"
msgstr ""
-#: cp/parser.c:13367
+#: cp/parser.c:13387
#, gcc-internal-format
msgid ""
"use of %<auto%> in member template conversion operator can never be deduced"
msgstr ""
-#: cp/parser.c:13456
+#: cp/parser.c:13476
#, gcc-internal-format
msgid "only constructors take member initializers"
msgstr ""
-#: cp/parser.c:13478
+#: cp/parser.c:13498
#, gcc-internal-format
msgid "cannot expand initializer for member %<%D%>"
msgstr ""
-#: cp/parser.c:13490
+#: cp/parser.c:13510
#, gcc-internal-format
msgid "mem-initializer for %qD follows constructor delegation"
msgstr ""
-#: cp/parser.c:13502
+#: cp/parser.c:13522
#, gcc-internal-format
msgid "constructor delegation follows mem-initializer for %qD"
msgstr ""
-#: cp/parser.c:13554
+#: cp/parser.c:13574
#, gcc-internal-format
msgid "anachronistic old-style base class initializer"
msgstr ""
-#: cp/parser.c:13624
+#: cp/parser.c:13644
#, gcc-internal-format
msgid ""
"keyword %<typename%> not allowed in this context (a qualified member "
"initializer is implicitly a type)"
msgstr ""
-#: cp/parser.c:13983
+#: cp/parser.c:14003
#, gcc-internal-format
msgid "unexpected keyword; remove space between quotes and suffix identifier"
msgstr ""
-#: cp/parser.c:13989
+#: cp/parser.c:14009
#, gcc-internal-format
msgid "expected suffix identifier"
msgstr ""
-#: cp/parser.c:13998
+#: cp/parser.c:14018
#, gcc-internal-format
msgid "expected empty string after %<operator%> keyword"
msgstr ""
-#: cp/parser.c:14004
+#: cp/parser.c:14024
#, gcc-internal-format
msgid "invalid encoding prefix in literal operator"
msgstr ""
-#: cp/parser.c:14027
+#: cp/parser.c:14047
#, gcc-internal-format
msgid "expected operator"
msgstr ""
#. Warn that we do not support `export'.
-#: cp/parser.c:14072
+#: cp/parser.c:14092
#, gcc-internal-format
msgid "keyword %<export%> not implemented, and will be ignored"
msgstr ""
-#: cp/parser.c:14242
+#: cp/parser.c:14262
#, gcc-internal-format
msgid "invalid constrained type parameter"
msgstr ""
-#: cp/parser.c:14250
+#: cp/parser.c:14270
#, gcc-internal-format
msgid "cv-qualified type parameter"
msgstr ""
-#: cp/parser.c:14335
+#: cp/parser.c:14355
#, gcc-internal-format
msgid "variadic constraint introduced without %<...%>"
msgstr ""
-#: cp/parser.c:14399
+#: cp/parser.c:14419
#, gcc-internal-format
msgid "invalid use of %<auto%> in default template argument"
msgstr ""
-#: cp/parser.c:14634 cp/parser.c:14720 cp/parser.c:20535
+#: cp/parser.c:14654 cp/parser.c:14737 cp/parser.c:20567
#, gcc-internal-format
msgid "template parameter pack %qD cannot have a default argument"
msgstr ""
-#: cp/parser.c:14638 cp/parser.c:14724
+#: cp/parser.c:14658 cp/parser.c:14741
#, gcc-internal-format
msgid "template parameter packs cannot have default arguments"
msgstr ""
-#: cp/parser.c:14790
+#: cp/parser.c:14807
#, gcc-internal-format
msgid "expected template-id"
msgstr ""
-#: cp/parser.c:14843 cp/parser.c:26814
+#: cp/parser.c:14860 cp/parser.c:26878
#, gcc-internal-format
msgid "expected %<<%>"
msgstr ""
-#: cp/parser.c:14850
+#: cp/parser.c:14867
#, gcc-internal-format
msgid "%<<::%> cannot begin a template-argument list"
msgstr ""
-#: cp/parser.c:14854
+#: cp/parser.c:14871
#, gcc-internal-format
msgid ""
"%<<:%> is an alternate spelling for %<[%>. Insert whitespace between %<<%> "
"and %<::%>"
msgstr ""
-#: cp/parser.c:14858
+#: cp/parser.c:14875
#, 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:14965
+#: cp/parser.c:14982
#, gcc-internal-format
msgid "parse error in template argument list"
msgstr ""
#. The name does not name a template.
-#: cp/parser.c:15034 cp/parser.c:15155 cp/parser.c:15370
+#: cp/parser.c:15051 cp/parser.c:15172 cp/parser.c:15387
#, gcc-internal-format
msgid "expected template-name"
msgstr ""
#. Explain what went wrong.
-#: cp/parser.c:15080
+#: cp/parser.c:15097
#, gcc-internal-format
msgid "non-template %qD used as template"
msgstr ""
-#: cp/parser.c:15082
+#: cp/parser.c:15099
#, gcc-internal-format
msgid "use %<%T::template %D%> to indicate that it is a template"
msgstr ""
-#: cp/parser.c:15222
+#: cp/parser.c:15239
#, gcc-internal-format
msgid "expected parameter pack before %<...%>"
msgstr ""
-#: cp/parser.c:15331 cp/parser.c:15349 cp/parser.c:15516
+#: cp/parser.c:15348 cp/parser.c:15366 cp/parser.c:15533
#, gcc-internal-format
msgid "expected template-argument"
msgstr ""
-#: cp/parser.c:15491
+#: cp/parser.c:15508
#, gcc-internal-format
msgid "invalid non-type template argument"
msgstr ""
-#: cp/parser.c:15618
+#: cp/parser.c:15635
#, gcc-internal-format
msgid "explicit instantiation shall not use %<inline%> specifier"
msgstr ""
-#: cp/parser.c:15622
+#: cp/parser.c:15639
#, gcc-internal-format
msgid "explicit instantiation shall not use %<constexpr%> specifier"
msgstr ""
-#: cp/parser.c:15681
+#: cp/parser.c:15698
#, gcc-internal-format
msgid "template specialization with C linkage"
msgstr ""
-#: cp/parser.c:15901
+#: cp/parser.c:15918
#, gcc-internal-format
msgid "expected type specifier"
msgstr ""
-#: cp/parser.c:16068
+#: cp/parser.c:16098
#, 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:16074
+#: cp/parser.c:16104
#, gcc-internal-format
msgid ""
"use of %<auto%> in parameter declaration only available with -std=c++14 or -"
"std=gnu++14"
msgstr ""
-#: cp/parser.c:16079
+#: cp/parser.c:16109
#, gcc-internal-format
msgid "ISO C++ forbids use of %<auto%> in parameter declaration"
msgstr ""
-#: cp/parser.c:16223
+#: cp/parser.c:16253
#, gcc-internal-format
msgid "expected template-id for type"
msgstr ""
-#: cp/parser.c:16250
+#: cp/parser.c:16280
#, gcc-internal-format
msgid "expected type-name"
msgstr ""
-#: cp/parser.c:16599
+#: cp/parser.c:16629
#, gcc-internal-format
msgid ""
"elaborated-type-specifier for a scoped enum must not use the %<%D%> keyword"
msgstr ""
-#: cp/parser.c:16808
+#: cp/parser.c:16838
#, gcc-internal-format
msgid "declaration %qD does not declare anything"
msgstr ""
-#: cp/parser.c:16895
+#: cp/parser.c:16925
#, gcc-internal-format
msgid "attributes ignored on uninstantiated type"
msgstr ""
-#: cp/parser.c:16899
+#: cp/parser.c:16929
#, gcc-internal-format
msgid "attributes ignored on template instantiation"
msgstr ""
-#: cp/parser.c:16904
+#: cp/parser.c:16934
#, gcc-internal-format
msgid ""
"attributes ignored on elaborated-type-specifier that is not a forward "
"declaration"
msgstr ""
-#: cp/parser.c:17038
+#: cp/parser.c:17068
#, gcc-internal-format
msgid "%qD is an enumeration template"
msgstr ""
-#: cp/parser.c:17049
+#: cp/parser.c:17079
#, gcc-internal-format
msgid "%qD does not name an enumeration in %qT"
msgstr ""
-#: cp/parser.c:17064
+#: cp/parser.c:17094
#, gcc-internal-format
msgid "anonymous scoped enum is not allowed"
msgstr ""
-#: cp/parser.c:17119
+#: cp/parser.c:17149
#, gcc-internal-format
msgid "expected %<;%> or %<{%>"
msgstr ""
-#: cp/parser.c:17168
+#: cp/parser.c:17198
#, gcc-internal-format
msgid "cannot add an enumerator list to a template instantiation"
msgstr ""
-#: cp/parser.c:17182
+#: cp/parser.c:17212
#, gcc-internal-format
msgid ""
"nested name specifier %qT for enum declaration does not name a class or "
"namespace"
msgstr ""
-#: cp/parser.c:17194 cp/parser.c:21771
+#: cp/parser.c:17224 cp/parser.c:21803
#, gcc-internal-format
msgid "declaration of %qD in namespace %qD which does not enclose %qD"
msgstr ""
-#: cp/parser.c:17199 cp/parser.c:21776
+#: cp/parser.c:17229 cp/parser.c:21808
#, gcc-internal-format
msgid "declaration of %qD in %qD which does not enclose %qD"
msgstr ""
-#: cp/parser.c:17224
+#: cp/parser.c:17254
#, gcc-internal-format
msgid "multiple definition of %q#T"
msgstr ""
-#: cp/parser.c:17237
+#: cp/parser.c:17267
#, gcc-internal-format
msgid "ISO C++ forbids empty anonymous enum"
msgstr ""
-#: cp/parser.c:17257
+#: cp/parser.c:17287
#, gcc-internal-format
msgid "opaque-enum-specifier without name"
msgstr ""
-#: cp/parser.c:17260
+#: cp/parser.c:17290
#, gcc-internal-format
msgid "opaque-enum-specifier must use a simple identifier"
msgstr ""
-#: cp/parser.c:17438
+#: cp/parser.c:17468
#, gcc-internal-format
msgid "%qD is not a namespace-name"
msgstr ""
-#: cp/parser.c:17439
+#: cp/parser.c:17469
#, gcc-internal-format
msgid "expected namespace-name"
msgstr ""
-#: cp/parser.c:17517
+#: cp/parser.c:17547
#, gcc-internal-format
msgid "a nested namespace definition cannot have attributes"
msgstr ""
-#: cp/parser.c:17520
+#: cp/parser.c:17550
#, gcc-internal-format
msgid ""
"nested namespace definitions only available with -std=c++1z or -std=gnu++1z"
msgstr ""
-#: cp/parser.c:17523
+#: cp/parser.c:17553
#, gcc-internal-format
msgid "a nested namespace definition cannot be inline"
msgstr ""
-#: cp/parser.c:17531
+#: cp/parser.c:17561
#, gcc-internal-format
msgid "nested identifier required"
msgstr ""
-#: cp/parser.c:17559
+#: cp/parser.c:17589
#, gcc-internal-format
msgid "namespace %qD entered"
msgstr ""
-#: cp/parser.c:17611
+#: cp/parser.c:17641
#, gcc-internal-format
msgid "%<namespace%> definition is not allowed here"
msgstr ""
-#: cp/parser.c:17766
+#: cp/parser.c:17796
#, gcc-internal-format
msgid "a template-id may not appear in a using-declaration"
msgstr ""
-#: cp/parser.c:17812
+#: cp/parser.c:17842
#, gcc-internal-format
msgid ""
"access declarations are deprecated in favour of using-declarations; "
"suggestion: add the %<using%> keyword"
msgstr ""
-#: cp/parser.c:17877
+#: cp/parser.c:17907
#, gcc-internal-format
msgid "types may not be defined in alias template declarations"
msgstr ""
-#: cp/parser.c:18030
+#: cp/parser.c:18060
#, gcc-internal-format
msgid "%<asm%> in %<constexpr%> function"
msgstr ""
-#: cp/parser.c:18370
+#: cp/parser.c:18400
#, gcc-internal-format
msgid "a function-definition is not allowed here"
msgstr ""
-#: cp/parser.c:18381
+#: cp/parser.c:18411
#, gcc-internal-format
msgid "an asm-specification is not allowed on a function-definition"
msgstr ""
-#: cp/parser.c:18385
+#: cp/parser.c:18415
#, gcc-internal-format
msgid "attributes are not allowed on a function-definition"
msgstr ""
-#: cp/parser.c:18436
+#: cp/parser.c:18466
#, gcc-internal-format
msgid "expected constructor, destructor, or type conversion"
msgstr ""
#. Anything else is an error.
-#: cp/parser.c:18475 cp/parser.c:20726
+#: cp/parser.c:18505 cp/parser.c:20758
#, gcc-internal-format
msgid "expected initializer"
msgstr ""
-#: cp/parser.c:18556
+#: cp/parser.c:18586
#, gcc-internal-format
msgid "initializer provided for function"
msgstr ""
-#: cp/parser.c:18590
+#: cp/parser.c:18620
#, gcc-internal-format
msgid "attributes after parenthesized initializer ignored"
msgstr ""
-#: cp/parser.c:18595
+#: cp/parser.c:18625
#, gcc-internal-format
msgid "non-function %qD declared as implicit template"
msgstr ""
-#: cp/parser.c:19040
+#: cp/parser.c:19070
#, gcc-internal-format
msgid "array bound is not an integer constant"
msgstr ""
-#: cp/parser.c:19166
+#: cp/parser.c:19196
#, gcc-internal-format
msgid "cannot define member of dependent typedef %qT"
msgstr ""
-#: cp/parser.c:19170
+#: cp/parser.c:19200
#, gcc-internal-format
msgid "%<%T::%E%> is not a type"
msgstr ""
-#: cp/parser.c:19198
+#: cp/parser.c:19228
#, gcc-internal-format
msgid "invalid use of constructor as a template"
msgstr ""
-#: cp/parser.c:19200
+#: cp/parser.c:19230
#, gcc-internal-format
msgid ""
"use %<%T::%D%> instead of %<%T::%D%> to name the constructor in a qualified "
@@ -42874,330 +43022,335 @@ msgstr ""
#. here because we do not have enough
#. information about its original syntactic
#. form.
-#: cp/parser.c:19217
+#: cp/parser.c:19247
#, gcc-internal-format
msgid "invalid declarator"
msgstr ""
#. But declarations with qualified-ids can't appear in a
#. function.
-#: cp/parser.c:19287
+#: cp/parser.c:19317
#, gcc-internal-format
msgid "qualified-id in declaration"
msgstr ""
-#: cp/parser.c:19312
+#: cp/parser.c:19342
#, gcc-internal-format
msgid "expected declarator"
msgstr ""
-#: cp/parser.c:19415
+#: cp/parser.c:19445
#, gcc-internal-format
msgid "%qD is a namespace"
msgstr ""
-#: cp/parser.c:19417
+#: cp/parser.c:19447
#, gcc-internal-format
msgid "cannot form pointer to member of non-class %q#T"
msgstr ""
-#: cp/parser.c:19438
+#: cp/parser.c:19468
#, gcc-internal-format
msgid "expected ptr-operator"
msgstr ""
-#: cp/parser.c:19497
+#: cp/parser.c:19527
#, gcc-internal-format
msgid "duplicate cv-qualifier"
msgstr ""
-#: cp/parser.c:19551
+#: cp/parser.c:19581
#, gcc-internal-format
msgid "multiple ref-qualifiers"
msgstr ""
-#: cp/parser.c:19588
+#: cp/parser.c:19618
#, gcc-internal-format
msgid "%E requires %<-fgnu-tm%>"
msgstr ""
-#: cp/parser.c:19644
+#: cp/parser.c:19674
#, gcc-internal-format
msgid "duplicate virt-specifier"
msgstr ""
-#: cp/parser.c:19872 cp/typeck2.c:529 cp/typeck2.c:1943
+#: cp/parser.c:19904 cp/typeck2.c:529 cp/typeck2.c:1955
#, gcc-internal-format
msgid "invalid use of %<auto%>"
msgstr ""
-#: cp/parser.c:19893
+#: cp/parser.c:19925
#, gcc-internal-format
msgid "types may not be defined in template arguments"
msgstr ""
-#: cp/parser.c:19898
+#: cp/parser.c:19930
#, gcc-internal-format
msgid "invalid use of %<auto%> in template argument"
msgstr ""
-#: cp/parser.c:19986
+#: cp/parser.c:20018
#, gcc-internal-format
msgid "expected type-specifier"
msgstr ""
-#: cp/parser.c:20292
+#: cp/parser.c:20324
#, gcc-internal-format
msgid "expected %<,%> or %<...%>"
msgstr ""
-#: cp/parser.c:20367
+#: cp/parser.c:20399
#, gcc-internal-format
msgid "types may not be defined in parameter types"
msgstr ""
-#: cp/parser.c:20519
+#: cp/parser.c:20551
#, gcc-internal-format
msgid "default arguments are only permitted for function parameters"
msgstr ""
-#: cp/parser.c:20537
+#: cp/parser.c:20569
#, gcc-internal-format
msgid "parameter pack %qD cannot have a default argument"
msgstr ""
-#: cp/parser.c:20543
+#: cp/parser.c:20575
#, gcc-internal-format
msgid "template parameter pack cannot have a default argument"
msgstr ""
-#: cp/parser.c:20545
+#: cp/parser.c:20577
#, gcc-internal-format
msgid "parameter pack cannot have a default argument"
msgstr ""
-#: cp/parser.c:20929
+#: cp/parser.c:20961
#, gcc-internal-format
msgid "ISO C++ does not allow designated initializers"
msgstr ""
-#: cp/parser.c:20943
+#: cp/parser.c:20975
#, gcc-internal-format
msgid "ISO C++ does not allow C99 designated initializers"
msgstr ""
-#: cp/parser.c:21063 cp/parser.c:21189
+#: cp/parser.c:21095 cp/parser.c:21221
#, gcc-internal-format
msgid "expected class-name"
msgstr ""
-#: cp/parser.c:21376
+#: cp/parser.c:21408
#, gcc-internal-format
msgid "expected %<;%> after class definition"
msgstr ""
-#: cp/parser.c:21378
+#: cp/parser.c:21410
#, gcc-internal-format
msgid "expected %<;%> after struct definition"
msgstr ""
-#: cp/parser.c:21380
+#: cp/parser.c:21412
#, gcc-internal-format
msgid "expected %<;%> after union definition"
msgstr ""
-#: cp/parser.c:21719
+#: cp/parser.c:21751
#, gcc-internal-format
msgid "expected %<{%> or %<:%>"
msgstr ""
-#: cp/parser.c:21730
+#: cp/parser.c:21762
#, gcc-internal-format
msgid "cannot specify %<override%> for a class"
msgstr ""
-#: cp/parser.c:21738
+#: cp/parser.c:21770
#, gcc-internal-format
msgid "global qualification of class name is invalid"
msgstr ""
-#: cp/parser.c:21745
+#: cp/parser.c:21777
#, gcc-internal-format
msgid "qualified name does not name a class"
msgstr ""
-#: cp/parser.c:21757
+#: cp/parser.c:21789
#, gcc-internal-format
msgid "invalid class name in declaration of %qD"
msgstr ""
-#: cp/parser.c:21790
+#: cp/parser.c:21822
#, gcc-internal-format
msgid "extra qualification not allowed"
msgstr ""
-#: cp/parser.c:21802
+#: cp/parser.c:21834
#, gcc-internal-format
msgid "an explicit specialization must be preceded by %<template <>%>"
msgstr ""
-#: cp/parser.c:21832
+#: cp/parser.c:21864
#, gcc-internal-format
msgid "function template %qD redeclared as a class template"
msgstr ""
-#: cp/parser.c:21863
+#: cp/parser.c:21895
#, gcc-internal-format
msgid "could not resolve typename type"
msgstr ""
-#: cp/parser.c:21919
+#: cp/parser.c:21951
#, gcc-internal-format
msgid "previous definition of %q+#T"
msgstr ""
-#: cp/parser.c:22010 cp/parser.c:26859
+#: cp/parser.c:22042 cp/parser.c:26923
#, gcc-internal-format
msgid "expected class-key"
msgstr ""
-#: cp/parser.c:22034
+#: cp/parser.c:22066
#, 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:22038
+#: cp/parser.c:22070
#, gcc-internal-format
msgid "expected %<class%> or %<typename%>"
msgstr ""
-#: cp/parser.c:22280
+#: cp/parser.c:22312
#, gcc-internal-format
msgid "in C++03 a class-key must be used when declaring a friend"
msgstr ""
-#: cp/parser.c:22298
+#: cp/parser.c:22330
#, gcc-internal-format
msgid "friend declaration does not name a class or function"
msgstr ""
-#: cp/parser.c:22316
+#: cp/parser.c:22348
#, gcc-internal-format
msgid "a storage class on an anonymous aggregate in class scope is not allowed"
msgstr ""
-#: cp/parser.c:22520
+#: cp/parser.c:22552
#, gcc-internal-format
msgid "pure-specifier on function-definition"
msgstr ""
-#: cp/parser.c:22575
+#: cp/parser.c:22607
#, gcc-internal-format
msgid "stray %<,%> at end of member declaration"
msgstr ""
-#: cp/parser.c:22587
+#: cp/parser.c:22619
#, gcc-internal-format
msgid "expected %<;%> at end of member declaration"
msgstr ""
-#: cp/parser.c:22661
+#: cp/parser.c:22693
#, gcc-internal-format
msgid "invalid pure specifier (only %<= 0%> is allowed)"
msgstr ""
-#: cp/parser.c:22696
+#: cp/parser.c:22728
#, gcc-internal-format
msgid "a brace-enclosed initializer is not allowed here"
msgstr ""
-#: cp/parser.c:22825
+#: cp/parser.c:22857
#, gcc-internal-format
msgid "%<virtual%> specified more than once in base-specified"
msgstr ""
-#: cp/parser.c:22845
+#: cp/parser.c:22877
#, gcc-internal-format
msgid "more than one access specifier in base-specified"
msgstr ""
-#: cp/parser.c:22869
+#: cp/parser.c:22901
#, gcc-internal-format
msgid "keyword %<typename%> not allowed outside of templates"
msgstr ""
-#: cp/parser.c:22872
+#: cp/parser.c:22904
#, gcc-internal-format
msgid ""
"keyword %<typename%> not allowed in this context (the base class is "
"implicitly a type)"
msgstr ""
-#: cp/parser.c:22965 cp/parser.c:23047
+#: cp/parser.c:22997 cp/parser.c:23079
#, gcc-internal-format
msgid "types may not be defined in an exception-specification"
msgstr ""
-#: cp/parser.c:23029
+#: cp/parser.c:23061
#, gcc-internal-format
msgid ""
"dynamic exception specifications are deprecated in C++0x; use %<noexcept%> "
"instead"
msgstr ""
-#: cp/parser.c:23089
+#: cp/parser.c:23121
#, gcc-internal-format
msgid "invalid use of %<auto%> in exception-specification"
msgstr ""
-#: cp/parser.c:23128
+#: cp/parser.c:23160
#, gcc-internal-format
msgid "%<try%> in %<constexpr%> function"
msgstr ""
-#: cp/parser.c:23241
+#: cp/parser.c:23273
#, gcc-internal-format
msgid "types may not be defined in exception-declarations"
msgstr ""
-#: cp/parser.c:23853
+#: cp/parser.c:23885
#, gcc-internal-format
msgid "expected an identifier for the attribute name"
msgstr ""
-#: cp/parser.c:23872
+#: cp/parser.c:23904
#, gcc-internal-format
msgid "%<deprecated%> is a C++14 feature; use %<gnu::deprecated%>"
msgstr ""
-#: cp/parser.c:23934
+#: cp/parser.c:23966
#, gcc-internal-format
msgid "attribute noreturn can appear at most once in an attribute-list"
msgstr ""
-#: cp/parser.c:23938
+#: cp/parser.c:23970
#, gcc-internal-format
msgid "attribute deprecated can appear at most once in an attribute-list"
msgstr ""
-#: cp/parser.c:24224
+#: cp/parser.c:24241
+#, gcc-internal-format
+msgid "%<requires%> only available with -fconcepts"
+msgstr ""
+
+#: cp/parser.c:24273
#, gcc-internal-format
msgid "a requires expression cannot appear outside a template"
msgstr ""
-#: cp/parser.c:24902
+#: cp/parser.c:24969
#, gcc-internal-format
msgid "specializing member %<%T::%E%> requires %<template<>%> syntax"
msgstr ""
-#: cp/parser.c:24907
+#: cp/parser.c:24974
#, gcc-internal-format
msgid "invalid declaration of %<%T::%E%>"
msgstr ""
-#: cp/parser.c:24911
+#: cp/parser.c:24978
#, gcc-internal-format
msgid "too few template-parameter-lists"
msgstr ""
@@ -43206,668 +43359,668 @@ msgstr ""
#. something like:
#.
#. template <class T> template <class U> void S::f();
-#: cp/parser.c:24918
+#: cp/parser.c:24985
#, gcc-internal-format
msgid "too many template-parameter-lists"
msgstr ""
-#: cp/parser.c:25244
+#: cp/parser.c:25311
#, gcc-internal-format
msgid "named return values are no longer supported"
msgstr ""
-#: cp/parser.c:25409
+#: cp/parser.c:25476
#, 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:25414
+#: cp/parser.c:25481
#, gcc-internal-format
msgid ""
"literal operator template %qD has invalid parameter list. Expected non-type "
"template argument pack <char...>"
msgstr ""
-#: cp/parser.c:25483
+#: cp/parser.c:25550
#, gcc-internal-format
msgid "empty introduction-list"
msgstr ""
-#: cp/parser.c:25507
+#: cp/parser.c:25574
#, gcc-internal-format
msgid "no matching concept for template-introduction"
msgstr ""
-#: cp/parser.c:25529
+#: cp/parser.c:25596
#, gcc-internal-format
msgid "invalid declaration of member template in local class"
msgstr ""
-#: cp/parser.c:25538
+#: cp/parser.c:25605
#, gcc-internal-format
msgid "template with C linkage"
msgstr ""
-#: cp/parser.c:25557
+#: cp/parser.c:25624
#, gcc-internal-format
msgid "invalid explicit specialization"
msgstr ""
-#: cp/parser.c:25661
+#: cp/parser.c:25725
#, gcc-internal-format
msgid "template declaration of %<typedef%>"
msgstr ""
-#: cp/parser.c:25712
+#: cp/parser.c:25776
#, gcc-internal-format
msgid "a class template declaration must not declare anything else"
msgstr ""
-#: cp/parser.c:25758
+#: cp/parser.c:25822
#, gcc-internal-format
msgid "explicit template specialization cannot have a storage class"
msgstr ""
-#: cp/parser.c:26028
+#: cp/parser.c:26092
#, gcc-internal-format
msgid "%<>>%> should be %<> >%> within a nested template argument list"
msgstr ""
-#: cp/parser.c:26041
+#: cp/parser.c:26105
#, gcc-internal-format
msgid "spurious %<>>%>, use %<>%> to terminate a template argument list"
msgstr ""
-#: cp/parser.c:26338
+#: cp/parser.c:26402
#, gcc-internal-format
msgid "%<sizeof...%> argument must be surrounded by parentheses"
msgstr ""
-#: cp/parser.c:26494
+#: cp/parser.c:26558
#, gcc-internal-format
msgid "invalid use of %qD in linkage specification"
msgstr ""
-#: cp/parser.c:26509
+#: cp/parser.c:26573
#, gcc-internal-format
msgid "%<__thread%> before %qD"
msgstr ""
-#: cp/parser.c:26643
+#: cp/parser.c:26707
#, gcc-internal-format
msgid "ISO C++ 1998 does not support %<long long%>"
msgstr ""
-#: cp/parser.c:26651
+#: cp/parser.c:26715
#, gcc-internal-format
msgid "both %<__thread%> and %<thread_local%> specified"
msgstr ""
-#: cp/parser.c:26653
+#: cp/parser.c:26717
#, gcc-internal-format
msgid "duplicate %qD"
msgstr ""
-#: cp/parser.c:26675
+#: cp/parser.c:26739
#, gcc-internal-format
msgid "duplicate %qs"
msgstr ""
-#: cp/parser.c:26717
+#: cp/parser.c:26781
#, gcc-internal-format
msgid "expected %<new%>"
msgstr ""
-#: cp/parser.c:26720
+#: cp/parser.c:26784
#, gcc-internal-format
msgid "expected %<delete%>"
msgstr ""
-#: cp/parser.c:26723
+#: cp/parser.c:26787
#, gcc-internal-format
msgid "expected %<return%>"
msgstr ""
-#: cp/parser.c:26729
+#: cp/parser.c:26793
#, gcc-internal-format
msgid "expected %<extern%>"
msgstr ""
-#: cp/parser.c:26732
+#: cp/parser.c:26796
#, gcc-internal-format
msgid "expected %<static_assert%>"
msgstr ""
-#: cp/parser.c:26735
+#: cp/parser.c:26799
#, gcc-internal-format
msgid "expected %<decltype%>"
msgstr ""
-#: cp/parser.c:26738
+#: cp/parser.c:26802
#, gcc-internal-format
msgid "expected %<operator%>"
msgstr ""
-#: cp/parser.c:26741
+#: cp/parser.c:26805
#, gcc-internal-format
msgid "expected %<class%>"
msgstr ""
-#: cp/parser.c:26744
+#: cp/parser.c:26808
#, gcc-internal-format
msgid "expected %<template%>"
msgstr ""
-#: cp/parser.c:26747
+#: cp/parser.c:26811
#, gcc-internal-format
msgid "expected %<namespace%>"
msgstr ""
-#: cp/parser.c:26750
+#: cp/parser.c:26814
#, gcc-internal-format
msgid "expected %<using%>"
msgstr ""
-#: cp/parser.c:26753
+#: cp/parser.c:26817
#, gcc-internal-format
msgid "expected %<asm%>"
msgstr ""
-#: cp/parser.c:26756
+#: cp/parser.c:26820
#, gcc-internal-format
msgid "expected %<try%>"
msgstr ""
-#: cp/parser.c:26759
+#: cp/parser.c:26823
#, gcc-internal-format
msgid "expected %<catch%>"
msgstr ""
-#: cp/parser.c:26762
+#: cp/parser.c:26826
#, gcc-internal-format
msgid "expected %<throw%>"
msgstr ""
-#: cp/parser.c:26765
+#: cp/parser.c:26829
#, gcc-internal-format
msgid "expected %<__label__%>"
msgstr ""
-#: cp/parser.c:26768
+#: cp/parser.c:26832
#, gcc-internal-format
msgid "expected %<@try%>"
msgstr ""
-#: cp/parser.c:26771
+#: cp/parser.c:26835
#, gcc-internal-format
msgid "expected %<@synchronized%>"
msgstr ""
-#: cp/parser.c:26774
+#: cp/parser.c:26838
#, gcc-internal-format
msgid "expected %<@throw%>"
msgstr ""
-#: cp/parser.c:26777
+#: cp/parser.c:26841
#, gcc-internal-format
msgid "expected %<__transaction_atomic%>"
msgstr ""
-#: cp/parser.c:26780
+#: cp/parser.c:26844
#, gcc-internal-format
msgid "expected %<__transaction_relaxed%>"
msgstr ""
-#: cp/parser.c:26811
+#: cp/parser.c:26875
#, gcc-internal-format
msgid "expected %<::%>"
msgstr ""
-#: cp/parser.c:26823
+#: cp/parser.c:26887
#, gcc-internal-format
msgid "expected %<...%>"
msgstr ""
-#: cp/parser.c:26826
+#: cp/parser.c:26890
#, gcc-internal-format
msgid "expected %<*%>"
msgstr ""
-#: cp/parser.c:26829
+#: cp/parser.c:26893
#, gcc-internal-format
msgid "expected %<~%>"
msgstr ""
-#: cp/parser.c:26835
+#: cp/parser.c:26899
#, gcc-internal-format
msgid "expected %<:%> or %<::%>"
msgstr ""
-#: cp/parser.c:26863
+#: cp/parser.c:26927
#, gcc-internal-format
msgid "expected %<class%>, %<typename%>, or %<template%>"
msgstr ""
-#: cp/parser.c:27124
+#: cp/parser.c:27188
#, gcc-internal-format
msgid "%qs tag used in naming %q#T"
msgstr ""
-#: cp/parser.c:27129
+#: cp/parser.c:27193
#, gcc-internal-format
msgid "%q#T was previously declared here"
msgstr ""
-#: cp/parser.c:27148
+#: cp/parser.c:27212
#, gcc-internal-format
msgid "%qD redeclared with different access"
msgstr ""
-#: cp/parser.c:27169
+#: cp/parser.c:27233
#, gcc-internal-format
msgid ""
"in C++98 %<template%> (as a disambiguator) is only allowed within templates"
msgstr ""
-#: cp/parser.c:27410
+#: cp/parser.c:27474
#, gcc-internal-format
msgid "file ends in default argument"
msgstr ""
-#: cp/parser.c:27640 cp/parser.c:28949 cp/parser.c:29135
+#: cp/parser.c:27704 cp/parser.c:29013 cp/parser.c:29199
#, gcc-internal-format
msgid "misplaced %<@%D%> Objective-C++ construct"
msgstr ""
-#: cp/parser.c:27709
+#: cp/parser.c:27773
#, gcc-internal-format
msgid "objective-c++ message receiver expected"
msgstr ""
-#: cp/parser.c:27779
+#: cp/parser.c:27843
#, gcc-internal-format
msgid "objective-c++ message argument(s) are expected"
msgstr ""
-#: cp/parser.c:27809
+#: cp/parser.c:27873
#, gcc-internal-format
msgid "%<@encode%> must specify a type as an argument"
msgstr ""
-#: cp/parser.c:28215
+#: cp/parser.c:28279
#, gcc-internal-format
msgid "invalid Objective-C++ selector name"
msgstr ""
-#: cp/parser.c:28290 cp/parser.c:28308
+#: cp/parser.c:28354 cp/parser.c:28372
#, gcc-internal-format
msgid "objective-c++ method declaration is expected"
msgstr ""
-#: cp/parser.c:28302 cp/parser.c:28367
+#: cp/parser.c:28366 cp/parser.c:28431
#, gcc-internal-format
msgid "method attributes must be specified at the end"
msgstr ""
-#: cp/parser.c:28410
+#: cp/parser.c:28474
#, gcc-internal-format
msgid "stray %qs between Objective-C++ methods"
msgstr ""
-#: cp/parser.c:28616 cp/parser.c:28623 cp/parser.c:28630
+#: cp/parser.c:28680 cp/parser.c:28687 cp/parser.c:28694
#, gcc-internal-format
msgid "invalid type for instance variable"
msgstr ""
-#: cp/parser.c:28743
+#: cp/parser.c:28807
#, gcc-internal-format
msgid "identifier expected after %<@protocol%>"
msgstr ""
-#: cp/parser.c:28914
+#: cp/parser.c:28978
#, gcc-internal-format
msgid ""
"attributes may not be specified before the %<@%D%> Objective-C++ keyword"
msgstr ""
-#: cp/parser.c:28921
+#: cp/parser.c:28985
#, gcc-internal-format
msgid "prefix attributes are ignored before %<@%D%>"
msgstr ""
-#: cp/parser.c:29194 cp/parser.c:29201 cp/parser.c:29208
+#: cp/parser.c:29258 cp/parser.c:29265 cp/parser.c:29272
#, gcc-internal-format
msgid "invalid type for property"
msgstr ""
-#: cp/parser.c:30362
+#: cp/parser.c:30412
#, gcc-internal-format
msgid "%<wait%> expression must be integral"
msgstr ""
-#: cp/parser.c:31056
+#: cp/parser.c:31106
#, gcc-internal-format
msgid "invalid reduction-identifier"
msgstr ""
-#: cp/parser.c:33254
+#: cp/parser.c:33304
#, gcc-internal-format
msgid "parenthesized initialization is not allowed in OpenMP %<for%> loop"
msgstr ""
-#: cp/parser.c:33257
+#: cp/parser.c:33307
#, gcc-internal-format
msgid "parenthesized initialization is not allowed in for-loop"
msgstr ""
-#: cp/parser.c:33327
+#: cp/parser.c:33377
#, gcc-internal-format
msgid ""
"%<_Cilk_for%> allows expression instead of declaration only in C, not in C++"
msgstr ""
-#: cp/parser.c:33555 cp/pt.c:14876
+#: cp/parser.c:33605 cp/pt.c:14959
#, gcc-internal-format
msgid "iteration variable %qD should not be reduction"
msgstr ""
-#: cp/parser.c:33640
+#: cp/parser.c:33690
#, gcc-internal-format
msgid "not enough collapsed for loops"
msgstr ""
-#: cp/parser.c:33917
+#: cp/parser.c:33967
#, gcc-internal-format
msgid ""
"%<#pragma omp ordered%> with %<depend%> clause may only be used in compound "
"statements"
msgstr ""
-#: cp/parser.c:34703
+#: cp/parser.c:34753
#, gcc-internal-format
msgid ""
"%<#pragma omp target exit data%> with map-type other than %<from%>, %<release"
"%> or %<delete%> on %<map%> clause"
msgstr ""
-#: cp/parser.c:35562
+#: cp/parser.c:35612
#, gcc-internal-format
msgid ""
"%<#pragma omp declare simd%> of %<simd%> attribute cannot be used in the "
"same function marked as a Cilk Plus SIMD-enabled function"
msgstr ""
-#: cp/parser.c:35572
+#: cp/parser.c:35622
#, gcc-internal-format
msgid ""
"vector attribute not immediately followed by a single function declaration "
"or definition"
msgstr ""
-#: cp/parser.c:35866
+#: cp/parser.c:35916
#, gcc-internal-format
msgid "invalid initializer clause"
msgstr ""
-#: cp/parser.c:35894
+#: cp/parser.c:35944
#, gcc-internal-format
msgid "expected id-expression (arguments)"
msgstr ""
-#: cp/parser.c:35906
+#: cp/parser.c:35956
#, gcc-internal-format
msgid ""
"one of the initializer call arguments should be %<omp_priv%> or %<&omp_priv%>"
msgstr ""
-#: cp/parser.c:35987
+#: cp/parser.c:36037
#, gcc-internal-format
msgid ""
"expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%> or "
"identifier"
msgstr ""
-#: cp/parser.c:36006
+#: cp/parser.c:36056
#, gcc-internal-format
msgid "types may not be defined in declare reduction type list"
msgstr ""
-#: cp/parser.c:36028 cp/semantics.c:5302
+#: cp/parser.c:36078 cp/semantics.c:5351
#, gcc-internal-format
msgid "predeclared arithmetic type %qT in %<#pragma omp declare reduction%>"
msgstr ""
-#: cp/parser.c:36033 cp/semantics.c:5311
+#: cp/parser.c:36083 cp/semantics.c:5360
#, gcc-internal-format
msgid "function or array type %qT in %<#pragma omp declare reduction%>"
msgstr ""
-#: cp/parser.c:36036 cp/pt.c:11778 cp/semantics.c:5317
+#: cp/parser.c:36086 cp/pt.c:11840 cp/semantics.c:5366
#, gcc-internal-format
msgid "reference type %qT in %<#pragma omp declare reduction%>"
msgstr ""
-#: cp/parser.c:36039 cp/semantics.c:5323
+#: cp/parser.c:36089 cp/semantics.c:5372
#, gcc-internal-format
msgid ""
"const, volatile or __restrict qualified type %qT in %<#pragma omp declare "
"reduction%>"
msgstr ""
-#: cp/parser.c:36418
+#: cp/parser.c:36469
#, gcc-internal-format
msgid "%<#pragma acc routine%> names a set of overloads"
msgstr ""
-#: cp/parser.c:36427
+#: cp/parser.c:36478
#, gcc-internal-format
msgid "%<#pragma acc routine%> does not refer to a namespace scope function"
msgstr ""
-#: cp/parser.c:36436
+#: cp/parser.c:36487
#, gcc-internal-format
msgid "%<#pragma acc routine%> does not refer to a function"
msgstr ""
#. cancel-and-throw is unimplemented.
-#: cp/parser.c:36766
+#: cp/parser.c:36817
#, gcc-internal-format
msgid "atomic_cancel"
msgstr ""
-#: cp/parser.c:36809 cp/semantics.c:8516
+#: cp/parser.c:36860 cp/semantics.c:8573
#, gcc-internal-format
msgid "%<__transaction_relaxed%> without transactional memory support enabled"
msgstr ""
-#: cp/parser.c:36811 cp/semantics.c:8518
+#: cp/parser.c:36862 cp/semantics.c:8575
#, gcc-internal-format
msgid "%<__transaction_atomic%> without transactional memory support enabled"
msgstr ""
-#: cp/parser.c:37007
+#: cp/parser.c:37058
#, gcc-internal-format
msgid "junk at end of %<#pragma GCC pch_preprocess%>"
msgstr ""
-#: cp/parser.c:37040
+#: cp/parser.c:37091
#, gcc-internal-format
msgid "invalid grainsize for _Cilk_for"
msgstr ""
-#: cp/parser.c:37249
+#: cp/parser.c:37300
#, gcc-internal-format
msgid "%<#pragma GCC ivdep%> must be inside a function"
msgstr ""
-#: cp/parser.c:37270
+#: cp/parser.c:37321
#, gcc-internal-format
msgid "%<#pragma simd%> must be inside a function"
msgstr ""
-#: cp/parser.c:37282
+#: cp/parser.c:37333
#, gcc-internal-format
msgid "%<#pragma cilk grainsize%> must be inside a function"
msgstr ""
-#: cp/parser.c:37294
+#: cp/parser.c:37345
#, gcc-internal-format
msgid "-fcilkplus must be enabled to use %<#pragma cilk grainsize%>"
msgstr ""
-#: cp/parser.c:37351
+#: cp/parser.c:37402
#, gcc-internal-format
msgid "inter-module optimizations not implemented for C++"
msgstr ""
-#: cp/parser.c:37461
+#: cp/parser.c:37512
#, gcc-internal-format
msgid "expected variable-name"
msgstr ""
-#: cp/parser.c:37525
+#: cp/parser.c:37576
#, gcc-internal-format
msgid "expected %<,%> or %<)%> after %qE"
msgstr ""
-#: cp/parser.c:37918
+#: cp/parser.c:37969
#, gcc-internal-format
msgid "implicit templates may not be %<virtual%>"
msgstr ""
-#: cp/pt.c:294
+#: cp/pt.c:295
#, gcc-internal-format
msgid "data member %qD cannot be a member template"
msgstr ""
-#: cp/pt.c:306
+#: cp/pt.c:307
#, gcc-internal-format
msgid "invalid member template declaration %qD"
msgstr ""
-#: cp/pt.c:680
+#: cp/pt.c:686
#, gcc-internal-format
msgid "explicit specialization in non-namespace scope %qD"
msgstr ""
-#: cp/pt.c:694
+#: cp/pt.c:700
#, gcc-internal-format
msgid "enclosing class templates are not explicitly specialized"
msgstr ""
-#: cp/pt.c:780
+#: cp/pt.c:786
#, gcc-internal-format
msgid "specialization of %qD must appear at namespace scope"
msgstr ""
-#: cp/pt.c:789
+#: cp/pt.c:795
#, gcc-internal-format
msgid "specialization of %qD in different namespace"
msgstr ""
-#: cp/pt.c:791 cp/pt.c:1018
+#: cp/pt.c:797 cp/pt.c:1024
#, gcc-internal-format
msgid " from definition of %q#D"
msgstr ""
-#: cp/pt.c:808
+#: cp/pt.c:814
#, gcc-internal-format
msgid ""
"explicit instantiation of %qD in namespace %qD (which does not enclose "
"namespace %qD)"
msgstr ""
-#: cp/pt.c:929
+#: cp/pt.c:935
#, gcc-internal-format
msgid "name of class shadows template template parameter %qD"
msgstr ""
-#: cp/pt.c:940
+#: cp/pt.c:946
#, gcc-internal-format
msgid "specialization of alias template %qD"
msgstr ""
-#: cp/pt.c:943 cp/pt.c:1080
+#: cp/pt.c:949 cp/pt.c:1086
#, gcc-internal-format
msgid "explicit specialization of non-template %qT"
msgstr ""
-#: cp/pt.c:975
+#: cp/pt.c:981
#, gcc-internal-format
msgid "specialization of %qT after instantiation"
msgstr ""
-#: cp/pt.c:1016
+#: cp/pt.c:1022
#, gcc-internal-format
msgid "specializing %q#T in different namespace"
msgstr ""
#. But if we've had an implicit instantiation, that's a
#. problem ([temp.expl.spec]/6).
-#: cp/pt.c:1058
+#: cp/pt.c:1064
#, gcc-internal-format
msgid "specialization %qT after instantiation %qT"
msgstr ""
-#: cp/pt.c:1076
+#: cp/pt.c:1082
#, gcc-internal-format
msgid "template specialization of %qD not allowed by ISO C++"
msgstr ""
-#: cp/pt.c:1538
+#: cp/pt.c:1544
#, gcc-internal-format
msgid "specialization of %qD after instantiation"
msgstr ""
-#: cp/pt.c:1937
+#: cp/pt.c:1943
#, gcc-internal-format
msgid "candidate is: %#D"
msgstr ""
-#: cp/pt.c:1944 cp/semantics.c:5171
+#: cp/pt.c:1950 cp/semantics.c:5220
#, gcc-internal-format
msgid "%s %#D"
msgstr ""
-#: cp/pt.c:2085
+#: cp/pt.c:2091
#, gcc-internal-format
msgid "%qD is not a function template"
msgstr ""
-#: cp/pt.c:2090
+#: cp/pt.c:2096
#, gcc-internal-format
msgid "%qD is not a variable template"
msgstr ""
-#: cp/pt.c:2344
+#: cp/pt.c:2350
#, gcc-internal-format
msgid "template-id %qD for %q+D does not match any template declaration"
msgstr ""
-#: cp/pt.c:2347
+#: cp/pt.c:2353
#, gcc-internal-format
msgid ""
"saw %d %<template<>%>, need %d for specializing a member function template"
msgstr ""
-#: cp/pt.c:2358
+#: cp/pt.c:2364
#, gcc-internal-format
msgid "ambiguous template specialization %qD for %q+D"
msgstr ""
-#: cp/pt.c:2568
+#: cp/pt.c:2574
#, gcc-internal-format
msgid "variable templates only available with -std=c++14 or -std=gnu++14"
msgstr ""
-#: cp/pt.c:2577
+#: cp/pt.c:2583
#, gcc-internal-format
msgid "too many template headers for %D (should be %d)"
msgstr ""
-#: cp/pt.c:2582
+#: cp/pt.c:2588
#, gcc-internal-format
msgid ""
"members of an explicitly specialized class are defined without a template "
@@ -43876,57 +44029,57 @@ msgstr ""
#. This case handles bogus declarations like template <>
#. template <class T> void f<int>();
-#: cp/pt.c:2671 cp/pt.c:2730
+#: cp/pt.c:2677 cp/pt.c:2736
#, gcc-internal-format
msgid "template-id %qD in declaration of primary template"
msgstr ""
-#: cp/pt.c:2684
+#: cp/pt.c:2690
#, gcc-internal-format
msgid "template parameter list used in explicit instantiation"
msgstr ""
-#: cp/pt.c:2690
+#: cp/pt.c:2696
#, gcc-internal-format
msgid "definition provided for explicit instantiation"
msgstr ""
-#: cp/pt.c:2698
+#: cp/pt.c:2704
#, gcc-internal-format
msgid "too many template parameter lists in declaration of %qD"
msgstr ""
-#: cp/pt.c:2701
+#: cp/pt.c:2707
#, gcc-internal-format
msgid "too few template parameter lists in declaration of %qD"
msgstr ""
-#: cp/pt.c:2703
+#: cp/pt.c:2709
#, gcc-internal-format
msgid "explicit specialization of %qD must be introduced by %<template <>%>"
msgstr ""
-#: cp/pt.c:2709
+#: cp/pt.c:2715
#, gcc-internal-format
msgid "explicit specialization declared %<concept%>"
msgstr ""
-#: cp/pt.c:2740
+#: cp/pt.c:2746
#, gcc-internal-format
msgid "non-type partial specialization %qD is not allowed"
msgstr ""
-#: cp/pt.c:2743
+#: cp/pt.c:2749
#, gcc-internal-format
msgid "non-class, non-variable partial specialization %qD is not allowed"
msgstr ""
-#: cp/pt.c:2776
+#: cp/pt.c:2782
#, gcc-internal-format
msgid "default argument specified in explicit specialization"
msgstr ""
-#: cp/pt.c:2807
+#: cp/pt.c:2813
#, gcc-internal-format
msgid "%qD is not a template function"
msgstr ""
@@ -43939,140 +44092,140 @@ msgstr ""
#. program is ill-formed.
#.
#. Similar language is found in [temp.explicit].
-#: cp/pt.c:2872
+#: cp/pt.c:2878
#, gcc-internal-format
msgid "specialization of implicitly-declared special member function"
msgstr ""
-#: cp/pt.c:2916
+#: cp/pt.c:2922
#, gcc-internal-format
msgid "no member function %qD declared in %qT"
msgstr ""
-#: cp/pt.c:2948
+#: cp/pt.c:2954
#, gcc-internal-format
msgid "%qD is not declared in %qD"
msgstr ""
-#: cp/pt.c:3053
+#: cp/pt.c:3059
#, gcc-internal-format
msgid "explicit specialization of function concept %qD"
msgstr ""
-#: cp/pt.c:3648
+#: cp/pt.c:3654
#, gcc-internal-format
msgid "base initializer expansion %<%T%> contains no parameter packs"
msgstr ""
-#: cp/pt.c:3710
+#: cp/pt.c:3716
#, gcc-internal-format
msgid "expansion pattern %<%T%> contains no argument packs"
msgstr ""
-#: cp/pt.c:3712
+#: cp/pt.c:3718
#, gcc-internal-format
msgid "expansion pattern %<%E%> contains no argument packs"
msgstr ""
-#: cp/pt.c:3756
+#: cp/pt.c:3762
#, gcc-internal-format
msgid "parameter packs not expanded with %<...%>:"
msgstr ""
-#: cp/pt.c:3771 cp/pt.c:4505
+#: cp/pt.c:3777 cp/pt.c:4511
#, gcc-internal-format
msgid " %qD"
msgstr ""
-#: cp/pt.c:3773
+#: cp/pt.c:3779
#, gcc-internal-format
msgid " <anonymous>"
msgstr ""
-#: cp/pt.c:3897
+#: cp/pt.c:3903
#, gcc-internal-format
msgid "declaration of template parameter %q+D shadows template parameter"
msgstr ""
-#: cp/pt.c:3900
+#: cp/pt.c:3906
#, gcc-internal-format
msgid "declaration of %q+#D shadows template parameter"
msgstr ""
-#: cp/pt.c:3902
+#: cp/pt.c:3908
#, gcc-internal-format
msgid "template parameter %qD declared here"
msgstr ""
-#: cp/pt.c:4441
+#: cp/pt.c:4447
#, gcc-internal-format
msgid "specialization of variable concept %q#D"
msgstr ""
-#: cp/pt.c:4500
+#: cp/pt.c:4506
#, gcc-internal-format
msgid "template parameters not deducible in partial specialization:"
msgstr ""
-#: cp/pt.c:4524
+#: cp/pt.c:4530
#, gcc-internal-format
msgid "partial specialization %q+D does not specialize any template arguments"
msgstr ""
-#: cp/pt.c:4527
+#: cp/pt.c:4533
#, gcc-internal-format
msgid ""
"partial specialization %q+D does not specialize any template arguments and "
"is not more constrained than"
msgstr ""
-#: cp/pt.c:4529 cp/pt.c:4540
+#: cp/pt.c:4535 cp/pt.c:4546
#, gcc-internal-format
msgid "primary template here"
msgstr ""
-#: cp/pt.c:4537
+#: cp/pt.c:4543
#, 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:4587
+#: cp/pt.c:4593
#, gcc-internal-format
msgid ""
"parameter pack argument %qE must be at the end of the template argument list"
msgstr ""
-#: cp/pt.c:4590
+#: cp/pt.c:4596
#, gcc-internal-format
msgid ""
"parameter pack argument %qT must be at the end of the template argument list"
msgstr ""
-#: cp/pt.c:4611
+#: cp/pt.c:4617
#, gcc-internal-format
msgid "template argument %qE involves template parameter(s)"
msgstr ""
-#: cp/pt.c:4657
+#: cp/pt.c:4663
#, 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:4710
+#: cp/pt.c:4716
#, gcc-internal-format
msgid "declaration of %qD ambiguates earlier template instantiation for %qD"
msgstr ""
-#: cp/pt.c:4714
+#: cp/pt.c:4720
#, gcc-internal-format
msgid "partial specialization of %qD after instantiation of %qD"
msgstr ""
-#: cp/pt.c:4890
+#: cp/pt.c:4896
#, gcc-internal-format
msgid "no default argument for %qD"
msgstr ""
@@ -44080,53 +44233,53 @@ msgstr ""
#. A primary class template can only have one
#. parameter pack, at the end of the template
#. parameter list.
-#: cp/pt.c:4912
+#: cp/pt.c:4918
#, gcc-internal-format
msgid "parameter pack %q+D must be at the end of the template parameter list"
msgstr ""
-#: cp/pt.c:4948
+#: cp/pt.c:4954
#, gcc-internal-format
msgid ""
"default template arguments may not be used in function template friend re-"
"declaration"
msgstr ""
-#: cp/pt.c:4951
+#: cp/pt.c:4957
#, gcc-internal-format
msgid ""
"default template arguments may not be used in function template friend "
"declarations"
msgstr ""
-#: cp/pt.c:4954
+#: cp/pt.c:4960
#, 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:4957
+#: cp/pt.c:4963
#, gcc-internal-format
msgid "default template arguments may not be used in partial specializations"
msgstr ""
-#: cp/pt.c:4960 cp/pt.c:5018
+#: cp/pt.c:4966 cp/pt.c:5024
#, gcc-internal-format
msgid "default argument for template parameter for class enclosing %qD"
msgstr ""
-#: cp/pt.c:5114
+#: cp/pt.c:5120
#, gcc-internal-format
msgid "template %qD declared"
msgstr ""
-#: cp/pt.c:5121
+#: cp/pt.c:5127
#, gcc-internal-format
msgid "template class without a name"
msgstr ""
-#: cp/pt.c:5129
+#: cp/pt.c:5135
#, gcc-internal-format
msgid "member template %qD may not have virt-specifiers"
msgstr ""
@@ -44136,76 +44289,76 @@ msgstr ""
#. An allocation function can be a function
#. template. ... Template allocation functions shall
#. have two or more parameters.
-#: cp/pt.c:5151
+#: cp/pt.c:5157
#, gcc-internal-format
msgid "invalid template declaration of %qD"
msgstr ""
-#: cp/pt.c:5280
+#: cp/pt.c:5286
#, gcc-internal-format
msgid "template definition of non-template %q#D"
msgstr ""
-#: cp/pt.c:5323
+#: cp/pt.c:5329
#, gcc-internal-format
msgid "expected %d levels of template parms for %q#D, got %d"
msgstr ""
-#: cp/pt.c:5337
+#: cp/pt.c:5343
#, gcc-internal-format
msgid "got %d template parameters for %q#D"
msgstr ""
-#: cp/pt.c:5340
+#: cp/pt.c:5346
#, gcc-internal-format
msgid "got %d template parameters for %q#T"
msgstr ""
-#: cp/pt.c:5342
+#: cp/pt.c:5348
#, gcc-internal-format, gfc-internal-format
msgid " but %d required"
msgstr ""
-#: cp/pt.c:5363
+#: cp/pt.c:5369
#, gcc-internal-format
msgid "template arguments to %qD do not match original template %qD"
msgstr ""
-#: cp/pt.c:5367
+#: cp/pt.c:5373
#, gcc-internal-format
msgid "use template<> for an explicit specialization"
msgstr ""
-#: cp/pt.c:5505
+#: cp/pt.c:5511
#, gcc-internal-format
msgid "%qT is not a template type"
msgstr ""
-#: cp/pt.c:5518
+#: cp/pt.c:5524
#, gcc-internal-format
msgid "template specifiers not specified in declaration of %qD"
msgstr ""
-#: cp/pt.c:5529
+#: cp/pt.c:5535
#, 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:5533
+#: cp/pt.c:5539
#, 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:5570
+#: cp/pt.c:5576
#, gcc-internal-format
msgid "template parameter %q+#D"
msgstr ""
-#: cp/pt.c:5571
+#: cp/pt.c:5577
#, gcc-internal-format
msgid "redeclared here as %q#D"
msgstr ""
@@ -44214,427 +44367,427 @@ msgstr ""
#.
#. A template-parameter may not be given default arguments
#. by two different declarations in the same scope.
-#: cp/pt.c:5581
+#: cp/pt.c:5587
#, gcc-internal-format
msgid "redefinition of default argument for %q#D"
msgstr ""
-#: cp/pt.c:5583
+#: cp/pt.c:5589
#, gcc-internal-format
msgid "original definition appeared here"
msgstr ""
-#: cp/pt.c:5608
+#: cp/pt.c:5614
#, gcc-internal-format
msgid "redeclaration %q#D with different constraints"
msgstr ""
-#: cp/pt.c:5611
+#: cp/pt.c:5617
#, gcc-internal-format
msgid "original declaration appeared here"
msgstr ""
-#: cp/pt.c:5866 cp/pt.c:5917
+#: cp/pt.c:5872 cp/pt.c:5923
#, gcc-internal-format
msgid "%qE is not a valid template argument for type %qT"
msgstr ""
-#: cp/pt.c:5869
+#: cp/pt.c:5875
#, gcc-internal-format
msgid "it must be the address of a function with external linkage"
msgstr ""
-#: cp/pt.c:5872
+#: cp/pt.c:5878
#, gcc-internal-format
msgid "it must be the name of a function with external linkage"
msgstr ""
-#: cp/pt.c:5884
+#: cp/pt.c:5890
#, gcc-internal-format
msgid ""
"%qE is not a valid template argument for type %qT because %qD has no linkage"
msgstr ""
-#: cp/pt.c:5888
+#: cp/pt.c:5894
#, 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:5919
+#: cp/pt.c:5925
#, gcc-internal-format
msgid "it must be a pointer-to-member of the form %<&X::Y%>"
msgstr ""
-#: cp/pt.c:5970
+#: cp/pt.c:5976
#, gcc-internal-format
msgid " couldn't deduce template parameter %qD"
msgstr ""
-#: cp/pt.c:5985
+#: cp/pt.c:5991
#, gcc-internal-format
msgid " types %qT and %qT have incompatible cv-qualifiers"
msgstr ""
-#: cp/pt.c:5994
+#: cp/pt.c:6000
#, gcc-internal-format
msgid " mismatched types %qT and %qT"
msgstr ""
-#: cp/pt.c:6003
+#: cp/pt.c:6009
#, gcc-internal-format
msgid " template parameter %qD is not a parameter pack, but argument %qD is"
msgstr ""
-#: cp/pt.c:6014
+#: cp/pt.c:6020
#, gcc-internal-format
msgid " template argument %qE does not match pointer-to-member constant %qE"
msgstr ""
-#: cp/pt.c:6024
+#: cp/pt.c:6030
#, gcc-internal-format
msgid " %qE is not equivalent to %qE"
msgstr ""
-#: cp/pt.c:6033
+#: cp/pt.c:6039
#, gcc-internal-format
msgid " inconsistent parameter pack deduction with %qT and %qT"
msgstr ""
-#: cp/pt.c:6045
+#: cp/pt.c:6051
#, gcc-internal-format
msgid " deduced conflicting types for parameter %qT (%qT and %qT)"
msgstr ""
-#: cp/pt.c:6049
+#: cp/pt.c:6055
#, gcc-internal-format
msgid " deduced conflicting values for non-type parameter %qE (%qE and %qE)"
msgstr ""
-#: cp/pt.c:6060
+#: cp/pt.c:6066
#, gcc-internal-format
msgid " variable-sized array type %qT is not a valid template argument"
msgstr ""
-#: cp/pt.c:6071
+#: cp/pt.c:6077
#, gcc-internal-format
msgid " member function type %qT is not a valid template argument"
msgstr ""
-#: cp/pt.c:6083
+#: cp/pt.c:6089
#, 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:6114
+#: cp/pt.c:6120
#, gcc-internal-format
msgid " cannot convert %qE (type %qT) to type %qT"
msgstr ""
-#: cp/pt.c:6127
+#: cp/pt.c:6133
#, gcc-internal-format
msgid " %qT is an ambiguous base class of %qT"
msgstr ""
-#: cp/pt.c:6131
+#: cp/pt.c:6137
#, gcc-internal-format
msgid " %qT is not derived from %qT"
msgstr ""
-#: cp/pt.c:6142
+#: cp/pt.c:6148
#, gcc-internal-format
msgid ""
" template parameters of a template template argument are inconsistent with "
"other deduced template arguments"
msgstr ""
-#: cp/pt.c:6152
+#: cp/pt.c:6158
#, gcc-internal-format
msgid " can't deduce a template for %qT from non-template type %qT"
msgstr ""
-#: cp/pt.c:6162
+#: cp/pt.c:6168
#, gcc-internal-format
msgid " template argument %qE does not match %qD"
msgstr ""
-#: cp/pt.c:6171
+#: cp/pt.c:6177
#, gcc-internal-format
msgid " could not resolve address from overloaded function %qE"
msgstr ""
-#: cp/pt.c:6210
+#: cp/pt.c:6216
#, 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:6375
+#: cp/pt.c:6381
#, gcc-internal-format
msgid "in template argument for type %qT "
msgstr ""
-#: cp/pt.c:6422
+#: cp/pt.c:6428
#, 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:6430
+#: cp/pt.c:6436
#, 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:6448
+#: cp/pt.c:6454
#, gcc-internal-format
msgid ""
"%qE is not a valid template argument of type %qT because %qE is not a "
"variable"
msgstr ""
-#: cp/pt.c:6455
+#: cp/pt.c:6461
#, 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:6463
+#: cp/pt.c:6469
#, gcc-internal-format
msgid ""
"%qE is not a valid template argument of type %qT because %qD has no linkage"
msgstr ""
-#: cp/pt.c:6493
+#: cp/pt.c:6499
#, gcc-internal-format
msgid ""
"%qE is not a valid template argument for type %qT because of conflicts in cv-"
"qualification"
msgstr ""
-#: cp/pt.c:6501
+#: cp/pt.c:6507
#, gcc-internal-format
msgid ""
"%qE is not a valid template argument for type %qT because it is not an lvalue"
msgstr ""
-#: cp/pt.c:6519
+#: cp/pt.c:6525
#, 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:6529
+#: cp/pt.c:6535
#, 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:6540
+#: cp/pt.c:6546
#, 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:6586
+#: cp/pt.c:6592
#, gcc-internal-format
msgid ""
"%qE is not a valid template argument for type %qT because it is a pointer"
msgstr ""
-#: cp/pt.c:6588
+#: cp/pt.c:6594
#, gcc-internal-format
msgid "try using %qE instead"
msgstr ""
-#: cp/pt.c:6630 cp/pt.c:6661
+#: cp/pt.c:6636 cp/pt.c:6667
#, gcc-internal-format
msgid ""
"%qE is not a valid template argument for type %qT because it is of type %qT"
msgstr ""
-#: cp/pt.c:6636
+#: cp/pt.c:6642
#, gcc-internal-format
msgid "standard conversions are not allowed in this context"
msgstr ""
-#: cp/pt.c:6947
+#: cp/pt.c:6954
#, gcc-internal-format
msgid "ignoring attributes on template argument %qT"
msgstr ""
-#: cp/pt.c:7054
+#: cp/pt.c:7061
#, gcc-internal-format
msgid "injected-class-name %qD used as template template argument"
msgstr ""
-#: cp/pt.c:7083
+#: cp/pt.c:7090
#, gcc-internal-format
msgid "invalid use of destructor %qE as a type"
msgstr ""
-#: cp/pt.c:7088
+#: cp/pt.c:7095
#, gcc-internal-format
msgid "to refer to a type member of a template parameter, use %<typename %E%>"
msgstr ""
-#: cp/pt.c:7104 cp/pt.c:7126 cp/pt.c:7179
+#: cp/pt.c:7111 cp/pt.c:7133 cp/pt.c:7186
#, gcc-internal-format
msgid "type/value mismatch at argument %d in template parameter list for %qD"
msgstr ""
-#: cp/pt.c:7109
+#: cp/pt.c:7116
#, gcc-internal-format
msgid " expected a constant of type %qT, got %qT"
msgstr ""
-#: cp/pt.c:7114
+#: cp/pt.c:7121
#, gcc-internal-format
msgid " expected a class template, got %qE"
msgstr ""
-#: cp/pt.c:7117
+#: cp/pt.c:7124
#, gcc-internal-format
msgid " expected a type, got %qE"
msgstr ""
-#: cp/pt.c:7131
+#: cp/pt.c:7138
#, gcc-internal-format
msgid " expected a type, got %qT"
msgstr ""
-#: cp/pt.c:7134
+#: cp/pt.c:7141
#, gcc-internal-format
msgid " expected a class template, got %qT"
msgstr ""
-#: cp/pt.c:7183
+#: cp/pt.c:7190
#, gcc-internal-format
msgid " expected a template of type %qD, got %qT"
msgstr ""
-#: cp/pt.c:7197
+#: cp/pt.c:7204
#, gcc-internal-format
msgid "constraint mismatch at argument %d in template parameter list for %qD"
msgstr ""
-#: cp/pt.c:7200
+#: cp/pt.c:7207
#, 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:7232
+#: cp/pt.c:7239
#, gcc-internal-format
msgid "type mismatch in nontype parameter pack"
msgstr ""
-#: cp/pt.c:7258
+#: cp/pt.c:7265
#, gcc-internal-format
msgid "could not convert template argument %qE to %qT"
msgstr ""
-#: cp/pt.c:7392 cp/pt.c:7697
+#: cp/pt.c:7399 cp/pt.c:7704
#, gcc-internal-format, gfc-internal-format
msgid "template argument %d is invalid"
msgstr ""
-#: cp/pt.c:7407 cp/pt.c:7537 cp/pt.c:7722
+#: cp/pt.c:7414 cp/pt.c:7544 cp/pt.c:7729
#, gcc-internal-format, gfc-internal-format
msgid "wrong number of template arguments (%d, should be %d)"
msgstr ""
-#: cp/pt.c:7533
+#: cp/pt.c:7540
#, gcc-internal-format, gfc-internal-format
msgid "wrong number of template arguments (%d, should be at least %d)"
msgstr ""
-#: cp/pt.c:7542
+#: cp/pt.c:7549
#, gcc-internal-format
msgid "provided for %qD"
msgstr ""
-#: cp/pt.c:7567
+#: cp/pt.c:7574
#, gcc-internal-format
msgid ""
"pack expansion argument for non-pack parameter %qD of alias template %qD"
msgstr ""
-#: cp/pt.c:7571
+#: cp/pt.c:7578
#, gcc-internal-format
msgid "pack expansion argument for non-pack parameter %qD of concept %qD"
msgstr ""
-#: cp/pt.c:7663
+#: cp/pt.c:7670
#, gcc-internal-format
msgid ""
"so any instantiation with a non-empty parameter pack would be ill-formed"
msgstr ""
-#: cp/pt.c:7725
+#: cp/pt.c:7732
#, gcc-internal-format
msgid "provided for %q+D"
msgstr ""
-#: cp/pt.c:7994
+#: cp/pt.c:8001
#, gcc-internal-format
msgid "%q#D is not a function template"
msgstr ""
-#: cp/pt.c:8161
+#: cp/pt.c:8168
#, gcc-internal-format
msgid "non-template type %qT used as a template"
msgstr ""
-#: cp/pt.c:8163
+#: cp/pt.c:8170
#, gcc-internal-format
msgid "for template declaration %q+D"
msgstr ""
-#: cp/pt.c:8334
+#: cp/pt.c:8341
#, gcc-internal-format
msgid "template constraint failure"
msgstr ""
-#: cp/pt.c:8676
+#: cp/pt.c:8685
#, gcc-internal-format
msgid "constraints for %qD not satisfied"
msgstr ""
-#: cp/pt.c:9049
+#: cp/pt.c:9077
#, 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:10641
+#: cp/pt.c:10657
#, gcc-internal-format
msgid "fold of empty expansion over %O"
msgstr ""
-#: cp/pt.c:10932
+#: cp/pt.c:10948
#, gcc-internal-format
msgid "mismatched argument pack lengths while expanding %<%T%>"
msgstr ""
-#: cp/pt.c:10936
+#: cp/pt.c:10952
#, gcc-internal-format
msgid "mismatched argument pack lengths while expanding %<%E%>"
msgstr ""
-#: cp/pt.c:11441
+#: cp/pt.c:11503
#, gcc-internal-format
msgid " when instantiating default argument for call to %D"
msgstr ""
@@ -44652,270 +44805,270 @@ msgstr ""
#.
#. is an attempt to declare a variable with function
#. type.
-#: cp/pt.c:12276
+#: cp/pt.c:12338
#, gcc-internal-format
msgid "variable %qD has function type"
msgstr ""
-#: cp/pt.c:12446
+#: cp/pt.c:12510
#, gcc-internal-format
msgid "invalid parameter type %qT"
msgstr ""
-#: cp/pt.c:12448
+#: cp/pt.c:12512
#, gcc-internal-format
msgid "in declaration %q+D"
msgstr ""
-#: cp/pt.c:12559
+#: cp/pt.c:12623
#, gcc-internal-format
msgid "function returning an array"
msgstr ""
-#: cp/pt.c:12561
+#: cp/pt.c:12625
#, gcc-internal-format
msgid "function returning a function"
msgstr ""
-#: cp/pt.c:12601
+#: cp/pt.c:12665
#, gcc-internal-format
msgid "creating pointer to member function of non-class type %qT"
msgstr ""
-#: cp/pt.c:13194
+#: cp/pt.c:13253
#, gcc-internal-format
msgid "forming reference to void"
msgstr ""
-#: cp/pt.c:13196
+#: cp/pt.c:13255
#, gcc-internal-format
msgid "forming pointer to reference type %qT"
msgstr ""
-#: cp/pt.c:13198
+#: cp/pt.c:13257
#, gcc-internal-format
msgid "forming reference to reference type %qT"
msgstr ""
-#: cp/pt.c:13211
+#: cp/pt.c:13270
#, gcc-internal-format
msgid "forming pointer to qualified function type %qT"
msgstr ""
-#: cp/pt.c:13214
+#: cp/pt.c:13273
#, gcc-internal-format
msgid "forming reference to qualified function type %qT"
msgstr ""
-#: cp/pt.c:13262
+#: cp/pt.c:13321
#, gcc-internal-format
msgid "creating pointer to member of non-class type %qT"
msgstr ""
-#: cp/pt.c:13268
+#: cp/pt.c:13327
#, gcc-internal-format
msgid "creating pointer to member reference type %qT"
msgstr ""
-#: cp/pt.c:13274
+#: cp/pt.c:13333
#, gcc-internal-format
msgid "creating pointer to member of type void"
msgstr ""
-#: cp/pt.c:13340
+#: cp/pt.c:13399
#, gcc-internal-format
msgid "creating array of %qT"
msgstr ""
-#: cp/pt.c:13371
+#: cp/pt.c:13430
#, gcc-internal-format
msgid "%qT is not a class, struct, or union type"
msgstr ""
-#: cp/pt.c:13408
+#: cp/pt.c:13467
#, gcc-internal-format
msgid "%qT resolves to %qT, which is not an enumeration type"
msgstr ""
-#: cp/pt.c:13416
+#: cp/pt.c:13475
#, gcc-internal-format
msgid "%qT resolves to %qT, which is is not a class type"
msgstr ""
-#: cp/pt.c:13545
+#: cp/pt.c:13604
#, gcc-internal-format
msgid "use of %qs in template"
msgstr ""
-#: cp/pt.c:13688
+#: cp/pt.c:13755
#, gcc-internal-format
msgid "qualifying type %qT does not match destructor name ~%qT"
msgstr ""
-#: cp/pt.c:13703
+#: cp/pt.c:13770
#, gcc-internal-format
msgid ""
"dependent-name %qE is parsed as a non-type, but instantiation yields a type"
msgstr ""
-#: cp/pt.c:13705
+#: cp/pt.c:13772
#, gcc-internal-format
msgid "say %<typename %E%> if a type is meant"
msgstr ""
-#: cp/pt.c:13911
+#: cp/pt.c:13987
#, gcc-internal-format
msgid "using invalid field %qD"
msgstr ""
-#: cp/pt.c:14362 cp/pt.c:15688
+#: cp/pt.c:14445 cp/pt.c:15771
#, gcc-internal-format
msgid "invalid use of pack expansion expression"
msgstr ""
-#: cp/pt.c:14366 cp/pt.c:15692
+#: cp/pt.c:14449 cp/pt.c:15775
#, gcc-internal-format
msgid "use %<...%> to expand argument pack"
msgstr ""
-#: cp/pt.c:16470
+#: cp/pt.c:16550
#, 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:16482
+#: cp/pt.c:16562
#, gcc-internal-format
msgid "declarations in dependent base %qT are not found by unqualified lookup"
msgstr ""
-#: cp/pt.c:16487
+#: cp/pt.c:16567
#, gcc-internal-format
msgid "use %<this->%D%> instead"
msgstr ""
-#: cp/pt.c:16490
+#: cp/pt.c:16570
#, gcc-internal-format
msgid "use %<%T::%D%> instead"
msgstr ""
-#: cp/pt.c:16495
+#: cp/pt.c:16575
#, gcc-internal-format
msgid "%qD declared here, later in the translation unit"
msgstr ""
-#: cp/pt.c:16768
+#: cp/pt.c:16848
#, gcc-internal-format
msgid "%qT is not a class or namespace"
msgstr ""
-#: cp/pt.c:16771
+#: cp/pt.c:16851
#, gcc-internal-format
msgid "%qD is not a class or namespace"
msgstr ""
-#: cp/pt.c:17133
+#: cp/pt.c:17214
#, gcc-internal-format
msgid "%qT is/uses anonymous type"
msgstr ""
-#: cp/pt.c:17135
+#: cp/pt.c:17216
#, gcc-internal-format
msgid "template argument for %qD uses local type %qT"
msgstr ""
-#: cp/pt.c:17145
+#: cp/pt.c:17226
#, gcc-internal-format
msgid "%qT is a variably modified type"
msgstr ""
-#: cp/pt.c:17160
+#: cp/pt.c:17241
#, gcc-internal-format
msgid "integral expression %qE is not constant"
msgstr ""
-#: cp/pt.c:17178
+#: cp/pt.c:17259
#, gcc-internal-format
msgid " trying to instantiate %qD"
msgstr ""
-#: cp/pt.c:20933
+#: cp/pt.c:21036
#, gcc-internal-format
msgid "ambiguous template instantiation for %q#T"
msgstr ""
-#: cp/pt.c:20935
+#: cp/pt.c:21038
#, gcc-internal-format
msgid "ambiguous template instantiation for %q#D"
msgstr ""
-#: cp/pt.c:20941
+#: cp/pt.c:21044
msgid "%s %#S"
msgstr ""
-#: cp/pt.c:20965 cp/pt.c:21052
+#: cp/pt.c:21068 cp/pt.c:21155
#, gcc-internal-format
msgid "explicit instantiation of non-template %q#D"
msgstr ""
-#: cp/pt.c:20984
+#: cp/pt.c:21087
#, gcc-internal-format
msgid "%qD is not a static data member of a class template"
msgstr ""
-#: cp/pt.c:20990 cp/pt.c:21047
+#: cp/pt.c:21093 cp/pt.c:21150
#, gcc-internal-format
msgid "no matching template for %qD found"
msgstr ""
-#: cp/pt.c:20995
+#: cp/pt.c:21098
#, gcc-internal-format
msgid ""
"type %qT for explicit instantiation %qD does not match declared type %qT"
msgstr ""
-#: cp/pt.c:21003
+#: cp/pt.c:21106
#, gcc-internal-format
msgid "explicit instantiation of %q#D"
msgstr ""
-#: cp/pt.c:21039
+#: cp/pt.c:21142
#, gcc-internal-format
msgid "duplicate explicit instantiation of %q#D"
msgstr ""
-#: cp/pt.c:21062 cp/pt.c:21159
+#: cp/pt.c:21165 cp/pt.c:21262
#, gcc-internal-format
msgid "ISO C++ 1998 forbids the use of %<extern%> on explicit instantiations"
msgstr ""
-#: cp/pt.c:21067 cp/pt.c:21176
+#: cp/pt.c:21170 cp/pt.c:21279
#, gcc-internal-format
msgid "storage class %qD applied to template instantiation"
msgstr ""
-#: cp/pt.c:21135
+#: cp/pt.c:21238
#, gcc-internal-format
msgid "explicit instantiation of non-class template %qD"
msgstr ""
-#: cp/pt.c:21137
+#: cp/pt.c:21240
#, gcc-internal-format
msgid "explicit instantiation of non-template type %qT"
msgstr ""
-#: cp/pt.c:21146
+#: cp/pt.c:21249
#, gcc-internal-format
msgid "explicit instantiation of %q#T before definition of template"
msgstr ""
-#: cp/pt.c:21164
+#: cp/pt.c:21267
#, gcc-internal-format
msgid "ISO C++ forbids the use of %qE on explicit instantiations"
msgstr ""
-#: cp/pt.c:21210
+#: cp/pt.c:21313
#, gcc-internal-format
msgid "duplicate explicit instantiation of %q#T"
msgstr ""
@@ -44927,12 +45080,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:21748
+#: cp/pt.c:21852
#, gcc-internal-format
msgid "explicit instantiation of %qD but no definition available"
msgstr ""
-#: cp/pt.c:21980
+#: cp/pt.c:22084
#, gcc-internal-format
msgid ""
"template instantiation depth exceeds maximum of %d instantiating %q+D, "
@@ -44940,66 +45093,66 @@ msgid ""
"the maximum)"
msgstr ""
-#: cp/pt.c:22322
+#: cp/pt.c:22426
#, gcc-internal-format
msgid "invalid template non-type parameter"
msgstr ""
-#: cp/pt.c:22324
+#: cp/pt.c:22428
#, gcc-internal-format
msgid "%q#T is not a valid type for a template non-type parameter"
msgstr ""
-#: cp/pt.c:23684
+#: cp/pt.c:23788
#, gcc-internal-format
msgid ""
"deducing from brace-enclosed initializer list requires #include "
"<initializer_list>"
msgstr ""
-#: cp/pt.c:23845
+#: cp/pt.c:23949
#, gcc-internal-format
msgid "direct-list-initialization of %<auto%> requires exactly one element"
msgstr ""
-#: cp/pt.c:23848
+#: cp/pt.c:23952
#, gcc-internal-format
msgid ""
"for deduction to %<std::initializer_list%>, use copy-list-initialization (i."
"e. add %<=%> before the %<{%>)"
msgstr ""
-#: cp/pt.c:23870
+#: cp/pt.c:23974
#, gcc-internal-format
msgid "%qT as type rather than plain %<decltype(auto)%>"
msgstr ""
-#: cp/pt.c:23905
+#: cp/pt.c:24009
#, gcc-internal-format
msgid "unable to deduce lambda return type from %qE"
msgstr ""
-#: cp/pt.c:23907
+#: cp/pt.c:24011
#, gcc-internal-format
msgid "unable to deduce %qT from %qE"
msgstr ""
-#: cp/pt.c:23928
+#: cp/pt.c:24032
#, gcc-internal-format
msgid "placeholder constraints not satisfied"
msgstr ""
-#: cp/pt.c:23931
+#: cp/pt.c:24035
#, gcc-internal-format
msgid "deduced initializer does not satisfy placeholder constraints"
msgstr ""
-#: cp/pt.c:23935
+#: cp/pt.c:24039
#, gcc-internal-format
msgid "deduced return type does not satisfy placeholder constraints"
msgstr ""
-#: cp/pt.c:23939
+#: cp/pt.c:24043
#, gcc-internal-format
msgid "deduced expression type does not saatisy placeholder constraints"
msgstr ""
@@ -45041,17 +45194,17 @@ msgstr ""
msgid "typeid of qualified function type %qT"
msgstr ""
-#: cp/rtti.c:665 cp/rtti.c:680
+#: cp/rtti.c:666 cp/rtti.c:681
#, gcc-internal-format
msgid "dynamic_cast of %q#D to %q#T can never succeed"
msgstr ""
-#: cp/rtti.c:691
+#: cp/rtti.c:692
#, gcc-internal-format
msgid "%<dynamic_cast%> not permitted with -fno-rtti"
msgstr ""
-#: cp/rtti.c:770
+#: cp/rtti.c:771
#, gcc-internal-format
msgid "cannot dynamic_cast %qE (of type %q#T) to type %q#T (%s)"
msgstr ""
@@ -45066,678 +45219,673 @@ msgstr ""
msgid "%qT is an inaccessible base of %qT"
msgstr ""
-#: cp/search.c:2050
+#: cp/search.c:2052
#, gcc-internal-format
msgid "invalid covariant return type for %q#D"
msgstr ""
-#: cp/search.c:2052
+#: cp/search.c:2054
#, gcc-internal-format
msgid " overriding %q#D"
msgstr ""
-#: cp/search.c:2065
+#: cp/search.c:2067
#, gcc-internal-format
msgid "invalid covariant return type for %q+#D"
msgstr ""
-#: cp/search.c:2066 cp/search.c:2071 cp/search.c:2098
+#: cp/search.c:2068 cp/search.c:2073 cp/search.c:2100
#, gcc-internal-format
msgid " overriding %q+#D"
msgstr ""
-#: cp/search.c:2070
+#: cp/search.c:2072
#, gcc-internal-format
msgid "conflicting return type specified for %q+#D"
msgstr ""
-#: cp/search.c:2085
+#: cp/search.c:2087
#, gcc-internal-format
msgid "looser throw specifier for %q+#F"
msgstr ""
-#: cp/search.c:2086
+#: cp/search.c:2088
#, gcc-internal-format
msgid " overriding %q+#F"
msgstr ""
-#: cp/search.c:2097
+#: cp/search.c:2099
#, gcc-internal-format
msgid "conflicting type attributes specified for %q+#D"
msgstr ""
-#: cp/search.c:2113
+#: cp/search.c:2115
#, gcc-internal-format
msgid "%qD declared %<transaction_safe_dynamic%>"
msgstr ""
-#: cp/search.c:2115
+#: cp/search.c:2117
#, gcc-internal-format
msgid "overriding %qD declared %<transaction_safe%>"
msgstr ""
-#: cp/search.c:2122
+#: cp/search.c:2124
#, gcc-internal-format
msgid "deleted function %q+D"
msgstr ""
-#: cp/search.c:2123
+#: cp/search.c:2125
#, gcc-internal-format
msgid "overriding non-deleted function %q+D"
msgstr ""
-#: cp/search.c:2128
+#: cp/search.c:2130
#, gcc-internal-format
msgid "non-deleted function %q+D"
msgstr ""
-#: cp/search.c:2129
+#: cp/search.c:2131
#, gcc-internal-format
msgid "overriding deleted function %q+D"
msgstr ""
-#: cp/search.c:2135
+#: cp/search.c:2137
#, gcc-internal-format
msgid "virtual function %q+D"
msgstr ""
-#: cp/search.c:2136
+#: cp/search.c:2138
#, gcc-internal-format
msgid "overriding final function %q+D"
msgstr ""
#. A static member function cannot match an inherited
#. virtual member function.
-#: cp/search.c:2232
+#: cp/search.c:2234
#, gcc-internal-format
msgid "%q+#D cannot be declared"
msgstr ""
-#: cp/search.c:2233
+#: cp/search.c:2235
#, gcc-internal-format
msgid " since %q+#D declared in base class"
msgstr ""
-#: cp/semantics.c:837
+#: cp/semantics.c:840
#, gcc-internal-format
msgid "suggest explicit braces around empty body in %<do%> statement"
msgstr ""
-#: cp/semantics.c:1505
+#: cp/semantics.c:1508
#, gcc-internal-format
msgid "type of asm operand %qE could not be determined"
msgstr ""
-#: cp/semantics.c:1570
+#: cp/semantics.c:1573
#, gcc-internal-format
msgid "__label__ declarations are only allowed in function scopes"
msgstr ""
-#: cp/semantics.c:1725
+#: cp/semantics.c:1760
#, gcc-internal-format
msgid "invalid use of member %qD in static member function"
msgstr ""
-#: cp/semantics.c:2419
+#: cp/semantics.c:2467
#, gcc-internal-format
msgid "arguments to destructor are not allowed"
msgstr ""
-#: cp/semantics.c:2516
+#: cp/semantics.c:2564
#, gcc-internal-format
msgid "%<this%> is unavailable for static member functions"
msgstr ""
-#: cp/semantics.c:2518
+#: cp/semantics.c:2566
#, gcc-internal-format
msgid "invalid use of %<this%> in non-member function"
msgstr ""
-#: cp/semantics.c:2520
+#: cp/semantics.c:2568
#, gcc-internal-format
msgid "invalid use of %<this%> at top level"
msgstr ""
-#: cp/semantics.c:2542
+#: cp/semantics.c:2590
#, gcc-internal-format
msgid "invalid qualifying scope in pseudo-destructor name"
msgstr ""
-#: cp/semantics.c:2550 cp/typeck.c:2530
+#: cp/semantics.c:2598 cp/typeck.c:2530
#, gcc-internal-format
msgid "qualified type %qT does not match destructor name ~%qT"
msgstr ""
-#: cp/semantics.c:2572
+#: cp/semantics.c:2620
#, gcc-internal-format
msgid "%qE is not of type %qT"
msgstr ""
-#: cp/semantics.c:2643
+#: cp/semantics.c:2691
#, gcc-internal-format
msgid "compound literal of non-object type %qT"
msgstr ""
-#: cp/semantics.c:2760
+#: cp/semantics.c:2808
#, gcc-internal-format
msgid "template type parameters must use the keyword %<class%> or %<typename%>"
msgstr ""
-#: cp/semantics.c:2810
+#: cp/semantics.c:2858
#, gcc-internal-format
msgid ""
"invalid use of type %qT as a default value for a template template-parameter"
msgstr ""
-#: cp/semantics.c:2813
+#: cp/semantics.c:2861
#, gcc-internal-format
msgid "invalid default argument for a template template parameter"
msgstr ""
-#: cp/semantics.c:2830
+#: cp/semantics.c:2878
#, gcc-internal-format
msgid "definition of %q#T inside template parameter list"
msgstr ""
-#: cp/semantics.c:2861
+#: cp/semantics.c:2909
#, gcc-internal-format
msgid "invalid definition of qualified type %qT"
msgstr ""
-#: cp/semantics.c:3141
+#: cp/semantics.c:3189
#, gcc-internal-format
msgid "invalid base-class specification"
msgstr ""
-#: cp/semantics.c:3300
+#: cp/semantics.c:3348
#, gcc-internal-format
msgid "cannot capture member %qD of anonymous union"
msgstr ""
-#: cp/semantics.c:3313 cp/semantics.c:9197
+#: cp/semantics.c:3361 cp/semantics.c:9254
#, gcc-internal-format
msgid "%qD is not captured"
msgstr ""
-#: cp/semantics.c:3318
+#: cp/semantics.c:3366
#, gcc-internal-format
msgid "the lambda has no capture-default"
msgstr ""
-#: cp/semantics.c:3320
+#: cp/semantics.c:3368
#, gcc-internal-format
msgid ""
"lambda in local class %q+T cannot capture variables from the enclosing "
"context"
msgstr ""
-#: cp/semantics.c:3331
+#: cp/semantics.c:3379
#, gcc-internal-format
msgid "use of local variable with automatic storage from containing function"
msgstr ""
-#: cp/semantics.c:3332
+#: cp/semantics.c:3380
#, gcc-internal-format
msgid "use of parameter from containing function"
msgstr ""
-#: cp/semantics.c:3494
+#: cp/semantics.c:3542
#, 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:3581
+#: cp/semantics.c:3629
#, gcc-internal-format
msgid "use of namespace %qD as expression"
msgstr ""
-#: cp/semantics.c:3586
+#: cp/semantics.c:3634
#, gcc-internal-format
msgid "use of class template %qT as expression"
msgstr ""
#. Ambiguous reference to base members.
-#: cp/semantics.c:3592
+#: cp/semantics.c:3640
#, gcc-internal-format
msgid "request for member %qD is ambiguous in multiple inheritance lattice"
msgstr ""
-#: cp/semantics.c:3618
+#: cp/semantics.c:3666
#, gcc-internal-format
msgid "%qD cannot appear in a constant-expression"
msgstr ""
-#: cp/semantics.c:3743
+#: cp/semantics.c:3791
#, gcc-internal-format
msgid "type of %qE is unknown"
msgstr ""
-#: cp/semantics.c:3771
+#: cp/semantics.c:3819
#, gcc-internal-format
msgid "%qT is not an enumeration type"
msgstr ""
#. Parameter packs can only be used in templates
-#: cp/semantics.c:3926
+#: cp/semantics.c:3974
#, gcc-internal-format
msgid "Parameter pack __bases only valid in template declaration"
msgstr ""
-#: cp/semantics.c:3955
+#: cp/semantics.c:4003
#, gcc-internal-format
msgid "cannot apply %<offsetof%> to destructor %<~%T%>"
msgstr ""
-#: cp/semantics.c:3964
+#: cp/semantics.c:4012
#, 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:3972
+#: cp/semantics.c:4020
#, gcc-internal-format
msgid "cannot apply %<offsetof%> to member function %qD"
msgstr ""
-#: cp/semantics.c:3988
+#: cp/semantics.c:4036
#, gcc-internal-format
msgid "offsetof within non-standard-layout type %qT is undefined"
msgstr ""
-#: cp/semantics.c:4492 cp/semantics.c:5948 cp/semantics.c:6004
-#: cp/semantics.c:6043 cp/semantics.c:6394 cp/semantics.c:6493
-#: cp/semantics.c:6627
+#: cp/semantics.c:4541 cp/semantics.c:5997 cp/semantics.c:6053
+#: cp/semantics.c:6092 cp/semantics.c:6443 cp/semantics.c:6542
+#: cp/semantics.c:6676
#, gcc-internal-format
msgid "%<this%> allowed in OpenMP only in %<declare simd%> clauses"
msgstr ""
-#: cp/semantics.c:5168
+#: cp/semantics.c:5217
#, gcc-internal-format
msgid "user defined reduction lookup is ambiguous"
msgstr ""
-#: cp/semantics.c:5441
+#: cp/semantics.c:5490
#, gcc-internal-format
msgid "%qE in %<reduction%> clause is a zero size array"
msgstr ""
-#: cp/semantics.c:5489
+#: cp/semantics.c:5538
#, gcc-internal-format
msgid "%qE has const type for %<reduction%>"
msgstr ""
-#: cp/semantics.c:5601
+#: cp/semantics.c:5650
#, gcc-internal-format
msgid "user defined reduction with constructor initializer for base class %qT"
msgstr ""
-#: cp/semantics.c:5823
+#: cp/semantics.c:5872
#, gcc-internal-format
msgid ""
"linear clause with %qs modifier applied to non-reference variable with %qT "
"type"
msgstr ""
-#: cp/semantics.c:5835
+#: cp/semantics.c:5884
#, gcc-internal-format
msgid ""
"linear clause applied to non-integral non-pointer variable with %qT type"
msgstr ""
-#: cp/semantics.c:5856
+#: cp/semantics.c:5905
#, gcc-internal-format
msgid "linear step expression must be integral"
msgstr ""
-#: cp/semantics.c:5959
+#: cp/semantics.c:6008
#, gcc-internal-format
msgid "%qD is not a variable in clause %qs"
msgstr ""
-#: cp/semantics.c:6015
+#: cp/semantics.c:6064
#, gcc-internal-format
msgid "%qD is not a variable in clause %<firstprivate%>"
msgstr ""
-#: cp/semantics.c:6054
+#: cp/semantics.c:6103
#, gcc-internal-format
msgid "%qD is not a variable in clause %<lastprivate%>"
msgstr ""
-#: cp/semantics.c:6099
+#: cp/semantics.c:6148
#, gcc-internal-format
msgid "%<gang%> static expression must be integral"
msgstr ""
-#: cp/semantics.c:6113
+#: cp/semantics.c:6162
#, gcc-internal-format
msgid "%<gang%> static value must bepositive"
msgstr ""
-#: cp/semantics.c:6145
+#: cp/semantics.c:6194
#, gcc-internal-format
msgid "%<gang%> num expression must be integral"
msgstr ""
-#: cp/semantics.c:6148
+#: cp/semantics.c:6197
#, gcc-internal-format
msgid "%<vector%> length expression must be integral"
msgstr ""
-#: cp/semantics.c:6152
+#: cp/semantics.c:6201
#, gcc-internal-format
msgid "%<worker%> num expression must be integral"
msgstr ""
-#: cp/semantics.c:6156
+#: cp/semantics.c:6205
#, gcc-internal-format
msgid "%qs expression must be integral"
msgstr ""
-#: cp/semantics.c:6174
+#: cp/semantics.c:6223
#, gcc-internal-format
msgid "%<gang%> num value must be positive"
msgstr ""
-#: cp/semantics.c:6178
+#: cp/semantics.c:6227
#, gcc-internal-format
msgid "%<vector%> length value must bepositive"
msgstr ""
-#: cp/semantics.c:6183
+#: cp/semantics.c:6232
#, gcc-internal-format
msgid "%<worker%> num value must bepositive"
msgstr ""
-#: cp/semantics.c:6188
+#: cp/semantics.c:6237
#, gcc-internal-format
msgid "%qs value must be positive"
msgstr ""
-#: cp/semantics.c:6235
+#: cp/semantics.c:6284
#, gcc-internal-format
msgid "schedule chunk size expression must be integral"
msgstr ""
-#: cp/semantics.c:6267
+#: cp/semantics.c:6316
#, gcc-internal-format
msgid "%qs length expression must be integral"
msgstr ""
-#: cp/semantics.c:6280
+#: cp/semantics.c:6329
#, gcc-internal-format
msgid "%qs length expression must be positive constant integer expression"
msgstr ""
-#: cp/semantics.c:6299
+#: cp/semantics.c:6348
#, gcc-internal-format
msgid "%<async%> expression must be integral"
msgstr ""
-#: cp/semantics.c:6327
+#: cp/semantics.c:6376
#, gcc-internal-format
msgid "%<thread_limit%> expression must be integral"
msgstr ""
-#: cp/semantics.c:6356
+#: cp/semantics.c:6405
#, gcc-internal-format
msgid "%<device%> id must be integral"
msgstr ""
-#: cp/semantics.c:6377
+#: cp/semantics.c:6426
#, gcc-internal-format
msgid "%<dist_schedule%> chunk size expression must be integral"
msgstr ""
-#: cp/semantics.c:6404
+#: cp/semantics.c:6453
#, gcc-internal-format
msgid "%qD is not a variable in %<aligned%> clause"
msgstr ""
-#: cp/semantics.c:6418
+#: cp/semantics.c:6467
#, 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:6424
+#: cp/semantics.c:6473
#, gcc-internal-format
msgid "%qD appears more than once in %<aligned%> clauses"
msgstr ""
-#: cp/semantics.c:6437
+#: cp/semantics.c:6486
#, gcc-internal-format
msgid "%<aligned%> clause alignment expression must be integral"
msgstr ""
-#: cp/semantics.c:6486
+#: cp/semantics.c:6535
#, gcc-internal-format
msgid "%qD is not a variable in %<depend%> clause"
msgstr ""
-#: cp/semantics.c:6746
+#: cp/semantics.c:6803
#, gcc-internal-format
msgid "overloaded function name %qE in clause %qs"
msgstr ""
-#: cp/semantics.c:6750
+#: cp/semantics.c:6807
#, gcc-internal-format
msgid "template %qE in clause %qs"
msgstr ""
-#: cp/semantics.c:6815
+#: cp/semantics.c:6872
#, gcc-internal-format
msgid "%<grainsize%> expression must be integral"
msgstr ""
-#: cp/semantics.c:6844
+#: cp/semantics.c:6901
#, gcc-internal-format
msgid "%<priority%> expression must be integral"
msgstr ""
-#: cp/semantics.c:6873
+#: cp/semantics.c:6930
#, gcc-internal-format
msgid "%<num_tasks%> expression must be integral"
msgstr ""
-#: cp/semantics.c:6902
+#: cp/semantics.c:6959
#, gcc-internal-format
msgid ""
"%qs variable is neither a pointer, nor an arraynor reference to pointer or "
"array"
msgstr ""
-#: cp/semantics.c:7358
+#: cp/semantics.c:7415
#, gcc-internal-format
msgid "%<threadprivate%> %qD is not file, namespace or block scope variable"
msgstr ""
-#: cp/semantics.c:7372
+#: cp/semantics.c:7429
#, gcc-internal-format
msgid "%<threadprivate%> %qE directive not in %qT definition"
msgstr ""
-#: cp/semantics.c:7577
+#: cp/semantics.c:7634
#, gcc-internal-format
msgid "difference between %qE and %qD does not have integer type"
msgstr ""
-#: cp/semantics.c:7997
+#: cp/semantics.c:8054
#, gcc-internal-format
msgid "%<#pragma omp simd%> used with class iteration variable %qE"
msgstr ""
-#: cp/semantics.c:8339 cp/semantics.c:8349
+#: cp/semantics.c:8396 cp/semantics.c:8406
#, gcc-internal-format
msgid "%<#pragma omp atomic update%> uses two different expressions for memory"
msgstr ""
-#: cp/semantics.c:8642
+#: cp/semantics.c:8699
#, gcc-internal-format
msgid "static assertion failed"
msgstr ""
-#: cp/semantics.c:8644
+#: cp/semantics.c:8701
#, gcc-internal-format, gfc-internal-format
msgid "static assertion failed: %s"
msgstr ""
-#: cp/semantics.c:8649
+#: cp/semantics.c:8706
#, gcc-internal-format
msgid "non-constant condition for static assertion"
msgstr ""
-#: cp/semantics.c:8679
+#: cp/semantics.c:8736
#, gcc-internal-format
msgid "argument to decltype must be an expression"
msgstr ""
-#: cp/semantics.c:8707
+#: cp/semantics.c:8764
#, gcc-internal-format
msgid "decltype cannot resolve address of overloaded function"
msgstr ""
-#: cp/semantics.c:9236
+#: cp/semantics.c:9293
#, gcc-internal-format
msgid "operand of fold expression has no unexpanded parameter packs"
msgstr ""
-#: cp/semantics.c:9289
+#: cp/semantics.c:9346
#, gcc-internal-format
msgid "both arguments in binary fold have unexpanded parameter packs"
msgstr ""
-#: cp/semantics.c:9291
+#: cp/semantics.c:9348
#, gcc-internal-format
msgid "no unexpanded parameter packs in binary fold"
msgstr ""
-#: cp/tree.c:1139
+#: cp/tree.c:1146
#, gcc-internal-format
msgid "%qV qualifiers cannot be applied to %qT"
msgstr ""
-#: cp/tree.c:1616
+#: cp/tree.c:1637
#, gcc-internal-format
msgid "lambda-expression in a constant expression"
msgstr ""
-#: cp/tree.c:3539
+#: cp/tree.c:3573
#, gcc-internal-format
msgid "%qE attribute can only be applied to Java class definitions"
msgstr ""
-#: cp/tree.c:3568
+#: cp/tree.c:3602
#, gcc-internal-format
msgid "%qE attribute can only be applied to class definitions"
msgstr ""
-#: cp/tree.c:3574
+#: cp/tree.c:3608
#, gcc-internal-format
msgid "%qE is obsolete; g++ vtables are now COM-compatible by default"
msgstr ""
-#: cp/tree.c:3601
+#: cp/tree.c:3635
#, gcc-internal-format
msgid "requested init_priority is not an integer constant"
msgstr ""
-#: cp/tree.c:3623
+#: cp/tree.c:3657
#, gcc-internal-format
msgid ""
"can only use %qE attribute on file-scope definitions of objects of class type"
msgstr ""
-#: cp/tree.c:3631
+#: cp/tree.c:3665
#, gcc-internal-format
msgid "requested init_priority is out of range"
msgstr ""
-#: cp/tree.c:3641
+#: cp/tree.c:3675
#, gcc-internal-format
msgid "requested init_priority is reserved for internal use"
msgstr ""
-#: cp/tree.c:3652
+#: cp/tree.c:3686
#, gcc-internal-format
msgid "%qE attribute is not supported on this platform"
msgstr ""
-#: cp/tree.c:3679
+#: cp/tree.c:3713
#, gcc-internal-format
msgid "redeclaration of %qD adds abi tag %E"
msgstr ""
-#: cp/tree.c:3685
-#, gcc-internal-format
-msgid "previous declaration here"
-msgstr ""
-
-#: cp/tree.c:3699
+#: cp/tree.c:3733
#, gcc-internal-format
msgid "the %qE attribute requires arguments"
msgstr ""
-#: cp/tree.c:3710
+#: cp/tree.c:3744
#, gcc-internal-format
msgid "arguments to the %qE attribute must be narrow string literals"
msgstr ""
-#: cp/tree.c:3723 cp/tree.c:3736
+#: cp/tree.c:3757 cp/tree.c:3770
#, gcc-internal-format
msgid "arguments to the %qE attribute must contain valid identifiers"
msgstr ""
-#: cp/tree.c:3725
+#: cp/tree.c:3759
#, gcc-internal-format
msgid "%<%c%> is not a valid first character for an identifier"
msgstr ""
-#: cp/tree.c:3738
+#: cp/tree.c:3772
#, gcc-internal-format
msgid "%<%c%> is not a valid character in an identifier"
msgstr ""
-#: cp/tree.c:3762
+#: cp/tree.c:3796
#, gcc-internal-format
msgid "%qE attribute applied to non-class, non-enum type %qT"
msgstr ""
-#: cp/tree.c:3768
+#: cp/tree.c:3802
#, gcc-internal-format
msgid "%qE attribute applied to %qT after its definition"
msgstr ""
-#: cp/tree.c:3775
+#: cp/tree.c:3809
#, gcc-internal-format
msgid "ignoring %qE attribute applied to template instantiation %qT"
msgstr ""
-#: cp/tree.c:3782
+#: cp/tree.c:3816
#, gcc-internal-format
msgid "ignoring %qE attribute applied to template specialization %qT"
msgstr ""
-#: cp/tree.c:3804
+#: cp/tree.c:3838
#, gcc-internal-format
msgid "%qE attribute applied to non-function, non-variable %qD"
msgstr ""
-#: cp/tree.c:3810
+#: cp/tree.c:3844
#, gcc-internal-format
msgid "%qE attribute applied to extern \"C\" declaration %qD"
msgstr ""
-#: cp/tree.c:4511
+#: cp/tree.c:4545
#, gcc-internal-format
msgid "zero as null pointer constant"
msgstr ""
-#: cp/tree.c:4524
+#: cp/tree.c:4558
#, gcc-internal-format, gfc-internal-format
msgid "lang_* check: failed in %s, at %s:%d"
msgstr ""
@@ -45855,14 +46003,14 @@ msgstr ""
msgid "deprecated conversion from string constant to %qT"
msgstr ""
-#: cp/typeck.c:2302 cp/typeck.c:2695
+#: cp/typeck.c:2302 cp/typeck.c:2703
#, 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:2306 cp/typeck.c:2699
+#: cp/typeck.c:2306 cp/typeck.c:2707
#, gcc-internal-format
msgid "request for member %qD in %qE, which is of non-class type %qT"
msgstr ""
@@ -45888,300 +46036,295 @@ msgstr ""
msgid "the type being destroyed is %qT, but the destructor refers to %qT"
msgstr ""
-#: cp/typeck.c:2739 cp/typeck.c:2751
+#: cp/typeck.c:2747 cp/typeck.c:2759
#, gcc-internal-format
msgid "%<%D::%D%> is not a member of %qT"
msgstr ""
-#: cp/typeck.c:2788
+#: cp/typeck.c:2796
#, gcc-internal-format
msgid "%qT is not a base of %qT"
msgstr ""
-#: cp/typeck.c:2812
+#: cp/typeck.c:2820
#, gcc-internal-format
msgid "%q#T has no member named %qE; did you mean %qE?"
msgstr ""
-#: cp/typeck.c:2816
+#: cp/typeck.c:2824
#, gcc-internal-format
msgid "%q#T has no member named %qE"
msgstr ""
-#: cp/typeck.c:2835
+#: cp/typeck.c:2843
#, gcc-internal-format
msgid "%qD is not a member template function"
msgstr ""
-#: cp/typeck.c:3001
+#: cp/typeck.c:3009
#, gcc-internal-format
msgid "%qT is not a pointer-to-object type"
msgstr ""
-#: cp/typeck.c:3032
+#: cp/typeck.c:3040
#, gcc-internal-format
msgid "invalid use of array indexing on pointer to member"
msgstr ""
-#: cp/typeck.c:3035
+#: cp/typeck.c:3043
#, gcc-internal-format
msgid "invalid use of unary %<*%> on pointer to member"
msgstr ""
-#: cp/typeck.c:3038
+#: cp/typeck.c:3046
#, gcc-internal-format
msgid "invalid use of implicit conversion on pointer to member"
msgstr ""
-#: cp/typeck.c:3041
+#: cp/typeck.c:3049
#, 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:3077
+#: cp/typeck.c:3085
#, gcc-internal-format
msgid "subscript missing in array reference"
msgstr ""
-#: cp/typeck.c:3093
+#: cp/typeck.c:3101
#, gcc-internal-format
msgid "rank of the array%'s index is greater than 1"
msgstr ""
-#: cp/typeck.c:3189
+#: cp/typeck.c:3197
#, gcc-internal-format
msgid "subscripting array declared %<register%>"
msgstr ""
-#: cp/typeck.c:3223
+#: cp/typeck.c:3231
#, gcc-internal-format
msgid "subscripted value is neither array nor pointer"
msgstr ""
-#: cp/typeck.c:3296
+#: cp/typeck.c:3304
#, gcc-internal-format
msgid "object missing in use of %qE"
msgstr ""
-#: cp/typeck.c:3527
+#: cp/typeck.c:3535
#, gcc-internal-format
msgid "cannot call function %qD"
msgstr ""
-#: cp/typeck.c:3542
+#: cp/typeck.c:3550
#, gcc-internal-format
msgid "ISO C++ forbids calling %<::main%> from within program"
msgstr ""
-#: cp/typeck.c:3563
+#: cp/typeck.c:3571
#, gcc-internal-format
msgid ""
"must use %<.*%> or %<->*%> to call pointer-to-member function in %<%E "
"(...)%>, e.g. %<(... ->* %E) (...)%>"
msgstr ""
-#: cp/typeck.c:3580
+#: cp/typeck.c:3588
#, gcc-internal-format
msgid "%qE cannot be used as a function"
msgstr ""
-#: cp/typeck.c:3583
+#: cp/typeck.c:3591
#, gcc-internal-format
msgid "%qD cannot be used as a function"
msgstr ""
-#: cp/typeck.c:3586
+#: cp/typeck.c:3594
#, gcc-internal-format
msgid "expression cannot be used as a function"
msgstr ""
-#: cp/typeck.c:3635
+#: cp/typeck.c:3643
#, gcc-internal-format
msgid "too many arguments to constructor %q#D"
msgstr ""
-#: cp/typeck.c:3636
+#: cp/typeck.c:3644
#, gcc-internal-format
msgid "too few arguments to constructor %q#D"
msgstr ""
-#: cp/typeck.c:3641
+#: cp/typeck.c:3649
#, gcc-internal-format
msgid "too many arguments to member function %q#D"
msgstr ""
-#: cp/typeck.c:3642
+#: cp/typeck.c:3650
#, gcc-internal-format
msgid "too few arguments to member function %q#D"
msgstr ""
-#: cp/typeck.c:3648
+#: cp/typeck.c:3656
#, gcc-internal-format
msgid "too many arguments to function %q#D"
msgstr ""
-#: cp/typeck.c:3649
+#: cp/typeck.c:3657
#, gcc-internal-format
msgid "too few arguments to function %q#D"
msgstr ""
-#: cp/typeck.c:3659
+#: cp/typeck.c:3667
#, gcc-internal-format
msgid "too many arguments to method %q#D"
msgstr ""
-#: cp/typeck.c:3660
+#: cp/typeck.c:3668
#, gcc-internal-format
msgid "too few arguments to method %q#D"
msgstr ""
-#: cp/typeck.c:3663
+#: cp/typeck.c:3671
#, gcc-internal-format
msgid "too many arguments to function"
msgstr ""
-#: cp/typeck.c:3664
+#: cp/typeck.c:3672
#, gcc-internal-format
msgid "too few arguments to function"
msgstr ""
-#: cp/typeck.c:3743
+#: cp/typeck.c:3751
#, gcc-internal-format
msgid "parameter %P of %qD has incomplete type %qT"
msgstr ""
-#: cp/typeck.c:3746
+#: cp/typeck.c:3754
#, gcc-internal-format
msgid "parameter %P has incomplete type %qT"
msgstr ""
-#: cp/typeck.c:4083 cp/typeck.c:4094
+#: cp/typeck.c:3993
#, gcc-internal-format
-msgid "assuming cast to type %qT from overloaded function"
-msgstr ""
-
-#: cp/typeck.c:4140
-#, gcc-internal-format
-msgid "NULL used in arithmetic"
+msgid "the address of %qD will never be NULL"
msgstr ""
-#: cp/typeck.c:4463
+#: cp/typeck.c:4004
#, gcc-internal-format
-msgid "left rotate count is negative"
+msgid "the compiler can assume that the address of %qD will never be NULL"
msgstr ""
-#: cp/typeck.c:4464
+#: cp/typeck.c:4123 cp/typeck.c:4134
#, gcc-internal-format
-msgid "right rotate count is negative"
+msgid "assuming cast to type %qT from overloaded function"
msgstr ""
-#: cp/typeck.c:4470
+#: cp/typeck.c:4180
#, gcc-internal-format
-msgid "left rotate count >= width of type"
+msgid "NULL used in arithmetic"
msgstr ""
-#: cp/typeck.c:4471
+#: cp/typeck.c:4503
#, gcc-internal-format
-msgid "right rotate count >= width of type"
+msgid "left rotate count is negative"
msgstr ""
-#: cp/typeck.c:4492 cp/typeck.c:4793
+#: cp/typeck.c:4504
#, gcc-internal-format
-msgid "comparison with string literal results in unspecified behaviour"
+msgid "right rotate count is negative"
msgstr ""
-#: cp/typeck.c:4523 cp/typeck.c:4567
+#: cp/typeck.c:4510
#, gcc-internal-format
-msgid "the address of %qD will never be NULL"
+msgid "left rotate count >= width of type"
msgstr ""
-#: cp/typeck.c:4539 cp/typeck.c:4583
+#: cp/typeck.c:4511
#, gcc-internal-format
-msgid "the compiler can assume that the address of %qD will never be NULL"
+msgid "right rotate count >= width of type"
msgstr ""
-#: cp/typeck.c:4599 cp/typeck.c:4607 cp/typeck.c:4885 cp/typeck.c:4893
+#: cp/typeck.c:4582 cp/typeck.c:4590 cp/typeck.c:4869 cp/typeck.c:4877
#, gcc-internal-format
msgid "ISO C++ forbids comparison between pointer and integer"
msgstr ""
-#: cp/typeck.c:4808 cp/typeck.c:4820
+#: cp/typeck.c:4792 cp/typeck.c:4804
#, gcc-internal-format
msgid "operand types are %qT and %qT"
msgstr ""
-#: cp/typeck.c:4846
+#: cp/typeck.c:4830
#, gcc-internal-format
msgid "could not find an integer type of the same size as %qT"
msgstr ""
-#: cp/typeck.c:4910
+#: cp/typeck.c:4894
#, gcc-internal-format
msgid "unordered comparison on non-floating point argument"
msgstr ""
-#: cp/typeck.c:4965
+#: cp/typeck.c:4949
#, gcc-internal-format
msgid "invalid operands of types %qT and %qT to binary %qO"
msgstr ""
-#: cp/typeck.c:5265
+#: cp/typeck.c:5249
#, gcc-internal-format
msgid "ISO C++ forbids using pointer of type %<void *%> in subtraction"
msgstr ""
-#: cp/typeck.c:5273
+#: cp/typeck.c:5257
#, gcc-internal-format
msgid "ISO C++ forbids using pointer to a function in subtraction"
msgstr ""
-#: cp/typeck.c:5281
+#: cp/typeck.c:5265
#, gcc-internal-format
msgid "ISO C++ forbids using pointer to a method in subtraction"
msgstr ""
-#: cp/typeck.c:5300
+#: cp/typeck.c:5284
#, gcc-internal-format
msgid "invalid use of a pointer to an incomplete type in pointer arithmetic"
msgstr ""
-#: cp/typeck.c:5375
+#: cp/typeck.c:5359
#, gcc-internal-format
msgid "taking address of constructor %qE"
msgstr ""
-#: cp/typeck.c:5376
+#: cp/typeck.c:5360
#, gcc-internal-format
msgid "taking address of destructor %qE"
msgstr ""
-#: cp/typeck.c:5392
+#: cp/typeck.c:5376
#, gcc-internal-format
msgid "invalid use of %qE to form a pointer-to-member-function"
msgstr ""
-#: cp/typeck.c:5395
+#: cp/typeck.c:5379
#, gcc-internal-format
msgid " a qualified-id is required"
msgstr ""
-#: cp/typeck.c:5402
+#: cp/typeck.c:5386
#, 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:5561
+#: cp/typeck.c:5545
#, 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:5566
+#: cp/typeck.c:5550
#, gcc-internal-format
msgid ""
"ISO C++ forbids taking the address of a bound member function to form a "
@@ -46189,388 +46332,388 @@ msgid ""
msgstr ""
#. Make this a permerror because we used to accept it.
-#: cp/typeck.c:5603
+#: cp/typeck.c:5587
#, gcc-internal-format
msgid "taking address of temporary"
msgstr ""
-#: cp/typeck.c:5605
+#: cp/typeck.c:5589
#, gcc-internal-format
msgid "taking address of xvalue (rvalue reference)"
msgstr ""
-#: cp/typeck.c:5622
+#: cp/typeck.c:5606
#, gcc-internal-format
msgid "ISO C++ forbids taking address of function %<::main%>"
msgstr ""
-#: cp/typeck.c:5677
+#: cp/typeck.c:5661
#, gcc-internal-format
msgid "ISO C++ forbids taking the address of a cast to a non-lvalue expression"
msgstr ""
-#: cp/typeck.c:5705
+#: cp/typeck.c:5689
#, gcc-internal-format
msgid "cannot create pointer to reference member %qD"
msgstr ""
-#: cp/typeck.c:5983
+#: cp/typeck.c:5967
#, gcc-internal-format
msgid "ISO C++ forbids incrementing an enum"
msgstr ""
-#: cp/typeck.c:5984
+#: cp/typeck.c:5968
#, gcc-internal-format
msgid "ISO C++ forbids decrementing an enum"
msgstr ""
-#: cp/typeck.c:6000
+#: cp/typeck.c:5984
#, gcc-internal-format
msgid "cannot increment a pointer to incomplete type %qT"
msgstr ""
-#: cp/typeck.c:6001
+#: cp/typeck.c:5985
#, gcc-internal-format
msgid "cannot decrement a pointer to incomplete type %qT"
msgstr ""
-#: cp/typeck.c:6012
+#: cp/typeck.c:5996
#, gcc-internal-format
msgid "ISO C++ forbids incrementing a pointer of type %qT"
msgstr ""
-#: cp/typeck.c:6013
+#: cp/typeck.c:5997
#, gcc-internal-format
msgid "ISO C++ forbids decrementing a pointer of type %qT"
msgstr ""
-#: cp/typeck.c:6048
+#: cp/typeck.c:6032
#, gcc-internal-format
msgid "invalid use of Boolean expression as operand to %<operator--%>"
msgstr ""
-#: cp/typeck.c:6210
+#: cp/typeck.c:6194
#, gcc-internal-format
msgid "cannot take the address of %<this%>, which is an rvalue expression"
msgstr ""
-#: cp/typeck.c:6232
+#: cp/typeck.c:6216
#, gcc-internal-format
msgid "address of explicit register variable %qD requested"
msgstr ""
-#: cp/typeck.c:6237
+#: cp/typeck.c:6221
#, gcc-internal-format
msgid "address requested for %qD, which is declared %<register%>"
msgstr ""
-#: cp/typeck.c:6320
+#: cp/typeck.c:6304
#, gcc-internal-format
msgid "list-initializer for non-class type must not be parenthesized"
msgstr ""
-#: cp/typeck.c:6332
+#: cp/typeck.c:6316
#, gcc-internal-format
msgid "expression list treated as compound expression in initializer"
msgstr ""
-#: cp/typeck.c:6336
+#: cp/typeck.c:6320
#, gcc-internal-format
msgid "expression list treated as compound expression in mem-initializer"
msgstr ""
-#: cp/typeck.c:6340
+#: cp/typeck.c:6324
#, gcc-internal-format
msgid "expression list treated as compound expression in functional cast"
msgstr ""
-#: cp/typeck.c:6377
+#: cp/typeck.c:6361
#, gcc-internal-format, gfc-internal-format
msgid "%s expression list treated as compound expression"
msgstr ""
-#: cp/typeck.c:6474
+#: cp/typeck.c:6458
#, gcc-internal-format
msgid "no context to resolve type of %qE"
msgstr ""
-#: cp/typeck.c:6507
+#: cp/typeck.c:6491
#, gcc-internal-format
msgid "cast from type %qT to type %qT casts away qualifiers"
msgstr ""
-#: cp/typeck.c:6513
+#: cp/typeck.c:6497
#, gcc-internal-format
msgid "static_cast from type %qT to type %qT casts away qualifiers"
msgstr ""
-#: cp/typeck.c:6519
+#: cp/typeck.c:6503
#, gcc-internal-format
msgid "reinterpret_cast from type %qT to type %qT casts away qualifiers"
msgstr ""
-#: cp/typeck.c:6542
+#: cp/typeck.c:6526
#, gcc-internal-format
msgid "useless cast to type %qT"
msgstr ""
-#: cp/typeck.c:6917
+#: cp/typeck.c:6897
#, gcc-internal-format
msgid "invalid static_cast from type %qT to type %qT"
msgstr ""
-#: cp/typeck.c:6943
+#: cp/typeck.c:6923
#, gcc-internal-format
msgid "converting from %qT to %qT"
msgstr ""
-#: cp/typeck.c:6995
+#: cp/typeck.c:6975
#, gcc-internal-format
msgid "invalid cast of an rvalue expression of type %qT to type %qT"
msgstr ""
-#: cp/typeck.c:7065
+#: cp/typeck.c:7045
#, gcc-internal-format
msgid "cast from %qT to %qT loses precision"
msgstr ""
-#: cp/typeck.c:7105
+#: cp/typeck.c:7085
#, gcc-internal-format
msgid "cast from %qT to %qT increases required alignment of target type"
msgstr ""
-#: cp/typeck.c:7123
+#: cp/typeck.c:7103
#, gcc-internal-format
msgid ""
"casting between pointer-to-function and pointer-to-object is conditionally-"
"supported"
msgstr ""
-#: cp/typeck.c:7137
+#: cp/typeck.c:7117
#, gcc-internal-format
msgid "invalid cast from type %qT to type %qT"
msgstr ""
-#: cp/typeck.c:7198
+#: cp/typeck.c:7178
#, 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:7207
+#: cp/typeck.c:7187
#, 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:7247
+#: cp/typeck.c:7227
#, gcc-internal-format
msgid "invalid const_cast of an rvalue of type %qT to type %qT"
msgstr ""
-#: cp/typeck.c:7308
+#: cp/typeck.c:7288
#, gcc-internal-format
msgid "invalid const_cast from type %qT to type %qT"
msgstr ""
-#: cp/typeck.c:7401 cp/typeck.c:7409
+#: cp/typeck.c:7381 cp/typeck.c:7389
#, gcc-internal-format
msgid "ISO C++ forbids casting to an array type %qT"
msgstr ""
-#: cp/typeck.c:7418
+#: cp/typeck.c:7398
#, gcc-internal-format
msgid "invalid cast to function type %qT"
msgstr ""
-#: cp/typeck.c:7699
+#: cp/typeck.c:7679
#, gcc-internal-format
msgid " in evaluation of %<%Q(%#T, %#T)%>"
msgstr ""
-#: cp/typeck.c:7760
+#: cp/typeck.c:7740
#, gcc-internal-format
msgid "assigning to an array from an initializer list"
msgstr ""
-#: cp/typeck.c:7786
+#: cp/typeck.c:7766
#, gcc-internal-format
msgid "incompatible types in assignment of %qT to %qT"
msgstr ""
-#: cp/typeck.c:7800
+#: cp/typeck.c:7780
#, gcc-internal-format
msgid "array used as initializer"
msgstr ""
-#: cp/typeck.c:7802
+#: cp/typeck.c:7782
#, gcc-internal-format
msgid "invalid array assignment"
msgstr ""
-#: cp/typeck.c:7932
+#: cp/typeck.c:7912
#, gcc-internal-format
msgid " in pointer to member function conversion"
msgstr ""
-#: cp/typeck.c:7946
+#: cp/typeck.c:7926
#, gcc-internal-format
msgid "pointer to member conversion via virtual base %qT"
msgstr ""
-#: cp/typeck.c:7993 cp/typeck.c:8012
+#: cp/typeck.c:7973 cp/typeck.c:7992
#, gcc-internal-format
msgid " in pointer to member conversion"
msgstr ""
-#: cp/typeck.c:8093
+#: cp/typeck.c:8073
#, gcc-internal-format
msgid "invalid conversion to type %qT from type %qT"
msgstr ""
-#: cp/typeck.c:8369
+#: cp/typeck.c:8349
#, gcc-internal-format
msgid "cannot convert %qT to %qT for argument %qP to %qD"
msgstr ""
-#: cp/typeck.c:8375
+#: cp/typeck.c:8355
#, gcc-internal-format
msgid "cannot convert %qT to %qT in default argument"
msgstr ""
-#: cp/typeck.c:8379
+#: cp/typeck.c:8359
#, gcc-internal-format
msgid "cannot convert %qT to %qT in argument passing"
msgstr ""
-#: cp/typeck.c:8383
+#: cp/typeck.c:8363
#, gcc-internal-format
msgid "cannot convert %qT to %qT"
msgstr ""
-#: cp/typeck.c:8387
+#: cp/typeck.c:8367
#, gcc-internal-format
msgid "cannot convert %qT to %qT in initialization"
msgstr ""
-#: cp/typeck.c:8391
+#: cp/typeck.c:8371
#, gcc-internal-format
msgid "cannot convert %qT to %qT in return"
msgstr ""
-#: cp/typeck.c:8395
+#: cp/typeck.c:8375
#, gcc-internal-format
msgid "cannot convert %qT to %qT in assignment"
msgstr ""
-#: cp/typeck.c:8408
+#: cp/typeck.c:8388
#, gcc-internal-format
msgid "class type %qT is incomplete"
msgstr ""
-#: cp/typeck.c:8426
+#: cp/typeck.c:8406
#, gcc-internal-format
msgid "parameter %qP of %qD might be a candidate for a format attribute"
msgstr ""
-#: cp/typeck.c:8430
+#: cp/typeck.c:8410
#, gcc-internal-format
msgid "parameter might be a candidate for a format attribute"
msgstr ""
-#: cp/typeck.c:8435
+#: cp/typeck.c:8415
#, gcc-internal-format
msgid "target of conversion might be a candidate for a format attribute"
msgstr ""
-#: cp/typeck.c:8440
+#: cp/typeck.c:8420
#, gcc-internal-format
msgid "target of initialization might be a candidate for a format attribute"
msgstr ""
-#: cp/typeck.c:8450
+#: cp/typeck.c:8430
#, gcc-internal-format
msgid ""
"left-hand side of assignment might be a candidate for a format attribute"
msgstr ""
-#: cp/typeck.c:8545
+#: cp/typeck.c:8525
#, gcc-internal-format
msgid "in passing argument %P of %qD"
msgstr ""
-#: cp/typeck.c:8604
+#: cp/typeck.c:8584
#, gcc-internal-format
msgid "returning reference to temporary"
msgstr ""
-#: cp/typeck.c:8611
+#: cp/typeck.c:8591
#, gcc-internal-format
msgid "reference to non-lvalue returned"
msgstr ""
-#: cp/typeck.c:8626
+#: cp/typeck.c:8606
#, gcc-internal-format
msgid "reference to local variable %qD returned"
msgstr ""
-#: cp/typeck.c:8630
+#: cp/typeck.c:8610
#, gcc-internal-format
msgid "address of label %qD returned"
msgstr ""
-#: cp/typeck.c:8634
+#: cp/typeck.c:8614
#, gcc-internal-format
msgid "address of local variable %qD returned"
msgstr ""
-#: cp/typeck.c:8680
+#: cp/typeck.c:8660
#, 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:8688
+#: cp/typeck.c:8668
#, 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:8691
+#: cp/typeck.c:8671
#, gcc-internal-format
msgid "returning a value from a constructor"
msgstr ""
#. Give a helpful error message.
-#: cp/typeck.c:8721 cp/typeck.c:8767
+#: cp/typeck.c:8701 cp/typeck.c:8747
#, gcc-internal-format
msgid "return-statement with no value, in function returning %qT"
msgstr ""
-#: cp/typeck.c:8729
+#: cp/typeck.c:8709
#, gcc-internal-format
msgid "returning initializer list"
msgstr ""
-#: cp/typeck.c:8748
+#: cp/typeck.c:8728
#, gcc-internal-format
msgid "inconsistent types %qT and %qT deduced for lambda return type"
msgstr ""
-#: cp/typeck.c:8751
+#: cp/typeck.c:8731
#, gcc-internal-format
msgid "inconsistent deduction for auto return type: %qT and then %qT"
msgstr ""
-#: cp/typeck.c:8786
+#: cp/typeck.c:8766
#, gcc-internal-format
msgid "return-statement with a value, in function returning 'void'"
msgstr ""
-#: cp/typeck.c:8816
+#: cp/typeck.c:8796
#, gcc-internal-format
msgid ""
"%<operator new%> must not return NULL unless it is declared %<throw()%> (or -"
@@ -46578,12 +46721,12 @@ msgid ""
msgstr ""
#. Make this a permerror because we used to accept it.
-#: cp/typeck.c:9435
+#: cp/typeck.c:9405
#, gcc-internal-format
msgid "using temporary as lvalue"
msgstr ""
-#: cp/typeck.c:9437
+#: cp/typeck.c:9407
#, gcc-internal-format
msgid "using xvalue (rvalue reference) as lvalue"
msgstr ""
@@ -46805,29 +46948,29 @@ msgstr ""
msgid "constructor syntax used, but no constructor declared for type %qT"
msgstr ""
-#: cp/typeck2.c:947
+#: cp/typeck2.c:950
#, gcc-internal-format
msgid ""
"narrowing conversion of %qE from %qT to %qT inside { } is ill-formed in C++11"
msgstr ""
-#: cp/typeck2.c:957 cp/typeck2.c:970
+#: cp/typeck2.c:960 cp/typeck2.c:973
#, gcc-internal-format
msgid "narrowing conversion of %qE from %qT to %qT inside { }"
msgstr ""
-#: cp/typeck2.c:960
+#: cp/typeck2.c:963
#, gcc-internal-format
msgid ""
" the expression has a constant value but is not a C++ constant-expression"
msgstr ""
-#: cp/typeck2.c:1047
+#: cp/typeck2.c:1049
#, gcc-internal-format
msgid "int-array initialized from non-wide string"
msgstr ""
-#: cp/typeck2.c:1053
+#: cp/typeck2.c:1055
#, gcc-internal-format
msgid "int-array initialized from incompatible wide string"
msgstr ""
@@ -46847,92 +46990,92 @@ msgstr ""
msgid "array must be initialized with a brace-enclosed initializer"
msgstr ""
-#: cp/typeck2.c:1431 cp/typeck2.c:1460
+#: cp/typeck2.c:1430 cp/typeck2.c:1457
#, gcc-internal-format
msgid "missing initializer for member %qD"
msgstr ""
-#: cp/typeck2.c:1439
+#: cp/typeck2.c:1438
#, gcc-internal-format
msgid "member %qD is uninitialized reference"
msgstr ""
-#: cp/typeck2.c:1446
+#: cp/typeck2.c:1445
#, gcc-internal-format
msgid "member %qD with uninitialized reference fields"
msgstr ""
-#: cp/typeck2.c:1536
+#: cp/typeck2.c:1548
#, gcc-internal-format
msgid "no field %qD found in union being initialized"
msgstr ""
-#: cp/typeck2.c:1547
+#: cp/typeck2.c:1559
#, gcc-internal-format
msgid "index value instead of field name in union initializer"
msgstr ""
-#: cp/typeck2.c:1729
+#: cp/typeck2.c:1741
#, gcc-internal-format
msgid "circular pointer delegation detected"
msgstr ""
-#: cp/typeck2.c:1743
+#: cp/typeck2.c:1755
#, gcc-internal-format
msgid "base operand of %<->%> has non-pointer type %qT"
msgstr ""
-#: cp/typeck2.c:1769
+#: cp/typeck2.c:1781
#, gcc-internal-format
msgid "result of %<operator->()%> yields non-pointer result"
msgstr ""
-#: cp/typeck2.c:1771
+#: cp/typeck2.c:1783
#, gcc-internal-format
msgid "base operand of %<->%> is not a pointer"
msgstr ""
-#: cp/typeck2.c:1798
+#: cp/typeck2.c:1810
#, gcc-internal-format
msgid "%qE cannot be used as a member pointer, since it is of type %qT"
msgstr ""
-#: cp/typeck2.c:1807
+#: cp/typeck2.c:1819
#, gcc-internal-format
msgid "cannot apply member pointer %qE to %qE, which is of non-class type %qT"
msgstr ""
-#: cp/typeck2.c:1829
+#: cp/typeck2.c:1841
#, gcc-internal-format
msgid "pointer to member type %qT incompatible with object type %qT"
msgstr ""
-#: cp/typeck2.c:1888
+#: cp/typeck2.c:1900
#, gcc-internal-format
msgid "pointer-to-member-function type %qT requires an rvalue"
msgstr ""
-#: cp/typeck2.c:1895
+#: cp/typeck2.c:1907
#, gcc-internal-format
msgid "pointer-to-member-function type %qT requires an lvalue"
msgstr ""
-#: cp/typeck2.c:1936
+#: cp/typeck2.c:1948
#, gcc-internal-format
msgid "functional cast to array type %qT"
msgstr ""
-#: cp/typeck2.c:1957
+#: cp/typeck2.c:1969
#, gcc-internal-format
msgid "invalid value-initialization of reference type"
msgstr ""
-#: cp/typeck2.c:2184
+#: cp/typeck2.c:2196
#, gcc-internal-format
msgid "call to function %qD which throws incomplete type %q#T"
msgstr ""
-#: cp/typeck2.c:2187
+#: cp/typeck2.c:2199
#, gcc-internal-format
msgid "call to function which throws incomplete type %q#T"
msgstr ""
@@ -47146,8 +47289,8 @@ msgstr ""
#: fortran/array.c:213 fortran/array.c:615 fortran/check.c:2642
#: fortran/check.c:4950 fortran/check.c:4988 fortran/check.c:5030
-#: fortran/check.c:5229 fortran/match.c:1674 fortran/match.c:2781
-#: fortran/match.c:2976 fortran/match.c:3172 fortran/simplify.c:4733
+#: fortran/check.c:5229 fortran/match.c:1680 fortran/match.c:2787
+#: fortran/match.c:2982 fortran/match.c:3178 fortran/simplify.c:4733
#, gcc-internal-format
msgid "Coarrays disabled at %C, use %<-fcoarray=%> to enable"
msgstr ""
@@ -47287,7 +47430,7 @@ msgstr ""
msgid "Array constructor including type specification at %C"
msgstr ""
-#: fortran/array.c:1112 fortran/match.c:3602
+#: fortran/array.c:1112 fortran/match.c:3608
#, gcc-internal-format, gfc-internal-format
msgid "Type-spec at %L cannot contain a deferred type parameter"
msgstr ""
@@ -48427,7 +48570,7 @@ msgstr ""
#. Since the extension field is 8 bit wide, we can only have
#. up to 255 extension levels.
-#: fortran/class.c:725 fortran/decl.c:8136
+#: fortran/class.c:725 fortran/decl.c:8176
#, gcc-internal-format
msgid "Maximum extension level reached with type %qs at %L"
msgstr ""
@@ -48646,1306 +48789,1311 @@ msgid ""
"at %L"
msgstr ""
-#: fortran/decl.c:1275
+#: fortran/decl.c:1244
+#, gcc-internal-format
+msgid "Symbol %qs at %C also declared as a type at %L"
+msgstr ""
+
+#: fortran/decl.c:1303
#, 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:1320
+#: fortran/decl.c:1348
#, gcc-internal-format, gfc-internal-format
msgid "CHARACTER expression at %L is being truncated (%d/%d)"
msgstr ""
-#: fortran/decl.c:1327
+#: fortran/decl.c:1355
#, 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:1417
+#: fortran/decl.c:1445
#, gcc-internal-format
msgid "Initializer not allowed for PARAMETER %qs at %C"
msgstr ""
-#: fortran/decl.c:1427
+#: fortran/decl.c:1455
#, gcc-internal-format, gfc-internal-format
msgid "PARAMETER at %L is missing an initializer"
msgstr ""
-#: fortran/decl.c:1437
+#: fortran/decl.c:1465
#, gcc-internal-format
msgid ""
"Variable %qs at %C with an initializer already appears in a DATA statement"
msgstr ""
-#: fortran/decl.c:1530
+#: fortran/decl.c:1558
#, gcc-internal-format, gfc-internal-format
msgid "Can't initialize implied-shape array at %L with scalar"
msgstr ""
-#: fortran/decl.c:1565
+#: fortran/decl.c:1593
#, gcc-internal-format, gfc-internal-format
msgid "Non-constant lower bound in implied-shape declaration at %L"
msgstr ""
-#: fortran/decl.c:1650
+#: fortran/decl.c:1678
#, gcc-internal-format, gfc-internal-format
msgid "Component at %C must have the POINTER attribute"
msgstr ""
-#: fortran/decl.c:1658
+#: fortran/decl.c:1686
#, gcc-internal-format, gfc-internal-format
msgid "Array component of structure at %C must have explicit or deferred shape"
msgstr ""
-#: fortran/decl.c:1739
+#: fortran/decl.c:1767
#, gcc-internal-format, gfc-internal-format
msgid "Pointer array component of structure at %C must have a deferred shape"
msgstr ""
-#: fortran/decl.c:1748
+#: fortran/decl.c:1776
#, gcc-internal-format, gfc-internal-format
msgid "Allocatable component of structure at %C must have a deferred shape"
msgstr ""
-#: fortran/decl.c:1757
+#: fortran/decl.c:1785
#, gcc-internal-format, gfc-internal-format
msgid "Array component of structure at %C must have an explicit shape"
msgstr ""
-#: fortran/decl.c:1811
+#: fortran/decl.c:1839
#, gcc-internal-format, gfc-internal-format
msgid "NULL() initialization at %C is ambiguous"
msgstr ""
-#: fortran/decl.c:1828
+#: fortran/decl.c:1856
#, gcc-internal-format, gfc-internal-format
msgid "NULL() initialization at %C may not have MOLD"
msgstr ""
-#: fortran/decl.c:1845
+#: fortran/decl.c:1873
#, gcc-internal-format, gfc-internal-format
msgid "Initialization of pointer at %C is not allowed in a PURE procedure"
msgstr ""
-#: fortran/decl.c:1866
+#: fortran/decl.c:1894
#, gcc-internal-format, gfc-internal-format
msgid "Error in pointer initialization at %C"
msgstr ""
-#: fortran/decl.c:1873
+#: fortran/decl.c:1901
#, gcc-internal-format, gfc-internal-format
msgid "non-NULL pointer initialization at %C"
msgstr ""
-#: fortran/decl.c:1896
+#: fortran/decl.c:1924
#, gcc-internal-format
msgid "Function name %qs not allowed at %C"
msgstr ""
-#: fortran/decl.c:1963
+#: fortran/decl.c:1991
#, gcc-internal-format
msgid "Non-PARAMETER symbol %qs at %L can't be implied-shape"
msgstr ""
-#: fortran/decl.c:1973
+#: fortran/decl.c:2001
#, gcc-internal-format, gfc-internal-format
msgid "Implied-shape array at %L"
msgstr ""
-#: fortran/decl.c:2026
+#: fortran/decl.c:2054
#, 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:2055 fortran/decl.c:6911
+#: fortran/decl.c:2083 fortran/decl.c:6950
#, gcc-internal-format, gfc-internal-format
msgid "Duplicate array spec for Cray pointee at %C"
msgstr ""
-#: fortran/decl.c:2063
+#: fortran/decl.c:2091
#, gcc-internal-format
msgid "Couldn't set pointee array spec."
msgstr ""
-#: fortran/decl.c:2126
+#: fortran/decl.c:2154
#, gcc-internal-format, gfc-internal-format
msgid "Old-style initialization at %C"
msgstr ""
-#: fortran/decl.c:2131
+#: fortran/decl.c:2159
#, gcc-internal-format, gfc-internal-format
msgid "Invalid old style initialization for derived type component at %C"
msgstr ""
-#: fortran/decl.c:2148 fortran/decl.c:5239
+#: fortran/decl.c:2176 fortran/decl.c:5265
#, gcc-internal-format, gfc-internal-format
msgid "Initialization at %C isn't for a pointer variable"
msgstr ""
-#: fortran/decl.c:2161
+#: fortran/decl.c:2189
#, gcc-internal-format
msgid "Pointer initialization at %C requires %<=>%>, not %<=%>"
msgstr ""
-#: fortran/decl.c:2170 fortran/decl.c:8285
+#: fortran/decl.c:2198 fortran/decl.c:8325
#, gcc-internal-format, gfc-internal-format
msgid "Expected an initialization expression at %C"
msgstr ""
-#: fortran/decl.c:2177
+#: fortran/decl.c:2205
#, gcc-internal-format, gfc-internal-format
msgid "Initialization of variable at %C is not allowed in a PURE procedure"
msgstr ""
-#: fortran/decl.c:2194
+#: fortran/decl.c:2222
#, gcc-internal-format, gfc-internal-format
msgid "Initialization of allocatable component at %C is not allowed"
msgstr ""
-#: fortran/decl.c:2248 fortran/decl.c:2284
+#: fortran/decl.c:2276 fortran/decl.c:2312
#, gcc-internal-format, gfc-internal-format
msgid "Old-style type declaration %s*%d not supported at %C"
msgstr ""
-#: fortran/decl.c:2290
+#: fortran/decl.c:2318
#, gcc-internal-format, gfc-internal-format
msgid "Nonstandard type declaration %s*%d at %C"
msgstr ""
-#: fortran/decl.c:2341 fortran/decl.c:2417
+#: fortran/decl.c:2369 fortran/decl.c:2445
#, gcc-internal-format, gfc-internal-format
msgid "Missing right parenthesis at %C"
msgstr ""
-#: fortran/decl.c:2354 fortran/decl.c:2488
+#: fortran/decl.c:2382 fortran/decl.c:2516
#, gcc-internal-format, gfc-internal-format
msgid "Expected initialization expression at %C"
msgstr ""
-#: fortran/decl.c:2362 fortran/decl.c:2494
+#: fortran/decl.c:2390 fortran/decl.c:2522
#, gcc-internal-format, gfc-internal-format
msgid "Expected scalar initialization expression at %C"
msgstr ""
-#: fortran/decl.c:2393
+#: fortran/decl.c:2421
#, gcc-internal-format, gfc-internal-format
msgid "Kind %d not supported for type %s at %C"
msgstr ""
-#: fortran/decl.c:2406
+#: fortran/decl.c:2434
#, 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:2415
+#: fortran/decl.c:2443
#, gcc-internal-format, gfc-internal-format
msgid "Missing right parenthesis or comma at %C"
msgstr ""
-#: fortran/decl.c:2514
+#: fortran/decl.c:2542
#, gcc-internal-format, gfc-internal-format
msgid "Kind %d is not supported for CHARACTER at %C"
msgstr ""
-#: fortran/decl.c:2646
+#: fortran/decl.c:2674
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in CHARACTER declaration at %C"
msgstr ""
-#: fortran/decl.c:2731
+#: fortran/decl.c:2759
#, gcc-internal-format, gfc-internal-format
msgid "BYTE type at %C"
msgstr ""
-#: fortran/decl.c:2736
+#: fortran/decl.c:2764
#, gcc-internal-format, gfc-internal-format
msgid "BYTE type used at %C is not available on the target machine"
msgstr ""
-#: fortran/decl.c:2758
+#: fortran/decl.c:2786
#, gcc-internal-format, gfc-internal-format
msgid "Assumed type at %C is not allowed for components"
msgstr ""
-#: fortran/decl.c:2761
+#: fortran/decl.c:2789
#, gcc-internal-format, gfc-internal-format
msgid "Assumed type at %C"
msgstr ""
-#: fortran/decl.c:2784 fortran/decl.c:2815 fortran/decl.c:2844
-#: fortran/decl.c:3023
+#: fortran/decl.c:2812 fortran/decl.c:2843 fortran/decl.c:2872
+#: fortran/decl.c:3051
#, gcc-internal-format, gfc-internal-format
msgid "TYPE with intrinsic-type-spec at %C"
msgstr ""
-#: fortran/decl.c:2840
+#: fortran/decl.c:2868
#, gcc-internal-format, gfc-internal-format
msgid "DOUBLE COMPLEX at %C"
msgstr ""
-#: fortran/decl.c:2914
+#: fortran/decl.c:2942
#, gcc-internal-format, gfc-internal-format
msgid "CLASS statement at %C"
msgstr ""
-#: fortran/decl.c:2949 fortran/decl.c:2962 fortran/decl.c:3418
-#: fortran/decl.c:3426
+#: fortran/decl.c:2977 fortran/decl.c:2990 fortran/decl.c:3446
+#: fortran/decl.c:3454
#, gcc-internal-format
msgid "Type name %qs at %C is ambiguous"
msgstr ""
-#: fortran/decl.c:2977
+#: fortran/decl.c:3005
#, 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:3094
+#: fortran/decl.c:3122
#, gcc-internal-format, gfc-internal-format
msgid "Duplicate IMPLICIT NONE statement at %C"
msgstr ""
-#: fortran/decl.c:3103
+#: fortran/decl.c:3131
#, gcc-internal-format, gfc-internal-format
msgid "IMPORT NONE with spec list at %C"
msgstr ""
-#: fortran/decl.c:3162
+#: fortran/decl.c:3190
#, gcc-internal-format, gfc-internal-format
msgid "Missing character range in IMPLICIT at %C"
msgstr ""
-#: fortran/decl.c:3208
+#: fortran/decl.c:3236
#, gcc-internal-format, gfc-internal-format
msgid "Letters must be in alphabetic order in IMPLICIT statement at %C"
msgstr ""
-#: fortran/decl.c:3261
+#: fortran/decl.c:3289
#, gcc-internal-format, gfc-internal-format
msgid "IMPLICIT statement at %C following an IMPLICIT NONE (type) statement"
msgstr ""
-#: fortran/decl.c:3271
+#: fortran/decl.c:3299
#, gcc-internal-format, gfc-internal-format
msgid "Empty IMPLICIT statement at %C"
msgstr ""
-#: fortran/decl.c:3377
+#: fortran/decl.c:3405
#, gcc-internal-format, gfc-internal-format
msgid "IMPORT statement at %C only permitted in an INTERFACE body"
msgstr ""
-#: fortran/decl.c:3384
+#: fortran/decl.c:3412
#, 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:3389
+#: fortran/decl.c:3417
#, gcc-internal-format, gfc-internal-format
msgid "IMPORT statement at %C"
msgstr ""
-#: fortran/decl.c:3403
+#: fortran/decl.c:3431
#, gcc-internal-format, gfc-internal-format
msgid "Expecting list of named entities at %C"
msgstr ""
-#: fortran/decl.c:3432
+#: fortran/decl.c:3460
#, gcc-internal-format
msgid "Cannot IMPORT %qs from host scoping unit at %C - does not exist."
msgstr ""
-#: fortran/decl.c:3439
+#: fortran/decl.c:3467
#, gcc-internal-format
msgid "%qs is already IMPORTed from host scoping unit at %C"
msgstr ""
-#: fortran/decl.c:3482
+#: fortran/decl.c:3510
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in IMPORT statement at %C"
msgstr ""
-#: fortran/decl.c:3781
+#: fortran/decl.c:3809
#, gcc-internal-format, gfc-internal-format
msgid "Missing codimension specification at %C"
msgstr ""
-#: fortran/decl.c:3783
+#: fortran/decl.c:3811
#, gcc-internal-format, gfc-internal-format
msgid "Missing dimension specification at %C"
msgstr ""
-#: fortran/decl.c:3866
+#: fortran/decl.c:3894
#, gcc-internal-format, gfc-internal-format
msgid "Duplicate %s attribute at %L"
msgstr ""
-#: fortran/decl.c:3885
+#: fortran/decl.c:3913
#, gcc-internal-format, gfc-internal-format
msgid "ALLOCATABLE attribute at %C in a TYPE definition"
msgstr ""
-#: fortran/decl.c:3894
+#: fortran/decl.c:3922
#, gcc-internal-format, gfc-internal-format
msgid "Attribute at %L is not allowed in a TYPE definition"
msgstr ""
-#: fortran/decl.c:3912
+#: fortran/decl.c:3940
#, gcc-internal-format, gfc-internal-format
msgid "Attribute %s at %L in a TYPE definition"
msgstr ""
-#: fortran/decl.c:3922
+#: fortran/decl.c:3950
#, 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:3936
+#: fortran/decl.c:3964
#, gcc-internal-format, gfc-internal-format
msgid "ASYNCHRONOUS attribute at %C"
msgstr ""
-#: fortran/decl.c:3947
+#: fortran/decl.c:3975
#, gcc-internal-format, gfc-internal-format
msgid "CONTIGUOUS attribute at %C"
msgstr ""
-#: fortran/decl.c:3994 fortran/decl.c:7207
+#: fortran/decl.c:4022 fortran/decl.c:7246
#, gcc-internal-format, gfc-internal-format
msgid "PROTECTED at %C only allowed in specification part of a module"
msgstr ""
-#: fortran/decl.c:4000
+#: fortran/decl.c:4028
#, gcc-internal-format, gfc-internal-format
msgid "PROTECTED attribute at %C"
msgstr ""
-#: fortran/decl.c:4029
+#: fortran/decl.c:4057
#, gcc-internal-format, gfc-internal-format
msgid "VALUE attribute at %C"
msgstr ""
-#: fortran/decl.c:4036
+#: fortran/decl.c:4064
#, gcc-internal-format, gfc-internal-format
msgid "VOLATILE attribute at %C"
msgstr ""
-#: fortran/decl.c:4043
+#: fortran/decl.c:4071
#, gcc-internal-format
msgid "match_attr_spec(): Bad attribute"
msgstr ""
-#: fortran/decl.c:4083
+#: fortran/decl.c:4111
#, gcc-internal-format, gfc-internal-format
msgid "Multiple identifiers provided with single NAME= specifier at %C"
msgstr ""
-#: fortran/decl.c:4181
+#: fortran/decl.c:4209
#, gcc-internal-format
msgid ""
"Implicitly declared BIND(C) function %qs at %L may not be C interoperable"
msgstr ""
-#: fortran/decl.c:4203
+#: fortran/decl.c:4231
#, 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:4212
+#: fortran/decl.c:4240
#, gcc-internal-format
msgid "Type declaration %qs at %L is not C interoperable but it is BIND(C)"
msgstr ""
-#: fortran/decl.c:4216
+#: fortran/decl.c:4244
#, gcc-internal-format
msgid "Variable %qs at %L may not be a C interoperable kind but it is BIND(C)"
msgstr ""
-#: fortran/decl.c:4228
+#: fortran/decl.c:4256
#, 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:4242
+#: fortran/decl.c:4270
#, gcc-internal-format
msgid "Variable %qs at %L cannot have both the POINTER and BIND(C) attributes"
msgstr ""
-#: fortran/decl.c:4250
+#: fortran/decl.c:4278
#, gcc-internal-format
msgid ""
"Variable %qs at %L cannot have both the ALLOCATABLE and BIND(C) attributes"
msgstr ""
-#: fortran/decl.c:4262
+#: fortran/decl.c:4290
#, gcc-internal-format
msgid "Return type of BIND(C) function %qs at %L cannot be an array"
msgstr ""
-#: fortran/decl.c:4270
+#: fortran/decl.c:4298
#, 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:4281
+#: fortran/decl.c:4309
#, gcc-internal-format
msgid ""
"Symbol %qs at %L is marked PRIVATE but has been given the binding label %qs"
msgstr ""
-#: fortran/decl.c:4355
+#: fortran/decl.c:4383
#, gcc-internal-format, gfc-internal-format
msgid ""
"Need either entity or common block name for attribute specification "
"statement at %C"
msgstr ""
-#: fortran/decl.c:4400
+#: fortran/decl.c:4428
#, gcc-internal-format, gfc-internal-format
msgid ""
"Missing entity or common block name for attribute specification statement at "
"%C"
msgstr ""
-#: fortran/decl.c:4407
+#: fortran/decl.c:4435
#, gcc-internal-format
msgid "Missing symbol"
msgstr ""
-#: fortran/decl.c:4436
+#: fortran/decl.c:4464
#, gcc-internal-format, gfc-internal-format
msgid "BIND(C) statement at %C"
msgstr ""
-#: fortran/decl.c:4514
+#: fortran/decl.c:4542
#, 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:4546
+#: fortran/decl.c:4574
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in data declaration at %C"
msgstr ""
-#: fortran/decl.c:4619
+#: fortran/decl.c:4615
#, gcc-internal-format, gfc-internal-format
-msgid "IMPURE procedure at %C"
+msgid "MODULE prefix at %C"
msgstr ""
-#: fortran/decl.c:4631
+#: fortran/decl.c:4660
#, gcc-internal-format, gfc-internal-format
-msgid "PURE and IMPURE must not appear both at %C"
+msgid "IMPURE procedure at %C"
msgstr ""
-#: fortran/decl.c:4654
+#: fortran/decl.c:4672
#, gcc-internal-format, gfc-internal-format
-msgid "MODULE prefix at %C"
+msgid "PURE and IMPURE must not appear both at %C"
msgstr ""
-#: fortran/decl.c:4730 fortran/primary.c:1773
+#: fortran/decl.c:4756 fortran/primary.c:1779
#, gcc-internal-format, gfc-internal-format
msgid "Alternate-return argument at %C"
msgstr ""
-#: fortran/decl.c:4776
+#: fortran/decl.c:4802
#, gcc-internal-format
msgid "Name %qs at %C is the name of the procedure"
msgstr ""
-#: fortran/decl.c:4788
+#: fortran/decl.c:4814
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk in formal argument list at %C"
msgstr ""
-#: fortran/decl.c:4805
+#: fortran/decl.c:4831
#, gcc-internal-format
msgid "Duplicate symbol %qs in formal argument list at %C"
msgstr ""
-#: fortran/decl.c:4844
+#: fortran/decl.c:4870
#, gcc-internal-format, gfc-internal-format
msgid "Mismatch in MODULE PROCEDURE formal argument names (%s/%s) at %C"
msgstr ""
-#: fortran/decl.c:4850
+#: fortran/decl.c:4876
#, gcc-internal-format, gfc-internal-format
msgid "Mismatch in number of MODULE PROCEDURE formal arguments at %C"
msgstr ""
-#: fortran/decl.c:4889
+#: fortran/decl.c:4915
#, gcc-internal-format, gfc-internal-format
msgid "RESULT variable at %C must be different than function name"
msgstr ""
-#: fortran/decl.c:4966
+#: fortran/decl.c:4992
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after function declaration at %C"
msgstr ""
-#: fortran/decl.c:4976 fortran/decl.c:6061
+#: fortran/decl.c:5002 fortran/decl.c:6095
#, gcc-internal-format, gfc-internal-format
msgid "BIND(C) attribute at %L may not be specified for an internal procedure"
msgstr ""
-#: fortran/decl.c:5178
+#: fortran/decl.c:5204
#, gcc-internal-format, gfc-internal-format
msgid "BIND(C) attribute at %C requires an interface with BIND(C)"
msgstr ""
-#: fortran/decl.c:5185
+#: fortran/decl.c:5211
#, gcc-internal-format, gfc-internal-format
msgid "BIND(C) procedure with NAME may not have POINTER attribute at %C"
msgstr ""
-#: fortran/decl.c:5191
+#: fortran/decl.c:5217
#, gcc-internal-format, gfc-internal-format
msgid "Dummy procedure at %C may not have BIND(C) attribute with NAME"
msgstr ""
-#: fortran/decl.c:5214
+#: fortran/decl.c:5240
#, gcc-internal-format
msgid "Procedure %qs at %L already has basic type of %s"
msgstr ""
-#: fortran/decl.c:5260 fortran/decl.c:5448 fortran/decl.c:8766
+#: fortran/decl.c:5286 fortran/decl.c:5474 fortran/decl.c:8806
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in PROCEDURE statement at %C"
msgstr ""
-#: fortran/decl.c:5309 fortran/decl.c:8668
+#: fortran/decl.c:5335 fortran/decl.c:8708
#, gcc-internal-format
msgid "Expected %<::%> after binding-attributes at %C"
msgstr ""
-#: fortran/decl.c:5316
+#: fortran/decl.c:5342
#, gcc-internal-format, gfc-internal-format
msgid "NOPASS or explicit interface required at %C"
msgstr ""
-#: fortran/decl.c:5320
+#: fortran/decl.c:5346
#, gcc-internal-format, gfc-internal-format
msgid "Procedure pointer component at %C"
msgstr ""
-#: fortran/decl.c:5392
+#: fortran/decl.c:5418
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in procedure pointer component at %C"
msgstr ""
-#: fortran/decl.c:5410
+#: fortran/decl.c:5436
#, gcc-internal-format, gfc-internal-format
msgid "PROCEDURE at %C must be in a generic interface"
msgstr ""
-#: fortran/decl.c:5419 fortran/decl.c:7797
+#: fortran/decl.c:5445 fortran/decl.c:7837
#, gcc-internal-format, gfc-internal-format
msgid "double colon in MODULE PROCEDURE statement at %L"
msgstr ""
-#: fortran/decl.c:5489
+#: fortran/decl.c:5515
#, gcc-internal-format, gfc-internal-format
msgid "PROCEDURE statement at %C"
msgstr ""
-#: fortran/decl.c:5561
+#: fortran/decl.c:5587
#, gcc-internal-format, gfc-internal-format
msgid "Expected formal argument list in function definition at %C"
msgstr ""
-#: fortran/decl.c:5585 fortran/decl.c:5589 fortran/decl.c:5833
-#: fortran/decl.c:5837 fortran/decl.c:6029 fortran/decl.c:6033
+#: fortran/decl.c:5611 fortran/decl.c:5615 fortran/decl.c:5867
+#: fortran/decl.c:5871 fortran/decl.c:6063 fortran/decl.c:6067
#: fortran/symbol.c:1712
#, 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:5735
+#: fortran/decl.c:5769
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C"
msgstr ""
-#: fortran/decl.c:5744
+#: fortran/decl.c:5778
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C cannot appear within a PROGRAM"
msgstr ""
-#: fortran/decl.c:5747
+#: fortran/decl.c:5781
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C cannot appear within a MODULE"
msgstr ""
-#: fortran/decl.c:5750
+#: fortran/decl.c:5784
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C cannot appear within a SUBMODULE"
msgstr ""
-#: fortran/decl.c:5753
+#: fortran/decl.c:5787
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C cannot appear within a BLOCK DATA"
msgstr ""
-#: fortran/decl.c:5757 fortran/decl.c:5798
+#: fortran/decl.c:5791 fortran/decl.c:5832
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C cannot appear within an INTERFACE"
msgstr ""
-#: fortran/decl.c:5761
+#: fortran/decl.c:5795
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C cannot appear within a DERIVED TYPE block"
msgstr ""
-#: fortran/decl.c:5765
+#: fortran/decl.c:5799
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C cannot appear within an IF-THEN block"
msgstr ""
-#: fortran/decl.c:5770
+#: fortran/decl.c:5804
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C cannot appear within a DO block"
msgstr ""
-#: fortran/decl.c:5774
+#: fortran/decl.c:5808
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C cannot appear within a SELECT block"
msgstr ""
-#: fortran/decl.c:5778
+#: fortran/decl.c:5812
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C cannot appear within a FORALL block"
msgstr ""
-#: fortran/decl.c:5782
+#: fortran/decl.c:5816
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C cannot appear within a WHERE block"
msgstr ""
-#: fortran/decl.c:5786
+#: fortran/decl.c:5820
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C cannot appear within a contained subprogram"
msgstr ""
-#: fortran/decl.c:5790
+#: fortran/decl.c:5824
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected ENTRY statement at %C"
msgstr ""
-#: fortran/decl.c:5811
+#: fortran/decl.c:5845
#, gcc-internal-format, gfc-internal-format
msgid "ENTRY statement at %C cannot appear in a contained procedure"
msgstr ""
-#: fortran/decl.c:5862 fortran/decl.c:6068
+#: fortran/decl.c:5896 fortran/decl.c:6102
#, gcc-internal-format, gfc-internal-format
msgid "Missing required parentheses before BIND(C) at %C"
msgstr ""
-#: fortran/decl.c:6125 fortran/decl.c:6132
+#: fortran/decl.c:6164 fortran/decl.c:6171
#, gcc-internal-format, gfc-internal-format
msgid "Invalid C identifier in NAME= specifier at %C"
msgstr ""
-#: fortran/decl.c:6172
+#: fortran/decl.c:6211
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in NAME= specifier for binding label at %C"
msgstr ""
-#: fortran/decl.c:6188
+#: fortran/decl.c:6227
#, gcc-internal-format, gfc-internal-format
msgid "NAME= specifier at %C should be a constant expression"
msgstr ""
-#: fortran/decl.c:6196
+#: fortran/decl.c:6235
#, gcc-internal-format, gfc-internal-format
msgid "NAME= specifier at %C should be a scalar of default character kind"
msgstr ""
-#: fortran/decl.c:6215
+#: fortran/decl.c:6254
#, gcc-internal-format, gfc-internal-format
msgid "Missing closing paren for binding label at %C"
msgstr ""
-#: fortran/decl.c:6221
+#: fortran/decl.c:6260
#, gcc-internal-format, gfc-internal-format
msgid "No binding name is allowed in BIND(C) at %C"
msgstr ""
-#: fortran/decl.c:6227
+#: fortran/decl.c:6266
#, 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:6256
+#: fortran/decl.c:6295
#, gcc-internal-format, gfc-internal-format
msgid "NAME not allowed on BIND(C) for ABSTRACT INTERFACE at %C"
msgstr ""
-#: fortran/decl.c:6481
+#: fortran/decl.c:6520
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected END statement at %C"
msgstr ""
-#: fortran/decl.c:6490
+#: fortran/decl.c:6529
#, 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:6499
+#: fortran/decl.c:6538
#, gcc-internal-format, gfc-internal-format
msgid "%s statement expected at %L"
msgstr ""
-#: fortran/decl.c:6510
+#: fortran/decl.c:6549
#, gcc-internal-format, gfc-internal-format
msgid "Expecting %s statement at %L"
msgstr ""
-#: fortran/decl.c:6530
+#: fortran/decl.c:6569
#, gcc-internal-format
msgid "Expected block name of %qs in %s statement at %L"
msgstr ""
-#: fortran/decl.c:6547
+#: fortran/decl.c:6586
#, gcc-internal-format, gfc-internal-format
msgid "Expected terminating name at %C"
msgstr ""
-#: fortran/decl.c:6561 fortran/decl.c:6569
+#: fortran/decl.c:6600 fortran/decl.c:6608
#, gcc-internal-format
msgid "Expected label %qs for %s statement at %C"
msgstr ""
-#: fortran/decl.c:6668
+#: fortran/decl.c:6707
#, gcc-internal-format, gfc-internal-format
msgid "Missing array specification at %L in DIMENSION statement"
msgstr ""
-#: fortran/decl.c:6676
+#: fortran/decl.c:6715
#, gcc-internal-format, gfc-internal-format
msgid "Dimensions specified for %s at %L after its initialisation"
msgstr ""
-#: fortran/decl.c:6684
+#: fortran/decl.c:6723
#, gcc-internal-format, gfc-internal-format
msgid "Missing array specification at %L in CODIMENSION statement"
msgstr ""
-#: fortran/decl.c:6693
+#: fortran/decl.c:6732
#, gcc-internal-format, gfc-internal-format
msgid "Array specification must be deferred at %L"
msgstr ""
-#: fortran/decl.c:6791
+#: fortran/decl.c:6830
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected character in variable list at %C"
msgstr ""
-#: fortran/decl.c:6828
+#: fortran/decl.c:6867
#, gcc-internal-format
msgid "Expected %<(%> at %C"
msgstr ""
-#: fortran/decl.c:6842 fortran/decl.c:6882
+#: fortran/decl.c:6881 fortran/decl.c:6921
#, gcc-internal-format, gfc-internal-format
msgid "Expected variable name at %C"
msgstr ""
-#: fortran/decl.c:6858
+#: fortran/decl.c:6897
#, gcc-internal-format, gfc-internal-format
msgid "Cray pointer at %C must be an integer"
msgstr ""
-#: fortran/decl.c:6862
+#: fortran/decl.c:6901
#, 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:6868
+#: fortran/decl.c:6907
#, gcc-internal-format, gfc-internal-format
msgid "Expected \",\" at %C"
msgstr ""
-#: fortran/decl.c:6907
+#: fortran/decl.c:6946
#, gcc-internal-format
msgid "Couldn't set Cray pointee array spec."
msgstr ""
-#: fortran/decl.c:6931
+#: fortran/decl.c:6970
#, gcc-internal-format, gfc-internal-format
msgid "Expected \")\" at %C"
msgstr ""
-#: fortran/decl.c:6943
+#: fortran/decl.c:6982
#, gcc-internal-format
msgid "Expected %<,%> or end of statement at %C"
msgstr ""
-#: fortran/decl.c:6969
+#: fortran/decl.c:7008
#, gcc-internal-format, gfc-internal-format
msgid "INTENT is not allowed inside of BLOCK at %C"
msgstr ""
-#: fortran/decl.c:7001
+#: fortran/decl.c:7040
#, gcc-internal-format, gfc-internal-format
msgid "OPTIONAL is not allowed inside of BLOCK at %C"
msgstr ""
-#: fortran/decl.c:7020
+#: fortran/decl.c:7059
#, gcc-internal-format, gfc-internal-format
msgid "Cray pointer declaration at %C requires -fcray-pointer flag"
msgstr ""
-#: fortran/decl.c:7059
+#: fortran/decl.c:7098
#, gcc-internal-format, gfc-internal-format
msgid "CONTIGUOUS statement at %C"
msgstr ""
-#: fortran/decl.c:7157
+#: fortran/decl.c:7196
#, gcc-internal-format, gfc-internal-format
msgid ""
"Access specification of the %s operator at %C has already been specified"
msgstr ""
-#: fortran/decl.c:7174
+#: fortran/decl.c:7213
#, gcc-internal-format, gfc-internal-format
msgid ""
"Access specification of the .%s. operator at %C has already been specified"
msgstr ""
-#: fortran/decl.c:7213
+#: fortran/decl.c:7252
#, gcc-internal-format, gfc-internal-format
msgid "PROTECTED statement at %C"
msgstr ""
-#: fortran/decl.c:7251
+#: fortran/decl.c:7290
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in PROTECTED statement at %C"
msgstr ""
-#: fortran/decl.c:7275
+#: fortran/decl.c:7314
#, 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:7312
+#: fortran/decl.c:7351
#, 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:7340
+#: fortran/decl.c:7379
#, gcc-internal-format, gfc-internal-format
msgid "Expected variable name at %C in PARAMETER statement"
msgstr ""
-#: fortran/decl.c:7347
+#: fortran/decl.c:7386
#, gcc-internal-format, gfc-internal-format
msgid "Expected = sign in PARAMETER statement at %C"
msgstr ""
-#: fortran/decl.c:7353
+#: fortran/decl.c:7392
#, gcc-internal-format, gfc-internal-format
msgid "Expected expression at %C in PARAMETER statement"
msgstr ""
-#: fortran/decl.c:7373
+#: fortran/decl.c:7412
#, gcc-internal-format, gfc-internal-format
msgid "Initializing already initialized variable at %C"
msgstr ""
-#: fortran/decl.c:7408
+#: fortran/decl.c:7447
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected characters in PARAMETER statement at %C"
msgstr ""
-#: fortran/decl.c:7432
+#: fortran/decl.c:7471
#, gcc-internal-format, gfc-internal-format
msgid "Blanket SAVE statement at %C follows previous SAVE statement"
msgstr ""
-#: fortran/decl.c:7443
+#: fortran/decl.c:7482
#, gcc-internal-format, gfc-internal-format
msgid "SAVE statement at %C follows blanket SAVE statement"
msgstr ""
-#: fortran/decl.c:7489
+#: fortran/decl.c:7528
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in SAVE statement at %C"
msgstr ""
-#: fortran/decl.c:7503
+#: fortran/decl.c:7542
#, gcc-internal-format, gfc-internal-format
msgid "VALUE is not allowed inside of BLOCK at %C"
msgstr ""
-#: fortran/decl.c:7507
+#: fortran/decl.c:7546
#, gcc-internal-format, gfc-internal-format
msgid "VALUE statement at %C"
msgstr ""
-#: fortran/decl.c:7545
+#: fortran/decl.c:7584
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in VALUE statement at %C"
msgstr ""
-#: fortran/decl.c:7556
+#: fortran/decl.c:7595
#, gcc-internal-format, gfc-internal-format
msgid "VOLATILE statement at %C"
msgstr ""
-#: fortran/decl.c:7579
+#: fortran/decl.c:7618
#, gcc-internal-format
msgid ""
"Specifying VOLATILE for coarray variable %qs at %C, which is use-/host-"
"associated"
msgstr ""
-#: fortran/decl.c:7604
+#: fortran/decl.c:7643
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in VOLATILE statement at %C"
msgstr ""
-#: fortran/decl.c:7615
+#: fortran/decl.c:7654
#, gcc-internal-format, gfc-internal-format
msgid "ASYNCHRONOUS statement at %C"
msgstr ""
-#: fortran/decl.c:7655
+#: fortran/decl.c:7694
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in ASYNCHRONOUS statement at %C"
msgstr ""
-#: fortran/decl.c:7679
+#: fortran/decl.c:7719
#, gcc-internal-format, gfc-internal-format
msgid "MODULE PROCEDURE declaration at %C"
msgstr ""
-#: fortran/decl.c:7772
+#: fortran/decl.c:7812
#, gcc-internal-format, gfc-internal-format
msgid "MODULE PROCEDURE at %C must be in a generic module interface"
msgstr ""
-#: fortran/decl.c:7830
+#: fortran/decl.c:7870
#, gcc-internal-format, gfc-internal-format
msgid "Intrinsic procedure at %L cannot be a MODULE PROCEDURE"
msgstr ""
-#: fortran/decl.c:7879
+#: fortran/decl.c:7919
#, gcc-internal-format, gfc-internal-format
msgid "Ambiguous symbol in TYPE definition at %C"
msgstr ""
-#: fortran/decl.c:7888
+#: fortran/decl.c:7928
#, gcc-internal-format
msgid "Symbol %qs at %C has not been previously defined"
msgstr ""
-#: fortran/decl.c:7894
+#: fortran/decl.c:7934
#, gcc-internal-format
msgid "%qs in EXTENDS expression at %C is not a derived type"
msgstr ""
-#: fortran/decl.c:7901
+#: fortran/decl.c:7941
#, gcc-internal-format
msgid "%qs cannot be extended at %C because it is BIND(C)"
msgstr ""
-#: fortran/decl.c:7908
+#: fortran/decl.c:7948
#, gcc-internal-format
msgid "%qs cannot be extended at %C because it is a SEQUENCE type"
msgstr ""
-#: fortran/decl.c:7931
+#: fortran/decl.c:7971
#, 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:7943
+#: fortran/decl.c:7983
#, 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:7964
+#: fortran/decl.c:8004
#, gcc-internal-format, gfc-internal-format
msgid "ABSTRACT type at %C"
msgstr ""
-#: fortran/decl.c:8028
+#: fortran/decl.c:8068
#, gcc-internal-format, gfc-internal-format
msgid "Expected :: in TYPE definition at %C"
msgstr ""
-#: fortran/decl.c:8039
+#: fortran/decl.c:8079
#, gcc-internal-format
msgid "Type name %qs at %C cannot be the same as an intrinsic type"
msgstr ""
-#: fortran/decl.c:8049
+#: fortran/decl.c:8089
#, gcc-internal-format
msgid "Derived type name %qs at %C already has a basic type of %s"
msgstr ""
-#: fortran/decl.c:8066
+#: fortran/decl.c:8106
#, gcc-internal-format
msgid "Derived type definition of %qs at %C has already been defined"
msgstr ""
-#: fortran/decl.c:8171
+#: fortran/decl.c:8211
#, gcc-internal-format, gfc-internal-format
msgid "Cray Pointee at %C cannot be assumed shape array"
msgstr ""
-#: fortran/decl.c:8191
+#: fortran/decl.c:8231
#, gcc-internal-format, gfc-internal-format
msgid "ENUM and ENUMERATOR at %C"
msgstr ""
-#: fortran/decl.c:8223
+#: fortran/decl.c:8263
#, gcc-internal-format, gfc-internal-format
msgid "Enumerator exceeds the C integer type at %C"
msgstr ""
-#: fortran/decl.c:8302
+#: fortran/decl.c:8342
#, gcc-internal-format, gfc-internal-format
msgid "ENUMERATOR %L not initialized with integer expression"
msgstr ""
-#: fortran/decl.c:8350
+#: fortran/decl.c:8390
#, gcc-internal-format, gfc-internal-format
msgid "ENUM definition statement expected before %C"
msgstr ""
-#: fortran/decl.c:8386
+#: fortran/decl.c:8426
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in ENUMERATOR definition at %C"
msgstr ""
-#: fortran/decl.c:8433 fortran/decl.c:8448
+#: fortran/decl.c:8473 fortran/decl.c:8488
#, gcc-internal-format, gfc-internal-format
msgid "Duplicate access-specifier at %C"
msgstr ""
-#: fortran/decl.c:8468
+#: fortran/decl.c:8508
#, gcc-internal-format, gfc-internal-format
msgid "Binding attributes already specify passing, illegal NOPASS at %C"
msgstr ""
-#: fortran/decl.c:8488
+#: fortran/decl.c:8528
#, gcc-internal-format, gfc-internal-format
msgid "Binding attributes already specify passing, illegal PASS at %C"
msgstr ""
-#: fortran/decl.c:8515
+#: fortran/decl.c:8555
#, gcc-internal-format, gfc-internal-format
msgid "Duplicate POINTER attribute at %C"
msgstr ""
-#: fortran/decl.c:8533
+#: fortran/decl.c:8573
#, gcc-internal-format, gfc-internal-format
msgid "Duplicate NON_OVERRIDABLE at %C"
msgstr ""
-#: fortran/decl.c:8549
+#: fortran/decl.c:8589
#, gcc-internal-format, gfc-internal-format
msgid "Duplicate DEFERRED at %C"
msgstr ""
-#: fortran/decl.c:8562
+#: fortran/decl.c:8602
#, gcc-internal-format, gfc-internal-format
msgid "Expected access-specifier at %C"
msgstr ""
-#: fortran/decl.c:8564
+#: fortran/decl.c:8604
#, gcc-internal-format, gfc-internal-format
msgid "Expected binding attribute at %C"
msgstr ""
-#: fortran/decl.c:8572
+#: fortran/decl.c:8612
#, gcc-internal-format, gfc-internal-format
msgid "NON_OVERRIDABLE and DEFERRED can't both appear at %C"
msgstr ""
-#: fortran/decl.c:8584
+#: fortran/decl.c:8624
#, gcc-internal-format, gfc-internal-format
msgid "POINTER attribute is required for procedure pointer component at %C"
msgstr ""
-#: fortran/decl.c:8626
+#: fortran/decl.c:8666
#, gcc-internal-format
msgid "Interface-name expected after %<(%> at %C"
msgstr ""
-#: fortran/decl.c:8632
+#: fortran/decl.c:8672
#, gcc-internal-format
msgid "%<)%> expected at %C"
msgstr ""
-#: fortran/decl.c:8652
+#: fortran/decl.c:8692
#, gcc-internal-format, gfc-internal-format
msgid "Interface must be specified for DEFERRED binding at %C"
msgstr ""
-#: fortran/decl.c:8657
+#: fortran/decl.c:8697
#, gcc-internal-format, gfc-internal-format
msgid "PROCEDURE(interface) at %C should be declared DEFERRED"
msgstr ""
-#: fortran/decl.c:8680
+#: fortran/decl.c:8720
#, gcc-internal-format, gfc-internal-format
msgid "Expected binding name at %C"
msgstr ""
-#: fortran/decl.c:8684
+#: fortran/decl.c:8724
#, gcc-internal-format, gfc-internal-format
msgid "PROCEDURE list at %C"
msgstr ""
-#: fortran/decl.c:8696
+#: fortran/decl.c:8736
#, gcc-internal-format
msgid "%<=> target%> is invalid for DEFERRED binding at %C"
msgstr ""
-#: fortran/decl.c:8702
+#: fortran/decl.c:8742
#, gcc-internal-format
msgid "%<::%> needed in PROCEDURE binding with explicit target at %C"
msgstr ""
-#: fortran/decl.c:8712
+#: fortran/decl.c:8752
#, gcc-internal-format
msgid "Expected binding target after %<=>%> at %C"
msgstr ""
-#: fortran/decl.c:8729
+#: fortran/decl.c:8769
#, gcc-internal-format
msgid "Type %qs containing DEFERRED binding at %C is not ABSTRACT"
msgstr ""
-#: fortran/decl.c:8740
+#: fortran/decl.c:8780
#, gcc-internal-format
msgid ""
"There is already a procedure with binding name %qs for the derived type %qs "
"at %C"
msgstr ""
-#: fortran/decl.c:8789
+#: fortran/decl.c:8829
#, gcc-internal-format, gfc-internal-format
msgid "GENERIC at %C must be inside a derived-type CONTAINS"
msgstr ""
-#: fortran/decl.c:8809
+#: fortran/decl.c:8849
#, gcc-internal-format
msgid "Expected %<::%> at %C"
msgstr ""
-#: fortran/decl.c:8821
+#: fortran/decl.c:8861
#, gcc-internal-format, gfc-internal-format
msgid "Expected generic name or operator descriptor at %C"
msgstr ""
-#: fortran/decl.c:8841
+#: fortran/decl.c:8881
#, gcc-internal-format, gfc-internal-format
msgid "Malformed GENERIC statement at %C"
msgstr ""
-#: fortran/decl.c:8852
+#: fortran/decl.c:8892
#, gcc-internal-format
msgid "Expected %<=>%> at %C"
msgstr ""
-#: fortran/decl.c:8894
+#: fortran/decl.c:8934
#, 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:8902
+#: fortran/decl.c:8942
#, gcc-internal-format
msgid "Binding at %C must have the same access as already defined binding %qs"
msgstr ""
-#: fortran/decl.c:8951
+#: fortran/decl.c:8991
#, gcc-internal-format, gfc-internal-format
msgid "Expected specific binding name at %C"
msgstr ""
-#: fortran/decl.c:8961
+#: fortran/decl.c:9001
#, gcc-internal-format
msgid "%qs already defined as specific binding for the generic %qs at %C"
msgstr ""
-#: fortran/decl.c:8979
+#: fortran/decl.c:9019
#, gcc-internal-format, gfc-internal-format
msgid "Junk after GENERIC binding at %C"
msgstr ""
-#: fortran/decl.c:9014
+#: fortran/decl.c:9054
#, gcc-internal-format, gfc-internal-format
msgid "FINAL declaration at %C must be inside a derived type CONTAINS section"
msgstr ""
-#: fortran/decl.c:9025
+#: fortran/decl.c:9065
#, 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:9047
+#: fortran/decl.c:9087
#, gcc-internal-format, gfc-internal-format
msgid "Empty FINAL at %C"
msgstr ""
-#: fortran/decl.c:9054
+#: fortran/decl.c:9094
#, gcc-internal-format, gfc-internal-format
msgid "Expected module procedure name at %C"
msgstr ""
-#: fortran/decl.c:9064
+#: fortran/decl.c:9104
#, gcc-internal-format
msgid "Expected %<,%> at %C"
msgstr ""
-#: fortran/decl.c:9070
+#: fortran/decl.c:9110
#, gcc-internal-format
msgid "Unknown procedure name %qs at %C"
msgstr ""
-#: fortran/decl.c:9083
+#: fortran/decl.c:9123
#, gcc-internal-format
msgid "%qs at %C is already defined as FINAL procedure!"
msgstr ""
-#: fortran/decl.c:9153
+#: fortran/decl.c:9193
#, gcc-internal-format, gfc-internal-format
msgid "Unknown attribute in !GCC$ ATTRIBUTES statement at %C"
msgstr ""
-#: fortran/decl.c:9199
+#: fortran/decl.c:9239
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in !GCC$ ATTRIBUTES statement at %C"
msgstr ""
@@ -49991,7 +50139,7 @@ msgstr ""
msgid "show_expr(): Don't know how to show expr"
msgstr ""
-#: fortran/dump-parse-tree.c:2520
+#: fortran/dump-parse-tree.c:2532
#, gcc-internal-format
msgid "show_code_node(): Bad statement code"
msgstr ""
@@ -50269,32 +50417,32 @@ msgstr ""
msgid "BOZ literal at %L used to initialize non-integer variable %qs"
msgstr ""
-#: fortran/expr.c:3252 fortran/resolve.c:9531
+#: fortran/expr.c:3252 fortran/resolve.c:9542
#, gcc-internal-format, gfc-internal-format
msgid ""
"BOZ literal at %L outside a DATA statement and outside INT/REAL/DBLE/CMPLX"
msgstr ""
-#: fortran/expr.c:3263 fortran/resolve.c:9542
+#: fortran/expr.c:3263 fortran/resolve.c:9553
#, gcc-internal-format
msgid "BOZ literal at %L is bitwise transferred non-integer symbol %qs"
msgstr ""
-#: fortran/expr.c:3271 fortran/resolve.c:9551
+#: fortran/expr.c:3271 fortran/resolve.c:9562
#, gcc-internal-format
msgid ""
"Arithmetic underflow of bit-wise transferred BOZ at %L. This check can be "
"disabled with the option %<-fno-range-check%>"
msgstr ""
-#: fortran/expr.c:3275 fortran/resolve.c:9555
+#: fortran/expr.c:3275 fortran/resolve.c:9566
#, gcc-internal-format
msgid ""
"Arithmetic overflow of bit-wise transferred BOZ at %L. This check can be "
"disabled with the option %<-fno-range-check%>"
msgstr ""
-#: fortran/expr.c:3279 fortran/resolve.c:9559
+#: fortran/expr.c:3279 fortran/resolve.c:9570
#, gcc-internal-format
msgid ""
"Arithmetic NaN of bit-wise transferred BOZ at %L. This check can be disabled "
@@ -50616,62 +50764,62 @@ msgstr ""
msgid "can't open input file: %s"
msgstr ""
-#: fortran/frontend-passes.c:298
+#: fortran/frontend-passes.c:297
#, gcc-internal-format
msgid "Illegal id in copy_walk_reduction_arg"
msgstr ""
-#: fortran/frontend-passes.c:694 fortran/trans-array.c:1044
-#: fortran/trans-array.c:6156 fortran/trans-array.c:7507
+#: fortran/frontend-passes.c:693 fortran/trans-array.c:1044
+#: fortran/trans-array.c:6167 fortran/trans-array.c:7518
#: fortran/trans-intrinsic.c:6278
#, gcc-internal-format, gfc-internal-format
msgid "Creating array temporary at %L"
msgstr ""
-#: fortran/frontend-passes.c:718 fortran/frontend-passes.c:721
+#: fortran/frontend-passes.c:717 fortran/frontend-passes.c:720
#, gcc-internal-format
msgid "Removing call to function %qs at %L"
msgstr ""
-#: fortran/frontend-passes.c:1696
+#: fortran/frontend-passes.c:1695
#, gcc-internal-format
msgid "illegal OP in optimize_comparison"
msgstr ""
-#: fortran/frontend-passes.c:1888
+#: fortran/frontend-passes.c:1887
#, 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:1895
+#: fortran/frontend-passes.c:1894
#, 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:1960
+#: fortran/frontend-passes.c:1959
#, 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:1966
+#: fortran/frontend-passes.c:1965
#, 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:2214 fortran/trans-expr.c:1491
+#: fortran/frontend-passes.c:2213 fortran/trans-expr.c:1522
#, gcc-internal-format, gfc-internal-format
msgid "Code for reallocating the allocatable array at %L will be added"
msgstr ""
-#: fortran/frontend-passes.c:2693
+#: fortran/frontend-passes.c:2692
#, gcc-internal-format
msgid "Scalarization using DIMEN_RANGE unimplemented"
msgstr ""
@@ -50790,12 +50938,12 @@ msgstr ""
msgid "Second argument of defined assignment at %L must be INTENT(IN)"
msgstr ""
-#: fortran/interface.c:761 fortran/resolve.c:15347
+#: fortran/interface.c:761 fortran/resolve.c:15373
#, gcc-internal-format, gfc-internal-format
msgid "First argument of operator interface at %L must be INTENT(IN)"
msgstr ""
-#: fortran/interface.c:768 fortran/resolve.c:15365
+#: fortran/interface.c:768 fortran/resolve.c:15391
#, gcc-internal-format, gfc-internal-format
msgid "Second argument of operator interface at %L must be INTENT(IN)"
msgstr ""
@@ -51855,268 +52003,268 @@ msgstr ""
msgid "UNIT specifier not allowed with NEWUNIT at %C"
msgstr ""
-#: fortran/io.c:1897
+#: fortran/io.c:1899
#, gcc-internal-format, gfc-internal-format
msgid "NEWUNIT specifier must have FILE= or STATUS='scratch' at %C"
msgstr ""
-#: fortran/io.c:1904
+#: fortran/io.c:1907
#, gcc-internal-format, gfc-internal-format
msgid "OPEN statement at %C must have UNIT or NEWUNIT specified"
msgstr ""
-#: fortran/io.c:1942
+#: fortran/io.c:1945
#, gcc-internal-format, gfc-internal-format
msgid "ASYNCHRONOUS= at %C not allowed in Fortran 95"
msgstr ""
-#: fortran/io.c:1963 fortran/io.c:3458
+#: fortran/io.c:1966 fortran/io.c:3461
#, gcc-internal-format, gfc-internal-format
msgid "BLANK= at %C not allowed in Fortran 95"
msgstr ""
-#: fortran/io.c:1984 fortran/io.c:3434
+#: fortran/io.c:1987 fortran/io.c:3437
#, gcc-internal-format, gfc-internal-format
msgid "DECIMAL= at %C not allowed in Fortran 95"
msgstr ""
-#: fortran/io.c:2022
+#: fortran/io.c:2025
#, gcc-internal-format, gfc-internal-format
msgid "ENCODING= at %C not allowed in Fortran 95"
msgstr ""
-#: fortran/io.c:2085 fortran/io.c:3507
+#: fortran/io.c:2088 fortran/io.c:3510
#, gcc-internal-format, gfc-internal-format
msgid "ROUND= at %C not allowed in Fortran 95"
msgstr ""
-#: fortran/io.c:2108
+#: fortran/io.c:2111
#, gcc-internal-format, gfc-internal-format
msgid "SIGN= at %C not allowed in Fortran 95"
msgstr ""
-#: fortran/io.c:2329
+#: fortran/io.c:2332
#, gcc-internal-format, gfc-internal-format
msgid "CLOSE statement not allowed in PURE procedure at %C"
msgstr ""
-#: fortran/io.c:2391
+#: fortran/io.c:2394
#, gcc-internal-format, gfc-internal-format
msgid "CLOSE statement at %L requires a UNIT number"
msgstr ""
-#: fortran/io.c:2399
+#: fortran/io.c:2402
#, gcc-internal-format, gfc-internal-format
msgid "UNIT number in CLOSE statement at %L must be non-negative"
msgstr ""
-#: fortran/io.c:2497 fortran/match.c:2633
+#: fortran/io.c:2500 fortran/match.c:2639
#, gcc-internal-format, gfc-internal-format
msgid "%s statement not allowed in PURE procedure at %C"
msgstr ""
-#: fortran/io.c:2531
+#: fortran/io.c:2534
#, gcc-internal-format, gfc-internal-format
msgid "UNIT number missing in statement at %L"
msgstr ""
-#: fortran/io.c:2539 fortran/io.c:2976
+#: fortran/io.c:2542 fortran/io.c:2979
#, gcc-internal-format, gfc-internal-format
msgid "UNIT number in statement at %L must be non-negative"
msgstr ""
-#: fortran/io.c:2572
+#: fortran/io.c:2575
#, gcc-internal-format, gfc-internal-format
msgid "FLUSH statement at %C"
msgstr ""
-#: fortran/io.c:2627
+#: fortran/io.c:2630
#, gcc-internal-format, gfc-internal-format
msgid "Duplicate UNIT specification at %C"
msgstr ""
-#: fortran/io.c:2701
+#: fortran/io.c:2704
#, gcc-internal-format, gfc-internal-format
msgid "Duplicate format specification at %C"
msgstr ""
-#: fortran/io.c:2718
+#: fortran/io.c:2721
#, gcc-internal-format
msgid "Symbol %qs in namelist %qs is INTENT(IN) at %C"
msgstr ""
-#: fortran/io.c:2754
+#: fortran/io.c:2757
#, gcc-internal-format, gfc-internal-format
msgid "Duplicate NML specification at %C"
msgstr ""
-#: fortran/io.c:2763
+#: fortran/io.c:2766
#, gcc-internal-format
msgid "Symbol %qs at %C must be a NAMELIST group name"
msgstr ""
-#: fortran/io.c:2833
+#: fortran/io.c:2836
#, gcc-internal-format, gfc-internal-format
msgid "END tag at %C not allowed in output statement"
msgstr ""
-#: fortran/io.c:2910
+#: fortran/io.c:2913
#, gcc-internal-format, gfc-internal-format
msgid "UNIT not specified at %L"
msgstr ""
-#: fortran/io.c:2922
+#: fortran/io.c:2925
#, gcc-internal-format, gfc-internal-format
msgid ""
"UNIT specification at %L must be an INTEGER expression or a CHARACTER "
"variable"
msgstr ""
-#: fortran/io.c:2944
+#: fortran/io.c:2947
#, gcc-internal-format, gfc-internal-format
msgid "Invalid form of WRITE statement at %L, UNIT required"
msgstr ""
-#: fortran/io.c:2955
+#: fortran/io.c:2958
#, gcc-internal-format, gfc-internal-format
msgid "Internal unit with vector subscript at %L"
msgstr ""
-#: fortran/io.c:2969
+#: fortran/io.c:2972
#, gcc-internal-format, gfc-internal-format
msgid "External IO UNIT cannot be an array at %L"
msgstr ""
-#: fortran/io.c:2997
+#: fortran/io.c:3000
#, 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:3007
+#: fortran/io.c:3010
#, gcc-internal-format, gfc-internal-format
msgid "Comma before i/o item list at %L"
msgstr ""
-#: fortran/io.c:3017
+#: fortran/io.c:3020
#, gcc-internal-format, gfc-internal-format
msgid "ERR tag label %d at %L not defined"
msgstr ""
-#: fortran/io.c:3029
+#: fortran/io.c:3032
#, gcc-internal-format, gfc-internal-format
msgid "END tag label %d at %L not defined"
msgstr ""
-#: fortran/io.c:3041
+#: fortran/io.c:3044
#, gcc-internal-format, gfc-internal-format
msgid "EOR tag label %d at %L not defined"
msgstr ""
-#: fortran/io.c:3051
+#: fortran/io.c:3054
#, gcc-internal-format, gfc-internal-format
msgid "FORMAT label %d at %L not defined"
msgstr ""
-#: fortran/io.c:3082
+#: fortran/io.c:3085
#, gcc-internal-format
msgid "io_kind_name(): bad I/O-kind"
msgstr ""
-#: fortran/io.c:3171
+#: fortran/io.c:3174
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in I/O iterator at %C"
msgstr ""
-#: fortran/io.c:3202
+#: fortran/io.c:3205
#, gcc-internal-format, gfc-internal-format
msgid "Expected variable in READ statement at %C"
msgstr ""
-#: fortran/io.c:3208
+#: fortran/io.c:3211
#, gcc-internal-format, gfc-internal-format
msgid "Expected expression in %s statement at %C"
msgstr ""
#. A general purpose syntax error.
-#: fortran/io.c:3265 fortran/io.c:3883 fortran/gfortran.h:2715
+#: fortran/io.c:3268 fortran/io.c:3886 fortran/gfortran.h:2718
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in %s statement at %C"
msgstr ""
-#: fortran/io.c:3349
+#: fortran/io.c:3352
#, gcc-internal-format, gfc-internal-format
msgid "Internal file at %L with namelist"
msgstr ""
-#: fortran/io.c:3405
+#: fortran/io.c:3408
#, gcc-internal-format, gfc-internal-format
msgid "ASYNCHRONOUS= specifier at %L must be an initialization expression"
msgstr ""
-#: fortran/io.c:3483
+#: fortran/io.c:3486
#, gcc-internal-format, gfc-internal-format
msgid "PAD= at %C not allowed in Fortran 95"
msgstr ""
-#: fortran/io.c:3559
+#: fortran/io.c:3562
#, gcc-internal-format, gfc-internal-format
msgid "DELIM= at %C not allowed in Fortran 95"
msgstr ""
-#: fortran/io.c:3711
+#: fortran/io.c:3714
#, gcc-internal-format, gfc-internal-format
msgid "PRINT namelist at %C is an extension"
msgstr ""
-#: fortran/io.c:3854
+#: fortran/io.c:3857
#, gcc-internal-format, gfc-internal-format
msgid "Expected comma in I/O list at %C"
msgstr ""
-#: fortran/io.c:3917
+#: fortran/io.c:3920
#, gcc-internal-format, gfc-internal-format
msgid "PRINT statement at %C not allowed within PURE procedure"
msgstr ""
-#: fortran/io.c:4080 fortran/io.c:4140
+#: fortran/io.c:4083 fortran/io.c:4143
#, gcc-internal-format, gfc-internal-format
msgid "INQUIRE statement not allowed in PURE procedure at %C"
msgstr ""
-#: fortran/io.c:4108
+#: fortran/io.c:4111
#, gcc-internal-format, gfc-internal-format
msgid "IOLENGTH tag invalid in INQUIRE statement at %C"
msgstr ""
-#: fortran/io.c:4118 fortran/trans-io.c:1303
+#: fortran/io.c:4121 fortran/trans-io.c:1303
#, gcc-internal-format, gfc-internal-format
msgid "INQUIRE statement at %L cannot contain both FILE and UNIT specifiers"
msgstr ""
-#: fortran/io.c:4125
+#: fortran/io.c:4128
#, gcc-internal-format, gfc-internal-format
msgid "INQUIRE statement at %L requires either FILE or UNIT specifier"
msgstr ""
-#: fortran/io.c:4134
+#: fortran/io.c:4137
#, gcc-internal-format, gfc-internal-format
msgid "UNIT number in INQUIRE statement at %L can not be -1"
msgstr ""
-#: fortran/io.c:4148
+#: fortran/io.c:4151
#, gcc-internal-format, gfc-internal-format
msgid ""
"INQUIRE statement at %L requires a PENDING= specifier with the ID= specifier"
msgstr ""
-#: fortran/io.c:4324
+#: fortran/io.c:4327
#, gcc-internal-format, gfc-internal-format
msgid "WAIT at %C not allowed in Fortran 95"
msgstr ""
-#: fortran/io.c:4330
+#: fortran/io.c:4333
#, gcc-internal-format, gfc-internal-format
msgid "WAIT statement not allowed in PURE procedure at %C"
msgstr ""
@@ -52178,559 +52326,564 @@ msgid ""
"extension"
msgstr ""
-#: fortran/match.c:883
+#: fortran/match.c:882
#, gcc-internal-format, gfc-internal-format
-msgid "Loop variable at %C cannot be a coarray"
+msgid "Loop variable at %C cannot be an array"
msgstr ""
#: fortran/match.c:889
#, gcc-internal-format, gfc-internal-format
+msgid "Loop variable at %C cannot be a coarray"
+msgstr ""
+
+#: fortran/match.c:895
+#, gcc-internal-format, gfc-internal-format
msgid "Loop variable at %C cannot be a sub-component"
msgstr ""
-#: fortran/match.c:923
+#: fortran/match.c:929
#, gcc-internal-format, gfc-internal-format
msgid "Expected a step value in iterator at %C"
msgstr ""
-#: fortran/match.c:935
+#: fortran/match.c:941
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in iterator at %C"
msgstr ""
-#: fortran/match.c:1103
+#: fortran/match.c:1109
#, gcc-internal-format, gfc-internal-format
msgid "gfc_match(): Bad match code %c"
msgstr ""
-#: fortran/match.c:1176
+#: fortran/match.c:1182
#, gcc-internal-format, gfc-internal-format
msgid "Invalid form of PROGRAM statement at %C"
msgstr ""
-#: fortran/match.c:1306 fortran/match.c:1386
+#: fortran/match.c:1312 fortran/match.c:1392
#, gcc-internal-format, gfc-internal-format
msgid "Arithmetic IF statement at %C"
msgstr ""
-#: fortran/match.c:1361
+#: fortran/match.c:1367
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in IF-expression at %C"
msgstr ""
-#: fortran/match.c:1372
+#: fortran/match.c:1378
#, gcc-internal-format, gfc-internal-format
msgid "Block label not appropriate for arithmetic IF statement at %C"
msgstr ""
-#: fortran/match.c:1409
+#: fortran/match.c:1415
#, gcc-internal-format, gfc-internal-format
msgid "Block label is not appropriate for IF statement at %C"
msgstr ""
-#: fortran/match.c:1497
+#: fortran/match.c:1503
#, gcc-internal-format, gfc-internal-format
msgid "Cannot assign to a named constant at %C"
msgstr ""
-#: fortran/match.c:1507
+#: fortran/match.c:1513
#, gcc-internal-format, gfc-internal-format
msgid "Unclassifiable statement in IF-clause at %C"
msgstr ""
-#: fortran/match.c:1514
+#: fortran/match.c:1520
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in IF-clause at %C"
msgstr ""
-#: fortran/match.c:1557
+#: fortran/match.c:1563
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after ELSE statement at %C"
msgstr ""
-#: fortran/match.c:1563 fortran/match.c:1598
+#: fortran/match.c:1569 fortran/match.c:1604
#, gcc-internal-format
msgid "Label %qs at %C doesn't match IF label %qs"
msgstr ""
-#: fortran/match.c:1592
+#: fortran/match.c:1598
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after ELSE IF statement at %C"
msgstr ""
-#: fortran/match.c:1656
+#: fortran/match.c:1662
#, gcc-internal-format, gfc-internal-format
msgid "Image control statement CRITICAL at %C in PURE procedure"
msgstr ""
-#: fortran/match.c:1662
+#: fortran/match.c:1668
#, gcc-internal-format, gfc-internal-format
msgid "Image control statement CRITICAL at %C in DO CONCURRENT block"
msgstr ""
-#: fortran/match.c:1669
+#: fortran/match.c:1675
#, gcc-internal-format, gfc-internal-format
msgid "CRITICAL statement at %C"
msgstr ""
-#: fortran/match.c:1681
+#: fortran/match.c:1687
#, gcc-internal-format, gfc-internal-format
msgid "Nested CRITICAL block at %C"
msgstr ""
-#: fortran/match.c:1733
+#: fortran/match.c:1739
#, gcc-internal-format, gfc-internal-format
msgid "Expected association list at %C"
msgstr ""
-#: fortran/match.c:1746
+#: fortran/match.c:1752
#, gcc-internal-format, gfc-internal-format
msgid "Expected association at %C"
msgstr ""
-#: fortran/match.c:1755
+#: fortran/match.c:1761
#, gcc-internal-format
msgid "Duplicate name %qs in association at %C"
msgstr ""
-#: fortran/match.c:1763
+#: fortran/match.c:1769
#, gcc-internal-format, gfc-internal-format
msgid "Association target at %C must not be coindexed"
msgstr ""
-#: fortran/match.c:1781
+#: fortran/match.c:1787
#, gcc-internal-format
msgid "Expected %<)%> or %<,%> at %C"
msgstr ""
-#: fortran/match.c:1799
+#: fortran/match.c:1805
#, gcc-internal-format, gfc-internal-format
msgid "Junk after ASSOCIATE statement at %C"
msgstr ""
-#: fortran/match.c:1868
+#: fortran/match.c:1874
#, gcc-internal-format
msgid "Derived type %qs at %L may not be ABSTRACT"
msgstr ""
-#: fortran/match.c:1931
+#: fortran/match.c:1937
#, gcc-internal-format, gfc-internal-format
msgid "Invalid type-spec at %C"
msgstr ""
-#: fortran/match.c:2030
+#: fortran/match.c:2036
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in FORALL iterator at %C"
msgstr ""
-#: fortran/match.c:2295
+#: fortran/match.c:2301
#, gcc-internal-format, gfc-internal-format
msgid "DO CONCURRENT construct at %C"
msgstr ""
-#: fortran/match.c:2420
+#: fortran/match.c:2426
#, gcc-internal-format
msgid "Name %qs in %s statement at %C is unknown"
msgstr ""
-#: fortran/match.c:2428
+#: fortran/match.c:2434
#, gcc-internal-format
msgid "Name %qs in %s statement at %C is not a construct name"
msgstr ""
-#: fortran/match.c:2440
+#: fortran/match.c:2446
#, gcc-internal-format, gfc-internal-format
msgid "%s statement at %C leaves CRITICAL construct"
msgstr ""
#. F2008, C821 & C845.
-#: fortran/match.c:2448
+#: fortran/match.c:2454
#, gcc-internal-format, gfc-internal-format
msgid "%s statement at %C leaves DO CONCURRENT construct"
msgstr ""
-#: fortran/match.c:2460
+#: fortran/match.c:2466
#, gcc-internal-format, gfc-internal-format
msgid "%s statement at %C is not within a construct"
msgstr ""
-#: fortran/match.c:2463
+#: fortran/match.c:2469
#, gcc-internal-format
msgid "%s statement at %C is not within construct %qs"
msgstr ""
-#: fortran/match.c:2488
+#: fortran/match.c:2494
#, gcc-internal-format
msgid "CYCLE statement at %C is not applicable to non-loop construct %qs"
msgstr ""
-#: fortran/match.c:2493
+#: fortran/match.c:2499
#, gcc-internal-format, gfc-internal-format
msgid "EXIT statement with no do-construct-name at %C"
msgstr ""
-#: fortran/match.c:2499
+#: fortran/match.c:2505
#, gcc-internal-format
msgid "%s statement at %C is not applicable to construct %qs"
msgstr ""
-#: fortran/match.c:2507
+#: fortran/match.c:2513
#, gcc-internal-format, gfc-internal-format
msgid "%s statement at %C leaving OpenACC structured block"
msgstr ""
-#: fortran/match.c:2532
+#: fortran/match.c:2538
#, gcc-internal-format, gfc-internal-format
msgid "EXIT statement at %C terminating !$ACC LOOP loop"
msgstr ""
-#: fortran/match.c:2537
+#: fortran/match.c:2543
#, gcc-internal-format, gfc-internal-format
msgid "CYCLE statement at %C to non-innermost collapsed !$ACC LOOP loop"
msgstr ""
-#: fortran/match.c:2562
+#: fortran/match.c:2568
#, gcc-internal-format, gfc-internal-format
msgid "EXIT statement at %C terminating !$OMP DO loop"
msgstr ""
-#: fortran/match.c:2567
+#: fortran/match.c:2573
#, gcc-internal-format, gfc-internal-format
msgid "CYCLE statement at %C to non-innermost collapsed !$OMP DO loop"
msgstr ""
-#: fortran/match.c:2627
+#: fortran/match.c:2633
#, gcc-internal-format, gfc-internal-format
msgid "%s statement at %C in PURE procedure"
msgstr ""
-#: fortran/match.c:2643
+#: fortran/match.c:2649
#, gcc-internal-format, gfc-internal-format
msgid "Image control statement STOP at %C in CRITICAL block"
msgstr ""
-#: fortran/match.c:2648
+#: fortran/match.c:2654
#, gcc-internal-format, gfc-internal-format
msgid "Image control statement STOP at %C in DO CONCURRENT block"
msgstr ""
-#: fortran/match.c:2656
+#: fortran/match.c:2662
#, gcc-internal-format, gfc-internal-format
msgid "STOP code at %L must be either INTEGER or CHARACTER type"
msgstr ""
-#: fortran/match.c:2663
+#: fortran/match.c:2669
#, gcc-internal-format, gfc-internal-format
msgid "STOP code at %L must be scalar"
msgstr ""
-#: fortran/match.c:2671
+#: fortran/match.c:2677
#, gcc-internal-format, gfc-internal-format
msgid "STOP code at %L must be default character KIND=%d"
msgstr ""
-#: fortran/match.c:2679
+#: fortran/match.c:2685
#, gcc-internal-format, gfc-internal-format
msgid "STOP code at %L must be default integer KIND=%d"
msgstr ""
-#: fortran/match.c:2725
+#: fortran/match.c:2731
#, gcc-internal-format, gfc-internal-format
msgid "PAUSE statement at %C"
msgstr ""
-#: fortran/match.c:2746
+#: fortran/match.c:2752
#, gcc-internal-format, gfc-internal-format
msgid "ERROR STOP statement at %C"
msgstr ""
-#: fortran/match.c:2772
+#: fortran/match.c:2778
#, gcc-internal-format, gfc-internal-format
msgid "Image control statement EVENT %s at %C in PURE procedure"
msgstr ""
-#: fortran/match.c:2787
+#: fortran/match.c:2793
#, gcc-internal-format, gfc-internal-format
msgid "Image control statement EVENT %s at %C in CRITICAL block"
msgstr ""
-#: fortran/match.c:2794
+#: fortran/match.c:2800
#, gcc-internal-format, gfc-internal-format
msgid "Image control statement EVENT %s at %C in DO CONCURRENT block"
msgstr ""
-#: fortran/match.c:2824 fortran/match.c:3019 fortran/match.c:3231
-#: fortran/match.c:3741 fortran/match.c:4078
+#: fortran/match.c:2830 fortran/match.c:3025 fortran/match.c:3237
+#: fortran/match.c:3747 fortran/match.c:4084
#, gcc-internal-format, gfc-internal-format
msgid "Redundant STAT tag found at %L "
msgstr ""
-#: fortran/match.c:2845 fortran/match.c:3040 fortran/match.c:3251
-#: fortran/match.c:3767 fortran/match.c:4103
+#: fortran/match.c:2851 fortran/match.c:3046 fortran/match.c:3257
+#: fortran/match.c:3773 fortran/match.c:4109
#, gcc-internal-format, gfc-internal-format
msgid "Redundant ERRMSG tag found at %L "
msgstr ""
-#: fortran/match.c:2866
+#: fortran/match.c:2872
#, gcc-internal-format, gfc-internal-format
msgid "Redundant UNTIL_COUNT tag found at %L "
msgstr ""
-#: fortran/match.c:2932
+#: fortran/match.c:2938
#, gcc-internal-format, gfc-internal-format
msgid "EVENT POST statement at %C"
msgstr ""
-#: fortran/match.c:2942
+#: fortran/match.c:2948
#, gcc-internal-format, gfc-internal-format
msgid "EVENT WAIT statement at %C"
msgstr ""
-#: fortran/match.c:2967
+#: fortran/match.c:2973
#, gcc-internal-format, gfc-internal-format
msgid "Image control statement %s at %C in PURE procedure"
msgstr ""
-#: fortran/match.c:2982
+#: fortran/match.c:2988
#, gcc-internal-format, gfc-internal-format
msgid "Image control statement %s at %C in CRITICAL block"
msgstr ""
-#: fortran/match.c:2989
+#: fortran/match.c:2995
#, gcc-internal-format, gfc-internal-format
msgid "Image control statement %s at %C in DO CONCURRENT block"
msgstr ""
-#: fortran/match.c:3061
+#: fortran/match.c:3067
#, gcc-internal-format, gfc-internal-format
msgid "Redundant ACQUIRED_LOCK tag found at %L "
msgstr ""
-#: fortran/match.c:3126
+#: fortran/match.c:3132
#, gcc-internal-format, gfc-internal-format
msgid "LOCK statement at %C"
msgstr ""
-#: fortran/match.c:3136
+#: fortran/match.c:3142
#, gcc-internal-format, gfc-internal-format
msgid "UNLOCK statement at %C"
msgstr ""
-#: fortran/match.c:3161
+#: fortran/match.c:3167
#, gcc-internal-format, gfc-internal-format
msgid "Image control statement SYNC at %C in PURE procedure"
msgstr ""
-#: fortran/match.c:3167
+#: fortran/match.c:3173
#, gcc-internal-format, gfc-internal-format
msgid "SYNC statement at %C"
msgstr ""
-#: fortran/match.c:3179
+#: fortran/match.c:3185
#, gcc-internal-format, gfc-internal-format
msgid "Image control statement SYNC at %C in CRITICAL block"
msgstr ""
-#: fortran/match.c:3185
+#: fortran/match.c:3191
#, gcc-internal-format, gfc-internal-format
msgid "Image control statement SYNC at %C in DO CONCURRENT block"
msgstr ""
-#: fortran/match.c:3365
+#: fortran/match.c:3371
#, gcc-internal-format, gfc-internal-format
msgid "ASSIGN statement at %C"
msgstr ""
-#: fortran/match.c:3409
+#: fortran/match.c:3415
#, gcc-internal-format, gfc-internal-format
msgid "Assigned GOTO statement at %C"
msgstr ""
-#: fortran/match.c:3453 fortran/match.c:3504
+#: fortran/match.c:3459 fortran/match.c:3510
#, gcc-internal-format, gfc-internal-format
msgid "Statement label list in GOTO at %C cannot be empty"
msgstr ""
-#: fortran/match.c:3514
+#: fortran/match.c:3520
#, gcc-internal-format, gfc-internal-format
msgid "Computed GOTO at %C"
msgstr ""
-#: fortran/match.c:3586
+#: fortran/match.c:3592
#, gcc-internal-format, gfc-internal-format
msgid "Error in type-spec at %L"
msgstr ""
-#: fortran/match.c:3596
+#: fortran/match.c:3602
#, gcc-internal-format, gfc-internal-format
msgid "typespec in ALLOCATE at %L"
msgstr ""
-#: fortran/match.c:3639
+#: fortran/match.c:3645
#, gcc-internal-format, gfc-internal-format
msgid "Bad allocate-object at %C for a PURE procedure"
msgstr ""
-#: fortran/match.c:3663
+#: fortran/match.c:3669
#, gcc-internal-format, gfc-internal-format
msgid "ALLOCATE of coarray at %C in DO CONCURRENT block"
msgstr ""
-#: fortran/match.c:3668
+#: fortran/match.c:3674
#, gcc-internal-format, gfc-internal-format
msgid "ALLOCATE of coarray at %C in CRITICAL block"
msgstr ""
-#: fortran/match.c:3690
+#: fortran/match.c:3696
#, gcc-internal-format, gfc-internal-format
msgid ""
"Allocate-object at %L is neither a data pointer nor an allocatable variable"
msgstr ""
-#: fortran/match.c:3702
+#: fortran/match.c:3708
#, gcc-internal-format, gfc-internal-format
msgid "Type of entity at %L is type incompatible with typespec"
msgstr ""
-#: fortran/match.c:3710
+#: fortran/match.c:3716
#, gcc-internal-format, gfc-internal-format
msgid ""
"Kind type parameter for entity at %L differs from the kind type parameter of "
"the typespec"
msgstr ""
-#: fortran/match.c:3724
+#: fortran/match.c:3730
#, gcc-internal-format, gfc-internal-format
msgid "Shape specification for allocatable scalar at %C"
msgstr ""
-#: fortran/match.c:3761
+#: fortran/match.c:3767
#, gcc-internal-format, gfc-internal-format
msgid "ERRMSG tag at %L"
msgstr ""
-#: fortran/match.c:3784
+#: fortran/match.c:3790
#, gcc-internal-format, gfc-internal-format
msgid "SOURCE tag at %L"
msgstr ""
-#: fortran/match.c:3790
+#: fortran/match.c:3796
#, gcc-internal-format, gfc-internal-format
msgid "Redundant SOURCE tag found at %L "
msgstr ""
-#: fortran/match.c:3797
+#: fortran/match.c:3803
#, gcc-internal-format, gfc-internal-format
msgid "SOURCE tag at %L conflicts with the typespec at %L"
msgstr ""
-#: fortran/match.c:3803
+#: fortran/match.c:3809
#, gcc-internal-format, gfc-internal-format
msgid "SOURCE tag at %L with more than a single allocate object"
msgstr ""
-#: fortran/match.c:3821
+#: fortran/match.c:3827
#, gcc-internal-format, gfc-internal-format
msgid "MOLD tag at %L"
msgstr ""
-#: fortran/match.c:3827
+#: fortran/match.c:3833
#, gcc-internal-format, gfc-internal-format
msgid "Redundant MOLD tag found at %L "
msgstr ""
-#: fortran/match.c:3834
+#: fortran/match.c:3840
#, gcc-internal-format, gfc-internal-format
msgid "MOLD tag at %L conflicts with the typespec at %L"
msgstr ""
-#: fortran/match.c:3860
+#: fortran/match.c:3866
#, gcc-internal-format, gfc-internal-format
msgid "MOLD tag at %L conflicts with SOURCE tag at %L"
msgstr ""
-#: fortran/match.c:3868
+#: fortran/match.c:3874
#, gcc-internal-format, gfc-internal-format
msgid ""
"Allocate-object at %L with a deferred type parameter requires either a type-"
"spec or SOURCE tag or a MOLD tag"
msgstr ""
-#: fortran/match.c:3880
+#: fortran/match.c:3886
#, gcc-internal-format, gfc-internal-format
msgid ""
"Unlimited polymorphic allocate-object at %L requires either a type-spec or "
"SOURCE tag or a MOLD tag"
msgstr ""
-#: fortran/match.c:3942
+#: fortran/match.c:3948
#, gcc-internal-format, gfc-internal-format
msgid "Pointer object at %C shall not be coindexed"
msgstr ""
-#: fortran/match.c:4028
+#: fortran/match.c:4034
#, gcc-internal-format, gfc-internal-format
msgid "Illegal allocate-object at %C for a PURE procedure"
msgstr ""
-#: fortran/match.c:4038
+#: fortran/match.c:4044
#, gcc-internal-format, gfc-internal-format
msgid "DEALLOCATE of coarray at %C in DO CONCURRENT block"
msgstr ""
-#: fortran/match.c:4045
+#: fortran/match.c:4051
#, gcc-internal-format, gfc-internal-format
msgid "DEALLOCATE of coarray at %C in CRITICAL block"
msgstr ""
-#: fortran/match.c:4061
+#: fortran/match.c:4067
#, gcc-internal-format, gfc-internal-format
msgid ""
"Allocate-object at %C is not a nonprocedure pointer nor an allocatable "
"variable"
msgstr ""
-#: fortran/match.c:4098
+#: fortran/match.c:4104
#, gcc-internal-format, gfc-internal-format
msgid "ERRMSG at %L"
msgstr ""
-#: fortran/match.c:4155
+#: fortran/match.c:4161
#, gcc-internal-format, gfc-internal-format
msgid "Image control statement RETURN at %C in CRITICAL block"
msgstr ""
-#: fortran/match.c:4161
+#: fortran/match.c:4167
#, gcc-internal-format, gfc-internal-format
msgid "Image control statement RETURN at %C in DO CONCURRENT block"
msgstr ""
-#: fortran/match.c:4170
+#: fortran/match.c:4176
#, gcc-internal-format, gfc-internal-format
msgid "Alternate RETURN statement at %C is only allowed within a SUBROUTINE"
msgstr ""
-#: fortran/match.c:4201
+#: fortran/match.c:4207
#, gcc-internal-format, gfc-internal-format
msgid "RETURN statement in main program at %C"
msgstr ""
-#: fortran/match.c:4229
+#: fortran/match.c:4235
#, gcc-internal-format, gfc-internal-format
msgid "Expected component reference at %C"
msgstr ""
-#: fortran/match.c:4238
+#: fortran/match.c:4244
#, gcc-internal-format, gfc-internal-format
msgid "Junk after CALL at %C"
msgstr ""
-#: fortran/match.c:4249
+#: fortran/match.c:4255
#, gcc-internal-format, gfc-internal-format
msgid "Expected type-bound procedure or procedure pointer component at %C"
msgstr ""
-#: fortran/match.c:4470
+#: fortran/match.c:4476
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in common block name at %C"
msgstr ""
@@ -52738,169 +52891,169 @@ msgstr ""
#. If we find an error, just print it and continue,
#. cause it's just semantic, and we can see if there
#. are more errors.
-#: fortran/match.c:4537
+#: fortran/match.c:4543
#, gcc-internal-format
msgid ""
"Variable %qs at %L in common block %qs at %C must be declared with a C "
"interoperable kind since common block %qs is bind(c)"
msgstr ""
-#: fortran/match.c:4546
+#: fortran/match.c:4552
#, gcc-internal-format
msgid ""
"Variable %qs in common block %qs at %C can not be bind(c) since it is not "
"global"
msgstr ""
-#: fortran/match.c:4553
+#: fortran/match.c:4559
#, gcc-internal-format
msgid "Symbol %qs at %C is already in a COMMON block"
msgstr ""
-#: fortran/match.c:4561
+#: fortran/match.c:4567
#, gcc-internal-format
msgid "Initialized symbol %qs at %C can only be COMMON in BLOCK DATA"
msgstr ""
-#: fortran/match.c:4577
+#: fortran/match.c:4583
#, gcc-internal-format
msgid "Array specification for symbol %qs in COMMON at %C must be explicit"
msgstr ""
-#: fortran/match.c:4587
+#: fortran/match.c:4593
#, gcc-internal-format
msgid "Symbol %qs in COMMON at %C cannot be a POINTER array"
msgstr ""
-#: fortran/match.c:4633
+#: fortran/match.c:4639
#, gcc-internal-format
msgid ""
"Symbol %qs, in COMMON block %qs at %C is being indirectly equivalenced to "
"another COMMON block %qs"
msgstr ""
-#: fortran/match.c:4761
+#: fortran/match.c:4767
#, gcc-internal-format
msgid "Namelist group name %qs at %C already has a basic type of %s"
msgstr ""
-#: fortran/match.c:4769
+#: fortran/match.c:4775
#, gcc-internal-format
msgid ""
"Namelist group name %qs at %C already is USE associated and cannot be "
"respecified."
msgstr ""
-#: fortran/match.c:4795
+#: fortran/match.c:4801
#, gcc-internal-format
msgid "Assumed size array %qs in namelist %qs at %C is not allowed"
msgstr ""
-#: fortran/match.c:4929
+#: fortran/match.c:4935
#, gcc-internal-format, gfc-internal-format
msgid "Derived type component %C is not a permitted EQUIVALENCE member"
msgstr ""
-#: fortran/match.c:4937
+#: fortran/match.c:4943
#, gcc-internal-format, gfc-internal-format
msgid "Array reference in EQUIVALENCE at %C cannot be an array section"
msgstr ""
-#: fortran/match.c:4965
+#: fortran/match.c:4971
#, gcc-internal-format, gfc-internal-format
msgid "EQUIVALENCE at %C requires two or more objects"
msgstr ""
-#: fortran/match.c:4979
+#: fortran/match.c:4985
#, gcc-internal-format, gfc-internal-format
msgid ""
"Attempt to indirectly overlap COMMON blocks %s and %s by EQUIVALENCE at %C"
msgstr ""
-#: fortran/match.c:4992
+#: fortran/match.c:4998
#, gcc-internal-format, gfc-internal-format
msgid "Expecting a comma in EQUIVALENCE at %C"
msgstr ""
-#: fortran/match.c:5108
+#: fortran/match.c:5114
#, gcc-internal-format, gfc-internal-format
msgid "Statement function at %L is recursive"
msgstr ""
-#: fortran/match.c:5118
+#: fortran/match.c:5124
#, gcc-internal-format, gfc-internal-format
msgid "Statement function at %L cannot appear within an INTERFACE"
msgstr ""
-#: fortran/match.c:5123
+#: fortran/match.c:5129
#, gcc-internal-format, gfc-internal-format
msgid "Statement function at %C"
msgstr ""
-#: fortran/match.c:5248 fortran/match.c:5264
+#: fortran/match.c:5254 fortran/match.c:5270
#, gcc-internal-format, gfc-internal-format
msgid "Expression in CASE selector at %L cannot be %s"
msgstr ""
-#: fortran/match.c:5286
+#: fortran/match.c:5292
#, gcc-internal-format, gfc-internal-format
msgid "Expected initialization expression in CASE at %C"
msgstr ""
-#: fortran/match.c:5318
+#: fortran/match.c:5324
#, gcc-internal-format
msgid "Expected block name %qs of SELECT construct at %C"
msgstr ""
-#: fortran/match.c:5598
+#: fortran/match.c:5604
#, gcc-internal-format, gfc-internal-format
msgid "parse error in SELECT TYPE statement at %C"
msgstr ""
-#: fortran/match.c:5622
+#: fortran/match.c:5628
#, gcc-internal-format, gfc-internal-format
msgid ""
"Selector in SELECT TYPE at %C is not a named variable; use associate-name=>"
msgstr ""
-#: fortran/match.c:5656
+#: fortran/match.c:5662
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected CASE statement at %C"
msgstr ""
-#: fortran/match.c:5708
+#: fortran/match.c:5714
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in CASE specification at %C"
msgstr ""
-#: fortran/match.c:5726
+#: fortran/match.c:5732
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected TYPE IS statement at %C"
msgstr ""
-#: fortran/match.c:5758
+#: fortran/match.c:5764
#, gcc-internal-format, gfc-internal-format
msgid ""
"The type-spec shall not specify a sequence derived type or a type with the "
"BIND attribute in SELECT TYPE at %C [F2003:C815]"
msgstr ""
-#: fortran/match.c:5770
+#: fortran/match.c:5776
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in TYPE IS specification at %C"
msgstr ""
-#: fortran/match.c:5846
+#: fortran/match.c:5852
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in CLASS IS specification at %C"
msgstr ""
-#: fortran/match.c:5964
+#: fortran/match.c:5970
#, gcc-internal-format, gfc-internal-format
msgid "ELSEWHERE statement at %C not enclosed in WHERE block"
msgstr ""
-#: fortran/match.c:6002
+#: fortran/match.c:6008
#, gcc-internal-format
msgid "Label %qs at %C doesn't match WHERE label %qs"
msgstr ""
@@ -53239,899 +53392,899 @@ msgstr ""
msgid "Can't USE the same %smodule we're building!"
msgstr ""
-#: fortran/openmp.c:287 fortran/openmp.c:495 fortran/openmp.c:2397
-#: fortran/openmp.c:2471
+#: fortran/openmp.c:289 fortran/openmp.c:497 fortran/openmp.c:2399
+#: fortran/openmp.c:2473
#, gcc-internal-format, gfc-internal-format
msgid "COMMON block /%s/ not found at %C"
msgstr ""
-#: fortran/openmp.c:326
+#: fortran/openmp.c:328
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in OpenMP variable list at %C"
msgstr ""
-#: fortran/openmp.c:388
+#: fortran/openmp.c:390
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in OpenACC expression list at %C"
msgstr ""
-#: fortran/openmp.c:463
+#: fortran/openmp.c:465
#, gcc-internal-format, gfc-internal-format
msgid "Variable at %C is an element of a COMMON block"
msgstr ""
-#: fortran/openmp.c:523
+#: fortran/openmp.c:525
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after !$ACC DECLARE at %C"
msgstr ""
-#: fortran/openmp.c:533
+#: fortran/openmp.c:535
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in !$ACC DECLARE list at %C"
msgstr ""
-#: fortran/openmp.c:989
+#: fortran/openmp.c:991
#, gcc-internal-format, gfc-internal-format
msgid "!$OMP DECLARE REDUCTION %s not found at %L"
msgstr ""
-#: fortran/openmp.c:1089
+#: fortran/openmp.c:1091
#, gcc-internal-format, gfc-internal-format
msgid "COLLAPSE clause argument not constant positive integer at %C"
msgstr ""
-#: fortran/openmp.c:1474
+#: fortran/openmp.c:1476
#, gcc-internal-format, gfc-internal-format
msgid "Invalid clause in module with $!ACC DECLARE at %L"
msgstr ""
-#: fortran/openmp.c:1484
+#: fortran/openmp.c:1486
#, gcc-internal-format, gfc-internal-format
msgid "Variable is USE-associated with $!ACC DECLARE at %L"
msgstr ""
-#: fortran/openmp.c:1492
+#: fortran/openmp.c:1494
#, gcc-internal-format, gfc-internal-format
msgid "Assumed-size dummy array with $!ACC DECLARE at %L"
msgstr ""
-#: fortran/openmp.c:1539
+#: fortran/openmp.c:1541
#, gcc-internal-format
msgid ""
"%<acc update%> must contain at least one %<device%> or %<host%> or %<self%> "
"clause at %L"
msgstr ""
-#: fortran/openmp.c:1589
+#: fortran/openmp.c:1591
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk in !$ACC WAIT at %C"
msgstr ""
-#: fortran/openmp.c:1598
+#: fortran/openmp.c:1600
#, gcc-internal-format, gfc-internal-format
msgid "Invalid argument to $!ACC WAIT at %L"
msgstr ""
-#: fortran/openmp.c:1607
+#: fortran/openmp.c:1609
#, gcc-internal-format, gfc-internal-format
msgid "WAIT clause at %L requires a scalar INTEGER expression"
msgstr ""
-#: fortran/openmp.c:1636
+#: fortran/openmp.c:1638
#, gcc-internal-format, gfc-internal-format
msgid "ACC CACHE directive must be inside of loop %C"
msgstr ""
-#: fortran/openmp.c:1667
+#: fortran/openmp.c:1669
#, gcc-internal-format
msgid "Multiple loop axes specified for routine"
msgstr ""
-#: fortran/openmp.c:1693
+#: fortran/openmp.c:1695
#, 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:1720
+#: fortran/openmp.c:1722
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in !$ACC ROUTINE ( NAME ) at %C, invalid function name %s"
msgstr ""
-#: fortran/openmp.c:1729
+#: fortran/openmp.c:1731
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in !$ACC ROUTINE ( NAME ) at %C"
msgstr ""
-#: fortran/openmp.c:1736
+#: fortran/openmp.c:1738
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in !$ACC ROUTINE ( NAME ) at %C, expecting ')' after NAME"
msgstr ""
-#: fortran/openmp.c:1842
+#: fortran/openmp.c:1844
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after $OMP CRITICAL statement at %C"
msgstr ""
-#: fortran/openmp.c:1907
+#: fortran/openmp.c:1909
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after $OMP FLUSH statement at %C"
msgstr ""
-#: fortran/openmp.c:2290 fortran/openmp.c:5149
+#: fortran/openmp.c:2292 fortran/openmp.c:5151
#, gcc-internal-format, gfc-internal-format
msgid "Redefinition of predefined %s !$OMP DECLARE REDUCTION at %L"
msgstr ""
-#: fortran/openmp.c:2294 fortran/openmp.c:5153
+#: fortran/openmp.c:2296 fortran/openmp.c:5155
#, gcc-internal-format, gfc-internal-format
msgid "Redefinition of predefined !$OMP DECLARE REDUCTION at %L"
msgstr ""
-#: fortran/openmp.c:2299
+#: fortran/openmp.c:2301
#, gcc-internal-format, gfc-internal-format
msgid "Redefinition of !$OMP DECLARE REDUCTION at %L"
msgstr ""
-#: fortran/openmp.c:2301
+#: fortran/openmp.c:2303
#, gcc-internal-format, gfc-internal-format
msgid "Previous !$OMP DECLARE REDUCTION at %L"
msgstr ""
-#: fortran/openmp.c:2321
+#: fortran/openmp.c:2323
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after !$OMP DECLARE REDUCTION at %C"
msgstr ""
-#: fortran/openmp.c:2350
+#: fortran/openmp.c:2352
#, gcc-internal-format, gfc-internal-format
msgid ""
"Only the !$OMP DECLARE TARGET form without list is allowed in interface "
"block at %C"
msgstr ""
-#: fortran/openmp.c:2376
+#: fortran/openmp.c:2378
#, gcc-internal-format, gfc-internal-format
msgid "OMP DECLARE TARGET on a variable at %C is an element of a COMMON block"
msgstr ""
-#: fortran/openmp.c:2415
+#: fortran/openmp.c:2417
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after !$OMP DECLARE TARGET at %C"
msgstr ""
-#: fortran/openmp.c:2421
+#: fortran/openmp.c:2423
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in !$OMP DECLARE TARGET list at %C"
msgstr ""
-#: fortran/openmp.c:2451
+#: fortran/openmp.c:2453
#, gcc-internal-format, gfc-internal-format
msgid "Threadprivate variable at %C is an element of a COMMON block"
msgstr ""
-#: fortran/openmp.c:2488
+#: fortran/openmp.c:2490
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after OMP THREADPRIVATE at %C"
msgstr ""
-#: fortran/openmp.c:2495
+#: fortran/openmp.c:2497
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in !$OMP THREADPRIVATE list at %C"
msgstr ""
-#: fortran/openmp.c:2576
+#: fortran/openmp.c:2578
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after TASKWAIT clause at %C"
msgstr ""
-#: fortran/openmp.c:2590
+#: fortran/openmp.c:2592
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after TASKYIELD clause at %C"
msgstr ""
-#: fortran/openmp.c:2715
+#: fortran/openmp.c:2717
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after $OMP WORKSHARE statement at %C"
msgstr ""
-#: fortran/openmp.c:2729
+#: fortran/openmp.c:2731
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after $OMP MASTER statement at %C"
msgstr ""
-#: fortran/openmp.c:2743
+#: fortran/openmp.c:2745
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after $OMP ORDERED statement at %C"
msgstr ""
-#: fortran/openmp.c:2788
+#: fortran/openmp.c:2790
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after $OMP ATOMIC statement at %C"
msgstr ""
-#: fortran/openmp.c:2815
+#: fortran/openmp.c:2817
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after $OMP BARRIER statement at %C"
msgstr ""
-#: fortran/openmp.c:2829
+#: fortran/openmp.c:2831
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after $OMP TASKGROUP statement at %C"
msgstr ""
-#: fortran/openmp.c:2879
+#: fortran/openmp.c:2881
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after $OMP CANCELLATION POINT statement at %C"
msgstr ""
-#: fortran/openmp.c:2899
+#: fortran/openmp.c:2901
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after NOWAIT clause at %C"
msgstr ""
-#: fortran/openmp.c:2939
+#: fortran/openmp.c:2941
#, gcc-internal-format, gfc-internal-format
msgid "%s clause at %L requires a scalar INTEGER expression"
msgstr ""
-#: fortran/openmp.c:2950
+#: fortran/openmp.c:2952
#, gcc-internal-format, gfc-internal-format
msgid "INTEGER expression of %s clause at %L must be positive"
msgstr ""
-#: fortran/openmp.c:2961
+#: fortran/openmp.c:2963
#, gcc-internal-format
msgid "POINTER object %qs of derived type in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:2964
+#: fortran/openmp.c:2966
#, gcc-internal-format
msgid "Cray pointer object of derived type %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:2967
+#: fortran/openmp.c:2969
#, gcc-internal-format
msgid "Cray pointee object of derived type %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:2973
+#: fortran/openmp.c:2975
#, gcc-internal-format
msgid "POINTER object %qs of polymorphic type in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:2978
+#: fortran/openmp.c:2980
#, gcc-internal-format
msgid "Cray pointer object of polymorphic type %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:2983
+#: fortran/openmp.c:2985
#, gcc-internal-format
msgid "Cray pointee object of polymorphic type %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:2993 fortran/openmp.c:3519
+#: fortran/openmp.c:2995 fortran/openmp.c:3521
#, gcc-internal-format
msgid "Assumed size array %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:2996
+#: fortran/openmp.c:2998
#, gcc-internal-format
msgid "Assumed rank array %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3000
+#: fortran/openmp.c:3002
#, gcc-internal-format
msgid "Noncontiguous deferred shape array %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3008
+#: fortran/openmp.c:3010
#, gcc-internal-format
msgid "ALLOCATABLE object %qs of derived type in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3013
+#: fortran/openmp.c:3015
#, gcc-internal-format
msgid "ALLOCATABLE object %qs of polymorphic type in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3025 fortran/openmp.c:3509 fortran/openmp.c:3682
+#: fortran/openmp.c:3027 fortran/openmp.c:3511 fortran/openmp.c:3684
#, gcc-internal-format
msgid "POINTER object %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3030 fortran/openmp.c:3685
+#: fortran/openmp.c:3032 fortran/openmp.c:3687
#, gcc-internal-format
msgid "Cray pointer object %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3035 fortran/openmp.c:3688
+#: fortran/openmp.c:3037 fortran/openmp.c:3690
#, gcc-internal-format
msgid "Cray pointee object %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3040 fortran/openmp.c:3677
+#: fortran/openmp.c:3042 fortran/openmp.c:3679
#, gcc-internal-format
msgid "ALLOCATABLE object %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3043
+#: fortran/openmp.c:3045
#, gcc-internal-format
msgid "VALUE object %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3086
+#: fortran/openmp.c:3088
#, gcc-internal-format, gfc-internal-format
msgid "Implicitly declared function %s used in !$OMP DECLARE REDUCTION at %L "
msgstr ""
-#: fortran/openmp.c:3135
+#: fortran/openmp.c:3137
#, gcc-internal-format, gfc-internal-format
msgid ""
"Implicitly declared subroutine %s used in !$OMP DECLARE REDUCTION at %L "
msgstr ""
-#: fortran/openmp.c:3169 fortran/resolve.c:9384 fortran/resolve.c:10606
+#: fortran/openmp.c:3171 fortran/resolve.c:9395 fortran/resolve.c:10617
#, gcc-internal-format, gfc-internal-format
msgid "IF clause at %L requires a scalar LOGICAL expression"
msgstr ""
-#: fortran/openmp.c:3177
+#: fortran/openmp.c:3179
#, gcc-internal-format, gfc-internal-format
msgid "FINAL clause at %L requires a scalar LOGICAL expression"
msgstr ""
-#: fortran/openmp.c:3185
+#: fortran/openmp.c:3187
#, gcc-internal-format, gfc-internal-format
msgid "NUM_THREADS clause at %L requires a scalar INTEGER expression"
msgstr ""
-#: fortran/openmp.c:3193
+#: fortran/openmp.c:3195
#, gcc-internal-format, gfc-internal-format
msgid "SCHEDULE clause's chunk_size at %L requires a scalar INTEGER expression"
msgstr ""
-#: fortran/openmp.c:3208
+#: fortran/openmp.c:3210
#, gcc-internal-format
msgid "Variable %qs is not a dummy argument at %L"
msgstr ""
-#: fortran/openmp.c:3240
+#: fortran/openmp.c:3242
#, gcc-internal-format
msgid "Object %qs is not a variable at %L"
msgstr ""
-#: fortran/openmp.c:3256 fortran/openmp.c:3267 fortran/openmp.c:3275
-#: fortran/openmp.c:3286 fortran/openmp.c:3298 fortran/openmp.c:3313
-#: fortran/openmp.c:4956
+#: fortran/openmp.c:3258 fortran/openmp.c:3269 fortran/openmp.c:3277
+#: fortran/openmp.c:3288 fortran/openmp.c:3300 fortran/openmp.c:3315
+#: fortran/openmp.c:4958
#, gcc-internal-format
msgid "Symbol %qs present on multiple clauses at %L"
msgstr ""
-#: fortran/openmp.c:3320
+#: fortran/openmp.c:3322
#, gcc-internal-format
msgid "Array %qs is not permitted in reduction at %L"
msgstr ""
-#: fortran/openmp.c:3333
+#: fortran/openmp.c:3335
#, gcc-internal-format
msgid "Symbol %qs present on both FROM and TO clauses at %L"
msgstr ""
-#: fortran/openmp.c:3355
+#: fortran/openmp.c:3357
#, gcc-internal-format
msgid "Non-THREADPRIVATE object %qs in COPYIN clause at %L"
msgstr ""
-#: fortran/openmp.c:3363
+#: fortran/openmp.c:3365
#, gcc-internal-format
msgid "Assumed size array %qs in COPYPRIVATE clause at %L"
msgstr ""
-#: fortran/openmp.c:3366
+#: fortran/openmp.c:3368
#, gcc-internal-format
msgid "INTENT(IN) POINTER %qs in COPYPRIVATE clause at %L"
msgstr ""
-#: fortran/openmp.c:3374
+#: fortran/openmp.c:3376
#, gcc-internal-format
msgid "THREADPRIVATE object %qs in SHARED clause at %L"
msgstr ""
-#: fortran/openmp.c:3377
+#: fortran/openmp.c:3379
#, gcc-internal-format
msgid "Cray pointee %qs in SHARED clause at %L"
msgstr ""
-#: fortran/openmp.c:3380
+#: fortran/openmp.c:3382
#, gcc-internal-format
msgid "ASSOCIATE name %qs in SHARED clause at %L"
msgstr ""
-#: fortran/openmp.c:3395
+#: fortran/openmp.c:3397
#, gcc-internal-format
msgid ""
"%qs in ALIGNED clause must be POINTER, ALLOCATABLE, Cray pointer or C_PTR at "
"%L"
msgstr ""
-#: fortran/openmp.c:3407
+#: fortran/openmp.c:3409
#, gcc-internal-format
msgid ""
"%qs in ALIGNED clause at %L requires a scalar positive constant integer "
"alignment expression"
msgstr ""
-#: fortran/openmp.c:3427 fortran/openmp.c:3448
+#: fortran/openmp.c:3429 fortran/openmp.c:3450
#, gcc-internal-format
msgid "%qs in %s clause at %L is not a proper array section"
msgstr ""
-#: fortran/openmp.c:3431
+#: fortran/openmp.c:3433
#, gcc-internal-format, gfc-internal-format
msgid "Coarrays not supported in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3440
+#: fortran/openmp.c:3442
#, gcc-internal-format, gfc-internal-format
msgid "Stride should not be specified for array section in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3461
+#: fortran/openmp.c:3463
#, gcc-internal-format
msgid "%qs in DEPEND clause at %L is a zero size array section"
msgstr ""
-#: fortran/openmp.c:3483 fortran/openmp.c:3495
+#: fortran/openmp.c:3485 fortran/openmp.c:3497
#, gcc-internal-format
msgid "THREADPRIVATE object %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3486 fortran/openmp.c:3498
+#: fortran/openmp.c:3488 fortran/openmp.c:3500
#, gcc-internal-format
msgid "Cray pointee %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3501
+#: fortran/openmp.c:3503
#, gcc-internal-format
msgid "ASSOCIATE name %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3506
+#: fortran/openmp.c:3508
#, gcc-internal-format
msgid "Procedure pointer %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3512
+#: fortran/openmp.c:3514
#, gcc-internal-format
msgid "Cray pointer %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3522
+#: fortran/openmp.c:3524
#, gcc-internal-format
msgid "Variable %qs in %s clause is used in NAMELIST statement at %L"
msgstr ""
#. case OMP_LIST_REDUCTION:
-#: fortran/openmp.c:3532
+#: fortran/openmp.c:3534
#, gcc-internal-format
msgid "INTENT(IN) POINTER %qs in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:3625
+#: fortran/openmp.c:3627
#, gcc-internal-format, gfc-internal-format
msgid "!$OMP DECLARE REDUCTION %s not found for type %s at %L"
msgstr ""
-#: fortran/openmp.c:3648
+#: fortran/openmp.c:3650
#, gcc-internal-format
msgid "LINEAR variable %qs must be INTEGER at %L"
msgstr ""
-#: fortran/openmp.c:3651
+#: fortran/openmp.c:3653
#, gcc-internal-format
msgid "LINEAR dummy argument %qs must have VALUE attribute at %L"
msgstr ""
-#: fortran/openmp.c:3659
+#: fortran/openmp.c:3661
#, gcc-internal-format
msgid ""
"%qs in LINEAR clause at %L requires a scalar integer linear-step expression"
msgstr ""
-#: fortran/openmp.c:3663
+#: fortran/openmp.c:3665
#, gcc-internal-format
msgid ""
"%qs in LINEAR clause at %L requires a constant integer linear-step expression"
msgstr ""
-#: fortran/openmp.c:3707
+#: fortran/openmp.c:3709
#, gcc-internal-format, gfc-internal-format
msgid "SAFELEN clause at %L requires a scalar INTEGER expression"
msgstr ""
-#: fortran/openmp.c:3715
+#: fortran/openmp.c:3717
#, gcc-internal-format, gfc-internal-format
msgid "SIMDLEN clause at %L requires a scalar INTEGER expression"
msgstr ""
-#: fortran/openmp.c:3723
+#: fortran/openmp.c:3725
#, gcc-internal-format, gfc-internal-format
msgid "NUM_TEAMS clause at %L requires a scalar INTEGER expression"
msgstr ""
-#: fortran/openmp.c:3731
+#: fortran/openmp.c:3733
#, gcc-internal-format, gfc-internal-format
msgid "DEVICE clause at %L requires a scalar INTEGER expression"
msgstr ""
-#: fortran/openmp.c:3739
+#: fortran/openmp.c:3741
#, gcc-internal-format, gfc-internal-format
msgid ""
"DIST_SCHEDULE clause's chunk_size at %L requires a scalar INTEGER expression"
msgstr ""
-#: fortran/openmp.c:3747
+#: fortran/openmp.c:3749
#, gcc-internal-format, gfc-internal-format
msgid "THREAD_LIMIT clause at %L requires a scalar INTEGER expression"
msgstr ""
-#: fortran/openmp.c:3875
+#: fortran/openmp.c:3877
#, gcc-internal-format, gfc-internal-format
msgid ""
"!$OMP ATOMIC statement must set a scalar variable of intrinsic type at %L"
msgstr ""
-#: fortran/openmp.c:3900
+#: fortran/openmp.c:3902
#, 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:3905
+#: fortran/openmp.c:3907
#, 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:3927 fortran/openmp.c:4218
+#: fortran/openmp.c:3929 fortran/openmp.c:4220
#, 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:3942
+#: fortran/openmp.c:3944
#, 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:3949 fortran/openmp.c:4225
+#: fortran/openmp.c:3951 fortran/openmp.c:4227
#, 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:3965
+#: fortran/openmp.c:3967
#, gcc-internal-format, gfc-internal-format
msgid "!$OMP ATOMIC with ALLOCATABLE variable at %L"
msgstr ""
-#: fortran/openmp.c:4007
+#: fortran/openmp.c:4009
#, 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:4055
+#: fortran/openmp.c:4057
#, 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:4069
+#: fortran/openmp.c:4071
#, 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:4101
+#: fortran/openmp.c:4103
#, 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:4125
+#: fortran/openmp.c:4127
#, 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:4132
+#: fortran/openmp.c:4134
#, 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:4149
+#: fortran/openmp.c:4151
#, gcc-internal-format
msgid ""
"!$OMP ATOMIC intrinsic arguments except one must not reference %qs at %L"
msgstr ""
-#: fortran/openmp.c:4156
+#: fortran/openmp.c:4158
#, gcc-internal-format, gfc-internal-format
msgid "!$OMP ATOMIC intrinsic arguments must be scalar at %L"
msgstr ""
-#: fortran/openmp.c:4164
+#: fortran/openmp.c:4166
#, gcc-internal-format
msgid "First or last !$OMP ATOMIC intrinsic argument must be %qs at %L"
msgstr ""
-#: fortran/openmp.c:4182
+#: fortran/openmp.c:4184
#, 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:4196
+#: fortran/openmp.c:4198
#, 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:4473
+#: fortran/openmp.c:4475
#, gcc-internal-format, gfc-internal-format
msgid "%s cannot be a DO WHILE or DO without loop control at %L"
msgstr ""
-#: fortran/openmp.c:4479
+#: fortran/openmp.c:4481
#, gcc-internal-format, gfc-internal-format
msgid "%s cannot be a DO CONCURRENT loop at %L"
msgstr ""
-#: fortran/openmp.c:4485
+#: fortran/openmp.c:4487
#, gcc-internal-format, gfc-internal-format
msgid "%s iteration variable must be of type integer at %L"
msgstr ""
-#: fortran/openmp.c:4489
+#: fortran/openmp.c:4491
#, gcc-internal-format, gfc-internal-format
msgid "%s iteration variable must not be THREADPRIVATE at %L"
msgstr ""
-#: fortran/openmp.c:4502
+#: fortran/openmp.c:4504
#, gcc-internal-format, gfc-internal-format
msgid ""
"%s iteration variable present on clause other than PRIVATE or LASTPRIVATE at "
"%L"
msgstr ""
-#: fortran/openmp.c:4506
+#: fortran/openmp.c:4508
#, gcc-internal-format, gfc-internal-format
msgid "%s iteration variable present on clause other than LASTPRIVATE at %L"
msgstr ""
-#: fortran/openmp.c:4510
+#: fortran/openmp.c:4512
#, gcc-internal-format, gfc-internal-format
msgid "%s iteration variable present on clause other than LINEAR at %L"
msgstr ""
-#: fortran/openmp.c:4528
+#: fortran/openmp.c:4530
#, gcc-internal-format, gfc-internal-format
msgid "%s collapsed loops don't form rectangular iteration space at %L"
msgstr ""
-#: fortran/openmp.c:4542
+#: fortran/openmp.c:4544
#, gcc-internal-format, gfc-internal-format
msgid "collapsed %s loops not perfectly nested at %L"
msgstr ""
-#: fortran/openmp.c:4551 fortran/openmp.c:4559
+#: fortran/openmp.c:4553 fortran/openmp.c:4561
#, gcc-internal-format, gfc-internal-format
msgid "not enough DO loops for collapsed %s at %L"
msgstr ""
-#: fortran/openmp.c:4643 fortran/openmp.c:4656
+#: fortran/openmp.c:4645 fortran/openmp.c:4658
#, gcc-internal-format, gfc-internal-format
msgid "The %s directive cannot be specified within a %s region at %L"
msgstr ""
-#: fortran/openmp.c:4675
+#: fortran/openmp.c:4677
#, 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:4681
+#: fortran/openmp.c:4683
#, gcc-internal-format, gfc-internal-format
msgid "!$ACC LOOP iteration variable must be of type integer at %L"
msgstr ""
-#: fortran/openmp.c:4697
+#: fortran/openmp.c:4699
#, gcc-internal-format, gfc-internal-format
msgid "!$ACC LOOP %s loops don't form rectangular iteration space at %L"
msgstr ""
-#: fortran/openmp.c:4711
+#: fortran/openmp.c:4713
#, gcc-internal-format, gfc-internal-format
msgid "%s !$ACC LOOP loops not perfectly nested at %L"
msgstr ""
-#: fortran/openmp.c:4721 fortran/openmp.c:4730
+#: fortran/openmp.c:4723 fortran/openmp.c:4732
#, gcc-internal-format, gfc-internal-format
msgid "not enough DO loops for %s !$ACC LOOP at %L"
msgstr ""
-#: fortran/openmp.c:4745 fortran/openmp.c:4752
+#: fortran/openmp.c:4747 fortran/openmp.c:4754
#, gcc-internal-format, gfc-internal-format
msgid "!$ACC LOOP %s in PARALLEL region doesn't allow %s arguments at %L"
msgstr ""
-#: fortran/openmp.c:4774
+#: fortran/openmp.c:4776
#, 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:4778 fortran/openmp.c:4782
+#: fortran/openmp.c:4780 fortran/openmp.c:4784
#, 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:4789
+#: fortran/openmp.c:4791
#, 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:4793
+#: fortran/openmp.c:4795
#, 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:4799
+#: fortran/openmp.c:4801
#, 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:4811
+#: fortran/openmp.c:4813
#, gcc-internal-format, gfc-internal-format
msgid "Clause SEQ conflicts with INDEPENDENT at %L"
msgstr ""
-#: fortran/openmp.c:4813
+#: fortran/openmp.c:4815
#, gcc-internal-format, gfc-internal-format
msgid "Clause SEQ conflicts with GANG at %L"
msgstr ""
-#: fortran/openmp.c:4815
+#: fortran/openmp.c:4817
#, gcc-internal-format, gfc-internal-format
msgid "Clause SEQ conflicts with WORKER at %L"
msgstr ""
-#: fortran/openmp.c:4817
+#: fortran/openmp.c:4819
#, gcc-internal-format, gfc-internal-format
msgid "Clause SEQ conflicts with VECTOR at %L"
msgstr ""
-#: fortran/openmp.c:4819
+#: fortran/openmp.c:4821
#, gcc-internal-format, gfc-internal-format
msgid "Clause SEQ conflicts with AUTO at %L"
msgstr ""
-#: fortran/openmp.c:4824
+#: fortran/openmp.c:4826
#, gcc-internal-format, gfc-internal-format
msgid "Clause AUTO conflicts with GANG at %L"
msgstr ""
-#: fortran/openmp.c:4826
+#: fortran/openmp.c:4828
#, gcc-internal-format, gfc-internal-format
msgid "Clause AUTO conflicts with WORKER at %L"
msgstr ""
-#: fortran/openmp.c:4828
+#: fortran/openmp.c:4830
#, gcc-internal-format, gfc-internal-format
msgid "Clause AUTO conflicts with VECTOR at %L"
msgstr ""
-#: fortran/openmp.c:4832
+#: fortran/openmp.c:4834
#, 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:4867
+#: fortran/openmp.c:4869
#, gcc-internal-format, gfc-internal-format
msgid "TILE requires constant expression at %L"
msgstr ""
-#: fortran/openmp.c:4932
+#: fortran/openmp.c:4934
#, gcc-internal-format
msgid "PARAMETER object %qs is not allowed at %L"
msgstr ""
-#: fortran/openmp.c:4939
+#: fortran/openmp.c:4941
#, gcc-internal-format
msgid "Array sections: %qs not allowed in $!ACC DECLARE at %L"
msgstr ""
-#: fortran/openmp.c:5058
+#: fortran/openmp.c:5060
#, gcc-internal-format, gfc-internal-format
msgid "OMP TARGET UPDATE at %L requires at least one TO or FROM clause"
msgstr ""
-#: fortran/openmp.c:5079
+#: fortran/openmp.c:5081
#, gcc-internal-format
msgid "!$OMP DECLARE SIMD should refer to containing procedure %qs at %L"
msgstr ""
-#: fortran/openmp.c:5103
+#: fortran/openmp.c:5105
#, 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:5111
+#: fortran/openmp.c:5113
#, 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:5140
+#: fortran/openmp.c:5142
#, gcc-internal-format, gfc-internal-format
msgid "Invalid operator for !$OMP DECLARE REDUCTION %s at %L"
msgstr ""
-#: fortran/openmp.c:5162
+#: fortran/openmp.c:5164
#, gcc-internal-format, gfc-internal-format
msgid "CHARACTER length in !$OMP DECLARE REDUCTION %s not constant at %L"
msgstr ""
-#: fortran/openmp.c:5178
+#: fortran/openmp.c:5180
#, gcc-internal-format, gfc-internal-format
msgid ""
"Subroutine call with alternate returns in combiner of !$OMP DECLARE "
"REDUCTION at %L"
msgstr ""
-#: fortran/openmp.c:5193
+#: fortran/openmp.c:5195
#, 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:5203
+#: fortran/openmp.c:5205
#, 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:5211
+#: fortran/openmp.c:5213
#, gcc-internal-format, gfc-internal-format
msgid ""
"Missing INITIALIZER clause for !$OMP DECLARE REDUCTION of derived type "
@@ -54216,27 +54369,27 @@ msgstr ""
msgid "Argument to %<-ffpe-summary%> is not valid: %s"
msgstr ""
-#: fortran/options.c:520
+#: fortran/options.c:529
#, gcc-internal-format
msgid "Argument to %<-fcheck%> is not valid: %s"
msgstr ""
-#: fortran/options.c:569
+#: fortran/options.c:578
#, gcc-internal-format
msgid "%<-static-libgfortran%> is not supported in this configuration"
msgstr ""
-#: fortran/options.c:592
+#: fortran/options.c:601
#, gcc-internal-format, gfc-internal-format
msgid "Maximum supported identifier length is %d"
msgstr ""
-#: fortran/options.c:612
+#: fortran/options.c:621
#, gcc-internal-format
msgid "Unrecognized option to %<-finit-logical%>: %s"
msgstr ""
-#: fortran/options.c:628
+#: fortran/options.c:637
#, gcc-internal-format
msgid "The value of n in %<-finit-character=n%> must be between 0 and 127"
msgstr ""
@@ -54642,102 +54795,102 @@ msgstr ""
msgid "ASSOCIATE construct at %C"
msgstr ""
-#: fortran/parse.c:4234
+#: fortran/parse.c:4235
#, gcc-internal-format, gfc-internal-format
msgid "Statement label in ENDDO at %C doesn't match DO label"
msgstr ""
-#: fortran/parse.c:4250
+#: fortran/parse.c:4251
#, gcc-internal-format, gfc-internal-format
msgid "Named block DO at %L requires matching ENDDO name"
msgstr ""
-#: fortran/parse.c:4431
+#: fortran/parse.c:4432
#, gcc-internal-format, gfc-internal-format
msgid "Missing !$OMP END ATOMIC after !$OMP ATOMIC CAPTURE at %C"
msgstr ""
-#: fortran/parse.c:4447 fortran/parse.c:4506
+#: fortran/parse.c:4448 fortran/parse.c:4507
#, gcc-internal-format, gfc-internal-format
msgid "OpenACC directive inside of CRITICAL block at %C"
msgstr ""
-#: fortran/parse.c:4481
+#: fortran/parse.c:4482
#, gcc-internal-format, gfc-internal-format
msgid "Expecting %s at %C"
msgstr ""
-#: fortran/parse.c:4525
+#: fortran/parse.c:4526
#, gcc-internal-format, gfc-internal-format
msgid "Expected DO loop at %C"
msgstr ""
-#: fortran/parse.c:4545
+#: fortran/parse.c:4546
#, gcc-internal-format, gfc-internal-format
msgid "Redundant !$ACC END LOOP at %C"
msgstr ""
-#: fortran/parse.c:4758
+#: fortran/parse.c:4759
#, gcc-internal-format, gfc-internal-format
msgid "Name after !$omp critical and !$omp end critical does not match at %C"
msgstr ""
-#: fortran/parse.c:4815
+#: fortran/parse.c:4816
#, gcc-internal-format, gfc-internal-format
msgid "%s statement at %C cannot terminate a non-block DO loop"
msgstr ""
-#: fortran/parse.c:4829
+#: fortran/parse.c:4830
#, gcc-internal-format, gfc-internal-format
msgid "DATA statement at %C after the first executable statement"
msgstr ""
-#: fortran/parse.c:5060
+#: fortran/parse.c:5061
#, gcc-internal-format
msgid "Contained procedure %qs at %C is already ambiguous"
msgstr ""
-#: fortran/parse.c:5117
+#: fortran/parse.c:5118
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected %s statement in CONTAINS section at %C"
msgstr ""
-#: fortran/parse.c:5142
+#: fortran/parse.c:5143
#, gcc-internal-format, gfc-internal-format
msgid "CONTAINS statement without FUNCTION or SUBROUTINE statement at %C"
msgstr ""
-#: fortran/parse.c:5254
+#: fortran/parse.c:5255
#, gcc-internal-format, gfc-internal-format
msgid "CONTAINS statement at %C is already in a contained program unit"
msgstr ""
-#: fortran/parse.c:5300
+#: fortran/parse.c:5301
#, gcc-internal-format
msgid "gfc_global_used(): Bad type"
msgstr ""
-#: fortran/parse.c:5305
+#: fortran/parse.c:5306
#, gcc-internal-format
msgid "Global binding name %qs at %L is already being used as a %s at %L"
msgstr ""
-#: fortran/parse.c:5308
+#: fortran/parse.c:5309
#, gcc-internal-format
msgid "Global name %qs at %L is already being used as a %s at %L"
msgstr ""
-#: fortran/parse.c:5329
+#: fortran/parse.c:5330
#, gcc-internal-format, gfc-internal-format
msgid "Blank BLOCK DATA at %C conflicts with prior BLOCK DATA at %L"
msgstr ""
-#: fortran/parse.c:5355
+#: fortran/parse.c:5356
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected %s statement in BLOCK DATA at %C"
msgstr ""
-#: fortran/parse.c:5440
+#: fortran/parse.c:5441
#, gcc-internal-format, gfc-internal-format
msgid "Unexpected %s statement in MODULE at %C"
msgstr ""
@@ -54745,7 +54898,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:5827
+#: fortran/parse.c:5828
#, gcc-internal-format, gfc-internal-format
msgid "Two main PROGRAMs at %L and %C"
msgstr ""
@@ -54942,186 +55095,191 @@ msgstr ""
msgid "Syntax error in COMPLEX constant at %C"
msgstr ""
-#: fortran/primary.c:1637
+#: fortran/primary.c:1557
+#, gcc-internal-format, gfc-internal-format
+msgid "Namelist '%s' can not be an argument at %L"
+msgstr ""
+
+#: fortran/primary.c:1643
#, gcc-internal-format
msgid "Keyword %qs at %C has already appeared in the current argument list"
msgstr ""
-#: fortran/primary.c:1701
+#: fortran/primary.c:1707
#, gcc-internal-format, gfc-internal-format
msgid "argument list function at %C"
msgstr ""
-#: fortran/primary.c:1769
+#: fortran/primary.c:1775
#, gcc-internal-format, gfc-internal-format
msgid "Expected alternate return label at %C"
msgstr ""
-#: fortran/primary.c:1791
+#: fortran/primary.c:1797
#, gcc-internal-format, gfc-internal-format
msgid "Missing keyword name in actual argument list at %C"
msgstr ""
-#: fortran/primary.c:1837
+#: fortran/primary.c:1843
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in argument list at %C"
msgstr ""
-#: fortran/primary.c:1858
+#: fortran/primary.c:1864
#, gcc-internal-format
msgid "extend_ref(): Bad tail"
msgstr ""
-#: fortran/primary.c:1896
+#: fortran/primary.c:1902
#, gcc-internal-format, gfc-internal-format
msgid ""
"Array section designator, e.g. '(:)', is required besides the coarray "
"designator '[...]' at %C"
msgstr ""
-#: fortran/primary.c:1904
+#: fortran/primary.c:1910
#, gcc-internal-format
msgid "Coarray designator at %C but %qs is not a coarray"
msgstr ""
-#: fortran/primary.c:1975
+#: fortran/primary.c:1981
#, gcc-internal-format
msgid "Symbol %qs at %C has no IMPLICIT type"
msgstr ""
-#: fortran/primary.c:1981
+#: fortran/primary.c:1987
#, gcc-internal-format
msgid "Unexpected %<%%%> for nonderived-type variable %qs at %C"
msgstr ""
-#: fortran/primary.c:1999
+#: fortran/primary.c:2005
#, gcc-internal-format, gfc-internal-format
msgid "Expected structure component name at %C"
msgstr ""
-#: fortran/primary.c:2050
+#: fortran/primary.c:2056
#, gcc-internal-format, gfc-internal-format
msgid "Expected argument list at %C"
msgstr ""
-#: fortran/primary.c:2081
+#: fortran/primary.c:2087
#, gcc-internal-format
msgid "Procedure pointer component %qs requires an argument list at %C"
msgstr ""
-#: fortran/primary.c:2169
+#: fortran/primary.c:2175
#, gcc-internal-format, gfc-internal-format
msgid "Coindexed procedure-pointer component at %C"
msgstr ""
-#: fortran/primary.c:2204
+#: fortran/primary.c:2210
#, gcc-internal-format
msgid "gfc_variable_attr(): Expression isn't a variable"
msgstr ""
-#: fortran/primary.c:2259
+#: fortran/primary.c:2265
#, gcc-internal-format
msgid "gfc_variable_attr(): Bad array reference"
msgstr ""
-#: fortran/primary.c:2429
+#: fortran/primary.c:2435
#, gcc-internal-format, gfc-internal-format
msgid "Structure constructor with missing optional arguments at %C"
msgstr ""
-#: fortran/primary.c:2438
+#: fortran/primary.c:2444
#, gcc-internal-format
msgid ""
"No initializer for allocatable component '%qs' given in the structure "
"constructor at %C"
msgstr ""
-#: fortran/primary.c:2445
+#: fortran/primary.c:2451
#, gcc-internal-format
msgid ""
"No initializer for component %qs given in the structure constructor at %C!"
msgstr ""
-#: fortran/primary.c:2493
+#: fortran/primary.c:2499
#, gcc-internal-format
msgid "Can't construct ABSTRACT type %qs at %L"
msgstr ""
-#: fortran/primary.c:2513
+#: fortran/primary.c:2519
#, gcc-internal-format, gfc-internal-format
msgid "Structure constructor with named arguments at %C"
msgstr ""
-#: fortran/primary.c:2528
+#: fortran/primary.c:2534
#, gcc-internal-format, gfc-internal-format
msgid "Component initializer without name after component named %s at %L!"
msgstr ""
-#: fortran/primary.c:2533
+#: fortran/primary.c:2539
#, gcc-internal-format, gfc-internal-format
msgid "Too many components in structure constructor at %L!"
msgstr ""
-#: fortran/primary.c:2570
+#: fortran/primary.c:2576
#, gcc-internal-format
msgid "Component %qs is initialized twice in the structure constructor at %L!"
msgstr ""
-#: fortran/primary.c:2582
+#: fortran/primary.c:2588
#, gcc-internal-format
msgid ""
"Coindexed expression to pointer component %qs in structure constructor at %L!"
msgstr ""
-#: fortran/primary.c:2636
+#: fortran/primary.c:2642
#, gcc-internal-format
msgid ""
"component %qs at %L has already been set by a parent derived type constructor"
msgstr ""
-#: fortran/primary.c:2825
+#: fortran/primary.c:2831
#, gcc-internal-format
msgid ""
"%qs at %C is the name of a recursive function and so refers to the result "
"variable. Use an explicit RESULT variable for direct recursion (12.5.2.1)"
msgstr ""
-#: fortran/primary.c:2948
+#: fortran/primary.c:2954
#, gcc-internal-format
msgid "Unexpected use of subroutine name %qs at %C"
msgstr ""
-#: fortran/primary.c:2980
+#: fortran/primary.c:2986
#, gcc-internal-format
msgid "Statement function %qs requires argument list at %C"
msgstr ""
-#: fortran/primary.c:2983
+#: fortran/primary.c:2989
#, gcc-internal-format
msgid "Function %qs requires an argument list at %C"
msgstr ""
-#: fortran/primary.c:3033
+#: fortran/primary.c:3039
#, gcc-internal-format
msgid "Missing argument to %qs at %C"
msgstr ""
-#: fortran/primary.c:3189
+#: fortran/primary.c:3195
#, gcc-internal-format
msgid "Missing argument list in function %qs at %C"
msgstr ""
-#: fortran/primary.c:3223
+#: fortran/primary.c:3233
#, gcc-internal-format, gfc-internal-format
msgid "Symbol at %C is not appropriate for an expression"
msgstr ""
-#: fortran/primary.c:3323
+#: fortran/primary.c:3333
#, gcc-internal-format, gfc-internal-format
msgid "Named constant at %C in an EQUIVALENCE"
msgstr ""
-#: fortran/primary.c:3357
+#: fortran/primary.c:3367
#, gcc-internal-format
msgid "%qs at %C is not a variable"
msgstr ""
@@ -55507,7 +55665,7 @@ msgid ""
"Declare it RECURSIVE or use %<-frecursive%>"
msgstr ""
-#: fortran/resolve.c:1776 fortran/resolve.c:8921 fortran/resolve.c:10546
+#: fortran/resolve.c:1776 fortran/resolve.c:8932 fortran/resolve.c:10557
#, gcc-internal-format, gfc-internal-format
msgid "Label %d referenced at %L is never defined"
msgstr ""
@@ -55624,7 +55782,7 @@ msgstr ""
msgid "Unable to resolve the specific function %qs at %L"
msgstr ""
-#: fortran/resolve.c:2740 fortran/resolve.c:15282
+#: fortran/resolve.c:2740 fortran/resolve.c:15308
#, gcc-internal-format
msgid "Function %qs at %L has no IMPLICIT type"
msgstr ""
@@ -56186,69 +56344,76 @@ msgid ""
"parameter as in the declaration"
msgstr ""
-#: fortran/resolve.c:7217 fortran/resolve.c:7224
+#: fortran/resolve.c:7217 fortran/resolve.c:7232
#, gcc-internal-format, gfc-internal-format
msgid "Array specification required in ALLOCATE statement at %L"
msgstr ""
-#: fortran/resolve.c:7239
+#: fortran/resolve.c:7224
+#, gcc-internal-format, gfc-internal-format
+msgid ""
+"Array specification or array-valued SOURCE= expression required in ALLOCATE "
+"statement at %L"
+msgstr ""
+
+#: fortran/resolve.c:7247
#, gcc-internal-format, gfc-internal-format
msgid "Coarray specification required in ALLOCATE statement at %L"
msgstr ""
-#: fortran/resolve.c:7266
+#: fortran/resolve.c:7274
#, gcc-internal-format, gfc-internal-format
msgid "Bad array specification in ALLOCATE statement at %L"
msgstr ""
-#: fortran/resolve.c:7285
+#: fortran/resolve.c:7293
#, gcc-internal-format
msgid ""
"%qs must not appear in the array specification at %L in the same ALLOCATE "
"statement where it is itself allocated"
msgstr ""
-#: fortran/resolve.c:7300
+#: fortran/resolve.c:7308
#, gcc-internal-format, gfc-internal-format
msgid "Expected '*' in coindex specification in ALLOCATE statement at %L"
msgstr ""
-#: fortran/resolve.c:7311
+#: fortran/resolve.c:7319
#, gcc-internal-format, gfc-internal-format
msgid "Bad coarray specification in ALLOCATE statement at %L"
msgstr ""
-#: fortran/resolve.c:7343
+#: fortran/resolve.c:7351
#, gcc-internal-format, gfc-internal-format
msgid "Stat-variable at %L must be a scalar INTEGER variable"
msgstr ""
-#: fortran/resolve.c:7366
+#: fortran/resolve.c:7374
#, gcc-internal-format, gfc-internal-format
msgid "Stat-variable at %L shall not be %sd within the same %s statement"
msgstr ""
-#: fortran/resolve.c:7377
+#: fortran/resolve.c:7385
#, gcc-internal-format, gfc-internal-format
msgid "ERRMSG at %L is useless without a STAT tag"
msgstr ""
-#: fortran/resolve.c:7388
+#: fortran/resolve.c:7396
#, gcc-internal-format, gfc-internal-format
msgid "Errmsg-variable at %L must be a scalar CHARACTER variable"
msgstr ""
-#: fortran/resolve.c:7411
+#: fortran/resolve.c:7419
#, gcc-internal-format, gfc-internal-format
msgid "Errmsg-variable at %L shall not be %sd within the same %s statement"
msgstr ""
-#: fortran/resolve.c:7441
+#: fortran/resolve.c:7449
#, gcc-internal-format, gfc-internal-format
msgid "Allocate-object at %L also appears at %L"
msgstr ""
-#: fortran/resolve.c:7447 fortran/resolve.c:7453
+#: fortran/resolve.c:7455 fortran/resolve.c:7461
#, gcc-internal-format, gfc-internal-format
msgid "Allocate-object at %L is subobject of object at %L"
msgstr ""
@@ -56257,234 +56422,234 @@ msgstr ""
#. element in the list. Either way, we must
#. issue an error and get the next case from P.
#. FIXME: Sort P and Q by line number.
-#: fortran/resolve.c:7665
+#: fortran/resolve.c:7673
#, gcc-internal-format, gfc-internal-format
msgid "CASE label at %L overlaps with CASE label at %L"
msgstr ""
-#: fortran/resolve.c:7716
+#: fortran/resolve.c:7724
#, gcc-internal-format, gfc-internal-format
msgid "Expression in CASE statement at %L must be of type %s"
msgstr ""
-#: fortran/resolve.c:7727
+#: fortran/resolve.c:7735
#, gcc-internal-format, gfc-internal-format
msgid "Expression in CASE statement at %L must be of kind %d"
msgstr ""
-#: fortran/resolve.c:7740
+#: fortran/resolve.c:7748
#, gcc-internal-format, gfc-internal-format
msgid "Expression in CASE statement at %L must be scalar"
msgstr ""
-#: fortran/resolve.c:7786
+#: fortran/resolve.c:7794
#, gcc-internal-format, gfc-internal-format
msgid ""
"Selection expression in computed GOTO statement at %L must be a scalar "
"integer expression"
msgstr ""
-#: fortran/resolve.c:7805
+#: fortran/resolve.c:7813
#, gcc-internal-format, gfc-internal-format
msgid "Argument of SELECT statement at %L cannot be %s"
msgstr ""
-#: fortran/resolve.c:7815
+#: fortran/resolve.c:7823
#, gcc-internal-format, gfc-internal-format
msgid "Argument of SELECT statement at %L must be a scalar expression"
msgstr ""
-#: fortran/resolve.c:7833 fortran/resolve.c:7841
+#: fortran/resolve.c:7841 fortran/resolve.c:7849
#, gcc-internal-format, gfc-internal-format
msgid "Expression in CASE statement at %L is not in the range of %s"
msgstr ""
-#: fortran/resolve.c:7903 fortran/resolve.c:8339
+#: fortran/resolve.c:7911 fortran/resolve.c:8350
#, gcc-internal-format, gfc-internal-format
msgid ""
"The DEFAULT CASE at %L cannot be followed by a second DEFAULT CASE at %L"
msgstr ""
-#: fortran/resolve.c:7929
+#: fortran/resolve.c:7937
#, gcc-internal-format, gfc-internal-format
msgid "Logical range in CASE statement at %L is not allowed"
msgstr ""
-#: fortran/resolve.c:7941
+#: fortran/resolve.c:7949
#, gcc-internal-format, gfc-internal-format
msgid "Constant logical value in CASE statement is repeated at %L"
msgstr ""
-#: fortran/resolve.c:7956
+#: fortran/resolve.c:7964
#, gcc-internal-format, gfc-internal-format
msgid "Range specification at %L can never be matched"
msgstr ""
-#: fortran/resolve.c:8059
+#: fortran/resolve.c:8067
#, gcc-internal-format, gfc-internal-format
msgid "Logical SELECT CASE block at %L has more that two cases"
msgstr ""
-#: fortran/resolve.c:8134
+#: fortran/resolve.c:8142
#, gcc-internal-format
msgid "Associate-name %qs at %L is used as array"
msgstr ""
-#: fortran/resolve.c:8145
+#: fortran/resolve.c:8153
#, gcc-internal-format, gfc-internal-format
msgid "CLASS selector at %L needs a temporary which is not yet implemented"
msgstr ""
-#: fortran/resolve.c:8258
+#: fortran/resolve.c:8269
#, gcc-internal-format, gfc-internal-format
msgid "Selector shall be polymorphic in SELECT TYPE statement at %L"
msgstr ""
-#: fortran/resolve.c:8275 fortran/resolve.c:8287
+#: fortran/resolve.c:8286 fortran/resolve.c:8298
#, gcc-internal-format, gfc-internal-format
msgid "Selector at %L must not be coindexed"
msgstr ""
-#: fortran/resolve.c:8303
+#: fortran/resolve.c:8314
#, gcc-internal-format
msgid "Derived type %qs at %L must be extensible"
msgstr ""
-#: fortran/resolve.c:8315
+#: fortran/resolve.c:8326
#, gcc-internal-format
msgid "Derived type %qs at %L must be an extension of %qs"
msgstr ""
-#: fortran/resolve.c:8318
+#: fortran/resolve.c:8329
#, gcc-internal-format
msgid "Unexpected intrinsic type %qs at %L"
msgstr ""
-#: fortran/resolve.c:8327
+#: fortran/resolve.c:8338
#, gcc-internal-format, gfc-internal-format
msgid ""
"The type-spec at %L shall specify that each length type parameter is assumed"
msgstr ""
-#: fortran/resolve.c:8519
+#: fortran/resolve.c:8530
#, gcc-internal-format, gfc-internal-format
msgid "Double CLASS IS block in SELECT TYPE statement at %L"
msgstr ""
-#: fortran/resolve.c:8608
+#: fortran/resolve.c:8619
#, gcc-internal-format, gfc-internal-format
msgid "Invalid context for NULL () intrinsic at %L"
msgstr ""
#. FIXME: Test for defined input/output.
-#: fortran/resolve.c:8636
+#: fortran/resolve.c:8647
#, gcc-internal-format, gfc-internal-format
msgid ""
"Data transfer element at %L cannot be polymorphic unless it is processed by "
"a defined input/output procedure"
msgstr ""
-#: fortran/resolve.c:8648
+#: fortran/resolve.c:8659
#, gcc-internal-format, gfc-internal-format
msgid ""
"Data transfer element at %L cannot have POINTER components unless it is "
"processed by a defined input/output procedure"
msgstr ""
-#: fortran/resolve.c:8657
+#: fortran/resolve.c:8668
#, gcc-internal-format, gfc-internal-format
msgid "Data transfer element at %L cannot have procedure pointer components"
msgstr ""
-#: fortran/resolve.c:8664
+#: fortran/resolve.c:8675
#, gcc-internal-format, gfc-internal-format
msgid ""
"Data transfer element at %L cannot have ALLOCATABLE components unless it is "
"processed by a defined input/output procedure"
msgstr ""
-#: fortran/resolve.c:8675 fortran/resolve.c:8681
+#: fortran/resolve.c:8686 fortran/resolve.c:8692
#, gcc-internal-format, gfc-internal-format
msgid "Data transfer element at %L cannot have PRIVATE components"
msgstr ""
-#: fortran/resolve.c:8695
+#: fortran/resolve.c:8706
#, gcc-internal-format, gfc-internal-format
msgid ""
"Data transfer element at %L cannot be a full reference to an assumed-size "
"array"
msgstr ""
-#: fortran/resolve.c:8752
+#: fortran/resolve.c:8763
#, gcc-internal-format, gfc-internal-format
msgid "Lock variable at %L must be a scalar of type LOCK_TYPE"
msgstr ""
-#: fortran/resolve.c:8762
+#: fortran/resolve.c:8773
#, gcc-internal-format, gfc-internal-format
msgid "Event variable at %L must be a scalar of type EVENT_TYPE"
msgstr ""
-#: fortran/resolve.c:8766
+#: fortran/resolve.c:8777
#, gcc-internal-format, gfc-internal-format
msgid "Event variable argument at %L must be a coarray or coindexed"
msgstr ""
-#: fortran/resolve.c:8769
+#: fortran/resolve.c:8780
#, gcc-internal-format, gfc-internal-format
msgid "Event variable argument at %L must be a coarray but not coindexed"
msgstr ""
-#: fortran/resolve.c:8776 fortran/resolve.c:8894
+#: fortran/resolve.c:8787 fortran/resolve.c:8905
#, gcc-internal-format, gfc-internal-format
msgid "STAT= argument at %L must be a scalar INTEGER variable"
msgstr ""
-#: fortran/resolve.c:8788 fortran/resolve.c:8901
+#: fortran/resolve.c:8799 fortran/resolve.c:8912
#, gcc-internal-format, gfc-internal-format
msgid "ERRMSG= argument at %L must be a scalar CHARACTER variable"
msgstr ""
-#: fortran/resolve.c:8800
+#: fortran/resolve.c:8811
#, gcc-internal-format, gfc-internal-format
msgid "ACQUIRED_LOCK= argument at %L must be a scalar LOGICAL variable"
msgstr ""
-#: fortran/resolve.c:8811
+#: fortran/resolve.c:8822
#, gcc-internal-format, gfc-internal-format
msgid "UNTIL_COUNT= argument at %L must be a scalar INTEGER expression"
msgstr ""
-#: fortran/resolve.c:8871
+#: fortran/resolve.c:8882
#, gcc-internal-format, gfc-internal-format
msgid "Imageset argument at %L must be a scalar or rank-1 INTEGER expression"
msgstr ""
-#: fortran/resolve.c:8875 fortran/resolve.c:8885
+#: fortran/resolve.c:8886 fortran/resolve.c:8896
#, gcc-internal-format, gfc-internal-format
msgid "Imageset argument at %L must between 1 and num_images()"
msgstr ""
-#: fortran/resolve.c:8928
+#: fortran/resolve.c:8939
#, gcc-internal-format, gfc-internal-format
msgid ""
"Statement at %L is not a valid branch target statement for the branch "
"statement at %L"
msgstr ""
-#: fortran/resolve.c:8938
+#: fortran/resolve.c:8949
#, gcc-internal-format, gfc-internal-format
msgid "Branch at %L may result in an infinite loop"
msgstr ""
#. Note: A label at END CRITICAL does not leave the CRITICAL
#. construct as END CRITICAL is still part of it.
-#: fortran/resolve.c:8955 fortran/resolve.c:8978
+#: fortran/resolve.c:8966 fortran/resolve.c:8989
#, gcc-internal-format, gfc-internal-format
msgid "GOTO statement at %L leaves CRITICAL construct for label at %L"
msgstr ""
-#: fortran/resolve.c:8959 fortran/resolve.c:8984
+#: fortran/resolve.c:8970 fortran/resolve.c:8995
#, gcc-internal-format, gfc-internal-format
msgid "GOTO statement at %L leaves DO CONCURRENT construct for label at %L"
msgstr ""
@@ -56492,93 +56657,93 @@ msgstr ""
#. The label is not in an enclosing block, so illegal. This was
#. allowed in Fortran 66, so we allow it as extension. No
#. further checks are necessary in this case.
-#: fortran/resolve.c:8999
+#: fortran/resolve.c:9010
#, gcc-internal-format, gfc-internal-format
msgid "Label at %L is not in the same block as the GOTO statement at %L"
msgstr ""
-#: fortran/resolve.c:9071
+#: fortran/resolve.c:9082
#, gcc-internal-format, gfc-internal-format
msgid "WHERE mask at %L has inconsistent shape"
msgstr ""
-#: fortran/resolve.c:9087
+#: fortran/resolve.c:9098
#, gcc-internal-format, gfc-internal-format
msgid "WHERE assignment target at %L has inconsistent shape"
msgstr ""
-#: fortran/resolve.c:9095 fortran/resolve.c:9182
+#: fortran/resolve.c:9106 fortran/resolve.c:9193
#, gcc-internal-format, gfc-internal-format
msgid "Non-ELEMENTAL user-defined assignment in WHERE at %L"
msgstr ""
-#: fortran/resolve.c:9105 fortran/resolve.c:9192
+#: fortran/resolve.c:9116 fortran/resolve.c:9203
#, gcc-internal-format, gfc-internal-format
msgid "Unsupported statement inside WHERE at %L"
msgstr ""
-#: fortran/resolve.c:9136
+#: fortran/resolve.c:9147
#, gcc-internal-format, gfc-internal-format
msgid "Assignment to a FORALL index variable at %L"
msgstr ""
-#: fortran/resolve.c:9145
+#: fortran/resolve.c:9156
#, gcc-internal-format
msgid ""
"The FORALL with index %qs is not used on the left side of the assignment at "
"%L and so might cause multiple assignment to this object"
msgstr ""
-#: fortran/resolve.c:9314
+#: fortran/resolve.c:9325
#, gcc-internal-format, gfc-internal-format
msgid "An outer FORALL construct already has an index with this name %L"
msgstr ""
-#: fortran/resolve.c:9392
+#: fortran/resolve.c:9403
#, gcc-internal-format, gfc-internal-format
msgid "WHERE/ELSEWHERE clause at %L requires a LOGICAL array"
msgstr ""
-#: fortran/resolve.c:9470
+#: fortran/resolve.c:9481
#, gcc-internal-format
msgid "gfc_resolve_blocks(): Bad block type"
msgstr ""
-#: fortran/resolve.c:9584
+#: fortran/resolve.c:9595
#, gcc-internal-format, gfc-internal-format
msgid "CHARACTER expression will be truncated in assignment (%d/%d) at %L"
msgstr ""
-#: fortran/resolve.c:9616
+#: fortran/resolve.c:9627
#, gcc-internal-format, gfc-internal-format
msgid ""
"Coindexed expression at %L is assigned to a derived type variable with a "
"POINTER component in a PURE procedure"
msgstr ""
-#: fortran/resolve.c:9621
+#: fortran/resolve.c:9632
#, gcc-internal-format, gfc-internal-format
msgid ""
"The impure variable at %L is assigned to a derived type variable with a "
"POINTER component in a PURE procedure (12.6)"
msgstr ""
-#: fortran/resolve.c:9631
+#: fortran/resolve.c:9642
#, gcc-internal-format, gfc-internal-format
msgid "Assignment to coindexed variable at %L in a PURE procedure"
msgstr ""
-#: fortran/resolve.c:9663
+#: fortran/resolve.c:9674
#, gcc-internal-format, gfc-internal-format
msgid "Assignment to polymorphic coarray at %L is not permitted"
msgstr ""
-#: fortran/resolve.c:9667
+#: fortran/resolve.c:9678
#, gcc-internal-format, gfc-internal-format
msgid "Assignment to an allocatable polymorphic variable at %L"
msgstr ""
-#: fortran/resolve.c:9672
+#: fortran/resolve.c:9683
#, gcc-internal-format
msgid ""
"Assignment to an allocatable polymorphic variable at %L requires %<-frealloc-"
@@ -56586,27 +56751,27 @@ msgid ""
msgstr ""
#. See PR 43366.
-#: fortran/resolve.c:9677
+#: fortran/resolve.c:9688
#, gcc-internal-format, gfc-internal-format
msgid ""
"Assignment to an allocatable polymorphic variable at %L is not yet supported"
msgstr ""
-#: fortran/resolve.c:9683
+#: fortran/resolve.c:9694
#, gcc-internal-format, gfc-internal-format
msgid ""
"Nonallocatable variable must not be polymorphic in intrinsic assignment at "
"%L - check that there is a matching specific subroutine for '=' operator"
msgstr ""
-#: fortran/resolve.c:9694
+#: fortran/resolve.c:9705
#, gcc-internal-format, gfc-internal-format
msgid ""
"Coindexed variable must not have an allocatable ultimate component in "
"assignment at %L"
msgstr ""
-#: fortran/resolve.c:9997
+#: fortran/resolve.c:10008
#, gcc-internal-format, gfc-internal-format
msgid ""
"TODO: type-bound defined assignment(s) at %L not done because multiple part "
@@ -56615,72 +56780,72 @@ msgstr ""
#. Even if standard does not support this feature, continue to build
#. the two statements to avoid upsetting frontend_passes.c.
-#: fortran/resolve.c:10239
+#: fortran/resolve.c:10250
#, gcc-internal-format, gfc-internal-format
msgid "Pointer procedure assignment at %L"
msgstr ""
-#: fortran/resolve.c:10251
+#: fortran/resolve.c:10262
#, gcc-internal-format, gfc-internal-format
msgid ""
"The function result on the lhs of the assignment at %L must have the pointer "
"attribute."
msgstr ""
-#: fortran/resolve.c:10478
+#: fortran/resolve.c:10489
#, gcc-internal-format, gfc-internal-format
msgid "ASSIGNED GOTO statement at %L requires an INTEGER variable"
msgstr ""
-#: fortran/resolve.c:10481
+#: fortran/resolve.c:10492
#, gcc-internal-format
msgid "Variable %qs has not been assigned a target label at %L"
msgstr ""
-#: fortran/resolve.c:10492
+#: fortran/resolve.c:10503
#, gcc-internal-format, gfc-internal-format
msgid ""
"Alternate RETURN statement at %L requires a SCALAR-INTEGER return specifier"
msgstr ""
-#: fortran/resolve.c:10554
+#: fortran/resolve.c:10565
#, gcc-internal-format, gfc-internal-format
msgid "ASSIGN statement at %L requires a scalar default INTEGER variable"
msgstr ""
-#: fortran/resolve.c:10589
+#: fortran/resolve.c:10600
#, gcc-internal-format, gfc-internal-format
msgid "Invalid NULL at %L"
msgstr ""
-#: fortran/resolve.c:10593
+#: fortran/resolve.c:10604
#, gcc-internal-format, gfc-internal-format
msgid ""
"Arithmetic IF statement at %L requires a scalar REAL or INTEGER expression"
msgstr ""
-#: fortran/resolve.c:10649
+#: fortran/resolve.c:10660
#, gcc-internal-format
msgid "gfc_resolve_code(): No expression on DO WHILE"
msgstr ""
-#: fortran/resolve.c:10654
+#: fortran/resolve.c:10665
#, gcc-internal-format, gfc-internal-format
msgid ""
"Exit condition of DO WHILE loop at %L must be a scalar LOGICAL expression"
msgstr ""
-#: fortran/resolve.c:10738
+#: fortran/resolve.c:10749
#, gcc-internal-format, gfc-internal-format
msgid "FORALL mask clause at %L requires a scalar LOGICAL expression"
msgstr ""
-#: fortran/resolve.c:10809
+#: fortran/resolve.c:10820
#, gcc-internal-format
msgid "gfc_resolve_code(): Bad statement code"
msgstr ""
-#: fortran/resolve.c:10904
+#: fortran/resolve.c:10915
#, gcc-internal-format, gfc-internal-format
msgid ""
"Variable %s with binding label %s at %L uses the same global identifier as "
@@ -56689,7 +56854,7 @@ msgstr ""
#. This can only happen if the variable is defined in a module - if it
#. isn't the same module, reject it.
-#: fortran/resolve.c:10917
+#: fortran/resolve.c:10928
#, gcc-internal-format, gfc-internal-format
msgid ""
"Variable %s from module %s with binding label %s at %L uses the same global "
@@ -56699,56 +56864,56 @@ msgstr ""
#. Print an error if the procedure is defined multiple times; we have to
#. exclude references to the same procedure via module association or
#. multiple checks for the same procedure.
-#: fortran/resolve.c:10934
+#: fortran/resolve.c:10945
#, gcc-internal-format, gfc-internal-format
msgid ""
"Procedure %s with binding label %s at %L uses the same global identifier as "
"entity at %L"
msgstr ""
-#: fortran/resolve.c:11011
+#: fortran/resolve.c:11022
#, gcc-internal-format, gfc-internal-format
msgid "String length at %L is too large"
msgstr ""
-#: fortran/resolve.c:11347
+#: fortran/resolve.c:11358
#, gcc-internal-format
msgid "Allocatable array %qs at %L must have a deferred shape or assumed rank"
msgstr ""
-#: fortran/resolve.c:11351
+#: fortran/resolve.c:11362
#, gcc-internal-format
msgid "Scalar object %qs at %L may not be ALLOCATABLE"
msgstr ""
-#: fortran/resolve.c:11359
+#: fortran/resolve.c:11370
#, gcc-internal-format
msgid "Array pointer %qs at %L must have a deferred shape or assumed rank"
msgstr ""
-#: fortran/resolve.c:11369
+#: fortran/resolve.c:11380
#, gcc-internal-format
msgid "Array %qs at %L cannot have a deferred shape"
msgstr ""
-#: fortran/resolve.c:11384
+#: fortran/resolve.c:11395
#, gcc-internal-format
msgid "Type %qs of CLASS variable %qs at %L is not extensible"
msgstr ""
-#: fortran/resolve.c:11396
+#: fortran/resolve.c:11407
#, gcc-internal-format
msgid "CLASS variable %qs at %L must be dummy, allocatable or pointer"
msgstr ""
-#: fortran/resolve.c:11427
+#: fortran/resolve.c:11438
#, gcc-internal-format
msgid ""
"The type %qs cannot be host associated at %L because it is blocked by an "
"incompatible object of the same name declared at %L"
msgstr ""
-#: fortran/resolve.c:11449
+#: fortran/resolve.c:11460
#, gcc-internal-format
msgid ""
"Implied SAVE for module variable %qs at %L, needed due to the default "
@@ -56757,495 +56922,495 @@ msgstr ""
#. The shape of a main program or module array needs to be
#. constant.
-#: fortran/resolve.c:11497
+#: fortran/resolve.c:11508
#, gcc-internal-format
msgid "The module or main program array %qs at %L must have constant shape"
msgstr ""
-#: fortran/resolve.c:11509
+#: fortran/resolve.c:11520
#, gcc-internal-format
msgid ""
"Entity %qs at %L has a deferred type parameter and requires either the "
"pointer or allocatable attribute"
msgstr ""
-#: fortran/resolve.c:11525
+#: fortran/resolve.c:11536
#, gcc-internal-format, gfc-internal-format
msgid ""
"Entity with assumed character length at %L must be a dummy argument or a "
"PARAMETER"
msgstr ""
-#: fortran/resolve.c:11546
+#: fortran/resolve.c:11557
#, gcc-internal-format
msgid "%qs at %L must have constant character length in this context"
msgstr ""
-#: fortran/resolve.c:11553
+#: fortran/resolve.c:11564
#, gcc-internal-format
msgid "COMMON variable %qs at %L must have constant character length"
msgstr ""
-#: fortran/resolve.c:11600
+#: fortran/resolve.c:11611
#, gcc-internal-format
msgid "Allocatable %qs at %L cannot have an initializer"
msgstr ""
-#: fortran/resolve.c:11603
+#: fortran/resolve.c:11614
#, gcc-internal-format
msgid "External %qs at %L cannot have an initializer"
msgstr ""
-#: fortran/resolve.c:11607
+#: fortran/resolve.c:11618
#, gcc-internal-format
msgid "Dummy %qs at %L cannot have an initializer"
msgstr ""
-#: fortran/resolve.c:11610
+#: fortran/resolve.c:11621
#, gcc-internal-format
msgid "Intrinsic %qs at %L cannot have an initializer"
msgstr ""
-#: fortran/resolve.c:11613
+#: fortran/resolve.c:11624
#, gcc-internal-format
msgid "Function result %qs at %L cannot have an initializer"
msgstr ""
-#: fortran/resolve.c:11616
+#: fortran/resolve.c:11627
#, gcc-internal-format
msgid "Automatic array %qs at %L cannot have an initializer"
msgstr ""
-#: fortran/resolve.c:11658
+#: fortran/resolve.c:11669
#, gcc-internal-format, gfc-internal-format
msgid "%s at %L"
msgstr ""
-#: fortran/resolve.c:11685
+#: fortran/resolve.c:11696
#, gcc-internal-format
msgid "Character-valued statement function %qs at %L must have constant length"
msgstr ""
-#: fortran/resolve.c:11707
+#: fortran/resolve.c:11718
#, gcc-internal-format
msgid ""
"%qs is of a PRIVATE type and cannot be a dummy argument of %qs, which is "
"PUBLIC at %L"
msgstr ""
-#: fortran/resolve.c:11729
+#: fortran/resolve.c:11740
#, gcc-internal-format
msgid ""
"Procedure %qs in PUBLIC interface %qs at %L takes dummy arguments of %qs "
"which is PRIVATE"
msgstr ""
-#: fortran/resolve.c:11747
+#: fortran/resolve.c:11758
#, gcc-internal-format
msgid "Function %qs at %L cannot have an initializer"
msgstr ""
-#: fortran/resolve.c:11756
+#: fortran/resolve.c:11767
#, gcc-internal-format
msgid "External object %qs at %L may not have an initializer"
msgstr ""
-#: fortran/resolve.c:11764
+#: fortran/resolve.c:11775
#, gcc-internal-format
msgid "ELEMENTAL function %qs at %L must have a scalar result"
msgstr ""
-#: fortran/resolve.c:11774
+#: fortran/resolve.c:11785
#, gcc-internal-format
msgid ""
"Statement function %qs at %L may not have pointer or allocatable attribute"
msgstr ""
-#: fortran/resolve.c:11793
+#: fortran/resolve.c:11804
#, gcc-internal-format
msgid "CHARACTER(*) function %qs at %L cannot be array-valued"
msgstr ""
-#: fortran/resolve.c:11797
+#: fortran/resolve.c:11808
#, gcc-internal-format
msgid "CHARACTER(*) function %qs at %L cannot be pointer-valued"
msgstr ""
-#: fortran/resolve.c:11801
+#: fortran/resolve.c:11812
#, gcc-internal-format
msgid "CHARACTER(*) function %qs at %L cannot be pure"
msgstr ""
-#: fortran/resolve.c:11805
+#: fortran/resolve.c:11816
#, gcc-internal-format
msgid "CHARACTER(*) function %qs at %L cannot be recursive"
msgstr ""
-#: fortran/resolve.c:11818
+#: fortran/resolve.c:11829
#, gcc-internal-format
msgid "CHARACTER(*) function %qs at %L"
msgstr ""
-#: fortran/resolve.c:11827
+#: fortran/resolve.c:11838
#, gcc-internal-format
msgid "Procedure pointer %qs at %L shall not be elemental"
msgstr ""
-#: fortran/resolve.c:11833
+#: fortran/resolve.c:11844
#, gcc-internal-format
msgid "Dummy procedure %qs at %L shall not be elemental"
msgstr ""
-#: fortran/resolve.c:11889
+#: fortran/resolve.c:11900
#, gcc-internal-format
msgid "PROCEDURE attribute conflicts with SAVE attribute in %qs at %L"
msgstr ""
-#: fortran/resolve.c:11895
+#: fortran/resolve.c:11906
#, gcc-internal-format
msgid "PROCEDURE attribute conflicts with INTENT attribute in %qs at %L"
msgstr ""
-#: fortran/resolve.c:11901
+#: fortran/resolve.c:11912
#, gcc-internal-format
msgid "PROCEDURE attribute conflicts with RESULT attribute in %qs at %L"
msgstr ""
-#: fortran/resolve.c:11909
+#: fortran/resolve.c:11920
#, gcc-internal-format
msgid "EXTERNAL attribute conflicts with FUNCTION attribute in %qs at %L"
msgstr ""
-#: fortran/resolve.c:11915
+#: fortran/resolve.c:11926
#, gcc-internal-format
msgid "Procedure pointer result %qs at %L is missing the pointer attribute"
msgstr ""
-#: fortran/resolve.c:11953
+#: fortran/resolve.c:11964
#, gcc-internal-format, gfc-internal-format
msgid ""
"Mismatch in PURE attribute between MODULE PROCEDURE at %L and its interface "
"in %s"
msgstr ""
-#: fortran/resolve.c:11961
+#: fortran/resolve.c:11972
#, gcc-internal-format, gfc-internal-format
msgid ""
"Mismatch in ELEMENTAL attribute between MODULE PROCEDURE at %L and its "
"interface in %s"
msgstr ""
-#: fortran/resolve.c:11969
+#: fortran/resolve.c:11980
#, gcc-internal-format, gfc-internal-format
msgid ""
"Mismatch in RECURSIVE attribute between MODULE PROCEDURE at %L and its "
"interface in %s"
msgstr ""
-#: fortran/resolve.c:11978
+#: fortran/resolve.c:11989
#, gcc-internal-format, gfc-internal-format
msgid ""
"%s between the MODULE PROCEDURE declaration in module %s and the declaration "
"at %L in SUBMODULE %s"
msgstr ""
-#: fortran/resolve.c:12063
+#: fortran/resolve.c:12074
#, gcc-internal-format
msgid "FINAL procedure %qs at %L is not a SUBROUTINE"
msgstr ""
-#: fortran/resolve.c:12072
+#: fortran/resolve.c:12083
#, gcc-internal-format, gfc-internal-format
msgid "FINAL procedure at %L must have exactly one argument"
msgstr ""
-#: fortran/resolve.c:12081
+#: fortran/resolve.c:12092
#, gcc-internal-format
msgid "Argument of FINAL procedure at %L must be of type %qs"
msgstr ""
-#: fortran/resolve.c:12089
+#: fortran/resolve.c:12100
#, gcc-internal-format, gfc-internal-format
msgid "Argument of FINAL procedure at %L must not be a POINTER"
msgstr ""
-#: fortran/resolve.c:12095
+#: fortran/resolve.c:12106
#, gcc-internal-format, gfc-internal-format
msgid "Argument of FINAL procedure at %L must not be ALLOCATABLE"
msgstr ""
-#: fortran/resolve.c:12101
+#: fortran/resolve.c:12112
#, gcc-internal-format, gfc-internal-format
msgid "Argument of FINAL procedure at %L must not be OPTIONAL"
msgstr ""
-#: fortran/resolve.c:12109
+#: fortran/resolve.c:12120
#, gcc-internal-format, gfc-internal-format
msgid "Argument of FINAL procedure at %L must not be INTENT(OUT)"
msgstr ""
-#: fortran/resolve.c:12118
+#: fortran/resolve.c:12129
#, gcc-internal-format, gfc-internal-format
msgid "Non-scalar FINAL procedure at %L should have assumed shape argument"
msgstr ""
-#: fortran/resolve.c:12140
+#: fortran/resolve.c:12151
#, gcc-internal-format
msgid "FINAL procedure %qs declared at %L has the same rank (%d) as %qs"
msgstr ""
-#: fortran/resolve.c:12177
+#: fortran/resolve.c:12188
#, gcc-internal-format
msgid ""
"Only array FINAL procedures declared for derived type %qs defined at %L, "
"suggest also scalar one"
msgstr ""
-#: fortran/resolve.c:12217
+#: fortran/resolve.c:12228
#, gcc-internal-format
msgid "%qs and %qs can't be mixed FUNCTION/SUBROUTINE for GENERIC %qs at %L"
msgstr ""
-#: fortran/resolve.c:12253
+#: fortran/resolve.c:12264
#, gcc-internal-format
msgid "%qs and %qs for GENERIC %qs at %L are ambiguous"
msgstr ""
-#: fortran/resolve.c:12312
+#: fortran/resolve.c:12323
#, gcc-internal-format
msgid "Undefined specific binding %qs as target of GENERIC %qs at %L"
msgstr ""
-#: fortran/resolve.c:12324
+#: fortran/resolve.c:12335
#, gcc-internal-format
msgid "GENERIC %qs at %L must target a specific binding, %qs is GENERIC, too"
msgstr ""
-#: fortran/resolve.c:12352
+#: fortran/resolve.c:12363
#, gcc-internal-format
msgid "GENERIC %qs at %L can't overwrite specific binding with the same name"
msgstr ""
-#: fortran/resolve.c:12408
+#: fortran/resolve.c:12419
#, gcc-internal-format, gfc-internal-format
msgid "Type-bound operator at %L can't be NOPASS"
msgstr ""
-#: fortran/resolve.c:12590
+#: fortran/resolve.c:12601
#, gcc-internal-format
msgid ""
"%qs must be a module procedure or an external procedure with an explicit "
"interface at %L"
msgstr ""
-#: fortran/resolve.c:12632
+#: fortran/resolve.c:12643
#, gcc-internal-format
msgid "Procedure %qs with PASS(%s) at %L has no argument %qs"
msgstr ""
-#: fortran/resolve.c:12646
+#: fortran/resolve.c:12657
#, gcc-internal-format
msgid "Procedure %qs with PASS at %L must have at least one argument"
msgstr ""
-#: fortran/resolve.c:12660 fortran/resolve.c:13155
+#: fortran/resolve.c:12671 fortran/resolve.c:13166
#, gcc-internal-format
msgid "Non-polymorphic passed-object dummy argument of %qs at %L"
msgstr ""
-#: fortran/resolve.c:12668
+#: fortran/resolve.c:12679
#, gcc-internal-format
msgid "Argument %qs of %qs with PASS(%s) at %L must be of the derived-type %qs"
msgstr ""
-#: fortran/resolve.c:12677
+#: fortran/resolve.c:12688
#, gcc-internal-format
msgid "Passed-object dummy argument of %qs at %L must be scalar"
msgstr ""
-#: fortran/resolve.c:12683
+#: fortran/resolve.c:12694
#, gcc-internal-format
msgid "Passed-object dummy argument of %qs at %L must not be ALLOCATABLE"
msgstr ""
-#: fortran/resolve.c:12689
+#: fortran/resolve.c:12700
#, gcc-internal-format
msgid "Passed-object dummy argument of %qs at %L must not be POINTER"
msgstr ""
-#: fortran/resolve.c:12718
+#: fortran/resolve.c:12729
#, gcc-internal-format
msgid "Procedure %qs at %L has the same name as a component of %qs"
msgstr ""
-#: fortran/resolve.c:12727
+#: fortran/resolve.c:12738
#, gcc-internal-format
msgid "Procedure %qs at %L has the same name as an inherited component of %qs"
msgstr ""
-#: fortran/resolve.c:12819
+#: fortran/resolve.c:12830
#, gcc-internal-format
msgid ""
"Derived-type %qs declared at %L must be ABSTRACT because %qs is DEFERRED and "
"not overridden"
msgstr ""
-#: fortran/resolve.c:12917
+#: fortran/resolve.c:12928
#, gcc-internal-format
msgid ""
"As extending type %qs at %L has a coarray component, parent type %qs shall "
"also have one"
msgstr ""
-#: fortran/resolve.c:12930
+#: fortran/resolve.c:12941
#, gcc-internal-format
msgid "Non-extensible derived-type %qs at %L must not be ABSTRACT"
msgstr ""
-#: fortran/resolve.c:12950
+#: fortran/resolve.c:12961
#, gcc-internal-format
msgid "Coarray component %qs at %L must be allocatable with deferred shape"
msgstr ""
-#: fortran/resolve.c:12960
+#: fortran/resolve.c:12971
#, 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:12971
+#: fortran/resolve.c:12982
#, gcc-internal-format
msgid ""
"Component %qs at %L with coarray component shall be a nonpointer, "
"nonallocatable scalar"
msgstr ""
-#: fortran/resolve.c:12981
+#: fortran/resolve.c:12992
#, gcc-internal-format
msgid ""
"Component %qs at %L has the CONTIGUOUS attribute but is not an array pointer"
msgstr ""
-#: fortran/resolve.c:13082
+#: fortran/resolve.c:13093
#, gcc-internal-format
msgid "Procedure pointer component %qs with PASS(%s) at %L has no argument %qs"
msgstr ""
-#: fortran/resolve.c:13097
+#: fortran/resolve.c:13108
#, gcc-internal-format
msgid ""
"Procedure pointer component %qs with PASS at %L must have at least one "
"argument"
msgstr ""
-#: fortran/resolve.c:13114
+#: fortran/resolve.c:13125
#, gcc-internal-format
msgid "Argument %qs of %qs with PASS(%s) at %L must be of the derived type %qs"
msgstr ""
-#: fortran/resolve.c:13125
+#: fortran/resolve.c:13136
#, gcc-internal-format
msgid "Argument %qs of %qs with PASS(%s) at %L must be scalar"
msgstr ""
-#: fortran/resolve.c:13135
+#: fortran/resolve.c:13146
#, gcc-internal-format
msgid ""
"Argument %qs of %qs with PASS(%s) at %L may not have the POINTER attribute"
msgstr ""
-#: fortran/resolve.c:13145
+#: fortran/resolve.c:13156
#, gcc-internal-format
msgid "Argument %qs of %qs with PASS(%s) at %L may not be ALLOCATABLE"
msgstr ""
-#: fortran/resolve.c:13187
+#: fortran/resolve.c:13198
#, gcc-internal-format
msgid ""
"Component %qs of %qs at %L has the same name as an inherited type-bound "
"procedure"
msgstr ""
-#: fortran/resolve.c:13200
+#: fortran/resolve.c:13211
#, gcc-internal-format
msgid ""
"Character length of component %qs needs to be a constant specification "
"expression at %L"
msgstr ""
-#: fortran/resolve.c:13211
+#: fortran/resolve.c:13222
#, gcc-internal-format
msgid ""
"Character component %qs of %qs at %L with deferred length must be a POINTER "
"or ALLOCATABLE"
msgstr ""
-#: fortran/resolve.c:13242
+#: fortran/resolve.c:13253
#, 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:13250
+#: fortran/resolve.c:13261
#, gcc-internal-format, gfc-internal-format
msgid "Polymorphic component %s at %L in SEQUENCE or BIND(C) type %s"
msgstr ""
-#: fortran/resolve.c:13259
+#: fortran/resolve.c:13270
#, 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:13277 fortran/resolve.c:13289
+#: fortran/resolve.c:13288 fortran/resolve.c:13300
#, gcc-internal-format
msgid ""
"The pointer component %qs of %qs at %L is a type that has not been declared"
msgstr ""
-#: fortran/resolve.c:13301
+#: fortran/resolve.c:13312
#, gcc-internal-format
msgid "Component %qs with CLASS at %L must be allocatable or pointer"
msgstr ""
-#: fortran/resolve.c:13369
+#: fortran/resolve.c:13380
#, 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:13425
+#: fortran/resolve.c:13436
#, gcc-internal-format
msgid "Assumed size array %qs in namelist %qs at %L is not allowed"
msgstr ""
-#: fortran/resolve.c:13431
+#: fortran/resolve.c:13442
#, gcc-internal-format
msgid "NAMELIST array object %qs with assumed shape in namelist %qs at %L"
msgstr ""
-#: fortran/resolve.c:13437
+#: fortran/resolve.c:13448
#, gcc-internal-format
msgid "NAMELIST array object %qs with nonconstant shape in namelist %qs at %L"
msgstr ""
-#: fortran/resolve.c:13445
+#: fortran/resolve.c:13456
#, gcc-internal-format
msgid ""
"NAMELIST object %qs with nonconstant character length in namelist %qs at %L"
msgstr ""
-#: fortran/resolve.c:13455
+#: fortran/resolve.c:13466
#, 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:13465
+#: fortran/resolve.c:13476
#, gcc-internal-format
msgid ""
"NAMELIST object %qs in namelist %qs at %L with ALLOCATABLE or POINTER "
@@ -57254,471 +57419,476 @@ msgstr ""
#. FIXME: Once UDDTIO is implemented, the following can be
#. removed.
-#: fortran/resolve.c:13473
+#: fortran/resolve.c:13484
#, gcc-internal-format
msgid ""
"NAMELIST object %qs in namelist %qs at %L has ALLOCATABLE or POINTER "
"components and thus requires a defined input/output procedure"
msgstr ""
-#: fortran/resolve.c:13490
+#: fortran/resolve.c:13501
#, gcc-internal-format
msgid ""
"NAMELIST object %qs was declared PRIVATE and cannot be member of PUBLIC "
"namelist %qs at %L"
msgstr ""
-#: fortran/resolve.c:13500
+#: fortran/resolve.c:13511
#, 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:13511
+#: fortran/resolve.c:13522
#, 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:13538
+#: fortran/resolve.c:13549
#, gcc-internal-format
msgid "PROCEDURE attribute conflicts with NAMELIST attribute in %qs at %L"
msgstr ""
-#: fortran/resolve.c:13557
+#: fortran/resolve.c:13568
#, gcc-internal-format
msgid "Parameter array %qs at %L cannot be automatic or of deferred shape"
msgstr ""
-#: fortran/resolve.c:13569
+#: fortran/resolve.c:13580
#, gcc-internal-format
msgid ""
"Implicitly typed PARAMETER %qs at %L doesn't match a later IMPLICIT type"
msgstr ""
-#: fortran/resolve.c:13580
+#: fortran/resolve.c:13591
#, gcc-internal-format, gfc-internal-format
msgid "Incompatible derived type in PARAMETER at %L"
msgstr ""
-#: fortran/resolve.c:13667
+#: fortran/resolve.c:13678
#, gcc-internal-format, gfc-internal-format
msgid "PROTECTED attribute conflicts with EXTERNAL attribute at %L"
msgstr ""
-#: fortran/resolve.c:13670
+#: fortran/resolve.c:13681
#, gcc-internal-format, gfc-internal-format
msgid "PROCEDURE attribute conflicts with PROTECTED attribute at %L"
msgstr ""
-#: fortran/resolve.c:13759
+#: fortran/resolve.c:13770
#, 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:13777
+#: fortran/resolve.c:13788
#, gcc-internal-format, gfc-internal-format
msgid "Assumed size array at %L must be a dummy argument"
msgstr ""
-#: fortran/resolve.c:13780
+#: fortran/resolve.c:13791
#, gcc-internal-format, gfc-internal-format
msgid "Assumed shape array at %L must be a dummy argument"
msgstr ""
-#: fortran/resolve.c:13788
+#: fortran/resolve.c:13799
#, gcc-internal-format, gfc-internal-format
msgid "Assumed-rank array at %L must be a dummy argument"
msgstr ""
-#: fortran/resolve.c:13795
+#: fortran/resolve.c:13806
#, gcc-internal-format, gfc-internal-format
msgid ""
"Assumed-rank array at %L may not have the VALUE or CODIMENSION attribute"
msgstr ""
-#: fortran/resolve.c:13808
+#: fortran/resolve.c:13819
#, gcc-internal-format, gfc-internal-format
msgid "Symbol at %L is not a DUMMY variable"
msgstr ""
-#: fortran/resolve.c:13814
+#: fortran/resolve.c:13825
#, gcc-internal-format
msgid ""
"%qs at %L cannot have the VALUE attribute because it is not a dummy argument"
msgstr ""
-#: fortran/resolve.c:13824
+#: fortran/resolve.c:13835
#, gcc-internal-format
msgid ""
"Character dummy variable %qs at %L with VALUE attribute must have constant "
"length"
msgstr ""
-#: fortran/resolve.c:13833
+#: fortran/resolve.c:13844
#, gcc-internal-format
msgid ""
"C interoperable character dummy variable %qs at %L with VALUE attribute must "
"have length one"
msgstr ""
-#: fortran/resolve.c:13846 fortran/resolve.c:14013
+#: fortran/resolve.c:13857 fortran/resolve.c:14024
#, gcc-internal-format
msgid "The derived type %qs at %L is of type %qs, which has not been defined"
msgstr ""
-#: fortran/resolve.c:13860
+#: fortran/resolve.c:13871
#, 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:13869
+#: fortran/resolve.c:13880
#, 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:13878
+#: fortran/resolve.c:13889
#, 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:13886
+#: fortran/resolve.c:13897
#, 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:13893
+#: fortran/resolve.c:13904
#, 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:13913
+#: fortran/resolve.c:13924
#, gcc-internal-format, gfc-internal-format
msgid "Assumed type of variable %s at %L is only permitted for dummy variables"
msgstr ""
-#: fortran/resolve.c:13920
+#: fortran/resolve.c:13931
#, 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:13927
+#: fortran/resolve.c:13938
#, gcc-internal-format, gfc-internal-format
msgid "Assumed-type variable %s at %L may not have the INTENT(OUT) attribute"
msgstr ""
-#: fortran/resolve.c:13934
+#: fortran/resolve.c:13945
#, gcc-internal-format, gfc-internal-format
msgid "Assumed-type variable %s at %L shall not be an explicit-shape array"
msgstr ""
-#: fortran/resolve.c:13959
+#: fortran/resolve.c:13970
#, 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:14039
+#: fortran/resolve.c:14050
#, gcc-internal-format
msgid "PUBLIC %s %qs at %L of PRIVATE derived type %qs"
msgstr ""
-#: fortran/resolve.c:14054
+#: fortran/resolve.c:14065
#, 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:14067
+#: fortran/resolve.c:14078
#, gcc-internal-format, gfc-internal-format
msgid ""
"Variable %s at %L of type EVENT_TYPE or with subcomponent of type LOCK_TYPE "
"must be a coarray"
msgstr ""
-#: fortran/resolve.c:14085
+#: fortran/resolve.c:14096
#, 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:14097
+#: fortran/resolve.c:14108
#, gcc-internal-format
msgid "Dummy argument %qs at %L of LOCK_TYPE shall not be INTENT(OUT)"
msgstr ""
-#: fortran/resolve.c:14106
+#: fortran/resolve.c:14117
#, gcc-internal-format
msgid "Dummy argument %qs at %L of EVENT_TYPE shall not be INTENT(OUT)"
msgstr ""
-#: fortran/resolve.c:14118
+#: fortran/resolve.c:14129
#, gcc-internal-format
msgid ""
"Function result %qs at %L shall not be a coarray or have a coarray component"
msgstr ""
-#: fortran/resolve.c:14127
+#: fortran/resolve.c:14138
#, 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:14139
+#: fortran/resolve.c:14150
#, 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:14154
+#: fortran/resolve.c:14165
#, gcc-internal-format
msgid ""
"Variable %qs at %L is a coarray and is not ALLOCATABLE, SAVE nor a dummy "
"argument"
msgstr ""
-#: fortran/resolve.c:14162
+#: fortran/resolve.c:14173
#, gcc-internal-format
msgid ""
"Coarray variable %qs at %L shall not have codimensions with deferred shape"
msgstr ""
-#: fortran/resolve.c:14169
+#: fortran/resolve.c:14180
#, gcc-internal-format
msgid "Allocatable coarray variable %qs at %L must have deferred shape"
msgstr ""
-#: fortran/resolve.c:14181
+#: fortran/resolve.c:14192
#, 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:14190
+#: fortran/resolve.c:14201
#, gcc-internal-format
msgid "Coarray dummy variable %qs at %L not allowed in BIND(C) procedure %qs"
msgstr ""
-#: fortran/resolve.c:14206
+#: fortran/resolve.c:14217
#, gcc-internal-format
msgid ""
"LOGICAL dummy argument %qs at %L with non-C_Bool kind in BIND(C) procedure "
"%qs"
msgstr ""
-#: fortran/resolve.c:14212
+#: fortran/resolve.c:14223
#, gcc-internal-format
msgid ""
"LOGICAL result variable %qs at %L with non-C_Bool kind in BIND(C) procedure "
"%qs"
msgstr ""
-#: fortran/resolve.c:14291
+#: fortran/resolve.c:14248
+#, gcc-internal-format, gfc-internal-format
+msgid "Namelist '%s' can not be an argument to subroutine or function at %L"
+msgstr ""
+
+#: fortran/resolve.c:14317
#, gcc-internal-format, gfc-internal-format
msgid "Threadprivate at %L isn't SAVEd"
msgstr ""
-#: fortran/resolve.c:14302
+#: fortran/resolve.c:14328
#, gcc-internal-format
msgid "!$OMP DECLARE TARGET variable %qs at %L isn't SAVEd"
msgstr ""
-#: fortran/resolve.c:14394
+#: fortran/resolve.c:14420
#, gcc-internal-format
msgid "check_data_variable(): Bad expression"
msgstr ""
-#: fortran/resolve.c:14400
+#: fortran/resolve.c:14426
#, gcc-internal-format
msgid "BLOCK DATA element %qs at %L must be in COMMON"
msgstr ""
-#: fortran/resolve.c:14406
+#: fortran/resolve.c:14432
#, gcc-internal-format
msgid "DATA array %qs at %L must be specified in a previous declaration"
msgstr ""
-#: fortran/resolve.c:14415
+#: fortran/resolve.c:14441
#, gcc-internal-format
msgid "DATA element %qs at %L cannot have a coindex"
msgstr ""
-#: fortran/resolve.c:14429
+#: fortran/resolve.c:14455
#, gcc-internal-format
msgid "DATA element %qs at %L is a pointer and so must be a full array"
msgstr ""
-#: fortran/resolve.c:14475
+#: fortran/resolve.c:14501
#, gcc-internal-format, gfc-internal-format
msgid "Nonconstant array section at %L in DATA statement"
msgstr ""
-#: fortran/resolve.c:14488
+#: fortran/resolve.c:14514
#, gcc-internal-format, gfc-internal-format
msgid "DATA statement at %L has more variables than values"
msgstr ""
-#: fortran/resolve.c:14587
+#: fortran/resolve.c:14613
#, 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:14595
+#: fortran/resolve.c:14621
#, 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:14603
+#: fortran/resolve.c:14629
#, 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:14728
+#: fortran/resolve.c:14754
#, gcc-internal-format, gfc-internal-format
msgid "DATA statement at %L has more values than variables"
msgstr ""
-#: fortran/resolve.c:14893
+#: fortran/resolve.c:14919
#, gcc-internal-format, gfc-internal-format
msgid "Label %d at %L defined but not used"
msgstr ""
-#: fortran/resolve.c:14898
+#: fortran/resolve.c:14924
#, gcc-internal-format, gfc-internal-format
msgid "Label %d at %L defined but cannot be used"
msgstr ""
-#: fortran/resolve.c:14982
+#: fortran/resolve.c:15008
#, gcc-internal-format
msgid ""
"Derived type variable %qs at %L must have SEQUENCE attribute to be an "
"EQUIVALENCE object"
msgstr ""
-#: fortran/resolve.c:14991
+#: fortran/resolve.c:15017
#, gcc-internal-format
msgid ""
"Derived type variable %qs at %L cannot have ALLOCATABLE components to be an "
"EQUIVALENCE object"
msgstr ""
-#: fortran/resolve.c:14999
+#: fortran/resolve.c:15025
#, 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:15015
+#: fortran/resolve.c:15041
#, gcc-internal-format
msgid ""
"Derived type variable %qs at %L with pointer component(s) cannot be an "
"EQUIVALENCE object"
msgstr ""
-#: fortran/resolve.c:15118
+#: fortran/resolve.c:15144
#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in EQUIVALENCE statement at %L"
msgstr ""
-#: fortran/resolve.c:15133
+#: fortran/resolve.c:15159
#, 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:15145
+#: fortran/resolve.c:15171
#, gcc-internal-format
msgid ""
"Common block member %qs at %L cannot be an EQUIVALENCE object in the pure "
"procedure %qs"
msgstr ""
-#: fortran/resolve.c:15154
+#: fortran/resolve.c:15180
#, gcc-internal-format
msgid "Named constant %qs at %L cannot be an EQUIVALENCE object"
msgstr ""
-#: fortran/resolve.c:15227
+#: fortran/resolve.c:15253
#, gcc-internal-format
msgid ""
"Array %qs at %L with non-constant bounds cannot be an EQUIVALENCE object"
msgstr ""
-#: fortran/resolve.c:15238
+#: fortran/resolve.c:15264
#, gcc-internal-format
msgid "Structure component %qs at %L cannot be an EQUIVALENCE object"
msgstr ""
-#: fortran/resolve.c:15249
+#: fortran/resolve.c:15275
#, gcc-internal-format, gfc-internal-format
msgid "Substring at %L has length zero"
msgstr ""
-#: fortran/resolve.c:15292
+#: fortran/resolve.c:15318
#, gcc-internal-format
msgid "PUBLIC function %qs at %L of PRIVATE type %qs"
msgstr ""
-#: fortran/resolve.c:15305
+#: fortran/resolve.c:15331
#, gcc-internal-format
msgid "ENTRY %qs at %L has no IMPLICIT type"
msgstr ""
-#: fortran/resolve.c:15322
+#: fortran/resolve.c:15348
#, gcc-internal-format
msgid "User operator procedure %qs at %L must be a FUNCTION"
msgstr ""
-#: fortran/resolve.c:15332
+#: fortran/resolve.c:15358
#, gcc-internal-format
msgid "User operator procedure %qs at %L cannot be assumed character length"
msgstr ""
-#: fortran/resolve.c:15340
+#: fortran/resolve.c:15366
#, gcc-internal-format
msgid "User operator procedure %qs at %L must have at least one argument"
msgstr ""
-#: fortran/resolve.c:15354
+#: fortran/resolve.c:15380
#, gcc-internal-format, gfc-internal-format
msgid "First argument of operator interface at %L cannot be optional"
msgstr ""
-#: fortran/resolve.c:15372
+#: fortran/resolve.c:15398
#, gcc-internal-format, gfc-internal-format
msgid "Second argument of operator interface at %L cannot be optional"
msgstr ""
-#: fortran/resolve.c:15379
+#: fortran/resolve.c:15405
#, gcc-internal-format, gfc-internal-format
msgid "Operator interface at %L must have, at most, two arguments"
msgstr ""
-#: fortran/resolve.c:15457
+#: fortran/resolve.c:15483
#, gcc-internal-format
msgid "Contained procedure %qs at %L of a PURE procedure must also be PURE"
msgstr ""
@@ -57797,7 +57967,7 @@ msgstr ""
msgid "Illegal preprocessor directive"
msgstr ""
-#: fortran/scanner.c:2232
+#: fortran/scanner.c:2235
#, gcc-internal-format
msgid "Can't open file %qs"
msgstr ""
@@ -58586,19 +58756,19 @@ msgstr ""
#. Problems occur when we get something like
#. integer :: a(lots) = (/(i, i=1, lots)/)
-#: fortran/trans-array.c:5648
+#: fortran/trans-array.c:5659
#, 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:7503
+#: fortran/trans-array.c:7514
#, gcc-internal-format
msgid "Creating array temporary at %L for argument %qs"
msgstr ""
-#: fortran/trans-array.c:9582
+#: fortran/trans-array.c:9593
#, gcc-internal-format, gfc-internal-format
msgid "bad expression type during walk (%d)"
msgstr ""
@@ -58702,115 +58872,115 @@ msgstr ""
msgid "non-constant initialization expression at %L"
msgstr ""
-#: fortran/trans-decl.c:1555
+#: fortran/trans-decl.c:1557
#, gcc-internal-format
msgid "intrinsic variable which isn't a procedure"
msgstr ""
-#: fortran/trans-decl.c:3958 fortran/trans-decl.c:6184
+#: fortran/trans-decl.c:4031 fortran/trans-decl.c:6231
#, gcc-internal-format
msgid "Return value of function %qs at %L not set"
msgstr ""
-#: fortran/trans-decl.c:4373
+#: fortran/trans-decl.c:4419
#, gcc-internal-format
msgid "Deferred type parameter not yet supported"
msgstr ""
-#: fortran/trans-decl.c:4601
+#: fortran/trans-decl.c:4648
#, gcc-internal-format
msgid "backend decl for module variable %qs already exists"
msgstr ""
-#: fortran/trans-decl.c:4614
+#: fortran/trans-decl.c:4661
#, gcc-internal-format
msgid "Unused PRIVATE module variable %qs declared at %L"
msgstr ""
-#: fortran/trans-decl.c:5183
+#: fortran/trans-decl.c:5230
#, gcc-internal-format
msgid "Dummy argument %qs at %L was declared INTENT(OUT) but was not set"
msgstr ""
-#: fortran/trans-decl.c:5189
+#: fortran/trans-decl.c:5236
#, 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:5199 fortran/trans-decl.c:5330
+#: fortran/trans-decl.c:5246 fortran/trans-decl.c:5377
#, gcc-internal-format
msgid "Unused dummy argument %qs at %L"
msgstr ""
-#: fortran/trans-decl.c:5214
+#: fortran/trans-decl.c:5261
#, gcc-internal-format
msgid "Unused module variable %qs which has been explicitly imported at %L"
msgstr ""
-#: fortran/trans-decl.c:5223
+#: fortran/trans-decl.c:5270
#, gcc-internal-format
msgid "Unused variable %qs declared at %L"
msgstr ""
-#: fortran/trans-decl.c:5272
+#: fortran/trans-decl.c:5319
#, gcc-internal-format
msgid "Unused parameter %qs declared at %L"
msgstr ""
-#: fortran/trans-decl.c:5276
+#: fortran/trans-decl.c:5323
#, gcc-internal-format
msgid "Unused parameter %qs which has been explicitly imported at %L"
msgstr ""
-#: fortran/trans-decl.c:5302
+#: fortran/trans-decl.c:5349
#, gcc-internal-format
msgid "Return value %qs of function %qs declared at %L not set"
msgstr ""
-#: fortran/trans-decl.c:5911
+#: fortran/trans-decl.c:5958
#, gcc-internal-format, gfc-internal-format
msgid "Sorry, $!ACC DECLARE at %L is not allowed in BLOCK construct"
msgstr ""
-#: fortran/trans-expr.c:803
+#: fortran/trans-expr.c:827
#, gcc-internal-format, gfc-internal-format
msgid "Can't compute the length of the char array at %L."
msgstr ""
-#: fortran/trans-expr.c:1495
+#: fortran/trans-expr.c:1526
#, gcc-internal-format, gfc-internal-format
msgid "Code for reallocating the allocatable variable at %L will be added"
msgstr ""
-#: fortran/trans-expr.c:1802
+#: fortran/trans-expr.c:1833
#, gcc-internal-format, gfc-internal-format
msgid ""
"Sorry, coindexed access to a pointer or allocatable component of the "
"coindexed coarray at %L is not yet supported"
msgstr ""
-#: fortran/trans-expr.c:1816
+#: fortran/trans-expr.c:1847
#, gcc-internal-format, gfc-internal-format
msgid ""
"Sorry, coindexed coarray at %L with allocatable component is not yet "
"supported"
msgstr ""
-#: fortran/trans-expr.c:1839
+#: fortran/trans-expr.c:1870
#, gcc-internal-format, gfc-internal-format
msgid ""
"Sorry, coindexed access at %L to a scalar component with an array partref is "
"not yet supported"
msgstr ""
-#: fortran/trans-expr.c:3272
+#: fortran/trans-expr.c:3303
#, gcc-internal-format
msgid "Unknown intrinsic op"
msgstr ""
-#: fortran/trans-expr.c:4560
+#: fortran/trans-expr.c:4591
#, gcc-internal-format, gfc-internal-format
msgid "Unknown argument list function at %L"
msgstr ""
@@ -58826,7 +58996,7 @@ msgstr ""
msgid "%<dim%> argument of %s intrinsic at %L is not a valid dimension index"
msgstr ""
-#: fortran/trans-intrinsic.c:9366 fortran/trans-stmt.c:913
+#: fortran/trans-intrinsic.c:9366 fortran/trans-stmt.c:919
#, gcc-internal-format, gfc-internal-format
msgid "Sorry, the event component of derived type at %L is not yet supported"
msgstr ""
@@ -58856,17 +59026,17 @@ msgstr ""
msgid "An alternate return at %L without a * dummy argument"
msgstr ""
-#: fortran/trans-stmt.c:717
+#: fortran/trans-stmt.c:723
#, 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:1172
+#: fortran/trans-stmt.c:1178
#, 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:2943
+#: fortran/trans-stmt.c:2951
#, gcc-internal-format
msgid "gfc_trans_select(): Bad type for case expr."
msgstr ""
diff --git a/gcc/po/sv.po b/gcc/po/sv.po
index cddecb3..4e486f8 100644
--- a/gcc/po/sv.po
+++ b/gcc/po/sv.po
@@ -10,14 +10,17 @@
# assumed type antagen typ
# cast typkonvertering
# kind sort
+# load ladda
# offset avstånd
+# overload överlagra
# rank ordning
+# store lagra
msgid ""
msgstr ""
"Project-Id-Version: gcc 6.1-b20160131\n"
"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
"POT-Creation-Date: 2016-01-31 15:50+0000\n"
-"PO-Revision-Date: 2016-02-14 12:50+0100\n"
+"PO-Revision-Date: 2016-03-09 22:57+0100\n"
"Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
"Language: sv\n"
@@ -441,66 +444,46 @@ msgid " -v Display the programs invoked by the compiler.\
msgstr " -v Visa vilka program som körs av kompilatorn.\n"
#: gcc.c:3429
-#, fuzzy
-#| msgid " -### Like -v but options quoted and commands not executed\n"
msgid " -### Like -v but options quoted and commands not executed.\n"
-msgstr " -### Som -v men flaggor citerade och kommandon inte körda\n"
+msgstr " -### Som -v men flaggor citerade och kommandon inte körda.\n"
#: gcc.c:3430
-#, fuzzy
-#| msgid " -E Preprocess only; do not compile, assemble or link\n"
msgid " -E Preprocess only; do not compile, assemble or link.\n"
msgstr ""
" -E Preprocessa bara; kompilera, assemblera och\n"
-" länka inte\n"
+" länka inte.\n"
#: gcc.c:3431
-#, fuzzy
-#| msgid " -S Compile only; do not assemble or link\n"
msgid " -S Compile only; do not assemble or link.\n"
-msgstr " -S Kompilera bara; assemblera och länka inte\n"
+msgstr " -S Kompilera bara; assemblera och länka inte.\n"
#: gcc.c:3432
-#, fuzzy
-#| msgid " -c Compile and assemble, but do not link\n"
msgid " -c Compile and assemble, but do not link.\n"
-msgstr " -c Kompilera och assemblera, men länka inte\n"
+msgstr " -c Kompilera och assemblera, men länka inte.\n"
#: gcc.c:3433
-#, fuzzy
-#| msgid " -o <file> Place the output into <file>\n"
msgid " -o <file> Place the output into <file>.\n"
-msgstr " -o <fil> Placera utdata i <fil>\n"
+msgstr " -o <fil> Placera utdata i <fil>.\n"
#: gcc.c:3434
-#, fuzzy
-#| msgid " -pie Create a position independent executable\n"
msgid " -pie Create a position independent executable.\n"
-msgstr " -pie Skapa ett positionsoberoende körbart program\n"
+msgstr " -pie Skapa ett positionsoberoende körbart program.\n"
#: gcc.c:3435
-#, fuzzy
-#| msgid " -shared Create a shared library\n"
msgid " -shared Create a shared library.\n"
-msgstr " -shared Skapa ett delat bibliotek\n"
+msgstr " -shared Skapa ett delat bibliotek.\n"
#: gcc.c:3436
-#, fuzzy
-#| msgid ""
-#| " -x <language> Specify the language of the following input files\n"
-#| " Permissible languages include: c c++ assembler none\n"
-#| " 'none' means revert to the default behavior of\n"
-#| " guessing the language based on the file's extension\n"
msgid ""
" -x <language> Specify the language of the following input files.\n"
" Permissible languages include: c c++ assembler none\n"
" 'none' means revert to the default behavior of\n"
" guessing the language based on the file's extension.\n"
msgstr ""
-" -x <språk> Specificera språk för de följande källkodsfilerna\n"
+" -x <språk> Specificera språk för de följande källkodsfilerna.\n"
" Bland tillåtna språk finns: c c++ assembler none\n"
" â€none†innebär att man använder standardmetoden\n"
-" att gissa språk beroende på filens ändelse\n"
+" att gissa språk beroende på filens ändelse.\n"
#: gcc.c:3443
#, c-format
@@ -777,10 +760,9 @@ msgstr ""
"Fel på översättningen rapporteras till <tp-sv@listor.tp-sv.se>\n"
#: gcov-tool.c:526
-#, fuzzy, c-format
-#| msgid "Copyright %s 2014-2015 Free Software Foundation, Inc.\n"
+#, c-format
msgid "Copyright %s 2014-2016 Free Software Foundation, Inc.\n"
-msgstr "Copyright %s 2014-2015 Free Software Foundation, Inc.\n"
+msgstr "Copyright %s 2014-2016 Free Software Foundation, Inc.\n"
#: gcov-tool.c:529 gcov.c:506
#, c-format
@@ -1232,10 +1214,8 @@ msgstr "kan inte generera omläsningar för:"
#. What to print when a switch has no documentation.
#: opts.c:184
-#, fuzzy
-#| msgid "This switch lacks documentation"
msgid "This option lacks documentation."
-msgstr "Denna flagga saknar dokumentation"
+msgstr "Denna flagga saknar dokumentation."
#: opts.c:185
msgid "Uses of this option are diagnosed."
@@ -1274,10 +1254,9 @@ msgid " No options with the desired characteristics were found\n"
msgstr " Det finns inga flaggor med de eftersökta egenskaperna\n"
#: opts.c:1241
-#, fuzzy, c-format
-#| msgid " None found. Use --help=%s to show *all* the options supported by the %s front-end\n"
+#, c-format
msgid " None found. Use --help=%s to show *all* the options supported by the %s front-end.\n"
-msgstr " Det fanns inga. Använd --help=%s för att visa *alla* flaggorna som stödjs av framänden %s\n"
+msgstr " Det fanns inga. Använd --help=%s för att visa *alla* flaggorna som stödjs av framänden %s.\n"
#: opts.c:1247
#, c-format
@@ -1416,10 +1395,9 @@ msgid "%s%s%s %sversion %s (%s) compiled by CC, "
msgstr "%s%s%s %sversion %s (%s) kompilerad med CC, "
#: toplev.c:646
-#, fuzzy, c-format
-#| msgid "GMP version %s, MPFR version %s, MPC version %s\n"
+#, c-format
msgid "GMP version %s, MPFR version %s, MPC version %s, isl version %s\n"
-msgstr "GMP-version %s, MPFR-version %s, MPC-version %s\n"
+msgstr "GMP-version %s, MPFR-version %s, MPC-version %s, isl-version %s\n"
# Tredje %s blir en förkortning typ GMP
#: toplev.c:648
@@ -1598,203 +1576,170 @@ msgid "permerror: "
msgstr "permfel: "
#: params.def:49
-#, fuzzy, no-c-format
-#| msgid "Maximal estimated outcome of branch considered predictable"
+#, no-c-format
msgid "Maximal estimated outcome of branch considered predictable."
-msgstr "Maximala uppskattade sannolikheten för en gren för att anses förutsägbar"
+msgstr "Maximala uppskattade sannolikheten för en gren för att anses förutsägbar."
#: params.def:54
-#, fuzzy, no-c-format
-#| msgid "The minimal estimated speedup allowing inliner to ignore inline-insns-single and inline-isnsns-auto"
+#, no-c-format
msgid "The minimal estimated speedup allowing inliner to ignore inline-insns-single and inline-isnsns-auto."
-msgstr "Den minsta uppskattade hastighetsökningen som tillåter inline:aren att ignorera inline-insns-single och inline-insns-auto"
+msgstr "Den minsta uppskattade hastighetsökningen som tillåter inline:aren att ignorera inline-insns-single och inline-insns-auto."
#: params.def:71
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions in a single function eligible for inlining"
+#, no-c-format
msgid "The maximum number of instructions in a single function eligible for inlining."
-msgstr "Det maximala antalet instruktioner i en enskild funktion tänkbar för inline:ing"
+msgstr "Det maximala antalet instruktioner i en enskild funktion tänkbar för inline:ing."
#: params.def:83
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions when automatically inlining"
+#, no-c-format
msgid "The maximum number of instructions when automatically inlining."
-msgstr "Det maximala antalet instruktioner vid automatisk inline:ing"
+msgstr "Det maximala antalet instruktioner vid automatisk inline:ing."
#: params.def:88
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions inline function can grow to via recursive inlining"
+#, no-c-format
msgid "The maximum number of instructions inline function can grow to via recursive inlining."
-msgstr "Det maximala antalet instruktioner inline-funktioner kan växa till via rekursiv inline:ing"
+msgstr "Det maximala antalet instruktioner inline-funktioner kan växa till via rekursiv inline:ing."
#: params.def:93
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions non-inline function can grow to via recursive inlining"
+#, no-c-format
msgid "The maximum number of instructions non-inline function can grow to via recursive inlining."
-msgstr "Det maximala antalet instruktioner icke-inline-funktioner kan växa till via rekursiv inline:ing"
+msgstr "Det maximala antalet instruktioner icke-inline-funktioner kan växa till via rekursiv inline:ing."
#: params.def:98
-#, fuzzy, no-c-format
-#| msgid "The maximum depth of recursive inlining for inline functions"
+#, no-c-format
msgid "The maximum depth of recursive inlining for inline functions."
-msgstr "Det maximala djupet för rekursiv inline:ing för inline-funktioner"
+msgstr "Det maximala djupet för rekursiv inline:ing för inline-funktioner."
#: params.def:103
-#, fuzzy, no-c-format
-#| msgid "The maximum depth of recursive inlining for non-inline functions"
+#, no-c-format
msgid "The maximum depth of recursive inlining for non-inline functions."
-msgstr "Det maximala djupet för rekursiv inline:ing för icke-inline-funktioner"
+msgstr "Det maximala djupet för rekursiv inline:ing för icke-inline-funktioner."
#: params.def:108
-#, fuzzy, no-c-format
-#| msgid "Inline recursively only when the probability of call being executed exceeds the parameter"
+#, no-c-format
msgid "Inline recursively only when the probability of call being executed exceeds the parameter."
-msgstr "Inline:a rekursivt endast när sannolikheten för att ett anrop skall göras överskrider parametern"
+msgstr "Inline:a rekursivt endast när sannolikheten för att ett anrop skall göras överskrider parametern."
#: params.def:116
-#, fuzzy, no-c-format
-#| msgid "The maximum number of nested indirect inlining performed by early inliner"
+#, no-c-format
msgid "The maximum number of nested indirect inlining performed by early inliner."
-msgstr "Det maximala antalet nästade indirekta inline:ingar som utförs av den tidiga inline:aren"
+msgstr "Det maximala antalet nästade indirekta inline:ingar som utförs av den tidiga inline:aren."
#: params.def:122
-#, fuzzy, no-c-format
-#| msgid "Probability that COMDAT function will be shared with different compilation unit"
+#, no-c-format
msgid "Probability that COMDAT function will be shared with different compilation unit."
-msgstr "Sannolikheten att COMDAT-funktionen kommer att delas med en annan kompileringsenhet"
+msgstr "Sannolikheten att COMDAT-funktionen kommer att delas med en annan kompileringsenhet."
#: params.def:128
-#, fuzzy, no-c-format
-#| msgid "Maximum probability of the entry BB of split region (in percent relative to entry BB of the function) to make partial inlining happen"
+#, no-c-format
msgid "Maximum probability of the entry BB of split region (in percent relative to entry BB of the function) to make partial inlining happen."
-msgstr "Maximala sannolikheten för ingång i GB av delad region (i procent i förhållande till ingång i GB av funktionen) för att partiell inlining skall ske"
+msgstr "Maximala sannolikheten för ingång i GB av delad region (i procent i förhållande till ingång i GB av funktionen) för att partiell inlining skall ske."
#: params.def:135
-#, fuzzy, no-c-format
-#| msgid "If -fvariable-expansion-in-unroller is used, the maximum number of times that an individual variable will be expanded during loop unrolling"
+#, no-c-format
msgid "If -fvariable-expansion-in-unroller is used, the maximum number of times that an individual variable will be expanded during loop unrolling."
-msgstr "Om -fvariable-expansion-in-unroller är på, det maximala antalet gånger som en enskild variabel kommer expanderas under slingutrullning"
+msgstr "Om -fvariable-expansion-in-unroller är på, det maximala antalet gånger som en enskild variabel kommer expanderas under slingutrullning."
#: params.def:141
-#, fuzzy, no-c-format
-#| msgid "If -ftree-vectorize is used, the minimal loop bound of a loop to be considered for vectorization"
+#, no-c-format
msgid "If -ftree-vectorize is used, the minimal loop bound of a loop to be considered for vectorization."
-msgstr "Om -ftree-vectorize används, den minimala slinggränsen på en slinga för att den skall övervägas för vektorisering"
+msgstr "Om -ftree-vectorize används, den minimala slinggränsen på en slinga för att den skall övervägas för vektorisering."
#: params.def:152
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions to consider to fill a delay slot"
+#, no-c-format
msgid "The maximum number of instructions to consider to fill a delay slot."
-msgstr "Det maximala antalet instruktioner att överväga för att fylla ett fördröjningsutrymme"
+msgstr "Det maximala antalet instruktioner att överväga för att fylla ett fördröjningsutrymme."
#: params.def:163
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions to consider to find accurate live register information"
+#, no-c-format
msgid "The maximum number of instructions to consider to find accurate live register information."
-msgstr "Det maximala antalet instruktioner att överväga för att hitta korrekt information om aktiva register"
+msgstr "Det maximala antalet instruktioner att överväga för att hitta korrekt information om aktiva register."
#: params.def:173
-#, fuzzy, no-c-format
-#| msgid "The maximum length of scheduling's pending operations list"
+#, no-c-format
msgid "The maximum length of scheduling's pending operations list."
-msgstr "Den maximala längden på schemaläggarens lista över väntande operationer"
+msgstr "Den maximala längden på schemaläggarens lista över väntande operationer."
#: params.def:180
-#, fuzzy, no-c-format
-#| msgid "The maximum number of backtrack attempts the scheduler should make when modulo scheduling a loop"
+#, no-c-format
msgid "The maximum number of backtrack attempts the scheduler should make when modulo scheduling a loop."
-msgstr "Det maximala antalet försök att gå tillbaka schemaläggaren skall göra vid moduloschemaläggning av en slinga"
+msgstr "Det maximala antalet försök att gå tillbaka schemaläggaren skall göra vid moduloschemaläggning av en slinga."
#: params.def:185
-#, fuzzy, no-c-format
-#| msgid "The size of function body to be considered large"
+#, no-c-format
msgid "The size of function body to be considered large."
-msgstr "Storleken på en funktionskropp för att betraktas som stor"
+msgstr "Storleken på en funktionskropp för att betraktas som stor."
#: params.def:189
-#, fuzzy, no-c-format
-#| msgid "Maximal growth due to inlining of large function (in percent)"
+#, no-c-format
msgid "Maximal growth due to inlining of large function (in percent)."
-msgstr "Maximal på grund av inline:ing av stora funktioner (i procent)"
+msgstr "Maximal på grund av inline:ing av stora funktioner (i procent)."
#: params.def:193
-#, fuzzy, no-c-format
-#| msgid "The size of translation unit to be considered large"
+#, no-c-format
msgid "The size of translation unit to be considered large."
-msgstr "Storleken på en översättningsenhet för att betraktas som stor"
+msgstr "Storleken på en översättningsenhet för att betraktas som stor."
#: params.def:197
-#, fuzzy, no-c-format
-#| msgid "How much can given compilation unit grow because of the inlining (in percent)"
+#, no-c-format
msgid "How much can given compilation unit grow because of the inlining (in percent)."
-msgstr "Hur mycket kan en given kompileringsenhet växa på grund av inline:ingen (i procent)"
+msgstr "Hur mycket kan en given kompileringsenhet växa på grund av inline:ingen (i procent)."
#: params.def:201
-#, fuzzy, no-c-format
-#| msgid "How much can given compilation unit grow because of the interprocedural constant propagation (in percent)"
+#, no-c-format
msgid "How much can given compilation unit grow because of the interprocedural constant propagation (in percent)."
-msgstr "hur mycket kan en given kompileringsenhet växa på grund av interprocedurell konstantpropagering (i procent)"
+msgstr "hur mycket kan en given kompileringsenhet växa på grund av interprocedurell konstantpropagering (i procent)."
#: params.def:205
-#, fuzzy, no-c-format
-#| msgid "Maximal estimated growth of function body caused by early inlining of single call"
+#, no-c-format
msgid "Maximal estimated growth of function body caused by early inlining of single call."
-msgstr "Maximal uppskattad ökning av funktionskropp orsakad av tidigare inline:ing av enkla anrop"
+msgstr "Maximal uppskattad ökning av funktionskropp orsakad av tidigare inline:ing av enkla anrop."
#: params.def:209
-#, fuzzy, no-c-format
-#| msgid "The size of stack frame to be considered large"
+#, no-c-format
msgid "The size of stack frame to be considered large."
-msgstr "Storleken på en stackram för att betraktas som stor"
+msgstr "Storleken på en stackram för att betraktas som stor."
#: params.def:213
-#, fuzzy, no-c-format
-#| msgid "Maximal stack frame growth due to inlining (in percent)"
+#, no-c-format
msgid "Maximal stack frame growth due to inlining (in percent)."
-msgstr "Maximal storleksökning på stackram på grund av inline:ing (i procent)"
+msgstr "Maximal storleksökning på stackram på grund av inline:ing (i procent)."
#: params.def:220
-#, fuzzy, no-c-format
-#| msgid "The maximum amount of memory to be allocated by GCSE"
+#, no-c-format
msgid "The maximum amount of memory to be allocated by GCSE."
-msgstr "Den maximala mängden minne som får allokeras av GCSE"
+msgstr "Den maximala mängden minne som får allokeras av GCSE."
#: params.def:227
-#, fuzzy, no-c-format
-#| msgid "The maximum ratio of insertions to deletions of expressions in GCSE"
+#, no-c-format
msgid "The maximum ratio of insertions to deletions of expressions in GCSE."
-msgstr "Det maximala förhållandet mellan insättningar och raderingar av uttryck i GCSE"
+msgstr "Det maximala förhållandet mellan insättningar och raderingar av uttryck i GCSE."
#: params.def:238
-#, fuzzy, no-c-format
-#| msgid "The threshold ratio for performing partial redundancy elimination after reload"
+#, no-c-format
msgid "The threshold ratio for performing partial redundancy elimination after reload."
-msgstr "Tröskelförhållandet för att utföra partiell redundanselimination efter omläsning"
+msgstr "Tröskelförhållandet för att utföra partiell redundanselimination efter omläsning."
# Undrar om jag fattat syftningen i "critical edges execution count" rätt!
#: params.def:245
-#, fuzzy, no-c-format
-#| msgid "The threshold ratio of critical edges execution count that permit performing redundancy elimination after reload"
+#, no-c-format
msgid "The threshold ratio of critical edges execution count that permit performing redundancy elimination after reload."
-msgstr "Tröskelförhållandet av antal beräkningar av kritiska bågar som tillåter att göra redundanseliminering efter omläsning"
+msgstr "Tröskelförhållandet av antal beräkningar av kritiska bågar som tillåter att göra redundanseliminering efter omläsning."
#: params.def:253
-#, fuzzy, no-c-format
-#| msgid "Scaling factor in calculation of maximum distance an expression can be moved by GCSE optimizations"
+#, no-c-format
msgid "Scaling factor in calculation of maximum distance an expression can be moved by GCSE optimizations."
-msgstr "Skalfaktor vid beräkning av maximala distansen ett uttryck kan flyttas genom GCSE-optimeringar"
+msgstr "Skalfaktor vid beräkning av maximala distansen ett uttryck kan flyttas genom GCSE-optimeringar."
#: params.def:259
-#, fuzzy, no-c-format
-#| msgid "Cost at which GCSE optimizations will not constraint the distance an expression can travel"
+#, no-c-format
msgid "Cost at which GCSE optimizations will not constraint the distance an expression can travel."
-msgstr "Kostnaden vid vilken GCSE-optimeringar inte kommer begränsa avståndet ett uttryck kan flytta"
+msgstr "Kostnaden vid vilken GCSE-optimeringar inte kommer begränsa avståndet ett uttryck kan flytta."
#: params.def:267
-#, fuzzy, no-c-format
-#| msgid "Maximum depth of search in the dominator tree for expressions to hoist"
+#, no-c-format
msgid "Maximum depth of search in the dominator tree for expressions to hoist."
-msgstr "Maximalt djup på sökningen i dominansträd för uttryck att hissa upp"
+msgstr "Maximalt djup på sökningen i dominansträd för uttryck att hissa upp."
#: params.def:275
#, no-c-format
@@ -1802,95 +1747,80 @@ msgid "Maximum depth of sqrt chains to use when synthesizing exponentiation by a
msgstr "Maximalt djup av sqrt-kedjor att använda vid syntetisering av exponentiering av en reell konstant."
#: params.def:287
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions to consider to unroll in a loop"
+#, no-c-format
msgid "The maximum number of instructions to consider to unroll in a loop."
-msgstr "Det maximala antalet instruktioner för att överväga att rulla ut i en slinga"
+msgstr "Det maximala antalet instruktioner för att överväga att rulla ut i en slinga."
#: params.def:293
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions to consider to unroll in a loop on average"
+#, no-c-format
msgid "The maximum number of instructions to consider to unroll in a loop on average."
-msgstr "Det maximala antalet instruktioner för att överväga att rulle ut i en slinga i genomsnitt"
+msgstr "Det maximala antalet instruktioner för att överväga att rulle ut i en slinga i genomsnitt."
#: params.def:298
-#, fuzzy, no-c-format
-#| msgid "The maximum number of unrollings of a single loop"
+#, no-c-format
msgid "The maximum number of unrollings of a single loop."
-msgstr "Det maximala antalet utrullningar av en enskild slinga"
+msgstr "Det maximala antalet utrullningar av en enskild slinga."
#: params.def:303
-#, fuzzy, no-c-format
-#| msgid "The maximum number of insns of a peeled loop"
+#, no-c-format
msgid "The maximum number of insns of a peeled loop."
-msgstr "Det maximala antalet instruktioner i en avskalad slinga"
+msgstr "Det maximala antalet instruktioner i en avskalad slinga."
#: params.def:308
-#, fuzzy, no-c-format
-#| msgid "The maximum number of peelings of a single loop"
+#, no-c-format
msgid "The maximum number of peelings of a single loop."
-msgstr "Det maximala antalet avskalningar av en enskild slinga"
+msgstr "Det maximala antalet avskalningar av en enskild slinga."
#: params.def:313
-#, fuzzy, no-c-format
-#| msgid "The maximum number of branches on the path through the peeled sequence"
+#, no-c-format
msgid "The maximum number of branches on the path through the peeled sequence."
-msgstr "Det maximala antalet grenar på vägen genom den skalade sekvensen"
+msgstr "Det maximala antalet grenar på vägen genom den skalade sekvensen."
#: params.def:318
-#, fuzzy, no-c-format
-#| msgid "The maximum number of insns of a completely peeled loop"
+#, no-c-format
msgid "The maximum number of insns of a completely peeled loop."
-msgstr "Det maximala antalet instruktioner i en helt avskalad slinga"
+msgstr "Det maximala antalet instruktioner i en helt avskalad slinga."
#: params.def:323
-#, fuzzy, no-c-format
-#| msgid "The maximum number of peelings of a single loop that is peeled completely"
+#, no-c-format
msgid "The maximum number of peelings of a single loop that is peeled completely."
-msgstr "Det maximala antalet avskalningar av en enskild slinga som är helt avskalad"
+msgstr "Det maximala antalet avskalningar av en enskild slinga som är helt avskalad."
#: params.def:328
-#, fuzzy, no-c-format
-#| msgid "The maximum number of insns of a peeled loop that rolls only once"
+#, no-c-format
msgid "The maximum number of insns of a peeled loop that rolls only once."
-msgstr "Det maximala antalet instruktioner i en avskalad slinga som bara snurrar en gång"
+msgstr "Det maximala antalet instruktioner i en avskalad slinga som bara snurrar en gång."
#: params.def:333
-#, fuzzy, no-c-format
-#| msgid "The maximum depth of a loop nest we completely peel"
+#, no-c-format
msgid "The maximum depth of a loop nest we completely peel."
-msgstr "Det maximala djupet av nästade slingor som vi skalar helt"
+msgstr "Det maximala djupet av nästade slingor som vi skalar helt."
#: params.def:339
-#, fuzzy, no-c-format
-#| msgid "The maximum number of insns of an unswitched loop"
+#, no-c-format
msgid "The maximum number of insns of an unswitched loop."
-msgstr "Det maximala antalet instruktioner i en oväxlad slinga"
+msgstr "Det maximala antalet instruktioner i en oväxlad slinga."
#: params.def:344
-#, fuzzy, no-c-format
-#| msgid "The maximum number of unswitchings in a single loop"
+#, no-c-format
msgid "The maximum number of unswitchings in a single loop."
-msgstr "Det maximala antalet omväxlingar i en enskild slinga"
+msgstr "Det maximala antalet omväxlingar i en enskild slinga."
# Är syftningarna rätt här?
#: params.def:351
-#, fuzzy, no-c-format
-#| msgid "Bound on the number of iterations the brute force # of iterations analysis algorithm evaluates"
+#, no-c-format
msgid "Bound on the number of iterations the brute force # of iterations analysis algorithm evaluates."
-msgstr "Begränsning på antalet iterationer som utvärderas av råstyrkealgoritmen för att analysera antalet iterationer"
+msgstr "Begränsning på antalet iterationer som utvärderas av råstyrkealgoritmen för att analysera antalet iterationer."
#: params.def:357
-#, fuzzy, no-c-format
-#| msgid "Bound on the cost of an expression to compute the number of iterations"
+#, no-c-format
msgid "Bound on the cost of an expression to compute the number of iterations."
-msgstr "Begränsningen av kostnaden för ett uttryck för att beräkna antalet iterationer"
+msgstr "Begränsningen av kostnaden för ett uttryck för att beräkna antalet iterationer."
#: params.def:363
-#, fuzzy, no-c-format
-#| msgid "A factor for tuning the upper bound that swing modulo scheduler uses for scheduling a loop"
+#, no-c-format
msgid "A factor for tuning the upper bound that swing modulo scheduler uses for scheduling a loop."
-msgstr "En faktor för att trimma den övre gränsen som pendlingsmoduloschemaläggaren använder för att schemalägga en slinga"
+msgstr "En faktor för att trimma den övre gränsen som pendlingsmoduloschemaläggaren använder för att schemalägga en slinga."
#: params.def:368
#, no-c-format
@@ -1898,245 +1828,204 @@ msgid "The minimum value of stage count that swing modulo scheduler will generat
msgstr "Minimivärdet på steglängden som pendlingsschemaläggaren kommer generera."
#: params.def:372
-#, fuzzy, no-c-format
-#| msgid "The number of cycles the swing modulo scheduler considers when checking conflicts using DFA"
+#, no-c-format
msgid "The number of cycles the swing modulo scheduler considers when checking conflicts using DFA."
-msgstr "Antalet cykler som pendlingsschemaläggaren beaktar när den söker efter konflikter med DFA"
+msgstr "Antalet cykler som pendlingsschemaläggaren beaktar när den söker efter konflikter med DFA."
#: params.def:376
-#, fuzzy, no-c-format
-#| msgid "A threshold on the average loop count considered by the swing modulo scheduler"
+#, no-c-format
msgid "A threshold on the average loop count considered by the swing modulo scheduler."
-msgstr "Ett tröskelvärde på det genomsnittliga antalet varv som beaktas av pendlingsmoduloschemaläggaren"
+msgstr "Ett tröskelvärde på det genomsnittliga antalet varv som beaktas av pendlingsmoduloschemaläggaren."
#: params.def:381
-#, fuzzy, no-c-format
-#| msgid "A basic block profile count is considered hot if it contributes to the given permillage of the entire profiled execution"
+#, no-c-format
msgid "A basic block profile count is considered hot if it contributes to the given permillage of the entire profiled execution."
-msgstr "Ett grundblocks profilräknare anses het om den bidrar till den givna promillesatsen för hela den profilerade körningen"
+msgstr "Ett grundblocks profilräknare anses het om den bidrar till den givna promillesatsen för hela den profilerade körningen."
#: params.def:386
-#, fuzzy, no-c-format
-#| msgid "Select fraction of the maximal frequency of executions of basic block in function given basic block needs to have to be considered hot"
+#, no-c-format
msgid "Select fraction of the maximal frequency of executions of basic block in function given basic block needs to have to be considered hot."
-msgstr "Välj andel av den maximala exekveringsfrekvensen av grundblock i funktion givet grundblock måste ha för att anses hett"
+msgstr "Välj andel av den maximala exekveringsfrekvensen av grundblock i funktion givet grundblock måste ha för att anses hett."
#: params.def:391
-#, fuzzy, no-c-format
-#| msgid "The minimum fraction of profile runs a given basic block execution count must be not to be considered unlikely"
+#, no-c-format
msgid "The minimum fraction of profile runs a given basic block execution count must be not to be considered unlikely."
-msgstr "Minsta andelen av profileringskörningar ett givet grundblocks exekveringsräknare måste ha för att inte anses osannolik"
+msgstr "Minsta andelen av profileringskörningar ett givet grundblocks exekveringsräknare måste ha för att inte anses osannolik."
#: params.def:396
-#, fuzzy, no-c-format
-#| msgid "Select fraction of the maximal frequency of executions of basic block in function given basic block get alignment"
+#, no-c-format
msgid "Select fraction of the maximal frequency of executions of basic block in function given basic block get alignment."
-msgstr "Välj andel av den maximala exekveringsfrekvensen av grundblock i funktion givet grundblock måste ha för att få justering"
+msgstr "Välj andel av den maximala exekveringsfrekvensen av grundblock i funktion givet grundblock måste ha för att få justering."
#: params.def:401
-#, fuzzy, no-c-format
-#| msgid "Loops iterating at least selected number of iterations will get loop alignement."
+#, no-c-format
msgid "Loops iterating at least selected number of iterations will get loop alignement.."
msgstr "Slingor som itererar åtminstone det valda antalet gånger kommer att få slingjustering."
#: params.def:417
-#, fuzzy, no-c-format
-#| msgid "The maximum number of loop iterations we predict statically"
+#, no-c-format
msgid "The maximum number of loop iterations we predict statically."
-msgstr "Det maximala antalet slingiterationer vi förutsäger statiskt"
+msgstr "Det maximala antalet slingiterationer vi förutsäger statiskt."
-# Ett extra "p" efter procenttecknet p.g.a.
-# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60149
#: params.def:430
#, no-c-format
msgid "Set the estimated probability in percentage for builtin expect. The default value is 90% probability."
-msgstr "Ange den uppskattade sannolikheten i procent för den inbyggda expect. Standardvärdet är 90 %p sannolikhet."
+msgstr "Ange den uppskattade sannolikheten i procent för den inbyggda expect. Standardvärdet är 90 % sannolikhet."
#: params.def:434
-#, fuzzy, no-c-format
-#| msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is available"
+#, no-c-format
msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is available."
-msgstr "Andelen av funktion i procent, viktad efter exekveringsfrekvens, som måste täckas av spårinformation. Används när profileringsdata är tillgängligt"
+msgstr "Andelen av funktion i procent, viktad efter exekveringsfrekvens, som måste täckas av spårinformation. Används när profileringsdata är tillgängligt."
#: params.def:438
-#, fuzzy, no-c-format
-#| msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is not available"
+#, no-c-format
msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is not available."
-msgstr "Andelen av funktion i procent, viktad efter exekveringsfrekvens, som måste täckas av spårinformation. Används när profileringsdata inte är tillgängligt"
+msgstr "Andelen av funktion i procent, viktad efter exekveringsfrekvens, som måste täckas av spårinformation. Används när profileringsdata inte är tillgängligt."
#: params.def:442
-#, fuzzy, no-c-format
-#| msgid "Maximal code growth caused by tail duplication (in percent)"
+#, no-c-format
msgid "Maximal code growth caused by tail duplication (in percent)."
-msgstr "Maximal kodtillväxt orsakad av svansduplicering (i procent)"
+msgstr "Maximal kodtillväxt orsakad av svansduplicering (i procent)."
#: params.def:446
-#, fuzzy, no-c-format
-#| msgid "Stop reverse growth if the reverse probability of best edge is less than this threshold (in percent)"
+#, no-c-format
msgid "Stop reverse growth if the reverse probability of best edge is less than this threshold (in percent)."
-msgstr "Stoppa omvänd tillväxt om den omvända sannolikheten av bästa båge är mindre än detta tröskelvärde (i procent)"
+msgstr "Stoppa omvänd tillväxt om den omvända sannolikheten av bästa båge är mindre än detta tröskelvärde (i procent)."
#: params.def:450
-#, fuzzy, no-c-format
-#| msgid "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is available"
+#, no-c-format
msgid "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is available."
-msgstr "Stoppa framåttillväxt om sannolikheten av bästa båge är mindre än detta tröskelvärde (i procent). Används när profileringsdata är tillgänglig"
+msgstr "Stoppa framåttillväxt om sannolikheten av bästa båge är mindre än detta tröskelvärde (i procent). Används när profileringsdata är tillgänglig."
#: params.def:454
-#, fuzzy, no-c-format
-#| msgid "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is not available"
+#, no-c-format
msgid "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is not available."
-msgstr "Stoppa framåttillväxt om sannolikheten av bästa båge är mindre än detta tröskelvärde (i procent). Används när profileringsdata inte är tillgänglig"
+msgstr "Stoppa framåttillväxt om sannolikheten av bästa båge är mindre än detta tröskelvärde (i procent). Används när profileringsdata inte är tillgänglig."
#: params.def:460
-#, fuzzy, no-c-format
-#| msgid "The maximum number of incoming edges to consider for crossjumping"
+#, no-c-format
msgid "The maximum number of incoming edges to consider for crossjumping."
-msgstr "Det maximala antalet ingående bågar att överväga för korshopp"
+msgstr "Det maximala antalet ingående bågar att överväga för korshopp."
#: params.def:466
-#, fuzzy, no-c-format
-#| msgid "The minimum number of matching instructions to consider for crossjumping"
+#, no-c-format
msgid "The minimum number of matching instructions to consider for crossjumping."
-msgstr "Det minsta antal av matchande instruktioner att överväga för korshopp"
+msgstr "Det minsta antal av matchande instruktioner att överväga för korshopp."
#: params.def:472
-#, fuzzy, no-c-format
-#| msgid "The maximum expansion factor when copying basic blocks"
+#, no-c-format
msgid "The maximum expansion factor when copying basic blocks."
-msgstr "Den maximala expansionsfaktorn vid kopiering av grundblock"
+msgstr "Den maximala expansionsfaktorn vid kopiering av grundblock."
#: params.def:478
-#, fuzzy, no-c-format
-#| msgid "The maximum number of insns to duplicate when unfactoring computed gotos"
+#, no-c-format
msgid "The maximum number of insns to duplicate when unfactoring computed gotos."
-msgstr "Det maximala antalet instruktioner att duplicera vid avfaktorering av beräknade goto"
+msgstr "Det maximala antalet instruktioner att duplicera vid avfaktorering av beräknade goto."
#: params.def:484
-#, fuzzy, no-c-format
-#| msgid "The maximum length of path considered in cse"
+#, no-c-format
msgid "The maximum length of path considered in cse."
-msgstr "Den maximala längden på sökvägar som övervägs i cse"
+msgstr "Den maximala längden på sökvägar som övervägs i cse."
#: params.def:488
-#, fuzzy, no-c-format
-#| msgid "The maximum instructions CSE process before flushing"
+#, no-c-format
msgid "The maximum instructions CSE process before flushing."
-msgstr "Det maximala antalet instruktioner CSE bearbetar före tömning"
+msgstr "Det maximala antalet instruktioner CSE bearbetar före tömning."
#: params.def:495
-#, fuzzy, no-c-format
-#| msgid "The minimum cost of an expensive expression in the loop invariant motion"
+#, no-c-format
msgid "The minimum cost of an expensive expression in the loop invariant motion."
-msgstr "Den minsta kostnaden av ett dyrt uttryck vid flyttning av slinginvariant"
+msgstr "Den minsta kostnaden av ett dyrt uttryck vid flyttning av slinginvariant."
#: params.def:504
-#, fuzzy, no-c-format
-#| msgid "Bound on number of candidates below that all candidates are considered in iv optimizations"
+#, no-c-format
msgid "Bound on number of candidates below that all candidates are considered in iv optimizations."
-msgstr "Gräns för antalet kandidater under vilken alla kandidater övervägs i iv-optimeringar"
+msgstr "Gräns för antalet kandidater under vilken alla kandidater övervägs i iv-optimeringar."
#: params.def:512
-#, fuzzy, no-c-format
-#| msgid "Bound on number of iv uses in loop optimized in iv optimizations"
+#, no-c-format
msgid "Bound on number of iv uses in loop optimized in iv optimizations."
-msgstr "Gräns för antal iv-användningar i en slinga optimerad i iv-optimeringar"
+msgstr "Gräns för antal iv-användningar i en slinga optimerad i iv-optimeringar."
#: params.def:520
-#, fuzzy, no-c-format
-#| msgid "If number of candidates in the set is smaller, we always try to remove unused ivs during its optimization"
+#, no-c-format
msgid "If number of candidates in the set is smaller, we always try to remove unused ivs during its optimization."
-msgstr "Om antalet kandidater i mängden är mindre, försöker vi alltid ta bort oanvända iv under deras optimering"
+msgstr "Om antalet kandidater i mängden är mindre, försöker vi alltid ta bort oanvända iv under deras optimering."
#: params.def:525
-#, fuzzy, no-c-format
-#| msgid "Bound on size of expressions used in the scalar evolutions analyzer"
+#, no-c-format
msgid "Bound on size of expressions used in the scalar evolutions analyzer."
-msgstr "Gräns för storleken av uttryck som används i analyseraren av skalära uttryck"
+msgstr "Gräns för storleken av uttryck som används i analyseraren av skalära uttryck."
#: params.def:530
-#, fuzzy, no-c-format
-#| msgid "Bound on the complexity of the expressions in the scalar evolutions analyzer"
+#, no-c-format
msgid "Bound on the complexity of the expressions in the scalar evolutions analyzer."
-msgstr "Gräns på komplexiteten av uttryck som används i analyseraren av skalära uttryck"
+msgstr "Gräns på komplexiteten av uttryck som används i analyseraren av skalära uttryck."
#: params.def:535
-#, fuzzy, no-c-format
-#| msgid "Bound on number of runtime checks inserted by the vectorizer's loop versioning for alignment check"
+#, no-c-format
msgid "Bound on number of runtime checks inserted by the vectorizer's loop versioning for alignment check."
-msgstr "Gräns för antalet körtidskontroller som läggs in av vektoriserarens slingversionering för justeringskontroller"
+msgstr "Gräns för antalet körtidskontroller som läggs in av vektoriserarens slingversionering för justeringskontroller."
#: params.def:540
-#, fuzzy, no-c-format
-#| msgid "Bound on number of runtime checks inserted by the vectorizer's loop versioning for alias check"
+#, no-c-format
msgid "Bound on number of runtime checks inserted by the vectorizer's loop versioning for alias check."
-msgstr "Gräns för antalet körtidskontroller som läggs in av vektoriserarens slingversionering för aliaskontroller"
+msgstr "Gräns för antalet körtidskontroller som läggs in av vektoriserarens slingversionering för aliaskontroller."
#: params.def:545
-#, fuzzy, no-c-format
-#| msgid "Max number of loop peels to enhancement alignment of data references in a loop"
+#, no-c-format
msgid "Max number of loop peels to enhancement alignment of data references in a loop."
-msgstr "Maximala antalet slingavskalningar för att förbättra justering av datareferenser i en slinga"
+msgstr "Maximala antalet slingavskalningar för att förbättra justering av datareferenser i en slinga."
#: params.def:550
-#, fuzzy, no-c-format
-#| msgid "The maximum memory locations recorded by cselib"
+#, no-c-format
msgid "The maximum memory locations recorded by cselib."
-msgstr "Det maximala antalet minnesplatser noterade av cselib"
+msgstr "Det maximala antalet minnesplatser noterade av cselib."
#: params.def:563
-#, fuzzy, no-c-format
-#| msgid "Minimum heap expansion to trigger garbage collection, as a percentage of the total size of the heap"
+#, no-c-format
msgid "Minimum heap expansion to trigger garbage collection, as a percentage of the total size of the heap."
-msgstr "Minsta heap-expansion för att utlösa skräpsamling, som en procent av den totala storleken på heap:en"
+msgstr "Minsta heap-expansion för att utlösa skräpsamling, som en procent av den totala storleken på heap:en."
#: params.def:568
-#, fuzzy, no-c-format
-#| msgid "Minimum heap size before we start collecting garbage, in kilobytes"
+#, no-c-format
msgid "Minimum heap size before we start collecting garbage, in kilobytes."
-msgstr "Minsta heap-storlek före vi börjar samla skräp, i kilobyte"
+msgstr "Minsta heap-storlek före vi börjar samla skräp, i kilobyte."
#: params.def:576
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions to search backward when looking for equivalent reload"
+#, no-c-format
msgid "The maximum number of instructions to search backward when looking for equivalent reload."
-msgstr "Det största antalet instruktioner att söka bakåt för att leta efter ekvivalent omläsning"
+msgstr "Det största antalet instruktioner att söka bakåt för att leta efter ekvivalent omläsning."
#: params.def:581
-#, fuzzy, no-c-format
-#| msgid "Target block's relative execution frequency (as a percentage) required to sink a statement"
+#, no-c-format
msgid "Target block's relative execution frequency (as a percentage) required to sink a statement."
-msgstr "Målet för blocks relativa exekveringsfrekvens (som en procentsats) som behövs för att sänka en sats"
+msgstr "Målet för blocks relativa exekveringsfrekvens (som en procentsats) som behövs för att sänka en sats."
#: params.def:586 params.def:596
-#, fuzzy, no-c-format
-#| msgid "The maximum number of blocks in a region to be considered for interblock scheduling"
+#, no-c-format
msgid "The maximum number of blocks in a region to be considered for interblock scheduling."
-msgstr "Det maximala antalet block i en region som övervägs för interblockschemaläggning"
+msgstr "Det maximala antalet block i en region som övervägs för interblockschemaläggning."
#: params.def:591 params.def:601
-#, fuzzy, no-c-format
-#| msgid "The maximum number of insns in a region to be considered for interblock scheduling"
+#, no-c-format
msgid "The maximum number of insns in a region to be considered for interblock scheduling."
-msgstr "Det maximala antalet instruktioner i en region för att övervägas för interblockschemaläggning"
+msgstr "Det maximala antalet instruktioner i en region för att övervägas för interblockschemaläggning."
#: params.def:606
-#, fuzzy, no-c-format
-#| msgid "The minimum probability of reaching a source block for interblock speculative scheduling"
+#, no-c-format
msgid "The minimum probability of reaching a source block for interblock speculative scheduling."
-msgstr "Den minsta sannolikheten för att nå ett källkodsblock för spekulativ schemaläggning mellan block"
+msgstr "Den minsta sannolikheten för att nå ett källkodsblock för spekulativ schemaläggning mellan block."
#: params.def:611
-#, fuzzy, no-c-format
-#| msgid "The maximum number of iterations through CFG to extend regions"
+#, no-c-format
msgid "The maximum number of iterations through CFG to extend regions."
-msgstr "Det maximala antal iterationer genom CFG för utökade regioner"
+msgstr "Det maximala antal iterationer genom CFG för utökade regioner."
#: params.def:616
-#, fuzzy, no-c-format
-#| msgid "The maximum conflict delay for an insn to be considered for speculative motion"
+#, no-c-format
msgid "The maximum conflict delay for an insn to be considered for speculative motion."
-msgstr "Den maximala konfliktfördröjningen för att en instruktion skall övervägas för spekulativ förflyttning"
+msgstr "Den maximala konfliktfördröjningen för att en instruktion skall övervägas för spekulativ förflyttning."
#: params.def:621
#, no-c-format
@@ -2149,28 +2038,24 @@ msgid "The minimum probability an edge must have for the scheduler to save its s
msgstr "Den minsta sannolikhet en båge måste ha för att schemaläggaren skall spara sitt tillstånd över den."
#: params.def:631
-#, fuzzy, no-c-format
-#| msgid "The maximum size of the lookahead window of selective scheduling"
+#, no-c-format
msgid "The maximum size of the lookahead window of selective scheduling."
-msgstr "Den maximala storleken på fönstret för framåtblickar vid selektiv schemaläggning"
+msgstr "Den maximala storleken på fönstret för framåtblickar vid selektiv schemaläggning."
#: params.def:636
-#, fuzzy, no-c-format
-#| msgid "Maximum number of times that an insn could be scheduled"
+#, no-c-format
msgid "Maximum number of times that an insn could be scheduled."
-msgstr "Maximalt antal gånger som en instruktion kan schemaläggas"
+msgstr "Maximalt antal gånger som en instruktion kan schemaläggas."
#: params.def:641
-#, fuzzy, no-c-format
-#| msgid "Maximum number of instructions in the ready list that are considered eligible for renaming"
+#, no-c-format
msgid "Maximum number of instructions in the ready list that are considered eligible for renaming."
-msgstr "Det maximala antalet instruktioner i redolistan som betraktas som valbara för namnändring"
+msgstr "Det maximala antalet instruktioner i redolistan som betraktas som valbara för namnändring."
#: params.def:646
-#, fuzzy, no-c-format
-#| msgid "Minimal distance between possibly conflicting store and load"
+#, no-c-format
msgid "Minimal distance between possibly conflicting store and load."
-msgstr "Minimala avståndet mellan lagring och läsning som kan vara i konflikt"
+msgstr "Minimala avståndet mellan lagring och laddning som kan vara i konflikt."
#: params.def:651
#, no-c-format
@@ -2178,448 +2063,374 @@ msgid "Hardware autoprefetcher scheduler model control flag. Number of lookahea
msgstr "Styrflagga för schemaläggningsmodell av automatisk förhandshämtning i hÃ¥rdvara. Antalet cykler av framförhÃ¥llning modellen tittar in i; vid â€0†aktiveras endast heuristik för instruktionssortering. Avaktiverat som standard."
#: params.def:656
-#, fuzzy, no-c-format
-#| msgid "The maximum number of RTL nodes that can be recorded as combiner's last value"
+#, no-c-format
msgid "The maximum number of RTL nodes that can be recorded as combiner's last value."
-msgstr "Det maximala antalet RTL-noder som kan noteras som kombinerarens sista värde"
+msgstr "Det maximala antalet RTL-noder som kan noteras som kombinerarens sista värde."
#: params.def:661
-#, fuzzy, no-c-format
-#| msgid "The maximum number of insns combine tries to combine"
+#, no-c-format
msgid "The maximum number of insns combine tries to combine."
-msgstr "Det maximala antalet instruktionskombinationsförsök att kombinera"
+msgstr "Det maximala antalet instruktionskombinationsförsök att kombinera."
#: params.def:670
-#, fuzzy, no-c-format
-#| msgid "The upper bound for sharing integer constants"
+#, no-c-format
msgid "The upper bound for sharing integer constants."
-msgstr "Övre gränsen för att dela heltalskonstanter"
+msgstr "Övre gränsen för att dela heltalskonstanter."
#: params.def:675
-#, fuzzy, no-c-format
-#| msgid "The lower bound for a buffer to be considered for stack smashing protection"
+#, no-c-format
msgid "The lower bound for a buffer to be considered for stack smashing protection."
-msgstr "Den undre gränsen för att en buffer skall övervägas för skydd mot stacksprängning"
+msgstr "Den undre gränsen för att en buffer skall övervägas för skydd mot stacksprängning."
#: params.def:680
-#, fuzzy, no-c-format
-#| msgid "The minimum size of variables taking part in stack slot sharing when not optimizing"
+#, no-c-format
msgid "The minimum size of variables taking part in stack slot sharing when not optimizing."
-msgstr "Minsta storleken på variabler som är med i stackutrymmesdelning utan optimering"
+msgstr "Minsta storleken på variabler som är med i stackutrymmesdelning utan optimering."
#: params.def:699
-#, fuzzy, no-c-format
-#| msgid "Maximum number of statements allowed in a block that needs to be duplicated when threading jumps"
+#, no-c-format
msgid "Maximum number of statements allowed in a block that needs to be duplicated when threading jumps."
-msgstr "Maximalt antal satser som tillåts i ett block som behöver dubbleras när hopp trådas"
+msgstr "Maximalt antal satser som tillåts i ett block som behöver dubbleras när hopp trådas."
#: params.def:708
-#, fuzzy, no-c-format
-#| msgid "Maximum number of fields in a structure before pointer analysis treats the structure as a single variable"
+#, no-c-format
msgid "Maximum number of fields in a structure before pointer analysis treats the structure as a single variable."
-msgstr "Maximalt antal fält i en post före pekaranalys behandlar posten som en enda variabel"
+msgstr "Maximalt antal fält i en post före pekaranalys behandlar posten som en enda variabel."
#: params.def:713
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions ready to be issued to be considered by the scheduler during the first scheduling pass"
+#, no-c-format
msgid "The maximum number of instructions ready to be issued to be considered by the scheduler during the first scheduling pass."
-msgstr "Det maximala antalet instruktioner redo att matas ut för att övervägas under det första schemaläggningspasset"
+msgstr "Det maximala antalet instruktioner redo att matas ut för att övervägas under det första schemaläggningspasset."
#: params.def:719
-#, fuzzy, no-c-format
-#| msgid "Maximum number of active local stores in RTL dead store elimination"
+#, no-c-format
msgid "Maximum number of active local stores in RTL dead store elimination."
-msgstr "Maximalt antal aktiva lokala lagringar i RTL vid eliminering av döda lagringar"
+msgstr "Maximalt antal aktiva lokala lagringar i RTL vid eliminering av döda lagringar."
#: params.def:729
-#, fuzzy, no-c-format
-#| msgid "The number of insns executed before prefetch is completed"
+#, no-c-format
msgid "The number of insns executed before prefetch is completed."
-msgstr "Antalet instruktioner som körs före förhandshämtning (prefetch) är klar"
+msgstr "Antalet instruktioner som körs före förhandshämtning (prefetch) är klar."
#: params.def:736
-#, fuzzy, no-c-format
-#| msgid "The number of prefetches that can run at the same time"
+#, no-c-format
msgid "The number of prefetches that can run at the same time."
-msgstr "Antalet förhandshämtningar (prefetch) som kan vara igång samtidigt"
+msgstr "Antalet förhandshämtningar (prefetch) som kan vara igång samtidigt."
#: params.def:743
-#, fuzzy, no-c-format
-#| msgid "The size of L1 cache"
+#, no-c-format
msgid "The size of L1 cache."
-msgstr "Storleken på L1-cachen"
+msgstr "Storleken på L1-cachen."
#: params.def:750
-#, fuzzy, no-c-format
-#| msgid "The size of L1 cache line"
+#, no-c-format
msgid "The size of L1 cache line."
-msgstr "Storleken på cache-raderna i L1"
+msgstr "Storleken på cache-raderna i L1."
#: params.def:757
-#, fuzzy, no-c-format
-#| msgid "The size of L2 cache"
+#, no-c-format
msgid "The size of L2 cache."
-msgstr "Storleken på L2-cachen"
+msgstr "Storleken på L2-cachen."
#: params.def:768
-#, fuzzy, no-c-format
-#| msgid "Whether to use canonical types"
+#, no-c-format
msgid "Whether to use canonical types."
-msgstr "Om kanoniska typer skall användas"
+msgstr "Om kanoniska typer skall användas."
#: params.def:773
-#, fuzzy, no-c-format
-#| msgid "Maximum length of partial antic set when performing tree pre optimization"
+#, no-c-format
msgid "Maximum length of partial antic set when performing tree pre optimization."
-msgstr "Maximal längd på partial förväntansmängd när föroptimeringar på träd görs"
+msgstr "Maximal längd på partial förväntansmängd när föroptimeringar på träd görs."
#: params.def:783
-#, fuzzy, no-c-format
-#| msgid "Maximum size of a SCC before SCCVN stops processing a function"
+#, no-c-format
msgid "Maximum size of a SCC before SCCVN stops processing a function."
-msgstr "Maximal storlek på en SCC före SCCVN slutar bearbeta en funktion"
+msgstr "Maximal storlek på en SCC före SCCVN slutar bearbeta en funktion."
#: params.def:794
-#, fuzzy, no-c-format
-#| msgid "Maximum number of disambiguations to perform per memory access"
+#, no-c-format
msgid "Maximum number of disambiguations to perform per memory access."
-msgstr "Maximalt antal upplösningar av tvetydigheter att utföra per minnesåtkomst"
+msgstr "Maximalt antal upplösningar av tvetydigheter att utföra per minnesåtkomst."
#: params.def:799
-#, fuzzy, no-c-format
-#| msgid "Max loops number for regional RA"
+#, no-c-format
msgid "Max loops number for regional RA."
-msgstr "Maximalt slingantal för regional RA"
+msgstr "Maximalt slingantal för regional RA."
#: params.def:804
-#, fuzzy, no-c-format
-#| msgid "Max size of conflict table in MB"
+#, no-c-format
msgid "Max size of conflict table in MB."
-msgstr "Maximal storlek på konflikttabell i MB"
+msgstr "Maximal storlek på konflikttabell i MB."
#: params.def:809
-#, fuzzy, no-c-format
-#| msgid "The number of registers in each class kept unused by loop invariant motion"
+#, no-c-format
msgid "The number of registers in each class kept unused by loop invariant motion."
-msgstr "Antalet register i varje klass som behålls oanvänt vid flyttning av slinginvariant"
+msgstr "Antalet register i varje klass som behålls oanvänt vid flyttning av slinginvariant."
#: params.def:814
-#, fuzzy, no-c-format
-#| msgid "The max number of reload pseudos which are considered during spilling a non-reload pseudo"
+#, no-c-format
msgid "The max number of reload pseudos which are considered during spilling a non-reload pseudo."
-msgstr "Maximalt antal omläsningar av pseudoregister som övervägs när ett icke-omläst pseudoregister spills"
+msgstr "Maximalt antal omläsningar av pseudoregister som övervägs när ett icke-omläst pseudoregister spills."
#: params.def:819
-#, fuzzy, no-c-format
-#| msgid "Minimal fall-through edge probability in percentage used to add BB to inheritance EBB in LRA"
+#, no-c-format
msgid "Minimal fall-through edge probability in percentage used to add BB to inheritance EBB in LRA."
-msgstr "Minimal sannolikhet för bågar att falla igenom i procent som används för att lägga till GB till arvs-EBB i LRA"
+msgstr "Minimal sannolikhet för bågar att falla igenom i procent som används för att lägga till GB till arvs-EBB i LRA."
#: params.def:827
-#, fuzzy, no-c-format
-#| msgid "The maximum ratio between array size and switch branches for a switch conversion to take place"
+#, no-c-format
msgid "The maximum ratio between array size and switch branches for a switch conversion to take place."
-msgstr "Det maximala förhållandet mellan vektorstorlek och switch-grenar för att en switch-konvertering skall ske"
+msgstr "Det maximala förhållandet mellan vektorstorlek och switch-grenar för att en switch-konvertering skall ske."
#: params.def:835
-#, fuzzy, no-c-format
-#| msgid "size of tiles for loop blocking"
+#, no-c-format
msgid "size of tiles for loop blocking."
-msgstr "storlek på bitar för slingblockning"
+msgstr "storlek på bitar för slingblockning."
#: params.def:842
-#, fuzzy, no-c-format
-#| msgid "maximum number of parameters in a SCoP"
+#, no-c-format
msgid "maximum number of parameters in a SCoP."
-msgstr "maximalt antal parameter i en SCoP"
+msgstr "maximalt antal parameter i en SCoP."
#: params.def:849
-#, fuzzy, no-c-format
-#| msgid "maximum number of basic blocks per function to be analyzed by Graphite"
+#, no-c-format
msgid "maximum number of basic blocks per function to be analyzed by Graphite."
-msgstr "maximalt antal grundblock per funktion att analyseras av Graphite"
+msgstr "maximalt antal grundblock per funktion att analyseras av Graphite."
#: params.def:856
-#, fuzzy, no-c-format
-#| msgid "maximum number of parameters in a SCoP"
+#, no-c-format
msgid "maximum number of arrays per scop."
-msgstr "maximalt antal parameter i en SCoP"
+msgstr "maximalt antal vektorer per scop."
#: params.def:863
-#, fuzzy, no-c-format
-#| msgid "maximum number of basic blocks per function to be analyzed by Graphite"
+#, no-c-format
msgid "minimal number of loops per function to be analyzed by Graphite."
-msgstr "maximalt antal grundblock per funktion att analyseras av Graphite"
+msgstr "maximalt antal slingor per funktion att analyseras av Graphite."
#: params.def:868
-#, fuzzy, no-c-format
-#| msgid "The maximum number of insns of an unswitched loop"
+#, no-c-format
msgid "maximum number of isl operations, 0 means unlimited"
-msgstr "Det maximala antalet instruktioner i en oväxlad slinga"
+msgstr "maximala antalet isl-operationer, 0 betyder obegränsat"
#: params.def:874
-#, fuzzy, no-c-format
-#| msgid "Maximum number of datarefs in loop for building loop data dependencies"
+#, no-c-format
msgid "Maximum number of datarefs in loop for building loop data dependencies."
-msgstr "Maximalt antal datareferenser i en slinga för att bygga slingdataberoenden"
+msgstr "Maximalt antal datareferenser i en slinga för att bygga slingdataberoenden."
#: params.def:881
-#, fuzzy, no-c-format
-#| msgid "Max basic blocks number in loop for loop invariant motion"
+#, no-c-format
msgid "Max basic blocks number in loop for loop invariant motion."
-msgstr "Maximalt antal grundblock i slinga-för-slinga-invarianta förflyttningar"
+msgstr "Maximalt antal grundblock i slinga-för-slinga-invarianta förflyttningar."
#: params.def:889
-#, fuzzy, no-c-format
-#| msgid "use internal function id in profile lookup"
+#, no-c-format
msgid "use internal function id in profile lookup."
-msgstr "använd internt funktions-id i profileringsuppslagningar"
+msgstr "använd internt funktions-id i profileringsuppslagningar."
#: params.def:897
-#, fuzzy, no-c-format
-#| msgid "track topn target addresses in indirect-call profile"
+#, no-c-format
msgid "track topn target addresses in indirect-call profile."
-msgstr "spåra topn måladresser i indirekt-anropsprofil"
+msgstr "spåra topn måladresser i indirekt-anropsprofil."
#: params.def:903
-#, fuzzy, no-c-format
-#| msgid "Maximum number of instructions in basic block to be considered for SLP vectorization"
+#, no-c-format
msgid "Maximum number of instructions in basic block to be considered for SLP vectorization."
-msgstr "Det maximala antalet instruktioner i grundblock för beaktas för SLP-vektorisering"
+msgstr "Det maximala antalet instruktioner i grundblock för beaktas för SLP-vektorisering."
#: params.def:908
-#, fuzzy, no-c-format
-#| msgid "Min. ratio of insns to prefetches to enable prefetching for a loop with an unknown trip count"
+#, no-c-format
msgid "Min. ratio of insns to prefetches to enable prefetching for a loop with an unknown trip count."
-msgstr "Minsta förhållande av instruktioner till minnesoperationer för att aktivera förhandshämtning (prefetching) för en slinga med okänt antal turer"
+msgstr "Minsta förhållande av instruktioner till minnesoperationer för att aktivera förhandshämtning (prefetching) för en slinga med okänt antal turer."
#: params.def:914
-#, fuzzy, no-c-format
-#| msgid "Min. ratio of insns to mem ops to enable prefetching in a loop"
+#, no-c-format
msgid "Min. ratio of insns to mem ops to enable prefetching in a loop."
-msgstr "Minsta förhållande av instruktioner till minnesoperationer för att aktivera förhandshämtning (prefetching) i en slinga"
+msgstr "Minsta förhållande av instruktioner till minnesoperationer för att aktivera förhandshämtning (prefetching) i en slinga."
#: params.def:921
-#, fuzzy, no-c-format
-#| msgid "Max. size of var tracking hash tables"
+#, no-c-format
msgid "Max. size of var tracking hash tables."
-msgstr "Max storlek på hashtabell för variabelspårning"
+msgstr "Max storlek på hashtabell för variabelspårning."
#: params.def:929
-#, fuzzy, no-c-format
-#| msgid "Max. recursion depth for expanding var tracking expressions"
+#, no-c-format
msgid "Max. recursion depth for expanding var tracking expressions."
-msgstr "Maximalt rekursionsdjup för att expandera variabelspårningsuttryck"
+msgstr "Maximalt rekursionsdjup för att expandera variabelspårningsuttryck."
#: params.def:937
-#, fuzzy, no-c-format
-#| msgid "Max. size of loc list for which reverse ops should be added"
+#, no-c-format
msgid "Max. size of loc list for which reverse ops should be added."
-msgstr "Maximal storlek på loc-listan för vilken omvända operationer skall läggas till"
+msgstr "Maximal storlek på loc-listan för vilken omvända operationer skall läggas till."
#: params.def:944
-#, fuzzy, no-c-format
-#| msgid "The minimum UID to be used for a nondebug insn"
+#, no-c-format
msgid "The minimum UID to be used for a nondebug insn."
-msgstr "Minsta UID som får användas för en icke-felsökningsinstruktion"
+msgstr "Minsta UID som får användas för en icke-felsökningsinstruktion."
#: params.def:949
-#, fuzzy, no-c-format
-#| msgid "Maximum allowed growth of size of new parameters ipa-sra replaces a pointer to an aggregate with"
+#, no-c-format
msgid "Maximum allowed growth of size of new parameters ipa-sra replaces a pointer to an aggregate with."
-msgstr "Största tillåtna storleksökning för nya parametrar som ipa-sra ersätter en pekare till ett aggregat med"
+msgstr "Största tillåtna storleksökning för nya parametrar som ipa-sra ersätter en pekare till ett aggregat med."
#: params.def:955
-#, fuzzy, no-c-format
-#| msgid "Size in bytes after which thread-local aggregates should be instrumented with the logging functions instead of save/restore pairs"
+#, no-c-format
msgid "Size in bytes after which thread-local aggregates should be instrumented with the logging functions instead of save/restore pairs."
-msgstr "Storlek i byte efter vilken trådlokala aggregat skall instrumenteras med loggningsfunktioner istället för spara/återställ-par"
+msgstr "Storlek i byte efter vilken trådlokala aggregat skall instrumenteras med loggningsfunktioner istället för spara/återställ-par."
#: params.def:962
-#, fuzzy, no-c-format
-#| msgid "Maximum size, in storage units, of an aggregate which should be considered for scalarization when compiling for speed"
+#, no-c-format
msgid "Maximum size, in storage units, of an aggregate which should be considered for scalarization when compiling for speed."
-msgstr "Maximal storlek, i lagringsenheter, av ett aggregat som skall övervägas för skalärisering vid kompilering för hastighet"
+msgstr "Maximal storlek, i lagringsenheter, av ett aggregat som skall övervägas för skalärisering vid kompilering för hastighet."
#: params.def:968
-#, fuzzy, no-c-format
-#| msgid "Maximum size, in storage units, of an aggregate which should be considered for scalarization when compiling for size"
+#, no-c-format
msgid "Maximum size, in storage units, of an aggregate which should be considered for scalarization when compiling for size."
-msgstr "Maximal storlek, i lagringsenheter, av ett aggregat som skall övervägas för skalärisering vid kompilering för storlek"
+msgstr "Maximal storlek, i lagringsenheter, av ett aggregat som skall övervägas för skalärisering vid kompilering för storlek."
#: params.def:974
-#, fuzzy, no-c-format
-#| msgid "Maximum size of a list of values associated with each parameter for interprocedural constant propagation"
+#, no-c-format
msgid "Maximum size of a list of values associated with each parameter for interprocedural constant propagation."
-msgstr "Maximal storlek för en lista på värden associerad med varje parameter för konstantpropagering mellan procedurer"
+msgstr "Maximal storlek för en lista på värden associerad med varje parameter för konstantpropagering mellan procedurer."
#: params.def:980
-#, fuzzy, no-c-format
-#| msgid "Threshold ipa-cp opportunity evaluation that is still considered beneficial to clone."
+#, no-c-format
msgid "Threshold ipa-cp opportunity evaluation that is still considered beneficial to clone.."
msgstr "Tröskelvärde för ipa-cp-tillfällesberäkning som fortfarande betraktas som fördelaktig att klona."
#: params.def:986
-#, fuzzy, no-c-format
-#| msgid "Percentage penalty the recursive functions will receive when they are evaluated for cloning."
+#, no-c-format
msgid "Percentage penalty the recursive functions will receive when they are evaluated for cloning.."
msgstr "Procentuellt straff de rekursiva funktionerna kommer få när de utvärderas för kloning."
#: params.def:992
-#, fuzzy, no-c-format
-#| msgid "Percentage penalty functions containg a single call to another function will receive when they are evaluated for cloning."
+#, no-c-format
msgid "Percentage penalty functions containg a single call to another function will receive when they are evaluated for cloning.."
msgstr "Procentuellt straff funktioner som innehåller ett ensamt anrop av en annan funktion kommer få när de utvärderas för kloning."
#: params.def:998
-#, fuzzy, no-c-format
-#| msgid "Maximum number of aggregate content items for a parameter in jump functions and lattices"
+#, no-c-format
msgid "Maximum number of aggregate content items for a parameter in jump functions and lattices."
-msgstr "Maximalt antal av sammansatta innehållsposter för en parameter i hoppfunktioner och gitter"
+msgstr "Maximalt antal av sammansatta innehållsposter för en parameter i hoppfunktioner och gitter."
#: params.def:1004
-#, fuzzy, no-c-format
-#| msgid "Compile-time bonus IPA-CP assigns to candidates which make loop bounds or strides known."
+#, no-c-format
msgid "Compile-time bonus IPA-CP assigns to candidates which make loop bounds or strides known.."
msgstr "Bonus IPA-CP tilldelar vid kompileringstillfället till kandidater vilka gör slingbegränsningar eller -steg kända."
#: params.def:1010
-#, fuzzy, no-c-format
-#| msgid "Compile-time bonus IPA-CP assigns to candidates which make an array index known."
+#, no-c-format
msgid "Compile-time bonus IPA-CP assigns to candidates which make an array index known.."
msgstr "Bonus IPA-CP tilldelar vid kompileringstillfället till kandidater som gör ett vektorindex känt."
#: params.def:1016
-#, fuzzy, no-c-format
-#| msgid "Maximum number of statements that will be visited by IPA formal parameter analysis based on alias analysis in any given function"
+#, no-c-format
msgid "Maximum number of statements that will be visited by IPA formal parameter analysis based on alias analysis in any given function."
-msgstr "Maximalt antal satser som kommer besökas av IPA-formatparameteranalysen baserat på aliasanalys i varje given funktion"
+msgstr "Maximalt antal satser som kommer besökas av IPA-formatparameteranalysen baserat på aliasanalys i varje given funktion."
#: params.def:1024
-#, fuzzy, no-c-format
-#| msgid "Number of partitions the program should be split to"
+#, no-c-format
msgid "Number of partitions the program should be split to."
-msgstr "Antal partitioner programmet skall delas upp i"
+msgstr "Antal partitioner programmet skall delas upp i."
#: params.def:1029
-#, fuzzy, no-c-format
-#| msgid "Minimal size of a partition for LTO (in estimated instructions)"
+#, no-c-format
msgid "Minimal size of a partition for LTO (in estimated instructions)."
-msgstr "Minimal storlek på en partition för LTO (i uppskattade instruktioner)"
+msgstr "Minimal storlek på en partition för LTO (i uppskattade instruktioner)."
#: params.def:1036
-#, fuzzy, no-c-format
-#| msgid "Maximum number of namespaces to search for alternatives when name lookup fails"
+#, no-c-format
msgid "Maximum number of namespaces to search for alternatives when name lookup fails."
-msgstr "Det maximala antalet namnrymder att söka i för alternativ när namnuppslagning misslyckas"
+msgstr "Det maximala antalet namnrymder att söka i för alternativ när namnuppslagning misslyckas."
#: params.def:1043
-#, fuzzy, no-c-format
-#| msgid "Maximum number of conditional store pairs that can be sunk"
+#, no-c-format
msgid "Maximum number of conditional store pairs that can be sunk."
-msgstr "Maximalt antal villkorliga lagringspar som kan sänkas"
+msgstr "Maximalt antal villkorliga lagringspar som kan sänkas."
#: params.def:1051
-#, fuzzy, no-c-format
-#| msgid "The smallest number of different values for which it is best to use a jump-table instead of a tree of conditional branches, if 0, use the default for the machine"
+#, no-c-format
msgid "The smallest number of different values for which it is best to use a jump-table instead of a tree of conditional branches, if 0, use the default for the machine."
-msgstr "Det minsta antalet olika värden för vilka det är bäst att använda hopptabeller istället för ett träd med villkorliga grenar, om 0, använd standardvärdet för maskinen"
+msgstr "Det minsta antalet olika värden för vilka det är bäst att använda hopptabeller istället för ett träd med villkorliga grenar, om 0, använd standardvärdet för maskinen."
#: params.def:1059
-#, fuzzy, no-c-format
-#| msgid "Allow new data races on stores to be introduced"
+#, no-c-format
msgid "Allow new data races on stores to be introduced."
-msgstr "Tillåt att nya datakapplöpningar vid lagringar introduceras"
+msgstr "Tillåt att nya datakapplöpningar vid lagringar introduceras."
#: params.def:1065
-#, fuzzy, no-c-format
-#| msgid "Set the maximum number of instructions executed in parallel in reassociated tree. If 0, use the target dependent heuristic."
+#, no-c-format
msgid "Set the maximum number of instructions executed in parallel in reassociated tree. If 0, use the target dependent heuristic.."
msgstr "Sätt maximala antalet instruktioner som exekveras parallellt i ett reassociativt träd. Om 0, använd den målberoende heuristiken."
#: params.def:1071
-#, fuzzy, no-c-format
-#| msgid "Maximum amount of similar bbs to compare a bb with"
+#, no-c-format
msgid "Maximum amount of similar bbs to compare a bb with."
-msgstr "Maximalt antal liknande gb att jämföra ett gb med"
+msgstr "Maximalt antal liknande gb att jämföra ett gb med."
#: params.def:1076
-#, fuzzy, no-c-format
-#| msgid "Maximum amount of iterations of the pass over a function"
+#, no-c-format
msgid "Maximum amount of iterations of the pass over a function."
-msgstr "Maximalt antal iterationer för passet över en funktion"
+msgstr "Maximalt antal iterationer för passet över en funktion."
#: params.def:1083
-#, fuzzy, no-c-format
-#| msgid "Maximum number of strings for which strlen optimization pass will track string lengths"
+#, no-c-format
msgid "Maximum number of strings for which strlen optimization pass will track string lengths."
-msgstr "Maximalt antal strängar för vilket strlen-optimeringspasset kommer följa stränglängder"
+msgstr "Maximalt antal strängar för vilket strlen-optimeringspasset kommer följa stränglängder."
#: params.def:1090
-#, fuzzy, no-c-format
-#| msgid "Which -fsched-pressure algorithm to apply"
+#, no-c-format
msgid "Which -fsched-pressure algorithm to apply."
-msgstr "Vilken -fsched-pressure-algoritm som skall användas"
+msgstr "Vilken -fsched-pressure-algoritm som skall användas."
#: params.def:1096
-#, fuzzy, no-c-format
-#| msgid "Maximum length of candidate scans for straight-line strength reduction"
+#, no-c-format
msgid "Maximum length of candidate scans for straight-line strength reduction."
-msgstr "Maximal längd på kandidatskanningar efter rätlinjiga styrkereduktioner"
+msgstr "Maximal längd på kandidatskanningar efter rätlinjiga styrkereduktioner."
#: params.def:1102
-#, fuzzy, no-c-format
-#| msgid "Enable asan stack protection"
+#, no-c-format
msgid "Enable asan stack protection."
-msgstr "Aktivera asan-skydd av stack"
+msgstr "Aktivera asan-skydd av stack."
#: params.def:1107
-#, fuzzy, no-c-format
-#| msgid "Enable asan globals protection"
+#, no-c-format
msgid "Enable asan globals protection."
-msgstr "Aktivera globalt asan-skydd"
+msgstr "Aktivera globalt asan-skydd."
#: params.def:1112
-#, fuzzy, no-c-format
-#| msgid "Enable asan store operations protection"
+#, no-c-format
msgid "Enable asan store operations protection."
-msgstr "Aktivera asan-skydd av lagringsoperationer"
+msgstr "Aktivera asan-skydd av lagringsoperationer."
#: params.def:1117
-#, fuzzy, no-c-format
-#| msgid "Enable asan load operations protection"
+#, no-c-format
msgid "Enable asan load operations protection."
-msgstr "Aktivera asan-skydd av laddningsoperationer"
+msgstr "Aktivera asan-skydd av laddningsoperationer."
#: params.def:1122
-#, fuzzy, no-c-format
-#| msgid "Enable asan builtin functions protection"
+#, no-c-format
msgid "Enable asan builtin functions protection."
-msgstr "Aktivera asan-skydd av inbyggda funktioner"
+msgstr "Aktivera asan-skydd av inbyggda funktioner."
#: params.def:1127
-#, fuzzy, no-c-format
-#| msgid "Enable asan detection of use-after-return bugs"
+#, no-c-format
msgid "Enable asan detection of use-after-return bugs."
-msgstr "Aktivera asan-detektering av använd-efter-retur-fel"
+msgstr "Aktivera asan-detektering av använd-efter-retur-fel."
#: params.def:1132
-#, fuzzy, no-c-format
-#| msgid "Use callbacks instead of inline code if number of accesses in function becomes greater or equal to this number"
+#, no-c-format
msgid "Use callbacks instead of inline code if number of accesses in function becomes greater or equal to this number."
-msgstr "Använd återanrop istället för inline:ad kod om antalet åtkomster i funktioner blir större eller lika med detta tal"
+msgstr "Använd återanrop istället för inline:ad kod om antalet åtkomster i funktioner blir större eller lika med detta tal."
#: params.def:1138
-#, fuzzy, no-c-format
-#| msgid "Maximum number of nested calls to search for control dependencies during uninitialized variable analysis"
+#, no-c-format
msgid "Maximum number of nested calls to search for control dependencies during uninitialized variable analysis."
-msgstr "Det maximala antalet nästade anrop att söka i efter styrberoenden under analys av oinitierade variabler"
+msgstr "Det maximala antalet nästade anrop att söka i efter styrberoenden under analys av oinitierade variabler."
#: params.def:1144
-#, fuzzy, no-c-format
-#| msgid "Maximum number of statements to be included into a single static constructor generated by Pointer Bounds Checker"
+#, no-c-format
msgid "Maximum number of statements to be included into a single static constructor generated by Pointer Bounds Checker."
-msgstr "Maximalt antal satser som skall inkluderas i en enskild statisk konstruerare genererad av pekargränskontrolleraren"
+msgstr "Maximalt antal satser som skall inkluderas i en enskild statisk konstruerare genererad av pekargränskontrolleraren."
#: params.def:1150
#, no-c-format
@@ -2632,22 +2443,19 @@ msgid "Scale factor to apply to the number of blocks in a threading path when co
msgstr "Skalfaktor att använda på antalet block i en trådningsväg vid jämförelse med antalet av (skalade) satser."
#: params.def:1160
-#, fuzzy, no-c-format
-#| msgid "Maximum number of instructions to copy when duplicating blocks on a finite state automaton jump thread path"
+#, no-c-format
msgid "Maximum number of instructions to copy when duplicating blocks on a finite state automaton jump thread path."
-msgstr "Maximalt antal instruktioner att kopiera vid duplicering av block på hopptrådvägen för en ändlig tillståndsmaskin"
+msgstr "Maximalt antal instruktioner att kopiera vid duplicering av block på hopptrådvägen för en ändlig tillståndsmaskin."
#: params.def:1165
-#, fuzzy, no-c-format
-#| msgid "Maximum number of basic blocks on a finite state automaton jump thread path"
+#, no-c-format
msgid "Maximum number of basic blocks on a finite state automaton jump thread path."
-msgstr "Maximalt antal grundblock i en ändlig tillståndsmaskins hopptrådsvägar"
+msgstr "Maximalt antal grundblock i en ändlig tillståndsmaskins hopptrådsvägar."
#: params.def:1170
-#, fuzzy, no-c-format
-#| msgid "Maximum number of new jump thread paths to create for a finite state automaton"
+#, no-c-format
msgid "Maximum number of new jump thread paths to create for a finite state automaton."
-msgstr "Det maximala antalet nya hopptrådvägar att skapa för en ändlig tillståndsmaskin"
+msgstr "Det maximala antalet nya hopptrådvägar att skapa för en ändlig tillståndsmaskin."
#: params.def:1175
#, no-c-format
@@ -2665,10 +2473,9 @@ msgid "Maximum recursion depth allowed when querying a property of an SSA name."
msgstr "Maximalt tillåtet rekursionsdjup när en egenskap efterfrågas från ett SSA-namn."
#: params.def:1193
-#, fuzzy, no-c-format
-#| msgid "Maximum number of instructions in basic block to be considered for SLP vectorization"
+#, no-c-format
msgid "Maximum number of insns in a basic block to consider for RTL if-conversion."
-msgstr "Det maximala antalet instruktioner i grundblock för beaktas för SLP-vektorisering"
+msgstr "Det maximala antalet instruktioner i grundblock att beaktas för RTL if-konvertering."
#: params.def:1199
#, no-c-format
@@ -3561,10 +3368,9 @@ msgid "unknown insn mode"
msgstr "okänt instruktionsläge"
#: config/i386/djgpp.h:146
-#, fuzzy, c-format
-#| msgid "-f%s not supported: ignored"
+#, c-format
msgid "-f%s ignored (not supported for DJGPP)\n"
-msgstr "-f%s stödjs inte: ignoreras"
+msgstr "-f%s ignoreras (stödjs inte för DJGPP)\n"
#: config/i386/i386-interix.h:77
msgid "Use native (MS) bitfield layout"
@@ -3615,7 +3421,7 @@ msgstr "ogiltig användning av %%d, %%x eller %%x"
#: config/lm32/lm32.c:507
#, c-format
msgid "only 0.0 can be loaded as an immediate"
-msgstr "endast 0.0 kan läsas in som en omedelbar"
+msgstr "endast 0.0 kan laddas som en omedelbar"
#: config/lm32/lm32.c:577
msgid "bad operand"
@@ -3828,10 +3634,8 @@ msgid "-mquad-memory is not available in little endian mode"
msgstr "-mquad-memory är inte tillgängligt i läget med omvänd byteordning"
#: config/rs6000/rs6000.c:4154
-#, fuzzy
-#| msgid "-mquad-memory requires 64-bit mode"
msgid "-mtoc-fusion requires 64-bit"
-msgstr "--mquad-memory kräver 64-bitarsläge"
+msgstr "--mtoc-fusion kräver 64-bitar"
#: config/rs6000/rs6000.c:4161
msgid "-mtoc-fusion requires medium/large code model"
@@ -3925,10 +3729,8 @@ msgid "__float128 and __ibm128 cannot be used in the same expression"
msgstr "__float128 och __ibm128 kan inte användas i samma uttryck"
#: config/rs6000/rs6000.c:20899
-#, fuzzy
-#| msgid "Cilk array notation cannot be used for a throw expression"
msgid "__ibm128 and long double cannot be used in the same expression"
-msgstr "Cilk-vektornotation kan inte användas till ett throw-uttryck"
+msgstr "__ibm128 och long double inte användas i samma uttryck"
#: config/rs6000/rs6000.c:20905
msgid "__float128 and long double cannot be used in the same expression"
@@ -3943,10 +3745,8 @@ msgid "Could not generate addis value for fusion"
msgstr "Kunde inte generera addis-värde för sammanslagning"
#: config/rs6000/rs6000.c:36058
-#, fuzzy
-#| msgid "Unable to generate load offset for fusion"
msgid "Unable to generate load/store offset for fusion"
-msgstr "Kan inte generera laddningsavstånd för sammanslagning"
+msgstr "Kan inte generera ladda/lagra-avstånd för sammanslagning"
#: config/rs6000/rs6000.c:36162
msgid "Bad GPR fusion"
@@ -4037,10 +3837,9 @@ msgid "invalid constant - try using an output modifier"
msgstr "ogiltig konstant - försök med att använda en utmatningsmodifierare"
#: config/s390/s390.c:7343
-#, fuzzy, c-format
-#| msgid "invalid constant for output modifier '%c'"
+#, c-format
msgid "invalid constant vector for output modifier '%c'"
-msgstr "ogiltig konstant för utmatningsmodifieraren â€%câ€"
+msgstr "ogiltig konstant vektor för utmatningsmodifieraren â€%câ€"
#: config/s390/s390.c:7350
#, c-format
@@ -4053,26 +3852,20 @@ msgid "invalid expression for output modifier '%c'"
msgstr "ogiltigt uttryck för utmatningsmodifieraren â€%câ€"
#: config/s390/s390.c:11001
-#, fuzzy
-#| msgid "AltiVec argument passed to unprototyped function"
msgid "Vector argument passed to unprototyped function"
-msgstr "AltiVec-argument skickat till funktion utan prototyp"
+msgstr "Vektorargument skickat till funktion utan prototyp"
#: config/s390/s390.c:14505
-#, fuzzy
-#| msgid "pointer targets in return differ in signedness"
msgid "types differ in signess"
-msgstr "pekarmål i retur skiljer i teckenhet"
+msgstr "typer skiljer i teckenhet"
#: config/s390/s390.c:14515
msgid "binary operator does not support two vector bool operands"
msgstr "binäroperator stödjer inte två vektorbooleanoperander"
#: config/s390/s390.c:14518
-#, fuzzy
-#| msgid "Your target platform does not support -fcheck-pointer-bounds"
msgid "binary operator does not support vector bool operand"
-msgstr "Din målplattform stödjer inte -fcheck-pointer-bounds"
+msgstr "den binära operatorn stödjer inte vektor-bool-operand"
#: config/s390/s390.c:14526
msgid "binary operator does not support mixing vector bool with floating point vector operands"
@@ -4137,8 +3930,7 @@ msgid "invalid %%s operand"
msgstr "ogiltig %%s-operand"
#: config/sparc/sparc.c:8934
-#, fuzzy, c-format
-#| msgid "floating point constant not a valid immediate operand"
+#, c-format
msgid "floating-point constant not a valid immediate operand"
msgstr "flyttalskonstant inte en giltig omedelbar operand"
@@ -4696,16 +4488,12 @@ msgid "required from %q#D\n"
msgstr "begärs från %q#D\n"
#: cp/error.c:3368
-#, fuzzy
-#| msgid "recursively required from here"
msgid "recursively required from here\n"
-msgstr "rekursivt begärd härifrån"
+msgstr "rekursivt begärd härifrån\n"
#: cp/error.c:3369
-#, fuzzy
-#| msgid "required from here"
msgid "required from here\n"
-msgstr "begärd härifrån"
+msgstr "begärd härifrån\n"
#: cp/error.c:3421
msgid "%r%s:%d:%d:%R [ skipping %d instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]\n"
@@ -4922,10 +4710,8 @@ msgid "Nonnegative width required"
msgstr "Ickenegativ bredd krävs"
#: fortran/io.c:552
-#, fuzzy
-#| msgid "Unexpected element %<%c%> in format string at %L"
msgid "Unexpected element %qc in format string at %L"
-msgstr "Oväntat element %<%c%> i formatsträng vid %L"
+msgstr "Oväntat element %qc i formatsträng vid %L"
#: fortran/io.c:554
msgid "Unexpected end of format string"
@@ -5193,16 +4979,14 @@ msgid "Invalid context for NULL() pointer at %%L"
msgstr "Ogiltigt sammanhang för NULL()-pekare vid %%L"
#: fortran/resolve.c:3568
-#, fuzzy, c-format
-#| msgid "Operand of unary numeric operator '%s' at %%L is %s"
+#, c-format
msgid "Operand of unary numeric operator %%<%s%%> at %%L is %s"
-msgstr "Operand till unär numerisk operator â€%s†vid %%L är %s"
+msgstr "Operand till unär numerisk operator %%<%s%%> vid %%L är %s"
#: fortran/resolve.c:3584
-#, fuzzy, c-format
-#| msgid "Operands of binary numeric operator '%s' at %%L are %s/%s"
+#, c-format
msgid "Operands of binary numeric operator %%<%s%%> at %%L are %s/%s"
-msgstr "Operander till binär numerisk operator â€%s†vid %%L är %s/%s"
+msgstr "Operander till binär numerisk operator %%<%s%%> vid %%L är %s/%s"
#: fortran/resolve.c:3599
#, c-format
@@ -5210,10 +4994,9 @@ msgid "Operands of string concatenation operator at %%L are %s/%s"
msgstr "Operanderna till strängkonkateneringsoperatorn vid %%L är %s/%s"
#: fortran/resolve.c:3618
-#, fuzzy, c-format
-#| msgid "Operands of logical operator '%s' at %%L are %s/%s"
+#, c-format
msgid "Operands of logical operator %%<%s%%> at %%L are %s/%s"
-msgstr "Operanderna till logiska operatorn â€%s†vid %%L är %s/%s"
+msgstr "Operanderna till logiska operatorn %%<%s%%> vid %%L är %s/%s"
#: fortran/resolve.c:3632
#, c-format
@@ -5230,28 +5013,24 @@ msgid "Logicals at %%L must be compared with %s instead of %s"
msgstr "Logiska vid %%L måste jämföras med %s istället för %s"
#: fortran/resolve.c:3703
-#, fuzzy, c-format
-#| msgid "Operands of comparison operator '%s' at %%L are %s/%s"
+#, c-format
msgid "Operands of comparison operator %%<%s%%> at %%L are %s/%s"
-msgstr "Operanderna till jämförelseoperatorn â€%s†vid %%L är %s/%s"
+msgstr "Operanderna till jämförelseoperatorn %%<%s%%> vid %%L är %s/%s"
#: fortran/resolve.c:3711
-#, fuzzy, c-format
-#| msgid "Unknown operator '%s' at %%L"
+#, c-format
msgid "Unknown operator %%<%s%%> at %%L"
-msgstr "Okänd operator â€%s†vid %%L"
+msgstr "Okänd operator %%<%s%%> vid %%L"
#: fortran/resolve.c:3714
-#, fuzzy, c-format
-#| msgid "Operand of user operator '%s' at %%L is %s"
+#, c-format
msgid "Operand of user operator %%<%s%%> at %%L is %s"
-msgstr "Operanderna till användaroperatorn â€%s†vid %%L är %s"
+msgstr "Operanderna till användaroperatorn %%<%s%%> vid %%L är %s"
#: fortran/resolve.c:3718
-#, fuzzy, c-format
-#| msgid "Operands of user operator '%s' at %%L are %s/%s"
+#, c-format
msgid "Operands of user operator %%<%s%%> at %%L are %s/%s"
-msgstr "Operanderna till användaroperatorn â€%s†vid %%L är %s/%s"
+msgstr "Operanderna till användaroperatorn %%<%s%%> vid %%L är %s/%s"
#: fortran/resolve.c:3806
#, c-format
@@ -5664,20 +5443,16 @@ msgid "-c required for gnat2scil"
msgstr "-c krävs för gnat2scil"
#: config/sol2.h:181
-#, fuzzy
-#| msgid "weakref is not supported in this configuration"
msgid "-fvtable-verify is not supported in this configuration"
-msgstr "weakref stödjs inte i denna konfiguration"
+msgstr "-fvtable-verify stödjs inte i denna konfiguration"
#: config/sol2.h:268 config/sol2.h:273
msgid "does not support multilib"
msgstr "stödjer inte multilib"
#: config/sol2.h:365
-#, fuzzy
-#| msgid "-gz is not supported in this configuration"
msgid "-pie is not supported in this configuration"
-msgstr "-gz stödjs inte i denna konfiguration"
+msgstr "-pie stödjs inte i denna konfiguration"
#: config/darwin.h:251
msgid "-current_version only allowed with -dynamiclib"
@@ -5865,218 +5640,148 @@ msgid "-femit-class-file should used along with -fsyntax-only"
msgstr "-femit-class-file skall användas tillsammans med -fsyntax-only"
#: fortran/lang.opt:146
-#, fuzzy
-#| msgid "-J<directory>\tPut MODULE files in 'directory'"
msgid "-J<directory>\tPut MODULE files in 'directory'."
-msgstr "-J<katalog>\tLägg MODULE-filer i â€katalogâ€"
+msgstr "-J<katalog>\tLägg MODULE-filer i â€katalogâ€."
#: fortran/lang.opt:198
-#, fuzzy
-#| msgid "Warn about possible aliasing of dummy arguments"
msgid "Warn about possible aliasing of dummy arguments."
-msgstr "Varna för eventuella attrappargumentalias"
+msgstr "Varna för eventuella attrappargumentalias."
#: fortran/lang.opt:202
-#, fuzzy
-#| msgid "Warn about alignment of COMMON blocks"
msgid "Warn about alignment of COMMON blocks."
-msgstr "Varna för justering av COMMON-block"
+msgstr "Varna för justering av COMMON-block."
#: fortran/lang.opt:206
-#, fuzzy
-#| msgid "Warn about missing ampersand in continued character constants"
msgid "Warn about missing ampersand in continued character constants."
-msgstr "Varna för saknade et-tecken i fortsatta teckenkonstanter"
+msgstr "Varna för saknade et-tecken i fortsatta teckenkonstanter."
#: fortran/lang.opt:210
-#, fuzzy
-#| msgid "Warn about creation of array temporaries"
msgid "Warn about creation of array temporaries."
-msgstr "Varna om vektortemporärer skapas"
+msgstr "Varna om vektortemporärer skapas."
#: fortran/lang.opt:214
-#, fuzzy
-#| msgid "Warn if the type of a variable might be not interoperable with C"
msgid "Warn if the type of a variable might be not interoperable with C."
-msgstr "Varna om typen på en variabel kanske inte är interoperabel med C"
+msgstr "Varna om typen på en variabel kanske inte är interoperabel med C."
#: fortran/lang.opt:222
-#, fuzzy
-#| msgid "Warn about truncated character expressions"
msgid "Warn about truncated character expressions."
-msgstr "Varna för avhuggna teckenuttryck"
+msgstr "Varna för avhuggna teckenuttryck."
#: fortran/lang.opt:226
-#, fuzzy
-#| msgid "Warn about equality comparisons involving REAL or COMPLEX expressions"
msgid "Warn about equality comparisons involving REAL or COMPLEX expressions."
-msgstr "Varna för likhetsjämförelser som involverar REAL- eller COMPLEX-uttryck"
+msgstr "Varna för likhetsjämförelser som involverar REAL- eller COMPLEX-uttryck."
#: fortran/lang.opt:234
-#, fuzzy
-#| msgid "Warn about most implicit conversions"
msgid "Warn about most implicit conversions."
-msgstr "Varna för de flesta implicita konverteringar"
+msgstr "Varna för de flesta implicita konverteringar."
#: fortran/lang.opt:242
-#, fuzzy
-#| msgid "Warn about function call elimination"
msgid "Warn about function call elimination."
-msgstr "Varna för eliminering av funktionsanrop"
+msgstr "Varna för eliminering av funktionsanrop."
#: fortran/lang.opt:246
-#, fuzzy
-#| msgid "Warn about calls with implicit interface"
msgid "Warn about calls with implicit interface."
-msgstr "Varna för anrop med implicit gränssnitt"
+msgstr "Varna för anrop med implicit gränssnitt."
#: fortran/lang.opt:250
-#, fuzzy
-#| msgid "Warn about called procedures not explicitly declared"
msgid "Warn about called procedures not explicitly declared."
-msgstr "Varna för anrop av procedurer som inte explicit deklarerats"
+msgstr "Varna för anrop av procedurer som inte explicit deklarerats."
#: fortran/lang.opt:254
-#, fuzzy
-#| msgid "Warn about compile-time integer division by zero"
msgid "Warn about constant integer divisions with truncated results."
-msgstr "Varna för heltalsdivision med noll vid kompileringstillfället"
+msgstr "Varna för konstant heltalsdivision med avhuggna resultat."
#: fortran/lang.opt:258
-#, fuzzy
-#| msgid "Warn about truncated source lines"
msgid "Warn about truncated source lines."
-msgstr "Varna för avhuggna källkodsrader"
+msgstr "Varna för avhuggna källkodsrader."
#: fortran/lang.opt:262
-#, fuzzy
-#| msgid "Warn on intrinsics not part of the selected standard"
msgid "Warn on intrinsics not part of the selected standard."
-msgstr "Inbyggd för inbyggda om inte är med i den valda standarden"
+msgstr "Inbyggd för inbyggda om inte är med i den valda standarden."
#: fortran/lang.opt:274
-#, fuzzy
-#| msgid "Warn about USE statements that have no ONLY qualifier"
msgid "Warn about USE statements that have no ONLY qualifier."
-msgstr "Varna för USE-satser som inte har någon ONLY-kvalificerare"
+msgstr "Varna för USE-satser som inte har någon ONLY-kvalificerare."
#: fortran/lang.opt:286
-#, fuzzy
-#| msgid "Warn about real-literal-constants with 'q' exponent-letter"
msgid "Warn about real-literal-constants with 'q' exponent-letter."
-msgstr "Varna för reella literala konstanter med exponentbokstav â€qâ€"
+msgstr "Varna för reella literala konstanter med exponentbokstav â€qâ€."
#: fortran/lang.opt:290
-#, fuzzy
-#| msgid "Warn when a left-hand-side array variable is reallocated"
msgid "Warn when a left-hand-side array variable is reallocated."
-msgstr "Varna när en vektorvariabel på vänsterhandssidan allokeras om"
+msgstr "Varna när en vektorvariabel på vänsterhandssidan allokeras om."
#: fortran/lang.opt:294
-#, fuzzy
-#| msgid "Warn when a left-hand-side variable is reallocated"
msgid "Warn when a left-hand-side variable is reallocated."
-msgstr "Varna när en variabel på vänsterhandssidan allokeras om"
+msgstr "Varna när en variabel på vänsterhandssidan allokeras om."
#: fortran/lang.opt:298
-#, fuzzy
-#| msgid "Warn if the pointer in a pointer assignment might outlive its target"
msgid "Warn if the pointer in a pointer assignment might outlive its target."
-msgstr "Varna om pekaren i en pekartilldelning kan överleva sitt mål"
+msgstr "Varna om pekaren i en pekartilldelning kan överleva sitt mål."
#: fortran/lang.opt:306
-#, fuzzy
-#| msgid "Warn about \"suspicious\" constructs"
msgid "Warn about \"suspicious\" constructs."
-msgstr "Varna för â€misstänkta†konstruktioner"
+msgstr "Varna för â€misstänkta†konstruktioner."
#: fortran/lang.opt:310
-#, fuzzy
-#| msgid "Permit nonconforming uses of the tab character"
msgid "Permit nonconforming uses of the tab character."
-msgstr "Tillåt ej konforma användningar av tabulatortecken"
+msgstr "Tillåt ej konforma användningar av tabulatortecken."
#: fortran/lang.opt:314
-#, fuzzy
-#| msgid "Warn about underflow of numerical constant expressions"
msgid "Warn about underflow of numerical constant expressions."
-msgstr "Varna för underspill i numeriska konstantuttryck"
+msgstr "Varna för underspill i numeriska konstantuttryck."
#: fortran/lang.opt:322
-#, fuzzy
-#| msgid "Warn if a user-procedure has the same name as an intrinsic"
msgid "Warn if a user-procedure has the same name as an intrinsic."
-msgstr "Varna om en användarprocedur har samma namn som en inbyggd"
+msgstr "Varna om en användarprocedur har samma namn som en inbyggd."
#: fortran/lang.opt:330
msgid "Warn about unused dummy arguments."
msgstr "Varna för oanvända attrappargument."
#: fortran/lang.opt:334
-#, fuzzy
-#| msgid "Warn about zero-trip DO loops"
msgid "Warn about zero-trip DO loops."
-msgstr "Varna för DO-slingor med noll-trippar"
+msgstr "Varna för DO-slingor med noll-trippar."
#: fortran/lang.opt:338
-#, fuzzy
-#| msgid "Enable preprocessing"
msgid "Enable preprocessing."
-msgstr "Aktivera preprocessning"
+msgstr "Aktivera preprocessning."
#: fortran/lang.opt:346
-#, fuzzy
-#| msgid "Disable preprocessing"
msgid "Disable preprocessing."
-msgstr "Avaktivera preprocessning"
+msgstr "Avaktivera preprocessning."
#: fortran/lang.opt:354
-#, fuzzy
-#| msgid "Eliminate multiple function invokations also for impure functions"
msgid "Eliminate multiple function invokations also for impure functions."
-msgstr "Eliminera multipla funktionsanrop även för orena funktioner"
+msgstr "Eliminera multipla funktionsanrop även för orena funktioner."
#: fortran/lang.opt:358
-#, fuzzy
-#| msgid "Enable alignment of COMMON blocks"
msgid "Enable alignment of COMMON blocks."
-msgstr "Aktivera justering av COMMON-block"
+msgstr "Aktivera justering av COMMON-block."
#: fortran/lang.opt:362
-#, fuzzy
-#| msgid "All intrinsics procedures are available regardless of selected standard"
msgid "All intrinsics procedures are available regardless of selected standard."
-msgstr "Alla inbyggda procedurer är tillgängliga oavsett av vald standard"
+msgstr "Alla inbyggda procedurer är tillgängliga oavsett av vald standard."
#: fortran/lang.opt:370
-#, fuzzy
-#| msgid "Do not treat local variables and COMMON blocks as if they were named in SAVE statements"
msgid "Do not treat local variables and COMMON blocks as if they were named in SAVE statements."
-msgstr "Behandla inte lokala variabler och COMMON-block som om de vore namngivna i SAVE-satser"
+msgstr "Behandla inte lokala variabler och COMMON-block som om de vore namngivna i SAVE-satser."
#: fortran/lang.opt:374
-#, fuzzy
-#| msgid "Specify that backslash in string introduces an escape character"
msgid "Specify that backslash in string introduces an escape character."
-msgstr "Ange att omvänt snedstreck i strängar inleder ett specialtecken"
+msgstr "Ange att omvänt snedstreck i strängar inleder ett specialtecken."
#: fortran/lang.opt:378
-#, fuzzy
-#| msgid "Produce a backtrace when a runtime error is encountered"
msgid "Produce a backtrace when a runtime error is encountered."
-msgstr "Skapa en stackspårning när ett fel inträffar under körning"
+msgstr "Skapa en stackspårning när ett fel inträffar under körning."
#: fortran/lang.opt:382
-#, fuzzy
-#| msgid "-fblas-matmul-limit=<n>\tSize of the smallest matrix for which matmul will use BLAS"
msgid "-fblas-matmul-limit=<n>\tSize of the smallest matrix for which matmul will use BLAS."
-msgstr "-fblas-matmul-limit=<n>\tStorlek på den minsta matris för vilken matmul kommer använda BLAS"
+msgstr "-fblas-matmul-limit=<n>\tStorlek på den minsta matris för vilken matmul kommer använda BLAS."
#: fortran/lang.opt:386
-#, fuzzy
-#| msgid "Produce a warning at runtime if a array temporary has been created for a procedure argument"
msgid "Produce a warning at runtime if a array temporary has been created for a procedure argument."
-msgstr "Producera en varning vid körning om en vektortemporär har skapats för ett procedurargument"
+msgstr "Producera en varning vid körning om en vektortemporär har skapats för ett procedurargument."
#: fortran/lang.opt:390
msgid "-fconvert=<big-endian|little-endian|native|swap> The endianness used for unformatted files."
@@ -6088,46 +5793,32 @@ msgid "Unrecognized option to endianess value: %qs"
msgstr "Okänd flagga till byteordervärde: %qs"
#: fortran/lang.opt:409
-#, fuzzy
-#| msgid "Use the Cray Pointer extension"
msgid "Use the Cray Pointer extension."
-msgstr "Använd Cray-pekarutökningen"
+msgstr "Använd Cray-pekarutökningen."
#: fortran/lang.opt:413
-#, fuzzy
-#| msgid "Ignore 'D' in column one in fixed form"
msgid "Ignore 'D' in column one in fixed form."
-msgstr "Ignorera â€D†i kolumn ett i fix form"
+msgstr "Ignorera â€D†i kolumn ett i fix form."
#: fortran/lang.opt:417
-#, fuzzy
-#| msgid "Treat lines with 'D' in column one as comments"
msgid "Treat lines with 'D' in column one as comments."
-msgstr "Tolka rader med â€D†i kolumn ett som kommentarer"
+msgstr "Tolka rader med â€D†i kolumn ett som kommentarer."
#: fortran/lang.opt:421
-#, fuzzy
-#| msgid "Set the default double precision kind to an 8 byte wide type"
msgid "Set the default double precision kind to an 8 byte wide type."
-msgstr "Ange standard för sorten dubbel precision till en 8 byte bred typ"
+msgstr "Ange standard för sorten dubbel precision till en 8 byte bred typ."
#: fortran/lang.opt:425
-#, fuzzy
-#| msgid "Set the default integer kind to an 8 byte wide type"
msgid "Set the default integer kind to an 8 byte wide type."
-msgstr "Ange standard för sorten heltal till en 8 byte bred typ"
+msgstr "Ange standard för sorten heltal till en 8 byte bred typ."
#: fortran/lang.opt:429
-#, fuzzy
-#| msgid "Set the default real kind to an 8 byte wide type"
msgid "Set the default real kind to an 8 byte wide type."
-msgstr "Ange standard för sorten reell till en 8 byte bred typ"
+msgstr "Ange standard för sorten reell till en 8 byte bred typ."
#: fortran/lang.opt:433
-#, fuzzy
-#| msgid "Allow dollar signs in entity names"
msgid "Allow dollar signs in entity names."
-msgstr "Tillåt dollartecken i entitetsnamn"
+msgstr "Tillåt dollartecken i entitetsnamn."
#: fortran/lang.opt:437 config/alpha/alpha.opt:31 common.opt:728
#: common.opt:916 common.opt:920 common.opt:924 common.opt:928 common.opt:1417
@@ -6137,136 +5828,92 @@ msgid "Does nothing. Preserved for backward compatibility."
msgstr "Gör ingenting. Bevarad för bakåtkompatibilitet."
#: fortran/lang.opt:441
-#, fuzzy
-#| msgid "Display the code tree after parsing"
msgid "Display the code tree after parsing."
-msgstr "Visa kodträdet efter tolkning"
+msgstr "Visa kodträdet efter tolkning."
#: fortran/lang.opt:445
-#, fuzzy
-#| msgid "Display the code tree after front end optimization"
msgid "Display the code tree after front end optimization."
-msgstr "Visa kodträdet efter framändesoptimering"
+msgstr "Visa kodträdet efter framändesoptimering."
#: fortran/lang.opt:449
-#, fuzzy
-#| msgid "Display the code tree after parsing; deprecated option"
msgid "Display the code tree after parsing; deprecated option."
-msgstr "Visa kodträdet efter tolkning, flaggan bör undvikas"
+msgstr "Visa kodträdet efter tolkning, flaggan bör undvikas."
#: fortran/lang.opt:453
-#, fuzzy
-#| msgid "Specify that an external BLAS library should be used for matmul calls on large-size arrays"
msgid "Specify that an external BLAS library should be used for matmul calls on large-size arrays."
-msgstr "Ange att ett externt BLAS-bibliotek skall användas för matmul-anrop på större vektorer"
+msgstr "Ange att ett externt BLAS-bibliotek skall användas för matmul-anrop på större vektorer."
#: fortran/lang.opt:457
-#, fuzzy
-#| msgid "Use f2c calling convention"
msgid "Use f2c calling convention."
-msgstr "Använd f2c:s anropskonvention"
+msgstr "Använd f2c:s anropskonvention."
#: fortran/lang.opt:461
-#, fuzzy
-#| msgid "Assume that the source file is fixed form"
msgid "Assume that the source file is fixed form."
-msgstr "Anta att källkodsfilen är i fix form"
+msgstr "Anta att källkodsfilen är i fix form."
#: fortran/lang.opt:465
-#, fuzzy
-#| msgid "Interpret any INTEGER(4) as an INTEGER(8)"
msgid "Interpret any INTEGER(4) as an INTEGER(8)."
-msgstr "Tolka en INTEGER(4) som en INTEGER(8)"
+msgstr "Tolka en INTEGER(4) som en INTEGER(8)."
#: fortran/lang.opt:469 fortran/lang.opt:473
-#, fuzzy
-#| msgid "Specify where to find the compiled intrinsic modules"
msgid "Specify where to find the compiled intrinsic modules."
-msgstr "Ange var de kompilerade inbyggda modulerna finns"
+msgstr "Ange var de kompilerade inbyggda modulerna finns."
#: fortran/lang.opt:477
-#, fuzzy
-#| msgid "Allow arbitrary character line width in fixed mode"
msgid "Allow arbitrary character line width in fixed mode."
-msgstr "Tillåt radlängd med godtyckligt antal tecken i fast läge"
+msgstr "Tillåt radlängd med godtyckligt antal tecken i fast läge."
#: fortran/lang.opt:481
-#, fuzzy
-#| msgid "-ffixed-line-length-<n>\tUse n as character line width in fixed mode"
msgid "-ffixed-line-length-<n>\tUse n as character line width in fixed mode."
-msgstr "-ffixed-line-length-<n>\tAnvänd radlängd med n tecken i fast läge"
+msgstr "-ffixed-line-length-<n>\tAnvänd radlängd med n tecken i fast läge."
#: fortran/lang.opt:485
-#, fuzzy
-#| msgid "-ffpe-trap=[...]\tStop on following floating point exceptions"
msgid "-ffpe-trap=[...]\tStop on following floating point exceptions."
-msgstr "-ffpe-trap=[...]\tStanna vid följande flyttalsundantag"
+msgstr "-ffpe-trap=[…]\tStanna vid följande flyttalsundantag."
#: fortran/lang.opt:489
-#, fuzzy
-#| msgid "-ffpe-summary=[...]\tPrint summary of floating point exceptions"
msgid "-ffpe-summary=[...]\tPrint summary of floating point exceptions."
-msgstr "-ffpe-summary=[…]\tSkriv ut en sammanfattning av flyttalsundantag"
+msgstr "-ffpe-summary=[…]\tSkriv ut en sammanfattning av flyttalsundantag."
#: fortran/lang.opt:493
-#, fuzzy
-#| msgid "Assume that the source file is free form"
msgid "Assume that the source file is free form."
-msgstr "Anta att källkodsfilen är i fritt format"
+msgstr "Anta att källkodsfilen är i fritt format."
#: fortran/lang.opt:497
-#, fuzzy
-#| msgid "Allow arbitrary character line width in free mode"
msgid "Allow arbitrary character line width in free mode."
-msgstr "Tillåt radlängd med godtyckligt antal tecken i fri form"
+msgstr "Tillåt radlängd med godtyckligt antal tecken i fri form."
#: fortran/lang.opt:501
-#, fuzzy
-#| msgid "-ffree-line-length-<n>\tUse n as character line width in free mode"
msgid "-ffree-line-length-<n>\tUse n as character line width in free mode."
-msgstr "-ffree-line-length-<n>\tAnvänd radlängd med n tecken i fri form"
+msgstr "-ffree-line-length-<n>\tAnvänd radlängd med n tecken i fri form."
#: fortran/lang.opt:505
-#, fuzzy
-#| msgid "Enable front end optimization"
msgid "Enable front end optimization."
-msgstr "Aktivera framändesoptimeringar"
+msgstr "Aktivera framändesoptimeringar."
#: fortran/lang.opt:509
-#, fuzzy
-#| msgid "Specify that no implicit typing is allowed, unless overridden by explicit IMPLICIT statements"
msgid "Specify that no implicit typing is allowed, unless overridden by explicit IMPLICIT statements."
-msgstr "Ange att ingen implicit typning är tillåten, om inte åsidosatt med uttryckliga IMPLICIT-satser"
+msgstr "Ange att ingen implicit typning är tillåten, om inte åsidosatt med uttryckliga IMPLICIT-satser."
#: fortran/lang.opt:513
-#, fuzzy
-#| msgid "-finit-character=<n>\tInitialize local character variables to ASCII value n"
msgid "-finit-character=<n>\tInitialize local character variables to ASCII value n."
-msgstr "-finit-character=<n>\tInitiera lokala teckenvariabler med ASCII-värde n"
+msgstr "-finit-character=<n>\tInitiera lokala teckenvariabler med ASCII-värde n."
#: fortran/lang.opt:517
-#, fuzzy
-#| msgid "-finit-integer=<n>\tInitialize local integer variables to n"
msgid "-finit-integer=<n>\tInitialize local integer variables to n."
-msgstr "-finit-integer=<n>\tInitiera lokala heltalsvariabler med n"
+msgstr "-finit-integer=<n>\tInitiera lokala heltalsvariabler med n."
#: fortran/lang.opt:521
-#, fuzzy
-#| msgid "Initialize local variables to zero (from g77)"
msgid "Initialize local variables to zero (from g77)."
-msgstr "Initiera lokala variabler med noll (från g77)"
+msgstr "Initiera lokala variabler med noll (från g77)."
#: fortran/lang.opt:525
-#, fuzzy
-#| msgid "-finit-logical=<true|false>\tInitialize local logical variables"
msgid "-finit-logical=<true|false>\tInitialize local logical variables."
-msgstr "-finit-logical=<true|false>\tInitiera lokala logiska variabler"
+msgstr "-finit-logical=<true|false>\tInitiera lokala logiska variabler."
#: fortran/lang.opt:529
-#, fuzzy
-#| msgid "-finit-real=<zero|snan|nan|inf|-inf>\tInitialize local real variables"
msgid "-finit-real=<zero|snan|nan|inf|-inf>\tInitialize local real variables."
-msgstr "-finit-real=<zero|snan|nan|inf|-inf>\tInitiera lokala reella variabler"
+msgstr "-finit-real=<zero|snan|nan|inf|-inf>\tInitiera lokala reella variabler."
#: fortran/lang.opt:532
#, c-format
@@ -6274,34 +5921,24 @@ msgid "Unrecognized option to floating-point init value: %qs"
msgstr "Okänt argument till -floating-point initieringsvärde: %qs"
#: fortran/lang.opt:551
-#, fuzzy
-#| msgid "-fblas-matmul-limit=<n>\tSize of the smallest matrix for which matmul will use BLAS"
msgid "-finline-matmul-limit=<n>\tSpecify the size of the largest matrix for which matmul will be inlined."
-msgstr "-fblas-matmul-limit=<n>\tStorlek på den minsta matris för vilken matmul kommer använda BLAS"
+msgstr "-fblas-matmul-limit=<n>\tSpecificera storleken på den största matris för vilken matmul kommer inline:as."
#: fortran/lang.opt:555
-#, fuzzy
-#| msgid "-fmax-array-constructor=<n>\tMaximum number of objects in an array constructor"
msgid "-fmax-array-constructor=<n>\tMaximum number of objects in an array constructor."
-msgstr "-fmax-array-constructor=<n>\tMaximalt antal objekt i en vektorkonstruerare"
+msgstr "-fmax-array-constructor=<n>\tMaximalt antal objekt i en vektorkonstruerare."
#: fortran/lang.opt:559
-#, fuzzy
-#| msgid "-fmax-identifier-length=<n>\tMaximum identifier length"
msgid "-fmax-identifier-length=<n>\tMaximum identifier length."
-msgstr "-fmax-identifier-length=<n>\tMaximal identifierarlängd"
+msgstr "-fmax-identifier-length=<n>\tMaximal identifierarlängd."
#: fortran/lang.opt:563
-#, fuzzy
-#| msgid "-fmax-subrecord-length=<n>\tMaximum length for subrecords"
msgid "-fmax-subrecord-length=<n>\tMaximum length for subrecords."
-msgstr "-fmax-subrecord-length=<n>\tMaximal längd för underposter"
+msgstr "-fmax-subrecord-length=<n>\tMaximal längd för underposter."
#: fortran/lang.opt:567
-#, fuzzy
-#| msgid "-fmax-stack-var-size=<n>\tSize in bytes of the largest array that will be put on the stack"
msgid "-fmax-stack-var-size=<n>\tSize in bytes of the largest array that will be put on the stack."
-msgstr "-fmax-stack-var-size=<n>\tStorlek i byte på den största vektorn som läggs på stacken"
+msgstr "-fmax-stack-var-size=<n>\tStorlek i byte på den största vektorn som läggs på stacken."
#: fortran/lang.opt:571
msgid "Put all local arrays on stack."
@@ -6312,94 +5949,64 @@ msgid "Set default accessibility of module entities to PRIVATE."
msgstr "Sätt modulentiteternas standardtillgänglighet till PRIVATE."
#: fortran/lang.opt:591
-#, fuzzy
-#| msgid "Try to lay out derived types as compactly as possible"
msgid "Try to lay out derived types as compactly as possible."
-msgstr "Försök placera ut härledda typer så kompakt som möjligt"
+msgstr "Försök placera ut härledda typer så kompakt som möjligt."
#: fortran/lang.opt:599
-#, fuzzy
-#| msgid "Protect parentheses in expressions"
msgid "Protect parentheses in expressions."
-msgstr "Skydda parenteser i uttryck"
+msgstr "Skydda parenteser i uttryck."
#: fortran/lang.opt:603
-#, fuzzy
-#| msgid "Enable range checking during compilation"
msgid "Enable range checking during compilation."
-msgstr "Aktivera intervallkontroller under kompilering"
+msgstr "Aktivera intervallkontroller under kompilering."
#: fortran/lang.opt:607
-#, fuzzy
-#| msgid "Interpret any REAL(4) as a REAL(8)"
msgid "Interpret any REAL(4) as a REAL(8)."
-msgstr "Tolka en REAL(4) som en REAL(8)"
+msgstr "Tolka en REAL(4) som en REAL(8)."
#: fortran/lang.opt:611
-#, fuzzy
-#| msgid "Interpret any REAL(4) as a REAL(10)"
msgid "Interpret any REAL(4) as a REAL(10)."
-msgstr "Tolka en REAL(4) som en REAL(10)"
+msgstr "Tolka en REAL(4) som en REAL(10)."
#: fortran/lang.opt:615
-#, fuzzy
-#| msgid "Interpret any REAL(4) as a REAL(16)"
msgid "Interpret any REAL(4) as a REAL(16)."
-msgstr "Tolka en REAL(4) som en REAL(16)"
+msgstr "Tolka en REAL(4) som en REAL(16)."
#: fortran/lang.opt:619
-#, fuzzy
-#| msgid "Interpret any REAL(8) as a REAL(4)"
msgid "Interpret any REAL(8) as a REAL(4)."
-msgstr "Tolka en REAL(8) som en REAL(4)"
+msgstr "Tolka en REAL(8) som en REAL(4)."
#: fortran/lang.opt:623
-#, fuzzy
-#| msgid "Interpret any REAL(8) as a REAL(10)"
msgid "Interpret any REAL(8) as a REAL(10)."
-msgstr "Tolka en REAL(8) som en REAL(10)"
+msgstr "Tolka en REAL(8) som en REAL(10)."
#: fortran/lang.opt:627
-#, fuzzy
-#| msgid "Interpret any REAL(8) as a REAL(16)"
msgid "Interpret any REAL(8) as a REAL(16)."
-msgstr "Tolka en REAL(8) som en REAL(16)"
+msgstr "Tolka en REAL(8) som en REAL(16)."
#: fortran/lang.opt:631
-#, fuzzy
-#| msgid "Reallocate the LHS in assignments"
msgid "Reallocate the LHS in assignments."
-msgstr "Omallokera vänsterhandssidan i tilldelningar"
+msgstr "Omallokera vänsterhandssidan i tilldelningar."
#: fortran/lang.opt:635
-#, fuzzy
-#| msgid "Use a 4-byte record marker for unformatted files"
msgid "Use a 4-byte record marker for unformatted files."
-msgstr "Använd 4-bytes postmarkeringar för oformaterade filer"
+msgstr "Använd 4-bytes postmarkeringar för oformaterade filer."
#: fortran/lang.opt:639
-#, fuzzy
-#| msgid "Use an 8-byte record marker for unformatted files"
msgid "Use an 8-byte record marker for unformatted files."
-msgstr "Använd 8-bytes postmarkeringar för oformaterade filer"
+msgstr "Använd 8-bytes postmarkeringar för oformaterade filer."
#: fortran/lang.opt:643
-#, fuzzy
-#| msgid "Allocate local variables on the stack to allow indirect recursion"
msgid "Allocate local variables on the stack to allow indirect recursion."
-msgstr "Allokera lokala variabler på stacken för att möjliggöra indirekt rekursion"
+msgstr "Allokera lokala variabler på stacken för att möjliggöra indirekt rekursion."
#: fortran/lang.opt:647
-#, fuzzy
-#| msgid "Copy array sections into a contiguous block on procedure entry"
msgid "Copy array sections into a contiguous block on procedure entry."
-msgstr "Kopiera vektorsektioner till sammanhängande block vid procedurstart"
+msgstr "Kopiera vektorsektioner till sammanhängande block vid procedurstart."
#: fortran/lang.opt:651
-#, fuzzy
-#| msgid "-fcoarray=<none|single|lib>\tSpecify which coarray parallelization should be used"
msgid "-fcoarray=<none|single|lib>\tSpecify which coarray parallelization should be used."
-msgstr "-fcoarray=<none|single|lib>\tAnge vilken co-vektorsparallellisering som skall användas"
+msgstr "-fcoarray=<none|single|lib>\tAnge vilken co-vektorsparallellisering som skall användas."
#: fortran/lang.opt:654
#, c-format
@@ -6407,28 +6014,20 @@ msgid "Unrecognized option: %qs"
msgstr "Okänd flagga: %qs"
#: fortran/lang.opt:667
-#, fuzzy
-#| msgid "-fcheck=[...]\tSpecify which runtime checks are to be performed"
msgid "-fcheck=[...]\tSpecify which runtime checks are to be performed."
-msgstr "-fcheck=[...]\tAnge vilka körtidskontroller som skall utföras"
+msgstr "-fcheck=[...]\tAnge vilka körtidskontroller som skall utföras."
#: fortran/lang.opt:671
-#, fuzzy
-#| msgid "Append a second underscore if the name already contains an underscore"
msgid "Append a second underscore if the name already contains an underscore."
-msgstr "Lägg till ett andra understrykningstecken om namnet redan innehåller ett understrykningstecken"
+msgstr "Lägg till ett andra understrykningstecken om namnet redan innehåller ett understrykningstecken."
#: fortran/lang.opt:679
-#, fuzzy
-#| msgid "Apply negative sign to zero values"
msgid "Apply negative sign to zero values."
-msgstr "Använd negativt tecken på nollvärden"
+msgstr "Använd negativt tecken på nollvärden."
#: fortran/lang.opt:683
-#, fuzzy
-#| msgid "Append underscores to externally visible names"
msgid "Append underscores to externally visible names."
-msgstr "Lägg till understrykningstecken till externt synliga namn"
+msgstr "Lägg till understrykningstecken till externt synliga namn."
#: fortran/lang.opt:687 c-family/c.opt:1139 c-family/c.opt:1163
#: c-family/c.opt:1389 config/pa/pa.opt:42 config/pa/pa.opt:66
@@ -6440,46 +6039,32 @@ msgid "Does nothing. Preserved for backward compatibility."
msgstr "Gör ingenting. Bevarad för bakåtkompatibilitet."
#: fortran/lang.opt:727
-#, fuzzy
-#| msgid "Statically link the GNU Fortran helper library (libgfortran)"
msgid "Statically link the GNU Fortran helper library (libgfortran)."
-msgstr "Länka statiskt till GNU:s Fortran-hjälpbibliotek (libgfortran)"
+msgstr "Länka statiskt till GNU:s Fortran-hjälpbibliotek (libgfortran)."
#: fortran/lang.opt:731
-#, fuzzy
-#| msgid "Conform to the ISO Fortran 2003 standard"
msgid "Conform to the ISO Fortran 2003 standard."
-msgstr "Följ standarden ISO Fortran 2003"
+msgstr "Följ standarden ISO Fortran 2003."
#: fortran/lang.opt:735
-#, fuzzy
-#| msgid "Conform to the ISO Fortran 2008 standard"
msgid "Conform to the ISO Fortran 2008 standard."
-msgstr "Följ standarden ISO Fortran 2008"
+msgstr "Följ standarden ISO Fortran 2008."
#: fortran/lang.opt:739
-#, fuzzy
-#| msgid "Conform to the ISO Fortran 2008 standard including TS 29113"
msgid "Conform to the ISO Fortran 2008 standard including TS 29113."
-msgstr "Följ standarden ISO Fortran 2008 inklusive TS 29113"
+msgstr "Följ standarden ISO Fortran 2008 inklusive TS 29113."
#: fortran/lang.opt:743
-#, fuzzy
-#| msgid "Conform to the ISO Fortran 95 standard"
msgid "Conform to the ISO Fortran 95 standard."
-msgstr "Följ standarden ISO Fortran 95"
+msgstr "Följ standarden ISO Fortran 95."
#: fortran/lang.opt:747
-#, fuzzy
-#| msgid "Conform to nothing in particular"
msgid "Conform to nothing in particular."
-msgstr "Följ inget särskilt"
+msgstr "Följ inget särskilt."
#: fortran/lang.opt:751
-#, fuzzy
-#| msgid "Accept extensions to support legacy code"
msgid "Accept extensions to support legacy code."
-msgstr "Acceptera utökningar för att stödja gammal kod"
+msgstr "Acceptera utökningar för att stödja gammal kod."
#: c-family/c.opt:43 c-family/c.opt:46 c-family/c.opt:181
#, c-format
@@ -6508,88 +6093,60 @@ msgid "missing path after %qs"
msgstr "sökväg saknas efter %qs"
#: c-family/c.opt:182
-#, fuzzy
-#| msgid "-A<question>=<answer>\tAssert the <answer> to <question>. Putting '-' before <question> disables the <answer> to <question>"
msgid "-A<question>=<answer>\tAssert the <answer> to <question>. Putting '-' before <question> disables the <answer> to <question>."
-msgstr "-A<frÃ¥ga>=<svar>\tIntyga <svar> pÃ¥ <frÃ¥ga>. Om â€-†sätts före <frÃ¥ga> avaktiveras <svar>:et till <frÃ¥ga>:n"
+msgstr "-A<frÃ¥ga>=<svar>\tIntyga <svar> pÃ¥ <frÃ¥ga>. Om â€-†sätts före <frÃ¥ga> avaktiveras <svar>:et till <frÃ¥ga>:n."
#: c-family/c.opt:186
-#, fuzzy
-#| msgid "Do not discard comments"
msgid "Do not discard comments."
-msgstr "Kasta inte kommentarer"
+msgstr "Kasta inte kommentarer."
#: c-family/c.opt:190
-#, fuzzy
-#| msgid "Do not discard comments in macro expansions"
msgid "Do not discard comments in macro expansions."
-msgstr "Släng inte kommentarer vid makroexpansioner"
+msgstr "Släng inte kommentarer vid makroexpansioner."
#: c-family/c.opt:194
-#, fuzzy
-#| msgid "-D<macro>[=<val>]\tDefine a <macro> with <val> as its value. If just <macro> is given, <val> is taken to be 1"
msgid "-D<macro>[=<val>]\tDefine a <macro> with <val> as its value. If just <macro> is given, <val> is taken to be 1."
-msgstr "-D<makro>[=<värde>]\tDefiniera ett <makro> med <värde> som sitt värde. Om bara <makro> anges sätts <värde> till 1"
+msgstr "-D<makro>[=<värde>]\tDefiniera ett <makro> med <värde> som sitt värde. Om bara <makro> anges sätts <värde> till 1."
#: c-family/c.opt:201
-#, fuzzy
-#| msgid "-F <dir>\tAdd <dir> to the end of the main framework include path"
msgid "-F <dir>\tAdd <dir> to the end of the main framework include path."
-msgstr "-F <kat>\tLägg till <kat> till slutet av huvudramverkets inkluderingssökväg"
+msgstr "-F <kat>\tLägg till <kat> till slutet av huvudramverkets inkluderingssökväg."
#: c-family/c.opt:205
-#, fuzzy
-#| msgid "Print the name of header files as they are used"
msgid "Print the name of header files as they are used."
-msgstr "Skriv ut namnet på huvudfiler allteftersom de används"
+msgstr "Skriv ut namnet på huvudfiler allteftersom de används."
#: c-family/c.opt:209
-#, fuzzy
-#| msgid "-I <dir>\tAdd <dir> to the end of the main include path"
msgid "-I <dir>\tAdd <dir> to the end of the main include path."
-msgstr "-I <kat>\tLägg till <kat> till slutet av huvudsökvägen"
+msgstr "-I <kat>\tLägg till <kat> till slutet av huvudsökvägen."
#: c-family/c.opt:213
-#, fuzzy
-#| msgid "Generate make dependencies"
msgid "Generate make dependencies."
-msgstr "Generera make-beroenden"
+msgstr "Generera make-beroenden."
#: c-family/c.opt:217
-#, fuzzy
-#| msgid "Generate make dependencies and compile"
msgid "Generate make dependencies and compile."
-msgstr "Generera make-beroenden och kompilera"
+msgstr "Generera make-beroenden och kompilera."
#: c-family/c.opt:221
-#, fuzzy
-#| msgid "-MF <file>\tWrite dependency output to the given file"
msgid "-MF <file>\tWrite dependency output to the given file."
-msgstr "-MF <fil>\tSkriv beroendeutdata till den angivna filen"
+msgstr "-MF <fil>\tSkriv beroendeutdata till den angivna filen."
#: c-family/c.opt:225
-#, fuzzy
-#| msgid "Treat missing header files as generated files"
msgid "Treat missing header files as generated files."
-msgstr "Behandla saknade huvudfiler som genererade filer"
+msgstr "Behandla saknade huvudfiler som genererade filer."
#: c-family/c.opt:229
-#, fuzzy
-#| msgid "Like -M but ignore system header files"
msgid "Like -M but ignore system header files."
-msgstr "Som -M men ignorera systemhuvudfiler"
+msgstr "Som -M men ignorera systemhuvudfiler."
#: c-family/c.opt:233
-#, fuzzy
-#| msgid "Like -MD but ignore system header files"
msgid "Like -MD but ignore system header files."
-msgstr "Som -MD men ignorera systemhuvudfiler"
+msgstr "Som -MD men ignorera systemhuvudfiler."
#: c-family/c.opt:237
-#, fuzzy
-#| msgid "Generate phony targets for all headers"
msgid "Generate phony targets for all headers."
-msgstr "Generera låtsasmål för alla huvuden"
+msgstr "Generera låtsasmål för alla huvuden."
#: c-family/c.opt:240 c-family/c.opt:244
#, c-format
@@ -6597,458 +6154,312 @@ msgid "missing makefile target after %qs"
msgstr "makefile-mål saknas efter %qs"
#: c-family/c.opt:241
-#, fuzzy
-#| msgid "-MQ <target>\tAdd a MAKE-quoted target"
msgid "-MQ <target>\tAdd a MAKE-quoted target."
-msgstr "-MQ <mål>\tLägg till ett MAKE-citerat mål"
+msgstr "-MQ <mål>\tLägg till ett MAKE-citerat mål."
#: c-family/c.opt:245
-#, fuzzy
-#| msgid "-MT <target>\tAdd an unquoted target"
msgid "-MT <target>\tAdd an unquoted target."
-msgstr "-MT <mål>\tLägg till ett ociterat mål"
+msgstr "-MT <mål>\tLägg till ett ociterat mål."
#: c-family/c.opt:249
-#, fuzzy
-#| msgid "Do not generate #line directives"
msgid "Do not generate #line directives."
-msgstr "Generera inte #line-direktiv"
+msgstr "Generera inte #line-direktiv."
#: c-family/c.opt:253
-#, fuzzy
-#| msgid "-U<macro>\tUndefine <macro>"
msgid "-U<macro>\tUndefine <macro>."
-msgstr "-U<makro>\tAvdefiniera <makro>"
+msgstr "-U<makro>\tAvdefiniera <makro>."
#: c-family/c.opt:257
-#, fuzzy
-#| msgid "Warn about things that will change when compiling with an ABI-compliant compiler"
msgid "Warn about things that will change when compiling with an ABI-compliant compiler."
-msgstr "Varna för saker som skulle ändras vid kompilering med en kompilator som följer ABI"
+msgstr "Varna för saker som skulle ändras vid kompilering med en kompilator som följer ABI."
#: c-family/c.opt:261
-#, fuzzy
-#| msgid "Warn about things that change between the current -fabi-version and the specified version"
msgid "Warn about things that change between the current -fabi-version and the specified version."
-msgstr "Varna för saker som ändras mellan den nuvarande -fabi-version och den angivna versionen"
+msgstr "Varna för saker som ändras mellan den nuvarande -fabi-version och den angivna versionen."
#: c-family/c.opt:265
-#, fuzzy
-#| msgid "Warn if a subobject has an abi_tag attribute that the complete object type does not have"
msgid "Warn if a subobject has an abi_tag attribute that the complete object type does not have."
-msgstr "Varna om ett underobjekt har ett abi_tag-attribut som det fullständiga objektets typ inte har"
+msgstr "Varna om ett underobjekt har ett abi_tag-attribut som det fullständiga objektets typ inte har."
#: c-family/c.opt:272
-#, fuzzy
-#| msgid "Warn about suspicious uses of memory addresses"
msgid "Warn about suspicious uses of memory addresses."
-msgstr "Varna för misstänkt användning av minnesadresser"
+msgstr "Varna för misstänkt användning av minnesadresser."
#: c-family/c.opt:276 ada/gcc-interface/lang.opt:57
-#, fuzzy
-#| msgid "Enable most warning messages"
msgid "Enable most warning messages."
-msgstr "Aktivera de flesta varningsmeddelanden"
+msgstr "Aktivera de flesta varningsmeddelanden."
#: c-family/c.opt:288
-#, fuzzy
-#| msgid "Warn whenever an Objective-C assignment is being intercepted by the garbage collector"
msgid "Warn whenever an Objective-C assignment is being intercepted by the garbage collector."
-msgstr "Varna när en Objective-C-tilldelning fångas upp av skräpsamlaren"
+msgstr "Varna när en Objective-C-tilldelning fångas upp av skräpsamlaren."
#: c-family/c.opt:292
-#, fuzzy
-#| msgid "Warn about casting functions to incompatible types"
msgid "Warn about casting functions to incompatible types."
-msgstr "Varna för typkonvertering av funktioner till inkompatibla typer"
+msgstr "Varna för typkonvertering av funktioner till inkompatibla typer."
#: c-family/c.opt:296
-#, fuzzy
-#| msgid "Warn about boolean expression compared with an integer value different from true/false"
msgid "Warn about boolean expression compared with an integer value different from true/false."
-msgstr "Varna för booleska uttryck som jämförs med ett heltalsvärde annat skilt från sant/falskt"
+msgstr "Varna för booleska uttryck som jämförs med ett heltalsvärde annat skilt från sant/falskt."
#: c-family/c.opt:300
msgid "Warn when __builtin_frame_address or __builtin_return_address is used unsafely."
msgstr "Varna när __builtin_frame_address eller __builtin_return_address används osäkert."
#: c-family/c.opt:304
-#, fuzzy
-#| msgid "Warn when a built-in preprocessor macro is undefined or redefined"
msgid "Warn when a built-in preprocessor macro is undefined or redefined."
-msgstr "Varna när ett inbyggt preprocessormakro avdefinieras eller omdefinieras"
+msgstr "Varna när ett inbyggt preprocessormakro avdefinieras eller omdefinieras."
#: c-family/c.opt:308
-#, fuzzy
-#| msgid "Warn about features not present in ISO C90, but present in ISO C99"
msgid "Warn about features not present in ISO C90, but present in ISO C99."
-msgstr "Varna för funktioner som inte finns i ISO C90, men finns i ISO C99"
+msgstr "Varna för funktioner som inte finns i ISO C90, men finns i ISO C99."
#: c-family/c.opt:312
-#, fuzzy
-#| msgid "Warn about features not present in ISO C99, but present in ISO C11"
msgid "Warn about features not present in ISO C99, but present in ISO C11."
-msgstr "Varna för funktioner som inte finns i ISO C99, men finns i ISO C11"
+msgstr "Varna för funktioner som inte finns i ISO C99, men finns i ISO C11."
#: c-family/c.opt:316
-#, fuzzy
-#| msgid "Warn about C constructs that are not in the common subset of C and C++"
msgid "Warn about C constructs that are not in the common subset of C and C++."
-msgstr "Varna för C-konstruktioner som inte är i den gemensamma delmängden av C och C++"
+msgstr "Varna för C-konstruktioner som inte är i den gemensamma delmängden av C och C++."
#: c-family/c.opt:323
-#, fuzzy
-#| msgid "Warn about C++ constructs whose meaning differs between ISO C++ 1998 and ISO C++ 2011"
msgid "Warn about C++ constructs whose meaning differs between ISO C++ 1998 and ISO C++ 2011."
-msgstr "Varna för C++-konstruktioner vars betydelse skiljer mellan ISO C++ 1998 och ISO C++ 2011"
+msgstr "Varna för C++-konstruktioner vars betydelse skiljer mellan ISO C++ 1998 och ISO C++ 2011."
#: c-family/c.opt:327
-#, fuzzy
-#| msgid "Warn about C++ constructs whose meaning differs between ISO C++ 2011 and ISO C++ 2014"
msgid "Warn about C++ constructs whose meaning differs between ISO C++ 2011 and ISO C++ 2014."
-msgstr "Varna för C++-konstruktioner vars betydelse skiljer mellan ISO C++ 2011 och ISO C++ 2014"
+msgstr "Varna för C++-konstruktioner vars betydelse skiljer mellan ISO C++ 2011 och ISO C++ 2014."
#: c-family/c.opt:331
-#, fuzzy
-#| msgid "Warn about casts which discard qualifiers"
msgid "Warn about casts which discard qualifiers."
-msgstr "Varna för typkonvertering som slänger kvalificerare"
+msgstr "Varna för typkonvertering som slänger kvalificerare."
#: c-family/c.opt:335
-#, fuzzy
-#| msgid "Warn about subscripts whose type is \"char\""
msgid "Warn about subscripts whose type is \"char\"."
-msgstr "Varna för index vars typ är â€charâ€"
+msgstr "Varna för index vars typ är â€charâ€."
#: c-family/c.opt:339
-#, fuzzy
-#| msgid "Warn about memory access errors found by Pointer Bounds Checker"
msgid "Warn about memory access errors found by Pointer Bounds Checker."
-msgstr "Farna för minnesåtkomstfel som hittas av pekargränskontrollen"
+msgstr "Farna för minnesåtkomstfel som hittas av pekargränskontrollen."
#: c-family/c.opt:343
-#, fuzzy
-#| msgid "Warn about variables that might be changed by \"longjmp\" or \"vfork\""
msgid "Warn about variables that might be changed by \"longjmp\" or \"vfork\"."
-msgstr "Varna för variabler som kan ändras av â€longjmp†eller â€vforkâ€"
+msgstr "Varna för variabler som kan ändras av â€longjmp†eller â€vforkâ€."
#: c-family/c.opt:347
-#, fuzzy
-#| msgid "Warn about possibly nested block comments, and C++ comments spanning more than one physical line"
msgid "Warn about possibly nested block comments, and C++ comments spanning more than one physical line."
-msgstr "Varna för möjliga nästade blockkommentarer, och C++-kommentarer som spänner över mer än en fysisk rad"
+msgstr "Varna för möjliga nästade blockkommentarer, och C++-kommentarer som spänner över mer än en fysisk rad."
#: c-family/c.opt:351
-#, fuzzy
-#| msgid "Synonym for -Wcomment"
msgid "Synonym for -Wcomment."
-msgstr "Synonym för -Wcomment"
+msgstr "Synonym för -Wcomment."
#: c-family/c.opt:355
-#, fuzzy
-#| msgid "Warn for conditionally-supported constructs"
msgid "Warn for conditionally-supported constructs."
-msgstr "Varna för konstruktioner med villkorligt stöd"
+msgstr "Varna för konstruktioner med villkorligt stöd."
#: c-family/c.opt:359
-#, fuzzy
-#| msgid "Warn for implicit type conversions that may change a value"
msgid "Warn for implicit type conversions that may change a value."
-msgstr "Varna för implicita typkonverteringar som kan ändra ett värde"
+msgstr "Varna för implicita typkonverteringar som kan ändra ett värde."
#: c-family/c.opt:363
-#, fuzzy
-#| msgid "Warn for converting NULL from/to a non-pointer type"
msgid "Warn for converting NULL from/to a non-pointer type."
-msgstr "Varna för konvertering av NULL till icke-pekartyp"
+msgstr "Varna för konvertering av NULL till icke-pekartyp."
#: c-family/c.opt:371
-#, fuzzy
-#| msgid "Warn when all constructors and destructors are private"
msgid "Warn when all constructors and destructors are private."
-msgstr "Varna när ett alla konstruerare och destruerare är privata"
+msgstr "Varna när ett alla konstruerare och destruerare är privata."
#: c-family/c.opt:375
-#, fuzzy
-#| msgid "Warn about __TIME__, __DATE__ and __TIMESTAMP__ usage"
msgid "Warn about __TIME__, __DATE__ and __TIMESTAMP__ usage."
-msgstr "Varna för användning av __TIME__, __DATE__ och __TIMESTAMP__"
+msgstr "Varna för användning av __TIME__, __DATE__ och __TIMESTAMP__."
#: c-family/c.opt:379
-#, fuzzy
-#| msgid "Warn when a declaration is found after a statement"
msgid "Warn when a declaration is found after a statement."
-msgstr "Varna när en deklaration hittas efter en sats"
+msgstr "Varna när en deklaration hittas efter en sats."
#: c-family/c.opt:383
-#, fuzzy
-#| msgid "Warn when deleting a pointer to incomplete type"
msgid "Warn when deleting a pointer to incomplete type."
-msgstr "Varna när en pekare till en ofullständig typ raderas"
+msgstr "Varna när en pekare till en ofullständig typ raderas."
#: c-family/c.opt:387
-#, fuzzy
-#| msgid "Warn about deleting polymorphic objects with non-virtual destructors"
msgid "Warn about deleting polymorphic objects with non-virtual destructors."
-msgstr "Varna för radering av polymorfa objekt med ickevirtuella destruerare"
+msgstr "Varna för radering av polymorfa objekt med ickevirtuella destruerare."
#: c-family/c.opt:391
-#, fuzzy
-#| msgid "Warn if a deprecated compiler feature, class, method, or field is used"
msgid "Warn if a deprecated compiler feature, class, method, or field is used."
-msgstr "Varna för en kompilatorfunktion, klass, metod eller fält som bör undvikas används"
+msgstr "Varna för en kompilatorfunktion, klass, metod eller fält som bör undvikas används."
#: c-family/c.opt:395
-#, fuzzy
-#| msgid "Warn about positional initialization of structs requiring designated initializers"
msgid "Warn about positional initialization of structs requiring designated initializers."
-msgstr "Varna för positionsinitiering av poster som kräver designerade initierare"
+msgstr "Varna för positionsinitiering av poster som kräver designerade initierare."
#: c-family/c.opt:399
-#, fuzzy
-#| msgid "Warn if qualifiers on arrays which are pointer targets are discarded"
msgid "Warn if qualifiers on arrays which are pointer targets are discarded."
-msgstr "Varna om kvalificerare på vektorer som är pekarmål kastas bort"
+msgstr "Varna om kvalificerare på vektorer som är pekarmål kastas bort."
#: c-family/c.opt:403
-#, fuzzy
-#| msgid "Warn if type qualifiers on pointers are discarded"
msgid "Warn if type qualifiers on pointers are discarded."
-msgstr "Varna om typkvalificerare på pekare kastas bort"
+msgstr "Varna om typkvalificerare på pekare kastas bort."
#: c-family/c.opt:407
-#, fuzzy
-#| msgid "Warn about compile-time integer division by zero"
msgid "Warn about compile-time integer division by zero."
-msgstr "Varna för heltalsdivision med noll vid kompileringstillfället"
+msgstr "Varna för heltalsdivision med noll vid kompileringstillfället."
#: c-family/c.opt:411
msgid "Warn about duplicated conditions in an if-else-if chain."
msgstr "Varna för dubblerade villkor i en if-else-if-kedja."
#: c-family/c.opt:415
-#, fuzzy
-#| msgid "Warn about violations of Effective C++ style rules"
msgid "Warn about violations of Effective C++ style rules."
-msgstr "Varna för brott mot stilreglerna i Effective C++"
+msgstr "Varna för brott mot stilreglerna i Effective C++."
#: c-family/c.opt:419
-#, fuzzy
-#| msgid "Warn about an empty body in an if or else statement"
msgid "Warn about an empty body in an if or else statement."
-msgstr "Varna för en tom kropp i en if- eller else-sats"
+msgstr "Varna för en tom kropp i en if- eller else-sats."
#: c-family/c.opt:423
-#, fuzzy
-#| msgid "Warn about stray tokens after #elif and #endif"
msgid "Warn about stray tokens after #elif and #endif."
-msgstr "Varna för vilsekomna symboler efter #elif och #endif"
+msgstr "Varna för vilsekomna symboler efter #elif och #endif."
#: c-family/c.opt:427
-#, fuzzy
-#| msgid "Warn about comparison of different enum types"
msgid "Warn about comparison of different enum types."
-msgstr "Varna för jämförelser av skilda uppräkningstyper"
+msgstr "Varna för jämförelser av skilda uppräkningstyper."
#: c-family/c.opt:435
-#, fuzzy
-#| msgid "This switch is deprecated; use -Werror=implicit-function-declaration instead"
msgid "This switch is deprecated; use -Werror=implicit-function-declaration instead."
-msgstr "Denna flagga bör undvikas, använd -Werror=implicit-function-declaration istället"
+msgstr "Denna flagga bör undvikas, använd -Werror=implicit-function-declaration istället."
#: c-family/c.opt:439
-#, fuzzy
-#| msgid "Warn for implicit type conversions that cause loss of floating point precision"
msgid "Warn for implicit type conversions that cause loss of floating point precision."
-msgstr "Varna för implicita typkonverteringar som orsakar förlust av flyttalsprecision"
+msgstr "Varna för implicita typkonverteringar som orsakar förlust av flyttalsprecision."
#: c-family/c.opt:443
-#, fuzzy
-#| msgid "Warn if testing floating point numbers for equality"
msgid "Warn if testing floating point numbers for equality."
-msgstr "Varna vid test av flyttal på likhet"
+msgstr "Varna vid test av flyttal på likhet."
#: c-family/c.opt:447 c-family/c.opt:479
-#, fuzzy
-#| msgid "Warn about printf/scanf/strftime/strfmon format string anomalies"
msgid "Warn about printf/scanf/strftime/strfmon format string anomalies."
-msgstr "Varna för anomalier i formatsträngar till printf/scanf/strftime/strfmon"
+msgstr "Varna för anomalier i formatsträngar till printf/scanf/strftime/strfmon."
#: c-family/c.opt:451
-#, fuzzy
-#| msgid "Warn about format strings that contain NUL bytes"
msgid "Warn about format strings that contain NUL bytes."
-msgstr "Varna för formatsträngar som innehåller NUL-byte:ar"
+msgstr "Varna för formatsträngar som innehåller NUL-byte:ar."
#: c-family/c.opt:455
-#, fuzzy
-#| msgid "Warn if passing too many arguments to a function for its format string"
msgid "Warn if passing too many arguments to a function for its format string."
-msgstr "Varna för för många argument argument till en funktion för dess formatsträng"
+msgstr "Varna för för många argument argument till en funktion för dess formatsträng."
#: c-family/c.opt:459
-#, fuzzy
-#| msgid "Warn about format strings that are not literals"
msgid "Warn about format strings that are not literals."
-msgstr "Varna för formatsträngar som inte är literaler"
+msgstr "Varna för formatsträngar som inte är literaler."
#: c-family/c.opt:463
-#, fuzzy
-#| msgid "Warn about possible security problems with format functions"
msgid "Warn about possible security problems with format functions."
-msgstr "Varna för möjliga säkerhetsproblem med formatfunktioner"
+msgstr "Varna för möjliga säkerhetsproblem med formatfunktioner."
#: c-family/c.opt:467
-#, fuzzy
-#| msgid "Warn about sign differences with format functions"
msgid "Warn about sign differences with format functions."
-msgstr "Varna för teckenskillnader i formatfunktioner"
+msgstr "Varna för teckenskillnader i formatfunktioner."
#: c-family/c.opt:471
-#, fuzzy
-#| msgid "Warn about strftime formats yielding 2-digit years"
msgid "Warn about strftime formats yielding 2-digit years."
-msgstr "Varna för format till strftime som ger 2-siffrigt årtal"
+msgstr "Varna för format till strftime som ger 2-siffrigt årtal."
#: c-family/c.opt:475
-#, fuzzy
-#| msgid "Warn about zero-length formats"
msgid "Warn about zero-length formats."
-msgstr "Varna för format med längden noll"
+msgstr "Varna för format med längden noll."
#: c-family/c.opt:483
msgid "Warn whenever type qualifiers are ignored."
msgstr "Varna när typkvalificerare ignoreras."
#: c-family/c.opt:487
-#, fuzzy
-#| msgid "Warn when there is a conversion between pointers that have incompatible types"
msgid "Warn when there is a conversion between pointers that have incompatible types."
-msgstr "Varna när det är en konvertering mellan pekare som har ofullständiga typer"
+msgstr "Varna när det är en konvertering mellan pekare som har ofullständiga typer."
#: c-family/c.opt:491
-#, fuzzy
-#| msgid "Warn about variables which are initialized to themselves"
msgid "Warn about variables which are initialized to themselves."
-msgstr "Varna för variabler som initieras till sig själva"
+msgstr "Varna för variabler som initieras till sig själva."
#: c-family/c.opt:495
-#, fuzzy
-#| msgid "Warn about implicit declarations"
msgid "Warn about implicit declarations."
-msgstr "Varna för implicita deklarationer"
+msgstr "Varna för implicita deklarationer."
#: c-family/c.opt:499
-#, fuzzy
-#| msgid "Warn about implicit conversions from \"float\" to \"double\""
msgid "Warn about implicit conversions from \"float\" to \"double\"."
-msgstr "Varna för implicita konverteringar frÃ¥n â€float†till â€doubleâ€"
+msgstr "Varna för implicita konverteringar frÃ¥n â€float†till â€doubleâ€."
#: c-family/c.opt:503
-#, fuzzy
-#| msgid "Warn about implicit function declarations"
msgid "Warn about implicit function declarations."
-msgstr "Varna för implicita funktionsdeklarationer"
+msgstr "Varna för implicita funktionsdeklarationer."
#: c-family/c.opt:507
-#, fuzzy
-#| msgid "Warn when a declaration does not specify a type"
msgid "Warn when a declaration does not specify a type."
-msgstr "Varna när en deklaration inte anger en typ"
+msgstr "Varna när en deklaration inte anger en typ."
#: c-family/c.opt:514
-#, fuzzy
-#| msgid "Warn about C++11 inheriting constructors when the base has a variadic constructor"
msgid "Warn about C++11 inheriting constructors when the base has a variadic constructor."
-msgstr "Varna för C++11 ärvda konstruerare när basen har en variadisk konstruerare"
+msgstr "Varna för C++11 ärvda konstruerare när basen har en variadisk konstruerare."
#: c-family/c.opt:518
-#, fuzzy
-#| msgid "Warn about incompatible integer to pointer and pointer to integer conversions"
msgid "Warn about incompatible integer to pointer and pointer to integer conversions."
-msgstr "Varna för inkompatibla konverteringar från heltal till pekare och pekare till heltal"
+msgstr "Varna för inkompatibla konverteringar från heltal till pekare och pekare till heltal."
#: c-family/c.opt:522
-#, fuzzy
-#| msgid "Warn when there is a cast to a pointer from an integer of a different size"
msgid "Warn when there is a cast to a pointer from an integer of a different size."
-msgstr "Varna för typkonverteringar till pekare från ett heltal med annan storlek"
+msgstr "Varna för typkonverteringar till pekare från ett heltal med annan storlek."
#: c-family/c.opt:526
-#, fuzzy
-#| msgid "Warn about invalid uses of the \"offsetof\" macro"
msgid "Warn about invalid uses of the \"offsetof\" macro."
-msgstr "Varna för ogiltiga användningar av makrot â€offsetofâ€"
+msgstr "Varna för ogiltiga användningar av makrot â€offsetofâ€."
#: c-family/c.opt:530
-#, fuzzy
-#| msgid "Warn about PCH files that are found but not used"
msgid "Warn about PCH files that are found but not used."
-msgstr "Varna för PCH-filer som hittas men inte används"
+msgstr "Varna för PCH-filer som hittas men inte används."
#: c-family/c.opt:534
-#, fuzzy
-#| msgid "Warn when a jump misses a variable initialization"
msgid "Warn when a jump misses a variable initialization."
-msgstr "Varna när ett hopp missar en variabelinitiering"
+msgstr "Varna när ett hopp missar en variabelinitiering."
#: c-family/c.opt:538
msgid "Warn when a string or character literal is followed by a ud-suffix which does not begin with an underscore."
msgstr "Varna när en sträng- eller teckenkonstant följs av ett ud-suffix som inte börjar med ett understrykningstecken."
#: c-family/c.opt:542
-#, fuzzy
-#| msgid "Warn when a logical operator is suspiciously always evaluating to true or false"
msgid "Warn when a logical operator is suspiciously always evaluating to true or false."
-msgstr "Varna när en logisk operator misstänkt nog alltid beräknas till sant eller falskt"
+msgstr "Varna när en logisk operator misstänkt nog alltid beräknas till sant eller falskt."
#: c-family/c.opt:546
-#, fuzzy
-#| msgid "Warn when logical not is used on the left hand side operand of a comparison"
msgid "Warn when logical not is used on the left hand side operand of a comparison."
-msgstr "Varna när logiskt icke används på den vänstra operanden i en jämförelse"
+msgstr "Varna när logiskt icke används på den vänstra operanden i en jämförelse."
#: c-family/c.opt:550
-#, fuzzy
-#| msgid "Do not warn about using \"long long\" when -pedantic"
msgid "Do not warn about using \"long long\" when -pedantic."
-msgstr "Varna inte om användning av â€long long†vid -pedantic"
+msgstr "Varna inte om användning av â€long long†vid -pedantic."
#: c-family/c.opt:554
-#, fuzzy
-#| msgid "Warn about suspicious declarations of \"main\""
msgid "Warn about suspicious declarations of \"main\"."
-msgstr "Varna för tveksamma deklarationer av â€mainâ€"
+msgstr "Varna för tveksamma deklarationer av â€mainâ€."
#: c-family/c.opt:562
-#, fuzzy
-#| msgid "Warn about suspicious calls to memset where the third argument is constant literal zero and the second is not"
msgid "Warn about suspicious calls to memset where the third argument is constant literal zero and the second is not."
-msgstr "Varna för misstänkta anrop till memset där det tredje argumentet är en konstant literal nolla och det andra inte är det"
+msgstr "Varna för misstänkta anrop till memset där det tredje argumentet är en konstant literal nolla och det andra inte är det."
#: c-family/c.opt:566
-#, fuzzy
-#| msgid "Warn when the packed attribute has no effect on struct layout"
msgid "Warn when the indentation of the code does not reflect the block structure."
-msgstr "Varna när attributet packed inte har någon effekt på postformatet"
+msgstr "Varna när indenteringen av koden inte avspeglar blockstrukturen."
#: c-family/c.opt:570
-#, fuzzy
-#| msgid "Warn about possibly missing braces around initializers"
msgid "Warn about possibly missing braces around initializers."
-msgstr "Varna för eventuellt saknade klamrar runt initierare"
+msgstr "Varna för eventuellt saknade klamrar runt initierare."
#: c-family/c.opt:574
-#, fuzzy
-#| msgid "Warn about global functions without previous declarations"
msgid "Warn about global functions without previous declarations."
-msgstr "Varna för globala funktioner utan tidigare deklaration"
+msgstr "Varna för globala funktioner utan tidigare deklaration."
#: c-family/c.opt:578
-#, fuzzy
-#| msgid "Warn about missing fields in struct initializers"
msgid "Warn about missing fields in struct initializers."
-msgstr "Varna för saknade fält i postinitierare"
+msgstr "Varna för saknade fält i postinitierare."
#: c-family/c.opt:582
msgid "Warn on direct multiple inheritance."
@@ -7059,80 +6470,56 @@ msgid "Warn on namespace definition."
msgstr "Varna vid namnrymdsdefinition."
#: c-family/c.opt:590
-#, fuzzy
-#| msgid "Warn about missing sized deallocation functions"
msgid "Warn about missing sized deallocation functions."
-msgstr "Varna för saknade storleksbestämda deallokeringsfunktioner"
+msgstr "Varna för saknade storleksbestämda deallokeringsfunktioner."
#: c-family/c.opt:594
-#, fuzzy
-#| msgid "Warn about suspicious length parameters to certain string functions if the argument uses sizeof"
msgid "Warn about suspicious length parameters to certain string functions if the argument uses sizeof."
-msgstr "Varna för misstänkta längdparametrar till vissa strängfunktioner om argumentet använder sizeof"
+msgstr "Varna för misstänkta längdparametrar till vissa strängfunktioner om argumentet använder sizeof."
#: c-family/c.opt:598
-#, fuzzy
-#| msgid "Warn when sizeof is applied on a parameter declared as an array"
msgid "Warn when sizeof is applied on a parameter declared as an array."
-msgstr "Varna när sizeof används på en parameter som är deklarerad som en vektor"
+msgstr "Varna när sizeof används på en parameter som är deklarerad som en vektor."
#: c-family/c.opt:602
-#, fuzzy
-#| msgid "Warn about functions which might be candidates for format attributes"
msgid "Warn about functions which might be candidates for format attributes."
-msgstr "Varna för funktioner som kan vara kandidater för formatattribut"
+msgstr "Varna för funktioner som kan vara kandidater för formatattribut."
#: c-family/c.opt:606
msgid "Suggest that the override keyword be used when the declaration of a virtual"
msgstr "Föreslå att använda nyckelordet override när deklarationen av en virtuell funktion åsidosätter en annan"
#: c-family/c.opt:611
-#, fuzzy
-#| msgid "Warn about enumerated switches, with no default, missing a case"
msgid "Warn about enumerated switches, with no default, missing a case."
-msgstr "Varna när hopptabeller för uppräkningstyper inte har standardfall och saknar ett fall"
+msgstr "Varna när hopptabeller för uppräkningstyper inte har standardfall och saknar ett fall."
#: c-family/c.opt:615
-#, fuzzy
-#| msgid "Warn about enumerated switches missing a \"default:\" statement"
msgid "Warn about enumerated switches missing a \"default:\" statement."
-msgstr "Varna för uppräkningshopptabeller saknar en â€default:â€-sats"
+msgstr "Varna för uppräkningshopptabeller saknar en â€default:â€-sats."
#: c-family/c.opt:619
-#, fuzzy
-#| msgid "Warn about all enumerated switches missing a specific case"
msgid "Warn about all enumerated switches missing a specific case."
-msgstr "Varna för alla uppräkningshopptabeller som saknar ett specifikt fall"
+msgstr "Varna för alla uppräkningshopptabeller som saknar ett specifikt fall."
#: c-family/c.opt:623
-#, fuzzy
-#| msgid "Warn about switches with boolean controlling expression"
msgid "Warn about switches with boolean controlling expression."
-msgstr "Varna för hopptabeller med booleska styruttryck"
+msgstr "Varna för hopptabeller med booleska styruttryck."
#: c-family/c.opt:627
-#, fuzzy
-#| msgid "for template declaration %q+D"
msgid "Warn on primary template declaration."
-msgstr "för malldeklaration %q+D"
+msgstr "Varna vid primär malldeklaration."
#: c-family/c.opt:635
-#, fuzzy
-#| msgid "Warn about user-specified include directories that do not exist"
msgid "Warn about user-specified include directories that do not exist."
-msgstr "Varna för användarangivna inkluderingskataloger som inte finns"
+msgstr "Varna för användarangivna inkluderingskataloger som inte finns."
#: c-family/c.opt:639
-#, fuzzy
-#| msgid "Warn about function parameters declared without a type specifier in K&R-style functions"
msgid "Warn about function parameters declared without a type specifier in K&R-style functions."
-msgstr "Varna för funktionsparametrar som deklarerats utan en typangivelse i K&R-stilfunktioner"
+msgstr "Varna för funktionsparametrar som deklarerats utan en typangivelse i K&R-stilfunktioner."
#: c-family/c.opt:643
-#, fuzzy
-#| msgid "Warn about global functions without prototypes"
msgid "Warn about global functions without prototypes."
-msgstr "Varna för globala funktioner utan prototyper"
+msgstr "Varna för globala funktioner utan prototyper."
#: c-family/c.opt:646 c-family/c.opt:1008 c-family/c.opt:1015
#: c-family/c.opt:1189 c-family/c.opt:1208 c-family/c.opt:1231
@@ -7147,453 +6534,313 @@ msgid "switch %qs is no longer supported"
msgstr "flaggan %qs stödjs inte längre"
#: c-family/c.opt:650
-#, fuzzy
-#| msgid "Warn about use of multi-character character constants"
msgid "Warn about use of multi-character character constants."
-msgstr "Varna vid användning av flerteckens teckenkonstant"
+msgstr "Varna vid användning av flerteckens teckenkonstant."
#: c-family/c.opt:654
-#, fuzzy
-#| msgid "Warn about narrowing conversions within { } that are ill-formed in C++11"
msgid "Warn about narrowing conversions within { } that are ill-formed in C++11."
-msgstr "Varna för avsmalnande konverteringar inom { } som är felformulerad i C++11"
+msgstr "Varna för avsmalnande konverteringar inom { } som är felformulerad i C++11."
#: c-family/c.opt:658
-#, fuzzy
-#| msgid "Warn about \"extern\" declarations not at file scope"
msgid "Warn about \"extern\" declarations not at file scope."
-msgstr "Varna för â€externâ€-deklaration som inte är pÃ¥ filnivÃ¥"
+msgstr "Varna för â€externâ€-deklaration som inte är pÃ¥ filnivÃ¥."
#: c-family/c.opt:662
-#, fuzzy
-#| msgid "Warn when a noexcept expression evaluates to false even though the expression can't actually throw"
msgid "Warn when a noexcept expression evaluates to false even though the expression can't actually throw."
-msgstr "Varna när ett noexcept-uttryck beräknas till false även om uttrycket inte faktiskt kan kasta"
+msgstr "Varna när ett noexcept-uttryck beräknas till false även om uttrycket inte faktiskt kan kasta."
#: c-family/c.opt:666
-#, fuzzy
-#| msgid "Warn when non-templatized friend functions are declared within a template"
msgid "Warn when non-templatized friend functions are declared within a template."
-msgstr "Varna när en vänfuktion som inte är en mall deklareras inuti en mall"
+msgstr "Varna när en vänfuktion som inte är en mall deklareras inuti en mall."
#: c-family/c.opt:670
-#, fuzzy
-#| msgid "Warn about non-virtual destructors"
msgid "Warn about non-virtual destructors."
-msgstr "Varna för ickevirtuella destruerare"
+msgstr "Varna för ickevirtuella destruerare."
#: c-family/c.opt:674
-#, fuzzy
-#| msgid "Warn about NULL being passed to argument slots marked as requiring non-NULL"
msgid "Warn about NULL being passed to argument slots marked as requiring non-NULL."
-msgstr "Varna om NULL skickas som argument som är markerade att de kräver icke-NULL"
+msgstr "Varna om NULL skickas som argument som är markerade att de kräver icke-NULL."
#: c-family/c.opt:686
-#, fuzzy
-#| msgid "-Wnormalized=<none|id|nfc|nfkc>\tWarn about non-normalised Unicode strings"
msgid "-Wnormalized=<none|id|nfc|nfkc>\tWarn about non-normalised Unicode strings."
-msgstr "-Wnormalized=<none|id|nfc|nfkc>\tVarna för icke normaliserade Unicodesträngar"
+msgstr "-Wnormalized=<none|id|nfc|nfkc>\tVarna för icke normaliserade Unicodesträngar."
#: c-family/c.opt:693
msgid "argument %qs to %<-Wnormalized%> not recognized"
msgstr "argumentet %qs till %<-Wnormalized%> är inte känt"
#: c-family/c.opt:709
-#, fuzzy
-#| msgid "Warn if a C-style cast is used in a program"
msgid "Warn if a C-style cast is used in a program."
-msgstr "Varna för en typkonvertering i C-stil används i ett program"
+msgstr "Varna för en typkonvertering i C-stil används i ett program."
#: c-family/c.opt:713
-#, fuzzy
-#| msgid "Warn for obsolescent usage in a declaration"
msgid "Warn for obsolescent usage in a declaration."
-msgstr "Varna för föråldrad användning i en deklaration"
+msgstr "Varna för föråldrad användning i en deklaration."
#: c-family/c.opt:717
-#, fuzzy
-#| msgid "Warn if an old-style parameter definition is used"
msgid "Warn if an old-style parameter definition is used."
-msgstr "Varna för en gammaldags parameterdefinition används"
+msgstr "Varna för en gammaldags parameterdefinition används."
#: c-family/c.opt:721
-#, fuzzy
-#| msgid "Warn if a simd directive is overridden by the vectorizer cost model"
msgid "Warn if a simd directive is overridden by the vectorizer cost model."
-msgstr "Varna om ett simd-direktiv åsidosätts av vektoriserarens kostnadsmodell"
+msgstr "Varna om ett simd-direktiv åsidosätts av vektoriserarens kostnadsmodell."
#: c-family/c.opt:725
-#, fuzzy
-#| msgid "Warn if a string is longer than the maximum portable length specified by the standard"
msgid "Warn if a string is longer than the maximum portable length specified by the standard."
-msgstr "Varna om en sträng är längre än den maximala portabla längden som anges i standarden"
+msgstr "Varna om en sträng är längre än den maximala portabla längden som anges i standarden."
#: c-family/c.opt:729
-#, fuzzy
-#| msgid "Warn about overloaded virtual function names"
msgid "Warn about overloaded virtual function names."
-msgstr "Varna för överlagrade virtuella funktionsnamn"
+msgstr "Varna för överlagrade virtuella funktionsnamn."
#: c-family/c.opt:733
-#, fuzzy
-#| msgid "Warn about overriding initializers without side effects"
msgid "Warn about overriding initializers without side effects."
-msgstr "Varna för åsidosättande initierare utan sidoeffekter"
+msgstr "Varna för åsidosättande initierare utan sidoeffekter."
#: c-family/c.opt:737
-#, fuzzy
-#| msgid "Warn about overriding initializers without side effects"
msgid "Warn about overriding initializers with side effects."
-msgstr "Varna för åsidosättande initierare utan sidoeffekter"
+msgstr "Varna för åsidosättande initierare utan sidoeffekter."
#: c-family/c.opt:741
-#, fuzzy
-#| msgid "Warn about packed bit-fields whose offset changed in GCC 4.4"
msgid "Warn about packed bit-fields whose offset changed in GCC 4.4."
-msgstr "Varna för packade bitfält vars avstånd ändrats i GCC 4.4"
+msgstr "Varna för packade bitfält vars avstånd ändrats i GCC 4.4."
#: c-family/c.opt:745
-#, fuzzy
-#| msgid "Warn about possibly missing parentheses"
msgid "Warn about possibly missing parentheses."
-msgstr "Varna för eventuellt saknade parenteser"
+msgstr "Varna för eventuellt saknade parenteser."
#: c-family/c.opt:753
-#, fuzzy
-#| msgid "Warn when converting the type of pointers to member functions"
msgid "Warn when converting the type of pointers to member functions."
-msgstr "Varna vid typkonvertering av pekare till medlemsfunktioner"
+msgstr "Varna vid typkonvertering av pekare till medlemsfunktioner."
#: c-family/c.opt:757
-#, fuzzy
-#| msgid "Warn about function pointer arithmetic"
msgid "Warn about function pointer arithmetic."
-msgstr "Varna för aritmetik med funktionspekare"
+msgstr "Varna för aritmetik med funktionspekare."
#: c-family/c.opt:761
-#, fuzzy
-#| msgid "Warn when a pointer differs in signedness in an assignment"
msgid "Warn when a pointer differs in signedness in an assignment."
-msgstr "Varna när en pekare skiljer i teckenhet i en tilldelning"
+msgstr "Varna när en pekare skiljer i teckenhet i en tilldelning."
#: c-family/c.opt:765
-#, fuzzy
-#| msgid "Warn when a pointer is cast to an integer of a different size"
msgid "Warn when a pointer is cast to an integer of a different size."
-msgstr "Varna när en pekare typkonverteras till ett heltal av annan storlek"
+msgstr "Varna när en pekare typkonverteras till ett heltal av annan storlek."
#: c-family/c.opt:769
-#, fuzzy
-#| msgid "Warn about misuses of pragmas"
msgid "Warn about misuses of pragmas."
-msgstr "Varna för missbruk av pragman"
+msgstr "Varna för missbruk av pragman."
#: c-family/c.opt:773
-#, fuzzy
-#| msgid "Warn if a property for an Objective-C object has no assign semantics specified"
msgid "Warn if a property for an Objective-C object has no assign semantics specified."
-msgstr "Varna om en egenskap för ett Objective-C-objekt inte har någon tilldelningssemantik angiven"
+msgstr "Varna om en egenskap för ett Objective-C-objekt inte har någon tilldelningssemantik angiven."
#: c-family/c.opt:777
-#, fuzzy
-#| msgid "Warn if inherited methods are unimplemented"
msgid "Warn if inherited methods are unimplemented."
-msgstr "Varna för ärvda metoder är oimplementerade"
+msgstr "Varna för ärvda metoder är oimplementerade."
#: c-family/c.opt:781
-#, fuzzy
-#| msgid "Warn if a loop with constant number of iterations triggers undefined behavior"
msgid "Warn for placement new expressions with undefined behavior."
-msgstr "Varna om en slinga med konstant antal iterationer orsakar odefinierat beteende"
+msgstr "Varna för placerande new-uttryck med odefinierat beteende."
#: c-family/c.opt:785
-#, fuzzy
-#| msgid "Warn about multiple declarations of the same object"
msgid "Warn about multiple declarations of the same object."
-msgstr "Varna för multipla deklarationer av samma objekt"
+msgstr "Varna för multipla deklarationer av samma objekt."
#: c-family/c.opt:789
-#, fuzzy
-#| msgid "Warn when the compiler reorders code"
msgid "Warn when the compiler reorders code."
-msgstr "Varna när kompilatorn ändrar ordning på kod"
+msgstr "Varna när kompilatorn ändrar ordning på kod."
#: c-family/c.opt:793
-#, fuzzy
-#| msgid "Warn whenever a function's return type defaults to \"int\" (C), or about inconsistent return types (C++)"
msgid "Warn whenever a function's return type defaults to \"int\" (C), or about inconsistent return types (C++)."
-msgstr "Varna när en funktions returtyp fÃ¥r â€int†som skönsvärde (C), eller om inkonsistenta returtyper (C++)"
+msgstr "Varna när en funktions returtyp fÃ¥r â€int†som skönsvärde (C), eller om inkonsistenta returtyper (C++)."
#: c-family/c.opt:797
msgid "Warn on suspicious constructs involving reverse scalar storage order."
msgstr "Varna vid misstänkta konstruktioner med omvänd ordning av skalärlagring inblandad."
#: c-family/c.opt:801
-#, fuzzy
-#| msgid "Warn if a selector has multiple methods"
msgid "Warn if a selector has multiple methods."
-msgstr "Varna för en väljare har multipla metoder"
+msgstr "Varna för en väljare har multipla metoder."
#: c-family/c.opt:805
-#, fuzzy
-#| msgid "Warn about possible violations of sequence point rules"
msgid "Warn about possible violations of sequence point rules."
-msgstr "Varna för möjliga brott mot sekvenspunktregler"
+msgstr "Varna för möjliga brott mot sekvenspunktregler."
#: c-family/c.opt:809
-#, fuzzy
-#| msgid "Warn if a local declaration hides an instance variable"
msgid "Warn if a local declaration hides an instance variable."
-msgstr "Varna om en lokal deklaration döljer en instansvariabel"
+msgstr "Varna om en lokal deklaration döljer en instansvariabel."
#: c-family/c.opt:813 c-family/c.opt:817
msgid "Warn if left shift of a signed value overflows."
msgstr "Varna om vänsterskift av ett värde med tecken spiller över."
#: c-family/c.opt:821
-#, fuzzy
-#| msgid "Warn if shift count is negative"
msgid "Warn if shift count is negative."
-msgstr "Varna om skiftantalet är negativt"
+msgstr "Varna om skiftantalet är negativt."
#: c-family/c.opt:825
-#, fuzzy
-#| msgid "Warn if shift count >= width of type"
msgid "Warn if shift count >= width of type."
-msgstr "Varna om skiftantalet ≥ bredden på typen"
+msgstr "Varna om skiftantalet ≥ bredden på typen."
#: c-family/c.opt:829
-#, fuzzy
-#| msgid "Warn if shift count is negative"
msgid "Warn if left shifting a negative value."
-msgstr "Varna om skiftantalet är negativt"
+msgstr "Varna vid vänsterskift med ett negativt värde."
#: c-family/c.opt:833
-#, fuzzy
-#| msgid "Warn about signed-unsigned comparisons"
msgid "Warn about signed-unsigned comparisons."
-msgstr "Varna för jämförelser mellan signed/unsigned"
+msgstr "Varna för jämförelser mellan signed/unsigned."
#: c-family/c.opt:841
-#, fuzzy
-#| msgid "Warn for implicit type conversions between signed and unsigned integers"
msgid "Warn for implicit type conversions between signed and unsigned integers."
-msgstr "Varna för implicita typkonverteringar mellan heltalsuttryck med och utan tecken"
+msgstr "Varna för implicita typkonverteringar mellan heltalsuttryck med och utan tecken."
#: c-family/c.opt:845
-#, fuzzy
-#| msgid "Warn when overload promotes from unsigned to signed"
msgid "Warn when overload promotes from unsigned to signed."
-msgstr "Varna när överlagring anpassar från teckenlöst till med tecken"
+msgstr "Varna när överlagring anpassar från teckenlöst till med tecken."
#: c-family/c.opt:849
-#, fuzzy
-#| msgid "Warn about uncasted NULL used as sentinel"
msgid "Warn about uncasted NULL used as sentinel."
-msgstr "Varna för ej typkonverterad NULL används som vaktpost"
+msgstr "Varna för ej typkonverterad NULL används som vaktpost."
#: c-family/c.opt:853
-#, fuzzy
-#| msgid "Warn about unprototyped function declarations"
msgid "Warn about unprototyped function declarations."
-msgstr "Varna för funktionsdeklarationer utan prototyp"
+msgstr "Varna för funktionsdeklarationer utan prototyp."
#: c-family/c.opt:865
-#, fuzzy
-#| msgid "Warn if type signatures of candidate methods do not match exactly"
msgid "Warn if type signatures of candidate methods do not match exactly."
-msgstr "Varna för typsignaturer till kandidatmetoder inte stämmer exakt"
+msgstr "Varna för typsignaturer till kandidatmetoder inte stämmer exakt."
#: c-family/c.opt:869
-#, fuzzy
-#| msgid "Warn when __sync_fetch_and_nand and __sync_nand_and_fetch built-in functions are used"
msgid "Warn when __sync_fetch_and_nand and __sync_nand_and_fetch built-in functions are used."
-msgstr "Varna när de inbyggda funktionerna __sync_fetch_and_nand och __sync_nand_and_fetch används"
+msgstr "Varna när de inbyggda funktionerna __sync_fetch_and_nand och __sync_nand_and_fetch används."
#: c-family/c.opt:873
-#, fuzzy
-#| msgid "Deprecated. This switch has no effect"
msgid "Deprecated. This switch has no effect."
-msgstr "Avrådes ifrån. Denna flagga har ingen effekt"
+msgstr "Avrådes ifrån. Denna flagga har ingen effekt."
#: c-family/c.opt:881
-#, fuzzy
-#| msgid "Warn when a logical operator is suspiciously always evaluating to true or false"
msgid "Warn if a comparison always evaluates to true or false."
-msgstr "Varna när en logisk operator misstänkt nog alltid beräknas till sant eller falskt"
+msgstr "Varna om en logisk jämförelse alltid beräknas till sant eller falskt."
#: c-family/c.opt:885
msgid "Warn if a throw expression will always result in a call to terminate()."
msgstr "Varna om ett throw-uttryck alltid kommer resultera i ett anrop av terminate()."
#: c-family/c.opt:889
-#, fuzzy
-#| msgid "Warn about features not present in traditional C"
msgid "Warn about features not present in traditional C."
-msgstr "Varna för funktioner som inte finns i traditionell C"
+msgstr "Varna för funktioner som inte finns i traditionell C."
#: c-family/c.opt:893
-#, fuzzy
-#| msgid "Warn of prototypes causing type conversions different from what would happen in the absence of prototype"
msgid "Warn of prototypes causing type conversions different from what would happen in the absence of prototype."
-msgstr "Varna för prototyper som orsakar andra typkonverteringar än de som skulle skett i frånvaro av prototyp"
+msgstr "Varna för prototyper som orsakar andra typkonverteringar än de som skulle skett i frånvaro av prototyp."
#: c-family/c.opt:897
-#, fuzzy
-#| msgid "Warn if trigraphs are encountered that might affect the meaning of the program"
msgid "Warn if trigraphs are encountered that might affect the meaning of the program."
-msgstr "Varna för trigrafer upptäcks som kan påverka betydelsen av programmet"
+msgstr "Varna för trigrafer upptäcks som kan påverka betydelsen av programmet."
#: c-family/c.opt:901
-#, fuzzy
-#| msgid "Warn about @selector()s without previously declared methods"
msgid "Warn about @selector()s without previously declared methods."
-msgstr "Varna för @selector()er utan tidigare deklarerade metoder"
+msgstr "Varna för @selector()er utan tidigare deklarerade metoder."
#: c-family/c.opt:905
-#, fuzzy
-#| msgid "Warn if an undefined macro is used in an #if directive"
msgid "Warn if an undefined macro is used in an #if directive."
-msgstr "Varna för ett odefinierat makro används i ett #if-direktiv"
+msgstr "Varna för ett odefinierat makro används i ett #if-direktiv."
#: c-family/c.opt:917
-#, fuzzy
-#| msgid "Warn about unrecognized pragmas"
msgid "Warn about unrecognized pragmas."
-msgstr "Varna för okända pragman"
+msgstr "Varna för okända pragman."
#: c-family/c.opt:921
-#, fuzzy
-#| msgid "Warn about unsuffixed float constants"
msgid "Warn about unsuffixed float constants."
-msgstr "Varna för flyttalskonstanter utan suffix"
+msgstr "Varna för flyttalskonstanter utan suffix."
#: c-family/c.opt:929
-#, fuzzy
-#| msgid "Warn when typedefs locally defined in a function are not used"
msgid "Warn when typedefs locally defined in a function are not used."
-msgstr "Varna när typedef:ar lokalt definierade i en funktion inte används"
+msgstr "Varna när typedef:ar lokalt definierade i en funktion inte används."
#: c-family/c.opt:933
-#, fuzzy
-#| msgid "Warn about macros defined in the main file that are not used"
msgid "Warn about macros defined in the main file that are not used."
-msgstr "Varna för makron definierade i huvudfilen som inte används"
+msgstr "Varna för makron definierade i huvudfilen som inte används."
#: c-family/c.opt:937
-#, fuzzy
-#| msgid "Warn if a caller of a function, marked with attribute warn_unused_result, does not use its return value"
msgid "Warn if a caller of a function, marked with attribute warn_unused_result, does not use its return value."
-msgstr "Varna om anroparen av en funktion, deklarerad med attributet warn_unused_result, inte använder dess returvärde"
+msgstr "Varna om anroparen av en funktion, deklarerad med attributet warn_unused_result, inte använder dess returvärde."
#: c-family/c.opt:945
-#, fuzzy
-#| msgid "Warn when a variable is unused"
msgid "Warn when a const variable is unused."
-msgstr "Varna när en variabel är oanvänd"
+msgstr "Varna när en const-variabel är oanvänd."
#: c-family/c.opt:949
-#, fuzzy
-#| msgid "Warn about using variadic macros"
msgid "Warn about using variadic macros."
-msgstr "Varna för användning av variadiska makron"
+msgstr "Varna för användning av variadiska makron."
#: c-family/c.opt:953
-#, fuzzy
-#| msgid "Warn about questionable usage of the macros used to retrieve variable arguments"
msgid "Warn about questionable usage of the macros used to retrieve variable arguments."
-msgstr "Varna för tveksam användning av de makron som används för att hämta variabla argument."
+msgstr "Varna för tveksam användning av de makron som används för att hämta variabla argument.."
#: c-family/c.opt:957
-#, fuzzy
-#| msgid "Warn if a variable length array is used"
msgid "Warn if a variable length array is used."
-msgstr "Varna om en vektor med variabel längd används"
+msgstr "Varna om en vektor med variabel längd används."
#: c-family/c.opt:961
-#, fuzzy
-#| msgid "Warn when a register variable is declared volatile"
msgid "Warn when a register variable is declared volatile."
-msgstr "Varna när en registervariabel är deklarerad volatile"
+msgstr "Varna när en registervariabel är deklarerad volatile."
#: c-family/c.opt:965
msgid "Warn on direct virtual inheritance."
msgstr "Varna vid direkt virtuellt arv."
#: c-family/c.opt:969
-#, fuzzy
-#| msgid "Warn if a virtual base has a non-trivial move assignment operator"
msgid "Warn if a virtual base has a non-trivial move assignment operator."
-msgstr "Varna om en virtuella bas har en icketrivial flyttningstilldelningsoperator"
+msgstr "Varna om en virtuella bas har en icketrivial flyttningstilldelningsoperator."
#: c-family/c.opt:973
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 "I C++ betyder nollskilt att varna för konverteringar som bör undvikas frÃ¥n strängliteraler till â€char *â€. I C, liknande varning, bortsett frÃ¥n att ISO C-standarden naturligtvis inte säger att konverteringen bör undvikas."
#: c-family/c.opt:977
-#, fuzzy
-#| msgid "Warn when a literal '0' is used as null pointer"
msgid "Warn when a literal '0' is used as null pointer."
-msgstr "Varna när en ordagrann â€0†används som en nollpekare"
+msgstr "Varna när en ordagrann â€0†används som en nollpekare."
#: c-family/c.opt:981
-#, fuzzy
-#| msgid "Warn about useless casts"
msgid "Warn about useless casts."
-msgstr "Varna för oanvändbara typkonverteringar"
+msgstr "Varna för oanvändbara typkonverteringar."
#: c-family/c.opt:985
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 "Varna om en klasstyp har en bas eller ett fält vars typ använder den anonyma namnrymden eller beror på en typ utan länkningsklass."
#: c-family/c.opt:989
-#, fuzzy
-#| msgid "A synonym for -std=c89 (for C) or -std=c++98 (for C++)"
msgid "A synonym for -std=c89 (for C) or -std=c++98 (for C++)."
-msgstr "En synonym för -std=c89 (för C) or -std=c++98 (för C++)"
+msgstr "En synonym för -std=c89 (för C) or -std=c++98 (för C++)."
#: c-family/c.opt:997
-#, fuzzy
-#| msgid "The version of the C++ ABI used for -Wabi warnings and link compatibility aliases"
msgid "The version of the C++ ABI used for -Wabi warnings and link compatibility aliases."
-msgstr "Versionen på det C++-ABI som används för -Wabi-varningar och länkkompatibilitetsalias"
+msgstr "Versionen på det C++-ABI som används för -Wabi-varningar och länkkompatibilitetsalias."
#: c-family/c.opt:1001
-#, fuzzy
-#| msgid "Enforce class member access control semantics"
msgid "Enforce class member access control semantics."
-msgstr "Upprätthåll åtkomstsemantik för klassmedlemmar"
+msgstr "Upprätthåll åtkomstsemantik för klassmedlemmar."
#: c-family/c.opt:1005
-#, fuzzy
-#| msgid "-fada-spec-parent=unit Dump Ada specs as child units of given parent"
msgid "-fada-spec-parent=unit Dump Ada specs as child units of given parent."
-msgstr "-fada-spec-parent=unit Skriv ut Ada-specifikationer som barnenheter till den givna föräldern"
+msgstr "-fada-spec-parent=unit Skriv ut Ada-specifikationer som barnenheter till den givna föräldern."
#: c-family/c.opt:1012
-#, fuzzy
-#| msgid "Allow variadic functions without named parameter"
msgid "Allow variadic functions without named parameter."
-msgstr "Tillåt variadiska funktioner utan namngiven parameter"
+msgstr "Tillåt variadiska funktioner utan namngiven parameter."
#: c-family/c.opt:1016 c-family/c.opt:1245 c-family/c.opt:1533
#: c-family/c.opt:1537 c-family/c.opt:1553
-#, fuzzy
-#| msgid "No longer supported"
msgid "No longer supported."
-msgstr "Stödjs inte längre"
+msgstr "Stödjs inte längre."
#: c-family/c.opt:1020
-#, fuzzy
-#| msgid "Recognize the \"asm\" keyword"
msgid "Recognize the \"asm\" keyword."
-msgstr "Acceptera nyckelordet â€asmâ€"
+msgstr "Acceptera nyckelordet â€asmâ€."
#: c-family/c.opt:1028
-#, fuzzy
-#| msgid "Recognize built-in functions"
msgid "Recognize built-in functions."
-msgstr "Acceptera inbyggda funktioner"
+msgstr "Acceptera inbyggda funktioner."
#: c-family/c.opt:1035
msgid "Where shorter, use canonicalized paths to systems headers."
@@ -7604,10 +6851,8 @@ msgid "Add Pointer Bounds Checker instrumentation. fchkp-* flags are used to"
msgstr "Lägg till instrumentering för pekargränskontroller. fchkp-*-flaggor används för att styra instrumenteringen. För närvarande tillgängligt för C, C++ och ObjC."
#: c-family/c.opt:1044
-#, fuzzy
-#| msgid "Generate pointer bounds checks for variables with incomplete type"
msgid "Generate pointer bounds checks for variables with incomplete type."
-msgstr "Generera pekargränskontroller för variabler med ofullständig typ"
+msgstr "Generera pekargränskontroller för variabler med ofullständig typ."
#: c-family/c.opt:1048
msgid "Use zero bounds for all incoming arguments in 'main' function. It helps when"
@@ -7674,22 +6919,16 @@ msgid "Transform instrumented builtin calls into calls to wrappers."
msgstr "Transformera instrumenterade inbyggda anrop till anrop av inkapslingar."
#: c-family/c.opt:1127
-#, fuzzy
-#| msgid "Enable Cilk Plus"
msgid "Enable Cilk Plus."
-msgstr "Aktiver Cilk Plus"
+msgstr "Aktiver Cilk Plus."
#: c-family/c.opt:1131
-#, fuzzy
-#| msgid "Enable support for GNU transactional memory"
msgid "Enable support for C++ concepts."
-msgstr "Aktivera stöd för GNU:s transationsminne"
+msgstr "Aktivera stöd för C++-koncept."
#: c-family/c.opt:1135
-#, fuzzy
-#| msgid "Allow the arguments of the '?' operator to have different types"
msgid "Allow the arguments of the '?' operator to have different types."
-msgstr "TillÃ¥t argument till â€?â€-operatorn att ha olika typer"
+msgstr "TillÃ¥t argument till â€?â€-operatorn att ha olika typer."
#: c-family/c.opt:1142
#, c-format
@@ -7697,188 +6936,132 @@ msgid "no class name specified with %qs"
msgstr "inget klassnamn angivet med %qs"
#: c-family/c.opt:1143
-#, fuzzy
-#| msgid "-fconst-string-class=<name>\tUse class <name> for constant strings"
msgid "-fconst-string-class=<name>\tUse class <name> for constant strings."
-msgstr "-fconst-string-class=<namn>\tAnvänd klassen <namn> för konstanta strängar"
+msgstr "-fconst-string-class=<namn>\tAnvänd klassen <namn> för konstanta strängar."
#: c-family/c.opt:1147
-#, fuzzy
-#| msgid "-fconstexpr-depth=<number>\tSpecify maximum constexpr recursion depth"
msgid "-fconstexpr-depth=<number>\tSpecify maximum constexpr recursion depth."
-msgstr "-fconstexpr-depth=<antal>\tAnge maximalt rekursionsdjup för konstantuttryck"
+msgstr "-fconstexpr-depth=<antal>\tAnge maximalt rekursionsdjup för konstantuttryck."
#: c-family/c.opt:1151
-#, fuzzy
-#| msgid "Emit debug annotations during preprocessing"
msgid "Emit debug annotations during preprocessing."
-msgstr "Mata ut felsökningsannoteringar under preprocessning"
+msgstr "Mata ut felsökningsannoteringar under preprocessning."
#: c-family/c.opt:1155
-#, fuzzy
-#| msgid "-fdeduce-init-list\tenable deduction of std::initializer_list for a template type parameter from a brace-enclosed initializer-list"
msgid "-fdeduce-init-list\tenable deduction of std::initializer_list for a template type parameter from a brace-enclosed initializer-list."
-msgstr "-fdeduce-init-list\taktivera härledning av std::initializer_list för en malltypparameter från en klammeromsluten initierarlista"
+msgstr "-fdeduce-init-list\taktivera härledning av std::initializer_list för en malltypparameter från en klammeromsluten initierarlista."
#: c-family/c.opt:1159
-#, fuzzy
-#| msgid "Factor complex constructors and destructors to favor space over speed"
msgid "Factor complex constructors and destructors to favor space over speed."
-msgstr "Faktorisera komplexa konstruerare och destruerare till förmån för utrymme snarare än hastighet"
+msgstr "Faktorisera komplexa konstruerare och destruerare till förmån för utrymme snarare än hastighet."
#: c-family/c.opt:1167
msgid "Preprocess directives only."
msgstr "Preprocessa endast direktiv."
#: c-family/c.opt:1171
-#, fuzzy
-#| msgid "Permit '$' as an identifier character"
msgid "Permit '$' as an identifier character."
-msgstr "TillÃ¥t â€$†som ett identifierartecken"
+msgstr "TillÃ¥t â€$†som ett identifierartecken."
#: c-family/c.opt:1175
-#, fuzzy
-#| msgid "Write all declarations as Ada code transitively"
msgid "Write all declarations as Ada code transitively."
-msgstr "Skriv alla deklarationer som Adakod transitivt"
+msgstr "Skriv alla deklarationer som Adakod transitivt."
#: c-family/c.opt:1179
-#, fuzzy
-#| msgid "Write all declarations as Ada code for the given file only"
msgid "Write all declarations as Ada code for the given file only."
-msgstr "Skriv alla deklarationer som Adakod endast för den angivna filen"
+msgstr "Skriv alla deklarationer som Adakod endast för den angivna filen."
#: c-family/c.opt:1186
-#, fuzzy
-#| msgid "Generate code to check exception specifications"
msgid "Generate code to check exception specifications."
-msgstr "Generera kod för att kontrollera undantagsspecifikationer"
+msgstr "Generera kod för att kontrollera undantagsspecifikationer."
#: c-family/c.opt:1193
-#, fuzzy
-#| msgid "-fexec-charset=<cset>\tConvert all strings and character constants to character set <cset>"
msgid "-fexec-charset=<cset>\tConvert all strings and character constants to character set <cset>."
-msgstr "-fexec-charset=<tknst>\tKonvertera alla strängar och teckenkonstanter till teckenuppsättningen <tknst>"
+msgstr "-fexec-charset=<tknst>\tKonvertera alla strängar och teckenkonstanter till teckenuppsättningen <tknst>."
#: c-family/c.opt:1197
-#, fuzzy
-#| msgid "Permit universal character names (\\u and \\U) in identifiers"
msgid "Permit universal character names (\\u and \\U) in identifiers."
-msgstr "Tillåt universella teckennamn (\\u och \\U) i identifierare"
+msgstr "Tillåt universella teckennamn (\\u och \\U) i identifierare."
#: c-family/c.opt:1201
-#, fuzzy
-#| msgid "-finput-charset=<cset>\tSpecify the default character set for source files"
msgid "-finput-charset=<cset>\tSpecify the default character set for source files."
-msgstr "-finput-charset=<tknst>\tAnge standardteckenuppsättning för källkodsfiler"
+msgstr "-finput-charset=<tknst>\tAnge standardteckenuppsättning för källkodsfiler."
#: c-family/c.opt:1205
-#, fuzzy
-#| msgid "Support dynamic initialization of thread-local variables in a different translation unit"
msgid "Support dynamic initialization of thread-local variables in a different translation unit."
-msgstr "Stöd dynamisk initiering av trådlokala variabler i en annan översättningsenhet"
+msgstr "Stöd dynamisk initiering av trådlokala variabler i en annan översättningsenhet."
#: c-family/c.opt:1212
-#, fuzzy
-#| msgid "Scope of for-init-statement variables is local to the loop"
msgid "Scope of for-init-statement variables is local to the loop."
-msgstr "Räckvidden av for-init-satsvariabler är lokal till slingan"
+msgstr "Räckvidden av for-init-satsvariabler är lokal till slingan."
#: c-family/c.opt:1216
-#, fuzzy
-#| msgid "Do not assume that standard C libraries and \"main\" exist"
msgid "Do not assume that standard C libraries and \"main\" exist."
-msgstr "Anta inte att standard C-bibliotek och â€main†finns"
+msgstr "Anta inte att standard C-bibliotek och â€main†finns."
#: c-family/c.opt:1220
-#, fuzzy
-#| msgid "Recognize GNU-defined keywords"
msgid "Recognize GNU-defined keywords."
-msgstr "Acceptera GNU-definierade nyckelord"
+msgstr "Acceptera GNU-definierade nyckelord."
#: c-family/c.opt:1224
-#, fuzzy
-#| msgid "Generate code for GNU runtime environment"
msgid "Generate code for GNU runtime environment."
-msgstr "Generera kod för GNU:s körtidsmiljö"
+msgstr "Generera kod för GNU:s körtidsmiljö."
#: c-family/c.opt:1228
-#, fuzzy
-#| msgid "Use traditional GNU semantics for inline functions"
msgid "Use traditional GNU semantics for inline functions."
-msgstr "Använd traditionell C-semantik för inline-funktioner"
+msgstr "Använd traditionell C-semantik för inline-funktioner."
#: c-family/c.opt:1234
msgid "-fhandle-exceptions has been renamed -fexceptions (and is now on by default)"
msgstr "-fhandle-exceptions har bytt namn till -fexceptions (och är nu normalt påslagen)"
#: c-family/c.opt:1241
-#, fuzzy
-#| msgid "Assume normal C execution environment"
msgid "Assume normal C execution environment."
-msgstr "Anta normal C-körmiljö"
+msgstr "Anta normal C-körmiljö."
#: c-family/c.opt:1249
-#, fuzzy
-#| msgid "Export functions even if they can be inlined"
msgid "Export functions even if they can be inlined."
-msgstr "Exportera funktioner även om de kan inline:as"
+msgstr "Exportera funktioner även om de kan inline:as."
#: c-family/c.opt:1253
-#, fuzzy
-#| msgid "Emit implicit instantiations of inline templates"
msgid "Emit implicit instantiations of inline templates."
-msgstr "Skapa implicita instansieringar av inline:ade mallar"
+msgstr "Skapa implicita instansieringar av inline:ade mallar."
#: c-family/c.opt:1257
-#, fuzzy
-#| msgid "Emit implicit instantiations of templates"
msgid "Emit implicit instantiations of templates."
-msgstr "Skapa implicita instansieringar av mallar"
+msgstr "Skapa implicita instansieringar av mallar."
#: c-family/c.opt:1261
-#, fuzzy
-#| msgid "Inject friend functions into enclosing namespace"
msgid "Inject friend functions into enclosing namespace."
-msgstr "Skjut in friend-funktioner i omgivande namnrymd"
+msgstr "Skjut in friend-funktioner i omgivande namnrymd."
#: c-family/c.opt:1265
-#, fuzzy
-#| msgid "Don't emit dllexported inline functions unless needed"
msgid "Don't emit dllexported inline functions unless needed."
-msgstr "Avge inte dll-exporterade inline-funktioner om det inte behövs"
+msgstr "Avge inte dll-exporterade inline-funktioner om det inte behövs."
#: c-family/c.opt:1272
msgid "Allow implicit conversions between vectors with differing numbers of subparts and/or differing element types."
msgstr "Tillåt implicit konvertering mellan vektorer med olika antal underdelar och/eller olika elementtyper."
#: c-family/c.opt:1276
-#, fuzzy
-#| msgid "Don't warn about uses of Microsoft extensions"
msgid "Don't warn about uses of Microsoft extensions."
-msgstr "Varna inte om användning av Microsoftutökningar"
+msgstr "Varna inte om användning av Microsoftutökningar."
#: c-family/c.opt:1295
-#, fuzzy
-#| msgid "Generate code for NeXT (Apple Mac OS X) runtime environment"
msgid "Generate code for NeXT (Apple Mac OS X) runtime environment."
-msgstr "Generera kod för körtidsmiljön NeXT (Apple Mac OS X)"
+msgstr "Generera kod för körtidsmiljön NeXT (Apple Mac OS X)."
#: c-family/c.opt:1299
-#, fuzzy
-#| msgid "Assume that receivers of Objective-C messages may be nil"
msgid "Assume that receivers of Objective-C messages may be nil."
-msgstr "Anta att mottagare av Objective-C-meddelanden kan var nil"
+msgstr "Anta att mottagare av Objective-C-meddelanden kan var nil."
#: c-family/c.opt:1303
msgid "Allow access to instance variables as if they were local declarations within instance method implementations."
msgstr "Tillåt åtkomst till instansvariabler som om de vore lokala deklarationer i instansmetodimplementationer."
#: c-family/c.opt:1307
-#, fuzzy
-#| msgid "-fvisibility=[private|protected|public|package]\tSet the default symbol visibility"
msgid "-fvisibility=[private|protected|public|package]\tSet the default symbol visibility."
-msgstr "-fvisibility=[private|protected|public|package]\tAnge standardvärde för symbolsynlighet"
+msgstr "-fvisibility=[private|protected|public|package]\tAnge standardvärde för symbolsynlighet."
#: c-family/c.opt:1310
#, c-format
@@ -7886,658 +7069,449 @@ msgid "unrecognized ivar visibility value %qs"
msgstr "okänt ivar-synlighetsvärde %qs"
#: c-family/c.opt:1332
-#, fuzzy
-#| msgid "Treat a throw() exception specification as noexcept to improve code size"
msgid "Treat a throw() exception specification as noexcept to improve code size."
-msgstr "Behandla en undantagsspecifikation throw() som noexcept för att förbättra kodstorleken"
+msgstr "Behandla en undantagsspecifikation throw() som noexcept för att förbättra kodstorleken."
#: c-family/c.opt:1336
msgid "Specify which ABI to use for Objective-C family code and meta-data generation."
msgstr "Ange vilket ABI som skall användas för kodfamiljen Objective-C och generering av metadata."
#: c-family/c.opt:1342
-#, fuzzy
-#| msgid "Generate special Objective-C methods to initialize/destroy non-POD C++ ivars, if needed"
msgid "Generate special Objective-C methods to initialize/destroy non-POD C++ ivars, if needed."
-msgstr "Generera speciella Objective-C-metoder för att initiera/destruera icke-POD-C++-ivariabler, om det behövs"
+msgstr "Generera speciella Objective-C-metoder för att initiera/destruera icke-POD-C++-ivariabler, om det behövs."
#: c-family/c.opt:1346
-#, fuzzy
-#| msgid "Allow fast jumps to the message dispatcher"
msgid "Allow fast jumps to the message dispatcher."
-msgstr "Tillåt snabba hopp till meddelandehanteraren"
+msgstr "Tillåt snabba hopp till meddelandehanteraren."
#: c-family/c.opt:1352
-#, fuzzy
-#| msgid "Enable Objective-C exception and synchronization syntax"
msgid "Enable Objective-C exception and synchronization syntax."
-msgstr "Aktivera Objective-C-undantags- och synkroniseringssyntax"
+msgstr "Aktivera Objective-C-undantags- och synkroniseringssyntax."
#: c-family/c.opt:1356
-#, fuzzy
-#| msgid "Enable garbage collection (GC) in Objective-C/Objective-C++ programs"
msgid "Enable garbage collection (GC) in Objective-C/Objective-C++ programs."
-msgstr "Aktivera skräpsamling (GC) i Objective-C-/Objective-C++-program"
+msgstr "Aktivera skräpsamling (GC) i Objective-C-/Objective-C++-program."
#: c-family/c.opt:1360
msgid "Enable inline checks for nil receivers with the NeXT runtime and ABI version 2."
msgstr "Aktivera inline-kontroller av nil-mottagare med NeXT-körtidskod och ABI-version 2."
#: c-family/c.opt:1365
-#, fuzzy
-#| msgid "Enable Objective-C setjmp exception handling runtime"
msgid "Enable Objective-C setjmp exception handling runtime."
-msgstr "Aktivera Objective-C:s setjmp-undantagshantering i körtidsmiljön"
+msgstr "Aktivera Objective-C:s setjmp-undantagshantering i körtidsmiljön."
#: c-family/c.opt:1369
-#, fuzzy
-#| msgid "Conform to the Objective-C 1.0 language as implemented in GCC 4.0"
msgid "Conform to the Objective-C 1.0 language as implemented in GCC 4.0."
-msgstr "Följ språket Objective-C 1.0 så som det implementerades i GCC 4.0"
+msgstr "Följ språket Objective-C 1.0 så som det implementerades i GCC 4.0."
#: c-family/c.opt:1373
-#, fuzzy
-#| msgid "Enable OpenACC"
msgid "Enable OpenACC."
-msgstr "Aktivera OpenACC"
+msgstr "Aktivera OpenACC."
#: c-family/c.opt:1377
-#, fuzzy
-#| msgid "Enable OpenMP (implies -frecursive in Fortran)"
msgid "Enable OpenMP (implies -frecursive in Fortran)."
-msgstr "Aktivera OpenMP (implicerar -frecursive i Fortran)"
+msgstr "Aktivera OpenMP (implicerar -frecursive i Fortran)."
#: c-family/c.opt:1381
-#, fuzzy
-#| msgid "Enable OpenMP's SIMD directives"
msgid "Enable OpenMP's SIMD directives."
-msgstr "Aktivera OpenMP:s SIMD-direktiv"
+msgstr "Aktivera OpenMP:s SIMD-direktiv."
#: c-family/c.opt:1385
-#, fuzzy
-#| msgid "Recognize C++ keywords like \"compl\" and \"xor\""
msgid "Recognize C++ keywords like \"compl\" and \"xor\"."
-msgstr "Acceptera C++-nyckelord som â€compl†och â€xorâ€"
+msgstr "Acceptera C++-nyckelord som â€compl†och â€xorâ€."
#: c-family/c.opt:1396
-#, fuzzy
-#| msgid "Look for and use PCH files even when preprocessing"
msgid "Look for and use PCH files even when preprocessing."
-msgstr "Sök efter och använd PCH-filer även vid preprocessning"
+msgstr "Sök efter och använd PCH-filer även vid preprocessning."
#: c-family/c.opt:1400
-#, fuzzy
-#| msgid "Downgrade conformance errors to warnings"
msgid "Downgrade conformance errors to warnings."
-msgstr "Nedgradera följsamhetsfel till varningar"
+msgstr "Nedgradera följsamhetsfel till varningar."
#: c-family/c.opt:1404
-#, fuzzy
-#| msgid "Enable Plan 9 language extensions"
msgid "Enable Plan 9 language extensions."
-msgstr "Aktivera språkutvidgningar från Plan 9"
+msgstr "Aktivera språkutvidgningar från Plan 9."
#: c-family/c.opt:1408
-#, fuzzy
-#| msgid "Treat the input file as already preprocessed"
msgid "Treat the input file as already preprocessed."
-msgstr "Betrakta indatafilen som redan preprocessad"
+msgstr "Betrakta indatafilen som redan preprocessad."
#: c-family/c.opt:1416
-#, fuzzy
-#| msgid "-ftrack-macro-expansion=<0|1|2> Track locations of tokens coming from macro expansion and display them in error messages"
msgid "-ftrack-macro-expansion=<0|1|2> Track locations of tokens coming from macro expansion and display them in error messages."
-msgstr "-ftrack-macro-expansion=<0|1|2> Spåra platser för symboler som kommer från makroexpansion och visa dem i felmeddelanden"
+msgstr "-ftrack-macro-expansion=<0|1|2> Spåra platser för symboler som kommer från makroexpansion och visa dem i felmeddelanden."
#: c-family/c.opt:1420
-#, fuzzy
-#| msgid "-fno-pretty-templates Do not pretty-print template specializations as the template signature followed by the arguments"
msgid "-fno-pretty-templates Do not pretty-print template specializations as the template signature followed by the arguments."
-msgstr "-fno-pretty-templates Finskriv inte mallspecialiceringar som mallsignaturer följda av argumenten"
+msgstr "-fno-pretty-templates Finskriv inte mallspecialiceringar som mallsignaturer följda av argumenten."
#: c-family/c.opt:1424
-#, fuzzy
-#| msgid "Used in Fix-and-Continue mode to indicate that object files may be swapped in at runtime"
msgid "Used in Fix-and-Continue mode to indicate that object files may be swapped in at runtime."
-msgstr "Används i Fix-and-Continue-läge för att objektfiler kan bytas ut vid körtillfället"
+msgstr "Används i Fix-and-Continue-läge för att objektfiler kan bytas ut vid körtillfället."
#: c-family/c.opt:1428
-#, fuzzy
-#| msgid "Enable automatic template instantiation"
msgid "Enable automatic template instantiation."
-msgstr "Slå på automatisk mallinstansiering"
+msgstr "Slå på automatisk mallinstansiering."
#: c-family/c.opt:1432
-#, fuzzy
-#| msgid "Generate run time type descriptor information"
msgid "Generate run time type descriptor information."
-msgstr "Generera typbeskrivarinformation för körtid"
+msgstr "Generera typbeskrivarinformation för körtid."
#: c-family/c.opt:1436
-#, fuzzy
-#| msgid "Use the same size for double as for float"
msgid "Use the same size for double as for float."
-msgstr "Använd samma storlek för double som för float"
+msgstr "Använd samma storlek för double som för float."
#: c-family/c.opt:1440 ada/gcc-interface/lang.opt:77
-#, fuzzy
-#| msgid "Use the narrowest integer type possible for enumeration types"
msgid "Use the narrowest integer type possible for enumeration types."
-msgstr "Använd den smalaste möjliga heltalstypen för uppräkningstyper"
+msgstr "Använd den smalaste möjliga heltalstypen för uppräkningstyper."
#: c-family/c.opt:1444
-#, fuzzy
-#| msgid "Force the underlying type for \"wchar_t\" to be \"unsigned short\""
msgid "Force the underlying type for \"wchar_t\" to be \"unsigned short\"."
-msgstr "Tvinga den underliggande typen för â€wchar_t†att vara â€unsigned shortâ€"
+msgstr "Tvinga den underliggande typen för â€wchar_t†att vara â€unsigned shortâ€."
#: c-family/c.opt:1448
-#, fuzzy
-#| msgid "When \"signed\" or \"unsigned\" is not given make the bitfield signed"
msgid "When \"signed\" or \"unsigned\" is not given make the bitfield signed."
-msgstr "När â€signed†eller â€unsigned†inte anges lÃ¥t bitfältet ha tecken"
+msgstr "När â€signed†eller â€unsigned†inte anges lÃ¥t bitfältet ha tecken."
#: c-family/c.opt:1452 ada/gcc-interface/lang.opt:81
-#, fuzzy
-#| msgid "Make \"char\" signed by default"
msgid "Make \"char\" signed by default."
-msgstr "LÃ¥t â€char†ha tecken som standard"
+msgstr "LÃ¥t â€char†ha tecken som standard."
#: c-family/c.opt:1456
-#, fuzzy
-#| msgid "Enable C++14 sized deallocation support"
msgid "Enable C++14 sized deallocation support."
-msgstr "Slå på stöd för C++14 storleksbestämd deallokering"
+msgstr "Slå på stöd för C++14 storleksbestämd deallokering."
#: c-family/c.opt:1463
msgid "-fsso-struct=[big-endian|little-endian]\tSet the default scalar storage order."
msgstr "-fsso-struct=[big-endian|little-endian]\tSätt standardordning för skalärlagring."
#: c-family/c.opt:1466
-#, fuzzy, c-format
-#| msgid "unrecognized ivar visibility value %qs"
+#, c-format
msgid "unrecognized scalar storage order value %qs"
-msgstr "okänt ivar-synlighetsvärde %qs"
+msgstr "okänt värde för skalär lagringsordning %qs"
#: c-family/c.opt:1476
-#, fuzzy
-#| msgid "Display statistics accumulated during compilation"
msgid "Display statistics accumulated during compilation."
-msgstr "Visa statistik som samlats under kompilering"
+msgstr "Visa statistik som samlats under kompilering."
#: c-family/c.opt:1480
-#, fuzzy
-#| msgid "Assume that values of enumeration type are always within the minimum range of that type"
msgid "Assume that values of enumeration type are always within the minimum range of that type."
-msgstr "Antag att värdena i uppräkningstyper alltid finns inom det minsta intervallet av den typen"
+msgstr "Antag att värdena i uppräkningstyper alltid finns inom det minsta intervallet av den typen."
#: c-family/c.opt:1487
-#, fuzzy
-#| msgid "-ftabstop=<number>\tDistance between tab stops for column reporting"
msgid "-ftabstop=<number>\tDistance between tab stops for column reporting."
-msgstr "-ftabstop=<antal>\tAvstånd mellan tabulatorstopp för kolumnvis rapportering"
+msgstr "-ftabstop=<antal>\tAvstånd mellan tabulatorstopp för kolumnvis rapportering."
#: c-family/c.opt:1491
-#, fuzzy
-#| msgid "Set the maximum number of template instantiation notes for a single warning or error"
msgid "Set the maximum number of template instantiation notes for a single warning or error."
-msgstr "Sätt det maximala antalet mallinstansieringsnoter för en enskild varning eller fel"
+msgstr "Sätt det maximala antalet mallinstansieringsnoter för en enskild varning eller fel."
#: c-family/c.opt:1498
-#, fuzzy
-#| msgid "-ftemplate-depth=<number>\tSpecify maximum template instantiation depth"
msgid "-ftemplate-depth=<number>\tSpecify maximum template instantiation depth."
-msgstr "-ftemplate-depth=<antal>\tAnge maximalt instansieringsdjup för mallar"
+msgstr "-ftemplate-depth=<antal>\tAnge maximalt instansieringsdjup för mallar."
#: c-family/c.opt:1505
-#, fuzzy
-#| msgid "-fno-threadsafe-statics\tDo not generate thread-safe code for initializing local statics"
msgid "-fno-threadsafe-statics\tDo not generate thread-safe code for initializing local statics."
-msgstr "-fno-threadsafe-statics\tGenerera inte trådsäker kod för initiering a lokala statiska variabler"
+msgstr "-fno-threadsafe-statics\tGenerera inte trådsäker kod för initiering a lokala statiska variabler."
#: c-family/c.opt:1509
-#, fuzzy
-#| msgid "When \"signed\" or \"unsigned\" is not given make the bitfield unsigned"
msgid "When \"signed\" or \"unsigned\" is not given make the bitfield unsigned."
-msgstr "När â€signed†eller â€unsigned†inte anges görs bitfälten teckenlösa"
+msgstr "När â€signed†eller â€unsigned†inte anges görs bitfälten teckenlösa."
#: c-family/c.opt:1513
-#, fuzzy
-#| msgid "Make \"char\" unsigned by default"
msgid "Make \"char\" unsigned by default."
-msgstr "Gör â€char†teckenlöst som standard"
+msgstr "Gör â€char†teckenlöst som standard."
#: c-family/c.opt:1517
-#, fuzzy
-#| msgid "Use __cxa_atexit to register destructors"
msgid "Use __cxa_atexit to register destructors."
-msgstr "Använd __cxa_atexit till registerdestruerare"
+msgstr "Använd __cxa_atexit till registerdestruerare."
#: c-family/c.opt:1521
-#, fuzzy
-#| msgid "Use __cxa_get_exception_ptr in exception handling"
msgid "Use __cxa_get_exception_ptr in exception handling."
-msgstr "Använd __cxa_get_exception_ptr i undantagshantering"
+msgstr "Använd __cxa_get_exception_ptr i undantagshantering."
#: c-family/c.opt:1525
-#, fuzzy
-#| msgid "Marks all inlined functions and methods as having hidden visibility"
msgid "Marks all inlined functions and methods as having hidden visibility."
-msgstr "Markerar alla inline:ade funktioner och metoder att ha dold synlighet"
+msgstr "Markerar alla inline:ade funktioner och metoder att ha dold synlighet."
#: c-family/c.opt:1529
-#, fuzzy
-#| msgid "Changes visibility to match Microsoft Visual Studio by default"
msgid "Changes visibility to match Microsoft Visual Studio by default."
-msgstr "Ändrar synlighet till att vara som Microsoft Visual Studio som standard"
+msgstr "Ändrar synlighet till att vara som Microsoft Visual Studio som standard."
#: c-family/c.opt:1541
-#, fuzzy
-#| msgid "Emit common-like symbols as weak symbols"
msgid "Emit common-like symbols as weak symbols."
-msgstr "Mata ut common-liknande symboler som svaga symboler"
+msgstr "Mata ut common-liknande symboler som svaga symboler."
#: c-family/c.opt:1545
-#, fuzzy
-#| msgid "-fwide-exec-charset=<cset>\tConvert all wide strings and character constants to character set <cset>"
msgid "-fwide-exec-charset=<cset>\tConvert all wide strings and character constants to character set <cset>."
-msgstr "-fwide-exec-charset=<tknst>\tKonvertera alla breda strängar och teckenkonstanter till teckenuppsättningen <tknst>"
+msgstr "-fwide-exec-charset=<tknst>\tKonvertera alla breda strängar och teckenkonstanter till teckenuppsättningen <tknst>."
#: c-family/c.opt:1549
-#, fuzzy
-#| msgid "Generate a #line directive pointing at the current working directory"
msgid "Generate a #line directive pointing at the current working directory."
-msgstr "Generera ett #line-direktiv som pekar på aktuell katalog"
+msgstr "Generera ett #line-direktiv som pekar på aktuell katalog."
#: c-family/c.opt:1557
-#, fuzzy
-#| msgid "Generate lazy class lookup (via objc_getClass()) for use in Zero-Link mode"
msgid "Generate lazy class lookup (via objc_getClass()) for use in Zero-Link mode."
-msgstr "Generera lata klassuppslagningar (via objc_getClass()) att användas i läget Zero-Link"
+msgstr "Generera lata klassuppslagningar (via objc_getClass()) att användas i läget Zero-Link."
#: c-family/c.opt:1561
-#, fuzzy
-#| msgid "Dump declarations to a .decl file"
msgid "Dump declarations to a .decl file."
-msgstr "Skicka deklarationer till en .decl-fil"
+msgstr "Skicka deklarationer till en .decl-fil."
#: c-family/c.opt:1565
-#, fuzzy
-#| msgid "-femit-struct-debug-baseonly\tAggressive reduced debug info for structs"
msgid "-femit-struct-debug-baseonly\tAggressive reduced debug info for structs."
-msgstr "-femit-struct-debug-baseonly\tAggressivt reducerad felsökningsinformation för poster"
+msgstr "-femit-struct-debug-baseonly\tAggressivt reducerad felsökningsinformation för poster."
#: c-family/c.opt:1569
-#, fuzzy
-#| msgid "-femit-struct-debug-reduced\tConservative reduced debug info for structs"
msgid "-femit-struct-debug-reduced\tConservative reduced debug info for structs."
-msgstr "-femit-struct-debug-reduced\tKonservativt reducerad felsökningsinformation för poster"
+msgstr "-femit-struct-debug-reduced\tKonservativt reducerad felsökningsinformation för poster."
#: c-family/c.opt:1573
-#, fuzzy
-#| msgid "-femit-struct-debug-detailed=<spec-list>\tDetailed reduced debug info for structs"
msgid "-femit-struct-debug-detailed=<spec-list>\tDetailed reduced debug info for structs."
-msgstr "-femit-struct-debug-detailed=<spec-lista>\tDetaljreducerad felsökningsinformation för poster"
+msgstr "-femit-struct-debug-detailed=<spec-lista>\tDetaljreducerad felsökningsinformation för poster."
#: c-family/c.opt:1577
msgid "Interpret imaginary, fixed-point, or other gnu number suffix as the corresponding"
msgstr "Tolka imaginära, flyttals-, eller andra gnu-suffix på tal som motsvarande talkonstant snarare än en användardefinierad talkonstant"
#: c-family/c.opt:1582
-#, fuzzy
-#| msgid "-idirafter <dir>\tAdd <dir> to the end of the system include path"
msgid "-idirafter <dir>\tAdd <dir> to the end of the system include path."
-msgstr "-idirafter <kat>\tLägg till <kat> till slutet av sökvägen för systeminkluderingar"
+msgstr "-idirafter <kat>\tLägg till <kat> till slutet av sökvägen för systeminkluderingar."
#: c-family/c.opt:1586
-#, fuzzy
-#| msgid "-imacros <file>\tAccept definition of macros in <file>"
msgid "-imacros <file>\tAccept definition of macros in <file>."
-msgstr "-imacros <fil>\tTag med definitioner av makron i <fil>"
+msgstr "-imacros <fil>\tTag med definitioner av makron i <fil>."
#: c-family/c.opt:1590
-#, fuzzy
-#| msgid "-imultilib <dir>\tSet <dir> to be the multilib include subdirectory"
msgid "-imultilib <dir>\tSet <dir> to be the multilib include subdirectory."
-msgstr "-imultilib <kat>\tSätt <kat> att vara inkluderingsunderbiblioteket för multibibliotek"
+msgstr "-imultilib <kat>\tSätt <kat> att vara inkluderingsunderbiblioteket för multibibliotek."
#: c-family/c.opt:1594
-#, fuzzy
-#| msgid "-include <file>\tInclude the contents of <file> before other files"
msgid "-include <file>\tInclude the contents of <file> before other files."
-msgstr "-include <fil>\tInkludera innehållet i <fil> före andra filer"
+msgstr "-include <fil>\tInkludera innehållet i <fil> före andra filer."
#: c-family/c.opt:1598
-#, fuzzy
-#| msgid "-iprefix <path>\tSpecify <path> as a prefix for next two options"
msgid "-iprefix <path>\tSpecify <path> as a prefix for next two options."
-msgstr "-iprefix <skvg>\tAnge <skvg> som ett prefix för de följande två flaggorna"
+msgstr "-iprefix <skvg>\tAnge <skvg> som ett prefix för de följande två flaggorna."
#: c-family/c.opt:1602
-#, fuzzy
-#| msgid "-isysroot <dir>\tSet <dir> to be the system root directory"
msgid "-isysroot <dir>\tSet <dir> to be the system root directory."
-msgstr "-isysroot <kat>\tSätt <kat> som rotkatalog för systemet"
+msgstr "-isysroot <kat>\tSätt <kat> som rotkatalog för systemet."
#: c-family/c.opt:1606
-#, fuzzy
-#| msgid "-isystem <dir>\tAdd <dir> to the start of the system include path"
msgid "-isystem <dir>\tAdd <dir> to the start of the system include path."
-msgstr "-isystem <kat>\tLägg till <kat> till början av sökvägen för systeminkluderingar"
+msgstr "-isystem <kat>\tLägg till <kat> till början av sökvägen för systeminkluderingar."
#: c-family/c.opt:1610
-#, fuzzy
-#| msgid "-iquote <dir>\tAdd <dir> to the end of the quote include path"
msgid "-iquote <dir>\tAdd <dir> to the end of the quote include path."
-msgstr "-iquote <kat>\tLägg till <kat> till slutet av sökvägen för citerade inkluderingar"
+msgstr "-iquote <kat>\tLägg till <kat> till slutet av sökvägen för citerade inkluderingar."
#: c-family/c.opt:1614
-#, fuzzy
-#| msgid "-iwithprefix <dir>\tAdd <dir> to the end of the system include path"
msgid "-iwithprefix <dir>\tAdd <dir> to the end of the system include path."
-msgstr "-iwithprefix <kat>\tLägg till <kat> till slutet av sökvägen för systeminkluderingar"
+msgstr "-iwithprefix <kat>\tLägg till <kat> till slutet av sökvägen för systeminkluderingar."
#: c-family/c.opt:1618
-#, fuzzy
-#| msgid "-iwithprefixbefore <dir>\tAdd <dir> to the end of the main include path"
msgid "-iwithprefixbefore <dir>\tAdd <dir> to the end of the main include path."
-msgstr "-iwithprefixbefore <kat>\tLägg till <kat> till slutet av huvudsökvägen"
+msgstr "-iwithprefixbefore <kat>\tLägg till <kat> till slutet av huvudsökvägen."
#: c-family/c.opt:1628
-#, fuzzy
-#| msgid "Do not search standard system include directories (those specified with -isystem will still be used)"
msgid "Do not search standard system include directories (those specified with -isystem will still be used)."
-msgstr "Sök inte standardkataloger för inkluderingar (de som anges med -isystem kommer fortfarande att användas)"
+msgstr "Sök inte standardkataloger för inkluderingar (de som anges med -isystem kommer fortfarande att användas)."
#: c-family/c.opt:1632
-#, fuzzy
-#| msgid "Do not search standard system include directories for C++"
msgid "Do not search standard system include directories for C++."
-msgstr "Sök inte i standardkataloger för systeminkluderingar för C++"
+msgstr "Sök inte i standardkataloger för systeminkluderingar för C++."
#: c-family/c.opt:1644
-#, fuzzy
-#| msgid "Generate C header of platform-specific features"
msgid "Generate C header of platform-specific features."
-msgstr "Generera C-huvuden för plattformsspecifika funktioner"
+msgstr "Generera C-huvuden för plattformsspecifika funktioner."
#: c-family/c.opt:1648
-#, fuzzy
-#| msgid "Remap file names when including files"
msgid "Remap file names when including files."
-msgstr "Översätt filnamn när filer inkluderas"
+msgstr "Översätt filnamn när filer inkluderas."
#: c-family/c.opt:1652 c-family/c.opt:1656
-#, fuzzy
-#| msgid "Conform to the ISO 1998 C++ standard revised by the 2003 technical corrigendum"
msgid "Conform to the ISO 1998 C++ standard revised by the 2003 technical corrigendum."
-msgstr "Följ standarden ISO 1998 C++ reviderad av 2003 års tekniska rättelser"
+msgstr "Följ standarden ISO 1998 C++ reviderad av 2003 års tekniska rättelser."
#: c-family/c.opt:1660
-#, fuzzy
-#| msgid "Conform to the ISO 2011 C++ standard"
msgid "Conform to the ISO 2011 C++ standard."
-msgstr "Följ standarden ISO 2011 C++"
+msgstr "Följ standarden ISO 2011 C++."
#: c-family/c.opt:1664
-#, fuzzy
-#| msgid "Deprecated in favor of -std=c++11"
msgid "Deprecated in favor of -std=c++11."
-msgstr "Undanbedes till förmån för -std=c++11"
+msgstr "Undanbedes till förmån för -std=c++11."
#: c-family/c.opt:1668
-#, fuzzy
-#| msgid "Deprecated in favor of -std=c++14"
msgid "Deprecated in favor of -std=c++14."
-msgstr "Undanbedes till förmån för -std=c++14"
+msgstr "Undanbedes till förmån för -std=c++14."
#: c-family/c.opt:1672
-#, fuzzy
-#| msgid "Conform to the ISO 2011 C++ standard"
msgid "Conform to the ISO 2014 C++ standard."
-msgstr "Följ standarden ISO 2011 C++"
+msgstr "Följ standarden ISO 2014 C++."
#: c-family/c.opt:1676
-#, fuzzy
-#| msgid "Conform to the ISO 2017(?) C++ draft standard (experimental and incomplete support)"
msgid "Conform to the ISO 2017(?) C++ draft standard (experimental and incomplete support)."
-msgstr "Följ standardutkastet ISO 2017(?) C++ (experimentellt och ofullständigt stöd)"
+msgstr "Följ standardutkastet ISO 2017(?) C++ (experimentellt och ofullständigt stöd)."
#: c-family/c.opt:1683 c-family/c.opt:1780
-#, fuzzy
-#| msgid "Conform to the ISO 2011 C++ standard"
msgid "Conform to the ISO 2011 C standard."
-msgstr "Följ standarden ISO 2011 C++"
+msgstr "Följ standarden ISO 2011 C."
#: c-family/c.opt:1687
-#, fuzzy
-#| msgid "Deprecated in favor of -std=c11"
msgid "Deprecated in favor of -std=c11."
-msgstr "Undanbedes till förmån för -std=c11"
+msgstr "Undanbedes till förmån för -std=c11."
#: c-family/c.opt:1691 c-family/c.opt:1695 c-family/c.opt:1764
-#, fuzzy
-#| msgid "Conform to the ISO 1990 C standard"
msgid "Conform to the ISO 1990 C standard."
-msgstr "Följ standarden ISO 1990 C"
+msgstr "Följ standarden ISO 1990 C."
#: c-family/c.opt:1699 c-family/c.opt:1772
-#, fuzzy
-#| msgid "Conform to the ISO 1999 C standard"
msgid "Conform to the ISO 1999 C standard."
-msgstr "Följ standarden ISO 1999 C"
+msgstr "Följ standarden ISO 1999 C."
#: c-family/c.opt:1703
-#, fuzzy
-#| msgid "Deprecated in favor of -std=c99"
msgid "Deprecated in favor of -std=c99."
-msgstr "Undanbedes till förmån för -std=c99"
+msgstr "Undanbedes till förmån för -std=c99."
#: c-family/c.opt:1707 c-family/c.opt:1712
msgid "Conform to the ISO 1998 C++ standard revised by the 2003 technical"
msgstr "Följ standarden ISO 1998 C++ reviderad av 2003 års tekniska rättelser"
#: c-family/c.opt:1717
-#, fuzzy
-#| msgid "Conform to the ISO 1990 C standard with GNU extensions"
msgid "Conform to the ISO 2011 C++ standard with GNU extensions."
-msgstr "Följ standarden ISO 1990 C med GNU-utökningar"
+msgstr "Följ standarden ISO 2011 C med GNU-utökningar."
#: c-family/c.opt:1721
-#, fuzzy
-#| msgid "Deprecated in favor of -std=gnu++11"
msgid "Deprecated in favor of -std=gnu++11."
-msgstr "Undanbedes till förmån för -std=gnu++11"
+msgstr "Undanbedes till förmån för -std=gnu++11."
#: c-family/c.opt:1725
-#, fuzzy
-#| msgid "Deprecated in favor of -std=gnu++11"
msgid "Deprecated in favor of -std=gnu++14."
-msgstr "Undanbedes till förmån för -std=gnu++11"
+msgstr "Undanbedes till förmån för -std=gnu++14."
#: c-family/c.opt:1729
-#, fuzzy
-#| msgid "Conform to the ISO 1990 C standard with GNU extensions"
msgid "Conform to the ISO 2014 C++ standard with GNU extensions."
-msgstr "Följ standarden ISO 1990 C med GNU-utökningar"
+msgstr "Följ standarden ISO 2014 C++ med GNU-utökningar"
#: c-family/c.opt:1733
-#, fuzzy
-#| msgid "Conform to the ISO 201z(7?) C++ draft standard with GNU extensions (experimental and incomplete support)"
msgid "Conform to the ISO 201z(7?) C++ draft standard with GNU extensions (experimental and incomplete support)."
-msgstr "Följ standardutkastet ISO 201z(7?) C++ med GNU-utökningar (experimentellt och ofullständigt stöd)"
+msgstr "Följ standardutkastet ISO 201z(7?) C++ med GNU-utökningar (experimentellt och ofullständigt stöd)."
#: c-family/c.opt:1740
-#, fuzzy
-#| msgid "Conform to the ISO 1990 C standard with GNU extensions"
msgid "Conform to the ISO 2011 C standard with GNU extensions."
-msgstr "Följ standarden ISO 1990 C med GNU-utökningar"
+msgstr "Följ standarden ISO 2011 C med GNU-utökningar"
#: c-family/c.opt:1744
-#, fuzzy
-#| msgid "Deprecated in favor of -std=gnu11"
msgid "Deprecated in favor of -std=gnu11."
-msgstr "Undanbedes till förmån för -std=gnu11"
+msgstr "Undanbedes till förmån för -std=gnu11."
#: c-family/c.opt:1748 c-family/c.opt:1752
-#, fuzzy
-#| msgid "Conform to the ISO 1990 C standard with GNU extensions"
msgid "Conform to the ISO 1990 C standard with GNU extensions."
-msgstr "Följ standarden ISO 1990 C med GNU-utökningar"
+msgstr "Följ standarden ISO 1990 C med GNU-utökningar."
#: c-family/c.opt:1756
-#, fuzzy
-#| msgid "Conform to the ISO 1999 C standard with GNU extensions"
msgid "Conform to the ISO 1999 C standard with GNU extensions."
-msgstr "Följ standarden ISO 1999 C med GNU-utökningar"
+msgstr "Följ standarden ISO 1999 C med GNU-utökningar."
#: c-family/c.opt:1760
-#, fuzzy
-#| msgid "Deprecated in favor of -std=gnu99"
msgid "Deprecated in favor of -std=gnu99."
-msgstr "Undanbedes till förmån för -std=gnu99"
+msgstr "Undanbedes till förmån för -std=gnu99."
#: c-family/c.opt:1768
-#, fuzzy
-#| msgid "Conform to the ISO 1990 C standard as amended in 1994"
msgid "Conform to the ISO 1990 C standard as amended in 1994."
-msgstr "Följ standarden ISO 1990 C med tillägg från 1994"
+msgstr "Följ standarden ISO 1990 C med tillägg från 1994."
#: c-family/c.opt:1776
-#, fuzzy
-#| msgid "Deprecated in favor of -std=iso9899:1999"
msgid "Deprecated in favor of -std=iso9899:1999."
-msgstr "Undanbedes till förmån för -std=iso9899:1999"
+msgstr "Undanbedes till förmån för -std=iso9899:1999."
#: c-family/c.opt:1787
-#, fuzzy
-#| msgid "Enable traditional preprocessing"
msgid "Enable traditional preprocessing."
-msgstr "Aktivera traditionell preprocessning"
+msgstr "Aktivera traditionell preprocessning."
#: c-family/c.opt:1791
-#, fuzzy
-#| msgid "-trigraphs\tSupport ISO C trigraphs"
msgid "-trigraphs\tSupport ISO C trigraphs."
-msgstr "-trigraphs\tStöd trigrafer enligt ISO C"
+msgstr "-trigraphs\tStöd trigrafer enligt ISO C."
#: c-family/c.opt:1795
-#, fuzzy
-#| msgid "Do not predefine system-specific and GCC-specific macros"
msgid "Do not predefine system-specific and GCC-specific macros."
-msgstr "Fördefiniera inte systemspecifika och GCC-specifika makron"
+msgstr "Fördefiniera inte systemspecifika och GCC-specifika makron."
#: ada/gcc-interface/lang.opt:61
-#, fuzzy
-#| msgid "Synonym of -gnatk8"
msgid "Synonym of -gnatk8."
-msgstr "Synonym för -gnatk8"
+msgstr "Synonym för -gnatk8."
#: ada/gcc-interface/lang.opt:69
-#, fuzzy
-#| msgid "Do not look for object files in standard path"
msgid "Do not look for object files in standard path."
-msgstr "Titta inte efter objektfiler i standardsökvägen"
+msgstr "Titta inte efter objektfiler i standardsökvägen."
#: ada/gcc-interface/lang.opt:73
-#, fuzzy
-#| msgid "Select the runtime"
msgid "Select the runtime."
-msgstr "Välj körtidssystem"
+msgstr "Välj körtidssystem."
#: ada/gcc-interface/lang.opt:85
-#, fuzzy
-#| msgid "Catch typos"
msgid "Catch typos."
-msgstr "FÃ¥nga skrivfel"
+msgstr "FÃ¥nga skrivfel."
#: ada/gcc-interface/lang.opt:89
-#, fuzzy
-#| msgid "Set name of output ALI file (internal switch)"
msgid "Set name of output ALI file (internal switch)."
-msgstr "Sätt namnet på utmatnings-ALI-filen (intern flagga)"
+msgstr "Sätt namnet på utmatnings-ALI-filen (intern flagga)."
#: ada/gcc-interface/lang.opt:93
-#, fuzzy
-#| msgid "-gnat<options>\tSpecify options to GNAT"
msgid "-gnat<options>\tSpecify options to GNAT."
-msgstr "-gnat<flaggor>\tAnge flaggor till GNAT"
+msgstr "-gnat<flaggor>\tAnge flaggor till GNAT."
#: ada/gcc-interface/lang.opt:97
msgid "Ignored."
msgstr "Ignorerad."
#: go/lang.opt:42
-#, fuzzy
-#| msgid "Add explicit checks for division by zero"
msgid "Add explicit checks for division by zero."
-msgstr "Lägg till explicita kontroller av division med noll"
+msgstr "Lägg till explicita kontroller av division med noll."
#: go/lang.opt:46
-#, fuzzy
-#| msgid "Add explicit checks for division overflow in INT_MIN / -1"
msgid "Add explicit checks for division overflow in INT_MIN / -1."
-msgstr "Lägg till explicita kontroller av spill vid division av INT_MIN / -1"
+msgstr "Lägg till explicita kontroller av spill vid division av INT_MIN / -1."
#: go/lang.opt:50
-#, fuzzy
-#| msgid "-fgo-dump-<type>\tDump Go frontend internal information"
msgid "-fgo-dump-<type>\tDump Go frontend internal information."
-msgstr "-fgo-dump-<typ>\tSkriv ut Go-framändens interna information"
+msgstr "-fgo-dump-<typ>\tSkriv ut Go-framändens interna information."
#: go/lang.opt:54
-#, fuzzy
-#| msgid "-fgo-optimize-<type>\tTurn on optimization passes in the frontend"
msgid "-fgo-optimize-<type>\tTurn on optimization passes in the frontend."
-msgstr "-fgo-optimize-<typ>\tSlå på optimeringspass i framänden"
+msgstr "-fgo-optimize-<typ>\tSlå på optimeringspass i framänden."
#: go/lang.opt:58
-#, fuzzy
-#| msgid "-fgo-pkgpath=<string>\tSet Go package path"
msgid "-fgo-pkgpath=<string>\tSet Go package path."
-msgstr "-fgo-pkgpath=<sträng>\tSätt Go-paketsökväg"
+msgstr "-fgo-pkgpath=<sträng>\tSätt Go-paketsökväg."
#: go/lang.opt:62
-#, fuzzy
-#| msgid "-fgo-prefix=<string>\tSet package-specific prefix for exported Go names"
msgid "-fgo-prefix=<string>\tSet package-specific prefix for exported Go names."
-msgstr "-fgo-prefix=<sträng>\tSätt paketspecifika prefix för exporterade Go-namn"
+msgstr "-fgo-prefix=<sträng>\tSätt paketspecifika prefix för exporterade Go-namn."
#: go/lang.opt:66
-#, fuzzy
-#| msgid "-fgo-relative-import-path=<path> Treat a relative import as relative to path"
msgid "-fgo-relative-import-path=<path> Treat a relative import as relative to path."
-msgstr "-fgo-relative-import-path=<sökv> Hantera en relativ import som relativ till sökv"
+msgstr "-fgo-relative-import-path=<sökv> Hantera en relativ import som relativ till sökv."
#: go/lang.opt:70
-#, fuzzy
-#| msgid "Functions which return values must end with return statements"
msgid "Functions which return values must end with return statements."
-msgstr "Funktioner med returvärden måste sluta med retursatser"
+msgstr "Funktioner med returvärden måste sluta med retursatser."
#: config/vms/vms.opt:27
-#, fuzzy
-#| msgid "Malloc data into P2 space"
msgid "Malloc data into P2 space."
-msgstr "Malloc-data till P2-utrymmet"
+msgstr "Malloc-data till P2-utrymmet."
#: config/vms/vms.opt:31
-#, fuzzy
-#| msgid "Set name of main routine for the debugger"
msgid "Set name of main routine for the debugger."
-msgstr "Ange namnet på huvudrutinen för felsökaren"
+msgstr "Ange namnet på huvudrutinen för felsökaren."
#: config/vms/vms.opt:35
-#, fuzzy
-#| msgid "Use VMS exit codes instead of posix ones"
msgid "Use VMS exit codes instead of posix ones."
-msgstr "Använd VMS-slutkoder istället för posix-koder"
+msgstr "Använd VMS-slutkoder istället för posix-koder."
#: config/vms/vms.opt:39
-#, fuzzy
-#| msgid "-mpointer-size=[no,32,short,64,long]\tSet the default pointer size"
msgid "-mpointer-size=[no,32,short,64,long]\tSet the default pointer size."
-msgstr "-mpointer-size=[no,32,short,64,long]\tSätt standardstorlek på pekare"
+msgstr "-mpointer-size=[no,32,short,64,long]\tSätt standardstorlek på pekare."
#: config/vms/vms.opt:42
#, c-format
@@ -8553,261 +7527,177 @@ msgid "Generate code for the M*Core M340"
msgstr "Generera kod för M*Core M340"
#: config/mcore/mcore.opt:31
-#, fuzzy
-#| msgid "Force functions to be aligned to a 4 byte boundary"
msgid "Force functions to be aligned to a 4 byte boundary."
-msgstr "Tvinga funktioner till att vara justerade till en 4-bytegräns"
+msgstr "Tvinga funktioner till att vara justerade till en 4-bytegräns."
#: config/mcore/mcore.opt:35 config/moxie/moxie.opt:23
-#, fuzzy
-#| msgid "Generate big-endian code"
msgid "Generate big-endian code."
-msgstr "Generera kod med rak byteordning"
+msgstr "Generera kod med rak byteordning."
#: config/mcore/mcore.opt:39
-#, fuzzy
-#| msgid "Emit call graph information"
msgid "Emit call graph information."
-msgstr "Mata ut anropsgrafsinformation"
+msgstr "Mata ut anropsgrafsinformation."
#: config/mcore/mcore.opt:43
-#, fuzzy
-#| msgid "Use the divide instruction"
msgid "Use the divide instruction."
-msgstr "Använd divisionsinstruktionen"
+msgstr "Använd divisionsinstruktionen."
#: config/mcore/mcore.opt:47
-#, fuzzy
-#| msgid "Inline constants if it can be done in 2 insns or less"
msgid "Inline constants if it can be done in 2 insns or less."
-msgstr "Inline:a konstanter om det kan göras på 2 instruktioner eller mindre"
+msgstr "Inline:a konstanter om det kan göras på 2 instruktioner eller mindre."
#: config/mcore/mcore.opt:51 config/moxie/moxie.opt:27
-#, fuzzy
-#| msgid "Generate little-endian code"
msgid "Generate little-endian code."
-msgstr "Generera kod med omvänd byteordning"
+msgstr "Generera kod med omvänd byteordning."
#: config/mcore/mcore.opt:56 config/fr30/fr30.opt:27
-#, fuzzy
-#| msgid "Assume that run-time support has been provided, so omit -lsim from the linker command line"
msgid "Assume that run-time support has been provided, so omit -lsim from the linker command line."
-msgstr "Anta att körtidsstöd finns, så utelämna -lsim från länkningskommandoraden"
+msgstr "Anta att körtidsstöd finns, så utelämna -lsim från länkningskommandoraden."
#: config/mcore/mcore.opt:60
-#, fuzzy
-#| msgid "Use arbitrary sized immediates in bit operations"
msgid "Use arbitrary sized immediates in bit operations."
-msgstr "Använd godtyckligt stora omedelbara i bitoperationer"
+msgstr "Använd godtyckligt stora omedelbara i bitoperationer."
#: config/mcore/mcore.opt:64
-#, fuzzy
-#| msgid "Prefer word accesses over byte accesses"
msgid "Prefer word accesses over byte accesses."
-msgstr "Föredra ordåtkomst före byteåtkomst"
+msgstr "Föredra ordåtkomst före byteåtkomst."
#: config/mcore/mcore.opt:71
-#, fuzzy
-#| msgid "Set the maximum amount for a single stack increment operation"
msgid "Set the maximum amount for a single stack increment operation."
-msgstr "Ange maximal storlek på en ensam stackökningsoperation"
+msgstr "Ange maximal storlek på en ensam stackökningsoperation."
#: config/mcore/mcore.opt:75
-#, fuzzy
-#| msgid "Always treat bitfields as int-sized"
msgid "Always treat bitfields as int-sized."
-msgstr "Hantera alltid bitfält som int-stora"
+msgstr "Hantera alltid bitfält som int-stora."
#: config/linux-android.opt:23
msgid "Generate code for the Android platform."
msgstr "Generera kod för plattformen Android."
#: config/mmix/mmix.opt:24
-#, fuzzy
-#| msgid "For intrinsics library: pass all parameters in registers"
msgid "For intrinsics library: pass all parameters in registers."
-msgstr "För inbyggt bibliotek: skicka alla parametrar i register"
+msgstr "För inbyggt bibliotek: skicka alla parametrar i register."
#: config/mmix/mmix.opt:28
-#, fuzzy
-#| msgid "Use register stack for parameters and return value"
msgid "Use register stack for parameters and return value."
-msgstr "Använd registerstacken för parametrar och returvärde"
+msgstr "Använd registerstacken för parametrar och returvärde."
#: config/mmix/mmix.opt:32
-#, fuzzy
-#| msgid "Use call-clobbered registers for parameters and return value"
msgid "Use call-clobbered registers for parameters and return value."
-msgstr "Använd anropsöverskrivna register för parametrar och returvärde"
+msgstr "Använd anropsöverskrivna register för parametrar och returvärde."
#: config/mmix/mmix.opt:37
-#, fuzzy
-#| msgid "Use epsilon-respecting floating point compare instructions"
msgid "Use epsilon-respecting floating point compare instructions."
-msgstr "Använd flyttalsjämförelseinstruktioner som respekterar epsilon"
+msgstr "Använd flyttalsjämförelseinstruktioner som respekterar epsilon."
#: config/mmix/mmix.opt:41
-#, fuzzy
-#| msgid "Use zero-extending memory loads, not sign-extending ones"
msgid "Use zero-extending memory loads, not sign-extending ones."
-msgstr "Använd nollutfyllda minnesladdningar, inte teckenutfyllda"
+msgstr "Använd nollutfyllda minnesladdningar, inte teckenutfyllda."
#: config/mmix/mmix.opt:45
-#, fuzzy
-#| msgid "Generate divide results with reminder having the same sign as the divisor (not the dividend)"
msgid "Generate divide results with reminder having the same sign as the divisor (not the dividend)."
-msgstr "Generera divisionsresultat så att resten har samma tecken som täljaren (inte nämnaren)"
+msgstr "Generera divisionsresultat så att resten har samma tecken som täljaren (inte nämnaren)."
#: config/mmix/mmix.opt:49
-#, fuzzy
-#| msgid "Prepend global symbols with \":\" (for use with PREFIX)"
msgid "Prepend global symbols with \":\" (for use with PREFIX)."
-msgstr "Inled globala symboler med â€:†(för användning tillsammans med PREFIX)"
+msgstr "Inled globala symboler med â€:†(för användning tillsammans med PREFIX)."
#: config/mmix/mmix.opt:53
-#, fuzzy
-#| msgid "Do not provide a default start-address 0x100 of the program"
msgid "Do not provide a default start-address 0x100 of the program."
-msgstr "Ge inte en standard startadress 0x100 för programmet"
+msgstr "Ge inte en standard startadress 0x100 för programmet."
#: config/mmix/mmix.opt:57
-#, fuzzy
-#| msgid "Link to emit program in ELF format (rather than mmo)"
msgid "Link to emit program in ELF format (rather than mmo)."
-msgstr "Länka för att skapa program i ELF-format (snarare än mmo)"
+msgstr "Länka för att skapa program i ELF-format (snarare än mmo)."
#: config/mmix/mmix.opt:61
-#, fuzzy
-#| msgid "Use P-mnemonics for branches statically predicted as taken"
msgid "Use P-mnemonics for branches statically predicted as taken."
-msgstr "Använd P-mnemonics för grenar som statiskt förutsägs tas"
+msgstr "Använd P-mnemonics för grenar som statiskt förutsägs tas."
#: config/mmix/mmix.opt:65
-#, fuzzy
-#| msgid "Don't use P-mnemonics for branches"
msgid "Don't use P-mnemonics for branches."
-msgstr "Använd inte P-mnemonics för grenar"
+msgstr "Använd inte P-mnemonics för grenar."
#: config/mmix/mmix.opt:79
-#, fuzzy
-#| msgid "Use addresses that allocate global registers"
msgid "Use addresses that allocate global registers."
-msgstr "Använd adresser som allokerar globala register"
+msgstr "Använd adresser som allokerar globala register."
#: config/mmix/mmix.opt:83
-#, fuzzy
-#| msgid "Do not use addresses that allocate global registers"
msgid "Do not use addresses that allocate global registers."
-msgstr "Använd inte adresser som allokerar globala register"
+msgstr "Använd inte adresser som allokerar globala register."
#: config/mmix/mmix.opt:87
-#, fuzzy
-#| msgid "Generate a single exit point for each function"
msgid "Generate a single exit point for each function."
-msgstr "Generera en enda utgångspunkt för varje funktion"
+msgstr "Generera en enda utgångspunkt för varje funktion."
#: config/mmix/mmix.opt:91
-#, fuzzy
-#| msgid "Do not generate a single exit point for each function"
msgid "Do not generate a single exit point for each function."
-msgstr "Generera inte en ensam utgångspunkt för varje funktion"
+msgstr "Generera inte en ensam utgångspunkt för varje funktion."
#: config/mmix/mmix.opt:95
-#, fuzzy
-#| msgid "Set start-address of the program"
msgid "Set start-address of the program."
-msgstr "Ange startadressen för programmet"
+msgstr "Ange startadressen för programmet."
#: config/mmix/mmix.opt:99
-#, fuzzy
-#| msgid "Set start-address of data"
msgid "Set start-address of data."
-msgstr "Sätt startadress för data"
+msgstr "Sätt startadress för data."
#: config/darwin.opt:114
-#, fuzzy
-#| msgid "Generate compile-time CFString objects"
msgid "Generate compile-time CFString objects."
-msgstr "Generera CFString-objekt vid kompileringstillfället"
+msgstr "Generera CFString-objekt vid kompileringstillfället."
#: config/darwin.opt:211
-#, fuzzy
-#| msgid "Warn if constant CFString objects contain non-portable characters"
msgid "Warn if constant CFString objects contain non-portable characters."
-msgstr "Varna om konstanta CFString-objekt innehåller icke-portabla tecken"
+msgstr "Varna om konstanta CFString-objekt innehåller icke-portabla tecken."
#: config/darwin.opt:216
-#, fuzzy
-#| msgid "Generate AT&T-style stubs for Mach-O"
msgid "Generate AT&T-style stubs for Mach-O."
-msgstr "Generera stubbar i AT&T-stil för Mach-O"
+msgstr "Generera stubbar i AT&T-stil för Mach-O."
#: config/darwin.opt:220
-#, fuzzy
-#| msgid "Generate code suitable for executables (NOT shared libs)"
msgid "Generate code suitable for executables (NOT shared libs)."
-msgstr "Generera kod lämplig för körbara program (INTE delade bibliotek)"
+msgstr "Generera kod lämplig för körbara program (INTE delade bibliotek)."
#: config/darwin.opt:224
-#, fuzzy
-#| msgid "Generate code suitable for fast turn around debugging"
msgid "Generate code suitable for fast turn around debugging."
-msgstr "Generera kod lämplig för korta felsökningscykler"
+msgstr "Generera kod lämplig för korta felsökningscykler."
#: config/darwin.opt:232
-#, fuzzy
-#| msgid "The earliest MacOS X version on which this program will run"
msgid "The earliest MacOS X version on which this program will run."
-msgstr "Den tidigaste MacOS X-versionen som detta program kommer köra på"
+msgstr "Den tidigaste MacOS X-versionen som detta program kommer köra på."
#: config/darwin.opt:236
-#, fuzzy
-#| msgid "Set sizeof(bool) to 1"
msgid "Set sizeof(bool) to 1."
-msgstr "Sätt sizeof(bool) till 1"
+msgstr "Sätt sizeof(bool) till 1."
#: config/darwin.opt:240
-#, fuzzy
-#| msgid "Generate code for darwin loadable kernel extensions"
msgid "Generate code for darwin loadable kernel extensions."
-msgstr "Generera kod för darwin laddbara kärnutvidgningar"
+msgstr "Generera kod för darwin laddbara kärnutvidgningar."
#: config/darwin.opt:244
-#, fuzzy
-#| msgid "Generate code for the kernel or loadable kernel extensions"
msgid "Generate code for the kernel or loadable kernel extensions."
-msgstr "Generera kod för kärnan eller laddbara kärnutvidgningar"
+msgstr "Generera kod för kärnan eller laddbara kärnutvidgningar."
#: config/darwin.opt:248
-#, fuzzy
-#| msgid "-iframework <dir>\tAdd <dir> to the end of the system framework include path"
msgid "-iframework <dir>\tAdd <dir> to the end of the system framework include path."
-msgstr "-iframework <kat>\tLägg till <kat> till slutet av systemramverkets inkluderingssökväg"
+msgstr "-iframework <kat>\tLägg till <kat> till slutet av systemramverkets inkluderingssökväg."
#: config/bfin/bfin.opt:40 config/msp430/msp430.opt:3 config/c6x/c6x.opt:38
#: config/mep/mep.opt:143
-#, fuzzy
-#| msgid "Use simulator runtime"
msgid "Use simulator runtime."
-msgstr "Använd simulatorkörtider"
+msgstr "Använd simulatorkörtider."
#: config/bfin/bfin.opt:44 config/arm/arm.opt:106
-#, fuzzy
-#| msgid "Specify the name of the target CPU"
msgid "Specify the name of the target CPU."
-msgstr "Ange namnet på målprocessorn"
+msgstr "Ange namnet på målprocessorn."
#: config/bfin/bfin.opt:48
-#, fuzzy
-#| msgid "Omit frame pointer for leaf functions"
msgid "Omit frame pointer for leaf functions."
-msgstr "Utelämna rampekaren i lövfunktioner"
+msgstr "Utelämna rampekaren i lövfunktioner."
#: config/bfin/bfin.opt:52
-#, fuzzy
-#| msgid "Program is entirely located in low 64k of memory"
msgid "Program is entirely located in low 64k of memory."
-msgstr "Programmet ligger helt i låga 64 kB minne"
+msgstr "Programmet ligger helt i låga 64 kB minne."
#: config/bfin/bfin.opt:56
msgid "Work around a hardware anomaly by adding a number of NOPs before a"
@@ -8815,13 +7705,11 @@ msgstr "Gå runt en hårdvaruanomali genom att lägga till ett antal NOP:ar för
#: config/bfin/bfin.opt:61
msgid "Avoid speculative loads to work around a hardware anomaly."
-msgstr "Undvik spekulativa lastningar för att gå runt en hårdvaruanomali."
+msgstr "Undvik spekulativa laddningar för att gå runt en hårdvaruanomali."
#: config/bfin/bfin.opt:65
-#, fuzzy
-#| msgid "Enabled ID based shared library"
msgid "Enabled ID based shared library."
-msgstr "Aktivera ID-baserat delat bibliotek"
+msgstr "Aktivera ID-baserat delat bibliotek."
# Avhugget p.g.a. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34352
# Hela meddelandet är översatt
@@ -8830,70 +7718,48 @@ msgid "Generate code that won't be linked against any other ID shared libraries,
msgstr "Generera kod som inte kommer länkas mot några andra delade ID-bibliotek men kan användas av ett delat bibliotek."
#: config/bfin/bfin.opt:74 config/m68k/m68k.opt:171
-#, fuzzy
-#| msgid "ID of shared library to build"
msgid "ID of shared library to build."
-msgstr "ID för delat bibliotek att bygga"
+msgstr "ID för delat bibliotek att bygga."
#: config/bfin/bfin.opt:78 config/m68k/m68k.opt:167
-#, fuzzy
-#| msgid "Enable separate data segment"
msgid "Enable separate data segment."
-msgstr "Aktivera separat datasegment"
+msgstr "Aktivera separat datasegment."
#: config/bfin/bfin.opt:82 config/c6x/c6x.opt:63
-#, fuzzy
-#| msgid "Avoid generating pc-relative calls; use indirection"
msgid "Avoid generating pc-relative calls; use indirection."
-msgstr "Undvik att generera pc-relativa anrop, använd indirekt anrop"
+msgstr "Undvik att generera pc-relativa anrop, använd indirekt anrop."
#: config/bfin/bfin.opt:86
-#, fuzzy
-#| msgid "Link with the fast floating-point library"
msgid "Link with the fast floating-point library."
-msgstr "Länka med de snabba flyttalsbiblioteken"
+msgstr "Länka med de snabba flyttalsbiblioteken."
#: config/bfin/bfin.opt:90 config/frv/frv.opt:130
-#, fuzzy
-#| msgid "Enable Function Descriptor PIC mode"
msgid "Enable Function Descriptor PIC mode."
-msgstr "Aktivera funktionsbeskrivar-PIC-läge"
+msgstr "Aktivera funktionsbeskrivar-PIC-läge."
#: config/bfin/bfin.opt:94 config/frv/frv.opt:162
-#, fuzzy
-#| msgid "Enable inlining of PLT in function calls"
msgid "Enable inlining of PLT in function calls."
-msgstr "Aktivera inline:ing av PLT i funktionsanrop"
+msgstr "Aktivera inline:ing av PLT i funktionsanrop."
#: config/bfin/bfin.opt:98
-#, fuzzy
-#| msgid "Do stack checking using bounds in L1 scratch memory"
msgid "Do stack checking using bounds in L1 scratch memory."
-msgstr "Gör stackkontroll med gränser i L1:s fria minne"
+msgstr "Gör stackkontroll med gränser i L1:s fria minne."
#: config/bfin/bfin.opt:102
-#, fuzzy
-#| msgid "Enable multicore support"
msgid "Enable multicore support."
-msgstr "Aktivera stöd för flera kärnor"
+msgstr "Aktivera stöd för flera kärnor."
#: config/bfin/bfin.opt:106
-#, fuzzy
-#| msgid "Build for Core A"
msgid "Build for Core A."
-msgstr "Bygg för kärna A"
+msgstr "Bygg för kärna A."
#: config/bfin/bfin.opt:110
-#, fuzzy
-#| msgid "Build for Core B"
msgid "Build for Core B."
-msgstr "Bygg för kärna B"
+msgstr "Bygg för kärna B."
#: config/bfin/bfin.opt:114
-#, fuzzy
-#| msgid "Build for SDRAM"
msgid "Build for SDRAM."
-msgstr "Bygg för SDRAM"
+msgstr "Bygg för SDRAM."
#: config/bfin/bfin.opt:118
msgid "Assume ICPLBs are enabled at runtime."
@@ -8912,118 +7778,80 @@ msgid "Known M68K ISAs (for use with the -march= option):"
msgstr "Kända M68K-ISA:er (att användas med flaggan -march=):"
#: config/m68k/ieee.opt:24 config/i386/i386.opt:358
-#, fuzzy
-#| msgid "Use IEEE math for fp comparisons"
msgid "Use IEEE math for fp comparisons."
-msgstr "Använd IEEE matematik för flyttaljämförelser"
+msgstr "Använd IEEE matematik för flyttaljämförelser."
#: config/m68k/m68k.opt:30
-#, fuzzy
-#| msgid "Generate code for a 520X"
msgid "Generate code for a 520X."
-msgstr "Generera kod för en 520X"
+msgstr "Generera kod för en 520X."
#: config/m68k/m68k.opt:34
-#, fuzzy
-#| msgid "Generate code for a 5206e"
msgid "Generate code for a 5206e."
-msgstr "Generera kod för en 5206e"
+msgstr "Generera kod för en 5206e."
#: config/m68k/m68k.opt:38
-#, fuzzy
-#| msgid "Generate code for a 528x"
msgid "Generate code for a 528x."
-msgstr "Generera kod för en 528x"
+msgstr "Generera kod för en 528x."
#: config/m68k/m68k.opt:42
-#, fuzzy
-#| msgid "Generate code for a 5307"
msgid "Generate code for a 5307."
-msgstr "Generera kod för en 5307"
+msgstr "Generera kod för en 5307."
#: config/m68k/m68k.opt:46
-#, fuzzy
-#| msgid "Generate code for a 5407"
msgid "Generate code for a 5407."
-msgstr "Generera kod för en 5407"
+msgstr "Generera kod för en 5407."
#: config/m68k/m68k.opt:50 config/m68k/m68k.opt:111
-#, fuzzy
-#| msgid "Generate code for a 68000"
msgid "Generate code for a 68000."
-msgstr "Generera kod för en 68000"
+msgstr "Generera kod för en 68000."
#: config/m68k/m68k.opt:54
-#, fuzzy
-#| msgid "Generate code for a 68010"
msgid "Generate code for a 68010."
-msgstr "Generera kod för en 68010"
+msgstr "Generera kod för en 68010."
#: config/m68k/m68k.opt:58 config/m68k/m68k.opt:115
-#, fuzzy
-#| msgid "Generate code for a 68020"
msgid "Generate code for a 68020."
-msgstr "Generera kod för en 68020"
+msgstr "Generera kod för en 68020."
#: config/m68k/m68k.opt:62
-#, fuzzy
-#| msgid "Generate code for a 68040, without any new instructions"
msgid "Generate code for a 68040, without any new instructions."
-msgstr "Generera kod för en 68040, utan några nya instruktioner"
+msgstr "Generera kod för en 68040, utan några nya instruktioner."
#: config/m68k/m68k.opt:66
-#, fuzzy
-#| msgid "Generate code for a 68060, without any new instructions"
msgid "Generate code for a 68060, without any new instructions."
-msgstr "Generera kod för en 68060, utan några nya instruktioner"
+msgstr "Generera kod för en 68060, utan några nya instruktioner."
#: config/m68k/m68k.opt:70
-#, fuzzy
-#| msgid "Generate code for a 68030"
msgid "Generate code for a 68030."
-msgstr "Generera kod för en 68030"
+msgstr "Generera kod för en 68030."
#: config/m68k/m68k.opt:74
-#, fuzzy
-#| msgid "Generate code for a 68040"
msgid "Generate code for a 68040."
-msgstr "Generera kod för en 68040"
+msgstr "Generera kod för en 68040."
#: config/m68k/m68k.opt:78
-#, fuzzy
-#| msgid "Generate code for a 68060"
msgid "Generate code for a 68060."
-msgstr "Generera kod för en 68060"
+msgstr "Generera kod för en 68060."
#: config/m68k/m68k.opt:82
-#, fuzzy
-#| msgid "Generate code for a 68302"
msgid "Generate code for a 68302."
-msgstr "Generera kod för en 68302"
+msgstr "Generera kod för en 68302."
#: config/m68k/m68k.opt:86
-#, fuzzy
-#| msgid "Generate code for a 68332"
msgid "Generate code for a 68332."
-msgstr "Generera kod för en 68332"
+msgstr "Generera kod för en 68332."
#: config/m68k/m68k.opt:91
-#, fuzzy
-#| msgid "Generate code for a 68851"
msgid "Generate code for a 68851."
-msgstr "Generera kod för en 68851"
+msgstr "Generera kod för en 68851."
#: config/m68k/m68k.opt:95
-#, fuzzy
-#| msgid "Generate code that uses 68881 floating-point instructions"
msgid "Generate code that uses 68881 floating-point instructions."
-msgstr "Generera kod som använder flyttalsinstruktioner för 68881"
+msgstr "Generera kod som använder flyttalsinstruktioner för 68881."
#: config/m68k/m68k.opt:99
-#, fuzzy
-#| msgid "Align variables on a 32-bit boundary"
msgid "Align variables on a 32-bit boundary."
-msgstr "Justera variabler på en 32-bitarsgräns"
+msgstr "Justera variabler på en 32-bitarsgräns."
#: config/m68k/m68k.opt:103 config/arm/arm.opt:81 config/nios2/nios2.opt:570
#: config/nds32/nds32.opt:66 config/c6x/c6x.opt:67
@@ -9031,160 +7859,108 @@ msgid "Specify the name of the target architecture."
msgstr "Ange namnet på målarkitekturen."
#: config/m68k/m68k.opt:107
-#, fuzzy
-#| msgid "Use the bit-field instructions"
msgid "Use the bit-field instructions."
-msgstr "Använd bitfältsinstruktionerna"
+msgstr "Använd bitfältsinstruktionerna."
#: config/m68k/m68k.opt:119
-#, fuzzy
-#| msgid "Generate code for a ColdFire v4e"
msgid "Generate code for a ColdFire v4e."
-msgstr "Generera kod för en ColdFire v4e"
+msgstr "Generera kod för en ColdFire v4e."
#: config/m68k/m68k.opt:123
-#, fuzzy
-#| msgid "Specify the target CPU"
msgid "Specify the target CPU."
-msgstr "Ange mål-CPU:n"
+msgstr "Ange mål-CPU:n."
#: config/m68k/m68k.opt:127
-#, fuzzy
-#| msgid "Generate code for a cpu32"
msgid "Generate code for a cpu32."
-msgstr "Generera kod för en cpu32"
+msgstr "Generera kod för en cpu32."
#: config/m68k/m68k.opt:131
-#, fuzzy
-#| msgid "Use hardware division instructions on ColdFire"
msgid "Use hardware division instructions on ColdFire."
-msgstr "Använd hårdvarudivisionsinstruktioner på ColdFire"
+msgstr "Använd hårdvarudivisionsinstruktioner på ColdFire."
#: config/m68k/m68k.opt:135
-#, fuzzy
-#| msgid "Generate code for a Fido A"
msgid "Generate code for a Fido A."
-msgstr "Generera kod för en Fido A"
+msgstr "Generera kod för en Fido A."
#: config/m68k/m68k.opt:139
-#, fuzzy
-#| msgid "Generate code which uses hardware floating point instructions"
msgid "Generate code which uses hardware floating point instructions."
-msgstr "Generera kod som använder hårdvaruflyttalsinstruktioner"
+msgstr "Generera kod som använder hårdvaruflyttalsinstruktioner."
#: config/m68k/m68k.opt:143
-#, fuzzy
-#| msgid "Enable ID based shared library"
msgid "Enable ID based shared library."
-msgstr "Aktivera ID-baserat delat bibliotek"
+msgstr "Aktivera ID-baserat delat bibliotek."
#: config/m68k/m68k.opt:147
-#, fuzzy
-#| msgid "Do not use the bit-field instructions"
msgid "Do not use the bit-field instructions."
-msgstr "Använd inte bitfältsinstruktionerna"
+msgstr "Använd inte bitfältsinstruktionerna."
#: config/m68k/m68k.opt:151
-#, fuzzy
-#| msgid "Use normal calling convention"
msgid "Use normal calling convention."
-msgstr "Använd normal anropskonvention"
+msgstr "Använd normal anropskonvention."
#: config/m68k/m68k.opt:155
-#, fuzzy
-#| msgid "Consider type 'int' to be 32 bits wide"
msgid "Consider type 'int' to be 32 bits wide."
-msgstr "Betrakta typen â€int†som 32 bitar bred"
+msgstr "Betrakta typen â€int†som 32 bitar bred."
#: config/m68k/m68k.opt:159
-#, fuzzy
-#| msgid "Generate pc-relative code"
msgid "Generate pc-relative code."
-msgstr "Generera pc-relativ kod"
+msgstr "Generera pc-relativ kod."
#: config/m68k/m68k.opt:163
-#, fuzzy
-#| msgid "Use different calling convention using 'rtd'"
msgid "Use different calling convention using 'rtd'."
-msgstr "Använd en annan anropskonvention som använder â€rtdâ€"
+msgstr "Använd en annan anropskonvention som använder â€rtdâ€."
#: config/m68k/m68k.opt:175
-#, fuzzy
-#| msgid "Consider type 'int' to be 16 bits wide"
msgid "Consider type 'int' to be 16 bits wide."
-msgstr "Betrakta typen â€int†som 16 bitar bred"
+msgstr "Betrakta typen â€int†som 16 bitar bred."
#: config/m68k/m68k.opt:179
-#, fuzzy
-#| msgid "Generate code with library calls for floating point"
msgid "Generate code with library calls for floating point."
-msgstr "Generera kod med biblioteksanrop för flyttal"
+msgstr "Generera kod med biblioteksanrop för flyttal."
#: config/m68k/m68k.opt:183
-#, fuzzy
-#| msgid "Do not use unaligned memory references"
msgid "Do not use unaligned memory references."
-msgstr "Använd inte ojusterade minnesreferenser"
+msgstr "Använd inte ojusterade minnesreferenser."
#: config/m68k/m68k.opt:187
-#, fuzzy
-#| msgid "Tune for the specified target CPU or architecture"
msgid "Tune for the specified target CPU or architecture."
-msgstr "Trimma för den angivna mål-CPU:n eller arkitekturen"
+msgstr "Trimma för den angivna mål-CPU:n eller arkitekturen."
#: config/m68k/m68k.opt:191
-#, fuzzy
-#| msgid "Support more than 8192 GOT entries on ColdFire"
msgid "Support more than 8192 GOT entries on ColdFire."
-msgstr "Stöd mer än 8192 GOT-poster på ColdFire"
+msgstr "Stöd mer än 8192 GOT-poster på ColdFire."
#: config/m68k/m68k.opt:195
-#, fuzzy
-#| msgid "Support TLS segment larger than 64K"
msgid "Support TLS segment larger than 64K."
-msgstr "Stöd TLS-segment större än 64 k"
+msgstr "Stöd TLS-segment större än 64 k."
#: config/m32c/m32c.opt:23
-#, fuzzy
-#| msgid "-msim\tUse simulator runtime"
msgid "-msim\tUse simulator runtime."
-msgstr "-msim\tAnvänd simulatorkörtider"
+msgstr "-msim\tAnvänd simulatorkörtider."
#: config/m32c/m32c.opt:27
-#, fuzzy
-#| msgid "-mcpu=r8c\tCompile code for R8C variants"
msgid "-mcpu=r8c\tCompile code for R8C variants."
-msgstr "-mcpu=r8c\tKompilera kod för R8C-varianter"
+msgstr "-mcpu=r8c\tKompilera kod för R8C-varianter."
#: config/m32c/m32c.opt:31
-#, fuzzy
-#| msgid "-mcpu=m16c\tCompile code for M16C variants"
msgid "-mcpu=m16c\tCompile code for M16C variants."
-msgstr "-mcpu=m16c\tKompilera kod för M16C-varianter"
+msgstr "-mcpu=m16c\tKompilera kod för M16C-varianter."
#: config/m32c/m32c.opt:35
-#, fuzzy
-#| msgid "-mcpu=m32cm\tCompile code for M32CM variants"
msgid "-mcpu=m32cm\tCompile code for M32CM variants."
-msgstr "-mcpu=m32cm\tKompilera kod för M32CM-varianter"
+msgstr "-mcpu=m32cm\tKompilera kod för M32CM-varianter."
#: config/m32c/m32c.opt:39
-#, fuzzy
-#| msgid "-mcpu=m32c\tCompile code for M32C variants"
msgid "-mcpu=m32c\tCompile code for M32C variants."
-msgstr "-mcpu=m32c\tKompilera kod för M32C-varianter"
+msgstr "-mcpu=m32c\tKompilera kod för M32C-varianter."
#: config/m32c/m32c.opt:43
-#, fuzzy
-#| msgid "-memregs=\tNumber of memreg bytes (default: 16, range: 0..16)"
msgid "-memregs=\tNumber of memreg bytes (default: 16, range: 0..16)."
-msgstr "-memregs=\tAntal memreg-byte (standard: 16, intervall: 0..16)"
+msgstr "-memregs=\tAntal memreg-byte (standard: 16, intervall: 0..16)."
#: config/msp430/msp430.opt:7
-#, fuzzy
-#| msgid "Force assembly output to always use hex constants"
msgid "Force assembly output to always use hex constants."
-msgstr "Tvinga assemblerutdata att alltid använda hexadecimala konstanter"
+msgstr "Tvinga assemblerutdata att alltid använda hexadecimala konstanter."
#: config/msp430/msp430.opt:11
msgid "Specify the MCU to build for."
@@ -9195,44 +7971,32 @@ msgid "Warn if an MCU name is unrecognised or conflicts with other options (defa
msgstr "Varna om ett MCU-namn inte känns igen eller står i konflikt med andra flaggor (standar: på)."
#: config/msp430/msp430.opt:19
-#, fuzzy
-#| msgid "Specify the ISA to build for: msp430, mdsp430x, msp430xv2"
msgid "Specify the ISA to build for: msp430, msp430x, msp430xv2."
-msgstr "Ange ISA:n att bygga för: msp430, mdsp430x, msp430xv2"
+msgstr "Ange ISA:n att bygga för: msp430, msp430x, msp430xv2."
#: config/msp430/msp430.opt:23
-#, fuzzy
-#| msgid "Select large model - 20-bit addresses/pointers"
msgid "Select large model - 20-bit addresses/pointers."
-msgstr "Välj stor modell — 20-bitars adresser/pekare"
+msgstr "Välj stor modell — 20-bitars adresser/pekare."
#: config/msp430/msp430.opt:27
-#, fuzzy
-#| msgid "Select small model - 16-bit addresses/pointers (default)"
msgid "Select small model - 16-bit addresses/pointers (default)."
-msgstr "Välj liten modell — 16-bitars adresser/pekare (standard)"
+msgstr "Välj liten modell — 16-bitars adresser/pekare (standard)."
#: config/msp430/msp430.opt:31
-#, fuzzy
-#| msgid "Optimize opcode sizes at link time"
msgid "Optimize opcode sizes at link time."
-msgstr "Optimera op-kodsstorlekar vid länkningstillfället"
+msgstr "Optimera op-kodsstorlekar vid länkningstillfället."
#: config/msp430/msp430.opt:38
msgid "Use a minimum runtime (no static initializers or ctors) for memory-constrained devices."
msgstr "Använd en minimal körmiljö (inga statiska initierare eller ctors) för minnesbegränsade enheter."
#: config/msp430/msp430.opt:45
-#, fuzzy
-#| msgid "Specify the type of hardware multiply to support"
msgid "Specify the type of hardware multiply to support."
-msgstr "Ange typen av hårdvarumultiplikation att stödja"
+msgstr "Ange typen av hårdvarumultiplikation att stödja."
#: config/msp430/msp430.opt:67
-#, fuzzy
-#| msgid "Specifies whether interrupt functions should save and restore the accumulator register."
msgid "Specify whether functions should be placed into low or high memory."
-msgstr "Anger om avbrottsfunktioner skall spara och återställa ackumulatorregistret."
+msgstr "Ange om funktioner skall placeras i lågt eller högt minne."
#: config/msp430/msp430.opt:71
msgid "Specify whether variables should be placed into low or high memory."
@@ -9256,89 +8020,61 @@ msgstr "Namnen för flaggan för kodmodell för -mcmodel:"
#: config/aarch64/aarch64.opt:65 config/arm/arm.opt:94
#: config/microblaze/microblaze.opt:60
-#, fuzzy
-#| msgid "Assume target CPU is configured as big endian"
msgid "Assume target CPU is configured as big endian."
-msgstr "Antag att mål-CPU:n är konfigurerad för rak byteordning"
+msgstr "Antag att mål-CPU:n är konfigurerad för rak byteordning."
#: config/aarch64/aarch64.opt:69
-#, fuzzy
-#| msgid "Generate code which uses only the general registers"
msgid "Generate code which uses only the general registers."
-msgstr "Generera kod som använder endast generella register"
+msgstr "Generera kod som använder endast generella register."
#: config/aarch64/aarch64.opt:73
-#, fuzzy
-#| msgid "Workaround for ARM Cortex-A53 Erratum number 835769"
msgid "Workaround for ARM Cortex-A53 Erratum number 835769."
-msgstr "Sätt att gå runt ARM Cortex-A53:s errata nummer 835796"
+msgstr "Sätt att gå runt ARM Cortex-A53:s errata nummer 835796."
#: config/aarch64/aarch64.opt:77
-#, fuzzy
-#| msgid "Workaround for ARM Cortex-A53 Erratum number 843419"
msgid "Workaround for ARM Cortex-A53 Erratum number 843419."
-msgstr "Sätt att gå runt ARM Cortex-A53:s errata nummer 843419"
+msgstr "Sätt att gå runt ARM Cortex-A53:s errata nummer 843419."
#: config/aarch64/aarch64.opt:81 config/arm/arm.opt:155
#: config/microblaze/microblaze.opt:64
-#, fuzzy
-#| msgid "Assume target CPU is configured as little endian"
msgid "Assume target CPU is configured as little endian."
-msgstr "Antag att mål-CPU:n är konfigurerad med omvänd byteordning"
+msgstr "Antag att mål-CPU:n är konfigurerad med omvänd byteordning."
#: config/aarch64/aarch64.opt:85
-#, fuzzy
-#| msgid "Specify the code model"
msgid "Specify the code model."
-msgstr "Ange kodmodellen"
+msgstr "Ange kodmodellen."
#: config/aarch64/aarch64.opt:89
-#, fuzzy
-#| msgid "Don't assume that unaligned accesses are handled by the system"
msgid "Don't assume that unaligned accesses are handled by the system."
-msgstr "Anta inte att ojusterade åtkomster hanteras av systemet"
+msgstr "Anta inte att ojusterade åtkomster hanteras av systemet."
#: config/aarch64/aarch64.opt:93 config/i386/i386.opt:390
-#, fuzzy
-#| msgid "Omit the frame pointer in leaf functions"
msgid "Omit the frame pointer in leaf functions."
-msgstr "Utelämna rampekaren i lövfunktioner"
+msgstr "Utelämna rampekaren i lövfunktioner."
#: config/aarch64/aarch64.opt:97
-#, fuzzy
-#| msgid "Specify TLS dialect"
msgid "Specify TLS dialect."
-msgstr "Ange TLS-dialekt"
+msgstr "Ange TLS-dialekt."
#: config/aarch64/aarch64.opt:101
-#, fuzzy
-#| msgid "Specify bit size of immediate TLS offsets"
msgid "Specifies bit size of immediate TLS offsets. Valid values are 12, 24, 32, 48."
-msgstr "Ange bitstorlek på omedelbara TLS-avstånd"
+msgstr "Ange bitstorlek på omedelbara TLS-avstånd. Giltiga värden är 12, 24, 32, 48."
#: config/aarch64/aarch64.opt:120
-#, fuzzy
-#| msgid "-march=ARCH\tUse features of architecture ARCH"
msgid "-march=ARCH\tUse features of architecture ARCH."
-msgstr "-march=ARK\tAnvänd funktioner i arkitekturen ARK"
+msgstr "-march=ARK\tAnvänd funktioner i arkitekturen ARK."
#: config/aarch64/aarch64.opt:124
-#, fuzzy
-#| msgid "-mcpu=CPU\tUse features of and optimize for CPU"
msgid "-mcpu=CPU\tUse features of and optimize for CPU."
-msgstr "-mcpu=CPU\tAnvänd funktioner i och optimera för angiven CPU"
+msgstr "-mcpu=CPU\tAnvänd funktioner i och optimera för angiven CPU."
#: config/aarch64/aarch64.opt:128
-#, fuzzy
-#| msgid "-mtune=CPU\tOptimize for CPU"
msgid "-mtune=CPU\tOptimize for CPU."
-msgstr "-mtune=CPU\tOptimera för CPU"
+msgstr "-mtune=CPU\tOptimera för CPU."
#: config/aarch64/aarch64.opt:132
-#, fuzzy
-#| msgid "-mabi=ABI\tGenerate code that conforms to the specified ABI"
msgid "-mabi=ABI\tGenerate code that conforms to the specified ABI."
-msgstr "-mabi=ABI\tGenerera kod som följer det angivna ABI:et"
+msgstr "-mabi=ABI\tGenerera kod som följer det angivna ABI:et."
#: config/aarch64/aarch64.opt:136
msgid "-moverride=STRING\tPower users only! Override CPU optimization parameters."
@@ -9350,391 +8086,267 @@ msgstr "Kända AArch64-ABI:er (att användas med flaggan -mabi=):"
#: config/aarch64/aarch64.opt:150
msgid "PC relative literal loads."
-msgstr "PC-relativa literala läsningar."
+msgstr "PC-relativa literala laddningar."
#: config/aarch64/aarch64.opt:154
msgid "When calculating a sqrt approximation, run fewer steps."
msgstr "Vid beräkning av sqrt-approximering, kör färre steg."
#: config/linux.opt:24
-#, fuzzy
-#| msgid "Use Bionic C library"
msgid "Use Bionic C library."
-msgstr "Använd C-biblioteket Bionic"
+msgstr "Använd C-biblioteket Bionic."
#: config/linux.opt:28
-#, fuzzy
-#| msgid "Use GNU C library"
msgid "Use GNU C library."
-msgstr "Använd GNU C-bibliotek"
+msgstr "Använd GNU C-bibliotek."
#: config/linux.opt:32
-#, fuzzy
-#| msgid "Use uClibc C library"
msgid "Use uClibc C library."
-msgstr "Använd C-biblioteket uClibc"
+msgstr "Använd C-biblioteket uClibc."
#: config/linux.opt:36
-#, fuzzy
-#| msgid "Use uClibc C library"
msgid "Use musl C library."
-msgstr "Använd C-biblioteket uClibc"
+msgstr "Använd C-biblioteket musl."
#: config/ia64/ilp32.opt:3
-#, fuzzy
-#| msgid "Generate ILP32 code"
msgid "Generate ILP32 code."
-msgstr "Generera ILP32-kod"
+msgstr "Generera ILP32-kod."
#: config/ia64/ilp32.opt:7
-#, fuzzy
-#| msgid "Generate LP64 code"
msgid "Generate LP64 code."
-msgstr "Generera LP64-kod"
+msgstr "Generera LP64-kod."
#: config/ia64/ia64.opt:28
-#, fuzzy
-#| msgid "Generate big endian code"
msgid "Generate big endian code."
-msgstr "Generera kod med rak byteordning"
+msgstr "Generera kod med rak byteordning."
#: config/ia64/ia64.opt:32
-#, fuzzy
-#| msgid "Generate little endian code"
msgid "Generate little endian code."
-msgstr "Generera kod med omvänd byteordning"
+msgstr "Generera kod med omvänd byteordning."
#: config/ia64/ia64.opt:36
-#, fuzzy
-#| msgid "Generate code for GNU as"
msgid "Generate code for GNU as."
-msgstr "Generera kod för GNU as"
+msgstr "Generera kod för GNU as."
#: config/ia64/ia64.opt:40
-#, fuzzy
-#| msgid "Generate code for GNU ld"
msgid "Generate code for GNU ld."
-msgstr "Generera kod för GNU ld"
+msgstr "Generera kod för GNU ld."
#: config/ia64/ia64.opt:44
-#, fuzzy
-#| msgid "Emit stop bits before and after volatile extended asms"
msgid "Emit stop bits before and after volatile extended asms."
-msgstr "Mata ut stoppbitar före och efter flyktiga utökade asm:er"
+msgstr "Mata ut stoppbitar före och efter flyktiga utökade asm:er."
#: config/ia64/ia64.opt:48
-#, fuzzy
-#| msgid "Use in/loc/out register names"
msgid "Use in/loc/out register names."
-msgstr "Använd in/loc/out-registernamn"
+msgstr "Använd in/loc/out-registernamn."
#: config/ia64/ia64.opt:55
-#, fuzzy
-#| msgid "Enable use of sdata/scommon/sbss"
msgid "Enable use of sdata/scommon/sbss."
-msgstr "Aktivera användningen av sdata/scommon/sbss"
+msgstr "Aktivera användningen av sdata/scommon/sbss."
#: config/ia64/ia64.opt:59
-#, fuzzy
-#| msgid "Generate code without GP reg"
msgid "Generate code without GP reg."
-msgstr "Generera kod utan GP-reg"
+msgstr "Generera kod utan GP-reg."
#: config/ia64/ia64.opt:63
-#, fuzzy
-#| msgid "gp is constant (but save/restore gp on indirect calls)"
msgid "gp is constant (but save/restore gp on indirect calls)."
-msgstr "gp är konstant (men spara/återställ gp vid indirekta anrop)"
+msgstr "gp är konstant (men spara/återställ gp vid indirekta anrop)."
#: config/ia64/ia64.opt:67
-#, fuzzy
-#| msgid "Generate self-relocatable code"
msgid "Generate self-relocatable code."
-msgstr "Generera självomlokaliserbar kod"
+msgstr "Generera självomlokaliserbar kod."
#: config/ia64/ia64.opt:71
-#, fuzzy
-#| msgid "Generate inline floating point division, optimize for latency"
msgid "Generate inline floating point division, optimize for latency."
-msgstr "Generera inline flyttalsdivision, optimera för svarstid"
+msgstr "Generera inline flyttalsdivision, optimera för svarstid."
#: config/ia64/ia64.opt:75
-#, fuzzy
-#| msgid "Generate inline floating point division, optimize for throughput"
msgid "Generate inline floating point division, optimize for throughput."
-msgstr "Generera inline flyttalsdivision, optimera för genomströmning"
+msgstr "Generera inline flyttalsdivision, optimera för genomströmning."
#: config/ia64/ia64.opt:82
-#, fuzzy
-#| msgid "Generate inline integer division, optimize for latency"
msgid "Generate inline integer division, optimize for latency."
-msgstr "Generera inline heltalsdivision, optimera för svarstid"
+msgstr "Generera inline heltalsdivision, optimera för svarstid."
#: config/ia64/ia64.opt:86
-#, fuzzy
-#| msgid "Generate inline integer division, optimize for throughput"
msgid "Generate inline integer division, optimize for throughput."
-msgstr "Generera inline heltalsdivision, optimera för genomströmning"
+msgstr "Generera inline heltalsdivision, optimera för genomströmning."
#: config/ia64/ia64.opt:90
-#, fuzzy
-#| msgid "Do not inline integer division"
msgid "Do not inline integer division."
-msgstr "Inline:a inte heltalsdivision"
+msgstr "Inline:a inte heltalsdivision."
#: config/ia64/ia64.opt:94
-#, fuzzy
-#| msgid "Generate inline square root, optimize for latency"
msgid "Generate inline square root, optimize for latency."
-msgstr "Generera inline kvadratrot, optimera för svarstid"
+msgstr "Generera inline kvadratrot, optimera för svarstid."
#: config/ia64/ia64.opt:98
-#, fuzzy
-#| msgid "Generate inline square root, optimize for throughput"
msgid "Generate inline square root, optimize for throughput."
-msgstr "Generera inline kvadratrot, optimera för genomströmning"
+msgstr "Generera inline kvadratrot, optimera för genomströmning."
#: config/ia64/ia64.opt:102
-#, fuzzy
-#| msgid "Do not inline square root"
msgid "Do not inline square root."
-msgstr "Inline:a inte kvadratrot"
+msgstr "Inline:a inte kvadratrot."
#: config/ia64/ia64.opt:106
-#, fuzzy
-#| msgid "Enable Dwarf 2 line debug info via GNU as"
msgid "Enable DWARF line debug info via GNU as."
-msgstr "Aktivera Dwarf 2 radfelsökningsinformation via GNU as"
+msgstr "Aktivera DWARF radfelsökningsinformation via GNU as."
#: config/ia64/ia64.opt:110
-#, fuzzy
-#| msgid "Enable earlier placing stop bits for better scheduling"
msgid "Enable earlier placing stop bits for better scheduling."
-msgstr "Aktivera tidigare utplacering av stoppbitar för bättre schemaläggning"
+msgstr "Aktivera tidigare utplacering av stoppbitar för bättre schemaläggning."
#: config/ia64/ia64.opt:114 config/spu/spu.opt:72 config/pa/pa.opt:58
#: config/sh/sh.opt:273
-#, fuzzy
-#| msgid "Specify range of registers to make fixed"
msgid "Specify range of registers to make fixed."
-msgstr "Ange intervall av register att fixera"
+msgstr "Ange intervall av register att fixera."
#: config/ia64/ia64.opt:118 config/rs6000/sysv4.opt:32
#: config/alpha/alpha.opt:130
-#, fuzzy
-#| msgid "Specify bit size of immediate TLS offsets"
msgid "Specify bit size of immediate TLS offsets."
-msgstr "Ange bitstorlek på omedelbara TLS-avstånd"
+msgstr "Ange bitstorlek på omedelbara TLS-avstånd."
#: config/ia64/ia64.opt:122 config/spu/spu.opt:84 config/i386/i386.opt:504
#: config/s390/s390.opt:170 config/sparc/sparc.opt:126
#: config/visium/visium.opt:49
-#, fuzzy
-#| msgid "Schedule code for given CPU"
msgid "Schedule code for given CPU."
-msgstr "Schemalägg kod för en given CPU"
+msgstr "Schemalägg kod för en given CPU."
#: config/ia64/ia64.opt:126
msgid "Known Itanium CPUs (for use with the -mtune= option):"
msgstr "Kända Itanium-CPU:er (att användas med flaggan -mtune=):"
#: config/ia64/ia64.opt:136
-#, fuzzy
-#| msgid "Use data speculation before reload"
msgid "Use data speculation before reload."
-msgstr "Använd dataspekulation före omläsning"
+msgstr "Använd dataspekulation före omläsning."
#: config/ia64/ia64.opt:140
-#, fuzzy
-#| msgid "Use data speculation after reload"
msgid "Use data speculation after reload."
-msgstr "Använd dataspekulation efter omläsning"
+msgstr "Använd dataspekulation efter omläsning."
#: config/ia64/ia64.opt:144
-#, fuzzy
-#| msgid "Use control speculation"
msgid "Use control speculation."
-msgstr "Använd styrspekulation"
+msgstr "Använd styrspekulation."
#: config/ia64/ia64.opt:148
-#, fuzzy
-#| msgid "Use in block data speculation before reload"
msgid "Use in block data speculation before reload."
-msgstr "Använd inblocksdataspekulation före omläsning"
+msgstr "Använd inblocksdataspekulation före omläsning."
#: config/ia64/ia64.opt:152
-#, fuzzy
-#| msgid "Use in block data speculation after reload"
msgid "Use in block data speculation after reload."
-msgstr "Använd inblocksdataspekulation efter omläsning"
+msgstr "Använd inblocksdataspekulation efter omläsning."
#: config/ia64/ia64.opt:156
-#, fuzzy
-#| msgid "Use in block control speculation"
msgid "Use in block control speculation."
-msgstr "Använd inblocksstyrspekulation"
+msgstr "Använd inblocksstyrspekulation."
#: config/ia64/ia64.opt:160
-#, fuzzy
-#| msgid "Use simple data speculation check"
msgid "Use simple data speculation check."
-msgstr "Använd enkel dataspekulationskontroll"
+msgstr "Använd enkel dataspekulationskontroll."
#: config/ia64/ia64.opt:164
-#, fuzzy
-#| msgid "Use simple data speculation check for control speculation"
msgid "Use simple data speculation check for control speculation."
-msgstr "Använd enkel dataspekulationskontroll för styrspekulation"
+msgstr "Använd enkel dataspekulationskontroll för styrspekulation."
#: config/ia64/ia64.opt:174
-#, fuzzy
-#| msgid "Count speculative dependencies while calculating priority of instructions"
msgid "Count speculative dependencies while calculating priority of instructions."
-msgstr "Räkna spekulativa beroenden vid beräkning av prioritet för instruktioner"
+msgstr "Räkna spekulativa beroenden vid beräkning av prioritet för instruktioner."
#: config/ia64/ia64.opt:178
-#, fuzzy
-#| msgid "Place a stop bit after every cycle when scheduling"
msgid "Place a stop bit after every cycle when scheduling."
-msgstr "Placera en stoppbit efter varje cykel vid schemaläggning"
+msgstr "Placera en stoppbit efter varje cykel vid schemaläggning."
#: config/ia64/ia64.opt:182
-#, fuzzy
-#| msgid "Assume that floating-point stores and loads are not likely to cause conflict when placed into one instruction group"
msgid "Assume that floating-point stores and loads are not likely to cause conflict when placed into one instruction group."
-msgstr "Anta att flyttalslagringar och -laddningar troligen inte orsakar konflikter när de placeras i en instruktionsgrupp"
+msgstr "Anta att flyttalslagringar och -laddningar troligen inte orsakar konflikter när de placeras i en instruktionsgrupp."
#: config/ia64/ia64.opt:186
-#, fuzzy
-#| msgid "Soft limit on number of memory insns per instruction group, giving lower priority to subsequent memory insns attempting to schedule in the same insn group. Frequently useful to prevent cache bank conflicts. Default value is 1"
msgid "Soft limit on number of memory insns per instruction group, giving lower priority to subsequent memory insns attempting to schedule in the same insn group. Frequently useful to prevent cache bank conflicts. Default value is 1."
-msgstr "Mjuk gräns på antalet minnesinstruktioner per instruktionsgrupp, ger lägre prioritet till försök att schemalägga senare minnesinstruktioner i samma instruktionsgrupp. Ofta användbart för att hindra konflikter mellan cache-bankar. Standardvärdet är 1"
+msgstr "Mjuk gräns på antalet minnesinstruktioner per instruktionsgrupp, ger lägre prioritet till försök att schemalägga senare minnesinstruktioner i samma instruktionsgrupp. Ofta användbart för att hindra konflikter mellan cache-bankar. Standardvärdet är 1."
#: config/ia64/ia64.opt:190
-#, fuzzy
-#| msgid "Disallow more than 'msched-max-memory-insns' in instruction group. Otherwise, limit is 'soft' (prefer non-memory operations when limit is reached)"
msgid "Disallow more than 'msched-max-memory-insns' in instruction group. Otherwise, limit is 'soft' (prefer non-memory operations when limit is reached)."
-msgstr "TillÃ¥t inte mer än â€msched-max-memory-insns†i instruktionsgrupper. Annars är gränsen â€mjuk†(föredra icke-minnesoperationer när gränsen är nÃ¥dd)"
+msgstr "TillÃ¥t inte mer än â€msched-max-memory-insns†i instruktionsgrupper. Annars är gränsen â€mjuk†(föredra icke-minnesoperationer när gränsen är nÃ¥dd)."
#: config/ia64/ia64.opt:194
-#, fuzzy
-#| msgid "Don't generate checks for control speculation in selective scheduling"
msgid "Don't generate checks for control speculation in selective scheduling."
-msgstr "Generera inte kontroller av styrningsspekulation i selektiv schemaläggning"
+msgstr "Generera inte kontroller av styrningsspekulation i selektiv schemaläggning."
#: config/spu/spu.opt:20
-#, fuzzy
-#| msgid "Emit warnings when run-time relocations are generated"
msgid "Emit warnings when run-time relocations are generated."
-msgstr "Generera varningar när körtidsomlokaliseringar genereras"
+msgstr "Generera varningar när körtidsomlokaliseringar genereras."
#: config/spu/spu.opt:24
-#, fuzzy
-#| msgid "Emit errors when run-time relocations are generated"
msgid "Emit errors when run-time relocations are generated."
-msgstr "Generera felmeddelanden när körtidsomlokaliseringar genereras"
+msgstr "Generera felmeddelanden när körtidsomlokaliseringar genereras."
#: config/spu/spu.opt:28
-#, fuzzy
-#| msgid "Specify cost of branches (Default 20)"
msgid "Specify cost of branches (Default 20)."
-msgstr "Ange kostnaden för grenar (normalt 20)"
+msgstr "Ange kostnaden för grenar (normalt 20)."
#: config/spu/spu.opt:32
-#, fuzzy
-#| msgid "Make sure loads and stores are not moved past DMA instructions"
msgid "Make sure loads and stores are not moved past DMA instructions."
-msgstr "Säkerställ att inläsningar och lagringar inte flyttas förbi DMA-instruktioner"
+msgstr "Säkerställ att laddningar och lagringar inte flyttas förbi DMA-instruktioner."
#: config/spu/spu.opt:36
-#, fuzzy
-#| msgid "volatile must be specified on any memory that is effected by DMA"
msgid "volatile must be specified on any memory that is effected by DMA."
-msgstr "volatile måste anges för allt minne som påverkas av DMA"
+msgstr "volatile måste anges för allt minne som påverkas av DMA."
#: config/spu/spu.opt:40 config/spu/spu.opt:44
-#, fuzzy
-#| msgid "Insert nops when it might improve performance by allowing dual issue (default)"
msgid "Insert nops when it might improve performance by allowing dual issue (default)."
-msgstr "Skjut in nop:ar när det kan förbättra prestanda genom att tillåta dubbel utgivning (standard)"
+msgstr "Skjut in nop:ar när det kan förbättra prestanda genom att tillåta dubbel utgivning (standard)."
#: config/spu/spu.opt:48
-#, fuzzy
-#| msgid "Use standard main function as entry for startup"
msgid "Use standard main function as entry for startup."
-msgstr "Använd standard main-funktion som ingång vid uppstart"
+msgstr "Använd standard main-funktion som ingång vid uppstart."
#: config/spu/spu.opt:52
-#, fuzzy
-#| msgid "Generate branch hints for branches"
msgid "Generate branch hints for branches."
-msgstr "Generera grentips för grenar"
+msgstr "Generera grentips för grenar."
#: config/spu/spu.opt:56
-#, fuzzy
-#| msgid "Maximum number of nops to insert for a hint (Default 2)"
msgid "Maximum number of nops to insert for a hint (Default 2)."
-msgstr "Det maximala antalet nop-instruktioner att skjuta in för ett tips (standard 2)"
+msgstr "Det maximala antalet nop-instruktioner att skjuta in för ett tips (standard 2)."
#: config/spu/spu.opt:60
-#, fuzzy
-#| msgid "Approximate maximum number of instructions to allow between a hint and its branch [125]"
msgid "Approximate maximum number of instructions to allow between a hint and its branch [125]."
-msgstr "Ungefärligt antal instruktioner att tillåta mellan ett tips och dess gren [125]"
+msgstr "Ungefärligt antal instruktioner att tillåta mellan ett tips och dess gren [125]."
#: config/spu/spu.opt:64
-#, fuzzy
-#| msgid "Generate code for 18 bit addressing"
msgid "Generate code for 18 bit addressing."
-msgstr "Generera kod för 18-bitars adressering"
+msgstr "Generera kod för 18-bitars adressering."
#: config/spu/spu.opt:68
-#, fuzzy
-#| msgid "Generate code for 32 bit addressing"
msgid "Generate code for 32 bit addressing."
-msgstr "Generera kod för 32-bitars adressering"
+msgstr "Generera kod för 32-bitars adressering."
#: config/spu/spu.opt:76
-#, fuzzy
-#| msgid "Insert hbrp instructions after hinted branch targets to avoid the SPU hang issue"
msgid "Insert hbrp instructions after hinted branch targets to avoid the SPU hang issue."
-msgstr "Lägg in hbrp-instruktioner efter grenmål med tips för att undvika problemet med hängd SPU"
+msgstr "Lägg in hbrp-instruktioner efter grenmål med tips för att undvika problemet med hängd SPU."
#: config/spu/spu.opt:80 config/i386/i386.opt:247 config/s390/s390.opt:56
-#, fuzzy
-#| msgid "Generate code for given CPU"
msgid "Generate code for given CPU."
-msgstr "Generera kod för en given CPU"
+msgstr "Generera kod för en given CPU."
#: config/spu/spu.opt:88
-#, fuzzy
-#| msgid "Access variables in 32-bit PPU objects (default)"
msgid "Access variables in 32-bit PPU objects (default)."
-msgstr "Kom åt variabler i 32-bitars PPU-objekt (standard)"
+msgstr "Kom åt variabler i 32-bitars PPU-objekt (standard)."
#: config/spu/spu.opt:92
-#, fuzzy
-#| msgid "Access variables in 64-bit PPU objects"
msgid "Access variables in 64-bit PPU objects."
-msgstr "Kom åt variabler i 64-bitars PPU-objekt"
+msgstr "Kom åt variabler i 64-bitars PPU-objekt."
#: config/spu/spu.opt:96
-#, fuzzy
-#| msgid "Allow conversions between __ea and generic pointers (default)"
msgid "Allow conversions between __ea and generic pointers (default)."
-msgstr "Tillåt konvertering mellan __ea och generiska pekare (standard)"
+msgstr "Tillåt konvertering mellan __ea och generiska pekare (standard)."
#: config/spu/spu.opt:100
-#, fuzzy
-#| msgid "Size (in KB) of software data cache"
msgid "Size (in KB) of software data cache."
-msgstr "Storlek (i kB) på programmets data-cache"
+msgstr "Storlek (i kB) på programmets data-cache."
#: config/spu/spu.opt:104
-#, fuzzy
-#| msgid "Atomically write back software data cache lines (default)"
msgid "Atomically write back software data cache lines (default)."
-msgstr "Skriv atomärt tillbaka programmets data-cache-rader (standard)"
+msgstr "Skriv atomärt tillbaka programmets data-cache-rader (standard)."
#: config/epiphany/epiphany.opt:24
msgid "Don't use any of r32..r63."
@@ -9745,44 +8357,32 @@ msgid "preferentially allocate registers that allow short instruction generation
msgstr "allokera företrädesvis register som tillåter generering av korta instruktioner"
#: config/epiphany/epiphany.opt:32
-#, fuzzy
-#| msgid "Set branch cost"
msgid "Set branch cost."
-msgstr "Sätt grenkostnad"
+msgstr "Sätt grenkostnad."
#: config/epiphany/epiphany.opt:36
msgid "enable conditional move instruction usage."
msgstr "aktivera användning av villkorliga flyttinstruktioner."
#: config/epiphany/epiphany.opt:40
-#, fuzzy
-#| msgid "set number of nops to emit before each insn pattern"
msgid "set number of nops to emit before each insn pattern."
-msgstr "sätt antalet nop:ar att mata ut före varje instruktionsmönster"
+msgstr "sätt antalet nop:ar att mata ut före varje instruktionsmönster."
#: config/epiphany/epiphany.opt:52
-#, fuzzy
-#| msgid "Use software floating point comparisons"
msgid "Use software floating point comparisons."
-msgstr "Använd flyttalsjämförelser i programvara"
+msgstr "Använd flyttalsjämförelser i programvara."
#: config/epiphany/epiphany.opt:56
-#, fuzzy
-#| msgid "Enable split of 32 bit immediate loads into low / high part"
msgid "Enable split of 32 bit immediate loads into low / high part."
-msgstr "Aktivera delning av 32-bitars omedelbara laddningar i låg/hög del"
+msgstr "Aktivera delning av 32-bitars omedelbara laddningar i låg/hög del."
#: config/epiphany/epiphany.opt:60
-#, fuzzy
-#| msgid "Enable use of POST_INC / POST_DEC"
msgid "Enable use of POST_INC / POST_DEC."
-msgstr "Aktivera användning av POST_INC/POST_DEC"
+msgstr "Aktivera användning av POST_INC/POST_DEC."
#: config/epiphany/epiphany.opt:64
-#, fuzzy
-#| msgid "Enable use of POST_MODIFY"
msgid "Enable use of POST_MODIFY."
-msgstr "Aktivera användning av POST_MODIFY"
+msgstr "Aktivera användning av POST_MODIFY."
#: config/epiphany/epiphany.opt:68
msgid "Set number of bytes on the stack preallocated for use by the callee."
@@ -9793,26 +8393,20 @@ msgid "Assume round to nearest is selected for purposes of scheduling."
msgstr "Anta avrundning till närmaste är valt i schemaläggningssyfte."
#: config/epiphany/epiphany.opt:76
-#, fuzzy
-#| msgid "Generate call insns as indirect calls"
msgid "Generate call insns as indirect calls."
-msgstr "Generera anropsinstruktioner som indirekta anrop"
+msgstr "Generera anropsinstruktioner som indirekta anrop."
#: config/epiphany/epiphany.opt:80
-#, fuzzy
-#| msgid "Generate call insns as direct calls"
msgid "Generate call insns as direct calls."
-msgstr "Generera anropsinstruktioner som indirekta anrop"
+msgstr "Generera anropsinstruktioner som indirekta anrop."
#: config/epiphany/epiphany.opt:84
msgid "Assume labels and symbols can be addressed using 16 bit absolute addresses."
msgstr "Anta att etiketter och symboler kan adresseras med 16-bitars absoluta adresser."
#: config/epiphany/epiphany.opt:108
-#, fuzzy
-#| msgid "A floatig point to integer truncation may be replaced with rounding to save mode switching"
msgid "A floatig point to integer truncation may be replaced with rounding to save mode switching."
-msgstr "En avhuggning från flyttal till heltal får ersättas med avrundning för att spara lägesbyten"
+msgstr "En avhuggning från flyttal till heltal får ersättas med avrundning för att spara lägesbyten."
#: config/epiphany/epiphany.opt:112
msgid "Vectorize for double-word operations."
@@ -9836,406 +8430,280 @@ msgstr "ha programvarusimulatorn som mål."
#: config/ft32/ft32.opt:27 config/s390/s390.opt:201
#: config/rs6000/rs6000.opt:474 config/mips/mips.opt:385
-#, fuzzy
-#| msgid "Use LRA instead of reload"
msgid "Use LRA instead of reload."
-msgstr "Använd LRA istället för omladdning"
+msgstr "Använd LRA istället för omladdning."
#: config/h8300/h8300.opt:23
-#, fuzzy
-#| msgid "Generate H8S code"
msgid "Generate H8S code."
-msgstr "Generera H8S-kod"
+msgstr "Generera H8S-kod."
#: config/h8300/h8300.opt:27
-#, fuzzy
-#| msgid "Generate H8SX code"
msgid "Generate H8SX code."
-msgstr "Generera H8SX-kod"
+msgstr "Generera H8SX-kod."
#: config/h8300/h8300.opt:31
-#, fuzzy
-#| msgid "Generate H8S/2600 code"
msgid "Generate H8S/2600 code."
-msgstr "Generera H8S/2600-kod"
+msgstr "Generera H8S/2600-kod."
#: config/h8300/h8300.opt:35
-#, fuzzy
-#| msgid "Make integers 32 bits wide"
msgid "Make integers 32 bits wide."
-msgstr "Gör heltal 32 bitar stora"
+msgstr "Gör heltal 32 bitar stora."
#: config/h8300/h8300.opt:42
-#, fuzzy
-#| msgid "Use registers for argument passing"
msgid "Use registers for argument passing."
-msgstr "Använd register för argumentskickning"
+msgstr "Använd register för argumentskickning."
#: config/h8300/h8300.opt:46
-#, fuzzy
-#| msgid "Consider access to byte sized memory slow"
msgid "Consider access to byte sized memory slow."
-msgstr "Betrakta åtkomst till bytestort minne som långsam"
+msgstr "Betrakta åtkomst till bytestort minne som långsam."
#: config/h8300/h8300.opt:50
-#, fuzzy
-#| msgid "Enable linker relaxing"
msgid "Enable linker relaxing."
-msgstr "Aktivera länkaravslappning"
+msgstr "Aktivera länkaravslappning."
#: config/h8300/h8300.opt:54
-#, fuzzy
-#| msgid "Generate H8/300H code"
msgid "Generate H8/300H code."
-msgstr "Generera H8/300H-kod"
+msgstr "Generera H8/300H-kod."
#: config/h8300/h8300.opt:58
-#, fuzzy
-#| msgid "Enable the normal mode"
msgid "Enable the normal mode."
-msgstr "Aktivera normalt läge"
+msgstr "Aktivera normalt läge."
#: config/h8300/h8300.opt:62
-#, fuzzy
-#| msgid "Use H8/300 alignment rules"
msgid "Use H8/300 alignment rules."
-msgstr "Använd H8/300-regler för justering"
+msgstr "Använd H8/300-regler för justering."
#: config/h8300/h8300.opt:66
-#, fuzzy
-#| msgid "Push extended registers on stack in monitor functions"
msgid "Push extended registers on stack in monitor functions."
-msgstr "Skicka ut utökade register på stacken i övervakningsfunktioner"
+msgstr "Skicka ut utökade register på stacken i övervakningsfunktioner."
#: config/h8300/h8300.opt:70
-#, fuzzy
-#| msgid "Do not push extended registers on stack in monitor functions"
msgid "Do not push extended registers on stack in monitor functions."
-msgstr "Skicka inte ut utökade register på stacken i övervakningsfunktioner"
+msgstr "Skicka inte ut utökade register på stacken i övervakningsfunktioner."
#: config/pdp11/pdp11.opt:23
-#, fuzzy
-#| msgid "Generate code for an 11/10"
msgid "Generate code for an 11/10."
-msgstr "Generera kod för 11/10"
+msgstr "Generera kod för 11/10."
#: config/pdp11/pdp11.opt:27
-#, fuzzy
-#| msgid "Generate code for an 11/40"
msgid "Generate code for an 11/40."
-msgstr "Generera kod för 11/40"
+msgstr "Generera kod för 11/40."
#: config/pdp11/pdp11.opt:31
-#, fuzzy
-#| msgid "Generate code for an 11/45"
msgid "Generate code for an 11/45."
-msgstr "Generera kod för 11/45"
+msgstr "Generera kod för 11/45."
#: config/pdp11/pdp11.opt:35
-#, fuzzy
-#| msgid "Return floating-point results in ac0 (fr0 in Unix assembler syntax)"
msgid "Return floating-point results in ac0 (fr0 in Unix assembler syntax)."
-msgstr "Returnera flyttalsresultat i ac0 (fr0 i assemblersyntax för Unix)"
+msgstr "Returnera flyttalsresultat i ac0 (fr0 i assemblersyntax för Unix)."
#: config/pdp11/pdp11.opt:39
-#, fuzzy
-#| msgid "Do not use inline patterns for copying memory"
msgid "Do not use inline patterns for copying memory."
-msgstr "Använd inte inline-mönster för att kopiera minne"
+msgstr "Använd inte inline-mönster för att kopiera minne."
#: config/pdp11/pdp11.opt:43
-#, fuzzy
-#| msgid "Use inline patterns for copying memory"
msgid "Use inline patterns for copying memory."
-msgstr "Använd inline-mönster för att kopiera minne"
+msgstr "Använd inline-mönster för att kopiera minne."
#: config/pdp11/pdp11.opt:47
-#, fuzzy
-#| msgid "Do not pretend that branches are expensive"
msgid "Do not pretend that branches are expensive."
-msgstr "Låtsas inte att grenar är dyra"
+msgstr "Låtsas inte att grenar är dyra."
#: config/pdp11/pdp11.opt:51
-#, fuzzy
-#| msgid "Pretend that branches are expensive"
msgid "Pretend that branches are expensive."
-msgstr "Låtsas att grenar är dyra"
+msgstr "Låtsas att grenar är dyra."
#: config/pdp11/pdp11.opt:55
-#, fuzzy
-#| msgid "Use the DEC assembler syntax"
msgid "Use the DEC assembler syntax."
-msgstr "Använd assemblersyntax för DEC"
+msgstr "Använd assemblersyntax för DEC."
#: config/pdp11/pdp11.opt:59
-#, fuzzy
-#| msgid "Use 32 bit float"
msgid "Use 32 bit float."
-msgstr "Använd 32 bits float"
+msgstr "Använd 32 bits float."
#: config/pdp11/pdp11.opt:63
-#, fuzzy
-#| msgid "Use 64 bit float"
msgid "Use 64 bit float."
-msgstr "Använd 64 bits float"
+msgstr "Använd 64 bits float."
#: config/pdp11/pdp11.opt:67 config/rs6000/rs6000.opt:177
#: config/frv/frv.opt:158
-#, fuzzy
-#| msgid "Use hardware floating point"
msgid "Use hardware floating point."
-msgstr "Använd hårdvaruflyttal"
+msgstr "Använd hårdvaruflyttal."
#: config/pdp11/pdp11.opt:71
-#, fuzzy
-#| msgid "Use 16 bit int"
msgid "Use 16 bit int."
-msgstr "Använd 16 bits int"
+msgstr "Använd 16 bits int."
#: config/pdp11/pdp11.opt:75
-#, fuzzy
-#| msgid "Use 32 bit int"
msgid "Use 32 bit int."
-msgstr "Använd 32 bits int"
+msgstr "Använd 32 bits int."
#: config/pdp11/pdp11.opt:79 config/rs6000/rs6000.opt:173
-#, fuzzy
-#| msgid "Do not use hardware floating point"
msgid "Do not use hardware floating point."
-msgstr "Använd inte hårdvaruflyttal"
+msgstr "Använd inte hårdvaruflyttal."
#: config/pdp11/pdp11.opt:83
-#, fuzzy
-#| msgid "Target has split I&D"
msgid "Target has split I&D."
-msgstr "MÃ¥let har uppdelat I&D"
+msgstr "MÃ¥let har uppdelat I&D."
#: config/pdp11/pdp11.opt:87
-#, fuzzy
-#| msgid "Use UNIX assembler syntax"
msgid "Use UNIX assembler syntax."
-msgstr "Använd assemblersyntax för UNIX"
+msgstr "Använd assemblersyntax för UNIX."
#: config/xtensa/xtensa.opt:23
-#, fuzzy
-#| msgid "Use CONST16 instruction to load constants"
msgid "Use CONST16 instruction to load constants."
-msgstr "Använd CONST16-instruktioner för att läsa konstanter"
+msgstr "Använd CONST16-instruktioner för att ladda konstanter."
#: config/xtensa/xtensa.opt:27
-#, fuzzy
-#| msgid "Disable position-independent code (PIC) for use in OS kernel code"
msgid "Disable position-independent code (PIC) for use in OS kernel code."
-msgstr "Avaktivera positionsoberoende kod (PIC) för användning i OS-kärnkod"
+msgstr "Avaktivera positionsoberoende kod (PIC) för användning i OS-kärnkod."
#: config/xtensa/xtensa.opt:31
-#, fuzzy
-#| msgid "Use indirect CALLXn instructions for large programs"
msgid "Use indirect CALLXn instructions for large programs."
-msgstr "Använd indirekta CALLXn-instruktioner för stora program"
+msgstr "Använd indirekta CALLXn-instruktioner för stora program."
#: config/xtensa/xtensa.opt:35
-#, fuzzy
-#| msgid "Automatically align branch targets to reduce branch penalties"
msgid "Automatically align branch targets to reduce branch penalties."
-msgstr "Justera automatiskt grenmål för att reducera grenstraff"
+msgstr "Justera automatiskt grenmål för att reducera grenstraff."
#: config/xtensa/xtensa.opt:39
-#, fuzzy
-#| msgid "Intersperse literal pools with code in the text section"
msgid "Intersperse literal pools with code in the text section."
-msgstr "Växla mellan bokstavliga pooler och kod i textsektionen"
+msgstr "Växla mellan bokstavliga pooler och kod i textsektionen."
#: config/xtensa/xtensa.opt:43
msgid "Relax literals in assembler and place them automatically in the text section."
msgstr "Lätta på literaler i assemblern och placera dem automatiskt i textsegmentet."
#: config/xtensa/xtensa.opt:47
-#, fuzzy
-#| msgid "-mno-serialize-volatile\tDo not serialize volatile memory references with MEMW instructions"
msgid "-mno-serialize-volatile\tDo not serialize volatile memory references with MEMW instructions."
-msgstr "-mno-serialize-volatile\tSerialisera inte minnesreferenser till flyktigt minne med MEMW-instruktioner"
+msgstr "-mno-serialize-volatile\tSerialisera inte minnesreferenser till flyktigt minne med MEMW-instruktioner."
#: config/i386/cygming.opt:23
-#, fuzzy
-#| msgid "Create console application"
msgid "Create console application."
-msgstr "Skapa konsolapplikation"
+msgstr "Skapa konsolapplikation."
#: config/i386/cygming.opt:27
-#, fuzzy
-#| msgid "Generate code for a DLL"
msgid "Generate code for a DLL."
-msgstr "Generera kod för en DLL"
+msgstr "Generera kod för en DLL."
#: config/i386/cygming.opt:31
-#, fuzzy
-#| msgid "Ignore dllimport for functions"
msgid "Ignore dllimport for functions."
-msgstr "Ignorera dllimport för funktioner"
+msgstr "Ignorera dllimport för funktioner."
#: config/i386/cygming.opt:35
-#, fuzzy
-#| msgid "Use Mingw-specific thread support"
msgid "Use Mingw-specific thread support."
-msgstr "Använd Mingw-specifikt trådstöd"
+msgstr "Använd Mingw-specifikt trådstöd."
#: config/i386/cygming.opt:39
-#, fuzzy
-#| msgid "Set Windows defines"
msgid "Set Windows defines."
-msgstr "Sätt Windows-definitioner"
+msgstr "Sätt Windows-definitioner."
#: config/i386/cygming.opt:43
-#, fuzzy
-#| msgid "Create GUI application"
msgid "Create GUI application."
-msgstr "Skapa GUI-applikation"
+msgstr "Skapa GUI-applikation."
#: config/i386/cygming.opt:47 config/i386/interix.opt:32
-#, fuzzy
-#| msgid "Use the GNU extension to the PE format for aligned common data"
msgid "Use the GNU extension to the PE format for aligned common data."
-msgstr "Använd GNU-utvidgningarna för PE-formatet för justerade common-data"
+msgstr "Använd GNU-utvidgningarna för PE-formatet för justerade common-data."
#: config/i386/cygming.opt:51
-#, fuzzy
-#| msgid "Compile code that relies on Cygwin DLL wrappers to support C++ operator new/delete replacement"
msgid "Compile code that relies on Cygwin DLL wrappers to support C++ operator new/delete replacement."
-msgstr "Kompilera kod som litar på Cygwin:s DLL-inkapsling för att stödja ersättning av C++-operatorerna new/delete"
+msgstr "Kompilera kod som litar på Cygwin:s DLL-inkapsling för att stödja ersättning av C++-operatorerna new/delete."
#: config/i386/cygming.opt:58
msgid "Put relocated read-only data into .data section."
msgstr "Placera relokerad endast läsbar data i .data-sektionen."
#: config/i386/mingw.opt:29
-#, fuzzy
-#| msgid "Warn about none ISO msvcrt scanf/printf width extensions"
msgid "Warn about none ISO msvcrt scanf/printf width extensions."
-msgstr "Varna för msvcrt-breddutökningar av scanf/printf som inte följer ISO"
+msgstr "Varna för msvcrt-breddutökningar av scanf/printf som inte följer ISO."
#: config/i386/mingw.opt:33
msgid "For nested functions on stack executable permission is set."
msgstr "För nästade funktioner på stacken sätts exekveringsrättigheter."
#: config/i386/mingw-w64.opt:23
-#, fuzzy
-#| msgid "Use unicode startup and define UNICODE macro"
msgid "Use unicode startup and define UNICODE macro."
-msgstr "Använd unicode-uppstart och definiera ett UNICODE-makro"
+msgstr "Använd unicode-uppstart och definiera ett UNICODE-makro."
#: config/i386/i386.opt:182
-#, fuzzy
-#| msgid "sizeof(long double) is 16"
msgid "sizeof(long double) is 16."
-msgstr "sizeof(long double) är 16"
+msgstr "sizeof(long double) är 16."
# fixme: fp = flyttal, men hur skall man skriva det. Förkortat eller FPU?
#: config/i386/i386.opt:186 config/i386/i386.opt:354
-#, fuzzy
-#| msgid "Use hardware fp"
msgid "Use hardware fp."
-msgstr "Använd hårdvaru-fp"
+msgstr "Använd hårdvaru-fp."
#: config/i386/i386.opt:190
-#, fuzzy
-#| msgid "sizeof(long double) is 12"
msgid "sizeof(long double) is 12."
-msgstr "sizeof(long double) är 12"
+msgstr "sizeof(long double) är 12."
#: config/i386/i386.opt:194
-#, fuzzy
-#| msgid "Use 80-bit long double"
msgid "Use 80-bit long double."
-msgstr "Använd 80-bitars long double"
+msgstr "Använd 80-bitars long double."
#: config/i386/i386.opt:198 config/s390/s390.opt:130
#: config/sparc/long-double-switch.opt:27 config/alpha/alpha.opt:102
-#, fuzzy
-#| msgid "Use 64-bit long double"
msgid "Use 64-bit long double."
-msgstr "Använd 64-bitars long double"
+msgstr "Använd 64-bitars long double."
#: config/i386/i386.opt:202 config/s390/s390.opt:126
#: config/sparc/long-double-switch.opt:23 config/alpha/alpha.opt:98
-#, fuzzy
-#| msgid "Use 128-bit long double"
msgid "Use 128-bit long double."
-msgstr "Använd 128-bitars long double"
+msgstr "Använd 128-bitars long double."
#: config/i386/i386.opt:206 config/sh/sh.opt:209
-#, fuzzy
-#| msgid "Reserve space for outgoing arguments in the function prologue"
msgid "Reserve space for outgoing arguments in the function prologue."
-msgstr "Reservera utrymmer för utgående argument i funktionsprologen"
+msgstr "Reservera utrymmer för utgående argument i funktionsprologen."
#: config/i386/i386.opt:210
-#, fuzzy
-#| msgid "Align some doubles on dword boundary"
msgid "Align some doubles on dword boundary."
-msgstr "Justera några double på dword-gräns"
+msgstr "Justera några double på dword-gräns."
#: config/i386/i386.opt:214
-#, fuzzy
-#| msgid "Function starts are aligned to this power of 2"
msgid "Function starts are aligned to this power of 2."
-msgstr "Funktionsbörjan justeras till denna 2-potens"
+msgstr "Funktionsbörjan justeras till denna 2-potens."
#: config/i386/i386.opt:218
-#, fuzzy
-#| msgid "Jump targets are aligned to this power of 2"
msgid "Jump targets are aligned to this power of 2."
-msgstr "Hoppmål justeras till denna 2-potens"
+msgstr "Hoppmål justeras till denna 2-potens."
#: config/i386/i386.opt:222
-#, fuzzy
-#| msgid "Loop code aligned to this power of 2"
msgid "Loop code aligned to this power of 2."
-msgstr "Loop-kod justeras till denna 2-potens"
+msgstr "Loop-kod justeras till denna 2-potens."
#: config/i386/i386.opt:226
-#, fuzzy
-#| msgid "Align destination of the string operations"
msgid "Align destination of the string operations."
-msgstr "Justera målet för strängoperationerna"
+msgstr "Justera målet för strängoperationerna."
#: config/i386/i386.opt:230
-#, fuzzy
-#| msgid "Use the given data alignment"
msgid "Use the given data alignment."
-msgstr "Använd den angivna datajusteringen"
+msgstr "Använd den angivna datajusteringen."
#: config/i386/i386.opt:234
msgid "Known data alignment choices (for use with the -malign-data= option):"
msgstr "Kända val av datajustering (att användas med flaggan -malign-data=):"
#: config/i386/i386.opt:251
-#, fuzzy
-#| msgid "Use given assembler dialect"
msgid "Use given assembler dialect."
-msgstr "Använd angiven assemblerdialekt"
+msgstr "Använd angiven assemblerdialekt."
#: config/i386/i386.opt:255
msgid "Known assembler dialects (for use with the -masm-dialect= option):"
msgstr "Kända assemblerdialekter (att användas med flaggan -masm-dialect=):"
#: config/i386/i386.opt:265
-#, fuzzy
-#| msgid "Branches are this expensive (1-5, arbitrary units)"
msgid "Branches are this expensive (1-5, arbitrary units)."
-msgstr "Hopp är så här dyra (1-5, godtyckliga enheter)"
+msgstr "Hopp är så här dyra (1-5, godtyckliga enheter)."
#: config/i386/i386.opt:269
-#, fuzzy
-#| msgid "Data greater than given threshold will go into .ldata section in x86-64 medium model"
msgid "Data greater than given threshold will go into .ldata section in x86-64 medium model."
-msgstr "Data större än den angivna gränsen kommer hamna i .ldata-sektionen i x86-64 medelmodell"
+msgstr "Data större än den angivna gränsen kommer hamna i .ldata-sektionen i x86-64 medelmodell."
#: config/i386/i386.opt:273
-#, fuzzy
-#| msgid "Use given x86-64 code model"
msgid "Use given x86-64 code model."
-msgstr "Använd angiven x86-64 kodmodell"
+msgstr "Använd angiven x86-64 kodmodell."
#: config/i386/i386.opt:277 config/rs6000/aix64.opt:36
#: config/rs6000/linux64.opt:32 config/tilegx/tilegx.opt:57
@@ -10243,10 +8711,8 @@ msgid "Known code models (for use with the -mcmodel= option):"
msgstr "Kända kodmodeller (att användas med flaggan -mcmodel=):"
#: config/i386/i386.opt:296
-#, fuzzy
-#| msgid "Use given address mode"
msgid "Use given address mode."
-msgstr "Använd angivet adressläge"
+msgstr "Använd angivet adressläge."
#: config/i386/i386.opt:300
msgid "Known address mode (for use with the -maddress-mode= option):"
@@ -10257,214 +8723,153 @@ msgid "%<-mcpu=%> is deprecated; use %<-mtune=%> or %<-march=%> instead"
msgstr "%<-mcpu=%> bör undvikas. Använd %<-mtune=%> eller %<-march=%> istället."
#: config/i386/i386.opt:313
-#, fuzzy
-#| msgid "Generate sin, cos, sqrt for FPU"
msgid "Generate sin, cos, sqrt for FPU."
-msgstr "Generera sin, cos, sqrt för FPU"
+msgstr "Generera sin, cos, sqrt för FPU."
#: config/i386/i386.opt:317
-#, fuzzy
-#| msgid "Always use Dynamic Realigned Argument Pointer (DRAP) to realign stack"
msgid "Always use Dynamic Realigned Argument Pointer (DRAP) to realign stack."
-msgstr "Använd alltid Dynamic Realigned Argument Pointer (DRAP) för att justera stacken"
+msgstr "Använd alltid Dynamic Realigned Argument Pointer (DRAP) för att justera stacken."
#: config/i386/i386.opt:321
-#, fuzzy
-#| msgid "Return values of functions in FPU registers"
msgid "Return values of functions in FPU registers."
-msgstr "Returnera värden från funktioner i FPU-register"
+msgstr "Returnera värden från funktioner i FPU-register."
#: config/i386/i386.opt:325
-#, fuzzy
-#| msgid "Generate floating point mathematics using given instruction set"
msgid "Generate floating point mathematics using given instruction set."
-msgstr "Generera flyttalsmatematik med den angivna instruktionsuppsättningen"
+msgstr "Generera flyttalsmatematik med den angivna instruktionsuppsättningen."
#: config/i386/i386.opt:329
msgid "Valid arguments to -mfpmath=:"
msgstr "Giltiga argument till -mfpmath=:"
#: config/i386/i386.opt:362
-#, fuzzy
-#| msgid "Inline all known string operations"
msgid "Inline all known string operations."
-msgstr "Inline:a alla kända strängoperationer"
+msgstr "Inline:a alla kända strängoperationer."
#: config/i386/i386.opt:366
-#, fuzzy
-#| msgid "Inline memset/memcpy string operations, but perform inline version only for small blocks"
msgid "Inline memset/memcpy string operations, but perform inline version only for small blocks."
-msgstr "Inline:a memset/memcpy-strängoperationer, men använd inline-versionen endast för små block"
+msgstr "Inline:a memset/memcpy-strängoperationer, men använd inline-versionen endast för små block."
#: config/i386/i386.opt:369
msgid "%<-mintel-syntax%> and %<-mno-intel-syntax%> are deprecated; use %<-masm=intel%> and %<-masm=att%> instead"
msgstr "%<-mintel-syntax%> och %<-mno-intel-syntax%> bör undvikas. Använd %<-masm=intel%> och %<-masm=att%> istället"
#: config/i386/i386.opt:374
-#, fuzzy
-#| msgid "Use native (MS) bitfield layout"
msgid "Use native (MS) bitfield layout."
-msgstr "Använd inbyggd (MS) bitfältslayout"
+msgstr "Använd inbyggd (MS) bitfältslayout."
#: config/i386/i386.opt:394
-#, fuzzy
-#| msgid "Set 80387 floating-point precision to 32-bit"
msgid "Set 80387 floating-point precision to 32-bit."
-msgstr "Ange flyttalsprecision för 80387 till 32-bits"
+msgstr "Ange flyttalsprecision för 80387 till 32-bits."
#: config/i386/i386.opt:398
-#, fuzzy
-#| msgid "Set 80387 floating-point precision to 64-bit"
msgid "Set 80387 floating-point precision to 64-bit."
-msgstr "Ange flyttalsprecision för 80387 till 64-bits"
+msgstr "Ange flyttalsprecision för 80387 till 64-bits."
#: config/i386/i386.opt:402
-#, fuzzy
-#| msgid "Set 80387 floating-point precision to 80-bit"
msgid "Set 80387 floating-point precision to 80-bit."
-msgstr "Ange flyttalsprecision för 80387 till 80-bits"
+msgstr "Ange flyttalsprecision för 80387 till 80-bits."
#: config/i386/i386.opt:406
-#, fuzzy
-#| msgid "Attempt to keep stack aligned to this power of 2"
msgid "Attempt to keep stack aligned to this power of 2."
-msgstr "Försök håll stacken justerad till denna 2-potens"
+msgstr "Försök håll stacken justerad till denna 2-potens."
#: config/i386/i386.opt:410
-#, fuzzy
-#| msgid "Assume incoming stack aligned to this power of 2"
msgid "Assume incoming stack aligned to this power of 2."
-msgstr "Anta att inkommande stack är justerad till denna 2-potens"
+msgstr "Anta att inkommande stack är justerad till denna 2-potens."
#: config/i386/i386.opt:414
-#, fuzzy
-#| msgid "Use push instructions to save outgoing arguments"
msgid "Use push instructions to save outgoing arguments."
-msgstr "Använd push-instruktioner för att spara utgående argument"
+msgstr "Använd push-instruktioner för att spara utgående argument."
#: config/i386/i386.opt:418
-#, fuzzy
-#| msgid "Use red-zone in the x86-64 code"
msgid "Use red-zone in the x86-64 code."
-msgstr "Använd röd zon i x86-64-koden"
+msgstr "Använd röd zon i x86-64-koden."
#: config/i386/i386.opt:422
-#, fuzzy
-#| msgid "Number of registers used to pass integer arguments"
msgid "Number of registers used to pass integer arguments."
-msgstr "Antal register för att skicka heltalsargument"
+msgstr "Antal register för att skicka heltalsargument."
#: config/i386/i386.opt:426
-#, fuzzy
-#| msgid "Alternate calling convention"
msgid "Alternate calling convention."
-msgstr "Alternativ anropskonvention"
+msgstr "Alternativ anropskonvention."
#: config/i386/i386.opt:430 config/alpha/alpha.opt:23
-#, fuzzy
-#| msgid "Do not use hardware fp"
msgid "Do not use hardware fp."
-msgstr "Använd inte hårdvaru-fp"
+msgstr "Använd inte hårdvaru-fp."
#: config/i386/i386.opt:434
-#, fuzzy
-#| msgid "Use SSE register passing conventions for SF and DF mode"
msgid "Use SSE register passing conventions for SF and DF mode."
-msgstr "Använd konventioner för att skicka SSE-register i SF- och DF-läge"
+msgstr "Använd konventioner för att skicka SSE-register i SF- och DF-läge."
#: config/i386/i386.opt:438
-#, fuzzy
-#| msgid "Realign stack in prologue"
msgid "Realign stack in prologue."
-msgstr "Justera om stacken i prologen"
+msgstr "Justera om stacken i prologen."
#: config/i386/i386.opt:442
-#, fuzzy
-#| msgid "Enable stack probing"
msgid "Enable stack probing."
-msgstr "Aktivera stackavkänning"
+msgstr "Aktivera stackavkänning."
#: config/i386/i386.opt:446
-#, fuzzy
-#| msgid "Specify memcpy expansion strategy when expected size is known"
msgid "Specify memcpy expansion strategy when expected size is known."
-msgstr "Ange strategi för expansion av memcpy när den förväntade storleken är känd"
+msgstr "Ange strategi för expansion av memcpy när den förväntade storleken är känd."
#: config/i386/i386.opt:450
-#, fuzzy
-#| msgid "Specify memset expansion strategy when expected size is known"
msgid "Specify memset expansion strategy when expected size is known."
-msgstr "Ange strategi för expansion av memset när den förväntade storleken är känd"
+msgstr "Ange strategi för expansion av memset när den förväntade storleken är känd."
#: config/i386/i386.opt:454
-#, fuzzy
-#| msgid "Chose strategy to generate stringop using"
msgid "Chose strategy to generate stringop using."
-msgstr "Välj strategi för att generera stringop med"
+msgstr "Välj strategi för att generera stringop med."
#: config/i386/i386.opt:458
msgid "Valid arguments to -mstringop-strategy=:"
msgstr "Giltiga argument till -mstringop-strategy=:"
#: config/i386/i386.opt:486
-#, fuzzy
-#| msgid "Use given thread-local storage dialect"
msgid "Use given thread-local storage dialect."
-msgstr "Använd angiven trådlokal lagringsdialekt"
+msgstr "Använd angiven trådlokal lagringsdialekt."
#: config/i386/i386.opt:490
msgid "Known TLS dialects (for use with the -mtls-dialect= option):"
msgstr "Kända TLS-dialekter (att användas med flaggan -mtls-dialect=):"
#: config/i386/i386.opt:500
-#, fuzzy, c-format
-#| msgid "Use direct references against %gs when accessing tls data"
+#, c-format
msgid "Use direct references against %gs when accessing tls data."
-msgstr "Använd direkta referenser mot %gs vid åtkomst av tls-data"
+msgstr "Använd direkta referenser mot %gs vid åtkomst av tls-data."
#: config/i386/i386.opt:508
-#, fuzzy
-#| msgid "Fine grain control of tune features"
msgid "Fine grain control of tune features."
-msgstr "Finkornig styrning av trimningsfunktioner"
+msgstr "Finkornig styrning av trimningsfunktioner."
#: config/i386/i386.opt:512
-#, fuzzy
-#| msgid "Clear all tune features"
msgid "Clear all tune features."
-msgstr "Nollställ alla trimningsfunktioner"
+msgstr "Nollställ alla trimningsfunktioner."
#: config/i386/i386.opt:519
-#, fuzzy
-#| msgid "Generate code that conforms to the given ABI"
msgid "Generate code that conforms to Intel MCU psABI."
-msgstr "Generera kod som följer det angivna ABI:et"
+msgstr "Generera kod som följer Intel MCU psABI."
#: config/i386/i386.opt:523
-#, fuzzy
-#| msgid "Generate code that conforms to the given ABI"
msgid "Generate code that conforms to the given ABI."
-msgstr "Generera kod som följer det angivna ABI:et"
+msgstr "Generera kod som följer det angivna ABI:et."
#: config/i386/i386.opt:527
msgid "Known ABIs (for use with the -mabi= option):"
msgstr "Kända ABI:er (att användas med flaggan -mabi=):"
#: config/i386/i386.opt:537 config/rs6000/rs6000.opt:189
-#, fuzzy
-#| msgid "Vector library ABI to use"
msgid "Vector library ABI to use."
-msgstr "Vektorbiblioteks-ABI att använda"
+msgstr "Vektorbiblioteks-ABI att använda."
#: config/i386/i386.opt:541
msgid "Known vectorization library ABIs (for use with the -mveclibabi= option):"
msgstr "Kända ABI:er till vektoriseringsbibliotek (att användas med flaggan -mveclibabi=):"
#: config/i386/i386.opt:551
-#, fuzzy
-#| msgid "Return 8-byte vectors in memory"
msgid "Return 8-byte vectors in memory."
-msgstr "Returnera 8-bytesvektorer i minnet"
+msgstr "Returnera 8-bytesvektorer i minnet."
#: config/i386/i386.opt:555
msgid "Generate reciprocals instead of divss and sqrtss."
@@ -10489,198 +8894,136 @@ msgid "Disable Scalar to Vector optimization pass transforming 64-bit integer"
msgstr "Avaktivera transformering av 64-bitar heltal i optimeringspasset skalär till vektor"
#: config/i386/i386.opt:577
-#, fuzzy
-#| msgid "Do dispatch scheduling if processor is bdver1 or bdver2 or bdver3 or bdver4 and Haifa scheduling"
msgid "Do dispatch scheduling if processor is bdver1, bdver2, bdver3, bdver4"
-msgstr "Gör sändningsschemaläggning om processorn är bdver1 eller bdver2 eller bdver3 eller bdver4 och Haifa-schemaläggning"
+msgstr "Gör sändningsschemaläggning om processorn är bdver1, bdver2, bdver3, bdver4"
#: config/i386/i386.opt:582
msgid "Use 128-bit AVX instructions instead of 256-bit AVX instructions in the auto-vectorizer."
msgstr "Använd 128-bitars AVX-instruktioner istället för 256-bitars AVX-instruktioner i automatvektoriseraren."
#: config/i386/i386.opt:588
-#, fuzzy
-#| msgid "Generate 32bit i386 code"
msgid "Generate 32bit i386 code."
-msgstr "Generera 32-bitars i386-kod"
+msgstr "Generera 32-bitars i386-kod."
#: config/i386/i386.opt:592
-#, fuzzy
-#| msgid "Generate 64bit x86-64 code"
msgid "Generate 64bit x86-64 code."
-msgstr "Generera 64-bitars x86-64-kod"
+msgstr "Generera 64-bitars x86-64-kod."
#: config/i386/i386.opt:596
-#, fuzzy
-#| msgid "Generate 32bit x86-64 code"
msgid "Generate 32bit x86-64 code."
-msgstr "Generera 32-bitars x86-64-kod"
+msgstr "Generera 32-bitars x86-64-kod."
#: config/i386/i386.opt:600
-#, fuzzy
-#| msgid "Generate 16bit i386 code"
msgid "Generate 16bit i386 code."
-msgstr "Generera 16-bitars i386-kod"
+msgstr "Generera 16-bitars i386-kod."
#: config/i386/i386.opt:604
-#, fuzzy
-#| msgid "Support MMX built-in functions"
msgid "Support MMX built-in functions."
-msgstr "Stöd inbyggda MMX-funktioner"
+msgstr "Stöd inbyggda MMX-funktioner."
#: config/i386/i386.opt:608
-#, fuzzy
-#| msgid "Support 3DNow! built-in functions"
msgid "Support 3DNow! built-in functions."
-msgstr "Stöd inbyggda 3DNow!-funktioner"
+msgstr "Stöd inbyggda 3DNow!-funktioner."
#: config/i386/i386.opt:612
-#, fuzzy
-#| msgid "Support Athlon 3Dnow! built-in functions"
msgid "Support Athlon 3Dnow! built-in functions."
-msgstr "Stöd inbyggda Athlon 3Dnow!-funktioner"
+msgstr "Stöd inbyggda Athlon 3Dnow!-funktioner."
#: config/i386/i386.opt:616
-#, fuzzy
-#| msgid "Support MMX and SSE built-in functions and code generation"
msgid "Support MMX and SSE built-in functions and code generation."
-msgstr "Stöd inbyggda MMX- och SSE-funktioner och -kodgenerering"
+msgstr "Stöd inbyggda MMX- och SSE-funktioner och -kodgenerering."
#: config/i386/i386.opt:620
-#, fuzzy
-#| msgid "Support MMX, SSE and SSE2 built-in functions and code generation"
msgid "Support MMX, SSE and SSE2 built-in functions and code generation."
-msgstr "Stöd inbyggda MMX-, SSE- och SSE2-funktioner och -kodgenerering"
+msgstr "Stöd inbyggda MMX-, SSE- och SSE2-funktioner och -kodgenerering."
#: config/i386/i386.opt:624
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation"
msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation."
-msgstr "Stöd inbyggda MMX-, SSE-, SSE2- och SSE3-funktioner och -kodgenerering"
+msgstr "Stöd inbyggda MMX-, SSE-, SSE2- och SSE3-funktioner och -kodgenerering."
#: config/i386/i386.opt:628
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3 and SSSE3 built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3 and SSSE3 built-in functions and code generation."
-msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3- och SSSE3-funktioner och -kodgenerering"
+msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3- och SSSE3-funktioner och -kodgenerering."
#: config/i386/i386.opt:632
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3 and SSE4.1 built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3 and SSE4.1 built-in functions and code generation."
-msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3- och SSE4.1-funktioner och -kodgenerering"
+msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3- och SSE4.1-funktioner och -kodgenerering."
#: config/i386/i386.opt:636 config/i386/i386.opt:640
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 and SSE4.2 built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 and SSE4.2 built-in functions and code generation."
-msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1- och SSE4.2-funktioner och -kodgenerering"
+msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1- och SSE4.2-funktioner och -kodgenerering."
#: config/i386/i386.opt:644
-#, fuzzy
-#| msgid "Do not support SSE4.1 and SSE4.2 built-in functions and code generation"
msgid "Do not support SSE4.1 and SSE4.2 built-in functions and code generation."
-msgstr "Stöd inte inbyggda SSE4.1- och SSE4.2-funktioner och -kodgenerering"
+msgstr "Stöd inte inbyggda SSE4.1- och SSE4.2-funktioner och -kodgenerering."
#: config/i386/i386.opt:647
msgid "%<-msse5%> was removed"
msgstr "%<-msse5%> togs bort"
#: config/i386/i386.opt:652
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 and AVX built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 and AVX built-in functions and code generation."
-msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2- och AVX-funktioner och -kodgenerering"
+msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2- och AVX-funktioner och -kodgenerering."
#: config/i386/i386.opt:656
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and AVX2 built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and AVX2 built-in functions and code generation."
-msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX- och AVX2-funktioner och -kodgenerering"
+msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX- och AVX2-funktioner och -kodgenerering."
#: config/i386/i386.opt:660
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F built-in functions and code generation."
-msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX512F-funktioner och -kodgenerering"
+msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX512F-funktioner och -kodgenerering."
#: config/i386/i386.opt:664
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512PF built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512PF built-in functions and code generation."
-msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX512F- och AVX512PF-funktioner och -kodgenerering"
+msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX512F- och AVX512PF-funktioner och -kodgenerering."
#: config/i386/i386.opt:668
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512ER built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512ER built-in functions and code generation."
-msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX512F- och AVX512ER-funktioner och -kodgenerering"
+msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX512F- och AVX512ER-funktioner och -kodgenerering."
#: config/i386/i386.opt:672
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512CD built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512CD built-in functions and code generation."
-msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX512F- och AVX512CD-funktioner och -kodgenerering"
+msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX512F- och AVX512CD-funktioner och -kodgenerering."
#: config/i386/i386.opt:676
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512DQ built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512DQ built-in functions and code generation."
-msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX512F- och AVX512DQ-funktioner och -kodgenerering"
+msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX512F- och AVX512DQ-funktioner och -kodgenerering."
#: config/i386/i386.opt:680
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512BW built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512BW built-in functions and code generation."
-msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX512F- och AVX512BW-funktioner och -kodgenerering"
+msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX512F- och AVX512BW-funktioner och -kodgenerering."
#: config/i386/i386.opt:684
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512VL built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512VL built-in functions and code generation."
-msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX512F- och AVX512VL-funktioner och -kodgenerering"
+msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX512F- och AVX512VL-funktioner och -kodgenerering."
#: config/i386/i386.opt:688
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512IFMA built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512IFMA built-in functions and code generation."
-msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX512F- och AVX512IFMA-funktioner och -kodgenerering"
+msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX512F- och AVX512IFMA-funktioner och -kodgenerering."
#: config/i386/i386.opt:692
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512VBMI built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512VBMI built-in functions and code generation."
-msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX512F- och AVX512VBMI-funktioner och -kodgenerering"
+msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX512F- och AVX512VBMI-funktioner och -kodgenerering."
#: config/i386/i386.opt:696
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and FMA built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and FMA built-in functions and code generation."
-msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX- och FMA-funktioner och -kodgenerering"
+msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX- och FMA-funktioner och -kodgenerering."
#: config/i386/i386.opt:700
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3 and SSE4A built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3 and SSE4A built-in functions and code generation."
-msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3- och SSE4A-funktioner och -kodgenerering"
+msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3- och SSE4A-funktioner och -kodgenerering."
#: config/i386/i386.opt:704
-#, fuzzy
-#| msgid "Support FMA4 built-in functions and code generation "
msgid "Support FMA4 built-in functions and code generation."
-msgstr "Stöd inbyggda FMA4-funktioner och -kodgenerering "
+msgstr "Stöd inbyggda FMA4-funktioner och -kodgenerering."
#: config/i386/i386.opt:708
-#, fuzzy
-#| msgid "Support XOP built-in functions and code generation "
msgid "Support XOP built-in functions and code generation."
-msgstr "Stöd inbyggda XOP-funktioner och -kodgenerering "
+msgstr "Stöd inbyggda XOP-funktioner och -kodgenerering."
#: config/i386/i386.opt:712
-#, fuzzy
-#| msgid "Support LWP built-in functions and code generation "
msgid "Support LWP built-in functions and code generation."
-msgstr "Stöd inbyggda LWP-funktioner och -kodgenerering "
+msgstr "Stöd inbyggda LWP-funktioner och -kodgenerering."
#: config/i386/i386.opt:716
msgid "Support code generation of Advanced Bit Manipulation (ABM) instructions."
@@ -10691,100 +9034,68 @@ msgid "Support code generation of popcnt instruction."
msgstr "Stöd kodgenerering av popcnt-instruktioner."
#: config/i386/i386.opt:724
-#, fuzzy
-#| msgid "Support BMI built-in functions and code generation"
msgid "Support BMI built-in functions and code generation."
-msgstr "Stöd inbyggda BMI-funktioner och -kodgenerering "
+msgstr "Stöd inbyggda BMI-funktioner och -kodgenerering ."
#: config/i386/i386.opt:728
-#, fuzzy
-#| msgid "Support BMI2 built-in functions and code generation"
msgid "Support BMI2 built-in functions and code generation."
-msgstr "Stöd inbyggda BMI2-funktioner och -kodgenerering "
+msgstr "Stöd inbyggda BMI2-funktioner och -kodgenerering ."
#: config/i386/i386.opt:732
-#, fuzzy
-#| msgid "Support LZCNT built-in function and code generation"
msgid "Support LZCNT built-in function and code generation."
-msgstr "Stöd inbyggda LZCNT-funktioner och -kodgenerering "
+msgstr "Stöd inbyggda LZCNT-funktioner och -kodgenerering ."
#: config/i386/i386.opt:736
-#, fuzzy
-#| msgid "Support Hardware Lock Elision prefixes"
msgid "Support Hardware Lock Elision prefixes."
-msgstr "Stöd prefix får hårdvarulåselidering"
+msgstr "Stöd prefix får hårdvarulåselidering."
#: config/i386/i386.opt:740
-#, fuzzy
-#| msgid "Support RDSEED instruction"
msgid "Support RDSEED instruction."
-msgstr "Använd instruktionen RDSEED"
+msgstr "Använd instruktionen RDSEED."
#: config/i386/i386.opt:744
-#, fuzzy
-#| msgid "Support PREFETCHW instruction"
msgid "Support PREFETCHW instruction."
-msgstr "Stöd instruktionen PREFETCHW"
+msgstr "Stöd instruktionen PREFETCHW."
#: config/i386/i386.opt:748
-#, fuzzy
-#| msgid "Support flag-preserving add-carry instructions"
msgid "Support flag-preserving add-carry instructions."
-msgstr "Stöd flaggbevarande add-carry-instruktioner"
+msgstr "Stöd flaggbevarande add-carry-instruktioner."
#: config/i386/i386.opt:752
-#, fuzzy
-#| msgid "Support CLFLUSHOPT instructions"
msgid "Support CLFLUSHOPT instructions."
-msgstr "Stöd instruktionerna CLFLUSHOPT"
+msgstr "Stöd instruktionerna CLFLUSHOPT."
#: config/i386/i386.opt:756
-#, fuzzy
-#| msgid "Support CLWB instruction"
msgid "Support CLWB instruction."
-msgstr "Stöd instruktionen CLWB"
+msgstr "Stöd instruktionen CLWB."
#: config/i386/i386.opt:760
-#, fuzzy
-#| msgid "Support PCOMMIT instruction"
msgid "Support PCOMMIT instruction."
-msgstr "Stöd instruktionen PCOMMIT"
+msgstr "Stöd instruktionen PCOMMIT."
#: config/i386/i386.opt:764
-#, fuzzy
-#| msgid "Support FXSAVE and FXRSTOR instructions"
msgid "Support FXSAVE and FXRSTOR instructions."
-msgstr "Stöd instruktionerna FXSAVE och FXRSTOR"
+msgstr "Stöd instruktionerna FXSAVE och FXRSTOR."
#: config/i386/i386.opt:768
-#, fuzzy
-#| msgid "Support XSAVE and XRSTOR instructions"
msgid "Support XSAVE and XRSTOR instructions."
-msgstr "Stöd instruktionerna XSAVE och XRSTOR"
+msgstr "Stöd instruktionerna XSAVE och XRSTOR."
#: config/i386/i386.opt:772
-#, fuzzy
-#| msgid "Support XSAVEOPT instruction"
msgid "Support XSAVEOPT instruction."
-msgstr "Stöd instruktionen XSAVEOPT"
+msgstr "Stöd instruktionen XSAVEOPT."
#: config/i386/i386.opt:776
-#, fuzzy
-#| msgid "Support XSAVEC instructions"
msgid "Support XSAVEC instructions."
-msgstr "Stöd instruktionerna XSAVEC"
+msgstr "Stöd instruktionerna XSAVEC."
#: config/i386/i386.opt:780
-#, fuzzy
-#| msgid "Support XSAVES and XRSTORS instructions"
msgid "Support XSAVES and XRSTORS instructions."
-msgstr "Stöd instruktionerna XSAVES och XRSTORS"
+msgstr "Stöd instruktionerna XSAVES och XRSTORS."
#: config/i386/i386.opt:784
-#, fuzzy
-#| msgid "Support TBM built-in functions and code generation"
msgid "Support TBM built-in functions and code generation."
-msgstr "Stöd inbyggda TBM-funktioner och -kodgenerering "
+msgstr "Stöd inbyggda TBM-funktioner och -kodgenerering ."
#: config/i386/i386.opt:788
msgid "Support code generation of cmpxchg16b instruction."
@@ -10803,52 +9114,36 @@ msgid "Support code generation of crc32 instruction."
msgstr "Stöd kodgenerering av crc32-instruktioner."
#: config/i386/i386.opt:804
-#, fuzzy
-#| msgid "Support AES built-in functions and code generation"
msgid "Support AES built-in functions and code generation."
-msgstr "Stöd inbyggda AES-funktioner och -kodgenerering"
+msgstr "Stöd inbyggda AES-funktioner och -kodgenerering."
#: config/i386/i386.opt:808
-#, fuzzy
-#| msgid "Support SHA1 and SHA256 built-in functions and code generation"
msgid "Support SHA1 and SHA256 built-in functions and code generation."
-msgstr "Stöd inbyggda SHA1- och SHA256-funktioner och -kodgenerering"
+msgstr "Stöd inbyggda SHA1- och SHA256-funktioner och -kodgenerering."
#: config/i386/i386.opt:812
-#, fuzzy
-#| msgid "Support PCLMUL built-in functions and code generation"
msgid "Support PCLMUL built-in functions and code generation."
-msgstr "Stöd inbyggda PCLMUL-funktioner och -kodgenerering"
+msgstr "Stöd inbyggda PCLMUL-funktioner och -kodgenerering."
#: config/i386/i386.opt:816
-#, fuzzy
-#| msgid "Encode SSE instructions with VEX prefix"
msgid "Encode SSE instructions with VEX prefix."
-msgstr "Koda SSE-instruktioner med VEX-prefix"
+msgstr "Koda SSE-instruktioner med VEX-prefix."
#: config/i386/i386.opt:820
-#, fuzzy
-#| msgid "Support FSGSBASE built-in functions and code generation"
msgid "Support FSGSBASE built-in functions and code generation."
-msgstr "Stöd inbyggda FSGSBASE-funktioner och -kodgenerering"
+msgstr "Stöd inbyggda FSGSBASE-funktioner och -kodgenerering."
#: config/i386/i386.opt:824
-#, fuzzy
-#| msgid "Support RDRND built-in functions and code generation"
msgid "Support RDRND built-in functions and code generation."
-msgstr "Stöd inbyggda RDRND-funktioner och -kodgenerering"
+msgstr "Stöd inbyggda RDRND-funktioner och -kodgenerering."
#: config/i386/i386.opt:828
-#, fuzzy
-#| msgid "Support F16C built-in functions and code generation"
msgid "Support F16C built-in functions and code generation."
-msgstr "Stöd inbyggda F16C-funktioner och -kodgenerering "
+msgstr "Stöd inbyggda F16C-funktioner och -kodgenerering ."
#: config/i386/i386.opt:832
-#, fuzzy
-#| msgid "Support PREFETCHWT1 built-in functions and code generation"
msgid "Support PREFETCHWT1 built-in functions and code generation."
-msgstr "Stöd inbyggda PREFETCHWT1-funktioner och -kodgenerering "
+msgstr "Stöd inbyggda PREFETCHWT1-funktioner och -kodgenerering ."
#: config/i386/i386.opt:836
msgid "Emit profiling counter call at function entry before prologue."
@@ -10867,58 +9162,40 @@ msgid "Skip setting up RAX register when passing variable arguments."
msgstr "Hoppa över att sätta upp RAX-register när variabelt antal argument skickas."
#: config/i386/i386.opt:853
-#, fuzzy
-#| msgid "Expand 32bit/64bit integer divide into 8bit unsigned integer divide with run-time check"
msgid "Expand 32bit/64bit integer divide into 8bit unsigned integer divide with run-time check."
-msgstr "Expandera 32bits/64bits heltalsdivision till 8bitars teckenlös heltalsdivision med kontroll vid körning."
+msgstr "Expandera 32bits/64bits heltalsdivision till 8bitars teckenlös heltalsdivision med kontroll vid körning.."
#: config/i386/i386.opt:857
-#, fuzzy
-#| msgid "Split 32-byte AVX unaligned load"
msgid "Split 32-byte AVX unaligned load."
-msgstr "Dela 32-bytes AVX ojusterade laddningar"
+msgstr "Dela 32-bytes AVX ojusterade laddningar."
#: config/i386/i386.opt:861
-#, fuzzy
-#| msgid "Split 32-byte AVX unaligned store"
msgid "Split 32-byte AVX unaligned store."
-msgstr "Dela 32-bytes AVX ojusterade lagringar"
+msgstr "Dela 32-bytes AVX ojusterade lagringar."
#: config/i386/i386.opt:865
-#, fuzzy
-#| msgid "Support RTM built-in functions and code generation"
msgid "Support RTM built-in functions and code generation."
-msgstr "Stöd inbyggda RTM-funktioner och -kodgenerering "
+msgstr "Stöd inbyggda RTM-funktioner och -kodgenerering ."
#: config/i386/i386.opt:869
-#, fuzzy
-#| msgid "Support MPX code generation"
msgid "Support MPX code generation."
-msgstr "Stöd MPX-kodgenerering "
+msgstr "Stöd MPX-kodgenerering ."
#: config/i386/i386.opt:873
-#, fuzzy
-#| msgid "Support MWAITX and MONITORX built-in functions and code generation"
msgid "Support MWAITX and MONITORX built-in functions and code generation."
-msgstr "Stöd inbyggda MWAITX- och MONITORX-funktioner och -kodgenerering"
+msgstr "Stöd inbyggda MWAITX- och MONITORX-funktioner och -kodgenerering."
#: config/i386/i386.opt:877
-#, fuzzy
-#| msgid "Support AES built-in functions and code generation"
msgid "Support CLZERO built-in functions and code generation."
-msgstr "Stöd inbyggda AES-funktioner och -kodgenerering"
+msgstr "Stöd inbyggda CLZERO-funktioner och -kodgenerering."
#: config/i386/i386.opt:881
-#, fuzzy
-#| msgid "Support PCLMUL built-in functions and code generation"
msgid "Support PKU built-in functions and code generation."
-msgstr "Stöd inbyggda PCLMUL-funktioner och -kodgenerering"
+msgstr "Stöd inbyggda PKU-funktioner och -kodgenerering."
#: config/i386/i386.opt:885
-#, fuzzy
-#| msgid "Use given stack-protector guard"
msgid "Use given stack-protector guard."
-msgstr "Använd angiven stackskyddsvakt"
+msgstr "Använd angiven stackskyddsvakt."
#: config/i386/i386.opt:889
msgid "Known stack protector guard (for use with the -mstack-protector-guard= option):"
@@ -10941,335 +9218,225 @@ msgid "see <http://www.gnu.org/licenses/>. */"
msgstr "se <http://www.gnu.org/licenses/>. */"
#: config/pa/pa64-hpux.opt:23
-#, fuzzy
-#| msgid "Assume code will be linked by GNU ld"
msgid "Assume code will be linked by GNU ld."
-msgstr "Anta kod kommer länkas av GNU ld"
+msgstr "Anta kod kommer länkas av GNU ld."
#: config/pa/pa64-hpux.opt:27
-#, fuzzy
-#| msgid "Assume code will be linked by HP ld"
msgid "Assume code will be linked by HP ld."
-msgstr "Anta kod kommer länkas av HP ld"
+msgstr "Anta kod kommer länkas av HP ld."
#: config/pa/pa-hpux1010.opt:23 config/pa/pa-hpux.opt:31
#: config/pa/pa-hpux1131.opt:23 config/pa/pa-hpux1111.opt:23
-#, fuzzy
-#| msgid "Specify UNIX standard for predefines and linking"
msgid "Specify UNIX standard for predefines and linking."
-msgstr "Ange UNIX-standard för fördefinitioner och länkning"
+msgstr "Ange UNIX-standard för fördefinitioner och länkning."
#: config/pa/pa-hpux.opt:27
-#, fuzzy
-#| msgid "Generate cpp defines for server IO"
msgid "Generate cpp defines for server IO."
-msgstr "Generera cpp-definitioner för server-IO"
+msgstr "Generera cpp-definitioner för server-IO."
#: config/pa/pa-hpux.opt:35
-#, fuzzy
-#| msgid "Generate cpp defines for workstation IO"
msgid "Generate cpp defines for workstation IO."
-msgstr "Generera cpp-definitioner för arbetsstations-IO"
+msgstr "Generera cpp-definitioner för arbetsstations-IO."
#: config/pa/pa.opt:30 config/pa/pa.opt:83 config/pa/pa.opt:91
-#, fuzzy
-#| msgid "Generate PA1.0 code"
msgid "Generate PA1.0 code."
-msgstr "Generera PA1.0-kod"
+msgstr "Generera PA1.0-kod."
#: config/pa/pa.opt:34 config/pa/pa.opt:95 config/pa/pa.opt:136
-#, fuzzy
-#| msgid "Generate PA1.1 code"
msgid "Generate PA1.1 code."
-msgstr "Generera PA1.1-kod"
+msgstr "Generera PA1.1-kod."
#: config/pa/pa.opt:38 config/pa/pa.opt:99
-#, fuzzy
-#| msgid "Generate PA2.0 code (requires binutils 2.10 or later)"
msgid "Generate PA2.0 code (requires binutils 2.10 or later)."
-msgstr "Generera kod för PA2.0 (kräver binutils 2.10 eller senare)"
+msgstr "Generera kod för PA2.0 (kräver binutils 2.10 eller senare)."
#: config/pa/pa.opt:46
-#, fuzzy
-#| msgid "Disable FP regs"
msgid "Disable FP regs."
-msgstr "Avaktivera FP-register"
+msgstr "Avaktivera FP-register."
#: config/pa/pa.opt:50
-#, fuzzy
-#| msgid "Disable indexed addressing"
msgid "Disable indexed addressing."
-msgstr "Avaktivera indexerad adressering"
+msgstr "Avaktivera indexerad adressering."
#: config/pa/pa.opt:54
-#, fuzzy
-#| msgid "Generate fast indirect calls"
msgid "Generate fast indirect calls."
-msgstr "Generera snabba indirekta anrop"
+msgstr "Generera snabba indirekta anrop."
#: config/pa/pa.opt:62
-#, fuzzy
-#| msgid "Assume code will be assembled by GAS"
msgid "Assume code will be assembled by GAS."
-msgstr "Anta att kod kommer assembleras av GAS"
+msgstr "Anta att kod kommer assembleras av GAS."
#: config/pa/pa.opt:71
-#, fuzzy
-#| msgid "Enable linker optimizations"
msgid "Enable linker optimizations."
-msgstr "Aktivera länkningsoptimeringar"
+msgstr "Aktivera länkningsoptimeringar."
#: config/pa/pa.opt:75
-#, fuzzy
-#| msgid "Always generate long calls"
msgid "Always generate long calls."
-msgstr "Generera alltid långa anrop"
+msgstr "Generera alltid långa anrop."
#: config/pa/pa.opt:79
-#, fuzzy
-#| msgid "Emit long load/store sequences"
msgid "Emit long load/store sequences."
-msgstr "Mata ut långa load-/store-sekvenser"
+msgstr "Mata ut långa ladda/lagra-sekvenser."
#: config/pa/pa.opt:87
-#, fuzzy
-#| msgid "Disable space regs"
msgid "Disable space regs."
-msgstr "Avaktivera utrymmesregister"
+msgstr "Avaktivera utrymmesregister."
#: config/pa/pa.opt:103
-#, fuzzy
-#| msgid "Use portable calling conventions"
msgid "Use portable calling conventions."
-msgstr "Använd portabla anropskonventioner"
+msgstr "Använd portabla anropskonventioner."
#: config/pa/pa.opt:107
-#, fuzzy
-#| msgid "Specify CPU for scheduling purposes. Valid arguments are 700, 7100, 7100LC, 7200, 7300, and 8000"
msgid "Specify CPU for scheduling purposes. Valid arguments are 700, 7100, 7100LC, 7200, 7300, and 8000."
-msgstr "Ange CPU för schemaläggningsändamål. Giltiga argument är 700, 7100, 7100LC, 7200, 7300 och 8000"
+msgstr "Ange CPU för schemaläggningsändamål. Giltiga argument är 700, 7100, 7100LC, 7200, 7300 och 8000."
#: config/pa/pa.opt:132 config/frv/frv.opt:215
-#, fuzzy
-#| msgid "Use software floating point"
msgid "Use software floating point."
-msgstr "Använd mjukvaruflyttal"
+msgstr "Använd mjukvaruflyttal."
#: config/pa/pa.opt:140
-#, fuzzy
-#| msgid "Do not disable space regs"
msgid "Do not disable space regs."
-msgstr "Avaktivera inte utrymmesregister"
+msgstr "Avaktivera inte utrymmesregister."
#: config/v850/v850.opt:29
-#, fuzzy
-#| msgid "Use registers r2 and r5"
msgid "Use registers r2 and r5."
-msgstr "Använd registren r2 och r5"
+msgstr "Använd registren r2 och r5."
#: config/v850/v850.opt:33
-#, fuzzy
-#| msgid "Use 4 byte entries in switch tables"
msgid "Use 4 byte entries in switch tables."
-msgstr "Använd 4-byteposter i hopptabeller"
+msgstr "Använd 4-byteposter i hopptabeller."
#: config/v850/v850.opt:37
-#, fuzzy
-#| msgid "Enable backend debugging"
msgid "Enable backend debugging."
-msgstr "Aktivera bakändefelsökning"
+msgstr "Aktivera bakändefelsökning."
#: config/v850/v850.opt:41
-#, fuzzy
-#| msgid "Do not use the callt instruction (default)"
msgid "Do not use the callt instruction (default)."
-msgstr "Använd inte callt-instruktionen (standard)"
+msgstr "Använd inte callt-instruktionen (standard)."
#: config/v850/v850.opt:45
-#, fuzzy
-#| msgid "Reuse r30 on a per function basis"
msgid "Reuse r30 on a per function basis."
-msgstr "Återanvänd r30 i varje funktion"
+msgstr "Återanvänd r30 i varje funktion."
#: config/v850/v850.opt:52
-#, fuzzy
-#| msgid "Prohibit PC relative function calls"
msgid "Prohibit PC relative function calls."
-msgstr "Förhindra PC-relativa funktionsanrop"
+msgstr "Förhindra PC-relativa funktionsanrop."
#: config/v850/v850.opt:56
-#, fuzzy
-#| msgid "Use stubs for function prologues"
msgid "Use stubs for function prologues."
-msgstr "Använd stubbar för funktionsprologer"
+msgstr "Använd stubbar för funktionsprologer."
#: config/v850/v850.opt:60
-#, fuzzy
-#| msgid "Set the max size of data eligible for the SDA area"
msgid "Set the max size of data eligible for the SDA area."
-msgstr "Ange den maximala storleken på data som är lämpliga för SDA-arean"
+msgstr "Ange den maximala storleken på data som är lämpliga för SDA-arean."
#: config/v850/v850.opt:67
-#, fuzzy
-#| msgid "Enable the use of the short load instructions"
msgid "Enable the use of the short load instructions."
-msgstr "Möjliggör användning av de korta load-instruktionerna"
+msgstr "Möjliggör användning av de korta laddinstruktionerna."
#: config/v850/v850.opt:71
-#, fuzzy
-#| msgid "Same as: -mep -mprolog-function"
msgid "Same as: -mep -mprolog-function."
-msgstr "Samma som: -mep -mprolog-function"
+msgstr "Samma som: -mep -mprolog-function."
#: config/v850/v850.opt:75
-#, fuzzy
-#| msgid "Set the max size of data eligible for the TDA area"
msgid "Set the max size of data eligible for the TDA area."
-msgstr "Ange den maximala storleken på data som är lämpliga för TDA-arean"
+msgstr "Ange den maximala storleken på data som är lämpliga för TDA-arean."
#: config/v850/v850.opt:82
-#, fuzzy
-#| msgid "Do not enforce strict alignment"
msgid "Do not enforce strict alignment."
-msgstr "Framtvinga inte strikt justering"
+msgstr "Framtvinga inte strikt justering."
#: config/v850/v850.opt:86
-#, fuzzy
-#| msgid "Put jump tables for switch statements into the .data section rather than the .code section"
msgid "Put jump tables for switch statements into the .data section rather than the .code section."
-msgstr "Lägg hopptabeller för switch-satser i .data-sektionen istället för .code-sektionen."
+msgstr "Lägg hopptabeller för switch-satser i .data-sektionen istället för .code-sektionen.."
#: config/v850/v850.opt:93
-#, fuzzy
-#| msgid "Compile for the v850 processor"
msgid "Compile for the v850 processor."
-msgstr "Kompilera för processorn v850"
+msgstr "Kompilera för processorn v850."
#: config/v850/v850.opt:97
-#, fuzzy
-#| msgid "Compile for the v850e processor"
msgid "Compile for the v850e processor."
-msgstr "Kompilera för processorn v850e"
+msgstr "Kompilera för processorn v850e."
#: config/v850/v850.opt:101
-#, fuzzy
-#| msgid "Compile for the v850e1 processor"
msgid "Compile for the v850e1 processor."
-msgstr "Kompilera för processorn v850e1"
+msgstr "Kompilera för processorn v850e1."
#: config/v850/v850.opt:105
-#, fuzzy
-#| msgid "Compile for the v850es variant of the v850e1"
msgid "Compile for the v850es variant of the v850e1."
-msgstr "Kompilera för varianten v850es av v850el"
+msgstr "Kompilera för varianten v850es av v850el."
#: config/v850/v850.opt:109
-#, fuzzy
-#| msgid "Compile for the v850e2 processor"
msgid "Compile for the v850e2 processor."
-msgstr "Kompilera för processorn v850e2"
+msgstr "Kompilera för processorn v850e2."
#: config/v850/v850.opt:113
-#, fuzzy
-#| msgid "Compile for the v850e2v3 processor"
msgid "Compile for the v850e2v3 processor."
-msgstr "Kompilera för processorn v850e2v3"
+msgstr "Kompilera för processorn v850e2v3."
#: config/v850/v850.opt:117
-#, fuzzy
-#| msgid "Compile for the v850e3v5 processor"
msgid "Compile for the v850e3v5 processor."
-msgstr "Kompilera för processorn v850e3v5"
+msgstr "Kompilera för processorn v850e3v5."
#: config/v850/v850.opt:124
-#, fuzzy
-#| msgid "Enable v850e3v5 loop instructions"
msgid "Enable v850e3v5 loop instructions."
-msgstr "Använd slinginstruktionerna i v850e3v5"
+msgstr "Använd slinginstruktionerna i v850e3v5."
#: config/v850/v850.opt:128
-#, fuzzy
-#| msgid "Set the max size of data eligible for the ZDA area"
msgid "Set the max size of data eligible for the ZDA area."
-msgstr "Ange den maximala storleken på data som är lämpliga för ZDA-arean"
+msgstr "Ange den maximala storleken på data som är lämpliga för ZDA-arean."
#: config/v850/v850.opt:135
-#, fuzzy
-#| msgid "Enable relaxing in the assembler"
msgid "Enable relaxing in the assembler."
-msgstr "Aktivera avslappning i assemblern"
+msgstr "Aktivera avslappning i assemblern."
#: config/v850/v850.opt:139
-#, fuzzy
-#| msgid "Prohibit PC relative jumps"
msgid "Prohibit PC relative jumps."
-msgstr "Förhindra PC-relativa hopp"
+msgstr "Förhindra PC-relativa hopp."
#: config/v850/v850.opt:143
-#, fuzzy
-#| msgid "Inhibit the use of hardware floating point instructions"
msgid "Inhibit the use of hardware floating point instructions."
-msgstr "Stäng av användningen av alla flyttalsinstruktioner i hårdvara"
+msgstr "Stäng av användningen av alla flyttalsinstruktioner i hårdvara."
#: config/v850/v850.opt:147
-#, fuzzy
-#| msgid "Allow the use of hardware floating point instructions for V850E2V3 and up"
msgid "Allow the use of hardware floating point instructions for V850E2V3 and up."
-msgstr "Tillåt användningen av flyttalsinstruktioner för V850E2V3 och uppåt"
+msgstr "Tillåt användningen av flyttalsinstruktioner för V850E2V3 och uppåt."
#: config/v850/v850.opt:151
-#, fuzzy
-#| msgid "Enable support for the RH850 ABI. This is the default"
msgid "Enable support for the RH850 ABI. This is the default."
-msgstr "Aktivera stöd för ABI:et RH850. Detta är standard."
+msgstr "Aktivera stöd för ABI:et RH850. Detta är standard.."
#: config/v850/v850.opt:155
-#, fuzzy
-#| msgid "Enable support for the old GCC ABI"
msgid "Enable support for the old GCC ABI."
-msgstr "Aktivera stöd för det gamla GCC-ABI:et"
+msgstr "Aktivera stöd för det gamla GCC-ABI:et."
#: config/v850/v850.opt:159
-#, fuzzy
-#| msgid "Support alignments of up to 64-bits"
msgid "Support alignments of up to 64-bits."
-msgstr "Stöd justering av upp till 64 bitar"
+msgstr "Stöd justering av upp till 64 bitar."
#: config/g.opt:27
-#, fuzzy
-#| msgid "-G<number>\tPut global and static data smaller than <number> bytes into a special section (on some targets)"
msgid "-G<number>\tPut global and static data smaller than <number> bytes into a special section (on some targets)."
-msgstr "-G<antal>\tPlacera globala and statiska data mindre än <antal> byte i en speciell sektion (vissa arkitekturer)"
+msgstr "-G<antal>\tPlacera globala and statiska data mindre än <antal> byte i en speciell sektion (vissa arkitekturer)."
#: config/lynx.opt:23
-#, fuzzy
-#| msgid "Support legacy multi-threading"
msgid "Support legacy multi-threading."
-msgstr "Stöd gammaldags multitrådning"
+msgstr "Stöd gammaldags multitrådning."
#: config/lynx.opt:27
-#, fuzzy
-#| msgid "Use shared libraries"
msgid "Use shared libraries."
-msgstr "Använd delade bibliotek"
+msgstr "Använd delade bibliotek."
#: config/lynx.opt:31
-#, fuzzy
-#| msgid "Support multi-threading"
msgid "Support multi-threading."
-msgstr "Stöd multitrådning"
+msgstr "Stöd multitrådning."
#: config/nvptx/nvptx.opt:22
-#, fuzzy
-#| msgid "Generate code for a 32-bit ABI"
msgid "Generate code for a 32-bit ABI."
-msgstr "Generera kod för ett 32-bitars ABI"
+msgstr "Generera kod för ett 32-bitars ABI."
#: config/nvptx/nvptx.opt:26
-#, fuzzy
-#| msgid "Generate code for a 64-bit ABI"
msgid "Generate code for a 64-bit ABI."
-msgstr "Generera kod för ett 64-bitars ABI"
+msgstr "Generera kod för ett 64-bitars ABI."
#: config/nvptx/nvptx.opt:30
msgid "Link in code for a __main kernel."
@@ -11280,62 +9447,44 @@ msgid "Optimize partition neutering"
msgstr "Optimera partitionssterilisering"
#: config/vxworks.opt:36
-#, fuzzy
-#| msgid "Assume the VxWorks RTP environment"
msgid "Assume the VxWorks RTP environment."
-msgstr "Anta miljön VxWorks RTP"
+msgstr "Anta miljön VxWorks RTP."
#: config/vxworks.opt:43
-#, fuzzy
-#| msgid "Assume the VxWorks vThreads environment"
msgid "Assume the VxWorks vThreads environment."
-msgstr "Anta miljön VxWorks vThreads"
+msgstr "Anta miljön VxWorks vThreads."
#: config/cr16/cr16.opt:23
-#, fuzzy
-#| msgid "-msim Use simulator runtime"
msgid "-msim Use simulator runtime."
-msgstr "-msim Använd simulatorkörtider"
+msgstr "-msim Använd simulatorkörtider."
#: config/cr16/cr16.opt:27
-#, fuzzy
-#| msgid "Generate SBIT, CBIT instructions"
msgid "Generate SBIT, CBIT instructions."
-msgstr "Generera SBIT-, CBIT-instruktioner"
+msgstr "Generera SBIT-, CBIT-instruktioner."
#: config/cr16/cr16.opt:31
-#, fuzzy
-#| msgid "Support multiply accumulate instructions"
msgid "Support multiply accumulate instructions."
-msgstr "Använd multiplicera-ackumulerainstruktioner"
+msgstr "Använd multiplicera-ackumulerainstruktioner."
#: config/cr16/cr16.opt:38
-#, fuzzy
-#| msgid "Treat data references as near, far or medium. medium is default"
msgid "Treat data references as near, far or medium. medium is default."
-msgstr "Behandla datareferenser som nära, fjärran eller medium, medium är standard"
+msgstr "Behandla datareferenser som nära, fjärran eller medium, medium är standard."
#: config/cr16/cr16.opt:42
-#, fuzzy
-#| msgid "Generate code for CR16C architecture"
msgid "Generate code for CR16C architecture."
-msgstr "Generera kod för arkitekturen CR16C"
+msgstr "Generera kod för arkitekturen CR16C."
#: config/cr16/cr16.opt:46
-#, fuzzy
-#| msgid "Generate code for CR16C+ architecture (Default)"
msgid "Generate code for CR16C+ architecture (Default)."
-msgstr "Generera kod för arkitekturen CR16C+ (Standard)"
+msgstr "Generera kod för arkitekturen CR16C+ (Standard)."
#: config/cr16/cr16.opt:50
msgid "Treat integers as 32-bit."
msgstr "Behandla heltal som 32-bitars."
#: config/avr/avr.opt:23
-#, fuzzy
-#| msgid "Use subroutines for function prologues and epilogues"
msgid "Use subroutines for function prologues and epilogues."
-msgstr "Använd subrutiner för funktionprologer och -epiloger"
+msgstr "Använd subrutiner för funktionprologer och -epiloger."
#: config/avr/avr.opt:26
#, c-format
@@ -11343,56 +9492,40 @@ msgid "missing device or architecture after %qs"
msgstr "enhet eller arkitektur saknas efter %qs"
#: config/avr/avr.opt:27
-#, fuzzy
-#| msgid "-mmcu=MCU\tSelect the target MCU"
msgid "-mmcu=MCU\tSelect the target MCU."
-msgstr "-mmcu=MCU\tVälj mål-MCU:n"
+msgstr "-mmcu=MCU\tVälj mål-MCU:n."
#: config/avr/avr.opt:31
-#, fuzzy
-#| msgid "Set the number of 64 KiB flash segments"
msgid "Set the number of 64 KiB flash segments."
-msgstr "Sätt antalet 64 KiB flash-segment"
+msgstr "Sätt antalet 64 KiB flash-segment."
#: config/avr/avr.opt:35
-#, fuzzy
-#| msgid "Indicate presence of a processor erratum"
msgid "Indicate presence of a processor erratum."
-msgstr "Indikera närvaron av ett processor-errata"
+msgstr "Indikera närvaron av ett processor-errata."
#: config/avr/avr.opt:39
-#, fuzzy
-#| msgid "Enable Read-Modify-Write (RMW) instructions support/use"
msgid "Enable Read-Modify-Write (RMW) instructions support/use."
-msgstr "Aktivera stöd/användning av Läs-Ändra-Skriv- (RMW-)instruktioner"
+msgstr "Aktivera stöd/användning av Läs-Ändra-Skriv- (RMW-)instruktioner."
#: config/avr/avr.opt:49
-#, fuzzy
-#| msgid "Use an 8-bit 'int' type"
msgid "Use an 8-bit 'int' type."
-msgstr "Använd en 8-bitars â€intâ€-typ"
+msgstr "Använd en 8-bitars â€intâ€-typ."
#: config/avr/avr.opt:53
-#, fuzzy
-#| msgid "Change the stack pointer without disabling interrupts"
msgid "Change the stack pointer without disabling interrupts."
-msgstr "Ändra stackpekaren utan att avaktivera avbrott"
+msgstr "Ändra stackpekaren utan att avaktivera avbrott."
#: config/avr/avr.opt:57
msgid "Set the branch costs for conditional branch instructions. Reasonable values are small, non-negative integers. The default branch cost is 0."
msgstr "Ställ in grenkostnaden för villkorliga greninstruktioner. Rimliga värden är små, ickenegativa heltal. Standardkostnaden för grenar är 0."
#: config/avr/avr.opt:67
-#, fuzzy
-#| msgid "Change only the low 8 bits of the stack pointer"
msgid "Change only the low 8 bits of the stack pointer."
-msgstr "Ändra endast de låga 8 bitarna av stackpekaren"
+msgstr "Ändra endast de låga 8 bitarna av stackpekaren."
#: config/avr/avr.opt:71
-#, fuzzy
-#| msgid "Relax branches"
msgid "Relax branches."
-msgstr "Lätta på grenar"
+msgstr "Lätta på grenar."
#: config/avr/avr.opt:75
msgid "Make the linker relaxation machine assume that a program counter wrap-around occurs."
@@ -11415,242 +9548,168 @@ msgid "Warn if the address space of an address is changed."
msgstr "Varna om adressrymden för en adress ändras."
#: config/avr/avr.opt:96
-#, fuzzy
-#| msgid "Allow to use truncation instead of rounding towards 0 for fractional int types"
msgid "Allow to use truncation instead of rounding towards 0 for fractional int types."
-msgstr "Tillåt avhuggning istället för avrundning mot 0 för decimalheltalstyper"
+msgstr "Tillåt avhuggning istället för avrundning mot 0 för decimalheltalstyper."
#: config/avr/avr.opt:100
-#, fuzzy
-#| msgid "Do not link against the device-specific library lib<MCU>.a"
msgid "Do not link against the device-specific library lib<MCU>.a."
-msgstr "Länka inte mot det enhetsspecifika biblioteket lib<MCU>.a"
+msgstr "Länka inte mot det enhetsspecifika biblioteket lib<MCU>.a."
#: config/m32r/m32r.opt:34
-#, fuzzy
-#| msgid "Compile for the m32rx"
msgid "Compile for the m32rx."
-msgstr "Kompilera för en m32rx"
+msgstr "Kompilera för en m32rx."
#: config/m32r/m32r.opt:38
-#, fuzzy
-#| msgid "Compile for the m32r2"
msgid "Compile for the m32r2."
-msgstr "Kompilera för en m32r2"
+msgstr "Kompilera för en m32r2."
#: config/m32r/m32r.opt:42
-#, fuzzy
-#| msgid "Compile for the m32r"
msgid "Compile for the m32r."
-msgstr "Kompilera för en m32r"
+msgstr "Kompilera för en m32r."
#: config/m32r/m32r.opt:46
-#, fuzzy
-#| msgid "Align all loops to 32 byte boundary"
msgid "Align all loops to 32 byte boundary."
-msgstr "Justera alla slingor till 32-bytesgräns"
+msgstr "Justera alla slingor till 32-bytesgräns."
#: config/m32r/m32r.opt:50
-#, fuzzy
-#| msgid "Prefer branches over conditional execution"
msgid "Prefer branches over conditional execution."
-msgstr "Föredra hopp framför villkorlig körning"
+msgstr "Föredra hopp framför villkorlig körning."
#: config/m32r/m32r.opt:54
-#, fuzzy
-#| msgid "Give branches their default cost"
msgid "Give branches their default cost."
-msgstr "Ge grenar sin normalkostnad"
+msgstr "Ge grenar sin normalkostnad."
#: config/m32r/m32r.opt:58
-#, fuzzy
-#| msgid "Display compile time statistics"
msgid "Display compile time statistics."
-msgstr "Visa kompileringstidsstatistik"
+msgstr "Visa kompileringstidsstatistik."
#: config/m32r/m32r.opt:62
-#, fuzzy
-#| msgid "Specify cache flush function"
msgid "Specify cache flush function."
-msgstr "Ange cache-tömningsfunktion"
+msgstr "Ange cache-tömningsfunktion."
#: config/m32r/m32r.opt:66
-#, fuzzy
-#| msgid "Specify cache flush trap number"
msgid "Specify cache flush trap number."
-msgstr "Ange cache-tömningsfällnummer"
+msgstr "Ange cache-tömningsfällnummer."
#: config/m32r/m32r.opt:70
-#, fuzzy
-#| msgid "Only issue one instruction per cycle"
msgid "Only issue one instruction per cycle."
-msgstr "Lägg bara ut en instruktion per cykel"
+msgstr "Lägg bara ut en instruktion per cykel."
#: config/m32r/m32r.opt:74
-#, fuzzy
-#| msgid "Allow two instructions to be issued per cycle"
msgid "Allow two instructions to be issued per cycle."
-msgstr "Tillåt att två instruktioner läggs ut per cykel"
+msgstr "Tillåt att två instruktioner läggs ut per cykel."
#: config/m32r/m32r.opt:78
-#, fuzzy
-#| msgid "Code size: small, medium or large"
msgid "Code size: small, medium or large."
-msgstr "Kodstorlek: small, medium, eller large"
+msgstr "Kodstorlek: small, medium, eller large."
#: config/m32r/m32r.opt:94
-#, fuzzy
-#| msgid "Don't call any cache flush functions"
msgid "Don't call any cache flush functions."
-msgstr "Anropa inte några cache-tömningsfunktioner"
+msgstr "Anropa inte några cache-tömningsfunktioner."
#: config/m32r/m32r.opt:98
-#, fuzzy
-#| msgid "Don't call any cache flush trap"
msgid "Don't call any cache flush trap."
-msgstr "Anropa inga cache-tömningsfällor"
+msgstr "Anropa inga cache-tömningsfällor."
#: config/m32r/m32r.opt:105
-#, fuzzy
-#| msgid "Small data area: none, sdata, use"
msgid "Small data area: none, sdata, use."
-msgstr "Litet dataområde: none, sdata, use"
+msgstr "Litet dataområde: none, sdata, use."
#: config/s390/tpf.opt:23
-#, fuzzy
-#| msgid "Enable TPF-OS tracing code"
msgid "Enable TPF-OS tracing code."
-msgstr "Aktivera TPF-OS-spårningskod"
+msgstr "Aktivera TPF-OS-spårningskod."
#: config/s390/tpf.opt:27
-#, fuzzy
-#| msgid "Specify main object for TPF-OS"
msgid "Specify main object for TPF-OS."
-msgstr "Ange huvudobjekt för TPF-OS"
+msgstr "Ange huvudobjekt för TPF-OS."
#: config/s390/s390.opt:48
-#, fuzzy
-#| msgid "31 bit ABI"
msgid "31 bit ABI."
-msgstr "31-bitars ABI"
+msgstr "31-bitars ABI."
#: config/s390/s390.opt:52
-#, fuzzy
-#| msgid "64 bit ABI"
msgid "64 bit ABI."
-msgstr "64-bitars ABI"
+msgstr "64-bitars ABI."
#: config/s390/s390.opt:96
-#, fuzzy
-#| msgid "Maintain backchain pointer"
msgid "Maintain backchain pointer."
-msgstr "Håll med bakåtkedjepekare"
+msgstr "Håll med bakåtkedjepekare."
#: config/s390/s390.opt:100
-#, fuzzy
-#| msgid "Additional debug prints"
msgid "Additional debug prints."
-msgstr "Ytterligare felsökningsutskrifter"
+msgstr "Ytterligare felsökningsutskrifter."
#: config/s390/s390.opt:104
-#, fuzzy
-#| msgid "ESA/390 architecture"
msgid "ESA/390 architecture."
-msgstr "ESA/390-arkitektur"
+msgstr "ESA/390-arkitektur."
#: config/s390/s390.opt:108
-#, fuzzy
-#| msgid "Enable decimal floating point hardware support"
msgid "Enable decimal floating point hardware support."
-msgstr "Använd hårdvarustöd för decimala flyttal"
+msgstr "Använd hårdvarustöd för decimala flyttal."
#: config/s390/s390.opt:112
-#, fuzzy
-#| msgid "Enable hardware floating point"
msgid "Enable hardware floating point."
-msgstr "Använd hårdvaruflyttal"
+msgstr "Använd hårdvaruflyttal."
#: config/s390/s390.opt:116
msgid "Takes two non-negative integer numbers separated by a comma."
msgstr "Tar två icke-negativa heltal separerade av ett komma."
#: config/s390/s390.opt:134
-#, fuzzy
-#| msgid "Use hardware transactional execution instructions"
msgid "Use hardware transactional execution instructions."
-msgstr "Använd transaktionskörningsinstruktioner i hårdvara"
+msgstr "Använd transaktionskörningsinstruktioner i hårdvara."
#: config/s390/s390.opt:138
-#, fuzzy
-#| msgid "hardware decimal floating point instructions not available on %s"
msgid "Use hardware vector facility instructions and enable the vector ABI."
-msgstr "hårdvaruinstruktioner för decimala flyttal är inte tillgängliga på %s"
+msgstr "Använd instruktioner för vektorfunktioner i hårdvara och aktivera vektor-ABI:et."
#: config/s390/s390.opt:142
-#, fuzzy
-#| msgid "Use packed stack layout"
msgid "Use packed stack layout."
-msgstr "Använd packad stacklayout"
+msgstr "Använd packad stacklayout."
#: config/s390/s390.opt:146
-#, fuzzy
-#| msgid "Use bras for executable < 64k"
msgid "Use bras for executable < 64k."
-msgstr "Använd bras för körbara program < 64k"
+msgstr "Använd bras för körbara program < 64k."
#: config/s390/s390.opt:150
-#, fuzzy
-#| msgid "Disable hardware floating point"
msgid "Disable hardware floating point."
-msgstr "Använd inte hårdvaruflyttal"
+msgstr "Använd inte hårdvaruflyttal."
#: config/s390/s390.opt:154
-#, fuzzy
-#| msgid "Set the max. number of bytes which has to be left to stack size before a trap instruction is triggered"
msgid "Set the max. number of bytes which has to be left to stack size before a trap instruction is triggered."
-msgstr "Ange det maximala antalet byte som måste finnas kvar till stackstorleken före en fällinstruktion utlöses"
+msgstr "Ange det maximala antalet byte som måste finnas kvar till stackstorleken före en fällinstruktion utlöses."
#: config/s390/s390.opt:158
msgid "Switches off the -mstack-guard= option."
msgstr "Slår av flaggan -mstack-guard=."
#: config/s390/s390.opt:162
-#, fuzzy
-#| msgid "Emit extra code in the function prologue in order to trap if the stack size exceeds the given limit"
msgid "Emit extra code in the function prologue in order to trap if the stack size exceeds the given limit."
-msgstr "Mata ut extra kod i funktionsprologen för att fånga om stackstorleken överskrider den givna gränsen"
+msgstr "Mata ut extra kod i funktionsprologen för att fånga om stackstorleken överskrider den givna gränsen."
#: config/s390/s390.opt:166
msgid "Switches off the -mstack-size= option."
msgstr "Slår av flaggan -mstack-size=."
#: config/s390/s390.opt:174
-#, fuzzy
-#| msgid "Generate string instructions for block moves"
msgid "Use the mvcle instruction for block moves."
-msgstr "Generera stränginstruktioner för blockförflyttningar"
+msgstr "Använd mvcle-instruktioner för blockförflyttningar."
#: config/s390/s390.opt:178
msgid "Enable the z vector language extension providing the context-sensitive"
msgstr "Aktivera språkutökningen z-vektor som ger det kontextkänsliga"
#: config/s390/s390.opt:183
-#, fuzzy
-#| msgid "Warn if a function uses alloca or creates an array with dynamic size"
msgid "Warn if a function uses alloca or creates an array with dynamic size."
-msgstr "Varna om en funktion använder alloca eller skapar en vektor med dynamisk storlek"
+msgstr "Varna om en funktion använder alloca eller skapar en vektor med dynamisk storlek."
#: config/s390/s390.opt:187
-#, fuzzy
-#| msgid "Warn if a single function's framesize exceeds the given framesize"
msgid "Warn if a single function's framesize exceeds the given framesize."
-msgstr "Varna om en enskild funktions ramstorlek överskrider den angivna ramstorleken"
+msgstr "Varna om en enskild funktions ramstorlek överskrider den angivna ramstorleken."
#: config/s390/s390.opt:191
-#, fuzzy
-#| msgid "z/Architecture"
msgid "z/Architecture."
-msgstr "z/Arkitektur"
+msgstr "z/Arkitektur."
#: config/s390/s390.opt:195
msgid "Set the branch costs for conditional branch instructions. Reasonable"
@@ -11677,32 +9736,24 @@ msgid "Selects the type of RL78 core being targeted (g10/g13/g14). The default
msgstr "Väljer typen av RL78-kärna att ha som mål (g10/g13/g14). Standard är G14. Om satt väljer det även stödet av hårdvarumultiplikation att använda."
#: config/rl78/rl78.opt:77
-#, fuzzy
-#| msgid "Alias for --help=target"
msgid "Alias for -mcpu=g10."
-msgstr "Alias för --help=target"
+msgstr "Alias för -mcpu=g10."
#: config/rl78/rl78.opt:81
-#, fuzzy
-#| msgid "Alias for --help=target"
msgid "Alias for -mcpu=g13."
-msgstr "Alias för --help=target"
+msgstr "Alias för -mcpu=g13."
#: config/rl78/rl78.opt:85 config/rl78/rl78.opt:89
-#, fuzzy
-#| msgid "Alias for --help=target"
msgid "Alias for -mcpu=g14."
-msgstr "Alias för --help=target"
+msgstr "Alias för -mcpu=g14."
#: config/rl78/rl78.opt:93
msgid "Assume ES is zero throughout program execution, use ES: for read-only data."
msgstr "Anta att ES är noll genom hela programkörningen, använd ES: för endast läsbara data."
#: config/stormy16/stormy16.opt:24
-#, fuzzy
-#| msgid "Provide libraries for the simulator"
msgid "Provide libraries for the simulator."
-msgstr "Tillhandahåll bibliotek för simulatorn"
+msgstr "Tillhandahåll bibliotek för simulatorn."
#: config/arm/arm-tables.opt:25
msgid "Known ARM CPUs (for use with the -mcpu= and -mtune= options):"
@@ -11721,188 +9772,136 @@ msgid "TLS dialect to use:"
msgstr "TLS-dialekt att använda:"
#: config/arm/arm.opt:36
-#, fuzzy
-#| msgid "Specify an ABI"
msgid "Specify an ABI."
-msgstr "Ange ett ABI"
+msgstr "Ange ett ABI."
#: config/arm/arm.opt:40
msgid "Known ARM ABIs (for use with the -mabi= option):"
msgstr "Kända ARM ABI:er (att användas med flaggan -mabi=):"
#: config/arm/arm.opt:59
-#, fuzzy
-#| msgid "Generate a call to abort if a noreturn function returns"
msgid "Generate a call to abort if a noreturn function returns."
-msgstr "Generera ett anrop till abort om en noreturn-funktion returnerar"
+msgstr "Generera ett anrop till abort om en noreturn-funktion returnerar."
#: config/arm/arm.opt:66
-#, fuzzy
-#| msgid "Pass FP arguments in FP registers"
msgid "Pass FP arguments in FP registers."
-msgstr "Skicka FP-argument i FP-register"
+msgstr "Skicka FP-argument i FP-register."
#: config/arm/arm.opt:70
-#, fuzzy
-#| msgid "Generate APCS conformant stack frames"
msgid "Generate APCS conformant stack frames."
-msgstr "Generera stackramar enligt APCS"
+msgstr "Generera stackramar enligt APCS."
#: config/arm/arm.opt:74
-#, fuzzy
-#| msgid "Generate re-entrant, PIC code"
msgid "Generate re-entrant, PIC code."
-msgstr "Generera återstartbar, PIC-kod"
+msgstr "Generera återstartbar, PIC-kod."
#: config/arm/arm.opt:90
msgid "Generate code in 32 bit ARM state."
msgstr "Generera kod i 32-bitars ARM-tillstånd."
#: config/arm/arm.opt:98
-#, fuzzy
-#| msgid "Thumb: Assume non-static functions may be called from ARM code"
msgid "Thumb: Assume non-static functions may be called from ARM code."
-msgstr "Thumb: Anta att icke-statiska funktioner kan anropas från ARM-kod"
+msgstr "Thumb: Anta att icke-statiska funktioner kan anropas från ARM-kod."
#: config/arm/arm.opt:102
-#, fuzzy
-#| msgid "Thumb: Assume function pointers may go to non-Thumb aware code"
msgid "Thumb: Assume function pointers may go to non-Thumb aware code."
-msgstr "Thumb: Anta att funktionspekare kan gå till icke-Thumb-medveten kod"
+msgstr "Thumb: Anta att funktionspekare kan gå till icke-Thumb-medveten kod."
#: config/arm/arm.opt:110
-#, fuzzy
-#| msgid "Specify if floating point hardware should be used"
msgid "Specify if floating point hardware should be used."
-msgstr "Ange om flyttalshårdvara skall användas"
+msgstr "Ange om flyttalshårdvara skall användas."
#: config/arm/arm.opt:114
msgid "Known floating-point ABIs (for use with the -mfloat-abi= option):"
msgstr "Kända flyttals-ABI:er (att användas med flaggan -mfloat-abi=):"
#: config/arm/arm.opt:127
-#, fuzzy
-#| msgid "Switch on/off MIPS16 ASE on alternating functions for compiler testing"
msgid "Switch ARM/Thumb modes on alternating functions for compiler testing."
-msgstr "Växla av/på MIPS16 ASE mellan alternerande funktioner för kompilatortestning"
+msgstr "Växla ARM-/Thumb-lägen mellan alternerande funktioner för kompilatortestning."
#: config/arm/arm.opt:131
-#, fuzzy
-#| msgid "Specify the __fp16 floating-point format"
msgid "Specify the __fp16 floating-point format."
-msgstr "Ange flyttalsformatet __fp16"
+msgstr "Ange flyttalsformatet __fp16."
#: config/arm/arm.opt:135
msgid "Known __fp16 formats (for use with the -mfp16-format= option):"
msgstr "Kända __fp16-format (att användas med flaggan -mfp16-format=):"
#: config/arm/arm.opt:148
-#, fuzzy
-#| msgid "Specify the name of the target floating point hardware/format"
msgid "Specify the name of the target floating point hardware/format."
-msgstr "Ange namnet på målets flyttalshårdvara/-format"
+msgstr "Ange namnet på målets flyttalshårdvara/-format."
#: config/arm/arm.opt:159
-#, fuzzy
-#| msgid "Generate call insns as indirect calls, if necessary"
msgid "Generate call insns as indirect calls, if necessary."
-msgstr "Generera anropsinstruktioner som indirekta anrop, om nödvändigt"
+msgstr "Generera anropsinstruktioner som indirekta anrop, om nödvändigt."
#: config/arm/arm.opt:163
msgid "Assume data segments are relative to text segment."
msgstr "Anta att datasegment är relativa till textsegment."
#: config/arm/arm.opt:167
-#, fuzzy
-#| msgid "Specify the register to be used for PIC addressing"
msgid "Specify the register to be used for PIC addressing."
-msgstr "Ange registret som skall användas för PIC-adressering"
+msgstr "Ange registret som skall användas för PIC-adressering."
#: config/arm/arm.opt:171
-#, fuzzy
-#| msgid "Store function names in object code"
msgid "Store function names in object code."
-msgstr "Lagra funktionsnamn i objektkod"
+msgstr "Lagra funktionsnamn i objektkod."
#: config/arm/arm.opt:175
-#, fuzzy
-#| msgid "Permit scheduling of a function's prologue sequence"
msgid "Permit scheduling of a function's prologue sequence."
-msgstr "Tillåt schemaläggning av en funktions prologsekvens"
+msgstr "Tillåt schemaläggning av en funktions prologsekvens."
#: config/arm/arm.opt:179 config/rs6000/rs6000.opt:248
-#, fuzzy
-#| msgid "Do not load the PIC register in function prologues"
msgid "Do not load the PIC register in function prologues."
-msgstr "Ladda inte PIC-registret i funktionsprologer"
+msgstr "Ladda inte PIC-registret i funktionsprologer."
#: config/arm/arm.opt:186
-#, fuzzy
-#| msgid "Specify the minimum bit alignment of structures"
msgid "Specify the minimum bit alignment of structures."
-msgstr "Ange den minsta justeringen i bitar för poster"
+msgstr "Ange den minsta justeringen i bitar för poster."
#: config/arm/arm.opt:190
-#, fuzzy
-#| msgid "Generate code for Thumb state"
msgid "Generate code for Thumb state."
-msgstr "Generera kod för Thumb-tillstånd"
+msgstr "Generera kod för Thumb-tillstånd."
#: config/arm/arm.opt:194
-#, fuzzy
-#| msgid "Support calls between Thumb and ARM instruction sets"
msgid "Support calls between Thumb and ARM instruction sets."
-msgstr "Stöd anrop mellan Thumb- och ARM-instruktionsuppsättningar"
+msgstr "Stöd anrop mellan Thumb- och ARM-instruktionsuppsättningar."
#: config/arm/arm.opt:198
-#, fuzzy
-#| msgid "Specify thread local storage scheme"
msgid "Specify thread local storage scheme."
-msgstr "Ange metod för trådlokal lagring"
+msgstr "Ange metod för trådlokal lagring."
#: config/arm/arm.opt:202
-#, fuzzy
-#| msgid "Specify how to access the thread pointer"
msgid "Specify how to access the thread pointer."
-msgstr "Ange hur trådpekaren skall nås"
+msgstr "Ange hur trådpekaren skall nås."
#: config/arm/arm.opt:206
msgid "Valid arguments to -mtp=:"
msgstr "Giltiga argument till -mtp=:"
#: config/arm/arm.opt:219
-#, fuzzy
-#| msgid "Thumb: Generate (non-leaf) stack frames even if not needed"
msgid "Thumb: Generate (non-leaf) stack frames even if not needed."
-msgstr "Thumb: Generera (icke-löv-)stackramar även om de inte behövs"
+msgstr "Thumb: Generera (icke-löv-)stackramar även om de inte behövs."
#: config/arm/arm.opt:223
-#, fuzzy
-#| msgid "Thumb: Generate (leaf) stack frames even if not needed"
msgid "Thumb: Generate (leaf) stack frames even if not needed."
-msgstr "Thumb: Generera (löv)stackramar även om de inte behövs"
+msgstr "Thumb: Generera (löv)stackramar även om de inte behövs."
#: config/arm/arm.opt:227 config/mn10300/mn10300.opt:42
-#, fuzzy
-#| msgid "Tune code for the given processor"
msgid "Tune code for the given processor."
-msgstr "Trimma koden för den angivna processorn"
+msgstr "Trimma koden för den angivna processorn."
#: config/arm/arm.opt:231
msgid "Print CPU tuning information as comment in assembler file. This is"
msgstr "Skriv ut CPU-trimningsinformation som en kommentar i assemblerfilen. Detta är"
#: config/arm/arm.opt:242
-#, fuzzy
-#| msgid "Use Neon quad-word (rather than double-word) registers for vectorization"
msgid "Use Neon quad-word (rather than double-word) registers for vectorization."
-msgstr "Använd Neons quad-ords- (snarare än dubbelords-)register för vektoriseringar"
+msgstr "Använd Neons quad-ords- (snarare än dubbelords-)register för vektoriseringar."
#: config/arm/arm.opt:246
-#, fuzzy
-#| msgid "Use Neon double-word (rather than quad-word) registers for vectorization"
msgid "Use Neon double-word (rather than quad-word) registers for vectorization."
-msgstr "Använd Neons dubbelords- (snarare än quad-ords-)register för vektoriseringar"
+msgstr "Använd Neons dubbelords- (snarare än quad-ords-)register för vektoriseringar."
#: config/arm/arm.opt:250
msgid "Only generate absolute relocations on word sized values."
@@ -11937,162 +9936,109 @@ msgid "Assume loading data from flash is slower than fetching instructions."
msgstr "Anta att ladda data från flash är långsammare än att hämta instruktioner."
#: config/arm/arm.opt:283
-#, fuzzy
-#| msgid "Assume unified syntax for Thumb inline assembly code."
msgid "Assume unified syntax for inline assembly code."
-msgstr "Anta unifierad syntax för Thumb-inline assemblerkod."
+msgstr "Anta unifierad syntax för inline:ad assemblerkod."
-# fixme: fp = flyttal, men hur skall man skriva det. Förkortat eller FPU?
#: config/sparc/sparc.opt:30 config/sparc/sparc.opt:34
#: config/visium/visium.opt:37
-#, fuzzy
-#| msgid "Use hardware FP"
msgid "Use hardware FP."
-msgstr "Använd hårdvaru-fp"
+msgstr "Använd hårdvaruflyttal."
#: config/sparc/sparc.opt:38 config/visium/visium.opt:41
-#, fuzzy
-#| msgid "Do not use hardware FP"
msgid "Do not use hardware FP."
-msgstr "Använd inte hårdvaru-fp"
+msgstr "Använd inte hårdvaru-fp."
#: config/sparc/sparc.opt:42
-#, fuzzy
-#| msgid "Use flat register window model"
msgid "Use flat register window model."
-msgstr "Använd platt registerfönstermodell"
+msgstr "Använd platt registerfönstermodell."
#: config/sparc/sparc.opt:46
-#, fuzzy
-#| msgid "Assume possible double misalignment"
msgid "Assume possible double misalignment."
-msgstr "Anta möjlig feljustering av double"
+msgstr "Anta möjlig feljustering av double."
#: config/sparc/sparc.opt:50
-#, fuzzy
-#| msgid "Use ABI reserved registers"
msgid "Use ABI reserved registers."
-msgstr "Använd register reserverade av ABI"
+msgstr "Använd register reserverade av ABI."
#: config/sparc/sparc.opt:54
-#, fuzzy
-#| msgid "Use hardware quad FP instructions"
msgid "Use hardware quad FP instructions."
-msgstr "Använd hårdvaruinstruktioner för quad fp"
+msgstr "Använd hårdvaruinstruktioner för quad fp."
#: config/sparc/sparc.opt:58
-#, fuzzy
-#| msgid "Do not use hardware quad fp instructions"
msgid "Do not use hardware quad fp instructions."
-msgstr "Använd inte hårdvaruinstruktioner för quad fp"
+msgstr "Använd inte hårdvaruinstruktioner för quad fp."
#: config/sparc/sparc.opt:62
-#, fuzzy
-#| msgid "Compile for V8+ ABI"
msgid "Compile for V8+ ABI."
-msgstr "Kompilera för V8+-ABI"
+msgstr "Kompilera för V8+-ABI."
#: config/sparc/sparc.opt:66
-#, fuzzy
-#| msgid "Use UltraSPARC Visual Instruction Set version 1.0 extensions"
msgid "Use UltraSPARC Visual Instruction Set version 1.0 extensions."
-msgstr "Utnyttja UltraSPARC-utökningarna Visual Instruction Set version 1.0"
+msgstr "Utnyttja UltraSPARC-utökningarna Visual Instruction Set version 1.0."
#: config/sparc/sparc.opt:70
-#, fuzzy
-#| msgid "Use UltraSPARC Visual Instruction Set version 2.0 extensions"
msgid "Use UltraSPARC Visual Instruction Set version 2.0 extensions."
-msgstr "Utnyttja UltraSPARC-utökningarna Visual Instruction Set version 2.0"
+msgstr "Utnyttja UltraSPARC-utökningarna Visual Instruction Set version 2.0."
#: config/sparc/sparc.opt:74
-#, fuzzy
-#| msgid "Use UltraSPARC Visual Instruction Set version 3.0 extensions"
msgid "Use UltraSPARC Visual Instruction Set version 3.0 extensions."
-msgstr "Utnyttja UltraSPARC-utökningarna Visual Instruction Set version 3.0"
+msgstr "Utnyttja UltraSPARC-utökningarna Visual Instruction Set version 3.0."
#: config/sparc/sparc.opt:78
-#, fuzzy
-#| msgid "Use UltraSPARC Compare-and-Branch extensions"
msgid "Use UltraSPARC Compare-and-Branch extensions."
-msgstr "Utnyttja UltraSPARC-utökningen jämför-och-grena"
+msgstr "Utnyttja UltraSPARC-utökningen jämför-och-grena."
#: config/sparc/sparc.opt:82
-#, fuzzy
-#| msgid "Use UltraSPARC Fused Multiply-Add extensions"
msgid "Use UltraSPARC Fused Multiply-Add extensions."
-msgstr "Utnyttja UltraSPARC-utökningen sammansmält multiplicera-addera"
+msgstr "Utnyttja UltraSPARC-utökningen sammansmält multiplicera-addera."
#: config/sparc/sparc.opt:86
-#, fuzzy
-#| msgid "Use UltraSPARC Population-Count instruction"
msgid "Use UltraSPARC Population-Count instruction."
-msgstr "Utnyttja UltraSparc:s instruktion populeringsantal"
+msgstr "Utnyttja UltraSparc:s instruktion populeringsantal."
#: config/sparc/sparc.opt:90
-#, fuzzy
-#| msgid "Pointers are 64-bit"
msgid "Pointers are 64-bit."
-msgstr "Pekare är 64-bitars"
+msgstr "Pekare är 64-bitars."
#: config/sparc/sparc.opt:94
-#, fuzzy
-#| msgid "Pointers are 32-bit"
msgid "Pointers are 32-bit."
-msgstr "Pekare är 32-bitars"
+msgstr "Pekare är 32-bitars."
#: config/sparc/sparc.opt:98
-#, fuzzy
-#| msgid "Use 64-bit ABI"
msgid "Use 64-bit ABI."
-msgstr "Använd 64-bitars ABI"
+msgstr "Använd 64-bitars ABI."
#: config/sparc/sparc.opt:102
-#, fuzzy
-#| msgid "Use 32-bit ABI"
msgid "Use 32-bit ABI."
-msgstr "Använd 32-bitars ABI"
+msgstr "Använd 32-bitars ABI."
#: config/sparc/sparc.opt:106
-#, fuzzy
-#| msgid "Use stack bias"
msgid "Use stack bias."
-msgstr "Använd stackförskjutning"
+msgstr "Använd stackförskjutning."
#: config/sparc/sparc.opt:110
-#, fuzzy
-#| msgid "Use structs on stronger alignment for double-word copies"
msgid "Use structs on stronger alignment for double-word copies."
-msgstr "Använd starkare justering för poster för dubbelordkopieringar"
+msgstr "Använd starkare justering för poster för dubbelordkopieringar."
#: config/sparc/sparc.opt:114
-#, fuzzy
-#| msgid "Optimize tail call instructions in assembler and linker"
msgid "Optimize tail call instructions in assembler and linker."
-msgstr "Optimera svansanropsinstruktioner i assembler och länkare"
+msgstr "Optimera svansanropsinstruktioner i assembler och länkare."
#: config/sparc/sparc.opt:118
-#, fuzzy
-#| msgid "Do not generate code that can only run in supervisor mode"
msgid "Do not generate code that can only run in supervisor mode (default)."
-msgstr "Generera inte kod som endast kan köra i övervakarläge"
+msgstr "Generera inte kod som endast kan köra i övervakarläge (standard)."
#: config/sparc/sparc.opt:122 config/visium/visium.opt:45
-#, fuzzy
-#| msgid "Use features of and schedule code for given CPU"
msgid "Use features of and schedule code for given CPU."
-msgstr "Använd funktioner i och schemalägg kod för angiven CPU"
+msgstr "Använd funktioner i och schemalägg kod för angiven CPU."
#: config/sparc/sparc.opt:199
-#, fuzzy
-#| msgid "Use given SPARC-V9 code model"
msgid "Use given SPARC-V9 code model."
-msgstr "Använd angiven SPARC-V9-kodmodell"
+msgstr "Använd angiven SPARC-V9-kodmodell."
#: config/sparc/sparc.opt:203
-#, fuzzy
-#| msgid "Enable debug output"
msgid "Enable debug output."
-msgstr "Aktivera felsökningsutdata"
+msgstr "Aktivera felsökningsutdata."
#: config/sparc/sparc.opt:207
msgid "Enable strict 32-bit psABI struct return checking."
@@ -12103,228 +10049,156 @@ msgid "Enable workaround for single erratum of AT697F processor"
msgstr "Aktivera en lösning för ensamt errata för processorn AT697F"
#: config/sparc/sparc.opt:216
-#, fuzzy
-#| msgid "Enable workarounds for the errata of the UT699 processor"
msgid "Enable workarounds for the errata of the UT699 processor."
-msgstr "Aktivera en lösning för errata för processorn UT699"
+msgstr "Aktivera en lösning för errata för processorn UT699."
#: config/sparc/sparc.opt:245
msgid "Specify the memory model in effect for the program."
msgstr "Ange minnesmodellen som skall gälla för programmet."
#: config/rs6000/darwin.opt:38 config/rs6000/sysv4.opt:141
-#, fuzzy
-#| msgid "Generate 64-bit code"
msgid "Generate 64-bit code."
-msgstr "Generera 64-bitars kod"
+msgstr "Generera 64-bitars kod."
#: config/rs6000/darwin.opt:42 config/rs6000/sysv4.opt:145
-#, fuzzy
-#| msgid "Generate 32-bit code"
msgid "Generate 32-bit code."
-msgstr "Generera 32-bitars kod"
+msgstr "Generera 32-bitars kod."
#: config/rs6000/rs6000-tables.opt:24
msgid "Known CPUs (for use with the -mcpu= and -mtune= options):"
msgstr "Kända CPU:er (att användas med flaggorna -mcpu= och -mtune=):"
#: config/rs6000/476.opt:24
-#, fuzzy
-#| msgid "Preserve the PowerPC 476's link stack by matching up a blr with the bcl/bl insns used for GOT accesses"
msgid "Preserve the PowerPC 476's link stack by matching up a blr with the bcl/bl insns used for GOT accesses."
-msgstr "Bevara PowerPC 476:ans länkstack genom att matcha en blr med bcl/bl-instruktionerna som används för GOT-åtkomster"
+msgstr "Bevara PowerPC 476:ans länkstack genom att matcha en blr med bcl/bl-instruktionerna som används för GOT-åtkomster."
#: config/rs6000/aix64.opt:24
-#, fuzzy
-#| msgid "Compile for 64-bit pointers"
msgid "Compile for 64-bit pointers."
-msgstr "Kompilera för 64-bitspekare"
+msgstr "Kompilera för 64-bitspekare."
#: config/rs6000/aix64.opt:28
-#, fuzzy
-#| msgid "Compile for 32-bit pointers"
msgid "Compile for 32-bit pointers."
-msgstr "Kompilera för 32-bitspekare"
+msgstr "Kompilera för 32-bitspekare."
#: config/rs6000/aix64.opt:32 config/rs6000/linux64.opt:28
-#, fuzzy
-#| msgid "Select code model"
msgid "Select code model."
-msgstr "Välj kodmodell"
+msgstr "Välj kodmodell."
#: config/rs6000/aix64.opt:49
-#, fuzzy
-#| msgid "Support message passing with the Parallel Environment"
msgid "Support message passing with the Parallel Environment."
-msgstr "Stöd meddelandeskickning med Parallel Environment"
+msgstr "Stöd meddelandeskickning med Parallel Environment."
#: config/rs6000/linux64.opt:24
-#, fuzzy
-#| msgid "Call mcount for profiling before a function prologue"
msgid "Call mcount for profiling before a function prologue."
-msgstr "Anropa mcount för profilering före en funktionsprolog"
+msgstr "Anropa mcount för profilering före en funktionsprolog."
#: config/rs6000/rs6000.opt:109
-#, fuzzy
-#| msgid "Use PowerPC-64 instruction set"
msgid "Use PowerPC-64 instruction set."
-msgstr "Använd instruktionsuppsättning för PowerPC-64"
+msgstr "Använd instruktionsuppsättning för PowerPC-64."
#: config/rs6000/rs6000.opt:113
-#, fuzzy
-#| msgid "Use PowerPC General Purpose group optional instructions"
msgid "Use PowerPC General Purpose group optional instructions."
-msgstr "Använd valbara instruktioner i gruppen PowerPC General Purpose"
+msgstr "Använd valbara instruktioner i gruppen PowerPC General Purpose."
#: config/rs6000/rs6000.opt:117
-#, fuzzy
-#| msgid "Use PowerPC Graphics group optional instructions"
msgid "Use PowerPC Graphics group optional instructions."
-msgstr "Använd valbara instruktioner i gruppen PowerPC Graphics"
+msgstr "Använd valbara instruktioner i gruppen PowerPC Graphics."
#: config/rs6000/rs6000.opt:121
-#, fuzzy
-#| msgid "Use PowerPC V2.01 single field mfcr instruction"
msgid "Use PowerPC V2.01 single field mfcr instruction."
-msgstr "Använd PowerPC V2.01:s enkelfälts mfcr-instruktion"
+msgstr "Använd PowerPC V2.01:s enkelfälts mfcr-instruktion."
#: config/rs6000/rs6000.opt:125
-#, fuzzy
-#| msgid "Use PowerPC V2.02 popcntb instruction"
msgid "Use PowerPC V2.02 popcntb instruction."
-msgstr "Använd PowerPC V2.02:s popcntb-instruktion"
+msgstr "Använd PowerPC V2.02:s popcntb-instruktion."
#: config/rs6000/rs6000.opt:129
-#, fuzzy
-#| msgid "Use PowerPC V2.02 floating point rounding instructions"
msgid "Use PowerPC V2.02 floating point rounding instructions."
-msgstr "Använd PowerPC V2.02:s flyttalsavrundningsinstruktioner"
+msgstr "Använd PowerPC V2.02:s flyttalsavrundningsinstruktioner."
#: config/rs6000/rs6000.opt:133
-#, fuzzy
-#| msgid "Use PowerPC V2.05 compare bytes instruction"
msgid "Use PowerPC V2.05 compare bytes instruction."
-msgstr "Använd PowerPC V2.05:s bytejämförelseinstruktion"
+msgstr "Använd PowerPC V2.05:s bytejämförelseinstruktion."
#: config/rs6000/rs6000.opt:137
-#, fuzzy
-#| msgid "Use extended PowerPC V2.05 move floating point to/from GPR instructions"
msgid "Use extended PowerPC V2.05 move floating point to/from GPR instructions."
-msgstr "Använd utökad PowerPC V2.05:s instruktion för att flytta flyttal till/från GPR"
+msgstr "Använd utökad PowerPC V2.05:s instruktion för att flytta flyttal till/från GPR."
#: config/rs6000/rs6000.opt:141
-#, fuzzy
-#| msgid "Use AltiVec instructions"
msgid "Use AltiVec instructions."
-msgstr "Använd AltiVec-instruktioner"
+msgstr "Använd AltiVec-instruktioner."
#: config/rs6000/rs6000.opt:145
-#, fuzzy
-#| msgid "Generate Altivec instructions using little-endian element order"
msgid "Generate Altivec instructions using little-endian element order."
-msgstr "Generera Altivec-instruktioner med elementordning för omvänd byteordning"
+msgstr "Generera Altivec-instruktioner med elementordning för omvänd byteordning."
#: config/rs6000/rs6000.opt:149
-#, fuzzy
-#| msgid "Generate Altivec instructions using big-endian element order"
msgid "Generate Altivec instructions using big-endian element order."
-msgstr "Generera Altivec-instruktioner med elementordning för rak byteordning"
+msgstr "Generera Altivec-instruktioner med elementordning för rak byteordning."
#: config/rs6000/rs6000.opt:153
-#, fuzzy
-#| msgid "Use decimal floating point instructions"
msgid "Use decimal floating point instructions."
-msgstr "Använd decimala flyttalsinstruktioner"
+msgstr "Använd decimala flyttalsinstruktioner."
#: config/rs6000/rs6000.opt:157
-#, fuzzy
-#| msgid "Use 4xx half-word multiply instructions"
msgid "Use 4xx half-word multiply instructions."
-msgstr "Använd 4xx:s halvords multiplikationsinstruktioner"
+msgstr "Använd 4xx:s halvords multiplikationsinstruktioner."
#: config/rs6000/rs6000.opt:161
-#, fuzzy
-#| msgid "Use 4xx string-search dlmzb instruction"
msgid "Use 4xx string-search dlmzb instruction."
-msgstr "Använd 4xx:s strängsöknings dlmzb-instruktion"
+msgstr "Använd 4xx:s strängsöknings dlmzb-instruktion."
#: config/rs6000/rs6000.opt:165
-#, fuzzy
-#| msgid "Generate load/store multiple instructions"
msgid "Generate load/store multiple instructions."
-msgstr "Generera load/store multiple-instruktioner"
+msgstr "Generera ladda/lagra-multipla-instruktioner."
#: config/rs6000/rs6000.opt:169
-#, fuzzy
-#| msgid "Generate string instructions for block moves"
msgid "Generate string instructions for block moves."
-msgstr "Generera stränginstruktioner för blockförflyttningar"
+msgstr "Generera stränginstruktioner för blockförflyttningar."
#: config/rs6000/rs6000.opt:181
-#, fuzzy
-#| msgid "Use PowerPC V2.06 popcntd instruction"
msgid "Use PowerPC V2.06 popcntd instruction."
-msgstr "Använd PowerPC V2.06:s popcntd-instruktion"
+msgstr "Använd PowerPC V2.06:s popcntd-instruktion."
#: config/rs6000/rs6000.opt:185
-#, fuzzy
-#| msgid "Under -ffast-math, generate a FRIZ instruction for (double)(long long) conversions"
msgid "Under -ffast-math, generate a FRIZ instruction for (double)(long long) conversions."
-msgstr "Under -ffast-math, generera en FRIZ-instruktion för (double)(long long)-konverteringar."
+msgstr "Under -ffast-math, generera en FRIZ-instruktion för (double)(long long)-konverteringar.."
#: config/rs6000/rs6000.opt:193
-#, fuzzy
-#| msgid "Use vector/scalar (VSX) instructions"
msgid "Use vector/scalar (VSX) instructions."
-msgstr "Använd vektor-/skalärinstruktioner (VSX)"
+msgstr "Använd vektor-/skalärinstruktioner (VSX)."
#: config/rs6000/rs6000.opt:240
-#, fuzzy
-#| msgid "Do not generate load/store with update instructions"
msgid "Do not generate load/store with update instructions."
-msgstr "Generera inte load/store-instruktioner med uppdatering"
+msgstr "Generera inte ladda/lagra-instruktioner med uppdatering."
#: config/rs6000/rs6000.opt:244
-#, fuzzy
-#| msgid "Generate load/store with update instructions"
msgid "Generate load/store with update instructions."
-msgstr "Generera load/store-instruktioner med uppdatering"
+msgstr "Generera ladda/lagra-instruktioner med uppdatering."
#: config/rs6000/rs6000.opt:252
-#, fuzzy
-#| msgid "Avoid generation of indexed load/store instructions when possible"
msgid "Avoid generation of indexed load/store instructions when possible."
-msgstr "Undvik att generera indexerade load/store-instruktioner så långt möjligt"
+msgstr "Undvik att generera indexerade ladda/lagra-instruktioner så långt möjligt."
#: config/rs6000/rs6000.opt:256
-#, fuzzy
-#| msgid "Mark __tls_get_addr calls with argument info"
msgid "Mark __tls_get_addr calls with argument info."
-msgstr "Märk __tls_get_addr-anrop med argumentinformation"
+msgstr "Märk __tls_get_addr-anrop med argumentinformation."
#: config/rs6000/rs6000.opt:263
-#, fuzzy
-#| msgid "Schedule the start and end of the procedure"
msgid "Schedule the start and end of the procedure."
-msgstr "Schemalägg början och slutet av proceduren"
+msgstr "Schemalägg början och slutet av proceduren."
#: config/rs6000/rs6000.opt:267
-#, fuzzy
-#| msgid "Return all structures in memory (AIX default)"
msgid "Return all structures in memory (AIX default)."
-msgstr "Returnera alla strukturer i minnet (standard för AIX)"
+msgstr "Returnera alla strukturer i minnet (standard för AIX)."
#: config/rs6000/rs6000.opt:271
-#, fuzzy
-#| msgid "Return small structures in registers (SVR4 default)"
msgid "Return small structures in registers (SVR4 default)."
-msgstr "Returnera små strukturer i register (standard för SVR4)"
+msgstr "Returnera små strukturer i register (standard för SVR4)."
#: config/rs6000/rs6000.opt:275
-#, fuzzy
-#| msgid "Conform more closely to IBM XLC semantics"
msgid "Conform more closely to IBM XLC semantics."
-msgstr "Följ mer noga IBM XLC:s semantik"
+msgstr "Följ mer noga IBM XLC:s semantik."
#: config/rs6000/rs6000.opt:279 config/rs6000/rs6000.opt:283
msgid "Generate software reciprocal divide and square root for better throughput."
@@ -12335,148 +10209,100 @@ msgid "Assume that the reciprocal estimate instructions provide more accuracy."
msgstr "Antag att de ömsesidiga uppskattningsinstruktionerna ger mer precision."
#: config/rs6000/rs6000.opt:291
-#, fuzzy
-#| msgid "Do not place floating point constants in TOC"
msgid "Do not place floating point constants in TOC."
-msgstr "Placera inte flyttalskonstanter i TOC"
+msgstr "Placera inte flyttalskonstanter i TOC."
#: config/rs6000/rs6000.opt:295
-#, fuzzy
-#| msgid "Place floating point constants in TOC"
msgid "Place floating point constants in TOC."
-msgstr "Placera flyttalskonstanter i TOC"
+msgstr "Placera flyttalskonstanter i TOC."
#: config/rs6000/rs6000.opt:299
-#, fuzzy
-#| msgid "Do not place symbol+offset constants in TOC"
msgid "Do not place symbol+offset constants in TOC."
-msgstr "Placera inte symbol+avstånd-konstanter i TOC"
+msgstr "Placera inte symbol+avstånd-konstanter i TOC."
#: config/rs6000/rs6000.opt:303
-#, fuzzy
-#| msgid "Place symbol+offset constants in TOC"
msgid "Place symbol+offset constants in TOC."
-msgstr "Placera symbol+avstånd-konstanter i TOC"
+msgstr "Placera symbol+avstånd-konstanter i TOC."
#: config/rs6000/rs6000.opt:314
-#, fuzzy
-#| msgid "Use only one TOC entry per procedure"
msgid "Use only one TOC entry per procedure."
-msgstr "Använd endast en TOC-post per procedur"
+msgstr "Använd endast en TOC-post per procedur."
#: config/rs6000/rs6000.opt:318
-#, fuzzy
-#| msgid "Put everything in the regular TOC"
msgid "Put everything in the regular TOC."
-msgstr "Placera allting i den vanliga TOC"
+msgstr "Placera allting i den vanliga TOC."
#: config/rs6000/rs6000.opt:322
-#, fuzzy
-#| msgid "Generate VRSAVE instructions when generating AltiVec code"
msgid "Generate VRSAVE instructions when generating AltiVec code."
-msgstr "Generera VRSAVE-instruktioner när AltiVec-kod genereras"
+msgstr "Generera VRSAVE-instruktioner när AltiVec-kod genereras."
#: config/rs6000/rs6000.opt:326
-#, fuzzy
-#| msgid "Deprecated option. Use -mno-vrsave instead"
msgid "Deprecated option. Use -mno-vrsave instead."
-msgstr "Undanbedd flagga. Använd -mno-vrsave istället"
+msgstr "Undanbedd flagga. Använd -mno-vrsave istället."
#: config/rs6000/rs6000.opt:330
-#, fuzzy
-#| msgid "Deprecated option. Use -mvrsave instead"
msgid "Deprecated option. Use -mvrsave instead."
-msgstr "Undanbedd flagga. Använd -mvrsave istället"
+msgstr "Undanbedd flagga. Använd -mvrsave istället."
#: config/rs6000/rs6000.opt:334
-#, fuzzy
-#| msgid "Specify how many bytes should be moved inline before calling out to memcpy/memmove"
msgid "Specify how many bytes should be moved inline before calling out to memcpy/memmove."
-msgstr "Ange hur många byte som bör flyttas inline före anrop av memcpy/memmove"
+msgstr "Ange hur många byte som bör flyttas inline före anrop av memcpy/memmove."
#: config/rs6000/rs6000.opt:338
-#, fuzzy
-#| msgid "Generate isel instructions"
msgid "Generate isel instructions."
-msgstr "Generera isel-instruktioner"
+msgstr "Generera isel-instruktioner."
#: config/rs6000/rs6000.opt:342
-#, fuzzy
-#| msgid "Deprecated option. Use -mno-isel instead"
msgid "Deprecated option. Use -mno-isel instead."
-msgstr "Undanbedd flagga. Använd -mno-isel istället"
+msgstr "Undanbedd flagga. Använd -mno-isel istället."
#: config/rs6000/rs6000.opt:346
-#, fuzzy
-#| msgid "Deprecated option. Use -misel instead"
msgid "Deprecated option. Use -misel instead."
-msgstr "Undanbedd flagga. Använd -misel istället"
+msgstr "Undanbedd flagga. Använd -misel istället."
#: config/rs6000/rs6000.opt:350
-#, fuzzy
-#| msgid "Generate SPE SIMD instructions on E500"
msgid "Generate SPE SIMD instructions on E500."
-msgstr "Generera SPE SIMD-instruktioner för E500"
+msgstr "Generera SPE SIMD-instruktioner för E500."
#: config/rs6000/rs6000.opt:354
-#, fuzzy
-#| msgid "Generate PPC750CL paired-single instructions"
msgid "Generate PPC750CL paired-single instructions."
-msgstr "Generera PPC750CL:s par-singel-instruktioner"
+msgstr "Generera PPC750CL:s par-singel-instruktioner."
#: config/rs6000/rs6000.opt:358
-#, fuzzy
-#| msgid "Deprecated option. Use -mno-spe instead"
msgid "Deprecated option. Use -mno-spe instead."
-msgstr "Undanbedd flagga. Använd -mno-spe istället"
+msgstr "Undanbedd flagga. Använd -mno-spe istället."
#: config/rs6000/rs6000.opt:362
-#, fuzzy
-#| msgid "Deprecated option. Use -mspe instead"
msgid "Deprecated option. Use -mspe instead."
-msgstr "Undanbedd flagga. Använd -mspe istället"
+msgstr "Undanbedd flagga. Använd -mspe istället."
#: config/rs6000/rs6000.opt:366
-#, fuzzy
-#| msgid "-mdebug=\tEnable debug output"
msgid "-mdebug=\tEnable debug output."
-msgstr "-mdebug=\tAktivera felsökningsutdata"
+msgstr "-mdebug=\tAktivera felsökningsutdata."
#: config/rs6000/rs6000.opt:370
-#, fuzzy
-#| msgid "Use the AltiVec ABI extensions"
msgid "Use the AltiVec ABI extensions."
-msgstr "Använd ABI-utökningarna AltiVec"
+msgstr "Använd ABI-utökningarna AltiVec."
#: config/rs6000/rs6000.opt:374
-#, fuzzy
-#| msgid "Do not use the AltiVec ABI extensions"
msgid "Do not use the AltiVec ABI extensions."
-msgstr "Använd inte ABI-utökningarna AltiVec"
+msgstr "Använd inte ABI-utökningarna AltiVec."
#: config/rs6000/rs6000.opt:378
-#, fuzzy
-#| msgid "Use the SPE ABI extensions"
msgid "Use the SPE ABI extensions."
-msgstr "Använd ABI-utökningarna SPE"
+msgstr "Använd ABI-utökningarna SPE."
#: config/rs6000/rs6000.opt:382
-#, fuzzy
-#| msgid "Do not use the SPE ABI extensions"
msgid "Do not use the SPE ABI extensions."
-msgstr "Använd inte ABI-utökningarna SPE"
+msgstr "Använd inte ABI-utökningarna SPE."
#: config/rs6000/rs6000.opt:386
-#, fuzzy
-#| msgid "Use the ELFv1 ABI"
msgid "Use the ELFv1 ABI."
-msgstr "Använd ELFv1 ABI"
+msgstr "Använd ELFv1 ABI."
#: config/rs6000/rs6000.opt:390
-#, fuzzy
-#| msgid "Use the ELFv2 ABI"
msgid "Use the ELFv2 ABI."
-msgstr "Använd ELFv2 ABI"
+msgstr "Använd ELFv2 ABI."
#: config/rs6000/rs6000.opt:397
msgid "using darwin64 ABI"
@@ -12495,114 +10321,80 @@ msgid "using IBM extended precision long double"
msgstr "använder long double med IBM:s utökade precision"
#: config/rs6000/rs6000.opt:410
-#, fuzzy
-#| msgid "-mcpu=\tUse features of and schedule code for given CPU"
msgid "-mcpu=\tUse features of and schedule code for given CPU."
-msgstr "-mcpu=\tAnvänd funktioner i och schemalägg kod för angiven CPU"
+msgstr "-mcpu=\tAnvänd funktioner i och schemalägg kod för angiven CPU."
#: config/rs6000/rs6000.opt:414
-#, fuzzy
-#| msgid "-mtune=\tSchedule code for given CPU"
msgid "-mtune=\tSchedule code for given CPU."
-msgstr "-mtune=\tSchemalägg kod för en given CPU"
+msgstr "-mtune=\tSchemalägg kod för en given CPU."
#: config/rs6000/rs6000.opt:418
-#, fuzzy
-#| msgid "-mtraceback=\tSelect full, part, or no traceback table"
msgid "-mtraceback=\tSelect full, part, or no traceback table."
-msgstr "-mtraceback=\tVälj fullständig, partiell, eller ingen bakåtspårningstabell"
+msgstr "-mtraceback=\tVälj fullständig, partiell, eller ingen bakåtspårningstabell."
#: config/rs6000/rs6000.opt:434
-#, fuzzy
-#| msgid "Avoid all range limits on call instructions"
msgid "Avoid all range limits on call instructions."
-msgstr "Undvik alla avståndsgränser vid anropsinstruktioner"
+msgstr "Undvik alla avståndsgränser vid anropsinstruktioner."
#: config/rs6000/rs6000.opt:438
-#, fuzzy
-#| msgid "Generate Cell microcode"
msgid "Generate Cell microcode."
-msgstr "Generera Cell-mikrokod"
+msgstr "Generera Cell-mikrokod."
#: config/rs6000/rs6000.opt:442
-#, fuzzy
-#| msgid "Warn when a Cell microcoded instruction is emitted"
msgid "Warn when a Cell microcoded instruction is emitted."
-msgstr "Varna när en Cell-mikrokodsinstruktion avges"
+msgstr "Varna när en Cell-mikrokodsinstruktion avges."
#: config/rs6000/rs6000.opt:446
-#, fuzzy
-#| msgid "Warn about deprecated 'vector long ...' AltiVec type usage"
msgid "Warn about deprecated 'vector long ...' AltiVec type usage."
-msgstr "Varna för användning av AltiVec-typen â€vector long ...†som bör undvikas"
+msgstr "Varna för användning av AltiVec-typen â€vector long ...†som bör undvikas."
#: config/rs6000/rs6000.opt:450
-#, fuzzy
-#| msgid "-mfloat-gprs=\tSelect GPR floating point method"
msgid "-mfloat-gprs=\tSelect GPR floating point method."
-msgstr "-mfloat-gprs=\tVälj GPR-flyttalsmetod"
+msgstr "-mfloat-gprs=\tVälj GPR-flyttalsmetod."
#: config/rs6000/rs6000.opt:454
msgid "Valid arguments to -mfloat-gprs=:"
msgstr "Giltiga argument till -mfloat-gprs=:"
#: config/rs6000/rs6000.opt:470
-#, fuzzy
-#| msgid "-mlong-double-<n>\tSpecify size of long double (64 or 128 bits)"
msgid "-mlong-double-<n>\tSpecify size of long double (64 or 128 bits)."
-msgstr "-mlong-double-<n>\tAnge storlek på long double (64 eller 128 bitar)"
+msgstr "-mlong-double-<n>\tAnge storlek på long double (64 eller 128 bitar)."
#: config/rs6000/rs6000.opt:478
-#, fuzzy
-#| msgid "Determine which dependences between insns are considered costly"
msgid "Determine which dependences between insns are considered costly."
-msgstr "Ange vilka beroenden mellan instruktioner som skall anses dyra"
+msgstr "Ange vilka beroenden mellan instruktioner som skall anses dyra."
#: config/rs6000/rs6000.opt:482
-#, fuzzy
-#| msgid "Specify which post scheduling nop insertion scheme to apply"
msgid "Specify which post scheduling nop insertion scheme to apply."
-msgstr "Ange metod att tillämpa för inskjutande av nop efter schemaläggning"
+msgstr "Ange metod att tillämpa för inskjutande av nop efter schemaläggning."
#: config/rs6000/rs6000.opt:486
-#, fuzzy
-#| msgid "Specify alignment of structure fields default/natural"
msgid "Specify alignment of structure fields default/natural."
-msgstr "Ange justering av postfält till default/natural"
+msgstr "Ange justering av postfält till default/natural."
#: config/rs6000/rs6000.opt:490
msgid "Valid arguments to -malign-:"
msgstr "Giltiga argument till -malign-:"
#: config/rs6000/rs6000.opt:500
-#, fuzzy
-#| msgid "Specify scheduling priority for dispatch slot restricted insns"
msgid "Specify scheduling priority for dispatch slot restricted insns."
-msgstr "Ange schemaläggningsprioritet för begränsade instruktioner för avsändningsfack"
+msgstr "Ange schemaläggningsprioritet för begränsade instruktioner för avsändningsfack."
#: config/rs6000/rs6000.opt:504
-#, fuzzy
-#| msgid "Single-precision floating point unit"
msgid "Single-precision floating point unit."
-msgstr "Enkelprecisions flyttalsenhet"
+msgstr "Enkelprecisions flyttalsenhet."
#: config/rs6000/rs6000.opt:508
-#, fuzzy
-#| msgid "Double-precision floating point unit"
msgid "Double-precision floating point unit."
-msgstr "Dubbelprecisions flyttalsenhet"
+msgstr "Dubbelprecisions flyttalsenhet."
#: config/rs6000/rs6000.opt:512
-#, fuzzy
-#| msgid "Floating point unit does not support divide & sqrt"
msgid "Floating point unit does not support divide & sqrt."
-msgstr "Flyttalsenheten stödjer inte division & kvadratrot"
+msgstr "Flyttalsenheten stödjer inte division & kvadratrot."
#: config/rs6000/rs6000.opt:516
-#, fuzzy
-#| msgid "-mfpu=\tSpecify FP (sp, dp, sp-lite, dp-lite) (implies -mxilinx-fpu)"
msgid "-mfpu=\tSpecify FP (sp, dp, sp-lite, dp-lite) (implies -mxilinx-fpu)."
-msgstr "-mfpu=\tAnge FP (sp, dp, sp-lite, dp-lite) (implicerar -mxilinx-fpu)"
+msgstr "-mfpu=\tAnge FP (sp, dp, sp-lite, dp-lite) (implicerar -mxilinx-fpu)."
#: config/rs6000/rs6000.opt:538
msgid "Specify Xilinx FPU."
@@ -12613,50 +10405,36 @@ msgid "Use/do not use r11 to hold the static link in calls to functions via poin
msgstr "Använd/använd inte r11 för att hålla den statiska länken i anrop till funktioner via pekare."
#: config/rs6000/rs6000.opt:546
-#, fuzzy
-#| msgid "Control whether we save the TOC in the prologue for indirect calls or generate the save inline"
msgid "Control whether we save the TOC in the prologue for indirect calls or generate the save inline."
-msgstr "Bestäm huruvida vi sparar TOC:en i prologen för indirekta anrop eller genererar sparandet inline"
+msgstr "Bestäm huruvida vi sparar TOC:en i prologen för indirekta anrop eller genererar sparandet inline."
#: config/rs6000/rs6000.opt:550
-#, fuzzy
-#| msgid "Allow 128-bit integers in VSX registers"
msgid "Allow 128-bit integers in VSX registers."
-msgstr "Tillåt 128-bitars heltal i VSX-register"
+msgstr "Tillåt 128-bitars heltal i VSX-register."
#: config/rs6000/rs6000.opt:554
-#, fuzzy
-#| msgid "Fuse certain integer operations together for better performance on power8"
msgid "Fuse certain integer operations together for better performance on power8."
-msgstr "Smält samman vissa heltalsoperationer för bättre prestanda på power8"
+msgstr "Smält samman vissa heltalsoperationer för bättre prestanda på power8."
#: config/rs6000/rs6000.opt:558
-#, fuzzy
-#| msgid "Allow sign extension in fusion operations"
msgid "Allow sign extension in fusion operations."
-msgstr "Tillåt teckenutökning i sammanslagningsoperationer"
+msgstr "Tillåt teckenutökning i sammanslagningsoperationer."
#: config/rs6000/rs6000.opt:562
msgid "Use/do not use vector and scalar instructions added in ISA 2.07."
msgstr "Använd/använd inte vektor och skalära instruktioner som lades till i ISA 2.07."
#: config/rs6000/rs6000.opt:566
-#, fuzzy
-#| msgid "Use ISA 2.07 Category:Vector.AES and Category:Vector.SHA2 instructions"
msgid "Use ISA 2.07 Category:Vector.AES and Category:Vector.SHA2 instructions."
-msgstr "Använd ISA 2.07 instruktioner Category:Vector.AES och Category:Vector.SHA2"
+msgstr "Använd ISA 2.07 instruktioner Category:Vector.AES och Category:Vector.SHA2."
#: config/rs6000/rs6000.opt:570
-#, fuzzy
-#| msgid "Use ISA 2.07 direct move between GPR & VSX register instructions"
msgid "Use ISA 2.07 direct move between GPR & VSX register instructions."
-msgstr "Använd ISA 2.07:s direkta förflyttning mellan GPR- och VSX-registerinstruktioner"
+msgstr "Använd ISA 2.07:s direkta förflyttning mellan GPR- och VSX-registerinstruktioner."
#: config/rs6000/rs6000.opt:574
-#, fuzzy
-#| msgid "Use ISA 2.07 transactional memory (HTM) instructions"
msgid "Use ISA 2.07 transactional memory (HTM) instructions."
-msgstr "Använd ISA 2.07 transaktionsminnesinstruktioner (HTM)"
+msgstr "Använd ISA 2.07 transaktionsminnesinstruktioner (HTM)."
#: config/rs6000/rs6000.opt:578
msgid "Generate the quad word memory instructions (lq/stq)."
@@ -12671,426 +10449,294 @@ msgid "Generate aggregate parameter passing code with at most 64-bit alignment."
msgstr "Generera kod för att skicka aggregerade parametrar med som mes 64-bitars justering."
#: config/rs6000/rs6000.opt:590
-#, fuzzy
-#| msgid "Allow double variables in upper registers with -mcpu=power7 or -mvsx"
msgid "Allow double variables in upper registers with -mcpu=power7 or -mvsx."
-msgstr "Tillåt double-variabler i övre register med -mcpu=power7 eller -mvsx"
+msgstr "Tillåt double-variabler i övre register med -mcpu=power7 eller -mvsx."
#: config/rs6000/rs6000.opt:594
-#, fuzzy
-#| msgid "Allow float variables in upper registers with -mcpu=power8 or -mpower8-vector"
msgid "Allow float variables in upper registers with -mcpu=power8 or -mpower8-vector."
-msgstr "Tillåt flyttalsvariabler i övre register med -mcpu=power8 eller mpower8-vector"
+msgstr "Tillåt flyttalsvariabler i övre register med -mcpu=power8 eller mpower8-vector."
#: config/rs6000/rs6000.opt:598
-#, fuzzy
-#| msgid "Allow float/double variables in upper registers if cpu allows it"
msgid "Allow float/double variables in upper registers if cpu allows it."
-msgstr "Tillåt float/double-variabler i övre register om cpu:n tillåter det"
+msgstr "Tillåt float/double-variabler i övre register om cpu:n tillåter det."
#: config/rs6000/rs6000.opt:602
msgid "Analyze and remove doubleword swaps from VSX computations."
msgstr "Analysera och ta bort dubbelordsbyten från VSX-beräkningar."
#: config/rs6000/rs6000.opt:606
-#, fuzzy
-#| msgid "Fuse certain integer operations together for better performance on power8"
msgid "Fuse certain operations together for better performance on power9."
-msgstr "Smält samman vissa heltalsoperationer för bättre prestanda på power8"
+msgstr "Smält samman vissa operationer för bättre prestanda på power9."
#: config/rs6000/rs6000.opt:610 config/rs6000/rs6000.opt:614
-#, fuzzy
-#| msgid "Use/do not use vector and scalar instructions added in ISA 2.07."
msgid "Use/do not use vector and scalar instructions added in ISA 3.0."
-msgstr "Använd/använd inte vektor och skalära instruktioner som lades till i ISA 2.07."
+msgstr "Använd/använd inte vektor- och skalära instruktioner som lades till i ISA 3.0."
#: config/rs6000/rs6000.opt:618
-#, fuzzy
-#| msgid "Use/do not use vector and scalar instructions added in ISA 2.07."
msgid "Use/do not use the new min/max instructions defined in ISA 3.0."
-msgstr "Använd/använd inte vektor och skalära instruktioner som lades till i ISA 2.07."
+msgstr "Använd/använd inte de nya min-/maxinstruktionerna som definierades i ISA 3.0."
#: config/rs6000/rs6000.opt:622
msgid "Fuse medium/large code model toc references with the memory instruction."
msgstr "Slå samman medium/stor modellers toc-referenser med minnesinstruktionen."
#: config/rs6000/rs6000.opt:626
-#, fuzzy
-#| msgid "Generate isel instructions"
msgid "Generate the integer modulo instructions."
-msgstr "Generera isel-instruktioner"
+msgstr "Generera heltalsmoduloinstruktioner."
#: config/rs6000/rs6000.opt:630
msgid "Enable/disable IEEE 128-bit floating point via the __float128 keyword."
msgstr "Aktivera/avaktivera IEEE 128-bitars flyttal via nyckelordet __float128."
#: config/rs6000/rs6000.opt:634
-#, fuzzy
-#| msgid "Use decimal floating point instructions"
msgid "Enable/disable using IEEE 128-bit floating point instructions."
-msgstr "Använd decimala flyttalsinstruktioner"
+msgstr "Aktivera/avaktivera användning av IEEE 128-bitars flyttalsinstruktioner."
#: config/rs6000/rs6000.opt:638
msgid "Enable/disable default conversions between __float128 & long double."
msgstr "Aktivera/avaktivera standardkonvertering mellan __float128 & long double."
#: config/rs6000/sysv4.opt:24
-#, fuzzy
-#| msgid "Select ABI calling convention"
msgid "Select ABI calling convention."
-msgstr "Välj ABI-konvention för anrop"
+msgstr "Välj ABI-konvention för anrop."
#: config/rs6000/sysv4.opt:28 config/c6x/c6x.opt:42
-#, fuzzy
-#| msgid "Select method for sdata handling"
msgid "Select method for sdata handling."
-msgstr "Välj metod för hantering av sdata"
+msgstr "Välj metod för hantering av sdata."
#: config/rs6000/sysv4.opt:48 config/rs6000/sysv4.opt:52
-#, fuzzy
-#| msgid "Align to the base type of the bit-field"
msgid "Align to the base type of the bit-field."
-msgstr "Justera till bastypen av bitfältet"
+msgstr "Justera till bastypen av bitfältet."
#: config/rs6000/sysv4.opt:57 config/rs6000/sysv4.opt:61
-#, fuzzy
-#| msgid "Produce code relocatable at runtime"
msgid "Produce code relocatable at runtime."
-msgstr "Producera kod som kan omlokaliseras vid körtillfället"
+msgstr "Producera kod som kan omlokaliseras vid körtillfället."
#: config/rs6000/sysv4.opt:65 config/rs6000/sysv4.opt:69
-#, fuzzy
-#| msgid "Produce little endian code"
msgid "Produce little endian code."
-msgstr "Producera kod med omvänd byteordning"
+msgstr "Producera kod med omvänd byteordning."
#: config/rs6000/sysv4.opt:73 config/rs6000/sysv4.opt:77
-#, fuzzy
-#| msgid "Produce big endian code"
msgid "Produce big endian code."
-msgstr "Producera kod med rak byteordning"
+msgstr "Producera kod med rak byteordning."
#: 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
-#, fuzzy
-#| msgid "no description yet"
msgid "no description yet."
-msgstr "ingen beskrivning ännu"
+msgstr "ingen beskrivning ännu."
#: config/rs6000/sysv4.opt:90
-#, fuzzy
-#| msgid "Assume all variable arg functions are prototyped"
msgid "Assume all variable arg functions are prototyped."
-msgstr "Anta att alla funktioner med variabelt antal argument har prototyp"
+msgstr "Anta att alla funktioner med variabelt antal argument har prototyp."
#: config/rs6000/sysv4.opt:99
-#, fuzzy
-#| msgid "Use EABI"
msgid "Use EABI."
-msgstr "Använd EABI"
+msgstr "Använd EABI."
#: config/rs6000/sysv4.opt:103
-#, fuzzy
-#| msgid "Allow bit-fields to cross word boundaries"
msgid "Allow bit-fields to cross word boundaries."
-msgstr "Tillåt att bitfält går över ordgränser"
+msgstr "Tillåt att bitfält går över ordgränser."
#: config/rs6000/sysv4.opt:107
-#, fuzzy
-#| msgid "Use alternate register names"
msgid "Use alternate register names."
-msgstr "Använd alternativa registernamn"
+msgstr "Använd alternativa registernamn."
#: config/rs6000/sysv4.opt:113
-#, fuzzy
-#| msgid "Use default method for sdata handling"
msgid "Use default method for sdata handling."
-msgstr "Använd standardmetod för hantering av sdata"
+msgstr "Använd standardmetod för hantering av sdata."
#: config/rs6000/sysv4.opt:117
-#, fuzzy
-#| msgid "Link with libsim.a, libc.a and sim-crt0.o"
msgid "Link with libsim.a, libc.a and sim-crt0.o."
-msgstr "Länka med libsim.a, libc.a och sim-crt0.o"
+msgstr "Länka med libsim.a, libc.a och sim-crt0.o."
#: config/rs6000/sysv4.opt:121
-#, fuzzy
-#| msgid "Link with libads.a, libc.a and crt0.o"
msgid "Link with libads.a, libc.a and crt0.o."
-msgstr "Länka med libads.a, libc.a och crt0.o"
+msgstr "Länka med libads.a, libc.a och crt0.o."
#: config/rs6000/sysv4.opt:125
-#, fuzzy
-#| msgid "Link with libyk.a, libc.a and crt0.o"
msgid "Link with libyk.a, libc.a and crt0.o."
-msgstr "Länka med libyk.a, libc.a och crt0.o"
+msgstr "Länka med libyk.a, libc.a och crt0.o."
#: config/rs6000/sysv4.opt:129
-#, fuzzy
-#| msgid "Link with libmvme.a, libc.a and crt0.o"
msgid "Link with libmvme.a, libc.a and crt0.o."
-msgstr "Länka med libmvme.a, libc.a och crt0.o"
+msgstr "Länka med libmvme.a, libc.a och crt0.o."
#: config/rs6000/sysv4.opt:133
-#, fuzzy
-#| msgid "Set the PPC_EMB bit in the ELF flags header"
msgid "Set the PPC_EMB bit in the ELF flags header."
-msgstr "Sätt biten PPC_EMB i ELF:s flaggfält"
+msgstr "Sätt biten PPC_EMB i ELF:s flaggfält."
#: config/rs6000/sysv4.opt:153
-#, fuzzy
-#| msgid "Generate code to use a non-exec PLT and GOT"
msgid "Generate code to use a non-exec PLT and GOT."
-msgstr "Generera kod för att använda ej-exec PLT och GOT"
+msgstr "Generera kod för att använda ej-exec PLT och GOT."
#: config/rs6000/sysv4.opt:157
-#, fuzzy
-#| msgid "Generate code for old exec BSS PLT"
msgid "Generate code for old exec BSS PLT."
-msgstr "Generera kod för gammal exec BSS PLT"
+msgstr "Generera kod för gammal exec BSS PLT."
#: config/alpha/alpha.opt:27
-#, fuzzy
-#| msgid "Use fp registers"
msgid "Use fp registers."
-msgstr "Använd fp-register"
+msgstr "Använd fp-register."
#: config/alpha/alpha.opt:35
-#, fuzzy
-#| msgid "Request IEEE-conformant math library routines (OSF/1)"
msgid "Request IEEE-conformant math library routines (OSF/1)."
-msgstr "Begär matematikbiblioteksfunktioner som följer IEEE (OSF/1)"
+msgstr "Begär matematikbiblioteksfunktioner som följer IEEE (OSF/1)."
#: config/alpha/alpha.opt:39
-#, fuzzy
-#| msgid "Emit IEEE-conformant code, without inexact exceptions"
msgid "Emit IEEE-conformant code, without inexact exceptions."
-msgstr "Avge kod som följer IEEE, utan oexakta undantag"
+msgstr "Avge kod som följer IEEE, utan oexakta undantag."
#: config/alpha/alpha.opt:46
-#, fuzzy
-#| msgid "Do not emit complex integer constants to read-only memory"
msgid "Do not emit complex integer constants to read-only memory."
-msgstr "Avge inte komplexa heltalskonstanter till endast läsbart minne"
+msgstr "Avge inte komplexa heltalskonstanter till endast läsbart minne."
#: config/alpha/alpha.opt:50
-#, fuzzy
-#| msgid "Use VAX fp"
msgid "Use VAX fp."
-msgstr "Använd VAX fp"
+msgstr "Använd VAX fp."
#: config/alpha/alpha.opt:54
-#, fuzzy
-#| msgid "Do not use VAX fp"
msgid "Do not use VAX fp."
-msgstr "Använd inte VAX fp"
+msgstr "Använd inte VAX fp."
#: config/alpha/alpha.opt:58
-#, fuzzy
-#| msgid "Emit code for the byte/word ISA extension"
msgid "Emit code for the byte/word ISA extension."
-msgstr "Avge kod för byte/ord-ISA-utökningen"
+msgstr "Avge kod för byte/ord-ISA-utökningen."
#: config/alpha/alpha.opt:62
-#, fuzzy
-#| msgid "Emit code for the motion video ISA extension"
msgid "Emit code for the motion video ISA extension."
-msgstr "Avge kod för ISA-utökningen för rörlig video"
+msgstr "Avge kod för ISA-utökningen för rörlig video."
#: config/alpha/alpha.opt:66
-#, fuzzy
-#| msgid "Emit code for the fp move and sqrt ISA extension"
msgid "Emit code for the fp move and sqrt ISA extension."
-msgstr "Avge kod för ISA-utökningen för fp move och sqrt"
+msgstr "Avge kod för ISA-utökningen för fp move och sqrt."
#: config/alpha/alpha.opt:70
-#, fuzzy
-#| msgid "Emit code for the counting ISA extension"
msgid "Emit code for the counting ISA extension."
-msgstr "Avge kod för ISA-utökningen för räkning"
+msgstr "Avge kod för ISA-utökningen för räkning."
#: config/alpha/alpha.opt:74
-#, fuzzy
-#| msgid "Emit code using explicit relocation directives"
msgid "Emit code using explicit relocation directives."
-msgstr "Avge kod som använder uttryckliga omlokaliseringsdirektiv"
+msgstr "Avge kod som använder uttryckliga omlokaliseringsdirektiv."
#: config/alpha/alpha.opt:78
-#, fuzzy
-#| msgid "Emit 16-bit relocations to the small data areas"
msgid "Emit 16-bit relocations to the small data areas."
-msgstr "Avge 16-bitars omlokaliseringar till de små dataareorna"
+msgstr "Avge 16-bitars omlokaliseringar till de små dataareorna."
#: config/alpha/alpha.opt:82
-#, fuzzy
-#| msgid "Emit 32-bit relocations to the small data areas"
msgid "Emit 32-bit relocations to the small data areas."
-msgstr "Avge 32-bitars omlokaliseringar till de små dataareorna"
+msgstr "Avge 32-bitars omlokaliseringar till de små dataareorna."
#: config/alpha/alpha.opt:86
-#, fuzzy
-#| msgid "Emit direct branches to local functions"
msgid "Emit direct branches to local functions."
-msgstr "Mata ut direkta hopp till lokala funktioner"
+msgstr "Mata ut direkta hopp till lokala funktioner."
#: config/alpha/alpha.opt:90
-#, fuzzy
-#| msgid "Emit indirect branches to local functions"
msgid "Emit indirect branches to local functions."
-msgstr "Mata ut indirekta hopp till lokala funktioner"
+msgstr "Mata ut indirekta hopp till lokala funktioner."
#: config/alpha/alpha.opt:94
-#, fuzzy
-#| msgid "Emit rdval instead of rduniq for thread pointer"
msgid "Emit rdval instead of rduniq for thread pointer."
-msgstr "Avge rdval istället för rduniq för trådpekare"
+msgstr "Avge rdval istället för rduniq för trådpekare."
#: config/alpha/alpha.opt:106
-#, fuzzy
-#| msgid "Use features of and schedule given CPU"
msgid "Use features of and schedule given CPU."
-msgstr "Använd funktioner i och schemalägg för angiven CPU"
+msgstr "Använd funktioner i och schemalägg för angiven CPU."
#: config/alpha/alpha.opt:110
-#, fuzzy
-#| msgid "Schedule given CPU"
msgid "Schedule given CPU."
-msgstr "Schemalägg för given CPU"
+msgstr "Schemalägg för given CPU."
#: config/alpha/alpha.opt:114
-#, fuzzy
-#| msgid "Control the generated fp rounding mode"
msgid "Control the generated fp rounding mode."
-msgstr "Styr det genererade fp-avrundningsläget"
+msgstr "Styr det genererade fp-avrundningsläget."
#: config/alpha/alpha.opt:118
-#, fuzzy
-#| msgid "Control the IEEE trap mode"
msgid "Control the IEEE trap mode."
-msgstr "Styr IEEE-läge för fällor"
+msgstr "Styr IEEE-läge för fällor."
#: config/alpha/alpha.opt:122
-#, fuzzy
-#| msgid "Control the precision given to fp exceptions"
msgid "Control the precision given to fp exceptions."
-msgstr "Styr precisionen som ges till fp-undantag"
+msgstr "Styr precisionen som ges till fp-undantag."
#: config/alpha/alpha.opt:126
-#, fuzzy
-#| msgid "Tune expected memory latency"
msgid "Tune expected memory latency."
-msgstr "Trimma förväntad minneslatens"
+msgstr "Trimma förväntad minneslatens."
#: config/tilepro/tilepro.opt:23
msgid "Compile with 32 bit longs and pointers, which is the only supported"
msgstr "Kompilera med 32-bitars long och pekare, som är det enda som stödjs"
#: config/tilepro/tilepro.opt:28 config/tilegx/tilegx.opt:26
-#, fuzzy
-#| msgid "-mcpu=CPU\tUse features of and schedule code for given CPU"
msgid "-mcpu=CPU\tUse features of and schedule code for given CPU."
-msgstr "-mcpu=CPU\tAnvänd funktioner i och schemalägg kod för angiven CPU"
+msgstr "-mcpu=CPU\tAnvänd funktioner i och schemalägg kod för angiven CPU."
#: config/tilepro/tilepro.opt:32
msgid "Known TILEPro CPUs (for use with the -mcpu= option):"
msgstr "Kända TILEPro-CPU:er (att användas med flaggan -mcpu=):"
#: config/lm32/lm32.opt:24
-#, fuzzy
-#| msgid "Enable multiply instructions"
msgid "Enable multiply instructions."
-msgstr "Använd multiplikationsinstruktioner"
+msgstr "Använd multiplikationsinstruktioner."
#: config/lm32/lm32.opt:28
-#, fuzzy
-#| msgid "Enable divide and modulus instructions"
msgid "Enable divide and modulus instructions."
-msgstr "Använd divisions- och modulusinstruktioner"
+msgstr "Använd divisions- och modulusinstruktioner."
#: config/lm32/lm32.opt:32
-#, fuzzy
-#| msgid "Enable barrel shift instructions"
msgid "Enable barrel shift instructions."
-msgstr "Använd barrel-shift-instruktioner"
+msgstr "Använd barrel-shift-instruktioner."
#: config/lm32/lm32.opt:36
-#, fuzzy
-#| msgid "Enable sign extend instructions"
msgid "Enable sign extend instructions."
-msgstr "Aktivera teckenutökningsinstruktioner"
+msgstr "Aktivera teckenutökningsinstruktioner."
#: config/lm32/lm32.opt:40
-#, fuzzy
-#| msgid "Enable user-defined instructions"
msgid "Enable user-defined instructions."
-msgstr "Använd användardefinierade instruktioner"
+msgstr "Använd användardefinierade instruktioner."
#: config/nios2/elf.opt:26
-#, fuzzy
-#| msgid "Link with a limited version of the C library"
msgid "Link with a limited version of the C library."
-msgstr "Länka med en begränsad version av C-biblioteket"
+msgstr "Länka med en begränsad version av C-biblioteket."
#: config/nios2/elf.opt:30
-#, fuzzy
-#| msgid "Name of system library to link against"
msgid "Name of system library to link against."
-msgstr "Namn på systembiblioteket att länka mot"
+msgstr "Namn på systembiblioteket att länka mot."
#: config/nios2/elf.opt:34
-#, fuzzy
-#| msgid "Name of the startfile"
msgid "Name of the startfile."
-msgstr "Namn på startfilen"
+msgstr "Namn på startfilen."
#: config/nios2/elf.opt:38
-#, fuzzy
-#| msgid "Link with HAL BSP"
msgid "Link with HAL BSP."
-msgstr "Länka med HAL BSP"
+msgstr "Länka med HAL BSP."
#: config/nios2/nios2.opt:35
-#, fuzzy
-#| msgid "Enable DIV, DIVU"
msgid "Enable DIV, DIVU."
-msgstr "Aktivera DIV, DIVU"
+msgstr "Aktivera DIV, DIVU."
#: config/nios2/nios2.opt:39
-#, fuzzy
-#| msgid "Enable MUL instructions"
msgid "Enable MUL instructions."
-msgstr "Använd MUL-instruktioner"
+msgstr "Använd MUL-instruktioner."
#: config/nios2/nios2.opt:43
-#, fuzzy
-#| msgid "Enable MULX instructions, assume fast shifter"
msgid "Enable MULX instructions, assume fast shifter."
-msgstr "Använd MULX-instruktioner, anta snabb skiftare"
+msgstr "Använd MULX-instruktioner, anta snabb skiftare."
#: config/nios2/nios2.opt:47
-#, fuzzy
-#| msgid "Use table based fast divide (default at -O3)"
msgid "Use table based fast divide (default at -O3)."
-msgstr "Använd tabellbaserad snabb division (standard för -O3)"
+msgstr "Använd tabellbaserad snabb division (standard för -O3)."
#: config/nios2/nios2.opt:51
-#, fuzzy
-#| msgid "All memory accesses use I/O load/store instructions"
msgid "All memory accesses use I/O load/store instructions."
-msgstr "Alla minnesåtkomster använder I/O ladda-/lagrainstruktioner"
+msgstr "Alla minnesåtkomster använder I/O ladda-/lagrainstruktioner."
#: config/nios2/nios2.opt:55
-#, fuzzy
-#| msgid "Volatile memory accesses use I/O load/store instructions"
msgid "Volatile memory accesses use I/O load/store instructions."
-msgstr "Volatila minnesåtkomster använder I/O ladda-/lagrainstruktioner"
+msgstr "Volatila minnesåtkomster använder I/O ladda-/lagrainstruktioner."
#: config/nios2/nios2.opt:59
-#, fuzzy
-#| msgid "Volatile memory accesses do not use I/O load/store instructions"
msgid "Volatile memory accesses do not use I/O load/store instructions."
-msgstr "Volatila minnesåtkomster använder inte I/O ladda-/lagrainstruktioner"
+msgstr "Volatila minnesåtkomster använder inte I/O ladda-/lagrainstruktioner."
#: config/nios2/nios2.opt:63
msgid "Enable/disable GP-relative addressing."
@@ -13119,722 +10765,484 @@ msgid "Use little-endian byte order."
msgstr "Använd omvänd byteordning."
#: config/nios2/nios2.opt:102
-#, fuzzy
-#| msgid "Floating point custom instruction configuration name"
msgid "Floating point custom instruction configuration name."
-msgstr "Namn på anpassad instruktionskonfiguration för flyttal"
+msgstr "Namn på anpassad instruktionskonfiguration för flyttal."
#: config/nios2/nios2.opt:106
-#, fuzzy
-#| msgid "Do not use the ftruncds custom instruction"
msgid "Do not use the ftruncds custom instruction."
-msgstr "Använd inte den anpassade instruktionen ftruncds"
+msgstr "Använd inte den anpassade instruktionen ftruncds."
#: config/nios2/nios2.opt:110
-#, fuzzy
-#| msgid "Integer id (N) of ftruncds custom instruction"
msgid "Integer id (N) of ftruncds custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion ftruncds"
+msgstr "Heltals-id (N) för anpassad instruktion ftruncds."
#: config/nios2/nios2.opt:114
-#, fuzzy
-#| msgid "Do not use the fextsd custom instruction"
msgid "Do not use the fextsd custom instruction."
-msgstr "Använd inte den anpassade instruktionen fextsd"
+msgstr "Använd inte den anpassade instruktionen fextsd."
#: config/nios2/nios2.opt:118
-#, fuzzy
-#| msgid "Integer id (N) of fextsd custom instruction"
msgid "Integer id (N) of fextsd custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fextsd"
+msgstr "Heltals-id (N) för anpassad instruktion fextsd."
#: config/nios2/nios2.opt:122
-#, fuzzy
-#| msgid "Do not use the fixdu custom instruction"
msgid "Do not use the fixdu custom instruction."
-msgstr "Använd inte den anpassade instruktionen fixdu"
+msgstr "Använd inte den anpassade instruktionen fixdu."
#: config/nios2/nios2.opt:126
-#, fuzzy
-#| msgid "Integer id (N) of fixdu custom instruction"
msgid "Integer id (N) of fixdu custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fixdu"
+msgstr "Heltals-id (N) för anpassad instruktion fixdu."
#: config/nios2/nios2.opt:130
-#, fuzzy
-#| msgid "Do not use the fixdi custom instruction"
msgid "Do not use the fixdi custom instruction."
-msgstr "Använd inte den anpassade instruktionen fixdi"
+msgstr "Använd inte den anpassade instruktionen fixdi."
#: config/nios2/nios2.opt:134
-#, fuzzy
-#| msgid "Integer id (N) of fixdi custom instruction"
msgid "Integer id (N) of fixdi custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fixdi"
+msgstr "Heltals-id (N) för anpassad instruktion fixdi."
#: config/nios2/nios2.opt:138
-#, fuzzy
-#| msgid "Do not use the fixsu custom instruction"
msgid "Do not use the fixsu custom instruction."
-msgstr "Använd inte den anpassade instruktionen fixsu"
+msgstr "Använd inte den anpassade instruktionen fixsu."
#: config/nios2/nios2.opt:142
-#, fuzzy
-#| msgid "Integer id (N) of fixsu custom instruction"
msgid "Integer id (N) of fixsu custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fixsu"
+msgstr "Heltals-id (N) för anpassad instruktion fixsu."
#: config/nios2/nios2.opt:146
-#, fuzzy
-#| msgid "Do not use the fixsi custom instruction"
msgid "Do not use the fixsi custom instruction."
-msgstr "Använd inte den anpassade instruktionen fixsi"
+msgstr "Använd inte den anpassade instruktionen fixsi."
#: config/nios2/nios2.opt:150
-#, fuzzy
-#| msgid "Integer id (N) of fixsi custom instruction"
msgid "Integer id (N) of fixsi custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fixsi"
+msgstr "Heltals-id (N) för anpassad instruktion fixsi."
#: config/nios2/nios2.opt:154
-#, fuzzy
-#| msgid "Do not use the floatud custom instruction"
msgid "Do not use the floatud custom instruction."
-msgstr "Använd inte den anpassade instruktionen floatud"
+msgstr "Använd inte den anpassade instruktionen floatud."
#: config/nios2/nios2.opt:158
-#, fuzzy
-#| msgid "Integer id (N) of floatud custom instruction"
msgid "Integer id (N) of floatud custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion floatud"
+msgstr "Heltals-id (N) för anpassad instruktion floatud."
#: config/nios2/nios2.opt:162
-#, fuzzy
-#| msgid "Do not use the floatid custom instruction"
msgid "Do not use the floatid custom instruction."
-msgstr "Använd inte den anpassade instruktionen floatid"
+msgstr "Använd inte den anpassade instruktionen floatid."
#: config/nios2/nios2.opt:166
-#, fuzzy
-#| msgid "Integer id (N) of floatid custom instruction"
msgid "Integer id (N) of floatid custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion floatid"
+msgstr "Heltals-id (N) för anpassad instruktion floatid."
#: config/nios2/nios2.opt:170
-#, fuzzy
-#| msgid "Do not use the floatus custom instruction"
msgid "Do not use the floatus custom instruction."
-msgstr "Använd inte den anpassade instruktionen floatus"
+msgstr "Använd inte den anpassade instruktionen floatus."
#: config/nios2/nios2.opt:174
-#, fuzzy
-#| msgid "Integer id (N) of floatus custom instruction"
msgid "Integer id (N) of floatus custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion floatus"
+msgstr "Heltals-id (N) för anpassad instruktion floatus."
#: config/nios2/nios2.opt:178
-#, fuzzy
-#| msgid "Do not use the floatis custom instruction"
msgid "Do not use the floatis custom instruction."
-msgstr "Använd inte den anpassade instruktionen floatis"
+msgstr "Använd inte den anpassade instruktionen floatis."
#: config/nios2/nios2.opt:182
-#, fuzzy
-#| msgid "Integer id (N) of floatis custom instruction"
msgid "Integer id (N) of floatis custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion floatis"
+msgstr "Heltals-id (N) för anpassad instruktion floatis."
#: config/nios2/nios2.opt:186
-#, fuzzy
-#| msgid "Do not use the fcmpned custom instruction"
msgid "Do not use the fcmpned custom instruction."
-msgstr "Använd inte den anpassade instruktionen fcmpned"
+msgstr "Använd inte den anpassade instruktionen fcmpned."
#: config/nios2/nios2.opt:190
-#, fuzzy
-#| msgid "Integer id (N) of fcmpned custom instruction"
msgid "Integer id (N) of fcmpned custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fcmpned"
+msgstr "Heltals-id (N) för anpassad instruktion fcmpned."
#: config/nios2/nios2.opt:194
-#, fuzzy
-#| msgid "Do not use the fcmpeqd custom instruction"
msgid "Do not use the fcmpeqd custom instruction."
-msgstr "Använd inte den anpassade instruktionen fcmpeqd"
+msgstr "Använd inte den anpassade instruktionen fcmpeqd."
#: config/nios2/nios2.opt:198
-#, fuzzy
-#| msgid "Integer id (N) of fcmpeqd custom instruction"
msgid "Integer id (N) of fcmpeqd custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fcmpeqd"
+msgstr "Heltals-id (N) för anpassad instruktion fcmpeqd."
#: config/nios2/nios2.opt:202
-#, fuzzy
-#| msgid "Do not use the fcmpged custom instruction"
msgid "Do not use the fcmpged custom instruction."
-msgstr "Använd inte den anpassade instruktionen fcmpged"
+msgstr "Använd inte den anpassade instruktionen fcmpged."
#: config/nios2/nios2.opt:206
-#, fuzzy
-#| msgid "Integer id (N) of fcmpged custom instruction"
msgid "Integer id (N) of fcmpged custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fcmpged"
+msgstr "Heltals-id (N) för anpassad instruktion fcmpged."
#: config/nios2/nios2.opt:210
-#, fuzzy
-#| msgid "Do not use the fcmpgtd custom instruction"
msgid "Do not use the fcmpgtd custom instruction."
-msgstr "Använd inte den anpassade instruktionen fcmpgtd"
+msgstr "Använd inte den anpassade instruktionen fcmpgtd."
#: config/nios2/nios2.opt:214
-#, fuzzy
-#| msgid "Integer id (N) of fcmpgtd custom instruction"
msgid "Integer id (N) of fcmpgtd custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fcmpgtd"
+msgstr "Heltals-id (N) för anpassad instruktion fcmpgtd."
#: config/nios2/nios2.opt:218
-#, fuzzy
-#| msgid "Do not use the fcmpled custom instruction"
msgid "Do not use the fcmpled custom instruction."
-msgstr "Använd inte den anpassade instruktionen fcmpled"
+msgstr "Använd inte den anpassade instruktionen fcmpled."
#: config/nios2/nios2.opt:222
-#, fuzzy
-#| msgid "Integer id (N) of fcmpled custom instruction"
msgid "Integer id (N) of fcmpled custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fcmpled"
+msgstr "Heltals-id (N) för anpassad instruktion fcmpled."
#: config/nios2/nios2.opt:226
-#, fuzzy
-#| msgid "Do not use the fcmpltd custom instruction"
msgid "Do not use the fcmpltd custom instruction."
-msgstr "Använd inte den anpassade instruktionen fcmpltd"
+msgstr "Använd inte den anpassade instruktionen fcmpltd."
#: config/nios2/nios2.opt:230
-#, fuzzy
-#| msgid "Integer id (N) of fcmpltd custom instruction"
msgid "Integer id (N) of fcmpltd custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fcmpltd"
+msgstr "Heltals-id (N) för anpassad instruktion fcmpltd."
#: config/nios2/nios2.opt:234
-#, fuzzy
-#| msgid "Do not use the flogd custom instruction"
msgid "Do not use the flogd custom instruction."
-msgstr "Använd inte den anpassade instruktionen flogd"
+msgstr "Använd inte den anpassade instruktionen flogd."
#: config/nios2/nios2.opt:238
-#, fuzzy
-#| msgid "Integer id (N) of flogd custom instruction"
msgid "Integer id (N) of flogd custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion flogd"
+msgstr "Heltals-id (N) för anpassad instruktion flogd."
#: config/nios2/nios2.opt:242
-#, fuzzy
-#| msgid "Do not use the fexpd custom instruction"
msgid "Do not use the fexpd custom instruction."
-msgstr "Använd inte den anpassade instruktionen fexpd"
+msgstr "Använd inte den anpassade instruktionen fexpd."
#: config/nios2/nios2.opt:246
-#, fuzzy
-#| msgid "Integer id (N) of fexpd custom instruction"
msgid "Integer id (N) of fexpd custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fexpd"
+msgstr "Heltals-id (N) för anpassad instruktion fexpd."
#: config/nios2/nios2.opt:250
-#, fuzzy
-#| msgid "Do not use the fatand custom instruction"
msgid "Do not use the fatand custom instruction."
-msgstr "Använd inte den anpassade instruktionen fatand"
+msgstr "Använd inte den anpassade instruktionen fatand."
#: config/nios2/nios2.opt:254
-#, fuzzy
-#| msgid "Integer id (N) of fatand custom instruction"
msgid "Integer id (N) of fatand custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fatand"
+msgstr "Heltals-id (N) för anpassad instruktion fatand."
#: config/nios2/nios2.opt:258
-#, fuzzy
-#| msgid "Do not use the ftand custom instruction"
msgid "Do not use the ftand custom instruction."
-msgstr "Använd inte den anpassade instruktionen ftand"
+msgstr "Använd inte den anpassade instruktionen ftand."
#: config/nios2/nios2.opt:262
-#, fuzzy
-#| msgid "Integer id (N) of ftand custom instruction"
msgid "Integer id (N) of ftand custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion ftand"
+msgstr "Heltals-id (N) för anpassad instruktion ftand."
#: config/nios2/nios2.opt:266
-#, fuzzy
-#| msgid "Do not use the fsind custom instruction"
msgid "Do not use the fsind custom instruction."
-msgstr "Använd inte den anpassade instruktionen fsind"
+msgstr "Använd inte den anpassade instruktionen fsind."
#: config/nios2/nios2.opt:270
-#, fuzzy
-#| msgid "Integer id (N) of fsind custom instruction"
msgid "Integer id (N) of fsind custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fsind"
+msgstr "Heltals-id (N) för anpassad instruktion fsind."
#: config/nios2/nios2.opt:274
-#, fuzzy
-#| msgid "Do not use the fcosd custom instruction"
msgid "Do not use the fcosd custom instruction."
-msgstr "Använd inte den anpassade instruktionen fcosd"
+msgstr "Använd inte den anpassade instruktionen fcosd."
#: config/nios2/nios2.opt:278
-#, fuzzy
-#| msgid "Integer id (N) of fcosd custom instruction"
msgid "Integer id (N) of fcosd custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fcosd"
+msgstr "Heltals-id (N) för anpassad instruktion fcosd."
#: config/nios2/nios2.opt:282
-#, fuzzy
-#| msgid "Do not use the fsqrtd custom instruction"
msgid "Do not use the fsqrtd custom instruction."
-msgstr "Använd inte den anpassade instruktionen fsqrtd"
+msgstr "Använd inte den anpassade instruktionen fsqrtd."
#: config/nios2/nios2.opt:286
-#, fuzzy
-#| msgid "Integer id (N) of fsqrtd custom instruction"
msgid "Integer id (N) of fsqrtd custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fsqrtd"
+msgstr "Heltals-id (N) för anpassad instruktion fsqrtd."
#: config/nios2/nios2.opt:290
-#, fuzzy
-#| msgid "Do not use the fabsd custom instruction"
msgid "Do not use the fabsd custom instruction."
-msgstr "Använd inte den anpassade instruktionen fabsd"
+msgstr "Använd inte den anpassade instruktionen fabsd."
#: config/nios2/nios2.opt:294
-#, fuzzy
-#| msgid "Integer id (N) of fabsd custom instruction"
msgid "Integer id (N) of fabsd custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fabsd"
+msgstr "Heltals-id (N) för anpassad instruktion fabsd."
#: config/nios2/nios2.opt:298
-#, fuzzy
-#| msgid "Do not use the fnegd custom instruction"
msgid "Do not use the fnegd custom instruction."
-msgstr "Använd inte den anpassade instruktionen fnegd"
+msgstr "Använd inte den anpassade instruktionen fnegd."
#: config/nios2/nios2.opt:302
-#, fuzzy
-#| msgid "Integer id (N) of fnegd custom instruction"
msgid "Integer id (N) of fnegd custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fnegd"
+msgstr "Heltals-id (N) för anpassad instruktion fnegd."
#: config/nios2/nios2.opt:306
-#, fuzzy
-#| msgid "Do not use the fmaxd custom instruction"
msgid "Do not use the fmaxd custom instruction."
-msgstr "Använd inte den anpassade instruktionen fmaxd"
+msgstr "Använd inte den anpassade instruktionen fmaxd."
#: config/nios2/nios2.opt:310
-#, fuzzy
-#| msgid "Integer id (N) of fmaxd custom instruction"
msgid "Integer id (N) of fmaxd custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fmaxd"
+msgstr "Heltals-id (N) för anpassad instruktion fmaxd."
#: config/nios2/nios2.opt:314
-#, fuzzy
-#| msgid "Do not use the fmind custom instruction"
msgid "Do not use the fmind custom instruction."
-msgstr "Använd inte den anpassade instruktionen fmind"
+msgstr "Använd inte den anpassade instruktionen fmind."
#: config/nios2/nios2.opt:318
-#, fuzzy
-#| msgid "Integer id (N) of fmind custom instruction"
msgid "Integer id (N) of fmind custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fmind"
+msgstr "Heltals-id (N) för anpassad instruktion fmind."
#: config/nios2/nios2.opt:322
-#, fuzzy
-#| msgid "Do not use the fdivd custom instruction"
msgid "Do not use the fdivd custom instruction."
-msgstr "Använd inte den anpassade instruktionen fdivd"
+msgstr "Använd inte den anpassade instruktionen fdivd."
#: config/nios2/nios2.opt:326
-#, fuzzy
-#| msgid "Integer id (N) of fdivd custom instruction"
msgid "Integer id (N) of fdivd custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fdivd"
+msgstr "Heltals-id (N) för anpassad instruktion fdivd."
#: config/nios2/nios2.opt:330
-#, fuzzy
-#| msgid "Do not use the fmuld custom instruction"
msgid "Do not use the fmuld custom instruction."
-msgstr "Använd inte den anpassade instruktionen fmuld"
+msgstr "Använd inte den anpassade instruktionen fmuld."
#: config/nios2/nios2.opt:334
-#, fuzzy
-#| msgid "Integer id (N) of fmuld custom instruction"
msgid "Integer id (N) of fmuld custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fmuld"
+msgstr "Heltals-id (N) för anpassad instruktion fmuld."
#: config/nios2/nios2.opt:338
-#, fuzzy
-#| msgid "Do not use the fsubd custom instruction"
msgid "Do not use the fsubd custom instruction."
-msgstr "Använd inte den anpassade instruktionen fsubd"
+msgstr "Använd inte den anpassade instruktionen fsubd."
#: config/nios2/nios2.opt:342
-#, fuzzy
-#| msgid "Integer id (N) of fsubd custom instruction"
msgid "Integer id (N) of fsubd custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fsubd"
+msgstr "Heltals-id (N) för anpassad instruktion fsubd."
#: config/nios2/nios2.opt:346
-#, fuzzy
-#| msgid "Do not use the faddd custom instruction"
msgid "Do not use the faddd custom instruction."
-msgstr "Använd inte den anpassade instruktionen faddd"
+msgstr "Använd inte den anpassade instruktionen faddd."
#: config/nios2/nios2.opt:350
-#, fuzzy
-#| msgid "Integer id (N) of faddd custom instruction"
msgid "Integer id (N) of faddd custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion faddd"
+msgstr "Heltals-id (N) för anpassad instruktion faddd."
#: config/nios2/nios2.opt:354
-#, fuzzy
-#| msgid "Do not use the fcmpnes custom instruction"
msgid "Do not use the fcmpnes custom instruction."
-msgstr "Använd inte den anpassade instruktionen fcmpnes"
+msgstr "Använd inte den anpassade instruktionen fcmpnes."
#: config/nios2/nios2.opt:358
-#, fuzzy
-#| msgid "Integer id (N) of fcmpnes custom instruction"
msgid "Integer id (N) of fcmpnes custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fcmpnes"
+msgstr "Heltals-id (N) för anpassad instruktion fcmpnes."
#: config/nios2/nios2.opt:362
-#, fuzzy
-#| msgid "Do not use the fcmpeqs custom instruction"
msgid "Do not use the fcmpeqs custom instruction."
-msgstr "Använd inte den anpassade instruktionen fcmpeqs"
+msgstr "Använd inte den anpassade instruktionen fcmpeqs."
#: config/nios2/nios2.opt:366
-#, fuzzy
-#| msgid "Integer id (N) of fcmpeqs custom instruction"
msgid "Integer id (N) of fcmpeqs custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fcmpeqs"
+msgstr "Heltals-id (N) för anpassad instruktion fcmpeqs."
#: config/nios2/nios2.opt:370
-#, fuzzy
-#| msgid "Do not use the fcmpges custom instruction"
msgid "Do not use the fcmpges custom instruction."
-msgstr "Använd inte den anpassade instruktionen fcmpges"
+msgstr "Använd inte den anpassade instruktionen fcmpges."
#: config/nios2/nios2.opt:374
-#, fuzzy
-#| msgid "Integer id (N) of fcmpges custom instruction"
msgid "Integer id (N) of fcmpges custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fcmpges"
+msgstr "Heltals-id (N) för anpassad instruktion fcmpges."
#: config/nios2/nios2.opt:378
-#, fuzzy
-#| msgid "Do not use the fcmpgts custom instruction"
msgid "Do not use the fcmpgts custom instruction."
-msgstr "Använd inte den anpassade instruktionen fcmpgts"
+msgstr "Använd inte den anpassade instruktionen fcmpgts."
#: config/nios2/nios2.opt:382
-#, fuzzy
-#| msgid "Integer id (N) of fcmpgts custom instruction"
msgid "Integer id (N) of fcmpgts custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fcmpgts"
+msgstr "Heltals-id (N) för anpassad instruktion fcmpgts."
#: config/nios2/nios2.opt:386
-#, fuzzy
-#| msgid "Do not use the fcmples custom instruction"
msgid "Do not use the fcmples custom instruction."
-msgstr "Använd inte den anpassade instruktionen fcmples"
+msgstr "Använd inte den anpassade instruktionen fcmples."
#: config/nios2/nios2.opt:390
-#, fuzzy
-#| msgid "Integer id (N) of fcmples custom instruction"
msgid "Integer id (N) of fcmples custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fcmples"
+msgstr "Heltals-id (N) för anpassad instruktion fcmples."
#: config/nios2/nios2.opt:394
-#, fuzzy
-#| msgid "Do not use the fcmplts custom instruction"
msgid "Do not use the fcmplts custom instruction."
-msgstr "Använd inte den anpassade instruktionen fcmplts"
+msgstr "Använd inte den anpassade instruktionen fcmplts."
#: config/nios2/nios2.opt:398
-#, fuzzy
-#| msgid "Integer id (N) of fcmplts custom instruction"
msgid "Integer id (N) of fcmplts custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fcmplts"
+msgstr "Heltals-id (N) för anpassad instruktion fcmplts."
#: config/nios2/nios2.opt:402
-#, fuzzy
-#| msgid "Do not use the flogs custom instruction"
msgid "Do not use the flogs custom instruction."
-msgstr "Använd inte den anpassade instruktionen flogs"
+msgstr "Använd inte den anpassade instruktionen flogs."
#: config/nios2/nios2.opt:406
-#, fuzzy
-#| msgid "Integer id (N) of flogs custom instruction"
msgid "Integer id (N) of flogs custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion flogs"
+msgstr "Heltals-id (N) för anpassad instruktion flogs."
#: config/nios2/nios2.opt:410
-#, fuzzy
-#| msgid "Do not use the fexps custom instruction"
msgid "Do not use the fexps custom instruction."
-msgstr "Använd inte den anpassade instruktionen fexps"
+msgstr "Använd inte den anpassade instruktionen fexps."
#: config/nios2/nios2.opt:414
-#, fuzzy
-#| msgid "Integer id (N) of fexps custom instruction"
msgid "Integer id (N) of fexps custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fexps"
+msgstr "Heltals-id (N) för anpassad instruktion fexps."
#: config/nios2/nios2.opt:418
-#, fuzzy
-#| msgid "Do not use the fatans custom instruction"
msgid "Do not use the fatans custom instruction."
-msgstr "Använd inte den anpassade instruktionen fatans"
+msgstr "Använd inte den anpassade instruktionen fatans."
#: config/nios2/nios2.opt:422
-#, fuzzy
-#| msgid "Integer id (N) of fatans custom instruction"
msgid "Integer id (N) of fatans custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fatans"
+msgstr "Heltals-id (N) för anpassad instruktion fatans."
#: config/nios2/nios2.opt:426
-#, fuzzy
-#| msgid "Do not use the ftans custom instruction"
msgid "Do not use the ftans custom instruction."
-msgstr "Använd inte den anpassade instruktionen ftans"
+msgstr "Använd inte den anpassade instruktionen ftans."
#: config/nios2/nios2.opt:430
-#, fuzzy
-#| msgid "Integer id (N) of ftans custom instruction"
msgid "Integer id (N) of ftans custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion ftans"
+msgstr "Heltals-id (N) för anpassad instruktion ftans."
#: config/nios2/nios2.opt:434
-#, fuzzy
-#| msgid "Do not use the fsins custom instruction"
msgid "Do not use the fsins custom instruction."
-msgstr "Använd inte den anpassade instruktionen fsins"
+msgstr "Använd inte den anpassade instruktionen fsins."
#: config/nios2/nios2.opt:438
-#, fuzzy
-#| msgid "Integer id (N) of fsins custom instruction"
msgid "Integer id (N) of fsins custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fsins"
+msgstr "Heltals-id (N) för anpassad instruktion fsins."
#: config/nios2/nios2.opt:442
-#, fuzzy
-#| msgid "Do not use the fcoss custom instruction"
msgid "Do not use the fcoss custom instruction."
-msgstr "Använd inte den anpassade instruktionen fcoss"
+msgstr "Använd inte den anpassade instruktionen fcoss."
#: config/nios2/nios2.opt:446
-#, fuzzy
-#| msgid "Integer id (N) of fcoss custom instruction"
msgid "Integer id (N) of fcoss custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fcoss"
+msgstr "Heltals-id (N) för anpassad instruktion fcoss."
#: config/nios2/nios2.opt:450
-#, fuzzy
-#| msgid "Do not use the fsqrts custom instruction"
msgid "Do not use the fsqrts custom instruction."
-msgstr "Använd inte den anpassade instruktionen fsqrts"
+msgstr "Använd inte den anpassade instruktionen fsqrts."
#: config/nios2/nios2.opt:454
-#, fuzzy
-#| msgid "Integer id (N) of fsqrts custom instruction"
msgid "Integer id (N) of fsqrts custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fsqrts"
+msgstr "Heltals-id (N) för anpassad instruktion fsqrts."
#: config/nios2/nios2.opt:458
-#, fuzzy
-#| msgid "Do not use the fabss custom instr"
msgid "Do not use the fabss custom instr."
-msgstr "Använd inte den anpassade instruktionen fabss"
+msgstr "Använd inte den anpassade instruktionen fabss."
#: config/nios2/nios2.opt:462
-#, fuzzy
-#| msgid "Integer id (N) of fabss custom instruction"
msgid "Integer id (N) of fabss custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fabss"
+msgstr "Heltals-id (N) för anpassad instruktion fabss."
#: config/nios2/nios2.opt:466
-#, fuzzy
-#| msgid "Do not use the fnegs custom instruction"
msgid "Do not use the fnegs custom instruction."
-msgstr "Använd inte den anpassade instruktionen fnegs"
+msgstr "Använd inte den anpassade instruktionen fnegs."
#: config/nios2/nios2.opt:470
-#, fuzzy
-#| msgid "Integer id (N) of fnegs custom instruction"
msgid "Integer id (N) of fnegs custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fnegs"
+msgstr "Heltals-id (N) för anpassad instruktion fnegs."
#: config/nios2/nios2.opt:474
-#, fuzzy
-#| msgid "Do not use the fmaxs custom instruction"
msgid "Do not use the fmaxs custom instruction."
-msgstr "Använd inte den anpassade instruktionen fmaxs"
+msgstr "Använd inte den anpassade instruktionen fmaxs."
#: config/nios2/nios2.opt:478
-#, fuzzy
-#| msgid "Integer id (N) of fmaxs custom instruction"
msgid "Integer id (N) of fmaxs custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fmaxs"
+msgstr "Heltals-id (N) för anpassad instruktion fmaxs."
#: config/nios2/nios2.opt:482
-#, fuzzy
-#| msgid "Do not use the fmins custom instruction"
msgid "Do not use the fmins custom instruction."
-msgstr "Använd inte den anpassade instruktionen fmins"
+msgstr "Använd inte den anpassade instruktionen fmins."
#: config/nios2/nios2.opt:486
-#, fuzzy
-#| msgid "Integer id (N) of fmins custom instruction"
msgid "Integer id (N) of fmins custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fmins"
+msgstr "Heltals-id (N) för anpassad instruktion fmins."
#: config/nios2/nios2.opt:490
-#, fuzzy
-#| msgid "Do not use the fdivs custom instruction"
msgid "Do not use the fdivs custom instruction."
-msgstr "Använd inte den anpassade instruktionen fdivs"
+msgstr "Använd inte den anpassade instruktionen fdivs."
#: config/nios2/nios2.opt:494
-#, fuzzy
-#| msgid "Integer id (N) of fdivs custom instruction"
msgid "Integer id (N) of fdivs custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fdivs"
+msgstr "Heltals-id (N) för anpassad instruktion fdivs."
#: config/nios2/nios2.opt:498
-#, fuzzy
-#| msgid "Do not use the fmuls custom instruction"
msgid "Do not use the fmuls custom instruction."
-msgstr "Använd inte den anpassade instruktionen fmuls"
+msgstr "Använd inte den anpassade instruktionen fmuls."
#: config/nios2/nios2.opt:502
-#, fuzzy
-#| msgid "Integer id (N) of fmuls custom instruction"
msgid "Integer id (N) of fmuls custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fmuls"
+msgstr "Heltals-id (N) för anpassad instruktion fmuls."
#: config/nios2/nios2.opt:506
-#, fuzzy
-#| msgid "Do not use the fsubs custom instruction"
msgid "Do not use the fsubs custom instruction."
-msgstr "Använd inte den anpassade instruktionen fsubs"
+msgstr "Använd inte den anpassade instruktionen fsubs."
#: config/nios2/nios2.opt:510
-#, fuzzy
-#| msgid "Integer id (N) of fsubs custom instruction"
msgid "Integer id (N) of fsubs custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fsubs"
+msgstr "Heltals-id (N) för anpassad instruktion fsubs."
#: config/nios2/nios2.opt:514
-#, fuzzy
-#| msgid "Do not use the fadds custom instruction"
msgid "Do not use the fadds custom instruction."
-msgstr "Använd inte den anpassade instruktionen fadds"
+msgstr "Använd inte den anpassade instruktionen fadds."
#: config/nios2/nios2.opt:518
-#, fuzzy
-#| msgid "Integer id (N) of fadds custom instruction"
msgid "Integer id (N) of fadds custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fadds"
+msgstr "Heltals-id (N) för anpassad instruktion fadds."
#: config/nios2/nios2.opt:522
-#, fuzzy
-#| msgid "Do not use the frdy custom instruction"
msgid "Do not use the frdy custom instruction."
-msgstr "Använd inte den anpassade instruktionen frdy"
+msgstr "Använd inte den anpassade instruktionen frdy."
#: config/nios2/nios2.opt:526
-#, fuzzy
-#| msgid "Integer id (N) of frdy custom instruction"
msgid "Integer id (N) of frdy custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion frdy"
+msgstr "Heltals-id (N) för anpassad instruktion frdy."
#: config/nios2/nios2.opt:530
-#, fuzzy
-#| msgid "Do not use the frdxhi custom instruction"
msgid "Do not use the frdxhi custom instruction."
-msgstr "Använd inte den anpassade instruktionen frdxhi"
+msgstr "Använd inte den anpassade instruktionen frdxhi."
#: config/nios2/nios2.opt:534
-#, fuzzy
-#| msgid "Integer id (N) of frdxhi custom instruction"
msgid "Integer id (N) of frdxhi custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion frdxhi"
+msgstr "Heltals-id (N) för anpassad instruktion frdxhi."
#: config/nios2/nios2.opt:538
-#, fuzzy
-#| msgid "Do not use the frdxlo custom instruction"
msgid "Do not use the frdxlo custom instruction."
-msgstr "Använd inte den anpassade instruktionen frdxlo"
+msgstr "Använd inte den anpassade instruktionen frdxlo."
#: config/nios2/nios2.opt:542
-#, fuzzy
-#| msgid "Integer id (N) of frdxlo custom instruction"
msgid "Integer id (N) of frdxlo custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion frdxlo"
+msgstr "Heltals-id (N) för anpassad instruktion frdxlo."
#: config/nios2/nios2.opt:546
-#, fuzzy
-#| msgid "Do not use the fwry custom instruction"
msgid "Do not use the fwry custom instruction."
-msgstr "Använd inte den anpassade instruktionen fwry"
+msgstr "Använd inte den anpassade instruktionen fwry."
#: config/nios2/nios2.opt:550
-#, fuzzy
-#| msgid "Integer id (N) of fwry custom instruction"
msgid "Integer id (N) of fwry custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fwry"
+msgstr "Heltals-id (N) för anpassad instruktion fwry."
#: config/nios2/nios2.opt:554
-#, fuzzy
-#| msgid "Do not use the fwrx custom instruction"
msgid "Do not use the fwrx custom instruction."
-msgstr "Använd inte den anpassade instruktionen fwrx"
+msgstr "Använd inte den anpassade instruktionen fwrx."
#: config/nios2/nios2.opt:558
-#, fuzzy
-#| msgid "Integer id (N) of fwrx custom instruction"
msgid "Integer id (N) of fwrx custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion fwrx"
+msgstr "Heltals-id (N) för anpassad instruktion fwrx."
#: config/nios2/nios2.opt:562
-#, fuzzy
-#| msgid "Do not use the round custom instruction"
msgid "Do not use the round custom instruction."
-msgstr "Använd inte den anpassade instruktionen round"
+msgstr "Använd inte den anpassade instruktionen round."
#: config/nios2/nios2.opt:566
-#, fuzzy
-#| msgid "Integer id (N) of round custom instruction"
msgid "Integer id (N) of round custom instruction."
-msgstr "Heltals-id (N) för anpassad instruktion round"
+msgstr "Heltals-id (N) för anpassad instruktion round."
#: config/nios2/nios2.opt:574
msgid "Valid Nios II ISA levels (for -march):"
msgstr "Giltiga Nios II ISA-nivåer (för -march):"
#: config/nios2/nios2.opt:584
-#, fuzzy
-#| msgid "Enable saturation instructions"
msgid "Enable generation of R2 BMX instructions."
-msgstr "Använd mättnads-instruktioner"
+msgstr "Aktivera generering av R2 BMX-instruktioner."
#: config/nios2/nios2.opt:588
-#, fuzzy
-#| msgid "Enable saturation instructions"
msgid "Enable generation of R2 CDX instructions."
-msgstr "Använd mättnads-instruktioner"
+msgstr "Använd generering av R2 CDX-instruktioner."
#: config/rx/rx.opt:29
msgid "Store doubles in 64 bits."
@@ -13913,41 +11321,28 @@ msgid "Enables or disables the use of the SMOVF, SMOVB, SMOVU, SUNTIL, SWHILE an
msgstr "Aktiverar eller avaktiverar användningen av instruktionerna SMOVF, SMOVB, SMOVU, SUNTIL, SWHILE och RMPA. Normalt aktiverat."
#: config/rx/rx.opt:157
-#, fuzzy
-#| msgid "Always generate long calls"
msgid "Always use JSR, never BSR, for calls."
-msgstr "Generera alltid långa anrop"
+msgstr "Använd alltid JSR, aldrig BSR, för anrop."
#: config/visium/visium.opt:25
-#, fuzzy
-#| msgid "Link with libc.a and libdebug.a"
msgid "Link with libc.a and libdebug.a."
-msgstr "Länka med libc.a och libdebug.a"
+msgstr "Länka med libc.a och libdebug.a."
#: config/visium/visium.opt:29
-#, fuzzy
-#| msgid "Link with libc.a and libsim.a"
msgid "Link with libc.a and libsim.a."
-msgstr "Länka med libc.a och libsim.a"
+msgstr "Länka med libc.a och libsim.a."
-# fixme: fp = flyttal, men hur skall man skriva det. Förkortat eller FPU?
#: config/visium/visium.opt:33
-#, fuzzy
-#| msgid "Use hardware FP (default)"
msgid "Use hardware FP (default)."
-msgstr "Använd hårdvaru-fp (standard)"
+msgstr "Använd hårdvaruflyttal (standard)."
#: config/visium/visium.opt:65
-#, fuzzy
-#| msgid "Generate code for the supervisor mode (default)"
msgid "Generate code for the supervisor mode (default)."
-msgstr "Generera kod för övervakarläget (standard)"
+msgstr "Generera kod för övervakarläget (standard)."
#: config/visium/visium.opt:69
-#, fuzzy
-#| msgid "Generate code for the user mode"
msgid "Generate code for the user mode."
-msgstr "Generera kod för användarläget"
+msgstr "Generera kod för användarläget."
#: config/visium/visium.opt:73
msgid "Only retained for backward compatibility."
@@ -13958,82 +11353,56 @@ msgid "%<-mfused-madd%> is deprecated; use %<-ffp-contract=%> instead"
msgstr "%<-mfused-madd%> bör undvikas, använd %<-ffp-contract=%> istället"
#: config/sol2.opt:32
-#, fuzzy
-#| msgid "Clear hardware capabilities when linking"
msgid "Clear hardware capabilities when linking."
-msgstr "Nollställ hårdvaruförmågor vid länkning"
+msgstr "Nollställ hårdvaruförmågor vid länkning."
#: config/sol2.opt:36
-#, fuzzy
-#| msgid "Pass -z text to linker"
msgid "Pass -z text to linker."
-msgstr "Skicka -z text till länkaren"
+msgstr "Skicka -z text till länkaren."
#: config/moxie/moxie.opt:31
-#, fuzzy
-#| msgid "Enable MUL.X and UMUL.X instructions"
msgid "Enable MUL.X and UMUL.X instructions."
-msgstr "Använd MUL.X- och UMUL.X-instruktioner"
+msgstr "Använd MUL.X- och UMUL.X-instruktioner."
#: config/microblaze/microblaze.opt:40
-#, fuzzy
-#| msgid "Use software emulation for floating point (default)"
msgid "Use software emulation for floating point (default)."
-msgstr "Använd programvaruemulering för flyttal (standard)"
+msgstr "Använd programvaruemulering för flyttal (standard)."
#: config/microblaze/microblaze.opt:44
-#, fuzzy
-#| msgid "Use hardware floating point instructions"
msgid "Use hardware floating point instructions."
-msgstr "Använd flyttalsinstruktioner i hårdvara"
+msgstr "Använd flyttalsinstruktioner i hårdvara."
#: config/microblaze/microblaze.opt:48
-#, fuzzy
-#| msgid "Use table lookup optimization for small signed integer divisions"
msgid "Use table lookup optimization for small signed integer divisions."
-msgstr "Aktivera tabelluppslagningsoptimeringar för divisioner med små heltal med tecken"
+msgstr "Aktivera tabelluppslagningsoptimeringar för divisioner med små heltal med tecken."
#: config/microblaze/microblaze.opt:52
-#, fuzzy
-#| msgid "-mcpu=PROCESSOR\t\tUse features of and schedule code for given CPU"
msgid "-mcpu=PROCESSOR\t\tUse features of and schedule code for given CPU."
-msgstr "-mcpu=PROCESSOR\t\tAnvänd funktioner i och schemalägg kod för angiven CPU"
+msgstr "-mcpu=PROCESSOR\t\tAnvänd funktioner i och schemalägg kod för angiven CPU."
#: config/microblaze/microblaze.opt:56
-#, fuzzy
-#| msgid "Don't optimize block moves, use memcpy"
msgid "Don't optimize block moves, use memcpy."
-msgstr "Optimera inte blockförflyttningar, använd memcpy"
+msgstr "Optimera inte blockförflyttningar, använd memcpy."
#: config/microblaze/microblaze.opt:68
-#, fuzzy
-#| msgid "Use the soft multiply emulation (default)"
msgid "Use the soft multiply emulation (default)."
-msgstr "Använd programvaruemulering av multiplikation (standard)"
+msgstr "Använd programvaruemulering av multiplikation (standard)."
#: config/microblaze/microblaze.opt:72
-#, fuzzy
-#| msgid "Use reorder instructions (swap and byte reversed load/store) (default)"
msgid "Use reorder instructions (swap and byte reversed load/store) (default)."
-msgstr "Använd ordningsändringinstruktioner (växlad och byte-omvänd lastning/lagring) (standard)"
+msgstr "Använd ordningsändringinstruktioner (växlad och byte-omvänd laddning/lagring) (standard)."
#: config/microblaze/microblaze.opt:76
-#, fuzzy
-#| msgid "Use the software emulation for divides (default)"
msgid "Use the software emulation for divides (default)."
-msgstr "Använd programvaruemulering av division (standard)"
+msgstr "Använd programvaruemulering av division (standard)."
#: config/microblaze/microblaze.opt:80
-#, fuzzy
-#| msgid "Use the hardware barrel shifter instead of emulation"
msgid "Use the hardware barrel shifter instead of emulation."
-msgstr "Använd tunnskiftaren i hårdvara istället för emulering"
+msgstr "Använd tunnskiftaren i hårdvara istället för emulering."
#: config/microblaze/microblaze.opt:84
-#, fuzzy
-#| msgid "Use pattern compare instructions"
msgid "Use pattern compare instructions."
-msgstr "Använd mönsterjämförelseinstruktioner"
+msgstr "Använd mönsterjämförelseinstruktioner."
#: config/microblaze/microblaze.opt:87
#, c-format
@@ -14041,16 +11410,12 @@ msgid "%qs is deprecated; use -fstack-check"
msgstr "%qs bör undvikas, använd -fstack-check"
#: config/microblaze/microblaze.opt:88
-#, fuzzy
-#| msgid "Check for stack overflow at runtime"
msgid "Check for stack overflow at runtime."
-msgstr "Kontrollera stackspill vid körtillfället"
+msgstr "Kontrollera stackspill vid körtillfället."
#: config/microblaze/microblaze.opt:92 config/iq2000/iq2000.opt:65
-#, fuzzy
-#| msgid "Use GP relative sdata/sbss sections"
msgid "Use GP relative sdata/sbss sections."
-msgstr "Använd GP relativt sdata/sbss-sektioner"
+msgstr "Använd GP relativt sdata/sbss-sektioner."
#: config/microblaze/microblaze.opt:95
#, c-format
@@ -14058,364 +11423,248 @@ msgid "%qs is deprecated; use -fno-zero-initialized-in-bss"
msgstr "%qs bör undvikas, använd -fno-zero-initialized-in-bss"
#: config/microblaze/microblaze.opt:96
-#, fuzzy
-#| msgid "Clear the BSS to zero and place zero initialized in BSS"
msgid "Clear the BSS to zero and place zero initialized in BSS."
-msgstr "Nollställ BSS och placera nollinitierade i BSS"
+msgstr "Nollställ BSS och placera nollinitierade i BSS."
#: config/microblaze/microblaze.opt:100
-#, fuzzy
-#| msgid "Use multiply high instructions for high part of 32x32 multiply"
msgid "Use multiply high instructions for high part of 32x32 multiply."
-msgstr "Använd högmultiplikationsinstruktioner för den höga delen av 32·32-multiplikationer"
+msgstr "Använd högmultiplikationsinstruktioner för den höga delen av 32·32-multiplikationer."
#: config/microblaze/microblaze.opt:104
-#, fuzzy
-#| msgid "Use hardware floating point conversion instructions"
msgid "Use hardware floating point conversion instructions."
-msgstr "Använd flyttalskonverteringsinstruktioner i hårdvara"
+msgstr "Använd flyttalskonverteringsinstruktioner i hårdvara."
#: config/microblaze/microblaze.opt:108
-#, fuzzy
-#| msgid "Use hardware floating point square root instruction"
msgid "Use hardware floating point square root instruction."
-msgstr "Använd flyttalsinstruktion för kvadratrot i hårdvara"
+msgstr "Använd flyttalsinstruktion för kvadratrot i hårdvara."
# Den ofärdiga beskrivningen är felrapporterad:
# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47105
#: config/microblaze/microblaze.opt:112
-#, fuzzy
-#| msgid "Description for mxl-mode-executable"
msgid "Description for mxl-mode-executable."
-msgstr "Beskrivning för mxl-mode-executable"
+msgstr "Beskrivning för mxl-mode-executable."
# Den ofärdiga beskrivningen är felrapporterad:
# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47105
#: config/microblaze/microblaze.opt:116
-#, fuzzy
-#| msgid "Description for mxl-mode-xmdstub"
msgid "Description for mxl-mode-xmdstub."
-msgstr "Beskrivning för mxl-mode-xmdstub"
+msgstr "Beskrivning för mxl-mode-xmdstub."
# Den ofärdiga beskrivningen är felrapporterad:
# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47105
#: config/microblaze/microblaze.opt:120
-#, fuzzy
-#| msgid "Description for mxl-mode-bootstrap"
msgid "Description for mxl-mode-bootstrap."
-msgstr "Beskrivning för mxl-mode-bootstrap"
+msgstr "Beskrivning för mxl-mode-bootstrap."
# Den ofärdiga beskrivningen är felrapporterad:
# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47105
#: config/microblaze/microblaze.opt:124
-#, fuzzy
-#| msgid "Description for mxl-mode-novectors"
msgid "Description for mxl-mode-novectors."
-msgstr "Beskrivning för mxl-mode-novectors"
+msgstr "Beskrivning för mxl-mode-novectors."
#: config/microblaze/microblaze.opt:128
-#, fuzzy
-#| msgid "Use hardware quad FP instructions"
msgid "Use hardware prefetch instruction"
-msgstr "Använd hårdvaruinstruktioner för quad fp"
+msgstr "Använd instruktioner för förhandshämtning (prefetch) i hårdvara"
#: config/vax/vax.opt:23 config/vax/vax.opt:27
-#, fuzzy
-#| msgid "Target DFLOAT double precision code"
msgid "Target DFLOAT double precision code."
-msgstr "Sikta på DFLOAT-dubbelprecisionskod"
+msgstr "Sikta på DFLOAT-dubbelprecisionskod."
#: config/vax/vax.opt:31 config/vax/vax.opt:35
-#, fuzzy
-#| msgid "Generate GFLOAT double precision code"
msgid "Generate GFLOAT double precision code."
-msgstr "Generera GFLOAT-dubbelprecisionskod"
+msgstr "Generera GFLOAT-dubbelprecisionskod."
#: config/vax/vax.opt:39
-#, fuzzy
-#| msgid "Generate code for GNU assembler (gas)"
msgid "Generate code for GNU assembler (gas)."
-msgstr "Generera kod för GNU-assembler (gas)"
+msgstr "Generera kod för GNU-assembler (gas)."
#: config/vax/vax.opt:43
-#, fuzzy
-#| msgid "Generate code for UNIX assembler"
msgid "Generate code for UNIX assembler."
-msgstr "Generera kod för UNIX-assembler"
+msgstr "Generera kod för UNIX-assembler."
#: config/vax/vax.opt:47
-#, fuzzy
-#| msgid "Use VAXC structure conventions"
msgid "Use VAXC structure conventions."
-msgstr "Använd VAXC:s konventioner för struct"
+msgstr "Använd VAXC:s konventioner för struct."
#: config/vax/vax.opt:51
-#, fuzzy
-#| msgid "Use new adddi3/subdi3 patterns"
msgid "Use new adddi3/subdi3 patterns."
-msgstr "Använd nya adddi3/subdi3-mönster"
+msgstr "Använd nya adddi3/subdi3-mönster."
#: config/frv/frv.opt:30
-#, fuzzy
-#| msgid "Use 4 media accumulators"
msgid "Use 4 media accumulators."
-msgstr "Använd 4 mediaackumulatorer"
+msgstr "Använd 4 mediaackumulatorer."
#: config/frv/frv.opt:34
-#, fuzzy
-#| msgid "Use 8 media accumulators"
msgid "Use 8 media accumulators."
-msgstr "Använd 8 mediaackumulatorer"
+msgstr "Använd 8 mediaackumulatorer."
#: config/frv/frv.opt:38
-#, fuzzy
-#| msgid "Enable label alignment optimizations"
msgid "Enable label alignment optimizations."
-msgstr "Aktivera optimeringar av etikettjustering"
+msgstr "Aktivera optimeringar av etikettjustering."
#: config/frv/frv.opt:42
-#, fuzzy
-#| msgid "Dynamically allocate cc registers"
msgid "Dynamically allocate cc registers."
-msgstr "Allokera cc-register dynamiskt"
+msgstr "Allokera cc-register dynamiskt."
#: config/frv/frv.opt:49
-#, fuzzy
-#| msgid "Set the cost of branches"
msgid "Set the cost of branches."
-msgstr "Ange kostnaden för grenar"
+msgstr "Ange kostnaden för grenar."
#: config/frv/frv.opt:53
-#, fuzzy
-#| msgid "Enable conditional execution other than moves/scc"
msgid "Enable conditional execution other than moves/scc."
-msgstr "Aktivera villkorlig exekvering förutom moves/scc"
+msgstr "Aktivera villkorlig exekvering förutom moves/scc."
#: config/frv/frv.opt:57
-#, fuzzy
-#| msgid "Change the maximum length of conditionally-executed sequences"
msgid "Change the maximum length of conditionally-executed sequences."
-msgstr "Ändra den maximala längden på villkorligt exekverade sekvenser"
+msgstr "Ändra den maximala längden på villkorligt exekverade sekvenser."
#: config/frv/frv.opt:61
-#, fuzzy
-#| msgid "Change the number of temporary registers that are available to conditionally-executed sequences"
msgid "Change the number of temporary registers that are available to conditionally-executed sequences."
-msgstr "Ändra antalet temporära register som är tillgängliga för villkorligt exekverade sekvenser"
+msgstr "Ändra antalet temporära register som är tillgängliga för villkorligt exekverade sekvenser."
#: config/frv/frv.opt:65
-#, fuzzy
-#| msgid "Enable conditional moves"
msgid "Enable conditional moves."
-msgstr "Aktivera villkorliga flyttningar"
+msgstr "Aktivera villkorliga flyttningar."
#: config/frv/frv.opt:69
-#, fuzzy
-#| msgid "Set the target CPU type"
msgid "Set the target CPU type."
-msgstr "Ange typen av mål-CPU"
+msgstr "Ange typen av mål-CPU."
#: config/frv/frv.opt:73
msgid "Known FR-V CPUs (for use with the -mcpu= option):"
msgstr "Kända FR-V-CPU:er (att användas med flaggan -mcpu=):"
#: config/frv/frv.opt:122
-#, fuzzy
-#| msgid "Use fp double instructions"
msgid "Use fp double instructions."
-msgstr "Använd fp-double-instruktioner"
+msgstr "Använd fp-double-instruktioner."
#: config/frv/frv.opt:126
-#, fuzzy
-#| msgid "Change the ABI to allow double word insns"
msgid "Change the ABI to allow double word insns."
-msgstr "Ändra ABI:et så det tillåter dubbelordinstruktioner"
+msgstr "Ändra ABI:et så det tillåter dubbelordinstruktioner."
#: config/frv/frv.opt:134
-#, fuzzy
-#| msgid "Just use icc0/fcc0"
msgid "Just use icc0/fcc0."
-msgstr "Använd bara icc0/fcc0"
+msgstr "Använd bara icc0/fcc0."
#: config/frv/frv.opt:138
-#, fuzzy
-#| msgid "Only use 32 FPRs"
msgid "Only use 32 FPRs."
-msgstr "Använd bara 32 FPR:er"
+msgstr "Använd bara 32 FPR:er."
#: config/frv/frv.opt:142
-#, fuzzy
-#| msgid "Use 64 FPRs"
msgid "Use 64 FPRs."
-msgstr "Använd 64 FPR:er"
+msgstr "Använd 64 FPR:er."
#: config/frv/frv.opt:146
-#, fuzzy
-#| msgid "Only use 32 GPRs"
msgid "Only use 32 GPRs."
-msgstr "Använd bara 32 GPR:er"
+msgstr "Använd bara 32 GPR:er."
#: config/frv/frv.opt:150
-#, fuzzy
-#| msgid "Use 64 GPRs"
msgid "Use 64 GPRs."
-msgstr "Använd 64 GPR:er"
+msgstr "Använd 64 GPR:er."
#: config/frv/frv.opt:154
-#, fuzzy
-#| msgid "Enable use of GPREL for read-only data in FDPIC"
msgid "Enable use of GPREL for read-only data in FDPIC."
-msgstr "Aktivera användning av GPREL för endast läsbara data i FDPIC"
+msgstr "Aktivera användning av GPREL för endast läsbara data i FDPIC."
#: config/frv/frv.opt:166
-#, fuzzy
-#| msgid "Enable PIC support for building libraries"
msgid "Enable PIC support for building libraries."
-msgstr "Aktivera PIC-stöd för att bygga bibliotek"
+msgstr "Aktivera PIC-stöd för att bygga bibliotek."
#: config/frv/frv.opt:170
-#, fuzzy
-#| msgid "Follow the EABI linkage requirements"
msgid "Follow the EABI linkage requirements."
-msgstr "Följ länkningskraven EABI"
+msgstr "Följ länkningskraven EABI."
#: config/frv/frv.opt:174
-#, fuzzy
-#| msgid "Disallow direct calls to global functions"
msgid "Disallow direct calls to global functions."
-msgstr "Tillåt inte direkta anrop till globala funktioner"
+msgstr "Tillåt inte direkta anrop till globala funktioner."
#: config/frv/frv.opt:178
-#, fuzzy
-#| msgid "Use media instructions"
msgid "Use media instructions."
-msgstr "Använd mediainstruktioner"
+msgstr "Använd mediainstruktioner."
#: config/frv/frv.opt:182
-#, fuzzy
-#| msgid "Use multiply add/subtract instructions"
msgid "Use multiply add/subtract instructions."
-msgstr "Använd multiplicera-addera-/-subtraherainstruktioner"
+msgstr "Använd multiplicera-addera-/-subtraherainstruktioner."
#: config/frv/frv.opt:186
-#, fuzzy
-#| msgid "Enable optimizing &&/|| in conditional execution"
msgid "Enable optimizing &&/|| in conditional execution."
-msgstr "Aktivera optimering av &&/|| i villkorliga uttryck"
+msgstr "Aktivera optimering av &&/|| i villkorliga uttryck."
#: config/frv/frv.opt:190
-#, fuzzy
-#| msgid "Enable nested conditional execution optimizations"
msgid "Enable nested conditional execution optimizations."
-msgstr "Aktivera nästade optimeringar av villkorlig exekvering"
+msgstr "Aktivera nästade optimeringar av villkorlig exekvering."
#: config/frv/frv.opt:195
-#, fuzzy
-#| msgid "Do not mark ABI switches in e_flags"
msgid "Do not mark ABI switches in e_flags."
-msgstr "Markera inte ABI-byten i e_flags"
+msgstr "Markera inte ABI-byten i e_flags."
#: config/frv/frv.opt:199
-#, fuzzy
-#| msgid "Remove redundant membars"
msgid "Remove redundant membars."
-msgstr "Ta bort överflödiga medlemmar"
+msgstr "Ta bort överflödiga medlemmar."
#: config/frv/frv.opt:203
-#, fuzzy
-#| msgid "Pack VLIW instructions"
msgid "Pack VLIW instructions."
-msgstr "Packa VLIW-instruktioner"
+msgstr "Packa VLIW-instruktioner."
#: config/frv/frv.opt:207
-#, fuzzy
-#| msgid "Enable setting GPRs to the result of comparisons"
msgid "Enable setting GPRs to the result of comparisons."
-msgstr "Aktivera sättande av GPR:er till resultatet av jämförelser"
+msgstr "Aktivera sättande av GPR:er till resultatet av jämförelser."
#: config/frv/frv.opt:211
-#, fuzzy
-#| msgid "Change the amount of scheduler lookahead"
msgid "Change the amount of scheduler lookahead."
-msgstr "Ändra hur långt schemaläggaren blickar framåt"
+msgstr "Ändra hur långt schemaläggaren blickar framåt."
#: config/frv/frv.opt:219
-#, fuzzy
-#| msgid "Assume a large TLS segment"
msgid "Assume a large TLS segment."
-msgstr "Anta ett stort TLS-segment"
+msgstr "Anta ett stort TLS-segment."
#: config/frv/frv.opt:223
-#, fuzzy
-#| msgid "Do not assume a large TLS segment"
msgid "Do not assume a large TLS segment."
-msgstr "Anta inte ett stort TLS-segment"
+msgstr "Anta inte ett stort TLS-segment."
#: config/frv/frv.opt:228
-#, fuzzy
-#| msgid "Cause gas to print tomcat statistics"
msgid "Cause gas to print tomcat statistics."
-msgstr "FÃ¥ gas att skriva tomcat-statistik"
+msgstr "FÃ¥ gas att skriva tomcat-statistik."
#: config/frv/frv.opt:233
-#, fuzzy
-#| msgid "Link with the library-pic libraries"
msgid "Link with the library-pic libraries."
-msgstr "Länka med biblioteken library-pic"
+msgstr "Länka med biblioteken library-pic."
#: config/frv/frv.opt:237
-#, fuzzy
-#| msgid "Allow branches to be packed with other instructions"
msgid "Allow branches to be packed with other instructions."
-msgstr "Tillåt grenar att packas med andra instruktioner"
+msgstr "Tillåt grenar att packas med andra instruktioner."
#: config/mn10300/mn10300.opt:30
-#, fuzzy
-#| msgid "Target the AM33 processor"
msgid "Target the AM33 processor."
-msgstr "Sikta på processorn AM33"
+msgstr "Sikta på processorn AM33."
#: config/mn10300/mn10300.opt:34
-#, fuzzy
-#| msgid "Target the AM33/2.0 processor"
msgid "Target the AM33/2.0 processor."
-msgstr "Sikta på processorn AM33/2.0"
+msgstr "Sikta på processorn AM33/2.0."
#: config/mn10300/mn10300.opt:38
-#, fuzzy
-#| msgid "Target the AM34 processor"
msgid "Target the AM34 processor."
-msgstr "Sikta på processorn AM34"
+msgstr "Sikta på processorn AM34."
#: config/mn10300/mn10300.opt:46
-#, fuzzy
-#| msgid "Work around hardware multiply bug"
msgid "Work around hardware multiply bug."
-msgstr "Gå runt multiplikationsfel i hårdvara"
+msgstr "Gå runt multiplikationsfel i hårdvara."
#: config/mn10300/mn10300.opt:55
-#, fuzzy
-#| msgid "Enable linker relaxations"
msgid "Enable linker relaxations."
-msgstr "Aktivera länkaravslappningar"
+msgstr "Aktivera länkaravslappningar."
#: config/mn10300/mn10300.opt:59
-#, fuzzy
-#| msgid "Return pointers in both a0 and d0"
msgid "Return pointers in both a0 and d0."
-msgstr "Returnera pekare i både a0 och d0"
+msgstr "Returnera pekare i både a0 och d0."
#: config/mn10300/mn10300.opt:63
-#, fuzzy
-#| msgid "Allow gcc to generate LIW instructions"
msgid "Allow gcc to generate LIW instructions."
-msgstr "Tillåt gcc att generera LIW-instruktioner"
+msgstr "Tillåt gcc att generera LIW-instruktioner."
#: config/mn10300/mn10300.opt:67
-#, fuzzy
-#| msgid "Allow gcc to generate the SETLB and Lcc instructions"
msgid "Allow gcc to generate the SETLB and Lcc instructions."
-msgstr "Tillåt gcc att generera instruktionerna SETLB och Lcc"
+msgstr "Tillåt gcc att generera instruktionerna SETLB och Lcc."
#: config/nds32/nds32.opt:26
msgid "Generate code in big-endian mode."
@@ -14478,172 +11727,120 @@ msgid "Guide linker to relax instructions."
msgstr "Hjälp länkaren att relaxera instruktioner."
#: config/iq2000/iq2000.opt:31
-#, fuzzy
-#| msgid "Specify CPU for code generation purposes"
msgid "Specify CPU for code generation purposes."
-msgstr "Ange CPU för kodgenereringssyften"
+msgstr "Ange CPU för kodgenereringssyften."
#: config/iq2000/iq2000.opt:47
-#, fuzzy
-#| msgid "Specify CPU for scheduling purposes"
msgid "Specify CPU for scheduling purposes."
-msgstr "Ange CPU för schemaläggningssyften"
+msgstr "Ange CPU för schemaläggningssyften."
#: config/iq2000/iq2000.opt:51
msgid "Known IQ2000 CPUs (for use with the -mcpu= option):"
msgstr "Kända IQ2000 CPU:er (att användas med flaggan -mcpu=):"
#: config/iq2000/iq2000.opt:61 config/mips/mips.opt:142
-#, fuzzy
-#| msgid "Use ROM instead of RAM"
msgid "Use ROM instead of RAM."
-msgstr "Använd ROM istället för RAM"
+msgstr "Använd ROM istället för RAM."
#: config/iq2000/iq2000.opt:70
-#, fuzzy
-#| msgid "No default crt0.o"
msgid "No default crt0.o."
-msgstr "Ingen standard-crt0.o"
+msgstr "Ingen standard-crt0.o."
#: config/iq2000/iq2000.opt:74 config/mips/mips.opt:393
-#, fuzzy
-#| msgid "Put uninitialized constants in ROM (needs -membedded-data)"
msgid "Put uninitialized constants in ROM (needs -membedded-data)."
-msgstr "Placera oinitierade konstanter i ROM (kräver -membedded-data)"
+msgstr "Placera oinitierade konstanter i ROM (kräver -membedded-data)."
#: config/c6x/c6x-tables.opt:24
msgid "Known C6X ISAs (for use with the -march= option):"
msgstr "Kända C6X ISA:er (att användas med flaggan -march=):"
#: config/c6x/c6x.opt:46
-#, fuzzy
-#| msgid "Valid arguments for the -msdata= option"
msgid "Valid arguments for the -msdata= option."
-msgstr "Giltiga argument till flaggan -msdata="
+msgstr "Giltiga argument till flaggan -msdata=."
#: config/c6x/c6x.opt:59
-#, fuzzy
-#| msgid "Compile for the DSBT shared library ABI"
msgid "Compile for the DSBT shared library ABI."
-msgstr "Kompilera ABI:et DSBT för delade bibliotek"
+msgstr "Kompilera ABI:et DSBT för delade bibliotek."
#: config/cris/linux.opt:27
-#, fuzzy
-#| msgid "Together with -fpic and -fPIC, do not use GOTPLT references"
msgid "Together with -fpic and -fPIC, do not use GOTPLT references."
-msgstr "Tillsammans med -fpic och -fPIC, använd inte GOTPLT-referenser"
+msgstr "Tillsammans med -fpic och -fPIC, använd inte GOTPLT-referenser."
#: config/cris/cris.opt:45
-#, fuzzy
-#| msgid "Work around bug in multiplication instruction"
msgid "Work around bug in multiplication instruction."
-msgstr "GÃ¥ runt fel i multiplikationsinstruktion"
+msgstr "GÃ¥ runt fel i multiplikationsinstruktion."
#: config/cris/cris.opt:51
-#, fuzzy
-#| msgid "Compile for ETRAX 4 (CRIS v3)"
msgid "Compile for ETRAX 4 (CRIS v3)."
-msgstr "Kompilera för ETRAX 4 (CRIS v3)"
+msgstr "Kompilera för ETRAX 4 (CRIS v3)."
#: config/cris/cris.opt:56
-#, fuzzy
-#| msgid "Compile for ETRAX 100 (CRIS v8)"
msgid "Compile for ETRAX 100 (CRIS v8)."
-msgstr "Kompilera för ETRAX 100 (CRIS v8)"
+msgstr "Kompilera för ETRAX 100 (CRIS v8)."
#: config/cris/cris.opt:64
-#, fuzzy
-#| msgid "Emit verbose debug information in assembly code"
msgid "Emit verbose debug information in assembly code."
-msgstr "Mata ut utförlig felsökningsinformation i assemblerkod"
+msgstr "Mata ut utförlig felsökningsinformation i assemblerkod."
#: config/cris/cris.opt:71
-#, fuzzy
-#| msgid "Do not use condition codes from normal instructions"
msgid "Do not use condition codes from normal instructions."
-msgstr "Använd inte tillståndskoder från normala instruktioner"
+msgstr "Använd inte tillståndskoder från normala instruktioner."
#: config/cris/cris.opt:80
-#, fuzzy
-#| msgid "Do not emit addressing modes with side-effect assignment"
msgid "Do not emit addressing modes with side-effect assignment."
-msgstr "Mata inte ut adresseringssätt med sidoeffekttilldelning"
+msgstr "Mata inte ut adresseringssätt med sidoeffekttilldelning."
#: config/cris/cris.opt:89
-#, fuzzy
-#| msgid "Do not tune stack alignment"
msgid "Do not tune stack alignment."
-msgstr "Trimma inte stackjustering"
+msgstr "Trimma inte stackjustering."
#: config/cris/cris.opt:98
-#, fuzzy
-#| msgid "Do not tune writable data alignment"
msgid "Do not tune writable data alignment."
-msgstr "Trimma inte justering för skrivbar data"
+msgstr "Trimma inte justering för skrivbar data."
#: config/cris/cris.opt:107
-#, fuzzy
-#| msgid "Do not tune code and read-only data alignment"
msgid "Do not tune code and read-only data alignment."
-msgstr "Trimma inte justering för kod och endast läsbar data"
+msgstr "Trimma inte justering för kod och endast läsbar data."
#: config/cris/cris.opt:116
-#, fuzzy
-#| msgid "Align code and data to 32 bits"
msgid "Align code and data to 32 bits."
-msgstr "Justera kod och data till 32 bitar"
+msgstr "Justera kod och data till 32 bitar."
#: config/cris/cris.opt:133
-#, fuzzy
-#| msgid "Don't align items in code or data"
msgid "Don't align items in code or data."
-msgstr "Justera inte element i kod och data"
+msgstr "Justera inte element i kod och data."
#: config/cris/cris.opt:142
-#, fuzzy
-#| msgid "Do not emit function prologue or epilogue"
msgid "Do not emit function prologue or epilogue."
-msgstr "Mata inte ut funktionsprolog eller -epilog"
+msgstr "Mata inte ut funktionsprolog eller -epilog."
#: config/cris/cris.opt:149
-#, fuzzy
-#| msgid "Use the most feature-enabling options allowed by other options"
msgid "Use the most feature-enabling options allowed by other options."
-msgstr "Använd de flaggor bland övriga flaggor som slår på flest funktioner"
+msgstr "Använd de flaggor bland övriga flaggor som slår på flest funktioner."
#: config/cris/cris.opt:158
-#, fuzzy
-#| msgid "Override -mbest-lib-options"
msgid "Override -mbest-lib-options."
-msgstr "Åsidosätt -mbest-lib-options"
+msgstr "Åsidosätt -mbest-lib-options."
#: config/cris/cris.opt:165
-#, fuzzy
-#| msgid "-march=ARCH\tGenerate code for the specified chip or CPU version"
msgid "-march=ARCH\tGenerate code for the specified chip or CPU version."
-msgstr "-march=ARK\tGenerera kod för det angivna chip:et eller CPU-versionen"
+msgstr "-march=ARK\tGenerera kod för det angivna chip:et eller CPU-versionen."
#: config/cris/cris.opt:169
-#, fuzzy
-#| msgid "-mtune=ARCH\tTune alignment for the specified chip or CPU version"
msgid "-mtune=ARCH\tTune alignment for the specified chip or CPU version."
-msgstr "-mtune=ARK\tTrimma justering för det angivna chip:et eller CPU-versionen"
+msgstr "-mtune=ARK\tTrimma justering för det angivna chip:et eller CPU-versionen."
#: config/cris/cris.opt:173
-#, fuzzy
-#| msgid "-mmax-stackframe=SIZE\tWarn when a stackframe is larger than the specified size"
msgid "-mmax-stackframe=SIZE\tWarn when a stackframe is larger than the specified size."
-msgstr "-mmax-stackframe=STORLEK\tVarna när en stackram är större än den angivna storleken"
+msgstr "-mmax-stackframe=STORLEK\tVarna när en stackram är större än den angivna storleken."
#: config/cris/cris.opt:180
msgid "Emit traps as \"break 8\", default for CRIS v3 and up. If disabled, calls to abort() are used."
msgstr "Mata ut fällor som â€break 8â€, standard för CRIS v3 och uppÃ¥t. Om avaktiverat används anrop till abort()."
#: config/cris/cris.opt:184
-#, fuzzy
-#| msgid "Emit checks causing \"break 8\" instructions to execute when applying atomic builtins on misaligned memory"
msgid "Emit checks causing \"break 8\" instructions to execute when applying atomic builtins on misaligned memory."
-msgstr "Mata ut kontroller som fÃ¥r â€break 8â€-instruktioner att köra när atomära inbyggda används pÃ¥ feljusterat minne"
+msgstr "Mata ut kontroller som fÃ¥r â€break 8â€-instruktioner att köra när atomära inbyggda används pÃ¥ feljusterat minne."
#: config/cris/cris.opt:188
msgid "Handle atomic builtins that may be applied to unaligned data by calling library functions. Overrides -mtrap-unaligned-atomic."
@@ -14658,266 +11855,180 @@ msgid "Runtime name."
msgstr "Körtidsnamn."
#: config/sh/sh.opt:48
-#, fuzzy
-#| msgid "Generate SH1 code"
msgid "Generate SH1 code."
-msgstr "Generera SH1-kod"
+msgstr "Generera SH1-kod."
#: config/sh/sh.opt:52
-#, fuzzy
-#| msgid "Generate SH2 code"
msgid "Generate SH2 code."
-msgstr "Generera SH2-kod"
+msgstr "Generera SH2-kod."
#: config/sh/sh.opt:56
-#, fuzzy
-#| msgid "Generate default double-precision SH2a-FPU code"
msgid "Generate default double-precision SH2a-FPU code."
-msgstr "Generera normal dubbelprecisions SH2a-FPU-kod"
+msgstr "Generera normal dubbelprecisions SH2a-FPU-kod."
#: config/sh/sh.opt:60
-#, fuzzy
-#| msgid "Generate SH2a FPU-less code"
msgid "Generate SH2a FPU-less code."
-msgstr "Generera SH2a-kod utan FPU"
+msgstr "Generera SH2a-kod utan FPU."
#: config/sh/sh.opt:64
-#, fuzzy
-#| msgid "Generate default single-precision SH2a-FPU code"
msgid "Generate default single-precision SH2a-FPU code."
-msgstr "Generera normal enkelprecisions SH2a-FPU-kod"
+msgstr "Generera normal enkelprecisions SH2a-FPU-kod."
#: config/sh/sh.opt:68
-#, fuzzy
-#| msgid "Generate only single-precision SH2a-FPU code"
msgid "Generate only single-precision SH2a-FPU code."
-msgstr "Generera endast enkelprecisions SH2a-FPU-kod"
+msgstr "Generera endast enkelprecisions SH2a-FPU-kod."
#: config/sh/sh.opt:72
-#, fuzzy
-#| msgid "Generate SH2e code"
msgid "Generate SH2e code."
-msgstr "Generera SH2e-kod"
+msgstr "Generera SH2e-kod."
#: config/sh/sh.opt:76
-#, fuzzy
-#| msgid "Generate SH3 code"
msgid "Generate SH3 code."
-msgstr "Generera SH3-kod"
+msgstr "Generera SH3-kod."
#: config/sh/sh.opt:80
-#, fuzzy
-#| msgid "Generate SH3e code"
msgid "Generate SH3e code."
-msgstr "Generera SH3e-kod"
+msgstr "Generera SH3e-kod."
#: config/sh/sh.opt:84
-#, fuzzy
-#| msgid "Generate SH4 code"
msgid "Generate SH4 code."
-msgstr "Generera SH4-kod"
+msgstr "Generera SH4-kod."
#: config/sh/sh.opt:88
-#, fuzzy
-#| msgid "Generate SH4-100 code"
msgid "Generate SH4-100 code."
-msgstr "Generera SH4-100-kod"
+msgstr "Generera SH4-100-kod."
#: config/sh/sh.opt:92
-#, fuzzy
-#| msgid "Generate SH4-200 code"
msgid "Generate SH4-200 code."
-msgstr "Generera SH4-200-kod"
+msgstr "Generera SH4-200-kod."
#: config/sh/sh.opt:98
-#, fuzzy
-#| msgid "Generate SH4-300 code"
msgid "Generate SH4-300 code."
-msgstr "Generera SH4-300-kod"
+msgstr "Generera SH4-300-kod."
#: config/sh/sh.opt:102
-#, fuzzy
-#| msgid "Generate SH4 FPU-less code"
msgid "Generate SH4 FPU-less code."
-msgstr "Generera SH4-kod utan FPU"
+msgstr "Generera SH4-kod utan FPU."
#: config/sh/sh.opt:106
-#, fuzzy
-#| msgid "Generate SH4-100 FPU-less code"
msgid "Generate SH4-100 FPU-less code."
-msgstr "Generera SH4-100-kod utan FPU"
+msgstr "Generera SH4-100-kod utan FPU."
#: config/sh/sh.opt:110
-#, fuzzy
-#| msgid "Generate SH4-200 FPU-less code"
msgid "Generate SH4-200 FPU-less code."
-msgstr "Generera SH4-200-kod utan FPU"
+msgstr "Generera SH4-200-kod utan FPU."
#: config/sh/sh.opt:114
-#, fuzzy
-#| msgid "Generate SH4-300 FPU-less code"
msgid "Generate SH4-300 FPU-less code."
-msgstr "Generera SH4-300-kod utan FPU"
+msgstr "Generera SH4-300-kod utan FPU."
#: config/sh/sh.opt:118
-#, fuzzy
-#| msgid "Generate code for SH4 340 series (MMU/FPU-less)"
msgid "Generate code for SH4 340 series (MMU/FPU-less)."
-msgstr "Generera kod för SH4 340-serien (saknar MMU/FPU)"
+msgstr "Generera kod för SH4 340-serien (saknar MMU/FPU)."
#: config/sh/sh.opt:123
-#, fuzzy
-#| msgid "Generate code for SH4 400 series (MMU/FPU-less)"
msgid "Generate code for SH4 400 series (MMU/FPU-less)."
-msgstr "Generera kod för SH4 400-serien (saknar MMU/FPU)"
+msgstr "Generera kod för SH4 400-serien (saknar MMU/FPU)."
#: config/sh/sh.opt:128
msgid "Generate code for SH4 500 series (FPU-less)."
msgstr "Generera kod för SH4-500-serien (utan FPU)."
#: config/sh/sh.opt:133
-#, fuzzy
-#| msgid "Generate default single-precision SH4 code"
msgid "Generate default single-precision SH4 code."
-msgstr "Generera normal enkelprecisions SH4-kod"
+msgstr "Generera normal enkelprecisions SH4-kod."
#: config/sh/sh.opt:137
-#, fuzzy
-#| msgid "Generate default single-precision SH4-100 code"
msgid "Generate default single-precision SH4-100 code."
-msgstr "Generera normal enkelprecisions SH4-100-kod"
+msgstr "Generera normal enkelprecisions SH4-100-kod."
#: config/sh/sh.opt:141
-#, fuzzy
-#| msgid "Generate default single-precision SH4-200 code"
msgid "Generate default single-precision SH4-200 code."
-msgstr "Generera normal enkelprecisions SH4-200-kod"
+msgstr "Generera normal enkelprecisions SH4-200-kod."
#: config/sh/sh.opt:145
-#, fuzzy
-#| msgid "Generate default single-precision SH4-300 code"
msgid "Generate default single-precision SH4-300 code."
-msgstr "Generera normal enkelprecisions SH4-300-kod"
+msgstr "Generera normal enkelprecisions SH4-300-kod."
#: config/sh/sh.opt:149
-#, fuzzy
-#| msgid "Generate only single-precision SH4 code"
msgid "Generate only single-precision SH4 code."
-msgstr "Generera endast enkelprecisions SH4-kod"
+msgstr "Generera endast enkelprecisions SH4-kod."
#: config/sh/sh.opt:153
-#, fuzzy
-#| msgid "Generate only single-precision SH4-100 code"
msgid "Generate only single-precision SH4-100 code."
-msgstr "Generera endast enkelprecisions SH4-100-kod"
+msgstr "Generera endast enkelprecisions SH4-100-kod."
#: config/sh/sh.opt:157
-#, fuzzy
-#| msgid "Generate only single-precision SH4-200 code"
msgid "Generate only single-precision SH4-200 code."
-msgstr "Generera endast enkelprecisions SH4-200-kod"
+msgstr "Generera endast enkelprecisions SH4-200-kod."
#: config/sh/sh.opt:161
-#, fuzzy
-#| msgid "Generate only single-precision SH4-300 code"
msgid "Generate only single-precision SH4-300 code."
-msgstr "Generera endast enkelprecisions SH4-300-kod"
+msgstr "Generera endast enkelprecisions SH4-300-kod."
#: config/sh/sh.opt:165
-#, fuzzy
-#| msgid "Generate SH4a code"
msgid "Generate SH4a code."
-msgstr "Generera SH4a-kod"
+msgstr "Generera SH4a-kod."
#: config/sh/sh.opt:169
-#, fuzzy
-#| msgid "Generate SH4a FPU-less code"
msgid "Generate SH4a FPU-less code."
-msgstr "Generera SH4a-kod utan FPU"
+msgstr "Generera SH4a-kod utan FPU."
#: config/sh/sh.opt:173
-#, fuzzy
-#| msgid "Generate default single-precision SH4a code"
msgid "Generate default single-precision SH4a code."
-msgstr "Generera normal enkelprecisions SH4a-kod"
+msgstr "Generera normal enkelprecisions SH4a-kod."
#: config/sh/sh.opt:177
-#, fuzzy
-#| msgid "Generate only single-precision SH4a code"
msgid "Generate only single-precision SH4a code."
-msgstr "Generera endast enkelprecisions SH4a-kod"
+msgstr "Generera endast enkelprecisions SH4a-kod."
#: config/sh/sh.opt:181
-#, fuzzy
-#| msgid "Generate SH4al-dsp code"
msgid "Generate SH4al-dsp code."
-msgstr "Generera SH4al-dsp-kod"
+msgstr "Generera SH4al-dsp-kod."
#: config/sh/sh.opt:185
-#, fuzzy
-#| msgid "Generate 32-bit SHmedia code"
msgid "Generate 32-bit SHmedia code."
-msgstr "Generera 32-bitars SHmedia-kod"
+msgstr "Generera 32-bitars SHmedia-kod."
#: config/sh/sh.opt:189
-#, fuzzy
-#| msgid "Generate 32-bit FPU-less SHmedia code"
msgid "Generate 32-bit FPU-less SHmedia code."
-msgstr "Generera 32-bitars SHmedia-kod utan FPU"
+msgstr "Generera 32-bitars SHmedia-kod utan FPU."
#: config/sh/sh.opt:193
-#, fuzzy
-#| msgid "Generate 64-bit SHmedia code"
msgid "Generate 64-bit SHmedia code."
-msgstr "Generera 64-bitars SHmedia-kod"
+msgstr "Generera 64-bitars SHmedia-kod."
#: config/sh/sh.opt:197
-#, fuzzy
-#| msgid "Generate 64-bit FPU-less SHmedia code"
msgid "Generate 64-bit FPU-less SHmedia code."
-msgstr "Generera 64-bitars SHmedia-kod utan FPU"
+msgstr "Generera 64-bitars SHmedia-kod utan FPU."
#: config/sh/sh.opt:201
-#, fuzzy
-#| msgid "Generate SHcompact code"
msgid "Generate SHcompact code."
-msgstr "Generera SHcompact-kod"
+msgstr "Generera SHcompact-kod."
#: config/sh/sh.opt:205
-#, fuzzy
-#| msgid "Generate FPU-less SHcompact code"
msgid "Generate FPU-less SHcompact code."
-msgstr "Generera SHcompact-kod utan FPU"
+msgstr "Generera SHcompact-kod utan FPU."
#: config/sh/sh.opt:217
-#, fuzzy
-#| msgid "Generate code in big endian mode"
msgid "Generate code in big endian mode."
-msgstr "Generera kod för rak byteordning"
+msgstr "Generera kod för rak byteordning."
#: config/sh/sh.opt:221
-#, fuzzy
-#| msgid "Generate 32-bit offsets in switch tables"
msgid "Generate 32-bit offsets in switch tables."
-msgstr "Använd 32-bitars avstånd i hopptabeller"
+msgstr "Använd 32-bitars avstånd i hopptabeller."
#: config/sh/sh.opt:225
-#, fuzzy
-#| msgid "Generate bit instructions"
msgid "Generate bit instructions."
-msgstr "Generera bitinstruktioner"
+msgstr "Generera bitinstruktioner."
#: config/sh/sh.opt:229
-#, fuzzy
-#| msgid "Cost to assume for a branch insn"
msgid "Cost to assume for a branch insn."
-msgstr "Kostnad att anta för en greninstruktion"
+msgstr "Kostnad att anta för en greninstruktion."
#: config/sh/sh.opt:233
-#, fuzzy
-#| msgid "Assume that zero displacement conditional branches are fast"
msgid "Assume that zero displacement conditional branches are fast."
-msgstr "Anta att villkorliga grenar med noll förskjutning är snabba"
+msgstr "Anta att villkorliga grenar med noll förskjutning är snabba."
#: config/sh/sh.opt:236 config/sh/sh.opt:240
#, c-format
@@ -14925,10 +12036,8 @@ msgid "%qs is deprecated and has no effect"
msgstr "%qs avrådes ifrån och har ingen effekt"
#: config/sh/sh.opt:237
-#, fuzzy
-#| msgid "Enable cbranchdi4 pattern"
msgid "Enable cbranchdi4 pattern."
-msgstr "Aktivera cbranchdi4-mönster"
+msgstr "Aktivera cbranchdi4-mönster."
#: config/sh/sh.opt:241
msgid "Emit cmpeqdi_t pattern even when -mcbranchdi is in effect."
@@ -14939,144 +12048,100 @@ msgid "Force the usage of delay slots for conditional branches."
msgstr "Framtvinga användningen av fördröjningssteg för villkorliga grenar."
#: config/sh/sh.opt:249
-#, fuzzy
-#| msgid "Enable SH5 cut2 workaround"
msgid "Enable SH5 cut2 workaround."
-msgstr "Aktivera sätt att kringgå SH5 cut2"
+msgstr "Aktivera sätt att kringgå SH5 cut2."
#: config/sh/sh.opt:253
-#, fuzzy
-#| msgid "Align doubles at 64-bit boundaries"
msgid "Align doubles at 64-bit boundaries."
-msgstr "Justera double på 64-bitarsgränser"
+msgstr "Justera double på 64-bitarsgränser."
#: config/sh/sh.opt:257
-#, fuzzy
-#| msgid "Division strategy, one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, inv:call2, inv:fp, call-div1, call-fp, call-table"
msgid "Division strategy, one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, inv:call2, inv:fp, call-div1, call-fp, call-table."
-msgstr "Divisionsstrategi, en av: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, inv:call2, inv:fp, call-div1, call-fp, call-table"
+msgstr "Divisionsstrategi, en av: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, inv:call2, inv:fp, call-div1, call-fp, call-table."
#: config/sh/sh.opt:261
-#, fuzzy
-#| msgid "Specify name for 32 bit signed division function"
msgid "Specify name for 32 bit signed division function."
-msgstr "Ange namnet på funktion för 32-bitars division med tecken"
+msgstr "Ange namnet på funktion för 32-bitars division med tecken."
#: config/sh/sh.opt:265
-#, fuzzy
-#| msgid "Generate LP64 code"
msgid "Generate ELF FDPIC code."
-msgstr "Generera LP64-kod"
+msgstr "Generera ELF FDPIC-kod."
#: config/sh/sh.opt:269
msgid "Enable the use of 64-bit floating point registers in fmov instructions. See -mdalign if 64-bit alignment is required."
msgstr "Möjliggör användningen av 64-bitars flyttalsregister i fmov-instruktioner. Se -mdalign om 64-bitars justering krävs."
#: config/sh/sh.opt:277
-#, fuzzy
-#| msgid "Cost to assume for gettr insn"
msgid "Cost to assume for gettr insn."
-msgstr "Kostnad att anta för getattr-instruktion"
+msgstr "Kostnad att anta för getattr-instruktion."
#: config/sh/sh.opt:281 config/sh/sh.opt:331
-#, fuzzy
-#| msgid "Follow Renesas (formerly Hitachi) / SuperH calling conventions"
msgid "Follow Renesas (formerly Hitachi) / SuperH calling conventions."
-msgstr "Följ Renesas (tidigare Hitachi) / SuperH-anropskonventioner"
+msgstr "Följ Renesas (tidigare Hitachi) / SuperH-anropskonventioner."
#: config/sh/sh.opt:285
-#, fuzzy
-#| msgid "Increase the IEEE compliance for floating-point comparisons"
msgid "Increase the IEEE compliance for floating-point comparisons."
-msgstr "Öka efterföljden av IEEE för flyttalsjämförelser"
+msgstr "Öka efterföljden av IEEE för flyttalsjämförelser."
#: config/sh/sh.opt:289
-#, fuzzy
-#| msgid "Enable the use of the indexed addressing mode for SHmedia32/SHcompact"
msgid "Enable the use of the indexed addressing mode for SHmedia32/SHcompact."
-msgstr "Aktivera användning av det indexerade adresseringsläget för SHmedia32/SHcompact"
+msgstr "Aktivera användning av det indexerade adresseringsläget för SHmedia32/SHcompact."
#: config/sh/sh.opt:293
-#, fuzzy
-#| msgid "inline code to invalidate instruction cache entries after setting up nested function trampolines"
msgid "inline code to invalidate instruction cache entries after setting up nested function trampolines."
-msgstr "inline:a kod för att invalidera instruktionscacheposter efter att nästade funktionstrampoliner satts upp"
+msgstr "inline:a kod för att invalidera instruktionscacheposter efter att nästade funktionstrampoliner satts upp."
#: config/sh/sh.opt:297
-#, fuzzy
-#| msgid "Assume symbols might be invalid"
msgid "Assume symbols might be invalid."
-msgstr "Anta att symboler kan vara ogiltiga"
+msgstr "Anta att symboler kan vara ogiltiga."
#: config/sh/sh.opt:301 config/arc/arc.opt:209
-#, fuzzy
-#| msgid "Annotate assembler instructions with estimated addresses"
msgid "Annotate assembler instructions with estimated addresses."
-msgstr "Annotera assemblerinstruktioner med bedömda adresser"
+msgstr "Annotera assemblerinstruktioner med bedömda adresser."
#: config/sh/sh.opt:305
-#, fuzzy
-#| msgid "Generate code in little endian mode"
msgid "Generate code in little endian mode."
-msgstr "Generera kod för omvänd byteordning"
+msgstr "Generera kod för omvänd byteordning."
#: config/sh/sh.opt:309
-#, fuzzy
-#| msgid "Mark MAC register as call-clobbered"
msgid "Mark MAC register as call-clobbered."
-msgstr "Markera MAC-register som anropsöverskrivna"
+msgstr "Markera MAC-register som anropsöverskrivna."
#: config/sh/sh.opt:315
-#, fuzzy
-#| msgid "Make structs a multiple of 4 bytes (warning: ABI altered)"
msgid "Make structs a multiple of 4 bytes (warning: ABI altered)."
-msgstr "Gör poster en multipel av 4 byte (varning: ABI:et ändras)"
+msgstr "Gör poster en multipel av 4 byte (varning: ABI:et ändras)."
#: config/sh/sh.opt:319
-#, fuzzy
-#| msgid "Emit function-calls using global offset table when generating PIC"
msgid "Emit function-calls using global offset table when generating PIC."
-msgstr "Mata ut funktionsanrop som använder en global avståndstabell när PIC genereras"
+msgstr "Mata ut funktionsanrop som använder en global avståndstabell när PIC genereras."
#: config/sh/sh.opt:323
msgid "Assume pt* instructions won't trap"
msgstr "Anta att pt*-instruktioner inte utlöser fällor"
#: config/sh/sh.opt:327
-#, fuzzy
-#| msgid "Shorten address references during linking"
msgid "Shorten address references during linking."
-msgstr "Förkorta adressreferenser vid länkning"
+msgstr "Förkorta adressreferenser vid länkning."
#: config/sh/sh.opt:335
-#, fuzzy
-#| msgid "Deprecated. Use -matomic= instead to select the atomic model"
msgid "Deprecated. Use -matomic= instead to select the atomic model."
-msgstr "Undanbedes. Använd -matomic= istället för att välja den atomära modellen"
+msgstr "Undanbedes. Använd -matomic= istället för att välja den atomära modellen."
#: config/sh/sh.opt:339
-#, fuzzy
-#| msgid "Specify the model for atomic operations"
msgid "Specify the model for atomic operations."
-msgstr "Ange modellen för atomiska operationer"
+msgstr "Ange modellen för atomiska operationer."
#: config/sh/sh.opt:343
-#, fuzzy
-#| msgid "Use tas.b instruction for __atomic_test_and_set"
msgid "Use tas.b instruction for __atomic_test_and_set."
-msgstr "Använd instruktionen tas.b till __atomic_test_and_set"
+msgstr "Använd instruktionen tas.b till __atomic_test_and_set."
#: config/sh/sh.opt:347
-#, fuzzy
-#| msgid "Deprecated. Use -Os instead"
msgid "Deprecated. Use -Os instead."
-msgstr "Undanbedes. Använd -Os istället"
+msgstr "Undanbedes. Använd -Os istället."
#: config/sh/sh.opt:351
-#, fuzzy
-#| msgid "Cost to assume for a multiply insn"
msgid "Cost to assume for a multiply insn."
-msgstr "Kostnad att anta för en multiplikationsinstruktion"
+msgstr "Kostnad att anta för en multiplikationsinstruktion."
#: config/sh/sh.opt:355
msgid "Don't generate privileged-mode only code; implies -mno-inline-ic_invalidate if the inline code would not work in user mode."
@@ -15087,448 +12152,304 @@ msgid "Pretend a branch-around-a-move is a conditional move."
msgstr "Låtsas en gren-runt-en-förflyttning är en villkorlig förflyttning."
#: config/sh/sh.opt:365
-#, fuzzy
-#| msgid "Enable the use of the fsca instruction"
msgid "Enable the use of the fsca instruction."
-msgstr "Aktivera användningen av instruktionen fsca"
+msgstr "Aktivera användningen av instruktionen fsca."
#: config/sh/sh.opt:369
-#, fuzzy
-#| msgid "Enable the use of the fsrra instruction"
msgid "Enable the use of the fsrra instruction."
-msgstr "Aktivera användningen av instruktionen fsrra"
+msgstr "Aktivera användningen av instruktionen fsrra."
#: config/sh/sh.opt:373
-#, fuzzy
-#| msgid "Use LRA instead of reload (transitional)"
msgid "Use LRA instead of reload (transitional)."
-msgstr "Använd LRA istället för reload (tillfällig)"
+msgstr "Använd LRA istället för reload (tillfällig)."
#: config/fr30/fr30.opt:23
-#, fuzzy
-#| msgid "Assume small address space"
msgid "Assume small address space."
-msgstr "Anta liten adressrymd"
+msgstr "Anta liten adressrymd."
#: config/mep/mep.opt:23
-#, fuzzy
-#| msgid "Enable absolute difference instructions"
msgid "Enable absolute difference instructions."
-msgstr "Använd instruktioner för absoluta skillnad"
+msgstr "Använd instruktioner för absoluta skillnad."
#: config/mep/mep.opt:27
-#, fuzzy
-#| msgid "Enable all optional instructions"
msgid "Enable all optional instructions."
-msgstr "Använd alla valbara instruktioner"
+msgstr "Använd alla valbara instruktioner."
#: config/mep/mep.opt:31
-#, fuzzy
-#| msgid "Enable average instructions"
msgid "Enable average instructions."
-msgstr "Använd genomsnittsinstruktioner"
+msgstr "Använd genomsnittsinstruktioner."
#: config/mep/mep.opt:35
-#, fuzzy
-#| msgid "Variables this size and smaller go in the based section. (default 0)"
msgid "Variables this size and smaller go in the based section. (default 0)."
-msgstr "Variabler av denna storlek och mindre placeras i based-sektionen. (standard 0)"
+msgstr "Variabler av denna storlek och mindre placeras i based-sektionen. (standard 0)."
#: config/mep/mep.opt:39
-#, fuzzy
-#| msgid "Enable bit manipulation instructions"
msgid "Enable bit manipulation instructions."
-msgstr "Använd bithanteringsinstruktioner"
+msgstr "Använd bithanteringsinstruktioner."
#: config/mep/mep.opt:43
-#, fuzzy
-#| msgid "Section to put all const variables in (tiny, near, far) (no default)"
msgid "Section to put all const variables in (tiny, near, far) (no default)."
-msgstr "Sektion att lägga alla const-variabler i (tiny, near, far) (ingen standard)"
+msgstr "Sektion att lägga alla const-variabler i (tiny, near, far) (ingen standard)."
#: config/mep/mep.opt:47
-#, fuzzy
-#| msgid "Enable clip instructions"
msgid "Enable clip instructions."
-msgstr "Använd clip-instruktioner"
+msgstr "Använd clip-instruktioner."
#: config/mep/mep.opt:51
-#, fuzzy
-#| msgid "Configuration name"
msgid "Configuration name."
-msgstr "Konfigurationsnamn"
+msgstr "Konfigurationsnamn."
#: config/mep/mep.opt:55
-#, fuzzy
-#| msgid "Enable MeP Coprocessor"
msgid "Enable MeP Coprocessor."
-msgstr "Använd MeP-hjälpprocessor"
+msgstr "Använd MeP-hjälpprocessor."
#: config/mep/mep.opt:59
-#, fuzzy
-#| msgid "Enable MeP Coprocessor with 32-bit registers"
msgid "Enable MeP Coprocessor with 32-bit registers."
-msgstr "Använd MeP-koprocessor med 32-bitars register"
+msgstr "Använd MeP-koprocessor med 32-bitars register."
#: config/mep/mep.opt:63
-#, fuzzy
-#| msgid "Enable MeP Coprocessor with 64-bit registers"
msgid "Enable MeP Coprocessor with 64-bit registers."
-msgstr "Använd MeP-koprocessor med 64-bitars register"
+msgstr "Använd MeP-koprocessor med 64-bitars register."
#: config/mep/mep.opt:67
-#, fuzzy
-#| msgid "Enable IVC2 scheduling"
msgid "Enable IVC2 scheduling."
-msgstr "Använd IVC2-schemaläggning"
+msgstr "Använd IVC2-schemaläggning."
#: config/mep/mep.opt:71
-#, fuzzy
-#| msgid "Const variables default to the near section"
msgid "Const variables default to the near section."
-msgstr "Const-variabler till near-sektionen som standard"
+msgstr "Const-variabler till near-sektionen som standard."
#: config/mep/mep.opt:78
-#, fuzzy
-#| msgid "Enable 32-bit divide instructions"
msgid "Enable 32-bit divide instructions."
-msgstr "Använd 32-bitars divisionsinstruktioner"
+msgstr "Använd 32-bitars divisionsinstruktioner."
#: config/mep/mep.opt:93
-#, fuzzy
-#| msgid "__io vars are volatile by default"
msgid "__io vars are volatile by default."
-msgstr "__io-variabler är volatila som standard"
+msgstr "__io-variabler är volatila som standard."
#: config/mep/mep.opt:97
-#, fuzzy
-#| msgid "All variables default to the far section"
msgid "All variables default to the far section."
-msgstr "Alla variabler läggs som standard i far-sektionen"
+msgstr "Alla variabler läggs som standard i far-sektionen."
#: config/mep/mep.opt:101
-#, fuzzy
-#| msgid "Enable leading zero instructions"
msgid "Enable leading zero instructions."
-msgstr "Använd instruktioner för inledande nollor"
+msgstr "Använd instruktioner för inledande nollor."
#: config/mep/mep.opt:108
-#, fuzzy
-#| msgid "All variables default to the near section"
msgid "All variables default to the near section."
-msgstr "Alla variabler till near-sektionen som standard"
+msgstr "Alla variabler till near-sektionen som standard."
#: config/mep/mep.opt:112
-#, fuzzy
-#| msgid "Enable min/max instructions"
msgid "Enable min/max instructions."
-msgstr "Använd min/max-instruktioner"
+msgstr "Använd min/max-instruktioner."
#: config/mep/mep.opt:116
-#, fuzzy
-#| msgid "Enable 32-bit multiply instructions"
msgid "Enable 32-bit multiply instructions."
-msgstr "Använd 32-bitars multiplikationsinstruktioner"
+msgstr "Använd 32-bitars multiplikationsinstruktioner."
#: config/mep/mep.opt:120
-#, fuzzy
-#| msgid "Disable all optional instructions"
msgid "Disable all optional instructions."
-msgstr "Använd inte några valbara instruktioner"
+msgstr "Använd inte några valbara instruktioner."
#: config/mep/mep.opt:127
-#, fuzzy
-#| msgid "Allow gcc to use the repeat/erepeat instructions"
msgid "Allow gcc to use the repeat/erepeat instructions."
-msgstr "Tillåt gcc att använd repeat/erepeat-instruktionerna"
+msgstr "Tillåt gcc att använd repeat/erepeat-instruktionerna."
#: config/mep/mep.opt:131
-#, fuzzy
-#| msgid "All variables default to the tiny section"
msgid "All variables default to the tiny section."
-msgstr "Alla variabler till tiny-sektionen som standard"
+msgstr "Alla variabler till tiny-sektionen som standard."
#: config/mep/mep.opt:135
-#, fuzzy
-#| msgid "Enable saturation instructions"
msgid "Enable saturation instructions."
-msgstr "Använd mättnads-instruktioner"
+msgstr "Använd mättnads-instruktioner."
#: config/mep/mep.opt:139
-#, fuzzy
-#| msgid "Use sdram version of runtime"
msgid "Use sdram version of runtime."
-msgstr "Använd sdram-version av körtidskod"
+msgstr "Använd sdram-version av körtidskod."
#: config/mep/mep.opt:147
-#, fuzzy
-#| msgid "Use simulator runtime without vectors"
msgid "Use simulator runtime without vectors."
-msgstr "Använd simulatorkörtider utan vektorer"
+msgstr "Använd simulatorkörtider utan vektorer."
#: config/mep/mep.opt:151
-#, fuzzy
-#| msgid "All functions default to the far section"
msgid "All functions default to the far section."
-msgstr "Alla funktioner till far-sektion som standard"
+msgstr "Alla funktioner till far-sektion som standard."
#: config/mep/mep.opt:155
-#, fuzzy
-#| msgid "Variables this size and smaller go in the tiny section. (default 4)"
msgid "Variables this size and smaller go in the tiny section. (default 4)."
-msgstr "Variabler av denna storlek och mindre läggs i tiny-sektionen. (standard 4)"
+msgstr "Variabler av denna storlek och mindre läggs i tiny-sektionen. (standard 4)."
#: config/mips/mips.opt:32
-#, fuzzy
-#| msgid "-mabi=ABI\tGenerate code that conforms to the given ABI"
msgid "-mabi=ABI\tGenerate code that conforms to the given ABI."
-msgstr "-mabi=ABI\tGenerera kod som följer det angivna ABI:et"
+msgstr "-mabi=ABI\tGenerera kod som följer det angivna ABI:et."
#: config/mips/mips.opt:36
msgid "Known MIPS ABIs (for use with the -mabi= option):"
msgstr "Kända MIPS ABI:er (att användas med flaggan -mabi=):"
#: config/mips/mips.opt:55
-#, fuzzy
-#| msgid "Generate code that can be used in SVR4-style dynamic objects"
msgid "Generate code that can be used in SVR4-style dynamic objects."
-msgstr "Generera kod som kan användas i dynamiska objekt i SVR4-stil"
+msgstr "Generera kod som kan användas i dynamiska objekt i SVR4-stil."
#: config/mips/mips.opt:59
-#, fuzzy
-#| msgid "Use PMC-style 'mad' instructions"
msgid "Use PMC-style 'mad' instructions."
-msgstr "Använd â€madâ€-instruktioner i PMC-stil"
+msgstr "Använd â€madâ€-instruktioner i PMC-stil."
#: config/mips/mips.opt:63
-#, fuzzy
-#| msgid "Use integer madd/msub instructions"
msgid "Use integer madd/msub instructions."
-msgstr "Använd heltals-madd-/msub-instruktioner"
+msgstr "Använd heltals-madd-/msub-instruktioner."
#: config/mips/mips.opt:67
-#, fuzzy
-#| msgid "-march=ISA\tGenerate code for the given ISA"
msgid "-march=ISA\tGenerate code for the given ISA."
-msgstr "-march=ISA\tGenerera kod för den angivna ISA:n"
+msgstr "-march=ISA\tGenerera kod för den angivna ISA:n."
#: config/mips/mips.opt:71
-#, fuzzy
-#| msgid "-mbranch-cost=COST\tSet the cost of branches to roughly COST instructions"
msgid "-mbranch-cost=COST\tSet the cost of branches to roughly COST instructions."
-msgstr "-mbranch-cost=KOSTNAD\tAnge kostnaden för grenar till ungefär KOSTNAD instruktioner"
+msgstr "-mbranch-cost=KOSTNAD\tAnge kostnaden för grenar till ungefär KOSTNAD instruktioner."
#: config/mips/mips.opt:75
-#, fuzzy
-#| msgid "Use Branch Likely instructions, overriding the architecture default"
msgid "Use Branch Likely instructions, overriding the architecture default."
-msgstr "Använd Branch Likely-instruktioner, åsidosätt arkitekturens standarval"
+msgstr "Använd Branch Likely-instruktioner, åsidosätt arkitekturens standarval."
#: config/mips/mips.opt:79
-#, fuzzy
-#| msgid "Switch on/off MIPS16 ASE on alternating functions for compiler testing"
msgid "Switch on/off MIPS16 ASE on alternating functions for compiler testing."
-msgstr "Växla av/på MIPS16 ASE mellan alternerande funktioner för kompilatortestning"
+msgstr "Växla av/på MIPS16 ASE mellan alternerande funktioner för kompilatortestning."
#: config/mips/mips.opt:83
-#, fuzzy
-#| msgid "Trap on integer divide by zero"
msgid "Trap on integer divide by zero."
-msgstr "FÃ¥nga heltalsdivision med noll"
+msgstr "FÃ¥nga heltalsdivision med noll."
#: config/mips/mips.opt:87
-#, fuzzy
-#| msgid "-mcode-readable=SETTING\tSpecify when instructions are allowed to access code"
msgid "-mcode-readable=SETTING\tSpecify when instructions are allowed to access code."
-msgstr "-code-readable=INSTÄLLNING\tAnge när instruktioner tillåts komma åt kod"
+msgstr "-code-readable=INSTÄLLNING\tAnge när instruktioner tillåts komma åt kod."
#: config/mips/mips.opt:91
msgid "Valid arguments to -mcode-readable=:"
msgstr "Giltiga argument till -mcode-readable=:"
#: config/mips/mips.opt:104
-#, fuzzy
-#| msgid "Use branch-and-break sequences to check for integer divide by zero"
msgid "Use branch-and-break sequences to check for integer divide by zero."
-msgstr "Använd branch-and-break-sekvenser för att upptäcka heltalsdivision med noll"
+msgstr "Använd branch-and-break-sekvenser för att upptäcka heltalsdivision med noll."
#: config/mips/mips.opt:108
-#, fuzzy
-#| msgid "Use trap instructions to check for integer divide by zero"
msgid "Use trap instructions to check for integer divide by zero."
-msgstr "Fånga trap-instruktioner för att upptäcka heltalsdivision med noll"
+msgstr "Fånga trap-instruktioner för att upptäcka heltalsdivision med noll."
#: config/mips/mips.opt:112
-#, fuzzy
-#| msgid "Allow the use of MDMX instructions"
msgid "Allow the use of MDMX instructions."
-msgstr "Tillåt användningen av MDMX-instruktioner"
+msgstr "Tillåt användningen av MDMX-instruktioner."
#: config/mips/mips.opt:116
-#, fuzzy
-#| msgid "Allow hardware floating-point instructions to cover both 32-bit and 64-bit operations"
msgid "Allow hardware floating-point instructions to cover both 32-bit and 64-bit operations."
-msgstr "Tillåt flyttalsinstruktioner i hårdvara att täcka både 32-bitars och 64-bitars operationer"
+msgstr "Tillåt flyttalsinstruktioner i hårdvara att täcka både 32-bitars och 64-bitars operationer."
#: config/mips/mips.opt:120
-#, fuzzy
-#| msgid "Use MIPS-DSP instructions"
msgid "Use MIPS-DSP instructions."
-msgstr "Använd MIPS-DSP-instruktioner"
+msgstr "Använd MIPS-DSP-instruktioner."
#: config/mips/mips.opt:124
-#, fuzzy
-#| msgid "Use MIPS-DSP REV 2 instructions"
msgid "Use MIPS-DSP REV 2 instructions."
-msgstr "Använd MIPS-DSP REV 2-instruktioner"
+msgstr "Använd MIPS-DSP REV 2-instruktioner."
#: config/mips/mips.opt:146
-#, fuzzy
-#| msgid "Use Enhanced Virtual Addressing instructions"
msgid "Use Enhanced Virtual Addressing instructions."
-msgstr "Använd instruktioner för förbättrad virtuell adressering"
+msgstr "Använd instruktioner för förbättrad virtuell adressering."
#: config/mips/mips.opt:150
-#, fuzzy
-#| msgid "Use NewABI-style %reloc() assembly operators"
msgid "Use NewABI-style %reloc() assembly operators."
-msgstr "Använd assembleroperator %reloc() i NewABI-stil"
+msgstr "Använd assembleroperator %reloc() i NewABI-stil."
#: config/mips/mips.opt:154
-#, fuzzy
-#| msgid "Use -G for data that is not defined by the current object"
msgid "Use -G for data that is not defined by the current object."
-msgstr "Använd -G för data som inte är definierat av det aktuella objektet"
+msgstr "Använd -G för data som inte är definierat av det aktuella objektet."
#: config/mips/mips.opt:158
-#, fuzzy
-#| msgid "Work around certain 24K errata"
msgid "Work around certain 24K errata."
-msgstr "GÃ¥ runt vissa fel i 24K"
+msgstr "GÃ¥ runt vissa fel i 24K."
#: config/mips/mips.opt:162
-#, fuzzy
-#| msgid "Work around certain R4000 errata"
msgid "Work around certain R4000 errata."
-msgstr "GÃ¥ runt vissa fel i R4000"
+msgstr "GÃ¥ runt vissa fel i R4000."
#: config/mips/mips.opt:166
-#, fuzzy
-#| msgid "Work around certain R4400 errata"
msgid "Work around certain R4400 errata."
-msgstr "GÃ¥ runt vissa fel i R4400"
+msgstr "GÃ¥ runt vissa fel i R4400."
#: config/mips/mips.opt:170
-#, fuzzy
-#| msgid "Work around certain RM7000 errata"
msgid "Work around certain RM7000 errata."
-msgstr "GÃ¥ runt vissa fel i RM7000"
+msgstr "GÃ¥ runt vissa fel i RM7000."
#: config/mips/mips.opt:174
-#, fuzzy
-#| msgid "Work around certain R10000 errata"
msgid "Work around certain R10000 errata."
-msgstr "GÃ¥ runt vissa fel i R10000"
+msgstr "GÃ¥ runt vissa fel i R10000."
#: config/mips/mips.opt:178
-#, fuzzy
-#| msgid "Work around errata for early SB-1 revision 2 cores"
msgid "Work around errata for early SB-1 revision 2 cores."
-msgstr "Gå runt fel i tidiga SB-1 revision 2-kärnor"
+msgstr "Gå runt fel i tidiga SB-1 revision 2-kärnor."
#: config/mips/mips.opt:182
-#, fuzzy
-#| msgid "Work around certain VR4120 errata"
msgid "Work around certain VR4120 errata."
-msgstr "GÃ¥ runt vissa fel i VR4120"
+msgstr "GÃ¥ runt vissa fel i VR4120."
#: config/mips/mips.opt:186
-#, fuzzy
-#| msgid "Work around VR4130 mflo/mfhi errata"
msgid "Work around VR4130 mflo/mfhi errata."
-msgstr "GÃ¥ runt mflo/mfhi-fel i VR4130"
+msgstr "GÃ¥ runt mflo/mfhi-fel i VR4130."
#: config/mips/mips.opt:190
-#, fuzzy
-#| msgid "Work around an early 4300 hardware bug"
msgid "Work around an early 4300 hardware bug."
-msgstr "Gå runt ett hårdvarufel i tidiga 4300"
+msgstr "Gå runt ett hårdvarufel i tidiga 4300."
#: config/mips/mips.opt:194
-#, fuzzy
-#| msgid "FP exceptions are enabled"
msgid "FP exceptions are enabled."
-msgstr "FP-undantag är aktiverade"
+msgstr "FP-undantag är aktiverade."
#: config/mips/mips.opt:198
-#, fuzzy
-#| msgid "Use 32-bit floating-point registers"
msgid "Use 32-bit floating-point registers."
-msgstr "Använd 32-bitars flyttalsregister"
+msgstr "Använd 32-bitars flyttalsregister."
#: config/mips/mips.opt:202
-#, fuzzy
-#| msgid "Conform to the o32 FPXX ABI"
msgid "Conform to the o32 FPXX ABI."
-msgstr "Följ ABI:t o32 FPXX"
+msgstr "Följ ABI:t o32 FPXX."
#: config/mips/mips.opt:206
-#, fuzzy
-#| msgid "Use 64-bit floating-point registers"
msgid "Use 64-bit floating-point registers."
-msgstr "Använd 64-bitars flyttalsregister"
+msgstr "Använd 64-bitars flyttalsregister."
#: config/mips/mips.opt:210
-#, fuzzy
-#| msgid "-mflush-func=FUNC\tUse FUNC to flush the cache before calling stack trampolines"
msgid "-mflush-func=FUNC\tUse FUNC to flush the cache before calling stack trampolines."
-msgstr "-mflush-func=FUNK\tAnvänd FUNK för att tömma cachen föra anrop av stacktrampoliner"
+msgstr "-mflush-func=FUNK\tAnvänd FUNK för att tömma cachen föra anrop av stacktrampoliner."
#: config/mips/mips.opt:214
-#, fuzzy
-#| msgid "-mabs=MODE\tSelect the IEEE 754 ABS/NEG instruction execution mode"
msgid "-mabs=MODE\tSelect the IEEE 754 ABS/NEG instruction execution mode."
-msgstr "-mabs=MODE\tVälj exekveringsläget IEEE 754 för instruktionerna ABS/NEG"
+msgstr "-mabs=MODE\tVälj exekveringsläget IEEE 754 för instruktionerna ABS/NEG."
#: config/mips/mips.opt:218
-#, fuzzy
-#| msgid "-mnan=ENCODING\tSelect the IEEE 754 NaN data encoding"
msgid "-mnan=ENCODING\tSelect the IEEE 754 NaN data encoding."
-msgstr "-mnan=ENCODING\tVälj NaN-datakodningen IEEE 754"
+msgstr "-mnan=ENCODING\tVälj NaN-datakodningen IEEE 754."
#: config/mips/mips.opt:222
msgid "Known MIPS IEEE 754 settings (for use with the -mabs= and -mnan= options):"
msgstr "Kända MIPS IEEE 754-inställningar (att användas med flaggorna -mabs= och -mnan=):"
#: config/mips/mips.opt:232
-#, fuzzy
-#| msgid "Use 32-bit general registers"
msgid "Use 32-bit general registers."
-msgstr "Använd 32-bitars allmänna register"
+msgstr "Använd 32-bitars allmänna register."
#: config/mips/mips.opt:236
-#, fuzzy
-#| msgid "Use 64-bit general registers"
msgid "Use 64-bit general registers."
-msgstr "Använd 64-bitars allmänna register"
+msgstr "Använd 64-bitars allmänna register."
#: config/mips/mips.opt:240
-#, fuzzy
-#| msgid "Use GP-relative addressing to access small data"
msgid "Use GP-relative addressing to access small data."
-msgstr "Använd GP-relativ adressering för att komma åt små data"
+msgstr "Använd GP-relativ adressering för att komma åt små data."
#: config/mips/mips.opt:244
-#, fuzzy
-#| msgid "When generating -mabicalls code, allow executables to use PLTs and copy relocations"
msgid "When generating -mabicalls code, allow executables to use PLTs and copy relocations."
-msgstr "Vid generering av -mabicalls-kod, tillåt körbara att använda PLT:er och kopieringsomlokaliseringar"
+msgstr "Vid generering av -mabicalls-kod, tillåt körbara att använda PLT:er och kopieringsomlokaliseringar."
#: config/mips/mips.opt:248
-#, fuzzy
-#| msgid "Allow the use of hardware floating-point ABI and instructions"
msgid "Allow the use of hardware floating-point ABI and instructions."
-msgstr "Tillåt användningen av flyttalsinstruktioner och -ABI i hårdvara"
+msgstr "Tillåt användningen av flyttalsinstruktioner och -ABI i hårdvara."
#: config/mips/mips.opt:252
msgid "Generate code that is link-compatible with MIPS16 and microMIPS code."
@@ -15539,224 +12460,152 @@ msgid "An alias for minterlink-compressed provided for backward-compatibility."
msgstr "Ett alias för minterlink-compressed som finns för bakåtkompatibilitet."
#: config/mips/mips.opt:260
-#, fuzzy
-#| msgid "-mipsN\tGenerate code for ISA level N"
msgid "-mipsN\tGenerate code for ISA level N."
-msgstr "-mipsN\tGenerera kod för ISA nivå N"
+msgstr "-mipsN\tGenerera kod för ISA nivå N."
#: config/mips/mips.opt:264
-#, fuzzy
-#| msgid "Generate MIPS16 code"
msgid "Generate MIPS16 code."
-msgstr "Generera MIPS16-kod"
+msgstr "Generera MIPS16-kod."
#: config/mips/mips.opt:268
-#, fuzzy
-#| msgid "Use MIPS-3D instructions"
msgid "Use MIPS-3D instructions."
-msgstr "Använd MIPS-3D-instruktioner"
+msgstr "Använd MIPS-3D-instruktioner."
#: config/mips/mips.opt:272
-#, fuzzy
-#| msgid "Use ll, sc and sync instructions"
msgid "Use ll, sc and sync instructions."
-msgstr "Använd ll-, sc- och sync-instruktioner"
+msgstr "Använd ll-, sc- och sync-instruktioner."
#: config/mips/mips.opt:276
-#, fuzzy
-#| msgid "Use -G for object-local data"
msgid "Use -G for object-local data."
-msgstr "Använd -G för objektlokala data"
+msgstr "Använd -G för objektlokala data."
#: config/mips/mips.opt:280
-#, fuzzy
-#| msgid "Use indirect calls"
msgid "Use indirect calls."
-msgstr "Använd indirekta anrop"
+msgstr "Använd indirekta anrop."
#: config/mips/mips.opt:284
-#, fuzzy
-#| msgid "Use a 32-bit long type"
msgid "Use a 32-bit long type."
-msgstr "Använd en 32-bitars long-typ"
+msgstr "Använd en 32-bitars long-typ."
#: config/mips/mips.opt:288
-#, fuzzy
-#| msgid "Use a 64-bit long type"
msgid "Use a 64-bit long type."
-msgstr "Använd en 64-bitars long-typ"
+msgstr "Använd en 64-bitars long-typ."
#: config/mips/mips.opt:292
-#, fuzzy
-#| msgid "Pass the address of the ra save location to _mcount in $12"
msgid "Pass the address of the ra save location to _mcount in $12."
-msgstr "Skicka adressen på ra-lagringsplatsen till _mcount i $12"
+msgstr "Skicka adressen på ra-lagringsplatsen till _mcount i $12."
#: config/mips/mips.opt:296
-#, fuzzy
-#| msgid "Don't optimize block moves"
msgid "Don't optimize block moves."
-msgstr "Optimera inte blockförflyttningar"
+msgstr "Optimera inte blockförflyttningar."
#: config/mips/mips.opt:300
-#, fuzzy
-#| msgid "Use microMIPS instructions"
msgid "Use microMIPS instructions."
-msgstr "Använd microMIPS-instruktioner"
+msgstr "Använd microMIPS-instruktioner."
#: config/mips/mips.opt:304
-#, fuzzy
-#| msgid "Allow the use of MT instructions"
msgid "Allow the use of MT instructions."
-msgstr "Tillåt användning av MT-instruktioner"
+msgstr "Tillåt användning av MT-instruktioner."
#: config/mips/mips.opt:308
-#, fuzzy
-#| msgid "Prevent the use of all floating-point operations"
msgid "Prevent the use of all floating-point operations."
-msgstr "Förhindra användningen av alla flyttalsoperationer"
+msgstr "Förhindra användningen av alla flyttalsoperationer."
#: config/mips/mips.opt:312
-#, fuzzy
-#| msgid "Use MCU instructions"
msgid "Use MCU instructions."
-msgstr "Använd MCU-instruktioner"
+msgstr "Använd MCU-instruktioner."
#: config/mips/mips.opt:316
-#, fuzzy
-#| msgid "Do not use a cache-flushing function before calling stack trampolines"
msgid "Do not use a cache-flushing function before calling stack trampolines."
-msgstr "Använd inte en cachetömmande funktion före anrop av stacktrampoliner"
+msgstr "Använd inte en cachetömmande funktion före anrop av stacktrampoliner."
#: config/mips/mips.opt:320
-#, fuzzy
-#| msgid "Do not use MDMX instructions"
msgid "Do not use MDMX instructions."
-msgstr "Använd inte MDMX-instruktioner"
+msgstr "Använd inte MDMX-instruktioner."
#: config/mips/mips.opt:324
-#, fuzzy
-#| msgid "Generate normal-mode code"
msgid "Generate normal-mode code."
-msgstr "Generera kod för normalläge"
+msgstr "Generera kod för normalläge."
#: config/mips/mips.opt:328
-#, fuzzy
-#| msgid "Do not use MIPS-3D instructions"
msgid "Do not use MIPS-3D instructions."
-msgstr "Använd inte MIPS-3D-instruktioner"
+msgstr "Använd inte MIPS-3D-instruktioner."
#: config/mips/mips.opt:332
-#, fuzzy
-#| msgid "Use paired-single floating-point instructions"
msgid "Use paired-single floating-point instructions."
-msgstr "Använd parvisa enkla flyttalsinstruktioner"
+msgstr "Använd parvisa enkla flyttalsinstruktioner."
#: config/mips/mips.opt:336
-#, fuzzy
-#| msgid "-mr10k-cache-barrier=SETTING\tSpecify when r10k cache barriers should be inserted"
msgid "-mr10k-cache-barrier=SETTING\tSpecify when r10k cache barriers should be inserted."
-msgstr "-mr10k-cache-barrier=INSTÄLLNING\tAnge när r10k-cache-barriärer skall skjutas in"
+msgstr "-mr10k-cache-barrier=INSTÄLLNING\tAnge när r10k-cache-barriärer skall skjutas in."
#: config/mips/mips.opt:340
msgid "Valid arguments to -mr10k-cache-barrier=:"
msgstr "Giltiga argument till -mr10k-cache-barrier=:"
#: config/mips/mips.opt:353
-#, fuzzy
-#| msgid "Try to allow the linker to turn PIC calls into direct calls"
msgid "Try to allow the linker to turn PIC calls into direct calls."
-msgstr "Försök att tillåta länkaren att göra om PIC-anrop till direkta anrop"
+msgstr "Försök att tillåta länkaren att göra om PIC-anrop till direkta anrop."
#: config/mips/mips.opt:357
-#, fuzzy
-#| msgid "When generating -mabicalls code, make the code suitable for use in shared libraries"
msgid "When generating -mabicalls code, make the code suitable for use in shared libraries."
-msgstr "Vid generering av -mabicalls-kod, gör så att koden passar för användning i delade bibliotek"
+msgstr "Vid generering av -mabicalls-kod, gör så att koden passar för användning i delade bibliotek."
#: config/mips/mips.opt:361
-#, fuzzy
-#| msgid "Restrict the use of hardware floating-point instructions to 32-bit operations"
msgid "Restrict the use of hardware floating-point instructions to 32-bit operations."
-msgstr "Begränsa användningen av flyttalsinstruktioner i hårdvara till 32-bitars operationer"
+msgstr "Begränsa användningen av flyttalsinstruktioner i hårdvara till 32-bitars operationer."
#: config/mips/mips.opt:365
-#, fuzzy
-#| msgid "Use SmartMIPS instructions"
msgid "Use SmartMIPS instructions."
-msgstr "Använd SmartMIPS-instruktioner"
+msgstr "Använd SmartMIPS-instruktioner."
#: config/mips/mips.opt:369
-#, fuzzy
-#| msgid "Prevent the use of all hardware floating-point instructions"
msgid "Prevent the use of all hardware floating-point instructions."
-msgstr "Förhindra användningen av alla flyttalsinstruktioner i hårdvara"
+msgstr "Förhindra användningen av alla flyttalsinstruktioner i hårdvara."
#: config/mips/mips.opt:373
-#, fuzzy
-#| msgid "Optimize lui/addiu address loads"
msgid "Optimize lui/addiu address loads."
-msgstr "Optimera adressinläsningar lui/addiu"
+msgstr "Optimera adressladdning lui/addiu."
#: config/mips/mips.opt:377
-#, fuzzy
-#| msgid "Assume all symbols have 32-bit values"
msgid "Assume all symbols have 32-bit values."
-msgstr "Anta att alla symboler har 32-bitsvärden"
+msgstr "Anta att alla symboler har 32-bitsvärden."
#: config/mips/mips.opt:381
-#, fuzzy
-#| msgid "Use synci instruction to invalidate i-cache"
msgid "Use synci instruction to invalidate i-cache."
-msgstr "Använd synci-instruktioner för att invalidera i-cachen"
+msgstr "Använd synci-instruktioner för att invalidera i-cachen."
#: config/mips/mips.opt:389
-#, fuzzy
-#| msgid "-mtune=PROCESSOR\tOptimize the output for PROCESSOR"
msgid "-mtune=PROCESSOR\tOptimize the output for PROCESSOR."
-msgstr "-mtune=PROCESSOR\tOptimera utmatningen för PROCESSOR"
+msgstr "-mtune=PROCESSOR\tOptimera utmatningen för PROCESSOR."
#: config/mips/mips.opt:397
-#, fuzzy
-#| msgid "Use Virtualization Application Specific instructions"
msgid "Use Virtualization Application Specific instructions."
-msgstr "Använd instruktioner specifika för virtualiseringstillämpningar"
+msgstr "Använd instruktioner specifika för virtualiseringstillämpningar."
#: config/mips/mips.opt:401
-#, fuzzy
-#| msgid "Use eXtended Physical Address (XPA) instructions"
msgid "Use eXtended Physical Address (XPA) instructions."
-msgstr "Använd instruktioner för utökad fysisk adress (XPA)"
+msgstr "Använd instruktioner för utökad fysisk adress (XPA)."
#: config/mips/mips.opt:405
-#, fuzzy
-#| msgid "Perform VR4130-specific alignment optimizations"
msgid "Perform VR4130-specific alignment optimizations."
-msgstr "Utför VR4130-specifik justeringsoptimering"
+msgstr "Utför VR4130-specifik justeringsoptimering."
#: config/mips/mips.opt:409
-#, fuzzy
-#| msgid "Lift restrictions on GOT size"
msgid "Lift restrictions on GOT size."
-msgstr "Lyft restriktioner på GOT-storlek"
+msgstr "Lyft restriktioner på GOT-storlek."
#: config/mips/mips.opt:413
-#, fuzzy
-#| msgid "Enable use of odd-numbered single-precision registers"
msgid "Enable use of odd-numbered single-precision registers."
-msgstr "Aktivera användningen av udda enkelprecisionsregister"
+msgstr "Aktivera användningen av udda enkelprecisionsregister."
#: config/mips/mips.opt:417
-#, fuzzy
-#| msgid "Optimize for space rather than speed"
msgid "Optimize frame header."
-msgstr "Optimera för storlek istället för hastighet"
+msgstr "Optimera ramhuvud."
#: config/mips/mips.opt:424
-#, fuzzy
-#| msgid "Enable dead store elimination"
msgid "Enable load/store bonding."
-msgstr "Aktivera eliminering av död lagring"
+msgstr "Aktivera bindning av laddning/lagring."
#: config/mips/mips.opt:428
msgid "Specify the compact branch usage policy."
@@ -15787,140 +12636,96 @@ msgid "Compile with 64 bit longs and pointers."
msgstr "Kompilera för 64-bitars långa och pekare."
#: config/tilegx/tilegx.opt:53
-#, fuzzy
-#| msgid "Use given TILE-Gx code model"
msgid "Use given TILE-Gx code model."
-msgstr "Använd angiven TILE-Gx kodmodell"
+msgstr "Använd angiven TILE-Gx kodmodell."
#: config/arc/arc.opt:26
-#, fuzzy
-#| msgid "Compile code for big endian mode"
msgid "Compile code for big endian mode."
-msgstr "Kompilera kod för rak byteordning"
+msgstr "Kompilera kod för rak byteordning."
#: config/arc/arc.opt:30
-#, fuzzy
-#| msgid "Compile code for little endian mode. This is the default"
msgid "Compile code for little endian mode. This is the default."
-msgstr "Kompilera kod för omvänd byteordning. Detta är standard."
+msgstr "Kompilera kod för omvänd byteordning. Detta är standard.."
#: config/arc/arc.opt:34
-#, fuzzy
-#| msgid "Disable ARCompact specific pass to generate conditional execution instructions"
msgid "Disable ARCompact specific pass to generate conditional execution instructions."
-msgstr "Avaktivera det ARCompact-specifika passet för att generera villkorliga exekveringsinstruktioner"
+msgstr "Avaktivera det ARCompact-specifika passet för att generera villkorliga exekveringsinstruktioner."
#: config/arc/arc.opt:38
-#, fuzzy
-#| msgid "Generate ARCompact 32-bit code for ARC600 processor"
msgid "Generate ARCompact 32-bit code for ARC600 processor."
-msgstr "Generera ARCompact 32-bitars kod för processorn ARC600"
+msgstr "Generera ARCompact 32-bitars kod för processorn ARC600."
#: config/arc/arc.opt:42
-#, fuzzy
-#| msgid "Same as -mA6"
msgid "Same as -mA6."
-msgstr "Samma som -mA6"
+msgstr "Samma som -mA6."
#: config/arc/arc.opt:46
-#, fuzzy
-#| msgid "Generate ARCompact 32-bit code for ARC601 processor"
msgid "Generate ARCompact 32-bit code for ARC601 processor."
-msgstr "Generera ARCompact 32-bitars kod för processorn ARC601"
+msgstr "Generera ARCompact 32-bitars kod för processorn ARC601."
#: config/arc/arc.opt:50
-#, fuzzy
-#| msgid "Generate ARCompact 32-bit code for ARC700 processor"
msgid "Generate ARCompact 32-bit code for ARC700 processor."
-msgstr "Generera ARCompact 32-bitars kod för processorn ARC700"
+msgstr "Generera ARCompact 32-bitars kod för processorn ARC700."
#: config/arc/arc.opt:54
-#, fuzzy
-#| msgid "Same as -mA7"
msgid "Same as -mA7."
-msgstr "Samma som -mA7"
+msgstr "Samma som -mA7."
#: config/arc/arc.opt:58
msgid "-mmpy-option={0,1,2,3,4,5,6,7,8,9} Compile ARCv2 code with a multiplier design option. Option 2 is default on."
msgstr "-mmpy-option={0,1,2,3,4,5,6,7,8,9} Kompilera ARCv2-kod med en multiplicerardesignflagga. Flaggan 2 är normalt på."
#: config/arc/arc.opt:62
-#, fuzzy
-#| msgid "Enable MUL instructions"
msgid "Enable DIV-REM instructions for ARCv2."
-msgstr "Använd MUL-instruktioner"
+msgstr "Använd DIV-REM-instruktioner för ARCv2."
#: config/arc/arc.opt:66
-#, fuzzy
-#| msgid "Enable barrel shift instructions"
msgid "Enable code density instructions for ARCv2."
-msgstr "Använd barrel-shift-instruktioner"
+msgstr "Använd koddensitetsinstruktioner för ARCv2."
#: config/arc/arc.opt:70
-#, fuzzy
-#| msgid "Tweak register allocation to help 16-bit instruction generation"
msgid "Tweak register allocation to help 16-bit instruction generation."
-msgstr "Justera registerallokeringen för att hjälpa generering av 16-bitars instruktioner"
+msgstr "Justera registerallokeringen för att hjälpa generering av 16-bitars instruktioner."
#: config/arc/arc.opt:80
-#, fuzzy
-#| msgid "Use ordinarily cached memory accesses for volatile references"
msgid "Use ordinarily cached memory accesses for volatile references."
-msgstr "Använd normalt cachade minnesaccesser för volatila referenser"
+msgstr "Använd normalt cachade minnesaccesser för volatila referenser."
#: config/arc/arc.opt:84
-#, fuzzy
-#| msgid "Enable cache bypass for volatile references"
msgid "Enable cache bypass for volatile references."
-msgstr "Aktivera kringgående av cachen för volatila referenser"
+msgstr "Aktivera kringgående av cachen för volatila referenser."
#: config/arc/arc.opt:88
-#, fuzzy
-#| msgid "Generate instructions supported by barrel shifter"
msgid "Generate instructions supported by barrel shifter."
-msgstr "Generera instruktioner som stöds av tunnskiftaren"
+msgstr "Generera instruktioner som stöds av tunnskiftaren."
#: config/arc/arc.opt:92
-#, fuzzy
-#| msgid "Generate norm instruction"
msgid "Generate norm instruction."
-msgstr "Generera norm-instruktion"
+msgstr "Generera norm-instruktion."
#: config/arc/arc.opt:96
-#, fuzzy
-#| msgid "Generate swap instruction"
msgid "Generate swap instruction."
-msgstr "Generera swap-instruktion"
+msgstr "Generera swap-instruktion."
#: config/arc/arc.opt:100
-#, fuzzy
-#| msgid "Generate mul64 and mulu64 instructions"
msgid "Generate mul64 and mulu64 instructions."
-msgstr "Generera mul64- och mulu64-instruktioner"
+msgstr "Generera mul64- och mulu64-instruktioner."
#: config/arc/arc.opt:104
-#, fuzzy
-#| msgid "Do not generate mpy instructions for ARC700"
msgid "Do not generate mpy instructions for ARC700."
-msgstr "Generera inte mpy-instruktioner för ARC700"
+msgstr "Generera inte mpy-instruktioner för ARC700."
#: config/arc/arc.opt:108
-#, fuzzy
-#| msgid "Generate Extended arithmetic instructions. Currently only divaw, adds, subs and sat16 are supported"
msgid "Generate Extended arithmetic instructions. Currently only divaw, adds, subs and sat16 are supported."
-msgstr "Generera utökade aritmetiska instruktioner. För närvarande stödjs endast divaw, adds, subs och sat16"
+msgstr "Generera utökade aritmetiska instruktioner. För närvarande stödjs endast divaw, adds, subs och sat16."
#: config/arc/arc.opt:112
-#, fuzzy
-#| msgid "Dummy flag. This is the default unless FPX switches are provided explicitly"
msgid "Dummy flag. This is the default unless FPX switches are provided explicitly."
-msgstr "Attrappflagga. Detta är standard om inte FPX-flaggor uttryckligen ges"
+msgstr "Attrappflagga. Detta är standard om inte FPX-flaggor uttryckligen ges."
#: config/arc/arc.opt:116
-#, fuzzy
-#| msgid "Generate call insns as register indirect calls"
msgid "Generate call insns as register indirect calls."
-msgstr "Generera anropsinstruktioner som registerindirekta anrop"
+msgstr "Generera anropsinstruktioner som registerindirekta anrop."
#: config/arc/arc.opt:120
msgid "Do no generate BRcc instructions in arc_reorg."
@@ -15931,10 +12736,8 @@ msgid "Generate sdata references. This is the default, unless you compile for P
msgstr "Generera sdata-referenser. Detta är standard, om man inte kompilerar för PIC."
#: config/arc/arc.opt:128
-#, fuzzy
-#| msgid "Do not generate millicode thunks (needed only with -Os)"
msgid "Do not generate millicode thunks (needed only with -Os)."
-msgstr "Generera inte millikodsnutt (behövs endast med -Os)"
+msgstr "Generera inte millikodsnutt (behövs endast med -Os)."
#: config/arc/arc.opt:132 config/arc/arc.opt:136
msgid "FPX: Generate Single Precision FPX (compact) instructions."
@@ -15965,16 +12768,12 @@ msgid "Enable generation of ARC SIMD instructions via target-specific builtins."
msgstr "Aktivera generering av ARC SIMD-instruktioner via målspecifika inbyggda."
#: config/arc/arc.opt:168
-#, fuzzy
-#| msgid "-mcpu=CPU\tCompile code for ARC variant CPU"
msgid "-mcpu=CPU\tCompile code for ARC variant CPU."
-msgstr "-mcpu=CPU\tKompilera kod för ARC-variant av CPU"
+msgstr "-mcpu=CPU\tKompilera kod för ARC-variant av CPU."
#: config/arc/arc.opt:205
-#, fuzzy
-#| msgid "size optimization level: 0:none 1:opportunistic 2: regalloc 3:drop align, -Os"
msgid "size optimization level: 0:none 1:opportunistic 2: regalloc 3:drop align, -Os."
-msgstr "nivå på storleksoptimering: 0:ingen 1:opportunistisk 2:reg-allok 3:släpp justering, -Os"
+msgstr "nivå på storleksoptimering: 0:ingen 1:opportunistisk 2:reg-allok 3:släpp justering, -Os."
#: config/arc/arc.opt:213
msgid "Cost to assume for a multiply instruction, with 4 being equal to a normal insn."
@@ -15997,26 +12796,20 @@ msgid "Tune for ARC700 R4.2 Cpu with XMAC block."
msgstr "Trimma för cpu:n ARC700 R4.2 med standard XMAC-block."
#: config/arc/arc.opt:241
-#, fuzzy
-#| msgid "Enable the use of indexed loads"
msgid "Enable the use of indexed loads."
-msgstr "Aktivera användning av indexerade laddningar"
+msgstr "Aktivera användning av indexerade laddningar."
#: config/arc/arc.opt:245
msgid "Enable the use of pre/post modify with register displacement."
msgstr "Aktivera användningen av pre-/postmodifieringar med registerförflyttning."
#: config/arc/arc.opt:249
-#, fuzzy
-#| msgid "Generate 32x16 multiply and mac instructions"
msgid "Generate 32x16 multiply and mac instructions."
-msgstr "Generera 32×16 multiplikations- och mac-instruktioner"
+msgstr "Generera 32×16 multiplikations- och mac-instruktioner."
#: config/arc/arc.opt:255
-#, fuzzy
-#| msgid "Set probability threshold for unaligning branches"
msgid "Set probability threshold for unaligning branches."
-msgstr "Sätt sannolikhetströskeln för att inte justera grenar"
+msgstr "Sätt sannolikhetströskeln för att inte justera grenar."
#: config/arc/arc.opt:259
msgid "Don't use less than 25 bit addressing range for calls."
@@ -16039,26 +12832,20 @@ msgid "Enable Rcw constraint handling - ccfsm condexec mostly depends on this."
msgstr "Aktivera hantering av Rcw--begränsningar — ccfsm-kodexekvering beror i huvudsak på detta."
#: config/arc/arc.opt:279
-#, fuzzy
-#| msgid "Enable pre-reload use of cbranchsi pattern"
msgid "Enable pre-reload use of cbranchsi pattern."
-msgstr "Aktivera förladdningsanvändning av cbranchsi-mönster"
+msgstr "Aktivera förladdningsanvändning av cbranchsi-mönster."
#: config/arc/arc.opt:283
-#, fuzzy
-#| msgid "Enable bbit peephole2"
msgid "Enable bbit peephole2."
-msgstr "Aktivera bbit peephole2"
+msgstr "Aktivera bbit peephole2."
#: config/arc/arc.opt:287
msgid "Use pc-relative switch case tables - this enables case table shortening."
msgstr "Använd pc-relativa switch-falltabeller — detta aktiverar förkortning av falltabeller."
#: config/arc/arc.opt:291
-#, fuzzy
-#| msgid "Enable compact casesi pattern"
msgid "Enable compact casesi pattern."
-msgstr "Aktivera kompakt casesi-mönster"
+msgstr "Aktivera kompakt casesi-mönster."
#: config/arc/arc.opt:295
msgid "Enable 'q' instruction alternatives."
@@ -16069,52 +12856,36 @@ msgid "Expand adddi3 and subdi3 at rtl generation time into add.f / adc etc."
msgstr "Expandera addi3 och subdi3 vid rtl-genereringstillfället till add.f /adc etc."
#: config/arc/arc.opt:306
-#, fuzzy
-#| msgid "Enable variable polynomial CRC extension"
msgid "Enable variable polynomial CRC extension."
-msgstr "Aktivera variabel polynomiell CRC-utvidgning"
+msgstr "Aktivera variabel polynomiell CRC-utvidgning."
#: config/arc/arc.opt:310
-#, fuzzy
-#| msgid "Enable DSP 3.1 Pack A extensions"
msgid "Enable DSP 3.1 Pack A extensions."
-msgstr "Aktivera utvidgningarna DSP 3.1 Pack A"
+msgstr "Aktivera utvidgningarna DSP 3.1 Pack A."
#: config/arc/arc.opt:314
-#, fuzzy
-#| msgid "Enable dual viterbi butterfly extension"
msgid "Enable dual viterbi butterfly extension."
-msgstr "Aktivera dubbel viterbi fjärilsutvidgning"
+msgstr "Aktivera dubbel viterbi fjärilsutvidgning."
#: config/arc/arc.opt:324
-#, fuzzy
-#| msgid "Enable Dual and Single Operand Instructions for Telephony"
msgid "Enable Dual and Single Operand Instructions for Telephony."
-msgstr "Använd dubbel- och enkeloperandinstruktioner för telefoni"
+msgstr "Använd dubbel- och enkeloperandinstruktioner för telefoni."
#: config/arc/arc.opt:328
-#, fuzzy
-#| msgid "Enable XY Memory extension (DSP version 3)"
msgid "Enable XY Memory extension (DSP version 3)."
-msgstr "Aktivera XY-minnesutökningar (DSP version 3)"
+msgstr "Aktivera XY-minnesutökningar (DSP version 3)."
#: config/arc/arc.opt:333
-#, fuzzy
-#| msgid "Enable Locked Load/Store Conditional extension"
msgid "Enable Locked Load/Store Conditional extension."
-msgstr "Aktivera utökningen låst ladda/lagra villkorlig"
+msgstr "Aktivera utökningen låst ladda/lagra villkorlig."
#: config/arc/arc.opt:337
-#, fuzzy
-#| msgid "Enable swap byte ordering extension instruction"
msgid "Enable swap byte ordering extension instruction."
-msgstr "Aktivera utökningsinstruktionen för byte-ordningsväxling"
+msgstr "Aktivera utökningsinstruktionen för byte-ordningsväxling."
#: config/arc/arc.opt:341
-#, fuzzy
-#| msgid "Enable 64-bit Time-Stamp Counter extension instruction"
msgid "Enable 64-bit Time-Stamp Counter extension instruction."
-msgstr "Aktivera utökningsingsinstruktioner för 64-bitars tidsstämpelräknare"
+msgstr "Aktivera utökningsingsinstruktioner för 64-bitars tidsstämpelräknare."
#: config/arc/arc.opt:345
msgid "Pass -EB option through to linker."
@@ -16133,214 +12904,145 @@ msgid "Pass -marclinux_prof option through to linker."
msgstr "Skicka vidare flaggan -marclinux_prof till länkaren."
#: config/arc/arc.opt:365
-#, fuzzy
-#| msgid "Enable lra"
msgid "Enable lra."
-msgstr "Aktivera lra"
+msgstr "Aktivera lra."
#: config/arc/arc.opt:369
-#, fuzzy
-#| msgid "Don't indicate any priority with TARGET_REGISTER_PRIORITY"
msgid "Don't indicate any priority with TARGET_REGISTER_PRIORITY."
-msgstr "Indikera inte någon prioritet med TARGET_REGISTER_PRIORITY"
+msgstr "Indikera inte någon prioritet med TARGET_REGISTER_PRIORITY."
#: config/arc/arc.opt:373
-#, fuzzy
-#| msgid "Indicate priority for r0..r3 / r12..r15 with TARGET_REGISTER_PRIORITY"
msgid "Indicate priority for r0..r3 / r12..r15 with TARGET_REGISTER_PRIORITY."
-msgstr "Indikera prioritet för r0..r3 / r12..r15 med TARGET_REGISTER_PRIORITY"
+msgstr "Indikera prioritet för r0..r3 / r12..r15 med TARGET_REGISTER_PRIORITY."
#: config/arc/arc.opt:377
-#, fuzzy
-#| msgid "Reduce priority for r0..r3 / r12..r15 with TARGET_REGISTER_PRIORITY"
msgid "Reduce priority for r0..r3 / r12..r15 with TARGET_REGISTER_PRIORITY."
-msgstr "Reducera prioritet för r0..r3 / r12..r15 med TARGET_REGISTER_PRIORITY"
+msgstr "Reducera prioritet för r0..r3 / r12..r15 med TARGET_REGISTER_PRIORITY."
#: config/arc/arc.opt:381
-#, fuzzy
-#| msgid "instrument with mcount calls as in the ucb code"
msgid "instrument with mcount calls as in the ucb code."
-msgstr "instrumentera med mcount-anrop som i ucb-koden"
+msgstr "instrumentera med mcount-anrop som i ucb-koden."
#: config/arc/arc.opt:411
-#, fuzzy
-#| msgid "Enable clip instructions"
msgid "Enable atomic instructions."
-msgstr "Använd clip-instruktioner"
+msgstr "Använd atomära instruktioner."
#: config/arc/arc.opt:415
-#, fuzzy
-#| msgid "Enable leading zero instructions"
msgid "Enable double load/store instructions for ARC HS."
-msgstr "Använd instruktioner för inledande nollor"
+msgstr "Använd dubbla ladda/lagra-instruktioner för ARC HS."
#: java/lang.opt:122
-#, fuzzy
-#| msgid "Warn if deprecated empty statements are found"
msgid "Warn if deprecated empty statements are found."
-msgstr "Varna om tomma satser som bör undvikas finns"
+msgstr "Varna om tomma satser som bör undvikas finns."
#: java/lang.opt:126
-#, fuzzy
-#| msgid "Warn if .class files are out of date"
msgid "Warn if .class files are out of date."
-msgstr "Varna om .class-filer är inaktuella"
+msgstr "Varna om .class-filer är inaktuella."
#: java/lang.opt:130
-#, fuzzy
-#| msgid "Warn if modifiers are specified when not necessary"
msgid "Warn if modifiers are specified when not necessary."
-msgstr "Varna om modifierare anges när de inte behövs"
+msgstr "Varna om modifierare anges när de inte behövs."
#: java/lang.opt:150
-#, fuzzy
-#| msgid "--CLASSPATH\tDeprecated; use --classpath instead"
msgid "--CLASSPATH\tDeprecated; use --classpath instead."
-msgstr "--CLASSPATH\tAvrådes, använd -classpath istället"
+msgstr "--CLASSPATH\tAvrådes, använd -classpath istället."
#: java/lang.opt:157
-#, fuzzy
-#| msgid "Permit the use of the assert keyword"
msgid "Permit the use of the assert keyword."
-msgstr "Tillåt användning av nyckelordet assert"
+msgstr "Tillåt användning av nyckelordet assert."
#: java/lang.opt:179
-#, fuzzy
-#| msgid "--bootclasspath=<path>\tReplace system path"
msgid "--bootclasspath=<path>\tReplace system path."
-msgstr "--bootclasspath=<sökväg>\tErsätt systemsökvägen"
+msgstr "--bootclasspath=<sökväg>\tErsätt systemsökvägen."
#: java/lang.opt:183
-#, fuzzy
-#| msgid "Generate checks for references to NULL"
msgid "Generate checks for references to NULL."
-msgstr "Generera kontroller av referenser till NULL"
+msgstr "Generera kontroller av referenser till NULL."
#: java/lang.opt:187
-#, fuzzy
-#| msgid "--classpath=<path>\tSet class path"
msgid "--classpath=<path>\tSet class path."
-msgstr "--classpath=<sökväg>\tAnge klassökväg"
+msgstr "--classpath=<sökväg>\tAnge klassökväg."
#: java/lang.opt:194
-#, fuzzy
-#| msgid "Output a class file"
msgid "Output a class file."
-msgstr "Skriv en class-fil"
+msgstr "Skriv en class-fil."
#: java/lang.opt:198
-#, fuzzy
-#| msgid "Alias for -femit-class-file"
msgid "Alias for -femit-class-file."
-msgstr "Alias för -femit-class-file"
+msgstr "Alias för -femit-class-file."
#: java/lang.opt:202
-#, fuzzy
-#| msgid "--encoding=<encoding>\tChoose input encoding (defaults from your locale)"
msgid "--encoding=<encoding>\tChoose input encoding (defaults from your locale)."
-msgstr "--encoding=<kodning>\tVälj inmatningskodning (din lokal används som standard)"
+msgstr "--encoding=<kodning>\tVälj inmatningskodning (din lokal används som standard)."
#: java/lang.opt:206
-#, fuzzy
-#| msgid "--extdirs=<path>\tSet the extension directory path"
msgid "--extdirs=<path>\tSet the extension directory path."
-msgstr "--extdirs=<sökväg>\tAnge katalogsökväg för utökningar"
+msgstr "--extdirs=<sökväg>\tAnge katalogsökväg för utökningar."
#: java/lang.opt:216
-#, fuzzy
-#| msgid "Input file is a file with a list of filenames to compile"
msgid "Input file is a file with a list of filenames to compile."
-msgstr "Indatafil är en fil med en lista på filnamn att kompilera"
+msgstr "Indatafil är en fil med en lista på filnamn att kompilera."
#: java/lang.opt:223
-#, fuzzy
-#| msgid "Always check for non gcj generated classes archives"
msgid "Always check for non gcj generated classes archives."
-msgstr "Leta alltid efter klassarkiv ej genererade av gcj"
+msgstr "Leta alltid efter klassarkiv ej genererade av gcj."
#: java/lang.opt:227
-#, fuzzy
-#| msgid "Assume the runtime uses a hash table to map an object to its synchronization structure"
msgid "Assume the runtime uses a hash table to map an object to its synchronization structure."
-msgstr "Anta att en hash-tabell används vid körning för att avbilda ett objekt till dess synkroniseringsstruktur"
+msgstr "Anta att en hash-tabell används vid körning för att avbilda ett objekt till dess synkroniseringsstruktur."
#: java/lang.opt:231
-#, fuzzy
-#| msgid "Generate instances of Class at runtime"
msgid "Generate instances of Class at runtime."
-msgstr "Generera instanser av Class vid körtid"
+msgstr "Generera instanser av Class vid körtid."
#: java/lang.opt:235
-#, fuzzy
-#| msgid "Use offset tables for virtual method calls"
msgid "Use offset tables for virtual method calls."
-msgstr "Använd avståndstabeller för anrop av virtuella metoder"
+msgstr "Använd avståndstabeller för anrop av virtuella metoder."
#: java/lang.opt:242
-#, fuzzy
-#| msgid "Assume native functions are implemented using JNI"
msgid "Assume native functions are implemented using JNI."
-msgstr "Anta att inbyggda funktioner är implementerade med JNI"
+msgstr "Anta att inbyggda funktioner är implementerade med JNI."
#: java/lang.opt:246
-#, fuzzy
-#| msgid "Enable optimization of static class initialization code"
msgid "Enable optimization of static class initialization code."
-msgstr "Aktivera optimeringar av initieringskod för statiska klasser"
+msgstr "Aktivera optimeringar av initieringskod för statiska klasser."
#: java/lang.opt:253
-#, fuzzy
-#| msgid "Reduce the amount of reflection meta-data generated"
msgid "Reduce the amount of reflection meta-data generated."
-msgstr "Reducera mängden reflektionsmetadata som genereras"
+msgstr "Reducera mängden reflektionsmetadata som genereras."
#: java/lang.opt:257
-#, fuzzy
-#| msgid "Enable assignability checks for stores into object arrays"
msgid "Enable assignability checks for stores into object arrays."
-msgstr "Aktivera kontroll av tilldelningsbarhet för lagring i objektvektorer"
+msgstr "Aktivera kontroll av tilldelningsbarhet för lagring i objektvektorer."
#: java/lang.opt:261
-#, fuzzy
-#| msgid "Generate code for the Boehm GC"
msgid "Generate code for the Boehm GC."
-msgstr "Generera kod för Boehm GC"
+msgstr "Generera kod för Boehm GC."
#: java/lang.opt:265
-#, fuzzy
-#| msgid "Call a library routine to do integer divisions"
msgid "Call a library routine to do integer divisions."
-msgstr "Anropa en biblioteksrutin för att göra heltalsdivisioner"
+msgstr "Anropa en biblioteksrutin för att göra heltalsdivisioner."
#: java/lang.opt:269
-#, fuzzy
-#| msgid "Generate code for built-in atomic operations"
msgid "Generate code for built-in atomic operations."
-msgstr "Generera kod för inbyggda atomiska operationer"
+msgstr "Generera kod för inbyggda atomiska operationer."
#: java/lang.opt:273
-#, fuzzy
-#| msgid "Generated should be loaded by bootstrap loader"
msgid "Generated should be loaded by bootstrap loader."
-msgstr "Genererat skall läsas in av uppstartsladdaren"
+msgstr "Genererat skall läsas in av uppstartsladdaren."
#: java/lang.opt:277
-#, fuzzy
-#| msgid "Set the source language version"
msgid "Set the source language version."
-msgstr "Ange källspråksversion"
+msgstr "Ange källspråksversion."
#: java/lang.opt:281
-#, fuzzy
-#| msgid "Set the target VM version"
msgid "Set the target VM version."
-msgstr "Ange typen av mål-VM-version"
+msgstr "Ange typen av mål-VM-version."
#: lto/lang.opt:28
-#, fuzzy, c-format
-#| msgid "unknown pointer size model %qs"
+#, c-format
msgid "unknown linker output %qs"
-msgstr "okänd pekarstorlekmodell %qs"
+msgstr "okänd länkarutmatning %qs"
#: lto/lang.opt:47
msgid "Set linker output type (used internally during LTO optimization)"
@@ -16363,176 +13065,120 @@ msgid "Whole program analysis (WPA) mode with number of parallel jobs specified.
msgstr "Läget helprogramanalys (WPA) med antal parallella jobb angivna."
#: lto/lang.opt:68
-#, fuzzy
-#| msgid "The resolution file"
msgid "The resolution file."
-msgstr "Upplösningsfilen"
+msgstr "Upplösningsfilen."
#: common.opt:235
-#, fuzzy
-#| msgid "Enable user-defined instructions"
msgid "Enable coverage-guided fuzzing code instrumentation."
-msgstr "Använd användardefinierade instruktioner"
+msgstr "Använd täckningsguidad utsuddande kodinstrumentering."
#: common.opt:302
-#, fuzzy
-#| msgid "Display this information"
msgid "Display this information."
-msgstr "Visa den här informationen"
+msgstr "Visa den här informationen."
#: common.opt:306
-#, fuzzy
-#| msgid "--help=<class>\tDisplay descriptions of a specific class of options. <class> is one or more of optimizers, target, warnings, undocumented, params"
msgid "--help=<class>\tDisplay descriptions of a specific class of options. <class> is one or more of optimizers, target, warnings, undocumented, params."
-msgstr "--help=<klass>\tVisa beskrivningar av en speciell klass av flaggor. <klass> är en eller flera av optimizers, target, warnings, undocumented, params"
+msgstr "--help=<klass>\tVisa beskrivningar av en speciell klass av flaggor. <klass> är en eller flera av optimizers, target, warnings, undocumented, params."
#: common.opt:424
-#, fuzzy
-#| msgid "Alias for --help=target"
msgid "Alias for --help=target."
-msgstr "Alias för --help=target"
+msgstr "Alias för --help=target."
#: common.opt:449
-#, fuzzy
-#| msgid "--param <param>=<value>\tSet parameter <param> to value. See below for a complete list of parameters"
msgid "--param <param>=<value>\tSet parameter <param> to value. See below for a complete list of parameters."
-msgstr "--param <param>=<värde>\tSätt parameter <param> till värde. Se nedan för en komplett lista på parametrar"
+msgstr "--param <param>=<värde>\tSätt parameter <param> till värde. Se nedan för en komplett lista på parametrar."
#: common.opt:477
-#, fuzzy
-#| msgid "-O<number>\tSet optimization level to <number>"
msgid "-O<number>\tSet optimization level to <number>."
-msgstr "-O<nummer>\tSätt optimeringsnivå till <nummer>"
+msgstr "-O<nummer>\tSätt optimeringsnivå till <nummer>."
#: common.opt:481
-#, fuzzy
-#| msgid "Optimize for space rather than speed"
msgid "Optimize for space rather than speed."
-msgstr "Optimera för storlek istället för hastighet"
+msgstr "Optimera för storlek istället för hastighet."
#: common.opt:485
-#, fuzzy
-#| msgid "Optimize for speed disregarding exact standards compliance"
msgid "Optimize for speed disregarding exact standards compliance."
-msgstr "Optimera för hastighet och bortse från exakt efterlevnad av standarder"
+msgstr "Optimera för hastighet och bortse från exakt efterlevnad av standarder."
#: common.opt:489
-#, fuzzy
-#| msgid "Optimize for debugging experience rather than speed or size"
msgid "Optimize for debugging experience rather than speed or size."
-msgstr "Optimera för bekväm felsökning snarare än storlek eller hastighet"
+msgstr "Optimera för bekväm felsökning snarare än storlek eller hastighet."
#: common.opt:529
-#, fuzzy
-#| msgid "This switch is deprecated; use -Wextra instead"
msgid "This switch is deprecated; use -Wextra instead."
-msgstr "Denna flagga bör undvikas, använd -Wextra istället"
+msgstr "Denna flagga bör undvikas, använd -Wextra istället."
#: common.opt:542
-#, fuzzy
-#| msgid "Warn about returning structures, unions or arrays"
msgid "Warn about returning structures, unions or arrays."
-msgstr "Varna för retur av poster, unioner eller vektorer"
+msgstr "Varna för retur av poster, unioner eller vektorer."
#: common.opt:546
-#, fuzzy
-#| msgid "Warn if a loop with constant number of iterations triggers undefined behavior"
msgid "Warn if a loop with constant number of iterations triggers undefined behavior."
-msgstr "Varna om en slinga med konstant antal iterationer orsakar odefinierat beteende"
+msgstr "Varna om en slinga med konstant antal iterationer orsakar odefinierat beteende."
#: common.opt:550 common.opt:554
-#, fuzzy
-#| msgid "Warn if an array is accessed out of bounds"
msgid "Warn if an array is accessed out of bounds."
-msgstr "Varna om en vektor används utanför gränserna"
+msgstr "Varna om en vektor används utanför gränserna."
#: common.opt:558
-#, fuzzy
-#| msgid "Warn about inappropriate attribute usage"
msgid "Warn about inappropriate attribute usage."
-msgstr "Varna för felaktig användning av attribut"
+msgstr "Varna för felaktig användning av attribut."
#: common.opt:562
-#, fuzzy
-#| msgid "Warn about pointer casts which increase alignment"
msgid "Warn about pointer casts which increase alignment."
-msgstr "Varna för typkonvertering av pekare som ökar justeringen"
+msgstr "Varna för typkonvertering av pekare som ökar justeringen."
#: common.opt:566
-#, fuzzy
-#| msgid "Warn when a #warning directive is encountered"
msgid "Warn when a #warning directive is encountered."
-msgstr "Varna när ett #warning-direktiv påträffas"
+msgstr "Varna när ett #warning-direktiv påträffas."
#: common.opt:570
-#, fuzzy
-#| msgid "Warn about uses of __attribute__((deprecated)) declarations"
msgid "Warn about uses of __attribute__((deprecated)) declarations."
-msgstr "Varna för användning av __attribute__((deprecated))-deklarationer"
+msgstr "Varna för användning av __attribute__((deprecated))-deklarationer."
#: common.opt:574
-#, fuzzy
-#| msgid "Warn when an optimization pass is disabled"
msgid "Warn when an optimization pass is disabled."
-msgstr "Varna när ett optimerarpass är avaktiverat"
+msgstr "Varna när ett optimerarpass är avaktiverat."
#: common.opt:578
-#, fuzzy
-#| msgid "Treat all warnings as errors"
msgid "Treat all warnings as errors."
-msgstr "Behandla alla varningar som fel."
+msgstr "Behandla alla varningar som fel.."
#: common.opt:582
-#, fuzzy
-#| msgid "Treat specified warning as error"
msgid "Treat specified warning as error."
-msgstr "Behandla angivna varningar som fel"
+msgstr "Behandla angivna varningar som fel."
#: common.opt:586
-#, fuzzy
-#| msgid "Print extra (possibly unwanted) warnings"
msgid "Print extra (possibly unwanted) warnings."
-msgstr "Skriv extra (möjligen oönskade) varningar"
+msgstr "Skriv extra (möjligen oönskade) varningar."
#: common.opt:590
-#, fuzzy
-#| msgid "Exit on the first error occurred"
msgid "Exit on the first error occurred."
-msgstr "Avsluta vid första felet som uppstår"
+msgstr "Avsluta vid första felet som uppstår."
#: common.opt:594
-#, fuzzy
-#| msgid "-Wframe-larger-than=<number>\tWarn if a function's stack frame requires more than <number> bytes"
msgid "-Wframe-larger-than=<number>\tWarn if a function's stack frame requires more than <number> bytes."
-msgstr "-Wframe-larger-than=<antal>\tVarna om en funktions stackram kräver mer en <antal> byte"
+msgstr "-Wframe-larger-than=<antal>\tVarna om en funktions stackram kräver mer en <antal> byte."
#: common.opt:598
-#, fuzzy
-#| msgid "Warn when attempting to free a non-heap object"
msgid "Warn when attempting to free a non-heap object."
-msgstr "Varna vid försök att frigöra ett icke-heap-objekt"
+msgstr "Varna vid försök att frigöra ett icke-heap-objekt."
#: common.opt:602
-#, fuzzy
-#| msgid "Warn when an inlined function cannot be inlined"
msgid "Warn when a function cannot be expanded to HSAIL."
-msgstr "Varna när en inline:ad funktion inte kan inline:as"
+msgstr "Varna när en funktion inte kan expanderas till HSAIL."
#: common.opt:606
-#, fuzzy
-#| msgid "Warn when an inlined function cannot be inlined"
msgid "Warn when an inlined function cannot be inlined."
-msgstr "Varna när en inline:ad funktion inte kan inline:as"
+msgstr "Varna när en inline:ad funktion inte kan inline:as."
#: common.opt:610
msgid "Warn when an atomic memory model parameter is known to be outside the valid range."
msgstr "Varna när en atomisk minnesmodellparameter med säkerhet är utanför det giltiga intervallet."
#: common.opt:617
-#, fuzzy
-#| msgid "-Wlarger-than=<number>\tWarn if an object is larger than <number> bytes"
msgid "-Wlarger-than=<number>\tWarn if an object is larger than <number> bytes."
-msgstr "-Wlarger-than=<antal>\tVarna för ett objekt är större än <antal> byte"
+msgstr "-Wlarger-than=<antal>\tVarna för ett objekt är större än <antal> byte."
#: common.opt:621
msgid "Warn if dereferencing a NULL pointer may lead to erroneous or undefined behavior."
@@ -16543,258 +13189,176 @@ msgid "Warn if the loop cannot be optimized due to nontrivial assumptions."
msgstr "Varna för slingan inte kan optimeras på grund av icketriviala antaganden."
#: common.opt:632
-#, fuzzy
-#| msgid "Warn about some C++ One Definition Rule violations during link time optimization"
msgid "Warn about some C++ One Definition Rule violations during link time optimization."
-msgstr "Varna för några brott mot C++ endefinitionsregel under optimeringar vid länktillfället"
+msgstr "Varna för några brott mot C++ endefinitionsregel under optimeringar vid länktillfället."
#: common.opt:636
-#, fuzzy
-#| msgid "Warn about overflow in arithmetic expressions"
msgid "Warn about overflow in arithmetic expressions."
-msgstr "Varna för spill i aritmetiska uttryck"
+msgstr "Varna för spill i aritmetiska uttryck."
#: common.opt:640
msgid "During link time optimization warn about mismatched types of global declarations."
msgstr "Varna under länktidsoptimeringar för typer som inte stämmer överens från globala deklarationer."
#: common.opt:644
-#, fuzzy
-#| msgid "Warn when the packed attribute has no effect on struct layout"
msgid "Warn when the packed attribute has no effect on struct layout."
-msgstr "Varna när attributet packed inte har någon effekt på postformatet"
+msgstr "Varna när attributet packed inte har någon effekt på postformatet."
#: common.opt:648
-#, fuzzy
-#| msgid "Warn when padding is required to align structure members"
msgid "Warn when padding is required to align structure members."
-msgstr "Varna när utfyllnad krävs för att justera postmedlemmar"
+msgstr "Varna när utfyllnad krävs för att justera postmedlemmar."
#: common.opt:652
-#, fuzzy
-#| msgid "Issue warnings needed for strict compliance to the standard"
msgid "Issue warnings needed for strict compliance to the standard."
-msgstr "Ge varningar som krävs för att strikt följa standarden"
+msgstr "Ge varningar som krävs för att strikt följa standarden."
#: common.opt:656
msgid "Warn about returning a pointer/reference to a local or temporary variable."
msgstr "Varna för retur av en pekare/referens till en lokal eller temporär variabel."
#: common.opt:660
-#, fuzzy
-#| msgid "Warn when one local variable shadows another"
msgid "Warn when one local variable shadows another."
-msgstr "Varna när en lokal variabel skuggar en annan"
+msgstr "Varna när en lokal variabel skuggar en annan."
#: common.opt:664
-#, fuzzy
-#| msgid "Warn when not issuing stack smashing protection for some reason"
msgid "Warn when not issuing stack smashing protection for some reason."
-msgstr "Varna när stacköverskrivningsskydd inte läggs ut av någon anledning"
+msgstr "Varna när stacköverskrivningsskydd inte läggs ut av någon anledning."
#: common.opt:668
-#, fuzzy
-#| msgid "Warn if stack usage might be larger than specified amount"
msgid "Warn if stack usage might be larger than specified amount."
-msgstr "Varna om stackanvändningen kan vara större än den angivna mängden"
+msgstr "Varna om stackanvändningen kan vara större än den angivna mängden."
#: common.opt:672 common.opt:676
-#, fuzzy
-#| msgid "Warn about code which might break strict aliasing rules"
msgid "Warn about code which might break strict aliasing rules."
-msgstr "Varna för kod som kan bryta strikta aliasregler"
+msgstr "Varna för kod som kan bryta strikta aliasregler."
#: common.opt:680 common.opt:684
-#, fuzzy
-#| msgid "Warn about optimizations that assume that signed overflow is undefined"
msgid "Warn about optimizations that assume that signed overflow is undefined."
-msgstr "Varna för optimeringar som antar spill med tecken är odefinierat"
+msgstr "Varna för optimeringar som antar spill med tecken är odefinierat."
#: common.opt:688
-#, fuzzy
-#| msgid "Warn about functions which might be candidates for __attribute__((const))"
msgid "Warn about functions which might be candidates for __attribute__((const))."
-msgstr "Varna för funktioner som är möjliga kandidater för __attribute__((const))"
+msgstr "Varna för funktioner som är möjliga kandidater för __attribute__((const))."
#: common.opt:692
-#, fuzzy
-#| msgid "Warn about functions which might be candidates for __attribute__((pure))"
msgid "Warn about functions which might be candidates for __attribute__((pure))."
-msgstr "Varna för funktioner som är möjliga kandidater för __attribute__((pure))"
+msgstr "Varna för funktioner som är möjliga kandidater för __attribute__((pure))."
#: common.opt:696
-#, fuzzy
-#| msgid "Warn about functions which might be candidates for __attribute__((noreturn))"
msgid "Warn about functions which might be candidates for __attribute__((noreturn))."
-msgstr "Varna för funktioner som är möjliga kandidater för __attribute__((noreturn))"
+msgstr "Varna för funktioner som är möjliga kandidater för __attribute__((noreturn))."
#: common.opt:700
-#, fuzzy
-#| msgid "Warn about C++ polymorphic types where adding final keyword would improve code quality"
msgid "Warn about C++ polymorphic types where adding final keyword would improve code quality."
-msgstr "Varna för polymorfa C++-typer där det skulle förbättra kodkvaliteten att lägga till nyckelordet final"
+msgstr "Varna för polymorfa C++-typer där det skulle förbättra kodkvaliteten att lägga till nyckelordet final."
#: common.opt:704
-#, fuzzy
-#| msgid "Warn about C++ virtual methods where adding final keyword would improve code quality"
msgid "Warn about C++ virtual methods where adding final keyword would improve code quality."
-msgstr "Varna för virtuella C++-metoder där det skulle förbättra kodkvaliteten att lägga till nyckelordet final"
+msgstr "Varna för virtuella C++-metoder där det skulle förbättra kodkvaliteten att lägga till nyckelordet final."
#: common.opt:708
-#, fuzzy
-#| msgid "Do not suppress warnings from system headers"
msgid "Do not suppress warnings from system headers."
-msgstr "Undertryck inte varningar från systemhuvudfiler"
+msgstr "Undertryck inte varningar från systemhuvudfiler."
#: common.opt:712
-#, fuzzy
-#| msgid "Warn whenever a trampoline is generated"
msgid "Warn whenever a trampoline is generated."
-msgstr "Varna närhelst en trampolin genereras"
+msgstr "Varna närhelst en trampolin genereras."
#: common.opt:716
-#, fuzzy
-#| msgid "Warn if a comparison is always true or always false due to the limited range of the data type"
msgid "Warn if a comparison is always true or always false due to the limited range of the data type."
-msgstr "Varna om en jämförelse alltid är sann eller falsk på grund av begränsat intervall för datatypen"
+msgstr "Varna om en jämförelse alltid är sann eller falsk på grund av begränsat intervall för datatypen."
#: common.opt:720
-#, fuzzy
-#| msgid "Warn about uninitialized automatic variables"
msgid "Warn about uninitialized automatic variables."
-msgstr "Varna för oinitierade automatiska variabler"
+msgstr "Varna för oinitierade automatiska variabler."
#: common.opt:724
-#, fuzzy
-#| msgid "Warn about maybe uninitialized automatic variables"
msgid "Warn about maybe uninitialized automatic variables."
-msgstr "Varna för eventuellt oinitierade automatiska variabler"
+msgstr "Varna för eventuellt oinitierade automatiska variabler."
#: common.opt:732
-#, fuzzy
-#| msgid "Enable all -Wunused- warnings"
msgid "Enable all -Wunused- warnings."
-msgstr "Aktivera alla -Wunused-varningar"
+msgstr "Aktivera alla -Wunused-varningar."
#: common.opt:736
-#, fuzzy
-#| msgid "Warn when a function parameter is only set, otherwise unused"
msgid "Warn when a function parameter is only set, otherwise unused."
-msgstr "Varna när en funktionsparameter bara sätts, och i övrigt är oanvänd"
+msgstr "Varna när en funktionsparameter bara sätts, och i övrigt är oanvänd."
#: common.opt:740
-#, fuzzy
-#| msgid "Warn when a variable is only set, otherwise unused"
msgid "Warn when a variable is only set, otherwise unused."
-msgstr "Varna när en variabel bara sätts, och i övrigt är oanvänd"
+msgstr "Varna när en variabel bara sätts, och i övrigt är oanvänd."
#: common.opt:744
-#, fuzzy
-#| msgid "Warn when a function is unused"
msgid "Warn when a function is unused."
-msgstr "Varna när en funktion är oanvänd"
+msgstr "Varna när en funktion är oanvänd."
#: common.opt:748
-#, fuzzy
-#| msgid "Warn when a label is unused"
msgid "Warn when a label is unused."
-msgstr "Varna när en etikett är oanvänd"
+msgstr "Varna när en etikett är oanvänd."
#: common.opt:752
-#, fuzzy
-#| msgid "Warn when a function parameter is unused"
msgid "Warn when a function parameter is unused."
-msgstr "Varna när en funktionsparameter är oanvänd"
+msgstr "Varna när en funktionsparameter är oanvänd."
#: common.opt:756
-#, fuzzy
-#| msgid "Warn when an expression value is unused"
msgid "Warn when an expression value is unused."
-msgstr "Varna när ett uttrycksvärde är oanvänt"
+msgstr "Varna när ett uttrycksvärde är oanvänt."
#: common.opt:760
-#, fuzzy
-#| msgid "Warn when a variable is unused"
msgid "Warn when a variable is unused."
-msgstr "Varna när en variabel är oanvänd"
+msgstr "Varna när en variabel är oanvänd."
#: common.opt:764
-#, fuzzy
-#| msgid "Warn in case profiles in -fprofile-use do not match"
msgid "Warn in case profiles in -fprofile-use do not match."
-msgstr "Varna om profiler i -fprofile-use inte stämmer"
+msgstr "Varna om profiler i -fprofile-use inte stämmer."
#: common.opt:768
-#, fuzzy
-#| msgid "Warn when a vector operation is compiled outside the SIMD"
msgid "Warn when a vector operation is compiled outside the SIMD."
-msgstr "Varna när en vektoroperation kompileras utanför SIMD:n"
+msgstr "Varna när en vektoroperation kompileras utanför SIMD:n."
#: common.opt:784
-#, fuzzy
-#| msgid "-aux-info <file>\tEmit declaration information into <file>"
msgid "-aux-info <file>\tEmit declaration information into <file>."
-msgstr "-aux-info <fil>\tGenerera deklarationsinfo till <fil>"
+msgstr "-aux-info <fil>\tGenerera deklarationsinfo till <fil>."
#: common.opt:803
-#, fuzzy
-#| msgid "-d<letters>\tEnable dumps from specific passes of the compiler"
msgid "-d<letters>\tEnable dumps from specific passes of the compiler."
-msgstr "-d<bokstäver>\tSlå på dumpning från specifika pass i kompilatorn"
+msgstr "-d<bokstäver>\tSlå på dumpning från specifika pass i kompilatorn."
#: common.opt:807
-#, fuzzy
-#| msgid "-dumpbase <file>\tSet the file basename to be used for dumps"
msgid "-dumpbase <file>\tSet the file basename to be used for dumps."
-msgstr "-dumpbase <fil>\tAnge basfilnamn att användas för dumpar"
+msgstr "-dumpbase <fil>\tAnge basfilnamn att användas för dumpar."
#: common.opt:811
-#, fuzzy
-#| msgid "-dumpdir <dir>\tSet the directory name to be used for dumps"
msgid "-dumpdir <dir>\tSet the directory name to be used for dumps."
-msgstr "-dumpdir <kat>\tAnge katalognamn att användas för dumpar"
+msgstr "-dumpdir <kat>\tAnge katalognamn att användas för dumpar."
#: common.opt:880
-#, fuzzy
-#| msgid "The version of the C++ ABI in use"
msgid "The version of the C++ ABI in use."
-msgstr "Versionen av C++-ABI:et som används"
+msgstr "Versionen av C++-ABI:et som används."
#: common.opt:884
-#, fuzzy
-#| msgid "Aggressively optimize loops using language constraints"
msgid "Aggressively optimize loops using language constraints."
-msgstr "Optimera aggressivt slingor med användning av språkbegränsningar"
+msgstr "Optimera aggressivt slingor med användning av språkbegränsningar."
#: common.opt:888
-#, fuzzy
-#| msgid "Align the start of functions"
msgid "Align the start of functions."
-msgstr "Justera starten av funktioner"
+msgstr "Justera starten av funktioner."
#: common.opt:895
-#, fuzzy
-#| msgid "Align labels which are only reached by jumping"
msgid "Align labels which are only reached by jumping."
-msgstr "Justera etiketter som bara nås via hopp"
+msgstr "Justera etiketter som bara nås via hopp."
#: common.opt:902
-#, fuzzy
-#| msgid "Align all labels"
msgid "Align all labels."
-msgstr "Justera alla etiketter"
+msgstr "Justera alla etiketter."
#: common.opt:909
-#, fuzzy
-#| msgid "Align the start of loops"
msgid "Align the start of loops."
-msgstr "Justera starten av slingor"
+msgstr "Justera starten av slingor."
#: common.opt:932
-#, fuzzy
-#| msgid "Select what to sanitize"
msgid "Select what to sanitize."
-msgstr "Välj vad som skall saneras"
+msgstr "Välj vad som skall saneras."
#: common.opt:936
msgid "-fasan-shadow-offset=<number>\tUse custom shadow memory offset."
@@ -16805,34 +13369,24 @@ msgid "-fsanitize-sections=<sec1,sec2,...>\tSanitize global variables"
msgstr "-fsanitize-sections=<sek1,sek2,…>\tSanera globala variabler"
#: common.opt:945
-#, fuzzy
-#| msgid "After diagnosing undefined behavior attempt to continue execution"
msgid "After diagnosing undefined behavior attempt to continue execution."
-msgstr "Efter att diagnosticera odefinierat beteende, försök fortsätta körningen"
+msgstr "Efter att diagnosticera odefinierat beteende, försök fortsätta körningen."
#: common.opt:949
-#, fuzzy
-#| msgid "This switch is deprecated; use -fsanitize-recover= instead"
msgid "This switch is deprecated; use -fsanitize-recover= instead."
-msgstr "Denna flagga bör undvikas, använd -fsanitize-recover= istället"
+msgstr "Denna flagga bör undvikas, använd -fsanitize-recover= istället."
#: common.opt:953
-#, fuzzy
-#| msgid "Use trap instead of a library function for undefined behavior sanitization"
msgid "Use trap instead of a library function for undefined behavior sanitization."
-msgstr "Använd trap istället för en biblioteksfunktion för sanering av odefinierat beteende"
+msgstr "Använd trap istället för en biblioteksfunktion för sanering av odefinierat beteende."
#: common.opt:957
-#, fuzzy
-#| msgid "Generate unwind tables that are exact at each instruction boundary"
msgid "Generate unwind tables that are exact at each instruction boundary."
-msgstr "Generera tabeller för upprullning som är exakta vid varje instruktionsgräns"
+msgstr "Generera tabeller för upprullning som är exakta vid varje instruktionsgräns."
#: common.opt:961
-#, fuzzy
-#| msgid "Generate auto-inc/dec instructions"
msgid "Generate auto-inc/dec instructions."
-msgstr "Generera auto-inc/dec-instruktioner"
+msgstr "Generera auto-inc/dec-instruktioner."
#: common.opt:965
msgid "Use sample profile information for call graph node weights. The default"
@@ -16843,266 +13397,184 @@ msgid "Use sample profile information for call graph node weights. The profile"
msgstr "Använd samplingsprofilinformation till anropsgrafers nodvikter. Profilen"
#: common.opt:979
-#, fuzzy
-#| msgid "Generate code to check bounds before indexing arrays"
msgid "Generate code to check bounds before indexing arrays."
-msgstr "Generera kod för att kontrollera gränser före indexering i vektorer"
+msgstr "Generera kod för att kontrollera gränser före indexering i vektorer."
#: common.opt:983
-#, fuzzy
-#| msgid "Replace add, compare, branch with branch on count register"
msgid "Replace add, compare, branch with branch on count register."
-msgstr "Ersätt addition, jämförelse, grena med gren vid räknarregister"
+msgstr "Ersätt addition, jämförelse, grena med gren vid räknarregister."
#: common.opt:987
-#, fuzzy
-#| msgid "Use profiling information for branch probabilities"
msgid "Use profiling information for branch probabilities."
-msgstr "Använd profileringsinformation för grensannolikheter"
+msgstr "Använd profileringsinformation för grensannolikheter."
#: common.opt:991
-#, fuzzy
-#| msgid "Perform branch target load optimization before prologue / epilogue threading"
msgid "Perform branch target load optimization before prologue / epilogue threading."
-msgstr "Utför optimering av grenmålsinläsning före prolog-/epilogtrådning"
+msgstr "Utför optimering av grenmålsladdning före prolog-/epilogtrådning."
#: common.opt:995
-#, fuzzy
-#| msgid "Perform branch target load optimization after prologue / epilogue threading"
msgid "Perform branch target load optimization after prologue / epilogue threading."
-msgstr "Utför optimering av grenmålsinläsning efter prolog-/epilogtrådning"
+msgstr "Utför optimering av grenmålsladdning efter prolog-/epilogtrådning."
#: common.opt:999
-#, fuzzy
-#| msgid "Restrict target load migration not to re-use registers in any basic block"
msgid "Restrict target load migration not to re-use registers in any basic block."
-msgstr "Begränsa migration av målinläsning till att inte återanvända register i något grundblock"
+msgstr "Begränsa migration av målladdning till att inte återanvända register i något grundblock."
#: common.opt:1003
-#, fuzzy
-#| msgid "-fcall-saved-<register>\tMark <register> as being preserved across functions"
msgid "-fcall-saved-<register>\tMark <register> as being preserved across functions."
-msgstr "-fcall-saved-<register>\tMarkera att <register> bevaras mellan funktioner"
+msgstr "-fcall-saved-<register>\tMarkera att <register> bevaras mellan funktioner."
#: common.opt:1007
-#, fuzzy
-#| msgid "-fcall-used-<register>\tMark <register> as being corrupted by function calls"
msgid "-fcall-used-<register>\tMark <register> as being corrupted by function calls."
-msgstr "-fcall-used-<register>\tMarkera att <register> förstörs av funktionsanrop"
+msgstr "-fcall-used-<register>\tMarkera att <register> förstörs av funktionsanrop."
#: common.opt:1014
-#, fuzzy
-#| msgid "Save registers around function calls"
msgid "Save registers around function calls."
-msgstr "Spara register runt funktionsanrop"
+msgstr "Spara register runt funktionsanrop."
#: common.opt:1018
-#, fuzzy
-#| msgid "This switch is deprecated; use -Wextra instead"
msgid "This switch is deprecated; do not use."
-msgstr "Denna flagga bör undvikas, använd -Wextra istället"
+msgstr "Denna flagga bör undvikas, använd den inte."
#: common.opt:1022
-#, fuzzy
-#| msgid "Check the return value of new in C++"
msgid "Check the return value of new in C++."
-msgstr "Kontrollera returvärdet av new i C++"
+msgstr "Kontrollera returvärdet av new i C++."
#: common.opt:1026
-#, fuzzy
-#| msgid "internal consistency failure"
msgid "Perform internal consistency checkings."
-msgstr "internt konsistensfel"
+msgstr "Utför interna konsistenskontroller."
#: common.opt:1030
msgid "Looks for opportunities to reduce stack adjustments and stack references."
msgstr "Söker efter möjligheter att minska stackjusteringar och stackreferenser."
#: common.opt:1034
-#, fuzzy
-#| msgid "Do not put uninitialized globals in the common section"
msgid "Do not put uninitialized globals in the common section."
-msgstr "Lägg inte oinitierade globala i den gemensamma sektionen"
+msgstr "Lägg inte oinitierade globala i den gemensamma sektionen."
#: common.opt:1042
-#, fuzzy
-#| msgid "-fcompare-debug[=<opts>]\tCompile with and without e.g. -gtoggle, and compare the final-insns dump"
msgid "-fcompare-debug[=<opts>]\tCompile with and without e.g. -gtoggle, and compare the final-insns dump."
-msgstr "-fcompare-debug[=<flgr>]\tKompilera med och utan t.ex. -gtoggle, och jämför slutinstruktionsdumpen"
+msgstr "-fcompare-debug[=<flgr>]\tKompilera med och utan t.ex. -gtoggle, och jämför slutinstruktionsdumpen."
#: common.opt:1046
-#, fuzzy
-#| msgid "Run only the second compilation of -fcompare-debug"
msgid "Run only the second compilation of -fcompare-debug."
-msgstr "Kör endast den andra kompileringen av -fcompare-debug"
+msgstr "Kör endast den andra kompileringen av -fcompare-debug."
#: common.opt:1050
-#, fuzzy
-#| msgid "Perform comparison elimination after register allocation has finished"
msgid "Perform comparison elimination after register allocation has finished."
-msgstr "Utför eliminering av jämförelser efter registertilldelningen har avslutats"
+msgstr "Utför eliminering av jämförelser efter registertilldelningen har avslutats."
#: common.opt:1054
-#, fuzzy
-#| msgid "Do not perform optimizations increasing noticeably stack usage"
msgid "Do not perform optimizations increasing noticeably stack usage."
-msgstr "Utför inte optimeringar som märkbart ökar stackanvändningen"
+msgstr "Utför inte optimeringar som märkbart ökar stackanvändningen."
#: common.opt:1058
-#, fuzzy
-#| msgid "Perform a register copy-propagation optimization pass"
msgid "Perform a register copy-propagation optimization pass."
-msgstr "Utför ett optimeringspass för kopieringspropagering av register"
+msgstr "Utför ett optimeringspass för kopieringspropagering av register."
#: common.opt:1062
-#, fuzzy
-#| msgid "Perform cross-jumping optimization"
msgid "Perform cross-jumping optimization."
-msgstr "Utför optimering för korshopp"
+msgstr "Utför optimering för korshopp."
#: common.opt:1066
-#, fuzzy
-#| msgid "When running CSE, follow jumps to their targets"
msgid "When running CSE, follow jumps to their targets."
-msgstr "När CSE körs, följ hopp till deras mål"
+msgstr "När CSE körs, följ hopp till deras mål."
#: common.opt:1074
-#, fuzzy
-#| msgid "Omit range reduction step when performing complex division"
msgid "Omit range reduction step when performing complex division."
-msgstr "Uteslut intervallreduktionssteget när komplex division görs"
+msgstr "Uteslut intervallreduktionssteget när komplex division görs."
#: common.opt:1078
-#, fuzzy
-#| msgid "Complex multiplication and division follow Fortran rules"
msgid "Complex multiplication and division follow Fortran rules."
-msgstr "Komplex multiplikation och division följer Fortranregler"
+msgstr "Komplex multiplikation och division följer Fortranregler."
#: common.opt:1082
-#, fuzzy
-#| msgid "Place data items into their own section"
msgid "Place data items into their own section."
-msgstr "Placera dataobjekt i sin egen sektion"
+msgstr "Placera dataobjekt i sin egen sektion."
#: common.opt:1086
msgid "List all available debugging counters with their limits and counts."
msgstr "Lista alla tillgängliga felsökningsräknare med deras gränser och värden."
#: common.opt:1090
-#, fuzzy
-#| msgid "-fdbg-cnt=<counter>:<limit>[,<counter>:<limit>,...]\tSet the debug counter limit. "
msgid "-fdbg-cnt=<counter>:<limit>[,<counter>:<limit>,...]\tSet the debug counter limit."
-msgstr "-fdbg-cnt=<räknare>:<gräns>[,<räknare>:<gräns>,...]\tSätt gränsen för felsökningsräknare. "
+msgstr "-fdbg-cnt=<räknare>:<gräns>[,<räknare>:<gräns>,...]\tSätt gränsen för felsökningsräknare."
#: common.opt:1094
-#, fuzzy
-#| msgid "Map one directory name to another in debug information"
msgid "Map one directory name to another in debug information."
-msgstr "Översätt ett katalognamn till ett annat i felsökningsinformation"
+msgstr "Översätt ett katalognamn till ett annat i felsökningsinformation."
#: common.opt:1098
msgid "Output .debug_types section when using DWARF v4 debuginfo."
msgstr "Mata ut en .debug_types-sektion när DWARF v4 felsökningsinformation används."
#: common.opt:1104
-#, fuzzy
-#| msgid "Defer popping functions args from stack until later"
msgid "Defer popping functions args from stack until later."
-msgstr "Senarelägg borttagandet av funktionsargument från stacken"
+msgstr "Senarelägg borttagandet av funktionsargument från stacken."
#: common.opt:1108
-#, fuzzy
-#| msgid "Attempt to fill delay slots of branch instructions"
msgid "Attempt to fill delay slots of branch instructions."
-msgstr "Försök fylla fördröjningsfack av greninstruktioner"
+msgstr "Försök fylla fördröjningsfack av greninstruktioner."
#: common.opt:1112
-#, fuzzy
-#| msgid "Delete dead instructions that may throw exceptions"
msgid "Delete dead instructions that may throw exceptions."
-msgstr "Ta bort döda instruktioner som kan kasta undantag"
+msgstr "Ta bort döda instruktioner som kan kasta undantag."
#: common.opt:1116
-#, fuzzy
-#| msgid "Delete useless null pointer checks"
msgid "Delete useless null pointer checks."
-msgstr "Ta bort onödiga nollpekarkontroller"
+msgstr "Ta bort onödiga nollpekarkontroller."
#: common.opt:1120
-#, fuzzy
-#| msgid "Stream extra data to support more aggressive devirtualization in LTO local transformation mode"
msgid "Stream extra data to support more aggressive devirtualization in LTO local transformation mode."
-msgstr "Strömma extra data för att stödja mer aggressiv avvirtualisering i lokaltransformationsläge i LTO"
+msgstr "Strömma extra data för att stödja mer aggressiv avvirtualisering i lokaltransformationsläge i LTO."
#: common.opt:1124
-#, fuzzy
-#| msgid "Perform speculative devirtualization"
msgid "Perform speculative devirtualization."
-msgstr "Utför spekulativ avvirtualisering"
+msgstr "Utför spekulativ avvirtualisering."
#: common.opt:1128
msgid "Try to convert virtual calls to direct ones."
msgstr "Försök att konvertera virtuella anrop till direkta."
#: common.opt:1132
-#, fuzzy
-#| msgid "-fdiagnostics-show-location=[once|every-line]\tHow often to emit source location at the beginning of line-wrapped diagnostics"
msgid "-fdiagnostics-show-location=[once|every-line]\tHow often to emit source location at the beginning of line-wrapped diagnostics."
-msgstr "-fdiagnostics-show-location=[once|every-line]\tAnger hur ofta källkodspositioner skall skrivas ut i början av utskrift vid radbrytning"
+msgstr "-fdiagnostics-show-location=[once|every-line]\tAnger hur ofta källkodspositioner skall skrivas ut i början av utskrift vid radbrytning."
#: common.opt:1149
-#, fuzzy
-#| msgid "Show the source line with a caret indicating the column"
msgid "Show the source line with a caret indicating the column."
-msgstr "Visa källkodsrader med en cirkumflex som indikerar kolumnen"
+msgstr "Visa källkodsrader med en cirkumflex som indikerar kolumnen."
#: common.opt:1157
-#, fuzzy
-#| msgid "-fdiagnostics-color=[never|always|auto]\tColorize diagnostics"
msgid "-fdiagnostics-color=[never|always|auto]\tColorize diagnostics."
-msgstr "-fdiagnostics-color=[never|always|auto]\tFärglägg felmeddelanden"
+msgstr "-fdiagnostics-color=[never|always|auto]\tFärglägg felmeddelanden."
#: common.opt:1177
-#, fuzzy
-#| msgid "Amend appropriate diagnostic messages with the command line option that controls them"
msgid "Amend appropriate diagnostic messages with the command line option that controls them."
-msgstr "Lägg till lämpliga diagnostiska meddelanden till kommandoradsflaggan som styr dem"
+msgstr "Lägg till lämpliga diagnostiska meddelanden till kommandoradsflaggan som styr dem."
#: common.opt:1181
-#, fuzzy
-#| msgid "-fdisable-[tree|rtl|ipa]-<pass>=range1+range2 disables an optimization pass"
msgid "-fdisable-[tree|rtl|ipa]-<pass>=range1+range2 disables an optimization pass."
-msgstr "-fdisable-[tree|rtl|ipa]-<pass>=intrvl1+intrvl2 avaktiverar ett optimeringspass"
+msgstr "-fdisable-[tree|rtl|ipa]-<pass>=intrvl1+intrvl2 avaktiverar ett optimeringspass."
#: common.opt:1185
-#, fuzzy
-#| msgid "-fenable-[tree|rtl|ipa]-<pass>=range1+range2 enables an optimization pass"
msgid "-fenable-[tree|rtl|ipa]-<pass>=range1+range2 enables an optimization pass."
-msgstr "-fenable-[tree|rtl|ipa]-<pass>=intrvl1+intrvl2 aktiverar ett optimeringspass"
+msgstr "-fenable-[tree|rtl|ipa]-<pass>=intrvl1+intrvl2 aktiverar ett optimeringspass."
#: common.opt:1189
-#, fuzzy
-#| msgid "-fdump-<type>\tDump various compiler internals to a file"
msgid "-fdump-<type>\tDump various compiler internals to a file."
-msgstr "-fdump-<typ>\tSkriv ut diverse intern kompilatorinformation till en fil"
+msgstr "-fdump-<typ>\tSkriv ut diverse intern kompilatorinformation till en fil."
#: common.opt:1196
-#, fuzzy
-#| msgid "-fdump-final-insns=filename\tDump to filename the insns at the end of translation"
msgid "-fdump-final-insns=filename\tDump to filename the insns at the end of translation."
-msgstr "-fdump-final-insns=filnamn\tSkriv instruktionerna vid slutet av översättningen till filnamn"
+msgstr "-fdump-final-insns=filnamn\tSkriv instruktionerna vid slutet av översättningen till filnamn."
#: common.opt:1200
-#, fuzzy
-#| msgid "-fdump-go-spec=filename\tWrite all declarations to file as Go code"
msgid "-fdump-go-spec=filename\tWrite all declarations to file as Go code."
-msgstr "-fdump-go-spec=filnamn\tSkriv alla deklarationer till fil som Go-kod"
+msgstr "-fdump-go-spec=filnamn\tSkriv alla deklarationer till fil som Go-kod."
#: common.opt:1204
-#, fuzzy
-#| msgid "Suppress output of addresses in debugging dumps"
msgid "Suppress output of addresses in debugging dumps."
-msgstr "Undertryck utskrift av adresser i felsökningsutskrifter"
+msgstr "Undertryck utskrift av adresser i felsökningsutskrifter."
#: common.opt:1208
msgid "Collect and dump debug information into temporary file if ICE in C/C++"
@@ -17113,78 +13585,56 @@ msgid "Dump detailed information on GCC's internal representation of source code
msgstr "Skriv ut detaljerad information om GCC:s interna representation av källkodsplatser."
#: common.opt:1217
-#, fuzzy
-#| msgid "Dump optimization passes"
msgid "Dump optimization passes."
-msgstr "Dumpa optimeringspass"
+msgstr "Dumpa optimeringspass."
#: common.opt:1221
-#, fuzzy
-#| msgid "Suppress output of instruction numbers, line number notes and addresses in debugging dumps"
msgid "Suppress output of instruction numbers, line number notes and addresses in debugging dumps."
-msgstr "Undertryck utskrift av instruktionsantal, radnummernoteringar och -adresser i felsökningsutskrifter"
+msgstr "Undertryck utskrift av instruktionsantal, radnummernoteringar och -adresser i felsökningsutskrifter."
#: common.opt:1225
-#, fuzzy
-#| msgid "Suppress output of previous and next insn numbers in debugging dumps"
msgid "Suppress output of previous and next insn numbers in debugging dumps."
-msgstr "Undertryck utskrift föregående och nästa instruktionsnummer i felsökningsutskrifter"
+msgstr "Undertryck utskrift föregående och nästa instruktionsnummer i felsökningsutskrifter."
#: common.opt:1229
msgid "Enable CFI tables via GAS assembler directives."
msgstr "Aktivera CFI-tabeller via GAS-assemblerdirektiv."
#: common.opt:1233
-#, fuzzy
-#| msgid "Perform early inlining"
msgid "Perform early inlining."
-msgstr "Utför tidig inline:ing"
+msgstr "Utför tidig inline:ing."
#: common.opt:1237
-#, fuzzy
-#| msgid "Perform DWARF2 duplicate elimination"
msgid "Perform DWARF duplicate elimination."
-msgstr "Utför dubbletteliminering i DWARF2"
+msgstr "Utför dubbletteliminering i DWARF."
#: common.opt:1241
-#, fuzzy
-#| msgid "Perform interprocedural reduction of aggregates"
msgid "Perform interprocedural reduction of aggregates."
-msgstr "Utför interprocedurell reduktion av aggregat"
+msgstr "Utför interprocedurell reduktion av aggregat."
#: common.opt:1245
-#, fuzzy
-#| msgid "Perform unused symbol elimination in debug info"
msgid "Perform unused symbol elimination in debug info."
-msgstr "Utför eliminering av oanvända symboler i felsökningsinformation"
+msgstr "Utför eliminering av oanvända symboler i felsökningsinformation."
#: common.opt:1249
-#, fuzzy
-#| msgid "Perform unused type elimination in debug info"
msgid "Perform unused type elimination in debug info."
-msgstr "Utför eliminering av oanvända typer i felsökningsinformation"
+msgstr "Utför eliminering av oanvända typer i felsökningsinformation."
#: common.opt:1253
msgid "Do not suppress C++ class debug information."
msgstr "Undertryck inte felsökningsinformation för C++-klasser."
#: common.opt:1257
-#, fuzzy
-#| msgid "Enable exception handling"
msgid "Enable exception handling."
-msgstr "Aktivera undantagshantering"
+msgstr "Aktivera undantagshantering."
#: common.opt:1261
-#, fuzzy
-#| msgid "Perform a number of minor, expensive optimizations"
msgid "Perform a number of minor, expensive optimizations."
-msgstr "Utför ett antal smärre, dyra optimeringar"
+msgstr "Utför ett antal smärre, dyra optimeringar."
#: common.opt:1265
-#, fuzzy
-#| msgid "-fexcess-precision=[fast|standard]\tSpecify handling of excess floating-point precision"
msgid "-fexcess-precision=[fast|standard]\tSpecify handling of excess floating-point precision."
-msgstr "-fexecc-precision=[fast|standard]\tAnge hantering av överskjutande precision på flyttal"
+msgstr "-fexecc-precision=[fast|standard]\tAnge hantering av överskjutande precision på flyttal."
#: common.opt:1268
#, c-format
@@ -17196,28 +13646,20 @@ msgid "Output lto objects containing both the intermediate language and binary o
msgstr "Mata ut lto-objekt som innehåller både mellanspråket och binärutdata."
#: common.opt:1285
-#, fuzzy
-#| msgid "Assume no NaNs or infinities are generated"
msgid "Assume no NaNs or infinities are generated."
-msgstr "Anta att inga NaN:er eller oändligheter genereras"
+msgstr "Anta att inga NaN:er eller oändligheter genereras."
#: common.opt:1289
-#, fuzzy
-#| msgid "-ffixed-<register>\tMark <register> as being unavailable to the compiler"
msgid "-ffixed-<register>\tMark <register> as being unavailable to the compiler."
-msgstr "-ffixed-<register>\tMarkera <register> som ej tillgängligt för kompilatorn"
+msgstr "-ffixed-<register>\tMarkera <register> som ej tillgängligt för kompilatorn."
#: common.opt:1293
-#, fuzzy
-#| msgid "Don't allocate floats and doubles in extended-precision registers"
msgid "Don't allocate floats and doubles in extended-precision registers."
-msgstr "Allokera inte float och double i register med utökad precision"
+msgstr "Allokera inte float och double i register med utökad precision."
#: common.opt:1301
-#, fuzzy
-#| msgid "Perform a forward propagation pass on RTL"
msgid "Perform a forward propagation pass on RTL."
-msgstr "Utför ett framåtpropageringspass på RTL"
+msgstr "Utför ett framåtpropageringspass på RTL."
#: common.opt:1305
msgid "-ffp-contract=[off|on|fast] Perform floating-point expression contraction."
@@ -17229,42 +13671,30 @@ msgid "unknown floating point contraction style %qs"
msgstr "okänd stil för flyttalssammandragning %qs"
#: common.opt:1325
-#, fuzzy
-#| msgid "Allow function addresses to be held in registers"
msgid "Allow function addresses to be held in registers."
-msgstr "Tillåt att funktionsadresser läggs i register"
+msgstr "Tillåt att funktionsadresser läggs i register."
#: common.opt:1329
-#, fuzzy
-#| msgid "Place each function into its own section"
msgid "Place each function into its own section."
-msgstr "Placera varje funktion i sin egen sektion"
+msgstr "Placera varje funktion i sin egen sektion."
#: common.opt:1333
-#, fuzzy
-#| msgid "Perform global common subexpression elimination"
msgid "Perform global common subexpression elimination."
-msgstr "Utför global eliminering av gemensamma deluttryck"
+msgstr "Utför global eliminering av gemensamma deluttryck."
#: common.opt:1337
-#, fuzzy
-#| msgid "Perform enhanced load motion during global common subexpression elimination"
msgid "Perform enhanced load motion during global common subexpression elimination."
-msgstr "Utför förbättrad förflyttning av inläsning under global eliminering av gemensamma deluttryck"
+msgstr "Utför förbättrad förflyttning av laddning under global eliminering av gemensamma deluttryck."
#: common.opt:1341
-#, fuzzy
-#| msgid "Perform store motion after global common subexpression elimination"
msgid "Perform store motion after global common subexpression elimination."
-msgstr "Utför förflyttning av lagring efter global eliminering av gemensamma deluttryck"
+msgstr "Utför förflyttning av lagring efter global eliminering av gemensamma deluttryck."
#: common.opt:1345
msgid "Perform redundant load after store elimination in global common subexpression"
-msgstr "Utför eliminering av överflödig inläsning efter lagring i globala gemensamma deluttryck"
+msgstr "Utför eliminering av överflödig laddning efter lagring i globala gemensamma deluttryck"
#: common.opt:1350
-#, fuzzy
-#| msgid "Perform global common subexpression elimination after register allocation"
msgid "Perform global common subexpression elimination after register allocation has"
msgstr "Utför global eliminering av gemensamma deluttryck efter registertilldelning"
@@ -17273,81 +13703,57 @@ msgid "-fgnat-encodings=[all|gdb|minimal]\tSelect the balance between GNAT encod
msgstr "-fgnat-encodings=[all|gdb|minimal]\tVälj balansen mellan GNAT-kodningar och standard DWARF som skrivs ut i felsökningsinformationen"
#: common.opt:1372
-#, fuzzy
-#| msgid "Enable in and out of Graphite representation"
msgid "Enable in and out of Graphite representation."
-msgstr "Aktivera in och ut från Graphite-representation"
+msgstr "Aktivera in och ut från Graphite-representation."
#: common.opt:1376
-#, fuzzy
-#| msgid "Enable Graphite Identity transformation"
msgid "Enable Graphite Identity transformation."
-msgstr "Aktivera Graphite-identitetstransformation"
+msgstr "Aktivera Graphite-identitetstransformation."
#: common.opt:1380
msgid "Enable hoisting adjacent loads to encourage generating conditional move"
-msgstr "Aktivera närliggande lyftningslast för att uppmuntra generering av villkorliga förflyttningar."
+msgstr "Aktivera närliggande lyftningsladdning för att uppmuntra generering av villkorliga förflyttningar."
#: common.opt:1389
-#, fuzzy
-#| msgid "Mark all loops as parallel"
msgid "Mark all loops as parallel."
-msgstr "Markera alla slingor som parallella"
+msgstr "Markera alla slingor som parallella."
#: common.opt:1393 common.opt:1397 common.opt:1401 common.opt:1405
#: common.opt:2388
-#, fuzzy
-#| msgid "Enable loop interchange transforms. Same as -floop-interchange"
msgid "Enable loop nest transforms. Same as -floop-nest-optimize."
-msgstr "Aktivera transformationen utbyte (interchange) i slingor. Samma som -floop-interchange"
+msgstr "Aktivera transformationer av slingutbyten. Samma som -floop-nest-interchange."
#: common.opt:1409
-#, fuzzy
-#| msgid "Enable support for GNU transactional memory"
msgid "Enable support for GNU transactional memory."
-msgstr "Aktivera stöd för GNU:s transationsminne"
+msgstr "Aktivera stöd för GNU:s transationsminne."
#: common.opt:1413
-#, fuzzy
-#| msgid "Use STB_GNU_UNIQUE if supported by the assembler"
msgid "Use STB_GNU_UNIQUE if supported by the assembler."
-msgstr "Använd STB_GNU_UNIQUE om det stödjs av assemblern"
+msgstr "Använd STB_GNU_UNIQUE om det stödjs av assemblern."
#: common.opt:1421
-#, fuzzy
-#| msgid "Enable the ISL based loop nest optimizer"
msgid "Enable the loop nest optimizer."
-msgstr "Aktevera den ISL-baserade optimeraren av slingnästning"
+msgstr "Aktivera optimeraren av slingnästning."
#: common.opt:1425
-#, fuzzy
-#| msgid "Force bitfield accesses to match their type width"
msgid "Force bitfield accesses to match their type width."
-msgstr "Tvinga bitfältsåtkomster att matcha sin typbredd"
+msgstr "Tvinga bitfältsåtkomster att matcha sin typbredd."
#: common.opt:1429
-#, fuzzy
-#| msgid "Enable guessing of branch probabilities"
msgid "Enable guessing of branch probabilities."
-msgstr "Aktivera att grensannolikheter gissas"
+msgstr "Aktivera att grensannolikheter gissas."
#: common.opt:1437
-#, fuzzy
-#| msgid "Process #ident directives"
msgid "Process #ident directives."
-msgstr "Hantera #ident-direktiv"
+msgstr "Hantera #ident-direktiv."
#: common.opt:1441
-#, fuzzy
-#| msgid "Perform conversion of conditional jumps to branchless equivalents"
msgid "Perform conversion of conditional jumps to branchless equivalents."
-msgstr "Utför konvertering av villkorliga hopp till grenlösa motsvarigheter"
+msgstr "Utför konvertering av villkorliga hopp till grenlösa motsvarigheter."
#: common.opt:1445
-#, fuzzy
-#| msgid "Perform conversion of conditional jumps to conditional execution"
msgid "Perform conversion of conditional jumps to conditional execution."
-msgstr "Utför konvertering av villkorliga hopp till villkorlig exekvering"
+msgstr "Utför konvertering av villkorliga hopp till villkorlig exekvering."
#: common.opt:1449
msgid "-fstack-reuse=[all|named_vars|none] Set stack reuse level for local variables."
@@ -17359,146 +13765,100 @@ msgid "unknown Stack Reuse Level %qs"
msgstr "okänd stackåteranvändningsmodell %qs"
#: common.opt:1465
-#, fuzzy
-#| msgid "Convert conditional jumps in innermost loops to branchless equivalents"
msgid "Convert conditional jumps in innermost loops to branchless equivalents."
-msgstr "Konvertera villkorliga hopp i innersta slingor till grenlösa motsvarigheter"
+msgstr "Konvertera villkorliga hopp i innersta slingor till grenlösa motsvarigheter."
#: common.opt:1469
-#, fuzzy
-#| msgid "Also if-convert conditional jumps containing memory writes"
msgid "Also if-convert conditional jumps containing memory writes."
-msgstr "Även if-convert villkorliga hopp som innehåller minnesskrivningar"
+msgstr "Även if-convert villkorliga hopp som innehåller minnesskrivningar."
#: common.opt:1477
-#, fuzzy
-#| msgid "Do not generate .size directives"
msgid "Do not generate .size directives."
-msgstr "Generera inte .size-direktiv"
+msgstr "Generera inte .size-direktiv."
#: common.opt:1481
-#, fuzzy
-#| msgid "Perform indirect inlining"
msgid "Perform indirect inlining."
-msgstr "Utför indirekt inline:ing"
+msgstr "Utför indirekt inline:ing."
#: common.opt:1487
-#, fuzzy
-#| msgid "Enable inlining of function declared \"inline\", disabling disables all inlining"
msgid "Enable inlining of function declared \"inline\", disabling disables all inlining."
-msgstr "Aktivera inline:ing av funktioner deklarerade â€inlineâ€, avslaget avaktiveras all inline:ing"
+msgstr "Aktivera inline:ing av funktioner deklarerade â€inlineâ€, avslaget avaktiveras all inline:ing."
#: common.opt:1491
-#, fuzzy
-#| msgid "Integrate functions into their callers when code size is known not to grow"
msgid "Integrate functions into their callers when code size is known not to grow."
-msgstr "Integrera funktioner i deras anropare när det är klart att kodstorleken inte växer"
+msgstr "Integrera funktioner i deras anropare när det är klart att kodstorleken inte växer."
#: common.opt:1495
-#, fuzzy
-#| msgid "Integrate functions not declared \"inline\" into their callers when profitable"
msgid "Integrate functions not declared \"inline\" into their callers when profitable."
-msgstr "Integrera funktioner deklarerade â€inline†i deras anropare när det lönar sig"
+msgstr "Integrera funktioner deklarerade â€inline†i deras anropare när det lönar sig."
#: common.opt:1499
-#, fuzzy
-#| msgid "Integrate functions only required by their single caller"
msgid "Integrate functions only required by their single caller."
-msgstr "Integrera funktioner som endast behövs av deras enda anropare"
+msgstr "Integrera funktioner som endast behövs av deras enda anropare."
#: common.opt:1506
-#, fuzzy
-#| msgid "-finline-limit=<number>\tLimit the size of inlined functions to <number>"
msgid "-finline-limit=<number>\tLimit the size of inlined functions to <number>."
-msgstr "-finline-limit=<tal>\tBegränsa storlek på inline-funktioner till <tal>"
+msgstr "-finline-limit=<tal>\tBegränsa storlek på inline-funktioner till <tal>."
#: common.opt:1510
msgid "Inline __atomic operations when a lock free instruction sequence is available."
msgstr "Inline:a __atomic-operationer när en låsningsfri instruktionssekvens är tillgänglig."
#: common.opt:1514
-#, fuzzy
-#| msgid "Instrument function entry and exit with profiling calls"
msgid "Instrument function entry and exit with profiling calls."
-msgstr "Instrumentera funktionsingång och -utgång med profileringsanrop"
+msgstr "Instrumentera funktionsingång och -utgång med profileringsanrop."
#: common.opt:1518
-#, fuzzy
-#| msgid "-finstrument-functions-exclude-function-list=name,... Do not instrument listed functions"
msgid "-finstrument-functions-exclude-function-list=name,... Do not instrument listed functions."
-msgstr "-finstrument-functions-exclude-function-list=namn,... Instrumentera inte uppräknade funktioner"
+msgstr "-finstrument-functions-exclude-function-list=namn,... Instrumentera inte uppräknade funktioner."
#: common.opt:1522
-#, fuzzy
-#| msgid "-finstrument-functions-exclude-file-list=filename,... Do not instrument functions listed in files"
msgid "-finstrument-functions-exclude-file-list=filename,... Do not instrument functions listed in files."
-msgstr "-finstrument-functions-exclude-file-list=filenamn,... Instrumentera inte funktioner uppräknade i filerna"
+msgstr "-finstrument-functions-exclude-file-list=filenamn,... Instrumentera inte funktioner uppräknade i filerna."
#: common.opt:1526
-#, fuzzy
-#| msgid "Perform interprocedural constant propagation"
msgid "Perform interprocedural constant propagation."
-msgstr "Utför konstantpropagering mellan procedurer"
+msgstr "Utför konstantpropagering mellan procedurer."
#: common.opt:1530
-#, fuzzy
-#| msgid "Perform cloning to make Interprocedural constant propagation stronger"
msgid "Perform cloning to make Interprocedural constant propagation stronger."
-msgstr "Utför kloning för att göra konstantpropagering mellan procedurer starkare"
+msgstr "Utför kloning för att göra konstantpropagering mellan procedurer starkare."
#: common.opt:1534
-#, fuzzy
-#| msgid "Perform alignment discovery and propagation to make Interprocedural constant propagation stronger"
msgid "Perform alignment discovery and propagation to make Interprocedural constant propagation stronger."
-msgstr "Utför upptäckt och propagering av justering för att göra konstantpropagering mellan procedurer starkare"
+msgstr "Utför upptäckt och propagering av justering för att göra konstantpropagering mellan procedurer starkare."
#: common.opt:1538
-#, fuzzy
-#| msgid "Perform interprocedural profile propagation"
msgid "Perform interprocedural profile propagation."
-msgstr "Utför profileringspropagering mellan procedurer"
+msgstr "Utför profileringspropagering mellan procedurer."
#: common.opt:1542
-#, fuzzy
-#| msgid "Perform interprocedural points-to analysis"
msgid "Perform interprocedural points-to analysis."
-msgstr "Utför pekar-på-analyser mellan procedurer"
+msgstr "Utför pekar-på-analyser mellan procedurer."
#: common.opt:1546
-#, fuzzy
-#| msgid "Discover pure and const functions"
msgid "Discover pure and const functions."
-msgstr "Upptäck pure- och const-funktioner"
+msgstr "Upptäck pure- och const-funktioner."
#: common.opt:1550
-#, fuzzy
-#| msgid "Perform Identical Code Folding for functions and read-only variables"
msgid "Perform Identical Code Folding for functions and read-only variables."
-msgstr "Fäll ihop identisk kod för funktioner och endast läsbara variabler"
+msgstr "Fäll ihop identisk kod för funktioner och endast läsbara variabler."
#: common.opt:1554
-#, fuzzy
-#| msgid "Perform Identical Code Folding for functions"
msgid "Perform Identical Code Folding for functions."
-msgstr "Fäll ihop identisk kod för funktioner"
+msgstr "Fäll ihop identisk kod för funktioner."
#: common.opt:1558
-#, fuzzy
-#| msgid "Perform Identical Code Folding for variables"
msgid "Perform Identical Code Folding for variables."
-msgstr "Utför ihopfällning av identiskt kod för variabler"
+msgstr "Utför ihopfällning av identiskt kod för variabler."
#: common.opt:1562
-#, fuzzy
-#| msgid "Discover readonly and non addressable static variables"
msgid "Discover readonly and non addressable static variables."
-msgstr "Upptäck endast läsbara och icke adresserbara statiska variabler"
+msgstr "Upptäck endast läsbara och icke adresserbara statiska variabler."
#: common.opt:1574
-#, fuzzy
-#| msgid "-fira-algorithm=[CB|priority] Set the used IRA algorithm"
msgid "-fira-algorithm=[CB|priority] Set the used IRA algorithm."
-msgstr "-fira-algorithm=[CB|priority] Bestäm den använda IRA-algoritmen"
+msgstr "-fira-algorithm=[CB|priority] Bestäm den använda IRA-algoritmen."
#: common.opt:1577
#, c-format
@@ -17506,10 +13866,8 @@ msgid "unknown IRA algorithm %qs"
msgstr "okänd IRA-algoritm %qs"
#: common.opt:1587
-#, fuzzy
-#| msgid "-fira-region=[one|all|mixed] Set regions for IRA"
msgid "-fira-region=[one|all|mixed] Set regions for IRA."
-msgstr "-fira-region=[one|all|mixed] Sätt regioner för IRA"
+msgstr "-fira-region=[one|all|mixed] Sätt regioner för IRA."
#: common.opt:1590
#, c-format
@@ -17533,46 +13891,32 @@ msgid "-fira-verbose=<number>\tControl IRA's level of diagnostic messages."
msgstr "-fira-verbose=<tal>\tStyr IRA:ns nivå på diagnostikmeddelanden."
#: common.opt:1625
-#, fuzzy
-#| msgid "Optimize induction variables on trees"
msgid "Optimize induction variables on trees."
-msgstr "Optimera induktionsvariabler på träd"
+msgstr "Optimera induktionsvariabler på träd."
#: common.opt:1629
-#, fuzzy
-#| msgid "Use jump tables for sufficiently large switch statements"
msgid "Use jump tables for sufficiently large switch statements."
-msgstr "Använd hopptabeller för tillräckligt stora switch-satser"
+msgstr "Använd hopptabeller för tillräckligt stora switch-satser."
#: common.opt:1633
-#, fuzzy
-#| msgid "Generate code for functions even if they are fully inlined"
msgid "Generate code for functions even if they are fully inlined."
-msgstr "Generera kod för funktioner även om de är fullständigt inline:ade"
+msgstr "Generera kod för funktioner även om de är fullständigt inline:ade."
#: common.opt:1637
-#, fuzzy
-#| msgid "Generate code for functions even if they are fully inlined"
msgid "Generate code for static functions even if they are never called."
-msgstr "Generera kod för funktioner även om de är fullständigt inline:ade"
+msgstr "Generera kod för statiska funktioner även om de aldrig anropas."
#: common.opt:1641
-#, fuzzy
-#| msgid "Emit static const variables even if they are not used"
msgid "Emit static const variables even if they are not used."
-msgstr "Mata ut static const-variabler även om de inte används"
+msgstr "Mata ut static const-variabler även om de inte används."
#: common.opt:1645
-#, fuzzy
-#| msgid "Give external symbols a leading underscore"
msgid "Give external symbols a leading underscore."
-msgstr "Ge externa symboler ett inledande understrykningstecken"
+msgstr "Ge externa symboler ett inledande understrykningstecken."
#: common.opt:1653
-#, fuzzy
-#| msgid "Do CFG-sensitive rematerialization in LRA"
msgid "Do CFG-sensitive rematerialization in LRA."
-msgstr "Gör CFG-känsliga återmaterialiseringar i LRA"
+msgstr "Gör CFG-känsliga återmaterialiseringar i LRA."
#: common.opt:1657
msgid "Enable link-time optimization."
@@ -17588,124 +13932,84 @@ msgid "unknown LTO partitioning model %qs"
msgstr "okänd LTO-partitioneringsmodell %qs"
#: common.opt:1683
-#, fuzzy
-#| msgid "Specify the algorithm to partition symbols and vars at linktime"
msgid "Specify the algorithm to partition symbols and vars at linktime."
-msgstr "Ange algoritmen för att dela upp symboler och variabler vid länktillfället"
+msgstr "Ange algoritmen för att dela upp symboler och variabler vid länktillfället."
#: common.opt:1688
-#, fuzzy
-#| msgid "-flto-compression-level=<number>\tUse zlib compression level <number> for IL"
msgid "-flto-compression-level=<number>\tUse zlib compression level <number> for IL."
-msgstr "-flto-compression-level=<tal>\tAnvänd zlib-komprimering på nivå <tal> för IL"
+msgstr "-flto-compression-level=<tal>\tAnvänd zlib-komprimering på nivå <tal> för IL."
#: common.opt:1692
-#, fuzzy
-#| msgid "Merge C++ types using One Definition Rule"
msgid "Merge C++ types using One Definition Rule."
-msgstr "Slå samman C++-typer med endefinitionsregeln"
+msgstr "Slå samman C++-typer med endefinitionsregeln."
#: common.opt:1696
-#, fuzzy
-#| msgid "Report various link-time optimization statistics"
msgid "Report various link-time optimization statistics."
-msgstr "Rapportera diverse optimeringsstatistik från länkningen"
+msgstr "Rapportera diverse optimeringsstatistik från länkningen."
#: common.opt:1700
-#, fuzzy
-#| msgid "Report various link-time optimization statistics for WPA only"
msgid "Report various link-time optimization statistics for WPA only."
-msgstr "Rapportera diverse optimeringsstatistik från länkningen endast för WPA."
+msgstr "Rapportera diverse optimeringsstatistik från länkningen endast för WPA.."
#: common.opt:1704
-#, fuzzy
-#| msgid "Set errno after built-in math functions"
msgid "Set errno after built-in math functions."
-msgstr "Sätt errno efter inbyggda matematikfunktioner"
+msgstr "Sätt errno efter inbyggda matematikfunktioner."
#: common.opt:1708
-#, fuzzy
-#| msgid "-fmax-errors=<number>\tMaximum number of errors to report"
msgid "-fmax-errors=<number>\tMaximum number of errors to report."
-msgstr "-fmax-errors=<antal>\tMaximalt antal fel som skall rapporteras"
+msgstr "-fmax-errors=<antal>\tMaximalt antal fel som skall rapporteras."
#: common.opt:1712
-#, fuzzy
-#| msgid "Report on permanent memory allocation"
msgid "Report on permanent memory allocation."
-msgstr "Rapportera om permanent minnesallokering"
+msgstr "Rapportera om permanent minnesallokering."
#: common.opt:1716
-#, fuzzy
-#| msgid "Report on permanent memory allocation in WPA only"
msgid "Report on permanent memory allocation in WPA only."
-msgstr "Rapportera bara om permanent minnesallokering i WPA"
+msgstr "Rapportera bara om permanent minnesallokering i WPA."
#: common.opt:1723
-#, fuzzy
-#| msgid "Attempt to merge identical constants and constant variables"
msgid "Attempt to merge identical constants and constant variables."
-msgstr "Försök slå samman identiska konstanter och konstanta variabler"
+msgstr "Försök slå samman identiska konstanter och konstanta variabler."
#: common.opt:1727
-#, fuzzy
-#| msgid "Attempt to merge identical constants across compilation units"
msgid "Attempt to merge identical constants across compilation units."
-msgstr "Försök slå samman identiska konstanter mellan kompileringsenheter"
+msgstr "Försök slå samman identiska konstanter mellan kompileringsenheter."
#: common.opt:1731
-#, fuzzy
-#| msgid "Attempt to merge identical debug strings across compilation units"
msgid "Attempt to merge identical debug strings across compilation units."
-msgstr "Försök slå samman identiska felsökningssträngar mellan kompileringsenheter"
+msgstr "Försök slå samman identiska felsökningssträngar mellan kompileringsenheter."
#: common.opt:1735
-#, fuzzy
-#| msgid "-fmessage-length=<number>\tLimit diagnostics to <number> characters per line. 0 suppresses line-wrapping"
msgid "-fmessage-length=<number>\tLimit diagnostics to <number> characters per line. 0 suppresses line-wrapping."
-msgstr "-fmessage-length=<antal>\tBegränsa felmeddelandens längd till <antal> tecken per rad. 0 stänger av radbrytning"
+msgstr "-fmessage-length=<antal>\tBegränsa felmeddelandens längd till <antal> tecken per rad. 0 stänger av radbrytning."
#: common.opt:1739
-#, fuzzy
-#| msgid "Perform SMS based modulo scheduling before the first scheduling pass"
msgid "Perform SMS based modulo scheduling before the first scheduling pass."
-msgstr "Utför SMS-baserad modulo-schemaläggning före det första schemaläggningspasset"
+msgstr "Utför SMS-baserad modulo-schemaläggning före det första schemaläggningspasset."
#: common.opt:1743
-#, fuzzy
-#| msgid "Perform SMS based modulo scheduling with register moves allowed"
msgid "Perform SMS based modulo scheduling with register moves allowed."
-msgstr "Utför SMS-baserad modulo-schemaläggning med tillåten registerförflyttning"
+msgstr "Utför SMS-baserad modulo-schemaläggning med tillåten registerförflyttning."
#: common.opt:1747
-#, fuzzy
-#| msgid "Move loop invariant computations out of loops"
msgid "Move loop invariant computations out of loops."
-msgstr "Flytta slinginvarianta beräkningar ut från slingor"
+msgstr "Flytta slinginvarianta beräkningar ut från slingor."
#: common.opt:1751
-#, fuzzy
-#| msgid "Use the RTL dead code elimination pass"
msgid "Use the RTL dead code elimination pass."
-msgstr "Använd passet på RTL för eliminering av död kod"
+msgstr "Använd passet på RTL för eliminering av död kod."
#: common.opt:1755
-#, fuzzy
-#| msgid "Use the RTL dead store elimination pass"
msgid "Use the RTL dead store elimination pass."
-msgstr "Använd passet på RTL för eliminering av död lagring"
+msgstr "Använd passet på RTL för eliminering av död lagring."
#: common.opt:1759
-#, fuzzy
-#| msgid "Enable/Disable the traditional scheduling in loops that already passed modulo scheduling"
msgid "Enable/Disable the traditional scheduling in loops that already passed modulo scheduling."
-msgstr "Aktivera/deaktivera den traditionella schemaläggningen i slingor som redan passerat modulo-schemaläggning"
+msgstr "Aktivera/deaktivera den traditionella schemaläggningen i slingor som redan passerat modulo-schemaläggning."
#: common.opt:1763
-#, fuzzy
-#| msgid "Support synchronous non-call exceptions"
msgid "Support synchronous non-call exceptions."
-msgstr "Stöd synkrona icke-anropsundantag"
+msgstr "Stöd synkrona icke-anropsundantag."
#: common.opt:1766
#, c-format
@@ -17713,16 +14017,12 @@ msgid "options or targets missing after %qs"
msgstr "flaggor eller mål saknas efter %qs"
#: common.opt:1767
-#, fuzzy
-#| msgid "-foffload=<targets>=<options> Specify offloading targets and options for them"
msgid "-foffload=<targets>=<options> Specify offloading targets and options for them."
-msgstr "-foffload=<mål>=<flaggor> Ange mål att lasta av till och flaggor för dem"
+msgstr "-foffload=<mål>=<flaggor> Ange mål att lasta av till och flaggor för dem."
#: common.opt:1771
-#, fuzzy
-#| msgid "-foffload-abi=[lp64|ilp32] Set the ABI to use in an offload compiler"
msgid "-foffload-abi=[lp64|ilp32] Set the ABI to use in an offload compiler."
-msgstr "-foffload-abi=[lp64|ilp32] Ange ABI:et att använda i en avlastningskompilator"
+msgstr "-foffload-abi=[lp64|ilp32] Ange ABI:et att använda i en avlastningskompilator."
#: common.opt:1774
#, c-format
@@ -17730,600 +14030,413 @@ msgid "unknown offload ABI %qs"
msgstr "okänd avlastnings-ABI %qs"
#: common.opt:1784
-#, fuzzy
-#| msgid "When possible do not generate stack frames"
msgid "When possible do not generate stack frames."
-msgstr "Låt bli att generera stackramar när det är möjligt"
+msgstr "Låt bli att generera stackramar när det är möjligt."
#: common.opt:1788
-#, fuzzy
-#| msgid "Enable all optimization info dumps on stderr"
msgid "Enable all optimization info dumps on stderr."
-msgstr "Aktivera alla optimeringsinformationsdumpar på standard fel"
+msgstr "Aktivera alla optimeringsinformationsdumpar på standard fel."
#: common.opt:1792
-#, fuzzy
-#| msgid "-fopt-info[-<type>=filename]\tDump compiler optimization details"
msgid "-fopt-info[-<type>=filename]\tDump compiler optimization details."
-msgstr "-fopt-info[-<type>=filenamn]\tSkriv ut kompilatoroptimeringsdetaljer"
+msgstr "-fopt-info[-<type>=filenamn]\tSkriv ut kompilatoroptimeringsdetaljer."
#: common.opt:1800
-#, fuzzy
-#| msgid "Optimize sibling and tail recursive calls"
msgid "Optimize sibling and tail recursive calls."
-msgstr "Optimera syskon- och svansrekursiva anrop"
+msgstr "Optimera syskon- och svansrekursiva anrop."
#: common.opt:1804
-#, fuzzy
-#| msgid "Perform partial inlining"
msgid "Perform partial inlining."
-msgstr "Utför partiell inline:ing"
+msgstr "Utför partiell inline:ing."
#: common.opt:1808 common.opt:1812
-#, fuzzy
-#| msgid "Report on memory allocation before interprocedural optimization"
msgid "Report on memory allocation before interprocedural optimization."
-msgstr "Rapportera minnesallokering för interprocedurella optimeringar"
+msgstr "Rapportera minnesallokering för interprocedurella optimeringar."
#: common.opt:1816
-#, fuzzy
-#| msgid "Pack structure members together without holes"
msgid "Pack structure members together without holes."
-msgstr "Packa ihop postmedlemmar utan hål"
+msgstr "Packa ihop postmedlemmar utan hål."
#: common.opt:1820
-#, fuzzy
-#| msgid "-fpack-struct=<number>\tSet initial maximum structure member alignment"
msgid "-fpack-struct=<number>\tSet initial maximum structure member alignment."
-msgstr "-fpack-struct=<tal>\tAnge initial maximal justering för postmedlemmar"
+msgstr "-fpack-struct=<tal>\tAnge initial maximal justering för postmedlemmar."
#: common.opt:1824
-#, fuzzy
-#| msgid "Return small aggregates in memory, not registers"
msgid "Return small aggregates in memory, not registers."
-msgstr "Returnera små aggregat i minne, inte register"
+msgstr "Returnera små aggregat i minne, inte register."
#: common.opt:1828
-#, fuzzy
-#| msgid "Perform loop peeling"
msgid "Perform loop peeling."
-msgstr "Utför slingavskalning"
+msgstr "Utför slingavskalning."
#: common.opt:1832
-#, fuzzy
-#| msgid "Enable machine specific peephole optimizations"
msgid "Enable machine specific peephole optimizations."
-msgstr "Aktivera maskinspecifika nyckelhålsoptimeringar"
+msgstr "Aktivera maskinspecifika nyckelhålsoptimeringar."
#: common.opt:1836
-#, fuzzy
-#| msgid "Enable an RTL peephole pass before sched2"
msgid "Enable an RTL peephole pass before sched2."
-msgstr "Aktivera ett RTL-nyckelhålspass före sched2"
+msgstr "Aktivera ett RTL-nyckelhålspass före sched2."
#: common.opt:1840
-#, fuzzy
-#| msgid "Generate position-independent code if possible (large mode)"
msgid "Generate position-independent code if possible (large mode)."
-msgstr "Generera positionsoberoende kod om möjligt (stort läge)"
+msgstr "Generera positionsoberoende kod om möjligt (stort läge)."
#: common.opt:1844
-#, fuzzy
-#| msgid "Generate position-independent code for executables if possible (large mode)"
msgid "Generate position-independent code for executables if possible (large mode)."
-msgstr "Generera positionsoberoende kod för körbara program om möjligt (stort läge)"
+msgstr "Generera positionsoberoende kod för körbara program om möjligt (stort läge)."
#: common.opt:1848
-#, fuzzy
-#| msgid "Generate position-independent code if possible (small mode)"
msgid "Generate position-independent code if possible (small mode)."
-msgstr "Generera positionsoberoende kod om möjligt (litet läge)"
+msgstr "Generera positionsoberoende kod om möjligt (litet läge)."
#: common.opt:1852
-#, fuzzy
-#| msgid "Generate position-independent code for executables if possible (small mode)"
msgid "Generate position-independent code for executables if possible (small mode)."
-msgstr "Generera positionsoberoende kod för körbara program om möjligt (litet läge)"
+msgstr "Generera positionsoberoende kod för körbara program om möjligt (litet läge)."
#: common.opt:1856
msgid "Use PLT for PIC calls (-fno-plt: load the address from GOT at call site)."
msgstr "Använd PLT för PIC-anrop (-fno-plt: läs adressen från GOT på anropsplatsen)."
#: common.opt:1860
-#, fuzzy
-#| msgid "Specify a plugin to load"
msgid "Specify a plugin to load."
-msgstr "Ange en instickmodul att läsa in"
+msgstr "Ange en instickmodul att läsa in."
#: common.opt:1864
-#, fuzzy
-#| msgid "-fplugin-arg-<name>-<key>[=<value>]\tSpecify argument <key>=<value> for plugin <name>"
msgid "-fplugin-arg-<name>-<key>[=<value>]\tSpecify argument <key>=<value> for plugin <name>."
-msgstr "-fplugin-arg-<namn>-<nyckel>[=<värde>]\tAnge argument <nyckel>=<värde> för insticksmodul <namn>"
+msgstr "-fplugin-arg-<namn>-<nyckel>[=<värde>]\tAnge argument <nyckel>=<värde> för insticksmodul <namn>."
#: common.opt:1868
msgid "Run predictive commoning optimization."
msgstr "Kör optimeringar för predikativ gemensamning."
#: common.opt:1872
-#, fuzzy
-#| msgid "Generate prefetch instructions, if available, for arrays in loops"
msgid "Generate prefetch instructions, if available, for arrays in loops."
-msgstr "Generera förhandshämtningsinstruktioner (prefetch), om tillgängliga, för vektorer i slingor"
+msgstr "Generera förhandshämtningsinstruktioner (prefetch), om tillgängliga, för vektorer i slingor."
#: common.opt:1876
-#, fuzzy
-#| msgid "Enable basic program profiling code"
msgid "Enable basic program profiling code."
-msgstr "Aktivera grundläggande programprofileringskod"
+msgstr "Aktivera grundläggande programprofileringskod."
#: common.opt:1880
-#, fuzzy
-#| msgid "Insert arc-based program profiling code"
msgid "Insert arc-based program profiling code."
-msgstr "Lägg in bågbaserad programprofileringskod"
+msgstr "Lägg in bågbaserad programprofileringskod."
#: common.opt:1884
msgid "Set the top-level directory for storing the profile data."
msgstr "Sätt toppnivåkatalogen för att spara profildata."
#: common.opt:1889
-#, fuzzy
-#| msgid "Enable correction of flow inconsistent profile data input"
msgid "Enable correction of flow inconsistent profile data input."
-msgstr "Aktivera korrigering av profilindata med inkonsistent flöde"
+msgstr "Aktivera korrigering av profilindata med inkonsistent flöde."
#: common.opt:1893
-#, fuzzy
-#| msgid "Enable common options for generating profile info for profile feedback directed optimizations"
msgid "Enable common options for generating profile info for profile feedback directed optimizations."
-msgstr "Aktivera vanliga flaggor för att generera profileringsinformation för optimeringar styrda av återmatad profil"
+msgstr "Aktivera vanliga flaggor för att generera profileringsinformation för optimeringar styrda av återmatad profil."
#: common.opt:1897
-#, fuzzy
-#| msgid "Enable common options for generating profile info for profile feedback directed optimizations, and set -fprofile-dir="
msgid "Enable common options for generating profile info for profile feedback directed optimizations, and set -fprofile-dir=."
-msgstr "Aktivera vanliga flaggor för att generera profileringsinformation för optimeringar styrda av återmatad profil, och sätt -fprofile-dir="
+msgstr "Aktivera vanliga flaggor för att generera profileringsinformation för optimeringar styrda av återmatad profil, och sätt -fprofile-dir=."
#: common.opt:1901
-#, fuzzy
-#| msgid "Enable common options for performing profile feedback directed optimizations"
msgid "Enable common options for performing profile feedback directed optimizations."
-msgstr "Aktivera vanliga flaggor för att utföra optimeringar styrda av återmatad profil"
+msgstr "Aktivera vanliga flaggor för att utföra optimeringar styrda av återmatad profil."
#: common.opt:1905
-#, fuzzy
-#| msgid "Enable common options for performing profile feedback directed optimizations, and set -fprofile-dir="
msgid "Enable common options for performing profile feedback directed optimizations, and set -fprofile-dir=."
-msgstr "Aktivera vanliga flaggor för att utföra optimeringar styrda av återmatad profil, och sätt -fprofile-dir="
+msgstr "Aktivera vanliga flaggor för att utföra optimeringar styrda av återmatad profil, och sätt -fprofile-dir=."
#: common.opt:1909
-#, fuzzy
-#| msgid "Insert code to profile values of expressions"
msgid "Insert code to profile values of expressions."
-msgstr "Lägg in kod för att profilera värden av uttryck"
+msgstr "Lägg in kod för att profilera värden av uttryck."
#: common.opt:1913
-#, fuzzy
-#| msgid "Report on consistency of profile"
msgid "Report on consistency of profile."
-msgstr "Rapportera om intern konsistens hos profilen"
+msgstr "Rapportera om intern konsistens hos profilen."
#: common.opt:1917
-#, fuzzy
-#| msgid "Enable function reordering that improves code placement"
msgid "Enable function reordering that improves code placement."
-msgstr "Aktivera omflyttning av funktioner för att förbättra kodplacering"
+msgstr "Aktivera omflyttning av funktioner för att förbättra kodplacering."
#: common.opt:1924
-#, fuzzy
-#| msgid "-frandom-seed=<number>\tMake compile reproducible using <number>"
msgid "-frandom-seed=<string>\tMake compile reproducible using <string>."
-msgstr "-frandom-seed=<tal>\tGör kompileringen reproducerbar med <tal>"
+msgstr "-frandom-seed=<sträng>\tGör kompileringen reproducerbar med <sträng>."
#: common.opt:1934
msgid "Record gcc command line switches in the object file."
msgstr "Notera gcc:s kommandoradsflaggor i objektfilen."
#: common.opt:1938
-#, fuzzy
-#| msgid "Return small aggregates in registers"
msgid "Return small aggregates in registers."
-msgstr "Returnera små poster i register"
+msgstr "Returnera små poster i register."
#: common.opt:1946
msgid "Tell DSE that the storage for a C++ object is dead when the constructor"
msgstr "Berätta för DSE att lagringen för ett C++-objekt är dött när konstrueraren"
#: common.opt:1951
-#, fuzzy
-#| msgid "Relief of register pressure through live range shrinkage"
msgid "Relief of register pressure through live range shrinkage."
-msgstr "Lättnad av registertryck genom minskning av aktivt intervall"
+msgstr "Lättnad av registertryck genom minskning av aktivt intervall."
#: common.opt:1955
-#, fuzzy
-#| msgid "Perform a register renaming optimization pass"
msgid "Perform a register renaming optimization pass."
-msgstr "Utför ett optimeringspass med registernamnbyten"
+msgstr "Utför ett optimeringspass med registernamnbyten."
#: common.opt:1959
-#, fuzzy
-#| msgid "Perform a target dependent instruction fusion optimization pass"
msgid "Perform a target dependent instruction fusion optimization pass."
-msgstr "Utför ett optimeringspass med målberoende instruktionssammanslagning"
+msgstr "Utför ett optimeringspass med målberoende instruktionssammanslagning."
#: common.opt:1963
-#, fuzzy
-#| msgid "Reorder basic blocks to improve code placement"
msgid "Reorder basic blocks to improve code placement."
-msgstr "Flytta om grundblock för att förbättra kodplacering"
+msgstr "Flytta om grundblock för att förbättra kodplacering."
#: common.opt:1967
msgid "-freorder-blocks-algorithm=[simple|stc] Set the used basic block reordering algorithm."
msgstr "-freorder-blocks-algorithm=[simple|stc] Sätt algoritmen att användas för ordningsändring av grundblock."
#: common.opt:1970
-#, fuzzy, c-format
-#| msgid "unknown IRA algorithm %qs"
+#, c-format
msgid "unknown basic block reordering algorithm %qs"
-msgstr "okänd IRA-algoritm %qs"
+msgstr "okänd algoritm for omordning av grundblock %qs"
#: common.opt:1980
-#, fuzzy
-#| msgid "Reorder basic blocks and partition into hot and cold sections"
msgid "Reorder basic blocks and partition into hot and cold sections."
-msgstr "Flytta om grundblock och partitioner till varma och kalla sektioner"
+msgstr "Flytta om grundblock och partitioner till varma och kalla sektioner."
#: common.opt:1984
-#, fuzzy
-#| msgid "Reorder functions to improve code placement"
msgid "Reorder functions to improve code placement."
-msgstr "Flytta om funktioner för att förbättra kodplacering"
+msgstr "Flytta om funktioner för att förbättra kodplacering."
#: common.opt:1988
-#, fuzzy
-#| msgid "Add a common subexpression elimination pass after loop optimizations"
msgid "Add a common subexpression elimination pass after loop optimizations."
-msgstr "Lägg till ett pass för eliminering av gemensamma deluttryck efter slingoptimeringar"
+msgstr "Lägg till ett pass för eliminering av gemensamma deluttryck efter slingoptimeringar."
#: common.opt:1996
-#, fuzzy
-#| msgid "Disable optimizations that assume default FP rounding behavior"
msgid "Disable optimizations that assume default FP rounding behavior."
-msgstr "Avaktivera optimeringar som antar standardmässig avrundningsbeteende för FP"
+msgstr "Avaktivera optimeringar som antar standardmässig avrundningsbeteende för FP."
#: common.opt:2000
-#, fuzzy
-#| msgid "Enable scheduling across basic blocks"
msgid "Enable scheduling across basic blocks."
-msgstr "Aktivera schemaläggning mellan grundblock"
+msgstr "Aktivera schemaläggning mellan grundblock."
#: common.opt:2004
-#, fuzzy
-#| msgid "Enable register pressure sensitive insn scheduling"
msgid "Enable register pressure sensitive insn scheduling."
-msgstr "Aktivera registertryckskänslig instruktionsschemaläggning"
+msgstr "Aktivera registertryckskänslig instruktionsschemaläggning."
#: common.opt:2008
-#, fuzzy
-#| msgid "Allow speculative motion of non-loads"
msgid "Allow speculative motion of non-loads."
-msgstr "Tillåt spekulativ förflyttning av icke-inläsningar"
+msgstr "Tillåt spekulativ förflyttning av icke-laddningar."
#: common.opt:2012
-#, fuzzy
-#| msgid "Allow speculative motion of some loads"
msgid "Allow speculative motion of some loads."
-msgstr "Tillåt spekulativ förflyttning av några inläsningar"
+msgstr "Tillåt spekulativ förflyttning av några laddningar."
#: common.opt:2016
-#, fuzzy
-#| msgid "Allow speculative motion of more loads"
msgid "Allow speculative motion of more loads."
-msgstr "Tillåt spekulativ förflyttning av fler inläsningar"
+msgstr "Tillåt spekulativ förflyttning av fler laddningar."
#: common.opt:2020
-#, fuzzy
-#| msgid "-fsched-verbose=<number>\tSet the verbosity level of the scheduler"
msgid "-fsched-verbose=<number>\tSet the verbosity level of the scheduler."
-msgstr "-fsched-verbose=<tal>\tAnge hur mångordig schemaläggaren skall vara"
+msgstr "-fsched-verbose=<tal>\tAnge hur mångordig schemaläggaren skall vara."
#: common.opt:2024
-#, fuzzy
-#| msgid "If scheduling post reload, do superblock scheduling"
msgid "If scheduling post reload, do superblock scheduling."
-msgstr "Om schemaläggning efter omläsning, gör superblockschemaläggning"
+msgstr "Om schemaläggning efter omläsning, gör superblockschemaläggning."
#: common.opt:2032
-#, fuzzy
-#| msgid "Reschedule instructions before register allocation"
msgid "Reschedule instructions before register allocation."
-msgstr "Schemalägg om instruktioner före registertilldelning"
+msgstr "Schemalägg om instruktioner före registertilldelning."
#: common.opt:2036
-#, fuzzy
-#| msgid "Reschedule instructions after register allocation"
msgid "Reschedule instructions after register allocation."
-msgstr "Schemalägg om instruktioner efter registertilldelning"
+msgstr "Schemalägg om instruktioner efter registertilldelning."
#: common.opt:2043
-#, fuzzy
-#| msgid "Schedule instructions using selective scheduling algorithm"
msgid "Schedule instructions using selective scheduling algorithm."
-msgstr "Använd selektive schemaläggningsalgoritm för schemaläggning av instruktioner"
+msgstr "Använd selektive schemaläggningsalgoritm för schemaläggning av instruktioner."
#: common.opt:2047
-#, fuzzy
-#| msgid "Run selective scheduling after reload"
msgid "Run selective scheduling after reload."
-msgstr "Kör selektiv schemaläggning efter omläsning"
+msgstr "Kör selektiv schemaläggning efter omläsning."
#: common.opt:2051
-#, fuzzy
-#| msgid "Perform software pipelining of inner loops during selective scheduling"
msgid "Perform software pipelining of inner loops during selective scheduling."
-msgstr "Utför programvarurörläggning av inre slingor under selektiv schemaläggning"
+msgstr "Utför programvarurörläggning av inre slingor under selektiv schemaläggning."
#: common.opt:2055
-#, fuzzy
-#| msgid "Perform software pipelining of outer loops during selective scheduling"
msgid "Perform software pipelining of outer loops during selective scheduling."
-msgstr "Utför programvarurörläggning av yttre slingor under selektiv schemaläggning"
+msgstr "Utför programvarurörläggning av yttre slingor under selektiv schemaläggning."
#: common.opt:2059
-#, fuzzy
-#| msgid "Reschedule pipelined regions without pipelining"
msgid "Reschedule pipelined regions without pipelining."
-msgstr "Schemalägg om rörlagda regioner utan rörläggning"
+msgstr "Schemalägg om rörlagda regioner utan rörläggning."
#: common.opt:2063
-#, fuzzy
-#| msgid "Allow interposing function (or variables) by ones with different semantics (or initializer) respectively by dynamic linker"
msgid "Allow interposing function (or variables) by ones with different semantics (or initializer) respectively by dynamic linker."
-msgstr "Tillåt funktioner (eller variabler) som står emellan för sådana med annan semantik (respektive initierare) i den dynamiska länkaren"
+msgstr "Tillåt funktioner (eller variabler) som står emellan för sådana med annan semantik (respektive initierare) i den dynamiska länkaren."
#: common.opt:2069
-#, fuzzy
-#| msgid "Allow premature scheduling of queued insns"
msgid "Allow premature scheduling of queued insns."
-msgstr "Tillåt förtida schemaläggning av köade instruktioner"
+msgstr "Tillåt förtida schemaläggning av köade instruktioner."
#: common.opt:2073
-#, fuzzy
-#| msgid "-fsched-stalled-insns=<number>\tSet number of queued insns that can be prematurely scheduled"
msgid "-fsched-stalled-insns=<number>\tSet number of queued insns that can be prematurely scheduled."
-msgstr "-fsched-stalled-insns=<antal>\tAnge antalet köade instruktioner som kan schemaläggas i förtid"
+msgstr "-fsched-stalled-insns=<antal>\tAnge antalet köade instruktioner som kan schemaläggas i förtid."
#: common.opt:2081
-#, fuzzy
-#| msgid "Set dependence distance checking in premature scheduling of queued insns"
msgid "Set dependence distance checking in premature scheduling of queued insns."
-msgstr "Sätt beroendeavståndet som kontrolleras i förtida schemaläggning av köade instruktioner"
+msgstr "Sätt beroendeavståndet som kontrolleras i förtida schemaläggning av köade instruktioner."
#: common.opt:2085
-#, fuzzy
-#| msgid "-fsched-stalled-insns-dep=<number>\tSet dependence distance checking in premature scheduling of queued insns"
msgid "-fsched-stalled-insns-dep=<number>\tSet dependence distance checking in premature scheduling of queued insns."
-msgstr "-fsched-stalled-insns-dep=<antal>\tSätt beroendeavståndet som kontrolleras i förtida schemaläggning av köade instruktioner"
+msgstr "-fsched-stalled-insns-dep=<antal>\tSätt beroendeavståndet som kontrolleras i förtida schemaläggning av köade instruktioner."
#: common.opt:2089
-#, fuzzy
-#| msgid "Enable the group heuristic in the scheduler"
msgid "Enable the group heuristic in the scheduler."
-msgstr "Aktivera gruppheuristiken i schemaläggaren"
+msgstr "Aktivera gruppheuristiken i schemaläggaren."
#: common.opt:2093
-#, fuzzy
-#| msgid "Enable the critical path heuristic in the scheduler"
msgid "Enable the critical path heuristic in the scheduler."
-msgstr "Aktivera heuristiken för kritisk väg i schemaläggaren"
+msgstr "Aktivera heuristiken för kritisk väg i schemaläggaren."
#: common.opt:2097
-#, fuzzy
-#| msgid "Enable the speculative instruction heuristic in the scheduler"
msgid "Enable the speculative instruction heuristic in the scheduler."
-msgstr "Aktivera den spekulativa instruktionsheuristiken i schemaläggaren"
+msgstr "Aktivera den spekulativa instruktionsheuristiken i schemaläggaren."
#: common.opt:2101
-#, fuzzy
-#| msgid "Enable the rank heuristic in the scheduler"
msgid "Enable the rank heuristic in the scheduler."
-msgstr "Aktivera ordningsheuristiken i schemaläggaren"
+msgstr "Aktivera ordningsheuristiken i schemaläggaren."
#: common.opt:2105
-#, fuzzy
-#| msgid "Enable the last instruction heuristic in the scheduler"
msgid "Enable the last instruction heuristic in the scheduler."
-msgstr "Aktivera heuristiken för sista instruktion i schemaläggaren"
+msgstr "Aktivera heuristiken för sista instruktion i schemaläggaren."
#: common.opt:2109
-#, fuzzy
-#| msgid "Enable the dependent count heuristic in the scheduler"
msgid "Enable the dependent count heuristic in the scheduler."
-msgstr "Aktivera heuristiken för beroende antal i schemaläggaren"
+msgstr "Aktivera heuristiken för beroende antal i schemaläggaren."
#: common.opt:2113
-#, fuzzy
-#| msgid "Access data in the same section from shared anchor points"
msgid "Access data in the same section from shared anchor points."
-msgstr "Nå data i samma sektion från delade förankringspunkter"
+msgstr "Nå data i samma sektion från delade förankringspunkter."
#: common.opt:2125
msgid "Turn on Redundant Extensions Elimination pass."
msgstr "Slå på passet för eliminering av redundanta utökningar."
#: common.opt:2129
-#, fuzzy
-#| msgid "Show column numbers in diagnostics, when available. Default on"
msgid "Show column numbers in diagnostics, when available. Default on."
-msgstr "Visa kolumnnummer i felmeddelanden, när de är tillgängliga. Normalt på"
+msgstr "Visa kolumnnummer i felmeddelanden, när de är tillgängliga. Normalt på."
#: common.opt:2133
msgid "Emit function prologues only before parts of the function that need it,"
msgstr "Mata ut funktionsprologer bara före delar av funktionen som behöver det,"
#: common.opt:2138
-#, fuzzy
-#| msgid "Disable optimizations observable by IEEE signaling NaNs"
msgid "Disable optimizations observable by IEEE signaling NaNs."
-msgstr "Avaktivera optimeringar som kan observeras av IEEE signalerande NAN:ar"
+msgstr "Avaktivera optimeringar som kan observeras av IEEE signalerande NAN:ar."
#: common.opt:2142
-#, fuzzy
-#| msgid "Disable floating point optimizations that ignore the IEEE signedness of zero"
msgid "Disable floating point optimizations that ignore the IEEE signedness of zero."
-msgstr "Avaktivera flyttalsoptimeringar som ignorera IEEE:s tecken på noll"
+msgstr "Avaktivera flyttalsoptimeringar som ignorera IEEE:s tecken på noll."
#: common.opt:2146
-#, fuzzy
-#| msgid "Convert floating point constants to single precision constants"
msgid "Convert floating point constants to single precision constants."
-msgstr "Konvertera flyttalskonstanter till konstanter med enkel precision"
+msgstr "Konvertera flyttalskonstanter till konstanter med enkel precision."
#: common.opt:2150
-#, fuzzy
-#| msgid "Split lifetimes of induction variables when loops are unrolled"
msgid "Split lifetimes of induction variables when loops are unrolled."
-msgstr "Dela livstiden på induktionsvariabler när slingor rullas ut"
+msgstr "Dela livstiden på induktionsvariabler när slingor rullas ut."
#: common.opt:2154
-#, fuzzy
-#| msgid "Generate discontiguous stack frames"
msgid "Generate discontiguous stack frames."
-msgstr "Generera osammanhängande stackramar"
+msgstr "Generera osammanhängande stackramar."
#: common.opt:2158
-#, fuzzy
-#| msgid "Split wide types into independent registers"
msgid "Split wide types into independent registers."
-msgstr "Dela upp breda typer i oberoende register"
+msgstr "Dela upp breda typer i oberoende register."
#: common.opt:2162
-#, fuzzy
-#| msgid "Enable forward propagation on trees"
msgid "Enable backward propagation of use properties at the SSA level."
-msgstr "Aktivera framåtpropagering på träd"
+msgstr "Aktivera bakåtpropagering av användningsegenskaper på SSA-nivån."
#: common.opt:2166
-#, fuzzy
-#| msgid "Optimize conditional patterns using SSA PHI nodes"
msgid "Optimize conditional patterns using SSA PHI nodes."
-msgstr "Optimera villkorliga mönster med SSA PHI-noder"
+msgstr "Optimera villkorliga mönster med SSA PHI-noder."
#: common.opt:2170
-#, fuzzy
-#| msgid "Optimize amount of stdarg registers saved to stack at start of function"
msgid "Optimize amount of stdarg registers saved to stack at start of function."
-msgstr "Optimera mängden stdarg-register som sparas på stacken vid starten av en funktion"
+msgstr "Optimera mängden stdarg-register som sparas på stacken vid starten av en funktion."
#: common.opt:2174
-#, fuzzy
-#| msgid "Apply variable expansion when loops are unrolled"
msgid "Apply variable expansion when loops are unrolled."
-msgstr "Tillämpa variabelexpansion när slingor rullas ut"
+msgstr "Tillämpa variabelexpansion när slingor rullas ut."
#: common.opt:2178
-#, fuzzy
-#| msgid "-fstack-check=[no|generic|specific]\tInsert stack checking code into the program"
msgid "-fstack-check=[no|generic|specific]\tInsert stack checking code into the program."
-msgstr "-fstack-check=[no|generic|specific]\tLägg in stackkontrollkod i programmet"
+msgstr "-fstack-check=[no|generic|specific]\tLägg in stackkontrollkod i programmet."
#: common.opt:2182
-#, fuzzy
-#| msgid "Insert stack checking code into the program. Same as -fstack-check=specific"
msgid "Insert stack checking code into the program. Same as -fstack-check=specific."
-msgstr "Lägg in stackkontrollkod i programmet. Samma som -fstack-check=specific"
+msgstr "Lägg in stackkontrollkod i programmet. Samma som -fstack-check=specific."
#: common.opt:2189
-#, fuzzy
-#| msgid "-fstack-limit-register=<register>\tTrap if the stack goes past <register>"
msgid "-fstack-limit-register=<register>\tTrap if the stack goes past <register>."
-msgstr "-fstack-limit-register=<register>\tFånga om stacken går förbi <register>"
+msgstr "-fstack-limit-register=<register>\tFånga om stacken går förbi <register>."
#: common.opt:2193
-#, fuzzy
-#| msgid "-fstack-limit-symbol=<name>\tTrap if the stack goes past symbol <name>"
msgid "-fstack-limit-symbol=<name>\tTrap if the stack goes past symbol <name>."
-msgstr "-fstack-limit-symbol=<namn>\tFånga om stacken går förbi symbolen <namn>"
+msgstr "-fstack-limit-symbol=<namn>\tFånga om stacken går förbi symbolen <namn>."
#: common.opt:2197
-#, fuzzy
-#| msgid "Use propolice as a stack protection method"
msgid "Use propolice as a stack protection method."
-msgstr "Använd propolice som en metod att skydda stacken"
+msgstr "Använd propolice som en metod att skydda stacken."
#: common.opt:2201
-#, fuzzy
-#| msgid "Use a stack protection method for every function"
msgid "Use a stack protection method for every function."
-msgstr "Använd en metod att skydda stacken för varje funktion"
+msgstr "Använd en metod att skydda stacken för varje funktion."
#: common.opt:2205
-#, fuzzy
-#| msgid "Use a smart stack protection method for certain functions"
msgid "Use a smart stack protection method for certain functions."
-msgstr "Använd en smart metod att skydda stacken för vissa funktioner"
+msgstr "Använd en smart metod att skydda stacken för vissa funktioner."
#: common.opt:2209
-#, fuzzy
-#| msgid "Use stack protection method only for functions with the stack_protect attribute"
msgid "Use stack protection method only for functions with the stack_protect attribute."
-msgstr "Använd en metod att skydda stacken endast för funktioner med attributet stack_protect"
+msgstr "Använd en metod att skydda stacken endast för funktioner med attributet stack_protect."
#: common.opt:2213
-#, fuzzy
-#| msgid "Output stack usage information on a per-function basis"
msgid "Output stack usage information on a per-function basis."
-msgstr "Skriv ut information om stackanvändning för varje funktion"
+msgstr "Skriv ut information om stackanvändning för varje funktion."
#: common.opt:2225
-#, fuzzy
-#| msgid "Assume strict aliasing rules apply"
msgid "Assume strict aliasing rules apply."
-msgstr "Anta att strikta aliasregler gäller"
+msgstr "Anta att strikta aliasregler gäller."
#: common.opt:2229
-#, fuzzy
-#| msgid "Treat signed overflow as undefined"
msgid "Treat signed overflow as undefined."
-msgstr "Behandla spill med tecken som odefinierat"
+msgstr "Behandla spill med tecken som odefinierat."
#: common.opt:2233
-#, fuzzy
-#| msgid "Implement __atomic operations via libcalls to legacy __sync functions"
msgid "Implement __atomic operations via libcalls to legacy __sync functions."
-msgstr "Implementera __atomic-operationer med biblioteksanrop till äldre __sync-funktioner"
+msgstr "Implementera __atomic-operationer med biblioteksanrop till äldre __sync-funktioner."
#: common.opt:2237
-#, fuzzy
-#| msgid "Check for syntax errors, then stop"
msgid "Check for syntax errors, then stop."
-msgstr "Leta efter syntaxfel, stoppa sedan"
+msgstr "Leta efter syntaxfel, stoppa sedan."
#: common.opt:2241
-#, fuzzy
-#| msgid "Create data files needed by \"gcov\""
msgid "Create data files needed by \"gcov\"."
-msgstr "Skapa datafiler som behövs av â€gcovâ€"
+msgstr "Skapa datafiler som behövs av â€gcovâ€."
#: common.opt:2245
-#, fuzzy
-#| msgid "Perform jump threading optimizations"
msgid "Perform jump threading optimizations."
-msgstr "Utför hopptrådningsoptimeringar"
+msgstr "Utför hopptrådningsoptimeringar."
#: common.opt:2249
-#, fuzzy
-#| msgid "Report the time taken by each compiler pass"
msgid "Report the time taken by each compiler pass."
-msgstr "Rapportera tiden som går åt för varje kompilatorpass"
+msgstr "Rapportera tiden som går åt för varje kompilatorpass."
#: common.opt:2253
-#, fuzzy
-#| msgid "-ftls-model=[global-dynamic|local-dynamic|initial-exec|local-exec]\tSet the default thread-local storage code generation model"
msgid "-ftls-model=[global-dynamic|local-dynamic|initial-exec|local-exec]\tSet the default thread-local storage code generation model."
-msgstr "-ftls-model=[global-dynamic|local-dynamic|initial-exec|local-exec]\tAnge normal kodgenereringsmodell för trådlokal lagring"
+msgstr "-ftls-model=[global-dynamic|local-dynamic|initial-exec|local-exec]\tAnge normal kodgenereringsmodell för trådlokal lagring."
#: common.opt:2256
#, c-format
@@ -18331,46 +14444,32 @@ msgid "unknown TLS model %qs"
msgstr "okänd TLS-modell %qs"
#: common.opt:2272
-#, fuzzy
-#| msgid "Reorder top level functions, variables, and asms"
msgid "Reorder top level functions, variables, and asms."
-msgstr "Ordna om toppnivåfunktioner, variabler och asm:ar"
+msgstr "Ordna om toppnivåfunktioner, variabler och asm:ar."
#: common.opt:2276
-#, fuzzy
-#| msgid "Perform superblock formation via tail duplication"
msgid "Perform superblock formation via tail duplication."
-msgstr "Utför superblockformering via svansduplicering"
+msgstr "Utför superblockformering via svansduplicering."
#: common.opt:2283
-#, fuzzy
-#| msgid "Assume floating-point operations can trap"
msgid "Assume floating-point operations can trap."
-msgstr "Anta att flyttalsoperationer kan utlösa fällor"
+msgstr "Anta att flyttalsoperationer kan utlösa fällor."
#: common.opt:2287
-#, fuzzy
-#| msgid "Trap for signed overflow in addition, subtraction and multiplication"
msgid "Trap for signed overflow in addition, subtraction and multiplication."
-msgstr "FÃ¥nga teckenspill i addition, subtraktion och multiplikation"
+msgstr "FÃ¥nga teckenspill i addition, subtraktion och multiplikation."
#: common.opt:2291
-#, fuzzy
-#| msgid "Enable SSA-CCP optimization on trees"
msgid "Enable SSA-CCP optimization on trees."
-msgstr "Aktivera SSA-CCP-optimering av träd"
+msgstr "Aktivera SSA-CCP-optimering av träd."
#: common.opt:2295
-#, fuzzy
-#| msgid "Enable SSA-BIT-CCP optimization on trees"
msgid "Enable SSA-BIT-CCP optimization on trees."
-msgstr "Aktivera SSA-BIT-CCP-optimering av träd"
+msgstr "Aktivera SSA-BIT-CCP-optimering av träd."
#: common.opt:2303
-#, fuzzy
-#| msgid "Enable loop header copying on trees"
msgid "Enable loop header copying on trees."
-msgstr "Aktivera slinghuvudkopiering av träd"
+msgstr "Aktivera slinghuvudkopiering av träd."
#: common.opt:2311
#, fuzzy
@@ -18379,62 +14478,44 @@ msgid "Enable SSA coalescing of user variables."
msgstr "Aktivera sammanläggning av alla kopierelaterade användarvariabler"
#: common.opt:2319
-#, fuzzy
-#| msgid "Enable copy propagation on trees"
msgid "Enable copy propagation on trees."
-msgstr "Aktivera kopiepropagering i träd"
+msgstr "Aktivera kopiepropagering i träd."
#: common.opt:2327
-#, fuzzy
-#| msgid "Transform condition stores into unconditional ones"
msgid "Transform condition stores into unconditional ones."
-msgstr "Transformera villkorliga lagringar till ovillkorliga"
+msgstr "Transformera villkorliga lagringar till ovillkorliga."
#: common.opt:2331
msgid "Perform conversions of switch initializations."
msgstr "Utför konvertering av switch-initieringar."
#: common.opt:2335
-#, fuzzy
-#| msgid "Enable SSA dead code elimination optimization on trees"
msgid "Enable SSA dead code elimination optimization on trees."
-msgstr "Aktivera eliminering av död kod i SSA-optimeringen i träd"
+msgstr "Aktivera eliminering av död kod i SSA-optimeringen i träd."
#: common.opt:2339
-#, fuzzy
-#| msgid "Enable dominator optimizations"
msgid "Enable dominator optimizations."
-msgstr "Aktivera dominatoroptimeringar"
+msgstr "Aktivera dominatoroptimeringar."
#: common.opt:2343
-#, fuzzy
-#| msgid "Enable tail merging on trees"
msgid "Enable tail merging on trees."
-msgstr "Aktivera svanssammanslagning av träd"
+msgstr "Aktivera svanssammanslagning av träd."
#: common.opt:2347
-#, fuzzy
-#| msgid "Enable dead store elimination"
msgid "Enable dead store elimination."
-msgstr "Aktivera eliminering av död lagring"
+msgstr "Aktivera eliminering av död lagring."
#: common.opt:2351
-#, fuzzy
-#| msgid "Enable forward propagation on trees"
msgid "Enable forward propagation on trees."
-msgstr "Aktivera framåtpropagering på träd"
+msgstr "Aktivera framåtpropagering på träd."
#: common.opt:2355
-#, fuzzy
-#| msgid "Enable Full Redundancy Elimination (FRE) on trees"
msgid "Enable Full Redundancy Elimination (FRE) on trees."
-msgstr "Aktivera fullständig överflödseliminering (FRE) i träd"
+msgstr "Aktivera fullständig överflödseliminering (FRE) i träd."
#: common.opt:2359
-#, fuzzy
-#| msgid "Enable string length optimizations on trees"
msgid "Enable string length optimizations on trees."
-msgstr "Aktivera stränglängdsoptimering av träd"
+msgstr "Aktivera stränglängdsoptimering av träd."
#: common.opt:2363
msgid "Detect paths that trigger erroneous or undefined behavior due to"
@@ -18445,130 +14526,92 @@ msgid "Detect paths that trigger erroneous or undefined behavior due a null valu
msgstr "Detektera vägar som orsakar felaktigt eller odefinierat beteende på grund av ett null-värde"
#: common.opt:2376
-#, fuzzy
-#| msgid "Enable loop distribution on trees"
msgid "Enable loop distribution on trees."
-msgstr "Aktivera slingdistribution i träd"
+msgstr "Aktivera slingdistribution i träd."
#: common.opt:2380
-#, fuzzy
-#| msgid "Enable loop distribution for patterns transformed into a library call"
msgid "Enable loop distribution for patterns transformed into a library call."
-msgstr "Aktivera slingdistribution för mönster transformerade till biblioteksanrop"
+msgstr "Aktivera slingdistribution för mönster transformerade till biblioteksanrop."
#: common.opt:2384
-#, fuzzy
-#| msgid "Enable loop invariant motion on trees"
msgid "Enable loop invariant motion on trees."
-msgstr "Aktivera förflyttning av slingoberoende delar i träd"
+msgstr "Aktivera förflyttning av slingoberoende delar i träd."
#: common.opt:2392
-#, fuzzy
-#| msgid "Create canonical induction variables in loops"
msgid "Create canonical induction variables in loops."
-msgstr "Skapa kanoniska induktionsvariabler i slingor"
+msgstr "Skapa kanoniska induktionsvariabler i slingor."
#: common.opt:2396
-#, fuzzy
-#| msgid "Enable loop optimizations on tree level"
msgid "Enable loop optimizations on tree level."
-msgstr "Aktivera slingoptimeringar på trädnivå"
+msgstr "Aktivera slingoptimeringar på trädnivå."
#: common.opt:2400
-#, fuzzy
-#| msgid "Enable automatic parallelization of loops"
msgid "Enable automatic parallelization of loops."
-msgstr "Aktivera automatisk parallellisering av slingor"
+msgstr "Aktivera automatisk parallellisering av slingor."
#: common.opt:2404
msgid "Enable hoisting loads from conditional pointers."
-msgstr "Aktivera lyftningslast från villkorliga pekare."
+msgstr "Aktivera lyftningsladdning från villkorliga pekare."
#: common.opt:2408
-#, fuzzy
-#| msgid "Enable SSA-PRE optimization on trees"
msgid "Enable SSA-PRE optimization on trees."
-msgstr "Aktivera SSA-PRE-optimeringar i träd"
+msgstr "Aktivera SSA-PRE-optimeringar i träd."
#: common.opt:2412
-#, fuzzy
-#| msgid "In SSA-PRE optimization on trees, enable partial-partial redundancy elimination"
msgid "In SSA-PRE optimization on trees, enable partial-partial redundancy elimination."
-msgstr "I SSA-PRE-optimering på träd, aktivera eliminering av partiell-partiell redundans"
+msgstr "I SSA-PRE-optimering på träd, aktivera eliminering av partiell-partiell redundans."
#: common.opt:2416
msgid "Perform function-local points-to analysis on trees."
msgstr "Utför funktionslokala pekar-på-analyser i träd"
#: common.opt:2420
-#, fuzzy
-#| msgid "Enable reassociation on tree level"
msgid "Enable reassociation on tree level."
-msgstr "Aktivera återassociering på trädnivå"
+msgstr "Aktivera återassociering på trädnivå."
#: common.opt:2428
-#, fuzzy
-#| msgid "Enable SSA code sinking on trees"
msgid "Enable SSA code sinking on trees."
-msgstr "Aktivera SSA-kodsänkning i träd"
+msgstr "Aktivera SSA-kodsänkning i träd."
#: common.opt:2432
-#, fuzzy
-#| msgid "Perform straight-line strength reduction"
msgid "Perform straight-line strength reduction."
-msgstr "Utför rätlinjig styrkereduktion"
+msgstr "Utför rätlinjig styrkereduktion."
#: common.opt:2436
-#, fuzzy
-#| msgid "Perform scalar replacement of aggregates"
msgid "Perform scalar replacement of aggregates."
-msgstr "Utför skalärersättning av aggregat"
+msgstr "Utför skalärersättning av aggregat."
#: common.opt:2440
-#, fuzzy
-#| msgid "Replace temporary expressions in the SSA->normal pass"
msgid "Replace temporary expressions in the SSA->normal pass."
-msgstr "Ersätt tillfälliga uttryck i passet SSA->normal"
+msgstr "Ersätt tillfälliga uttryck i passet SSA->normal."
#: common.opt:2444
-#, fuzzy
-#| msgid "Perform live range splitting during the SSA->normal pass"
msgid "Perform live range splitting during the SSA->normal pass."
-msgstr "Utför livstidsuppdelning under passet SSA->normal"
+msgstr "Utför livstidsuppdelning under passet SSA->normal."
#: common.opt:2448
-#, fuzzy
-#| msgid "Perform Value Range Propagation on trees"
msgid "Perform Value Range Propagation on trees."
-msgstr "Utför propagering av värdeintervall i träd"
+msgstr "Utför propagering av värdeintervall i träd."
#: common.opt:2452
msgid "Split paths leading to loop backedges."
msgstr "Dela sökvägar som leder till bakåtbågar i slingor."
#: common.opt:2456
-#, fuzzy
-#| msgid "Compile whole compilation unit at a time"
msgid "Compile whole compilation unit at a time."
-msgstr "Kompilera en hel kompileringsenhet åt gången"
+msgstr "Kompilera en hel kompileringsenhet åt gången."
#: common.opt:2460
-#, fuzzy
-#| msgid "Perform loop unrolling when iteration count is known"
msgid "Perform loop unrolling when iteration count is known."
-msgstr "Utför slingutrullning när iterationsantalet är känt"
+msgstr "Utför slingutrullning när iterationsantalet är känt."
#: common.opt:2464
-#, fuzzy
-#| msgid "Perform loop unrolling for all loops"
msgid "Perform loop unrolling for all loops."
-msgstr "Utför slingutrullning för alla slingor"
+msgstr "Utför slingutrullning för alla slingor."
#: common.opt:2471
-#, fuzzy
-#| msgid "Allow loop optimizations to assume that the loops behave in normal way"
msgid "Allow loop optimizations to assume that the loops behave in normal way."
-msgstr "Tillåt slingoptimeringar att anta att slingorna beter sig normalt"
+msgstr "Tillåt slingoptimeringar att anta att slingorna beter sig normalt."
# Avhugget p.g.a. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34352
# Hela meddelandet är översatt
@@ -18581,88 +14624,60 @@ msgid "Same as -fassociative-math for expressions which include division."
msgstr "Samma som -fassociative-math för uttryck som inkluderar division."
#: common.opt:2488
-#, fuzzy
-#| msgid "Allow math optimizations that may violate IEEE or ISO standards"
msgid "Allow math optimizations that may violate IEEE or ISO standards."
-msgstr "Tillåt matematikoptimeringar som kan strida mot IEEE- eller ISO-standarder"
+msgstr "Tillåt matematikoptimeringar som kan strida mot IEEE- eller ISO-standarder."
#: common.opt:2492
-#, fuzzy
-#| msgid "Perform loop unswitching"
msgid "Perform loop unswitching."
-msgstr "Utför slingavväxling"
+msgstr "Utför slingavväxling."
#: common.opt:2496
-#, fuzzy
-#| msgid "Just generate unwind tables for exception handling"
msgid "Just generate unwind tables for exception handling."
-msgstr "Generera bara upprullningstabeller för undantagshantering"
+msgstr "Generera bara upprullningstabeller för undantagshantering."
#: common.opt:2500
-#, fuzzy
-#| msgid "Use the bfd linker instead of the default linker"
msgid "Use the bfd linker instead of the default linker."
-msgstr "Använd bfd-länkaren istället för standardlänkaren"
+msgstr "Använd bfd-länkaren istället för standardlänkaren."
#: common.opt:2504
-#, fuzzy
-#| msgid "Use the gold linker instead of the default linker"
msgid "Use the gold linker instead of the default linker."
-msgstr "Använd gold-länkaren istället för standardlänkaren"
+msgstr "Använd gold-länkaren istället för standardlänkaren."
#: common.opt:2516
-#, fuzzy
-#| msgid "Perform variable tracking"
msgid "Perform variable tracking."
-msgstr "Utför variabelspårning"
+msgstr "Utför variabelspårning."
#: common.opt:2524
-#, fuzzy
-#| msgid "Perform variable tracking by annotating assignments"
msgid "Perform variable tracking by annotating assignments."
-msgstr "Utför variabelspårning genom att annotera tilldelningar"
+msgstr "Utför variabelspårning genom att annotera tilldelningar."
#: common.opt:2530
-#, fuzzy
-#| msgid "Toggle -fvar-tracking-assignments"
msgid "Toggle -fvar-tracking-assignments."
-msgstr "Växla -fvar-tracking-assignments"
+msgstr "Växla -fvar-tracking-assignments."
#: common.opt:2538
-#, fuzzy
-#| msgid "Perform variable tracking and also tag variables that are uninitialized"
msgid "Perform variable tracking and also tag variables that are uninitialized."
-msgstr "Utför variabelspårning och tagga också variabler som är oinitierade"
+msgstr "Utför variabelspårning och tagga också variabler som är oinitierade."
#: common.opt:2542
-#, fuzzy
-#| msgid "Enable vectorization on trees"
msgid "Enable vectorization on trees."
-msgstr "Aktivera vektorisering av träd"
+msgstr "Aktivera vektorisering av träd."
#: common.opt:2550
-#, fuzzy
-#| msgid "Enable loop vectorization on trees"
msgid "Enable loop vectorization on trees."
-msgstr "Aktivera slingvektorisering i träd"
+msgstr "Aktivera slingvektorisering i träd."
#: common.opt:2554
-#, fuzzy
-#| msgid "Enable basic block vectorization (SLP) on trees"
msgid "Enable basic block vectorization (SLP) on trees."
-msgstr "Aktivera grundblocksvektorisering (SLP) i träd"
+msgstr "Aktivera grundblocksvektorisering (SLP) i träd."
#: common.opt:2558
-#, fuzzy
-#| msgid "Specifies the cost model for vectorization"
msgid "Specifies the cost model for vectorization."
-msgstr "Anger kostnadsmodellen för vektorisering"
+msgstr "Anger kostnadsmodellen för vektorisering."
#: common.opt:2562
-#, fuzzy
-#| msgid "Specifies the vectorization cost model for code marked with a simd directive"
msgid "Specifies the vectorization cost model for code marked with a simd directive."
-msgstr "Anger kostnadsmodellen för vektorisering för kod markerad med ett simd-direktiv"
+msgstr "Anger kostnadsmodellen för vektorisering för kod markerad med ett simd-direktiv."
#: common.opt:2565
#, c-format
@@ -18682,16 +14697,12 @@ msgid "Enable copy propagation of scalar-evolution information."
msgstr "Aktivera kopiepropagering av skalärutvecklingsinformation."
#: common.opt:2600
-#, fuzzy
-#| msgid "Add extra commentary to assembler output"
msgid "Add extra commentary to assembler output."
-msgstr "Lägg till extra kommentarer till assemblerutdata"
+msgstr "Lägg till extra kommentarer till assemblerutdata."
#: common.opt:2604
-#, fuzzy
-#| msgid "-fvisibility=[default|internal|hidden|protected]\tSet the default symbol visibility"
msgid "-fvisibility=[default|internal|hidden|protected]\tSet the default symbol visibility."
-msgstr "-fvisibility=[default|internal|hidden|protected]\tAnge standardvärde för symbolsynlighet"
+msgstr "-fvisibility=[default|internal|hidden|protected]\tAnge standardvärde för symbolsynlighet."
#: common.opt:2607
#, c-format
@@ -18716,70 +14727,48 @@ msgid "Output vtable verification pointer sets information."
msgstr "Mata ut information om verifieringspekaruppsättningar för vtable."
#: common.opt:2647
-#, fuzzy
-#| msgid "Use expression value profiles in optimizations"
msgid "Use expression value profiles in optimizations."
-msgstr "Använd uttrycksvärdeprofiler i optimeringar"
+msgstr "Använd uttrycksvärdeprofiler i optimeringar."
#: common.opt:2651
-#, fuzzy
-#| msgid "Construct webs and split unrelated uses of single variable"
msgid "Construct webs and split unrelated uses of single variable."
-msgstr "Konstruera nät och dela orelaterade användningar av en enskild variabel"
+msgstr "Konstruera nät och dela orelaterade användningar av en enskild variabel."
#: common.opt:2655
-#, fuzzy
-#| msgid "Enable conditional dead code elimination for builtin calls"
msgid "Enable conditional dead code elimination for builtin calls."
-msgstr "Aktivera villkorlig eliminering av död för inbyggda anrop"
+msgstr "Aktivera villkorlig eliminering av död för inbyggda anrop."
#: common.opt:2659
-#, fuzzy
-#| msgid "Perform whole program optimizations"
msgid "Perform whole program optimizations."
-msgstr "Utför optimering av hela program"
+msgstr "Utför optimering av hela program."
#: common.opt:2663
-#, fuzzy
-#| msgid "Assume signed arithmetic overflow wraps around"
msgid "Assume signed arithmetic overflow wraps around."
-msgstr "Anta att spill vid teckenaritmetik slår runt"
+msgstr "Anta att spill vid teckenaritmetik slår runt."
#: common.opt:2667
-#, fuzzy
-#| msgid "Put zero initialized data in the bss section"
msgid "Put zero initialized data in the bss section."
-msgstr "Lägg nollinitierad data i bss-sektionen"
+msgstr "Lägg nollinitierad data i bss-sektionen."
#: common.opt:2671
-#, fuzzy
-#| msgid "Generate debug information in default format"
msgid "Generate debug information in default format."
-msgstr "Generera felsökningsinformation i standardformat"
+msgstr "Generera felsökningsinformation i standardformat."
#: common.opt:2675
-#, fuzzy
-#| msgid "Generate debug information in COFF format"
msgid "Generate debug information in COFF format."
-msgstr "Generera felsökningsinformation i COFF-format"
+msgstr "Generera felsökningsinformation i COFF-format."
#: common.opt:2679
-#, fuzzy
-#| msgid "Generate debug information in default version of DWARF format"
msgid "Generate debug information in default version of DWARF format."
-msgstr "Generera felsökningsinformation i standardversion av DWARF-formatet"
+msgstr "Generera felsökningsinformation i standardversion av DWARF-formatet."
#: common.opt:2683
-#, fuzzy
-#| msgid "Generate debug information in DWARF v2 (or later) format"
msgid "Generate debug information in DWARF v2 (or later) format."
-msgstr "Generera felsökningsinformation i DWARF v2-format (eller senare)"
+msgstr "Generera felsökningsinformation i DWARF v2-format (eller senare)."
#: common.opt:2687
-#, fuzzy
-#| msgid "Generate debug information in default extended format"
msgid "Generate debug information in default extended format."
-msgstr "Generera felsökningsinformation i normalt utökat format"
+msgstr "Generera felsökningsinformation i normalt utökat format."
#: common.opt:2691
msgid "Don't generate DWARF pubnames and pubtypes sections."
@@ -18802,136 +14791,92 @@ msgid "Record gcc command line switches in DWARF DW_AT_producer."
msgstr "Notera gcc:s kommandoradsflaggor i DWARF DW_AT_producer."
#: common.opt:2711
-#, fuzzy
-#| msgid "Don't generate debug information in separate .dwo files"
msgid "Don't generate debug information in separate .dwo files."
-msgstr "Generera inte felsökningsinformation i separata .dwo-filer"
+msgstr "Generera inte felsökningsinformation i separata .dwo-filer."
#: common.opt:2715
-#, fuzzy
-#| msgid "Generate debug information in separate .dwo files"
msgid "Generate debug information in separate .dwo files."
-msgstr "Generera felsökningsinformation i separata .dwo-filer"
+msgstr "Generera felsökningsinformation i separata .dwo-filer."
#: common.opt:2719
-#, fuzzy
-#| msgid "Generate debug information in STABS format"
msgid "Generate debug information in STABS format."
-msgstr "Generera felsökningsinformation i STABS-format"
+msgstr "Generera felsökningsinformation i STABS-format."
#: common.opt:2723
-#, fuzzy
-#| msgid "Generate debug information in extended STABS format"
msgid "Generate debug information in extended STABS format."
-msgstr "Generera felsökningsinformation i utökat STABS-format"
+msgstr "Generera felsökningsinformation i utökat STABS-format."
#: common.opt:2727
-#, fuzzy
-#| msgid "Emit DWARF additions beyond selected version"
msgid "Emit DWARF additions beyond selected version."
-msgstr "Mata ut DWARF-tillägg utöver vald version"
+msgstr "Mata ut DWARF-tillägg utöver vald version."
#: common.opt:2731
-#, fuzzy
-#| msgid "Don't emit DWARF additions beyond selected version"
msgid "Don't emit DWARF additions beyond selected version."
-msgstr "Mata inte ut DWARF-tillägg utöver vald version"
+msgstr "Mata inte ut DWARF-tillägg utöver vald version."
#: common.opt:2735
-#, fuzzy
-#| msgid "Toggle debug information generation"
msgid "Toggle debug information generation."
-msgstr "Växla generering av felsökningsinformation"
+msgstr "Växla generering av felsökningsinformation."
#: common.opt:2739
-#, fuzzy
-#| msgid "Generate debug information in VMS format"
msgid "Generate debug information in VMS format."
-msgstr "Generera felsökningsinformation i VMS-format"
+msgstr "Generera felsökningsinformation i VMS-format."
#: common.opt:2743
-#, fuzzy
-#| msgid "Generate debug information in XCOFF format"
msgid "Generate debug information in XCOFF format."
-msgstr "Generera felsökningsinformation i XCOFF-format"
+msgstr "Generera felsökningsinformation i XCOFF-format."
#: common.opt:2747
-#, fuzzy
-#| msgid "Generate debug information in extended XCOFF format"
msgid "Generate debug information in extended XCOFF format."
-msgstr "Generera felsökningsinformation i utökat XCOFF-format"
+msgstr "Generera felsökningsinformation i utökat XCOFF-format."
#: common.opt:2765
-#, fuzzy
-#| msgid "Generate compressed debug sections"
msgid "Generate compressed debug sections."
-msgstr "Generera komprimerade felsökningssektioner"
+msgstr "Generera komprimerade felsökningssektioner."
#: common.opt:2769
-#, fuzzy
-#| msgid "-gz=<format>\tGenerate compressed debug sections in format <format>"
msgid "-gz=<format>\tGenerate compressed debug sections in format <format>."
-msgstr "-gz=<format>\tGenerera komprimerade felsökningssektioner i formatet <format>"
+msgstr "-gz=<format>\tGenerera komprimerade felsökningssektioner i formatet <format>."
#: common.opt:2776
-#, fuzzy
-#| msgid "-iplugindir=<dir>\tSet <dir> to be the default plugin directory"
msgid "-iplugindir=<dir>\tSet <dir> to be the default plugin directory."
-msgstr "-iplugindir=<kat>\tSätt <kat> att vara standardbibliotek för insticksmoduler"
+msgstr "-iplugindir=<kat>\tSätt <kat> att vara standardbibliotek för insticksmoduler."
#: common.opt:2780
-#, fuzzy
-#| msgid "-imultiarch <dir>\tSet <dir> to be the multiarch include subdirectory"
msgid "-imultiarch <dir>\tSet <dir> to be the multiarch include subdirectory."
-msgstr "-imultiarch <kat>\tSätt <kat> att vara inkluderingsunderbiblioteket för multiarkitekturer"
+msgstr "-imultiarch <kat>\tSätt <kat> att vara inkluderingsunderbiblioteket för multiarkitekturer."
#: common.opt:2802
-#, fuzzy
-#| msgid "-o <file>\tPlace output into <file>"
msgid "-o <file>\tPlace output into <file>."
-msgstr "-o <fil>\tSkriv utdata i <fil>"
+msgstr "-o <fil>\tSkriv utdata i <fil>."
#: common.opt:2806
-#, fuzzy
-#| msgid "Enable function profiling"
msgid "Enable function profiling."
-msgstr "Aktivera funktionsprofilering"
+msgstr "Aktivera funktionsprofilering."
#: common.opt:2816
-#, fuzzy
-#| msgid "Like -pedantic but issue them as errors"
msgid "Like -pedantic but issue them as errors."
-msgstr "Som -pedantic men ange dem som fel"
+msgstr "Som -pedantic men ange dem som fel."
#: common.opt:2856
-#, fuzzy
-#| msgid "Do not display functions compiled or elapsed time"
msgid "Do not display functions compiled or elapsed time."
-msgstr "Visa inte kompilerade funktioner eller tiden som förbrukats"
+msgstr "Visa inte kompilerade funktioner eller tiden som förbrukats."
#: common.opt:2888
-#, fuzzy
-#| msgid "Enable verbose output"
msgid "Enable verbose output."
-msgstr "Aktivera utförlig utskrift"
+msgstr "Aktivera utförlig utskrift."
#: common.opt:2892
-#, fuzzy
-#| msgid "Display the compiler's version"
msgid "Display the compiler's version."
-msgstr "Visa kompilatorns version"
+msgstr "Visa kompilatorns version."
#: common.opt:2896
-#, fuzzy
-#| msgid "Suppress warnings"
msgid "Suppress warnings."
-msgstr "Undertryck varningar"
+msgstr "Undertryck varningar."
#: common.opt:2906
-#, fuzzy
-#| msgid "Create a shared library"
msgid "Create a shared library."
-msgstr "Skapa ett delat bibliotek"
+msgstr "Skapa ett delat bibliotek."
#: common.opt:2951
#, fuzzy
@@ -18940,16 +14885,12 @@ msgid "Don't create a position independent executable."
msgstr "Skapa ett positionsoberoende körbart program"
#: common.opt:2955
-#, fuzzy
-#| msgid "Create a position independent executable"
msgid "Create a position independent executable."
-msgstr "Skapa ett positionsoberoende körbart program"
+msgstr "Skapa ett positionsoberoende körbart program."
#: common.opt:2962
-#, fuzzy
-#| msgid "Use caller save register across calls if possible"
msgid "Use caller save register across calls if possible."
-msgstr "Använd anroparens sparregister mellan anrop om möjligt"
+msgstr "Använd anroparens sparregister mellan anrop om möjligt."
#: go/gofrontend/expressions.cc:93 c-family/c-common.c:1524 cp/cvt.c:1174
#: cp/cvt.c:1423
@@ -19468,7 +15409,7 @@ msgstr "Det går inte arbetsmängden från %s."
#: bt-load.c:1566
#, gcc-internal-format
msgid "branch target register load optimization is not intended to be run twice"
-msgstr "optimeringen av lastning av grenmålsregister är inte avsedd att köras två gånger"
+msgstr "optimeringen av laddning av grenmålsregister är inte avsedd att köras två gånger"
#: builtins.c:604
#, gcc-internal-format
@@ -20862,7 +16803,7 @@ msgstr "bytekodström: för lång sträng för strängtabellen"
#: data-streamer-in.c:84 data-streamer-in.c:113
#, gcc-internal-format
msgid "bytecode stream: found non-null terminated string"
-msgstr "bytekodström: hittade sträng som inte var null-terminerad"
+msgstr "bytekodström: hittade sträng som inte var nollterminerad"
#: dbgcnt.c:133
#, gcc-internal-format
@@ -32002,42 +27943,42 @@ msgstr "oväntat argument till msp430_select_hwmult_lib: %s"
#: config/msp430/driver-msp430.c:687
#, gcc-internal-format, gfc-internal-format
msgid "unrecognised hwpy field in msp430_mcu_data[%d]: %d"
-msgstr ""
+msgstr "okänt hwpy-fält i msp430_mcu_data[%d]: %d"
#: config/msp430/driver-msp430.c:694
#, gcc-internal-format, gfc-internal-format
msgid "unexpected first argument to msp430_select_hwmult_lib: %s"
-msgstr ""
+msgstr "oväntat första argument till msp430_select_hwmult_lib: %s"
#: config/msp430/driver-msp430.c:698
#, gcc-internal-format
msgid "msp430_select_hwmult_lib needs one or more arguments"
-msgstr ""
+msgstr "msp430_select_hwmult_lib behöver ett eller flera argument"
#: config/msp430/msp430.c:762
#, gcc-internal-format, gfc-internal-format
msgid "MCU '%s' supports %s ISA but -mcpu option is set to %s"
-msgstr ""
+msgstr "MCU â€%s†stödjer %s-ISA men -mcpu-flaggan är satt till %s"
#: config/msp430/msp430.c:768
#, gcc-internal-format, gfc-internal-format
msgid "MCU '%s' does not have hardware multiply support, but -mhwmult is set to %s"
-msgstr ""
+msgstr "MCU â€%s†har inte stöd för hÃ¥rdvarumultiplikation, men -mhwmult är satt till %s"
#: config/msp430/msp430.c:774
#, gcc-internal-format, gfc-internal-format
msgid "MCU '%s' supports %s hardware multiply, but -mhwmult is set to 16-bit"
-msgstr ""
+msgstr "MCU â€%s†stödjer %s-hÃ¥rvarumultiplikation, men -mhwmult är satt till 16-bitars"
#: config/msp430/msp430.c:777
#, gcc-internal-format, gfc-internal-format
msgid "MCU '%s' supports %s hardware multiply, but -mhwmult is set to 32-bit"
-msgstr ""
+msgstr "MCU â€%s†stödjer %s-hÃ¥rdvarumultiplikation, men -mhwmult är satt till 32-bitars"
#: config/msp430/msp430.c:780
#, gcc-internal-format, gfc-internal-format
msgid "MCU '%s' supports %s hardware multiply, but -mhwmult is set to f5series"
-msgstr ""
+msgstr "MCU â€%s†stödjer %s-hÃ¥rdvarumultiplikation, men -mhwmult är satt till f5series"
#: config/msp430/msp430.c:796
#, gcc-internal-format, gfc-internal-format
@@ -32045,6 +27986,8 @@ msgid ""
"Unrecognised MCU name '%s', assuming that it is just a MSP430 with no hardware multiply.\n"
"Use the -mcpu and -mhwmult options to set these explicitly."
msgstr ""
+"Okänt MCU-namn â€%sâ€, antar att det bara är en MSP430 utan hÃ¥rdvarumultiplikation.\n"
+"Använd flaggorna -mcpu och -mhwmult för att sätta dessa explicit."
#: config/msp430/msp430.c:800
#, gcc-internal-format, gfc-internal-format
@@ -32052,6 +27995,8 @@ msgid ""
"Unrecognised MCU name '%s', assuming that it has no hardware multiply.\n"
"Use the -mhwmult option to set this explicitly."
msgstr ""
+"Okänt MCU-namn â€%sâ€, antar att den inte har hÃ¥rdvarumultiplikation.\n"
+"använd flaggan -mhwmult för att sätta detta explicit."
#: config/msp430/msp430.c:810
#, gcc-internal-format, gfc-internal-format
@@ -32059,6 +28004,8 @@ msgid ""
"Unrecognised MCU name '%s', assuming that it just supports the MSP430 ISA.\n"
"Use the -mcpu option to set the ISA explicitly."
msgstr ""
+"Okänt MCU-namn â€%sâ€, amtar att den bara stödjer ISA:n MSP430.\n"
+"Använd flaggan -mcpu för att sätta ISA:n explicit."
#: config/msp430/msp430.c:817
#, fuzzy, gcc-internal-format, gfc-internal-format
@@ -32183,7 +28130,7 @@ msgstr "stödjer inte -fpic"
#: config/nios2/nios2.c:560
#, gcc-internal-format
msgid "Unknown form for stack limit expression"
-msgstr ""
+msgstr "Okänd form på stackgränsuttryck"
#: config/nios2/nios2.c:1167
#, gcc-internal-format
@@ -32228,7 +28175,7 @@ msgstr "positionsoberoende kod behöver Linux-ABI:et"
#: config/nios2/nios2.c:1350
#, gcc-internal-format
msgid "PIC support for -fstack-limit-symbol"
-msgstr ""
+msgstr "PIC-stöd för -fstack-limit-symbol"
#: config/nios2/nios2.c:1376
#, fuzzy, gcc-internal-format
@@ -32283,7 +28230,7 @@ msgstr "det omedelbara argumentet måste vara en 4-bitars omedelbar"
#: config/nios2/nios2.c:3517
#, gcc-internal-format
msgid "The ENI instruction operand must be either 0 or 1"
-msgstr ""
+msgstr "Operanden till instruktionen ENI måste vara antingen 0 eller 1"
#: config/nios2/nios2.c:3545
#, fuzzy, gcc-internal-format, gfc-internal-format
@@ -32371,12 +28318,12 @@ msgstr "attributet %qE kräver returtypen void"
#: config/nvptx/nvptx.c:4142
#, gcc-internal-format, gfc-internal-format
msgid "using vector_length (%d), ignoring %d"
-msgstr ""
+msgstr "använder vector_length (%d), ignorerar %d"
#: config/nvptx/nvptx.c:4153
#, gcc-internal-format, gfc-internal-format
msgid "using num_workers (%d), ignoring %d"
-msgstr ""
+msgstr "använder num_workers (%d), ignorerar %d"
#: config/pa/pa.c:501
#, gcc-internal-format
@@ -32714,17 +28661,17 @@ msgstr "-mdirect-move behöver -mvsx"
#: config/rs6000/rs6000.c:4234
#, gcc-internal-format
msgid "-mefficient-unaligned-vsx requires -mallow-movmisalign"
-msgstr ""
+msgstr "-mefficient-unaligned-vsx behöver -mallow-movmisalign"
#: config/rs6000/rs6000.c:4244
#, gcc-internal-format
msgid "-mfloat128 requires VSX support"
-msgstr ""
+msgstr "-mfloat128 behöver VSX-stöd"
#: config/rs6000/rs6000.c:4258
#, gcc-internal-format
msgid "-mfloat128-hardware requires full ISA 3.0 support"
-msgstr ""
+msgstr "-mfloat128-hardware behöver fullt ISA 3.0-stöd"
#: config/rs6000/rs6000.c:4325
#, gcc-internal-format, gfc-internal-format
@@ -33359,7 +29306,7 @@ msgstr "använd __builtin_rx_mvtc (0, ...) för att skriva godtyckliga värden t
#: config/rx/rx.c:2621
#, gcc-internal-format
msgid "-mno-allow-string-insns forbids the generation of the RMPA instruction"
-msgstr ""
+msgstr "-mno-allow-string-insns förbjuder genereringen av instruktionen RMPA"
#: config/rx/rx.c:2768
#, gcc-internal-format
@@ -33369,22 +29316,22 @@ msgstr "RX FPU-instruktioner stödjer inte NaN:er och oändligheter"
#: config/s390/s390-c.c:451
#, gcc-internal-format
msgid "Builtin vec_step can only be used on vector types."
-msgstr ""
+msgstr "Inbyggd vec_step kan endast användas på vektortyper."
#: config/s390/s390-c.c:671
#, gcc-internal-format
msgid "valid values for builtin %qF argument %d are 64, 128, 256, 512, 1024, 2048, and 4096"
-msgstr ""
+msgstr "giltiga värden för till inbyggd %qF argument %d är 64, 128, 256, 512, 1024, 2048 och 4096"
#: config/s390/s390-c.c:841
#, gcc-internal-format
msgid "Builtin %qF is for GCC internal use only."
-msgstr ""
+msgstr "Inbyggd %qF är endast för GCC:s interna användning."
#: config/s390/s390-c.c:858
#, gcc-internal-format
msgid "Mismatch in number of arguments for builtin %qF. Expected: %d got %d"
-msgstr ""
+msgstr "Fel i antalet argument till inbyggd %qF. Förväntades: %d fick %d"
#: config/s390/s390-c.c:907
#, fuzzy, gcc-internal-format
@@ -33419,12 +29366,12 @@ msgstr "konstant argument utanför intervallet för %qs"
#: config/s390/s390.c:800
#, gcc-internal-format
msgid "Builtin %qF is not supported without -mhtm (default with -march=zEC12 and higher)."
-msgstr ""
+msgstr "Inbyggd %qF stödjs inte utan -mhtm (standard med -march=zEC12 och högre)."
#: config/s390/s390.c:806
#, gcc-internal-format
msgid "Builtin %qF is not supported without -mvx (default with -march=z13 and higher)."
-msgstr ""
+msgstr "Inbyggd %qF stödjs inte utan -mvx (standard med -march=z13 och högre)."
#: config/s390/s390.c:826
#, fuzzy, gcc-internal-format
@@ -33483,12 +29430,12 @@ msgstr "%qs använder dynamisk stackallokering"
#: config/s390/s390.c:13657
#, 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 ""
+msgstr "%sarch=%s%s bör undvikas och kommer tas bort i framtida utgåvor; använd åtminstone %sarch=z900%s"
#: config/s390/s390.c:13669
#, 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 ""
+msgstr "%stune=%s%s bör undvikas och kommer tas bort i framtida utgåvor; använd åtminstone %stune=z900%s"
#: config/s390/s390.c:13681
#, gcc-internal-format, gfc-internal-format
@@ -33509,7 +29456,7 @@ msgstr "hårdvaruinstruktioner för decimala flyttal är inte tillgängliga på
#: config/s390/s390.c:13704
#, gcc-internal-format
msgid "hardware vector support not available with -msoft-float"
-msgstr ""
+msgstr "stöd för hårdvaruvektorer är inte tillgängligt med -msoft-float"
#: config/s390/s390.c:13732
#, gcc-internal-format, gfc-internal-format
@@ -33979,7 +29926,7 @@ msgstr "-fexcess-precision=standard för Ada"
#: ada/gcc-interface/misc.c:277
#, gcc-internal-format
msgid "STABS debugging information for Ada is obsolete and not supported anymore"
-msgstr ""
+msgstr "STABS-felsökningsinformation för Ada är föråldrat och stödjs inte längre"
#: ada/gcc-interface/trans.c:1517
#, gcc-internal-format
@@ -33999,7 +29946,7 @@ msgstr "underprogrammet %q+F är inte markerat Inline"
#: ada/gcc-interface/trans.c:6222
#, gcc-internal-format
msgid "out-of-bounds access may be optimized away"
-msgstr ""
+msgstr "åtkomst utanför gränserna kan optimeras bort"
#: ada/gcc-interface/trans.c:6224
#, gcc-internal-format
@@ -35243,12 +31190,12 @@ msgstr "parameter %q+D har endast en framåtdeklaration"
#: c/c-decl.c:7037
#, gcc-internal-format
msgid "%<%s %E%> declared inside parameter list will not be visible outside of this definition or declaration"
-msgstr ""
+msgstr "%<%s %E%> deklarerad inuti parameterlista kommer inte vara synlig utanför denna definition eller deklaration"
#: c/c-decl.c:7043
#, gcc-internal-format, gfc-internal-format
msgid "anonymous %s declared inside parameter list will not be visible outside of this definition or declaration"
-msgstr ""
+msgstr "anonym %s deklarerad inuti parameterlista kommer inte vara synlig utanför denna definition eller deklaration"
#: c/c-decl.c:7142
#, gcc-internal-format
@@ -35313,12 +31260,12 @@ msgstr "dubblerad medlem %q+D"
#: c/c-decl.c:7545
#, gcc-internal-format
msgid "empty struct has size 0 in C, size 1 in C++"
-msgstr ""
+msgstr "tom post har storlek 0 i C, storlek 1 i C++"
#: c/c-decl.c:7548
#, gcc-internal-format
msgid "empty union has size 0 in C, size 1 in C++"
-msgstr ""
+msgstr "tom union har storlek 0 i C, storlek 1 i C++"
#: c/c-decl.c:7634
#, gcc-internal-format
@@ -35794,7 +31741,7 @@ msgstr "identifieraren %qE står i konflikt med ett nyckelord i C++"
#: c/c-parser.c:928 cp/parser.c:2786
#, gcc-internal-format
msgid "version control conflict marker in file"
-msgstr ""
+msgstr "markör för versionshanteringskonflikt i filen"
#: c/c-parser.c:1086 cp/parser.c:26844
#, gcc-internal-format
@@ -35819,17 +31766,17 @@ msgstr "okänt typnamn %qE"
#: c/c-parser.c:1663
#, gcc-internal-format
msgid "use %<struct%> keyword to refer to the type"
-msgstr ""
+msgstr "använd nyckelordet %<struct%> för att referera till typen"
#: c/c-parser.c:1665
#, gcc-internal-format
msgid "use %<union%> keyword to refer to the type"
-msgstr ""
+msgstr "använd nyckelordet %<union%> för att referera till typen"
#: c/c-parser.c:1667
#, gcc-internal-format
msgid "use %<enum%> keyword to refer to the type"
-msgstr ""
+msgstr "använd nyckelordet %<enum%> för att referera till typen"
#: c/c-parser.c:1687 c/c-parser.c:10141 c/c-parser.c:15125 c/c-parser.c:16010
#: cp/parser.c:33903 cp/parser.c:34795 cp/parser.c:37305
@@ -36595,7 +32542,7 @@ msgstr "%<catch%> förväntades"
#: c/c-parser.c:11047 cp/parser.c:30652
#, gcc-internal-format
msgid "too many %<if%> clauses with %qs modifier"
-msgstr ""
+msgstr "för många %<if%>-klausuler med %qs-modifierare"
#: c/c-parser.c:11054 cp/parser.c:30659
#, fuzzy, gcc-internal-format
@@ -36612,7 +32559,7 @@ msgstr "för många %qs-klausuler"
#: c/c-parser.c:11062 cp/parser.c:30667
#, gcc-internal-format
msgid "if any %<if%> clause has modifier, then all %<if%> clauses have to use modifier"
-msgstr ""
+msgstr "om någon %<if%>-klausul har en modifierare måste alla %<if%>-klausuler använda modifierare"
#: c/c-parser.c:11136 c/c-parser.c:11180 c/c-parser.c:11224 c/c-parser.c:11268
#: c/c-parser.c:11312 c/c-parser.c:11356 c/c-parser.c:11460 c/c-parser.c:11586
@@ -36711,7 +32658,7 @@ msgstr "%<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%>, %<min%> eller
#: c/c-parser.c:12003 cp/parser.c:31171
#, gcc-internal-format
msgid "both %<monotonic%> and %<nonmonotonic%> modifiers specified"
-msgstr ""
+msgstr "både %<monotonic%>- och %<nonmonotonic%>-modifierare angivna"
#: c/c-parser.c:12056 cp/parser.c:31187
#, gcc-internal-format
@@ -36811,7 +32758,7 @@ msgstr "%<#pragma omp%>-klausul förväntades"
#: c/c-parser.c:13520 cp/parser.c:35090
#, gcc-internal-format
msgid "no valid clauses specified in %<#pragma acc declare%>"
-msgstr ""
+msgstr "inga giltiga klausuler angivna i %<#pragma acc declare%>"
#: c/c-parser.c:13530 cp/parser.c:35100
#, fuzzy, gcc-internal-format
@@ -36822,7 +32769,7 @@ msgstr "omdeklaration av %<pragma omp declare reduction%>"
#: c/c-parser.c:13554 cp/parser.c:35124
#, gcc-internal-format
msgid "%qD must be a global variable in%<#pragma acc declare link%>"
-msgstr ""
+msgstr "%qD måste vara en global variabel i %<#pragma acc declare link%>"
#: c/c-parser.c:13565 cp/parser.c:35135
#, fuzzy, gcc-internal-format
@@ -36845,7 +32792,7 @@ msgstr "ogiltig användning av etiketten %q+D i %<_Cilk_spawn%>"
#: c/c-parser.c:13592 cp/parser.c:35162
#, gcc-internal-format
msgid "variable %qD used more than once with %<#pragma acc declare%>"
-msgstr ""
+msgstr "variabeln %qD använd mer än en gång med %<#pragma acc declare%>"
#: c/c-parser.c:13678 cp/parser.c:35245
#, gcc-internal-format
@@ -36882,12 +32829,12 @@ msgstr "en funktion förväntades"
#: c/c-parser.c:13968
#, gcc-internal-format
msgid "%<#pragma acc routine%> %s"
-msgstr ""
+msgstr "%<#pragma acc routine%> %s"
#: c/c-parser.c:13975 cp/parser.c:36565
#, gcc-internal-format
msgid "%<#pragma acc routine%> already applied to %D"
-msgstr ""
+msgstr "%<#pragma acc routine%> redan använd på %D"
#: c/c-parser.c:13978 cp/parser.c:36572
#, fuzzy, gcc-internal-format
@@ -36924,7 +32871,7 @@ msgstr "%<(%> eller filslut förväntades"
#: c/c-parser.c:14601 cp/parser.c:33421
#, gcc-internal-format
msgid "%<ordered%> clause parameter is less than %<collapse%>"
-msgstr ""
+msgstr "%<ordered%>-klausulparameter är mindre än %<collapse%>"
#: c/c-parser.c:14612 cp/parser.c:33432
#, fuzzy, gcc-internal-format
@@ -37083,7 +33030,7 @@ msgstr "%<#pragma omp end declare target%> utan en motsvarande %<#pragma omp dec
#: c/c-parser.c:16487 cp/parser.c:35711
#, gcc-internal-format
msgid "%qD specified both in declare target %<link%> and %<to%> clauses"
-msgstr ""
+msgstr "%qD angivet både i deklarationsmålets %<link%>- och %<to%>-klausuler"
#: c/c-parser.c:16525 cp/parser.c:35755
#, gcc-internal-format
@@ -37363,7 +33310,7 @@ msgstr "%qT har ingen medlem med namnet %qE"
#: c/c-typeck.c:2357
#, gcc-internal-format
msgid "accessing a member %qE of an atomic structure %qE"
-msgstr ""
+msgstr "använder en medlem %qE av en atomär struktur %qE"
#: c/c-typeck.c:2360
#, fuzzy, gcc-internal-format
@@ -37374,7 +33321,7 @@ msgstr "kan inte fånga medlemmen %qD i anonym union"
#: c/c-typeck.c:2420
#, gcc-internal-format
msgid "%qE is a pointer; did you mean to use %<->%>?"
-msgstr ""
+msgstr "%qE är en pekare; tänkte du använda %<->%>?"
#: c/c-typeck.c:2426
#, gcc-internal-format
@@ -38378,7 +34325,7 @@ msgstr "jämföra flyttal med == eller != är osäkert"
#: c/c-typeck.c:11091 c/c-typeck.c:11116 cp/typeck.c:4509 cp/typeck.c:4553
#, gcc-internal-format
msgid "nonnull argument %qD compared to NULL"
-msgstr ""
+msgstr "icke-null-argument %qD jämfört med NULL"
#: c/c-typeck.c:11099 c/c-typeck.c:11124
#, gcc-internal-format
@@ -38597,7 +34544,7 @@ msgstr "%qE måste vara %<threadprivate%> för %<copyin%>"
#: c/c-typeck.c:12807 cp/semantics.c:5811
#, gcc-internal-format
msgid "modifier should not be specified in %<linear%> clause on %<simd%> or %<for%> constructs"
-msgstr ""
+msgstr "modifierare skall inte anges i %<linear%>-klausul på %<simd%>- eller %<for%>-konstruktioner"
#: c/c-typeck.c:12815
#, gcc-internal-format
@@ -38725,7 +34672,7 @@ msgstr "%qE i %<aligned%>-klausul är varken en pekare eller en vektor"
#: c/c-typeck.c:13324 cp/semantics.c:6216
#, gcc-internal-format
msgid "%<nonmonotonic%> modifier specified for %qs schedule kind"
-msgstr ""
+msgstr "%<nonmonotonic%>-modifierare angiven för schemaläggningssort %qs"
#: c/c-typeck.c:13355 cp/semantics.c:6975
#, gcc-internal-format
@@ -38740,22 +34687,22 @@ msgstr "%qE är förutbestämd som %qs för %qs"
#: c/c-typeck.c:13425 cp/semantics.c:7057
#, gcc-internal-format
msgid "%<simdlen%> clause value is bigger than %<safelen%> clause value"
-msgstr ""
+msgstr "%<simdlen%>-klausulvärde är större än %<safelen%>-klausulvärde"
#: c/c-typeck.c:13437 cp/semantics.c:7070
#, gcc-internal-format
msgid "%<nonmonotonic%> schedule modifier specified together with %<ordered%> clause"
-msgstr ""
+msgstr "%<nonmonotonic%>-schemaläggningsmodiferare angiven tillsammans med %<ordered%>-klausul"
#: c/c-typeck.c:13455 cp/semantics.c:7037
#, gcc-internal-format
msgid "%<linear%> clause step is a parameter %qD not specified in %<uniform%> clause"
-msgstr ""
+msgstr "%<linear%>-klausulsteg är en parameter %qD inte angiven i %<uniform%>-klausul"
#: c/c-typeck.c:13583
#, gcc-internal-format
msgid "cannot use %<va_arg%> with reverse storage order"
-msgstr ""
+msgstr "kan inte använda %<va_arg%> med omvänd lagringsordning"
#: c/c-typeck.c:13588
#, fuzzy, gcc-internal-format
@@ -39038,7 +34985,7 @@ msgstr "jämförelse mellan %q#T och %q#T"
#: cp/call.c:5953
#, gcc-internal-format
msgid "exception cleanup for this placement new selects non-placement operator delete"
-msgstr ""
+msgstr "undantagsuppstädning för denna placerande new väljer icke-placeringsoperatorn delete"
#: cp/call.c:5956
#, gcc-internal-format
@@ -39145,7 +35092,7 @@ msgstr "att konvertera till %qT från initierarlista skulle använda den explici
#: cp/call.c:6374
#, gcc-internal-format
msgid "in C++11 and above a default constructor can be explicit"
-msgstr ""
+msgstr "i C++11 och senare kan en standardkonstruerare vara explicit"
#: cp/call.c:6607
#, gcc-internal-format
@@ -40264,17 +36211,17 @@ msgstr "try-satser är inte tillåtna inuti slingor markerade med #pragma simd"
#: cp/cp-gimplify.c:1343
#, gcc-internal-format
msgid "throw will always call terminate()"
-msgstr ""
+msgstr "throw kommer alltid anropa terminate()"
#: cp/cp-gimplify.c:1346
#, gcc-internal-format
msgid "in C++11 destructors default to noexcept"
-msgstr ""
+msgstr "i C++11 är standard för destruerare noexcept"
#: cp/cp-gimplify.c:1357
#, gcc-internal-format
msgid "in C++11 this throw will terminate because destructors default to noexcept"
-msgstr ""
+msgstr "i C++11 kommer denna throw att avsluta eftersom standard för destruerare är noexcept"
#: cp/cvt.c:89
#, gcc-internal-format
@@ -40967,7 +36914,7 @@ msgstr " går in i OpenMP-strukturerat block"
#: cp/decl.c:3098 cp/decl.c:3216
#, gcc-internal-format
msgid " enters synchronized or atomic statement"
-msgstr ""
+msgstr " går in i synkroniserad eller atomär sats"
#: cp/decl.c:3201
#, fuzzy, gcc-internal-format
@@ -41738,7 +37685,7 @@ msgstr "automatisk variabel %qE kan inte vara %<threadprivate%>"
#: cp/decl.c:8446
#, gcc-internal-format
msgid "concept must have type %<bool%>"
-msgstr ""
+msgstr "concept måste ha typen %<bool%>"
#: cp/decl.c:8559
#, gcc-internal-format
@@ -42395,7 +38342,7 @@ msgstr "typedef deklarerad %<auto%>"
#: cp/decl.c:10661
#, gcc-internal-format
msgid "requires-clause on typedef"
-msgstr ""
+msgstr "requires-klausul på typedef"
#: cp/decl.c:10669
#, gcc-internal-format
@@ -42440,7 +38387,7 @@ msgstr "ogiltiga kvalificerare på typ som inte är medlemsfunktion"
#: cp/decl.c:10857
#, gcc-internal-format
msgid "requires-clause on type-id"
-msgstr ""
+msgstr "requires-klausul på type-id"
#: cp/decl.c:10866
#, gcc-internal-format
@@ -43874,17 +39821,17 @@ msgstr "oinitierad const-medlem i basen %q#T till %q#T"
#: cp/init.c:2457
#, 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 ""
+msgstr "placerande new konstruerar ett objekt av typen %<%T [%wu]%> och storleken %qwu i en region av typen %qT och storleken %qwi"
#: cp/init.c:2469
#, 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 ""
+msgstr "placerande new konstruerar en vektor av objekt av typen %qT och storleken %qwu i en region av typen %qT och storleken %qwi"
#: cp/init.c:2480
#, 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 ""
+msgstr "placerande new konstruerar ett objekt av typen %qT och storleken %qwu i en region av typen %qT och storleken %qwi"
#: cp/init.c:2594
#, gcc-internal-format
@@ -44582,7 +40529,7 @@ msgstr "identifieraren %qE är ett nyckelord i C++11"
#: cp/parser.c:1311 cp/parser.c:1324
#, gcc-internal-format
msgid "LEXER_DEBUGGING_ENABLED_P is not set to true"
-msgstr ""
+msgstr "LEXER_DEBUGGING_ENABLED_P är inte satt till true"
#: cp/parser.c:1349 cp/parser.c:35541
#, gcc-internal-format
@@ -45478,7 +41425,7 @@ msgstr "ogiltig mallparameter som inte är en typ"
#: cp/parser.c:14335
#, gcc-internal-format
msgid "variadic constraint introduced without %<...%>"
-msgstr ""
+msgstr "variadisk begränsning introducerad utan %<...%>"
#: cp/parser.c:14399
#, fuzzy, gcc-internal-format
@@ -46128,7 +42075,7 @@ msgstr "attributet %qE ignoreras eftersom det står i konflikt med attributet %q
#: cp/parser.c:23938
#, gcc-internal-format
msgid "attribute deprecated can appear at most once in an attribute-list"
-msgstr ""
+msgstr "attributet deprecated kan förekomma högst en gång i en attributlista"
#: cp/parser.c:24224
#, fuzzy, gcc-internal-format
@@ -46614,7 +42561,7 @@ msgstr "%<#pragma cilk grainsize%> måste vara inuti en funktion"
#: cp/parser.c:36766
#, gcc-internal-format
msgid "atomic_cancel"
-msgstr ""
+msgstr "atomic_cancel"
#: cp/parser.c:36809 cp/semantics.c:8516
#, gcc-internal-format
@@ -47536,7 +43483,7 @@ msgstr "mallinstansieringsdjupet överskrider maxvärdet på %d (använd -ftempl
#: cp/pt.c:10641
#, gcc-internal-format
msgid "fold of empty expansion over %O"
-msgstr ""
+msgstr "fold över tom expansion över %O"
#: cp/pt.c:10932
#, gcc-internal-format
@@ -47891,7 +43838,7 @@ msgstr "kan inte härleda %qT från %qE"
#: cp/pt.c:23928
#, gcc-internal-format
msgid "placeholder constraints not satisfied"
-msgstr ""
+msgstr "platshållabegränsningar är inte uppfyllt"
#: cp/pt.c:23931
#, fuzzy, gcc-internal-format
@@ -48253,7 +44200,7 @@ msgstr "offsetof inom icke-standardlayouttypen %qT är odefinierat"
#: cp/semantics.c:6627
#, gcc-internal-format
msgid "%<this%> allowed in OpenMP only in %<declare simd%> clauses"
-msgstr ""
+msgstr "%<this%> tillåtet i OpenMP endast i %<declare simd%>-klausuler"
#: cp/semantics.c:5168
#, gcc-internal-format
@@ -48431,7 +44378,7 @@ msgstr "%qD är inte en variabel i %<depend%>-klausul"
#: cp/semantics.c:6746
#, gcc-internal-format
msgid "overloaded function name %qE in clause %qs"
-msgstr ""
+msgstr "överlagrad funktion med namnet %qE i klausulen %qs"
#: cp/semantics.c:6750
#, fuzzy, gcc-internal-format
@@ -48529,7 +44476,7 @@ msgstr "mallargument %qE berör mallparametrar"
#: cp/semantics.c:9291
#, gcc-internal-format
msgid "no unexpanded parameter packs in binary fold"
-msgstr ""
+msgstr "inga oexpanderade parameterpack i binär fold"
#: cp/tree.c:1139
#, gcc-internal-format
@@ -49611,7 +45558,7 @@ msgstr " för följande virtuella funktioner är rena inuti %qT:"
#: cp/typeck2.c:387
#, gcc-internal-format
msgid "\t%#D"
-msgstr ""
+msgstr "\t%#D"
#: cp/typeck2.c:440
#, gcc-internal-format
@@ -49885,7 +45832,7 @@ msgstr "gfc_arith_times(): Felaktig bastyp"
#: fortran/arith.c:745
#, gcc-internal-format
msgid "Integer division truncated to constant %qs at %L"
-msgstr ""
+msgstr "Heltalsdivision havhuggen till konstanten %qs vid %L"
#: fortran/arith.c:791
#, gcc-internal-format
@@ -51157,7 +47104,7 @@ msgstr "För många argument till %s vid %L"
#: fortran/check.c:5634
#, gcc-internal-format
msgid "fe_runtime_error string must be null terminated"
-msgstr ""
+msgstr "fe_runtime_error-sträng måste vara null-terminerad"
#: fortran/check.c:5646
#, fuzzy, gcc-internal-format, gfc-internal-format
@@ -51240,7 +47187,7 @@ msgstr "misslyckades att förenkla delsträngreferens i DATA-sats vid %L"
#: fortran/data.c:170
#, gcc-internal-format, gfc-internal-format
msgid "Unused initialization string at %L because variable has zero length"
-msgstr ""
+msgstr "Oanvänd initieringssträng vid %L för att variabeln har nollängd"
#: fortran/data.c:176
#, fuzzy, gcc-internal-format, gfc-internal-format
@@ -51328,7 +47275,7 @@ msgstr "fördröjd typparameter vid %C"
#: fortran/decl.c:780
#, gcc-internal-format, gfc-internal-format
msgid "Scalar INTEGER expression expected at %L"
-msgstr ""
+msgstr "Skalärt INTEGER-uttryck förväntades vid %L"
#: fortran/decl.c:806
#, gcc-internal-format, gfc-internal-format
@@ -51522,7 +47469,7 @@ msgstr "Vektor med antagen form vid %L"
#: fortran/decl.c:2026
#, gcc-internal-format
msgid "%qs at %C is a redefinition of the declaration in the corresponding interface for MODULE PROCEDURE %qs"
-msgstr ""
+msgstr "%qs vid %C är en omdefinition av deklarationen i motsvarande gränssnitt för MODULE PROCEDURE %qs"
#: fortran/decl.c:2055 fortran/decl.c:6911
#, gcc-internal-format, gfc-internal-format
@@ -51929,7 +47876,7 @@ msgstr "Dubblerad symbol %qs i formell argumentlista vid %C"
#: fortran/decl.c:4844
#, gcc-internal-format, gfc-internal-format
msgid "Mismatch in MODULE PROCEDURE formal argument names (%s/%s) at %C"
-msgstr ""
+msgstr "Formella argumentnamnen till MODULE PROCEDURE stämmer inte (%s/%s) vid %C"
#: fortran/decl.c:4850
#, fuzzy, gcc-internal-format, gfc-internal-format
@@ -53345,7 +49292,7 @@ msgstr "Kod för omallokering av den allokerbara vektorn vid %L kommer läggas t
#: fortran/frontend-passes.c:2693
#, gcc-internal-format
msgid "Scalarization using DIMEN_RANGE unimplemented"
-msgstr ""
+msgstr "Skalärisering med DIMEN_RANGE är oimplementerat"
#: fortran/gfortranspec.c:145
#, gcc-internal-format
@@ -54264,12 +50211,12 @@ msgstr "Formatetikett saknas vid %C"
#: fortran/io.c:1261
#, gcc-internal-format, gfc-internal-format
msgid "IOMSG must be a scalar-default-char-variable at %L"
-msgstr ""
+msgstr "IOMSG måste vara en scalar-default-char-variable vid %L"
#: fortran/io.c:1275
#, gcc-internal-format, gfc-internal-format
msgid "%s requires a scalar-default-char-expr at %L"
-msgstr ""
+msgstr "%s kräver ett scalar-default-char-expr vid %L"
#: fortran/io.c:1298 fortran/io.c:1329 fortran/io.c:1395
#, gcc-internal-format, gfc-internal-format
@@ -55817,7 +51764,7 @@ msgstr "Ogiltiga argument till $!ACC WAIT vid %L"
#: fortran/openmp.c:1484
#, gcc-internal-format, gfc-internal-format
msgid "Variable is USE-associated with $!ACC DECLARE at %L"
-msgstr ""
+msgstr "Variabel i USE-associated med $!ACC DECLARE vid %L"
#: fortran/openmp.c:1492
#, fuzzy, gcc-internal-format, gfc-internal-format
@@ -56556,7 +52503,7 @@ msgstr "PARAMETER-objekt %qs är inte tillåtet vid %L"
#: fortran/openmp.c:4939
#, gcc-internal-format
msgid "Array sections: %qs not allowed in $!ACC DECLARE at %L"
-msgstr ""
+msgstr "Vektorsektioner: %qs är inte tillåtet i $!ACC DECLARE vid %L"
#: fortran/openmp.c:5058
#, gcc-internal-format, gfc-internal-format
@@ -57313,7 +53260,7 @@ msgstr "gfc_range_check() returnerade felaktigt värde"
#: fortran/primary.c:783
#, gcc-internal-format
msgid "Non-significant digits in %qs number at %C, maybe incorrect KIND"
-msgstr ""
+msgstr "Osignifikanta siffror i %qs-tal vid %C, kanske felaktig KIND"
#: fortran/primary.c:875
#, gcc-internal-format, gfc-internal-format
@@ -59207,22 +55154,22 @@ msgstr "Procedurpekarresultat %qs vid %L saknar pekarattributet"
#: fortran/resolve.c:11953
#, gcc-internal-format, gfc-internal-format
msgid "Mismatch in PURE attribute between MODULE PROCEDURE at %L and its interface in %s"
-msgstr ""
+msgstr "PURE-attribute stämmer inte mellan MODULE PROCEDURE vid %L och dess gränssnitt i %s"
#: fortran/resolve.c:11961
#, gcc-internal-format, gfc-internal-format
msgid "Mismatch in ELEMENTAL attribute between MODULE PROCEDURE at %L and its interface in %s"
-msgstr ""
+msgstr "ELEMENTAL-attribut stämmer inte mellan MODULE PROCEDURE vid %L och dess gränssnitt i %s"
#: fortran/resolve.c:11969
#, gcc-internal-format, gfc-internal-format
msgid "Mismatch in RECURSIVE attribute between MODULE PROCEDURE at %L and its interface in %s"
-msgstr ""
+msgstr "RECURSIVE-attribut stämmer inte mellan MODULE PROCEDURE vid %L och dess gränssnitt i %s"
#: fortran/resolve.c:11978
#, gcc-internal-format, gfc-internal-format
msgid "%s between the MODULE PROCEDURE declaration in module %s and the declaration at %L in SUBMODULE %s"
-msgstr ""
+msgstr "%s mellan MODULE PROCEDURE-deklarationen i modulen %s och deklarationen vid %L i SUBMODULE %s"
#: fortran/resolve.c:12063
#, gcc-internal-format
@@ -59942,7 +55889,7 @@ msgstr "Gränsen på %d fortsättningar överskrids i sats vid %C"
#: fortran/scanner.c:1409 fortran/scanner.c:1502
#, gcc-internal-format, gfc-internal-format
msgid "Wrong OpenACC continuation at %C: expected !$ACC, got !$OMP"
-msgstr ""
+msgstr "Felaktig OpenACC-fortsättning vid %C: !$ACC förväntades, fick !$OMP"
#: fortran/scanner.c:1422
#, gcc-internal-format
@@ -60496,6 +56443,8 @@ msgid ""
"%s procedure at %L is already declared as %s procedure. \n"
"F2008: A pointer function assignment is ambiguous if it is the first executable statement after the specification block. Please add any other kind of executable statement before it. FIXME"
msgstr ""
+"%s-proceduren vid %L är redan deklarerad som en %s-procedur. \n"
+"F2008: En tilldelning av funktionspekare är tvetydig om det är dn första exekverbara satsen efter specifikationsblocket. Lägg någon annan sorts exekverbar sats före den. FIXAMIG"
#: fortran/symbol.c:1639
#, gcc-internal-format, gfc-internal-format
@@ -60908,7 +56857,7 @@ msgstr "Returvärdet %qs för funktionen %qs deklarerad vid %L är inte satt"
#: fortran/trans-decl.c:5911
#, gcc-internal-format, gfc-internal-format
msgid "Sorry, $!ACC DECLARE at %L is not allowed in BLOCK construct"
-msgstr ""
+msgstr "Ledsen, $!ACC DECLARE vid %L är inte tillåtet i BLOCK-konstruktion"
#: fortran/trans-expr.c:803
#, gcc-internal-format, gfc-internal-format
@@ -61491,7 +57440,7 @@ msgstr "%q#T deklarerades tidigare här"
#: lto/lto-symtab.c:703
#, gcc-internal-format
msgid "code may be misoptimized unless -fno-strict-aliasing is used"
-msgstr ""
+msgstr "koden kan feloptimeras om inte -fno-strict-aliasing används"
#: lto/lto-symtab.c:789
#, gcc-internal-format
diff --git a/gcc/po/vi.po b/gcc/po/vi.po
index d6cffc9..1055719 100644
--- a/gcc/po/vi.po
+++ b/gcc/po/vi.po
@@ -1,16 +1,16 @@
# Vietnamese translation for GCC.
# Bản dịch tiếng Việt dành cho gcc.
-# Copyright © 2015 Free Software Foundation, Inc.
+# Copyright © 2016 Free Software Foundation, Inc.
# This file is distributed under the same license as the gcc package.
# Clytie Siddall <clytie@riverland.net.au>, 2010.
-# Trần Ngá»c Quân <vnwildman@gmail.com>, 2012-2014, 2015.
+# Trần Ngá»c Quân <vnwildman@gmail.com>, 2012-2014, 2015, 2016.
#
msgid ""
msgstr ""
-"Project-Id-Version: gcc 5.1-b20150208\n"
+"Project-Id-Version: gcc 6.1-b20160131\n"
"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
"POT-Creation-Date: 2016-01-31 15:50+0000\n"
-"PO-Revision-Date: 2015-02-24 15:18+0700\n"
+"PO-Revision-Date: 2016-02-20 14:23+0700\n"
"Last-Translator: Trần Ngá»c Quân <vnwildman@gmail.com>\n"
"Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
"Language: vi\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Poedit 1.5.5\n"
+"X-Generator: Gtranslator 2.91.7\n"
"X-Poedit-SourceCharset: UTF-8\n"
#: cfgrtl.c:2654
@@ -274,29 +274,21 @@ msgid "Options:\n"
msgstr "Tùy chá»n:\n"
#: gcc.c:3384
-#, fuzzy
-#| msgid " -pass-exit-codes Exit with highest error code from a phase\n"
msgid " -pass-exit-codes Exit with highest error code from a phase.\n"
-msgstr " -pass-exit-codes Thoát với mã lỗi cao nhất từ một giai đoạn nào đó\n"
+msgstr " -pass-exit-codes Thoát với mã lỗi cao nhất từ một giai đoạn nào đó.\n"
#: gcc.c:3385
-#, fuzzy
-#| msgid " --help Display this information\n"
msgid " --help Display this information.\n"
-msgstr " --help Hiển thị trợ giúp này\n"
+msgstr " --help Hiển thị trợ giúp này.\n"
#: gcc.c:3386
-#, fuzzy
-#| msgid " --target-help Display target specific command line options\n"
msgid " --target-help Display target specific command line options.\n"
-msgstr " --target-help Hiển thị những tùy chá»n dòng lệnh đặc trưng cho đích\n"
+msgstr " --target-help Hiển thị những tùy chá»n dòng lệnh đặc trưng cho đích.\n"
#: gcc.c:3387
-#, fuzzy
-#| msgid " --help={common|optimizers|params|target|warnings|[^]{joined|separate|undocumented}}[,...]\n"
msgid " --help={common|optimizers|params|target|warnings|[^]{joined|separate|undocumented}}[,...].\n"
msgstr ""
-" --help={common|optimizers|params|target|warnings|[^]{joined|separate|undocumented}}[,…]\n"
+" --help={common|optimizers|params|target|warnings|[^]{joined|separate|undocumented}}[,…].\n"
"tạm dịch:\n"
"help\ttrợ giúp\n"
"common\tchung\n"
@@ -305,284 +297,190 @@ msgstr ""
"warnings\tcảnh báo\n"
"target\tđích\n"
"joined\tnối lại\n"
-"separate\tkhông nối lại\n"
+"separate\tngăn cách\n"
"undocumented\tkhông có tài liệu mô tả\n"
#: gcc.c:3388
-#, fuzzy
-#| msgid " Display specific types of command line options\n"
msgid " Display specific types of command line options.\n"
-msgstr " Hiển thị má»™t số loại tùy chá»n dòng lệnh nào đó\n"
+msgstr " Hiển thị má»™t số loại tùy chá»n dòng lệnh nào đó.\n"
#: gcc.c:3390
-#, fuzzy
-#| msgid " (Use '-v --help' to display command line options of sub-processes)\n"
msgid " (Use '-v --help' to display command line options of sub-processes).\n"
-msgstr " (Hãy sá»­ dụng “-v --help†để hiển thị các tùy chá»n dòng lệnh cá»§a tiến trình con)\n"
+msgstr " (Hãy sá»­ dụng “-v --help†để hiển thị các tùy chá»n dòng lệnh cá»§a tiến trình con).\n"
#: gcc.c:3391
-#, fuzzy
-#| msgid " --version Display compiler version information\n"
msgid " --version Display compiler version information.\n"
-msgstr " --version Hiển thị thông tin vỠphiên bản của bộ biên dịch\n"
+msgstr " --version Hiển thị thông tin vỠphiên bản của bộ biên dịch.\n"
#: gcc.c:3392
-#, fuzzy
-#| msgid " -dumpspecs Display all of the built in spec strings\n"
msgid " -dumpspecs Display all of the built in spec strings.\n"
-msgstr " -dumpspecs Hiển thị tất cả các chuỗi đặc tả dựng sẵn\n"
+msgstr " -dumpspecs Hiển thị tất cả các chuỗi đặc tả dựng sẵn.\n"
#: gcc.c:3393
-#, fuzzy
-#| msgid " -dumpversion Display the version of the compiler\n"
msgid " -dumpversion Display the version of the compiler.\n"
-msgstr " -dumpversion Hiển thị phiên bản của bộ biên dịch\n"
+msgstr " -dumpversion Hiển thị phiên bản của bộ biên dịch.\n"
#: gcc.c:3394
-#, fuzzy
-#| msgid " -dumpmachine Display the compiler's target processor\n"
msgid " -dumpmachine Display the compiler's target processor.\n"
-msgstr " -dumpmachine Hiển thị bộ xử lý đích của bộ biên dịch\n"
+msgstr " -dumpmachine Hiển thị bộ xử lý đích của bộ biên dịch.\n"
#: gcc.c:3395
-#, fuzzy
-#| msgid " -print-search-dirs Display the directories in the compiler's search path\n"
msgid " -print-search-dirs Display the directories in the compiler's search path.\n"
msgstr ""
" -print-search-dirs Hiển thị những thư mục nằm trên đưá»ng dẫn\n"
-" tìm kiếm của bộ biên dịch\n"
+" tìm kiếm của bộ biên dịch.\n"
#: gcc.c:3396
-#, fuzzy
-#| msgid " -print-libgcc-file-name Display the name of the compiler's companion library\n"
msgid " -print-libgcc-file-name Display the name of the compiler's companion library.\n"
-msgstr " -print-libgcc-file-name Hiển thị tên của thư viện bổ trợ của bộ biên dịch\n"
+msgstr " -print-libgcc-file-name Hiển thị tên của thư viện bổ trợ của bộ biên dịch.\n"
#: gcc.c:3397
-#, fuzzy
-#| msgid " -print-file-name=<lib> Display the full path to library <lib>\n"
msgid " -print-file-name=<lib> Display the full path to library <lib>.\n"
-msgstr " -print-file-name=<thư_viện> Hiển thị đưá»ng dẫn đầy đủ đến thư viện này\n"
+msgstr " -print-file-name=<thư_viện> Hiển thị đưá»ng dẫn đầy đủ đến thư viện này.\n"
#: gcc.c:3398
-#, fuzzy
-#| msgid " -print-prog-name=<prog> Display the full path to compiler component <prog>\n"
msgid " -print-prog-name=<prog> Display the full path to compiler component <prog>.\n"
-msgstr " -print-prog-name=<trình> Hiển thị đưá»ng dẫn đầy đủ đến thành phần bá»™ biên dịch này\n"
+msgstr " -print-prog-name=<trình> Hiển thị đưá»ng dẫn đầy đủ đến thành phần bá»™ biên dịch này.\n"
#: gcc.c:3399
-#, fuzzy
-#| msgid ""
-#| " -print-multiarch Display the target's normalized GNU triplet, used as\n"
-#| " a component in the library path\n"
msgid ""
" -print-multiarch Display the target's normalized GNU triplet, used as\n"
" a component in the library path.\n"
msgstr ""
" -print-multiarch Hiển thị bá»™ ba GNU thưá»ng hóa cá»§a đích, được dùng như\n"
-" má»™t thành phần trong đưá»ng dẫn thư viện\n"
+" má»™t thành phần trong đưá»ng dẫn thư viện.\n"
#: gcc.c:3402
-#, fuzzy
-#| msgid " -print-multi-directory Display the root directory for versions of libgcc\n"
msgid " -print-multi-directory Display the root directory for versions of libgcc.\n"
-msgstr " -print-multi-directory Hiển thị thư mục gốc cho các phiên bản thư viện libgcc\n"
+msgstr " -print-multi-directory Hiển thị thư mục gốc cho các phiên bản thư viện libgcc.\n"
#: gcc.c:3403
-#, fuzzy
-#| msgid ""
-#| " -print-multi-lib Display the mapping between command line options and\n"
-#| " multiple library search directories\n"
msgid ""
" -print-multi-lib Display the mapping between command line options and\n"
" multiple library search directories.\n"
msgstr ""
" -print-multi-lib Hiển thị sá»± ánh xạ giữa các tùy chá»n dòng lệnh\n"
-" và nhiá»u thư mục tìm kiếm thư viện\n"
+" và nhiá»u thư mục tìm kiếm thư viện.\n"
#: gcc.c:3406
-#, fuzzy
-#| msgid " -print-multi-os-directory Display the relative path to OS libraries\n"
msgid " -print-multi-os-directory Display the relative path to OS libraries.\n"
-msgstr " -print-multi-os-directory Hiển thị đưá»ng dẫn tương đối đến các thư mục HÄH\n"
+msgstr " -print-multi-os-directory Hiển thị đưá»ng dẫn tương đối đến các thư mục HÄH.\n"
#: gcc.c:3407
-#, fuzzy
-#| msgid " -print-sysroot Display the target libraries directory\n"
msgid " -print-sysroot Display the target libraries directory.\n"
-msgstr " -print-sysroot Hiển thị thư mục chứa các thư viện đích\n"
+msgstr " -print-sysroot Hiển thị thư mục chứa các thư viện đích.\n"
#: gcc.c:3408
-#, fuzzy
-#| msgid " -print-sysroot-headers-suffix Display the sysroot suffix used to find headers\n"
msgid " -print-sysroot-headers-suffix Display the sysroot suffix used to find headers.\n"
-msgstr " -print-sysroot-headers-suffix Hiển thị hậu tố sysroot dùng để tìm phần đầu\n"
+msgstr " -print-sysroot-headers-suffix Hiển thị hậu tố sysroot dùng để tìm phần đầu.\n"
#: gcc.c:3409
-#, fuzzy
-#| msgid " -Wa,<options> Pass comma-separated <options> on to the assembler\n"
msgid " -Wa,<options> Pass comma-separated <options> on to the assembler.\n"
-msgstr ""
-" -Wa,<tuỳ_chá»n>\n"
-" Chuyển cho chương trình dịch mã số các tùy chá»n này định giá»›i bằng dấu phẩy\n"
+msgstr " -Wa,<các_tuỳ_chá»n> Chuyển cho chương trình assembler các tùy chá»n này định giá»›i bằng dấu phẩy.\n"
#: gcc.c:3410
-#, fuzzy
-#| msgid " -Wp,<options> Pass comma-separated <options> on to the preprocessor\n"
msgid " -Wp,<options> Pass comma-separated <options> on to the preprocessor.\n"
msgstr ""
-" -Wp,<tuỳ_chá»n> Chuyển cho bá»™ tiá»n xá»­ lý \n"
-" các tùy chá»n này định giá»›i bằng dấu phẩy\n"
+" -Wp,<các_tuỳ_chá»n> Chuyển cho bá»™ tiá»n xá»­ lý \n"
+" các tùy chá»n này định giá»›i bằng dấu phẩy.\n"
#: gcc.c:3411
-#, fuzzy
-#| msgid " -Wl,<options> Pass comma-separated <options> on to the linker\n"
msgid " -Wl,<options> Pass comma-separated <options> on to the linker.\n"
msgstr ""
-" -Wl,<tuỳ_chá»n> Chuyển cho bá»™ liên kết các tùy chá»n này\n"
-" định giới bằng dấu phẩy\n"
+" -Wl,<các_tuỳ_chá»n> Chuyển cho bá»™ liên kết <các tùy chá»n> này\n"
+" định giới bằng dấu phẩy.\n"
#: gcc.c:3412
-#, fuzzy
-#| msgid " -Xassembler <arg> Pass <arg> on to the assembler\n"
msgid " -Xassembler <arg> Pass <arg> on to the assembler.\n"
-msgstr " -Xassembler <đối_số> Chuyển đối số này cho chương trình dịch mã số\n"
+msgstr " -Xassembler <đối_số> Chuyển <đối số> này cho chương trình assembler.\n"
#: gcc.c:3413
-#, fuzzy
-#| msgid " -Xpreprocessor <arg> Pass <arg> on to the preprocessor\n"
msgid " -Xpreprocessor <arg> Pass <arg> on to the preprocessor.\n"
-msgstr " -Xpreprocessor <đối_số> Chuyển đối số này cho bá»™ tiá»n xá»­ lý\n"
+msgstr " -Xpreprocessor <đối_số> Chuyển đối số này cho bá»™ tiá»n xá»­ lý.\n"
#: gcc.c:3414
-#, fuzzy
-#| msgid " -Xlinker <arg> Pass <arg> on to the linker\n"
msgid " -Xlinker <arg> Pass <arg> on to the linker.\n"
-msgstr " -Xlinker <đối_số> Chuyển đối số này cho bộ liên kết\n"
+msgstr " -Xlinker <đối_số> Chuyển đối số này cho bộ liên kết.\n"
#: gcc.c:3415
-#, fuzzy
-#| msgid " -save-temps Do not delete intermediate files\n"
msgid " -save-temps Do not delete intermediate files.\n"
-msgstr " -save-temps Äừng xóa bá» tập tin trung gian\n"
+msgstr " -save-temps Äừng xóa bá» tập tin trung gian.\n"
#: gcc.c:3416
-#, fuzzy
-#| msgid " -save-temps=<arg> Do not delete intermediate files\n"
msgid " -save-temps=<arg> Do not delete intermediate files.\n"
-msgstr " -save-temps=<đối_số> Äừng xóa bá» tập tin trung gian\n"
+msgstr " -save-temps=<đối_số> Äừng xóa bá» tập tin trung gian.\n"
#: gcc.c:3417
-#, fuzzy
-#| msgid ""
-#| " -no-canonical-prefixes Do not canonicalize paths when building relative\n"
-#| " prefixes to other gcc components\n"
msgid ""
" -no-canonical-prefixes Do not canonicalize paths when building relative\n"
" prefixes to other gcc components.\n"
msgstr ""
" -no-canonical-prefixes Äừng làm cho đưá»ng dẫn theo đúng quy tắc khi biên dịch\n"
-" tiá»n tố tương ứng vá»›i thành phần gcc khác\n"
+" tiá»n tố tương ứng vá»›i thành phần gcc khác.\n"
#: gcc.c:3420
-#, fuzzy
-#| msgid " -pipe Use pipes rather than intermediate files\n"
msgid " -pipe Use pipes rather than intermediate files.\n"
-msgstr " -pipe Dùng ống dẫn thay cho tập tin trung gian\n"
+msgstr " -pipe Dùng ống dẫn thay cho tập tin trung gian.\n"
#: gcc.c:3421
-#, fuzzy
-#| msgid " -time Time the execution of each subprocess\n"
msgid " -time Time the execution of each subprocess.\n"
-msgstr " -time Äếm thá»i gian chạy má»—i tiến trình con\n"
+msgstr " -time Äếm thá»i gian chạy má»—i tiến trình con.\n"
#: gcc.c:3422
-#, fuzzy
-#| msgid " -specs=<file> Override built-in specs with the contents of <file>\n"
msgid " -specs=<file> Override built-in specs with the contents of <file>.\n"
-msgstr " -specs=<tập-tin> Ghi đè lên đặc tả dựng sẵn bằng nội dung của tập tin này\n"
+msgstr " -specs=<tập-tin> Ghi đè lên đặc tả dựng sẵn bằng nội dung của <tập tin> này.\n"
#: gcc.c:3423
-#, fuzzy
-#| msgid " -std=<standard> Assume that the input sources are for <standard>\n"
msgid " -std=<standard> Assume that the input sources are for <standard>.\n"
-msgstr " -std=<tiêu_chuẩn> Coi rằng các nguồn đầu vào là theo tiêu chuẩn này\n"
+msgstr " -std=<tiêu_chuẩn> Coi rằng các nguồn đầu vào là theo <tiêu chuẩn> này.\n"
#: gcc.c:3424
-#, fuzzy
-#| msgid ""
-#| " --sysroot=<directory> Use <directory> as the root directory for headers\n"
-#| " and libraries\n"
msgid ""
" --sysroot=<directory> Use <directory> as the root directory for headers\n"
" and libraries.\n"
msgstr ""
-" --sysroot=<thư_mục> Dùng thư mục này làm thư mục gốc\n"
-" cho các phần đầu và thư viện\n"
+" --sysroot=<thư_mục> Dùng <thư mục> này làm thư mục gốc\n"
+" cho các phần đầu và thư viện.\n"
#: gcc.c:3427
-#, fuzzy
-#| msgid " -B <directory> Add <directory> to the compiler's search paths\n"
msgid " -B <directory> Add <directory> to the compiler's search paths.\n"
-msgstr " -B <thư_mục> Thêm <thư_mục> này vào các đưá»ng dẫn tìm kiếm cá»§a bá»™ biên dịch\n"
+msgstr " -B <thư_mục> Thêm <thư_mục> này vào các đưá»ng dẫn tìm kiếm cá»§a bá»™ biên dịch.\n"
#: gcc.c:3428
-#, fuzzy
-#| msgid " -v Display the programs invoked by the compiler\n"
msgid " -v Display the programs invoked by the compiler.\n"
-msgstr " -v Hiển thị những chương trình được gá»i bởi bá»™ biên dịch\n"
+msgstr " -v Hiển thị những chương trình được gá»i bởi bá»™ biên dịch.\n"
#: gcc.c:3429
-#, fuzzy
-#| msgid " -### Like -v but options quoted and commands not executed\n"
msgid " -### Like -v but options quoted and commands not executed.\n"
msgstr ""
" -### Giống như -v nhưng mà tùy chá»n nằm trong dấu\n"
-" nháy và lệnh không được thực hiện\n"
+" nháy và lệnh không được thực hiện.\n"
#: gcc.c:3430
-#, fuzzy
-#| msgid " -E Preprocess only; do not compile, assemble or link\n"
msgid " -E Preprocess only; do not compile, assemble or link.\n"
-msgstr " -E Chỉ tiá»n xá»­ lý, đừng biên dịch, dịch mã số hoặc liên kết\n"
+msgstr " -E Chỉ tiá»n xá»­ lý, đừng biên dịch, assemble hay liên kết.\n"
#: gcc.c:3431
-#, fuzzy
-#| msgid " -S Compile only; do not assemble or link\n"
msgid " -S Compile only; do not assemble or link.\n"
-msgstr " -S Chỉ biên dịch, đừng dịch mã số hoặc liên kết\n"
+msgstr " -S Chỉ biên dịch, đừng assemble hay liên kết.\n"
#: gcc.c:3432
-#, fuzzy
-#| msgid " -c Compile and assemble, but do not link\n"
msgid " -c Compile and assemble, but do not link.\n"
-msgstr " -c Biên dịch và dịch mã số mà đừng liên kết\n"
+msgstr " -c Biên dịch và dịch mã số nhưng đừng liên kết.\n"
#: gcc.c:3433
-#, fuzzy
-#| msgid " -o <file> Place the output into <file>\n"
msgid " -o <file> Place the output into <file>.\n"
-msgstr " -o <tập-tin> Äể kết xuất vào <tập-tin> này\n"
+msgstr " -o <tập-tin> Äể kết xuất vào <tập-tin> này.\n"
#: gcc.c:3434
-#, fuzzy
-#| msgid " -pie Create a position independent executable\n"
msgid " -pie Create a position independent executable.\n"
-msgstr " -pie Tạo vị trí độc lập thi hành\n"
+msgstr " -pie Tạo vị trí độc lập thi hành.\n"
#: gcc.c:3435
-#, fuzzy
-#| msgid " -shared Create a shared library\n"
msgid " -shared Create a shared library.\n"
-msgstr " -shared Tạo thư viện chia sẻ (liên kết động)\n"
+msgstr " -shared Tạo thư viện chia sẻ (liên kết động).\n"
#: gcc.c:3436
-#, fuzzy
-#| msgid ""
-#| " -x <language> Specify the language of the following input files\n"
-#| " Permissible languages include: c c++ assembler none\n"
-#| " 'none' means revert to the default behavior of\n"
-#| " guessing the language based on the file's extension\n"
msgid ""
" -x <language> Specify the language of the following input files.\n"
" Permissible languages include: c c++ assembler none\n"
@@ -590,9 +488,9 @@ msgid ""
" guessing the language based on the file's extension.\n"
msgstr ""
" -x <ngôn_ngữ> Chỉ định ngôn ngữ của những tập tin đầu vào mà theo sau\n"
-" Các ngôn ngữ có thể sử dụng: c, c++, none\n"
+" Các ngôn ngữ có thể sử dụng: c c++ assembler none\n"
" “none†(không có) = hoàn nguyên vỠứng dụng mặc định\n"
-" là đoán ngôn ngữ dựa vào phần mở rộng của tập tin\n"
+" là đoán ngôn ngữ dựa vào phần mở rộng của tập tin.\n"
#: gcc.c:3443
#, c-format
@@ -871,10 +769,9 @@ msgstr ""
"%s.\n"
#: gcov-tool.c:526
-#, fuzzy, c-format
-#| msgid "Copyright %s 2014-2015 Free Software Foundation, Inc.\n"
+#, c-format
msgid "Copyright %s 2014-2016 Free Software Foundation, Inc.\n"
-msgstr "Bản quyá»n %s 2014-2015 Tổ chức phần má»m tá»± do.\n"
+msgstr "Bản quyá»n %s 2014-2016 Tổ chức phần má»m tá»± do.\n"
#: gcov-tool.c:529 gcov.c:506
#, c-format
@@ -1037,8 +934,7 @@ msgid "%s:source file is newer than notes file '%s'\n"
msgstr "%s: tập tin nguồn má»›i hÆ¡n tập tin ghi chú “%sâ€\n"
#: gcov.c:1144
-#, fuzzy, c-format
-#| msgid "(the message is only displayed one per source file)\n"
+#, c-format
msgid "(the message is displayed only once per source file)\n"
msgstr "(thông điệp này được hiển thị chỉ một lần cho mỗi tập tin nguồn)\n"
@@ -1326,14 +1222,12 @@ msgstr "không thể tạo ra việc nạp lại cho:"
#. What to print when a switch has no documentation.
#: opts.c:184
-#, fuzzy
-#| msgid "This switch lacks documentation"
msgid "This option lacks documentation."
-msgstr "Cái chuyển này còn thiếu tài liệu hướng dẫn"
+msgstr "Tùy chá»n này còn thiếu tài liệu hướng dẫn."
#: opts.c:185
msgid "Uses of this option are diagnosed."
-msgstr ""
+msgstr "Dùng tùy-chá»n này để chuẩn Ä‘oán."
#: opts.c:1056
#, c-format
@@ -1343,12 +1237,12 @@ msgstr "mặc định %d tối thiểu %d tối đa %d"
#: opts.c:1123
#, c-format
msgid "Same as %s. Use the latter option instead."
-msgstr ""
+msgstr "Giống như %s. Dùng tùy-chá»n sau đó để thay thế."
#: opts.c:1131
#, c-format
msgid "%s Same as %s."
-msgstr ""
+msgstr "%s Giống như %s."
#: opts.c:1202
msgid "[default]"
@@ -1368,10 +1262,9 @@ msgid " No options with the desired characteristics were found\n"
msgstr " Không tìm thấy tùy chá»n có những đặc Ä‘iểm đã muốn\n"
#: opts.c:1241
-#, fuzzy, c-format
-#| msgid " None found. Use --help=%s to show *all* the options supported by the %s front-end\n"
+#, c-format
msgid " None found. Use --help=%s to show *all* the options supported by the %s front-end.\n"
-msgstr " Không tìm thấy. Hãy sá»­ dụng --help=%s để hiển thị * tất cả * các tùy chá»n được giao diện %s há»— trợ\n"
+msgstr " Không tìm thấy. Hãy sá»­ dụng --help=%s để hiển thị *tất cả* các tùy chá»n được giao diện %s há»— trợ.\n"
#: opts.c:1247
#, c-format
@@ -1510,10 +1403,9 @@ msgid "%s%s%s %sversion %s (%s) compiled by CC, "
msgstr "%s%s%s %sversion %s (%s) biên dịch bằng CC, "
#: toplev.c:646
-#, fuzzy, c-format
-#| msgid "GMP version %s, MPFR version %s, MPC version %s\n"
+#, c-format
msgid "GMP version %s, MPFR version %s, MPC version %s, isl version %s\n"
-msgstr "GMP phiên bản %s, MPFR phiên bản %s, MPC phiên bản %s\n"
+msgstr "GMP phiên bản %s, MPFR phiên bản %s, MPC phiên bản %s, isl phiên bản %s\n"
#: toplev.c:648
#, c-format
@@ -1597,7 +1489,7 @@ msgstr "cuá»™c gá»i không chắc, và kích cỡ mã sẽ tăng lại"
#: cif-code.def:88
msgid "function not declared inline and code size would grow"
-msgstr "hàm không phải được tuyên bố trực tiếp, và kích cỡ mã sẽ tăng lại"
+msgstr "hàm không phải được khai báo trực tiếp, và kích cỡ mã sẽ tăng lại"
#: cif-code.def:92
msgid "mismatched arguments"
@@ -1613,7 +1505,7 @@ msgstr ""
#: cif-code.def:104
msgid "exception handling personality mismatch"
-msgstr ""
+msgstr "xử lý ngoại lệ không khớp personality"
#: cif-code.def:109
msgid "non-call exception handling mismatch"
@@ -1625,7 +1517,7 @@ msgstr "tùy chá»n đặc trưng cho đích vẫn không tương ứng"
#: cif-code.def:117
msgid "optimization level attribute mismatch"
-msgstr ""
+msgstr "thuộc tính mức tối ưu không khớp"
#: cif-code.def:121
msgid "callee refers to comdat-local symbols"
@@ -1693,10 +1585,9 @@ msgid "permerror: "
msgstr "permerror: "
#: params.def:49
-#, fuzzy, no-c-format
-#| msgid "Maximal estimated outcome of branch considered predictable"
+#, no-c-format
msgid "Maximal estimated outcome of branch considered predictable."
-msgstr "Kết quả tối đa ước lượng của nhánh được thấy là dự đoán được"
+msgstr "Kết quả ước lượng tối đa của nhánh được thấy là dự đoán được."
#: params.def:54
#, no-c-format
@@ -1704,52 +1595,44 @@ msgid "The minimal estimated speedup allowing inliner to ignore inline-insns-sin
msgstr ""
#: params.def:71
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions in a single function eligible for inlining"
+#, no-c-format
msgid "The maximum number of instructions in a single function eligible for inlining."
-msgstr "Số tối đa các lệnh trong một lệnh riêng lẻ mà thích hợp với việc chèn vào trực tiếp"
+msgstr "Số tối đa các lệnh trong một lệnh riêng lẻ mà thích hợp với việc chèn vào trực tiếp."
#: params.def:83
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions when automatically inlining"
+#, no-c-format
msgid "The maximum number of instructions when automatically inlining."
-msgstr "Số tối đa các lệnh khi tự động chèn vào trực tiếp"
+msgstr "Số tối đa các lệnh khi tự động chèn vào trực tiếp."
#: params.def:88
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions inline function can grow to via recursive inlining"
+#, no-c-format
msgid "The maximum number of instructions inline function can grow to via recursive inlining."
-msgstr "Số tối đa các lệnh đến đó hàm trực tiếp có thể tới bằng cách chèn vào trực tiếp một cách đệ quy"
+msgstr "Số tối đa các lệnh đến đó hàm trực tiếp có thể tới bằng cách chèn vào trực tiếp một cách đệ quy."
#: params.def:93
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions non-inline function can grow to via recursive inlining"
+#, no-c-format
msgid "The maximum number of instructions non-inline function can grow to via recursive inlining."
-msgstr "Số tối đa các lệnh đến đó hàm không phải trực tiếp có thể tới bằng cách chèn vào trực tiếp một cách đệ quy"
+msgstr "Số tối đa các lệnh đến đó hàm không phải trực tiếp có thể tới bằng cách chèn vào trực tiếp một cách đệ quy."
#: params.def:98
-#, fuzzy, no-c-format
-#| msgid "The maximum depth of recursive inlining for inline functions"
+#, no-c-format
msgid "The maximum depth of recursive inlining for inline functions."
-msgstr "Äá»™ sâu tối Ä‘a cá»§a việc chèn vào trá»±c tiếp má»™t cách đệ quy cho hàm trá»±c tiếp"
+msgstr "Äá»™ sâu tối Ä‘a cá»§a việc chèn vào trá»±c tiếp má»™t cách đệ quy cho hàm trá»±c tiếp."
#: params.def:103
-#, fuzzy, no-c-format
-#| msgid "The maximum depth of recursive inlining for non-inline functions"
+#, no-c-format
msgid "The maximum depth of recursive inlining for non-inline functions."
-msgstr "Äá»™ sâu tối Ä‘a cá»§a việc chèn vào trá»±c tiếp má»™t cách đệ quy cho hàm không phải trá»±c tiếp"
+msgstr "Äá»™ sâu tối Ä‘a cá»§a việc chèn vào trá»±c tiếp má»™t cách đệ quy cho hàm không phải trá»±c tiếp."
#: params.def:108
-#, fuzzy, no-c-format
-#| msgid "Inline recursively only when the probability of call being executed exceeds the parameter"
+#, no-c-format
msgid "Inline recursively only when the probability of call being executed exceeds the parameter."
-msgstr "Chèn vào trá»±c tiếp má»™t cách đệ quy chỉ khi xác xuất cuá»™c gá»i được thá»±c hiện cÅ©ng vượt quá tham số"
+msgstr "Chèn vào trá»±c tiếp má»™t cách đệ quy chỉ khi xác xuất cuá»™c gá»i được thá»±c hiện cÅ©ng vượt quá tham số."
#: params.def:116
-#, fuzzy, no-c-format
-#| msgid "The maximum number of nested indirect inlining performed by early inliner"
+#, no-c-format
msgid "The maximum number of nested indirect inlining performed by early inliner."
-msgstr "Số tối đa các lần chèn vào trực tiếp loại gián tiếp lồng nhau được làm bởi bộ chèn vào trực tiếp sớm"
+msgstr "Số tối đa các lần chèn vào trực tiếp loại gián tiếp lồng nhau được làm bởi bộ chèn vào trực tiếp sớm."
#: params.def:122
#, no-c-format
@@ -1762,112 +1645,94 @@ msgid "Maximum probability of the entry BB of split region (in percent relative
msgstr ""
#: params.def:135
-#, fuzzy, no-c-format
-#| msgid "If -fvariable-expansion-in-unroller is used, the maximum number of times that an individual variable will be expanded during loop unrolling"
+#, no-c-format
msgid "If -fvariable-expansion-in-unroller is used, the maximum number of times that an individual variable will be expanded during loop unrolling."
-msgstr "Dùng -fvariable-expansion-in-unroller thì số tối đa các lần mở rộng một biến nào đó trong khi bỠcuộn vòng lặp"
+msgstr "Dùng -fvariable-expansion-in-unroller thì số tối đa các lần mở rộng một biến nào đó trong khi bỠcuộn vòng lặp."
#: params.def:141
-#, fuzzy, no-c-format
-#| msgid "If -ftree-vectorize is used, the minimal loop bound of a loop to be considered for vectorization"
+#, no-c-format
msgid "If -ftree-vectorize is used, the minimal loop bound of a loop to be considered for vectorization."
-msgstr "Dùng -ftree-vectorize thì biên giới vòng lặp tối thiểu của một vòng lặp cần tính để véc-tơ hóa"
+msgstr "Dùng -ftree-vectorize thì biên giới vòng lặp tối thiểu của một vòng lặp cần tính để véc-tơ hóa."
#: params.def:152
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions to consider to fill a delay slot"
+#, no-c-format
msgid "The maximum number of instructions to consider to fill a delay slot."
-msgstr "Số tối Ä‘a các lệnh cần tính để Ä‘iá»n vào má»™t khe đợi"
+msgstr "Số tối Ä‘a các lệnh cần tính để Ä‘iá»n vào má»™t khe đợi."
#: params.def:163
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions to consider to find accurate live register information"
+#, no-c-format
msgid "The maximum number of instructions to consider to find accurate live register information."
-msgstr "Số tối Ä‘a các lệnh cần tính để tìm thông tin thanh ghi vẫn hiện thá»i và chính xác"
+msgstr "Số tối Ä‘a các lệnh cần tính để tìm thông tin thanh ghi vẫn hiện thá»i và chính xác."
#: params.def:173
-#, fuzzy, no-c-format
-#| msgid "The maximum length of scheduling's pending operations list"
+#, no-c-format
msgid "The maximum length of scheduling's pending operations list."
-msgstr "Chiá»u dài tối Ä‘a cá»§a danh sách các thao tác bị hoãn cá»§a tiến trình định thá»i"
+msgstr "Chiá»u dài tối Ä‘a cá»§a danh sách các thao tác còn treo."
#: params.def:180
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions to consider to unroll in a loop"
+#, no-c-format
msgid "The maximum number of backtrack attempts the scheduler should make when modulo scheduling a loop."
-msgstr "Số tối đa các lệnh cần tính nên bỠcuộn trong một vòng lặp"
+msgstr ""
#: params.def:185
-#, fuzzy, no-c-format
-#| msgid "The size of function body to be considered large"
+#, no-c-format
msgid "The size of function body to be considered large."
-msgstr "Kích cỡ thân hàm cần thấy là lớn"
+msgstr "Kích cỡ thân hàm cần thấy là lớn."
#: params.def:189
-#, fuzzy, no-c-format
-#| msgid "Maximal growth due to inlining of large function (in percent)"
+#, no-c-format
msgid "Maximal growth due to inlining of large function (in percent)."
-msgstr "Äá»™ tăng lên tối Ä‘a (theo phần trăm) do chèn hàm lá»›n vào trá»±c tiếp"
+msgstr "Äá»™ tăng lên tối Ä‘a (theo phần trăm) do chèn hàm lá»›n vào trá»±c tiếp."
#: params.def:193
-#, fuzzy, no-c-format
-#| msgid "The size of translation unit to be considered large"
+#, no-c-format
msgid "The size of translation unit to be considered large."
-msgstr "Kích cỡ đơn vị thông dịch cần thấy là lớn"
+msgstr "Kích cỡ đơn vị thông dịch cần thấy là lớn."
#: params.def:197
-#, fuzzy, no-c-format
-#| msgid "How much can given compilation unit grow because of the inlining (in percent)"
+#, no-c-format
msgid "How much can given compilation unit grow because of the inlining (in percent)."
-msgstr "Äá»™ tăng lên (theo phần trăm) được phép cho đơn vị biên dịch đưa ra do việc chèn vào trá»±c tiếp"
+msgstr "Äá»™ tăng lên (theo phần trăm) được phép cho đơn vị biên dịch đưa ra do việc chèn vào trá»±c tiếp."
#: params.def:201
-#, fuzzy, no-c-format
-#| msgid "How much can given compilation unit grow because of the interprocedural constant propagation (in percent)"
+#, no-c-format
msgid "How much can given compilation unit grow because of the interprocedural constant propagation (in percent)."
-msgstr "Äá»™ tăng lên (theo phần trăm) được phép cho đơn vị biên dịch đưa ra do sá»± lan truyá»n bất biến thuá»™c liên quá trình"
+msgstr "Äá»™ tăng lên (theo phần trăm) được phép cho đơn vị biên dịch đưa ra do sá»± lan truyá»n bất biến thuá»™c liên quá trình."
#: params.def:205
-#, fuzzy, no-c-format
-#| msgid "Maximal estimated growth of function body caused by early inlining of single call"
+#, no-c-format
msgid "Maximal estimated growth of function body caused by early inlining of single call."
-msgstr "Äá»™ tăng lên tối Ä‘a ước lượng cá»§a thân hàm do chèn vào trá»±c tiếp sá»›m má»™t cuá»™c gá»i riêng lẻ"
+msgstr "Äá»™ tăng lên ước lượng tối Ä‘a cá»§a thân hàm do chèn vào trá»±c tiếp sá»›m má»™t cuá»™c gá»i riêng lẻ."
#: params.def:209
-#, fuzzy, no-c-format
-#| msgid "The size of stack frame to be considered large"
+#, no-c-format
msgid "The size of stack frame to be considered large."
-msgstr "Kích cỡ khung ngăn xếp nên thấy là lớn"
+msgstr "Kích cỡ khung ngăn xếp nên thấy là lớn."
#: params.def:213
-#, fuzzy, no-c-format
-#| msgid "Maximal stack frame growth due to inlining (in percent)"
+#, no-c-format
msgid "Maximal stack frame growth due to inlining (in percent)."
-msgstr "Äá»™ tăng lên khung ngăn xếp tối Ä‘a (theo phần trăm) do chèn vào trá»±c tiếp"
+msgstr "Äá»™ tăng lên khung ngăn xếp tối Ä‘a (theo phần trăm) do chèn vào trá»±c tiếp."
#: params.def:220
-#, fuzzy, no-c-format
-#| msgid "The maximum amount of memory to be allocated by GCSE"
+#, no-c-format
msgid "The maximum amount of memory to be allocated by GCSE."
-msgstr "Vùng nhớ tối đa cho GCSE cấp phát"
+msgstr "Vùng nhớ tối đa cho GCSE cấp phát."
#: params.def:227
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions to consider to unroll in a loop"
+#, no-c-format
msgid "The maximum ratio of insertions to deletions of expressions in GCSE."
-msgstr "Số tối đa các lệnh cần tính nên bỠcuộn trong một vòng lặp"
+msgstr "Tỷ lệ tối đa các của các lệnh chèn để xóa của biểu thức trong GCSE."
#: params.def:238
-#, fuzzy, no-c-format
-#| msgid "The threshold ratio for performing partial redundancy elimination after reload"
+#, no-c-format
msgid "The threshold ratio for performing partial redundancy elimination after reload."
-msgstr "Tỷ lệ ngững để thực hiện việc khử bộ phận sự thửa sau khi nạp lại"
+msgstr "Tỷ lệ ngưỡngg để thực hiện việc khử bộ phận sự thừa sau khi nạp lại."
#: params.def:245
-#, fuzzy, no-c-format
-#| msgid "The threshold ratio of critical edges execution count that permit performing redundancy elimination after reload"
+#, no-c-format
msgid "The threshold ratio of critical edges execution count that permit performing redundancy elimination after reload."
-msgstr "Tỷ lệ ngững của số đếm lần thực hiện cạnh tới hạn cũng cho phép thực hiện việc khử sự thửa sau khi nạp lại"
+msgstr "Tỷ lệ ngưỡng của số đếm lần thực hiện cạnh tới hạn cũng cho phép thực hiện việc khử sự thừa sau khi nạp lại."
#: params.def:253
#, no-c-format
@@ -1890,94 +1755,79 @@ msgid "Maximum depth of sqrt chains to use when synthesizing exponentiation by a
msgstr ""
#: params.def:287
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions to consider to unroll in a loop"
+#, no-c-format
msgid "The maximum number of instructions to consider to unroll in a loop."
-msgstr "Số tối đa các lệnh cần tính nên bỠcuộn trong một vòng lặp"
+msgstr "Số tối đa các lệnh cần tính nên bỠcuộn trong một vòng lặp."
#: params.def:293
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions to consider to unroll in a loop on average"
+#, no-c-format
msgid "The maximum number of instructions to consider to unroll in a loop on average."
-msgstr "Số tối đa các lệnh trung bình cần tính nên bỠcuộn trong một vòng lặp"
+msgstr "Số tối đa các lệnh trung bình cần tính nên bỠcuộn trong một vòng lặp bình quân."
#: params.def:298
-#, fuzzy, no-c-format
-#| msgid "The maximum number of unrollings of a single loop"
+#, no-c-format
msgid "The maximum number of unrollings of a single loop."
-msgstr "Số tối đa các lần bỠcuộn một vòng lặp riêng lẻ"
+msgstr "Số tối đa các lần bỠcuộn một vòng lặp riêng lẻ."
#: params.def:303
-#, fuzzy, no-c-format
-#| msgid "The maximum number of insns of a peeled loop"
+#, no-c-format
msgid "The maximum number of insns of a peeled loop."
-msgstr "Số tối đa các lệnh của một vòng lặp được lột"
+msgstr "Số tối đa các lệnh insns của một vòng lặp được lột."
#: params.def:308
-#, fuzzy, no-c-format
-#| msgid "The maximum number of peelings of a single loop"
+#, no-c-format
msgid "The maximum number of peelings of a single loop."
-msgstr "Số tối đa các lần lột một vòng lặp riêng lẻ"
+msgstr "Số tối đa các lần lột một vòng lặp riêng lẻ."
#: params.def:313
-#, fuzzy, no-c-format
-#| msgid "The maximum number of iterations through CFG to extend regions"
+#, no-c-format
msgid "The maximum number of branches on the path through the peeled sequence."
-msgstr "Số tối đa các lần lặp lại qua CFG để kéo dài vùng"
+msgstr "Số tối Ä‘a các nhánh trên đưá»ng dẫn xuyên suốt chuá»—i vá» bá»c."
#: params.def:318
-#, fuzzy, no-c-format
-#| msgid "The maximum number of insns of a completely peeled loop"
+#, no-c-format
msgid "The maximum number of insns of a completely peeled loop."
-msgstr "Số tối đa các lệnh của một vòng lặp được lột hoàn toàn"
+msgstr "Số tối đa các lệnh của một vòng lặp được lột hoàn toàn."
#: params.def:323
-#, fuzzy, no-c-format
-#| msgid "The maximum number of peelings of a single loop that is peeled completely"
+#, no-c-format
msgid "The maximum number of peelings of a single loop that is peeled completely."
-msgstr "Số tối đa các lần lột một vòng lặp riêng lẻ được lột hoàn toàn"
+msgstr "Số tối đa các lần lột một vòng lặp riêng lẻ được lột hoàn toàn."
#: params.def:328
-#, fuzzy, no-c-format
-#| msgid "The maximum number of insns of a peeled loop that rolls only once"
+#, no-c-format
msgid "The maximum number of insns of a peeled loop that rolls only once."
-msgstr "Số tối đa các lệnh của một vòng lặp được lột mà cuộn chỉ một lần"
+msgstr "Số tối đa các lệnh của một vòng lặp được lột mà cuộn chỉ một lần."
#: params.def:333
-#, fuzzy, no-c-format
-#| msgid "The maximum depth of a loop nest we completely peel"
+#, no-c-format
msgid "The maximum depth of a loop nest we completely peel."
-msgstr "Äá»™ sâu tối Ä‘a cá»§a má»™t bá»™ vòng lặp xếp lồng vào nhau được chúng ta lá»™t hoàn toàn"
+msgstr "Äá»™ sâu tối Ä‘a cá»§a má»™t bá»™ vòng lặp xếp lồng vào nhau được chúng ta lá»™t hoàn toàn."
#: params.def:339
-#, fuzzy, no-c-format
-#| msgid "The maximum number of insns of an unswitched loop"
+#, no-c-format
msgid "The maximum number of insns of an unswitched loop."
-msgstr "Số tối đa các lệnh của một vòng lặp chưa chuyển đổi nhánh"
+msgstr "Số tối đa các lệnh của một vòng lặp chưa chuyển đổi nhánh."
#: params.def:344
-#, fuzzy, no-c-format
-#| msgid "The maximum number of unswitchings in a single loop"
+#, no-c-format
msgid "The maximum number of unswitchings in a single loop."
-msgstr "Số tối đa các lần hủy chuyển đổi nhánh trong một vòng lặp riêng lẻ"
+msgstr "Số tối đa các lần hủy chuyển đổi nhánh trong một vòng lặp riêng lẻ."
#: params.def:351
-#, fuzzy, no-c-format
-#| msgid "Bound on the number of iterations the brute force # of iterations analysis algorithm evaluates"
+#, no-c-format
msgid "Bound on the number of iterations the brute force # of iterations analysis algorithm evaluates."
-msgstr "Äóng kết vá»›i số các lần lặp lại được ước lượng bởi thuật toán phân tích số sức mạnh vÅ© phu các lần lặp lại "
+msgstr "Äóng kết vá»›i số các lần lặp lại được ước lượng bởi thuật toán phân tích số sức mạnh vÅ© phu các lần lặp lại."
#: params.def:357
-#, fuzzy, no-c-format
-#| msgid "Bound on the cost of an expression to compute the number of iterations"
+#, no-c-format
msgid "Bound on the cost of an expression to compute the number of iterations."
-msgstr "Äóng kết vá»›i giá cá»§a má»™t biểu tượng để tính số các lần lặp lại"
+msgstr "Äóng kết vá»›i giá cá»§a má»™t biểu thức để tính số các lần lặp lại."
#: params.def:363
-#, fuzzy, no-c-format
-#| msgid "A factor for tuning the upper bound that swing modulo scheduler uses for scheduling a loop"
+#, no-c-format
msgid "A factor for tuning the upper bound that swing modulo scheduler uses for scheduling a loop."
-msgstr "Má»™t hệ số để Ä‘iá»u hưởng giá»›i hạn trên được bá»™ định thá»i mô-Ä‘u-lô swing sá»­ dụng để định thá»i má»™t vòng lặp"
+msgstr "Má»™t hệ số để Ä‘iá»u hưởng giá»›i hạn trên được bá»™ định thá»i mô-Ä‘u-lô swing sá»­ dụng để định thá»i má»™t vòng lặp."
#: params.def:368
#, no-c-format
@@ -1985,16 +1835,14 @@ msgid "The minimum value of stage count that swing modulo scheduler will generat
msgstr ""
#: params.def:372
-#, fuzzy, no-c-format
-#| msgid "The number of cycles the swing modulo scheduler considers when checking conflicts using DFA"
+#, no-c-format
msgid "The number of cycles the swing modulo scheduler considers when checking conflicts using DFA."
-msgstr "Số các chu kỳ được bá»™ định thá»i mô-Ä‘u-lô swing tính khi kiểm tra sá»± xung đột bằng DFA"
+msgstr "Số các chu kỳ được bá»™ định thá»i mô-Ä‘u-lô swing tính khi kiểm tra sá»± xung đột bằng DFA."
#: params.def:376
-#, fuzzy, no-c-format
-#| msgid "A threshold on the average loop count considered by the swing modulo scheduler"
+#, no-c-format
msgid "A threshold on the average loop count considered by the swing modulo scheduler."
-msgstr "Má»™t ngưỡng trên số trung bình đếm vòng lặp được bá»™ định thá»i mô-Ä‘u-lô swing tính"
+msgstr "Má»™t ngưỡng trên số trung bình đếm vòng lặp được bá»™ định thá»i mô-Ä‘u-lô swing tính."
#: params.def:381
#, no-c-format
@@ -2002,10 +1850,9 @@ msgid "A basic block profile count is considered hot if it contributes to the gi
msgstr ""
#: params.def:386
-#, fuzzy, no-c-format
-#| msgid "Select fraction of the maximal frequency of executions of basic block in function given basic block needs to have to be considered hot"
+#, no-c-format
msgid "Select fraction of the maximal frequency of executions of basic block in function given basic block needs to have to be considered hot."
-msgstr "Chá»n phân số cá»§a tần số tối Ä‘a lần thá»±c hiện khối cÆ¡ bản trong hàm mà cÅ©ng quy định rằng khối cÆ¡ bản cần phải được thấy là nóng"
+msgstr "Chá»n phân số cá»§a tần số tối Ä‘a lần thá»±c hiện khối cÆ¡ bản trong hàm mà cÅ©ng quy định rằng khối cÆ¡ bản cần phải được thấy là nóng."
#: params.def:391
#, no-c-format
@@ -2013,22 +1860,19 @@ msgid "The minimum fraction of profile runs a given basic block execution count
msgstr ""
#: params.def:396
-#, fuzzy, no-c-format
-#| msgid "Select fraction of the maximal frequency of executions of basic block in function given basic block get alignment"
+#, no-c-format
msgid "Select fraction of the maximal frequency of executions of basic block in function given basic block get alignment."
-msgstr "Chá»n phân số cá»§a tần số tối Ä‘a lần thá»±c hiện khối cÆ¡ bản trong hàm mà cÅ©ng quy định rằng khối cÆ¡ bản được xếp hàng"
+msgstr "Chá»n phân số cá»§a tần số tối Ä‘a lần thá»±c hiện khối cÆ¡ bản trong hàm mà cÅ©ng quy định rằng khối cÆ¡ bản được xếp hàng."
#: params.def:401
-#, fuzzy, no-c-format
-#| msgid "Loops iterating at least selected number of iterations will get loop alignement."
+#, no-c-format
msgid "Loops iterating at least selected number of iterations will get loop alignement.."
-msgstr "Vòng lặp nào lặp lại ít nhất số lần lặp lại được chá»n thì được xếp hàng các vòng lặp"
+msgstr "Vòng lặp nào lặp lại ít nhất số lần lặp lại được chá»n thì được xếp hàng các vòng lặp.."
#: params.def:417
-#, fuzzy, no-c-format
-#| msgid "The maximum number of loop iterations we predict statically"
+#, no-c-format
msgid "The maximum number of loop iterations we predict statically."
-msgstr "Số tối đa các lần lặp lại vòng lặp dự đoán một cách tĩnh"
+msgstr "Số tối đa các lần lặp lại vòng lặp dự đoán một cách tĩnh."
#: params.def:430
#, no-c-format
@@ -2036,123 +1880,104 @@ msgid "Set the estimated probability in percentage for builtin expect. The defau
msgstr ""
#: params.def:434
-#, fuzzy, no-c-format
-#| msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is available"
+#, no-c-format
msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is available."
-msgstr "Phần trăm hàm (tăng cấp theo tần số thá»±c hiện) mà phải được bao quát bởi việc tạo vết. ÄÆ°á»£c sá»­ dụng khi có sẵn sàng thông tin phản hồi từ hồ sÆ¡"
+msgstr "Phần trăm hàm, tăng cấp theo tần số thá»±c hiện, mà phải được bao quát bởi việc tạo vết. ÄÆ°á»£c sá»­ dụng khi hồ sÆ¡ phản hồi sẵn có."
#: params.def:438
-#, fuzzy, no-c-format
-#| msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is not available"
+#, no-c-format
msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is not available."
-msgstr "Phần trăm hàm (tăng cấp theo tần số thá»±c hiện) mà phải được bao quát bởi việc tạo vết. ÄÆ°á»£c sá»­ dụng khi không có sẵn sàng thông tin phản hồi từ hồ sÆ¡"
+msgstr "Phần trăm hàm, tăng cấp theo tần số thá»±c hiện, mà phải được bao quát bởi việc tạo vết. ÄÆ°á»£c sá»­ dụng khi hồ sÆ¡ phản hồi không sẵn có."
#: params.def:442
-#, fuzzy, no-c-format
-#| msgid "Maximal code growth caused by tail duplication (in percent)"
+#, no-c-format
msgid "Maximal code growth caused by tail duplication (in percent)."
-msgstr "Äá»™ tâng lên tối Ä‘a (theo phần trăm) do Ä‘uôi bị nhân đôi"
+msgstr "Äá»™ tăng mã lên tối Ä‘a (theo phần trăm) do Ä‘uôi bị nhân đôi."
#: params.def:446
-#, fuzzy, no-c-format
-#| msgid "Stop reverse growth if the reverse probability of best edge is less than this threshold (in percent)"
+#, no-c-format
msgid "Stop reverse growth if the reverse probability of best edge is less than this threshold (in percent)."
-msgstr "Dừng tăng lên ngược nếu xác xuất ngược có cạnh tốt nhất vẫn nhỠhơn ngưỡng này (theo phần trăm)"
+msgstr "Dừng tăng lên ngược nếu xác xuất ngược có cạnh tốt nhất vẫn nhỠhơn ngưỡng này (theo phần trăm)."
#: params.def:450
-#, fuzzy, no-c-format
-#| msgid "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is available"
+#, no-c-format
msgid "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is available."
msgstr "Dừng tăng lên tiếp nếu xác xuất có cạnh tốt nhất vẫn nhá» hÆ¡n ngưỡng này (theo phần trăm). ÄÆ°á»£c sá»­ dụng khi có sẵn sàng thông tin phản hồi từ hồ sÆ¡"
#: params.def:454
-#, fuzzy, no-c-format
-#| msgid "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is not available"
+#, no-c-format
msgid "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is not available."
msgstr "Dừng tăng lên tiếp nếu xác xuất có cạnh tốt nhất vẫn nhá» hÆ¡n ngưỡng này (theo phần trăm). ÄÆ°á»£c sá»­ dụng khi không có sẵn sàng thông tin phản hồi từ hồ sÆ¡"
#: params.def:460
-#, fuzzy, no-c-format
-#| msgid "The maximum number of incoming edges to consider for crossjumping"
+#, no-c-format
msgid "The maximum number of incoming edges to consider for crossjumping."
msgstr "Số tối đa các cạnh gửi đến cần tính để nhảy chéo"
#: params.def:466
-#, fuzzy, no-c-format
-#| msgid "The minimum number of matching instructions to consider for crossjumping"
+#, no-c-format
msgid "The minimum number of matching instructions to consider for crossjumping."
msgstr "Số tối thiểu các lệnh tương ứng cần tính để nhảy chéo"
#: params.def:472
-#, fuzzy, no-c-format
-#| msgid "The maximum expansion factor when copying basic blocks"
+#, no-c-format
msgid "The maximum expansion factor when copying basic blocks."
msgstr "Hệ số mở rộng tối đa khi sao chép khối cơ bản"
#: params.def:478
-#, fuzzy, no-c-format
-#| msgid "The maximum number of insns to duplicate when unfactoring computed gotos"
+#, no-c-format
msgid "The maximum number of insns to duplicate when unfactoring computed gotos."
-msgstr "Số tối Ä‘a các lệnh cần nhân đôi khi gỡ bá» hệ số khá»i goto đã tính"
+msgstr ""
#: params.def:484
-#, fuzzy, no-c-format
-#| msgid "The maximum length of path considered in cse"
+#, no-c-format
msgid "The maximum length of path considered in cse."
-msgstr "Chiá»u dài tối Ä‘a cá»§a đưá»ng dẫn được tính trong CSE"
+msgstr "Chiá»u dài tối Ä‘a cá»§a đưá»ng dẫn được tính trong CSE."
#: params.def:488
-#, fuzzy, no-c-format
-#| msgid "The maximum instructions CSE process before flushing"
+#, no-c-format
msgid "The maximum instructions CSE process before flushing."
-msgstr "Số tối đa các lệnh được CSE xử lý trước khi chuyển hết ra ngoài"
+msgstr "Số tối đa các lệnh được CSE xử lý trước khi chuyển hết ra ngoài."
#: params.def:495
-#, fuzzy, no-c-format
-#| msgid "The minimum cost of an expensive expression in the loop invariant motion"
+#, no-c-format
msgid "The minimum cost of an expensive expression in the loop invariant motion."
-msgstr "Giá tối thiểu của một biểu tượng giá rất cao trong sự chuyển động bất biến vòng lặp"
+msgstr "Giá tối thiểu của một biểu thức giá rất cao trong sự chuyển động bất biến vòng lặp."
#: params.def:504
-#, fuzzy, no-c-format
-#| msgid "Bound on number of candidates below that all candidates are considered in iv optimizations"
+#, no-c-format
msgid "Bound on number of candidates below that all candidates are considered in iv optimizations."
-msgstr "Äóng kết vá»›i số các Ä‘iá»u ứng cá»­ dưới đó tất cả các Ä‘iá»u ứng cá»­ được tính trong sá»± tối ưu hóa iv"
+msgstr "Äóng kết vá»›i số các Ä‘iá»u ứng cá»­ dưới đó tất cả các Ä‘iá»u ứng cá»­ được tính trong sá»± tối ưu hóa iv."
#: params.def:512
-#, fuzzy, no-c-format
-#| msgid "Bound on number of iv uses in loop optimized in iv optimizations"
+#, no-c-format
msgid "Bound on number of iv uses in loop optimized in iv optimizations."
-msgstr "Äóng kết vá»›i số các lần sá»­ dụng iv trong vòng lặp được tối ưu hóa bằng sá»± tối ưu hóa iv"
+msgstr "Äóng kết vá»›i số các lần sá»­ dụng iv trong vòng lặp được tối ưu hóa bằng sá»± tối ưu hóa iv."
#: params.def:520
-#, fuzzy, no-c-format
-#| msgid "If number of candidates in the set is smaller, we always try to remove unused ivs during its optimization"
+#, no-c-format
msgid "If number of candidates in the set is smaller, we always try to remove unused ivs during its optimization."
-msgstr "Gặp tập hợp chứa số nhá» hÆ¡n các Ä‘iá»u ứng cá»­ thì lúc nào cÅ©ng thá»­ gỡ bá» iv chưa dùng nào trong khi tối ưu hóa nó"
+msgstr "Nếu số lượng ứng cử trong một tập hợp nhỠhơn, chúng tôi luôn thử gỡ bỠiv chưa dùng nào trong khi tối ưu hóa nó."
#: params.def:525
-#, fuzzy, no-c-format
-#| msgid "Bound on size of expressions used in the scalar evolutions analyzer"
+#, no-c-format
msgid "Bound on size of expressions used in the scalar evolutions analyzer."
-msgstr "Äóng kết vá»›i kích cỡ biểu tượng được sá»­ dụng trong bá»™ phân tích sá»± khai căn vô hướng"
+msgstr "Äóng kết vá»›i kích cỡ biểu thức được sá»­ dụng trong bá»™ phân tích sá»± khai căn vô hướng."
#: params.def:530
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Bound on the complexity of the expressions in the scalar evolutions analyzer."
-msgstr "Äóng kết vá»›i kích cỡ biểu tượng được sá»­ dụng trong bá»™ phân tích sá»± khai căn vô hướng"
+msgstr "Äóng kết vá»›i độ tinh vi cá»§a biểu thức được sá»­ dụng trong bá»™ phân tích sá»± khai căn vô hướng."
#: params.def:535
-#, fuzzy, no-c-format
-#| msgid "Bound on number of runtime checks inserted by the vectorizer's loop versioning for alignment check"
+#, no-c-format
msgid "Bound on number of runtime checks inserted by the vectorizer's loop versioning for alignment check."
-msgstr "Äóng kết vá»›i số các sá»± kiểm tra lúc chạy được chèn bởi việc kiểm tra phiên bản vòng lặp để xếp hàng cá»§a bá»™ véc-tÆ¡ hóa"
+msgstr "Äóng kết vá»›i số các sá»± kiểm tra lúc chạy được chèn bởi việc kiểm tra phiên bản vòng lặp để xếp hàng cá»§a bá»™ véc-tÆ¡ hóa."
#: params.def:540
-#, fuzzy, no-c-format
-#| msgid "Bound on number of runtime checks inserted by the vectorizer's loop versioning for alias check"
+#, no-c-format
msgid "Bound on number of runtime checks inserted by the vectorizer's loop versioning for alias check."
-msgstr "Äóng kết vá»›i số các sá»± kiểm tra lúc chạy được chèn bởi việc kiểm tra phiên bản vòng lặp cho bí danh cá»§a bá»™ véc-tÆ¡ hóa"
+msgstr "Äóng kết vá»›i số các sá»± kiểm tra lúc chạy được chèn bởi việc kiểm tra phiên bản vòng lặp cho bí danh cá»§a bá»™ véc-tÆ¡ hóa."
#: params.def:545
#, no-c-format
@@ -2160,28 +1985,24 @@ msgid "Max number of loop peels to enhancement alignment of data references in a
msgstr ""
#: params.def:550
-#, fuzzy, no-c-format
-#| msgid "The maximum memory locations recorded by cselib"
+#, no-c-format
msgid "The maximum memory locations recorded by cselib."
-msgstr "Số tối đa các vị trí bộ nhớ được thư viện cselib ghi lưu"
+msgstr "Số tối đa các vị trí bộ nhớ được thư viện cselib ghi lưu."
#: params.def:563
-#, fuzzy, no-c-format
-#| msgid "Minimum heap expansion to trigger garbage collection, as a percentage of the total size of the heap"
+#, no-c-format
msgid "Minimum heap expansion to trigger garbage collection, as a percentage of the total size of the heap."
-msgstr "Sá»± mở rá»™ng miá»n nhá»› tối thiểu để gây ra tập hợp rác, theo phần trăm cá»§a kích cỡ miá»n nhá»› hoàn toàn"
+msgstr "Sá»± mở rá»™ng miá»n nhá»› tối thiểu để gây ra tập hợp rác, theo phần trăm cá»§a kích cỡ miá»n nhá»› hoàn toàn."
#: params.def:568
-#, fuzzy, no-c-format
-#| msgid "Minimum heap size before we start collecting garbage, in kilobytes"
+#, no-c-format
msgid "Minimum heap size before we start collecting garbage, in kilobytes."
-msgstr "Sá»± mở rá»™ng miá»n nhá»› tối thiểu (theo kilô-byte) trước khi bắt đầu tập hợp rác"
+msgstr "Sá»± mở rá»™ng miá»n nhá»› tối thiểu (theo kilô-byte) trước khi bắt đầu tập hợp rác."
#: params.def:576
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions to search backward when looking for equivalent reload"
+#, no-c-format
msgid "The maximum number of instructions to search backward when looking for equivalent reload."
-msgstr "Số tối đa các lệnh cần quét ngược khi tìm một sự nạp lại tương đương"
+msgstr "Số tối đa các lệnh cần quét ngược khi tìm một sự nạp lại tương đương."
#: params.def:581
#, no-c-format
@@ -2189,39 +2010,34 @@ msgid "Target block's relative execution frequency (as a percentage) required to
msgstr ""
#: params.def:586 params.def:596
-#, fuzzy, no-c-format
-#| msgid "The maximum number of blocks in a region to be considered for interblock scheduling"
+#, no-c-format
msgid "The maximum number of blocks in a region to be considered for interblock scheduling."
-msgstr "Số tối Ä‘a các khối má»—i vùng cần tính để định thá»i giữa các khối"
+msgstr "Số tối Ä‘a các khối má»—i vùng cần tính để định thá»i giữa các khối."
#: params.def:591 params.def:601
-#, fuzzy, no-c-format
-#| msgid "The maximum number of insns in a region to be considered for interblock scheduling"
+#, no-c-format
msgid "The maximum number of insns in a region to be considered for interblock scheduling."
-msgstr "Số tối Ä‘a các lệnh má»—i vùng cần tính để định thá»i giữa các khối"
+msgstr "Số tối Ä‘a các lệnh má»—i vùng cần tính để định thá»i giữa các khối."
#: params.def:606
-#, fuzzy, no-c-format
-#| msgid "The minimum probability of reaching a source block for interblock speculative scheduling"
+#, no-c-format
msgid "The minimum probability of reaching a source block for interblock speculative scheduling."
-msgstr "Xác xuất tối thiểu có thể tá»›i má»™t khối nguồn để định thá»i giữa các khối má»™t cách lý thuyết có tính chất suy Ä‘oán"
+msgstr "Xác xuất tối thiểu có thể tá»›i má»™t khối nguồn để định thá»i giữa các khối má»™t cách lý thuyết có tính chất suy Ä‘oán."
#: params.def:611
-#, fuzzy, no-c-format
-#| msgid "The maximum number of iterations through CFG to extend regions"
+#, no-c-format
msgid "The maximum number of iterations through CFG to extend regions."
-msgstr "Số tối đa các lần lặp lại qua CFG để kéo dài vùng"
+msgstr "Số tối đa các lần lặp lại qua CFG để kéo dài vùng."
#: params.def:616
-#, fuzzy, no-c-format
-#| msgid "The maximum conflict delay for an insn to be considered for speculative motion"
+#, no-c-format
msgid "The maximum conflict delay for an insn to be considered for speculative motion."
-msgstr "Khoảng đợi xung đột tối đa trước khi một lệnh được tính để di chuyển một cách lý thuyết có tính chất suy đoán"
+msgstr "Khoảng đợi xung đột tối đa trước khi một lệnh được tính để di chuyển một cách lý thuyết có tính chất suy đoán."
#: params.def:621
#, no-c-format
msgid "The minimal probability of speculation success (in percents), so that speculative insn will be scheduled."
-msgstr "Xác xuất tối thiểu (theo phần trăm) có suy Ä‘oán đúng, để định thá»i lệnh thuá»™c lý thuyết có tính chất suy Ä‘oán"
+msgstr "Xác xuất tối thiểu (theo phần trăm) có suy Ä‘oán đúng, để định thá»i lệnh thuá»™c lý thuyết có tính chất suy Ä‘oán."
#: params.def:626
#, no-c-format
@@ -2229,28 +2045,24 @@ msgid "The minimum probability an edge must have for the scheduler to save its s
msgstr ""
#: params.def:631
-#, fuzzy, no-c-format
-#| msgid "The maximum size of the lookahead window of selective scheduling"
+#, no-c-format
msgid "The maximum size of the lookahead window of selective scheduling."
-msgstr "Kích cỡ tối Ä‘a cá»§a cá»­a sổ nhìn trước cá»§a việc định thá»i lá»±a chá»n"
+msgstr "Kích cỡ tối Ä‘a cá»§a cá»­a sổ nhìn trước cá»§a việc định thá»i lá»±a chá»n."
#: params.def:636
-#, fuzzy, no-c-format
-#| msgid "Maximum number of times that an insn could be scheduled"
+#, no-c-format
msgid "Maximum number of times that an insn could be scheduled."
-msgstr "Số tối Ä‘a các lần có thể định thá»i má»™t lệnh nào đó"
+msgstr "Số tối Ä‘a các lần có thể định thá»i má»™t lệnh nào đó."
#: params.def:641
-#, fuzzy, no-c-format
-#| msgid "Maximum number of instructions in the ready list that are considered eligible for renaming"
+#, no-c-format
msgid "Maximum number of instructions in the ready list that are considered eligible for renaming."
-msgstr "Số tối đa các lệnh trong danh sách sẵn sàng mà được thấy là thích hợp với chức năng thay đổi tên"
+msgstr "Số tối đa các lệnh trong danh sách sẵn sàng mà được thấy là thích hợp với chức năng thay đổi tên."
#: params.def:646
-#, fuzzy, no-c-format
-#| msgid "Minimal distance between possibly conflicting store and load"
+#, no-c-format
msgid "Minimal distance between possibly conflicting store and load."
-msgstr "Khoảng cách tối thiểu giữa vị trí lưu và nạp có thể xung đột với nhau"
+msgstr "Khoảng cách tối thiểu giữa vị trí lưu và nạp có thể xung đột với nhau."
#: params.def:651
#, no-c-format
@@ -2258,27 +2070,24 @@ msgid "Hardware autoprefetcher scheduler model control flag. Number of lookahea
msgstr ""
#: params.def:656
-#, fuzzy, no-c-format
-#| msgid "The maximum number of RTL nodes that can be recorded as combiner's last value"
+#, no-c-format
msgid "The maximum number of RTL nodes that can be recorded as combiner's last value."
-msgstr "Số tối đa các nút RTL có thể ghi lưu như là giá trị cuối cùng của bộ kết hợp"
+msgstr "Số tối đa các nút RTL có thể ghi lưu như là giá trị cuối cùng của bộ kết hợp."
#: params.def:661
-#, fuzzy, no-c-format
+#, no-c-format
msgid "The maximum number of insns combine tries to combine."
-msgstr "Số tối đa các cạnh gửi đến cần tính để nhảy chéo"
+msgstr "Số tối đa các chỉ lệnh phối hợp cố phối hợp."
#: params.def:670
-#, fuzzy, no-c-format
-#| msgid "The upper bound for sharing integer constants"
+#, no-c-format
msgid "The upper bound for sharing integer constants."
-msgstr "Biên giới trên để chia sẻ hằng số nguyên"
+msgstr "Biên giới trên để chia sẻ hằng số nguyên."
#: params.def:675
-#, fuzzy, no-c-format
-#| msgid "The lower bound for a buffer to be considered for stack smashing protection"
+#, no-c-format
msgid "The lower bound for a buffer to be considered for stack smashing protection."
-msgstr "Biên giới dưới của một vùng đệm được tính để bảo vệ chống ngăn xếp bị đập tan ra"
+msgstr "Biên giới dưới của một vùng đệm được tính để bảo vệ chống ngăn xếp bị đập tan ra."
#: params.def:680
#, no-c-format
@@ -2286,22 +2095,19 @@ msgid "The minimum size of variables taking part in stack slot sharing when not
msgstr ""
#: params.def:699
-#, fuzzy, no-c-format
-#| msgid "Maximum number of statements allowed in a block that needs to be duplicated when threading jumps"
+#, no-c-format
msgid "Maximum number of statements allowed in a block that needs to be duplicated when threading jumps."
-msgstr "Số tối đa các câu lệnh được phép trong một khối cần được nhân đôi khi sắp xếp bước nhảy theo nhánh"
+msgstr "Số tối đa các câu lệnh được phép trong một khối cần được nhân đôi khi sắp xếp bước nhảy theo nhánh."
#: params.def:708
-#, fuzzy, no-c-format
-#| msgid "Maximum number of fields in a structure before pointer analysis treats the structure as a single variable"
+#, no-c-format
msgid "Maximum number of fields in a structure before pointer analysis treats the structure as a single variable."
-msgstr "Số tối Ä‘a các trưá»ng trong má»™t cấu trúc trước khi tiến trình phân tích hàm trá» thấy cấu trúc đó là má»™t biến riêng lẻ"
+msgstr "Số tối Ä‘a các trưá»ng trong má»™t cấu trúc trước khi tiến trình phân tích hàm trá» thấy cấu trúc đó là má»™t biến riêng lẻ."
#: params.def:713
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions ready to be issued to be considered by the scheduler during the first scheduling pass"
+#, no-c-format
msgid "The maximum number of instructions ready to be issued to be considered by the scheduler during the first scheduling pass."
-msgstr "Số tối Ä‘a các câu lệnh sẵn sàng đưa ra cần được tính bởi bá»™ định thá»i trong lần đầu tiên chạy thá»§ tục định thá»i"
+msgstr "Số tối Ä‘a các câu lệnh sẵn sàng đưa ra cần được tính bởi bá»™ định thá»i trong lần đầu tiên chạy thá»§ tục định thá»i."
#: params.def:719
#, no-c-format
@@ -2309,52 +2115,44 @@ msgid "Maximum number of active local stores in RTL dead store elimination."
msgstr ""
#: params.def:729
-#, fuzzy, no-c-format
-#| msgid "The number of insns executed before prefetch is completed"
+#, no-c-format
msgid "The number of insns executed before prefetch is completed."
-msgstr "Số các lệnh được thực hiện trước khi hoàn tất quá trình lấy sẵn (prefetch)"
+msgstr "Số các lệnh insn được thực hiện trước khi hoàn tất quá trình lấy sẵn (prefetch)."
#: params.def:736
-#, fuzzy, no-c-format
-#| msgid "The number of prefetches that can run at the same time"
+#, no-c-format
msgid "The number of prefetches that can run at the same time."
-msgstr "Số các quá trình lấy sẵn có thể chạy đồng thá»i"
+msgstr "Số các quá trình lấy sẵn có thể chạy đồng thá»i."
#: params.def:743
-#, fuzzy, no-c-format
-#| msgid "The size of L1 cache"
+#, no-c-format
msgid "The size of L1 cache."
-msgstr "Kích cỡ của vùng nhớ tạm cấp 1"
+msgstr "Kích cỡ của vùng nhớ tạm cấp 1."
#: params.def:750
-#, fuzzy, no-c-format
-#| msgid "The size of L1 cache line"
+#, no-c-format
msgid "The size of L1 cache line."
-msgstr "Kích cỡ cá»§a đưá»ng vùng nhá»› tạm cấp 1"
+msgstr "Kích cỡ cá»§a đưá»ng vùng nhá»› tạm cấp 1."
#: params.def:757
-#, fuzzy, no-c-format
-#| msgid "The size of L2 cache"
+#, no-c-format
msgid "The size of L2 cache."
-msgstr "Kích cỡ của vùng nhớ tạm cấp 2"
+msgstr "Kích cỡ của vùng nhớ tạm cấp 2."
#: params.def:768
-#, fuzzy, no-c-format
-#| msgid "Whether to use canonical types"
+#, no-c-format
msgid "Whether to use canonical types."
-msgstr "Có nên sử dụng loại hợp nguyên tắc hay không"
+msgstr "Có nên sử dụng loại hợp nguyên tắc hay không."
#: params.def:773
-#, fuzzy, no-c-format
-#| msgid "Maximum length of partial antic set when performing tree pre optimization"
+#, no-c-format
msgid "Maximum length of partial antic set when performing tree pre optimization."
-msgstr "Chiá»u dài tối Ä‘a cá»§a tập hợp antic bá»™ phận khi thá»±c hiện sá»± tối ưu hóa sẵn cây"
+msgstr "Chiá»u dài tối Ä‘a cá»§a tập hợp antic bá»™ phận khi thá»±c hiện sá»± tối ưu hóa sẵn cây."
#: params.def:783
-#, fuzzy, no-c-format
-#| msgid "Maximum size of a SCC before SCCVN stops processing a function"
+#, no-c-format
msgid "Maximum size of a SCC before SCCVN stops processing a function."
-msgstr "Kích cỡ tối đa của một SCC trước khi SCCVN dừng xử lý một hàm"
+msgstr "Kích cỡ tối đa của một SCC trước khi SCCVN dừng xử lý một hàm."
#: params.def:794
#, no-c-format
@@ -2362,22 +2160,19 @@ msgid "Maximum number of disambiguations to perform per memory access."
msgstr ""
#: params.def:799
-#, fuzzy, no-c-format
-#| msgid "Max loops number for regional RA"
+#, no-c-format
msgid "Max loops number for regional RA."
-msgstr "Số tối Ä‘a các vòng lặp cho RA thuá»™c miá»n"
+msgstr "Số tối Ä‘a các vòng lặp cho RA thuá»™c miá»n."
#: params.def:804
-#, fuzzy, no-c-format
-#| msgid "Max size of conflict table in MB"
+#, no-c-format
msgid "Max size of conflict table in MB."
-msgstr "Kích cỡ tối đa (theo MB) của bảng xung đột"
+msgstr "Kích cỡ tối đa (theo MB) của bảng xung đột."
#: params.def:809
-#, fuzzy, no-c-format
-#| msgid "The number of registers in each class kept unused by loop invariant motion"
+#, no-c-format
msgid "The number of registers in each class kept unused by loop invariant motion."
-msgstr "Số các thanh ghi mỗi hạng còn lại chưa dùng do chuyển động bất biến vòng lặp"
+msgstr "Số các thanh ghi mỗi lớp còn lại chưa dùng do chuyển động bất biến vòng lặp."
#: params.def:814
#, no-c-format
@@ -2390,46 +2185,39 @@ msgid "Minimal fall-through edge probability in percentage used to add BB to inh
msgstr ""
#: params.def:827
-#, fuzzy, no-c-format
-#| msgid "The maximum ratio between array size and switch branches for a switch conversion to take place"
+#, no-c-format
msgid "The maximum ratio between array size and switch branches for a switch conversion to take place."
-msgstr "Tỷ lệ tối đa giữa kích cỡ mảng và các nhánh chuyển đổi để chuyển đổi nhánh"
+msgstr "Tỷ lệ tối đa giữa kích cỡ mảng và các nhánh chuyển đổi để chuyển đảo để lấy chỗ trống."
#: params.def:835
-#, fuzzy, no-c-format
-#| msgid "size of tiles for loop blocking"
+#, no-c-format
msgid "size of tiles for loop blocking."
-msgstr "kích cỡ tile (đơn vị dữ liệu) để chặn vòng lặp"
+msgstr "kích cỡ tile (đơn vị dữ liệu) để chặn vòng lặp."
#: params.def:842
-#, fuzzy, no-c-format
-#| msgid "maximum number of parameters in a SCoP"
+#, no-c-format
msgid "maximum number of parameters in a SCoP."
-msgstr "số tối đa các tham số trong một SCoP"
+msgstr "số tối đa các tham số trong một SCoP."
#: params.def:849
-#, fuzzy, no-c-format
-#| msgid "maximum number of basic blocks per function to be analyzed by Graphite"
+#, no-c-format
msgid "maximum number of basic blocks per function to be analyzed by Graphite."
-msgstr "số tối đa các khối cơ bản mỗi hàm cần được Graphite phân tích"
+msgstr "số tối đa các khối cơ bản mỗi hàm cần được Graphite phân tích."
#: params.def:856
-#, fuzzy, no-c-format
-#| msgid "maximum number of parameters in a SCoP"
+#, no-c-format
msgid "maximum number of arrays per scop."
-msgstr "số tối đa các tham số trong một SCoP"
+msgstr "số tối đa các mảng trên một scop."
#: params.def:863
-#, fuzzy, no-c-format
-#| msgid "maximum number of basic blocks per function to be analyzed by Graphite"
+#, no-c-format
msgid "minimal number of loops per function to be analyzed by Graphite."
-msgstr "số tối đa các khối cơ bản mỗi hàm cần được Graphite phân tích"
+msgstr "số tối đa các khối cơ bản mỗi hàm cần được Graphite phân tích."
#: params.def:868
-#, fuzzy, no-c-format
-#| msgid "The maximum number of insns of an unswitched loop"
+#, no-c-format
msgid "maximum number of isl operations, 0 means unlimited"
-msgstr "Số tối đa các lệnh của một vòng lặp chưa chuyển đổi nhánh"
+msgstr "Số tối đa các thao tác isl, 0 là không giới hạn"
#: params.def:874
#, no-c-format
@@ -2437,16 +2225,14 @@ msgid "Maximum number of datarefs in loop for building loop data dependencies."
msgstr ""
#: params.def:881
-#, fuzzy, no-c-format
-#| msgid "Max basic blocks number in loop for loop invariant motion"
+#, no-c-format
msgid "Max basic blocks number in loop for loop invariant motion."
-msgstr "số tối đa các khối cơ bản trong vòng lặp để chuyển động bất biến vòng lặp"
+msgstr "Số tối đa các khối cơ bản trong vòng lặp để chuyển động bất biến vòng lặp."
#: params.def:889
-#, fuzzy, no-c-format
-#| msgid "use internal function id in profile lookup"
+#, no-c-format
msgid "use internal function id in profile lookup."
-msgstr "dùng mã số hàm nội tại trong tìm kiếm hồ sơ"
+msgstr "dùng mã số hàm nội tại trong tìm kiếm hồ sơ."
#: params.def:897
#, no-c-format
@@ -2454,28 +2240,24 @@ msgid "track topn target addresses in indirect-call profile."
msgstr ""
#: params.def:903
-#, fuzzy, no-c-format
-#| msgid "Maximum number of instructions in basic block to be considered for SLP vectorization"
+#, no-c-format
msgid "Maximum number of instructions in basic block to be considered for SLP vectorization."
-msgstr "Số tối đa các lệnh trong khối cơ bản cần tính để véc-tơ hóa SLP"
+msgstr "Số tối đa các lệnh trong khối cơ bản cần tính để véc-tơ hóa SLP."
#: params.def:908
-#, fuzzy, no-c-format
-#| msgid "Min. ratio of insns to prefetches to enable prefetching for a loop with an unknown trip count"
+#, no-c-format
msgid "Min. ratio of insns to prefetches to enable prefetching for a loop with an unknown trip count."
-msgstr "Tỷ lệ tối thiểu giữa các lệnh và các lần lấy sẵn để bật lấy sẵn cho một vòng lặp không rõ số đếm lần đi qua"
+msgstr "Tỷ lệ tối thiểu giữa các lệnh và các lần lấy sẵn để bật lấy sẵn cho một vòng lặp không rõ số đếm lần đi qua."
#: params.def:914
-#, fuzzy, no-c-format
-#| msgid "Min. ratio of insns to mem ops to enable prefetching in a loop"
+#, no-c-format
msgid "Min. ratio of insns to mem ops to enable prefetching in a loop."
-msgstr "Tỷ lệ tối thiểu giữa các lệnh và các thao tác vùng nhớ để bật lấy sẵn trong một vòng lặp"
+msgstr "Tỷ lệ tối thiểu giữa các lệnh và các thao tác vùng nhớ để bật lấy sẵn trong một vòng lặp."
#: params.def:921
-#, fuzzy, no-c-format
-#| msgid "Max. size of var tracking hash tables"
+#, no-c-format
msgid "Max. size of var tracking hash tables."
-msgstr "Kích cỡ tối đa của bảng chuỗi duy nhất theo dõi var"
+msgstr "Kích cỡ tối đa của bảng chuỗi duy nhất theo dõi var."
#: params.def:929
#, no-c-format
@@ -2488,16 +2270,14 @@ msgid "Max. size of loc list for which reverse ops should be added."
msgstr ""
#: params.def:944
-#, fuzzy, no-c-format
-#| msgid "The minimum UID to be used for a nondebug insn"
+#, no-c-format
msgid "The minimum UID to be used for a nondebug insn."
-msgstr "UID tối thiểu cần sử dụng cho một lệnh không gỡ rối"
+msgstr "UID tối thiểu cần sử dụng cho một lệnh không gỡ rối."
#: params.def:949
-#, fuzzy, no-c-format
-#| msgid "Maximum allowed growth of size of new parameters ipa-sra replaces a pointer to an aggregate with"
+#, no-c-format
msgid "Maximum allowed growth of size of new parameters ipa-sra replaces a pointer to an aggregate with."
-msgstr "Äá»™ tăng lên tối Ä‘a được pháp cá»§a kích cỡ tham số má»›i ipa-sra thì thay thế má»™t hàm trá» theo má»™t chiá»u rá»™ng tập hợp"
+msgstr "Äá»™ tăng lên tối Ä‘a được pháp cá»§a kích cỡ tham số má»›i ipa-sra thì thay thế má»™t hàm trá» theo má»™t chiá»u rá»™ng tập hợp."
#: params.def:955
#, no-c-format
@@ -2565,16 +2345,14 @@ msgid "Minimal size of a partition for LTO (in estimated instructions)."
msgstr ""
#: params.def:1036
-#, fuzzy, no-c-format
-#| msgid "Maximum number of nops to insert for a hint (Default 2)"
+#, no-c-format
msgid "Maximum number of namespaces to search for alternatives when name lookup fails."
-msgstr "Số tối Ä‘a các nops cần chèn cho má»™t lá»i gợi ý (mặc định là 2)"
+msgstr "Số tối đa các không gian tên để tìm kiếm cái thay thế khi việc tìm gặp lỗi."
#: params.def:1043
-#, fuzzy, no-c-format
-#| msgid "Maximum number of times that an insn could be scheduled"
+#, no-c-format
msgid "Maximum number of conditional store pairs that can be sunk."
-msgstr "Số tối Ä‘a các lần có thể định thá»i má»™t lệnh nào đó"
+msgstr "Số tối Ä‘a các cặp lưu Ä‘iá»u kiện cái mà có thể hạ xuống."
#: params.def:1051
#, no-c-format
@@ -2617,34 +2395,29 @@ msgid "Maximum length of candidate scans for straight-line strength reduction."
msgstr ""
#: params.def:1102
-#, fuzzy, no-c-format
-#| msgid "Enable asan stack protection"
+#, no-c-format
msgid "Enable asan stack protection."
-msgstr "Bật chức năng bảo vệ ngăn xếp asan"
+msgstr "Bật chức năng bảo vệ ngăn xếp asan."
#: params.def:1107
-#, fuzzy, no-c-format
-#| msgid "Enable asan globals protection"
+#, no-c-format
msgid "Enable asan globals protection."
-msgstr "Bật chức năng bảo vệ toàn cục asan"
+msgstr "Bật chức năng bảo vệ toàn cục asan."
#: params.def:1112
-#, fuzzy, no-c-format
-#| msgid "Enable asan store operations protection"
+#, no-c-format
msgid "Enable asan store operations protection."
-msgstr "Bật chức năng bảo vệ thao tác lưu trữ asan"
+msgstr "Bật chức năng bảo vệ thao tác lưu trữ asan."
#: params.def:1117
-#, fuzzy, no-c-format
-#| msgid "Enable asan load operations protection"
+#, no-c-format
msgid "Enable asan load operations protection."
-msgstr "Bật chức năng bảo vệ thao tác tải asan"
+msgstr "Bật chức năng bảo vệ thao tác tải asan."
#: params.def:1122
-#, fuzzy, no-c-format
-#| msgid "Enable asan builtin functions protection"
+#, no-c-format
msgid "Enable asan builtin functions protection."
-msgstr "Bật chức năng bảo vệ hàm dựng sẵn asan"
+msgstr "Bật chức năng bảo vệ hàm dựng sẵn asan."
#: params.def:1127
#, no-c-format
@@ -2677,19 +2450,19 @@ msgid "Scale factor to apply to the number of blocks in a threading path when co
msgstr ""
#: params.def:1160
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Maximum number of instructions to copy when duplicating blocks on a finite state automaton jump thread path."
-msgstr "số tối đa các khối cơ bản mỗi hàm cần được Graphite phân tích"
+msgstr ""
#: params.def:1165
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Maximum number of basic blocks on a finite state automaton jump thread path."
-msgstr "số tối đa các khối cơ bản mỗi hàm cần được Graphite phân tích"
+msgstr ""
#: params.def:1170
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Maximum number of new jump thread paths to create for a finite state automaton."
-msgstr "Số tối Ä‘a các nops cần chèn cho má»™t lá»i gợi ý (mặc định là 2)"
+msgstr ""
#: params.def:1175
#, no-c-format
@@ -2707,10 +2480,9 @@ msgid "Maximum recursion depth allowed when querying a property of an SSA name."
msgstr ""
#: params.def:1193
-#, fuzzy, no-c-format
-#| msgid "Maximum number of instructions in basic block to be considered for SLP vectorization"
+#, no-c-format
msgid "Maximum number of insns in a basic block to consider for RTL if-conversion."
-msgstr "Số tối đa các lệnh trong khối cơ bản cần tính để véc-tơ hóa SLP"
+msgstr "Số tối đa các lệnh trong khối cơ bản cần để coi là cho if-conversion SLP."
#: params.def:1199
#, no-c-format
@@ -3008,7 +2780,7 @@ msgstr "toán hạng không hợp lệ đối vá»›i “%%%câ€"
#: config/aarch64/aarch64.c:4540
#, c-format
msgid "incompatible floating point / vector register operand for '%%%c'"
-msgstr "toán hạn dấu chấm động / thanh ghi véctơ không tương thích cho '%%%c'"
+msgstr "toán hạn dấu chấm động / thanh ghi véctÆ¡ không tương thích cho “%%%câ€"
#: config/aarch64/aarch64.c:4586 config/arm/arm.c:22434
#, c-format
@@ -3290,12 +3062,11 @@ msgid "unsupported fixed-point conversion"
msgstr "không hỗ trợ chuyển đổi dấu chấm cố định"
#: config/avr/driver-avr.c:71
-#, fuzzy, c-format
-#| msgid "unknown spec function %qs"
+#, c-format
msgid ""
"Running spec function '%s' with %d args\n"
"\n"
-msgstr "không hiểu hàm đặc tả %qs"
+msgstr "Äang chạy hàm hàm đặc tả “%s†vá»›i %d đối số\n"
#: config/avr/driver-avr.c:118
#, c-format
@@ -3304,6 +3075,9 @@ msgid ""
"'%s': specfile='%s'\n"
"\n"
msgstr ""
+"“%sâ€: mmcu=“%sâ€\n"
+"“%sâ€: tập tin đặc tả=“%sâ€\n"
+"\n"
#: config/bfin/bfin.c:1385
#, c-format
@@ -3408,7 +3182,7 @@ msgstr "gặp hiệu ứng khác bất thưá»ng trong địa chỉ"
#. Can't possibly get anything else for a function-call, right?
#: config/cris/cris.c:3844
msgid "unidentifiable call op"
-msgstr ""
+msgstr "không nhận ra gá»i op"
#: config/cris/cris.c:3906
#, c-format
@@ -3599,10 +3373,9 @@ msgid "unknown insn mode"
msgstr "không rõ chế độ lệnh"
#: config/i386/djgpp.h:146
-#, fuzzy, c-format
-#| msgid "-f%s not supported: ignored"
+#, c-format
msgid "-f%s ignored (not supported for DJGPP)\n"
-msgstr "-f%s không được hỗ trợ: lỠđi"
+msgstr "-f%s được bỠqua (không được DJGPP hỗ trợ)\n"
#: config/i386/i386-interix.h:77
msgid "Use native (MS) bitfield layout"
@@ -3817,7 +3590,7 @@ msgstr "trích số không không hợp lệ"
#: config/rl78/rl78.c:1797 config/rl78/rl78.c:1883
#, c-format
msgid "q/Q modifiers invalid for symbol references"
-msgstr ""
+msgstr "bổ từ q/Q không hợp lệ cho tham chiếu ký hiệu"
#: config/rs6000/host-darwin.c:94
#, c-format
@@ -3866,14 +3639,12 @@ msgid "-mquad-memory is not available in little endian mode"
msgstr "-mquad-memory không sẵn sàng trên chế độ little endian"
#: config/rs6000/rs6000.c:4154
-#, fuzzy
-#| msgid "-mquad-memory requires 64-bit mode"
msgid "-mtoc-fusion requires 64-bit"
-msgstr "-mquad-memory yêu cầu chế độ 64-bit"
+msgstr "-mtoc-fusion yêu cầu chế độ 64-bit"
#: config/rs6000/rs6000.c:4161
msgid "-mtoc-fusion requires medium/large code model"
-msgstr ""
+msgstr "-mtoc-fusion yêu cầu mô hình mã medium/large"
#: config/rs6000/rs6000.c:9490
msgid "bad move"
@@ -3881,7 +3652,7 @@ msgstr "sai di chuyển"
#: config/rs6000/rs6000.c:19528
msgid "Bad 128-bit move"
-msgstr ""
+msgstr "Di chuyển 128-bit sai"
#: config/rs6000/rs6000.c:19719
#, c-format
@@ -3960,15 +3731,15 @@ msgstr "giá trị %%y sai, hãy thá»­ sá»­ dụng ràng buá»™c “Zâ€"
#: config/rs6000/rs6000.c:20893
msgid "__float128 and __ibm128 cannot be used in the same expression"
-msgstr ""
+msgstr "__float128 và __ibm128 không thể được dùng trong cùng một biểu thức"
#: config/rs6000/rs6000.c:20899
msgid "__ibm128 and long double cannot be used in the same expression"
-msgstr ""
+msgstr "__ibm128 và long double không thể được dùng trong cùng một biểu thức"
#: config/rs6000/rs6000.c:20905
msgid "__float128 and long double cannot be used in the same expression"
-msgstr ""
+msgstr "__float128 và long double không thể được dùng trong cùng một biểu thức"
#: config/rs6000/rs6000.c:34288
msgid "AltiVec argument passed to unprototyped function"
@@ -3979,37 +3750,36 @@ msgid "Could not generate addis value for fusion"
msgstr "Không thể tạo addis cho sát nhập"
#: config/rs6000/rs6000.c:36058
-#, fuzzy
msgid "Unable to generate load/store offset for fusion"
-msgstr "không thể tạo ra việc nạp lại cho:"
+msgstr "Không thể tạo ra việc tải/lưu offset cho hợp nhất"
#: config/rs6000/rs6000.c:36162
msgid "Bad GPR fusion"
-msgstr ""
+msgstr "Hợp nhất GPR sai"
#: config/rs6000/rs6000.c:36380
msgid "emit_fusion_p9_load, bad reg #1"
-msgstr ""
+msgstr "emit_fusion_p9_load, reg #1 sai"
#: config/rs6000/rs6000.c:36417
msgid "emit_fusion_p9_load, bad reg #2"
-msgstr ""
+msgstr "emit_fusion_p9_load, reg #2 sai"
#: config/rs6000/rs6000.c:36420
msgid "emit_fusion_p9_load not MEM"
-msgstr ""
+msgstr "emit_fusion_p9_load không MEM"
#: config/rs6000/rs6000.c:36458
msgid "emit_fusion_p9_store, bad reg #1"
-msgstr ""
+msgstr "emit_fusion_p9_store, reg #1 sai"
#: config/rs6000/rs6000.c:36495
msgid "emit_fusion_p9_store, bad reg #2"
-msgstr ""
+msgstr "emit_fusion_p9_store, reg #2 sai"
#: config/rs6000/rs6000.c:36498
msgid "emit_fusion_p9_store not MEM"
-msgstr ""
+msgstr "emit_fusion_p9_store không MEM"
#: config/s390/s390.c:6997
#, c-format
@@ -4019,7 +3789,7 @@ msgstr ""
#: config/s390/s390.c:7008
#, c-format
msgid "cannot decompose address"
-msgstr "không thể phân ly địa chỉ"
+msgstr "không thể giải mã địa chỉ"
#: config/s390/s390.c:7076
#, c-format
@@ -4064,7 +3834,7 @@ msgstr ""
#: config/s390/s390.c:7284 config/s390/s390.c:7305
#, c-format
msgid "invalid constant for output modifier '%c'"
-msgstr "hằng không hợp lệ cho bổ nghĩa kết xuất '%c'"
+msgstr "hằng không hợp lệ cho bổ nghÄ©a kết xuất “%câ€"
#: config/s390/s390.c:7302
#, c-format
@@ -4072,10 +3842,9 @@ msgid "invalid constant - try using an output modifier"
msgstr "hằng không hợp lệ - hãy thử dùng bổ nghĩa kết xuất"
#: config/s390/s390.c:7343
-#, fuzzy, c-format
-#| msgid "invalid constant for output modifier '%c'"
+#, c-format
msgid "invalid constant vector for output modifier '%c'"
-msgstr "hằng không hợp lệ cho bổ nghĩa kết xuất '%c'"
+msgstr "véc-tÆ¡ hằng không hợp lệ cho bổ nghÄ©a kết xuất “%câ€"
#: config/s390/s390.c:7350
#, c-format
@@ -4085,13 +3854,11 @@ msgstr "biểu thức không hợp lệ - hãy thá»­ dùng bổ nghÄ©a kết xuá
#: config/s390/s390.c:7353
#, c-format
msgid "invalid expression for output modifier '%c'"
-msgstr "biểu thức không hợp lệ cho bộ sửa đầu ra '%c'"
+msgstr "biểu thức không hợp lệ cho bá»™ sá»­a đầu ra “%câ€"
#: config/s390/s390.c:11001
-#, fuzzy
-#| msgid "AltiVec argument passed to unprototyped function"
msgid "Vector argument passed to unprototyped function"
-msgstr "đối số AltiVec bị gửi cho hàm không nguyên mẫu"
+msgstr "Äối số véc-tÆ¡ bị gá»­i cho hàm không nguyên mẫu"
#: config/s390/s390.c:14505
msgid "types differ in signess"
@@ -4102,10 +3869,8 @@ msgid "binary operator does not support two vector bool operands"
msgstr ""
#: config/s390/s390.c:14518
-#, fuzzy
-#| msgid "Your target platform does not support -fcheck-pointer-bounds"
msgid "binary operator does not support vector bool operand"
-msgstr "Ná»n tảng đích cá»§a bạn không há»— trợ -fcheck-pointer-bounds"
+msgstr ""
#: config/s390/s390.c:14526
msgid "binary operator does not support mixing vector bool with floating point vector operands"
@@ -4170,10 +3935,9 @@ msgid "invalid %%s operand"
msgstr "toán hạng %%s sai"
#: config/sparc/sparc.c:8934
-#, fuzzy, c-format
-#| msgid "floating point constant not a valid immediate operand"
+#, c-format
msgid "floating-point constant not a valid immediate operand"
-msgstr "hằng số dấu chấm động không phải là một giá trị trực tiếp đúng"
+msgstr "hằng số dấu chấm động không phải là một giá trị trực tiếp hợp lệ"
#: config/stormy16/stormy16.c:1733 config/stormy16/stormy16.c:1804
#, c-format
@@ -4615,7 +4379,7 @@ msgstr "<bộ đếm>"
#: cp/error.c:1279
msgid "<declaration error>"
-msgstr "<lỗi tuyên bố>"
+msgstr "<lỗi khai báo>"
#: cp/error.c:1808 cp/error.c:1828
msgid "<template parameter error>"
@@ -4623,7 +4387,7 @@ msgstr "<lỗi tham số mẫu>"
#: cp/error.c:1958
msgid "<statement>"
-msgstr "<lá»i tuyên bố>"
+msgstr "<lá»i khai báo>"
#: cp/error.c:1985 cp/error.c:3027 c-family/c-pretty-print.c:2182
#, gcc-internal-format
@@ -4677,12 +4441,12 @@ msgstr "Trong hàm bộ phận tĩnh %qs"
#: cp/error.c:3291
#, c-format
msgid "In copy constructor %qs"
-msgstr "Trong bộ dựng bản sao %qs"
+msgstr "Trong cấu tử bản sao %qs"
#: cp/error.c:3293
#, c-format
msgid "In constructor %qs"
-msgstr "Trong bá»™ dá»±ng %qs"
+msgstr "Trong cấu tử %qs"
#: cp/error.c:3295
#, c-format
@@ -4729,24 +4493,20 @@ msgid "required from %q#D\n"
msgstr "được yêu cầu từ %q#D\n"
#: cp/error.c:3368
-#, fuzzy
-#| msgid "recursively required from here"
msgid "recursively required from here\n"
-msgstr "yêu cầu đệ quy từ đây"
+msgstr "yêu cầu đệ quy từ đây\n"
#: cp/error.c:3369
-#, fuzzy
-#| msgid "required from here"
msgid "required from here\n"
-msgstr "được yêu cầu từ đây"
+msgstr "được yêu cầu từ đây\n"
#: cp/error.c:3421
msgid "%r%s:%d:%d:%R [ skipping %d instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]\n"
-msgstr ""
+msgstr "%r%s:%d:%d:%R [ bỠqua %d ngữ cảnh minh dụ, dùng -ftemplate-backtrace-limit=0 để tắt ]\n"
#: cp/error.c:3427
msgid "%r%s:%d:%R [ skipping %d instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]\n"
-msgstr ""
+msgstr "%r%s:%d:%R [ bỠqua %d ngữ cảnh minh dụ, dùng -ftemplate-backtrace-limit=0 để tắt ]\n"
#: cp/error.c:3481
msgid "%r%s:%d:%d:%R in constexpr expansion of %qs"
@@ -4783,7 +4543,7 @@ msgstr "nguồn không phải là má»™t hàm trá»"
#: cp/rtti.c:576
msgid "source is not a pointer to class"
-msgstr "nguồn không phải là một hàm trỠtới hạng"
+msgstr "nguồn không phải là một hàm trỠtới lớp"
#: cp/rtti.c:581
msgid "source is a pointer to incomplete type"
@@ -4791,11 +4551,11 @@ msgstr "nguồn là một hàm trỠtới loại không hoàn toàn"
#: cp/rtti.c:596
msgid "source is not of class type"
-msgstr "nguồn không phải có loại hạng"
+msgstr "nguồn không phải có loại lớp"
#: cp/rtti.c:601
msgid "source is of incomplete class type"
-msgstr "nguồn có loại hạng không hoàn toàn"
+msgstr "nguồn có loại lớp không hoàn toàn"
#: cp/rtti.c:610
msgid "conversion casts away constness"
@@ -4954,10 +4714,8 @@ msgid "Nonnegative width required"
msgstr "Yêu cầu chiá»u rá»™ng không phải âm"
#: fortran/io.c:552
-#, fuzzy
-#| msgid "Unexpected element %<%c%> in format string at %L"
msgid "Unexpected element %qc in format string at %L"
-msgstr "Gặp phần tử không cần “%c†trong chuỗi định dạng tại %L"
+msgstr "Gặp phần tử không cần “%qc†trong chuỗi định dạng tại %L"
#: fortran/io.c:554
msgid "Unexpected end of format string"
@@ -5103,15 +4861,15 @@ msgstr "IF (nếu) số há»c"
#: fortran/parse.c:1601
msgid "attribute declaration"
-msgstr "lá»i tuyên bố thuá»™c tính"
+msgstr "lá»i khai báo thuá»™c tính"
#: fortran/parse.c:1637
msgid "data declaration"
-msgstr "lá»i tuyên bố dữ liệu"
+msgstr "lá»i khai báo dữ liệu"
#: fortran/parse.c:1646
msgid "derived type declaration"
-msgstr "lá»i tuyên bố loại có hướng"
+msgstr "lá»i khai báo loại có hướng"
#: fortran/parse.c:1749
msgid "block IF"
@@ -5146,9 +4904,8 @@ msgid "elemental procedure"
msgstr "thủ tục loại yếu tố"
#: fortran/resolve.c:2248
-#, fuzzy
msgid "allocatable argument"
-msgstr "đối số hay thay đổi"
+msgstr "đối số phân bổ được"
#: fortran/resolve.c:2253
msgid "asynchronous argument"
@@ -5210,7 +4967,7 @@ msgstr "kết quả mảng"
#: fortran/resolve.c:2331
msgid "pointer or allocatable result"
-msgstr ""
+msgstr "con trỠhoặc kết quả cấp phát được"
#: fortran/resolve.c:2338
msgid "result with non-constant character length"
@@ -5226,14 +4983,12 @@ msgid "Invalid context for NULL() pointer at %%L"
msgstr "Gặp ngữ cảnh sai cho hàm trỠNULL() tại %%L"
#: fortran/resolve.c:3568
-#, fuzzy, c-format
-#| msgid "Operand of unary numeric operator '%s' at %%L is %s"
+#, c-format
msgid "Operand of unary numeric operator %%<%s%%> at %%L is %s"
msgstr "Tại %%L có một toán tử thuộc số nguyên phân “%s†với toán hạng %s"
#: fortran/resolve.c:3584
-#, fuzzy, c-format
-#| msgid "Operands of binary numeric operator '%s' at %%L are %s/%s"
+#, c-format
msgid "Operands of binary numeric operator %%<%s%%> at %%L are %s/%s"
msgstr "Tại %%L có một toán tử thuộc số nhị phân “%s†với các toán hạng %s/%s"
@@ -5243,8 +4998,7 @@ msgid "Operands of string concatenation operator at %%L are %s/%s"
msgstr "Tại %%L có một toán tử ghép nối chuỗi với các toán hạng %s/%s"
#: fortran/resolve.c:3618
-#, fuzzy, c-format
-#| msgid "Operands of logical operator '%s' at %%L are %s/%s"
+#, c-format
msgid "Operands of logical operator %%<%s%%> at %%L are %s/%s"
msgstr "Tại %%L có một toán tử hợp lý “%s†với các toán hạng %s/%s"
@@ -5263,28 +5017,24 @@ msgid "Logicals at %%L must be compared with %s instead of %s"
msgstr "Tại %%L thì các bộ hợp lý phải được so sánh với %s thay cho %s"
#: fortran/resolve.c:3703
-#, fuzzy, c-format
-#| msgid "Operands of comparison operator '%s' at %%L are %s/%s"
+#, c-format
msgid "Operands of comparison operator %%<%s%%> at %%L are %s/%s"
msgstr "Tại %%L có một toán tử so sánh “%s†với các toán hạng %s/%s"
#: fortran/resolve.c:3711
-#, fuzzy, c-format
-#| msgid "Unknown operator '%s' at %%L"
+#, c-format
msgid "Unknown operator %%<%s%%> at %%L"
-msgstr "Không rõ toán tử “%s†tại %%L"
+msgstr "Không rõ toán tử %%<%s%%> tại %%L"
#: fortran/resolve.c:3714
-#, fuzzy, c-format
-#| msgid "Operand of user operator '%s' at %%L is %s"
+#, c-format
msgid "Operand of user operator %%<%s%%> at %%L is %s"
-msgstr "Tại %%L có má»™t toán tá»­ ngưá»i dùng “%s†vá»›i toán hạng %s"
+msgstr "Toán hạng cá»§a toán tá»­ ngưá»i dùng %%<%s%%> tại %%L là %s"
#: fortran/resolve.c:3718
-#, fuzzy, c-format
-#| msgid "Operands of user operator '%s' at %%L are %s/%s"
+#, c-format
msgid "Operands of user operator %%<%s%%> at %%L are %s/%s"
-msgstr "Tại %%L có má»™t toán tá»­ ngưá»i dùng “%s†vá»›i các toán hạng %s/%s"
+msgstr "Các toán hạng cá»§a toán tá»­ ngưá»i dùng %%<%s%%> tại %%L là %s/%s"
#: fortran/resolve.c:3806
#, c-format
@@ -5347,12 +5097,12 @@ msgstr ""
#: fortran/trans-decl.c:5443
#, c-format
msgid "Actual string length does not match the declared one for dummy argument '%s' (%ld/%ld)"
-msgstr "Chiá»u dài chuá»—i thật không tương ứng vá»›i Ä‘iá»u tuyên bố cho đối số giả “%s†(%ld/%ld)"
+msgstr "Chiá»u dài chuá»—i thật không tương ứng vá»›i Ä‘iá»u khai báo cho đối số giả “%s†(%ld/%ld)"
#: fortran/trans-decl.c:5451
#, c-format
msgid "Actual string length is shorter than the declared one for dummy argument '%s' (%ld/%ld)"
-msgstr "Chiá»u dài chuá»—i thật vẫn nhá» hÆ¡n Ä‘iá»u tuyên bố cho đối số giả “%s†(%ld/%ld)"
+msgstr "Chiá»u dài chuá»—i thật vẫn nhá» hÆ¡n Ä‘iá»u khai báo cho đối số giả “%s†(%ld/%ld)"
#: fortran/trans-expr.c:8109
#, c-format
@@ -5361,17 +5111,17 @@ msgstr ""
#: fortran/trans-expr.c:9314
msgid "Assignment of scalar to unallocated array"
-msgstr ""
+msgstr "Gán vô hướng cho mảng chưa cấp phát"
#: fortran/trans-intrinsic.c:897
#, c-format
msgid "Unequal character lengths (%ld/%ld) in %s"
-msgstr "%3$s chứa các chiá»u dài ký tá»± khác nhau (%1$ld/%2$ld)"
+msgstr ""
#: fortran/trans-intrinsic.c:7002
-#, fuzzy, c-format
+#, c-format
msgid "Argument NCOPIES of REPEAT intrinsic is negative (its value is %ld)"
-msgstr "Äiá»u thá»±c chất REPEAT (lặp lại) có đối số NCOPIES (số các bản sao) quá lá»›n"
+msgstr "Tham số NCOPIES của REPEAT (lặp lại) hạn chế là âm (giá trị của nó là %ld)"
#: fortran/trans-intrinsic.c:7034
msgid "Argument NCOPIES of REPEAT intrinsic is too large"
@@ -5392,7 +5142,7 @@ msgstr "Nhãn đã gán không phải là một nhãn đích"
#: fortran/trans-stmt.c:1095
#, c-format
msgid "Invalid image number %d in SYNC IMAGES"
-msgstr ""
+msgstr "Số ảnh không hợp lệ %d trong SYNC IMAGES"
#: fortran/trans-stmt.c:1890 fortran/trans-stmt.c:2175
msgid "Loop variable has been modified"
@@ -5416,7 +5166,7 @@ msgstr "Lỗi cấp phát vùng nhớ"
#: fortran/trans.c:688 fortran/trans.c:1527
msgid "Allocation would exceed memory limit"
-msgstr ""
+msgstr "Cấp phát có thể vượt quá giới hạn bộ nhớ"
#: fortran/trans.c:858
#, c-format
@@ -5551,7 +5301,7 @@ msgid ""
"Display contents of a class file in readable form.\n"
"\n"
msgstr ""
-"Hiển thị ná»™i dung cá»§a má»™t tập tin hạng theo má»™t định dạng cho ngưá»i Ä‘á»c được.\n"
+"Hiển thị ná»™i dung cá»§a má»™t tập tin lá»›p theo má»™t định dạng cho ngưá»i Ä‘á»c được.\n"
"\n"
#: java/jcf-dump.c:1207
@@ -5567,17 +5317,17 @@ msgstr " --javap Tạo kết xuất bằng định dạng “ja
#: java/jcf-dump.c:1210
#, c-format
msgid " --classpath PATH Set path to find .class files\n"
-msgstr " --classpath ÄÆ¯á»œNG_DẪN Äặt đưá»ng dẫn theo đó cần tìm tập tin .class (hạng)\n"
+msgstr " --classpath ÄÆ¯á»œNG_DẪN Äặt đưá»ng dẫn theo đó cần tìm tập tin .class (lá»›p)\n"
#: java/jcf-dump.c:1211
#, c-format
msgid " -IDIR Append directory to class path\n"
-msgstr " -ITHƯ_MỤC Phụ thêm thư mục vào đưá»ng dẫn hạng\n"
+msgstr " -ITHƯ_MỤC Phụ thêm thư mục vào đưá»ng dẫn lá»›p\n"
#: java/jcf-dump.c:1212
#, c-format
msgid " --bootclasspath PATH Override built-in class path\n"
-msgstr " --bootclasspath ÄÆ¯á»œNG_DẪN Có quyá»n cao hÆ¡n đưá»ng dẫn hạng dá»±ng sẵn\n"
+msgstr " --bootclasspath ÄÆ¯á»œNG_DẪN Có quyá»n cao hÆ¡n đưá»ng dẫn lá»›p dá»±ng sẵn\n"
#: java/jcf-dump.c:1213
#, c-format
@@ -5626,7 +5376,7 @@ msgstr "Không thể mở “%s†cho kết xuất.\n"
#: java/jcf-dump.c:1391
#, c-format
msgid "bad format of .zip/.jar archive\n"
-msgstr "kho nén .zip/.jar có định dạng dai\n"
+msgstr "kho nén .zip/.jar có định dạng sai\n"
#: java/jcf-dump.c:1509
#, c-format
@@ -5698,20 +5448,16 @@ msgid "-c required for gnat2scil"
msgstr "-c là cần cho gnat2scil"
#: config/sol2.h:181
-#, fuzzy
-#| msgid "weakref is not supported in this configuration"
msgid "-fvtable-verify is not supported in this configuration"
-msgstr "weakref không được hỗ trợ trong cấu hình này"
+msgstr "-fvtable-verify không được hỗ trợ trong cấu hình này"
#: config/sol2.h:268 config/sol2.h:273
msgid "does not support multilib"
msgstr "không hỗ trợ chức năng đa thư viện"
#: config/sol2.h:365
-#, fuzzy
-#| msgid "-gz is not supported in this configuration"
msgid "-pie is not supported in this configuration"
-msgstr "-gz không được hỗ trợ trong cấu hình này"
+msgstr "-pie không được hỗ trợ trong cấu hình này"
#: config/darwin.h:251
msgid "-current_version only allowed with -dynamiclib"
@@ -5776,7 +5522,7 @@ msgstr "Objective C của GNU không còn hỗ trợ chức năng biên dịch t
#: objc/lang-specs.h:55
msgid "objc-cpp-output is deprecated; please use objective-c-cpp-output instead"
-msgstr ""
+msgstr "objc-cpp-output đã lạc hậu; vui lòng dùng objective-c-cpp-output để thay thế"
#: config/pa/pa-hpux10.h:102 config/pa/pa-hpux10.h:105
#: config/pa/pa-hpux10.h:113 config/pa/pa-hpux10.h:116
@@ -5899,93 +5645,66 @@ msgid "-femit-class-file should used along with -fsyntax-only"
msgstr "có nên kết hợp tùy chá»n --femit-class-filevá»›i -fsyntax-only"
#: fortran/lang.opt:146
-#, fuzzy
-#| msgid "-J<directory>\tPut MODULE files in 'directory'"
msgid "-J<directory>\tPut MODULE files in 'directory'."
-msgstr "-J<thư_mục>\tÄể vào thư mục này các tập tin MÔ-ÄUN"
+msgstr "-J<thư_mục>\tÄể vào thư mục này các tập tin MÔ-ÄUN."
#: fortran/lang.opt:198
-#, fuzzy
-#| msgid "Warn about possible aliasing of dummy arguments"
msgid "Warn about possible aliasing of dummy arguments."
-msgstr "Cảnh báo vỠđối số giả có thể bị chồng lấp"
+msgstr "Cảnh báo vỠđối số giả có thể bị chồng lấp."
#: fortran/lang.opt:202
-#, fuzzy
-#| msgid "Warn about alignment of COMMON blocks"
msgid "Warn about alignment of COMMON blocks."
-msgstr "Cảnh báo vỠsự xếp hàng các khối CHUNG"
+msgstr "Cảnh báo vỠsự xếp hàng các khối CHUNG."
#: fortran/lang.opt:206
-#, fuzzy
-#| msgid "Warn about missing ampersand in continued character constants"
msgid "Warn about missing ampersand in continued character constants."
-msgstr "Cảnh báo vỠký hiệu “&†còn thiếu trong hằng ký tự tiếp tục"
+msgstr "Cảnh báo vỠký hiệu “&†còn thiếu trong hằng ký tự tiếp tục."
#: fortran/lang.opt:210
-#, fuzzy
-#| msgid "Warn about creation of array temporaries"
msgid "Warn about creation of array temporaries."
-msgstr "Cảnh báo vá» sá»± tạo mục mảng tạm thá»i"
+msgstr "Cảnh báo vá» sá»± tạo mục mảng tạm thá»i."
#: fortran/lang.opt:214
msgid "Warn if the type of a variable might be not interoperable with C."
-msgstr ""
+msgstr "Cảnh báo nếu kiểu của biến có thể không có khả năng tương thích với C."
#: fortran/lang.opt:222
-#, fuzzy
-#| msgid "Warn about truncated character expressions"
msgid "Warn about truncated character expressions."
-msgstr "Cảnh báo vỠbiểu thức ký tự bị cắt ngắn"
+msgstr "Cảnh báo vỠbiểu thức ký tự bị cắt ngắn."
#: fortran/lang.opt:226
msgid "Warn about equality comparisons involving REAL or COMPLEX expressions."
msgstr ""
#: fortran/lang.opt:234
-#, fuzzy
-#| msgid "Warn about most implicit conversions"
msgid "Warn about most implicit conversions."
-msgstr "Cảnh báo chuyển đổi ngầm"
+msgstr "Cảnh báo chuyển đổi ngầm."
#: fortran/lang.opt:242
-#, fuzzy
-#| msgid "Warn about implicit function declarations"
msgid "Warn about function call elimination."
-msgstr "Cảnh báo vá» lá»i tuyên bố hàm ngầm"
+msgstr "Cảnh báo vá» lá»i gá»i hàm ngầm."
#: fortran/lang.opt:246
-#, fuzzy
-#| msgid "Warn about calls with implicit interface"
msgid "Warn about calls with implicit interface."
-msgstr "Cảnh báo vá» cuá»™c gá»i có giao diện ngầm"
+msgstr "Cảnh báo vá» cuá»™c gá»i có giao diện ngầm."
#: fortran/lang.opt:250
-#, fuzzy
-#| msgid "Warn about called procedures not explicitly declared"
msgid "Warn about called procedures not explicitly declared."
-msgstr "Cảnh báo vá» thá»§ tục được gá»i mà không phải được tuyên bố dứt khoát"
+msgstr "Cảnh báo vá» thá»§ tục được gá»i mà không phải được khai báo dứt khoát."
#: fortran/lang.opt:254
-#, fuzzy
-#| msgid "Warn about compile-time integer division by zero"
msgid "Warn about constant integer divisions with truncated results."
-msgstr "Cảnh báo vỠsố nguyên chia cho số không vào lúc biên dịch"
+msgstr "Cảnh báo vỠsố nguyên chia cho số không vào lúc biên dịch."
#: fortran/lang.opt:258
-#, fuzzy
-#| msgid "Warn about truncated source lines"
msgid "Warn about truncated source lines."
-msgstr "Cảnh báo vỠdòng nguồn bị cắt ngắn"
+msgstr "Cảnh báo vỠdòng nguồn bị cắt ngắn."
#: fortran/lang.opt:262
-#, fuzzy
-#| msgid "Warn on intrinsics not part of the selected standard"
msgid "Warn on intrinsics not part of the selected standard."
msgstr "Cảnh báo vá» Ä‘iá»u thá»±c chất không phải thuá»™c vá» tiêu chuẩn được chá»n"
#: fortran/lang.opt:274
-#, fuzzy
msgid "Warn about USE statements that have no ONLY qualifier."
msgstr "Cảnh báo vỠchuỗi định dạng không phải có nghĩa chữ"
@@ -5998,36 +5717,26 @@ msgid "Warn when a left-hand-side array variable is reallocated."
msgstr ""
#: fortran/lang.opt:294
-#, fuzzy
-#| msgid "Warn when a variable is unused"
msgid "Warn when a left-hand-side variable is reallocated."
-msgstr "Cảnh báo khi biến không được dùng"
+msgstr "Cảnh báo khi biến bên-tay-trái được tái cấp phát."
#: fortran/lang.opt:298
msgid "Warn if the pointer in a pointer assignment might outlive its target."
msgstr ""
#: fortran/lang.opt:306
-#, fuzzy
-#| msgid "Warn about \"suspicious\" constructs"
msgid "Warn about \"suspicious\" constructs."
-msgstr "Cảnh báo vá» cấu trúc \"đáng ngá»\""
+msgstr "Cảnh báo vá» cấu trúc \"đáng ngá»\"."
#: fortran/lang.opt:310
-#, fuzzy
-#| msgid "Permit nonconforming uses of the tab character"
msgid "Permit nonconforming uses of the tab character."
-msgstr "Cho phép sử dụng ký tự tab một cách không phù hợp"
+msgstr "Cho phép sử dụng ký tự tab một cách không phù hợp."
#: fortran/lang.opt:314
-#, fuzzy
-#| msgid "Warn about underflow of numerical constant expressions"
msgid "Warn about underflow of numerical constant expressions."
msgstr "Cảnh báo vỠbiểu thức hằng thuộc số bị tràn ngược"
#: fortran/lang.opt:322
-#, fuzzy
-#| msgid "Warn if a user-procedure has the same name as an intrinsic"
msgid "Warn if a user-procedure has the same name as an intrinsic."
msgstr "Cảnh báo nếu má»™t thá»§ tục ngưá»i dùng có cùng má»™t tên vá»›i má»™t Ä‘iá»u thá»±c chất"
@@ -6036,67 +5745,48 @@ msgid "Warn about unused dummy arguments."
msgstr "Cảnh báo vỠđối số giả có không dùng."
#: fortran/lang.opt:334
-#, fuzzy
msgid "Warn about zero-trip DO loops."
msgstr "Cảnh báo vỠđịnh dạng có chiá»u dài số không"
#: fortran/lang.opt:338
-#, fuzzy
-#| msgid "Enable preprocessing"
msgid "Enable preprocessing."
-msgstr "Bật khả năng tiá»n xá»­ lý"
+msgstr "Bật khả năng tiá»n xá»­ lý."
#: fortran/lang.opt:346
-#, fuzzy
-#| msgid "Disable preprocessing"
msgid "Disable preprocessing."
-msgstr "Tắt khả năng tiá»n xá»­ lý"
+msgstr "Tắt khả năng tiá»n xá»­ lý."
#: fortran/lang.opt:354
msgid "Eliminate multiple function invokations also for impure functions."
msgstr ""
#: fortran/lang.opt:358
-#, fuzzy
-#| msgid "Enable alignment of COMMON blocks"
msgid "Enable alignment of COMMON blocks."
-msgstr "Bật sự xếp hàng các khối CHUNG"
+msgstr "Bật sự xếp hàng các khối CHUNG."
#: fortran/lang.opt:362
-#, fuzzy
-#| msgid "All intrinsics procedures are available regardless of selected standard"
msgid "All intrinsics procedures are available regardless of selected standard."
-msgstr "Tất cả các thá»§ tục vá» Ä‘iá»u thá»±c chất vẫn sẵn sàng bất chấp tiêu chuẩn được chá»n"
+msgstr "Tất cả các thá»§ tục vá» Ä‘iá»u thá»±c chất vẫn sẵn sàng bất chấp tiêu chuẩn được chá»n."
#: fortran/lang.opt:370
-#, fuzzy
-#| msgid "Do not treat local variables and COMMON blocks as if they were named in SAVE statements"
msgid "Do not treat local variables and COMMON blocks as if they were named in SAVE statements."
-msgstr "Äừng xá»­ lý giá trị cục bá»™ hoặc khối CHUNG như là nó được đặt tên trong câu lệnh LƯU"
+msgstr "Äừng xá»­ lý giá trị cục bá»™ hoặc khối CHUNG như là nó được đặt tên trong câu lệnh LƯU."
#: fortran/lang.opt:374
-#, fuzzy
-#| msgid "Specify that backslash in string introduces an escape character"
msgid "Specify that backslash in string introduces an escape character."
-msgstr "Ghi rõ rằng một dấu chéo ngược trong một chuỗi thì giới thiệu một ký tự thoát"
+msgstr "Ghi rõ rằng một dấu chéo ngược trong một chuỗi thì giới thiệu một ký tự thoát."
#: fortran/lang.opt:378
-#, fuzzy
-#| msgid "Produce a backtrace when a runtime error is encountered"
msgid "Produce a backtrace when a runtime error is encountered."
-msgstr "Xuất một vết ngược khi gặp lỗi lúc chạy"
+msgstr "Xuất một vết ngược khi gặp lỗi lúc chạy."
#: fortran/lang.opt:382
-#, fuzzy
-#| msgid "-fblas-matmul-limit=<n>\tSize of the smallest matrix for which matmul will use BLAS"
msgid "-fblas-matmul-limit=<n>\tSize of the smallest matrix for which matmul will use BLAS."
-msgstr "-fblas-matmul-limit=<số>\tKích cỡ của ma trận nhỠnhất cho đó matmul sẽ sử dụng BLAS"
+msgstr "-fblas-matmul-limit=<số>\tKích cỡ của ma trận nhỠnhất cho đó matmul sẽ sử dụng BLAS."
#: fortran/lang.opt:386
-#, fuzzy
-#| msgid "Produce a warning at runtime if a array temporary has been created for a procedure argument"
msgid "Produce a warning at runtime if a array temporary has been created for a procedure argument."
-msgstr "Cảnh báo lúc chạy nếu má»™t mục mảng tạm thá»i đã được tạo cho má»™t đối số thá»§ tục"
+msgstr "Cảnh báo lúc chạy nếu má»™t mục mảng tạm thá»i đã được tạo cho má»™t đối số thá»§ tục."
#: fortran/lang.opt:390
msgid "-fconvert=<big-endian|little-endian|native|swap> The endianness used for unformatted files."
@@ -6108,46 +5798,32 @@ msgid "Unrecognized option to endianess value: %qs"
msgstr "Không thừa nhận giá trị tùy chá»n không phụ thuá»™c endian: %qs"
#: fortran/lang.opt:409
-#, fuzzy
-#| msgid "Use the Cray Pointer extension"
msgid "Use the Cray Pointer extension."
-msgstr "Sử dụng phần mở rộng hàm trỠCray Pointer"
+msgstr "Sử dụng phần mở rộng hàm trỠCray Pointer."
#: fortran/lang.opt:413
-#, fuzzy
-#| msgid "Ignore 'D' in column one in fixed form"
msgid "Ignore 'D' in column one in fixed form."
-msgstr "Có dạng cố định thì qua chữ “D†trong cột đầu tiên"
+msgstr "BỠqu chữ “D†trong cột đầu tiên trong thể dạng cố định."
#: fortran/lang.opt:417
-#, fuzzy
-#| msgid "Treat lines with 'D' in column one as comments"
msgid "Treat lines with 'D' in column one as comments."
-msgstr "Thấy dòng có chữ “D†trong cột đầu tiên là ghi chú"
+msgstr "Coi dòng có chữ “D†trong cột đầu tiên là ghi chú."
#: fortran/lang.opt:421
-#, fuzzy
-#| msgid "Set the default double precision kind to an 8 byte wide type"
msgid "Set the default double precision kind to an 8 byte wide type."
-msgstr "Äặt loại độ chính xác đôi mặc định thành má»™t loại có chiá»u rá»™ng 8 byte"
+msgstr "Äặt loại độ chính xác đôi mặc định thành má»™t loại có chiá»u rá»™ng 8 byte."
#: fortran/lang.opt:425
-#, fuzzy
-#| msgid "Set the default integer kind to an 8 byte wide type"
msgid "Set the default integer kind to an 8 byte wide type."
-msgstr "Äặt loại số nguyên mặc định thành má»™t loại có chiá»u rá»™ng 8 byte"
+msgstr "Äặt loại số nguyên mặc định thành má»™t loại có chiá»u rá»™ng 8 byte."
#: fortran/lang.opt:429
-#, fuzzy
-#| msgid "Set the default real kind to an 8 byte wide type"
msgid "Set the default real kind to an 8 byte wide type."
-msgstr "Äặt loại thật mặc định thành má»™t loại có chiá»u rá»™ng 8 byte"
+msgstr "Äặt loại số thá»±c mặc định thành má»™t loại có chiá»u rá»™ng 8 byte."
#: fortran/lang.opt:433
-#, fuzzy
-#| msgid "Allow dollar signs in entity names"
msgid "Allow dollar signs in entity names."
-msgstr "Cho phép tên thực thể chứa dấu đồng đô la \"$\""
+msgstr "Cho phép tên thực thể chứa dấu đồng đô la \"$\"."
#: fortran/lang.opt:437 config/alpha/alpha.opt:31 common.opt:728
#: common.opt:916 common.opt:920 common.opt:924 common.opt:928 common.opt:1417
@@ -6157,136 +5833,92 @@ msgid "Does nothing. Preserved for backward compatibility."
msgstr "Không làm gì. Giữ lại vì mục đích tương thích ngược."
#: fortran/lang.opt:441
-#, fuzzy
-#| msgid "Display the code tree after parsing"
msgid "Display the code tree after parsing."
-msgstr "Một khi phân tích cú pháp thì hiển thị cây mã nguồn"
+msgstr "Hiển thị cây mã sau khi phân tích cú pháp."
#: fortran/lang.opt:445
-#, fuzzy
-#| msgid "Display the code tree after front end optimization"
msgid "Display the code tree after front end optimization."
-msgstr "Hiển thị cây mã sau tối ưu hóa mặt tiá»n"
+msgstr "Hiển thị cây mã sau tối ưu hóa mặt tiá»n."
#: fortran/lang.opt:449
-#, fuzzy
-#| msgid "Display the code tree after parsing; deprecated option"
msgid "Display the code tree after parsing; deprecated option."
-msgstr "Hiển thị cây mã sau phân tích; tùy chá»n này đã lạc hậu"
+msgstr "Hiển thị cây mã sau phân tích; tùy chá»n này đã lạc hậu."
#: fortran/lang.opt:453
-#, fuzzy
-#| msgid "Specify that an external BLAS library should be used for matmul calls on large-size arrays"
msgid "Specify that an external BLAS library should be used for matmul calls on large-size arrays."
-msgstr "Ghi rõ rằng có nên sá»­ dụng má»™t thư viện BLAS bên ngoài cho cuá»™c gá»i matmul trên mạng có kích cỡ lá»›n"
+msgstr "Ghi rõ rằng có nên sá»­ dụng má»™t thư viện BLAS bên ngoài cho cuá»™c gá»i matmul trên mạng có kích cỡ lá»›n."
#: fortran/lang.opt:457
-#, fuzzy
-#| msgid "Use f2c calling convention"
msgid "Use f2c calling convention."
-msgstr "Sá»­ dụng quy ước gá»i f2c"
+msgstr "Sá»­ dụng quy ước gá»i f2c."
#: fortran/lang.opt:461
-#, fuzzy
-#| msgid "Assume that the source file is fixed form"
msgid "Assume that the source file is fixed form."
-msgstr "Coi là tập tin nguồn có dạng cố định"
+msgstr "Coi là tập tin nguồn có dạng cố định."
#: fortran/lang.opt:465
-#, fuzzy
-#| msgid "Interpret any INTEGER(4) as an INTEGER(8)"
msgid "Interpret any INTEGER(4) as an INTEGER(8)."
-msgstr "Biên dịch bất kỳ INTEGER(8) như là INTEGER(4)"
+msgstr "Biên dịch bất kỳ INTEGER(4) như là INTEGER(8)"
#: fortran/lang.opt:469 fortran/lang.opt:473
-#, fuzzy
-#| msgid "Specify where to find the compiled intrinsic modules"
msgid "Specify where to find the compiled intrinsic modules."
-msgstr "Ghi rõ vị trí ở đó có các mô-đun thực chất đã biên dịch"
+msgstr "Ghi rõ vị trí ở đó có các mô-đun thực chất đã biên dịch."
#: fortran/lang.opt:477
-#, fuzzy
-#| msgid "Allow arbitrary character line width in fixed mode"
msgid "Allow arbitrary character line width in fixed mode."
-msgstr "Trong chế độ cố định thì cÅ©ng cho phép chiá»u rá»™ng dòng ký tá»± tùy ý"
+msgstr "Trong chế độ cố định thì cÅ©ng cho phép chiá»u rá»™ng dòng ký tá»± tùy ý."
#: fortran/lang.opt:481
-#, fuzzy
-#| msgid "-ffixed-line-length-<n>\tUse n as character line width in fixed mode"
msgid "-ffixed-line-length-<n>\tUse n as character line width in fixed mode."
-msgstr "-ffixed-line-length-<số>\tTrong chế độ cố định thì chiá»u rá»™ng dòng ký tá»± là số này"
+msgstr "-ffixed-line-length-<số>\tTrong chế độ cố định thì chiá»u rá»™ng dòng ký tá»± là số này."
#: fortran/lang.opt:485
-#, fuzzy
-#| msgid "-ffpe-trap=[...]\tStop on following floating point exceptions"
msgid "-ffpe-trap=[...]\tStop on following floating point exceptions."
-msgstr "-ffpe-trap=[…]\tÄừng lại theo ngoại lệ dấu chấm động"
+msgstr "-ffpe-trap=[…]\tÄừng lại theo ngoại lệ dấu chấm động."
#: fortran/lang.opt:489
-#, fuzzy
-#| msgid "-ffpe-summary=[...]\tPrint summary of floating point exceptions"
msgid "-ffpe-summary=[...]\tPrint summary of floating point exceptions."
-msgstr "-ffpe-summary=[…]\tÄừng tổng hợp ngoại lệ dấu chấm động"
+msgstr "-ffpe-summary=[…]\tÄừng in tổng hợp ngoại lệ dấu chấm động."
#: fortran/lang.opt:493
-#, fuzzy
-#| msgid "Assume that the source file is free form"
msgid "Assume that the source file is free form."
-msgstr "Coi là tập tin nguồn có dạng tự do"
+msgstr "Coi là tập tin nguồn có dạng tự do."
#: fortran/lang.opt:497
-#, fuzzy
-#| msgid "Allow arbitrary character line width in free mode"
msgid "Allow arbitrary character line width in free mode."
-msgstr "Trong chế độ tá»± do thì cÅ©ng cho phép chiá»u rá»™ng dòng ký tá»± tùy ý"
+msgstr "Trong chế độ tá»± do thì cÅ©ng cho phép chiá»u rá»™ng dòng ký tá»± tùy ý."
#: fortran/lang.opt:501
-#, fuzzy
-#| msgid "-ffree-line-length-<n>\tUse n as character line width in free mode"
msgid "-ffree-line-length-<n>\tUse n as character line width in free mode."
-msgstr "-ffree-line-length-<số>\tTrong chế độ tá»± do thì chiá»u rá»™ng dòng ký tá»± là số này"
+msgstr "-ffree-line-length-<số>\tTrong chế độ tá»± do thì chiá»u rá»™ng dòng ký tá»± là số này."
#: fortran/lang.opt:505
-#, fuzzy
-#| msgid "Enable front end optimization"
msgid "Enable front end optimization."
-msgstr "Cho phép tối ưu hóa từ chương trình gá»i"
+msgstr "Cho phép tối ưu hóa từ chương trình gá»i."
#: fortran/lang.opt:509
-#, fuzzy
-#| msgid "Specify that no implicit typing is allowed, unless overridden by explicit IMPLICIT statements"
msgid "Specify that no implicit typing is allowed, unless overridden by explicit IMPLICIT statements."
-msgstr "Ghi rõ rằng không cho phép tạo loại ngầm nào, nếu không bị ghi đè bởi câu lệnh THỰC CHẤT dứt khoát"
+msgstr "Ghi rõ rằng không cho phép tạo loại ngầm nào, nếu không bị ghi đè bởi câu lệnh THỰC CHẤT dứt khoát."
#: fortran/lang.opt:513
-#, fuzzy
-#| msgid "-finit-character=<n>\tInitialize local character variables to ASCII value n"
msgid "-finit-character=<n>\tInitialize local character variables to ASCII value n."
-msgstr "-finit-character=<số>\tKhởi tạo các biến ký tự cục bộ thành giá trị ASCII này"
+msgstr "-finit-character=<số>\tKhởi tạo các biến ký tự cục bộ thành giá trị ASCII này."
#: fortran/lang.opt:517
-#, fuzzy
-#| msgid "-finit-integer=<n>\tInitialize local integer variables to n"
msgid "-finit-integer=<n>\tInitialize local integer variables to n."
-msgstr "-finit-integer=<số>\tKhởi tạo các biến số nguyên cục bộ thành giá trị này"
+msgstr "-finit-integer=<số>\tKhởi tạo các biến số nguyên cục bộ thành giá trị này."
#: fortran/lang.opt:521
-#, fuzzy
-#| msgid "Initialize local variables to zero (from g77)"
msgid "Initialize local variables to zero (from g77)."
-msgstr "Khởi tạo các biến cục bộ thành số không (từ g77)"
+msgstr "Khởi tạo các biến cục bộ thành số không (từ g77)."
#: fortran/lang.opt:525
-#, fuzzy
-#| msgid "-finit-logical=<true|false>\tInitialize local logical variables"
msgid "-finit-logical=<true|false>\tInitialize local logical variables."
-msgstr "-finit-logical=<true|false>\tKhởi tạo các biến hợp lý cục bộ (true=đúng, false=sai)"
+msgstr "-finit-logical=<true|false>\tKhởi tạo các biến hợp lý cục bộ (true=đúng, false=sai)."
#: fortran/lang.opt:529
-#, fuzzy
-#| msgid "-finit-real=<zero|snan|nan|inf|-inf>\tInitialize local real variables"
msgid "-finit-real=<zero|snan|nan|inf|-inf>\tInitialize local real variables."
-msgstr "-finit-real=<zero|snan|nan|inf|-inf>\tKhởi tạo các biến thực nội bộ"
+msgstr "-finit-real=<zero|snan|nan|inf|-inf>\tKhởi tạo các biến thực nội bộ."
#: fortran/lang.opt:532
#, c-format
@@ -6294,34 +5926,24 @@ msgid "Unrecognized option to floating-point init value: %qs"
msgstr "Không nhận ra tùy chá»n để khởi tạo giá trị dấu chấm động: %qs"
#: fortran/lang.opt:551
-#, fuzzy
-#| msgid "-fblas-matmul-limit=<n>\tSize of the smallest matrix for which matmul will use BLAS"
msgid "-finline-matmul-limit=<n>\tSpecify the size of the largest matrix for which matmul will be inlined."
-msgstr "-fblas-matmul-limit=<số>\tKích cỡ của ma trận nhỠnhất cho đó matmul sẽ sử dụng BLAS"
+msgstr "-finline-matmul-limit=<số>\tKích cỡ của ma trận nhỠnhất cho đó matmul sẽ được chung dòng."
#: fortran/lang.opt:555
-#, fuzzy
-#| msgid "-fmax-array-constructor=<n>\tMaximum number of objects in an array constructor"
msgid "-fmax-array-constructor=<n>\tMaximum number of objects in an array constructor."
-msgstr "-fmax-array-constructor=<số>\tSố tối đa các đối tượng trong một bộ cấu tạo mảng"
+msgstr "-fmax-array-constructor=<số>\tSố tối đa các đối tượng trong một bộ cấu tạo mảng."
#: fortran/lang.opt:559
-#, fuzzy
-#| msgid "-fmax-identifier-length=<n>\tMaximum identifier length"
msgid "-fmax-identifier-length=<n>\tMaximum identifier length."
-msgstr "-fmax-identifier-length=<số>\tChiá»u dài tối Ä‘a cá»§a bá»™ nhận diện"
+msgstr "-fmax-identifier-length=<số>\tChiá»u dài tối Ä‘a cá»§a bá»™ nhận diện."
#: fortran/lang.opt:563
-#, fuzzy
-#| msgid "-fmax-subrecord-length=<n>\tMaximum length for subrecords"
msgid "-fmax-subrecord-length=<n>\tMaximum length for subrecords."
-msgstr "-fmax-subrecord-length=<số>\tChiá»u dài tối Ä‘a cá»§a mục ghi phụ"
+msgstr "-fmax-subrecord-length=<số>\tChiá»u dài tối Ä‘a cá»§a mục ghi phụ."
#: fortran/lang.opt:567
-#, fuzzy
-#| msgid "-fmax-stack-var-size=<n>\tSize in bytes of the largest array that will be put on the stack"
msgid "-fmax-stack-var-size=<n>\tSize in bytes of the largest array that will be put on the stack."
-msgstr "-fmax-stack-var-size=<số>\tKích cỡ theo byte của mảng lớn nhất sẽ được để vào ngăn xếp"
+msgstr "-fmax-stack-var-size=<số>\tKích cỡ theo byte của mảng lớn nhất sẽ được để vào ngăn xếp."
#: fortran/lang.opt:571
msgid "Put all local arrays on stack."
@@ -6332,94 +5954,64 @@ msgid "Set default accessibility of module entities to PRIVATE."
msgstr "Äặt thành PRIVATE (riêng) tình trạng truy cập cá»§a thá»±c thể mô-Ä‘un."
#: fortran/lang.opt:591
-#, fuzzy
-#| msgid "Try to lay out derived types as compactly as possible"
msgid "Try to lay out derived types as compactly as possible."
-msgstr "Thá»­ bố trí các loại có hướng má»™t cách tóm gá»n nhất có thể"
+msgstr "Thá»­ bố trí các loại có hướng má»™t cách tóm gá»n nhất có thể."
#: fortran/lang.opt:599
-#, fuzzy
-#| msgid "Protect parentheses in expressions"
msgid "Protect parentheses in expressions."
-msgstr "Bảo vệ dấu ngoặc đơn trong biểu thức"
+msgstr "Bảo vệ dấu ngoặc đơn trong biểu thức."
#: fortran/lang.opt:603
-#, fuzzy
-#| msgid "Enable range checking during compilation"
msgid "Enable range checking during compilation."
-msgstr "Bật chức năng kiểm tra phạm vi trong khi biên dịch"
+msgstr "Bật chức năng kiểm tra phạm vi trong khi biên dịch."
#: fortran/lang.opt:607
-#, fuzzy
-#| msgid "Interpret any REAL(4) as a REAL(8)"
msgid "Interpret any REAL(4) as a REAL(8)."
-msgstr "Biên dịch bất kỳ REAL(4) như là REAL(8)"
+msgstr "Biên dịch bất kỳ REAL(4) như là REAL(8)."
#: fortran/lang.opt:611
-#, fuzzy
-#| msgid "Interpret any REAL(4) as a REAL(10)"
msgid "Interpret any REAL(4) as a REAL(10)."
-msgstr "Biên dịch bất kỳ REAL(4) như là REAL(10)"
+msgstr "Biên dịch bất kỳ REAL(4) như là REAL(10)."
#: fortran/lang.opt:615
-#, fuzzy
-#| msgid "Interpret any REAL(4) as a REAL(16)"
msgid "Interpret any REAL(4) as a REAL(16)."
-msgstr "Biên dịch bất kỳ REAL(4) như là REAL(16)"
+msgstr "Biên dịch bất kỳ REAL(4) như là REAL(16)."
#: fortran/lang.opt:619
-#, fuzzy
-#| msgid "Interpret any REAL(8) as a REAL(4)"
msgid "Interpret any REAL(8) as a REAL(4)."
-msgstr "Biên dịch bất kỳ REAL(8) như là REAL(4)"
+msgstr "Biên dịch bất kỳ REAL(8) như là REAL(4)."
#: fortran/lang.opt:623
-#, fuzzy
-#| msgid "Interpret any REAL(8) as a REAL(10)"
msgid "Interpret any REAL(8) as a REAL(10)."
-msgstr "Biên dịch bất kỳ REAL(8) như là REAL(10)"
+msgstr "Biên dịch bất kỳ REAL(8) như là REAL(10)."
#: fortran/lang.opt:627
-#, fuzzy
-#| msgid "Interpret any REAL(8) as a REAL(16)"
msgid "Interpret any REAL(8) as a REAL(16)."
-msgstr "Biên dịch bất kỳ REAL(8) như là REAL(16)"
+msgstr "Biên dịch bất kỳ REAL(8) như là REAL(16)."
#: fortran/lang.opt:631
-#, fuzzy
-#| msgid "Reallocate the LHS in assignments"
msgid "Reallocate the LHS in assignments."
-msgstr "Tái cấp phát được LHS trong phép gán"
+msgstr "Tái cấp phát được LHS trong phép gán."
#: fortran/lang.opt:635
-#, fuzzy
-#| msgid "Use a 4-byte record marker for unformatted files"
msgid "Use a 4-byte record marker for unformatted files."
-msgstr "Có tập tin chưa định dạng thì sử dụng một ký hiệu đánh dấu mục ghi loại 4 byte"
+msgstr "Có tập tin chưa định dạng thì sử dụng một ký hiệu đánh dấu mục ghi loại 4 byte."
#: fortran/lang.opt:639
-#, fuzzy
-#| msgid "Use an 8-byte record marker for unformatted files"
msgid "Use an 8-byte record marker for unformatted files."
-msgstr "Có tập tin chưa định dạng thì sử dụng một ký hiệu đánh dấu mục ghi loại 8 byte"
+msgstr "Có tập tin chưa định dạng thì sử dụng một ký hiệu đánh dấu mục ghi loại 8 byte."
#: fortran/lang.opt:643
-#, fuzzy
-#| msgid "Allocate local variables on the stack to allow indirect recursion"
msgid "Allocate local variables on the stack to allow indirect recursion."
-msgstr "Cấp phát các biến cúc bộ trên ngăn xếp để cho phép đệ quy một cách gián tiếp"
+msgstr "Cấp phát các biến cúc bộ trên ngăn xếp để cho phép đệ quy một cách gián tiếp."
#: fortran/lang.opt:647
-#, fuzzy
-#| msgid "Copy array sections into a contiguous block on procedure entry"
msgid "Copy array sections into a contiguous block on procedure entry."
-msgstr "Vào thủ tục thì cũng sao chép các phần mảng vào một khối kỠnhau"
+msgstr "Vào thủ tục thì cũng sao chép các phần mảng vào một khối kỠnhau."
#: fortran/lang.opt:651
-#, fuzzy
-#| msgid "-fcoarray=<none|single|lib>\tSpecify which coarray parallelization should be used"
msgid "-fcoarray=<none|single|lib>\tSpecify which coarray parallelization should be used."
-msgstr "-fcoarray=<none|single|lib>\tChỉ định đồng mảng song song nào nên được dùng"
+msgstr "-fcoarray=<none|single|lib>\tChỉ định đồng mảng song song nào nên được dùng."
#: fortran/lang.opt:654
#, c-format
@@ -6427,28 +6019,20 @@ msgid "Unrecognized option: %qs"
msgstr "Không nhận ra tùy chá»n: \"%qs\""
#: fortran/lang.opt:667
-#, fuzzy
-#| msgid "-fcheck=[...]\tSpecify which runtime checks are to be performed"
msgid "-fcheck=[...]\tSpecify which runtime checks are to be performed."
-msgstr "-fcheck=[…]\tGhi rõ có nên thực hiện những hàm kiểm tra lúc chạy nào"
+msgstr "-fcheck=[…]\tGhi rõ có nên thực hiện những hàm kiểm tra lúc chạy nào."
#: fortran/lang.opt:671
-#, fuzzy
-#| msgid "Append a second underscore if the name already contains an underscore"
msgid "Append a second underscore if the name already contains an underscore."
-msgstr "Tên đã chứa một dấu gạch dưới thì phụ thêm một dấu gạch dưới bổ sung"
+msgstr "Tên đã chứa một dấu gạch dưới thì phụ thêm một dấu gạch dưới bổ sung."
#: fortran/lang.opt:679
-#, fuzzy
-#| msgid "Apply negative sign to zero values"
msgid "Apply negative sign to zero values."
-msgstr "Có giá trị số không thì áp dụng ký hiệu trừ"
+msgstr "Có giá trị số không thì áp dụng ký hiệu trừ."
#: fortran/lang.opt:683
-#, fuzzy
-#| msgid "Append underscores to externally visible names"
msgid "Append underscores to externally visible names."
-msgstr "Có tên hiển thị bên ngoài thì phụ thêm dấu gạch dưới"
+msgstr "Có tên hiển thị bên ngoài thì phụ thêm dấu gạch dưới."
#: fortran/lang.opt:687 c-family/c.opt:1139 c-family/c.opt:1163
#: c-family/c.opt:1389 config/pa/pa.opt:42 config/pa/pa.opt:66
@@ -6460,46 +6044,32 @@ msgid "Does nothing. Preserved for backward compatibility."
msgstr "Không làm gì. Dành cho mục đích tương thích ngược."
#: fortran/lang.opt:727
-#, fuzzy
-#| msgid "Statically link the GNU Fortran helper library (libgfortran)"
msgid "Statically link the GNU Fortran helper library (libgfortran)."
-msgstr "Liên kết tĩnh thư viện bổ trợ Fortran của GNU (libgfortran)"
+msgstr "Liên kết tĩnh thư viện bổ trợ Fortran của GNU (libgfortran)."
#: fortran/lang.opt:731
-#, fuzzy
-#| msgid "Conform to the ISO Fortran 2003 standard"
msgid "Conform to the ISO Fortran 2003 standard."
-msgstr "Làm cho hợp với tiêu chuẩn ISO Fortran 2003"
+msgstr "Làm cho hợp với tiêu chuẩn ISO Fortran 2003."
#: fortran/lang.opt:735
-#, fuzzy
-#| msgid "Conform to the ISO Fortran 2008 standard"
msgid "Conform to the ISO Fortran 2008 standard."
-msgstr "Làm cho hợp với tiêu chuẩn ISO Fortran 2008"
+msgstr "Làm cho hợp với tiêu chuẩn ISO Fortran 2008."
#: fortran/lang.opt:739
-#, fuzzy
-#| msgid "Conform to the ISO Fortran 2008 standard including TS 29113"
msgid "Conform to the ISO Fortran 2008 standard including TS 29113."
-msgstr "Làm cho hợp với tiêu chuẩn ISO Fortran 2008 bao gồm TS 29113"
+msgstr "Làm cho hợp với tiêu chuẩn ISO Fortran 2008 bao gồm TS 29113."
#: fortran/lang.opt:743
-#, fuzzy
-#| msgid "Conform to the ISO Fortran 95 standard"
msgid "Conform to the ISO Fortran 95 standard."
-msgstr "Làm cho hợp với tiêu chuẩn ISO Fortran 95"
+msgstr "Làm cho hợp với tiêu chuẩn ISO Fortran 95."
#: fortran/lang.opt:747
-#, fuzzy
-#| msgid "Conform to nothing in particular"
msgid "Conform to nothing in particular."
-msgstr "Làm cho hợp với không gì đặc biệt"
+msgstr "Làm cho hợp với không gì đặc biệt."
#: fortran/lang.opt:751
-#, fuzzy
-#| msgid "Accept extensions to support legacy code"
msgid "Accept extensions to support legacy code."
-msgstr "Chấp nhận phần mở rộng để hỗ trợ mã nguồn thừa tự"
+msgstr "Chấp nhận phần mở rộng để hỗ trợ mã nguồn cũ."
#: c-family/c.opt:43 c-family/c.opt:46 c-family/c.opt:181
#, c-format
@@ -6528,90 +6098,62 @@ msgid "missing path after %qs"
msgstr "thiếu đưá»ng dẫn sau %qs"
#: c-family/c.opt:182
-#, fuzzy
-#| msgid "-A<question>=<answer>\tAssert the <answer> to <question>. Putting '-' before <question> disables the <answer> to <question>"
msgid "-A<question>=<answer>\tAssert the <answer> to <question>. Putting '-' before <question> disables the <answer> to <question>."
msgstr ""
"-A<há»i>=<đáp>\tKhắng định trả lá»i cho má»™t câu há»i nào đó.\n"
"\t\tThêm dấu trừ - vào trước <há»i> thì tắt <đáp> đó."
#: c-family/c.opt:186
-#, fuzzy
-#| msgid "Do not discard comments"
msgid "Do not discard comments."
-msgstr "Äừng loại bá» ghi chú"
+msgstr "Äừng loại bá» ghi chú."
#: c-family/c.opt:190
-#, fuzzy
-#| msgid "Do not discard comments in macro expansions"
msgid "Do not discard comments in macro expansions."
-msgstr "Äừng loại bá» ghi chú trong sá»± mở rá»™ng vÄ© lệnh"
+msgstr "Äừng loại bá» ghi chú trong sá»± mở rá»™ng vÄ© lệnh."
#: c-family/c.opt:194
-#, fuzzy
-#| msgid "-D<macro>[=<val>]\tDefine a <macro> with <val> as its value. If just <macro> is given, <val> is taken to be 1"
msgid "-D<macro>[=<val>]\tDefine a <macro> with <val> as its value. If just <macro> is given, <val> is taken to be 1."
-msgstr "-D<vĩ_lệnh>[=<giá_trị>]\tXác định vĩ lệnh này có giá trị này. Chỉ đưa ra vĩ lệnh thì giá trị được coi là 1"
+msgstr "-D<vĩ_lệnh>[=<giá_trị>]\tXác định vĩ lệnh này có giá trị này. Chỉ đưa ra vĩ lệnh thì giá trị được coi là 1."
#: c-family/c.opt:201
-#, fuzzy
-#| msgid "-F <dir>\tAdd <dir> to the end of the main framework include path"
msgid "-F <dir>\tAdd <dir> to the end of the main framework include path."
-msgstr "-F <thư_mục>\tPhụ thêm thư mục này vào đưá»ng dẫn bao gồm khuôn khổ chính"
+msgstr "-F <thư_mục>\tPhụ thêm thư mục này vào cuối đưá»ng dẫn bao gồm khung chính."
#: c-family/c.opt:205
-#, fuzzy
-#| msgid "Print the name of header files as they are used"
msgid "Print the name of header files as they are used."
-msgstr "In ra tên của tập tin phần đầu nào đang được sử dụng"
+msgstr "In ra tên của tập tin phần đầu nào đang được sử dụng."
#: c-family/c.opt:209
-#, fuzzy
-#| msgid "-I <dir>\tAdd <dir> to the end of the main include path"
msgid "-I <dir>\tAdd <dir> to the end of the main include path."
-msgstr "-I <thư_mục>\tPhụ thêm thư mục này vào đưá»ng dẫn bao gồm chính"
+msgstr "-I <thư_mục>\tPhụ thêm thư mục này vào đưá»ng dẫn bao gồm chính."
#: c-family/c.opt:213
-#, fuzzy
-#| msgid "Generate make dependencies"
msgid "Generate make dependencies."
-msgstr "Tạo ra quan hệ phụ thuộc của make"
+msgstr "Tạo ra quan hệ phụ thuộc của make."
#: c-family/c.opt:217
-#, fuzzy
-#| msgid "Generate make dependencies and compile"
msgid "Generate make dependencies and compile."
-msgstr "Tạo ra quan hệ phụ thuộc của make, và biên dịch"
+msgstr "Tạo ra quan hệ phụ thuộc của make, và biên dịch."
#: c-family/c.opt:221
-#, fuzzy
-#| msgid "-MF <file>\tWrite dependency output to the given file"
msgid "-MF <file>\tWrite dependency output to the given file."
-msgstr "-MF <tập-tin>\tGhi vào tập tin này kết xuất vỠquan hệ phụ thuộc"
+msgstr "-MF <tập-tin>\tGhi vào tập tin này kết xuất vỠquan hệ phụ thuộc."
#: c-family/c.opt:225
-#, fuzzy
-#| msgid "Treat missing header files as generated files"
msgid "Treat missing header files as generated files."
-msgstr "Thấy tập tin phần đầu còn thiếu là tập tin được tạo ra"
+msgstr "Coi tập tin phần đầu còn thiếu là tập tin được tạo ra."
#: c-family/c.opt:229
-#, fuzzy
-#| msgid "Like -M but ignore system header files"
msgid "Like -M but ignore system header files."
-msgstr "Giống như -M mà bỠqua tập tin phần đầu của hệ thống"
+msgstr "Giống như -M mà bỠqua tập tin phần đầu của hệ thống."
#: c-family/c.opt:233
-#, fuzzy
-#| msgid "Like -MD but ignore system header files"
msgid "Like -MD but ignore system header files."
-msgstr "Giống như -MD mà bỠqua tập tin phần đầu của hệ thống"
+msgstr "Giống như -MD mà bỠqua tập tin phần đầu của hệ thống."
#: c-family/c.opt:237
-#, fuzzy
-#| msgid "Generate phony targets for all headers"
msgid "Generate phony targets for all headers."
-msgstr "Tạo ra đích giả cho má»i phần đầu"
+msgstr "Tạo ra đích giả cho má»i phần đầu."
#: c-family/c.opt:240 c-family/c.opt:244
#, c-format
@@ -6619,68 +6161,48 @@ msgid "missing makefile target after %qs"
msgstr "thiếu đích makefile sau %qs"
#: c-family/c.opt:241
-#, fuzzy
-#| msgid "-MQ <target>\tAdd a MAKE-quoted target"
msgid "-MQ <target>\tAdd a MAKE-quoted target."
-msgstr "-MQ <đích>\tThêm một đích được MAKE trích dẫn"
+msgstr "-MQ <đích>\tThêm một đích được MAKE trích dẫn."
#: c-family/c.opt:245
-#, fuzzy
-#| msgid "-MT <target>\tAdd an unquoted target"
msgid "-MT <target>\tAdd an unquoted target."
-msgstr "-MT <đích>\tThêm một đích không phải được trích dẫn"
+msgstr "-MT <đích>\tThêm một đích không phải được trích dẫn."
#: c-family/c.opt:249
-#, fuzzy
-#| msgid "Do not generate #line directives"
msgid "Do not generate #line directives."
-msgstr "Äừng tạo ra chỉ thị #line"
+msgstr "Äừng tạo ra chỉ thị #line."
#: c-family/c.opt:253
-#, fuzzy
-#| msgid "-U<macro>\tUndefine <macro>"
msgid "-U<macro>\tUndefine <macro>."
-msgstr "-U<vĩ_lệnh>\tHủy xác định vĩ lệnh này"
+msgstr "-U<vĩ_lệnh>\tHủy xác định vĩ lệnh này."
#: c-family/c.opt:257
-#, fuzzy
-#| msgid "Warn about things that will change when compiling with an ABI-compliant compiler"
msgid "Warn about things that will change when compiling with an ABI-compliant compiler."
-msgstr "Cảnh báo vá» trưá»ng hợp sẽ thay đổi khi biên dịch bằng má»™t bá»™ biên dịch tương thích vá»›i ABI"
+msgstr "Cảnh báo vá» trưá»ng hợp sẽ thay đổi khi biên dịch bằng má»™t bá»™ biên dịch tương thích vá»›i ABI."
#: c-family/c.opt:261
-#, fuzzy
-#| msgid "Warn about things that change between the current -fabi-version and the specified version"
msgid "Warn about things that change between the current -fabi-version and the specified version."
-msgstr "Cảnh báo vỠnhững thứ thay đổi giữa -fabi-version hiện tại và phiên bản chỉ định"
+msgstr "Cảnh báo vỠnhững thứ thay đổi giữa -fabi-version hiện tại và phiên bản chỉ định."
#: c-family/c.opt:265
msgid "Warn if a subobject has an abi_tag attribute that the complete object type does not have."
msgstr ""
#: c-family/c.opt:272
-#, fuzzy
-#| msgid "Warn about suspicious uses of memory addresses"
msgid "Warn about suspicious uses of memory addresses."
-msgstr "Cảnh báo vá» sá»­ dụng địa chỉ vùng nhá»› má»™t cách đáng ngá»"
+msgstr "Cảnh báo vá» sá»­ dụng địa chỉ vùng nhá»› má»™t cách đáng ngá»."
#: c-family/c.opt:276 ada/gcc-interface/lang.opt:57
-#, fuzzy
-#| msgid "Enable most warning messages"
msgid "Enable most warning messages."
-msgstr "Bật phần lớn các thông điệp cảnh báo"
+msgstr "Bật phần lớn các thông điệp cảnh báo."
#: c-family/c.opt:288
-#, fuzzy
-#| msgid "Warn whenever an Objective-C assignment is being intercepted by the garbage collector"
msgid "Warn whenever an Objective-C assignment is being intercepted by the garbage collector."
-msgstr "Cảnh báo khi nào một sự gán Objective-C bị chặn bởi bộ nhặt rác"
+msgstr "Cảnh báo khi nào một sự gán Objective-C bị chặn bởi bộ nhặt rác."
#: c-family/c.opt:292
-#, fuzzy
-#| msgid "Warn about casting functions to incompatible types"
msgid "Warn about casting functions to incompatible types."
-msgstr "Cảnh báo vỠgán hàm cho loại không tương thích"
+msgstr "Cảnh báo vỠhàm áp kiểu cho kiểu không tương thích."
#: c-family/c.opt:296
msgid "Warn about boolean expression compared with an integer value different from true/false."
@@ -6691,283 +6213,196 @@ msgid "Warn when __builtin_frame_address or __builtin_return_address is used uns
msgstr ""
#: c-family/c.opt:304
-#, fuzzy
-#| msgid "Warn when a built-in preprocessor macro is undefined or redefined"
msgid "Warn when a built-in preprocessor macro is undefined or redefined."
-msgstr "Cảnh báo khi má»™t vÄ© lệnh bá»™ tiá»n xá»­ lý dá»±ng sẵn chưa được xác định hoặc được xác định lại"
+msgstr "Cảnh báo khi má»™t vÄ© lệnh bá»™ tiá»n xá»­ lý dá»±ng sẵn chưa được xác định hoặc được xác định lại."
#: c-family/c.opt:308
-#, fuzzy
-#| msgid "Warn about features not present in ISO C90, but present in ISO C99"
msgid "Warn about features not present in ISO C90, but present in ISO C99."
-msgstr "Cảnh báo vỠcác đặc điểm không có trong ISO C90, nhưng lại có trong ISO C99"
+msgstr "Cảnh báo vỠcác đặc điểm không có trong ISO C90, nhưng lại có trong ISO C99."
#: c-family/c.opt:312
-#, fuzzy
-#| msgid "Warn about features not present in ISO C99, but present in ISO C11"
msgid "Warn about features not present in ISO C99, but present in ISO C11."
-msgstr "Cảnh báo vỠcác đặc điểm không có trong ISO C99, nhưng lại có trong ISO C11"
+msgstr "Cảnh báo vỠcác đặc điểm không có trong ISO C99, nhưng lại có trong ISO C11."
#: c-family/c.opt:316
-#, fuzzy
-#| msgid "Warn about C constructs that are not in the common subset of C and C++"
msgid "Warn about C constructs that are not in the common subset of C and C++."
-msgstr "Cảnh báo vỠcấu trúc C không nằm trong tập hợp phụ chung của C và C++"
+msgstr "Cảnh báo vỠcấu trúc C không nằm trong tập hợp phụ chung của C và C++."
#: c-family/c.opt:323
-#, fuzzy
-#| msgid "Warn about C++ constructs whose meaning differs between ISO C++ 1998 and ISO C++ 2011"
msgid "Warn about C++ constructs whose meaning differs between ISO C++ 1998 and ISO C++ 2011."
-msgstr "Cảnh báo vỠcấu trúc C++ mà nó có nghĩa khác nhau giữa ISO C++ 1998 và ISO C++ 2011"
+msgstr "Cảnh báo vỠcấu trúc C++ mà nó có nghĩa khác nhau giữa ISO C++ 1998 và ISO C++ 2011."
#: c-family/c.opt:327
-#, fuzzy
-#| msgid "Warn about C++ constructs whose meaning differs between ISO C++ 2011 and ISO C++ 2014"
msgid "Warn about C++ constructs whose meaning differs between ISO C++ 2011 and ISO C++ 2014."
-msgstr "Cảnh báo vỠcấu trúc C++ mà nó có nghĩa khác nhau giữa ISO C++ 2001 và ISO C++ 2014"
+msgstr "Cảnh báo vỠcấu trúc C++ mà nó có nghĩa khác nhau giữa ISO C++ 2001 và ISO C++ 2014."
#: c-family/c.opt:331
-#, fuzzy
-#| msgid "Warn about casts which discard qualifiers"
msgid "Warn about casts which discard qualifiers."
-msgstr "Cảnh báo vá» sá»± gán mà loại bá» Ä‘oạn Ä‘iá»u kiện"
+msgstr "Cảnh báo vá» sá»± ép kiểu mà loại bá» Ä‘oạn Ä‘iá»u kiện."
#: c-family/c.opt:335
-#, fuzzy
-#| msgid "Warn about subscripts whose type is \"char\""
msgid "Warn about subscripts whose type is \"char\"."
-msgstr "Cảnh báo vá» chữ in thấp có loại “charâ€"
+msgstr "Cảnh báo vá» chữ in thấp có loại “charâ€."
#: c-family/c.opt:339
msgid "Warn about memory access errors found by Pointer Bounds Checker."
msgstr ""
#: c-family/c.opt:343
-#, fuzzy
-#| msgid "Warn about variables that might be changed by \"longjmp\" or \"vfork\""
msgid "Warn about variables that might be changed by \"longjmp\" or \"vfork\"."
-msgstr "Cảnh báo vá» biến có thể bị thay đổi bởi “longjmp†hoặc “vforkâ€"
+msgstr "Cảnh báo vá» biến có thể bị thay đổi bởi “longjmp†hoặc “vforkâ€."
#: c-family/c.opt:347
-#, fuzzy
-#| msgid "Warn about possibly nested block comments, and C++ comments spanning more than one physical line"
msgid "Warn about possibly nested block comments, and C++ comments spanning more than one physical line."
-msgstr "Cảnh báo vá» ghi chú khối có thể lồng nhau, và ghi chú C++ chiếm giữ nhiá»u dòng vật lý"
+msgstr "Cảnh báo vá» ghi chú khối có thể lồng nhau, và ghi chú C++ chiếm giữ nhiá»u dòng vật lý."
#: c-family/c.opt:351
-#, fuzzy
-#| msgid "Synonym for -Wcomment"
msgid "Synonym for -Wcomment."
-msgstr "Từ đồng nghĩa với -Wcomment"
+msgstr "Äồng nghÄ©a vá»›i -Wcomment."
#: c-family/c.opt:355
-#, fuzzy
-#| msgid "Generate conditional move instructions."
msgid "Warn for conditionally-supported constructs."
-msgstr "Tạo chỉ lệnh di chuyển Ä‘iá»u kiện"
+msgstr "Cảnh báo cho cấu trúc há»—-trợ-có-Ä‘iá»u-kiện."
#: c-family/c.opt:359
-#, fuzzy
-#| msgid "Warn for implicit type conversions that may change a value"
msgid "Warn for implicit type conversions that may change a value."
-msgstr "Cảnh báo vỠsự chuyển đổi loại ngầm có thể thay đổi một giá trị"
+msgstr "Cảnh báo vỠsự chuyển đổi loại ngầm có thể thay đổi một giá trị."
#: c-family/c.opt:363
-#, fuzzy
-#| msgid "Warn for converting NULL from/to a non-pointer type"
msgid "Warn for converting NULL from/to a non-pointer type."
-msgstr "Cảnh báo vá» chuyển đổi NULL từ/đến má»™t loại không phải hàm trá»"
+msgstr "Cảnh báo vá» chuyển đổi NULL từ/đến má»™t loại không phải hàm trá»."
#: c-family/c.opt:371
-#, fuzzy
-#| msgid "Warn when all constructors and destructors are private"
msgid "Warn when all constructors and destructors are private."
-msgstr "Cảnh báo khi má»i bá»™ cấu trúc và bá»™ há»§y cấu trúc Ä‘á»u là riêng"
+msgstr "Cảnh báo khi má»i bá»™ cấu trúc và bá»™ há»§y cấu trúc Ä‘á»u là riêng."
#: c-family/c.opt:375
-#, fuzzy
-#| msgid "Warn about __TIME__, __DATE__ and __TIMESTAMP__ usage"
msgid "Warn about __TIME__, __DATE__ and __TIMESTAMP__ usage."
-msgstr "Cảnh báo vỠsử dụng __TIME__, __DATE__ và __TIMESTAMP__"
+msgstr "Cảnh báo vỠsử dụng __TIME__, __DATE__ và __TIMESTAMP__."
#: c-family/c.opt:379
-#, fuzzy
-#| msgid "Warn when a declaration is found after a statement"
msgid "Warn when a declaration is found after a statement."
-msgstr "Cảnh báo khi phát hiện má»™t lá»i tuyên bố đẳng sau má»™t câu lệnh"
+msgstr "Cảnh báo khi phát hiện má»™t lá»i khai báo đẳng sau má»™t câu lệnh."
#: c-family/c.opt:383
-#, fuzzy
-#| msgid "Warn when deleting a pointer to incomplete type"
msgid "Warn when deleting a pointer to incomplete type."
-msgstr "Cảnh báo khi xóa một con trỠtới kiểu không hoàn toàn"
+msgstr "Cảnh báo khi xóa một con trỠtới kiểu không hoàn toàn."
#: c-family/c.opt:387
-#, fuzzy
-#| msgid "Warn about non-virtual destructors"
msgid "Warn about deleting polymorphic objects with non-virtual destructors."
-msgstr "Cảnh báo vỠbộ hủy cấu trúc không phải ảo"
+msgstr "Cảnh báo vỠxóa các đối tượng đa thể với cấu trúc không phải ảo."
#: c-family/c.opt:391
-#, fuzzy
-#| msgid "Warn if a deprecated compiler feature, class, method, or field is used"
msgid "Warn if a deprecated compiler feature, class, method, or field is used."
-msgstr "Cảnh báo nếu sá»­ dụng má»™t tính năng bá»™ biên dịch, hạng, phương pháp hay trưá»ng bị phản đối"
+msgstr "Cảnh báo nếu sá»­ dụng má»™t tính năng bá»™ biên dịch, lá»›p, phương pháp hay trưá»ng đã lạc hậu."
#: c-family/c.opt:395
-#, fuzzy
-#| msgid "Warn about positional initialization of structs requiring designated initializers"
msgid "Warn about positional initialization of structs requiring designated initializers."
-msgstr "Cảnh báo vỠđoạn khởi tạo của cấu trúc cần bộ khởi tạo thiết kế"
+msgstr "Cảnh báo vỠđoạn khởi tạo của cấu trúc cần bộ khởi tạo thiết kế."
#: c-family/c.opt:399
-#, fuzzy
-#| msgid "Warn if qualifiers on arrays which are pointer targets are discarded"
msgid "Warn if qualifiers on arrays which are pointer targets are discarded."
-msgstr "Cảnh báo nến từ hạn định trên mảng cái mà đích trỠđến bị loại bá»"
+msgstr "Cảnh báo nến từ hạn định trên mảng cái mà đích trỠđến bị loại bá»."
#: c-family/c.opt:403
-#, fuzzy
-#| msgid "Warn if type qualifiers on pointers are discarded"
msgid "Warn if type qualifiers on pointers are discarded."
-msgstr "Cảnh báo nếu từ hạn định trên các con trá» bị loại bá»"
+msgstr "Cảnh báo nếu từ hạn định trên các con trá» bị loại bá»."
#: c-family/c.opt:407
-#, fuzzy
-#| msgid "Warn about compile-time integer division by zero"
msgid "Warn about compile-time integer division by zero."
-msgstr "Cảnh báo vỠsố nguyên chia cho số không vào lúc biên dịch"
+msgstr "Cảnh báo vỠsố nguyên chia cho số không vào lúc biên dịch."
#: c-family/c.opt:411
msgid "Warn about duplicated conditions in an if-else-if chain."
-msgstr ""
+msgstr "Cảnh báo vá» các Ä‘iá»u kiện trùng lắp trong chuá»—i if-else-if."
#: c-family/c.opt:415
-#, fuzzy
-#| msgid "Warn about violations of Effective C++ style rules"
msgid "Warn about violations of Effective C++ style rules."
-msgstr "Cảnh báo vỠsự vượt quá quy tắc Effective C++"
+msgstr "Cảnh báo vỠsự vượt quá quy tắc Effective C++."
#: c-family/c.opt:419
-#, fuzzy
-#| msgid "Warn about an empty body in an if or else statement"
msgid "Warn about an empty body in an if or else statement."
-msgstr "Cảnh báo vỠthân trống trong một câu lệnh “if†(nếu) hay “else†(không thì)"
+msgstr "Cảnh báo vỠthân trống trong một câu lệnh “if†(nếu) hay “else†(không thì)."
#: c-family/c.opt:423
-#, fuzzy
-#| msgid "Warn about stray tokens after #elif and #endif"
msgid "Warn about stray tokens after #elif and #endif."
-msgstr "Cảnh báo vỠhiệu bài thừa đẳng sau #elif và #endif"
+msgstr "Cảnh báo vỠhiệu bài thừa đẳng sau #elif và #endif."
#: c-family/c.opt:427
-#, fuzzy
-#| msgid "Warn about comparison of different enum types"
msgid "Warn about comparison of different enum types."
-msgstr "Cảnh báo vỠsự so sánh các loại đếm (enum) khác nhau"
+msgstr "Cảnh báo vỠsự so sánh các loại đếm (enum) khác nhau."
#: c-family/c.opt:435
-#, fuzzy
-#| msgid "This switch is deprecated; use -Werror=implicit-function-declaration instead"
msgid "This switch is deprecated; use -Werror=implicit-function-declaration instead."
-msgstr "Cái chuyển này bị phản đối: hãy thay thế bằng -Werror=implicit-function-declaration"
+msgstr "Cái chuyển này đã lạc hậu: hãy thay thế bằng -Werror=implicit-function-declaration."
#: c-family/c.opt:439
-#, fuzzy
msgid "Warn for implicit type conversions that cause loss of floating point precision."
-msgstr "Cảnh báo vỠsự chuyển đổi loại ngầm có thể thay đổi một giá trị"
+msgstr "Cảnh báo vỠsự chuyển đổi loại ngầm có thể làm nguyên nhân mất chính xác số thực dấu chấm động."
#: c-family/c.opt:443
-#, fuzzy
-#| msgid "Warn if testing floating point numbers for equality"
msgid "Warn if testing floating point numbers for equality."
-msgstr "Cảnh báo nếu kiểm tra đẳng thức của con số dấu chấm động"
+msgstr "Cảnh báo nếu kiểm tra đẳng thức của con số dấu chấm động."
#: c-family/c.opt:447 c-family/c.opt:479
-#, fuzzy
-#| msgid "Warn about printf/scanf/strftime/strfmon format string anomalies"
msgid "Warn about printf/scanf/strftime/strfmon format string anomalies."
-msgstr "Cảnh báo khi phát hiện sá»± dị thưá»ng vá» chuá»—i định dạng printf/scanf/strftime/strfmon"
+msgstr "Cảnh báo khi phát hiện sá»± dị thưá»ng vá» chuá»—i định dạng printf/scanf/strftime/strfmon."
#: c-family/c.opt:451
-#, fuzzy
-#| msgid "Warn about format strings that contain NUL bytes"
msgid "Warn about format strings that contain NUL bytes."
-msgstr "Cảnh báo vỠchuỗi định dạng chứa NUL byte"
+msgstr "Cảnh báo vỠchuỗi định dạng chứa NUL byte."
#: c-family/c.opt:455
-#, fuzzy
-#| msgid "Warn if passing too many arguments to a function for its format string"
msgid "Warn if passing too many arguments to a function for its format string."
-msgstr "Cảnh báo nếu gá»­i cho hàm quá nhiá»u đối số đối vá»›i chuá»—i định dạng cá»§a nó"
+msgstr "Cảnh báo nếu gá»­i cho hàm quá nhiá»u đối số đối vá»›i chuá»—i định dạng cá»§a nó."
#: c-family/c.opt:459
-#, fuzzy
-#| msgid "Warn about format strings that are not literals"
msgid "Warn about format strings that are not literals."
-msgstr "Cảnh báo vỠchuỗi định dạng không phải có nghĩa chữ"
+msgstr "Cảnh báo vỠchuỗi định dạng không phải có nghĩa chữ."
#: c-family/c.opt:463
-#, fuzzy
-#| msgid "Warn about possible security problems with format functions"
msgid "Warn about possible security problems with format functions."
-msgstr "Cảnh báo vỠhàm định dạng có thể gây ra vấn đỠbảo mật"
+msgstr "Cảnh báo vỠhàm định dạng có thể gây ra vấn đỠvỠhàm định dạng."
#: c-family/c.opt:467
-#, fuzzy
msgid "Warn about sign differences with format functions."
-msgstr "Cảnh báo vỠhàm định dạng có thể gây ra vấn đỠbảo mật"
+msgstr "Cảnh báo vỠcác khác biệt dấu với các hàm định dạng."
#: c-family/c.opt:471
-#, fuzzy
-#| msgid "Warn about strftime formats yielding 2-digit years"
msgid "Warn about strftime formats yielding 2-digit years."
-msgstr "Cảnh báo vỠđịnh dạng strftime xuất năm chỉ có hai chữ số"
+msgstr "Cảnh báo vỠđịnh dạng strftime xuất năm chỉ có hai chữ số."
#: c-family/c.opt:475
-#, fuzzy
-#| msgid "Warn about zero-length formats"
msgid "Warn about zero-length formats."
-msgstr "Cảnh báo vỠđịnh dạng có chiá»u dài số không"
+msgstr "Cảnh báo vỠđịnh dạng có chiá»u dài số không."
#: c-family/c.opt:483
msgid "Warn whenever type qualifiers are ignored."
msgstr "Cảnh báo khi nào Ä‘oạn Ä‘iá»u kiện loại bị bá» qua."
#: c-family/c.opt:487
-#, fuzzy
msgid "Warn when there is a conversion between pointers that have incompatible types."
-msgstr "Cảnh báo khi xóa một con trỠtới kiểu không hoàn toàn"
+msgstr "Cảnh báo khi chuyển đổi giữa một con trỠtới kiểu không tương thích."
#: c-family/c.opt:491
-#, fuzzy
-#| msgid "Warn about variables which are initialized to themselves"
msgid "Warn about variables which are initialized to themselves."
-msgstr "Cảnh báo vỠbiến bị tự khởi tạo"
+msgstr "Cảnh báo vỠbiến bị tự khởi tạo."
#: c-family/c.opt:495
-#, fuzzy
-#| msgid "Warn about implicit declarations"
msgid "Warn about implicit declarations."
-msgstr "Cảnh báo khai báo ngầm"
+msgstr "Cảnh báo khai báo ngầm."
#: c-family/c.opt:499
-#, fuzzy
-#| msgid "Warn about implicit conversions from \"float\" to \"double\""
msgid "Warn about implicit conversions from \"float\" to \"double\"."
-msgstr "Cảnh báo vỠsự chuyển đổi ngầm \"float\" thành \"double\""
+msgstr "Cảnh báo vỠsự chuyển đổi ngầm \"float\" thành \"double\"."
#: c-family/c.opt:503
-#, fuzzy
-#| msgid "Warn about implicit function declarations"
msgid "Warn about implicit function declarations."
-msgstr "Cảnh báo vá» lá»i tuyên bố hàm ngầm"
+msgstr "Cảnh báo vá» lá»i khai báo hàm ngầm."
#: c-family/c.opt:507
-#, fuzzy
-#| msgid "Warn when a declaration does not specify a type"
msgid "Warn when a declaration does not specify a type."
-msgstr "Cảnh báo khi má»™t lá»i tuyên bố không ghi rõ loại"
+msgstr "Cảnh báo khi má»™t lá»i khai báo không ghi rõ loại."
#: c-family/c.opt:514
msgid "Warn about C++11 inheriting constructors when the base has a variadic constructor."
@@ -6978,54 +6413,40 @@ msgid "Warn about incompatible integer to pointer and pointer to integer convers
msgstr ""
#: c-family/c.opt:522
-#, fuzzy
-#| msgid "Warn when there is a cast to a pointer from an integer of a different size"
msgid "Warn when there is a cast to a pointer from an integer of a different size."
-msgstr "Cảnh báo khi có một sự gán cho một hàm trỠtừ một số nguyên có kích cỡ khác"
+msgstr "Cảnh báo khi có một sự gán cho một hàm trỠtừ một số nguyên có kích cỡ khác."
#: c-family/c.opt:526
-#, fuzzy
-#| msgid "Warn about invalid uses of the \"offsetof\" macro"
msgid "Warn about invalid uses of the \"offsetof\" macro."
-msgstr "Cảnh báo khi sai sá»­ dụng vÄ© lệnh “offsetofâ€"
+msgstr "Cảnh báo khi sai sá»­ dụng vÄ© lệnh “offsetofâ€."
#: c-family/c.opt:530
-#, fuzzy
-#| msgid "Warn about PCH files that are found but not used"
msgid "Warn about PCH files that are found but not used."
-msgstr "Cảnh báo vỠtập tin PCH được tìm thấy mà không phải được sử dụng"
+msgstr "Cảnh báo vỠtập tin PCH được tìm thấy mà không phải được sử dụng."
#: c-family/c.opt:534
-#, fuzzy
-#| msgid "Warn when a jump misses a variable initialization"
msgid "Warn when a jump misses a variable initialization."
-msgstr "Cảnh báo khi một bước nhảy còn thiếu sự khởi tạo biến"
+msgstr "Cảnh báo khi một bước nhảy còn thiếu sự khởi tạo biến."
#: c-family/c.opt:538
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:542
-#, fuzzy
-#| msgid "Warn when a logical operator is suspiciously always evaluating to true or false"
msgid "Warn when a logical operator is suspiciously always evaluating to true or false."
-msgstr "Cảnh báo khi má»™t toán tá»­ hợp lý cứ ước lượng là đúng hoặc là sai má»™t cách đáng ngá»"
+msgstr "Cảnh báo khi má»™t toán tá»­ hợp lý cứ ước lượng là đúng hoặc là sai má»™t cách đáng ngá»."
#: c-family/c.opt:546
msgid "Warn when logical not is used on the left hand side operand of a comparison."
msgstr ""
#: c-family/c.opt:550
-#, fuzzy
-#| msgid "Do not warn about using \"long long\" when -pedantic"
msgid "Do not warn about using \"long long\" when -pedantic."
-msgstr "Bật -pedantic thì đừng cảnh báo vá» sá»­ dụng “long longâ€"
+msgstr "Bật -pedantic thì đừng cảnh báo vá» sá»­ dụng “long longâ€."
#: c-family/c.opt:554
-#, fuzzy
-#| msgid "Warn about suspicious declarations of \"main\""
msgid "Warn about suspicious declarations of \"main\"."
-msgstr "Cảnh báo vá» lá»i tuyên bố “main†đáng ngá»"
+msgstr "Cảnh báo vá» lá»i khai báo “main†đáng ngá»."
#: c-family/c.opt:562
msgid "Warn about suspicious calls to memset where the third argument is constant literal zero and the second is not."
@@ -7036,22 +6457,16 @@ msgid "Warn when the indentation of the code does not reflect the block structur
msgstr ""
#: c-family/c.opt:570
-#, fuzzy
-#| msgid "Warn about possibly missing braces around initializers"
msgid "Warn about possibly missing braces around initializers."
-msgstr "Cảnh báo vỠđoạn khởi tạo có thể thiếu dấu ngoặc móc"
+msgstr "Cảnh báo vỠđoạn khởi tạo có thể thiếu dấu ngoặc móc."
#: c-family/c.opt:574
-#, fuzzy
-#| msgid "Warn about global functions without previous declarations"
msgid "Warn about global functions without previous declarations."
-msgstr "Cảnh báo vá» hàm toàn cục không có lá»i tuyên bố trước"
+msgstr "Cảnh báo vá» hàm toàn cục không có lá»i khai báo trước."
#: c-family/c.opt:578
-#, fuzzy
-#| msgid "Warn about missing fields in struct initializers"
msgid "Warn about missing fields in struct initializers."
-msgstr "Cảnh báo vá» Ä‘oạn khởi tạo cấu trúc thiếu trưá»ng"
+msgstr "Cảnh báo vá» Ä‘oạn khởi tạo cấu trúc thiếu trưá»ng."
#: c-family/c.opt:582
msgid "Warn on direct multiple inheritance."
@@ -7062,9 +6477,8 @@ msgid "Warn on namespace definition."
msgstr ""
#: c-family/c.opt:590
-#, fuzzy
msgid "Warn about missing sized deallocation functions."
-msgstr "Cảnh báo vá» Ä‘oạn khởi tạo cấu trúc thiếu trưá»ng"
+msgstr "Cảnh báo vỠthiếu hàm giải cấp phát cỡ."
#: c-family/c.opt:594
msgid "Warn about suspicious length parameters to certain string functions if the argument uses sizeof."
@@ -7075,10 +6489,8 @@ msgid "Warn when sizeof is applied on a parameter declared as an array."
msgstr ""
#: c-family/c.opt:602
-#, fuzzy
-#| msgid "Warn about functions which might be candidates for format attributes"
msgid "Warn about functions which might be candidates for format attributes."
-msgstr "Cảnh báo vỠhàm có thể yêu cầu thuộc tính định dạng"
+msgstr "Cảnh báo vỠhàm có thể yêu cầu thuộc tính định dạng."
#: c-family/c.opt:606
msgid "Suggest that the override keyword be used when the declaration of a virtual"
@@ -7097,33 +6509,24 @@ msgid "Warn about all enumerated switches missing a specific case."
msgstr ""
#: c-family/c.opt:623
-#, fuzzy
msgid "Warn about switches with boolean controlling expression."
-msgstr "Cảnh báo vỠbiểu thức ký tự bị cắt ngắn"
+msgstr "Cảnh báo vá» switches vá»›i biểu thức Ä‘iá»u khiển trả vá» lô-gíc."
#: c-family/c.opt:627
-#, fuzzy
-#| msgid "for template declaration %q+D"
msgid "Warn on primary template declaration."
-msgstr "cho khai báo hàm mẫu %q+D"
+msgstr "Cảnh báo vỠkhai báo hàm mẫu sơ cấp."
#: c-family/c.opt:635
-#, fuzzy
-#| msgid "Warn about user-specified include directories that do not exist"
msgid "Warn about user-specified include directories that do not exist."
-msgstr "Cảnh báo khi ngưá»i dùng xác định má»™t thư mục không tồn tại"
+msgstr "Cảnh báo khi ngưá»i dùng xác định má»™t thư mục không tồn tại."
#: c-family/c.opt:639
-#, fuzzy
-#| msgid "Warn about function parameters declared without a type specifier in K&R-style functions"
msgid "Warn about function parameters declared without a type specifier in K&R-style functions."
-msgstr "Cảnh báo vỠtham số hàm được tuyên bố mà không ghi rõ loại, trong hàm kiểu K&R"
+msgstr "Cảnh báo vỠtham số hàm được khai báo mà không ghi rõ loại, trong hàm kiểu K&R."
#: c-family/c.opt:643
-#, fuzzy
-#| msgid "Warn about global functions without prototypes"
msgid "Warn about global functions without prototypes."
-msgstr "Cảnh báo vỠhàm toàn cục mà không có nguyên mẫu"
+msgstr "Cảnh báo vỠhàm toàn cục mà không có nguyên mẫu."
#: c-family/c.opt:646 c-family/c.opt:1008 c-family/c.opt:1015
#: c-family/c.opt:1189 c-family/c.opt:1208 c-family/c.opt:1231
@@ -7138,138 +6541,100 @@ msgid "switch %qs is no longer supported"
msgstr "switch %qs không còn tiếp tục được hỗ trợ nữa"
#: c-family/c.opt:650
-#, fuzzy
-#| msgid "Warn about use of multi-character character constants"
msgid "Warn about use of multi-character character constants."
-msgstr "Cảnh báo vỠsử dụng hằng số ký tự đa ký tự"
+msgstr "Cảnh báo vỠsử dụng hằng số ký tự đa ký tự."
#: c-family/c.opt:654
msgid "Warn about narrowing conversions within { } that are ill-formed in C++11."
msgstr ""
#: c-family/c.opt:658
-#, fuzzy
-#| msgid "Warn about \"extern\" declarations not at file scope"
msgid "Warn about \"extern\" declarations not at file scope."
-msgstr "Cảnh báo vá» lá»i tuyên bố “extern†(bên ngoài) ở ngoại phạm vi tập tin"
+msgstr "Cảnh báo vá» lá»i khai báo “extern†(bên ngoài) ở ngoại phạm vi tập tin."
#: c-family/c.opt:662
msgid "Warn when a noexcept expression evaluates to false even though the expression can't actually throw."
msgstr ""
#: c-family/c.opt:666
-#, fuzzy
-#| msgid "Warn when non-templatized friend functions are declared within a template"
msgid "Warn when non-templatized friend functions are declared within a template."
-msgstr "Cảnh báo khi hàm bạn không làm mẫu được tuyên bố bên trong một mẫu"
+msgstr "Cảnh báo khi hàm bạn không làm mẫu được khai báo bên trong một mẫu."
#: c-family/c.opt:670
-#, fuzzy
-#| msgid "Warn about non-virtual destructors"
msgid "Warn about non-virtual destructors."
-msgstr "Cảnh báo vỠbộ hủy cấu trúc không phải ảo"
+msgstr "Cảnh báo vỠbộ hủy cấu trúc không phải ảo."
#: c-family/c.opt:674
-#, fuzzy
-#| msgid "Warn about NULL being passed to argument slots marked as requiring non-NULL"
msgid "Warn about NULL being passed to argument slots marked as requiring non-NULL."
-msgstr "Cảnh báo khi NULL được gửi cho khe đối số đánh dấu là yêu cầu giá trị không phải NULL"
+msgstr "Cảnh báo khi NULL được gửi cho khe đối số đánh dấu là yêu cầu giá trị không phải NULL."
#: c-family/c.opt:686
-#, fuzzy
-#| msgid "-Wnormalized=<none|id|nfc|nfkc>\tWarn about non-normalised Unicode strings"
msgid "-Wnormalized=<none|id|nfc|nfkc>\tWarn about non-normalised Unicode strings."
-msgstr "-Wnormalized=<none|id|nfc|nfkc>\tCảnh báo vỠchuỗi Unicode không phải chuẩn hóa"
+msgstr "-Wnormalized=<none|id|nfc|nfkc>\tCảnh báo vỠchuỗi Unicode không phải chuẩn hóa."
#: c-family/c.opt:693
msgid "argument %qs to %<-Wnormalized%> not recognized"
msgstr "không nhận ra tham số %qs cho %<-Wnormalized%>"
#: c-family/c.opt:709
-#, fuzzy
-#| msgid "Warn if a C-style cast is used in a program"
msgid "Warn if a C-style cast is used in a program."
-msgstr "Cảnh báo nếu một sự gán kiểu C được sử dụng trong một chương trình"
+msgstr "Cảnh báo nếu một sự gán kiểu C được sử dụng trong một chương trình."
#: c-family/c.opt:713
-#, fuzzy
-#| msgid "Warn for obsolescent usage in a declaration"
msgid "Warn for obsolescent usage in a declaration."
-msgstr "Cảnh báo vá» lá»i tuyên bố kiểu cÅ©"
+msgstr "Cảnh báo vá» lá»i khai báo kiểu cÅ©."
#: c-family/c.opt:717
-#, fuzzy
-#| msgid "Warn if an old-style parameter definition is used"
msgid "Warn if an old-style parameter definition is used."
-msgstr "Cảnh báo vá» lá»i xác định tham số kiểu cÅ©"
+msgstr "Cảnh báo vá» lá»i xác định tham số kiểu cÅ©."
#: c-family/c.opt:721
msgid "Warn if a simd directive is overridden by the vectorizer cost model."
msgstr ""
#: c-family/c.opt:725
-#, fuzzy
-#| msgid "Warn if a string is longer than the maximum portable length specified by the standard"
msgid "Warn if a string is longer than the maximum portable length specified by the standard."
-msgstr "Cảnh báo vá» chuá»—i dài hÆ¡n chiá»u dài di động tối Ä‘a được tiêu chuẩn ghi rõ"
+msgstr "Cảnh báo vá» chuá»—i dài hÆ¡n chiá»u dài di động tối Ä‘a được tiêu chuẩn ghi rõ."
#: c-family/c.opt:729
-#, fuzzy
-#| msgid "Warn about overloaded virtual function names"
msgid "Warn about overloaded virtual function names."
-msgstr "Cảnh báo vỠtên hàm ảo quá tải"
+msgstr "Cảnh báo vỠcác tên hàm ảo quá tải."
#: c-family/c.opt:733
-#, fuzzy
-#| msgid "Warn about overriding initializers without side effects"
msgid "Warn about overriding initializers without side effects."
-msgstr "Cảnh báo vỠghi đè lên đoạn khởi tạo mà không có hiệu ứng khác"
+msgstr "Cảnh báo vỠghi đè lên đoạn khởi tạo mà không có hiệu ứng cạnh."
#: c-family/c.opt:737
-#, fuzzy
-#| msgid "Warn about overriding initializers without side effects"
msgid "Warn about overriding initializers with side effects."
-msgstr "Cảnh báo vỠghi đè lên đoạn khởi tạo mà không có hiệu ứng khác"
+msgstr "Cảnh báo vỠghi đè lên đoạn khởi tạo mà có hiệu ứng cạnh."
#: c-family/c.opt:741
-#, fuzzy
-#| msgid "Warn about packed bit-fields whose offset changed in GCC 4.4"
msgid "Warn about packed bit-fields whose offset changed in GCC 4.4."
-msgstr "Cảnh báo vá» trưá»ng bit đóng gói có hiệu số bị thay đổi trong GCC 4.4"
+msgstr "Cảnh báo vá» trưá»ng bit đóng gói có hiệu số bị thay đổi trong GCC 4.4."
#: c-family/c.opt:745
-#, fuzzy
-#| msgid "Warn about possibly missing parentheses"
msgid "Warn about possibly missing parentheses."
-msgstr "Cảnh báo vỠdấu ngoặc đơn có thể bị thiếu"
+msgstr "Cảnh báo vỠdấu ngoặc đơn có thể bị thiếu."
#: c-family/c.opt:753
-#, fuzzy
-#| msgid "Warn when converting the type of pointers to member functions"
msgid "Warn when converting the type of pointers to member functions."
-msgstr "Cảnh báo khi chuyển đổi loại hàm trỠsang hàm bộ phận"
+msgstr "Cảnh báo khi chuyển đổi loại hàm trỠsang hàm thành viên."
#: c-family/c.opt:757
-#, fuzzy
-#| msgid "Warn about function pointer arithmetic"
msgid "Warn about function pointer arithmetic."
-msgstr "Cảnh báo vá» số há»c trỠđến hàm"
+msgstr "Cảnh báo vá» số há»c trỠđến hàm."
#: c-family/c.opt:761
msgid "Warn when a pointer differs in signedness in an assignment."
msgstr ""
#: c-family/c.opt:765
-#, fuzzy
-#| msgid "Warn when there is a cast to a pointer from an integer of a different size"
msgid "Warn when a pointer is cast to an integer of a different size."
-msgstr "Cảnh báo khi có một sự gán cho một hàm trỠtừ một số nguyên có kích cỡ khác"
+msgstr "Cảnh báo khi có một sự gán cho một hàm trỠcho một số nguyên có kích cỡ khác."
#: c-family/c.opt:769
-#, fuzzy
-#| msgid "Warn about misuses of pragmas"
msgid "Warn about misuses of pragmas."
-msgstr "Cảnh báo lạm dụng pragmas"
+msgstr "Cảnh báo lạm dụng pragmas."
#: c-family/c.opt:773
msgid "Warn if a property for an Objective-C object has no assign semantics specified."
@@ -7284,16 +6649,12 @@ msgid "Warn for placement new expressions with undefined behavior."
msgstr ""
#: c-family/c.opt:785
-#, fuzzy
-#| msgid "Warn about \"extern\" declarations not at file scope"
msgid "Warn about multiple declarations of the same object."
-msgstr "Cảnh báo vá» lá»i tuyên bố “extern†(bên ngoài) ở ngoại phạm vi tập tin"
+msgstr "Cảnh báo vá» nhiá»u khai báo trên cùng đối tượng."
#: c-family/c.opt:789
-#, fuzzy
-#| msgid "Warn whenever type qualifiers are ignored."
msgid "Warn when the compiler reorders code."
-msgstr "Cảnh báo khi nào Ä‘oạn Ä‘iá»u kiện loại bị bá» qua."
+msgstr "Cảnh báo khi trình dịch đổi thứ tự mã."
#: c-family/c.opt:793
msgid "Warn whenever a function's return type defaults to \"int\" (C), or about inconsistent return types (C++)."
@@ -7304,71 +6665,52 @@ msgid "Warn on suspicious constructs involving reverse scalar storage order."
msgstr ""
#: c-family/c.opt:801
-#, fuzzy
msgid "Warn if a selector has multiple methods."
-msgstr "Tạo ra câu lệnh nạp/lưu nội"
+msgstr "Cảnh báo nếu má»™t chá»n có nhiá»u phương thức."
#: c-family/c.opt:805
-#, fuzzy
-#| msgid "Warn about violations of Effective C++ style rules"
msgid "Warn about possible violations of sequence point rules."
-msgstr "Cảnh báo vỠsự vượt quá quy tắc Effective C++"
+msgstr "Cảnh báo vỠsự vi phạm quy tắc điểm liên tiếp."
#: c-family/c.opt:809
-#, fuzzy
-#| msgid "Warn if a local declaration hides an instance variable"
msgid "Warn if a local declaration hides an instance variable."
-msgstr "Cảnh báo khi má»™t lá»i tuyên bố ná»™i bá»™ ẩn má»™t biến minh dụ"
+msgstr "Cảnh báo khi má»™t lá»i khai báo ná»™i bá»™ ẩn má»™t biến minh dụ."
#: c-family/c.opt:813 c-family/c.opt:817
msgid "Warn if left shift of a signed value overflows."
msgstr ""
#: c-family/c.opt:821
-#, fuzzy
-#| msgid "Warn if shift count is negative"
msgid "Warn if shift count is negative."
-msgstr "Cảnh báo nếu số lượng dịch trái là số âm"
+msgstr "Cảnh báo nếu số lượng dịch là số âm."
#: c-family/c.opt:825
-#, fuzzy
-#| msgid "Warn if shift count >= width of type"
msgid "Warn if shift count >= width of type."
-msgstr "Cảnh báo nếu số lượng dịch phải >= độ rộng của kiểu"
+msgstr "Cảnh báo nếu số lượng dịch >= độ rộng của kiểu."
#: c-family/c.opt:829
-#, fuzzy
-#| msgid "Warn if shift count is negative"
msgid "Warn if left shifting a negative value."
-msgstr "Cảnh báo nếu số lượng dịch trái là số âm"
+msgstr "Cảnh báo nếu số lượng dịch trái là số âm."
#: c-family/c.opt:833
-#, fuzzy
-#| msgid "Warn about unused dummy arguments."
msgid "Warn about signed-unsigned comparisons."
-msgstr "Cảnh báo vỠđối số giả có không dùng."
+msgstr "Cảnh báo vỠso sánh có và không dấu."
#: c-family/c.opt:841
-#, fuzzy
-#| msgid "Warn for implicit type conversions between signed and unsigned integers"
msgid "Warn for implicit type conversions between signed and unsigned integers."
-msgstr "Cảnh báo vỠsự chuyển đổi loại ngầm giữa số nguyên có dấu và không có dấu"
+msgstr "Cảnh báo vỠsự chuyển đổi loại ngầm giữa số nguyên có dấu và không có dấu."
#: c-family/c.opt:845
msgid "Warn when overload promotes from unsigned to signed."
msgstr ""
#: c-family/c.opt:849
-#, fuzzy
-#| msgid "Warn about truncated source lines"
msgid "Warn about uncasted NULL used as sentinel."
-msgstr "Cảnh báo vỠdòng nguồn bị cắt ngắn"
+msgstr "Cảnh báo NULL chưa áp kiểu dùng làm ký hiệu cầm canh."
#: c-family/c.opt:853
-#, fuzzy
-#| msgid "Warn about unprototyped function declarations"
msgid "Warn about unprototyped function declarations."
-msgstr "Cảnh báo vỠkhai báo hàm không được khai báo mẫu trước"
+msgstr "Cảnh báo vỠkhai báo hàm không được khai báo mẫu trước."
#: c-family/c.opt:865
msgid "Warn if type signatures of candidate methods do not match exactly."
@@ -7379,24 +6721,18 @@ msgid "Warn when __sync_fetch_and_nand and __sync_nand_and_fetch built-in functi
msgstr ""
#: c-family/c.opt:873
-#, fuzzy
-#| msgid "Deprecated. This switch has no effect"
msgid "Deprecated. This switch has no effect."
-msgstr "Äã lá»—i thá»i. Tùy chá»n này không có tác dụng gì"
+msgstr "Äã lá»—i thá»i. Tùy chá»n này không có tác dụng gì."
#: c-family/c.opt:881
-#, fuzzy
-#| msgid "Warn when a logical operator is suspiciously always evaluating to true or false"
msgid "Warn if a comparison always evaluates to true or false."
-msgstr "Cảnh báo khi má»™t toán tá»­ hợp lý cứ ước lượng là đúng hoặc là sai má»™t cách đáng ngá»"
+msgstr "Cảnh báo khi so sánh luôn ước lượng là đúng hoặc là sai."
#: c-family/c.opt:885
msgid "Warn if a throw expression will always result in a call to terminate()."
msgstr ""
#: c-family/c.opt:889
-#, fuzzy
-#| msgid "Warn about features not present in ISO C90, but present in ISO C99"
msgid "Warn about features not present in traditional C."
msgstr "Cảnh báo vỠcác đặc điểm không có trong ISO C90, nhưng lại có trong ISO C99"
@@ -7409,70 +6745,52 @@ msgid "Warn if trigraphs are encountered that might affect the meaning of the pr
msgstr ""
#: c-family/c.opt:901
-#, fuzzy
-#| msgid "Warn about global functions without previous declarations"
msgid "Warn about @selector()s without previously declared methods."
-msgstr "Cảnh báo vá» hàm toàn cục không có lá»i tuyên bố trước"
+msgstr "Cảnh báo vá» @selector()s không có lá»i khai báo trước."
#: c-family/c.opt:905
msgid "Warn if an undefined macro is used in an #if directive."
msgstr ""
#: c-family/c.opt:917
-#, fuzzy
-#| msgid "Warn about unrecognized pragmas"
msgid "Warn about unrecognized pragmas."
-msgstr "Cảnh báo vỠpragmas không thừa nhận"
+msgstr "Cảnh báo vỠpragmas không thừa nhận."
#: c-family/c.opt:921
-#, fuzzy
-#| msgid "Warn about useless casts"
msgid "Warn about unsuffixed float constants."
-msgstr "Cảnh báo vỠáp kiểu vô ích"
+msgstr "Cảnh báo hằng thực không có hậu tố."
#: c-family/c.opt:929
-#, fuzzy
-#| msgid "Warn when an inlined function cannot be inlined"
msgid "Warn when typedefs locally defined in a function are not used."
-msgstr "Cảnh báo khi không không thể dùng hàm chung dòng"
+msgstr "Cảnh báo khi typedefs nội bộ định nghĩa hàm mà nó không được dùng."
#: c-family/c.opt:933
-#, fuzzy
-#| msgid "Warn about PCH files that are found but not used"
msgid "Warn about macros defined in the main file that are not used."
-msgstr "Cảnh báo vỠtập tin PCH được tìm thấy mà không phải được sử dụng"
+msgstr "Cảnh báo vỠcác vĩ lệnh đã định nghĩa trong tập tin chính mà không được sử dụng."
#: c-family/c.opt:937
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:945
-#, fuzzy
-#| msgid "Warn when a variable is unused"
msgid "Warn when a const variable is unused."
-msgstr "Cảnh báo khi biến không được dùng"
+msgstr "Cảnh báo khi biến hằng không được dùng."
#: c-family/c.opt:949
-#, fuzzy
-#| msgid "Warn about unrecognized pragmas"
msgid "Warn about using variadic macros."
-msgstr "Cảnh báo vỠpragmas không thừa nhận"
+msgstr "Cảnh báo vỠdùng các vĩ lệnh variadic."
#: c-family/c.opt:953
msgid "Warn about questionable usage of the macros used to retrieve variable arguments."
msgstr ""
#: c-family/c.opt:957
-#, fuzzy
-#| msgid "variable length array is used"
msgid "Warn if a variable length array is used."
-msgstr "mảng có độ dài biến đổi được dùng"
+msgstr "Cảnh báo nếu mảng có độ dài biến đổi được dùng."
#: c-family/c.opt:961
-#, fuzzy
-#| msgid "Warn when a variable is unused"
msgid "Warn when a register variable is declared volatile."
-msgstr "Cảnh báo khi biến không được dùng"
+msgstr "Cảnh báo khi biến thanh ghi được khai báo là hay thay đổi."
#: c-family/c.opt:965
msgid "Warn on direct virtual inheritance."
@@ -7487,26 +6805,20 @@ msgid "In C++, nonzero means warn about deprecated conversion from string litera
msgstr ""
#: c-family/c.opt:977
-#, fuzzy
-#| msgid "Warn when a label is unused"
msgid "Warn when a literal '0' is used as null pointer."
-msgstr "Cảnh báo khi nhãn không được dùng"
+msgstr "Cảnh báo khi chuỗi văn “0†được dùng như là con trỠnull."
#: c-family/c.opt:981
-#, fuzzy
-#| msgid "Warn about useless casts"
msgid "Warn about useless casts."
-msgstr "Cảnh báo vỠáp kiểu vô ích"
+msgstr "Cảnh báo vỠáp kiểu vô ích."
#: c-family/c.opt:985
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:989
-#, fuzzy
-#| msgid "A synonym for -std=c89 (for C) or -std=c++98 (for C++)"
msgid "A synonym for -std=c89 (for C) or -std=c++98 (for C++)."
-msgstr "Äồng nghÄ©a -std=c89 (cho C) hoặc -std=c++98 (cho C++)"
+msgstr "Äồng nghÄ©a -std=c89 (cho C) hoặc -std=c++98 (cho C++)."
#: c-family/c.opt:997
msgid "The version of the C++ ABI used for -Wabi warnings and link compatibility aliases."
@@ -7526,22 +6838,16 @@ msgstr ""
#: c-family/c.opt:1016 c-family/c.opt:1245 c-family/c.opt:1533
#: c-family/c.opt:1537 c-family/c.opt:1553
-#, fuzzy
-#| msgid "No longer supported"
msgid "No longer supported."
-msgstr "không còn được hỗ trợ nữa"
+msgstr "không còn được hỗ trợ nữa."
#: c-family/c.opt:1020
-#, fuzzy
-#| msgid "Recognize the \"asm\" keyword"
msgid "Recognize the \"asm\" keyword."
-msgstr "Không chấp nhận từ khóa \"asm\""
+msgstr "Không chấp nhận từ khóa \"asm\"."
#: c-family/c.opt:1028
-#, fuzzy
-#| msgid "Recognize built-in functions"
msgid "Recognize built-in functions."
-msgstr "Chấp nhận các hàm dựng sẵn"
+msgstr "Chấp nhận các hàm dựng sẵn."
#: c-family/c.opt:1035
msgid "Where shorter, use canonicalized paths to systems headers."
@@ -7596,24 +6902,20 @@ msgid "With this option zero size obtained dynamically for objects with"
msgstr ""
#: c-family/c.opt:1097
-#, fuzzy
msgid "Generate checks for all read accesses to memory."
-msgstr "Tạo ra sự kiểm tra có tham chiếu đến NULL (vô giá trị)"
+msgstr ""
#: c-family/c.opt:1101
-#, fuzzy
msgid "Generate checks for all write accesses to memory."
-msgstr "Tạo ra sự kiểm tra có tham chiếu đến NULL (vô giá trị)"
+msgstr ""
#: c-family/c.opt:1105
-#, fuzzy
msgid "Generate bounds stores for pointer writes."
-msgstr "Tạo ra mã cho chế độ ngưá»i dùng"
+msgstr ""
#: c-family/c.opt:1109
-#, fuzzy
msgid "Generate bounds passing for calls."
-msgstr "Tạo ra các cuá»™c gá»i gián tiếp nhanh"
+msgstr ""
#: c-family/c.opt:1113
msgid "Instrument only functions marked with bnd_instrument attribute."
@@ -7624,16 +6926,12 @@ msgid "Transform instrumented builtin calls into calls to wrappers."
msgstr ""
#: c-family/c.opt:1127
-#, fuzzy
-#| msgid "Enable Cilk Plus"
msgid "Enable Cilk Plus."
-msgstr "Bật Cilk Plus"
+msgstr "Bật Cilk Plus."
#: c-family/c.opt:1131
-#, fuzzy
-#| msgid "Enable PIC support for building libraries"
msgid "Enable support for C++ concepts."
-msgstr "Bật sự hỗ trợ PIC để biên dịch thư viện"
+msgstr "Bật sự hỗ trợ cho khái niệm C++."
#: c-family/c.opt:1135
msgid "Allow the arguments of the '?' operator to have different types."
@@ -7645,27 +6943,22 @@ msgid "no class name specified with %qs"
msgstr "không chỉ định tên lớp với %qs"
#: c-family/c.opt:1143
-#, fuzzy
-#| msgid "-fconst-string-class=<name>\tUse class <name> for constant strings"
msgid "-fconst-string-class=<name>\tUse class <name> for constant strings."
-msgstr "-fconst-string-class=<tên>\tDùng <tên> lớp cho chuỗi hằng"
+msgstr "-fconst-string-class=<tên>\tDùng <tên> lớp cho chuỗi hằng."
#: c-family/c.opt:1147
msgid "-fconstexpr-depth=<number>\tSpecify maximum constexpr recursion depth."
-msgstr ""
+msgstr "-fconstexpr-depth=<number>\tChỉ định mức đệ quy constexpr (bt hằng) tối đa."
#: c-family/c.opt:1151
-#, fuzzy
-#| msgid "Enable traditional preprocessing"
msgid "Emit debug annotations during preprocessing."
-msgstr "Bật tiá»n xá»­ lý theo kiểu cổ Ä‘iển"
+msgstr ""
#: c-family/c.opt:1155
msgid "-fdeduce-init-list\tenable deduction of std::initializer_list for a template type parameter from a brace-enclosed initializer-list."
-msgstr ""
+msgstr "-fdeduce-init-list\tbật deduction của std::initializer_list cho một tham số kiểu mẫu từ brace-enclosed initializer-list."
#: c-family/c.opt:1159
-#, fuzzy
msgid "Factor complex constructors and destructors to favor space over speed."
msgstr "Cảnh báo khi má»i bá»™ cấu trúc và bá»™ há»§y cấu trúc Ä‘á»u là riêng"
@@ -7686,14 +6979,12 @@ msgid "Write all declarations as Ada code for the given file only."
msgstr ""
#: c-family/c.opt:1186
-#, fuzzy
-#| msgid "Generate performance extension instructions."
msgid "Generate code to check exception specifications."
-msgstr "Tạo chỉ lệnh năng suất mở rộng."
+msgstr ""
#: c-family/c.opt:1193
msgid "-fexec-charset=<cset>\tConvert all strings and character constants to character set <cset>."
-msgstr ""
+msgstr "-fexec-charset=<cset>\tChuyển má»i hằng chuá»—i và ký tá»± sang bảng ký tá»± <cset>."
#: c-family/c.opt:1197
msgid "Permit universal character names (\\u and \\U) in identifiers."
@@ -7701,7 +6992,7 @@ msgstr ""
#: c-family/c.opt:1201
msgid "-finput-charset=<cset>\tSpecify the default character set for source files."
-msgstr ""
+msgstr "-finput-charset=<cset>\tChỉ định bảng mã ký tự mặc định cho tập tin mã nguồn."
#: c-family/c.opt:1205
msgid "Support dynamic initialization of thread-local variables in a different translation unit."
@@ -7716,16 +7007,12 @@ msgid "Do not assume that standard C libraries and \"main\" exist."
msgstr ""
#: c-family/c.opt:1220
-#, fuzzy
-#| msgid "Recognize the \"asm\" keyword"
msgid "Recognize GNU-defined keywords."
-msgstr "Không chấp nhận từ khóa \"asm\""
+msgstr "Không chấp nhận từ khóa \"GNU-define\""
#: c-family/c.opt:1224
-#, fuzzy
-#| msgid "Generate code for GNU runtime environment"
msgid "Generate code for GNU runtime environment."
-msgstr "Tạo ra mã môi trưá»ng thá»±c thi GNU"
+msgstr "Tạo ra mã môi trưá»ng thá»±c thi GNU."
#: c-family/c.opt:1228
msgid "Use traditional GNU semantics for inline functions."
@@ -7733,29 +7020,23 @@ msgstr ""
#: c-family/c.opt:1234
msgid "-fhandle-exceptions has been renamed -fexceptions (and is now on by default)"
-msgstr ""
+msgstr "-fhandle-exceptions được đổi tên thành -fexceptions (và giỠthành mặc định)"
#: c-family/c.opt:1241
-#, fuzzy
-#| msgid "Assume the VxWorks RTP environment"
msgid "Assume normal C execution environment."
-msgstr "Coi là môi trưá»ng RTP VxWorks"
+msgstr "Coi là môi trưá»ng thá»±c thi C bình thưá»ng."
#: c-family/c.opt:1249
msgid "Export functions even if they can be inlined."
-msgstr ""
+msgstr "Xuất hàm ngay cả khi chúng có thể chung dòng."
#: c-family/c.opt:1253
-#, fuzzy
-#| msgid " in instantiation of template %qT"
msgid "Emit implicit instantiations of inline templates."
-msgstr " trong minh dụ của mẫu %qT"
+msgstr ""
#: c-family/c.opt:1257
-#, fuzzy
-#| msgid " in instantiation of template %qT"
msgid "Emit implicit instantiations of templates."
-msgstr " trong minh dụ của mẫu %qT"
+msgstr ""
#: c-family/c.opt:1261
msgid "Inject friend functions into enclosing namespace."
@@ -7770,16 +7051,12 @@ msgid "Allow implicit conversions between vectors with differing numbers of subp
msgstr ""
#: c-family/c.opt:1276
-#, fuzzy
-#| msgid "Do not use the AltiVec ABI extensions"
msgid "Don't warn about uses of Microsoft extensions."
-msgstr "Không dùng lệnh mở rộng AltiVec ABI"
+msgstr "Không cảnh báo dùng lệnh mở rộng Microsoft."
#: c-family/c.opt:1295
-#, fuzzy
-#| msgid "Generate code for GNU runtime environment"
msgid "Generate code for NeXT (Apple Mac OS X) runtime environment."
-msgstr "Tạo ra mã môi trưá»ng thá»±c thi GNU"
+msgstr ""
#: c-family/c.opt:1299
msgid "Assume that receivers of Objective-C messages may be nil."
@@ -7794,9 +7071,9 @@ msgid "-fvisibility=[private|protected|public|package]\tSet the default symbol v
msgstr ""
#: c-family/c.opt:1310
-#, fuzzy, c-format
+#, c-format
msgid "unrecognized ivar visibility value %qs"
-msgstr "không nhận ra tên thanh ghi %qs"
+msgstr "không nhận giá trị khả kiến ivar %qs"
#: c-family/c.opt:1332
msgid "Treat a throw() exception specification as noexcept to improve code size."
@@ -7827,10 +7104,8 @@ msgid "Enable inline checks for nil receivers with the NeXT runtime and ABI vers
msgstr ""
#: c-family/c.opt:1365
-#, fuzzy
-#| msgid "Enable exception handling"
msgid "Enable Objective-C setjmp exception handling runtime."
-msgstr "Bật tiếp nhận ngoại lệ"
+msgstr ""
#: c-family/c.opt:1369
msgid "Conform to the Objective-C 1.0 language as implemented in GCC 4.0."
@@ -7838,7 +7113,7 @@ msgstr ""
#: c-family/c.opt:1373
msgid "Enable OpenACC."
-msgstr ""
+msgstr "Bật OpenACC."
#: c-family/c.opt:1377
msgid "Enable OpenMP (implies -frecursive in Fortran)."
@@ -7846,7 +7121,7 @@ msgstr ""
#: c-family/c.opt:1381
msgid "Enable OpenMP's SIMD directives."
-msgstr ""
+msgstr "Bật chỉ thị OpenMP's SIMD."
#: c-family/c.opt:1385
msgid "Recognize C++ keywords like \"compl\" and \"xor\"."
@@ -7861,10 +7136,8 @@ msgid "Downgrade conformance errors to warnings."
msgstr ""
#: c-family/c.opt:1404
-#, fuzzy
-#| msgid "Enable linker relaxations"
msgid "Enable Plan 9 language extensions."
-msgstr "Bật hàm yếu vỠbộ liên kết"
+msgstr ""
#: c-family/c.opt:1408
msgid "Treat the input file as already preprocessed."
@@ -7883,15 +7156,12 @@ msgid "Used in Fix-and-Continue mode to indicate that object files may be swappe
msgstr ""
#: c-family/c.opt:1428
-#, fuzzy
msgid "Enable automatic template instantiation."
-msgstr "%s: Trong minh dụ của %q#D:\n"
+msgstr ""
#: c-family/c.opt:1432
-#, fuzzy
-#| msgid "Generate performance extension instructions."
msgid "Generate run time type descriptor information."
-msgstr "Tạo chỉ lệnh năng suất mở rộng."
+msgstr ""
#: c-family/c.opt:1436
msgid "Use the same size for double as for float."
@@ -7910,24 +7180,21 @@ msgid "When \"signed\" or \"unsigned\" is not given make the bitfield signed."
msgstr ""
#: c-family/c.opt:1452 ada/gcc-interface/lang.opt:81
-#, fuzzy
-#| msgid "enabled by default"
msgid "Make \"char\" signed by default."
-msgstr "mặc định được bật"
+msgstr "Làm cho \"char\" là có dấu theo mặc định."
#: c-family/c.opt:1456
-#, fuzzy
msgid "Enable C++14 sized deallocation support."
-msgstr "Bật việc hỗ trợ phần cứng dấu chấm động thập phân"
+msgstr ""
#: c-family/c.opt:1463
msgid "-fsso-struct=[big-endian|little-endian]\tSet the default scalar storage order."
-msgstr ""
+msgstr "-fsso-struct=[big-endian|little-endian]\tÄặt thứ tá»± lưu trữ vô hướng mặc định."
#: c-family/c.opt:1466
-#, fuzzy, c-format
+#, c-format
msgid "unrecognized scalar storage order value %qs"
-msgstr "không nhận ra tên thanh ghi %qs"
+msgstr "không nhận ra giá trị thứ tự kho vô hướng %qs"
#: c-family/c.opt:1476
msgid "Display statistics accumulated during compilation."
@@ -7942,10 +7209,8 @@ msgid "-ftabstop=<number>\tDistance between tab stops for column reporting."
msgstr ""
#: c-family/c.opt:1491
-#, fuzzy
-#| msgid "The maximum number of peelings of a single loop"
msgid "Set the maximum number of template instantiation notes for a single warning or error."
-msgstr "Số tối đa các lần lột một vòng lặp riêng lẻ"
+msgstr ""
#: c-family/c.opt:1498
msgid "-ftemplate-depth=<number>\tSpecify maximum template instantiation depth."
@@ -7960,10 +7225,8 @@ msgid "When \"signed\" or \"unsigned\" is not given make the bitfield unsigned."
msgstr ""
#: c-family/c.opt:1513
-#, fuzzy
-#| msgid "enabled by default"
msgid "Make \"char\" unsigned by default."
-msgstr "mặc định được bật"
+msgstr "Làm cho \"char\" là không dấu theo mặc định."
#: c-family/c.opt:1517
msgid "Use __cxa_atexit to register destructors."
@@ -7987,7 +7250,7 @@ msgstr ""
#: c-family/c.opt:1545
msgid "-fwide-exec-charset=<cset>\tConvert all wide strings and character constants to character set <cset>."
-msgstr ""
+msgstr "-fwide-exec-charset=<cset>\tChuyển đổi má»i chuá»—i rá»™ng và hằng ký tá»± rá»™ng ra bá»™ mã <cset>."
#: c-family/c.opt:1549
msgid "Generate a #line directive pointing at the current working directory."
@@ -8018,9 +7281,8 @@ msgid "Interpret imaginary, fixed-point, or other gnu number suffix as the corre
msgstr ""
#: c-family/c.opt:1582
-#, fuzzy
msgid "-idirafter <dir>\tAdd <dir> to the end of the system include path."
-msgstr "-iframework <thư_mục>\tPhụ thêm thư mục này vào đưá»ng dẫn bao gồm khuôn khổ hệ thống"
+msgstr "-idirafter <thư_mục>\tPhụ thêm thư mục này vào đưá»ng dẫn bao gồm hệ thống."
#: c-family/c.opt:1586
msgid "-imacros <file>\tAccept definition of macros in <file>."
@@ -8039,29 +7301,24 @@ msgid "-iprefix <path>\tSpecify <path> as a prefix for next two options."
msgstr ""
#: c-family/c.opt:1602
-#, fuzzy
msgid "-isysroot <dir>\tSet <dir> to be the system root directory."
-msgstr "-iframework <thư_mục>\tPhụ thêm thư mục này vào đưá»ng dẫn bao gồm khuôn khổ hệ thống"
+msgstr "-isysroot <thư_mục>\tÄặt <thư_mục> này vào đưá»ng dẫn gốc hệ thống."
#: c-family/c.opt:1606
-#, fuzzy
msgid "-isystem <dir>\tAdd <dir> to the start of the system include path."
-msgstr "-iframework <thư_mục>\tPhụ thêm thư mục này vào đưá»ng dẫn bao gồm khuôn khổ hệ thống"
+msgstr "-isystem <thư_mục>\tThêm <thư_mục> này vào đầu đưá»ng dẫn bao gồm hệ thống."
#: c-family/c.opt:1610
-#, fuzzy
msgid "-iquote <dir>\tAdd <dir> to the end of the quote include path."
msgstr "-iframework <thư_mục>\tPhụ thêm thư mục này vào đưá»ng dẫn bao gồm khuôn khổ hệ thống"
#: c-family/c.opt:1614
-#, fuzzy
msgid "-iwithprefix <dir>\tAdd <dir> to the end of the system include path."
-msgstr "-I <thư_mục>\tPhụ thêm thư mục này vào đưá»ng dẫn bao gồm chính"
+msgstr "-iwithprefix <thư_mục>\tPhụ thêm thư mục này vào đưá»ng dẫn bao gồm hệ thống."
#: c-family/c.opt:1618
-#, fuzzy
msgid "-iwithprefixbefore <dir>\tAdd <dir> to the end of the main include path."
-msgstr "-I <thư_mục>\tPhụ thêm thư mục này vào đưá»ng dẫn bao gồm chính"
+msgstr "-iwithprefixbefore <thư_mục>\tPhụ thêm thư mục này vào đưá»ng dẫn bao gồm chính."
#: c-family/c.opt:1628
msgid "Do not search standard system include directories (those specified with -isystem will still be used)."
@@ -8081,207 +7338,147 @@ msgstr ""
#: c-family/c.opt:1652 c-family/c.opt:1656
msgid "Conform to the ISO 1998 C++ standard revised by the 2003 technical corrigendum."
-msgstr ""
+msgstr "Làm cho hợp với chuẩn ISO 1998 C++ xem xét lại đính chính kỹ thuật năm 2003."
#: c-family/c.opt:1660
-#, fuzzy
-#| msgid "Conform to the ISO 2011 C++ standard"
msgid "Conform to the ISO 2011 C++ standard."
-msgstr "Làm cho hợp với chuẩnISO 2011 C++"
+msgstr "Làm cho hợp với chuẩn ISO 2011 C++."
#: c-family/c.opt:1664
-#, fuzzy
-#| msgid "Deprecated in favor of -std=c++11"
msgid "Deprecated in favor of -std=c++11."
-msgstr "Äã lạc hậu và được thay thế bằng -std=c++11"
+msgstr "Äã lạc hậu và được thay thế bằng -std=c++11."
#: c-family/c.opt:1668
-#, fuzzy
-#| msgid "Deprecated in favor of -std=c++14"
msgid "Deprecated in favor of -std=c++14."
-msgstr "Äã lạc hậu và được thay thế bằng -std=c++14"
+msgstr "Äã lạc hậu và được thay thế bằng -std=c++14."
#: c-family/c.opt:1672
-#, fuzzy
-#| msgid "Conform to the ISO 2011 C++ standard"
msgid "Conform to the ISO 2014 C++ standard."
-msgstr "Làm cho hợp với chuẩnISO 2011 C++"
+msgstr "Làm cho hợp với chuẩn ISO 2014 C++."
#: c-family/c.opt:1676
msgid "Conform to the ISO 2017(?) C++ draft standard (experimental and incomplete support)."
-msgstr ""
+msgstr "Làm cho hợp với chuẩn nháp ISO 2017(?) C++ (thử nghiệm và hỗ trợ chưa đầy đủ)."
#: c-family/c.opt:1683 c-family/c.opt:1780
-#, fuzzy
-#| msgid "Conform to the ISO 2011 C++ standard"
msgid "Conform to the ISO 2011 C standard."
-msgstr "Làm cho hợp với chuẩnISO 2011 C++"
+msgstr "Làm cho hợp với chuẩn ISO 2011 C++."
#: c-family/c.opt:1687
-#, fuzzy
-#| msgid "Deprecated in favor of -std=c11"
msgid "Deprecated in favor of -std=c11."
-msgstr "Äã lạc hậu và được thay thế bằng -std=c11"
+msgstr "Äã lạc hậu và được thay thế bằng -std=c11."
#: c-family/c.opt:1691 c-family/c.opt:1695 c-family/c.opt:1764
-#, fuzzy
-#| msgid "Conform to the ISO 1990 C standard"
msgid "Conform to the ISO 1990 C standard."
-msgstr "Làm cho hợp với chuẩn ISO 1990 C"
+msgstr "Làm cho hợp với chuẩn ISO 1990 C."
#: c-family/c.opt:1699 c-family/c.opt:1772
-#, fuzzy
-#| msgid "Conform to the ISO 1999 C standard"
msgid "Conform to the ISO 1999 C standard."
-msgstr "Làm cho hợp với chuẩn ISO 1999 C"
+msgstr "Làm cho hợp với chuẩn ISO 1999 C."
#: c-family/c.opt:1703
-#, fuzzy
-#| msgid "Deprecated in favor of -std=c99"
msgid "Deprecated in favor of -std=c99."
-msgstr "Äã lạc hậu và được thay thế bằng -std=c99"
+msgstr "Äã lạc hậu và được thay thế bằng -std=c99."
#: c-family/c.opt:1707 c-family/c.opt:1712
msgid "Conform to the ISO 1998 C++ standard revised by the 2003 technical"
-msgstr ""
+msgstr "Làm cho hợp với chuẩn ISO 1998 C++ xem xét lại kỹ thuật năm 2003."
#: c-family/c.opt:1717
-#, fuzzy
-#| msgid "Conform to the ISO 2011 C++ standard"
msgid "Conform to the ISO 2011 C++ standard with GNU extensions."
-msgstr "Làm cho hợp với chuẩnISO 2011 C++"
+msgstr "Làm cho hợp với chuẩn ISO 2011 C++ với phần mở rộng GNU."
#: c-family/c.opt:1721
-#, fuzzy
-#| msgid "Deprecated in favor of -std=gnu++11"
msgid "Deprecated in favor of -std=gnu++11."
-msgstr "Äã lạc hậu và được thay thế bằng -std=gnu++11"
+msgstr "Äã lạc hậu và được thay thế bằng -std=gnu++11."
#: c-family/c.opt:1725
-#, fuzzy
-#| msgid "Deprecated in favor of -std=gnu++11"
msgid "Deprecated in favor of -std=gnu++14."
-msgstr "Äã lạc hậu và được thay thế bằng -std=gnu++11"
+msgstr "Äã lạc hậu và được thay thế bằng -std=gnu++14."
#: c-family/c.opt:1729
-#, fuzzy
-#| msgid "Conform to the ISO 2011 C++ standard"
msgid "Conform to the ISO 2014 C++ standard with GNU extensions."
-msgstr "Làm cho hợp với chuẩnISO 2011 C++"
+msgstr "Làm cho hợp với chuẩn ISO 2014 C++ với phần mở rộng GNU."
#: c-family/c.opt:1733
msgid "Conform to the ISO 201z(7?) C++ draft standard with GNU extensions (experimental and incomplete support)."
-msgstr ""
+msgstr "Làm cho hợp với chuẩn nháp ISO 201z(7?) C++ có phần mở rộng GNU (thử nghiệm và hỗ trợ chưa đầy đủ)."
#: c-family/c.opt:1740
-#, fuzzy
-#| msgid "Conform to the ISO 2011 C++ standard"
msgid "Conform to the ISO 2011 C standard with GNU extensions."
-msgstr "Làm cho hợp với chuẩnISO 2011 C++"
+msgstr "Làm cho hợp với chuẩn ISO 2011 C với phần mở rộng GNU."
#: c-family/c.opt:1744
-#, fuzzy
-#| msgid "Deprecated in favor of -std=gnu11"
msgid "Deprecated in favor of -std=gnu11."
-msgstr "Äã lạc hậu và được thay thế bằng -std=gnu11"
+msgstr "Äã lạc hậu và được thay thế bằng -std=gnu11."
#: c-family/c.opt:1748 c-family/c.opt:1752
-#, fuzzy
-#| msgid "Conform to the ISO 1990 C standard"
msgid "Conform to the ISO 1990 C standard with GNU extensions."
-msgstr "Làm cho hợp với chuẩn ISO 1990 C"
+msgstr "Làm cho hợp với chuẩn ISO 1990 C với phần mở rộng GNU."
#: c-family/c.opt:1756
-#, fuzzy
-#| msgid "Conform to the ISO 1999 C standard"
msgid "Conform to the ISO 1999 C standard with GNU extensions."
-msgstr "Làm cho hợp với chuẩn ISO 1999 C"
+msgstr "Làm cho hợp với chuẩn ISO 1999 C với phần mở rộng GNU."
#: c-family/c.opt:1760
-#, fuzzy
-#| msgid "Deprecated in favor of -std=gnu99"
msgid "Deprecated in favor of -std=gnu99."
-msgstr "Äã lạc hậu và được thay thế bằng -std=gnu99"
+msgstr "Äã lạc hậu và được thay thế bằng -std=gnu99."
#: c-family/c.opt:1768
-#, fuzzy
-#| msgid "Conform to the ISO 1990 C standard"
msgid "Conform to the ISO 1990 C standard as amended in 1994."
-msgstr "Làm cho hợp với chuẩn ISO 1990 C"
+msgstr "Làm cho hợp với chuẩn ISO 1990 C như sửa đổi trong 1994."
#: c-family/c.opt:1776
-#, fuzzy
-#| msgid "Deprecated in favor of -std=iso9899:1999"
msgid "Deprecated in favor of -std=iso9899:1999."
-msgstr "Äã lạc hậu và được thay thế bằng -std=iso9899:1999"
+msgstr "Äã lạc hậu và được thay thế bằng -std=iso9899:1999."
#: c-family/c.opt:1787
-#, fuzzy
-#| msgid "Enable traditional preprocessing"
msgid "Enable traditional preprocessing."
-msgstr "Bật tiá»n xá»­ lý theo kiểu cổ Ä‘iển"
+msgstr "Bật tiá»n xá»­ lý theo kiểu cổ Ä‘iển."
#: c-family/c.opt:1791
-#, fuzzy
-#| msgid "-trigraphs\tSupport ISO C trigraphs"
msgid "-trigraphs\tSupport ISO C trigraphs."
-msgstr "-trigraphs\tHỗ trợ bộ ba ISO C"
+msgstr "-trigraphs\tHỗ trợ bộ ba ISO C."
#: c-family/c.opt:1795
msgid "Do not predefine system-specific and GCC-specific macros."
msgstr ""
#: ada/gcc-interface/lang.opt:61
-#, fuzzy
-#| msgid "Synonym of -gnatk8"
msgid "Synonym of -gnatk8."
-msgstr "Từ đồng nghĩa với -gnatk8"
+msgstr "Từ đồng nghĩa với -gnatk8."
#: ada/gcc-interface/lang.opt:69
-#, fuzzy
-#| msgid "Do not look for object files in standard path"
msgid "Do not look for object files in standard path."
-msgstr "Không tìm các tập tin đối tượng trong đưá»ng dẫn tiêu chuẩn"
+msgstr "Không tìm các tập tin đối tượng trong đưá»ng dẫn tiêu chuẩn."
#: ada/gcc-interface/lang.opt:73
-#, fuzzy
-#| msgid "Select the runtime"
msgid "Select the runtime."
-msgstr "Chá»n lúc chạy"
+msgstr "Chá»n lúc chạy."
#: ada/gcc-interface/lang.opt:85
-#, fuzzy
-#| msgid "Catch typos"
msgid "Catch typos."
-msgstr "Bắt gặp lỗi đánh máy"
+msgstr "Bắt gặp lỗi đánh máy."
#: ada/gcc-interface/lang.opt:89
-#, fuzzy
-#| msgid "Set name of output ALI file (internal switch)"
msgid "Set name of output ALI file (internal switch)."
-msgstr "Äặt tên cho tập tin kết xuất ALI (chuyển ná»™i bá»™)"
+msgstr ""
#: ada/gcc-interface/lang.opt:93
-#, fuzzy
-#| msgid "-gnat<options>\tSpecify options to GNAT"
msgid "-gnat<options>\tSpecify options to GNAT."
-msgstr "-gnat<tuỳ_chá»n>\tGhi rõ các tùy chá»n tá»›i GNAT"
+msgstr "-gnat<tuỳ_chá»n>\tGhi rõ các tùy chá»n tá»›i GNAT."
#: ada/gcc-interface/lang.opt:97
msgid "Ignored."
-msgstr ""
+msgstr "Bị bỠqua."
#: go/lang.opt:42
-#, fuzzy
-#| msgid "Add explicit checks for division by zero"
msgid "Add explicit checks for division by zero."
-msgstr "Thêm kiểm tra cho phép chia không"
+msgstr "Thêm kiểm tra cho phép chia không."
#: go/lang.opt:46
-#, fuzzy
-#| msgid "Add explicit checks for division overflow in INT_MIN / -1"
msgid "Add explicit checks for division overflow in INT_MIN / -1."
-msgstr "Thêm kiểm tra cho tràn phép chia trong INT_MIN / -1"
+msgstr "Thêm kiểm tra cho tràn phép chia trong INT_MIN / -1."
#: go/lang.opt:50
msgid "-fgo-dump-<type>\tDump Go frontend internal information."
@@ -8304,32 +7501,24 @@ msgid "-fgo-relative-import-path=<path> Treat a relative import as relative to p
msgstr ""
#: go/lang.opt:70
-#, fuzzy
-#| msgid "function declared %<noreturn%> has a %<return%> statement"
msgid "Functions which return values must end with return statements."
-msgstr "hàm đã khai báo %<noreturn%> có một câu lệnh %<return%>"
+msgstr ""
#: config/vms/vms.opt:27
-#, fuzzy
-#| msgid "Malloc data into P2 space"
msgid "Malloc data into P2 space."
-msgstr "Malloc dữ liệu vào vùng P2"
+msgstr "Malloc dữ liệu vào vùng P2."
#: config/vms/vms.opt:31
-#, fuzzy
-#| msgid "Set name of main routine for the debugger"
msgid "Set name of main routine for the debugger."
-msgstr "Äặt tên cá»§a hàm chính cho chương trình gỡ rối"
+msgstr "Äặt tên cá»§a hàm chính cho chương trình gỡ rối."
#: config/vms/vms.opt:35
msgid "Use VMS exit codes instead of posix ones."
msgstr ""
#: config/vms/vms.opt:39
-#, fuzzy
-#| msgid "-mpointer-size=[no,32,short,64,long]\tSet the default pointer size"
msgid "-mpointer-size=[no,32,short,64,long]\tSet the default pointer size."
-msgstr "-mpointer-size=[no,32,short,64,long]\tđặt cỡ con trỠmặc định"
+msgstr "-mpointer-size=[no,32,short,64,long]\tđặt cỡ con trỠmặc định."
#: config/vms/vms.opt:42
#, c-format
@@ -8345,181 +7534,124 @@ msgid "Generate code for the M*Core M340"
msgstr "Tạo ra mã cho M*Core M340"
#: config/mcore/mcore.opt:31
-#, fuzzy
-#| msgid "Force functions to be aligned to a 4 byte boundary"
msgid "Force functions to be aligned to a 4 byte boundary."
-msgstr "Ép buộc các hàm được xếp hàng theo một biên giới 4-byte"
+msgstr "Ép buộc các hàm được xếp hàng theo một biên giới 4-byte."
#: config/mcore/mcore.opt:35 config/moxie/moxie.opt:23
-#, fuzzy
-#| msgid "Generate big-endian code"
msgid "Generate big-endian code."
-msgstr "Tạo ra mã vỠcuối lớn"
+msgstr "Tạo ra mã vỠcuối lớn big-endian."
#: config/mcore/mcore.opt:39
-#, fuzzy
-#| msgid "Emit call graph information"
msgid "Emit call graph information."
-msgstr "Xuất thông tin vỠđồ thị gá»i"
+msgstr "Xuất thông tin vỠđồ thị gá»i."
#: config/mcore/mcore.opt:43
-#, fuzzy
-#| msgid "Use the divide instruction"
msgid "Use the divide instruction."
-msgstr "Sử dụng câu lệnh chia"
+msgstr "Sử dụng câu lệnh chia."
#: config/mcore/mcore.opt:47
-#, fuzzy
-#| msgid "Inline constants if it can be done in 2 insns or less"
msgid "Inline constants if it can be done in 2 insns or less."
-msgstr "Chèn hằng số vào trá»±c tiếp nếu có thể làm trong nhiá»u nhất 2 câu lệnh"
+msgstr "Chèn hằng số vào trá»±c tiếp nếu có thể làm trong nhiá»u nhất 2 câu lệnh."
#: config/mcore/mcore.opt:51 config/moxie/moxie.opt:27
-#, fuzzy
-#| msgid "Generate little-endian code"
msgid "Generate little-endian code."
-msgstr "Tạo ra mã vá» cuối nhá»"
+msgstr "Tạo ra mã vỠcuối nhỠlittle-endian."
#: config/mcore/mcore.opt:56 config/fr30/fr30.opt:27
-#, fuzzy
-#| msgid "Assume that run-time support has been provided, so omit -lsim from the linker command line"
msgid "Assume that run-time support has been provided, so omit -lsim from the linker command line."
-msgstr "Coi là đã cung cấp há»— trợ vào lúc chạy, vì thế bá» sót -lsim khá»i dòng lệnh liên kết"
+msgstr "Coi là đã cung cấp há»— trợ vào lúc chạy, vì thế bá» sót -lsim khá»i dòng lệnh liên kết."
#: config/mcore/mcore.opt:60
-#, fuzzy
-#| msgid "Use arbitrary sized immediates in bit operations"
msgid "Use arbitrary sized immediates in bit operations."
-msgstr "Dùng giá trị trực tiếp cỡ tùy ý trong thao tác bit"
+msgstr "Dùng giá trị trực tiếp cỡ tùy ý trong thao tác bit."
#: config/mcore/mcore.opt:64
-#, fuzzy
-#| msgid "Prefer word accesses over byte accesses"
msgid "Prefer word accesses over byte accesses."
-msgstr "Thích truy cập loại từ hơn truy cập loại byte"
+msgstr "Thích truy cập loại từ hơn truy cập loại byte."
#: config/mcore/mcore.opt:71
-#, fuzzy
-#| msgid "Set the maximum amount for a single stack increment operation"
msgid "Set the maximum amount for a single stack increment operation."
-msgstr "Äặt số lượng tối Ä‘a cho má»™t thao tác lượng gia loại ngăn xếp đơn"
+msgstr "Äặt số lượng tối Ä‘a cho má»™t thao tác lượng gia loại ngăn xếp đơn."
#: config/mcore/mcore.opt:75
-#, fuzzy
-#| msgid "Always treat bitfields as int-sized"
msgid "Always treat bitfields as int-sized."
-msgstr "Lúc nào cÅ©ng thấy trưá»ng bit có kích cỡ số nguyên"
+msgstr "Lúc nào cÅ©ng thấy trưá»ng bit có kích cỡ số nguyên."
#: config/linux-android.opt:23
msgid "Generate code for the Android platform."
msgstr "Tạo ra mã cho Ná»n tảng Android."
#: config/mmix/mmix.opt:24
-#, fuzzy
-#| msgid "For intrinsics library: pass all parameters in registers"
msgid "For intrinsics library: pass all parameters in registers."
-msgstr "Cho thư viện các bản thá»±c chất: gá»­i má»i tham số qua thanh ghi"
+msgstr "Cho thư viện các bản thá»±c chất: gá»­i má»i tham số qua thanh ghi."
#: config/mmix/mmix.opt:28
-#, fuzzy
-#| msgid "Use register stack for parameters and return value"
msgid "Use register stack for parameters and return value."
-msgstr "Sử dụng ngăn xếp thanh ghi cho tham số và giá trị trả lại"
+msgstr "Sử dụng ngăn xếp thanh ghi cho tham số và giá trị trả lại."
#: config/mmix/mmix.opt:32
-#, fuzzy
-#| msgid "Use call-clobbered registers for parameters and return value"
msgid "Use call-clobbered registers for parameters and return value."
-msgstr "Sá»­ dụng thanh ghi bị cuá»™c gá»i ghi đè cho tham số và giá trị trả lại"
+msgstr "Sá»­ dụng thanh ghi bị cuá»™c gá»i ghi đè cho tham số và giá trị trả lại."
#: config/mmix/mmix.opt:37
-#, fuzzy
-#| msgid "Use epsilon-respecting floating point compare instructions"
msgid "Use epsilon-respecting floating point compare instructions."
-msgstr "Sử dụng câu lệnh so sánh loại dấu chấm động tùy theo épxilông"
+msgstr "Sử dụng câu lệnh so sánh loại dấu chấm động tùy theo épxilông."
#: config/mmix/mmix.opt:41
-#, fuzzy
-#| msgid "Use zero-extending memory loads, not sign-extending ones"
msgid "Use zero-extending memory loads, not sign-extending ones."
-msgstr "Sử dụng việc nạp vùng nhớ loại mở rộng số không, không phải việc mở rộng ký hiệu"
+msgstr "Sử dụng việc nạp vùng nhớ loại mở rộng số không, không phải việc mở rộng ký hiệu."
#: config/mmix/mmix.opt:45
-#, fuzzy
-#| msgid "Generate divide results with reminder having the same sign as the divisor (not the dividend)"
msgid "Generate divide results with reminder having the same sign as the divisor (not the dividend)."
-msgstr "Tạo ra kết quả chia có phần dư với cùng một ký hiệu (-/+) với số chia (không phải với số bị chia)"
+msgstr "Tạo ra kết quả chia có phần dư với cùng một ký hiệu (-/+) với số chia (không phải với số bị chia)."
#: config/mmix/mmix.opt:49
-#, fuzzy
-#| msgid "Prepend global symbols with \":\" (for use with PREFIX)"
msgid "Prepend global symbols with \":\" (for use with PREFIX)."
-msgstr "Thêm dấu hai chấm \":\" vào trước ký hiệu toàn cục (để sá»­ dụng vá»›i TIỀN_Tá»)"
+msgstr "Thêm dấu hai chấm \":\" vào trước ký hiệu toàn cục (để sá»­ dụng vá»›i TIỀN_Tá»)."
#: config/mmix/mmix.opt:53
-#, fuzzy
-#| msgid "Do not provide a default start-address 0x100 of the program"
msgid "Do not provide a default start-address 0x100 of the program."
-msgstr "Äừng cung cấp má»™t địa chỉ bắt đầu mặc định 0x100 cá»§a chương trình"
+msgstr "Äừng cung cấp má»™t địa chỉ bắt đầu mặc định 0x100 cá»§a chương trình."
#: config/mmix/mmix.opt:57
-#, fuzzy
-#| msgid "Link to emit program in ELF format (rather than mmo)"
msgid "Link to emit program in ELF format (rather than mmo)."
-msgstr "Liên kết tới chương trình xuất theo định dạng ELF (hơn là mmo)"
+msgstr "Liên kết tới chương trình xuất theo định dạng ELF (hơn là mmo)."
#: config/mmix/mmix.opt:61
-#, fuzzy
-#| msgid "Use P-mnemonics for branches statically predicted as taken"
msgid "Use P-mnemonics for branches statically predicted as taken."
-msgstr "Sử dụng phím gới nhớ P cho nhánh dự đoán tĩnh là không còn sẵn sàng"
+msgstr "Sử dụng gợi-nhớ-P cho nhánh dự đoán tĩnh là bắt được."
#: config/mmix/mmix.opt:65
-#, fuzzy
-#| msgid "Don't use P-mnemonics for branches"
msgid "Don't use P-mnemonics for branches."
-msgstr "Äừng sá»­ dụng phím gá»›i nhá»› P cho nhánh"
+msgstr "Sử dụng gợi-nhớ-P cho nhánh."
#: config/mmix/mmix.opt:79
-#, fuzzy
-#| msgid "Use addresses that allocate global registers"
msgid "Use addresses that allocate global registers."
-msgstr "Sử dụng địa chỉ mà cấp phát thanh ghi toàn cục"
+msgstr "Sử dụng địa chỉ mà cấp phát thanh ghi toàn cục."
#: config/mmix/mmix.opt:83
-#, fuzzy
-#| msgid "Do not use addresses that allocate global registers"
msgid "Do not use addresses that allocate global registers."
-msgstr "Äừng sá»­ dụng địa chỉ mà cấp phát thanh ghi toàn cục"
+msgstr "Äừng sá»­ dụng địa chỉ mà cấp phát thanh ghi toàn cục."
#: config/mmix/mmix.opt:87
-#, fuzzy
-#| msgid "Generate a single exit point for each function"
msgid "Generate a single exit point for each function."
-msgstr "Tạo ra má»™t Ä‘iểm ra khá»i riêng lẻ cho má»—i hàm"
+msgstr "Tạo ra má»™t Ä‘iểm ra khá»i riêng lẻ cho má»—i hàm."
#: config/mmix/mmix.opt:91
-#, fuzzy
-#| msgid "Do not generate a single exit point for each function"
msgid "Do not generate a single exit point for each function."
-msgstr "Äừng sạo ra má»™t Ä‘iểm ra khá»i riêng lẻ cho má»—i hàm"
+msgstr "Äừng sạo ra má»™t Ä‘iểm ra khá»i riêng lẻ cho má»—i hàm."
#: config/mmix/mmix.opt:95
-#, fuzzy
-#| msgid "Set start-address of the program"
msgid "Set start-address of the program."
-msgstr "Äặt địa chỉ bắt đầu cá»§a chương trình"
+msgstr "Äặt địa chỉ bắt đầu cá»§a chương trình."
#: config/mmix/mmix.opt:99
-#, fuzzy
-#| msgid "Set start-address of data"
msgid "Set start-address of data."
-msgstr "Äặt địa chỉ bắt đầu cá»§a dữ liệu"
+msgstr "Äặt địa chỉ bắt đầu cá»§a dữ liệu."
#: config/darwin.opt:114
-#, fuzzy
msgid "Generate compile-time CFString objects."
-msgstr "Tạo ra câu lệnh isel"
+msgstr ""
#: config/darwin.opt:211
msgid "Warn if constant CFString objects contain non-portable characters."
@@ -8530,71 +7662,49 @@ msgid "Generate AT&T-style stubs for Mach-O."
msgstr ""
#: config/darwin.opt:220
-#, fuzzy
-#| msgid "Generate code suitable for executables (NOT shared libs)"
msgid "Generate code suitable for executables (NOT shared libs)."
-msgstr "Tạo ra mã thích hợp với bản thực thị (KHÔNG PHẢI thư viện dùng chung)"
+msgstr "Tạo ra mã thích hợp với bản thực thị (KHÔNG PHẢI thư viện dùng chung)."
#: config/darwin.opt:224
-#, fuzzy
-#| msgid "Generate code suitable for fast turn around debugging"
msgid "Generate code suitable for fast turn around debugging."
-msgstr "Tạo ra mã thích hợp với chức năng gỡ rối trả kết quả nhanh"
+msgstr "Tạo ra mã thích hợp với chức năng gỡ rối trả kết quả nhanh."
#: config/darwin.opt:232
-#, fuzzy
-#| msgid "The earliest MacOS X version on which this program will run"
msgid "The earliest MacOS X version on which this program will run."
-msgstr "Phiên bản Mac OSX cũ nhất trên đó chương trình này chạy được"
+msgstr "Phiên bản Mac OSX cũ nhất trên đó chương trình này chạy được."
#: config/darwin.opt:236
-#, fuzzy
-#| msgid "Set sizeof(bool) to 1"
msgid "Set sizeof(bool) to 1."
-msgstr "Äặt kích cỡ biểu thức bun thành 1"
+msgstr "Äặt kích cỡ biểu thức bun thành 1."
#: config/darwin.opt:240
-#, fuzzy
-#| msgid "Generate code for darwin loadable kernel extensions"
msgid "Generate code for darwin loadable kernel extensions."
-msgstr "Tạo ra mã cho phần mở rộng hạt nhân có thể nạp được với Darwin"
+msgstr "Tạo ra mã cho phần mở rộng hạt nhân có thể nạp được với Darwin."
#: config/darwin.opt:244
-#, fuzzy
-#| msgid "Generate code for the kernel or loadable kernel extensions"
msgid "Generate code for the kernel or loadable kernel extensions."
-msgstr "Tạo ra mã cho hạt nhân hoặc phần mở rộng hạt nhân có thể nạp được"
+msgstr "Tạo ra mã cho hạt nhân hoặc phần mở rộng hạt nhân có thể nạp được."
#: config/darwin.opt:248
-#, fuzzy
-#| msgid "-iframework <dir>\tAdd <dir> to the end of the system framework include path"
msgid "-iframework <dir>\tAdd <dir> to the end of the system framework include path."
-msgstr "-iframework <thư_mục>\tPhụ thêm thư mục này vào đưá»ng dẫn bao gồm khuôn khổ hệ thống"
+msgstr "-iframework <thư_mục>\tPhụ thêm thư mục này vào đưá»ng dẫn bao gồm khuôn khổ hệ thống."
#: config/bfin/bfin.opt:40 config/msp430/msp430.opt:3 config/c6x/c6x.opt:38
#: config/mep/mep.opt:143
-#, fuzzy
-#| msgid "Use simulator runtime"
msgid "Use simulator runtime."
-msgstr "Sá»­ dụng thá»i gian chạy cá»§a bá»™ mô phá»ng"
+msgstr "Sá»­ dụng thá»i gian chạy cá»§a bá»™ mô phá»ng."
#: config/bfin/bfin.opt:44 config/arm/arm.opt:106
-#, fuzzy
-#| msgid "Specify the name of the target CPU"
msgid "Specify the name of the target CPU."
-msgstr "Ghi rõ tên của CPU đích"
+msgstr "Ghi rõ tên của CPU đích."
#: config/bfin/bfin.opt:48
-#, fuzzy
-#| msgid "Omit frame pointer for leaf functions"
msgid "Omit frame pointer for leaf functions."
-msgstr "BỠsót hàm trỠkhung cho hàm lá"
+msgstr "BỠsót hàm trỠkhung cho hàm lá."
#: config/bfin/bfin.opt:52
-#, fuzzy
-#| msgid "Program is entirely located in low 64k of memory"
msgid "Program is entirely located in low 64k of memory."
-msgstr "Chương trình nằm hoàn toàn trong 64k thấp của vùng nhớ"
+msgstr "Chương trình nằm hoàn toàn trong 64k thấp của vùng nhớ."
#: config/bfin/bfin.opt:56
msgid "Work around a hardware anomaly by adding a number of NOPs before a"
@@ -8605,80 +7715,56 @@ msgid "Avoid speculative loads to work around a hardware anomaly."
msgstr "Tránh sá»± nạp suy Ä‘oán để khắc phục má»™t sá»± dị thưá»ng loại phần cứng."
#: config/bfin/bfin.opt:65
-#, fuzzy
-#| msgid "Enabled ID based shared library"
msgid "Enabled ID based shared library."
-msgstr "Bật thư viện dùng chung dựa vào mã số (ID)"
+msgstr "Bật thư viện dùng chung dựa vào mã số (ID)."
#: config/bfin/bfin.opt:69
msgid "Generate code that won't be linked against any other ID shared libraries,"
msgstr "Tạo ra mã sẽ không được liên kết đối với thư viện dùng chung mã số khác nào,"
#: config/bfin/bfin.opt:74 config/m68k/m68k.opt:171
-#, fuzzy
-#| msgid "ID of shared library to build"
msgid "ID of shared library to build."
-msgstr "mã số (ID) của thư viện dùng chung cần biên dịch"
+msgstr "mã số (ID) của thư viện dùng chung cần biên dịch."
#: config/bfin/bfin.opt:78 config/m68k/m68k.opt:167
-#, fuzzy
-#| msgid "Enable separate data segment"
msgid "Enable separate data segment."
-msgstr "Bật đoạn dữ liệu riêng"
+msgstr "Bật ngăn cách đoạn dữ liệu."
#: config/bfin/bfin.opt:82 config/c6x/c6x.opt:63
-#, fuzzy
-#| msgid "Avoid generating pc-relative calls; use indirection"
msgid "Avoid generating pc-relative calls; use indirection."
-msgstr "Tránh sá»± tạo ra cuá»™c gá»i tương đối vá»›i PC; sá»­ dụng hành động gián tiếp"
+msgstr "Tránh sá»± tạo ra cuá»™c gá»i tương đối vá»›i PC; sá»­ dụng hành động gián tiếp."
#: config/bfin/bfin.opt:86
-#, fuzzy
-#| msgid "Link with the fast floating-point library"
msgid "Link with the fast floating-point library."
-msgstr "Liên kết với thư viện dấu chấm động nhanh"
+msgstr "Liên kết với thư viện dấu chấm động nhanh."
#: config/bfin/bfin.opt:90 config/frv/frv.opt:130
-#, fuzzy
-#| msgid "Enable Function Descriptor PIC mode"
msgid "Enable Function Descriptor PIC mode."
-msgstr "Bật chế độ PIC Mô tả Hàm"
+msgstr "Bật chế độ PIC Mô tả Hàm."
#: config/bfin/bfin.opt:94 config/frv/frv.opt:162
-#, fuzzy
-#| msgid "Enable inlining of PLT in function calls"
msgid "Enable inlining of PLT in function calls."
-msgstr "Bật sá»± chèn trá»±c tiếp PLT vào cuá»™c gá»i hàm"
+msgstr "Bật sá»± chèn trá»±c tiếp PLT vào cuá»™c gá»i hàm."
#: config/bfin/bfin.opt:98
-#, fuzzy
-#| msgid "Do stack checking using bounds in L1 scratch memory"
msgid "Do stack checking using bounds in L1 scratch memory."
-msgstr "Kiểm tra ngăn xếp dùng biên giới trong vùng nhớ nháp cấp 1"
+msgstr "Kiểm tra ngăn xếp dùng biên giới trong vùng nhớ nháp cấp 1."
#: config/bfin/bfin.opt:102
-#, fuzzy
-#| msgid "Enable multicore support"
msgid "Enable multicore support."
-msgstr "Bật khả năng hỗ trợ đa lõi"
+msgstr "Bật khả năng hỗ trợ đa lõi."
#: config/bfin/bfin.opt:106
-#, fuzzy
-#| msgid "Build for Core A"
msgid "Build for Core A."
-msgstr "Xây dựng cho Lõi A"
+msgstr "Xây dựng cho Lõi A."
#: config/bfin/bfin.opt:110
-#, fuzzy
-#| msgid "Build for Core B"
msgid "Build for Core B."
-msgstr "Biên dịch cho Lõi B"
+msgstr "Biên dịch cho Lõi B."
#: config/bfin/bfin.opt:114
-#, fuzzy
-#| msgid "Build for SDRAM"
msgid "Build for SDRAM."
-msgstr "Biên dịch cho SDRAM"
+msgstr "Biên dịch cho SDRAM."
#: config/bfin/bfin.opt:118
msgid "Assume ICPLBs are enabled at runtime."
@@ -8697,274 +7783,185 @@ msgid "Known M68K ISAs (for use with the -march= option):"
msgstr "Không hiểu M68K ISAs(để dùng vá»›i tùy chá»n -march=):"
#: config/m68k/ieee.opt:24 config/i386/i386.opt:358
-#, fuzzy
-#| msgid "Use IEEE math for fp comparisons"
msgid "Use IEEE math for fp comparisons."
msgstr "Sá»­ dụng toán há»c IEEE cho phép so sánh dấu chấm động"
#: config/m68k/m68k.opt:30
-#, fuzzy
-#| msgid "Generate code for a 520X"
msgid "Generate code for a 520X."
-msgstr "Tạo ra mã cho một 520X"
+msgstr "Tạo ra mã cho một 520X."
#: config/m68k/m68k.opt:34
-#, fuzzy
-#| msgid "Generate code for a 5206e"
msgid "Generate code for a 5206e."
-msgstr "Tạo ra mã cho một 5206e"
+msgstr "Tạo ra mã cho một 5206e."
#: config/m68k/m68k.opt:38
-#, fuzzy
-#| msgid "Generate code for a 528x"
msgid "Generate code for a 528x."
-msgstr "Tạo ra mã cho một 528X"
+msgstr "Tạo ra mã cho một 528x"
#: config/m68k/m68k.opt:42
-#, fuzzy
-#| msgid "Generate code for a 5307"
msgid "Generate code for a 5307."
-msgstr "Tạo ra mã cho một 5307"
+msgstr "Tạo ra mã cho một 5307."
#: config/m68k/m68k.opt:46
-#, fuzzy
-#| msgid "Generate code for a 5407"
msgid "Generate code for a 5407."
-msgstr "Tạo ra mã cho một 5407"
+msgstr "Tạo ra mã cho một 5407."
#: config/m68k/m68k.opt:50 config/m68k/m68k.opt:111
-#, fuzzy
-#| msgid "Generate code for a 68000"
msgid "Generate code for a 68000."
-msgstr "Tạo ra mã cho một 68000"
+msgstr "Tạo ra mã cho một 68000."
#: config/m68k/m68k.opt:54
-#, fuzzy
-#| msgid "Generate code for a 68010"
msgid "Generate code for a 68010."
-msgstr "Tạo ra mã cho một 68010"
+msgstr "Tạo ra mã cho một 68010."
#: config/m68k/m68k.opt:58 config/m68k/m68k.opt:115
-#, fuzzy
-#| msgid "Generate code for a 68020"
msgid "Generate code for a 68020."
-msgstr "Tạo ra mã cho một 68020"
+msgstr "Tạo ra mã cho một 68020."
#: config/m68k/m68k.opt:62
-#, fuzzy
-#| msgid "Generate code for a 68040, without any new instructions"
msgid "Generate code for a 68040, without any new instructions."
-msgstr "Tạo ra mã cho một 68040 mà không có câu lệnh mới nào"
+msgstr "Tạo ra mã cho một 68040 mà không có câu lệnh mới nào."
#: config/m68k/m68k.opt:66
-#, fuzzy
-#| msgid "Generate code for a 68060, without any new instructions"
msgid "Generate code for a 68060, without any new instructions."
-msgstr "Tạo ra mã cho một 68060 mà không có câu lệnh mới nào"
+msgstr "Tạo ra mã cho một 68060 mà không có câu lệnh mới nào."
#: config/m68k/m68k.opt:70
-#, fuzzy
-#| msgid "Generate code for a 68030"
msgid "Generate code for a 68030."
-msgstr "Tạo ra mã cho một 68030"
+msgstr "Tạo ra mã cho một 68030."
#: config/m68k/m68k.opt:74
-#, fuzzy
-#| msgid "Generate code for a 68040"
msgid "Generate code for a 68040."
-msgstr "Tạo ra mã cho một 68040"
+msgstr "Tạo ra mã cho một 68040."
#: config/m68k/m68k.opt:78
-#, fuzzy
-#| msgid "Generate code for a 68060"
msgid "Generate code for a 68060."
-msgstr "Tạo ra mã cho một 680220"
+msgstr "Tạo ra mã cho một 68060."
#: config/m68k/m68k.opt:82
-#, fuzzy
-#| msgid "Generate code for a 68302"
msgid "Generate code for a 68302."
-msgstr "Tạo ra mã cho một 68302"
+msgstr "Tạo ra mã cho một 68302."
#: config/m68k/m68k.opt:86
-#, fuzzy
-#| msgid "Generate code for a 68332"
msgid "Generate code for a 68332."
-msgstr "Tạo ra mã cho một 68332"
+msgstr "Tạo ra mã cho một 68332."
#: config/m68k/m68k.opt:91
-#, fuzzy
-#| msgid "Generate code for a 68851"
msgid "Generate code for a 68851."
-msgstr "Tạo ra mã cho một 68851"
+msgstr "Tạo ra mã cho một 68851."
#: config/m68k/m68k.opt:95
-#, fuzzy
-#| msgid "Generate code that uses 68881 floating-point instructions"
msgid "Generate code that uses 68881 floating-point instructions."
-msgstr "Tạo ra mã sử dụng chỉ lệnh dấu chấm động 68881"
+msgstr "Tạo ra mã sử dụng chỉ lệnh dấu chấm động 68881."
#: config/m68k/m68k.opt:99
-#, fuzzy
-#| msgid "Align variables on a 32-bit boundary"
msgid "Align variables on a 32-bit boundary."
-msgstr "Xếp hàng tất cả các biến theo một biên giới 32-byte"
+msgstr "Xếp hàng tất cả các biến theo một biên giới 32-byte."
#: config/m68k/m68k.opt:103 config/arm/arm.opt:81 config/nios2/nios2.opt:570
#: config/nds32/nds32.opt:66 config/c6x/c6x.opt:67
-#, fuzzy
msgid "Specify the name of the target architecture."
-msgstr "Ghi rõ tên của kiến trúc đích"
+msgstr "Ghi rõ tên của kiến trúc đích."
#: config/m68k/m68k.opt:107
-#, fuzzy
-#| msgid "Use the bit-field instructions"
msgid "Use the bit-field instructions."
-msgstr "Sá»­ dụng câu lệnh loại trưá»ng-bit"
+msgstr "Sá»­ dụng câu lệnh loại trưá»ng-bit."
#: config/m68k/m68k.opt:119
-#, fuzzy
-#| msgid "Generate code for a ColdFire v4e"
msgid "Generate code for a ColdFire v4e."
-msgstr "Tạo ra mã cho một ColdFire v4e"
+msgstr "Tạo ra mã cho một ColdFire v4e."
#: config/m68k/m68k.opt:123
-#, fuzzy
-#| msgid "Specify the target CPU"
msgid "Specify the target CPU."
-msgstr "Ghi rõ CPU đích"
+msgstr "Ghi rõ CPU đích."
#: config/m68k/m68k.opt:127
-#, fuzzy
-#| msgid "Generate code for a cpu32"
msgid "Generate code for a cpu32."
-msgstr "Tạo ra mã cho một cpu32"
+msgstr "Tạo ra mã cho một cpu32."
#: config/m68k/m68k.opt:131
-#, fuzzy
-#| msgid "Use hardware division instructions on ColdFire"
msgid "Use hardware division instructions on ColdFire."
-msgstr "Sử dụng câu lệnh chia phần cứng trong ColdFire"
+msgstr "Sử dụng câu lệnh chia phần cứng trong ColdFire."
#: config/m68k/m68k.opt:135
-#, fuzzy
-#| msgid "Generate code for a Fido A"
msgid "Generate code for a Fido A."
-msgstr "Tạo ra mã cho một Fido A"
+msgstr "Tạo ra mã cho một Fido A."
#: config/m68k/m68k.opt:139
-#, fuzzy
-#| msgid "Generate code which uses hardware floating point instructions"
msgid "Generate code which uses hardware floating point instructions."
-msgstr "Tạo ra mã mả sử dụng câu lệnh dấu chấm động phần cứng"
+msgstr "Tạo ra mã mả sử dụng câu lệnh dấu chấm động phần cứng."
#: config/m68k/m68k.opt:143
-#, fuzzy
-#| msgid "Enable ID based shared library"
msgid "Enable ID based shared library."
-msgstr "Bật thư viện dùng chung dựa vào mã số (ID)"
+msgstr "Bật thư viện dùng chung dựa vào mã số (ID)."
#: config/m68k/m68k.opt:147
-#, fuzzy
-#| msgid "Do not use the bit-field instructions"
msgid "Do not use the bit-field instructions."
-msgstr "Äừng sá»­ dụng câu lệnh loại trưá»ng-bit"
+msgstr "Äừng sá»­ dụng câu lệnh loại trưá»ng-bit."
#: config/m68k/m68k.opt:151
-#, fuzzy
-#| msgid "Use normal calling convention"
msgid "Use normal calling convention."
-msgstr "Sá»­ dụng quy ước gá»i thông thưá»ng"
+msgstr "Sá»­ dụng quy ước gá»i thông thưá»ng."
#: config/m68k/m68k.opt:155
-#, fuzzy
-#| msgid "Consider type 'int' to be 32 bits wide"
msgid "Consider type 'int' to be 32 bits wide."
-msgstr "Thấy “type†(loại) “int†(số nguyên) có chiá»u rá»™ng 32 bit"
+msgstr "Thấy “type†(loại) “int†(số nguyên) có chiá»u rá»™ng 32 bit."
#: config/m68k/m68k.opt:159
-#, fuzzy
-#| msgid "Generate pc-relative code"
msgid "Generate pc-relative code."
-msgstr "Tạo ra mã tương đối với PC (pc-relative)"
+msgstr "Tạo ra mã tương đối với PC (pc-relative)."
#: config/m68k/m68k.opt:163
-#, fuzzy
-#| msgid "Use different calling convention using 'rtd'"
msgid "Use different calling convention using 'rtd'."
-msgstr "Sá»­ dụng má»™t quy ước gá»i khác bằng “rtdâ€"
+msgstr "Sá»­ dụng má»™t quy ước gá»i khác bằng “rtdâ€."
#: config/m68k/m68k.opt:175
-#, fuzzy
-#| msgid "Consider type 'int' to be 16 bits wide"
msgid "Consider type 'int' to be 16 bits wide."
-msgstr "Thấy “type†(loại) “int†(số nguyên) có chiá»u rá»™ng 16 bit"
+msgstr "Thấy “type†(loại) “int†(số nguyên) có chiá»u rá»™ng 16 bit."
#: config/m68k/m68k.opt:179
-#, fuzzy
-#| msgid "Generate code with library calls for floating point"
msgid "Generate code with library calls for floating point."
-msgstr "Tạo ra mã chứa cuá»™c gá»i thư viện cho dấu chấm động"
+msgstr "Tạo ra mã chứa cuá»™c gá»i thư viện cho dấu chấm động."
#: config/m68k/m68k.opt:183
-#, fuzzy
-#| msgid "Do not use unaligned memory references"
msgid "Do not use unaligned memory references."
-msgstr "Äừng sá»­ dụng tham chiếu vùng nhá»› tạm chưa xếp hàng"
+msgstr "Äừng sá»­ dụng tham chiếu vùng nhá»› tạm chưa xếp hàng."
#: config/m68k/m68k.opt:187
-#, fuzzy
-#| msgid "Tune for the specified target CPU or architecture"
msgid "Tune for the specified target CPU or architecture."
-msgstr "Äiá»u chỉnh cho CPU hay kiến trúc đưa ra"
+msgstr "Äiá»u chỉnh cho CPU hay kiến trúc đưa ra."
#: config/m68k/m68k.opt:191
-#, fuzzy
-#| msgid "Support more than 8192 GOT entries on ColdFire"
msgid "Support more than 8192 GOT entries on ColdFire."
-msgstr "Há»— trợ nhiá»u hÆ¡n 8192 mục nhập GOT trên ColdFire"
+msgstr "Há»— trợ nhiá»u hÆ¡n 8192 mục nhập GOT trên ColdFire."
#: config/m68k/m68k.opt:195
-#, fuzzy
-#| msgid "Support TLS segment larger than 64K"
msgid "Support TLS segment larger than 64K."
-msgstr "Hỗ trợ đoạn TLS lớn hơn 64K"
+msgstr "Hỗ trợ đoạn TLS lớn hơn 64K."
#: config/m32c/m32c.opt:23
-#, fuzzy
-#| msgid "-msim\tUse simulator runtime"
msgid "-msim\tUse simulator runtime."
-msgstr "-msim\tSá»­ dụng khoảng thá»i gian chạy cá»§a bá»™ mô phá»ng"
+msgstr "-msim\tSá»­ dụng khoảng thá»i gian chạy cá»§a bá»™ mô phá»ng."
#: config/m32c/m32c.opt:27
-#, fuzzy
-#| msgid "-mcpu=r8c\tCompile code for R8C variants"
msgid "-mcpu=r8c\tCompile code for R8C variants."
-msgstr "-mcpu=r8c\tBiên dịch mã cho biến thế R8C"
+msgstr "-mcpu=r8c\tBiên dịch mã cho biến thế R8C."
#: config/m32c/m32c.opt:31
-#, fuzzy
-#| msgid "-mcpu=m16c\tCompile code for M16C variants"
msgid "-mcpu=m16c\tCompile code for M16C variants."
-msgstr "-mcpu=m16c\tBiên dịch mã cho biến thế M16C"
+msgstr "-mcpu=m16c\tBiên dịch mã cho biến thế M16C."
#: config/m32c/m32c.opt:35
-#, fuzzy
-#| msgid "-mcpu=m32cm\tCompile code for M32CM variants"
msgid "-mcpu=m32cm\tCompile code for M32CM variants."
-msgstr "-mcpu=m32cm\tBiên dịch mã cho biến thế M32CM"
+msgstr "-mcpu=m32cm\tBiên dịch mã cho biến thế M32CM."
#: config/m32c/m32c.opt:39
-#, fuzzy
-#| msgid "-mcpu=m32c\tCompile code for M32C variants"
msgid "-mcpu=m32c\tCompile code for M32C variants."
-msgstr "-mcpu=m32c\tBiên dịch mã cho biến thế M32C"
+msgstr "-mcpu=m32c\tBiên dịch mã cho biến thế M32C."
#: config/m32c/m32c.opt:43
-#, fuzzy
-#| msgid "-memregs=\tNumber of memreg bytes (default: 16, range: 0..16)"
msgid "-memregs=\tNumber of memreg bytes (default: 16, range: 0..16)."
-msgstr "-memregs=\tSố các byte memreg (mặc định: 16, phạm vi: 0..16)"
+msgstr "-memregs=\tSố các byte memreg (mặc định: 16, phạm vi: 0..16)."
#: config/msp430/msp430.opt:7
msgid "Force assembly output to always use hex constants."
@@ -8979,22 +7976,16 @@ msgid "Warn if an MCU name is unrecognised or conflicts with other options (defa
msgstr ""
#: config/msp430/msp430.opt:19
-#, fuzzy
-#| msgid "Specify the ISA to build for: msp430, mdsp430x, msp430xv2"
msgid "Specify the ISA to build for: msp430, msp430x, msp430xv2."
-msgstr "Chỉ định ISA cần biên dịch cho: msp430, mdsp430x, msp430xv2"
+msgstr "Chỉ định ISA cần biên dịch cho: msp430, mdsp430x, msp430xv2."
#: config/msp430/msp430.opt:23
-#, fuzzy
-#| msgid "Select large model - 20-bit addresses/pointers"
msgid "Select large model - 20-bit addresses/pointers."
-msgstr "Chá»n chế độ rá»™ng - con trá» và địa chỉ 20 bít"
+msgstr "Chá»n chế độ rá»™ng - con trá» và địa chỉ 20 bít."
#: config/msp430/msp430.opt:27
-#, fuzzy
-#| msgid "Select small model - 16-bit addresses/pointers (default)"
msgid "Select small model - 16-bit addresses/pointers (default)."
-msgstr "Chá»n chế độ nhá» - con trá» và địa chỉ 20 bít (mặc định)"
+msgstr "Chá»n chế độ nhá» - con trá» và địa chỉ 20 bít (mặc định)."
#: config/msp430/msp430.opt:31
msgid "Optimize opcode sizes at link time."
@@ -9009,10 +8000,8 @@ msgid "Specify the type of hardware multiply to support."
msgstr ""
#: config/msp430/msp430.opt:67
-#, fuzzy
-#| msgid "Specifies whether interrupt functions should save and restore the accumulator register."
msgid "Specify whether functions should be placed into low or high memory."
-msgstr "Ghi rõ nếu hàm gián đoạn nên lưu và phục hồi thanh ghi tích lũy hay không."
+msgstr ""
#: config/msp430/msp430.opt:71
msgid "Specify whether variables should be placed into low or high memory."
@@ -9036,14 +8025,10 @@ msgstr ""
#: config/aarch64/aarch64.opt:65 config/arm/arm.opt:94
#: config/microblaze/microblaze.opt:60
-#, fuzzy
-#| msgid "Assume target CPU is configured as big endian"
msgid "Assume target CPU is configured as big endian."
-msgstr "Coi là CPU đích được cấu hình vỠcuối lớn"
+msgstr "Coi là CPU đích được cấu hình vỠcuối lớn."
#: config/aarch64/aarch64.opt:69
-#, fuzzy
-#| msgid "Generate code which uses hardware floating point instructions"
msgid "Generate code which uses only the general registers."
msgstr "Tạo ra mã mả sử dụng câu lệnh dấu chấm động phần cứng"
@@ -9057,60 +8042,44 @@ msgstr ""
#: config/aarch64/aarch64.opt:81 config/arm/arm.opt:155
#: config/microblaze/microblaze.opt:64
-#, fuzzy
-#| msgid "Assume target CPU is configured as little endian"
msgid "Assume target CPU is configured as little endian."
-msgstr "Coi là CPU đích được cấu hình vá» cuối nhá»"
+msgstr "Coi là CPU đích được cấu hình vá» cuối nhá»."
#: config/aarch64/aarch64.opt:85
-#, fuzzy
-#| msgid "Specify the code model"
msgid "Specify the code model."
-msgstr "Chỉ định mô hình mã"
+msgstr "Chỉ định mô hình mã."
#: config/aarch64/aarch64.opt:89
msgid "Don't assume that unaligned accesses are handled by the system."
msgstr ""
#: config/aarch64/aarch64.opt:93 config/i386/i386.opt:390
-#, fuzzy
-#| msgid "Omit the frame pointer in leaf functions"
msgid "Omit the frame pointer in leaf functions."
-msgstr "BỠsót hàm trỠkhung trong hàm lá"
+msgstr "BỠqua con trỠkhung trong hàm lá."
#: config/aarch64/aarch64.opt:97
msgid "Specify TLS dialect."
msgstr ""
#: config/aarch64/aarch64.opt:101
-#, fuzzy
-#| msgid "Specify bit size of immediate TLS offsets"
msgid "Specifies bit size of immediate TLS offsets. Valid values are 12, 24, 32, 48."
-msgstr "Ghi rõ kích cỡ bit của hiệu số TLS trực tiếp"
+msgstr "Ghi rõ kích cỡ bit của hiệu số TLS trực tiếp. giá trị hợp lệ là 12, 24, 32, 48."
#: config/aarch64/aarch64.opt:120
-#, fuzzy
-#| msgid "-march=ARCH\tUse features of architecture ARCH"
msgid "-march=ARCH\tUse features of architecture ARCH."
-msgstr "-mcpu=KTrúc\tSử dụng các tính năng của Ktrúc đã cho"
+msgstr "-mcpu=KTrúc\tSử dụng các tính năng của Ktrúc đã cho."
#: config/aarch64/aarch64.opt:124
-#, fuzzy
-#| msgid "-mcpu=CPU\tUse features of and optimize for CPU"
msgid "-mcpu=CPU\tUse features of and optimize for CPU."
-msgstr "-mcpu=CPU\tDùng các tính năng của và tối ưu hóa cho CPU"
+msgstr "-mcpu=CPU\tDùng các tính năng của và tối ưu hóa cho CPU."
#: config/aarch64/aarch64.opt:128
-#, fuzzy
-#| msgid "-mtune=CPU\tOptimize for CPU"
msgid "-mtune=CPU\tOptimize for CPU."
-msgstr "-mtune=BXL\tTối ưu hóa kết xuất cho bộ xử lý này"
+msgstr "-mtune=BXL\tTối ưu hóa kết xuất cho bộ xử lý này."
#: config/aarch64/aarch64.opt:132
-#, fuzzy
-#| msgid "-mabi=ABI\tGenerate code that conforms to the specified ABI"
msgid "-mabi=ABI\tGenerate code that conforms to the specified ABI."
-msgstr "-mabi=ABI\tTạo ra mã phù hợp với ABI đưa ra"
+msgstr "-mabi=ABI\tTạo ra mã phù hợp với ABI đưa ra."
#: config/aarch64/aarch64.opt:136
msgid "-moverride=STRING\tPower users only! Override CPU optimization parameters."
@@ -9129,384 +8098,260 @@ msgid "When calculating a sqrt approximation, run fewer steps."
msgstr ""
#: config/linux.opt:24
-#, fuzzy
-#| msgid "Use Bionic C library"
msgid "Use Bionic C library."
-msgstr "Sử dụng thư viện C của Bionic"
+msgstr "Sử dụng thư viện C của Bionic."
#: config/linux.opt:28
-#, fuzzy
-#| msgid "Use GNU C library"
msgid "Use GNU C library."
-msgstr "Sử dụng thư viện C của GNU"
+msgstr "Sử dụng thư viện C của GNU."
#: config/linux.opt:32
-#, fuzzy
-#| msgid "Use uClibc C library"
msgid "Use uClibc C library."
-msgstr "Sử dụng thư viện uClibc"
+msgstr "Sử dụng thư viện uClibc."
#: config/linux.opt:36
-#, fuzzy
-#| msgid "Use uClibc C library"
msgid "Use musl C library."
-msgstr "Sử dụng thư viện uClibc"
+msgstr "Sử dụng thư viện musl C"
#: config/ia64/ilp32.opt:3
-#, fuzzy
-#| msgid "Generate ILP32 code"
msgid "Generate ILP32 code."
-msgstr "Tạo ra mã ILP32"
+msgstr "Tạo ra mã ILP32."
#: config/ia64/ilp32.opt:7
-#, fuzzy
-#| msgid "Generate LP64 code"
msgid "Generate LP64 code."
-msgstr "Tạo ra mã LP64"
+msgstr "Tạo ra mã LP64."
#: config/ia64/ia64.opt:28
-#, fuzzy
-#| msgid "Generate big endian code"
msgid "Generate big endian code."
-msgstr "Tạo ra mã vỠcuối lớn"
+msgstr "Tạo ra mã vỠcuối lớn."
#: config/ia64/ia64.opt:32
-#, fuzzy
-#| msgid "Generate little endian code"
msgid "Generate little endian code."
-msgstr "Tạo ra mã vá» cuối nhá»"
+msgstr "Tạo ra mã vá» cuối nhá»."
#: config/ia64/ia64.opt:36
-#, fuzzy
-#| msgid "Generate code for GNU as"
msgid "Generate code for GNU as."
-msgstr "Tạo ra mã cho as của GNU"
+msgstr "Tạo ra mã cho as của GNU."
#: config/ia64/ia64.opt:40
-#, fuzzy
-#| msgid "Generate code for GNU ld"
msgid "Generate code for GNU ld."
-msgstr "Tạo ra mã cho ld của GNU"
+msgstr "Tạo ra mã cho ld của GNU."
#: config/ia64/ia64.opt:44
-#, fuzzy
-#| msgid "Emit stop bits before and after volatile extended asms"
msgid "Emit stop bits before and after volatile extended asms."
-msgstr "Xuất bit dừng lại đẳng trước và sau asm mở rộng hay thay đổi"
+msgstr "Xuất bit dừng lại đẳng trước và sau asm mở rộng hay thay đổi."
#: config/ia64/ia64.opt:48
-#, fuzzy
-#| msgid "Use in/loc/out register names"
msgid "Use in/loc/out register names."
-msgstr "Sử dụng tên thanh ghi loại in/loc/out"
+msgstr "Sử dụng tên thanh ghi loại in/loc/out."
#: config/ia64/ia64.opt:55
-#, fuzzy
-#| msgid "Enable use of sdata/scommon/sbss"
msgid "Enable use of sdata/scommon/sbss."
-msgstr "Bật sử dụng sdata/scommon/sbss"
+msgstr "Bật sử dụng sdata/scommon/sbss."
#: config/ia64/ia64.opt:59
-#, fuzzy
-#| msgid "Generate code without GP reg"
msgid "Generate code without GP reg."
-msgstr "Tạo ra mã không có GP reg"
+msgstr "Tạo ra mã không có GP reg."
#: config/ia64/ia64.opt:63
-#, fuzzy
-#| msgid "gp is constant (but save/restore gp on indirect calls)"
msgid "gp is constant (but save/restore gp on indirect calls)."
-msgstr "gp bất biến (mà lưu/phục_hồi gp khi được gá»i gián tiếp)"
+msgstr "gp bất biến (mà lưu/phục_hồi gp khi được gá»i gián tiếp)."
#: config/ia64/ia64.opt:67
-#, fuzzy
-#| msgid "Generate self-relocatable code"
msgid "Generate self-relocatable code."
-msgstr "Tạo ra mã có thể tự định vị lại"
+msgstr "Tạo ra mã có thể tự định vị lại."
#: config/ia64/ia64.opt:71
-#, fuzzy
-#| msgid "Generate inline floating point division, optimize for latency"
msgid "Generate inline floating point division, optimize for latency."
msgstr "Tạo ra phép chia dấu chấm động trực tiếp, tối ưu hóa cho sự ngấm ngầm"
#: config/ia64/ia64.opt:75
-#, fuzzy
-#| msgid "Generate inline floating point division, optimize for throughput"
msgid "Generate inline floating point division, optimize for throughput."
msgstr "Tạo ra phép chia dấu chấm động trá»±c tiếp, tối ưu hóa cho tốc độ truyá»n dữ liệu"
#: config/ia64/ia64.opt:82
-#, fuzzy
-#| msgid "Generate inline integer division, optimize for latency"
msgid "Generate inline integer division, optimize for latency."
msgstr "Tạo ra phép chia số nguyên trực tiếp, tối ưu hóa cho sự ngấm ngầm"
#: config/ia64/ia64.opt:86
-#, fuzzy
-#| msgid "Generate inline integer division, optimize for throughput"
msgid "Generate inline integer division, optimize for throughput."
msgstr "Tạo ra phép chia số nguyên trá»±c tiếp, tối ưu hóa cho tốc độ truyá»n dữ liệu"
#: config/ia64/ia64.opt:90
-#, fuzzy
-#| msgid "Do not inline integer division"
msgid "Do not inline integer division."
-msgstr "Äừng chèn vào trá»±c tiếp phép chia số nguyên"
+msgstr "Äừng chèn vào trá»±c tiếp phép chia số nguyên."
#: config/ia64/ia64.opt:94
-#, fuzzy
-#| msgid "Generate inline square root, optimize for latency"
msgid "Generate inline square root, optimize for latency."
-msgstr "Tạo ra căn bậc hai trực tiếp, tối ưu cho sự ngấm ngầm"
+msgstr "Tạo ra căn bậc hai trực tiếp, tối ưu cho sự ngấm ngầm."
#: config/ia64/ia64.opt:98
-#, fuzzy
-#| msgid "Generate inline square root, optimize for throughput"
msgid "Generate inline square root, optimize for throughput."
-msgstr "Tạo ra căn bậc hai trá»±c tiếp, tối ưu cho tốc độ truyá»n dữ liệu"
+msgstr "Tạo ra căn bậc hai trá»±c tiếp, tối ưu cho tốc độ truyá»n dữ liệu."
#: config/ia64/ia64.opt:102
-#, fuzzy
-#| msgid "Do not inline square root"
msgid "Do not inline square root."
-msgstr "Äừng chèn vào trá»±c tiếp căn bậc hai"
+msgstr "Äừng chèn vào trá»±c tiếp căn bậc hai."
#: config/ia64/ia64.opt:106
-#, fuzzy
-#| msgid "Enable Dwarf 2 line debug info via GNU as"
msgid "Enable DWARF line debug info via GNU as."
-msgstr "Bật thông tin gỡ rối dòng Dwarf 2 thông qua as của GNU"
+msgstr "Bật thông tin gỡ rối dòng Dwarf 2 thông qua as của GNU."
#: config/ia64/ia64.opt:110
-#, fuzzy
-#| msgid "Enable earlier placing stop bits for better scheduling"
msgid "Enable earlier placing stop bits for better scheduling."
-msgstr "Bật sá»± để sá»›m hÆ¡n các bit dừng lại, để định thá»i má»™t cách thành công hÆ¡n"
+msgstr "Bật sá»± để sá»›m hÆ¡n các bit dừng lại, để định thá»i má»™t cách thành công hÆ¡n."
#: config/ia64/ia64.opt:114 config/spu/spu.opt:72 config/pa/pa.opt:58
#: config/sh/sh.opt:273
-#, fuzzy
-#| msgid "Specify range of registers to make fixed"
msgid "Specify range of registers to make fixed."
-msgstr "Ghi rõ phạm vi các thanh ghi cần làm cho cố định"
+msgstr "Ghi rõ phạm vi các thanh ghi cần làm cho cố định."
#: config/ia64/ia64.opt:118 config/rs6000/sysv4.opt:32
#: config/alpha/alpha.opt:130
-#, fuzzy
-#| msgid "Specify bit size of immediate TLS offsets"
msgid "Specify bit size of immediate TLS offsets."
-msgstr "Ghi rõ kích cỡ bit của hiệu số TLS trực tiếp"
+msgstr "Ghi rõ kích cỡ bit của hiệu số TLS trực tiếp."
#: config/ia64/ia64.opt:122 config/spu/spu.opt:84 config/i386/i386.opt:504
#: config/s390/s390.opt:170 config/sparc/sparc.opt:126
#: config/visium/visium.opt:49
-#, fuzzy
-#| msgid "Schedule code for given CPU"
msgid "Schedule code for given CPU."
-msgstr "Äịnh thá»i mã cho CPU đưa ra"
+msgstr "Äịnh thá»i mã cho CPU đưa ra."
#: config/ia64/ia64.opt:126
msgid "Known Itanium CPUs (for use with the -mtune= option):"
-msgstr "Không hiểu Itanium CPUs (để dùng vá»›i tùy chá»n -mcpu=):"
+msgstr "Không hiểu Itanium CPUs (để dùng vá»›i tùy chá»n -mcpu=):."
#: config/ia64/ia64.opt:136
-#, fuzzy
-#| msgid "Use data speculation before reload"
msgid "Use data speculation before reload."
-msgstr "Sử dụng phép đầu cơ loại dữ liệu trước khi nạp lại"
+msgstr "Sử dụng phép đầu cơ loại dữ liệu trước khi nạp lại."
#: config/ia64/ia64.opt:140
-#, fuzzy
-#| msgid "Use data speculation after reload"
msgid "Use data speculation after reload."
-msgstr "Sử dụng phép đầu cơ loại dữ liệu sau khi nạp lại"
+msgstr "Sử dụng phép đầu cơ loại dữ liệu sau khi nạp lại."
#: config/ia64/ia64.opt:144
-#, fuzzy
-#| msgid "Use control speculation"
msgid "Use control speculation."
-msgstr "Sá»­ dụng phép đầu cÆ¡ loại Ä‘iá»u khiển"
+msgstr "Sá»­ dụng phép đầu cÆ¡ loại Ä‘iá»u khiển."
#: config/ia64/ia64.opt:148
-#, fuzzy
-#| msgid "Use in block data speculation before reload"
msgid "Use in block data speculation before reload."
-msgstr "Sử dụng phép đầu cơ loại dữ liệu theo khối trước khi nạp lại"
+msgstr "Sử dụng phép đầu cơ loại dữ liệu theo khối trước khi nạp lại."
#: config/ia64/ia64.opt:152
-#, fuzzy
-#| msgid "Use in block data speculation after reload"
msgid "Use in block data speculation after reload."
-msgstr "Sử dụng phép đầu cơ loại dữ liệu theo khối sau khi nạp lại"
+msgstr "Sử dụng phép đầu cơ loại dữ liệu theo khối sau khi nạp lại."
#: config/ia64/ia64.opt:156
-#, fuzzy
-#| msgid "Use in block control speculation"
msgid "Use in block control speculation."
-msgstr "Sá»­ dụng phép đầu cÆ¡ loại Ä‘iá»u khiển theo khối"
+msgstr "Sá»­ dụng phép đầu cÆ¡ loại Ä‘iá»u khiển theo khối."
#: config/ia64/ia64.opt:160
-#, fuzzy
-#| msgid "Use simple data speculation check"
msgid "Use simple data speculation check."
-msgstr "Dùng hàm kiểm tra phép đầu cơ loại dữ liệu đơn giản"
+msgstr "Dùng hàm kiểm tra phép đầu cơ loại dữ liệu đơn giản."
#: config/ia64/ia64.opt:164
-#, fuzzy
-#| msgid "Use simple data speculation check for control speculation"
msgid "Use simple data speculation check for control speculation."
-msgstr "Sá»­ dụng hàm kiểm tra phép đầu cÆ¡ loại dữ liệu đơn giản để đầu cÆ¡ vá» Ä‘iá»u khiển"
+msgstr "Sá»­ dụng hàm kiểm tra phép đầu cÆ¡ loại dữ liệu đơn giản để đầu cÆ¡ vá» Ä‘iá»u khiển."
#: config/ia64/ia64.opt:174
-#, fuzzy
-#| msgid "Count speculative dependencies while calculating priority of instructions"
msgid "Count speculative dependencies while calculating priority of instructions."
-msgstr "Äếm các quan hệ phụ thuá»™c loại đầu cÆ¡ trong khi tính mức ưu tiên cá»§a câu lệnh"
+msgstr "Äếm các quan hệ phụ thuá»™c loại đầu cÆ¡ trong khi tính mức ưu tiên cá»§a câu lệnh."
#: config/ia64/ia64.opt:178
-#, fuzzy
-#| msgid "Place a stop bit after every cycle when scheduling"
msgid "Place a stop bit after every cycle when scheduling."
-msgstr "Äang định thá»i thì cÅ©ng để má»™t bit dừng lại vào đẳng sau má»i chu kỳ"
+msgstr "Äang định thá»i thì cÅ©ng để má»™t bit dừng lại vào đẳng sau má»i chu kỳ."
#: config/ia64/ia64.opt:182
-#, fuzzy
-#| msgid "Assume that floating-point stores and loads are not likely to cause conflict when placed into one instruction group"
msgid "Assume that floating-point stores and loads are not likely to cause conflict when placed into one instruction group."
-msgstr "Coi rằng các việc nạp/lưu dấu chấm động không phải rất có thể gây ra sự xung đột khi được để vào cùng một nhóm câu lệnh"
+msgstr "Coi rằng các việc nạp/lưu dấu chấm động không phải rất có thể gây ra sự xung đột khi được để vào cùng một nhóm câu lệnh."
#: config/ia64/ia64.opt:186
-#, fuzzy
-#| msgid "Soft limit on number of memory insns per instruction group, giving lower priority to subsequent memory insns attempting to schedule in the same insn group. Frequently useful to prevent cache bank conflicts. Default value is 1"
msgid "Soft limit on number of memory insns per instruction group, giving lower priority to subsequent memory insns attempting to schedule in the same insn group. Frequently useful to prevent cache bank conflicts. Default value is 1."
-msgstr "Giá»›i hạn má»m vá» số các câu lệnh vùng nhá»› má»—i nhóm câu lệnh, gán mức ưu tiên thấp hÆ¡n cho câu lệnh vùng nhá»› theo sau mà thá»­ định thá»i trong cùng má»™t nhóm câu lệnh. Hữu ích để ngăn cản sá»± xung đột đối vá»›i nhóm vùng nhá»› tạm. Giá trị mặc định là 1"
+msgstr "Giá»›i hạn má»m vá» số các câu lệnh vùng nhá»› má»—i nhóm câu lệnh, gán mức ưu tiên thấp hÆ¡n cho câu lệnh vùng nhá»› theo sau mà thá»­ định thá»i trong cùng má»™t nhóm câu lệnh. Hữu ích để ngăn cản sá»± xung đột đối vá»›i nhóm vùng nhá»› tạm. Giá trị mặc định là 1."
#: config/ia64/ia64.opt:190
-#, fuzzy
-#| msgid "Disallow more than 'msched-max-memory-insns' in instruction group. Otherwise, limit is 'soft' (prefer non-memory operations when limit is reached)"
msgid "Disallow more than 'msched-max-memory-insns' in instruction group. Otherwise, limit is 'soft' (prefer non-memory operations when limit is reached)."
-msgstr "Không cho phép nhiá»u hÆ¡n “msched-max-memory-insns trong nhóm chỉ lệnh. Không thì giá»›i hạn là “má»m†(thích thao tác không phải vùng nhá»› hÆ¡n khi tá»›i giá»›i hạn này)"
+msgstr "Không cho phép nhiá»u hÆ¡n “msched-max-memory-insns trong nhóm chỉ lệnh. Không thì giá»›i hạn là “má»m†(thích thao tác không phải vùng nhá»› hÆ¡n khi tá»›i giá»›i hạn này)."
#: config/ia64/ia64.opt:194
-#, fuzzy
-#| msgid "Don't generate checks for control speculation in selective scheduling"
msgid "Don't generate checks for control speculation in selective scheduling."
-msgstr "Äừng tạo ra hàm kiểm tra đối vá»›i đầu cÆ¡ vá» Ä‘iá»u khiển khi định thá»i má»™t cách lá»±a chá»n"
+msgstr "Äừng tạo ra hàm kiểm tra đối vá»›i đầu cÆ¡ vá» Ä‘iá»u khiển khi định thá»i má»™t cách lá»±a chá»n."
#: config/spu/spu.opt:20
-#, fuzzy
-#| msgid "Emit warnings when run-time relocations are generated"
msgid "Emit warnings when run-time relocations are generated."
-msgstr "Cảnh báo khi tạo ra sự định vị lại vào lúc chạy"
+msgstr "Cảnh báo khi tạo ra sự định vị lại vào lúc chạy."
#: config/spu/spu.opt:24
-#, fuzzy
-#| msgid "Emit errors when run-time relocations are generated"
msgid "Emit errors when run-time relocations are generated."
-msgstr "Xuất lỗi khi tạo ra sự định vị lại vào lúc chạy"
+msgstr "Xuất lỗi khi tạo ra sự định vị lại vào lúc chạy."
#: config/spu/spu.opt:28
-#, fuzzy
-#| msgid "Specify cost of branches (Default 20)"
msgid "Specify cost of branches (Default 20)."
-msgstr "Ghi rõ giá của nhánh (Mặc định là 20)"
+msgstr "Ghi rõ giá của nhánh (Mặc định là 20)."
#: config/spu/spu.opt:32
-#, fuzzy
-#| msgid "Make sure loads and stores are not moved past DMA instructions"
msgid "Make sure loads and stores are not moved past DMA instructions."
-msgstr "Kiểm tra lại hàm nạp và hàm lưu không đi qua câu lệnh DMA"
+msgstr "Kiểm tra lại hàm nạp và hàm lưu không đi qua câu lệnh DMA."
#: config/spu/spu.opt:36
-#, fuzzy
-#| msgid "volatile must be specified on any memory that is effected by DMA"
msgid "volatile must be specified on any memory that is effected by DMA."
msgstr "Thuộc tính hay thay đổi (volatile) phải được ghi rõ trên bất cứ vùng nhớ nào bị DMA tác động."
#: config/spu/spu.opt:40 config/spu/spu.opt:44
-#, fuzzy
-#| msgid "Insert nops when it might improve performance by allowing dual issue (default)"
msgid "Insert nops when it might improve performance by allowing dual issue (default)."
-msgstr "Chèn nops khi có thể tăng hiệu suất bằng cách cho phép đưa ra đôi (mặc định)"
+msgstr "Chèn nops khi có thể tăng hiệu suất bằng cách cho phép đưa ra đôi (mặc định)."
#: config/spu/spu.opt:48
-#, fuzzy
-#| msgid "Use standard main function as entry for startup"
msgid "Use standard main function as entry for startup."
-msgstr "Sử dụng hàm chính tiêu chuẩn làm điểm vào để khởi chạy"
+msgstr "Sử dụng hàm chính tiêu chuẩn làm điểm vào để khởi chạy."
#: config/spu/spu.opt:52
-#, fuzzy
-#| msgid "Generate branch hints for branches"
msgid "Generate branch hints for branches."
-msgstr "Äối vá»›i nhánh thì tạo ra lá»i gợi ý nhánh"
+msgstr "Äối vá»›i nhánh thì tạo ra lá»i gợi ý nhánh."
#: config/spu/spu.opt:56
-#, fuzzy
-#| msgid "Maximum number of nops to insert for a hint (Default 2)"
msgid "Maximum number of nops to insert for a hint (Default 2)."
-msgstr "Số tối Ä‘a các nops cần chèn cho má»™t lá»i gợi ý (mặc định là 2)"
+msgstr "Số tối Ä‘a các nops cần chèn cho má»™t lá»i gợi ý (mặc định là 2)."
#: config/spu/spu.opt:60
-#, fuzzy
-#| msgid "Approximate maximum number of instructions to allow between a hint and its branch [125]"
msgid "Approximate maximum number of instructions to allow between a hint and its branch [125]."
-msgstr "Số tối Ä‘a (xấp xỉ) các câu lệnh cần cho phép giữa má»™t lá»i gợi ý và nhánh tương ứng [125]"
+msgstr "Số tối Ä‘a (xấp xỉ) các câu lệnh cần cho phép giữa má»™t lá»i gợi ý và nhánh tương ứng [125]."
#: config/spu/spu.opt:64
-#, fuzzy
-#| msgid "Generate code for 18 bit addressing"
msgid "Generate code for 18 bit addressing."
-msgstr "Tạo ra mã để đặt địa chỉ 18 bit"
+msgstr "Tạo ra mã để đặt địa chỉ 18 bit."
#: config/spu/spu.opt:68
-#, fuzzy
-#| msgid "Generate code for 32 bit addressing"
msgid "Generate code for 32 bit addressing."
-msgstr "Tạo ra mã để đặt địa chỉ 32 bit"
+msgstr "Tạo ra mã để đặt địa chỉ 32 bit."
#: config/spu/spu.opt:76
-#, fuzzy
-#| msgid "Insert hbrp instructions after hinted branch targets to avoid the SPU hang issue"
msgid "Insert hbrp instructions after hinted branch targets to avoid the SPU hang issue."
-msgstr "Chèn câu lệnh hbrp đẳng sau đích nhánh đã gợi ý để tránh vấn đỠSPU đang treo cứng"
+msgstr "Chèn câu lệnh hbrp đẳng sau đích nhánh đã gợi ý để tránh vấn đỠSPU đang treo cứng."
#: config/spu/spu.opt:80 config/i386/i386.opt:247 config/s390/s390.opt:56
-#, fuzzy
-#| msgid "Generate code for given CPU"
msgid "Generate code for given CPU."
-msgstr "Tạo ra mã cho CPU đưa ra"
+msgstr "Tạo ra mã cho CPU đưa ra."
#: config/spu/spu.opt:88
-#, fuzzy
-#| msgid "Access variables in 32-bit PPU objects (default)"
msgid "Access variables in 32-bit PPU objects (default)."
-msgstr "Truy cập đến biến trong đối tượng PPU 32-bit (mặc định)"
+msgstr "Truy cập đến biến trong đối tượng PPU 32-bit (mặc định)."
#: config/spu/spu.opt:92
-#, fuzzy
-#| msgid "Access variables in 64-bit PPU objects"
msgid "Access variables in 64-bit PPU objects."
-msgstr "Truy cập đến biến trong đối tượng PPU 64-bit"
+msgstr "Truy cập đến biến trong đối tượng PPU 64-bit."
#: config/spu/spu.opt:96
-#, fuzzy
-#| msgid "Allow conversions between __ea and generic pointers (default)"
msgid "Allow conversions between __ea and generic pointers (default)."
-msgstr "Cho phép chuyển đổi giữa hàm trỠloại __ea và chung (mặc định)"
+msgstr "Cho phép chuyển đổi giữa hàm trỠloại __ea và chung (mặc định)."
#: config/spu/spu.opt:100
-#, fuzzy
-#| msgid "Size (in KB) of software data cache"
msgid "Size (in KB) of software data cache."
-msgstr "Kích cỡ (theo KB) cá»§a vùng nhá»› tạm dữ liệu loại phần má»m"
+msgstr "Kích cỡ (theo KB) cá»§a vùng nhá»› tạm dữ liệu loại phần má»m."
#: config/spu/spu.opt:104
-#, fuzzy
-#| msgid "Atomically write back software data cache lines (default)"
msgid "Atomically write back software data cache lines (default)."
-msgstr "Tá»± động ghi trả lại các đưá»ng dẫn vùng nhá»› tạm dữ liệu loại phần má»m (mặc định)"
+msgstr "Tá»± động ghi trả lại các đưá»ng dẫn vùng nhá»› tạm dữ liệu loại phần má»m (mặc định)."
#: config/epiphany/epiphany.opt:24
msgid "Don't use any of r32..r63."
@@ -9517,42 +8362,32 @@ msgid "preferentially allocate registers that allow short instruction generation
msgstr ""
#: config/epiphany/epiphany.opt:32
-#, fuzzy
-#| msgid "Set branch cost"
msgid "Set branch cost."
-msgstr "Äặt giá cá»§a lệnh rẽ nhánh"
+msgstr "Äặt giá cá»§a lệnh rẽ nhánh."
#: config/epiphany/epiphany.opt:36
msgid "enable conditional move instruction usage."
msgstr ""
#: config/epiphany/epiphany.opt:40
-#, fuzzy
-#| msgid "The number of insns executed before prefetch is completed"
msgid "set number of nops to emit before each insn pattern."
-msgstr "Số các lệnh được thực hiện trước khi hoàn tất quá trình lấy sẵn (prefetch)"
+msgstr ""
#: config/epiphany/epiphany.opt:52
-#, fuzzy
-#| msgid "Use software floating point"
msgid "Use software floating point comparisons."
-msgstr "Sá»­ dụng dấu chấm động bằng phần má»m"
+msgstr "Sá»­ dụng so sánh dấu chấm động bằng phần má»m."
#: config/epiphany/epiphany.opt:56
msgid "Enable split of 32 bit immediate loads into low / high part."
msgstr ""
#: config/epiphany/epiphany.opt:60
-#, fuzzy
-#| msgid "Enable use of POST_INC / POST_DEC"
msgid "Enable use of POST_INC / POST_DEC."
-msgstr "Cho phép sử dụng POST_INC / POST_DEC"
+msgstr "Cho phép sử dụng POST_INC / POST_DEC."
#: config/epiphany/epiphany.opt:64
-#, fuzzy
-#| msgid "Enable use of POST_MODIFY"
msgid "Enable use of POST_MODIFY."
-msgstr "Cho phép sử dụng POST_MODIFY"
+msgstr "Cho phép sử dụng POST_MODIFY."
#: config/epiphany/epiphany.opt:68
msgid "Set number of bytes on the stack preallocated for use by the callee."
@@ -9563,14 +8398,12 @@ msgid "Assume round to nearest is selected for purposes of scheduling."
msgstr ""
#: config/epiphany/epiphany.opt:76
-#, fuzzy
msgid "Generate call insns as indirect calls."
-msgstr "Tạo ra câu lệnh gá»i dưới dạng cuá»™c gá»i gián tiếp, nếu cần thiết"
+msgstr "Tạo ra câu lệnh gá»i dưới dạng cuá»™c gá»i gián tiếp."
#: config/epiphany/epiphany.opt:80
-#, fuzzy
msgid "Generate call insns as direct calls."
-msgstr "Tạo ra câu lệnh gá»i dưới dạng cuá»™c gá»i gián tiếp, nếu cần thiết"
+msgstr "Tạo ra câu lệnh gá»i dưới dạng cuá»™c gá»i trá»±c tiếp."
#: config/epiphany/epiphany.opt:84
msgid "Assume labels and symbols can be addressed using 16 bit absolute addresses."
@@ -9602,400 +8435,279 @@ msgstr ""
#: config/ft32/ft32.opt:27 config/s390/s390.opt:201
#: config/rs6000/rs6000.opt:474 config/mips/mips.opt:385
-#, fuzzy
msgid "Use LRA instead of reload."
-msgstr "Sử dụng ROM thay cho RAM"
+msgstr "Sử dụng LRA thay cho reload ."
#: config/h8300/h8300.opt:23
-#, fuzzy
-#| msgid "Generate H8S code"
msgid "Generate H8S code."
-msgstr "Tạo ra mã H8S"
+msgstr "Tạo ra mã H8S."
#: config/h8300/h8300.opt:27
-#, fuzzy
-#| msgid "Generate H8SX code"
msgid "Generate H8SX code."
-msgstr "Tạo ra mã H8SX"
+msgstr "Tạo ra mã H8SX."
#: config/h8300/h8300.opt:31
-#, fuzzy
-#| msgid "Generate H8S/2600 code"
msgid "Generate H8S/2600 code."
-msgstr "Tạo ra mã H8S/2600"
+msgstr "Tạo ra mã H8S/2600."
#: config/h8300/h8300.opt:35
-#, fuzzy
-#| msgid "Make integers 32 bits wide"
msgid "Make integers 32 bits wide."
-msgstr "Làm cho số nguyên có chiá»u rá»™ng 32 bit"
+msgstr "Làm cho số nguyên có chiá»u rá»™ng 32 bit."
#: config/h8300/h8300.opt:42
-#, fuzzy
-#| msgid "Use registers for argument passing"
msgid "Use registers for argument passing."
-msgstr "Sử dụng thanh ghi để gửi đối số qua"
+msgstr "Sử dụng thanh ghi để gửi đối số qua."
#: config/h8300/h8300.opt:46
-#, fuzzy
-#| msgid "Consider access to byte sized memory slow"
msgid "Consider access to byte sized memory slow."
-msgstr "Tính là truy cập chậm đến vùng nhớ tạm theo byte"
+msgstr "Tính là truy cập chậm đến vùng nhớ tạm theo byte."
#: config/h8300/h8300.opt:50
-#, fuzzy
-#| msgid "Enable linker relaxing"
msgid "Enable linker relaxing."
-msgstr "Bật làm yếu bộ liên kết"
+msgstr "Bật làm yếu bộ liên kết."
#: config/h8300/h8300.opt:54
-#, fuzzy
-#| msgid "Generate H8/300H code"
msgid "Generate H8/300H code."
-msgstr "Tạo ra mã H8/300H"
+msgstr "Tạo ra mã H8/300H."
#: config/h8300/h8300.opt:58
-#, fuzzy
-#| msgid "Enable the normal mode"
msgid "Enable the normal mode."
-msgstr "Bật chế độ thông thưá»ng"
+msgstr "Bật chế độ thông thưá»ng."
#: config/h8300/h8300.opt:62
-#, fuzzy
-#| msgid "Use H8/300 alignment rules"
msgid "Use H8/300 alignment rules."
-msgstr "Sử dụng các quy tắc xếp hàng H8/300"
+msgstr "Sử dụng các quy tắc xếp hàng H8/300."
#: config/h8300/h8300.opt:66
msgid "Push extended registers on stack in monitor functions."
msgstr ""
#: config/h8300/h8300.opt:70
-#, fuzzy
-#| msgid "Do not use the fnegd custom instruction"
msgid "Do not push extended registers on stack in monitor functions."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fnegd"
+msgstr ""
#: config/pdp11/pdp11.opt:23
-#, fuzzy
-#| msgid "Generate code for an 11/10"
msgid "Generate code for an 11/10."
-msgstr "Tạo ra mã cho một 11/10"
+msgstr "Tạo ra mã cho một 11/10."
#: config/pdp11/pdp11.opt:27
-#, fuzzy
-#| msgid "Generate code for an 11/40"
msgid "Generate code for an 11/40."
-msgstr "Tạo ra mã cho một 11/40"
+msgstr "Tạo ra mã cho một 11/40."
#: config/pdp11/pdp11.opt:31
-#, fuzzy
-#| msgid "Generate code for an 11/45"
msgid "Generate code for an 11/45."
-msgstr "Tạo ra mã cho một 11/45"
+msgstr "Tạo ra mã cho một 11/45."
#: config/pdp11/pdp11.opt:35
-#, fuzzy
-#| msgid "Return floating-point results in ac0 (fr0 in Unix assembler syntax)"
msgid "Return floating-point results in ac0 (fr0 in Unix assembler syntax)."
-msgstr "Trả lại kết quả dấu chấm động theo ac0 (bằng fr0 trong cú pháp dịch mã số UNIX)"
+msgstr "Trả lại kết quả dấu chấm động theo ac0 (bằng fr0 trong cú pháp dịch mã số UNIX)."
#: config/pdp11/pdp11.opt:39
-#, fuzzy
-#| msgid "Do not use inline patterns for copying memory"
msgid "Do not use inline patterns for copying memory."
-msgstr "Äừng sá»­ dụng mẫu được chèn vào trá»±c tiếp để sao chép vùng nhá»›"
+msgstr "Äừng sá»­ dụng mẫu được chèn vào trá»±c tiếp để sao chép vùng nhá»›."
#: config/pdp11/pdp11.opt:43
-#, fuzzy
-#| msgid "Use inline patterns for copying memory"
msgid "Use inline patterns for copying memory."
-msgstr "Sử dụng mẫu được chèn vào trực tiếp để sao chép vùng nhớ"
+msgstr "Sử dụng mẫu được chèn vào trực tiếp để sao chép vùng nhớ."
#: config/pdp11/pdp11.opt:47
-#, fuzzy
-#| msgid "Do not pretend that branches are expensive"
msgid "Do not pretend that branches are expensive."
-msgstr "Äừng làm ra vẻ là nhánh có giá cao"
+msgstr "Äừng làm ra vẻ là nhánh có giá cao."
#: config/pdp11/pdp11.opt:51
-#, fuzzy
-#| msgid "Pretend that branches are expensive"
msgid "Pretend that branches are expensive."
-msgstr "Làm ra vẻ là nhánh có giá cao"
+msgstr "Làm ra vẻ là nhánh có giá cao."
#: config/pdp11/pdp11.opt:55
-#, fuzzy
-#| msgid "Use the DEC assembler syntax"
msgid "Use the DEC assembler syntax."
-msgstr "Sử dụng cú pháp dịch mã số DEC"
+msgstr "Sử dụng cú pháp dịch mã số DEC."
#: config/pdp11/pdp11.opt:59
-#, fuzzy
-#| msgid "Use 32 bit float"
msgid "Use 32 bit float."
-msgstr "Sử dụng dấu chấm động 32-bit"
+msgstr "Sử dụng dấu chấm động 32-bit."
#: config/pdp11/pdp11.opt:63
-#, fuzzy
-#| msgid "Use 64 bit float"
msgid "Use 64 bit float."
-msgstr "Sử dụng dấu chấm động 64-bit"
+msgstr "Sử dụng dấu chấm động 64-bit."
#: config/pdp11/pdp11.opt:67 config/rs6000/rs6000.opt:177
#: config/frv/frv.opt:158
-#, fuzzy
-#| msgid "Use hardware floating point"
msgid "Use hardware floating point."
-msgstr "Sử dụng dấu chấm động loại phần cứng"
+msgstr "Sử dụng dấu chấm động loại phần cứng."
#: config/pdp11/pdp11.opt:71
-#, fuzzy
-#| msgid "Use 16 bit int"
msgid "Use 16 bit int."
-msgstr "Sử dụng số nguyên 16-bit"
+msgstr "Sử dụng số nguyên 16-bit."
#: config/pdp11/pdp11.opt:75
-#, fuzzy
-#| msgid "Use 32 bit int"
msgid "Use 32 bit int."
-msgstr "Sử dụng số nguyên 32-bit"
+msgstr "Sử dụng số nguyên 32-bit."
#: config/pdp11/pdp11.opt:79 config/rs6000/rs6000.opt:173
-#, fuzzy
-#| msgid "Do not use hardware floating point"
msgid "Do not use hardware floating point."
-msgstr "Äừng sá»­ dụng dấu chấm động loại phần cứng"
+msgstr "Äừng sá»­ dụng dấu chấm động loại phần cứng."
#: config/pdp11/pdp11.opt:83
-#, fuzzy
-#| msgid "Target has split I&D"
msgid "Target has split I&D."
-msgstr "Äích có I&D bị chia ra"
+msgstr "Äích có I&D bị chia ra."
#: config/pdp11/pdp11.opt:87
-#, fuzzy
-#| msgid "Use UNIX assembler syntax"
msgid "Use UNIX assembler syntax."
-msgstr "Sử dụng cú pháp dịch mã số UNIX"
+msgstr "Sử dụng cú pháp dịch mã số UNIX."
#: config/xtensa/xtensa.opt:23
-#, fuzzy
-#| msgid "Use CONST16 instruction to load constants"
msgid "Use CONST16 instruction to load constants."
-msgstr "Sử dụng câu lệnh CONST16 để nạp các hằng số"
+msgstr "Sử dụng câu lệnh CONST16 để nạp các hằng số."
#: config/xtensa/xtensa.opt:27
msgid "Disable position-independent code (PIC) for use in OS kernel code."
msgstr ""
#: config/xtensa/xtensa.opt:31
-#, fuzzy
-#| msgid "Use indirect CALLXn instructions for large programs"
msgid "Use indirect CALLXn instructions for large programs."
-msgstr "Sử dụng câu lệnh CALLXn gián tiếp cho chương trình lớn"
+msgstr "Sử dụng câu lệnh CALLXn gián tiếp cho chương trình lớn."
#: config/xtensa/xtensa.opt:35
-#, fuzzy
-#| msgid "Automatically align branch targets to reduce branch penalties"
msgid "Automatically align branch targets to reduce branch penalties."
-msgstr "Tự động xếp hàng các đích nhánh để giảm giá nhánh thừa"
+msgstr "Tự động xếp hàng các đích nhánh để giảm giá nhánh thừa."
#: config/xtensa/xtensa.opt:39
-#, fuzzy
-#| msgid "Intersperse literal pools with code in the text section"
msgid "Intersperse literal pools with code in the text section."
-msgstr "Chèn vào nhau các vùng gộp nghĩa chữ và mã trong phần văn bản"
+msgstr "Chèn vào nhau các vùng gộp nghĩa chữ và mã trong phần văn bản."
#: config/xtensa/xtensa.opt:43
msgid "Relax literals in assembler and place them automatically in the text section."
msgstr ""
#: config/xtensa/xtensa.opt:47
-#, fuzzy
-#| msgid "-mno-serialize-volatile\tDo not serialize volatile memory references with MEMW instructions"
msgid "-mno-serialize-volatile\tDo not serialize volatile memory references with MEMW instructions."
-msgstr "-mno-serialize-volatile\tÄối vá»›i câu lệnh MEMW thì đừng cÅ©ng xếp theo thứ tá»± các tham chiếu đến vùng nhá»› hay thay đổi"
+msgstr "-mno-serialize-volatile\tÄối vá»›i câu lệnh MEMW thì đừng cÅ©ng xếp theo thứ tá»± các tham chiếu đến vùng nhá»› hay thay đổi."
#: config/i386/cygming.opt:23
-#, fuzzy
-#| msgid "Create console application"
msgid "Create console application."
-msgstr "Tạo ứng dụng bàn giao tiép"
+msgstr "Tạo ứng dụng bàn giao tiếp."
#: config/i386/cygming.opt:27
-#, fuzzy
-#| msgid "Generate code for a DLL"
msgid "Generate code for a DLL."
-msgstr "Tạo ra mã cho một DLL"
+msgstr "Tạo ra mã cho một DLL."
#: config/i386/cygming.opt:31
-#, fuzzy
-#| msgid "Ignore dllimport for functions"
msgid "Ignore dllimport for functions."
-msgstr "BỠqua dllimport đối với chức năng"
+msgstr "BỠqua dllimport đối với chức năng."
#: config/i386/cygming.opt:35
-#, fuzzy
-#| msgid "Use Mingw-specific thread support"
msgid "Use Mingw-specific thread support."
-msgstr "Sử dụng hỗ trợ nhánh đặc trưng cho Mingw"
+msgstr "Sử dụng hỗ trợ nhánh đặc trưng cho Mingw."
#: config/i386/cygming.opt:39
-#, fuzzy
-#| msgid "Set Windows defines"
msgid "Set Windows defines."
-msgstr "Äặt định nghÄ©a Windows"
+msgstr "Äặt định nghÄ©a Windows."
#: config/i386/cygming.opt:43
-#, fuzzy
-#| msgid "Create GUI application"
msgid "Create GUI application."
-msgstr "Tạo ứng dụng GUI"
+msgstr "Tạo ứng dụng GUI."
#: config/i386/cygming.opt:47 config/i386/interix.opt:32
-#, fuzzy
-#| msgid "Use the GNU extension to the PE format for aligned common data"
msgid "Use the GNU extension to the PE format for aligned common data."
-msgstr "Sử dụng phần mở rộng GNU tới định dạng PE cho dữ liệu chung xếp hàng"
+msgstr "Sử dụng phần mở rộng GNU tới định dạng PE cho dữ liệu chung xếp hàng."
#: config/i386/cygming.opt:51
-#, fuzzy
-#| msgid "Compile code that relies on Cygwin DLL wrappers to support C++ operator new/delete replacement"
msgid "Compile code that relies on Cygwin DLL wrappers to support C++ operator new/delete replacement."
-msgstr "Biên dịch mã nhá» trình bao bá»c DLL Cygwin để há»— trợ chức năng thay thế toán tá»­ C++ má»›i/xóa"
+msgstr "Biên dịch mã nhá» trình bao bá»c DLL Cygwin để há»— trợ chức năng thay thế toán tá»­ C++ má»›i/xóa."
#: config/i386/cygming.opt:58
msgid "Put relocated read-only data into .data section."
msgstr ""
#: config/i386/mingw.opt:29
-#, fuzzy
-#| msgid "Warn about none ISO msvcrt scanf/printf width extensions"
msgid "Warn about none ISO msvcrt scanf/printf width extensions."
-msgstr "Cảnh báo vá» phần mở rá»™ng chiá»u rá»™ng scanf/printf không phải tùy theo ISO"
+msgstr "Cảnh báo vá» phần mở rá»™ng chiá»u rá»™ng scanf/printf không phải tùy theo ISO."
#: config/i386/mingw.opt:33
msgid "For nested functions on stack executable permission is set."
msgstr "Gán quyá»n thá»±c hiện cho hàm lồng nhau trên ngăn xếp."
#: config/i386/mingw-w64.opt:23
-#, fuzzy
-#| msgid "Use unicode startup and define UNICODE macro"
msgid "Use unicode startup and define UNICODE macro."
-msgstr "Sử dụng hàm khởi chạy Unicode và xác định vĩ lệnh UNICODE"
+msgstr "Sử dụng hàm khởi chạy Unicode và xác định vĩ lệnh UNICODE."
#: config/i386/i386.opt:182
-#, fuzzy
-#| msgid "sizeof(long double) is 16"
msgid "sizeof(long double) is 16."
-msgstr "kích cỡ (đôi dài) là 16"
+msgstr "kích cỡ (long double) là 16."
#: config/i386/i386.opt:186 config/i386/i386.opt:354
-#, fuzzy
-#| msgid "Use hardware fp"
msgid "Use hardware fp."
-msgstr "Sử dụng dấu chấm động bằng phần cứng"
+msgstr "Sử dụng dấu chấm động bằng phần cứng."
#: config/i386/i386.opt:190
-#, fuzzy
-#| msgid "sizeof(long double) is 12"
msgid "sizeof(long double) is 12."
-msgstr "kích cỡ (đôi dài) là 12"
+msgstr "kích cỡ (long double) là 12."
#: config/i386/i386.opt:194
-#, fuzzy
-#| msgid "Use 80-bit long double"
msgid "Use 80-bit long double."
-msgstr "Sử dụng đôi dài 80-bit"
+msgstr "Sử dụng đôi dài 80-bit."
#: config/i386/i386.opt:198 config/s390/s390.opt:130
#: config/sparc/long-double-switch.opt:27 config/alpha/alpha.opt:102
-#, fuzzy
-#| msgid "Use 64-bit long double"
msgid "Use 64-bit long double."
-msgstr "Sử dụng đôi dài 64-bit"
+msgstr "Sử dụng đôi dài 64-bit."
#: config/i386/i386.opt:202 config/s390/s390.opt:126
#: config/sparc/long-double-switch.opt:23 config/alpha/alpha.opt:98
-#, fuzzy
-#| msgid "Use 128-bit long double"
msgid "Use 128-bit long double."
-msgstr "Sử dụng đôi dài 128-bit"
+msgstr "Sử dụng đôi dài 128-bit."
#: config/i386/i386.opt:206 config/sh/sh.opt:209
-#, fuzzy
-#| msgid "Reserve space for outgoing arguments in the function prologue"
msgid "Reserve space for outgoing arguments in the function prologue."
msgstr "Trong đoạn mở đầu hàm thì dành riêng sức chứa cho đối số gửi ra"
#: config/i386/i386.opt:210
-#, fuzzy
-#| msgid "Align some doubles on dword boundary"
msgid "Align some doubles on dword boundary."
-msgstr "Xếp hàng một số đôi theo biên giới dword"
+msgstr "Xếp hàng một số đôi theo biên giới dword."
#: config/i386/i386.opt:214
-#, fuzzy
-#| msgid "Function starts are aligned to this power of 2"
msgid "Function starts are aligned to this power of 2."
-msgstr "Äầu hàng được xếp hàng theo lÅ©y thừa 2 này"
+msgstr "Äầu hàng được xếp hàng theo lÅ©y thừa 2 này."
#: config/i386/i386.opt:218
-#, fuzzy
-#| msgid "Jump targets are aligned to this power of 2"
msgid "Jump targets are aligned to this power of 2."
-msgstr "Äích nhảy được xếp hàng theo lÅ©y thừa 2 này"
+msgstr "Äích nhảy được xếp hàng theo lÅ©y thừa 2 này."
#: config/i386/i386.opt:222
-#, fuzzy
-#| msgid "Loop code aligned to this power of 2"
msgid "Loop code aligned to this power of 2."
-msgstr "Mã vòng lặp được xếp hàng theo lũy thừa 2 này"
+msgstr "Mã vòng lặp được xếp hàng theo lũy thừa 2 này."
#: config/i386/i386.opt:226
-#, fuzzy
-#| msgid "Align destination of the string operations"
msgid "Align destination of the string operations."
-msgstr "Äích xếp hàng cá»§a các thao tác chuá»—i"
+msgstr "Äích xếp hàng cá»§a các thao tác chuá»—i."
#: config/i386/i386.opt:230
-#, fuzzy
msgid "Use the given data alignment."
-msgstr "Äừng Ä‘iá»u chỉnh sá»± xếp hàng dữ liệu có thể ghi được"
+msgstr "Dùng xếp hàng dữ liệu đã cho."
#: config/i386/i386.opt:234
-#, fuzzy
msgid "Known data alignment choices (for use with the -malign-data= option):"
-msgstr "Không hiểu TLS dialects (để dùng vá»›i tùy chá»n -mtls-dialect=):"
+msgstr ""
#: config/i386/i386.opt:251
-#, fuzzy
-#| msgid "Use given assembler dialect"
msgid "Use given assembler dialect."
-msgstr "Sử dụng phương ngôn dịch mã số đưa ra"
+msgstr "Sử dụng phương ngôn dịch mã số đưa ra."
#: config/i386/i386.opt:255
msgid "Known assembler dialects (for use with the -masm-dialect= option):"
msgstr ""
#: config/i386/i386.opt:265
-#, fuzzy
-#| msgid "Branches are this expensive (1-5, arbitrary units)"
msgid "Branches are this expensive (1-5, arbitrary units)."
-msgstr "Nhánh có giá này (1-5, đơn vị tùy ý)"
+msgstr "Nhánh có giá này (1-5, đơn vị tùy ý)."
#: config/i386/i386.opt:269
-#, fuzzy
-#| msgid "Data greater than given threshold will go into .ldata section in x86-64 medium model"
msgid "Data greater than given threshold will go into .ldata section in x86-64 medium model."
-msgstr "Dữ liệu vượt quá ngưỡng này thì để vào phần .ldata trong mẫu môi giới x86-64"
+msgstr "Dữ liệu vượt quá ngưỡng này thì để vào phần .ldata trong mô hình trung bình x86-64."
#: config/i386/i386.opt:273
-#, fuzzy
-#| msgid "Use given x86-64 code model"
msgid "Use given x86-64 code model."
-msgstr "Sử dụng mẫu mã x86-64 đưa ra"
+msgstr "Sử dụng mẫu mã x86-64 đưa ra."
#: config/i386/i386.opt:277 config/rs6000/aix64.opt:36
#: config/rs6000/linux64.opt:32 config/tilegx/tilegx.opt:57
@@ -10003,10 +8715,8 @@ msgid "Known code models (for use with the -mcmodel= option):"
msgstr ""
#: config/i386/i386.opt:296
-#, fuzzy
-#| msgid "Use given address mode"
msgid "Use given address mode."
-msgstr "Dùng chế độ địa chỉ đã cho"
+msgstr "Dùng chế độ địa chỉ đã cho."
#: config/i386/i386.opt:300
msgid "Known address mode (for use with the -maddress-mode= option):"
@@ -10014,135 +8724,95 @@ msgstr ""
#: config/i386/i386.opt:309
msgid "%<-mcpu=%> is deprecated; use %<-mtune=%> or %<-march=%> instead"
-msgstr "%<-mcpu=%> bị phản đối; dùng %<-mtune=%> hoặc %<-march=%> để thay thế"
+msgstr "%<-mcpu=%> đã lạc hậu; dùng %<-mtune=%> hoặc %<-march=%> để thay thế"
#: config/i386/i386.opt:313
-#, fuzzy
-#| msgid "Generate sin, cos, sqrt for FPU"
msgid "Generate sin, cos, sqrt for FPU."
-msgstr "Tạo ra sin, cos, sqrt cho FPU (đơn vị dấu chấm động)"
+msgstr "Tạo ra sin, cos, sqrt cho FPU (đơn vị dấu chấm động)."
#: config/i386/i386.opt:317
-#, fuzzy
-#| msgid "Always use Dynamic Realigned Argument Pointer (DRAP) to realign stack"
msgid "Always use Dynamic Realigned Argument Pointer (DRAP) to realign stack."
-msgstr "Lúc nào cũng sử dụng DRAP (hàm trỠđối số đã xếp hàng năng động) để xếp hàng lại ngăn xếp"
+msgstr "Lúc nào cũng sử dụng DRAP (hàm trỠđối số đã xếp hàng năng động) để xếp hàng lại ngăn xếp."
#: config/i386/i386.opt:321
-#, fuzzy
-#| msgid "Return values of functions in FPU registers"
msgid "Return values of functions in FPU registers."
-msgstr "Trả lại giá trị của hàm trong thanh ghi FPU (đơn vị dấu chấm động)"
+msgstr "Trả lại giá trị của hàm trong thanh ghi FPU (đơn vị dấu chấm động)."
#: config/i386/i386.opt:325
-#, fuzzy
-#| msgid "Generate floating point mathematics using given instruction set"
msgid "Generate floating point mathematics using given instruction set."
-msgstr "Tạo ra tính toán dùng dấu chấm động dùng tập hợp câu lệnh đưa ra"
+msgstr "Tạo ra tính toán dùng dấu chấm động dùng tập hợp câu lệnh đưa ra."
#: config/i386/i386.opt:329
msgid "Valid arguments to -mfpmath=:"
msgstr "Äối số hợp lệ cho -mfpmath=:"
#: config/i386/i386.opt:362
-#, fuzzy
-#| msgid "Inline all known string operations"
msgid "Inline all known string operations."
-msgstr "Chèn vào trực tiếp tất cả các thao tác chuỗi được biết"
+msgstr "Chèn vào trực tiếp tất cả các thao tác chuỗi được biết."
#: config/i386/i386.opt:366
-#, fuzzy
-#| msgid "Inline memset/memcpy string operations, but perform inline version only for small blocks"
msgid "Inline memset/memcpy string operations, but perform inline version only for small blocks."
-msgstr "Chèn vào trá»±c tiếp các thao tác chuá»—i loại memset/memcpy, mà thá»±c hiện phiên bản trá»±c tiếp chỉ cho khối nhá»"
+msgstr "Chèn vào trá»±c tiếp các thao tác chuá»—i loại memset/memcpy, mà thá»±c hiện phiên bản trá»±c tiếp chỉ cho khối nhá»."
#: config/i386/i386.opt:369
msgid "%<-mintel-syntax%> and %<-mno-intel-syntax%> are deprecated; use %<-masm=intel%> and %<-masm=att%> instead"
-msgstr "%<-mintel-syntax%> và %<-mno-intel-syntax%> bị phản đối; dùng %<-masm=intel%> và %<-masm=att%> để thay thế"
+msgstr "%<-mintel-syntax%> và %<-mno-intel-syntax%> đã lạc hậu; dùng %<-masm=intel%> và %<-masm=att%> để thay thế"
#: config/i386/i386.opt:374
-#, fuzzy
-#| msgid "Use native (MS) bitfield layout"
msgid "Use native (MS) bitfield layout."
-msgstr "Sá»­ dụng bố trí trưá»ng bit sở hữu (MS)"
+msgstr "Sá»­ dụng bố trí trưá»ng bit sở hữu (MS)."
#: config/i386/i386.opt:394
-#, fuzzy
-#| msgid "Set 80387 floating-point precision to 32-bit"
msgid "Set 80387 floating-point precision to 32-bit."
-msgstr "Äặt độ chính xác dấu chấm động 80387 thành 32-bít"
+msgstr "Äặt độ chính xác dấu chấm động 80387 thành 32-bít."
#: config/i386/i386.opt:398
-#, fuzzy
-#| msgid "Set 80387 floating-point precision to 64-bit"
msgid "Set 80387 floating-point precision to 64-bit."
-msgstr "Äặt độ chính xác dấu chấm động 80387 thành 64-bít"
+msgstr "Äặt độ chính xác dấu chấm động 80387 thành 64-bít."
#: config/i386/i386.opt:402
-#, fuzzy
-#| msgid "Set 80387 floating-point precision to 80-bit"
msgid "Set 80387 floating-point precision to 80-bit."
-msgstr "Äặt độ chính xác dấu chấm động 80387 thành 80-bít"
+msgstr "Äặt độ chính xác dấu chấm động 80387 thành 80-bít."
#: config/i386/i386.opt:406
-#, fuzzy
-#| msgid "Attempt to keep stack aligned to this power of 2"
msgid "Attempt to keep stack aligned to this power of 2."
-msgstr "Thử bảo tồn ngăn xếp được xếp hàng theo lũy thừa 2 này"
+msgstr "Thử bảo tồn ngăn xếp được xếp hàng theo lũy thừa 2 này."
#: config/i386/i386.opt:410
-#, fuzzy
-#| msgid "Assume incoming stack aligned to this power of 2"
msgid "Assume incoming stack aligned to this power of 2."
-msgstr "Coi là ngăn xếp đến được xếp hàng theo lũy thừa 2 này"
+msgstr "Coi là ngăn xếp đến được xếp hàng theo lũy thừa 2 này."
#: config/i386/i386.opt:414
-#, fuzzy
-#| msgid "Use push instructions to save outgoing arguments"
msgid "Use push instructions to save outgoing arguments."
-msgstr "Sử dụng câu lệnh đẩy để lưu các đối số gửi đi"
+msgstr "Sử dụng câu lệnh đẩy để lưu các đối số gửi đi."
#: config/i386/i386.opt:418
-#, fuzzy
-#| msgid "Use red-zone in the x86-64 code"
msgid "Use red-zone in the x86-64 code."
-msgstr "Sử dụng vùng màu đỠtrong mã x86-64"
+msgstr "Sử dụng vùng màu đỠtrong mã x86-64."
#: config/i386/i386.opt:422
-#, fuzzy
-#| msgid "Number of registers used to pass integer arguments"
msgid "Number of registers used to pass integer arguments."
-msgstr "Số các thanh ghi được sử dụng để gửi đối số nguyên cho đích"
+msgstr "Số các thanh ghi được sử dụng để gửi đối số nguyên cho đích."
#: config/i386/i386.opt:426
-#, fuzzy
-#| msgid "Alternate calling convention"
msgid "Alternate calling convention."
-msgstr "Quy ước gá»i xen kẽ"
+msgstr "Quy ước gá»i thay thế."
#: config/i386/i386.opt:430 config/alpha/alpha.opt:23
-#, fuzzy
-#| msgid "Do not use hardware fp"
msgid "Do not use hardware fp."
-msgstr "Äừng sá»­ dụng dấu chấm động bằng phần cứng"
+msgstr "Äừng sá»­ dụng dấu chấm động bằng phần cứng."
#: config/i386/i386.opt:434
-#, fuzzy
-#| msgid "Use SSE register passing conventions for SF and DF mode"
msgid "Use SSE register passing conventions for SF and DF mode."
-msgstr "Sử dụng quy ước gửi qua thanh ghi loại SSE cho chế độ SF và DF"
+msgstr "Sử dụng quy ước gửi qua thanh ghi loại SSE cho chế độ SF và DF."
#: config/i386/i386.opt:438
-#, fuzzy
-#| msgid "Realign stack in prologue"
msgid "Realign stack in prologue."
-msgstr "Xếp hàng lại ngăn xếp trong đoạn mở đầu"
+msgstr "Xếp hàng lại ngăn xếp trong đoạn mở đầu."
#: config/i386/i386.opt:442
-#, fuzzy
-#| msgid "Enable stack probing"
msgid "Enable stack probing."
-msgstr "Bật chức năng dò ngăn xếp"
+msgstr "Bật chức năng dò ngăn xếp."
#: config/i386/i386.opt:446
msgid "Specify memcpy expansion strategy when expected size is known."
@@ -10153,8 +8823,6 @@ msgid "Specify memset expansion strategy when expected size is known."
msgstr ""
#: config/i386/i386.opt:454
-#, fuzzy
-#| msgid "Chose strategy to generate stringop using"
msgid "Chose strategy to generate stringop using."
msgstr "Chá»n chiến lược để tạo ra thao tác chuá»—i dùng"
@@ -10163,52 +8831,41 @@ msgid "Valid arguments to -mstringop-strategy=:"
msgstr "Äối số hợp lệ cho -mstringop-strategy=:"
#: config/i386/i386.opt:486
-#, fuzzy
-#| msgid "Use given thread-local storage dialect"
msgid "Use given thread-local storage dialect."
-msgstr "Sử dụng phương ngôn lưu theo nhánh cục bộ"
+msgstr "Sử dụng phương ngôn lưu theo nhánh cục bộ."
#: config/i386/i386.opt:490
msgid "Known TLS dialects (for use with the -mtls-dialect= option):"
msgstr "Không hiểu TLS dialects (để dùng vá»›i tùy chá»n -mtls-dialect=):"
#: config/i386/i386.opt:500
-#, fuzzy, c-format
-#| msgid "Use direct references against %gs when accessing tls data"
+#, c-format
msgid "Use direct references against %gs when accessing tls data."
-msgstr "Sử dụng tham chiếu trực tiếp đối với %gs khi truy cập đến dữ liệu của nó"
+msgstr "Sử dụng tham chiếu trực tiếp đối với %gs khi truy cập đến dữ liệu của nó."
#: config/i386/i386.opt:508
-#, fuzzy
msgid "Fine grain control of tune features."
msgstr "Äặc tính đã bị xóa bá»:"
#: config/i386/i386.opt:512
-#, fuzzy
msgid "Clear all tune features."
msgstr "Äặc tính đã bị xóa bá»:"
#: config/i386/i386.opt:519
-#, fuzzy
-#| msgid "Generate code that conforms to the given ABI"
msgid "Generate code that conforms to Intel MCU psABI."
-msgstr "Tạo ra mã thích hợp với ABI đưa ra"
+msgstr "Tạo ra mã thích hợp vớiIntel MCU psABI."
#: config/i386/i386.opt:523
-#, fuzzy
-#| msgid "Generate code that conforms to the given ABI"
msgid "Generate code that conforms to the given ABI."
-msgstr "Tạo ra mã thích hợp với ABI đưa ra"
+msgstr "Tạo ra mã thích hợp với ABI đưa ra."
#: config/i386/i386.opt:527
msgid "Known ABIs (for use with the -mabi= option):"
msgstr "Không hiểu ABIs (để dùng vá»›i tùy chá»n -mabi=):"
#: config/i386/i386.opt:537 config/rs6000/rs6000.opt:189
-#, fuzzy
-#| msgid "Vector library ABI to use"
msgid "Vector library ABI to use."
-msgstr "ABI thư viện véc-tơ cần sử dụng"
+msgstr "ABI thư viện véc-tơ cần sử dụng."
#: config/i386/i386.opt:541
msgid "Known vectorization library ABIs (for use with the -mveclibabi= option):"
@@ -10247,188 +8904,128 @@ msgid "Use 128-bit AVX instructions instead of 256-bit AVX instructions in the a
msgstr ""
#: config/i386/i386.opt:588
-#, fuzzy
-#| msgid "Generate 32bit i386 code"
msgid "Generate 32bit i386 code."
-msgstr "Tạo ra mã i386 32-bit"
+msgstr "Tạo ra mã i386 32-bit."
#: config/i386/i386.opt:592
-#, fuzzy
-#| msgid "Generate 64bit x86-64 code"
msgid "Generate 64bit x86-64 code."
-msgstr "Tạo ra mã x86-64 64-bit"
+msgstr "Tạo ra mã x86-64 64-bit."
#: config/i386/i386.opt:596
-#, fuzzy
-#| msgid "Generate 32bit x86-64 code"
msgid "Generate 32bit x86-64 code."
-msgstr "Tạo ra mã x86-64 32-bit"
+msgstr "Tạo ra mã x86-64 32-bit."
#: config/i386/i386.opt:600
-#, fuzzy
-#| msgid "Generate 16bit i386 code"
msgid "Generate 16bit i386 code."
-msgstr "Tạo ra mã i386 16-bit"
+msgstr "Tạo ra mã i386 16-bit."
#: config/i386/i386.opt:604
-#, fuzzy
-#| msgid "Support MMX built-in functions"
msgid "Support MMX built-in functions."
-msgstr "Hỗ trợ các hàm dựng sẵn MMX"
+msgstr "Hỗ trợ các hàm dựng sẵn MMX."
#: config/i386/i386.opt:608
-#, fuzzy
-#| msgid "Support 3DNow! built-in functions"
msgid "Support 3DNow! built-in functions."
-msgstr "Hỗ trợ các hàm dựng sẵn 3DNow!"
+msgstr "Hỗ trợ các hàm dựng sẵn 3DNow!."
#: config/i386/i386.opt:612
-#, fuzzy
-#| msgid "Support Athlon 3Dnow! built-in functions"
msgid "Support Athlon 3Dnow! built-in functions."
-msgstr "Hỗ trợ các hàm dựng sẵn 3DNow! Athlon"
+msgstr "Hỗ trợ các hàm dựng sẵn 3DNow! Athlon."
#: config/i386/i386.opt:616
-#, fuzzy
-#| msgid "Support MMX and SSE built-in functions and code generation"
msgid "Support MMX and SSE built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX và SSE"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX và SSE."
#: config/i386/i386.opt:620
-#, fuzzy
-#| msgid "Support MMX, SSE and SSE2 built-in functions and code generation"
msgid "Support MMX, SSE and SSE2 built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE và SSE2"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE và SSE2."
#: config/i386/i386.opt:624
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation"
msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2 và SSE3"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2 và SSE3."
#: config/i386/i386.opt:628
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3 and SSSE3 built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3 and SSSE3 built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3 và SSSE3"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3 và SSSE3."
#: config/i386/i386.opt:632
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3 and SSE4.1 built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3 and SSE4.1 built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3, SSSE3 và SSE4.1"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3, SSSE3 và SSE4.1."
#: config/i386/i386.opt:636 config/i386/i386.opt:640
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 and SSE4.2 built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 and SSE4.2 built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 và SSE4.2"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 và SSE4.2."
#: config/i386/i386.opt:644
-#, fuzzy
-#| msgid "Do not support SSE4.1 and SSE4.2 built-in functions and code generation"
msgid "Do not support SSE4.1 and SSE4.2 built-in functions and code generation."
-msgstr "Äừng há»— trợ hàm dá»±ng sẵn và chức năng tạo ra mã loại SSE4.1 và SSE4.2"
+msgstr "Äừng há»— trợ hàm dá»±ng sẵn và chức năng tạo ra mã loại SSE4.1 và SSE4.2."
#: config/i386/i386.opt:647
msgid "%<-msse5%> was removed"
msgstr "%<-msse5%> đã bị gỡ bá»"
#: config/i386/i386.opt:652
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 and AVX built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 and AVX built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 và AVX"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 và AVX."
#: config/i386/i386.opt:656
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and AVX2 built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and AVX2 built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX và AVX2"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX và AVX2."
#: config/i386/i386.opt:660
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F built-in functions and code generation."
-msgstr "Hỗ trợ hàm dựng sẵn MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 và AVX512F và tạo mã"
+msgstr "Hỗ trợ hàm dựng sẵn MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 và AVX512F và tạo mã."
#: config/i386/i386.opt:664
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512PF built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512PF built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 và AVX512F và AVX512PF"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 và AVX512F và AVX512PF."
#: config/i386/i386.opt:668
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512ER built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512ER built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 và AVX512F và AVX512ER"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 và AVX512F và AVX512ER."
#: config/i386/i386.opt:672
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512CD built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512CD built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 và AVX512F và AVX512CD"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 và AVX512F và AVX512CD."
#: config/i386/i386.opt:676
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512DQ built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512DQ built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 và AVX512F và AVX512DQ"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 và AVX512F và AVX512DQ."
#: config/i386/i386.opt:680
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512BW built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512BW built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 và AVX512F và AVX512BW"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 và AVX512F và AVX512BW."
#: config/i386/i386.opt:684
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512VL built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512VL built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 và AVX512F và AVX512VL"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 và AVX512F và AVX512VL."
#: config/i386/i386.opt:688
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512IFMA built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512IFMA built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 và AVX512F và AVX512IFMA"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 và AVX512F và AVX512IFMA."
#: config/i386/i386.opt:692
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512VBMI built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512VBMI built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 và AVX512F và AVX512VBMI"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 và AVX512F và AVX512VBMI."
#: config/i386/i386.opt:696
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and FMA built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and FMA built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX và FMA"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX và FMA."
#: config/i386/i386.opt:700
-#, fuzzy
-#| msgid "Support MMX, SSE, SSE2, SSE3 and SSE4A built-in functions and code generation"
msgid "Support MMX, SSE, SSE2, SSE3 and SSE4A built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3 và SSE4A"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX, SSE, SSE2, SSE3 và SSE4A."
#: config/i386/i386.opt:704
-#, fuzzy
-#| msgid "Support FMA4 built-in functions and code generation "
msgid "Support FMA4 built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại FMA4"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại FMA4."
#: config/i386/i386.opt:708
-#, fuzzy
-#| msgid "Support XOP built-in functions and code generation "
msgid "Support XOP built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại XOP"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại XOP."
#: config/i386/i386.opt:712
-#, fuzzy
-#| msgid "Support LWP built-in functions and code generation "
msgid "Support LWP built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại LWP"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại LWP."
#: config/i386/i386.opt:716
msgid "Support code generation of Advanced Bit Manipulation (ABM) instructions."
@@ -10439,98 +9036,68 @@ msgid "Support code generation of popcnt instruction."
msgstr "Hỗ trợ chức năng tạo ra mã là câu lệnh popcnt."
#: config/i386/i386.opt:724
-#, fuzzy
-#| msgid "Support BMI built-in functions and code generation"
msgid "Support BMI built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại BMI"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại BMI."
#: config/i386/i386.opt:728
-#, fuzzy
-#| msgid "Support BMI2 built-in functions and code generation"
msgid "Support BMI2 built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại BMI2"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại BMI2."
#: config/i386/i386.opt:732
-#, fuzzy
-#| msgid "Support TBM built-in functions and code generation"
msgid "Support LZCNT built-in function and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại TBM"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại LZCNT."
#: config/i386/i386.opt:736
msgid "Support Hardware Lock Elision prefixes."
msgstr ""
#: config/i386/i386.opt:740
-#, fuzzy
-#| msgid "Support RDSEED instruction"
msgid "Support RDSEED instruction."
-msgstr "Hỗ trợ chỉ lệnh RDSEED"
+msgstr "Hỗ trợ chỉ lệnh RDSEED."
#: config/i386/i386.opt:744
-#, fuzzy
-#| msgid "Support PREFETCHW instruction"
msgid "Support PREFETCHW instruction."
-msgstr "Hỗ trợ chỉ lệnh PREFETCHW"
+msgstr "Hỗ trợ chỉ lệnh PREFETCHW."
#: config/i386/i386.opt:748
-#, fuzzy
-#| msgid "Support code generation of crc32 instruction."
msgid "Support flag-preserving add-carry instructions."
msgstr "Hỗ trợ chức năng tạo ra mã là câu lệnh crc32."
#: config/i386/i386.opt:752
-#, fuzzy
-#| msgid "Support CLFLUSHOPT instructions"
msgid "Support CLFLUSHOPT instructions."
-msgstr "Hỗ trợ chỉ lệnh CLFLUSHOPT"
+msgstr "Hỗ trợ chỉ lệnh CLFLUSHOPT."
#: config/i386/i386.opt:756
-#, fuzzy
-#| msgid "Support CLWB instruction"
msgid "Support CLWB instruction."
-msgstr "Hỗ trợ chỉ lệnh CLWB"
+msgstr "Hỗ trợ chỉ lệnh CLWB."
#: config/i386/i386.opt:760
-#, fuzzy
-#| msgid "Support PCOMMIT instruction"
msgid "Support PCOMMIT instruction."
-msgstr "Hỗ trợ chỉ lệnh PCOMMIT"
+msgstr "Hỗ trợ chỉ lệnh PCOMMIT."
#: config/i386/i386.opt:764
-#, fuzzy
-#| msgid "Support FXSAVE and FXRSTOR instructions"
msgid "Support FXSAVE and FXRSTOR instructions."
-msgstr "Hỗ trợ chỉ lệnh FXSAVE và FXRSTOR"
+msgstr "Hỗ trợ chỉ lệnh FXSAVE và FXRSTOR."
#: config/i386/i386.opt:768
-#, fuzzy
-#| msgid "Support XSAVE and XRSTOR instructions"
msgid "Support XSAVE and XRSTOR instructions."
-msgstr "Hỗ trợ chỉ lệnh XSAVE và XRSTOR"
+msgstr "Hỗ trợ chỉ lệnh XSAVE và XRSTOR."
#: config/i386/i386.opt:772
-#, fuzzy
-#| msgid "Support XSAVEOPT instruction"
msgid "Support XSAVEOPT instruction."
-msgstr "Hỗ trợ chỉ lệnh XSAVEOPT"
+msgstr "Hỗ trợ chỉ lệnh XSAVEOPT."
#: config/i386/i386.opt:776
-#, fuzzy
-#| msgid "Support XSAVEC instructions"
msgid "Support XSAVEC instructions."
-msgstr "Hỗ trợ chỉ lệnh XSAVEC"
+msgstr "Hỗ trợ chỉ lệnh XSAVEC."
#: config/i386/i386.opt:780
-#, fuzzy
-#| msgid "Support XSAVES and XRSTORS instructions"
msgid "Support XSAVES and XRSTORS instructions."
-msgstr "Hỗ trợ chỉ lệnh XSAVES và XRSTORS"
+msgstr "Hỗ trợ chỉ lệnh XSAVES và XRSTORS."
#: config/i386/i386.opt:784
-#, fuzzy
-#| msgid "Support TBM built-in functions and code generation"
msgid "Support TBM built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại TBM"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại TBM."
#: config/i386/i386.opt:788
msgid "Support code generation of cmpxchg16b instruction."
@@ -10549,51 +9116,36 @@ msgid "Support code generation of crc32 instruction."
msgstr "Hỗ trợ chức năng tạo ra mã là câu lệnh crc32."
#: config/i386/i386.opt:804
-#, fuzzy
-#| msgid "Support AES built-in functions and code generation"
msgid "Support AES built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại AES"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại AES."
#: config/i386/i386.opt:808
-#, fuzzy
-#| msgid "Support SHA1 and SHA256 built-in functions and code generation"
msgid "Support SHA1 and SHA256 built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại SHA1 và SHA256MMX"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại SHA1 và SHA256."
#: config/i386/i386.opt:812
-#, fuzzy
-#| msgid "Support PCLMUL built-in functions and code generation"
msgid "Support PCLMUL built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại PCLMUL"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại PCLMUL."
#: config/i386/i386.opt:816
-#, fuzzy
-#| msgid "Encode SSE instructions with VEX prefix"
msgid "Encode SSE instructions with VEX prefix."
-msgstr "Mã hóa câu lệnh SSE vá»›i tiá»n tố VEX"
+msgstr "Mã hóa câu lệnh SSE vá»›i tiá»n tố VEX."
#: config/i386/i386.opt:820
-#, fuzzy
-#| msgid "Support FSGSBASE built-in functions and code generation"
msgid "Support FSGSBASE built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại FSGSBASE"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại FSGSBASE."
#: config/i386/i386.opt:824
-#, fuzzy
-#| msgid "Support RDRND built-in functions and code generation"
msgid "Support RDRND built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại RDRND"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại RDRND."
#: config/i386/i386.opt:828
-#, fuzzy
-#| msgid "Support F16C built-in functions and code generation"
msgid "Support F16C built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại F16C"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại F16C."
#: config/i386/i386.opt:832
-#, fuzzy
msgid "Support PREFETCHWT1 built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại RTM"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại PREFETCHWT1."
#: config/i386/i386.opt:836
msgid "Emit profiling counter call at function entry before prologue."
@@ -10624,43 +9176,32 @@ msgid "Split 32-byte AVX unaligned store."
msgstr ""
#: config/i386/i386.opt:865
-#, fuzzy
-#| msgid "Support RTM built-in functions and code generation"
msgid "Support RTM built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại RTM"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại RTM."
#: config/i386/i386.opt:869
-#, fuzzy
-#| msgid "Support MPX code generation"
msgid "Support MPX code generation."
-msgstr "Hỗ trợ tạo mã MPX"
+msgstr "Hỗ trợ tạo mã MPX."
#: config/i386/i386.opt:873
-#, fuzzy
-#| msgid "Support MMX and SSE built-in functions and code generation"
msgid "Support MWAITX and MONITORX built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MMX và SSE"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại MWAITX và MONITORX."
#: config/i386/i386.opt:877
-#, fuzzy
-#| msgid "Support AES built-in functions and code generation"
msgid "Support CLZERO built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại AES"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại CLZERO."
#: config/i386/i386.opt:881
-#, fuzzy
-#| msgid "Support PCLMUL built-in functions and code generation"
msgid "Support PKU built-in functions and code generation."
-msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại PCLMUL"
+msgstr "Hỗ trợ các hàm dựng sẵn và chức năng tạo ra mã loại PKU."
#: config/i386/i386.opt:885
msgid "Use given stack-protector guard."
msgstr ""
#: config/i386/i386.opt:889
-#, fuzzy
msgid "Known stack protector guard (for use with the -mstack-protector-guard= option):"
-msgstr "Không hiểu kiến trúc ARM (để dùng vá»›i tùy chá»n -march=):"
+msgstr ""
#: config/i386/i386.opt:899
msgid "Attempt to avoid generating instruction sequences containing ret bytes."
@@ -10679,287 +9220,197 @@ msgid "see <http://www.gnu.org/licenses/>. */"
msgstr "xem <http://www.gnu.org/licenses/>. */"
#: config/pa/pa64-hpux.opt:23
-#, fuzzy
-#| msgid "Assume code will be linked by GNU ld"
msgid "Assume code will be linked by GNU ld."
-msgstr "Coi là mã sẽ được liên kết bởi ld của GNU"
+msgstr "Coi là mã sẽ được liên kết bởi ld của GNU."
#: config/pa/pa64-hpux.opt:27
-#, fuzzy
-#| msgid "Assume code will be linked by HP ld"
msgid "Assume code will be linked by HP ld."
-msgstr "Coi là mã sẽ được liên kết bởi ld của HP"
+msgstr "Coi là mã sẽ được liên kết bởi ld của HP."
#: config/pa/pa-hpux1010.opt:23 config/pa/pa-hpux.opt:31
#: config/pa/pa-hpux1131.opt:23 config/pa/pa-hpux1111.opt:23
-#, fuzzy
-#| msgid "Specify UNIX standard for predefines and linking"
msgid "Specify UNIX standard for predefines and linking."
-msgstr "Ghi rõ tiêu chuẩn UNIX cho lá»i xác định sẵn và chức năng liên kết"
+msgstr "Ghi rõ tiêu chuẩn UNIX cho lá»i xác định sẵn và chức năng liên kết."
#: config/pa/pa-hpux.opt:27
-#, fuzzy
-#| msgid "Generate cpp defines for server IO"
msgid "Generate cpp defines for server IO."
-msgstr "Tạo ra các lá»i xác định cpp cho V/R máy phục vụ"
+msgstr "Tạo ra các lá»i xác định cpp cho V/R máy phục vụ."
#: config/pa/pa-hpux.opt:35
-#, fuzzy
-#| msgid "Generate cpp defines for workstation IO"
msgid "Generate cpp defines for workstation IO."
-msgstr "Tạo ra các lá»i xác định cpp cho V/R máy trạm"
+msgstr "Tạo ra các lá»i xác định cpp cho V/R máy trạm."
#: config/pa/pa.opt:30 config/pa/pa.opt:83 config/pa/pa.opt:91
-#, fuzzy
-#| msgid "Generate PA1.0 code"
msgid "Generate PA1.0 code."
-msgstr "Tạo ra mã PA1.0"
+msgstr "Tạo ra mã PA1.0."
#: config/pa/pa.opt:34 config/pa/pa.opt:95 config/pa/pa.opt:136
-#, fuzzy
-#| msgid "Generate PA1.1 code"
msgid "Generate PA1.1 code."
-msgstr "Tạo ra mã PA1.1"
+msgstr "Tạo ra mã PA1.1."
#: config/pa/pa.opt:38 config/pa/pa.opt:99
-#, fuzzy
-#| msgid "Generate PA2.0 code (requires binutils 2.10 or later)"
msgid "Generate PA2.0 code (requires binutils 2.10 or later)."
-msgstr "Tạo ra mã PA2.0 (yêu cầu binutils 2.10 hay sau)"
+msgstr "Tạo ra mã PA2.0 (yêu cầu binutils 2.10 hay sau)."
#: config/pa/pa.opt:46
-#, fuzzy
-#| msgid "Disable FP regs"
msgid "Disable FP regs."
-msgstr "Tắt các thanh ghi dấu chấm động"
+msgstr "Tắt các thanh ghi dấu chấm động."
#: config/pa/pa.opt:50
-#, fuzzy
-#| msgid "Disable indexed addressing"
msgid "Disable indexed addressing."
-msgstr "Tắt chức năng đặt địa chỉ loại phụ lục"
+msgstr "Tắt chức năng đặt địa chỉ loại phụ lục."
#: config/pa/pa.opt:54
-#, fuzzy
-#| msgid "Generate fast indirect calls"
msgid "Generate fast indirect calls."
-msgstr "Tạo ra các cuá»™c gá»i gián tiếp nhanh"
+msgstr "Tạo ra các cuá»™c gá»i gián tiếp nhanh."
#: config/pa/pa.opt:62
-#, fuzzy
-#| msgid "Assume code will be assembled by GAS"
msgid "Assume code will be assembled by GAS."
-msgstr "Coi là mã sẽ được GAS dịch"
+msgstr "Coi là mã sẽ được GAS dịch."
#: config/pa/pa.opt:71
-#, fuzzy
-#| msgid "Enable linker optimizations"
msgid "Enable linker optimizations."
-msgstr "Bật số tối ưu hóa bộ liên kết"
+msgstr "Bật số tối ưu hóa bộ liên kết."
#: config/pa/pa.opt:75
-#, fuzzy
-#| msgid "Always generate long calls"
msgid "Always generate long calls."
-msgstr "Lúc nào cÅ©ng tạo ra cuá»™c gá»i dài"
+msgstr "Lúc nào cÅ©ng tạo ra cuá»™c gá»i dài."
#: config/pa/pa.opt:79
-#, fuzzy
-#| msgid "Emit long load/store sequences"
msgid "Emit long load/store sequences."
msgstr "Xuất dãy nạp/lưu dài"
#: config/pa/pa.opt:87
-#, fuzzy
-#| msgid "Disable space regs"
msgid "Disable space regs."
-msgstr "Tắt thanh ghi loại sức chứa"
+msgstr "Tắt thanh ghi loại sức chứa."
#: config/pa/pa.opt:103
-#, fuzzy
-#| msgid "Use portable calling conventions"
msgid "Use portable calling conventions."
-msgstr "Sá»­ dụng quy ước gá»i di động"
+msgstr "Sá»­ dụng quy ước gá»i di động."
#: config/pa/pa.opt:107
-#, fuzzy
-#| msgid "Specify CPU for scheduling purposes. Valid arguments are 700, 7100, 7100LC, 7200, 7300, and 8000"
msgid "Specify CPU for scheduling purposes. Valid arguments are 700, 7100, 7100LC, 7200, 7300, and 8000."
-msgstr "Ghi rõ CPU cho mục đích định thá»i. Äối số hợp lệ là 700, 7100, 7100LC, 7200, 7300, và 8000"
+msgstr "Ghi rõ CPU cho mục đích định thá»i. Äối số hợp lệ là 700, 7100, 7100LC, 7200, 7300, và 8000."
#: config/pa/pa.opt:132 config/frv/frv.opt:215
-#, fuzzy
-#| msgid "Use software floating point"
msgid "Use software floating point."
-msgstr "Sá»­ dụng dấu chấm động bằng phần má»m"
+msgstr "Sá»­ dụng dấu chấm động bằng phần má»m."
#: config/pa/pa.opt:140
-#, fuzzy
-#| msgid "Do not disable space regs"
msgid "Do not disable space regs."
-msgstr "Äừng tắt thanh ghi loại sức chứa"
+msgstr "Äừng tắt thanh ghi loại sức chứa."
#: config/v850/v850.opt:29
-#, fuzzy
-#| msgid "Use registers r2 and r5"
msgid "Use registers r2 and r5."
-msgstr "Sử dụng những thanh ghi r2 và r5"
+msgstr "Sử dụng những thanh ghi r2 và r5."
#: config/v850/v850.opt:33
-#, fuzzy
-#| msgid "Use 4 byte entries in switch tables"
msgid "Use 4 byte entries in switch tables."
-msgstr "Sử dụng mục nhập 4-byte trong bảng cái chuyển"
+msgstr "Sử dụng mục nhập 4-byte trong bảng cái chuyển."
#: config/v850/v850.opt:37
-#, fuzzy
-#| msgid "Enable backend debugging"
msgid "Enable backend debugging."
-msgstr "Bật chức năng gỡ rối hậu phương"
+msgstr "Bật chức năng gỡ rối hậu phương."
#: config/v850/v850.opt:41
-#, fuzzy
-#| msgid "Do not use the frdy custom instruction"
msgid "Do not use the callt instruction (default)."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh frdy"
+msgstr "Äừng sá»­ dụng chỉ lệnh callt (mặc định)."
#: config/v850/v850.opt:45
-#, fuzzy
-#| msgid "Reuse r30 on a per function basis"
msgid "Reuse r30 on a per function basis."
-msgstr "Sử dụng lại r30 một cách từng hàm"
+msgstr "Sử dụng lại r30 một cách từng hàm."
#: config/v850/v850.opt:52
-#, fuzzy
-#| msgid "Prohibit PC relative function calls"
msgid "Prohibit PC relative function calls."
-msgstr "Cấm cuá»™c gá»i hàm tương đối vá»›i PC"
+msgstr "Cấm cuá»™c gá»i hàm tương đối vá»›i PC."
#: config/v850/v850.opt:56
-#, fuzzy
-#| msgid "Use stubs for function prologues"
msgid "Use stubs for function prologues."
-msgstr "Sử dụng mẩu cho đoạn mở đầu hàm"
+msgstr "Sử dụng mẩu cho đoạn mở đầu hàm."
#: config/v850/v850.opt:60
-#, fuzzy
-#| msgid "Set the max size of data eligible for the SDA area"
msgid "Set the max size of data eligible for the SDA area."
-msgstr "Äặt kích cỡ tối Ä‘a cá»§a dữ liệu thích hợp vá»›i vùng SDA"
+msgstr "Äặt kích cỡ tối Ä‘a cá»§a dữ liệu thích hợp vá»›i vùng SDA."
#: config/v850/v850.opt:67
-#, fuzzy
-#| msgid "Enable the use of the short load instructions"
msgid "Enable the use of the short load instructions."
-msgstr "Bật sử dụng câu lệnh nạp ngắn"
+msgstr "Bật sử dụng câu lệnh nạp ngắn."
#: config/v850/v850.opt:71
-#, fuzzy
-#| msgid "Same as: -mep -mprolog-function"
msgid "Same as: -mep -mprolog-function."
-msgstr "Bằng: -mep -mprolog-function"
+msgstr "Giống như: -mep -mprolog-function."
#: config/v850/v850.opt:75
-#, fuzzy
-#| msgid "Set the max size of data eligible for the TDA area"
msgid "Set the max size of data eligible for the TDA area."
-msgstr "Äặt kích cỡ tối Ä‘a cá»§a dữ liệu thích hợp vá»›i vùng TDA"
+msgstr "Äặt kích cỡ tối Ä‘a cá»§a dữ liệu thích hợp vá»›i vùng TDA."
#: config/v850/v850.opt:82
-#, fuzzy
-#| msgid "Do not tune stack alignment"
msgid "Do not enforce strict alignment."
-msgstr "Äừng Ä‘iá»u chỉnh sá»± xếp hàng ngăn xếp"
+msgstr "Äừng ép buá»™c hạn chế xếp hàng."
#: config/v850/v850.opt:86
msgid "Put jump tables for switch statements into the .data section rather than the .code section."
msgstr ""
#: config/v850/v850.opt:93
-#, fuzzy
-#| msgid "Compile for the v850 processor"
msgid "Compile for the v850 processor."
-msgstr "Biên dịch cho bộ xử lý v850"
+msgstr "Biên dịch cho bộ xử lý v850."
#: config/v850/v850.opt:97
-#, fuzzy
-#| msgid "Compile for the v850e processor"
msgid "Compile for the v850e processor."
-msgstr "Biên dịch cho bộ xử lý v850e"
+msgstr "Biên dịch cho bộ xử lý v850e."
#: config/v850/v850.opt:101
-#, fuzzy
-#| msgid "Compile for the v850e1 processor"
msgid "Compile for the v850e1 processor."
-msgstr "Biên dịch cho bộ xử lý v850e1"
+msgstr "Biên dịch cho bộ xử lý v850e1."
#: config/v850/v850.opt:105
-#, fuzzy
-#| msgid "Compile for the v850es variant of the v850e1"
msgid "Compile for the v850es variant of the v850e1."
-msgstr "Biên dịch cho bộ xử lý v850e và biến thể của v852el"
+msgstr "Biên dịch cho bộ xử lý v850e và biến thể của v852el."
#: config/v850/v850.opt:109
-#, fuzzy
-#| msgid "Compile for the v850e2 processor"
msgid "Compile for the v850e2 processor."
-msgstr "Biên dịch cho bộ xử lý v850e2"
+msgstr "Biên dịch cho bộ xử lý v850e2."
#: config/v850/v850.opt:113
-#, fuzzy
-#| msgid "Compile for the v850e2v3 processor"
msgid "Compile for the v850e2v3 processor."
-msgstr "Biên dịch cho bộ xử lý v850e3v3"
+msgstr "Biên dịch cho bộ xử lý v850e3v3."
#: config/v850/v850.opt:117
-#, fuzzy
-#| msgid "Compile for the v850e3v5 processor"
msgid "Compile for the v850e3v5 processor."
-msgstr "Biên dịch cho bộ xử lý v850e3v5"
+msgstr "Biên dịch cho bộ xử lý v850e3v5."
#: config/v850/v850.opt:124
-#, fuzzy
-#| msgid "Enable v850e3v5 loop instructions"
msgid "Enable v850e3v5 loop instructions."
-msgstr "Cho phép các chỉ lệnh lặp v850e3v5"
+msgstr "Cho phép các chỉ lệnh lặp v850e3v5."
#: config/v850/v850.opt:128
-#, fuzzy
-#| msgid "Set the max size of data eligible for the ZDA area"
msgid "Set the max size of data eligible for the ZDA area."
-msgstr "Äặt kích cỡ tối Ä‘a cá»§a dữ liệu thích hợp vá»›i vùng ZDA"
+msgstr "Äặt kích cỡ tối Ä‘a cá»§a dữ liệu thích hợp vá»›i vùng ZDA."
#: config/v850/v850.opt:135
msgid "Enable relaxing in the assembler."
msgstr ""
#: config/v850/v850.opt:139
-#, fuzzy
msgid "Prohibit PC relative jumps."
-msgstr "Cấm cuá»™c gá»i hàm tương đối vá»›i PC"
+msgstr "Cấm cuá»™c gá»i hàm tương đối vá»›i PC."
#: config/v850/v850.opt:143
-#, fuzzy
msgid "Inhibit the use of hardware floating point instructions."
-msgstr "Ngăn cản sử dụng câu lệnh nào có loại dấu chấm động phần cứng"
+msgstr "Ngăn cản sử dụng câu lệnh nào có loại dấu chấm động phần cứng."
#: config/v850/v850.opt:147
-#, fuzzy
-#| msgid "Allow the use of hardware floating-point ABI and instructions"
msgid "Allow the use of hardware floating point instructions for V850E2V3 and up."
-msgstr "Cho phép sử dụng ABI và các câu lệnh kiểu dấu chấm động phần cứng"
+msgstr "Cho phép sử dụng các câu lệnh kiểu dấu chấm động phần cứng với V850E2V3 và hơn."
#: config/v850/v850.opt:151
-#, fuzzy
-#| msgid "Enable support for the RH850 ABI. This is the default"
msgid "Enable support for the RH850 ABI. This is the default."
-msgstr "Bật há»— trợ cho RH850 ABI. Äây là mặc định"
+msgstr "Bật há»— trợ cho RH850 ABI. Äây là mặc định."
#: config/v850/v850.opt:155
-#, fuzzy
-#| msgid "Enable support for the RH850 ABI. This is the default"
msgid "Enable support for the old GCC ABI."
-msgstr "Bật há»— trợ cho RH850 ABI. Äây là mặc định"
+msgstr ""
#: config/v850/v850.opt:159
msgid "Support alignments of up to 64-bits."
@@ -10970,34 +9421,24 @@ msgid "-G<number>\tPut global and static data smaller than <number> bytes into a
msgstr ""
#: config/lynx.opt:23
-#, fuzzy
-#| msgid "Support legacy multi-threading"
msgid "Support legacy multi-threading."
-msgstr "Hỗ trợ chức năng đa luồng thừa tự"
+msgstr "Hỗ trợ chức năng đa luồng thừa tự."
#: config/lynx.opt:27
-#, fuzzy
-#| msgid "Use shared libraries"
msgid "Use shared libraries."
-msgstr "Sử dụng thư viện dùng chung"
+msgstr "Sử dụng thư viện dùng chung."
#: config/lynx.opt:31
-#, fuzzy
-#| msgid "Support multi-threading"
msgid "Support multi-threading."
-msgstr "Hỗ trợ chức năng đa luồng"
+msgstr "Hỗ trợ chức năng đa luồng."
#: config/nvptx/nvptx.opt:22
-#, fuzzy
-#| msgid "Generate code for a 32 bit ABI"
msgid "Generate code for a 32-bit ABI."
-msgstr "Tạo ra mã cho một ABI 32 bít"
+msgstr "Tạo ra mã cho một ABI 32 bít."
#: config/nvptx/nvptx.opt:26
-#, fuzzy
-#| msgid "Generate code for a 64 bit ABI"
msgid "Generate code for a 64-bit ABI."
-msgstr "Tạo ra mã cho một ABI 64 bít"
+msgstr "Tạo ra mã cho một ABI 64 bít."
#: config/nvptx/nvptx.opt:30
msgid "Link in code for a __main kernel."
@@ -11008,72 +9449,53 @@ msgid "Optimize partition neutering"
msgstr ""
#: config/vxworks.opt:36
-#, fuzzy
-#| msgid "Assume the VxWorks RTP environment"
msgid "Assume the VxWorks RTP environment."
-msgstr "Coi là môi trưá»ng RTP VxWorks"
+msgstr "Coi là môi trưá»ng RTP VxWorks."
#: config/vxworks.opt:43
-#, fuzzy
-#| msgid "Assume the VxWorks vThreads environment"
msgid "Assume the VxWorks vThreads environment."
-msgstr "Coi là môi trưá»ng vThreads VxWorks"
+msgstr "Coi là môi trưá»ng vThreads VxWorks."
#: config/cr16/cr16.opt:23
-#, fuzzy
-#| msgid "-msim Use simulator runtime"
msgid "-msim Use simulator runtime."
-msgstr "-msim Dùng chạy mô phá»ng"
+msgstr "-msim Dùng chạy mô phá»ng."
#: config/cr16/cr16.opt:27
-#, fuzzy
-#| msgid "Generate SBIT, CBIT instructions"
msgid "Generate SBIT, CBIT instructions."
-msgstr "Tạo chỉ lệnh SBIT, CBIT"
+msgstr "Tạo chỉ lệnh SBIT, CBIT."
#: config/cr16/cr16.opt:31
-#, fuzzy
-#| msgid "Support multiply accumulate instructions"
msgid "Support multiply accumulate instructions."
-msgstr "Hỗ trợ câu lệnh nhân-tích_lũy"
+msgstr "Hỗ trợ câu lệnh nhân-tích_lũy."
#: config/cr16/cr16.opt:38
msgid "Treat data references as near, far or medium. medium is default."
msgstr ""
#: config/cr16/cr16.opt:42
-#, fuzzy
-#| msgid "Generate code for CR16C architecture"
msgid "Generate code for CR16C architecture."
-msgstr "Tạo mã cho kiến trúc CR16C"
+msgstr "Tạo mã cho kiến trúc CR16C."
#: config/cr16/cr16.opt:46
-#, fuzzy
-#| msgid "Generate code for CR16C+ architecture (Default)"
msgid "Generate code for CR16C+ architecture (Default)."
-msgstr "Tạo mã cho kiến trúc CR16C+ (mặc định)"
+msgstr "Tạo mã cho kiến trúc CR16C+ (mặc định)."
#: config/cr16/cr16.opt:50
msgid "Treat integers as 32-bit."
msgstr "Coi số nguyên là 32-bit."
#: config/avr/avr.opt:23
-#, fuzzy
-#| msgid "Use subroutines for function prologues and epilogues"
msgid "Use subroutines for function prologues and epilogues."
-msgstr "Sử dụng chương trình con cho đoạn mở/đóng hàm"
+msgstr "Sử dụng chương trình con cho đoạn mở/đóng hàm."
#: config/avr/avr.opt:26
-#, fuzzy, c-format
-#| msgid "missing makefile target after %qs"
+#, c-format
msgid "missing device or architecture after %qs"
-msgstr "thiếu đích makefile sau %qs"
+msgstr "thiếu thiết bị hay kiến trúc sau %qs"
#: config/avr/avr.opt:27
-#, fuzzy
-#| msgid "-mmcu=MCU\tSelect the target MCU"
msgid "-mmcu=MCU\tSelect the target MCU."
-msgstr "-mmcu=MCU\tChá»n MCU đích"
+msgstr "-mmcu=MCU\tChá»n MCU đích."
#: config/avr/avr.opt:31
msgid "Set the number of 64 KiB flash segments."
@@ -11088,32 +9510,24 @@ msgid "Enable Read-Modify-Write (RMW) instructions support/use."
msgstr ""
#: config/avr/avr.opt:49
-#, fuzzy
-#| msgid "Use an 8-bit 'int' type"
msgid "Use an 8-bit 'int' type."
-msgstr "Sử dụng một loại số nguyên 8-bit"
+msgstr "Sử dụng một loại số nguyên 8-bit."
#: config/avr/avr.opt:53
-#, fuzzy
-#| msgid "Change the stack pointer without disabling interrupts"
msgid "Change the stack pointer without disabling interrupts."
-msgstr "Thay đổi hàm trỠngăn xếp mà không tắt tín hiệu gián đoạn"
+msgstr "Thay đổi hàm trỠngăn xếp mà không tắt tín hiệu ngắt."
#: config/avr/avr.opt:57
msgid "Set the branch costs for conditional branch instructions. Reasonable values are small, non-negative integers. The default branch cost is 0."
msgstr ""
#: config/avr/avr.opt:67
-#, fuzzy
-#| msgid "Change only the low 8 bits of the stack pointer"
msgid "Change only the low 8 bits of the stack pointer."
-msgstr "Thay đổi chỉ 8 bit thấp của hàm trỠngăn xếp"
+msgstr "Thay đổi chỉ 8 bit thấp của hàm trỠngăn xếp."
#: config/avr/avr.opt:71
-#, fuzzy
-#| msgid "Relax branches"
msgid "Relax branches."
-msgstr "Làm yếu các nhánh"
+msgstr "Làm yếu các nhánh."
#: config/avr/avr.opt:75
msgid "Make the linker relaxation machine assume that a program counter wrap-around occurs."
@@ -11144,74 +9558,50 @@ msgid "Do not link against the device-specific library lib<MCU>.a."
msgstr ""
#: config/m32r/m32r.opt:34
-#, fuzzy
-#| msgid "Compile for the m32rx"
msgid "Compile for the m32rx."
-msgstr "Biên dịch cho m32x"
+msgstr "Biên dịch cho m32x."
#: config/m32r/m32r.opt:38
-#, fuzzy
-#| msgid "Compile for the m32r2"
msgid "Compile for the m32r2."
-msgstr "Biên dịch cho m32r2"
+msgstr "Biên dịch cho m32r2."
#: config/m32r/m32r.opt:42
-#, fuzzy
-#| msgid "Compile for the m32r"
msgid "Compile for the m32r."
-msgstr "Biên dịch cho m32r"
+msgstr "Biên dịch cho m32r."
#: config/m32r/m32r.opt:46
-#, fuzzy
-#| msgid "Align all loops to 32 byte boundary"
msgid "Align all loops to 32 byte boundary."
-msgstr "Xếp hàng tất cả các vòng lặp theo biên giới 32-byte"
+msgstr "Xếp hàng tất cả các vòng lặp theo biên giới 32-byte."
#: config/m32r/m32r.opt:50
-#, fuzzy
-#| msgid "Prefer branches over conditional execution"
msgid "Prefer branches over conditional execution."
-msgstr "Thích nhánh hÆ¡n sá»± thá»±c hiện có Ä‘iá»u kiện"
+msgstr "Thích nhánh hÆ¡n sá»± thá»±c hiện có Ä‘iá»u kiện."
#: config/m32r/m32r.opt:54
-#, fuzzy
-#| msgid "Give branches their default cost"
msgid "Give branches their default cost."
-msgstr "Gán cho mỗi nhánh giá mặc định của nó"
+msgstr "Gán cho mỗi nhánh giá mặc định của nó."
#: config/m32r/m32r.opt:58
-#, fuzzy
-#| msgid "Display compile time statistics"
msgid "Display compile time statistics."
-msgstr "Hiển thị thống kê vá» khoảng thá»i gian biên dịch"
+msgstr "Hiển thị thống kê vá» khoảng thá»i gian biên dịch."
#: config/m32r/m32r.opt:62
-#, fuzzy
-#| msgid "Specify cache flush function"
msgid "Specify cache flush function."
-msgstr "Ghi rõ hàm chuyển hết vùng nhớ tạm ra ngoài"
+msgstr "Ghi rõ hàm chuyển hết vùng nhớ tạm ra ngoài."
#: config/m32r/m32r.opt:66
-#, fuzzy
-#| msgid "Specify cache flush trap number"
msgid "Specify cache flush trap number."
-msgstr "Ghi rõ số thứ tự bẫy chuyển hết vùng nhớ tạm ra ngoài"
+msgstr "Ghi rõ số thứ tự bẫy chuyển hết vùng nhớ tạm ra ngoài."
#: config/m32r/m32r.opt:70
-#, fuzzy
-#| msgid "Only issue one instruction per cycle"
msgid "Only issue one instruction per cycle."
-msgstr "Chỉ đưa ra một câu lệnh từng chu kỳ"
+msgstr "Chỉ đưa ra một câu lệnh từng chu kỳ."
#: config/m32r/m32r.opt:74
-#, fuzzy
-#| msgid "Allow two instructions to be issued per cycle"
msgid "Allow two instructions to be issued per cycle."
-msgstr "Cho phép đưa ra hai câu lệnh từng chu kỳ"
+msgstr "Cho phép đưa ra hai câu lệnh từng chu kỳ."
#: config/m32r/m32r.opt:78
-#, fuzzy
-#| msgid "Code size: small, medium or large"
msgid "Code size: small, medium or large."
msgstr ""
"Kích cỡ mã:\n"
@@ -11220,159 +9610,116 @@ msgstr ""
" * large\t\t\tlá»›n."
#: config/m32r/m32r.opt:94
-#, fuzzy
-#| msgid "Don't call any cache flush functions"
msgid "Don't call any cache flush functions."
-msgstr "Äừng gá»i hàm nào chuyển hết vùng nhá»› tạm ra ngoài"
+msgstr "Äừng gá»i hàm nào chuyển hết vùng nhá»› tạm ra ngoài."
#: config/m32r/m32r.opt:98
-#, fuzzy
-#| msgid "Don't call any cache flush trap"
msgid "Don't call any cache flush trap."
-msgstr "Äừng gá»i bẫy nào chuyển hết vùng nhá»› tạm ra ngoài"
+msgstr "Äừng gá»i bẫy nào chuyển hết vùng nhá»› tạm ra ngoài."
#: config/m32r/m32r.opt:105
-#, fuzzy
-#| msgid "Small data area: none, sdata, use"
msgid "Small data area: none, sdata, use."
msgstr ""
"Vùng dữ liệu nhá»:\n"
" * none\tkhông có\n"
" * sdata\n"
-" * use\tsử dụng"
+" * use\tsử dụng."
#: config/s390/tpf.opt:23
-#, fuzzy
-#| msgid "Enable TPF-OS tracing code"
msgid "Enable TPF-OS tracing code."
-msgstr "Bật mã tìm đưá»ng TFP-OS"
+msgstr "Bật mã tìm đưá»ng TFP-OS."
#: config/s390/tpf.opt:27
-#, fuzzy
-#| msgid "Specify main object for TPF-OS"
msgid "Specify main object for TPF-OS."
-msgstr "Ghi rõ đối tượng chính cho TFP-OS"
+msgstr "Ghi rõ đối tượng chính cho TFP-OS."
#: config/s390/s390.opt:48
-#, fuzzy
-#| msgid "31 bit ABI"
msgid "31 bit ABI."
-msgstr "ABI 31-bit"
+msgstr "ABI 31-bit."
#: config/s390/s390.opt:52
-#, fuzzy
-#| msgid "64 bit ABI"
msgid "64 bit ABI."
-msgstr "ABI 64-bit"
+msgstr "ABI 64-bit."
#: config/s390/s390.opt:96
-#, fuzzy
-#| msgid "Maintain backchain pointer"
msgid "Maintain backchain pointer."
msgstr "Bảo tồn hàm trá» dây chuyá»n ngược"
#: config/s390/s390.opt:100
-#, fuzzy
-#| msgid "Additional debug prints"
msgid "Additional debug prints."
-msgstr "Lần bổ sung in ra thông tin gỡ rối"
+msgstr "Lần bổ sung in ra thông tin gỡ rối."
#: config/s390/s390.opt:104
-#, fuzzy
-#| msgid "ESA/390 architecture"
msgid "ESA/390 architecture."
-msgstr "Kiến trúc ESA/390"
+msgstr "Kiến trúc ESA/390."
#: config/s390/s390.opt:108
-#, fuzzy
-#| msgid "Enable decimal floating point hardware support"
msgid "Enable decimal floating point hardware support."
-msgstr "Bật việc hỗ trợ phần cứng dấu chấm động thập phân"
+msgstr "Bật việc hỗ trợ phần cứng dấu chấm động thập phân."
#: config/s390/s390.opt:112
-#, fuzzy
-#| msgid "Enable hardware floating point"
msgid "Enable hardware floating point."
-msgstr "Bật dấu chấm động loại phần cứng"
+msgstr "Bật dấu chấm động loại phần cứng."
#: config/s390/s390.opt:116
msgid "Takes two non-negative integer numbers separated by a comma."
msgstr ""
#: config/s390/s390.opt:134
-#, fuzzy
msgid "Use hardware transactional execution instructions."
-msgstr "Sử dụng các chỉ lệnh chấm động phần cứng"
+msgstr "Sử dụng các chỉ lệnh thực thi giao dịch bằng phần cứng."
#: config/s390/s390.opt:138
msgid "Use hardware vector facility instructions and enable the vector ABI."
msgstr ""
#: config/s390/s390.opt:142
-#, fuzzy
-#| msgid "Use packed stack layout"
msgid "Use packed stack layout."
-msgstr "Sử dụng bố trí ngăn xếp đóng gói"
+msgstr "Sử dụng bố trí ngăn xếp đóng gói."
#: config/s390/s390.opt:146
-#, fuzzy
-#| msgid "Use bras for executable < 64k"
msgid "Use bras for executable < 64k."
-msgstr "Sử dụng BRAS cho tập tin thực thị < 64k"
+msgstr "Sử dụng BRAS cho tập tin thực thị < 64k."
#: config/s390/s390.opt:150
-#, fuzzy
-#| msgid "Disable hardware floating point"
msgid "Disable hardware floating point."
-msgstr "Tắt dấu chấm động bằng phần cứng"
+msgstr "Tắt dấu chấm động bằng phần cứng."
#: config/s390/s390.opt:154
-#, fuzzy
-#| msgid "Set the max. number of bytes which has to be left to stack size before a trap instruction is triggered"
msgid "Set the max. number of bytes which has to be left to stack size before a trap instruction is triggered."
-msgstr "Äặt số tối Ä‘a các byte cần để cho kích cỡ ngăn xếp trước khi gây ra má»™t câu lệnh đặt bẫy"
+msgstr "Äặt số tối Ä‘a các byte cần để cho kích cỡ ngăn xếp trước khi gây ra má»™t câu lệnh đặt bẫy."
#: config/s390/s390.opt:158
msgid "Switches off the -mstack-guard= option."
-msgstr ""
+msgstr "Tắt tùy chá»n -mstack-guard=."
#: config/s390/s390.opt:162
-#, fuzzy
-#| msgid "Emit extra code in the function prologue in order to trap if the stack size exceeds the given limit"
msgid "Emit extra code in the function prologue in order to trap if the stack size exceeds the given limit."
-msgstr "Xuất mã bổ sung trong đoạn mở đầu hàm để đặt bẫy nếu kích cỡ ngăn xếp vượt quá giới hạn đưa ra"
+msgstr "Xuất mã bổ sung trong đoạn mở đầu hàm để đặt bẫy nếu kích cỡ ngăn xếp vượt quá giới hạn đưa ra."
#: config/s390/s390.opt:166
msgid "Switches off the -mstack-size= option."
msgstr ""
#: config/s390/s390.opt:174
-#, fuzzy
-#| msgid "Generate string instructions for block moves"
msgid "Use the mvcle instruction for block moves."
-msgstr "Tạo ra câu lệnh chuỗi để di chuyển khối"
+msgstr "Tạo ra câu lệnh chuỗi mvcle để di chuyển khối."
#: config/s390/s390.opt:178
msgid "Enable the z vector language extension providing the context-sensitive"
msgstr ""
#: config/s390/s390.opt:183
-#, fuzzy
-#| msgid "Warn if a function uses alloca or creates an array with dynamic size"
msgid "Warn if a function uses alloca or creates an array with dynamic size."
-msgstr "Cảnh báo nếu một hàm sử dụng alloca hoặc tạo một mảng có kích cỡ năng động"
+msgstr "Cảnh báo nếu một hàm sử dụng alloca hoặc tạo một mảng có kích cỡ năng động."
#: config/s390/s390.opt:187
-#, fuzzy
-#| msgid "Warn if a single function's framesize exceeds the given framesize"
msgid "Warn if a single function's framesize exceeds the given framesize."
-msgstr "Cảnh báo nếu có một hàm riêng lẻ với kích cỡ khung vượt quá kích cỡ khung đưa ra"
+msgstr "Cảnh báo nếu có một hàm riêng lẻ với kích cỡ khung vượt quá kích cỡ khung đưa ra."
#: config/s390/s390.opt:191
-#, fuzzy
-#| msgid "z/Architecture"
msgid "z/Architecture."
-msgstr "z/Kiến trúc"
+msgstr "z/Kiến trúc."
#: config/s390/s390.opt:195
msgid "Set the branch costs for conditional branch instructions. Reasonable"
@@ -11387,9 +9734,8 @@ msgid "Selects the type of hardware multiplication and division to use (none/g13
msgstr ""
#: config/rl78/rl78.opt:50
-#, fuzzy
msgid "Use all registers, reserving none for interrupt handlers."
-msgstr "Ghi rõ số các thanh ghi cần dành riêng cho bộ quản lý tín hiệu gián đoạn."
+msgstr "Ghi rõ số các thanh ghi cần dành riêng cho bộ quản lý tín hiệu ngắt."
#: config/rl78/rl78.opt:54
msgid "Enable assembler and linker relaxation. Enabled by default at -Os."
@@ -11400,80 +9746,62 @@ msgid "Selects the type of RL78 core being targeted (g10/g13/g14). The default
msgstr ""
#: config/rl78/rl78.opt:77
-#, fuzzy
-#| msgid "Alias for --help=target"
msgid "Alias for -mcpu=g10."
-msgstr "Bí danh cho --help=đích"
+msgstr "Bí danh cho -mcpu=g10."
#: config/rl78/rl78.opt:81
-#, fuzzy
-#| msgid "Alias for --help=target"
msgid "Alias for -mcpu=g13."
-msgstr "Bí danh cho --help=đích"
+msgstr "Bí danh cho -mcpu=g13."
#: config/rl78/rl78.opt:85 config/rl78/rl78.opt:89
-#, fuzzy
-#| msgid "Alias for --help=target"
msgid "Alias for -mcpu=g14."
-msgstr "Bí danh cho --help=đích"
+msgstr "Bí danh cho -mcpu=g14."
#: config/rl78/rl78.opt:93
msgid "Assume ES is zero throughout program execution, use ES: for read-only data."
msgstr ""
#: config/stormy16/stormy16.opt:24
-#, fuzzy
-#| msgid "Provide libraries for the simulator"
msgid "Provide libraries for the simulator."
-msgstr "Cung cấp thư viện cho bá»™ mô phá»ng"
+msgstr "Cung cấp thư viện cho bá»™ mô phá»ng."
#: config/arm/arm-tables.opt:25
msgid "Known ARM CPUs (for use with the -mcpu= and -mtune= options):"
-msgstr "Không hiểu ARM CPUs (để dùng vá»›i tùy chá»n -mcpu= và -mtune=):"
+msgstr "Hiểu ARM CPUs (để dùng vá»›i tùy chá»n -mcpu= và -mtune=):"
#: config/arm/arm-tables.opt:335
msgid "Known ARM architectures (for use with the -march= option):"
-msgstr "Không hiểu kiến trúc ARM (để dùng vá»›i tùy chá»n -march=):"
+msgstr "Hiểu kiến trúc ARM (để dùng vá»›i tùy chá»n -march=):"
#: config/arm/arm-tables.opt:432
msgid "Known ARM FPUs (for use with the -mfpu= option):"
-msgstr "Không hiểu ARM FPUs (để dùng vá»›i tùy chá»n -mfpu=):"
+msgstr "Hiểu ARM FPUs (để dùng vá»›i tùy chá»n -mfpu=):"
#: config/arm/arm.opt:26
msgid "TLS dialect to use:"
msgstr "TLS dialect được dùng:"
#: config/arm/arm.opt:36
-#, fuzzy
-#| msgid "Specify an ABI"
msgid "Specify an ABI."
-msgstr "Ghi rõ một ABI"
+msgstr "Ghi rõ một ABI."
#: config/arm/arm.opt:40
msgid "Known ARM ABIs (for use with the -mabi= option):"
-msgstr "Không hiểu ARM ABIs (để dùng vá»›i tùy chá»n -mabi=):"
+msgstr "Hiểu ARM ABIs (để dùng vá»›i tùy chá»n -mabi=):"
#: config/arm/arm.opt:59
-#, fuzzy
-#| msgid "Generate a call to abort if a noreturn function returns"
msgid "Generate a call to abort if a noreturn function returns."
-msgstr "Tạo ra má»™t cuá»™c gá»i nên há»§y bá» nếu má»™t hàm không trả lại còn trả lại"
+msgstr "Tạo ra má»™t cuá»™c gá»i nên há»§y bá» nếu má»™t hàm không trả lại còn trả lại."
#: config/arm/arm.opt:66
-#, fuzzy
-#| msgid "Pass FP arguments in FP registers"
msgid "Pass FP arguments in FP registers."
-msgstr "Gửi đối số dấu chấm động trong thanh ghi dành cho dấu chấm động"
+msgstr "Gửi đối số dấu chấm động trong thanh ghi dành cho dấu chấm động."
#: config/arm/arm.opt:70
-#, fuzzy
-#| msgid "Generate APCS conformant stack frames"
msgid "Generate APCS conformant stack frames."
-msgstr "Tạo ra các khung ngăn xếp làm hợp với APCS"
+msgstr "Tạo ra các khung ngăn xếp làm hợp với APCS."
#: config/arm/arm.opt:74
-#, fuzzy
-#| msgid "Generate re-entrant, PIC code"
msgid "Generate re-entrant, PIC code."
msgstr "Tạo ra mã PIC loại vào lại"
@@ -11482,150 +9810,108 @@ msgid "Generate code in 32 bit ARM state."
msgstr "Tạo ra mã cho ARM 32 bit."
#: config/arm/arm.opt:98
-#, fuzzy
-#| msgid "Thumb: Assume non-static functions may be called from ARM code"
msgid "Thumb: Assume non-static functions may be called from ARM code."
-msgstr "Thumb: Coi là hàm không phải tÄ©nh có thể được gá»i từ mã ARM"
+msgstr "Thumb: Coi là hàm không phải tÄ©nh có thể được gá»i từ mã ARM."
#: config/arm/arm.opt:102
-#, fuzzy
-#| msgid "Thumb: Assume function pointers may go to non-Thumb aware code"
msgid "Thumb: Assume function pointers may go to non-Thumb aware code."
-msgstr "Thumb: Coi là hàm trỠcó thể trở tới mã không phải tùy theo Thumb"
+msgstr "Thumb: Coi là con trỠhàm có thể nhảy đến mã không phải Thumb."
#: config/arm/arm.opt:110
-#, fuzzy
-#| msgid "Specify if floating point hardware should be used"
msgid "Specify if floating point hardware should be used."
-msgstr "Ghi rõ có nên sử dụng phần cứng dấu chấm động hay không"
+msgstr "Ghi rõ có nên sử dụng phần cứng dấu chấm động hay không."
#: config/arm/arm.opt:114
msgid "Known floating-point ABIs (for use with the -mfloat-abi= option):"
msgstr "Không hiểu kiểu dấu chấm động ABIs (để dùng vá»›i tùy chá»n -mfloat-abi=):"
#: config/arm/arm.opt:127
-#, fuzzy
-#| msgid "Switch on/off MIPS16 ASE on alternating functions for compiler testing"
msgid "Switch ARM/Thumb modes on alternating functions for compiler testing."
msgstr "Bật/tắt ASE MIPS16 trên các hàm qua lại, để kiểm tra chức năng của bộ dịch mã số"
#: config/arm/arm.opt:131
-#, fuzzy
-#| msgid "Specify the __fp16 floating-point format"
msgid "Specify the __fp16 floating-point format."
-msgstr "Ghi rõ định dấu chấm động __fp16"
+msgstr "Ghi rõ định dấu chấm động __fp16."
#: config/arm/arm.opt:135
msgid "Known __fp16 formats (for use with the -mfp16-format= option):"
msgstr ""
#: config/arm/arm.opt:148
-#, fuzzy
-#| msgid "Specify the name of the target floating point hardware/format"
msgid "Specify the name of the target floating point hardware/format."
-msgstr "Ghi rõ tên của phần cứng / định dạng đích vỠdấu chấm động"
+msgstr "Ghi rõ tên của phần cứng / định dạng đích vỠdấu chấm động."
#: config/arm/arm.opt:159
-#, fuzzy
-#| msgid "Generate call insns as indirect calls, if necessary"
msgid "Generate call insns as indirect calls, if necessary."
-msgstr "Tạo ra câu lệnh gá»i dưới dạng cuá»™c gá»i gián tiếp, nếu cần thiết"
+msgstr "Tạo ra câu lệnh gá»i dưới dạng cuá»™c gá»i gián tiếp, nếu cần thiết."
#: config/arm/arm.opt:163
msgid "Assume data segments are relative to text segment."
msgstr ""
#: config/arm/arm.opt:167
-#, fuzzy
-#| msgid "Specify the register to be used for PIC addressing"
msgid "Specify the register to be used for PIC addressing."
-msgstr "Ghi rõ thanh ghi cần sử dụng để đặt địa chỉ PIC"
+msgstr "Ghi rõ thanh ghi cần sử dụng để đặt địa chỉ PIC."
#: config/arm/arm.opt:171
-#, fuzzy
-#| msgid "Store function names in object code"
msgid "Store function names in object code."
-msgstr "Lưu các tên hàm trong mã đối tượng"
+msgstr "Lưu các tên hàm trong mã đối tượng."
#: config/arm/arm.opt:175
-#, fuzzy
-#| msgid "Permit scheduling of a function's prologue sequence"
msgid "Permit scheduling of a function's prologue sequence."
-msgstr "Cho phép định thá»i dãy Ä‘oạn mở đầu cá»§a má»™t hàm nào đó"
+msgstr "Cho phép định thá»i dãy Ä‘oạn mở đầu cá»§a má»™t hàm nào đó."
#: config/arm/arm.opt:179 config/rs6000/rs6000.opt:248
-#, fuzzy
-#| msgid "Do not load the PIC register in function prologues"
msgid "Do not load the PIC register in function prologues."
-msgstr "Äừng nạp thanh ghi PIC trong Ä‘oạn mở đầu hàm"
+msgstr "Äừng nạp thanh ghi PIC trong Ä‘oạn mở đầu hàm."
#: config/arm/arm.opt:186
-#, fuzzy
-#| msgid "Specify the minimum bit alignment of structures"
msgid "Specify the minimum bit alignment of structures."
-msgstr "Ghi rõ sự xếp hàng bit tối thiểu của cấu trúc"
+msgstr "Ghi rõ sự xếp hàng bit tối thiểu của cấu trúc."
#: config/arm/arm.opt:190
-#, fuzzy
-#| msgid "Generate code for Thumb state"
msgid "Generate code for Thumb state."
-msgstr "Tạo ra mã cho thống kê Thumb"
+msgstr "Tạo ra mã cho trạng thái Thumb."
#: config/arm/arm.opt:194
-#, fuzzy
-#| msgid "Support calls between Thumb and ARM instruction sets"
msgid "Support calls between Thumb and ARM instruction sets."
-msgstr "Há»— trợ cuá»™c gá»i giữa các tập hợp câu lệnh loại Thumb và ARM"
+msgstr "Há»— trợ cuá»™c gá»i giữa các tập hợp câu lệnh loại Thumb và ARM."
#: config/arm/arm.opt:198
-#, fuzzy
-#| msgid "Use given thread-local storage dialect"
msgid "Specify thread local storage scheme."
-msgstr "Sử dụng phương ngôn lưu theo nhánh cục bộ"
+msgstr "Chỉ định lược đồ lưu tuyến cục bộ."
#: config/arm/arm.opt:202
-#, fuzzy
-#| msgid "Specify how to access the thread pointer"
msgid "Specify how to access the thread pointer."
-msgstr "Ghi rõ cách truy cập đến hàm trỠmạch"
+msgstr "Ghi rõ cách truy cập đến con trỠtuyến trình."
#: config/arm/arm.opt:206
msgid "Valid arguments to -mtp=:"
msgstr "Äối số hợp lệ cho -mtp=:"
#: config/arm/arm.opt:219
-#, fuzzy
-#| msgid "Thumb: Generate (non-leaf) stack frames even if not needed"
msgid "Thumb: Generate (non-leaf) stack frames even if not needed."
-msgstr "Thumb: Tạo ra khung ngăn xếp (không phải loại lá) ngay cả khi không cần thiết"
+msgstr "Thumb: Tạo ra khung ngăn xếp (không phải loại lá) ngay cả khi không cần thiết."
#: config/arm/arm.opt:223
-#, fuzzy
-#| msgid "Thumb: Generate (leaf) stack frames even if not needed"
msgid "Thumb: Generate (leaf) stack frames even if not needed."
-msgstr "Thumb: Tạo ra khung ngăn xếp (loại lá) ngay cả khi không cần thiết"
+msgstr "Thumb: Tạo ra khung ngăn xếp (loại lá) ngay cả khi không cần thiết."
#: config/arm/arm.opt:227 config/mn10300/mn10300.opt:42
-#, fuzzy
-#| msgid "Tune code for the given processor"
msgid "Tune code for the given processor."
-msgstr "Äiá»u chỉnh mã cho bá»™ xá»­ lý đưa ra"
+msgstr "Äiá»u chỉnh mã cho bá»™ xá»­ lý đưa ra."
#: config/arm/arm.opt:231
msgid "Print CPU tuning information as comment in assembler file. This is"
msgstr ""
#: config/arm/arm.opt:242
-#, fuzzy
-#| msgid "Use Neon quad-word (rather than double-word) registers for vectorization"
msgid "Use Neon quad-word (rather than double-word) registers for vectorization."
-msgstr "Sử dụng thanh ghi từ bốn (thay cho từ đôi) Neon để véc-tơ hóa"
+msgstr "Sử dụng thanh ghi từ bốn (thay cho từ đôi) Neon để véc-tơ hóa."
#: config/arm/arm.opt:246
-#, fuzzy
-#| msgid "Use Neon double-word (rather than quad-word) registers for vectorization"
msgid "Use Neon double-word (rather than quad-word) registers for vectorization."
-msgstr "Sử dụng thanh ghi từ bốn (thay cho từ đôi) Neon để véc-tơ hóa"
+msgstr "Sử dụng thanh ghi từ kép (thay cho từ bốn) Neon để véc-tơ hóa."
#: config/arm/arm.opt:250
msgid "Only generate absolute relocations on word sized values."
@@ -11665,52 +9951,36 @@ msgstr ""
#: config/sparc/sparc.opt:30 config/sparc/sparc.opt:34
#: config/visium/visium.opt:37
-#, fuzzy
-#| msgid "Use hardware FP"
msgid "Use hardware FP."
-msgstr "Sử dụng dấu chấm động bằng phần cứng"
+msgstr "Sử dụng dấu chấm động bằng phần cứng."
#: config/sparc/sparc.opt:38 config/visium/visium.opt:41
-#, fuzzy
-#| msgid "Do not use hardware FP"
msgid "Do not use hardware FP."
-msgstr "Äừng sá»­ dụng dấu chấm động bằng phần cứng"
+msgstr "Äừng sá»­ dụng dấu chấm động bằng phần cứng."
#: config/sparc/sparc.opt:42
-#, fuzzy
-#| msgid "Use alternate register names"
msgid "Use flat register window model."
-msgstr "Sử dụng tên thanh ghi xen kẽ"
+msgstr "Sử dụng mô hình cửa sổ thanh ghi phẳng."
#: config/sparc/sparc.opt:46
-#, fuzzy
-#| msgid "Assume possible double misalignment"
msgid "Assume possible double misalignment."
-msgstr "Coi có thể bị sai đôi xếp hàng"
+msgstr "Coi có thể bị sai xếp hàng đôi."
#: config/sparc/sparc.opt:50
-#, fuzzy
-#| msgid "Use ABI reserved registers"
msgid "Use ABI reserved registers."
-msgstr "Sử dụng thanh ghi dành riêng cho ABI"
+msgstr "Sử dụng thanh ghi dành riêng cho ABI."
#: config/sparc/sparc.opt:54
-#, fuzzy
-#| msgid "Use hardware quad FP instructions"
msgid "Use hardware quad FP instructions."
-msgstr "Sử dụng câu lệnh loại bốn dấu chấm động phần cứng"
+msgstr "Sử dụng câu lệnh loại bốn dấu chấm động phần cứng."
#: config/sparc/sparc.opt:58
-#, fuzzy
-#| msgid "Do not use hardware quad fp instructions"
msgid "Do not use hardware quad fp instructions."
-msgstr "Äừng sá»­ dụng câu lệnh loại bốn dấu chấm động phần cứng"
+msgstr "Äừng sá»­ dụng câu lệnh loại bốn dấu chấm động phần cứng."
#: config/sparc/sparc.opt:62
-#, fuzzy
-#| msgid "Compile for V8+ ABI"
msgid "Compile for V8+ ABI."
-msgstr "Biên dịch cho ABI loại V8+"
+msgstr "Biên dịch cho ABI loại V8+."
#: config/sparc/sparc.opt:66
msgid "Use UltraSPARC Visual Instruction Set version 1.0 extensions."
@@ -11733,76 +10003,52 @@ msgid "Use UltraSPARC Fused Multiply-Add extensions."
msgstr ""
#: config/sparc/sparc.opt:86
-#, fuzzy
-#| msgid "Use hardware floating point instructions"
msgid "Use UltraSPARC Population-Count instruction."
-msgstr "Sử dụng các chỉ lệnh chấm động phần cứng"
+msgstr ""
#: config/sparc/sparc.opt:90
-#, fuzzy
-#| msgid "Pointers are 64-bit"
msgid "Pointers are 64-bit."
-msgstr "Hàm trỠlà 64-bit"
+msgstr "Con trỠlà 64-bit"
#: config/sparc/sparc.opt:94
-#, fuzzy
-#| msgid "Pointers are 32-bit"
msgid "Pointers are 32-bit."
-msgstr "Hàm trỠlà 32-bit"
+msgstr "Con trỠlà 32-bit."
#: config/sparc/sparc.opt:98
-#, fuzzy
-#| msgid "Use 64-bit ABI"
msgid "Use 64-bit ABI."
-msgstr "Sử dụng ABI 64-bit"
+msgstr "Sử dụng ABI 64-bit."
#: config/sparc/sparc.opt:102
-#, fuzzy
-#| msgid "Use 32-bit ABI"
msgid "Use 32-bit ABI."
-msgstr "Sử dụng ABI 32-bit"
+msgstr "Sử dụng ABI 32-bit."
#: config/sparc/sparc.opt:106
-#, fuzzy
-#| msgid "Use stack bias"
msgid "Use stack bias."
-msgstr "Sử dụng khuynh hướng vỠngăn xếp"
+msgstr "Sử dụng khuynh hướng vỠngăn xếp."
#: config/sparc/sparc.opt:110
-#, fuzzy
-#| msgid "Use structs on stronger alignment for double-word copies"
msgid "Use structs on stronger alignment for double-word copies."
-msgstr "Sử dụng cấu trúc khi xếp hàng mạnh hơn các bản sao từ đôi"
+msgstr "Sử dụng cấu trúc khi xếp hàng mạnh hơn các bản sao từ đôi."
#: config/sparc/sparc.opt:114
-#, fuzzy
-#| msgid "Optimize tail call instructions in assembler and linker"
msgid "Optimize tail call instructions in assembler and linker."
-msgstr "Tối ưu hóa các câu lệnh gá»i Ä‘uôi trong bá»™ dịch mã số và bá»™ liên kết"
+msgstr "Tối ưu hóa các câu lệnh gá»i Ä‘uôi trong bá»™ dịch mã số và bá»™ liên kết."
#: config/sparc/sparc.opt:118
-#, fuzzy
-#| msgid "Generate code for the supervisor mode (default)"
msgid "Do not generate code that can only run in supervisor mode (default)."
-msgstr "Tạo mã cho chế độ siêu giám sát (mặc định)"
+msgstr "Äừng tạo mã mà nó chỉ chạy được trong chế độ siêu giám sát (mặc định)."
#: config/sparc/sparc.opt:122 config/visium/visium.opt:45
-#, fuzzy
-#| msgid "Use features of and schedule code for given CPU"
msgid "Use features of and schedule code for given CPU."
-msgstr "Sá»­ dụng các tính năng cá»§a CPU đưa ra, và định thá»i mã cho CPU đó"
+msgstr "Sá»­ dụng các tính năng cá»§a CPU đưa ra, và định thá»i mã cho CPU đó."
#: config/sparc/sparc.opt:199
-#, fuzzy
-#| msgid "Use given SPARC-V9 code model"
msgid "Use given SPARC-V9 code model."
-msgstr "Sử dụng mẫu mã SPARC-V9 đưa ra"
+msgstr "Sử dụng mẫu mã SPARC-V9 đưa ra."
#: config/sparc/sparc.opt:203
-#, fuzzy
-#| msgid "Enable debug output"
msgid "Enable debug output."
-msgstr "Bật kết xuất gỡ rối"
+msgstr "Bật kết xuất gỡ rối."
#: config/sparc/sparc.opt:207
msgid "Enable strict 32-bit psABI struct return checking."
@@ -11821,16 +10067,12 @@ msgid "Specify the memory model in effect for the program."
msgstr ""
#: config/rs6000/darwin.opt:38 config/rs6000/sysv4.opt:141
-#, fuzzy
-#| msgid "Generate 64-bit code"
msgid "Generate 64-bit code."
-msgstr "Tạo ra mã 64-bit"
+msgstr "Tạo ra mã 64-bit."
#: config/rs6000/darwin.opt:42 config/rs6000/sysv4.opt:145
-#, fuzzy
-#| msgid "Generate 32-bit code"
msgid "Generate 32-bit code."
-msgstr "Tạo ra mã 32-bit"
+msgstr "Tạo ra mã 32-bit."
#: config/rs6000/rs6000-tables.opt:24
msgid "Known CPUs (for use with the -mcpu= and -mtune= options):"
@@ -11841,192 +10083,132 @@ msgid "Preserve the PowerPC 476's link stack by matching up a blr with the bcl/b
msgstr ""
#: config/rs6000/aix64.opt:24
-#, fuzzy
-#| msgid "Compile for 64-bit pointers"
msgid "Compile for 64-bit pointers."
-msgstr "Biên dịch cho hàm trỠloại 64-bit"
+msgstr "Biên dịch cho con trỠloại 64-bit."
#: config/rs6000/aix64.opt:28
-#, fuzzy
-#| msgid "Compile for 32-bit pointers"
msgid "Compile for 32-bit pointers."
-msgstr "Biên dịch cho hàm trỠloại 32-bit"
+msgstr "Biên dịch cho con trỠloại 32-bit."
#: config/rs6000/aix64.opt:32 config/rs6000/linux64.opt:28
-#, fuzzy
-#| msgid "Select code model"
msgid "Select code model."
-msgstr "Chá»n mô hình mã"
+msgstr "Chá»n mô hình mã."
#: config/rs6000/aix64.opt:49
-#, fuzzy
-#| msgid "Support message passing with the Parallel Environment"
msgid "Support message passing with the Parallel Environment."
-msgstr "Há»— trợ chức năng gá»­i thông Ä‘iệp qua vá»›i Môi trưá»ng Song song (Parellel Environment)"
+msgstr "Há»— trợ chức năng gá»­i thông Ä‘iệp qua vá»›i Môi trưá»ng Song song (Parellel Environment)."
#: config/rs6000/linux64.opt:24
-#, fuzzy
-#| msgid "Call mcount for profiling before a function prologue"
msgid "Call mcount for profiling before a function prologue."
-msgstr "Gá»i mcount để Ä‘o hiệu năng sá»­ dụng đẳng trước má»™t Ä‘oạn mở đầu hàm"
+msgstr "Gá»i mcount để Ä‘o hiệu năng sá»­ dụng đẳng trước má»™t Ä‘oạn mở đầu hàm."
#: config/rs6000/rs6000.opt:109
-#, fuzzy
-#| msgid "Use PowerPC-64 instruction set"
msgid "Use PowerPC-64 instruction set."
-msgstr "Sử dụng tập hợp câu lệnh PowerPC-64"
+msgstr "Sử dụng tập hợp câu lệnh PowerPC-64."
#: config/rs6000/rs6000.opt:113
-#, fuzzy
-#| msgid "Use PowerPC General Purpose group optional instructions"
msgid "Use PowerPC General Purpose group optional instructions."
-msgstr "Sá»­ dụng các câu lệnh tùy chá»n cá»§a nhóm General Purpose (thưá»ng dụng) PowerPC"
+msgstr "Sá»­ dụng các câu lệnh tùy chá»n cá»§a nhóm General Purpose (thưá»ng dụng) PowerPC."
#: config/rs6000/rs6000.opt:117
-#, fuzzy
-#| msgid "Use PowerPC Graphics group optional instructions"
msgid "Use PowerPC Graphics group optional instructions."
-msgstr "Sá»­ dụng các câu lệnh tùy chá»n cá»§a nhóm Graphics (đồ há»a) PowerPC"
+msgstr "Sá»­ dụng các câu lệnh tùy chá»n cá»§a nhóm Graphics (đồ há»a) PowerPC."
#: config/rs6000/rs6000.opt:121
-#, fuzzy
-#| msgid "Use PowerPC V2.01 single field mfcr instruction"
msgid "Use PowerPC V2.01 single field mfcr instruction."
-msgstr "Sá»­ dụng câu lệnh mfcr trưá»ng đơn PowerPC V2.01"
+msgstr "Sá»­ dụng câu lệnh mfcr trưá»ng đơn PowerPC V2.01."
#: config/rs6000/rs6000.opt:125
-#, fuzzy
-#| msgid "Use PowerPC V2.02 popcntb instruction"
msgid "Use PowerPC V2.02 popcntb instruction."
-msgstr "Sử dụng câu lệnh popcntb PowerPC V2.02"
+msgstr "Sử dụng câu lệnh popcntb PowerPC V2.02."
#: config/rs6000/rs6000.opt:129
-#, fuzzy
-#| msgid "Use PowerPC V2.02 floating point rounding instructions"
msgid "Use PowerPC V2.02 floating point rounding instructions."
-msgstr "Sử dụng câu lệnh làm tròn loại dấu chấm động PowerPC V2.02"
+msgstr "Sử dụng câu lệnh làm tròn loại dấu chấm động PowerPC V2.02."
#: config/rs6000/rs6000.opt:133
-#, fuzzy
-#| msgid "Use PowerPC V2.05 compare bytes instruction"
msgid "Use PowerPC V2.05 compare bytes instruction."
-msgstr "Sử dụng câu lệnh so sánh các byte PowerPC V2.05"
+msgstr "Sử dụng câu lệnh so sánh các byte PowerPC V2.05."
#: config/rs6000/rs6000.opt:137
-#, fuzzy
-#| msgid "Use extended PowerPC V2.05 move floating point to/from GPR instructions"
msgid "Use extended PowerPC V2.05 move floating point to/from GPR instructions."
-msgstr "Sá»­ dụng câu lệnh dá»i dấu chấm động đến/từ GPR PowerPC V2.05 mở rá»™ng"
+msgstr "Sá»­ dụng câu lệnh dá»i dấu chấm động đến/từ GPR PowerPC V2.05 mở rá»™ng."
#: config/rs6000/rs6000.opt:141
-#, fuzzy
-#| msgid "Use AltiVec instructions"
msgid "Use AltiVec instructions."
-msgstr "Sử dụng câu lệnh AltiVec"
+msgstr "Sử dụng câu lệnh AltiVec."
#: config/rs6000/rs6000.opt:145
-#, fuzzy
msgid "Generate Altivec instructions using little-endian element order."
msgstr "Tạo ra mã trong chế độ vá» cuối nhá»."
#: config/rs6000/rs6000.opt:149
-#, fuzzy
msgid "Generate Altivec instructions using big-endian element order."
msgstr "Tạo ra câu lệnh VRSAVE khi tạo ra mã AltiVec"
#: config/rs6000/rs6000.opt:153
-#, fuzzy
-#| msgid "Use decimal floating point instructions"
msgid "Use decimal floating point instructions."
-msgstr "Sử dụng câu lệnh dấu chấm động thập phân bằng phần cứng"
+msgstr "Sử dụng câu lệnh dấu chấm động thập phân bằng phần cứng."
#: config/rs6000/rs6000.opt:157
-#, fuzzy
-#| msgid "Use 4xx half-word multiply instructions"
msgid "Use 4xx half-word multiply instructions."
-msgstr "Sử dụng câu lệnh nhân nửa từ 4xx"
+msgstr "Sử dụng câu lệnh nhân nửa từ 4xx."
#: config/rs6000/rs6000.opt:161
-#, fuzzy
-#| msgid "Use 4xx string-search dlmzb instruction"
msgid "Use 4xx string-search dlmzb instruction."
-msgstr "Sử dụng câu lệnh dlmzb tìm kiếm chuỗi 4xx"
+msgstr "Sử dụng câu lệnh dlmzb tìm kiếm chuỗi 4xx."
#: config/rs6000/rs6000.opt:165
-#, fuzzy
-#| msgid "Generate load/store multiple instructions"
msgid "Generate load/store multiple instructions."
-msgstr "Tạo ra câu lệnh nạp/lưu nội"
+msgstr "Tạo ra câu lệnh đa nạp/lưu."
#: config/rs6000/rs6000.opt:169
-#, fuzzy
-#| msgid "Generate string instructions for block moves"
msgid "Generate string instructions for block moves."
-msgstr "Tạo ra câu lệnh chuỗi để di chuyển khối"
+msgstr "Tạo ra câu lệnh chuỗi để di chuyển khối."
#: config/rs6000/rs6000.opt:181
-#, fuzzy
-#| msgid "Use PowerPC V2.06 popcntd instruction"
msgid "Use PowerPC V2.06 popcntd instruction."
-msgstr "Sử dụng câu lệnh popcntd PowerPC V2.06"
+msgstr "Sử dụng câu lệnh popcntd PowerPC V2.06."
#: config/rs6000/rs6000.opt:185
msgid "Under -ffast-math, generate a FRIZ instruction for (double)(long long) conversions."
msgstr ""
#: config/rs6000/rs6000.opt:193
-#, fuzzy
-#| msgid "Use vector/scalar (VSX) instructions"
msgid "Use vector/scalar (VSX) instructions."
-msgstr "Sử dụng câu lệnh véc-tơ/vô_hướng (VSX)"
+msgstr "Sử dụng câu lệnh véc-tơ/vô_hướng (VSX)."
#: config/rs6000/rs6000.opt:240
-#, fuzzy
-#| msgid "Do not generate load/store with update instructions"
msgid "Do not generate load/store with update instructions."
-msgstr "Äừng tạo ra câu lệnh nạp/lưu vá»›i bản cập nhật"
+msgstr "Äừng tạo ra câu lệnh nạp/lưu vá»›i bản cập nhật."
#: config/rs6000/rs6000.opt:244
-#, fuzzy
-#| msgid "Generate load/store with update instructions"
msgid "Generate load/store with update instructions."
-msgstr "Tạo ra câu lệnh nạp/lưu với bản cập nhật"
+msgstr "Tạo ra câu lệnh nạp/lưu với bản cập nhật."
#: config/rs6000/rs6000.opt:252
-#, fuzzy
-#| msgid "Avoid generation of indexed load/store instructions when possible"
msgid "Avoid generation of indexed load/store instructions when possible."
-msgstr "Tránh sự tạo ra câu lệnh nạp/lưu phụ lục khi có thể"
+msgstr "Tránh sự tạo ra câu lệnh nạp/lưu phụ lục khi có thể."
#: config/rs6000/rs6000.opt:256
-#, fuzzy
-#| msgid "Mark __tls_get_addr calls with argument info"
msgid "Mark __tls_get_addr calls with argument info."
-msgstr "Äánh dấu cuá»™c gá»i __tls_get_addr bằng thông tin vỠđối số"
+msgstr "Äánh dấu cuá»™c gá»i __tls_get_addr bằng thông tin vỠđối số."
#: config/rs6000/rs6000.opt:263
-#, fuzzy
-#| msgid "Schedule the start and end of the procedure"
msgid "Schedule the start and end of the procedure."
-msgstr "Äịnh thá»i bắt đầu và kết thúc thá»§ tục"
+msgstr "Äịnh thá»i bắt đầu và kết thúc thá»§ tục."
#: config/rs6000/rs6000.opt:267
-#, fuzzy
-#| msgid "Return all structures in memory (AIX default)"
msgid "Return all structures in memory (AIX default)."
-msgstr "Trả lại tất cả các cấu trúc trong vùng nhớ (AIX mặc định)"
+msgstr "Trả lại tất cả các cấu trúc trong vùng nhớ (AIX mặc định)."
#: config/rs6000/rs6000.opt:271
-#, fuzzy
-#| msgid "Return small structures in registers (SVR4 default)"
msgid "Return small structures in registers (SVR4 default)."
-msgstr "Trả lại các cấu trúc nhỠtrong thanh ghi (SVR4 mặc định)"
+msgstr "Trả lại các cấu trúc nhỠtrong thanh ghi (SVR4 mặc định)."
#: config/rs6000/rs6000.opt:275
-#, fuzzy
-#| msgid "Conform more closely to IBM XLC semantics"
msgid "Conform more closely to IBM XLC semantics."
-msgstr "Làm cho hợp hơn với cú pháp XLC của IBM"
+msgstr "Làm cho hợp hơn với cú pháp XLC của IBM."
#: config/rs6000/rs6000.opt:279 config/rs6000/rs6000.opt:283
msgid "Generate software reciprocal divide and square root for better throughput."
@@ -12037,146 +10219,100 @@ msgid "Assume that the reciprocal estimate instructions provide more accuracy."
msgstr ""
#: config/rs6000/rs6000.opt:291
-#, fuzzy
-#| msgid "Do not place floating point constants in TOC"
msgid "Do not place floating point constants in TOC."
-msgstr "Äừng để vào TOC hằng số dấu chấm động"
+msgstr "Äừng để vào TOC hằng số dấu chấm động."
#: config/rs6000/rs6000.opt:295
-#, fuzzy
-#| msgid "Place floating point constants in TOC"
msgid "Place floating point constants in TOC."
-msgstr "Äể vào TOC hằng số dấu chấm động"
+msgstr "Äể vào TOC hằng số dấu chấm động."
#: config/rs6000/rs6000.opt:299
-#, fuzzy
-#| msgid "Do not place symbol+offset constants in TOC"
msgid "Do not place symbol+offset constants in TOC."
-msgstr "Äừng để vào TOC hằng số loại ký_hiệu+hiệu_số"
+msgstr "Äừng để vào TOC hằng số loại ký_hiệu+hiệu_số."
#: config/rs6000/rs6000.opt:303
-#, fuzzy
-#| msgid "Place symbol+offset constants in TOC"
msgid "Place symbol+offset constants in TOC."
-msgstr "Äể vào TOC hằng số loại ký_hiệu+hiệu_số"
+msgstr "Äể vào TOC hằng số loại ký_hiệu+hiệu_số."
#: config/rs6000/rs6000.opt:314
-#, fuzzy
-#| msgid "Use only one TOC entry per procedure"
msgid "Use only one TOC entry per procedure."
-msgstr "Sử dụng chỉ một mục nhập TOC từng thủ tục"
+msgstr "Sử dụng chỉ một mục nhập TOC từng thủ tục."
#: config/rs6000/rs6000.opt:318
-#, fuzzy
-#| msgid "Put everything in the regular TOC"
msgid "Put everything in the regular TOC."
-msgstr "Äể tất cả vào TOC bình thưá»ng"
+msgstr "Äể tất cả vào TOC bình thưá»ng."
#: config/rs6000/rs6000.opt:322
-#, fuzzy
-#| msgid "Generate VRSAVE instructions when generating AltiVec code"
msgid "Generate VRSAVE instructions when generating AltiVec code."
-msgstr "Tạo ra câu lệnh VRSAVE khi tạo ra mã AltiVec"
+msgstr "Tạo ra câu lệnh VRSAVE khi tạo ra mã AltiVec."
#: config/rs6000/rs6000.opt:326
-#, fuzzy
-#| msgid "Deprecated option. Use -mno-vrsave instead"
msgid "Deprecated option. Use -mno-vrsave instead."
-msgstr "Tùy chá»n bị phản đối. Dùng -mno-vrsave để thay thế"
+msgstr "Tùy chá»n đã lạc hậu. Dùng -mno-vrsave để thay thế."
#: config/rs6000/rs6000.opt:330
-#, fuzzy
-#| msgid "Deprecated option. Use -mvrsave instead"
msgid "Deprecated option. Use -mvrsave instead."
-msgstr "Tùy chá»n bị phản đối. Dùng -mvrsave để thay thế"
+msgstr "Tùy chá»n đã lạc hậu. Dùng -mvrsave để thay thế."
#: config/rs6000/rs6000.opt:334
msgid "Specify how many bytes should be moved inline before calling out to memcpy/memmove."
msgstr ""
#: config/rs6000/rs6000.opt:338
-#, fuzzy
-#| msgid "Generate isel instructions"
msgid "Generate isel instructions."
-msgstr "Tạo ra câu lệnh isel"
+msgstr "Tạo ra câu lệnh isel."
#: config/rs6000/rs6000.opt:342
-#, fuzzy
-#| msgid "Deprecated option. Use -mno-isel instead"
msgid "Deprecated option. Use -mno-isel instead."
-msgstr "Tùy chá»n bị phản đối. Dùng -mno để thay thế"
+msgstr "Tùy chá»n đã lạc hậu. Dùng -mno-isel để thay thế."
#: config/rs6000/rs6000.opt:346
-#, fuzzy
-#| msgid "Deprecated option. Use -misel instead"
msgid "Deprecated option. Use -misel instead."
-msgstr "Tùy chá»n bị phản đối. Dùng -misel để thay thế"
+msgstr "Tùy chá»n đã lạc hậu. Dùng -misel để thay thế."
#: config/rs6000/rs6000.opt:350
-#, fuzzy
-#| msgid "Generate SPE SIMD instructions on E500"
msgid "Generate SPE SIMD instructions on E500."
-msgstr "Tạo ra câu lệnh SIMD SPE trong E500"
+msgstr "Tạo ra câu lệnh SIMD SPE trong E500."
#: config/rs6000/rs6000.opt:354
-#, fuzzy
-#| msgid "Generate PPC750CL paired-single instructions"
msgid "Generate PPC750CL paired-single instructions."
-msgstr "Tạo ra câu lệnh đôi-đơn PPC750CL"
+msgstr "Tạo ra câu lệnh đôi-đơn PPC750CL."
#: config/rs6000/rs6000.opt:358
-#, fuzzy
-#| msgid "Deprecated option. Use -mno-spe instead"
msgid "Deprecated option. Use -mno-spe instead."
-msgstr "Tùy chá»n bị phản đối. Dùng -mno-spe để thay thế"
+msgstr "Tùy chá»n đã lạc hậu. Dùng -mno-spe để thay thế."
#: config/rs6000/rs6000.opt:362
-#, fuzzy
-#| msgid "Deprecated option. Use -mspe instead"
msgid "Deprecated option. Use -mspe instead."
-msgstr "Tùy chá»n bị phản đối. Dùng -mspe để thay thế"
+msgstr "Tùy chá»n đã lạc hậu. Dùng -mspe để thay thế."
#: config/rs6000/rs6000.opt:366
-#, fuzzy
-#| msgid "-mdebug=\tEnable debug output"
msgid "-mdebug=\tEnable debug output."
-msgstr "-mdebug=\tBật kết xuất gỡ rối"
+msgstr "-mdebug=\tBật kết xuất gỡ rối."
#: config/rs6000/rs6000.opt:370
-#, fuzzy
-#| msgid "Use the AltiVec ABI extensions"
msgid "Use the AltiVec ABI extensions."
-msgstr "Dùng lệnh mở rộng AltiVec ABI"
+msgstr "Dùng lệnh mở rộng AltiVec ABI."
#: config/rs6000/rs6000.opt:374
-#, fuzzy
-#| msgid "Do not use the AltiVec ABI extensions"
msgid "Do not use the AltiVec ABI extensions."
-msgstr "Không dùng lệnh mở rộng AltiVec ABI"
+msgstr "Không dùng lệnh mở rộng AltiVec ABI."
#: config/rs6000/rs6000.opt:378
-#, fuzzy
-#| msgid "Use the SPE ABI extensions"
msgid "Use the SPE ABI extensions."
-msgstr "Dùng lệnh mở rộng SPE ABI"
+msgstr "Dùng lệnh mở rộng SPE ABI."
#: config/rs6000/rs6000.opt:382
-#, fuzzy
-#| msgid "Do not use the SPE ABI extensions"
msgid "Do not use the SPE ABI extensions."
-msgstr "Không dùng lệnh mở rộng SPE ABI"
+msgstr "Không dùng lệnh mở rộng SPE ABI."
#: config/rs6000/rs6000.opt:386
-#, fuzzy
-#| msgid "Use the ELFv1 ABI"
msgid "Use the ELFv1 ABI."
-msgstr "Sử dụng ELFv1 ABI"
+msgstr "Sử dụng ELFv1 ABI."
#: config/rs6000/rs6000.opt:390
-#, fuzzy
-#| msgid "Use the ELFv2 ABI"
msgid "Use the ELFv2 ABI."
-msgstr "Sử dụng ELFv2 ABI"
+msgstr "Sử dụng ELFv2 ABI."
#: config/rs6000/rs6000.opt:397
msgid "using darwin64 ABI"
@@ -12195,114 +10331,80 @@ msgid "using IBM extended precision long double"
msgstr "dùng phần mở rộng số nguyên chính đôi IBM"
#: config/rs6000/rs6000.opt:410
-#, fuzzy
-#| msgid "-mcpu=\tUse features of and schedule code for given CPU"
msgid "-mcpu=\tUse features of and schedule code for given CPU."
-msgstr "-mcpu=\tSá»­ dụng các tính năng cá»§a CPU đưa ra, và định thá»i mã cho CPU đó"
+msgstr "-mcpu=\tSá»­ dụng các tính năng cá»§a CPU đưa ra, và định thá»i mã cho CPU đó."
#: config/rs6000/rs6000.opt:414
-#, fuzzy
-#| msgid "-mtune=\tSchedule code for given CPU"
msgid "-mtune=\tSchedule code for given CPU."
-msgstr "-mtune=\tÄịnh thá»i mã cho CPU đưa ra"
+msgstr "-mtune=\tÄịnh thá»i mã cho CPU đưa ra."
#: config/rs6000/rs6000.opt:418
-#, fuzzy
-#| msgid "-mtraceback=\tSelect full, part, or no traceback table"
msgid "-mtraceback=\tSelect full, part, or no traceback table."
-msgstr "-mtraceback=\tChá»n bảng vét lùi đầy đủ (full), bá»™ phận (part) hoặc không có (none)"
+msgstr "-mtraceback=\tChá»n bảng vét lùi đầy đủ (full), bá»™ phận (part) hoặc không có (none)."
#: config/rs6000/rs6000.opt:434
-#, fuzzy
-#| msgid "Avoid all range limits on call instructions"
msgid "Avoid all range limits on call instructions."
-msgstr "Tránh giá»›i hạn phạm vi nào trong câu lệnh gá»i"
+msgstr "Tránh giá»›i hạn phạm vi nào trong câu lệnh gá»i."
#: config/rs6000/rs6000.opt:438
-#, fuzzy
-#| msgid "Generate Cell microcode"
msgid "Generate Cell microcode."
-msgstr "Tạo ra mã vi Cell"
+msgstr "Tạo ra mã vi Cell."
#: config/rs6000/rs6000.opt:442
-#, fuzzy
-#| msgid "Warn when a Cell microcoded instruction is emitted"
msgid "Warn when a Cell microcoded instruction is emitted."
-msgstr "Cảnh báo khi xuất một câu lệnh mã vi Cell"
+msgstr "Cảnh báo khi xuất một câu lệnh mã vi Cell."
#: config/rs6000/rs6000.opt:446
-#, fuzzy
-#| msgid "Warn about deprecated 'vector long ...' AltiVec type usage"
msgid "Warn about deprecated 'vector long ...' AltiVec type usage."
-msgstr "Cảnh báo vá» sá»­ dụng loại AltiVec “vector long …â€"
+msgstr "Cảnh báo vá» sá»­ dụng loại AltiVec “vector long …â€."
#: config/rs6000/rs6000.opt:450
-#, fuzzy
-#| msgid "-mfloat-gprs=\tSelect GPR floating point method"
msgid "-mfloat-gprs=\tSelect GPR floating point method."
-msgstr "-mfloat-gprs=\tChá»n phương pháp dấu chấm động GPR"
+msgstr "-mfloat-gprs=\tChá»n phương pháp dấu chấm động GPR."
#: config/rs6000/rs6000.opt:454
msgid "Valid arguments to -mfloat-gprs=:"
msgstr "Äối số hợp lệ cho -mfloat-gprs=:"
#: config/rs6000/rs6000.opt:470
-#, fuzzy
-#| msgid "-mlong-double-<n>\tSpecify size of long double (64 or 128 bits)"
msgid "-mlong-double-<n>\tSpecify size of long double (64 or 128 bits)."
-msgstr "-mlong-double-<số>\tGhi rõ kích cỡ của đôi dài (64 hay 128 bit)"
+msgstr "-mlong-double-<số>\tGhi rõ kích cỡ của đôi dài (64 hay 128 bit)."
#: config/rs6000/rs6000.opt:478
-#, fuzzy
-#| msgid "Determine which dependences between insns are considered costly"
msgid "Determine which dependences between insns are considered costly."
-msgstr "Quyết định những quan hệ phụ thuộc nào giữa các câu lệnh thì được thấy có giá cao"
+msgstr "Quyết định những quan hệ phụ thuộc nào giữa các câu lệnh thì được thấy có giá cao."
#: config/rs6000/rs6000.opt:482
-#, fuzzy
-#| msgid "Specify which post scheduling nop insertion scheme to apply"
msgid "Specify which post scheduling nop insertion scheme to apply."
-msgstr "Ghi rõ lược đồ chèn nop hậu định thá»i nào cần áp dụng"
+msgstr "Ghi rõ lược đồ chèn nop hậu định thá»i nào cần áp dụng."
#: config/rs6000/rs6000.opt:486
-#, fuzzy
-#| msgid "Specify alignment of structure fields default/natural"
msgid "Specify alignment of structure fields default/natural."
-msgstr "Ghi rõ cách xếp hàng các trưá»ng cấu trúc: mặc định (default) hay tá»± nhiên (natural)"
+msgstr "Ghi rõ cách xếp hàng các trưá»ng cấu trúc: mặc định (default) hay tá»± nhiên (natural)."
#: config/rs6000/rs6000.opt:490
msgid "Valid arguments to -malign-:"
msgstr "Äối số hợp lệ cho -malign-:"
#: config/rs6000/rs6000.opt:500
-#, fuzzy
-#| msgid "Specify scheduling priority for dispatch slot restricted insns"
msgid "Specify scheduling priority for dispatch slot restricted insns."
-msgstr "Ghi rõ mức ưu tiên định thá»i cho câu lệnh bị hạn chế khe gá»­i Ä‘i"
+msgstr "Ghi rõ mức ưu tiên định thá»i cho câu lệnh bị hạn chế khe gá»­i Ä‘i."
#: config/rs6000/rs6000.opt:504
-#, fuzzy
-#| msgid "Single-precision floating point unit"
msgid "Single-precision floating point unit."
-msgstr "ÄÆ¡n vị dấu chấm động chính xác đơn"
+msgstr "ÄÆ¡n vị dấu chấm động chính xác đơn."
#: config/rs6000/rs6000.opt:508
-#, fuzzy
-#| msgid "Double-precision floating point unit"
msgid "Double-precision floating point unit."
-msgstr "ÄÆ¡n vị dấu chấm động chính xác đôi"
+msgstr "ÄÆ¡n vị dấu chấm động chính xác đôi."
#: config/rs6000/rs6000.opt:512
-#, fuzzy
-#| msgid "Floating point unit does not support divide & sqrt"
msgid "Floating point unit does not support divide & sqrt."
-msgstr "ÄÆ¡n vị dấu chấm động không há»— trợ phép chia và phép tính căn bậc hai"
+msgstr "ÄÆ¡n vị dấu chấm động không há»— trợ phép chia và phép tính căn bậc hai."
#: config/rs6000/rs6000.opt:516
-#, fuzzy
-#| msgid "-mfpu=\tSpecify FP (sp, dp, sp-lite, dp-lite) (implies -mxilinx-fpu)"
msgid "-mfpu=\tSpecify FP (sp, dp, sp-lite, dp-lite) (implies -mxilinx-fpu)."
-msgstr "-mfpu=\tGhi rõ dấu chấm động (sp, dp, sp-lite, dp-lite) (cũng ngụ ý -mxilinx-fpu)"
+msgstr "-mfpu=\tGhi rõ dấu chấm động (sp, dp, sp-lite, dp-lite) (cũng ngụ ý -mxilinx-fpu)."
#: config/rs6000/rs6000.opt:538
msgid "Specify Xilinx FPU."
@@ -12325,32 +10427,28 @@ msgid "Fuse certain integer operations together for better performance on power8
msgstr ""
#: config/rs6000/rs6000.opt:558
-#, fuzzy
msgid "Allow sign extension in fusion operations."
-msgstr "Äích xếp hàng cá»§a các thao tác chuá»—i"
+msgstr ""
#: config/rs6000/rs6000.opt:562
msgid "Use/do not use vector and scalar instructions added in ISA 2.07."
msgstr ""
#: config/rs6000/rs6000.opt:566
-#, fuzzy
msgid "Use ISA 2.07 Category:Vector.AES and Category:Vector.SHA2 instructions."
-msgstr "Sử dụng câu lệnh véc-tơ/vô_hướng (VSX)"
+msgstr "Sử dụng câu lệnh ISA 2.07 Category:Vector.AES và Category:Vector.SHA2."
#: config/rs6000/rs6000.opt:570
msgid "Use ISA 2.07 direct move between GPR & VSX register instructions."
msgstr ""
#: config/rs6000/rs6000.opt:574
-#, fuzzy
msgid "Use ISA 2.07 transactional memory (HTM) instructions."
-msgstr "Sử dụng câu lệnh véc-tơ/vô_hướng (VSX)"
+msgstr ""
#: config/rs6000/rs6000.opt:578
-#, fuzzy
msgid "Generate the quad word memory instructions (lq/stq)."
-msgstr "Tạo ra câu lệnh nạp/lưu nội"
+msgstr ""
#: config/rs6000/rs6000.opt:582
msgid "Generate the quad word memory atomic instructions (lqarx/stqcx)."
@@ -12393,382 +10491,266 @@ msgid "Fuse medium/large code model toc references with the memory instruction."
msgstr ""
#: config/rs6000/rs6000.opt:626
-#, fuzzy
-#| msgid "Generate isel instructions"
msgid "Generate the integer modulo instructions."
-msgstr "Tạo ra câu lệnh isel"
+msgstr ""
#: config/rs6000/rs6000.opt:630
msgid "Enable/disable IEEE 128-bit floating point via the __float128 keyword."
msgstr ""
#: config/rs6000/rs6000.opt:634
-#, fuzzy
-#| msgid "Use decimal floating point instructions"
msgid "Enable/disable using IEEE 128-bit floating point instructions."
-msgstr "Sử dụng câu lệnh dấu chấm động thập phân bằng phần cứng"
+msgstr "Bật/tắt sử dụng câu lệnh dấu chấm động thập phân 128-bit IEEE."
#: config/rs6000/rs6000.opt:638
msgid "Enable/disable default conversions between __float128 & long double."
msgstr ""
#: config/rs6000/sysv4.opt:24
-#, fuzzy
-#| msgid "Select ABI calling convention"
msgid "Select ABI calling convention."
-msgstr "Chá»n quy ước gá»i ABI"
+msgstr "Chá»n quy ước gá»i ABI."
#: config/rs6000/sysv4.opt:28 config/c6x/c6x.opt:42
-#, fuzzy
-#| msgid "Select method for sdata handling"
msgid "Select method for sdata handling."
-msgstr "Chá»n phương pháp để quản lý sdata"
+msgstr "Chá»n phương pháp để quản lý sdata."
#: config/rs6000/sysv4.opt:48 config/rs6000/sysv4.opt:52
-#, fuzzy
-#| msgid "Align to the base type of the bit-field"
msgid "Align to the base type of the bit-field."
-msgstr "Xếp hàng theo loại cÆ¡ bản cá»§a trưá»ng bit"
+msgstr "Xếp hàng theo loại cÆ¡ bản cá»§a trưá»ng bit."
#: config/rs6000/sysv4.opt:57 config/rs6000/sysv4.opt:61
-#, fuzzy
-#| msgid "Produce code relocatable at runtime"
msgid "Produce code relocatable at runtime."
-msgstr "Xuất mã có thể định vị lại vào lúc chạy"
+msgstr "Xuất mã có thể định vị lại vào lúc chạy."
#: config/rs6000/sysv4.opt:65 config/rs6000/sysv4.opt:69
-#, fuzzy
-#| msgid "Produce little endian code"
msgid "Produce little endian code."
-msgstr "Xuất mã vá» cuối nhá»"
+msgstr "Xuất mã vá» cuối nhá»."
#: config/rs6000/sysv4.opt:73 config/rs6000/sysv4.opt:77
-#, fuzzy
-#| msgid "Produce big endian code"
msgid "Produce big endian code."
-msgstr "Xuất mã vỠcuối lớn"
+msgstr "Xuất mã vỠcuối lớn."
#: 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
-#, fuzzy
-#| msgid "no description yet"
msgid "no description yet."
-msgstr "chưa có mô tả"
+msgstr "chưa có mô tả gì."
#: config/rs6000/sysv4.opt:90
-#, fuzzy
-#| msgid "Assume all variable arg functions are prototyped"
msgid "Assume all variable arg functions are prototyped."
-msgstr "Gia sá»­ là má»i biến đối số biến đổi Ä‘á»u được nguyên mẫu"
+msgstr "Giả sá»­ là má»i biến đối số biến đổi Ä‘á»u được nguyên mẫu."
#: config/rs6000/sysv4.opt:99
-#, fuzzy
-#| msgid "Use EABI"
msgid "Use EABI."
-msgstr "Sử dụng EABI"
+msgstr "Sử dụng EABI."
#: config/rs6000/sysv4.opt:103
-#, fuzzy
-#| msgid "Allow bit-fields to cross word boundaries"
msgid "Allow bit-fields to cross word boundaries."
-msgstr "Cho phép trưá»ng bit Ä‘i qua biên giá»›i từ"
+msgstr "Cho phép trưá»ng bit Ä‘i qua biên giá»›i từ."
#: config/rs6000/sysv4.opt:107
-#, fuzzy
-#| msgid "Use alternate register names"
msgid "Use alternate register names."
-msgstr "Sử dụng tên thanh ghi xen kẽ"
+msgstr "Sử dụng tên thanh ghi xen kẽ."
#: config/rs6000/sysv4.opt:113
-#, fuzzy
-#| msgid "Use default method for sdata handling"
msgid "Use default method for sdata handling."
-msgstr "Sử dụng phương pháp mặc định để quản lý sdata"
+msgstr "Sử dụng phương pháp mặc định để quản lý sdata."
#: config/rs6000/sysv4.opt:117
-#, fuzzy
-#| msgid "Link with libsim.a, libc.a and sim-crt0.o"
msgid "Link with libsim.a, libc.a and sim-crt0.o."
-msgstr "Liên kết với libsim.a, libc.a và sim-crt0.o"
+msgstr "Liên kết với libsim.a, libc.a và sim-crt0.o."
#: config/rs6000/sysv4.opt:121
-#, fuzzy
-#| msgid "Link with libads.a, libc.a and crt0.o"
msgid "Link with libads.a, libc.a and crt0.o."
-msgstr "Liên kết với libads.a, libc.a và crt0.o"
+msgstr "Liên kết với libads.a, libc.a và crt0.o."
#: config/rs6000/sysv4.opt:125
-#, fuzzy
-#| msgid "Link with libyk.a, libc.a and crt0.o"
msgid "Link with libyk.a, libc.a and crt0.o."
-msgstr "Liên kết với libyk.a, libc.a và crt0.o"
+msgstr "Liên kết với libyk.a, libc.a và crt0.o."
#: config/rs6000/sysv4.opt:129
-#, fuzzy
-#| msgid "Link with libmvme.a, libc.a and crt0.o"
msgid "Link with libmvme.a, libc.a and crt0.o."
-msgstr "Liên kết với libmvme.a, libc.a và crt0.o"
+msgstr "Liên kết với libmvme.a, libc.a và crt0.o."
#: config/rs6000/sysv4.opt:133
-#, fuzzy
-#| msgid "Set the PPC_EMB bit in the ELF flags header"
msgid "Set the PPC_EMB bit in the ELF flags header."
-msgstr "Äặt bit PPC_EMB trong phần đầu cá» ELF"
+msgstr "Äặt bit PPC_EMB trong phần đầu cá» ELF."
#: config/rs6000/sysv4.opt:153
-#, fuzzy
-#| msgid "Generate code to use a non-exec PLT and GOT"
msgid "Generate code to use a non-exec PLT and GOT."
-msgstr "Tạo ra mã để sử dụng một PLT và GOT không thực hiện"
+msgstr "Tạo ra mã để sử dụng một PLT và GOT không thực hiện."
#: config/rs6000/sysv4.opt:157
-#, fuzzy
-#| msgid "Generate code for old exec BSS PLT"
msgid "Generate code for old exec BSS PLT."
-msgstr "Tạo ra mã cho BSS PLT thực hiện cũ"
+msgstr "Tạo ra mã cho BSS PLT thực hiện cũ."
#: config/alpha/alpha.opt:27
-#, fuzzy
-#| msgid "Use fp registers"
msgid "Use fp registers."
-msgstr "Sử dụng thanh ghi dấu chấm động"
+msgstr "Sử dụng thanh ghi dấu chấm động."
#: config/alpha/alpha.opt:35
-#, fuzzy
-#| msgid "Request IEEE-conformant math library routines (OSF/1)"
msgid "Request IEEE-conformant math library routines (OSF/1)."
-msgstr "Yêu cầu hàm thư viện toán há»c thích hợp vá»›i IEEE (OSF/1)"
+msgstr "Yêu cầu hàm thư viện toán há»c thích hợp vá»›i IEEE (OSF/1)."
#: config/alpha/alpha.opt:39
-#, fuzzy
-#| msgid "Emit IEEE-conformant code, without inexact exceptions"
msgid "Emit IEEE-conformant code, without inexact exceptions."
-msgstr "Xuất mã thích hợp với IEEE mà không có ngoại lệ không chính xác"
+msgstr "Xuất mã thích hợp với IEEE mà không có ngoại lệ không chính xác."
#: config/alpha/alpha.opt:46
-#, fuzzy
-#| msgid "Do not emit complex integer constants to read-only memory"
msgid "Do not emit complex integer constants to read-only memory."
-msgstr "Äừng xuất hằng số nguyên phức tạp vào vùng nhá»› chỉ Ä‘á»c"
+msgstr "Äừng xuất hằng số nguyên phức tạp vào vùng nhá»› chỉ Ä‘á»c."
#: config/alpha/alpha.opt:50
-#, fuzzy
-#| msgid "Use VAX fp"
msgid "Use VAX fp."
-msgstr "Sử dụng dấu chấm động loại VAX"
+msgstr "Sử dụng dấu chấm động loại VAX."
#: config/alpha/alpha.opt:54
-#, fuzzy
-#| msgid "Do not use VAX fp"
msgid "Do not use VAX fp."
-msgstr "Äừng sá»­ dụng dấu chấm động loại VAX"
+msgstr "Äừng sá»­ dụng dấu chấm động loại VAX."
#: config/alpha/alpha.opt:58
-#, fuzzy
-#| msgid "Emit code for the byte/word ISA extension"
msgid "Emit code for the byte/word ISA extension."
-msgstr "Xuất mã cho phần mở rộng ISA byte/từ"
+msgstr "Xuất mã cho phần mở rộng ISA byte/từ."
#: config/alpha/alpha.opt:62
-#, fuzzy
-#| msgid "Emit code for the motion video ISA extension"
msgid "Emit code for the motion video ISA extension."
-msgstr "Xuất mã cho phần mở rộng ISA ảnh động di chuyển"
+msgstr "Xuất mã cho phần mở rộng ISA ảnh động di chuyển."
#: config/alpha/alpha.opt:66
-#, fuzzy
-#| msgid "Emit code for the fp move and sqrt ISA extension"
msgid "Emit code for the fp move and sqrt ISA extension."
-msgstr "Xuất mã cho phần mở rộng ISA dấu chấm động vỠdi chuyển v tính căn bậc hai"
+msgstr "Xuất mã cho phần mở rộng ISA dấu chấm động vỠdi chuyển và tính căn bậc hai."
#: config/alpha/alpha.opt:70
-#, fuzzy
-#| msgid "Emit code for the counting ISA extension"
msgid "Emit code for the counting ISA extension."
-msgstr "Xuất mã cho phần mở rộng ISA đếm"
+msgstr "Xuất mã cho phần mở rộng ISA đếm."
#: config/alpha/alpha.opt:74
-#, fuzzy
-#| msgid "Emit code using explicit relocation directives"
msgid "Emit code using explicit relocation directives."
-msgstr "Xuất mã dùng chỉ thị định vị lại dứt khoát"
+msgstr "Xuất mã dùng chỉ thị định vị lại dứt khoát."
#: config/alpha/alpha.opt:78
-#, fuzzy
-#| msgid "Emit 16-bit relocations to the small data areas"
msgid "Emit 16-bit relocations to the small data areas."
-msgstr "Xuất vào vùng dữ liệu nhỠsự định vị lại 16-bit"
+msgstr "Xuất vào vùng dữ liệu nhỠsự định vị lại 16-bit."
#: config/alpha/alpha.opt:82
-#, fuzzy
-#| msgid "Emit 32-bit relocations to the small data areas"
msgid "Emit 32-bit relocations to the small data areas."
-msgstr "Xuất vào vùng dữ liệu nhỠsự định vị lại 32-bit"
+msgstr "Xuất vào vùng dữ liệu nhỠsự định vị lại 32-bit."
#: config/alpha/alpha.opt:86
-#, fuzzy
-#| msgid "Emit direct branches to local functions"
msgid "Emit direct branches to local functions."
-msgstr "Xuất nhánh trực tiếp tới hàm cục bộ"
+msgstr "Xuất nhánh trực tiếp tới hàm cục bộ."
#: config/alpha/alpha.opt:90
-#, fuzzy
-#| msgid "Emit indirect branches to local functions"
msgid "Emit indirect branches to local functions."
-msgstr "Xuất nhánh gián tiếp tới hàm cục bộ"
+msgstr "Xuất nhánh gián tiếp tới hàm cục bộ."
#: config/alpha/alpha.opt:94
-#, fuzzy
-#| msgid "Emit rdval instead of rduniq for thread pointer"
msgid "Emit rdval instead of rduniq for thread pointer."
-msgstr "Äối vá»›i hàm trá» nhánh thì xuất rdval thay cho rduniq"
+msgstr "Äối vá»›i con trá» tuyến trình thì xuất rdval thay cho rduniq."
#: config/alpha/alpha.opt:106
-#, fuzzy
-#| msgid "Use features of and schedule given CPU"
msgid "Use features of and schedule given CPU."
-msgstr "Sá»­ dụng các tính năng cá»§a CPU đưa ra, và định thá»i CPU đó"
+msgstr "Sá»­ dụng các tính năng cá»§a và định thá»i CPU đó."
#: config/alpha/alpha.opt:110
-#, fuzzy
-#| msgid "Schedule given CPU"
msgid "Schedule given CPU."
-msgstr "Äịnh thá»i CPU đưa ra"
+msgstr "Äịnh thá»i CPU đưa ra."
#: config/alpha/alpha.opt:114
-#, fuzzy
-#| msgid "Control the generated fp rounding mode"
msgid "Control the generated fp rounding mode."
-msgstr "Äiá»u khiển chế độ làm tròn dấu chấm động đã tạo ra"
+msgstr "Äiá»u khiển chế độ làm tròn dấu chấm động đã tạo ra."
#: config/alpha/alpha.opt:118
-#, fuzzy
-#| msgid "Control the IEEE trap mode"
msgid "Control the IEEE trap mode."
-msgstr "Äiá»u khiển chế độ đặt bẫy IEEE"
+msgstr "Äiá»u khiển chế độ đặt bẫy IEEE."
#: config/alpha/alpha.opt:122
-#, fuzzy
-#| msgid "Control the precision given to fp exceptions"
msgid "Control the precision given to fp exceptions."
-msgstr "Äiá»u khiển độ chính xác đưa ra cho ngoại lệ vá» dấu chấm động"
+msgstr "Äiá»u khiển độ chính xác đưa ra cho ngoại lệ vá» dấu chấm động."
#: config/alpha/alpha.opt:126
-#, fuzzy
-#| msgid "Tune expected memory latency"
msgid "Tune expected memory latency."
-msgstr "Äiá»u chỉnh độ ngấm ngầm vùng nhá»› mong đợi"
+msgstr "Äiá»u chỉnh độ ngấm ngầm vùng nhá»› mong đợi."
#: config/tilepro/tilepro.opt:23
msgid "Compile with 32 bit longs and pointers, which is the only supported"
msgstr ""
#: config/tilepro/tilepro.opt:28 config/tilegx/tilegx.opt:26
-#, fuzzy
-#| msgid "-mcpu=CPU\tUse features of and schedule code for given CPU"
msgid "-mcpu=CPU\tUse features of and schedule code for given CPU."
-msgstr "-mcpu=CPU\tSử dụng các tính năng và lịch biểu của CPU đưa ra"
+msgstr "-mcpu=CPU\tSử dụng các tính năng và lịch biểu của CPU đưa ra."
#: config/tilepro/tilepro.opt:32
msgid "Known TILEPro CPUs (for use with the -mcpu= option):"
msgstr "Không hiểu TILEPro CPUs (để dùng vá»›i tùy chá»n -mcpu=):"
#: config/lm32/lm32.opt:24
-#, fuzzy
-#| msgid "Enable multiply instructions"
msgid "Enable multiply instructions."
-msgstr "Bật câu lệnh nhân lên"
+msgstr "Bật câu lệnh nhân."
#: config/lm32/lm32.opt:28
-#, fuzzy
-#| msgid "Enable divide and modulus instructions"
msgid "Enable divide and modulus instructions."
-msgstr "Bật câu lệnh chia và câu lệnh tạo giá trị tuyệt đối"
+msgstr "Bật câu lệnh chia và câu lệnh lấy số dư."
#: config/lm32/lm32.opt:32
-#, fuzzy
-#| msgid "Enable barrel shift instructions"
msgid "Enable barrel shift instructions."
-msgstr "Bật câu lệnh barrel shift"
+msgstr "Bật câu lệnh barrel shift."
#: config/lm32/lm32.opt:36
-#, fuzzy
-#| msgid "Enable sign extend instructions"
msgid "Enable sign extend instructions."
-msgstr "Bật câu lệnh mở rộng ký hiệu"
+msgstr "Bật câu lệnh mở rộng ký hiệu."
#: config/lm32/lm32.opt:40
-#, fuzzy
-#| msgid "Enable user-defined instructions"
msgid "Enable user-defined instructions."
-msgstr "Bật câu lệnh được ngưá»i dùng xác định"
+msgstr "Bật câu lệnh được ngưá»i dùng xác định."
#: config/nios2/elf.opt:26
-#, fuzzy
-#| msgid "Link with a limited version of the C library"
msgid "Link with a limited version of the C library."
-msgstr "Liên kết với thư viện C bản giới hạn"
+msgstr "Liên kết với thư viện C bản giới hạn."
#: config/nios2/elf.opt:30
-#, fuzzy
-#| msgid "Name of system library to link against"
msgid "Name of system library to link against."
-msgstr "Tên của thư viện hệ thống cần liên kết với"
+msgstr "Tên của thư viện hệ thống cần liên kết với."
#: config/nios2/elf.opt:34
-#, fuzzy
-#| msgid "Name of the startfile"
msgid "Name of the startfile."
-msgstr "Tên của tập tin bắt đầu"
+msgstr "Tên của tập tin bắt đầu."
#: config/nios2/elf.opt:38
-#, fuzzy
-#| msgid "Link with HAL BSP"
msgid "Link with HAL BSP."
-msgstr "Liên kết với HAL BSP"
+msgstr "Liên kết với HAL BSP."
#: config/nios2/nios2.opt:35
-#, fuzzy
-#| msgid "Enable DIV, DIVU"
msgid "Enable DIV, DIVU."
-msgstr "Bật DIV, DIVU"
+msgstr "Bật DIV, DIVU."
#: config/nios2/nios2.opt:39
-#, fuzzy
-#| msgid "Enable MUL instructions"
msgid "Enable MUL instructions."
-msgstr "Bật các chỉ lệnh MUL"
+msgstr "Bật các chỉ lệnh MUL."
#: config/nios2/nios2.opt:43
-#, fuzzy
-#| msgid "Enable MULX instructions, assume fast shifter"
msgid "Enable MULX instructions, assume fast shifter."
-msgstr "Bật các chỉ lệnh MULX, coi là dịch nhanh hơn"
+msgstr "Bật các chỉ lệnh MULX, coi là dịch nhanh hơn."
#: config/nios2/nios2.opt:47
msgid "Use table based fast divide (default at -O3)."
msgstr ""
#: config/nios2/nios2.opt:51
-#, fuzzy
msgid "All memory accesses use I/O load/store instructions."
-msgstr "Bật câu lệnh nạp/lưu chưa xếp hàng"
+msgstr ""
#: config/nios2/nios2.opt:55
-#, fuzzy
msgid "Volatile memory accesses use I/O load/store instructions."
-msgstr "Bật câu lệnh nạp/lưu chưa xếp hàng"
+msgstr ""
#: config/nios2/nios2.opt:59
-#, fuzzy
msgid "Volatile memory accesses do not use I/O load/store instructions."
-msgstr "Bật câu lệnh nạp/lưu chưa xếp hàng"
+msgstr ""
#: config/nios2/nios2.opt:63
-#, fuzzy
msgid "Enable/disable GP-relative addressing."
-msgstr "Tắt chức năng đặt địa chỉ loại phụ lục"
+msgstr "Bật/Tắt đánh địa chỉ tương đối GP."
#: config/nios2/nios2.opt:67
msgid "Valid options for GP-relative addressing (for -mgpopt):"
@@ -12776,11 +10758,11 @@ msgstr ""
#: config/nios2/nios2.opt:86
msgid "Equivalent to -mgpopt=local."
-msgstr ""
+msgstr "Tương đương với -mgpopt=local."
#: config/nios2/nios2.opt:90
msgid "Equivalent to -mgpopt=none."
-msgstr ""
+msgstr "Tương đương với -mgpopt=none."
#: config/nios2/nios2.opt:94 config/c6x/c6x.opt:30 config/mep/mep.opt:82
#: config/mips/mips.opt:134 config/tilegx/tilegx.opt:45
@@ -12797,657 +10779,480 @@ msgid "Floating point custom instruction configuration name."
msgstr ""
#: config/nios2/nios2.opt:106
-#, fuzzy
-#| msgid "Do not use the ftruncds custom instruction"
msgid "Do not use the ftruncds custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh ftruncds"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh ftruncds."
#: config/nios2/nios2.opt:110
-#, fuzzy
msgid "Integer id (N) of ftruncds custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh ftand"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh ftruncds."
#: config/nios2/nios2.opt:114
-#, fuzzy
-#| msgid "Do not use the fextsd custom instruction"
msgid "Do not use the fextsd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fextsd"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fextsd."
#: config/nios2/nios2.opt:118
-#, fuzzy
msgid "Integer id (N) of fextsd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh ftand"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fextsd."
#: config/nios2/nios2.opt:122
-#, fuzzy
-#| msgid "Do not use the fixdu custom instruction"
msgid "Do not use the fixdu custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fixdu"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fixdu."
#: config/nios2/nios2.opt:126
-#, fuzzy
msgid "Integer id (N) of fixdu custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fixdu"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fixdu."
#: config/nios2/nios2.opt:130
-#, fuzzy
-#| msgid "Do not use the fixdi custom instruction"
msgid "Do not use the fixdi custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fixdi"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fixdi."
#: config/nios2/nios2.opt:134
-#, fuzzy
msgid "Integer id (N) of fixdi custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fixdu"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fixdi."
#: config/nios2/nios2.opt:138
-#, fuzzy
-#| msgid "Do not use the fixsu custom instruction"
msgid "Do not use the fixsu custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fixsu"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fixsu."
#: config/nios2/nios2.opt:142
-#, fuzzy
msgid "Integer id (N) of fixsu custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fixdu"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fixdu."
#: config/nios2/nios2.opt:146
-#, fuzzy
-#| msgid "Do not use the fixsi custom instruction"
msgid "Do not use the fixsi custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fixsi"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fixsi."
#: config/nios2/nios2.opt:150
-#, fuzzy
msgid "Integer id (N) of fixsi custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fixdu"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fixsi."
#: config/nios2/nios2.opt:154
-#, fuzzy
-#| msgid "Do not use the floatud custom instruction"
msgid "Do not use the floatud custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh floatud"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh floatud."
#: config/nios2/nios2.opt:158
-#, fuzzy
msgid "Integer id (N) of floatud custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh floatud"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh floatud."
#: config/nios2/nios2.opt:162
-#, fuzzy
-#| msgid "Do not use the floatid custom instruction"
msgid "Do not use the floatid custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh floatid"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh floatid."
#: config/nios2/nios2.opt:166
-#, fuzzy
msgid "Integer id (N) of floatid custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh floatid"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh floatid."
#: config/nios2/nios2.opt:170
-#, fuzzy
-#| msgid "Do not use the floatus custom instruction"
msgid "Do not use the floatus custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh floatus"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh floatus."
#: config/nios2/nios2.opt:174
-#, fuzzy
msgid "Integer id (N) of floatus custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh floatud"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh floatus."
#: config/nios2/nios2.opt:178
-#, fuzzy
-#| msgid "Do not use the floatis custom instruction"
msgid "Do not use the floatis custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh floatis"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh floatis."
#: config/nios2/nios2.opt:182
-#, fuzzy
msgid "Integer id (N) of floatis custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh floatid"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh floatis."
#: config/nios2/nios2.opt:186
-#, fuzzy
-#| msgid "Do not use the fcmpned custom instruction"
msgid "Do not use the fcmpned custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcmpned"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcmpned."
#: config/nios2/nios2.opt:190
-#, fuzzy
msgid "Integer id (N) of fcmpned custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh ftand"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fcmpned."
#: config/nios2/nios2.opt:194
-#, fuzzy
-#| msgid "Do not use the fcmpeqd custom instruction"
msgid "Do not use the fcmpeqd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcmpeqd"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcmpeqd."
#: config/nios2/nios2.opt:198
-#, fuzzy
msgid "Integer id (N) of fcmpeqd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuld"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fcmpeqd."
#: config/nios2/nios2.opt:202
-#, fuzzy
-#| msgid "Do not use the fcmpged custom instruction"
msgid "Do not use the fcmpged custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcmpged"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcmpged."
#: config/nios2/nios2.opt:206
-#, fuzzy
msgid "Integer id (N) of fcmpged custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuld"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fcmpged."
#: config/nios2/nios2.opt:210
-#, fuzzy
-#| msgid "Do not use the fcmpgtd custom instruction"
msgid "Do not use the fcmpgtd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcmpgtd"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcmpgtd."
#: config/nios2/nios2.opt:214
-#, fuzzy
msgid "Integer id (N) of fcmpgtd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh ftand"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fcmpgtd."
#: config/nios2/nios2.opt:218
-#, fuzzy
-#| msgid "Do not use the fcmpled custom instruction"
msgid "Do not use the fcmpled custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcmpled"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcmpled."
#: config/nios2/nios2.opt:222
-#, fuzzy
msgid "Integer id (N) of fcmpled custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuld"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fcmpled."
#: config/nios2/nios2.opt:226
-#, fuzzy
-#| msgid "Do not use the fcmpltd custom instruction"
msgid "Do not use the fcmpltd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcmpltd"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcmpltd."
#: config/nios2/nios2.opt:230
-#, fuzzy
msgid "Integer id (N) of fcmpltd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuld"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fcmpltd."
#: config/nios2/nios2.opt:234
-#, fuzzy
-#| msgid "Do not use the flogd custom instruction"
msgid "Do not use the flogd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh flogd"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh flogd."
#: config/nios2/nios2.opt:238
-#, fuzzy
msgid "Integer id (N) of flogd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh floatud"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh flogd."
#: config/nios2/nios2.opt:242
-#, fuzzy
-#| msgid "Do not use the fexpd custom instruction"
msgid "Do not use the fexpd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fexpd"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fexpd."
#: config/nios2/nios2.opt:246
-#, fuzzy
msgid "Integer id (N) of fexpd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fixdu"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fexpd."
#: config/nios2/nios2.opt:250
-#, fuzzy
-#| msgid "Do not use the fatand custom instruction"
msgid "Do not use the fatand custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fatand"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fatand."
#: config/nios2/nios2.opt:254
-#, fuzzy
msgid "Integer id (N) of fatand custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh ftand"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fatand."
#: config/nios2/nios2.opt:258
-#, fuzzy
-#| msgid "Do not use the ftand custom instruction"
msgid "Do not use the ftand custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh ftand"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh ftand."
#: config/nios2/nios2.opt:262
-#, fuzzy
msgid "Integer id (N) of ftand custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh ftand"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh ftand."
#: config/nios2/nios2.opt:266
-#, fuzzy
-#| msgid "Do not use the fsind custom instruction"
msgid "Do not use the fsind custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fsind"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fsind."
#: config/nios2/nios2.opt:270
-#, fuzzy
msgid "Integer id (N) of fsind custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh ftand"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fsind."
#: config/nios2/nios2.opt:274
-#, fuzzy
-#| msgid "Do not use the fcosd custom instruction"
msgid "Do not use the fcosd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcosd"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcosd."
#: config/nios2/nios2.opt:278
-#, fuzzy
msgid "Integer id (N) of fcosd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh floatud"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fcosd."
#: config/nios2/nios2.opt:282
-#, fuzzy
-#| msgid "Do not use the fsqrtd custom instruction"
msgid "Do not use the fsqrtd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fsqrtd"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fsqrtd."
#: config/nios2/nios2.opt:286
-#, fuzzy
msgid "Integer id (N) of fsqrtd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh ftand"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fsqrtd."
#: config/nios2/nios2.opt:290
-#, fuzzy
-#| msgid "Do not use the fabsd custom instruction"
msgid "Do not use the fabsd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fabsd"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fabsd."
#: config/nios2/nios2.opt:294
-#, fuzzy
msgid "Integer id (N) of fabsd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh ftand"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fabsd."
#: config/nios2/nios2.opt:298
-#, fuzzy
-#| msgid "Do not use the fnegd custom instruction"
msgid "Do not use the fnegd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fnegd"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fnegd."
#: config/nios2/nios2.opt:302
-#, fuzzy
msgid "Integer id (N) of fnegd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh ftand"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fnegd."
#: config/nios2/nios2.opt:306
-#, fuzzy
-#| msgid "Do not use the fmaxd custom instruction"
msgid "Do not use the fmaxd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmaxd"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmaxd."
#: config/nios2/nios2.opt:310
-#, fuzzy
msgid "Integer id (N) of fmaxd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuld"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fmaxd."
#: config/nios2/nios2.opt:314
-#, fuzzy
-#| msgid "Do not use the fmind custom instruction"
msgid "Do not use the fmind custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmind"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmind."
#: config/nios2/nios2.opt:318
-#, fuzzy
msgid "Integer id (N) of fmind custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh ftand"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fmind."
#: config/nios2/nios2.opt:322
-#, fuzzy
-#| msgid "Do not use the fdivd custom instruction"
msgid "Do not use the fdivd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fdivd"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fdivd."
#: config/nios2/nios2.opt:326
-#, fuzzy
msgid "Integer id (N) of fdivd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fixdu"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fdivd."
#: config/nios2/nios2.opt:330
-#, fuzzy
-#| msgid "Do not use the fmuld custom instruction"
msgid "Do not use the fmuld custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuld"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuld."
#: config/nios2/nios2.opt:334
-#, fuzzy
msgid "Integer id (N) of fmuld custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuld"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fmuld."
#: config/nios2/nios2.opt:338
-#, fuzzy
-#| msgid "Do not use the fsubd custom instruction"
msgid "Do not use the fsubd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fsubd"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fsubd."
#: config/nios2/nios2.opt:342
-#, fuzzy
msgid "Integer id (N) of fsubd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuld"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fsubd."
#: config/nios2/nios2.opt:346
-#, fuzzy
-#| msgid "Do not use the faddd custom instruction"
msgid "Do not use the faddd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh faddd"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh faddd."
#: config/nios2/nios2.opt:350
-#, fuzzy
msgid "Integer id (N) of faddd custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh ftand"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh faddd."
#: config/nios2/nios2.opt:354
-#, fuzzy
-#| msgid "Do not use the fcmpnes custom instruction"
msgid "Do not use the fcmpnes custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcmpnes"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcmpnes."
#: config/nios2/nios2.opt:358
-#, fuzzy
msgid "Integer id (N) of fcmpnes custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuls"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fcmpnes."
#: config/nios2/nios2.opt:362
-#, fuzzy
-#| msgid "Do not use the fcmpeqs custom instruction"
msgid "Do not use the fcmpeqs custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcmpeqs"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcmpeqs."
#: config/nios2/nios2.opt:366
-#, fuzzy
msgid "Integer id (N) of fcmpeqs custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuls"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fcmpeqs."
#: config/nios2/nios2.opt:370
-#, fuzzy
-#| msgid "Do not use the fcmpges custom instruction"
msgid "Do not use the fcmpges custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcmpges"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcmpges."
#: config/nios2/nios2.opt:374
-#, fuzzy
msgid "Integer id (N) of fcmpges custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuls"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fcmpges."
#: config/nios2/nios2.opt:378
-#, fuzzy
-#| msgid "Do not use the fcmpgts custom instruction"
msgid "Do not use the fcmpgts custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcmpgts"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcmpgts."
#: config/nios2/nios2.opt:382
-#, fuzzy
msgid "Integer id (N) of fcmpgts custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuls"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fcmpgts."
#: config/nios2/nios2.opt:386
-#, fuzzy
-#| msgid "Do not use the fcmples custom instruction"
msgid "Do not use the fcmples custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcmples"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcmples."
#: config/nios2/nios2.opt:390
-#, fuzzy
msgid "Integer id (N) of fcmples custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuls"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fcmples."
#: config/nios2/nios2.opt:394
-#, fuzzy
-#| msgid "Do not use the fcmplts custom instruction"
msgid "Do not use the fcmplts custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcmplts"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcmplts."
#: config/nios2/nios2.opt:398
-#, fuzzy
msgid "Integer id (N) of fcmplts custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuls"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fcmplts."
#: config/nios2/nios2.opt:402
-#, fuzzy
-#| msgid "Do not use the flogs custom instruction"
msgid "Do not use the flogs custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh flogs"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh flogs."
#: config/nios2/nios2.opt:406
-#, fuzzy
msgid "Integer id (N) of flogs custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuls"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh flogs."
#: config/nios2/nios2.opt:410
-#, fuzzy
-#| msgid "Do not use the fexps custom instruction"
msgid "Do not use the fexps custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fexps"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fexps."
#: config/nios2/nios2.opt:414
-#, fuzzy
msgid "Integer id (N) of fexps custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuls"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fexps."
#: config/nios2/nios2.opt:418
-#, fuzzy
-#| msgid "Do not use the fatans custom instruction"
msgid "Do not use the fatans custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fatans"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fatans."
#: config/nios2/nios2.opt:422
-#, fuzzy
msgid "Integer id (N) of fatans custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh ftand"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fatans."
#: config/nios2/nios2.opt:426
-#, fuzzy
-#| msgid "Do not use the ftans custom instruction"
msgid "Do not use the ftans custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh ftans"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh ftans."
#: config/nios2/nios2.opt:430
-#, fuzzy
msgid "Integer id (N) of ftans custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh ftand"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh ftans."
#: config/nios2/nios2.opt:434
-#, fuzzy
-#| msgid "Do not use the fsins custom instruction"
msgid "Do not use the fsins custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fsins"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fsins."
#: config/nios2/nios2.opt:438
-#, fuzzy
msgid "Integer id (N) of fsins custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuls"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fsins."
#: config/nios2/nios2.opt:442
-#, fuzzy
-#| msgid "Do not use the fcoss custom instruction"
msgid "Do not use the fcoss custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcoss"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fcoss."
#: config/nios2/nios2.opt:446
-#, fuzzy
msgid "Integer id (N) of fcoss custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuls"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fcoss."
#: config/nios2/nios2.opt:450
-#, fuzzy
-#| msgid "Do not use the fsqrts custom instruction"
msgid "Do not use the fsqrts custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fsqrts"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fsqrts."
#: config/nios2/nios2.opt:454
-#, fuzzy
msgid "Integer id (N) of fsqrts custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuls"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fsqrts."
#: config/nios2/nios2.opt:458
-#, fuzzy
-#| msgid "Do not use the fabss custom instr"
msgid "Do not use the fabss custom instr."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fabss"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fabss."
#: config/nios2/nios2.opt:462
-#, fuzzy
msgid "Integer id (N) of fabss custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuls"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fabss."
#: config/nios2/nios2.opt:466
-#, fuzzy
-#| msgid "Do not use the fnegs custom instruction"
msgid "Do not use the fnegs custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fnegs"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fnegs."
#: config/nios2/nios2.opt:470
-#, fuzzy
msgid "Integer id (N) of fnegs custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuls"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fnegs."
#: config/nios2/nios2.opt:474
-#, fuzzy
-#| msgid "Do not use the fmaxs custom instruction"
msgid "Do not use the fmaxs custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmaxs"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmaxs."
#: config/nios2/nios2.opt:478
-#, fuzzy
msgid "Integer id (N) of fmaxs custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuls"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fmaxs."
#: config/nios2/nios2.opt:482
-#, fuzzy
-#| msgid "Do not use the fmins custom instruction"
msgid "Do not use the fmins custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmins"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmins."
#: config/nios2/nios2.opt:486
-#, fuzzy
msgid "Integer id (N) of fmins custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuls"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fmins."
#: config/nios2/nios2.opt:490
-#, fuzzy
-#| msgid "Do not use the fdivs custom instruction"
msgid "Do not use the fdivs custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fdivs"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fdivs."
#: config/nios2/nios2.opt:494
-#, fuzzy
msgid "Integer id (N) of fdivs custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuls"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fdivs."
#: config/nios2/nios2.opt:498
-#, fuzzy
-#| msgid "Do not use the fmuls custom instruction"
msgid "Do not use the fmuls custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuls"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuls."
#: config/nios2/nios2.opt:502
-#, fuzzy
msgid "Integer id (N) of fmuls custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuls"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fmuls."
#: config/nios2/nios2.opt:506
-#, fuzzy
-#| msgid "Do not use the fsubs custom instruction"
msgid "Do not use the fsubs custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fsubs"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fsubs."
#: config/nios2/nios2.opt:510
-#, fuzzy
msgid "Integer id (N) of fsubs custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fmuls"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fsubs."
#: config/nios2/nios2.opt:514
-#, fuzzy
-#| msgid "Do not use the fadds custom instruction"
msgid "Do not use the fadds custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fadds"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fadds."
#: config/nios2/nios2.opt:518
-#, fuzzy
msgid "Integer id (N) of fadds custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh ftand"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fadds."
#: config/nios2/nios2.opt:522
-#, fuzzy
-#| msgid "Do not use the frdy custom instruction"
msgid "Do not use the frdy custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh frdy"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh frdy."
#: config/nios2/nios2.opt:526
-#, fuzzy
msgid "Integer id (N) of frdy custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fixdu"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh frdy."
#: config/nios2/nios2.opt:530
-#, fuzzy
-#| msgid "Do not use the frdxhi custom instruction"
msgid "Do not use the frdxhi custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh frdxhi"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh frdxhi."
#: config/nios2/nios2.opt:534
-#, fuzzy
msgid "Integer id (N) of frdxhi custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fixdu"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh frdxhi."
#: config/nios2/nios2.opt:538
-#, fuzzy
-#| msgid "Do not use the frdxlo custom instruction"
msgid "Do not use the frdxlo custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh frdxlo"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh frdxlo."
#: config/nios2/nios2.opt:542
-#, fuzzy
msgid "Integer id (N) of frdxlo custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh floatud"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh frdxlo."
#: config/nios2/nios2.opt:546
-#, fuzzy
-#| msgid "Do not use the fwry custom instruction"
msgid "Do not use the fwry custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fwry"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fwry."
#: config/nios2/nios2.opt:550
-#, fuzzy
msgid "Integer id (N) of fwry custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fixdu"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fwry."
#: config/nios2/nios2.opt:554
-#, fuzzy
-#| msgid "Do not use the fwrx custom instruction"
msgid "Do not use the fwrx custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fwrx"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fwrx."
#: config/nios2/nios2.opt:558
-#, fuzzy
msgid "Integer id (N) of fwrx custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh fixdu"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh fwrx."
#: config/nios2/nios2.opt:562
-#, fuzzy
msgid "Do not use the round custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh ftruncds"
+msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh round."
#: config/nios2/nios2.opt:566
-#, fuzzy
msgid "Integer id (N) of round custom instruction."
-msgstr "Äừng sá»­ dụng chỉ lệnh tùy chỉnh ftruncds"
+msgstr "Id (N) nguyên của chỉ lệnh tùy chỉnh round."
#: config/nios2/nios2.opt:574
msgid "Valid Nios II ISA levels (for -march):"
msgstr ""
#: config/nios2/nios2.opt:584
-#, fuzzy
-#| msgid "Enable saturation instructions"
msgid "Enable generation of R2 BMX instructions."
-msgstr "Bật câu lệnh đặt trạng thái bão hòa"
+msgstr "Bật tạo lệnh R2 BMX."
#: config/nios2/nios2.opt:588
-#, fuzzy
-#| msgid "Enable saturation instructions"
msgid "Enable generation of R2 CDX instructions."
-msgstr "Bật câu lệnh đặt trạng thái bão hòa"
+msgstr "Bật tạo lệnh R2 CDX."
#: config/rx/rx.opt:29
msgid "Store doubles in 64 bits."
@@ -13495,11 +11300,11 @@ msgstr "Kích cỡ tối đa (theo byte) của giá trị bất biến được
#: config/rx/rx.opt:111
msgid "Specifies the number of registers to reserve for interrupt handlers."
-msgstr "Ghi rõ số các thanh ghi cần dành riêng cho bộ quản lý tín hiệu gián đoạn."
+msgstr "Ghi rõ số các thanh ghi cần dành riêng cho bộ quản lý tín hiệu ngắt."
#: config/rx/rx.opt:117
msgid "Specifies whether interrupt functions should save and restore the accumulator register."
-msgstr "Ghi rõ nếu hàm gián đoạn nên lưu và phục hồi thanh ghi tích lũy hay không."
+msgstr "Ghi rõ nếu hàm ngắt nên lưu và phục hồi thanh ghi tích lũy hay không."
#: config/rx/rx.opt:123
msgid "Enables Position-Independent-Data (PID) mode."
@@ -13518,49 +11323,36 @@ msgid "Enable the use the standard RX ABI where all stacked function arguments a
msgstr ""
#: config/rx/rx.opt:145
-#, fuzzy
msgid "Enable the use of the LRA register allocator."
-msgstr "Bật sử dụng câu lệnh nạp ngắn"
+msgstr ""
#: config/rx/rx.opt:151
msgid "Enables or disables the use of the SMOVF, SMOVB, SMOVU, SUNTIL, SWHILE and RMPA instructions. Enabled by default."
msgstr ""
#: config/rx/rx.opt:157
-#, fuzzy
-#| msgid "Always generate long calls"
msgid "Always use JSR, never BSR, for calls."
-msgstr "Lúc nào cÅ©ng tạo ra cuá»™c gá»i dài"
+msgstr "Luôn dùng JSR, không phải BSR, cho gá»i."
#: config/visium/visium.opt:25
-#, fuzzy
-#| msgid "Link with libc.a and libdebug.a"
msgid "Link with libc.a and libdebug.a."
-msgstr "Liên kết với libc.a và libdebug.a"
+msgstr "Liên kết với libc.a và libdebug.a."
#: config/visium/visium.opt:29
-#, fuzzy
-#| msgid "Link with libc.a and libsim.a"
msgid "Link with libc.a and libsim.a."
-msgstr "Liên kết với libc.a và libsim.a"
+msgstr "Liên kết với libc.a và libsim.a."
#: config/visium/visium.opt:33
-#, fuzzy
-#| msgid "Use hardware FP (default)"
msgid "Use hardware FP (default)."
-msgstr "Sử dụng FP (dấu chấm động) bằng phần cứng (mặc định)"
+msgstr "Sử dụng FP (dấu chấm động) bằng phần cứng (mặc định)."
#: config/visium/visium.opt:65
-#, fuzzy
-#| msgid "Generate code for the supervisor mode (default)"
msgid "Generate code for the supervisor mode (default)."
-msgstr "Tạo mã cho chế độ siêu giám sát (mặc định)"
+msgstr "Tạo mã cho chế độ siêu giám sát (mặc định)."
#: config/visium/visium.opt:69
-#, fuzzy
-#| msgid "Generate code for the user mode"
msgid "Generate code for the user mode."
-msgstr "Tạo ra mã cho chế độ ngưá»i dùng"
+msgstr "Tạo ra mã cho chế độ ngưá»i dùng."
#: config/visium/visium.opt:73
msgid "Only retained for backward compatibility."
@@ -13568,52 +11360,39 @@ msgstr "Giữ lại vì mục đích tương thích ngược."
#: config/fused-madd.opt:22
msgid "%<-mfused-madd%> is deprecated; use %<-ffp-contract=%> instead"
-msgstr "%<-mfused-madd%> bị phản đối; dùng %<-ffp-contract=%> để thay thế"
+msgstr "%<-mfused-madd%> đã lạc hậu; dùng %<-ffp-contract=%> để thay thế"
#: config/sol2.opt:32
msgid "Clear hardware capabilities when linking."
msgstr ""
#: config/sol2.opt:36
-#, fuzzy
-#| msgid "Pass -z text to linker"
msgid "Pass -z text to linker."
-msgstr "Chuyển tùy chá»n -z text cho bá»™ liên kết"
+msgstr "Chuyển tùy chá»n -z text cho bá»™ liên kết."
#: config/moxie/moxie.opt:31
-#, fuzzy
-#| msgid "Enable MUL.X and UMUL.X instructions"
msgid "Enable MUL.X and UMUL.X instructions."
-msgstr "Bật các chỉ lệnh MUL.X và UMUL.X"
+msgstr "Bật các chỉ lệnh MUL.X và UMUL.X."
#: config/microblaze/microblaze.opt:40
-#, fuzzy
-#| msgid "Use software floating point"
msgid "Use software emulation for floating point (default)."
-msgstr "Sá»­ dụng dấu chấm động bằng phần má»m"
+msgstr "Sá»­ dụng dấu chấm động bằng phần má»m (mặc định)"
#: config/microblaze/microblaze.opt:44
-#, fuzzy
-#| msgid "Use hardware floating point instructions"
msgid "Use hardware floating point instructions."
-msgstr "Sử dụng các chỉ lệnh chấm động phần cứng"
+msgstr "Sử dụng các chỉ lệnh chấm động phần cứng."
#: config/microblaze/microblaze.opt:48
-#, fuzzy
msgid "Use table lookup optimization for small signed integer divisions."
-msgstr "Tránh giá»›i hạn phạm vi nào trong câu lệnh gá»i"
+msgstr ""
#: config/microblaze/microblaze.opt:52
-#, fuzzy
-#| msgid "-mcpu=PROCESSOR\t\tUse features of and schedule code for given CPU"
msgid "-mcpu=PROCESSOR\t\tUse features of and schedule code for given CPU."
-msgstr "-mcpu=PROCESSOR\t\tSử dụng các tính năng của và mã tác vụ cho CPU đã cho"
+msgstr "-mcpu=PROCESSOR\t\tSử dụng các tính năng của và mã tác vụ cho CPU đã cho."
#: config/microblaze/microblaze.opt:56
-#, fuzzy
-#| msgid "Don't optimize block moves"
msgid "Don't optimize block moves, use memcpy."
-msgstr "Äừng tối ưu hóa sá»± di chuyển khối"
+msgstr "Äừng tối ưu hóa sá»± di chuyển khối, dùng memcpy."
#: config/microblaze/microblaze.opt:68
msgid "Use the soft multiply emulation (default)."
@@ -13632,10 +11411,8 @@ msgid "Use the hardware barrel shifter instead of emulation."
msgstr ""
#: config/microblaze/microblaze.opt:84
-#, fuzzy
-#| msgid "Use fp double instructions"
msgid "Use pattern compare instructions."
-msgstr "Sử dụng câu lệnh dấu chấm động chính đôi"
+msgstr "Sử dụng câu lệnh so sánh mẫu."
#: config/microblaze/microblaze.opt:87
#, c-format
@@ -13643,16 +11420,12 @@ msgid "%qs is deprecated; use -fstack-check"
msgstr "%qs đã lá»—i thá»i; hãy dùng -fstack-check"
#: config/microblaze/microblaze.opt:88
-#, fuzzy
-#| msgid "Check for stack overflow at runtime"
msgid "Check for stack overflow at runtime."
-msgstr "Kiểm tra tràn stack lúc chạy"
+msgstr "Kiểm tra tràn stack lúc chạy."
#: config/microblaze/microblaze.opt:92 config/iq2000/iq2000.opt:65
-#, fuzzy
-#| msgid "Use GP relative sdata/sbss sections"
msgid "Use GP relative sdata/sbss sections."
-msgstr "Sử dụng phần sdata/sbss tương đối với GP"
+msgstr "Sử dụng phần sdata/sbss tương đối với GP."
#: config/microblaze/microblaze.opt:95
#, c-format
@@ -13664,350 +11437,236 @@ msgid "Clear the BSS to zero and place zero initialized in BSS."
msgstr ""
#: config/microblaze/microblaze.opt:100
-#, fuzzy
-#| msgid "Use multiply high instructions for high part of 32x32 multiply"
msgid "Use multiply high instructions for high part of 32x32 multiply."
-msgstr "Dùng các chỉ lệnh nhân cao cho các phần cao của phép nhân 32x32"
+msgstr "Dùng các chỉ lệnh nhân cao cho các phần cao của phép nhân 32x32."
#: config/microblaze/microblaze.opt:104
-#, fuzzy
-#| msgid "Use hardware floating point conversion instructions"
msgid "Use hardware floating point conversion instructions."
-msgstr "Dùng chỉ lệnh chuyển đổi dấu chấm động bằng phần cứng"
+msgstr "Dùng chỉ lệnh chuyển đổi dấu chấm động bằng phần cứng."
#: config/microblaze/microblaze.opt:108
-#, fuzzy
-#| msgid "Use hardware floating point square root instruction"
msgid "Use hardware floating point square root instruction."
-msgstr "Dùng chỉ lệnh bình phương chấm động bằng phần cứng"
+msgstr "Dùng chỉ lệnh bình phương chấm động bằng phần cứng."
#: config/microblaze/microblaze.opt:112
-#, fuzzy
-#| msgid "Description for mxl-mode-executable"
msgid "Description for mxl-mode-executable."
-msgstr "Mô tả cho mxl-mode-executable"
+msgstr "Mô tả cho mxl-mode-executable."
#: config/microblaze/microblaze.opt:116
-#, fuzzy
-#| msgid "Description for mxl-mode-xmdstub"
msgid "Description for mxl-mode-xmdstub."
-msgstr "Mô tả cho mxl-mode-xmdstub"
+msgstr "Mô tả cho mxl-mode-xmdstub."
#: config/microblaze/microblaze.opt:120
-#, fuzzy
-#| msgid "Description for mxl-mode-bootstrap"
msgid "Description for mxl-mode-bootstrap."
-msgstr "Mô tả cho mxl-mode-bootstrap"
+msgstr "Mô tả cho mxl-mode-bootstrap."
#: config/microblaze/microblaze.opt:124
-#, fuzzy
-#| msgid "Description for mxl-mode-novectors"
msgid "Description for mxl-mode-novectors."
-msgstr "Mô tả cho mxl-mode-novectors"
+msgstr "Mô tả cho mxl-mode-novectors."
#: config/microblaze/microblaze.opt:128
-#, fuzzy
-#| msgid "Use hardware quad FP instructions"
msgid "Use hardware prefetch instruction"
msgstr "Sử dụng câu lệnh loại bốn dấu chấm động phần cứng"
#: config/vax/vax.opt:23 config/vax/vax.opt:27
-#, fuzzy
-#| msgid "Target DFLOAT double precision code"
msgid "Target DFLOAT double precision code."
msgstr "Äặt mục đích là mã chính xác đôi DFLOAT"
#: config/vax/vax.opt:31 config/vax/vax.opt:35
-#, fuzzy
-#| msgid "Generate GFLOAT double precision code"
msgid "Generate GFLOAT double precision code."
-msgstr "Tạo ra mã chính xác đôi GFLOAT"
+msgstr "Tạo ra mã chính xác đôi GFLOAT."
#: config/vax/vax.opt:39
-#, fuzzy
-#| msgid "Generate code for GNU assembler (gas)"
msgid "Generate code for GNU assembler (gas)."
-msgstr "Tạo ra mã cho bộ dịch mã số GNU (gas)"
+msgstr "Tạo ra mã cho bộ dịch mã số GNU assembler (gas)."
#: config/vax/vax.opt:43
-#, fuzzy
-#| msgid "Generate code for UNIX assembler"
msgid "Generate code for UNIX assembler."
-msgstr "Tạo ra mã cho bộ dịch mã số UNIX"
+msgstr "Tạo ra mã cho bộ dịch mã số UNIX assembler."
#: config/vax/vax.opt:47
-#, fuzzy
-#| msgid "Use VAXC structure conventions"
msgid "Use VAXC structure conventions."
-msgstr "Sử dụng quy ước cấu trúc VAXC"
+msgstr "Sử dụng quy ước cấu trúc VAXC."
#: config/vax/vax.opt:51
-#, fuzzy
-#| msgid "Use new adddi3/subdi3 patterns"
msgid "Use new adddi3/subdi3 patterns."
-msgstr "Sử dụng các mẫu adddi3/subdi3 mới"
+msgstr "Sử dụng các mẫu adddi3/subdi3 mới."
#: config/frv/frv.opt:30
-#, fuzzy
-#| msgid "Use 4 media accumulators"
msgid "Use 4 media accumulators."
-msgstr "Sử dụng 4 bộ tích lũy môi giới"
+msgstr "Sử dụng 4 bộ tích đa phương tiện."
#: config/frv/frv.opt:34
-#, fuzzy
-#| msgid "Use 8 media accumulators"
msgid "Use 8 media accumulators."
-msgstr "Sử dụng 8 bộ tích lũy môi giới"
+msgstr "Sử dụng 8 bộ tích đa phương tiện."
#: config/frv/frv.opt:38
-#, fuzzy
-#| msgid "Enable label alignment optimizations"
msgid "Enable label alignment optimizations."
-msgstr "Bật sự tối ưu hóa cách xếp hàng nhãn"
+msgstr "Bật sự tối ưu hóa cách xếp hàng nhãn."
#: config/frv/frv.opt:42
-#, fuzzy
-#| msgid "Dynamically allocate cc registers"
msgid "Dynamically allocate cc registers."
-msgstr "Cấp phát động các thanh ghi CC"
+msgstr "Cấp phát động các thanh ghi CC."
#: config/frv/frv.opt:49
-#, fuzzy
-#| msgid "Set the cost of branches"
msgid "Set the cost of branches."
-msgstr "Äặt giá cá»§a nhánh"
+msgstr "Äặt giá cá»§a nhánh."
#: config/frv/frv.opt:53
-#, fuzzy
-#| msgid "Enable conditional execution other than moves/scc"
msgid "Enable conditional execution other than moves/scc."
-msgstr "Bật sá»± thá»±c hiện có Ä‘iá»u kiện mà khác vá»›i moves/scc"
+msgstr "Bật sá»± thá»±c hiện có Ä‘iá»u kiện mà khác vá»›i moves/scc."
#: config/frv/frv.opt:57
-#, fuzzy
-#| msgid "Change the maximum length of conditionally-executed sequences"
msgid "Change the maximum length of conditionally-executed sequences."
-msgstr "Thay đổi chiá»u dài tối Ä‘a cá»§a dãy được thá»±c hiện có Ä‘iá»u kiện"
+msgstr "Thay đổi chiá»u dài tối Ä‘a cá»§a dãy được thá»±c hiện có Ä‘iá»u kiện."
#: config/frv/frv.opt:61
-#, fuzzy
-#| msgid "Change the number of temporary registers that are available to conditionally-executed sequences"
msgid "Change the number of temporary registers that are available to conditionally-executed sequences."
-msgstr "Thay đổi số các thanh ghi tạm thá»i còn sẵn sàng cho dãy được thá»±c hiện có Ä‘iá»u kiện"
+msgstr "Thay đổi số các thanh ghi tạm thá»i còn sẵn sàng cho dãy được thá»±c hiện có Ä‘iá»u kiện."
#: config/frv/frv.opt:65
-#, fuzzy
-#| msgid "Enable conditional moves"
msgid "Enable conditional moves."
-msgstr "Bật sá»± di chuyển có Ä‘iá»u kiện"
+msgstr "Bật sá»± di chuyển có Ä‘iá»u kiện."
#: config/frv/frv.opt:69
-#, fuzzy
-#| msgid "Set the target CPU type"
msgid "Set the target CPU type."
-msgstr "Äặt loại CPU đích"
+msgstr "Äặt loại CPU đích."
#: config/frv/frv.opt:73
msgid "Known FR-V CPUs (for use with the -mcpu= option):"
msgstr "Không hiểu FR-V CPUs (để dùng vá»›i tùy chá»n -mcpu=):"
#: config/frv/frv.opt:122
-#, fuzzy
-#| msgid "Use fp double instructions"
msgid "Use fp double instructions."
-msgstr "Sử dụng câu lệnh dấu chấm động chính đôi"
+msgstr "Sử dụng câu lệnh dấu chấm động chính đôi."
#: config/frv/frv.opt:126
-#, fuzzy
-#| msgid "Change the ABI to allow double word insns"
msgid "Change the ABI to allow double word insns."
-msgstr "Sửa đổi ABI để cho phép câu lệnh từ đôi"
+msgstr "Sửa đổi ABI để cho phép câu lệnh từ đôi."
#: config/frv/frv.opt:134
-#, fuzzy
-#| msgid "Just use icc0/fcc0"
msgid "Just use icc0/fcc0."
-msgstr "Chỉ sử dụng icc0/fcc0"
+msgstr "Chỉ sử dụng icc0/fcc0."
#: config/frv/frv.opt:138
-#, fuzzy
-#| msgid "Only use 32 FPRs"
msgid "Only use 32 FPRs."
-msgstr "Chỉ sử dụng 32 FPR"
+msgstr "Chỉ sử dụng 32 FPRs."
#: config/frv/frv.opt:142
-#, fuzzy
-#| msgid "Use 64 FPRs"
msgid "Use 64 FPRs."
-msgstr "Sử dụng 64 FPR"
+msgstr "Sử dụng 64 FPRs."
#: config/frv/frv.opt:146
-#, fuzzy
-#| msgid "Only use 32 GPRs"
msgid "Only use 32 GPRs."
-msgstr "Chỉ sử dụng 32 GPR"
+msgstr "Chỉ sử dụng 32 GPRs."
#: config/frv/frv.opt:150
-#, fuzzy
-#| msgid "Use 64 GPRs"
msgid "Use 64 GPRs."
-msgstr "Sử dụng 64 GPR"
+msgstr "Sử dụng 64 GPRs."
#: config/frv/frv.opt:154
-#, fuzzy
-#| msgid "Enable use of GPREL for read-only data in FDPIC"
msgid "Enable use of GPREL for read-only data in FDPIC."
-msgstr "Bật sá»­ dụng GPREL cho dữ liệu chỉ Ä‘á»c trong FDPIC"
+msgstr "Bật sá»­ dụng GPREL cho dữ liệu chỉ Ä‘á»c trong FDPIC."
#: config/frv/frv.opt:166
-#, fuzzy
-#| msgid "Enable PIC support for building libraries"
msgid "Enable PIC support for building libraries."
-msgstr "Bật sự hỗ trợ PIC để biên dịch thư viện"
+msgstr "Bật sự hỗ trợ PIC để biên dịch thư viện."
#: config/frv/frv.opt:170
-#, fuzzy
-#| msgid "Follow the EABI linkage requirements"
msgid "Follow the EABI linkage requirements."
-msgstr "Tùy theo các yêu cầu của sự liên kết EABI"
+msgstr "Tùy theo các yêu cầu của sự liên kết EABI."
#: config/frv/frv.opt:174
-#, fuzzy
-#| msgid "Disallow direct calls to global functions"
msgid "Disallow direct calls to global functions."
-msgstr "Không cho phép gá»i trá»±c tiếp cho hàm toàn cục"
+msgstr "Không cho phép gá»i trá»±c tiếp cho hàm toàn cục."
#: config/frv/frv.opt:178
-#, fuzzy
-#| msgid "Use media instructions"
msgid "Use media instructions."
-msgstr "Sử dụng câu lệnh môi giới"
+msgstr "Sử dụng câu lệnh đa phương tiện."
#: config/frv/frv.opt:182
-#, fuzzy
-#| msgid "Use multiply add/subtract instructions"
msgid "Use multiply add/subtract instructions."
-msgstr "Sá»­ dụng nhiá»u câu lệnh nhân_cá»™ng/trừ"
+msgstr "Sử dụng câu lệnh nhân_cộng/trừ."
#: config/frv/frv.opt:186
-#, fuzzy
-#| msgid "Enable optimizing &&/|| in conditional execution"
msgid "Enable optimizing &&/|| in conditional execution."
-msgstr "Bật sá»± tối ưu hóa &&/|| trong quá trình thá»±c hiện có Ä‘iá»u kiện"
+msgstr "Bật sá»± tối ưu hóa &&/|| trong quá trình thá»±c hiện có Ä‘iá»u kiện."
#: config/frv/frv.opt:190
-#, fuzzy
-#| msgid "Enable nested conditional execution optimizations"
msgid "Enable nested conditional execution optimizations."
-msgstr "Bật sá»± tối ưu hóa quá trình thá»±c hiện có Ä‘iá»u kiện mà cÅ©ng lồng nhau"
+msgstr "Bật sá»± tối ưu hóa quá trình thá»±c hiện có Ä‘iá»u kiện mà cÅ©ng lồng nhau."
#: config/frv/frv.opt:195
-#, fuzzy
-#| msgid "Do not mark ABI switches in e_flags"
msgid "Do not mark ABI switches in e_flags."
-msgstr "Äừng đánh dấu cái chuyển ABI trong e_flags"
+msgstr "Äừng đánh dấu cái chuyển ABI trong e_flags."
#: config/frv/frv.opt:199
-#, fuzzy
-#| msgid "Remove redundant membars"
msgid "Remove redundant membars."
-msgstr "Gỡ bỠthanh vùng nhớ thừa"
+msgstr "Gỡ bỠthanh vùng nhớ thừa."
#: config/frv/frv.opt:203
-#, fuzzy
-#| msgid "Pack VLIW instructions"
msgid "Pack VLIW instructions."
-msgstr "Äóng gói các câu lệnh VLIW"
+msgstr "Äóng gói các câu lệnh VLIW."
#: config/frv/frv.opt:207
-#, fuzzy
-#| msgid "Enable setting GPRs to the result of comparisons"
msgid "Enable setting GPRs to the result of comparisons."
-msgstr "Bật chức năng đặt GPR thành kết quả của phép so sánh"
+msgstr "Bật chức năng đặt GPR thành kết quả của phép so sánh."
#: config/frv/frv.opt:211
-#, fuzzy
-#| msgid "Change the amount of scheduler lookahead"
msgid "Change the amount of scheduler lookahead."
msgstr "Sá»­a đổi khoảng thá»i gian nhìn trước cá»§a công cụ định thá»i"
#: config/frv/frv.opt:219
-#, fuzzy
-#| msgid "Assume a large TLS segment"
msgid "Assume a large TLS segment."
-msgstr "Coi là một đoạn TLS lớn"
+msgstr "Coi là một đoạn TLS lớn."
#: config/frv/frv.opt:223
-#, fuzzy
-#| msgid "Do not assume a large TLS segment"
msgid "Do not assume a large TLS segment."
-msgstr "Äừng coi là má»™t Ä‘oạn TLS lá»›n"
+msgstr "Äừng coi là má»™t Ä‘oạn TLS lá»›n."
#: config/frv/frv.opt:228
-#, fuzzy
-#| msgid "Cause gas to print tomcat statistics"
msgid "Cause gas to print tomcat statistics."
-msgstr "Gây ra chương trình gas in ra thống kê vỠtomcat"
+msgstr "Gây ra chương trình gas in ra thống kê vỠtomcat."
#: config/frv/frv.opt:233
-#, fuzzy
-#| msgid "Link with the library-pic libraries"
msgid "Link with the library-pic libraries."
-msgstr "Liên kết với các thư viện library-pic"
+msgstr "Liên kết với các thư viện library-pic."
#: config/frv/frv.opt:237
-#, fuzzy
-#| msgid "Allow branches to be packed with other instructions"
msgid "Allow branches to be packed with other instructions."
-msgstr "Cho phép đóng gói nhánh với câu lệnh khác"
+msgstr "Cho phép đóng gói nhánh với câu lệnh khác."
#: config/mn10300/mn10300.opt:30
-#, fuzzy
-#| msgid "Target the AM33 processor"
msgid "Target the AM33 processor."
-msgstr "Äặt mục đích là bá»™ xá»­ lý AM33"
+msgstr "Äặt mục đích là bá»™ xá»­ lý AM33."
#: config/mn10300/mn10300.opt:34
-#, fuzzy
-#| msgid "Target the AM33/2.0 processor"
msgid "Target the AM33/2.0 processor."
-msgstr "Äặt mục đích là bá»™ xá»­ lý AM33/2.0"
+msgstr "Äặt mục đích là bá»™ xá»­ lý AM33/2.0."
#: config/mn10300/mn10300.opt:38
-#, fuzzy
-#| msgid "Target the AM34 processor"
msgid "Target the AM34 processor."
-msgstr "Äích là bá»™ xá»­ lý AM34"
+msgstr "Äích là bá»™ xá»­ lý AM34."
#: config/mn10300/mn10300.opt:46
-#, fuzzy
-#| msgid "Work around hardware multiply bug"
msgid "Work around hardware multiply bug."
-msgstr "Khắc phục lỗi nhân lên phần cứng"
+msgstr "Khắc phục lỗi nhân lên phần cứng."
#: config/mn10300/mn10300.opt:55
-#, fuzzy
-#| msgid "Enable linker relaxations"
msgid "Enable linker relaxations."
-msgstr "Bật hàm yếu vỠbộ liên kết"
+msgstr "Bật hàm yếu vỠbộ liên kết."
#: config/mn10300/mn10300.opt:59
-#, fuzzy
-#| msgid "Return pointers in both a0 and d0"
msgid "Return pointers in both a0 and d0."
-msgstr "Trả lại hàm trỠtrong cả hai a0 và d0"
+msgstr "Trả lại hàm trỠtrong cả hai a0 và d0."
#: config/mn10300/mn10300.opt:63
-#, fuzzy
-#| msgid "Allow gcc to generate LIW instructions"
msgid "Allow gcc to generate LIW instructions."
-msgstr "Cho phép gcc tạo chỉ lệnh LIW"
+msgstr "Cho phép gcc tạo chỉ lệnh LIW."
#: config/mn10300/mn10300.opt:67
-#, fuzzy
-#| msgid "Allow gcc to generate the SETLB and Lcc instructions"
msgid "Allow gcc to generate the SETLB and Lcc instructions."
-msgstr "Cho phép gcc tạo chỉ lệnh SETLB và Lcc"
+msgstr "Cho phép gcc tạo chỉ lệnh SETLB và Lcc."
#: config/nds32/nds32.opt:26
msgid "Generate code in big-endian mode."
@@ -14022,9 +11681,8 @@ msgid "Use reduced-set registers for register allocation."
msgstr ""
#: config/nds32/nds32.opt:38
-#, fuzzy
msgid "Use full-set registers for register allocation."
-msgstr "Sử dụng thanh ghi để gửi đối số qua"
+msgstr "Sử dụng cả bộ thanh ghi cho phân bổ thanh ghi."
#: config/nds32/nds32.opt:42
msgid "Generate conditional move instructions."
@@ -14035,13 +11693,12 @@ msgid "Generate performance extension instructions."
msgstr "Tạo chỉ lệnh năng suất mở rộng."
#: config/nds32/nds32.opt:50
-#, fuzzy
msgid "Generate v3 push25/pop25 instructions."
-msgstr "Tạo ra câu lệnh isel"
+msgstr "Tạo ra câu lệnh push25/pop25 v3."
#: config/nds32/nds32.opt:54
msgid "Generate 16-bit instructions."
-msgstr "Tạo ra câu lệnh 16-bit bit."
+msgstr "Tạo ra câu lệnh 16-bit."
#: config/nds32/nds32.opt:58
msgid "Specify the size of each interrupt vector, which must be 4 or 16."
@@ -14052,185 +11709,132 @@ msgid "Specify the size of each cache block, which must be a power of 2 between
msgstr ""
#: config/nds32/nds32.opt:70
-#, fuzzy
msgid "Known arch types (for use with the -march= option):"
-msgstr "Không hiểu kiến trúc ARM (để dùng vá»›i tùy chá»n -march=):"
+msgstr "Hiểu kiến trúc (để dùng vá»›i tùy chá»n -march=):"
#: config/nds32/nds32.opt:83
msgid "Specify the address generation strategy for code model."
msgstr ""
#: config/nds32/nds32.opt:87
-#, fuzzy
msgid "Known cmodel types (for use with the -mcmodel= option):"
-msgstr "Không hiểu M68K CPUs (để dùng vá»›i tùy chá»n -mcpu=):"
+msgstr "Hiểu cmodel (để dùng vá»›i tùy chá»n -mcmodel=):"
#: config/nds32/nds32.opt:100
msgid "Enable constructor/destructor feature."
msgstr "Bật tính năng cấu/hủy tử"
#: config/nds32/nds32.opt:104
-#, fuzzy
msgid "Guide linker to relax instructions."
-msgstr "Tạo ra câu lệnh isel"
+msgstr ""
#: config/iq2000/iq2000.opt:31
-#, fuzzy
-#| msgid "Specify CPU for code generation purposes"
msgid "Specify CPU for code generation purposes."
-msgstr "Ghi rõ CPU cho mục đích tạo ra mã"
+msgstr "Ghi rõ CPU cho mục đích tạo ra mã."
#: config/iq2000/iq2000.opt:47
-#, fuzzy
-#| msgid "Specify CPU for scheduling purposes"
msgid "Specify CPU for scheduling purposes."
-msgstr "Ghi rõ CPU cho mục đích định thá»i"
+msgstr "Ghi rõ CPU cho mục đích định thá»i."
#: config/iq2000/iq2000.opt:51
msgid "Known IQ2000 CPUs (for use with the -mcpu= option):"
msgstr "Không hiểu IQ2000 CPUs (để dùng vá»›i tùy chá»n -mcpu=):"
#: config/iq2000/iq2000.opt:61 config/mips/mips.opt:142
-#, fuzzy
-#| msgid "Use ROM instead of RAM"
msgid "Use ROM instead of RAM."
-msgstr "Sử dụng ROM thay cho RAM"
+msgstr "Sử dụng ROM thay cho RAM."
#: config/iq2000/iq2000.opt:70
-#, fuzzy
-#| msgid "No default crt0.o"
msgid "No default crt0.o."
-msgstr "Không có crt0.o mặc định"
+msgstr "Không có crt0.o mặc định."
#: config/iq2000/iq2000.opt:74 config/mips/mips.opt:393
-#, fuzzy
-#| msgid "Put uninitialized constants in ROM (needs -membedded-data)"
msgid "Put uninitialized constants in ROM (needs -membedded-data)."
-msgstr "Äể vào ROM các hằng số chưa khởi tạo (yêu cầu -membedded-data)"
+msgstr "Äể vào ROM các hằng số chưa khởi tạo (yêu cầu -membedded-data)."
#: config/c6x/c6x-tables.opt:24
msgid "Known C6X ISAs (for use with the -march= option):"
msgstr "Không hiểu C6X ISAs (để dùng vá»›i tùy chá»n -march=):"
#: config/c6x/c6x.opt:46
-#, fuzzy
-#| msgid "Valid arguments for the -msdata= option"
msgid "Valid arguments for the -msdata= option."
-msgstr "Äối số hợp lệ cho tùy chá»n -msdata="
+msgstr "Äối số hợp lệ cho tùy chá»n -msdata=."
#: config/c6x/c6x.opt:59
-#, fuzzy
-#| msgid "Create a shared library"
msgid "Compile for the DSBT shared library ABI."
msgstr "Tạo thư viện dùng chung"
#: config/cris/linux.opt:27
-#, fuzzy
-#| msgid "Together with -fpic and -fPIC, do not use GOTPLT references"
msgid "Together with -fpic and -fPIC, do not use GOTPLT references."
-msgstr "Äừng sá»­ dụng tham chiếu GOTPLT cùng vá»›i -fpic hoặc -fPIC"
+msgstr "Äừng sá»­ dụng tham chiếu GOTPLT cùng vá»›i -fpic hoặc -fPIC."
#: config/cris/cris.opt:45
-#, fuzzy
-#| msgid "Work around bug in multiplication instruction"
msgid "Work around bug in multiplication instruction."
-msgstr "Khắc phục lỗi trong câu lệnh nhân lên"
+msgstr "Khắc phục lỗi trong câu lệnh nhân lên."
#: config/cris/cris.opt:51
-#, fuzzy
-#| msgid "Compile for ETRAX 4 (CRIS v3)"
msgid "Compile for ETRAX 4 (CRIS v3)."
-msgstr "Biên dịch cho ETRAX 4 (CRIS v3)"
+msgstr "Biên dịch cho ETRAX 4 (CRIS v3)."
#: config/cris/cris.opt:56
-#, fuzzy
-#| msgid "Compile for ETRAX 100 (CRIS v8)"
msgid "Compile for ETRAX 100 (CRIS v8)."
-msgstr "Biên dịch cho ETRAX 100 (CRIS v8)"
+msgstr "Biên dịch cho ETRAX 100 (CRIS v8)."
#: config/cris/cris.opt:64
-#, fuzzy
-#| msgid "Emit verbose debug information in assembly code"
msgid "Emit verbose debug information in assembly code."
-msgstr "Xuất nhiá»u thông tin gỡ rối trong mã dịch mã số"
+msgstr "Xuất nhiá»u thông tin gỡ rối trong mã dịch mã số."
#: config/cris/cris.opt:71
-#, fuzzy
-#| msgid "Do not use condition codes from normal instructions"
msgid "Do not use condition codes from normal instructions."
-msgstr "Äừng sá»­ dụng mã Ä‘iá»u kiện từ câu lệnh thông thưá»ng"
+msgstr "Äừng sá»­ dụng mã Ä‘iá»u kiện từ câu lệnh thông thưá»ng."
#: config/cris/cris.opt:80
-#, fuzzy
-#| msgid "Do not emit addressing modes with side-effect assignment"
msgid "Do not emit addressing modes with side-effect assignment."
-msgstr "Äừng xuất chế độ đặt địa chỉ vá»›i sá»± gán hiệu ứng khác"
+msgstr "Äừng xuất chế độ đặt địa chỉ vá»›i sá»± gán hiệu ứng cạnh."
#: config/cris/cris.opt:89
-#, fuzzy
-#| msgid "Do not tune stack alignment"
msgid "Do not tune stack alignment."
-msgstr "Äừng Ä‘iá»u chỉnh sá»± xếp hàng ngăn xếp"
+msgstr "Äừng Ä‘iá»u chỉnh sá»± xếp hàng ngăn xếp."
#: config/cris/cris.opt:98
-#, fuzzy
-#| msgid "Do not tune writable data alignment"
msgid "Do not tune writable data alignment."
-msgstr "Äừng Ä‘iá»u chỉnh sá»± xếp hàng dữ liệu có thể ghi được"
+msgstr "Äừng Ä‘iá»u chỉnh sá»± xếp hàng dữ liệu có thể ghi được."
#: config/cris/cris.opt:107
-#, fuzzy
-#| msgid "Do not tune code and read-only data alignment"
msgid "Do not tune code and read-only data alignment."
-msgstr "Äừng Ä‘iá»u chỉnh sá»± xếp hàng mã và dữ liệu chỉ-Ä‘á»c"
+msgstr "Äừng Ä‘iá»u chỉnh sá»± xếp hàng mã và dữ liệu chỉ-Ä‘á»c."
#: config/cris/cris.opt:116
-#, fuzzy
-#| msgid "Align code and data to 32 bits"
msgid "Align code and data to 32 bits."
-msgstr "Xếp hàng mã và dữ liệu theo 32-bit"
+msgstr "Xếp hàng mã và dữ liệu theo 32-bit."
#: config/cris/cris.opt:133
-#, fuzzy
-#| msgid "Don't align items in code or data"
msgid "Don't align items in code or data."
-msgstr "Äừng xếp hàng các mục trong mã hoặc dữ liệu"
+msgstr "Äừng xếp hàng các mục trong mã hoặc dữ liệu."
#: config/cris/cris.opt:142
-#, fuzzy
-#| msgid "Do not emit function prologue or epilogue"
msgid "Do not emit function prologue or epilogue."
-msgstr "Äừng xuất Ä‘oạn mở/đóng hàm"
+msgstr "Äừng xuất Ä‘oạn mở/đóng hàm."
#: config/cris/cris.opt:149
-#, fuzzy
-#| msgid "Use the most feature-enabling options allowed by other options"
msgid "Use the most feature-enabling options allowed by other options."
-msgstr "Sá»­ dụng những tùy chá»n bật nhiá»u tính năng nhất tùy theo giá»›i hạn cá»§a tùy chá»n khác"
+msgstr "Sá»­ dụng những tùy chá»n bật nhiá»u tính năng nhất tùy theo giá»›i hạn cá»§a tùy chá»n khác."
#: config/cris/cris.opt:158
-#, fuzzy
-#| msgid "Override -mbest-lib-options"
msgid "Override -mbest-lib-options."
-msgstr "Ghi đè lên -mbest-lib-options"
+msgstr "Ghi đè lên -mbest-lib-options."
#: config/cris/cris.opt:165
-#, fuzzy
-#| msgid "-march=ARCH\tGenerate code for the specified chip or CPU version"
msgid "-march=ARCH\tGenerate code for the specified chip or CPU version."
-msgstr "-march=KIẾN_TRÚC\tTạo ra mã cho phiến tinh thể hoặc CPU đưa ra"
+msgstr "-march=KIẾN_TRÚC\tTạo ra mã cho phiến tinh thể hoặc CPU đưa ra."
#: config/cris/cris.opt:169
-#, fuzzy
-#| msgid "-mtune=ARCH\tTune alignment for the specified chip or CPU version"
msgid "-mtune=ARCH\tTune alignment for the specified chip or CPU version."
-msgstr "-mtune=KIẾN_TRÚC\tÄiá»u chỉnh sá»± xếp hàng cho phiến tinh thể hoặc CPU đưa ra"
+msgstr "-mtune=KIẾN_TRÚC\tÄiá»u chỉnh sá»± xếp hàng cho chíp hoặc CPU đưa ra."
#: config/cris/cris.opt:173
-#, fuzzy
-#| msgid "-mmax-stackframe=SIZE\tWarn when a stackframe is larger than the specified size"
msgid "-mmax-stackframe=SIZE\tWarn when a stackframe is larger than the specified size."
-msgstr "-mmax-stackframe=KÃCH_Cá» \tCảnh báo khung ngăn xếp nào vượt quá kích cỡ này"
+msgstr "-mmax-stackframe=KÃCH_Cá» \tCảnh báo khung ngăn xếp nào vượt quá kích cỡ này."
#: config/cris/cris.opt:180
msgid "Emit traps as \"break 8\", default for CRIS v3 and up. If disabled, calls to abort() are used."
@@ -14253,260 +11857,176 @@ msgid "Runtime name."
msgstr "Tên lúc chạy."
#: config/sh/sh.opt:48
-#, fuzzy
-#| msgid "Generate SH1 code"
msgid "Generate SH1 code."
-msgstr "Tạo ra mã SH1"
+msgstr "Tạo ra mã SH1."
#: config/sh/sh.opt:52
-#, fuzzy
-#| msgid "Generate SH2 code"
msgid "Generate SH2 code."
-msgstr "Tạo ra mã SH2"
+msgstr "Tạo ra mã SH2."
#: config/sh/sh.opt:56
-#, fuzzy
-#| msgid "Generate default double-precision SH2a-FPU code"
msgid "Generate default double-precision SH2a-FPU code."
-msgstr "Tạo ra mã SH2a-FPU chính xác đôi mặc định"
+msgstr "Tạo ra mã SH2a-FPU chính xác đôi mặc định."
#: config/sh/sh.opt:60
-#, fuzzy
-#| msgid "Generate SH2a FPU-less code"
msgid "Generate SH2a FPU-less code."
-msgstr "Tạo ra mã SH2a không có FPU"
+msgstr "Tạo ra mã SH2a không có FPU."
#: config/sh/sh.opt:64
-#, fuzzy
-#| msgid "Generate default single-precision SH2a-FPU code"
msgid "Generate default single-precision SH2a-FPU code."
-msgstr "Tạo ra mã SH2a-FPU chính xác đơn mặc định"
+msgstr "Tạo ra mã SH2a-FPU chính xác đơn mặc định."
#: config/sh/sh.opt:68
-#, fuzzy
-#| msgid "Generate only single-precision SH2a-FPU code"
msgid "Generate only single-precision SH2a-FPU code."
-msgstr "Tạo ra chỉ mã SH2a-FPU chính xác đơn"
+msgstr "Tạo ra chỉ mã SH2a-FPU chính xác đơn."
#: config/sh/sh.opt:72
-#, fuzzy
-#| msgid "Generate SH2e code"
msgid "Generate SH2e code."
-msgstr "Tạo ra mã SH2e"
+msgstr "Tạo ra mã SH2e."
#: config/sh/sh.opt:76
-#, fuzzy
-#| msgid "Generate SH3 code"
msgid "Generate SH3 code."
-msgstr "Tạo ra mã SH3"
+msgstr "Tạo ra mã SH3."
#: config/sh/sh.opt:80
-#, fuzzy
-#| msgid "Generate SH3e code"
msgid "Generate SH3e code."
-msgstr "Tạo ra mã SH3e"
+msgstr "Tạo ra mã SH3e."
#: config/sh/sh.opt:84
-#, fuzzy
-#| msgid "Generate SH4 code"
msgid "Generate SH4 code."
-msgstr "Tạo ra mã SH4"
+msgstr "Tạo ra mã SH4."
#: config/sh/sh.opt:88
-#, fuzzy
-#| msgid "Generate SH4-100 code"
msgid "Generate SH4-100 code."
-msgstr "Tạo ra mã SH4-100"
+msgstr "Tạo ra mã SH4-100."
#: config/sh/sh.opt:92
-#, fuzzy
-#| msgid "Generate SH4-200 code"
msgid "Generate SH4-200 code."
-msgstr "Tạo ra mã SH4-200"
+msgstr "Tạo ra mã SH4-200."
#: config/sh/sh.opt:98
-#, fuzzy
-#| msgid "Generate SH4-300 code"
msgid "Generate SH4-300 code."
-msgstr "Tạo ra mã SH4-300"
+msgstr "Tạo ra mã SH4-300."
#: config/sh/sh.opt:102
-#, fuzzy
-#| msgid "Generate SH4 FPU-less code"
msgid "Generate SH4 FPU-less code."
-msgstr "Tạo ra mã SH4 không có FPU"
+msgstr "Tạo ra mã SH4 không có FPU."
#: config/sh/sh.opt:106
-#, fuzzy
-#| msgid "Generate SH4-100 FPU-less code"
msgid "Generate SH4-100 FPU-less code."
-msgstr "Tạo ra mã SH4-100 không có FPU"
+msgstr "Tạo ra mã SH4-100 không có FPU."
#: config/sh/sh.opt:110
-#, fuzzy
-#| msgid "Generate SH4-200 FPU-less code"
msgid "Generate SH4-200 FPU-less code."
-msgstr "Tạo ra mã SH4-200 không có FPU"
+msgstr "Tạo ra mã SH4-200 không có FPU."
#: config/sh/sh.opt:114
-#, fuzzy
-#| msgid "Generate SH4-300 FPU-less code"
msgid "Generate SH4-300 FPU-less code."
-msgstr "Tạo ra mã SH4-300 không có FPU"
+msgstr "Tạo ra mã SH4-300 không có FPU."
#: config/sh/sh.opt:118
-#, fuzzy
-#| msgid "Generate code for SH4 340 series (MMU/FPU-less)"
msgid "Generate code for SH4 340 series (MMU/FPU-less)."
-msgstr "Tạo ra mã cho loạt SH4 340 (không có MMU/FPU)"
+msgstr "Tạo ra mã cho loạt SH4 340 (không có MMU/FPU)."
#: config/sh/sh.opt:123
-#, fuzzy
-#| msgid "Generate code for SH4 400 series (MMU/FPU-less)"
msgid "Generate code for SH4 400 series (MMU/FPU-less)."
-msgstr "Tạo ra mã cho loạt SH4 400 (không có MMU/FPU)"
+msgstr "Tạo ra mã cho loạt SH4 400 (không có MMU/FPU)."
#: config/sh/sh.opt:128
msgid "Generate code for SH4 500 series (FPU-less)."
-msgstr "Tạo ra mã cho loạt SH4 500 (không có MMU/FPU)"
+msgstr "Tạo ra mã cho loạt SH4 500 (không có MMU/FPU)."
#: config/sh/sh.opt:133
-#, fuzzy
-#| msgid "Generate default single-precision SH4 code"
msgid "Generate default single-precision SH4 code."
-msgstr "Tạo ra mã SH4 chính xác đơn mặc định"
+msgstr "Tạo ra mã SH4 chính xác đơn mặc định."
#: config/sh/sh.opt:137
-#, fuzzy
-#| msgid "Generate default single-precision SH4-100 code"
msgid "Generate default single-precision SH4-100 code."
-msgstr "Tạo ra mã SH4-100 chính xác đơn mặc định"
+msgstr "Tạo ra mã SH4-100 chính xác đơn mặc định."
#: config/sh/sh.opt:141
-#, fuzzy
-#| msgid "Generate default single-precision SH4-200 code"
msgid "Generate default single-precision SH4-200 code."
-msgstr "Tạo ra mã SH4-200 chính xác đơn mặc định"
+msgstr "Tạo ra mã SH4-200 chính xác đơn mặc định."
#: config/sh/sh.opt:145
-#, fuzzy
-#| msgid "Generate default single-precision SH4-300 code"
msgid "Generate default single-precision SH4-300 code."
-msgstr "Tạo ra mã SH4-300 chính xác đơn mặc định"
+msgstr "Tạo ra mã SH4-300 chính xác đơn mặc định."
#: config/sh/sh.opt:149
-#, fuzzy
-#| msgid "Generate only single-precision SH4 code"
msgid "Generate only single-precision SH4 code."
-msgstr "Tạo ra chỉ mã SH4 chính xác đơn"
+msgstr "Tạo ra chỉ mã SH4 chính xác đơn."
#: config/sh/sh.opt:153
-#, fuzzy
-#| msgid "Generate only single-precision SH4-100 code"
msgid "Generate only single-precision SH4-100 code."
-msgstr "Tạo ra chỉ mã SH4-100 chính xác đơn"
+msgstr "Tạo ra chỉ mã SH4-100 chính xác đơn."
#: config/sh/sh.opt:157
-#, fuzzy
-#| msgid "Generate only single-precision SH4-200 code"
msgid "Generate only single-precision SH4-200 code."
-msgstr "Tạo ra chỉ mã SH4-200 chính xác đơn"
+msgstr "Tạo ra chỉ mã SH4-200 chính xác đơn."
#: config/sh/sh.opt:161
-#, fuzzy
-#| msgid "Generate only single-precision SH4-300 code"
msgid "Generate only single-precision SH4-300 code."
-msgstr "Tạo ra chỉ mã SH4-300 chính xác đơn"
+msgstr "Tạo ra chỉ mã SH4-300 chính xác đơn."
#: config/sh/sh.opt:165
-#, fuzzy
-#| msgid "Generate SH4a code"
msgid "Generate SH4a code."
-msgstr "Tạo ra mã SH4a"
+msgstr "Tạo ra mã SH4a."
#: config/sh/sh.opt:169
-#, fuzzy
-#| msgid "Generate SH4a FPU-less code"
msgid "Generate SH4a FPU-less code."
-msgstr "Tạo ra mã SH4a không có FPU"
+msgstr "Tạo ra mã SH4a không có FPU."
#: config/sh/sh.opt:173
-#, fuzzy
-#| msgid "Generate default single-precision SH4a code"
msgid "Generate default single-precision SH4a code."
-msgstr "Tạo ra mã SH4a chính xác đơn mặc định"
+msgstr "Tạo ra mã SH4a chính xác đơn mặc định."
#: config/sh/sh.opt:177
-#, fuzzy
-#| msgid "Generate only single-precision SH4a code"
msgid "Generate only single-precision SH4a code."
-msgstr "Tạo ra chỉ mã SH4a chính xác đơn"
+msgstr "Tạo ra chỉ mã SH4a chính xác đơn."
#: config/sh/sh.opt:181
-#, fuzzy
-#| msgid "Generate SH4al-dsp code"
msgid "Generate SH4al-dsp code."
-msgstr "Tạo ra mã SH4al-dsp"
+msgstr "Tạo ra mã SH4al-dsp."
#: config/sh/sh.opt:185
-#, fuzzy
-#| msgid "Generate 32-bit SHmedia code"
msgid "Generate 32-bit SHmedia code."
-msgstr "Tạo ra mã SHmedia 32-bit"
+msgstr "Tạo ra mã SHmedia 32-bit."
#: config/sh/sh.opt:189
-#, fuzzy
-#| msgid "Generate 32-bit FPU-less SHmedia code"
msgid "Generate 32-bit FPU-less SHmedia code."
-msgstr "Tạo ra mã SHmedia 32-bit không có FPU"
+msgstr "Tạo ra mã SHmedia 32-bit không có FPU."
#: config/sh/sh.opt:193
-#, fuzzy
-#| msgid "Generate 64-bit SHmedia code"
msgid "Generate 64-bit SHmedia code."
-msgstr "Tạo ra mã SHmedia 64-bit"
+msgstr "Tạo ra mã SHmedia 64-bit."
#: config/sh/sh.opt:197
-#, fuzzy
-#| msgid "Generate 64-bit FPU-less SHmedia code"
msgid "Generate 64-bit FPU-less SHmedia code."
-msgstr "Tạo ra mã SHmedia 64-bit không có FPU"
+msgstr "Tạo ra mã SHmedia 64-bit không có FPU."
#: config/sh/sh.opt:201
-#, fuzzy
-#| msgid "Generate SHcompact code"
msgid "Generate SHcompact code."
-msgstr "Tạo ra mã SHcompact"
+msgstr "Tạo ra mã SHcompact."
#: config/sh/sh.opt:205
-#, fuzzy
-#| msgid "Generate FPU-less SHcompact code"
msgid "Generate FPU-less SHcompact code."
-msgstr "Tạo ra mã SHcompact không có FPU"
+msgstr "Tạo ra mã SHcompact không có FPU."
#: config/sh/sh.opt:217
-#, fuzzy
-#| msgid "Generate code in big endian mode"
msgid "Generate code in big endian mode."
-msgstr "Tạo mã trong chế độ vỠcuối lớn"
+msgstr "Tạo mã trong chế độ vỠcuối lớn."
#: config/sh/sh.opt:221
-#, fuzzy
-#| msgid "Generate 32-bit offsets in switch tables"
msgid "Generate 32-bit offsets in switch tables."
-msgstr "Tạo ra hiệu số 32-bit trong bảng cái chuyển"
+msgstr "Tạo ra hiệu số 32-bit trong bảng cái chuyển."
#: config/sh/sh.opt:225
-#, fuzzy
-#| msgid "Generate bit instructions"
msgid "Generate bit instructions."
-msgstr "Tạo ra câu lệnh bit"
+msgstr "Tạo ra câu lệnh bit."
#: config/sh/sh.opt:229
-#, fuzzy
-#| msgid "Cost to assume for a branch insn"
msgid "Cost to assume for a branch insn."
-msgstr "Giá cần coi đối với một câu lệnh nhánh"
+msgstr "Giá cần coi đối với một câu lệnh nhánh."
#: config/sh/sh.opt:233
msgid "Assume that zero displacement conditional branches are fast."
@@ -14518,10 +12038,8 @@ msgid "%qs is deprecated and has no effect"
msgstr "%qs đã lá»—i thá»i và không có tác động gì"
#: config/sh/sh.opt:237
-#, fuzzy
-#| msgid "Enable cbranchdi4 pattern"
msgid "Enable cbranchdi4 pattern."
-msgstr "Bật mẫu cbranchdi4"
+msgstr "Bật mẫu cbranchdi4."
#: config/sh/sh.opt:241
msgid "Emit cmpeqdi_t pattern even when -mcbranchdi is in effect."
@@ -14532,139 +12050,100 @@ msgid "Force the usage of delay slots for conditional branches."
msgstr ""
#: config/sh/sh.opt:249
-#, fuzzy
-#| msgid "Enable SH5 cut2 workaround"
msgid "Enable SH5 cut2 workaround."
-msgstr "Bật khắc phục cut2 SH5"
+msgstr "Bật khắc phục cut2 SH5."
#: config/sh/sh.opt:253
-#, fuzzy
-#| msgid "Align doubles at 64-bit boundaries"
msgid "Align doubles at 64-bit boundaries."
-msgstr "Xếp hàng các đôi theo biên giới 64-bit"
+msgstr "Xếp hàng các đôi theo biên giới 64-bit."
#: config/sh/sh.opt:257
-#, fuzzy
-#| msgid "Division strategy, one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, inv:call2, inv:fp, call-div1, call-fp, call-table"
msgid "Division strategy, one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, inv:call2, inv:fp, call-div1, call-fp, call-table."
-msgstr "Chiến lược chia là một của: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, inv:call2, inv:fp, call-div1, call-fp, call-table"
+msgstr "Chiến lược chia là một của: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, inv:call2, inv:fp, call-div1, call-fp, call-table."
#: config/sh/sh.opt:261
-#, fuzzy
-#| msgid "Specify name for 32 bit signed division function"
msgid "Specify name for 32 bit signed division function."
-msgstr "Ghi rõ tên cho hàm chia đã ký 32-bit"
+msgstr "Ghi rõ tên cho hàm chia đã ký 32-bit."
#: config/sh/sh.opt:265
-#, fuzzy
-#| msgid "Generate LP64 code"
msgid "Generate ELF FDPIC code."
-msgstr "Tạo ra mã LP64"
+msgstr "Tạo ra mã ELF FDPIC."
#: config/sh/sh.opt:269
msgid "Enable the use of 64-bit floating point registers in fmov instructions. See -mdalign if 64-bit alignment is required."
msgstr "Bật sử dụng thay ghi dấu chấm động 64-bit trong câu lệnh fmov. Xem -mdalign nếu cũng yêu cầu xếp hàng theo 64-bit."
#: config/sh/sh.opt:277
-#, fuzzy
-#| msgid "Cost to assume for gettr insn"
msgid "Cost to assume for gettr insn."
-msgstr "Giá cần coi đối với câu lệnh gettr"
+msgstr "Giá cần coi đối với câu lệnh gettr."
#: config/sh/sh.opt:281 config/sh/sh.opt:331
-#, fuzzy
-#| msgid "Follow Renesas (formerly Hitachi) / SuperH calling conventions"
msgid "Follow Renesas (formerly Hitachi) / SuperH calling conventions."
msgstr "Theo quy ước gá»i SuperH / Renesas (còn gá»i là Hitachi)"
#: config/sh/sh.opt:285
-#, fuzzy
msgid "Increase the IEEE compliance for floating-point comparisons."
-msgstr "Sá»­ dụng toán há»c IEEE cho phép so sánh dấu chấm động"
+msgstr "Sá»­ dụng toán há»c IEEE cho phép so sánh dấu chấm động."
#: config/sh/sh.opt:289
-#, fuzzy
-#| msgid "Enable the use of the indexed addressing mode for SHmedia32/SHcompact"
msgid "Enable the use of the indexed addressing mode for SHmedia32/SHcompact."
-msgstr "Bật sử dụng chế độ đặt địa chỉ loại phụ lục cho SHmedia32/SHcompact"
+msgstr "Bật sử dụng chế độ đặt địa chỉ loại phụ lục cho SHmedia32/SHcompact."
#: config/sh/sh.opt:293
-#, fuzzy
-#| msgid "inline code to invalidate instruction cache entries after setting up nested function trampolines"
msgid "inline code to invalidate instruction cache entries after setting up nested function trampolines."
-msgstr "chèn mã vào trực tiếp để tắt các mục nhập vùng nhớ tạm câu lệnh sau khi cài đặt các trampoline hàm lồng nhau"
+msgstr "chèn mã vào trực tiếp để tắt các mục nhập vùng nhớ tạm câu lệnh sau khi cài đặt các trampoline hàm lồng nhau."
#: config/sh/sh.opt:297
-#, fuzzy
-#| msgid "Assume symbols might be invalid"
msgid "Assume symbols might be invalid."
-msgstr "Coi là ký hiệu có thể không hợp lệ"
+msgstr "Coi là ký hiệu có thể không hợp lệ."
#: config/sh/sh.opt:301 config/arc/arc.opt:209
-#, fuzzy
-#| msgid "Annotate assembler instructions with estimated addresses"
msgid "Annotate assembler instructions with estimated addresses."
-msgstr "Phụ chú câu lệnh dịch mã số bằng địa chỉ ước lượng"
+msgstr "Phụ chú câu lệnh dịch mã số bằng địa chỉ ước lượng."
#: config/sh/sh.opt:305
-#, fuzzy
-#| msgid "Generate code in little endian mode"
msgid "Generate code in little endian mode."
-msgstr "Tạo ra mã trong chế độ vá» cuối nhá»"
+msgstr "Tạo ra mã trong chế độ vá» cuối nhá»."
#: config/sh/sh.opt:309
-#, fuzzy
-#| msgid "Mark MAC register as call-clobbered"
msgid "Mark MAC register as call-clobbered."
-msgstr "Äánh dấu thanh ghi MAC như là bị cuá»™c gá»i ghi đè"
+msgstr "Äánh dấu thanh ghi MAC như là bị cuá»™c gá»i ghi đè."
#: config/sh/sh.opt:315
-#, fuzzy
-#| msgid "Make structs a multiple of 4 bytes (warning: ABI altered)"
msgid "Make structs a multiple of 4 bytes (warning: ABI altered)."
-msgstr "Làm cho cấu trúc là một bội số cho 4 byte (cảnh báo: ABI bị sửa đổi)"
+msgstr "Làm cho cấu trúc một bội số cho 4 byte (cảnh báo: ABI bị sửa đổi)."
#: config/sh/sh.opt:319
-#, fuzzy
-#| msgid "Emit function-calls using global offset table when generating PIC"
msgid "Emit function-calls using global offset table when generating PIC."
-msgstr "Xuất cuá»™c gá»i hàm dùng bảng hiệu số toàn cục khi tạo ra PIC"
+msgstr "Xuất cuá»™c gá»i hàm dùng bảng hiệu số toàn cục khi tạo ra PIC."
#: config/sh/sh.opt:323
msgid "Assume pt* instructions won't trap"
msgstr "Coi là câu oệnh pt* sẽ không bẫy"
#: config/sh/sh.opt:327
-#, fuzzy
-#| msgid "Shorten address references during linking"
msgid "Shorten address references during linking."
-msgstr "Cắt ngắn tham chiếu địa chỉ trong khi liên kết"
+msgstr "Cắt ngắn tham chiếu địa chỉ trong khi liên kết."
#: config/sh/sh.opt:335
msgid "Deprecated. Use -matomic= instead to select the atomic model."
msgstr ""
#: config/sh/sh.opt:339
-#, fuzzy
-#| msgid "Generate code for built-in atomic operations"
msgid "Specify the model for atomic operations."
-msgstr "Tạo ra mã cho các thao tác atomic dựng sẵn"
+msgstr "Tạo ra mã cho các thao tác atomic."
#: config/sh/sh.opt:343
msgid "Use tas.b instruction for __atomic_test_and_set."
-msgstr ""
+msgstr "Dùng chỉ lệnh tas.b cho __atomic_test_and_set."
#: config/sh/sh.opt:347
-#, fuzzy
-#| msgid "Deprecated. Use -Os instead"
msgid "Deprecated. Use -Os instead."
-msgstr "Bị phân đối nên hãy sử dụng đối số -Os để thay thế"
+msgstr "Bị phân đối nên hãy sử dụng đối số -Os để thay thế."
#: config/sh/sh.opt:351
-#, fuzzy
-#| msgid "Cost to assume for a multiply insn"
msgid "Cost to assume for a multiply insn."
-msgstr "Giá cần coi cho một câu lệnh nhân lên"
+msgstr "Giá cần coi cho một câu lệnh nhân lên."
#: config/sh/sh.opt:355
msgid "Don't generate privileged-mode only code; implies -mno-inline-ic_invalidate if the inline code would not work in user mode."
@@ -14675,404 +12154,276 @@ msgid "Pretend a branch-around-a-move is a conditional move."
msgstr "Làm ra vẻ rằng branch-around-a-move là má»™t sá»± di chuyển có Ä‘iá»u kiện."
#: config/sh/sh.opt:365
-#, fuzzy
-#| msgid "Enable the use of the short load instructions"
msgid "Enable the use of the fsca instruction."
-msgstr "Bật sử dụng câu lệnh nạp ngắn"
+msgstr "Bật sử dụng câu lệnh fsca."
#: config/sh/sh.opt:369
-#, fuzzy
-#| msgid "Enable the use of the short load instructions"
msgid "Enable the use of the fsrra instruction."
-msgstr "Bật sử dụng câu lệnh nạp ngắn"
+msgstr "Bật sử dụng câu lệnh fsrra."
#: config/sh/sh.opt:373
-#, fuzzy
msgid "Use LRA instead of reload (transitional)."
-msgstr "Sử dụng ROM thay cho RAM"
+msgstr "Sử dụng LRA thay cho reload (cổ điển)."
#: config/fr30/fr30.opt:23
-#, fuzzy
-#| msgid "Assume small address space"
msgid "Assume small address space."
-msgstr "Coi là có má»™t vùng địa chỉ nhá»"
+msgstr "Coi là có má»™t vùng địa chỉ nhá»."
#: config/mep/mep.opt:23
-#, fuzzy
-#| msgid "Enable absolute difference instructions"
msgid "Enable absolute difference instructions."
-msgstr "Bật câu lệnh khác biệt tuyệt đối"
+msgstr "Bật câu lệnh khác biệt tuyệt đối."
#: config/mep/mep.opt:27
-#, fuzzy
-#| msgid "Enable all optional instructions"
msgid "Enable all optional instructions."
-msgstr "Bật tất cả các câu lệnh vẫn tùy chá»n"
+msgstr "Bật tất cả các câu lệnh tùy chá»n."
#: config/mep/mep.opt:31
-#, fuzzy
-#| msgid "Enable average instructions"
msgid "Enable average instructions."
-msgstr "Bật các câu lệnh tính số trung bình"
+msgstr "Bật các câu lệnh tính số trung bình."
#: config/mep/mep.opt:35
-#, fuzzy
-#| msgid "Variables this size and smaller go in the based section. (default 0)"
msgid "Variables this size and smaller go in the based section. (default 0)."
-msgstr "Giá trị có thể đặt được có kích cỡ đến số này thì nằm trong phần based (dựa vào). (mặc định là 0)"
+msgstr "Giá trị có thể đặt được có kích cỡ đến số này thì nằm trong phần based (dựa vào). (mặc định là 0)."
#: config/mep/mep.opt:39
-#, fuzzy
-#| msgid "Enable bit manipulation instructions"
msgid "Enable bit manipulation instructions."
-msgstr "Bật các câu lệnh thao tác bit"
+msgstr "Bật các câu lệnh thao tác bit."
#: config/mep/mep.opt:43
-#, fuzzy
-#| msgid "Section to put all const variables in (tiny, near, far) (no default)"
msgid "Section to put all const variables in (tiny, near, far) (no default)."
msgstr ""
"Phần vào đó cần để tất cả các giá trị bất biến có thể đặt được (tiny, near, far) (không có giá trị mặc định)\n"
"tiny\t\trất nhá»\n"
"near\t\tgần\n"
-"far\t\txa"
+"far\t\txa."
#: config/mep/mep.opt:47
-#, fuzzy
-#| msgid "Enable clip instructions"
msgid "Enable clip instructions."
-msgstr "Bật các câu lệnh trích đoạn"
+msgstr "Bật các câu lệnh trích đoạn."
#: config/mep/mep.opt:51
-#, fuzzy
-#| msgid "Configuration name"
msgid "Configuration name."
-msgstr "Tên cấu hình"
+msgstr "Tên cấu hình."
#: config/mep/mep.opt:55
-#, fuzzy
-#| msgid "Enable MeP Coprocessor"
msgid "Enable MeP Coprocessor."
-msgstr "Bật bộ đồng xử lý MeP"
+msgstr "Bật bộ đồng xử lý MeP."
#: config/mep/mep.opt:59
-#, fuzzy
-#| msgid "Enable MeP Coprocessor with 32-bit registers"
msgid "Enable MeP Coprocessor with 32-bit registers."
-msgstr "Bật bộ đồng xử lý MeP với thanh ghi 32-bit"
+msgstr "Bật bộ đồng xử lý MeP với thanh ghi 32-bit."
#: config/mep/mep.opt:63
-#, fuzzy
-#| msgid "Enable MeP Coprocessor with 64-bit registers"
msgid "Enable MeP Coprocessor with 64-bit registers."
-msgstr "Bật bộ đồng xử lý MeP với thanh ghi 64-bit"
+msgstr "Bật bộ đồng xử lý MeP với thanh ghi 64-bit."
#: config/mep/mep.opt:67
-#, fuzzy
-#| msgid "Enable IVC2 scheduling"
msgid "Enable IVC2 scheduling."
-msgstr "Bật chức năng định thá»i IVC2"
+msgstr "Bật chức năng định thá»i IVC2."
#: config/mep/mep.opt:71
-#, fuzzy
-#| msgid "Const variables default to the near section"
msgid "Const variables default to the near section."
-msgstr "Giá trị bất biến có thể đặt được thì có phần mặc định là near (gần)"
+msgstr "Giá trị bất biến có thể đặt được thì có phần mặc định là near (gần)."
#: config/mep/mep.opt:78
-#, fuzzy
-#| msgid "Enable 32-bit divide instructions"
msgid "Enable 32-bit divide instructions."
-msgstr "Bật câu lệnh chia loại 32-bit"
+msgstr "Bật câu lệnh chia loại 32-bit."
#: config/mep/mep.opt:93
-#, fuzzy
-#| msgid "__io vars are volatile by default"
msgid "__io vars are volatile by default."
-msgstr "Biến __io thì hay thay đổi theo mặc định"
+msgstr "Biến __io thì hay thay đổi theo mặc định."
#: config/mep/mep.opt:97
-#, fuzzy
-#| msgid "All variables default to the far section"
msgid "All variables default to the far section."
-msgstr "Tất cả các giá trị có thể đặt được thì có phần mặc định là far (xa)"
+msgstr "Tất cả các giá trị có thể đặt được thì có phần mặc định là far (xa)."
#: config/mep/mep.opt:101
-#, fuzzy
-#| msgid "Enable leading zero instructions"
msgid "Enable leading zero instructions."
-msgstr "Bật câu lệnh có số không đi trước"
+msgstr "Bật câu lệnh có số không đi trước."
#: config/mep/mep.opt:108
-#, fuzzy
-#| msgid "All variables default to the near section"
msgid "All variables default to the near section."
-msgstr "Tất cả các giá trị có thể đặt được thì có phần mặc định là near (gần)"
+msgstr "Tất cả các giá trị có thể đặt được thì có phần mặc định là near (gần)."
#: config/mep/mep.opt:112
-#, fuzzy
-#| msgid "Enable min/max instructions"
msgid "Enable min/max instructions."
-msgstr "Bật câu lệnh tính số tối đa/thiểu"
+msgstr "Bật câu lệnh tính số tối đa/thiểu."
#: config/mep/mep.opt:116
-#, fuzzy
-#| msgid "Enable 32-bit multiply instructions"
msgid "Enable 32-bit multiply instructions."
-msgstr "Bật câu lệnh nhân lên loại 32-bit"
+msgstr "Bật câu lệnh nhân lên loại 32-bit."
#: config/mep/mep.opt:120
-#, fuzzy
-#| msgid "Disable all optional instructions"
msgid "Disable all optional instructions."
-msgstr "Tắt tất cả các câu lệnh vẫn tùy chá»n"
+msgstr "Tắt tất cả các câu lệnh tùy chá»n."
#: config/mep/mep.opt:127
-#, fuzzy
-#| msgid "Allow gcc to use the repeat/erepeat instructions"
msgid "Allow gcc to use the repeat/erepeat instructions."
-msgstr "Cho phép gcc sử dụng câu lệnh repeat/erepeat"
+msgstr "Cho phép gcc sử dụng câu lệnh repeat/erepeat."
#: config/mep/mep.opt:131
-#, fuzzy
-#| msgid "All variables default to the tiny section"
msgid "All variables default to the tiny section."
-msgstr "Tất cả các giá trị có thể đặt được thì có phần mặc định là tiny (rất nhá»)"
+msgstr "Tất cả các giá trị có thể đặt được thì có phần mặc định là tiny (rất nhá»)."
#: config/mep/mep.opt:135
-#, fuzzy
-#| msgid "Enable saturation instructions"
msgid "Enable saturation instructions."
-msgstr "Bật câu lệnh đặt trạng thái bão hòa"
+msgstr "Bật câu lệnh đặt trạng thái bão hòa."
#: config/mep/mep.opt:139
-#, fuzzy
-#| msgid "Use sdram version of runtime"
msgid "Use sdram version of runtime."
-msgstr "Sá»­ dụng phiên bản sdram cá»§a thá»i gian chạy"
+msgstr "Sá»­ dụng phiên bản sdram cá»§a thá»i gian chạy."
#: config/mep/mep.opt:147
-#, fuzzy
-#| msgid "Use simulator runtime without vectors"
msgid "Use simulator runtime without vectors."
-msgstr "Sá»­ dụng thá»i gian chạy cá»§a bá»™ mô phá»ng mà không có véc-tÆ¡"
+msgstr "Sá»­ dụng thá»i gian chạy cá»§a bá»™ mô phá»ng mà không có véc-tÆ¡."
#: config/mep/mep.opt:151
-#, fuzzy
-#| msgid "All functions default to the far section"
msgid "All functions default to the far section."
-msgstr "Tất cả các hàm thì có phần mặc định là far (xa)"
+msgstr "Tất cả các hàm thì có phần mặc định là far (xa)."
#: config/mep/mep.opt:155
-#, fuzzy
-#| msgid "Variables this size and smaller go in the tiny section. (default 4)"
msgid "Variables this size and smaller go in the tiny section. (default 4)."
-msgstr "Giá trị có thể đặt được có kích cỡ đến số này thì nằm trong phần tiny (rất nhá»). (mặc định là 4)"
+msgstr "Giá trị có thể đặt được có kích cỡ đến số này thì nằm trong phần tiny (rất nhá»). (mặc định là 4)."
#: config/mips/mips.opt:32
-#, fuzzy
-#| msgid "-mabi=ABI\tGenerate code that conforms to the given ABI"
msgid "-mabi=ABI\tGenerate code that conforms to the given ABI."
-msgstr "-mabi=ABI\tTạo ra làm hợp với ABI đưa ra"
+msgstr "-mabi=ABI\tTạo ra làm hợp với ABI đưa ra."
#: config/mips/mips.opt:36
msgid "Known MIPS ABIs (for use with the -mabi= option):"
msgstr "Không hiểu MIPS ABIs (để dùng vá»›i tùy chá»n -mabi=):"
#: config/mips/mips.opt:55
-#, fuzzy
-#| msgid "Generate code that can be used in SVR4-style dynamic objects"
msgid "Generate code that can be used in SVR4-style dynamic objects."
-msgstr "Tạo ra mã có thể sử dụng được trong đối tượng năng động có kiểu SVR4"
+msgstr "Tạo ra mã có thể sử dụng được trong đối tượng năng động có kiểu SVR4."
#: config/mips/mips.opt:59
-#, fuzzy
-#| msgid "Use PMC-style 'mad' instructions"
msgid "Use PMC-style 'mad' instructions."
-msgstr "Sử dụng câu lệnh mad loại PMC"
+msgstr "Sử dụng câu lệnh “mad†loại PMC."
#: config/mips/mips.opt:63
-#, fuzzy
-#| msgid "Use integer madd/msub instructions"
msgid "Use integer madd/msub instructions."
-msgstr "Sử dụng chỉ lệnh madd/msub số nguyên"
+msgstr "Sử dụng chỉ lệnh madd/msub số nguyên."
#: config/mips/mips.opt:67
-#, fuzzy
-#| msgid "-march=ISA\tGenerate code for the given ISA"
msgid "-march=ISA\tGenerate code for the given ISA."
-msgstr "-march=ISA\tTạo ra mã cho ISA đưa ra"
+msgstr "-march=ISA\tTạo ra mã cho ISA đưa ra."
#: config/mips/mips.opt:71
-#, fuzzy
-#| msgid "-mbranch-cost=COST\tSet the cost of branches to roughly COST instructions"
msgid "-mbranch-cost=COST\tSet the cost of branches to roughly COST instructions."
-msgstr "-mbranch-cost=GIÃ\tÄặt giá cá»§a nhánh thành khoảng số các câu lệnh này"
+msgstr "-mbranch-cost=GIÃ\tÄặt giá cá»§a nhánh thành khoảng số các câu lệnh này."
#: config/mips/mips.opt:75
-#, fuzzy
-#| msgid "Use Branch Likely instructions, overriding the architecture default"
msgid "Use Branch Likely instructions, overriding the architecture default."
-msgstr "Sử dụng câu lệnh rất có thể thích hợp với nhanh (Branch Likely), thì ghi đè lên giá trị mặc định của kiến trúc đó"
+msgstr "Sử dụng câu lệnh rất có thể thích hợp với nhanh (Branch Likely), thì ghi đè lên giá trị mặc định của kiến trúc đó."
#: config/mips/mips.opt:79
-#, fuzzy
-#| msgid "Switch on/off MIPS16 ASE on alternating functions for compiler testing"
msgid "Switch on/off MIPS16 ASE on alternating functions for compiler testing."
-msgstr "Bật/tắt ASE MIPS16 trên các hàm qua lại, để kiểm tra chức năng của bộ dịch mã số"
+msgstr "Bật/tắt ASE MIPS16 trên các hàm qua lại, để kiểm tra chức năng của bộ dịch mã số."
#: config/mips/mips.opt:83
-#, fuzzy
-#| msgid "Trap on integer divide by zero"
msgid "Trap on integer divide by zero."
-msgstr "Bẫy khi số nguyên chia cho số không"
+msgstr "Bẫy khi số nguyên chia cho số không."
#: config/mips/mips.opt:87
-#, fuzzy
-#| msgid "-mcode-readable=SETTING\tSpecify when instructions are allowed to access code"
msgid "-mcode-readable=SETTING\tSpecify when instructions are allowed to access code."
-msgstr "-mcode-readable=CÀI-ÄẶT\tGhi rõ khi nào câu lệnh có quyá»n truy cập đến mã"
+msgstr "-mcode-readable=CÀI-ÄẶT\tGhi rõ khi nào câu lệnh có quyá»n truy cập đến mã."
#: config/mips/mips.opt:91
msgid "Valid arguments to -mcode-readable=:"
msgstr "Äối số hợp lệ cho -mcode-readable=:"
#: config/mips/mips.opt:104
-#, fuzzy
-#| msgid "Use branch-and-break sequences to check for integer divide by zero"
msgid "Use branch-and-break sequences to check for integer divide by zero."
-msgstr "Sử dụng dãy tạo-nhánh-và-ngắt (branch-and-break) để kiểm tra có số nguyên chia cho số không"
+msgstr "Sử dụng dãy tạo-nhánh-và-ngắt (branch-and-break) để kiểm tra có số nguyên chia cho số không."
#: config/mips/mips.opt:108
-#, fuzzy
-#| msgid "Use trap instructions to check for integer divide by zero"
msgid "Use trap instructions to check for integer divide by zero."
-msgstr "Sử dụng câu lệnh bẫy để kiểm tra có số nguyên chia cho số không"
+msgstr "Sử dụng câu lệnh bẫy để kiểm tra có số nguyên chia cho số không."
#: config/mips/mips.opt:112
-#, fuzzy
-#| msgid "Allow the use of MDMX instructions"
msgid "Allow the use of MDMX instructions."
-msgstr "Cho phép sử dụng câu lệnh MDMX"
+msgstr "Cho phép sử dụng câu lệnh MDMX."
#: config/mips/mips.opt:116
-#, fuzzy
-#| msgid "Allow hardware floating-point instructions to cover both 32-bit and 64-bit operations"
msgid "Allow hardware floating-point instructions to cover both 32-bit and 64-bit operations."
-msgstr "Cho phép xá»­ lý dấu chấm động phần cứng bao quát thao tác cả hai hệ Ä‘iá»u hành 32-bit và 64-bit"
+msgstr "Cho phép xá»­ lý dấu chấm động phần cứng bao quát thao tác cả hai hệ Ä‘iá»u hành 32-bit và 64-bit."
#: config/mips/mips.opt:120
-#, fuzzy
-#| msgid "Use MIPS-DSP instructions"
msgid "Use MIPS-DSP instructions."
-msgstr "Sử dụng câu lệnh MIPS-DSP"
+msgstr "Sử dụng câu lệnh MIPS-DSP."
#: config/mips/mips.opt:124
-#, fuzzy
-#| msgid "Use MIPS-DSP REV 2 instructions"
msgid "Use MIPS-DSP REV 2 instructions."
-msgstr "Sử dụng câu lệnh MIPS-DSP REV 2"
+msgstr "Sử dụng câu lệnh MIPS-DSP REV 2."
#: config/mips/mips.opt:146
-#, fuzzy
-#| msgid "Use Enhanced Virtual Addressing instructions"
msgid "Use Enhanced Virtual Addressing instructions."
-msgstr "Dùng các chỉ lệnh Äịa chỉ Ảo hóa Nâng cao"
+msgstr "Dùng các chỉ lệnh Äịa chỉ Ảo hóa Nâng cao."
#: config/mips/mips.opt:150
-#, fuzzy
-#| msgid "Use NewABI-style %reloc() assembly operators"
msgid "Use NewABI-style %reloc() assembly operators."
-msgstr "Sử dụng toán tử dịch mã số %reloc() kiểu NewABI"
+msgstr "Sử dụng toán tử dịch mã số %reloc() kiểu NewABI."
#: config/mips/mips.opt:154
-#, fuzzy
-#| msgid "Use -G for data that is not defined by the current object"
msgid "Use -G for data that is not defined by the current object."
-msgstr "Sá»­ dụng -G cho dữ liệu không phải được xác định bởi đối tượng hiện thá»i"
+msgstr "Sá»­ dụng -G cho dữ liệu không phải được xác định bởi đối tượng hiện thá»i."
#: config/mips/mips.opt:158
-#, fuzzy
-#| msgid "Work around certain 24K errata"
msgid "Work around certain 24K errata."
-msgstr "Khắc phục một số lỗi 24K nào đó"
+msgstr "Khắc phục một số lỗi 24K nào đó."
#: config/mips/mips.opt:162
-#, fuzzy
-#| msgid "Work around certain R4000 errata"
msgid "Work around certain R4000 errata."
-msgstr "Khắc phục một số lỗi R4000 nào đó"
+msgstr "Khắc phục một số lỗi R4000 nào đó."
#: config/mips/mips.opt:166
-#, fuzzy
-#| msgid "Work around certain R4400 errata"
msgid "Work around certain R4400 errata."
-msgstr "Khắc phục một số lỗi R4400 nào đó"
+msgstr "Khắc phục một số lỗi R4400 nào đó."
#: config/mips/mips.opt:170
-#, fuzzy
msgid "Work around certain RM7000 errata."
-msgstr "Khắc phục một số lỗi R4000 nào đó"
+msgstr "Khắc phục một số lỗi RM7000 nào đó."
#: config/mips/mips.opt:174
-#, fuzzy
-#| msgid "Work around certain R10000 errata"
msgid "Work around certain R10000 errata."
-msgstr "Khắc phục một số lỗi R10000 nào đó"
+msgstr "Khắc phục một số lỗi R10000 nào đó."
#: config/mips/mips.opt:178
-#, fuzzy
-#| msgid "Work around errata for early SB-1 revision 2 cores"
msgid "Work around errata for early SB-1 revision 2 cores."
-msgstr "Khắc phục một những lỗi cho các lõi SB-1 bản sửa đổi 2 sớm"
+msgstr "Khắc phục một những lỗi cho các lõi SB-1 bản sửa đổi 2 sớm."
#: config/mips/mips.opt:182
-#, fuzzy
-#| msgid "Work around certain VR4120 errata"
msgid "Work around certain VR4120 errata."
-msgstr "Khắc phục một số lỗi VR4120 nào đó"
+msgstr "Khắc phục một số lỗi VR4120 nào đó."
#: config/mips/mips.opt:186
-#, fuzzy
-#| msgid "Work around VR4130 mflo/mfhi errata"
msgid "Work around VR4130 mflo/mfhi errata."
-msgstr "Khắc phục một số lỗi mflo/mfhi VR4130 nào đó"
+msgstr "Khắc phục một số lỗi mflo/mfhi VR4130 nào đó."
#: config/mips/mips.opt:190
-#, fuzzy
-#| msgid "Work around an early 4300 hardware bug"
msgid "Work around an early 4300 hardware bug."
-msgstr "Khắc phục một lỗi phần cứng 4300 sớm"
+msgstr "Khắc phục một lỗi phần cứng 4300 sớm."
#: config/mips/mips.opt:194
-#, fuzzy
-#| msgid "FP exceptions are enabled"
msgid "FP exceptions are enabled."
-msgstr "Äã bật ngoại lệ dấu chấm động"
+msgstr "Äã bật ngoại lệ dấu chấm động."
#: config/mips/mips.opt:198
-#, fuzzy
-#| msgid "Use 32-bit floating-point registers"
msgid "Use 32-bit floating-point registers."
-msgstr "Sử dụng thanh ghi dấu chấm động 32-bit"
+msgstr "Sử dụng thanh ghi dấu chấm động 32-bit."
#: config/mips/mips.opt:202
-#, fuzzy
-#| msgid "Conform to the o32 FPXX ABI"
msgid "Conform to the o32 FPXX ABI."
-msgstr "Phù hợp với o32 FPXX ABI"
+msgstr "Phù hợp với o32 FPXX ABI."
#: config/mips/mips.opt:206
-#, fuzzy
-#| msgid "Use 64-bit floating-point registers"
msgid "Use 64-bit floating-point registers."
-msgstr "Sử dụng thanh ghi dấu chấm động 64-bit"
+msgstr "Sử dụng thanh ghi dấu chấm động 64-bit."
#: config/mips/mips.opt:210
-#, fuzzy
-#| msgid "-mflush-func=FUNC\tUse FUNC to flush the cache before calling stack trampolines"
msgid "-mflush-func=FUNC\tUse FUNC to flush the cache before calling stack trampolines."
-msgstr "-mflush-func=HÀM\tSá»­ dụng hàm này để chuyển hết vùng nhá»› tạm ra ngoài trước khi gá»i trampoline ngăn xếp"
+msgstr "-mflush-func=HÀM\tSá»­ dụng hàm này để chuyển hết vùng nhá»› tạm ra ngoài trước khi gá»i trampoline ngăn xếp."
#: config/mips/mips.opt:214
msgid "-mabs=MODE\tSelect the IEEE 754 ABS/NEG instruction execution mode."
@@ -15083,39 +12434,28 @@ msgid "-mnan=ENCODING\tSelect the IEEE 754 NaN data encoding."
msgstr ""
#: config/mips/mips.opt:222
-#, fuzzy
msgid "Known MIPS IEEE 754 settings (for use with the -mabs= and -mnan= options):"
-msgstr "Không hiểu MIPS CPUs (để dùng vá»›i tùy chá»n -march= và -mtune=):"
+msgstr "Không hiểu các cài đặt MIPS IEEE (để dùng vá»›i tùy chá»n -mabs= và -mnan=):"
#: config/mips/mips.opt:232
-#, fuzzy
-#| msgid "Use 32-bit general registers"
msgid "Use 32-bit general registers."
-msgstr "Sử dụng thanh ghi chung 32-bit"
+msgstr "Sử dụng thanh ghi chung 32-bit."
#: config/mips/mips.opt:236
-#, fuzzy
-#| msgid "Use 64-bit general registers"
msgid "Use 64-bit general registers."
-msgstr "Sử dụng thanh ghi chung 64-bit"
+msgstr "Sử dụng thanh ghi chung 64-bit."
#: config/mips/mips.opt:240
-#, fuzzy
-#| msgid "Use GP-relative addressing to access small data"
msgid "Use GP-relative addressing to access small data."
-msgstr "Sá»­ dụng chức năng đặt địa chỉ tương đối vá»›i GP để truy cập đến dữ liệu nhá»"
+msgstr "Sá»­ dụng chức năng đặt địa chỉ tương đối vá»›i GP để truy cập đến dữ liệu nhá»."
#: config/mips/mips.opt:244
-#, fuzzy
-#| msgid "When generating -mabicalls code, allow executables to use PLTs and copy relocations"
msgid "When generating -mabicalls code, allow executables to use PLTs and copy relocations."
-msgstr "Khi tạo ra mãn -mabicalls thì cho phép tập tin thực thi sử dụng PLT và sao chép sự định vị lại"
+msgstr "Khi tạo ra mã -mabicalls thì cho phép tập tin thực thi sử dụng PLT và sao chép sự định vị lại."
#: config/mips/mips.opt:248
-#, fuzzy
-#| msgid "Allow the use of hardware floating-point ABI and instructions"
msgid "Allow the use of hardware floating-point ABI and instructions."
-msgstr "Cho phép sử dụng ABI và các câu lệnh kiểu dấu chấm động phần cứng"
+msgstr "Cho phép sử dụng ABI và các câu lệnh kiểu dấu chấm động phần cứng."
#: config/mips/mips.opt:252
msgid "Generate code that is link-compatible with MIPS16 and microMIPS code."
@@ -15126,221 +12466,152 @@ msgid "An alias for minterlink-compressed provided for backward-compatibility."
msgstr ""
#: config/mips/mips.opt:260
-#, fuzzy
-#| msgid "-mipsN\tGenerate code for ISA level N"
msgid "-mipsN\tGenerate code for ISA level N."
-msgstr "-mipsSá»\tTạo ra mã cho cấp ISA Sá»"
+msgstr "-mipsSá»\tTạo ra mã cho cấp ISA Sá»."
#: config/mips/mips.opt:264
-#, fuzzy
-#| msgid "Generate MIPS16 code"
msgid "Generate MIPS16 code."
-msgstr "Tạo ra mã MIPS16"
+msgstr "Tạo ra mã MIPS16."
#: config/mips/mips.opt:268
-#, fuzzy
-#| msgid "Use MIPS-3D instructions"
msgid "Use MIPS-3D instructions."
-msgstr "Sử dụng câu lệnh MIPS-3D"
+msgstr "Sử dụng câu lệnh MIPS-3D."
#: config/mips/mips.opt:272
-#, fuzzy
-#| msgid "Use ll, sc and sync instructions"
msgid "Use ll, sc and sync instructions."
-msgstr "Sử dụng câu lệnh ll, sc và sync"
+msgstr "Sử dụng câu lệnh ll, sc và sync."
#: config/mips/mips.opt:276
-#, fuzzy
-#| msgid "Use -G for object-local data"
msgid "Use -G for object-local data."
-msgstr "Sử dụng -G cho dữ liệu cục bộ với đối tượng"
+msgstr "Sử dụng -G cho dữ liệu cục bộ với đối tượng."
#: config/mips/mips.opt:280
-#, fuzzy
-#| msgid "Use indirect calls"
msgid "Use indirect calls."
-msgstr "Sá»­ dụng cuá»™c gá»i gián tiếp"
+msgstr "Sá»­ dụng cuá»™c gá»i gián tiếp."
#: config/mips/mips.opt:284
-#, fuzzy
-#| msgid "Use a 32-bit long type"
msgid "Use a 32-bit long type."
-msgstr "Sử dụng một loại dài 32-bit"
+msgstr "Sử dụng một loại dài 32-bit."
#: config/mips/mips.opt:288
-#, fuzzy
-#| msgid "Use a 64-bit long type"
msgid "Use a 64-bit long type."
-msgstr "Sử dụng một loại dài 64-bit"
+msgstr "Sử dụng một loại dài 64-bit."
#: config/mips/mips.opt:292
-#, fuzzy
-#| msgid "Pass the address of the ra save location to _mcount in $12"
msgid "Pass the address of the ra save location to _mcount in $12."
-msgstr "Gửi địa chỉ của vị trí lưu ra cho _mcount trong $12"
+msgstr "Gửi địa chỉ của vị trí lưu ra cho _mcount trong $12."
#: config/mips/mips.opt:296
-#, fuzzy
-#| msgid "Don't optimize block moves"
msgid "Don't optimize block moves."
-msgstr "Äừng tối ưu hóa sá»± di chuyển khối"
+msgstr "Äừng tối ưu hóa sá»± di chuyển khối."
#: config/mips/mips.opt:300
-#, fuzzy
-#| msgid "Use microMIPS instructions"
msgid "Use microMIPS instructions."
-msgstr "Sử dụng các chỉ lệnh microMIPS"
+msgstr "Sử dụng các chỉ lệnh microMIPS."
#: config/mips/mips.opt:304
-#, fuzzy
-#| msgid "Allow the use of MT instructions"
msgid "Allow the use of MT instructions."
-msgstr "Cho phép sử dụng câu lệnh MT"
+msgstr "Cho phép sử dụng câu lệnh MT."
#: config/mips/mips.opt:308
-#, fuzzy
-#| msgid "Prevent the use of all floating-point operations"
msgid "Prevent the use of all floating-point operations."
-msgstr "Ngăn cản sử dụng lệnh dấu chấm động nào"
+msgstr "Ngăn cản sử dụng lệnh dấu chấm động nào."
#: config/mips/mips.opt:312
-#, fuzzy
-#| msgid "Use MCU instructions"
msgid "Use MCU instructions."
-msgstr "Dùng chỉ lệnh MCU"
+msgstr "Dùng chỉ lệnh MCU."
#: config/mips/mips.opt:316
-#, fuzzy
-#| msgid "Do not use a cache-flushing function before calling stack trampolines"
msgid "Do not use a cache-flushing function before calling stack trampolines."
-msgstr "Äừng sá»­ dụng má»™t hàm chuyển hết vùng nhá»› tạm ra ngoài trước khi gá»i trampoline stack"
+msgstr "Äừng sá»­ dụng má»™t hàm chuyển hết vùng nhá»› tạm ra ngoài trước khi gá»i trampoline stack."
#: config/mips/mips.opt:320
-#, fuzzy
-#| msgid "Do not use MDMX instructions"
msgid "Do not use MDMX instructions."
-msgstr "Äừng sá»­ dụng câu lệnh MDMX"
+msgstr "Äừng sá»­ dụng câu lệnh MDMX."
#: config/mips/mips.opt:324
-#, fuzzy
-#| msgid "Generate normal-mode code"
msgid "Generate normal-mode code."
-msgstr "Tạo ra mã có chế độ thông thưá»ng"
+msgstr "Tạo ra mã có chế độ thông thưá»ng."
#: config/mips/mips.opt:328
-#, fuzzy
-#| msgid "Do not use MIPS-3D instructions"
msgid "Do not use MIPS-3D instructions."
-msgstr "Äừng sá»­ dụng câu lệnh MIPS-3D"
+msgstr "Äừng sá»­ dụng câu lệnh MIPS-3D."
#: config/mips/mips.opt:332
-#, fuzzy
-#| msgid "Use paired-single floating-point instructions"
msgid "Use paired-single floating-point instructions."
-msgstr "Sử dụng câu lệnh dấu chấm động đôi-đơn"
+msgstr "Sử dụng câu lệnh dấu chấm động đôi-đơn."
#: config/mips/mips.opt:336
-#, fuzzy
-#| msgid "-mr10k-cache-barrier=SETTING\tSpecify when r10k cache barriers should be inserted"
msgid "-mr10k-cache-barrier=SETTING\tSpecify when r10k cache barriers should be inserted."
-msgstr "-mr10k-cache-barrier=CÀI-ÄẶT\tGhi rõ khi nào nên chèn rào cản vùng nhá»› tạm r10k"
+msgstr "-mr10k-cache-barrier=CÀI-ÄẶT\tGhi rõ khi nào nên chèn rào cản vùng nhá»› tạm r10k."
#: config/mips/mips.opt:340
msgid "Valid arguments to -mr10k-cache-barrier=:"
msgstr "Äối số hợp lệ cho -mr10k-cache-barrier=:"
#: config/mips/mips.opt:353
-#, fuzzy
-#| msgid "Try to allow the linker to turn PIC calls into direct calls"
msgid "Try to allow the linker to turn PIC calls into direct calls."
-msgstr "Thá»­ cho phép bá»™ liên kết chuyển đổi cuá»™c gá»i PIC sang cuá»™c gá»i trá»±c tiếp"
+msgstr "Thá»­ cho phép bá»™ liên kết chuyển đổi cuá»™c gá»i PIC sang cuá»™c gá»i trá»±c tiếp."
#: config/mips/mips.opt:357
-#, fuzzy
-#| msgid "When generating -mabicalls code, make the code suitable for use in shared libraries"
msgid "When generating -mabicalls code, make the code suitable for use in shared libraries."
-msgstr "Khi tạo ra mã -mabicalls, làm cho mã thích hợp với sử dụng trong thư viện dùng chung"
+msgstr "Khi tạo ra mã -mabicalls, làm cho mã thích hợp với sử dụng trong thư viện dùng chung."
#: config/mips/mips.opt:361
-#, fuzzy
-#| msgid "Restrict the use of hardware floating-point instructions to 32-bit operations"
msgid "Restrict the use of hardware floating-point instructions to 32-bit operations."
-msgstr "Hạn chế sử dụng câu lệnh dấu chấm động phần cứng thành thao tác 32-bit"
+msgstr "Hạn chế sử dụng câu lệnh dấu chấm động phần cứng thành thao tác 32-bit."
#: config/mips/mips.opt:365
-#, fuzzy
-#| msgid "Use SmartMIPS instructions"
msgid "Use SmartMIPS instructions."
-msgstr "Sử dụng câu lệnh SmartMIPS"
+msgstr "Sử dụng câu lệnh SmartMIPS."
#: config/mips/mips.opt:369
-#, fuzzy
-#| msgid "Prevent the use of all hardware floating-point instructions"
msgid "Prevent the use of all hardware floating-point instructions."
-msgstr "Ngăn cản sử dụng câu lệnh nào có loại dấu chấm động phần cứng"
+msgstr "Ngăn cản sử dụng câu lệnh nào có loại dấu chấm động phần cứng."
#: config/mips/mips.opt:373
-#, fuzzy
-#| msgid "Optimize lui/addiu address loads"
msgid "Optimize lui/addiu address loads."
-msgstr "Tối ưu hóa việc nạp địa chỉ lui/addiu"
+msgstr "Tối ưu hóa việc nạp địa chỉ lui/addiu."
#: config/mips/mips.opt:377
-#, fuzzy
-#| msgid "Assume all symbols have 32-bit values"
msgid "Assume all symbols have 32-bit values."
-msgstr "Coi là má»i ký hiệu Ä‘á»u có giá trị 32-bit"
+msgstr "Coi là má»i ký hiệu Ä‘á»u có giá trị 32-bit."
#: config/mips/mips.opt:381
-#, fuzzy
-#| msgid "Use synci instruction to invalidate i-cache"
msgid "Use synci instruction to invalidate i-cache."
-msgstr "Sử dụng câu lệnh synci để làm tắt i-cache"
+msgstr "Sử dụng câu lệnh synci để làm tắt i-cache."
#: config/mips/mips.opt:389
-#, fuzzy
-#| msgid "-mtune=PROCESSOR\tOptimize the output for PROCESSOR"
msgid "-mtune=PROCESSOR\tOptimize the output for PROCESSOR."
-msgstr "-mtune=BỘ_XỬ_LÃ\tTối ưu hóa kết xuất cho bá»™ xá»­ lý này"
+msgstr "-mtune=BỘ_XỬ_LÃ\tTối ưu hóa kết xuất cho bá»™ xá»­ lý này."
#: config/mips/mips.opt:397
-#, fuzzy
-#| msgid "Use Virtualization Application Specific instructions"
msgid "Use Virtualization Application Specific instructions."
-msgstr "Dùng các chỉ lệnh Virtualization Application Specific"
+msgstr "Dùng các chỉ lệnh Virtualization Application Specific."
#: config/mips/mips.opt:401
-#, fuzzy
msgid "Use eXtended Physical Address (XPA) instructions."
-msgstr "Dùng các chỉ lệnh Äịa chỉ Ảo hóa Nâng cao"
+msgstr "Dùng các chỉ lệnh Äịa chỉ Ảo hóa Nâng cao (XPA)."
#: config/mips/mips.opt:405
-#, fuzzy
-#| msgid "Perform VR4130-specific alignment optimizations"
msgid "Perform VR4130-specific alignment optimizations."
-msgstr "Tối ưu hóa sự xếp hàng một cách đặc trưng cho VR4130"
+msgstr "Tối ưu hóa sự xếp hàng một cách đặc trưng cho VR4130."
#: config/mips/mips.opt:409
-#, fuzzy
-#| msgid "Lift restrictions on GOT size"
msgid "Lift restrictions on GOT size."
-msgstr "BỠgiới hạn vỠkích cỡ GOT"
+msgstr "Nâng giới hạn vỠkích cỡ GOT."
#: config/mips/mips.opt:413
msgid "Enable use of odd-numbered single-precision registers."
msgstr ""
#: config/mips/mips.opt:417
-#, fuzzy
-#| msgid "Optimize for space rather than speed"
msgid "Optimize frame header."
-msgstr "Tối ưu hóa vỠkích thước thay vì tốc độ"
+msgstr "Tối ưu hóa vỠđầu khung."
#: config/mips/mips.opt:424
-#, fuzzy
-#| msgid "Enable stack probing"
msgid "Enable load/store bonding."
-msgstr "Bật chức năng dò ngăn xếp"
+msgstr ""
#: config/mips/mips.opt:428
msgid "Specify the compact branch usage policy."
@@ -15352,15 +12623,15 @@ msgstr ""
#: config/mips/mips-tables.opt:24
msgid "Known MIPS CPUs (for use with the -march= and -mtune= options):"
-msgstr "Không hiểu MIPS CPUs (để dùng vá»›i tùy chá»n -march= và -mtune=):"
+msgstr "Hiểu MIPS CPUs (để dùng vá»›i tùy chá»n -march= và -mtune=):"
#: config/mips/mips-tables.opt:28
msgid "Known MIPS ISA levels (for use with the -mips option):"
-msgstr "Không hiểu mức MIPS ISA (để dùng vá»›i tùy chá»n -mips):"
+msgstr "Hiểu mức MIPS ISA (để dùng vá»›i tùy chá»n -mips):"
#: config/tilegx/tilegx.opt:30
msgid "Known TILE-Gx CPUs (for use with the -mcpu= option):"
-msgstr "Không hiểuTILE-Gx CPUs (để dùng vá»›i tùy chá»n -mcpu=):"
+msgstr "Hiểu TILE-Gx CPUs (để dùng vá»›i tùy chá»n -mcpu=):"
#: config/tilegx/tilegx.opt:37
msgid "Compile with 32 bit longs and pointers."
@@ -15371,36 +12642,28 @@ msgid "Compile with 64 bit longs and pointers."
msgstr ""
#: config/tilegx/tilegx.opt:53
-#, fuzzy
-#| msgid "Use given x86-64 code model"
msgid "Use given TILE-Gx code model."
-msgstr "Sử dụng mẫu mã x86-64 đưa ra"
+msgstr "Sử dụng mẫu mã TILE-Gx đưa ra."
#: config/arc/arc.opt:26
-#, fuzzy
-#| msgid "Compile code for big endian mode"
msgid "Compile code for big endian mode."
msgstr "Tạo mã trong chế độ vỠcuối lớn."
#: config/arc/arc.opt:30
-#, fuzzy
msgid "Compile code for little endian mode. This is the default."
-msgstr "Tạo mã trong chế độ vỠcuối lớn."
+msgstr "Biên dịch mã cho chế độ vá» cuối nhá». Äây là mặc định."
#: config/arc/arc.opt:34
-#, fuzzy
msgid "Disable ARCompact specific pass to generate conditional execution instructions."
-msgstr "Sử dụng các chỉ lệnh chấm động phần cứng"
+msgstr ""
#: config/arc/arc.opt:38
msgid "Generate ARCompact 32-bit code for ARC600 processor."
msgstr ""
#: config/arc/arc.opt:42
-#, fuzzy
-#| msgid "Same as -mA6"
msgid "Same as -mA6."
-msgstr "Giống với -mA6"
+msgstr "Giống với -mA6."
#: config/arc/arc.opt:46
msgid "Generate ARCompact 32-bit code for ARC601 processor."
@@ -15411,26 +12674,20 @@ msgid "Generate ARCompact 32-bit code for ARC700 processor."
msgstr ""
#: config/arc/arc.opt:54
-#, fuzzy
-#| msgid "Same as -mA7"
msgid "Same as -mA7."
-msgstr "Giống với -mA7"
+msgstr "Giống với -mA7."
#: config/arc/arc.opt:58
msgid "-mmpy-option={0,1,2,3,4,5,6,7,8,9} Compile ARCv2 code with a multiplier design option. Option 2 is default on."
msgstr ""
#: config/arc/arc.opt:62
-#, fuzzy
-#| msgid "Enable MUL instructions"
msgid "Enable DIV-REM instructions for ARCv2."
-msgstr "Bật các chỉ lệnh MUL"
+msgstr ""
#: config/arc/arc.opt:66
-#, fuzzy
-#| msgid "Enable barrel shift instructions"
msgid "Enable code density instructions for ARCv2."
-msgstr "Bật câu lệnh barrel shift"
+msgstr ""
#: config/arc/arc.opt:70
msgid "Tweak register allocation to help 16-bit instruction generation."
@@ -15445,29 +12702,24 @@ msgid "Enable cache bypass for volatile references."
msgstr ""
#: config/arc/arc.opt:88
-#, fuzzy
msgid "Generate instructions supported by barrel shifter."
-msgstr "Bật các chỉ lệnh MULX, coi là dịch nhanh hơn"
+msgstr "Bật các chỉ lệnh hỗ trợ bởi dịch barrel."
#: config/arc/arc.opt:92
-#, fuzzy
msgid "Generate norm instruction."
-msgstr "Tạo ra câu lệnh bit"
+msgstr "Tạo ra câu lệnh norm."
#: config/arc/arc.opt:96
-#, fuzzy
msgid "Generate swap instruction."
-msgstr "Tạo ra câu lệnh isel"
+msgstr "Tạo ra câu lệnh swap."
#: config/arc/arc.opt:100
-#, fuzzy
msgid "Generate mul64 and mulu64 instructions."
-msgstr "Tạo ra câu lệnh nạp/lưu nội"
+msgstr "Tạo ra câu lệnh mul64 và mulu64."
#: config/arc/arc.opt:104
-#, fuzzy
msgid "Do not generate mpy instructions for ARC700."
-msgstr "Cho phép gcc tạo chỉ lệnh LIW"
+msgstr "Äừng tạo chỉ lệnh mpy cho ARC700."
#: config/arc/arc.opt:108
msgid "Generate Extended arithmetic instructions. Currently only divaw, adds, subs and sat16 are supported."
@@ -15478,14 +12730,12 @@ msgid "Dummy flag. This is the default unless FPX switches are provided explicit
msgstr ""
#: config/arc/arc.opt:116
-#, fuzzy
msgid "Generate call insns as register indirect calls."
-msgstr "Tạo ra câu lệnh gá»i dưới dạng cuá»™c gá»i gián tiếp, nếu cần thiết"
+msgstr ""
#: config/arc/arc.opt:120
-#, fuzzy
msgid "Do no generate BRcc instructions in arc_reorg."
-msgstr "Tạo ra câu lệnh cld trong đoạn mở đầu hàm."
+msgstr ""
#: config/arc/arc.opt:124
msgid "Generate sdata references. This is the default, unless you compile for PIC."
@@ -15500,23 +12750,20 @@ msgid "FPX: Generate Single Precision FPX (compact) instructions."
msgstr ""
#: config/arc/arc.opt:140
-#, fuzzy
msgid "FPX: Generate Single Precision FPX (fast) instructions."
-msgstr "Tạo ra câu lệnh bit"
+msgstr ""
#: config/arc/arc.opt:144
msgid "FPX: Enable Argonaut ARC CPU Double Precision Floating Point extensions."
msgstr ""
#: config/arc/arc.opt:148 config/arc/arc.opt:152
-#, fuzzy
msgid "FPX: Generate Double Precision FPX (compact) instructions."
-msgstr "Tạo ra câu lệnh bit"
+msgstr ""
#: config/arc/arc.opt:156
-#, fuzzy
msgid "FPX: Generate Double Precision FPX (fast) instructions."
-msgstr "Tạo ra câu lệnh bit"
+msgstr ""
#: config/arc/arc.opt:160
msgid "Disable LR and SR instructions from using FPX extension aux registers."
@@ -15527,18 +12774,16 @@ msgid "Enable generation of ARC SIMD instructions via target-specific builtins."
msgstr ""
#: config/arc/arc.opt:168
-#, fuzzy
msgid "-mcpu=CPU\tCompile code for ARC variant CPU."
-msgstr "-mcpu=r8c\tBiên dịch mã cho biến thế R8C"
+msgstr "-mcpu=VXL\tBiên dịch mã cho CPU biến thế ARC."
#: config/arc/arc.opt:205
msgid "size optimization level: 0:none 1:opportunistic 2: regalloc 3:drop align, -Os."
msgstr ""
#: config/arc/arc.opt:213
-#, fuzzy
msgid "Cost to assume for a multiply instruction, with 4 being equal to a normal insn."
-msgstr "Giá cần coi cho một câu lệnh nhân lên"
+msgstr ""
#: config/arc/arc.opt:217
msgid "Tune for ARC600 cpu."
@@ -15557,18 +12802,16 @@ msgid "Tune for ARC700 R4.2 Cpu with XMAC block."
msgstr ""
#: config/arc/arc.opt:241
-#, fuzzy
msgid "Enable the use of indexed loads."
-msgstr "Bật sử dụng câu lệnh nạp ngắn"
+msgstr "Bật sử dụng tải chỉ mục."
#: config/arc/arc.opt:245
msgid "Enable the use of pre/post modify with register displacement."
msgstr ""
#: config/arc/arc.opt:249
-#, fuzzy
msgid "Generate 32x16 multiply and mac instructions."
-msgstr "Tạo ra câu lệnh nhân-cộng kiểu dấu chấm động"
+msgstr ""
#: config/arc/arc.opt:255
msgid "Set probability threshold for unaligning branches."
@@ -15583,9 +12826,8 @@ msgid "Explain what alignment considerations lead to the decision to make an ins
msgstr ""
#: config/arc/arc.opt:267
-#, fuzzy
msgid "Do alignment optimizations for call instructions."
-msgstr "Tránh giá»›i hạn phạm vi nào trong câu lệnh gá»i"
+msgstr ""
#: config/arc/arc.opt:271
msgid "Enable Rcq constraint handling - most short code generation depends on this."
@@ -15596,9 +12838,8 @@ msgid "Enable Rcw constraint handling - ccfsm condexec mostly depends on this."
msgstr ""
#: config/arc/arc.opt:279
-#, fuzzy
msgid "Enable pre-reload use of cbranchsi pattern."
-msgstr "Bật mẫu cbranchdi4"
+msgstr ""
#: config/arc/arc.opt:283
msgid "Enable bbit peephole2."
@@ -15609,14 +12850,12 @@ msgid "Use pc-relative switch case tables - this enables case table shortening."
msgstr ""
#: config/arc/arc.opt:291
-#, fuzzy
msgid "Enable compact casesi pattern."
-msgstr "Bật mẫu cbranchdi4"
+msgstr ""
#: config/arc/arc.opt:295
-#, fuzzy
msgid "Enable 'q' instruction alternatives."
-msgstr "Bật các chỉ lệnh MUL"
+msgstr ""
#: config/arc/arc.opt:299
msgid "Expand adddi3 and subdi3 at rtl generation time into add.f / adc etc."
@@ -15631,57 +12870,46 @@ msgid "Enable DSP 3.1 Pack A extensions."
msgstr ""
#: config/arc/arc.opt:314
-#, fuzzy
-#| msgid "Enable linker relaxation."
msgid "Enable dual viterbi butterfly extension."
-msgstr "Bật chức năng làm yếu bộ liên kết."
+msgstr ""
#: config/arc/arc.opt:324
-#, fuzzy
msgid "Enable Dual and Single Operand Instructions for Telephony."
-msgstr "Bật câu lệnh có số không đi trước"
+msgstr ""
#: config/arc/arc.opt:328
msgid "Enable XY Memory extension (DSP version 3)."
msgstr ""
#: config/arc/arc.opt:333
-#, fuzzy
msgid "Enable Locked Load/Store Conditional extension."
-msgstr "Bật sá»± tối ưu hóa quá trình thá»±c hiện có Ä‘iá»u kiện mà cÅ©ng lồng nhau"
+msgstr ""
#: config/arc/arc.opt:337
-#, fuzzy
msgid "Enable swap byte ordering extension instruction."
-msgstr "Bật câu lệnh mở rộng ký hiệu"
+msgstr ""
#: config/arc/arc.opt:341
-#, fuzzy
msgid "Enable 64-bit Time-Stamp Counter extension instruction."
-msgstr "Bật các câu lệnh thao tác bit"
+msgstr ""
#: config/arc/arc.opt:345
-#, fuzzy
msgid "Pass -EB option through to linker."
-msgstr "Chuyển tùy chá»n -z text cho bá»™ liên kết"
+msgstr "Chuyển tùy chá»n -EB cho bá»™ liên kết."
#: config/arc/arc.opt:349
-#, fuzzy
msgid "Pass -EL option through to linker."
-msgstr "Chuyển tùy chá»n -z text cho bá»™ liên kết"
+msgstr "Chuyển tùy chá»n -EL cho bá»™ liên kết."
#: config/arc/arc.opt:353
-#, fuzzy
msgid "Pass -marclinux option through to linker."
-msgstr "Chuyển tùy chá»n -z text cho bá»™ liên kết"
+msgstr "Chuyển tùy chá»n -marclinux cho bá»™ liên kết."
#: config/arc/arc.opt:357
msgid "Pass -marclinux_prof option through to linker."
-msgstr ""
+msgstr "Chuyển tùy chá»n -marclinux_prof cho bá»™ liên kết."
#: config/arc/arc.opt:365
-#, fuzzy
-#| msgid "Enable lra"
msgid "Enable lra."
msgstr "Bật Ira"
@@ -15702,184 +12930,125 @@ msgid "instrument with mcount calls as in the ucb code."
msgstr ""
#: config/arc/arc.opt:411
-#, fuzzy
-#| msgid "Enable clip instructions"
msgid "Enable atomic instructions."
-msgstr "Bật các câu lệnh trích đoạn"
+msgstr ""
#: config/arc/arc.opt:415
-#, fuzzy
-#| msgid "Enable leading zero instructions"
msgid "Enable double load/store instructions for ARC HS."
-msgstr "Bật câu lệnh có số không đi trước"
+msgstr ""
#: java/lang.opt:122
-#, fuzzy
-#| msgid "Warn if deprecated empty statements are found"
msgid "Warn if deprecated empty statements are found."
-msgstr "Cảnh báo nếu tìm câu lệnh trống bị phản đối"
+msgstr "Cảnh báo nếu tìm câu lệnh trống đã lạc hậu."
#: java/lang.opt:126
-#, fuzzy
-#| msgid "Warn if .class files are out of date"
msgid "Warn if .class files are out of date."
-msgstr "Cảnh báo nếu có tập tin .class quá cũ"
+msgstr "Cảnh báo nếu có tập tin .class quá cũ."
#: java/lang.opt:130
-#, fuzzy
-#| msgid "Warn if modifiers are specified when not necessary"
msgid "Warn if modifiers are specified when not necessary."
-msgstr "Cảnh báo nếu ghi rõ bộ sửa đổi không cần thiết"
+msgstr "Cảnh báo nếu ghi rõ bộ sửa đổi không cần thiết."
#: java/lang.opt:150
-#, fuzzy
-#| msgid "--CLASSPATH\tDeprecated; use --classpath instead"
msgid "--CLASSPATH\tDeprecated; use --classpath instead."
-msgstr "--CLASSPATH\tBị phản đối; có nên sử dụng --classpath để thay thế"
+msgstr "--CLASSPATH\tÄã lạc hậu; nên sá»­ dụng --classpath để thay thế."
#: java/lang.opt:157
-#, fuzzy
-#| msgid "Permit the use of the assert keyword"
msgid "Permit the use of the assert keyword."
-msgstr "Cho phép sử dụng từ khóa assert"
+msgstr "Cho phép sử dụng từ khóa assert."
#: java/lang.opt:179
-#, fuzzy
-#| msgid "--bootclasspath=<path>\tReplace system path"
msgid "--bootclasspath=<path>\tReplace system path."
-msgstr "--bootclasspath=<đưá»ng_dẫn>\tThay thế đưá»ng dẫn hệ thống"
+msgstr "--bootclasspath=<đưá»ng_dẫn>\tThay thế đưá»ng dẫn hệ thống."
#: java/lang.opt:183
-#, fuzzy
-#| msgid "Generate checks for references to NULL"
msgid "Generate checks for references to NULL."
-msgstr "Tạo ra sự kiểm tra có tham chiếu đến NULL (vô giá trị)"
+msgstr "Tạo ra sự kiểm tra có tham chiếu đến NULL (vô giá trị)."
#: java/lang.opt:187
-#, fuzzy
-#| msgid "--classpath=<path>\tSet class path"
msgid "--classpath=<path>\tSet class path."
-msgstr "--classpath=<đưá»ng_dẫn>\tÄặt đưá»ng dẫn hạng"
+msgstr "--classpath=<đưá»ng_dẫn>\tÄặt đưá»ng dẫn lá»›p."
#: java/lang.opt:194
-#, fuzzy
-#| msgid "Output a class file"
msgid "Output a class file."
-msgstr "Xuất một tập tin hạng"
+msgstr "Xuất một tập tin lớp."
#: java/lang.opt:198
-#, fuzzy
-#| msgid "Alias for -femit-class-file"
msgid "Alias for -femit-class-file."
-msgstr "Bí danh cho -femit-class-file"
+msgstr "Bí danh cho -femit-class-file."
#: java/lang.opt:202
-#, fuzzy
-#| msgid "--encoding=<encoding>\tChoose input encoding (defaults from your locale)"
msgid "--encoding=<encoding>\tChoose input encoding (defaults from your locale)."
-msgstr "--encoding=<mã_ký_tá»±>\tChá»n mã ký tá»± cá»§a đầu vào (mặc định là miá»n địa phương)"
+msgstr "--encoding=<mã_ký_tá»±>\tChá»n mã ký tá»± cá»§a đầu vào (mặc định là miá»n địa phương)."
#: java/lang.opt:206
-#, fuzzy
-#| msgid "--extdirs=<path>\tSet the extension directory path"
msgid "--extdirs=<path>\tSet the extension directory path."
-msgstr "--extdirs=<đưá»ng_dẫn>\tÄặt đưá»ng dẫn đến thư mục phần mở rá»™ng"
+msgstr "--extdirs=<đưá»ng_dẫn>\tÄặt đưá»ng dẫn đến thư mục phần mở rá»™ng."
#: java/lang.opt:216
-#, fuzzy
-#| msgid "Input file is a file with a list of filenames to compile"
msgid "Input file is a file with a list of filenames to compile."
-msgstr "Tập tin nhập vào là một tập tin chứa danh sách các tên tập tin cần biên dịch"
+msgstr "Tập tin nhập vào là một tập tin chứa danh sách các tên tập tin cần biên dịch."
#: java/lang.opt:223
-#, fuzzy
-#| msgid "Always check for non gcj generated classes archives"
msgid "Always check for non gcj generated classes archives."
-msgstr "Lúc nào cũng kiểm tra có kho lưu hạng không phải được gcj tạo ra"
+msgstr "Lúc nào cũng kiểm tra có kho lưu lớp không phải được gcj tạo ra."
#: java/lang.opt:227
-#, fuzzy
-#| msgid "Assume the runtime uses a hash table to map an object to its synchronization structure"
msgid "Assume the runtime uses a hash table to map an object to its synchronization structure."
-msgstr "Coi là lúc chạy thì sử dụng một bảng chuỗi duy nhất để ánh xạ một đối tượng tới cấu trúc đồng bộ của nó"
+msgstr "Coi là lúc chạy thì sử dụng một bảng chuỗi duy nhất để ánh xạ một đối tượng tới cấu trúc đồng bộ của nó."
#: java/lang.opt:231
-#, fuzzy
-#| msgid "Generate instances of Class at runtime"
msgid "Generate instances of Class at runtime."
-msgstr "Lúc chạy thì tạo ra các thể hiện Hạng"
+msgstr "Lúc chạy thì tạo ra các thể hiện Hạng."
#: java/lang.opt:235
-#, fuzzy
-#| msgid "Use offset tables for virtual method calls"
msgid "Use offset tables for virtual method calls."
-msgstr "Sá»­ dụng bảng hiệu số cho cuá»™c gá»i phương pháp ảo"
+msgstr "Sá»­ dụng bảng hiệu số cho cuá»™c gá»i phương pháp ảo."
#: java/lang.opt:242
-#, fuzzy
-#| msgid "Assume native functions are implemented using JNI"
msgid "Assume native functions are implemented using JNI."
-msgstr "Coi là các hàm sở hữu được thực hiện dùng JNI"
+msgstr "Coi là các hàm sở hữu được thực hiện dùng JNI."
#: java/lang.opt:246
-#, fuzzy
-#| msgid "Enable optimization of static class initialization code"
msgid "Enable optimization of static class initialization code."
-msgstr "Bật sự tối ưu hóa mã khởi tạo hạng tĩnh"
+msgstr "Bật sự tối ưu hóa mã khởi tạo lớp tĩnh."
#: java/lang.opt:253
-#, fuzzy
-#| msgid "Reduce the amount of reflection meta-data generated"
msgid "Reduce the amount of reflection meta-data generated."
-msgstr "Giảm số lượng siêu dữ liệu phản chiếu được tạo ra"
+msgstr "Giảm số lượng siêu dữ liệu phản chiếu được tạo ra."
#: java/lang.opt:257
-#, fuzzy
-#| msgid "Enable assignability checks for stores into object arrays"
msgid "Enable assignability checks for stores into object arrays."
-msgstr "Bật sự kiểm tra khả năng sự gán cho việc lưu vào mảng đối tượng"
+msgstr "Bật sự kiểm tra khả năng sự gán cho việc lưu vào mảng đối tượng."
#: java/lang.opt:261
-#, fuzzy
-#| msgid "Generate code for the Boehm GC"
msgid "Generate code for the Boehm GC."
-msgstr "Tạo ra mã cho Boehm GC"
+msgstr "Tạo ra mã cho Boehm GC."
#: java/lang.opt:265
-#, fuzzy
-#| msgid "Call a library routine to do integer divisions"
msgid "Call a library routine to do integer divisions."
-msgstr "Gá»i má»™t hàm thư viện để chia số nguyên"
+msgstr "Gá»i má»™t hàm thư viện để chia số nguyên."
#: java/lang.opt:269
-#, fuzzy
-#| msgid "Generate code for built-in atomic operations"
msgid "Generate code for built-in atomic operations."
-msgstr "Tạo ra mã cho các thao tác atomic dựng sẵn"
+msgstr "Tạo ra mã cho các thao tác atomic dựng sẵn."
#: java/lang.opt:273
-#, fuzzy
-#| msgid "Generated should be loaded by bootstrap loader"
msgid "Generated should be loaded by bootstrap loader."
-msgstr "Äiá»u được tạo ra thì nên được nạp bởi bá»™ nạp và khởi động"
+msgstr "Äiá»u được tạo ra thì nên được nạp bởi bá»™ nạp và khởi động."
#: java/lang.opt:277
-#, fuzzy
-#| msgid "Set the source language version"
msgid "Set the source language version."
-msgstr "Äặt phiên bản ngôn ngữ nguồn"
+msgstr "Äặt phiên bản ngôn ngữ nguồn."
#: java/lang.opt:281
-#, fuzzy
-#| msgid "Set the target VM version"
msgid "Set the target VM version."
-msgstr "Äặt phiên bản VM đích"
+msgstr "Äặt phiên bản VM đích."
#: lto/lang.opt:28
-#, fuzzy, c-format
-#| msgid "unknown pointer size model %qs"
+#, c-format
msgid "unknown linker output %qs"
-msgstr "không hiểu mô hình kích thước con trỠ%qs"
+msgstr "không hiểu xuất bộ liên kết %qs"
#: lto/lang.opt:47
msgid "Set linker output type (used internally during LTO optimization)"
@@ -15902,63 +13071,48 @@ msgid "Whole program analysis (WPA) mode with number of parallel jobs specified.
msgstr ""
#: lto/lang.opt:68
-#, fuzzy
-#| msgid "The resolution file"
msgid "The resolution file."
-msgstr "Tập tin phân giải"
+msgstr "Tập tin phân giải."
#: common.opt:235
-#, fuzzy
-#| msgid "Enable user-defined instructions"
msgid "Enable coverage-guided fuzzing code instrumentation."
-msgstr "Bật câu lệnh được ngưá»i dùng xác định"
+msgstr ""
#: common.opt:302
-#, fuzzy
-#| msgid "Display this information"
msgid "Display this information."
-msgstr "Hiển thị thông tin này"
+msgstr "Hiển thị thông tin này."
#: common.opt:306
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:424
-#, fuzzy
-#| msgid "Alias for --help=target"
msgid "Alias for --help=target."
-msgstr "Bí danh cho --help=đích"
+msgstr "Bí danh cho --help=đích."
#: common.opt:449
msgid "--param <param>=<value>\tSet parameter <param> to value. See below for a complete list of parameters."
msgstr ""
#: common.opt:477
-#, fuzzy
-#| msgid "-O<number>\tSet optimization level to <number>"
msgid "-O<number>\tSet optimization level to <number>."
-msgstr "-O<số>\tÄặt mức tối ưu hóa thành <số>"
+msgstr "-O<số>\tÄặt mức tối ưu hóa thành <số>."
#: common.opt:481
-#, fuzzy
-#| msgid "Optimize for space rather than speed"
msgid "Optimize for space rather than speed."
-msgstr "Tối ưu hóa vỠkích thước thay vì tốc độ"
+msgstr "Tối ưu hóa vỠkích thước thay vì tốc độ."
#: common.opt:485
msgid "Optimize for speed disregarding exact standards compliance."
msgstr ""
#: common.opt:489
-#, fuzzy
-#| msgid "Optimize for space rather than speed"
msgid "Optimize for debugging experience rather than speed or size."
-msgstr "Tối ưu hóa vỠkích thước thay vì tốc độ"
+msgstr "Tối ưu hóa vỠthử nghiệm hơn là kích thước hay tốc độ."
#: common.opt:529
-#, fuzzy
msgid "This switch is deprecated; use -Wextra instead."
-msgstr "Cái chuyển này bị phản đối: hãy thay thế bằng -Werror=implicit-function-declaration"
+msgstr "Cái chuyển này đã lạc hậu: hãy thay thế bằng -Wextra."
#: common.opt:542
msgid "Warn about returning structures, unions or arrays."
@@ -15969,52 +13123,36 @@ msgid "Warn if a loop with constant number of iterations triggers undefined beha
msgstr ""
#: common.opt:550 common.opt:554
-#, fuzzy
-#| msgid "Warn if .class files are out of date"
msgid "Warn if an array is accessed out of bounds."
-msgstr "Cảnh báo nếu có tập tin .class quá cũ"
+msgstr ""
#: common.opt:558
-#, fuzzy
-#| msgid "Warn about function pointer arithmetic"
msgid "Warn about inappropriate attribute usage."
-msgstr "Cảnh báo vá» số há»c trỠđến hàm"
+msgstr ""
#: common.opt:562
-#, fuzzy
-#| msgid "Warn about casts which discard qualifiers"
msgid "Warn about pointer casts which increase alignment."
-msgstr "Cảnh báo vá» sá»± gán mà loại bá» Ä‘oạn Ä‘iá»u kiện"
+msgstr ""
#: common.opt:566
-#, fuzzy
-#| msgid "Warn when a function parameter is unused"
msgid "Warn when a #warning directive is encountered."
-msgstr "Cảnh báo khi tham số của hàm không được dùng"
+msgstr ""
#: common.opt:570
-#, fuzzy
-#| msgid "Warn about unprototyped function declarations"
msgid "Warn about uses of __attribute__((deprecated)) declarations."
-msgstr "Cảnh báo vỠkhai báo hàm không được khai báo mẫu trước"
+msgstr ""
#: common.opt:574
-#, fuzzy
-#| msgid "Warn when an optimization pass is disabled"
msgid "Warn when an optimization pass is disabled."
-msgstr "Cảnh báo khi tối ưu hóa bị tắt đi"
+msgstr ""
#: common.opt:578
-#, fuzzy
-#| msgid "Treat all warnings as errors"
msgid "Treat all warnings as errors."
-msgstr "Coi các cảnh báo như là các lỗi"
+msgstr "Coi các cảnh báo như là các lỗi."
#: common.opt:582
-#, fuzzy
-#| msgid "Treat specified warning as error"
msgid "Treat specified warning as error."
-msgstr "Coi các cảnh báo đã chỉ ra như là một lỗi"
+msgstr "Coi các cảnh báo đã chỉ ra như là một lỗi."
#: common.opt:586
msgid "Print extra (possibly unwanted) warnings."
@@ -16025,36 +13163,28 @@ msgid "Exit on the first error occurred."
msgstr ""
#: common.opt:594
-#, fuzzy
-#| msgid "-Wlarger-than=<number>\tWarn if an object is larger than <number> bytes"
msgid "-Wframe-larger-than=<number>\tWarn if a function's stack frame requires more than <number> bytes."
-msgstr "-Wlarger-than=<số>\tCảnh báo nếu một đối tượng lớn hơnn <số> byte"
+msgstr "-Wframe-larger-than=<số>\tCảnh báo nếu một khung con trỠcủa hàm lớn hơn <số> byte."
#: common.opt:598
msgid "Warn when attempting to free a non-heap object."
msgstr ""
#: common.opt:602
-#, fuzzy
-#| msgid "Warn when an inlined function cannot be inlined"
msgid "Warn when a function cannot be expanded to HSAIL."
-msgstr "Cảnh báo khi không không thể dùng hàm chung dòng"
+msgstr ""
#: common.opt:606
-#, fuzzy
-#| msgid "Warn when an inlined function cannot be inlined"
msgid "Warn when an inlined function cannot be inlined."
-msgstr "Cảnh báo khi không không thể dùng hàm chung dòng"
+msgstr "Cảnh báo khi không không thể dùng hàm chung dòng."
#: common.opt:610
msgid "Warn when an atomic memory model parameter is known to be outside the valid range."
msgstr ""
#: common.opt:617
-#, fuzzy
-#| msgid "-Wlarger-than=<number>\tWarn if an object is larger than <number> bytes"
msgid "-Wlarger-than=<number>\tWarn if an object is larger than <number> bytes."
-msgstr "-Wlarger-than=<số>\tCảnh báo nếu một đối tượng lớn hơnn <số> byte"
+msgstr "-Wlarger-than=<số>\tCảnh báo nếu một đối tượng lớn hơn <số> byte."
#: common.opt:621
msgid "Warn if dereferencing a NULL pointer may lead to erroneous or undefined behavior."
@@ -16069,10 +13199,8 @@ msgid "Warn about some C++ One Definition Rule violations during link time optim
msgstr ""
#: common.opt:636
-#, fuzzy
-#| msgid "Warn about underflow of numerical constant expressions"
msgid "Warn about overflow in arithmetic expressions."
-msgstr "Cảnh báo vỠbiểu thức hằng thuộc số bị tràn ngược"
+msgstr "Cảnh báo vá» biểu thức toán há»c bị tràn."
#: common.opt:640
msgid "During link time optimization warn about mismatched types of global declarations."
@@ -16095,10 +13223,8 @@ msgid "Warn about returning a pointer/reference to a local or temporary variable
msgstr ""
#: common.opt:660
-#, fuzzy
-#| msgid "Warn when a variable is unused"
msgid "Warn when one local variable shadows another."
-msgstr "Cảnh báo khi biến không được dùng"
+msgstr ""
#: common.opt:664
msgid "Warn when not issuing stack smashing protection for some reason."
@@ -16109,32 +13235,24 @@ msgid "Warn if stack usage might be larger than specified amount."
msgstr ""
#: common.opt:672 common.opt:676
-#, fuzzy
-#| msgid "Warn about functions which might be candidates for format attributes"
msgid "Warn about code which might break strict aliasing rules."
-msgstr "Cảnh báo vỠhàm có thể yêu cầu thuộc tính định dạng"
+msgstr ""
#: common.opt:680 common.opt:684
msgid "Warn about optimizations that assume that signed overflow is undefined."
msgstr ""
#: common.opt:688
-#, fuzzy
-#| msgid "Warn about functions which might be candidates for format attributes"
msgid "Warn about functions which might be candidates for __attribute__((const))."
-msgstr "Cảnh báo vỠhàm có thể yêu cầu thuộc tính định dạng"
+msgstr ""
#: common.opt:692
-#, fuzzy
-#| msgid "Warn about functions which might be candidates for format attributes"
msgid "Warn about functions which might be candidates for __attribute__((pure))."
-msgstr "Cảnh báo vỠhàm có thể yêu cầu thuộc tính định dạng"
+msgstr ""
#: common.opt:696
-#, fuzzy
-#| msgid "Warn about functions which might be candidates for format attributes"
msgid "Warn about functions which might be candidates for __attribute__((noreturn))."
-msgstr "Cảnh báo vỠhàm có thể yêu cầu thuộc tính định dạng"
+msgstr ""
#: common.opt:700
msgid "Warn about C++ polymorphic types where adding final keyword would improve code quality."
@@ -16149,8 +13267,6 @@ msgid "Do not suppress warnings from system headers."
msgstr ""
#: common.opt:712
-#, fuzzy
-#| msgid "Warn whenever type qualifiers are ignored."
msgid "Warn whenever a trampoline is generated."
msgstr "Cảnh báo khi nào Ä‘oạn Ä‘iá»u kiện loại bị bá» qua."
@@ -16159,64 +13275,44 @@ msgid "Warn if a comparison is always true or always false due to the limited ra
msgstr ""
#: common.opt:720
-#, fuzzy
-#| msgid "Warn about maybe uninitialized automatic variables"
msgid "Warn about uninitialized automatic variables."
-msgstr "Cảnh báo vỠcác biến tự động tự động không được khởi tạo"
+msgstr "Cảnh báo vỠcác biến tự động tự động không được khởi tạo."
#: common.opt:724
-#, fuzzy
-#| msgid "Warn about maybe uninitialized automatic variables"
msgid "Warn about maybe uninitialized automatic variables."
-msgstr "Cảnh báo vỠcác biến tự động tự động không được khởi tạo"
+msgstr "Cảnh báo vỠcác biến tự động tự động không được khởi tạo."
#: common.opt:732
-#, fuzzy
-#| msgid "Enable all -Wunused- warnings"
msgid "Enable all -Wunused- warnings."
-msgstr "Bật tấ cả -Wunused- warnings"
+msgstr "Bật tất cả cảnh báo -Wunused-."
#: common.opt:736
-#, fuzzy
-#| msgid "Warn when a function parameter is only set, otherwise unused"
msgid "Warn when a function parameter is only set, otherwise unused."
-msgstr "Cảnh báo khi tham số của hàm chỉ được đặt, nếu không thì không sử dụng"
+msgstr "Cảnh báo khi tham số của hàm chỉ được đặt, nếu không thì không sử dụng."
#: common.opt:740
-#, fuzzy
-#| msgid "Warn when a variable is only set, otherwise unused"
msgid "Warn when a variable is only set, otherwise unused."
-msgstr "Cảnh báo khi biến chỉ được đặt, nếu không thì không sử dụng"
+msgstr "Cảnh báo khi biến chỉ được đặt, nếu không thì không sử dụng."
#: common.opt:744
-#, fuzzy
-#| msgid "Warn when a function is unused"
msgid "Warn when a function is unused."
-msgstr "Cảnh báo khi hàm không được dùng"
+msgstr "Cảnh báo khi hàm không được dùng."
#: common.opt:748
-#, fuzzy
-#| msgid "Warn when a label is unused"
msgid "Warn when a label is unused."
-msgstr "Cảnh báo khi nhãn không được dùng"
+msgstr "Cảnh báo khi nhãn không được dùng."
#: common.opt:752
-#, fuzzy
-#| msgid "Warn when a function parameter is unused"
msgid "Warn when a function parameter is unused."
-msgstr "Cảnh báo khi tham số của hàm không được dùng"
+msgstr "Cảnh báo khi tham số của hàm không được dùng."
#: common.opt:756
-#, fuzzy
-#| msgid "Warn when an expression value is unused"
msgid "Warn when an expression value is unused."
-msgstr "Cảnh báo khi giá trị của biểu thức không được dùng"
+msgstr "Cảnh báo khi giá trị của biểu thức không được dùng."
#: common.opt:760
-#, fuzzy
-#| msgid "Warn when a variable is unused"
msgid "Warn when a variable is unused."
-msgstr "Cảnh báo khi biến không được dùng"
+msgstr "Cảnh báo khi biến không được dùng."
#: common.opt:764
msgid "Warn in case profiles in -fprofile-use do not match."
@@ -16251,32 +13347,24 @@ msgid "Aggressively optimize loops using language constraints."
msgstr ""
#: common.opt:888
-#, fuzzy
-#| msgid "Align the start of functions"
msgid "Align the start of functions."
-msgstr "Chỉnh đầu của hàm"
+msgstr "Chỉnh đầu của hàm."
#: common.opt:895
msgid "Align labels which are only reached by jumping."
msgstr ""
#: common.opt:902
-#, fuzzy
-#| msgid "Align all labels"
msgid "Align all labels."
-msgstr "Cân chỉnh tất cả các nhãn"
+msgstr "Cân chỉnh tất cả các nhãn."
#: common.opt:909
-#, fuzzy
-#| msgid "Align the start of loops"
msgid "Align the start of loops."
-msgstr "Chỉnh đầu của vòng lặp"
+msgstr "Chỉnh đầu của vòng lặp."
#: common.opt:932
-#, fuzzy
-#| msgid "Select what to sanitize"
msgid "Select what to sanitize."
-msgstr "Chá»n cái gì để cải thiện"
+msgstr "Chá»n cái gì để cải thiện."
#: common.opt:936
msgid "-fasan-shadow-offset=<number>\tUse custom shadow memory offset."
@@ -16291,9 +13379,8 @@ msgid "After diagnosing undefined behavior attempt to continue execution."
msgstr ""
#: common.opt:949
-#, fuzzy
msgid "This switch is deprecated; use -fsanitize-recover= instead."
-msgstr "Cái chuyển này bị phản đối: hãy thay thế bằng -Werror=implicit-function-declaration"
+msgstr "Cái chuyển này đã lạc hậu: hãy thay thế bằng -fsanitize-recover=."
#: common.opt:953
msgid "Use trap instead of a library function for undefined behavior sanitization."
@@ -16304,10 +13391,8 @@ msgid "Generate unwind tables that are exact at each instruction boundary."
msgstr ""
#: common.opt:961
-#, fuzzy
-#| msgid "Generate isel instructions"
msgid "Generate auto-inc/dec instructions."
-msgstr "Tạo ra câu lệnh isel"
+msgstr "Tạo ra câu lệnh auto-inc/dec."
#: common.opt:965
msgid "Use sample profile information for call graph node weights. The default"
@@ -16318,10 +13403,8 @@ msgid "Use sample profile information for call graph node weights. The profile"
msgstr ""
#: common.opt:979
-#, fuzzy
-#| msgid "Generate code for the user mode"
msgid "Generate code to check bounds before indexing arrays."
-msgstr "Tạo ra mã cho chế độ ngưá»i dùng"
+msgstr ""
#: common.opt:983
msgid "Replace add, compare, branch with branch on count register."
@@ -16356,41 +13439,32 @@ msgid "Save registers around function calls."
msgstr ""
#: common.opt:1018
-#, fuzzy
msgid "This switch is deprecated; do not use."
-msgstr "Cái chuyển này bị phản đối: hãy thay thế bằng -Werror=implicit-function-declaration"
+msgstr "Cái chuyển này đã lạc hậu: đừng dùng."
#: common.opt:1022
-#, fuzzy
-#| msgid "Check the return value of new in C++"
msgid "Check the return value of new in C++."
-msgstr "Kiểm tra giá trị trả vỠcủa new trong C++"
+msgstr "Kiểm tra giá trị trả vỠcủa new trong C++."
#: common.opt:1026
-#, fuzzy
-#| msgid "internal consistency failure"
msgid "Perform internal consistency checkings."
-msgstr "tính nhất quán ná»™i tại gặp lá»—i nghiêm trá»ng"
+msgstr ""
#: common.opt:1030
msgid "Looks for opportunities to reduce stack adjustments and stack references."
msgstr ""
#: common.opt:1034
-#, fuzzy
-#| msgid "%qD is used uninitialized in this function"
msgid "Do not put uninitialized globals in the common section."
-msgstr "%qD được dùng để bỠkhởi tạo trong hàm này"
+msgstr ""
#: common.opt:1042
msgid "-fcompare-debug[=<opts>]\tCompile with and without e.g. -gtoggle, and compare the final-insns dump."
msgstr ""
#: common.opt:1046
-#, fuzzy
-#| msgid "recompiling with -fcompare-debug"
msgid "Run only the second compilation of -fcompare-debug."
-msgstr "hãy dịch lại vá»›i tùy chá»n -fcompare-debug"
+msgstr "Chỉ chạy biên dịch lần hai cá»§a tùy chá»n -fcompare-debug."
#: common.opt:1050
msgid "Perform comparison elimination after register allocation has finished."
@@ -16405,10 +13479,8 @@ msgid "Perform a register copy-propagation optimization pass."
msgstr ""
#: common.opt:1062
-#, fuzzy
-#| msgid "Perform VR4130-specific alignment optimizations"
msgid "Perform cross-jumping optimization."
-msgstr "Tối ưu hóa sự xếp hàng một cách đặc trưng cho VR4130"
+msgstr ""
#: common.opt:1066
msgid "When running CSE, follow jumps to their targets."
@@ -16487,16 +13559,12 @@ msgid "Amend appropriate diagnostic messages with the command line option that c
msgstr ""
#: common.opt:1181
-#, fuzzy
-#| msgid "-fdisable-[tree|rtl|ipa]-<pass>=range1+range2 disables an optimization pass"
msgid "-fdisable-[tree|rtl|ipa]-<pass>=range1+range2 disables an optimization pass."
-msgstr "-fdisable-[tree|rtl|ipa]-<pass>=vùng1+vùng2 tắt chuyển qua tối ưu hóa"
+msgstr "-fdisable-[tree|rtl|ipa]-<pass>=vùng1+vùng2 tắt chuyển qua tối ưu hóa."
#: common.opt:1185
-#, fuzzy
-#| msgid "-fenable-[tree|rtl|ipa]-<pass>=range1+range2 enables an optimization pass"
msgid "-fenable-[tree|rtl|ipa]-<pass>=range1+range2 enables an optimization pass."
-msgstr "-fenable-[tree|rtl|ipa]-<pass>=vùng1+vùng2 bật chuyển qua tối ưu hóa"
+msgstr "-fenable-[tree|rtl|ipa]-<pass>=vùng1+vùng2 bật chuyển qua tối ưu hóa."
#: common.opt:1189
msgid "-fdump-<type>\tDump various compiler internals to a file."
@@ -16563,16 +13631,12 @@ msgid "Do not suppress C++ class debug information."
msgstr ""
#: common.opt:1257
-#, fuzzy
-#| msgid "Enable exception handling"
msgid "Enable exception handling."
-msgstr "Bật tiếp nhận ngoại lệ"
+msgstr "Bật tiếp nhận ngoại lệ."
#: common.opt:1261
-#, fuzzy
-#| msgid "Bound on number of iv uses in loop optimized in iv optimizations"
msgid "Perform a number of minor, expensive optimizations."
-msgstr "Äóng kết vá»›i số các lần sá»­ dụng iv trong vòng lặp được tối ưu hóa bằng sá»± tối ưu hóa iv"
+msgstr ""
#: common.opt:1265
msgid "-fexcess-precision=[fast|standard]\tSpecify handling of excess floating-point precision."
@@ -16613,10 +13677,8 @@ msgid "unknown floating point contraction style %qs"
msgstr ""
#: common.opt:1325
-#, fuzzy
-#| msgid "Do not use addresses that allocate global registers"
msgid "Allow function addresses to be held in registers."
-msgstr "Äừng sá»­ dụng địa chỉ mà cấp phát thanh ghi toàn cục"
+msgstr "Sử dụng địa chỉ hàm mà được giữ trong các thanh ghi."
#: common.opt:1329
msgid "Place each function into its own section."
@@ -16659,10 +13721,8 @@ msgid "Enable hoisting adjacent loads to encourage generating conditional move"
msgstr ""
#: common.opt:1389
-#, fuzzy
-#| msgid "Mark all loops as parallel"
msgid "Mark all loops as parallel."
-msgstr "Äánh dấu tất cả các vòng lặp là xá»­ lý song song"
+msgstr "Äánh dấu tất cả các vòng lặp là xá»­ lý song song."
#: common.opt:1393 common.opt:1397 common.opt:1401 common.opt:1405
#: common.opt:2388
@@ -16678,10 +13738,8 @@ msgid "Use STB_GNU_UNIQUE if supported by the assembler."
msgstr ""
#: common.opt:1421
-#, fuzzy
-#| msgid "Enable label alignment optimizations"
msgid "Enable the loop nest optimizer."
-msgstr "Bật sự tối ưu hóa cách xếp hàng nhãn"
+msgstr "Bật sự tối ưu hóa vòng lặp lồng nhau."
#: common.opt:1425
msgid "Force bitfield accesses to match their type width."
@@ -16700,10 +13758,8 @@ msgid "Perform conversion of conditional jumps to branchless equivalents."
msgstr ""
#: common.opt:1445
-#, fuzzy
-#| msgid "Prefer branches over conditional execution"
msgid "Perform conversion of conditional jumps to conditional execution."
-msgstr "Thích nhánh hÆ¡n sá»± thá»±c hiện có Ä‘iá»u kiện"
+msgstr ""
#: common.opt:1449
msgid "-fstack-reuse=[all|named_vars|none] Set stack reuse level for local variables."
@@ -16723,10 +13779,8 @@ msgid "Also if-convert conditional jumps containing memory writes."
msgstr ""
#: common.opt:1477
-#, fuzzy
-#| msgid "Do not generate .size directives"
msgid "Do not generate .size directives."
-msgstr "Äừng tạo ra chỉ thị .size"
+msgstr "Äừng tạo ra chỉ thị .size."
#: common.opt:1481
msgid "Perform indirect inlining."
@@ -16741,10 +13795,8 @@ msgid "Integrate functions into their callers when code size is known not to gro
msgstr ""
#: common.opt:1495
-#, fuzzy
-#| msgid "function not declared inline and code size would grow"
msgid "Integrate functions not declared \"inline\" into their callers when profitable."
-msgstr "hàm không phải được tuyên bố trực tiếp, và kích cỡ mã sẽ tăng lại"
+msgstr ""
#: common.opt:1499
msgid "Integrate functions only required by their single caller."
@@ -16775,16 +13827,12 @@ msgid "Perform interprocedural constant propagation."
msgstr ""
#: common.opt:1530
-#, fuzzy
-#| msgid "How much can given compilation unit grow because of the interprocedural constant propagation (in percent)"
msgid "Perform cloning to make Interprocedural constant propagation stronger."
-msgstr "Äá»™ tăng lên (theo phần trăm) được phép cho đơn vị biên dịch đưa ra do sá»± lan truyá»n bất biến thuá»™c liên quá trình"
+msgstr ""
#: common.opt:1534
-#, fuzzy
-#| msgid "How much can given compilation unit grow because of the interprocedural constant propagation (in percent)"
msgid "Perform alignment discovery and propagation to make Interprocedural constant propagation stronger."
-msgstr "Äá»™ tăng lên (theo phần trăm) được phép cho đơn vị biên dịch đưa ra do sá»± lan truyá»n bất biến thuá»™c liên quá trình"
+msgstr ""
#: common.opt:1538
msgid "Perform interprocedural profile propagation."
@@ -16815,10 +13863,8 @@ msgid "Discover readonly and non addressable static variables."
msgstr ""
#: common.opt:1574
-#, fuzzy
-#| msgid "-fira-algorithm=[CB|priority] Set the used IRA algorithm"
msgid "-fira-algorithm=[CB|priority] Set the used IRA algorithm."
-msgstr "-fira-algorithm=[CB|priority] Äặt dùng thuật toán IRA"
+msgstr "-fira-algorithm=[CB|priority] Äặt dùng thuật toán IRA."
#: common.opt:1577
#, c-format
@@ -16826,10 +13872,8 @@ msgid "unknown IRA algorithm %qs"
msgstr "không hiểu thuật toán IRA %qs"
#: common.opt:1587
-#, fuzzy
-#| msgid "-fira-region=[one|all|mixed] Set regions for IRA"
msgid "-fira-region=[one|all|mixed] Set regions for IRA."
-msgstr "-fira-region=[one|all|mixed] Äặt vùng cho IRA"
+msgstr "-fira-region=[one|all|mixed] Äặt vùng cho IRA."
#: common.opt:1590
#, c-format
@@ -16857,20 +13901,16 @@ msgid "Optimize induction variables on trees."
msgstr ""
#: common.opt:1629
-#, fuzzy
-#| msgid "type mismatch for case label in switch statement"
msgid "Use jump tables for sufficiently large switch statements."
-msgstr "kiểu không khớp cho nhãn case trong câu lệnh switch"
+msgstr ""
#: common.opt:1633
-#, fuzzy
-#| msgid "Generate cld instruction in the function prologue."
msgid "Generate code for functions even if they are fully inlined."
-msgstr "Tạo ra câu lệnh cld trong đoạn mở đầu hàm."
+msgstr "Xuất hàm ngay cả khi chúng có thể chung dòng."
#: common.opt:1637
msgid "Generate code for static functions even if they are never called."
-msgstr ""
+msgstr "Xuất mã cho hàm tÄ©nh ngay cả khi chúng không bao giỠđược gá»i."
#: common.opt:1641
msgid "Emit static const variables even if they are not used."
@@ -16893,19 +13933,17 @@ msgid "Link-time optimization with number of parallel jobs or jobserver."
msgstr ""
#: common.opt:1664
-#, fuzzy, c-format
+#, c-format
msgid "unknown LTO partitioning model %qs"
-msgstr "không hiểu mô hình TLS %qs"
+msgstr "không hiểu mô hình phân vùng TLS %qs"
#: common.opt:1683
msgid "Specify the algorithm to partition symbols and vars at linktime."
msgstr ""
#: common.opt:1688
-#, fuzzy
-#| msgid "-flto-compression-level=<number>\tUse zlib compression level <number> for IL"
msgid "-flto-compression-level=<number>\tUse zlib compression level <number> for IL."
-msgstr "-flto-compression-level=<số>\tDùng mức nén zlib <số> cho IL"
+msgstr "-flto-compression-level=<số>\tDùng mức nén zlib <số> cho IL."
#: common.opt:1692
msgid "Merge C++ types using One Definition Rule."
@@ -16920,16 +13958,12 @@ msgid "Report various link-time optimization statistics for WPA only."
msgstr ""
#: common.opt:1704
-#, fuzzy
-#| msgid "Recognize built-in functions"
msgid "Set errno after built-in math functions."
-msgstr "Chấp nhận các hàm dựng sẵn"
+msgstr ""
#: common.opt:1708
-#, fuzzy
-#| msgid "-fmax-errors=<number>\tMaximum number of errors to report"
msgid "-fmax-errors=<number>\tMaximum number of errors to report."
-msgstr "-fmax-errors=<số>\tSố lượng tối đa các lỗi cần thông báo"
+msgstr "-fmax-errors=<số>\tSố lượng tối đa các lỗi cần thông báo."
#: common.opt:1712
msgid "Report on permanent memory allocation."
@@ -16984,9 +14018,9 @@ msgid "Support synchronous non-call exceptions."
msgstr ""
#: common.opt:1766
-#, fuzzy, c-format
+#, c-format
msgid "options or targets missing after %qs"
-msgstr "thiếu quyết toán sau %qs"
+msgstr "thiếu tùy chá»n hay đích sau %qs"
#: common.opt:1767
msgid "-foffload=<targets>=<options> Specify offloading targets and options for them."
@@ -16997,25 +14031,21 @@ msgid "-foffload-abi=[lp64|ilp32] Set the ABI to use in an offload compiler.
msgstr ""
#: common.opt:1774
-#, fuzzy, c-format
+#, c-format
msgid "unknown offload ABI %qs"
-msgstr "không hiểu mô hình TLS %qs"
+msgstr "không hiểu ABI offload %qs"
#: common.opt:1784
msgid "When possible do not generate stack frames."
msgstr ""
#: common.opt:1788
-#, fuzzy
-#| msgid "Enable all optional instructions"
msgid "Enable all optimization info dumps on stderr."
-msgstr "Bật tất cả các câu lệnh vẫn tùy chá»n"
+msgstr ""
#: common.opt:1792
-#, fuzzy
-#| msgid "-fopt-info[-<type>=filename]\tDump compiler optimization details"
msgid "-fopt-info[-<type>=filename]\tDump compiler optimization details."
-msgstr "-fopt-info[-<type>=tập-tin]\tÄổ chi tiết việc tối ưu hóa bá»™ dịch"
+msgstr "-fopt-info[-<type>=tập-tin]\tÄổ chi tiết việc tối ưu hóa bá»™ dịch."
#: common.opt:1800
msgid "Optimize sibling and tail recursive calls."
@@ -17038,20 +14068,16 @@ msgid "-fpack-struct=<number>\tSet initial maximum structure member alignment."
msgstr ""
#: common.opt:1824
-#, fuzzy
-#| msgid "Return all structures in memory (AIX default)"
msgid "Return small aggregates in memory, not registers."
-msgstr "Trả lại tất cả các cấu trúc trong vùng nhớ (AIX mặc định)"
+msgstr ""
#: common.opt:1828
msgid "Perform loop peeling."
msgstr ""
#: common.opt:1832
-#, fuzzy
-#| msgid "Enable nested conditional execution optimizations"
msgid "Enable machine specific peephole optimizations."
-msgstr "Bật sá»± tối ưu hóa quá trình thá»±c hiện có Ä‘iá»u kiện mà cÅ©ng lồng nhau"
+msgstr ""
#: common.opt:1836
msgid "Enable an RTL peephole pass before sched2."
@@ -17062,38 +14088,28 @@ msgid "Generate position-independent code if possible (large mode)."
msgstr ""
#: common.opt:1844
-#, fuzzy
-#| msgid "Create a position independent executable"
msgid "Generate position-independent code for executables if possible (large mode)."
-msgstr "Tạo một bản thực hiện không phụ thuộc vào vị trí"
+msgstr ""
#: common.opt:1848
-#, fuzzy
-#| msgid "Create a position independent executable"
msgid "Generate position-independent code if possible (small mode)."
-msgstr "Tạo một bản thực hiện không phụ thuộc vào vị trí"
+msgstr ""
#: common.opt:1852
-#, fuzzy
-#| msgid "Create a position independent executable"
msgid "Generate position-independent code for executables if possible (small mode)."
-msgstr "Tạo một bản thực hiện không phụ thuộc vào vị trí"
+msgstr ""
#: common.opt:1856
msgid "Use PLT for PIC calls (-fno-plt: load the address from GOT at call site)."
msgstr ""
#: common.opt:1860
-#, fuzzy
-#| msgid "Specify a plugin to load"
msgid "Specify a plugin to load."
-msgstr "Chỉ định phần bổ sung cần nạp"
+msgstr "Chỉ định phần bổ sung cần nạp."
#: common.opt:1864
-#, fuzzy
-#| msgid "-fplugin-arg-<name>-<key>[=<value>]\tSpecify argument <key>=<value> for plugin <name>"
msgid "-fplugin-arg-<name>-<key>[=<value>]\tSpecify argument <key>=<value> for plugin <name>."
-msgstr "-fplugin-arg-<tên>-<khóa>[=<giá trị>]\tChỉ định đối số <khóa>=<giá trị> cho plugin <tên>"
+msgstr "-fplugin-arg-<tên>-<khóa>[=<giá trị>]\tChỉ định đối số <khóa>=<giá trị> cho plugin <tên>."
#: common.opt:1868
msgid "Run predictive commoning optimization."
@@ -17104,9 +14120,8 @@ msgid "Generate prefetch instructions, if available, for arrays in loops."
msgstr ""
#: common.opt:1876
-#, fuzzy
msgid "Enable basic program profiling code."
-msgstr "Bật tiếp nhận ngoại lệ"
+msgstr ""
#: common.opt:1880
msgid "Insert arc-based program profiling code."
@@ -17141,10 +14156,8 @@ msgid "Insert code to profile values of expressions."
msgstr ""
#: common.opt:1913
-#, fuzzy
-#| msgid "internal consistency failure"
msgid "Report on consistency of profile."
-msgstr "tính nhất quán ná»™i tại gặp lá»—i nghiêm trá»ng"
+msgstr ""
#: common.opt:1917
msgid "Enable function reordering that improves code placement."
@@ -17159,10 +14172,8 @@ msgid "Record gcc command line switches in the object file."
msgstr ""
#: common.opt:1938
-#, fuzzy
-#| msgid "Return small structures in registers (SVR4 default)"
msgid "Return small aggregates in registers."
-msgstr "Trả lại các cấu trúc nhỠtrong thanh ghi (SVR4 mặc định)"
+msgstr ""
#: common.opt:1946
msgid "Tell DSE that the storage for a C++ object is dead when the constructor"
@@ -17173,10 +14184,8 @@ msgid "Relief of register pressure through live range shrinkage."
msgstr ""
#: common.opt:1955
-#, fuzzy
-#| msgid "Perform VR4130-specific alignment optimizations"
msgid "Perform a register renaming optimization pass."
-msgstr "Tối ưu hóa sự xếp hàng một cách đặc trưng cho VR4130"
+msgstr ""
#: common.opt:1959
msgid "Perform a target dependent instruction fusion optimization pass."
@@ -17191,10 +14200,9 @@ msgid "-freorder-blocks-algorithm=[simple|stc] Set the used basic block reorderi
msgstr ""
#: common.opt:1970
-#, fuzzy, c-format
-#| msgid "unknown IRA algorithm %qs"
+#, c-format
msgid "unknown basic block reordering algorithm %qs"
-msgstr "không hiểu thuật toán IRA %qs"
+msgstr "không hiểu thuật toán xếp lại khối cơ bản %qs"
#: common.opt:1980
msgid "Reorder basic blocks and partition into hot and cold sections."
@@ -17229,10 +14237,8 @@ msgid "Allow speculative motion of some loads."
msgstr ""
#: common.opt:2016
-#, fuzzy
-#| msgid "Use data speculation before reload"
msgid "Allow speculative motion of more loads."
-msgstr "Sử dụng phép đầu cơ loại dữ liệu trước khi nạp lại"
+msgstr ""
#: common.opt:2020
msgid "-fsched-verbose=<number>\tSet the verbosity level of the scheduler."
@@ -17243,24 +14249,20 @@ msgid "If scheduling post reload, do superblock scheduling."
msgstr ""
#: common.opt:2032
-#, fuzzy
msgid "Reschedule instructions before register allocation."
-msgstr "Sử dụng thanh ghi để gửi đối số qua"
+msgstr ""
#: common.opt:2036
-#, fuzzy
msgid "Reschedule instructions after register allocation."
-msgstr "Sử dụng thanh ghi để gửi đối số qua"
+msgstr ""
#: common.opt:2043
msgid "Schedule instructions using selective scheduling algorithm."
msgstr ""
#: common.opt:2047
-#, fuzzy
-#| msgid "Use data speculation after reload"
msgid "Run selective scheduling after reload."
-msgstr "Sử dụng phép đầu cơ loại dữ liệu sau khi nạp lại"
+msgstr ""
#: common.opt:2051
msgid "Perform software pipelining of inner loops during selective scheduling."
@@ -17303,20 +14305,16 @@ msgid "Enable the critical path heuristic in the scheduler."
msgstr ""
#: common.opt:2097
-#, fuzzy
-#| msgid "Enable the use of RX FPU instructions. This is the default."
msgid "Enable the speculative instruction heuristic in the scheduler."
-msgstr "Bật khả năng sá»­ dụng câu lệnh dấu chấm động RX. Äây là cài đặt mặc định."
+msgstr ""
#: common.opt:2101
msgid "Enable the rank heuristic in the scheduler."
msgstr ""
#: common.opt:2105
-#, fuzzy
-#| msgid "Enable the use of RX FPU instructions. This is the default."
msgid "Enable the last instruction heuristic in the scheduler."
-msgstr "Bật khả năng sá»­ dụng câu lệnh dấu chấm động RX. Äây là cài đặt mặc định."
+msgstr ""
#: common.opt:2109
msgid "Enable the dependent count heuristic in the scheduler."
@@ -17347,20 +14345,16 @@ msgid "Disable floating point optimizations that ignore the IEEE signedness of z
msgstr ""
#: common.opt:2146
-#, fuzzy
-#| msgid "Generate floating point mathematics using given instruction set"
msgid "Convert floating point constants to single precision constants."
-msgstr "Tạo ra tính toán dùng dấu chấm động dùng tập hợp câu lệnh đưa ra"
+msgstr ""
#: common.opt:2150
msgid "Split lifetimes of induction variables when loops are unrolled."
msgstr ""
#: common.opt:2154
-#, fuzzy
-#| msgid "Generate discontiguous stack frames"
msgid "Generate discontiguous stack frames."
-msgstr "Tạo ra các khung ngăn xếp không liên tiếp"
+msgstr "Tạo ra các khung ngăn xếp không liên tiếp."
#: common.opt:2158
msgid "Split wide types into independent registers."
@@ -17383,34 +14377,24 @@ msgid "Apply variable expansion when loops are unrolled."
msgstr ""
#: common.opt:2178
-#, fuzzy
-#| msgid "-fstack-check=[no|generic|specific]\tInsert stack checking code into the program"
msgid "-fstack-check=[no|generic|specific]\tInsert stack checking code into the program."
-msgstr "-fstack-check=[no|generic|specific]\t Chèn mã kiểm tra ngăn xếp vào chương trình"
+msgstr "-fstack-check=[no|generic|specific]\t Chèn mã kiểm tra ngăn xếp vào chương trình."
#: common.opt:2182
-#, fuzzy
-#| msgid "Insert stack checking code into the program. Same as -fstack-check=specific"
msgid "Insert stack checking code into the program. Same as -fstack-check=specific."
-msgstr "Chèn mã kiểm tra ngăn xếp vào chương trình. Giống với -fstack-check=specific"
+msgstr "Chèn mã kiểm tra ngăn xếp vào chương trình. Giống với -fstack-check=specific."
#: common.opt:2189
-#, fuzzy
-#| msgid "-fstack-limit-register=<register>\tTrap if the stack goes past <register>"
msgid "-fstack-limit-register=<register>\tTrap if the stack goes past <register>."
-msgstr "-fstack-limit-register=<register>\tBẫy nếu ngăn xếp đi qua <register>"
+msgstr "-fstack-limit-register=<register>\tBẫy nếu ngăn xếp đi qua <register>."
#: common.opt:2193
-#, fuzzy
-#| msgid "-fstack-limit-symbol=<name>\tTrap if the stack goes past symbol <name>"
msgid "-fstack-limit-symbol=<name>\tTrap if the stack goes past symbol <name>."
-msgstr "-fstack-limit-symbol=<tên>\tBẫy nếu ngăn xếp đi qua ký hiệu <tên>"
+msgstr "-fstack-limit-symbol=<tên>\tBẫy nếu ngăn xếp đi qua ký hiệu <tên>."
#: common.opt:2197
-#, fuzzy
-#| msgid "Enable asan stack protection"
msgid "Use propolice as a stack protection method."
-msgstr "Bật chức năng bảo vệ ngăn xếp asan"
+msgstr "Bật chức năng bảo vệ ngăn xếp asan."
#: common.opt:2201
msgid "Use a stack protection method for every function."
@@ -17421,47 +14405,36 @@ msgid "Use a smart stack protection method for certain functions."
msgstr ""
#: common.opt:2209
-#, fuzzy
msgid "Use stack protection method only for functions with the stack_protect attribute."
-msgstr "Không hiểu kiến trúc ARM (để dùng vá»›i tùy chá»n -march=):"
+msgstr ""
#: common.opt:2213
-#, fuzzy
-#| msgid "Reuse r30 on a per function basis"
msgid "Output stack usage information on a per-function basis."
-msgstr "Sử dụng lại r30 một cách từng hàm"
+msgstr ""
#: common.opt:2225
msgid "Assume strict aliasing rules apply."
msgstr ""
#: common.opt:2229
-#, fuzzy
-#| msgid "Treat missing header files as generated files"
msgid "Treat signed overflow as undefined."
-msgstr "Thấy tập tin phần đầu còn thiếu là tập tin được tạo ra"
+msgstr ""
#: common.opt:2233
msgid "Implement __atomic operations via libcalls to legacy __sync functions."
msgstr ""
#: common.opt:2237
-#, fuzzy
-#| msgid "Check for syntax errors, then stop"
msgid "Check for syntax errors, then stop."
-msgstr "Kiểm tra lỗi cú pháp, sau đó dừng lại"
+msgstr "Kiểm tra lỗi cú pháp, sau đó dừng lại."
#: common.opt:2241
-#, fuzzy
-#| msgid "Create data files needed by \"gcov\""
msgid "Create data files needed by \"gcov\"."
-msgstr "Tạo tập tin dữ liệu cần bởi \"gcov\""
+msgstr "Tạo tập tin dữ liệu cần bởi \"gcov\"."
#: common.opt:2245
-#, fuzzy
-#| msgid "Perform VR4130-specific alignment optimizations"
msgid "Perform jump threading optimizations."
-msgstr "Tối ưu hóa sự xếp hàng một cách đặc trưng cho VR4130"
+msgstr ""
#: common.opt:2249
msgid "Report the time taken by each compiler pass."
@@ -17485,83 +14458,68 @@ msgid "Perform superblock formation via tail duplication."
msgstr ""
#: common.opt:2283
-#, fuzzy
-#| msgid "Assume pt* instructions won't trap"
msgid "Assume floating-point operations can trap."
-msgstr "Coi là câu oệnh pt* sẽ không bẫy"
+msgstr ""
#: common.opt:2287
msgid "Trap for signed overflow in addition, subtraction and multiplication."
msgstr ""
#: common.opt:2291
-#, fuzzy
msgid "Enable SSA-CCP optimization on trees."
-msgstr "Bật sá»± di chuyển có Ä‘iá»u kiện"
+msgstr ""
#: common.opt:2295
-#, fuzzy
msgid "Enable SSA-BIT-CCP optimization on trees."
-msgstr "Bật sá»± di chuyển có Ä‘iá»u kiện"
+msgstr ""
#: common.opt:2303
-#, fuzzy
msgid "Enable loop header copying on trees."
-msgstr "Bật sá»± di chuyển có Ä‘iá»u kiện"
+msgstr ""
#: common.opt:2311
msgid "Enable SSA coalescing of user variables."
msgstr ""
#: common.opt:2319
-#, fuzzy
msgid "Enable copy propagation on trees."
-msgstr "Bật sá»± di chuyển có Ä‘iá»u kiện"
+msgstr ""
#: common.opt:2327
-#, fuzzy
-#| msgid "Generate conditional move instructions."
msgid "Transform condition stores into unconditional ones."
-msgstr "Tạo chỉ lệnh di chuyển Ä‘iá»u kiện"
+msgstr ""
#: common.opt:2331
msgid "Perform conversions of switch initializations."
msgstr ""
#: common.opt:2335
-#, fuzzy
msgid "Enable SSA dead code elimination optimization on trees."
-msgstr "Bật số tối ưu hóa bộ liên kết"
+msgstr ""
#: common.opt:2339
-#, fuzzy
msgid "Enable dominator optimizations."
-msgstr "Bật số tối ưu hóa bộ liên kết"
+msgstr ""
#: common.opt:2343
-#, fuzzy
msgid "Enable tail merging on trees."
-msgstr "Bật sá»± di chuyển có Ä‘iá»u kiện"
+msgstr ""
#: common.opt:2347
-#, fuzzy
msgid "Enable dead store elimination."
-msgstr "Bật số tối ưu hóa bộ liên kết"
+msgstr ""
#: common.opt:2351
-#, fuzzy
msgid "Enable forward propagation on trees."
-msgstr "Bật sá»± di chuyển có Ä‘iá»u kiện"
+msgstr ""
#: common.opt:2355
-#, fuzzy
msgid "Enable Full Redundancy Elimination (FRE) on trees."
-msgstr "Bật sá»± di chuyển có Ä‘iá»u kiện"
+msgstr ""
#: common.opt:2359
-#, fuzzy
msgid "Enable string length optimizations on trees."
-msgstr "Bật sá»± di chuyển có Ä‘iá»u kiện"
+msgstr ""
#: common.opt:2363
msgid "Detect paths that trigger erroneous or undefined behavior due to"
@@ -17572,27 +14530,24 @@ msgid "Detect paths that trigger erroneous or undefined behavior due a null valu
msgstr ""
#: common.opt:2376
-#, fuzzy
msgid "Enable loop distribution on trees."
-msgstr "Bật sá»± di chuyển có Ä‘iá»u kiện"
+msgstr ""
#: common.opt:2380
msgid "Enable loop distribution for patterns transformed into a library call."
msgstr ""
#: common.opt:2384
-#, fuzzy
msgid "Enable loop invariant motion on trees."
-msgstr "Bật sá»± di chuyển có Ä‘iá»u kiện"
+msgstr ""
#: common.opt:2392
msgid "Create canonical induction variables in loops."
msgstr ""
#: common.opt:2396
-#, fuzzy
msgid "Enable loop optimizations on tree level."
-msgstr "Bật sá»± di chuyển có Ä‘iá»u kiện"
+msgstr ""
#: common.opt:2400
msgid "Enable automatic parallelization of loops."
@@ -17603,9 +14558,8 @@ msgid "Enable hoisting loads from conditional pointers."
msgstr ""
#: common.opt:2408
-#, fuzzy
msgid "Enable SSA-PRE optimization on trees."
-msgstr "Bật sá»± di chuyển có Ä‘iá»u kiện"
+msgstr ""
#: common.opt:2412
msgid "In SSA-PRE optimization on trees, enable partial-partial redundancy elimination."
@@ -17616,14 +14570,12 @@ msgid "Perform function-local points-to analysis on trees."
msgstr ""
#: common.opt:2420
-#, fuzzy
msgid "Enable reassociation on tree level."
-msgstr "Bật sá»± di chuyển có Ä‘iá»u kiện"
+msgstr ""
#: common.opt:2428
-#, fuzzy
msgid "Enable SSA code sinking on trees."
-msgstr "Bật sá»± di chuyển có Ä‘iá»u kiện"
+msgstr ""
#: common.opt:2432
msgid "Perform straight-line strength reduction."
@@ -17682,10 +14634,8 @@ msgid "Perform loop unswitching."
msgstr ""
#: common.opt:2496
-#, fuzzy
-#| msgid "Enable exception handling"
msgid "Just generate unwind tables for exception handling."
-msgstr "Bật tiếp nhận ngoại lệ"
+msgstr ""
#: common.opt:2500
msgid "Use the bfd linker instead of the default linker."
@@ -17696,10 +14646,8 @@ msgid "Use the gold linker instead of the default linker."
msgstr ""
#: common.opt:2516
-#, fuzzy
-#| msgid "iterator variable"
msgid "Perform variable tracking."
-msgstr "biến iterator"
+msgstr ""
#: common.opt:2524
msgid "Perform variable tracking by annotating assignments."
@@ -17714,19 +14662,16 @@ msgid "Perform variable tracking and also tag variables that are uninitialized."
msgstr ""
#: common.opt:2542
-#, fuzzy
msgid "Enable vectorization on trees."
-msgstr "Bật sá»± di chuyển có Ä‘iá»u kiện"
+msgstr ""
#: common.opt:2550
-#, fuzzy
msgid "Enable loop vectorization on trees."
-msgstr "Bật sá»± di chuyển có Ä‘iá»u kiện"
+msgstr ""
#: common.opt:2554
-#, fuzzy
msgid "Enable basic block vectorization (SLP) on trees."
-msgstr "Bật sá»± di chuyển có Ä‘iá»u kiện"
+msgstr ""
#: common.opt:2558
msgid "Specifies the cost model for vectorization."
@@ -17737,9 +14682,9 @@ msgid "Specifies the vectorization cost model for code marked with a simd direct
msgstr ""
#: common.opt:2565
-#, fuzzy, c-format
+#, c-format
msgid "unknown vectorizer cost model %qs"
-msgstr "không hiểu mô hình kích thước con trỠ%qs"
+msgstr ""
#: common.opt:2578
msgid "Enables the dynamic vectorizer cost model. Preserved for backward compatibility."
@@ -17771,9 +14716,9 @@ msgid "Validate vtable pointers before using them."
msgstr ""
#: common.opt:2626
-#, fuzzy, c-format
+#, c-format
msgid "unknown vtable verify initialization priority %qs"
-msgstr "(gần chỗ khởi tạo cho %qs)"
+msgstr ""
#: common.opt:2639
msgid "Output vtable verification counters."
@@ -17792,40 +14737,28 @@ msgid "Construct webs and split unrelated uses of single variable."
msgstr ""
#: common.opt:2655
-#, fuzzy
-#| msgid "Enable conditional execution other than moves/scc"
msgid "Enable conditional dead code elimination for builtin calls."
-msgstr "Bật sá»± thá»±c hiện có Ä‘iá»u kiện mà khác vá»›i moves/scc"
+msgstr ""
#: common.opt:2659
-#, fuzzy
-#| msgid "Perform VR4130-specific alignment optimizations"
msgid "Perform whole program optimizations."
-msgstr "Tối ưu hóa sự xếp hàng một cách đặc trưng cho VR4130"
+msgstr ""
#: common.opt:2663
-#, fuzzy
-#| msgid "Arithmetic overflow at %L"
msgid "Assume signed arithmetic overflow wraps around."
-msgstr "Số há»c bị tràn tại %L"
+msgstr ""
#: common.opt:2667
-#, fuzzy
-#| msgid "%qD is used uninitialized in this function"
msgid "Put zero initialized data in the bss section."
-msgstr "%qD được dùng để bỠkhởi tạo trong hàm này"
+msgstr ""
#: common.opt:2671
-#, fuzzy
-#| msgid "Emit verbose debug information in assembly code"
msgid "Generate debug information in default format."
-msgstr "Xuất nhiá»u thông tin gỡ rối trong mã dịch mã số"
+msgstr ""
#: common.opt:2675
-#, fuzzy
-#| msgid "Emit verbose debug information in assembly code"
msgid "Generate debug information in COFF format."
-msgstr "Xuất nhiá»u thông tin gỡ rối trong mã dịch mã số"
+msgstr ""
#: common.opt:2679
msgid "Generate debug information in default version of DWARF format."
@@ -17860,22 +14793,16 @@ msgid "Record gcc command line switches in DWARF DW_AT_producer."
msgstr ""
#: common.opt:2711
-#, fuzzy
-#| msgid "Emit verbose debug information in assembly code"
msgid "Don't generate debug information in separate .dwo files."
-msgstr "Xuất nhiá»u thông tin gỡ rối trong mã dịch mã số"
+msgstr ""
#: common.opt:2715
-#, fuzzy
-#| msgid "Emit verbose debug information in assembly code"
msgid "Generate debug information in separate .dwo files."
-msgstr "Xuất nhiá»u thông tin gỡ rối trong mã dịch mã số"
+msgstr ""
#: common.opt:2719
-#, fuzzy
-#| msgid "Emit verbose debug information in assembly code"
msgid "Generate debug information in STABS format."
-msgstr "Xuất nhiá»u thông tin gỡ rối trong mã dịch mã số"
+msgstr ""
#: common.opt:2723
msgid "Generate debug information in extended STABS format."
@@ -17894,30 +14821,24 @@ msgid "Toggle debug information generation."
msgstr ""
#: common.opt:2739
-#, fuzzy
-#| msgid "Emit verbose debug information in assembly code"
msgid "Generate debug information in VMS format."
-msgstr "Xuất nhiá»u thông tin gỡ rối trong mã dịch mã số"
+msgstr ""
#: common.opt:2743
-#, fuzzy
-#| msgid "Emit verbose debug information in assembly code"
msgid "Generate debug information in XCOFF format."
-msgstr "Xuất nhiá»u thông tin gỡ rối trong mã dịch mã số"
+msgstr ""
#: common.opt:2747
msgid "Generate debug information in extended XCOFF format."
msgstr ""
#: common.opt:2765
-#, fuzzy
msgid "Generate compressed debug sections."
-msgstr "Tạo ra câu lệnh isel"
+msgstr ""
#: common.opt:2769
-#, fuzzy
msgid "-gz=<format>\tGenerate compressed debug sections in format <format>."
-msgstr "Tạo ra câu lệnh isel"
+msgstr ""
#: common.opt:2776
msgid "-iplugindir=<dir>\tSet <dir> to be the default plugin directory."
@@ -17928,61 +14849,44 @@ msgid "-imultiarch <dir>\tSet <dir> to be the multiarch include subdirectory."
msgstr ""
#: common.opt:2802
-#, fuzzy
-#| msgid "-o <file>\tPlace output into <file>"
msgid "-o <file>\tPlace output into <file>."
msgstr "-o <tập tin>\tÄặt kết xuất vào <tập tin>"
#: common.opt:2806
-#, fuzzy
msgid "Enable function profiling."
-msgstr "Bật tiếp nhận ngoại lệ"
+msgstr ""
#: common.opt:2816
msgid "Like -pedantic but issue them as errors."
msgstr ""
#: common.opt:2856
-#, fuzzy
-#| msgid "Do not emit function prologue or epilogue"
msgid "Do not display functions compiled or elapsed time."
-msgstr "Äừng xuất Ä‘oạn mở/đóng hàm"
+msgstr ""
#: common.opt:2888
-#, fuzzy
-#| msgid "Enable verbose output"
msgid "Enable verbose output."
-msgstr "Bật kết xuất chi tiết"
+msgstr "Bật kết xuất chi tiết."
#: common.opt:2892
-#, fuzzy
-#| msgid "Display the compiler's version"
msgid "Display the compiler's version."
-msgstr "Hiển thị thông tin vỠphiên bản của bộ biên dịch"
+msgstr "Hiển thị thông tin vỠphiên bản của bộ biên dịch."
#: common.opt:2896
-#, fuzzy
-#| msgid "Suppress warnings"
msgid "Suppress warnings."
-msgstr "Thu hồi cảnh báo"
+msgstr "Thu hồi cảnh báo."
#: common.opt:2906
-#, fuzzy
-#| msgid "Create a shared library"
msgid "Create a shared library."
-msgstr "Tạo thư viện dùng chung"
+msgstr "Tạo thư viện dùng chung."
#: common.opt:2951
-#, fuzzy
-#| msgid "Create a position independent executable"
msgid "Don't create a position independent executable."
-msgstr "Tạo một bản thực hiện không phụ thuộc vào vị trí"
+msgstr "Äừng tạo má»™t bản thá»±c hiện không phụ thuá»™c vào vị trí."
#: common.opt:2955
-#, fuzzy
-#| msgid "Create a position independent executable"
msgid "Create a position independent executable."
-msgstr "Tạo một bản thực hiện không phụ thuộc vào vị trí"
+msgstr "Tạo một bản thực hiện không phụ thuộc vào vị trí."
#: common.opt:2962
msgid "Use caller save register across calls if possible."
@@ -18017,8 +14921,7 @@ msgstr "cần kiểu boolean"
#: go/gofrontend/expressions.cc:4015 c/c-parser.c:12533 c/c-parser.c:12540
#: cp/parser.c:31595 cp/parser.c:31602
-#, fuzzy, gcc-internal-format
-#| msgid "Expected integer"
+#, gcc-internal-format
msgid "expected integer"
msgstr "Mong đợi một số nguyên"
@@ -18126,7 +15029,7 @@ msgstr ""
#: go/gofrontend/expressions.cc:7942
msgid "argument must be a field reference"
-msgstr "đối số pahỉ là má»™t tham chiếu trưá»ng"
+msgstr "đối số phải là má»™t tham chiếu trưá»ng"
#: go/gofrontend/expressions.cc:7972
msgid "left argument must be a slice"
@@ -18198,9 +15101,8 @@ msgid "slice end must be integer"
msgstr ""
#: go/gofrontend/expressions.cc:9937
-#, fuzzy
msgid "slice capacity must be integer"
-msgstr "%s tại %L phải là số nguyên"
+msgstr ""
#: go/gofrontend/expressions.cc:9987 go/gofrontend/expressions.cc:10516
msgid "inverted slice range"
@@ -18252,9 +15154,8 @@ msgid "cannot fallthrough final case in switch"
msgstr ""
#: go/gofrontend/statements.cc:592
-#, fuzzy
msgid "invalid left hand side of assignment"
-msgstr "gán mảng không hợp lệ"
+msgstr ""
#: go/gofrontend/statements.cc:603 go/gofrontend/statements.cc:1021
msgid "use of untyped nil"
@@ -18323,7 +15224,7 @@ msgstr ""
#: go/gofrontend/types.cc:535
#, c-format
msgid "invalid operation (%s)"
-msgstr "toán hạng không hợp lệ (%s)"
+msgstr "toán tử không hợp lệ (%s)"
#: go/gofrontend/types.cc:558
msgid "invalid comparison of non-comparable type"
@@ -18361,7 +15262,7 @@ msgstr "khác số lượng đối số"
#: go/gofrontend/types.cc:3541
msgid "different parameter types"
-msgstr ""
+msgstr "khác kiểu tham số"
#: go/gofrontend/types.cc:3556
msgid "different varargs"
@@ -18369,9 +15270,8 @@ msgstr "varargs khác biệt"
#: go/gofrontend/types.cc:3565 go/gofrontend/types.cc:3578
#: go/gofrontend/types.cc:3593
-#, fuzzy
msgid "different number of results"
-msgstr "khác số lượng đối số"
+msgstr ""
#: go/gofrontend/types.cc:3586
msgid "different result types"
@@ -18541,16 +15441,14 @@ msgid "too few arguments to function %<va_start%>"
msgstr ""
#: builtins.c:4276
-#, fuzzy, gcc-internal-format
-#| msgid "invalid arguments"
+#, gcc-internal-format
msgid "invalid argument to %qD"
-msgstr "các đối số không hợp lệ"
+msgstr "đối số không hợp lệ cho %qD"
#: builtins.c:4289
-#, fuzzy, gcc-internal-format
-#| msgid "unsupported simdlen %d"
+#, gcc-internal-format
msgid "unsupported argument to %qD"
-msgstr "simdlen không được hỗ trợ %d"
+msgstr "đối số không được hỗ trợ cho %D"
#. Warn since no effort is made to ensure that any frame
#. beyond the current one exists or can be safely reached.
@@ -19513,9 +16411,9 @@ msgid "missing callgraph edge for call stmt:"
msgstr ""
#: cgraph.c:3193
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "reference to dead statement"
-msgstr "cần biểu thức"
+msgstr ""
#: cgraph.c:3206
#, gcc-internal-format, gfc-internal-format
@@ -19574,8 +16472,7 @@ msgid "%q+F declared %<static%> but never defined"
msgstr ""
#: cgraphunit.c:978
-#, fuzzy, gcc-internal-format
-#| msgid "%q+D defined but not used"
+#, gcc-internal-format
msgid "%qD defined but not used"
msgstr "%q+D được định nghĩa nhưng không dùng"
@@ -19595,7 +16492,7 @@ msgid "%q+D alias in between function and variable is not supported"
msgstr ""
#: cgraphunit.c:1306
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%q+D aliased declaration"
msgstr "%q+D được dùng trước khai báo"
@@ -19793,10 +16690,9 @@ msgid "conversion to incomplete type"
msgstr ""
#: convert.c:944
-#, fuzzy, gcc-internal-format
-#| msgid "cannot convert type %qT to type %qT"
+#, gcc-internal-format
msgid "can%'t convert a vector of type %qT to type %qT which has different size"
-msgstr "không thể chuyển đổi kiểu %qT thành %qT"
+msgstr ""
#: convert.c:952
#, gcc-internal-format
@@ -19869,14 +16765,14 @@ msgid "the control flow of function %qE does not match its profile data (counter
msgstr ""
#: coverage.c:402
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "execution counts estimated\n"
-msgstr "số lượng thừa hành là âm"
+msgstr ""
#: coverage.c:403
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "execution counts assumed to be zero\n"
-msgstr "số lượng thừa hành là âm"
+msgstr ""
#: coverage.c:415
#, gcc-internal-format
@@ -19939,9 +16835,9 @@ msgid "in %s, at %s:%d"
msgstr "trong %s, tại %s:%d"
#: dominance.c:1025
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "dominator of %d status unknown"
-msgstr "không hiểu kiểu của %qE"
+msgstr ""
#: dominance.c:1032
#, gcc-internal-format, gfc-internal-format
@@ -20079,10 +16975,9 @@ msgid "reverse floating-point scalar storage order"
msgstr ""
#: expmed.c:398
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Generate code for the user mode"
+#, gcc-internal-format, gfc-internal-format
msgid "reverse storage order for %smode"
-msgstr "Tạo ra mã cho chế độ ngưá»i dùng"
+msgstr ""
#: expmed.c:641
#, gcc-internal-format
@@ -20414,10 +17309,9 @@ msgid "spec failure: more than one arg to SYSROOT_HEADERS_SUFFIX_SPEC"
msgstr "spec thất bại: có nhiá»u hÆ¡n má»™t đối số chuyển cho SYSROOT_HEADERS_SUFFIX_SPEC"
#: gcc.c:7684
-#, fuzzy, gcc-internal-format
-#| msgid "unrecognized command line option %<-fdump-%s%>"
+#, gcc-internal-format
msgid "unrecognized command line option %<-%s%>; did you mean %<-%s%>?"
-msgstr "không thừa nhận tùy chá»n dòng lệnh %<-fdump-%s%>"
+msgstr ""
#: gcc.c:7688
#, gcc-internal-format
@@ -20487,7 +17381,7 @@ msgstr "sự loại từ đa thư viện %qs không hợp lệ"
#: gcc.c:8723
#, gcc-internal-format
msgid "multilib select %qs %qs is invalid"
-msgstr ""
+msgstr "sá»± lá»±a chá»n Ä‘a thư viện %qs %qs không hợp lệ"
#: gcc.c:8885
#, gcc-internal-format
@@ -20605,10 +17499,9 @@ msgid "DEF_INTERNAL_INT_FN (%s) has no associated built-in functions"
msgstr ""
#: gentarget-def.c:126
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "invalid operand for '%%%c'"
+#, gcc-internal-format, gfc-internal-format
msgid "invalid prototype for '%s'"
-msgstr "toán hạng không hợp lệ đối vá»›i “%%%câ€"
+msgstr ""
#: gentarget-def.c:131
#, gcc-internal-format, gfc-internal-format
@@ -20636,10 +17529,9 @@ msgid "'%s' must have no more than %d operands (excluding match_dups)"
msgstr ""
#: gentarget-def.c:276
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "duplicate initialization of %qD"
+#, gcc-internal-format, gfc-internal-format
msgid "duplicate definition of '%s'"
-msgstr "khởi tạo lặp lại cho %qD"
+msgstr ""
#: ggc-common.c:393 ggc-common.c:401 ggc-common.c:470 ggc-common.c:488
#: ggc-page.c:2457 ggc-page.c:2488 ggc-page.c:2495
@@ -20688,16 +17580,14 @@ msgid "declared here"
msgstr "được khai báo ở đây"
#: gimple-ssa-isolate-paths.c:332
-#, fuzzy, gcc-internal-format
-#| msgid "target is not pointer or reference"
+#, gcc-internal-format
msgid "potential null pointer dereference"
msgstr "đích không phải là một hàm trỠhoặc một tham chiếu"
#: gimple-ssa-isolate-paths.c:400
-#, fuzzy, gcc-internal-format
-#| msgid "null pointer"
+#, gcc-internal-format
msgid "null pointer dereference"
-msgstr "con trá» rá»—ng"
+msgstr ""
#: gimple-streamer-in.c:210
#, gcc-internal-format, gfc-internal-format
@@ -20735,9 +17625,9 @@ msgid "threadprivate variable %qE used in target region"
msgstr ""
#: gimplify.c:5873
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "enclosing target region"
-msgstr "tác vụ bao quanh"
+msgstr ""
#: gimplify.c:5885
#, gcc-internal-format
@@ -20747,34 +17637,32 @@ msgstr ""
#: gimplify.c:5887
#, gcc-internal-format
msgid "enclosing task"
-msgstr "tác vụ bao quanh"
+msgstr ""
#: gimplify.c:5949
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qE not specified in enclosing %s"
-msgstr "%q#D chưa được khai báo trong lớp"
+msgstr ""
#: gimplify.c:5951
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "enclosing task"
+#, gcc-internal-format, gfc-internal-format
msgid "enclosing %s"
-msgstr "tác vụ bao quanh"
+msgstr ""
#: gimplify.c:6061
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qE not specified in enclosing OpenACC %qs construct"
-msgstr "%q#D chưa được khai báo trong lớp"
+msgstr ""
#: gimplify.c:6063
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "enclosing OpenACC %qs construct"
-msgstr "tác vụ bao quanh"
+msgstr ""
#: gimplify.c:6174 gimplify.c:6764
-#, fuzzy, gcc-internal-format
-#| msgid "variable %q+D declared %<inline%>"
+#, gcc-internal-format
msgid "variable %qE declared in enclosing %<host_data%> region"
-msgstr "biến %q+D được khai báo %<inline%>"
+msgstr ""
#: gimplify.c:6192
#, gcc-internal-format
@@ -20802,9 +17690,9 @@ msgid "iteration variable %qE should not be reduction"
msgstr ""
#: gimplify.c:6319
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "iteration variable %qE should not be linear"
-msgstr "chưa định nghÄ©a biến môi trưá»ng%qs"
+msgstr ""
#: gimplify.c:6322
#, gcc-internal-format
@@ -20812,9 +17700,9 @@ msgid "iteration variable %qE should not be lastprivate"
msgstr ""
#: gimplify.c:6325
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "iteration variable %qE should not be private"
-msgstr "chưa định nghÄ©a biến môi trưá»ng%qs"
+msgstr ""
#: gimplify.c:6638
#, gcc-internal-format
@@ -20842,10 +17730,9 @@ msgid "%s variable %qE is private in outer context"
msgstr ""
#: gimplify.c:7347
-#, fuzzy, gcc-internal-format
-#| msgid "expected %<for%> after %qs"
+#, gcc-internal-format
msgid "expected %qs %<if%> clause modifier rather than %qs"
-msgstr "cần %<for%> sau %qs"
+msgstr ""
#: gimplify.c:7847
#, gcc-internal-format
@@ -20863,10 +17750,9 @@ msgid "variable %qE is not an iteration of outermost loop %d, expected %qE"
msgstr ""
#: gimplify.c:9837
-#, fuzzy, gcc-internal-format
-#| msgid "number of results does not match number of values"
+#, gcc-internal-format
msgid "number of variables in %<depend(sink)%> clause does not match number of iteration variables"
-msgstr "số của kết quả không khớp với số của giá trị"
+msgstr ""
#: gimplify.c:9850
#, gcc-internal-format
@@ -20879,9 +17765,9 @@ msgid "%<depend(source)%> clause specified together with %<depend(sink:)%> claus
msgstr ""
#: gimplify.c:10773
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "expected %<_Cilk_spawn%> before %<_Cilk_sync%>"
-msgstr "cần %<}%> trước %<else%>"
+msgstr ""
#: gimplify.c:11069
#, gcc-internal-format
@@ -20940,10 +17826,9 @@ msgid "HSA SSA name defined by instruction that is supposed to be using it"
msgstr ""
#: hsa-gen.c:1195 hsa-gen.c:1208
-#, fuzzy, gcc-internal-format
-#| msgid "verification failed: %s"
+#, gcc-internal-format
msgid "HSA SSA verification failed"
-msgstr "thẩm tra gặp lỗi: %s"
+msgstr ""
#: hsa-gen.c:1204
#, gcc-internal-format
@@ -20956,10 +17841,9 @@ msgid "HSA instruction uses a register but is not among recorded register uses"
msgstr ""
#: hsa-gen.c:1468
-#, fuzzy, gcc-internal-format
-#| msgid "verification failed: %s"
+#, gcc-internal-format
msgid "HSA instruction verification failed"
-msgstr "thẩm tra gặp lỗi: %s"
+msgstr ""
#: hsa.c:239
#, gcc-internal-format
@@ -20987,9 +17871,9 @@ msgid "token %u has y-location == %u"
msgstr ""
#: ipa-chkp.c:661
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "function cannot be instrumented"
-msgstr "%qs hàm không có đối số"
+msgstr ""
#: ipa-devirt.c:728 ipa-devirt.c:881
#, gcc-internal-format
@@ -21062,9 +17946,9 @@ msgid "the conflicting type defined in another translation unit has virtual tabl
msgstr ""
#: ipa-devirt.c:962
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "type %qT violates the C++ One Definition Rule"
-msgstr "định nghĩa trước ở đây"
+msgstr ""
#: ipa-devirt.c:973 ipa-devirt.c:988 ipa-devirt.c:1238 ipa-devirt.c:1330
#: ipa-devirt.c:1369 ipa-devirt.c:1387
@@ -21093,16 +17977,14 @@ msgid "type %qT defined in anonymous namespace can not match across the translat
msgstr ""
#: ipa-devirt.c:1094
-#, fuzzy, gcc-internal-format
-#| msgid "the incompatible type is defined here"
+#, gcc-internal-format
msgid "the incompatible type defined in another translation unit"
-msgstr "kiểu không tương thích được định nghĩa ở đây"
+msgstr ""
#: ipa-devirt.c:1117
-#, fuzzy, gcc-internal-format
-#| msgid "type %qT should match type %qT"
+#, gcc-internal-format
msgid "type name %<%s%> should match type name %<%s%>"
-msgstr "kiểu %qT nên khớp kiểu %qT"
+msgstr ""
#: ipa-devirt.c:1121 ipa-devirt.c:1213
#, gcc-internal-format
@@ -21110,16 +17992,14 @@ msgid "the incompatible type is defined here"
msgstr "kiểu không tương thích được định nghĩa ở đây"
#: ipa-devirt.c:1149
-#, fuzzy, gcc-internal-format
-#| msgid "Array reference out of bounds"
+#, gcc-internal-format
msgid "array types have different bounds"
-msgstr "Tham chiếu mảng ở ngoại phạm vi"
+msgstr ""
#: ipa-devirt.c:1164
-#, fuzzy, gcc-internal-format
-#| msgid "<return value> "
+#, gcc-internal-format
msgid "return value type mismatch"
-msgstr "<giá trị trả lại>"
+msgstr ""
#: ipa-devirt.c:1179
#, gcc-internal-format
@@ -21127,10 +18007,9 @@ msgid "implicit this pointer type mismatch"
msgstr ""
#: ipa-devirt.c:1182
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "type mismatch in array reference"
+#, gcc-internal-format, gfc-internal-format
msgid "type mismatch in parameter %i"
-msgstr "kiểu không khớp trong tham chiếu mảng"
+msgstr ""
#: ipa-devirt.c:1193
#, gcc-internal-format
@@ -21138,9 +18017,9 @@ msgid "types have different parameter counts"
msgstr ""
#: ipa-devirt.c:1204
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "type %qT itself violate the C++ One Definition Rule"
-msgstr "định nghĩa trước ở đây"
+msgstr ""
#: ipa-devirt.c:1210
#, gcc-internal-format
@@ -21283,9 +18162,9 @@ msgid "a type with different alignment is defined in another translation unit"
msgstr ""
#: ipa-devirt.c:1783
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "the extra base is defined here"
-msgstr "struct được định nghĩa ở đây"
+msgstr ""
#: ipa-devirt.c:3750
#, gcc-internal-format
@@ -21359,9 +18238,9 @@ msgid "%<asm%> operand has impossible constraints"
msgstr ""
#: lra-assigns.c:1416
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "unable to find a register to spill"
-msgstr "không tìm thấy một thanh ghi làm tràn"
+msgstr ""
#: lra-assigns.c:1625
#, gcc-internal-format, gfc-internal-format
@@ -21416,12 +18295,12 @@ msgstr "không thể tìm thấy LTO cgraph trong %s"
#: lto-cgraph.c:1856
#, gcc-internal-format, gfc-internal-format
msgid "cannot find LTO section refs in %s"
-msgstr ""
+msgstr "không thể tìm thấy tham chiếu phần LTO trong %s"
#: lto-cgraph.c:1933
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "invalid offload table in %s"
-msgstr "toán hạng không hợp lệ (%s)"
+msgstr ""
#: lto-compress.c:193 lto-compress.c:201 lto-compress.c:222 lto-compress.c:285
#: lto-compress.c:293 lto-compress.c:314
@@ -21455,26 +18334,24 @@ msgid "Cgraph edge statement index not found"
msgstr ""
#: lto-streamer-in.c:929
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Reference statement index out of range"
-msgstr "hằng nằm ngoài phạm vi cho phép"
+msgstr ""
#: lto-streamer-in.c:932
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Reference statement index not found"
-msgstr "Cảnh báo nếu tìm câu lệnh trống bị phản đối"
+msgstr ""
#: lto-streamer-in.c:1512
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "cannot read LTO decls from %s"
+#, gcc-internal-format, gfc-internal-format
msgid "cannot read LTO mode table from %s"
-msgstr "không thể Ä‘á»c “LTO decls†từ %s"
+msgstr "không thể Ä‘á»c chế độ LTO từ %s"
#: lto-streamer-in.c:1610
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "unsupported simdlen %d"
+#, gcc-internal-format, gfc-internal-format
msgid "unsupported mode %s\n"
-msgstr "simdlen không được hỗ trợ %d"
+msgstr "không hỗ trợ chế độ %s\n"
#: lto-streamer-out.c:419 lto-streamer-out.c:674
#, gcc-internal-format
@@ -21548,21 +18425,19 @@ msgid "fopen: %s: %m"
msgstr "fopen: %s: %m"
#: multiple_target.c:67
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "the call requires ifunc, which is not supported by this target"
msgstr "__builtin_thread_pointer không được hỗ trợ trên đích này"
#: multiple_target.c:76
-#, fuzzy, gcc-internal-format
-#| msgid "version attribute is not a string"
+#, gcc-internal-format
msgid "default target_clones attribute was not set"
-msgstr "thuộc tính phiên bản không phải là một chuỗi"
+msgstr ""
#: multiple_target.c:256
-#, fuzzy, gcc-internal-format
-#| msgid "%qs attribute ignored"
+#, gcc-internal-format
msgid "single target_clones attribute is ignored"
-msgstr "thuộc tính %qs bị bỠqua"
+msgstr ""
#: multiple_target.c:268
#, gcc-internal-format
@@ -21570,10 +18445,9 @@ msgid "default target was not set"
msgstr ""
#: multiple_target.c:300
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "attribute(target(\"%s\")) is unknown"
+#, gcc-internal-format, gfc-internal-format
msgid "attribute(target_clones(\"%s\")) is not valid for current target"
-msgstr "thuộc tính(đích(\"%s\")) là không hiểu"
+msgstr ""
#: multiple_target.c:331
#, gcc-internal-format
@@ -21771,14 +18645,14 @@ msgid "first offset must be in opposite direction of loop iterations"
msgstr ""
#: omp-low.c:17957
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "invalid exit from %s structured block"
-msgstr " thoát khá»i khối được cấu trúc OpenMP"
+msgstr ""
#: omp-low.c:17959 omp-low.c:17964
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "invalid entry to %s structured block"
-msgstr " vào khối được cấu trúc OpenMP"
+msgstr ""
#. Otherwise, be vague and lazy, but efficient.
#: omp-low.c:17968
@@ -21787,9 +18661,9 @@ msgid "invalid branch to/from %s structured block"
msgstr ""
#: omp-low.c:18501
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ignoring large linear step"
-msgstr "đang bỠqua thư mục trùng \"%s\"\n"
+msgstr ""
#: omp-low.c:18508
#, gcc-internal-format
@@ -21802,8 +18676,7 @@ msgid "%s uses same OpenACC parallelism as containing loop"
msgstr ""
#: omp-low.c:20780 omp-low.c:20809
-#, fuzzy, gcc-internal-format
-#| msgid "containing loop"
+#, gcc-internal-format
msgid "containing loop here"
msgstr "chứa vòng lặp"
@@ -21813,8 +18686,7 @@ msgid "%s uses OpenACC parallelism disallowed by containing routine"
msgstr ""
#: omp-low.c:20789
-#, fuzzy, gcc-internal-format
-#| msgid "%qD declared here"
+#, gcc-internal-format
msgid "routine %qD declared here"
msgstr "%qD được khai báo ở đây"
@@ -21895,9 +18767,9 @@ msgid "-fasan-shadow-offset should only be used with -fsanitize=kernel-address"
msgstr "-fasan-shadow-offset chỉ có thể dùng với -fsanitize=kernel-address"
#: opts-global.c:433
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "unrecognized shadow offset %qs"
-msgstr "không nhận ra địa chỉ"
+msgstr ""
#: opts.c:89
#, gcc-internal-format
@@ -21912,7 +18784,7 @@ msgstr "không hiểu đối số %qs cho %<-femit-struct-debug-detailed%>"
#: opts.c:132
#, gcc-internal-format
msgid "%<-femit-struct-debug-detailed=dir:...%> must allow at least as much as %<-femit-struct-debug-detailed=ind:...%>"
-msgstr "%<-femit-struct-debug-detailed=dir:...%> phải cho phép ít nhất là %<-femit-struct-debug-detailed=ind:...%>"
+msgstr "%<-femit-struct-debug-detailed=dir:…%> phải cho phép ít nhất là %<-femit-struct-debug-detailed=ind:…%>"
#: opts.c:580
#, gcc-internal-format
@@ -21955,9 +18827,9 @@ msgid "-freorder-blocks-and-partition does not work on this architecture"
msgstr ""
#: opts.c:893
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "-fno-fat-lto-objects are supported only with linker plugin"
-msgstr "-mno-dpfp-lrsr chỉ được hỗ trợ với -mdpfp"
+msgstr ""
#: opts.c:906
#, gcc-internal-format
@@ -21975,14 +18847,14 @@ msgid "-fsanitize=address and -fsanitize=kernel-address are incompatible with -f
msgstr ""
#: opts.c:953
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "-fsanitize-recover=thread is not supported"
-msgstr "chia sẻ (dùng chung) không được hỗ trợ"
+msgstr ""
#: opts.c:956
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "-fsanitize-recover=leak is not supported"
-msgstr "-fpic không được hỗ trợ"
+msgstr ""
#: opts.c:1370
#, gcc-internal-format
@@ -21995,9 +18867,9 @@ msgid "-fsanitize=all option is not valid"
msgstr ""
#: opts.c:1524
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "unrecognized argument to -fsanitize%s= option: %q.*s"
-msgstr "không nhận ra đối số cho tùy chá»n --help=: %q.*s"
+msgstr ""
#: opts.c:1695
#, gcc-internal-format
@@ -22010,10 +18882,9 @@ msgid "unrecognized argument to --help= option: %q.*s"
msgstr "không nhận ra đối số cho tùy chá»n --help=: %q.*s"
#: opts.c:1936
-#, fuzzy, gcc-internal-format
-#| msgid "LTO support has not been enabled in this configuration"
+#, gcc-internal-format
msgid "HSA has not been enabled during configuration"
-msgstr "Phần hỗ trợ LTO không được bật trong cấu hình này"
+msgstr ""
#: opts.c:1948
#, gcc-internal-format
@@ -22026,9 +18897,9 @@ msgid "structure alignment must be a small power of two, not %d"
msgstr ""
#: opts.c:2070
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "unknown stack check parameter %qs"
-msgstr "không hiểu chế độ máy %qE"
+msgstr ""
#: opts.c:2102
#, gcc-internal-format
@@ -22046,10 +18917,9 @@ msgid "%s: --param arguments should be of the form NAME=VALUE"
msgstr ""
#: opts.c:2221
-#, fuzzy, gcc-internal-format
-#| msgid "invalid --param value %qs"
+#, gcc-internal-format
msgid "invalid --param name %qs"
-msgstr "sai giá trị cho tùy chá»n --param %qs"
+msgstr "sai tên cho tùy chá»n --param %qs"
#: opts.c:2228
#, gcc-internal-format
@@ -22062,14 +18932,14 @@ msgid "target system does not support debug output"
msgstr ""
#: opts.c:2353
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "debug format %qs conflicts with prior selection"
-msgstr "%q#D xung đột với khai báo trước"
+msgstr ""
#: opts.c:2371
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "unrecognised debug output level %qs"
-msgstr "không nhận ra tên thanh ghi %qs"
+msgstr ""
#: opts.c:2373
#, gcc-internal-format
@@ -22118,9 +18988,9 @@ msgid "maximum value of parameter %qs is %u"
msgstr "giá trị lớn nhất của đối số %qs là %u"
#: passes.c:81
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "pass %s does not support cloning"
-msgstr "%s không hỗ trợ split_edge"
+msgstr ""
#: passes.c:87
#, gcc-internal-format, gfc-internal-format
@@ -22468,9 +19338,9 @@ msgid "RTL check: attempt to treat non-block symbol as a block symbol in %s, at
msgstr ""
#: rtl.c:856
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "RTL check: access of hwi elt %d of vector with last elt %d in %s, at %s:%d"
-msgstr "kiểm tra RTL: cần elt %d kiểu “%câ€, nhận “%c†(rtx %s) trong %s, tại %s:%d"
+msgstr ""
#: rtl.c:866
#, gcc-internal-format, gfc-internal-format
@@ -22648,9 +19518,9 @@ msgid "double linked list of assembler names corrupted"
msgstr ""
#: symtab.c:1029
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "node has body_removed but is definition"
-msgstr "định nghĩa hàm theo cách cũ"
+msgstr ""
#: symtab.c:1034
#, gcc-internal-format
@@ -22663,9 +19533,9 @@ msgid "node is alias but not implicit alias"
msgstr ""
#: symtab.c:1044
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "node is alias but not definition"
-msgstr "định nghĩa hàm theo cách cũ"
+msgstr ""
#: symtab.c:1049
#, gcc-internal-format
@@ -22673,9 +19543,9 @@ msgid "node is weakref but not an transparent_alias"
msgstr ""
#: symtab.c:1054
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "node is transparent_alias but not an alias"
-msgstr "định nghĩa hàm theo cách cũ"
+msgstr ""
#: symtab.c:1063
#, gcc-internal-format
@@ -22813,7 +19683,7 @@ msgid "ld returned %d exit status"
msgstr "ld trả vỠtrạng thái thoát %d"
#: toplev.c:897
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "can%'t open %qs for writing: %m"
msgstr "can%'t mở %s để ghi: %m"
@@ -22863,10 +19733,9 @@ msgid "-fcheck-pointer-bounds is not supported for this target"
msgstr "-fcheck-pointer-bounds không hỗ trợ đích này"
#: toplev.c:1275
-#, fuzzy, gcc-internal-format
-#| msgid "-fcheck-pointer-bounds is not supported for this target"
+#, gcc-internal-format
msgid "-fcheck-pointer-bounds is not supported with Address Sanitizer"
-msgstr "-fcheck-pointer-bounds không hỗ trợ đích này"
+msgstr "-fcheck-pointer-bounds không hỗ trợ với Address Sanitizer"
#: toplev.c:1290
#, gcc-internal-format
@@ -22894,9 +19763,9 @@ msgid "could not close zeroed insn dump file %qs: %m"
msgstr ""
#: toplev.c:1418
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "target system does not support the %qs debug format"
-msgstr "%s không hỗ trợ %<%%%s%c%> định dạng %s"
+msgstr ""
#: toplev.c:1431
#, gcc-internal-format
@@ -22949,9 +19818,9 @@ msgid "-fstack-protector not supported for this target"
msgstr "-fstack-protector không hỗ trợ đích này"
#: toplev.c:1571
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "-fsanitize=address and -fsanitize=kernel-address are not supported for this target"
-msgstr "-fsanitize=address không được hỗ trợ cho đích này"
+msgstr "-fsanitize=address và -fsanitize=kernel-address không được hỗ trợ cho đích này"
#: toplev.c:1580
#, gcc-internal-format
@@ -22969,10 +19838,9 @@ msgid "error closing %s: %m"
msgstr "lỗi đóng %s: %m"
#: trans-mem.c:621
-#, fuzzy, gcc-internal-format
-#| msgid "invalid use of void expression"
+#, gcc-internal-format
msgid "invalid use of volatile lvalue inside transaction"
-msgstr "sử dụng sai biểu thức void"
+msgstr ""
#: trans-mem.c:624
#, gcc-internal-format
@@ -23465,14 +20333,14 @@ msgid "invalid mask type in vector permute expression"
msgstr ""
#: tree-cfg.c:4074
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "type mismatch in sad expression"
-msgstr "không khớp kiểu trong biểu thức địa chỉ"
+msgstr ""
#: tree-cfg.c:4086
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "vector types expected in sad expression"
-msgstr "cần id-expression"
+msgstr ""
#: tree-cfg.c:4122
#, gcc-internal-format
@@ -23785,10 +20653,9 @@ msgid "memory access check always fail"
msgstr ""
#: tree-chkp.c:1982
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "-fcheck-pointer-bounds is not supported for this target"
+#, gcc-internal-format, gfc-internal-format
msgid "-fcheck-pointer-bounds requires '%s' name for internal usage"
-msgstr "-fcheck-pointer-bounds không hỗ trợ đích này"
+msgstr "-fcheck-pointer-bounds cần tên “%s†cho cách dùng nội bộ"
#: tree-chkp.c:2760
#, gcc-internal-format, gfc-internal-format
@@ -23946,10 +20813,9 @@ msgid "called from here"
msgstr "được gá»i từ đây"
#: tree-inline.c:4452 tree-inline.c:4472
-#, fuzzy, gcc-internal-format
-#| msgid "from this location"
+#, gcc-internal-format
msgid "called from this function"
-msgstr "từ vị trí này"
+msgstr "được gá»i từ hàm này"
#: tree-inline.c:4465
#, gcc-internal-format
@@ -23970,10 +20836,10 @@ msgstr ""
#: tree-ssa-coalesce.c:936 tree-ssa-live.c:1290
#, gcc-internal-format
msgid "SSA corruption"
-msgstr "ngắt SSA"
+msgstr "SSA há»ng"
#: tree-profile.c:460
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "unimplemented functionality"
msgstr "cần hàm"
@@ -23983,10 +20849,9 @@ msgid "iteration %s invokes undefined behavior"
msgstr ""
#: tree-ssa-loop-niter.c:2922
-#, fuzzy, gcc-internal-format
-#| msgid "within this context"
+#, gcc-internal-format
msgid "within this loop"
-msgstr "trong ngữ cảnh này"
+msgstr "trong vòng lặp này"
#: tree-ssa-operands.c:974
#, gcc-internal-format
@@ -24382,9 +21247,9 @@ msgid "tree check: expected tree that contains %qs structure, have %qs in %s, at
msgstr ""
#: tree.c:9821
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, 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 check: cần không gì của %s, có %s trong %s, tại %s:%d"
+msgstr ""
#: tree.c:9833
#, gcc-internal-format, gfc-internal-format
@@ -24509,10 +21374,9 @@ msgid "type variant has different TYPE_FIELDS"
msgstr ""
#: tree.c:13191
-#, fuzzy, gcc-internal-format
-#| msgid "%s:stamp mismatch with notes file\n"
+#, gcc-internal-format
msgid "first mismatch is field"
-msgstr "%s: dấu vết thá»i gian không khá»›p vá»›i tập tin ghi chú\n"
+msgstr ""
#: tree.c:13193
#, gcc-internal-format
@@ -24535,16 +21399,14 @@ msgid "type's TREE_TYPE"
msgstr ""
#: tree.c:13221
-#, fuzzy, gcc-internal-format
-#| msgid "-mnop-mcount is not compatible with this target"
+#, gcc-internal-format
msgid "type is not compatible with its vairant"
-msgstr "-mnop-mcount không tương thích với đích này"
+msgstr ""
#: tree.c:13520
-#, fuzzy, gcc-internal-format
-#| msgid "environment variable %qs not defined"
+#, gcc-internal-format
msgid "Main variant is not defined"
-msgstr "chưa định nghÄ©a biến môi trưá»ng%qs"
+msgstr ""
#: tree.c:13525
#, gcc-internal-format
@@ -24652,10 +21514,9 @@ msgid "Array TYPE_DOMAIN is not integer type"
msgstr ""
#: tree.c:13759
-#, fuzzy, gcc-internal-format
-#| msgid "return type is an incomplete type"
+#, gcc-internal-format
msgid "TYPE_FIELDS defined in incomplete type"
-msgstr "kiểu trả vỠlà một kiểu không hoàn toàn"
+msgstr ""
#: tree.c:13779
#, gcc-internal-format
@@ -24713,10 +21574,9 @@ msgid "TYPE_METHOD_BASETYPE is not main variant"
msgstr ""
#: tree.c:13888
-#, fuzzy, gcc-internal-format
-#| msgid "verify_gimple failed"
+#, gcc-internal-format
msgid "verify_type failed"
-msgstr "verify_gimple gặp lỗi"
+msgstr "verify_type gặp lỗi"
#: value-prof.c:528
#, gcc-internal-format
@@ -24754,9 +21614,9 @@ msgid "%+D causes a section type conflict with %D"
msgstr ""
#: varasm.c:326
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "section type conflict with %D"
-msgstr "xung đột với %qD"
+msgstr "kiểu phần xung đột với %D"
#: varasm.c:331
#, gcc-internal-format
@@ -24764,9 +21624,9 @@ msgid "%+D causes a section type conflict"
msgstr "%+D là nguyên nhân gây xung đột kiểu phần"
#: varasm.c:333
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "section type conflict"
-msgstr "%+D là nguyên nhân gây xung đột kiểu phần"
+msgstr ""
#: varasm.c:1007
#, gcc-internal-format
@@ -24849,9 +21709,9 @@ msgid "invalid initial value for member %qE"
msgstr ""
#: varasm.c:5319
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%+D declared weak after being used"
-msgstr "%+D đã khai báo weakref sau khi được dùng"
+msgstr "%+D đã khai báo weak sau khi được dùng"
#: varasm.c:5402
#, gcc-internal-format
@@ -24874,9 +21734,9 @@ msgid "weakref is not supported in this configuration"
msgstr "weakref không được hỗ trợ trong cấu hình này"
#: varasm.c:5661
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ifunc is not supported on this target"
-msgstr "%<__int%d%> không được hỗ trợ cho đích này"
+msgstr ""
#: varasm.c:5719
#, gcc-internal-format
@@ -24920,20 +21780,20 @@ msgid "bytecode stream: tag %s is not in the expected range [%s, %s]"
msgstr ""
#: c-family/array-notation-common.c:71
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "__sec_implicit_index parameter must be an integer constant expression"
-msgstr "bộ khởi tạo chứa một chỉ mục mảng không phải là một biểu tượng hằng số nguyên"
+msgstr "tham số __sec_implicit_index phải là một biểu thức hằng số nguyên"
#: c-family/array-notation-common.c:107
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "length mismatch in expression"
-msgstr "kiểu không khớp trong biểu thức dịch"
+msgstr "chiá»u dài không khá»›p trong biểu thức"
#: c-family/array-notation-common.c:282 c-family/array-notation-common.c:310
#: c/c-array-notation.c:731 cp/cp-array-notation.c:611
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "rank mismatch between %qE and %qE"
-msgstr " kiểu không khớp %qT và %qT"
+msgstr ""
#. Here the original expression is printed as a "heads-up"
#. to the programmer. This is because since there is no
@@ -24942,9 +21802,9 @@ msgstr " kiểu không khớp %qT và %qT"
#. not visible for the programmer. Thus, the correct fix
#. may lie in the original expression.
#: c-family/array-notation-common.c:291
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "rank mismatch in expression %qE"
-msgstr "kiểu không khớp trong biểu thức dịch"
+msgstr ""
#: c-family/array-notation-common.c:667
#, gcc-internal-format
@@ -24962,9 +21822,9 @@ msgid "variable appears in more than one clause"
msgstr ""
#: c-family/c-cilkplus.c:83
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "other clause defined here"
-msgstr "struct được định nghĩa ở đây"
+msgstr ""
#: c-family/c-common.c:1016
#, gcc-internal-format
@@ -25002,9 +21862,9 @@ msgid "vector overflow in expression"
msgstr "tràn véc-tơ trong biểu thức"
#: c-family/c-common.c:1180
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "complex integer overflow in expression"
-msgstr "tràn số nguyên trong biểu thức"
+msgstr "tràn số nguyên phức trong biểu thức"
#: c-family/c-common.c:1183
#, gcc-internal-format
@@ -25152,9 +22012,9 @@ msgid "argument to %<sizeof%> in %qD call is the same pointer type %qT as the se
msgstr ""
#: c-family/c-common.c:1905 c-family/c-common.c:1912
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<_Atomic%>-qualified parameter type %qT of %q+D"
-msgstr "kiểu đối số không hợp lệ %qT"
+msgstr ""
#: c-family/c-common.c:1922
#, gcc-internal-format
@@ -25177,9 +22037,9 @@ msgid "%q+D takes only zero or two arguments"
msgstr "%q+D chỉ nhận không hoặc hai đối số"
#: c-family/c-common.c:1955
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%q+D declared as variadic function"
-msgstr "trưá»ng %qE được khai báo như là má»™t hàm"
+msgstr ""
#: c-family/c-common.c:2023
#, gcc-internal-format
@@ -25467,15 +22327,15 @@ msgid "%qE attribute ignored for field of type %qT"
msgstr ""
#: c-family/c-common.c:6672 c-family/c-common.c:6700 c-family/c-common.c:6796
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qE attribute ignored due to conflict with attribute %qs"
-msgstr "Thuộc tính %qE bị lỠđi với các kiểu"
+msgstr ""
#: c-family/c-common.c:6860 c-family/c-common.c:6866 c-family/c-common.c:9417
#: c-family/c-common.c:9439 c-family/c-common.c:9445
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qE attribute ignored due to conflict with %qs attribute"
-msgstr "thuộc tính %<readonly%> xung đột với %<setter%>"
+msgstr ""
#: c-family/c-common.c:6922 lto/lto-lang.c:248
#, gcc-internal-format
@@ -25488,9 +22348,9 @@ msgid "%qE attribute have effect only on public objects"
msgstr ""
#: c-family/c-common.c:7103
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qE attribute only affects top level objects"
-msgstr "Thuộc tính %qE chỉ được áp dụng cho các biến"
+msgstr "Thuộc tính %qE chỉ được áp dụng cho các đối tượng mức"
#: c-family/c-common.c:7157
#, gcc-internal-format
@@ -25588,10 +22448,9 @@ msgid "section attribute not allowed for %q+D"
msgstr ""
#: c-family/c-common.c:7619
-#, fuzzy, gcc-internal-format
-#| msgid "version attribute is not a string"
+#, gcc-internal-format
msgid "section attribute argument not a string constant"
-msgstr "thuộc tính phiên bản không phải là một chuỗi"
+msgstr "đối số thuộc tính phần không phải là một hằng chuỗi"
#: c-family/c-common.c:7628
#, gcc-internal-format
@@ -25655,8 +22514,7 @@ msgid "indirect function %q+D cannot be declared weak"
msgstr ""
#: c-family/c-common.c:7910
-#, fuzzy, gcc-internal-format
-#| msgid "%qE attribute only applies to functions"
+#, gcc-internal-format
msgid "%qE attribute is only applicable on functions"
msgstr "thuộc tính %qE chỉ áp dụng cho các hàm"
@@ -25762,9 +22620,9 @@ msgid "alloc_align parameter outside range"
msgstr ""
#: c-family/c-common.c:8385
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "assume_aligned parameter not integer constant"
-msgstr "chiá»u dài véc-tÆ¡ phải là má»™t hằng nguyên"
+msgstr "tham số assume_aligned không phải là một hằng nguyên"
#: c-family/c-common.c:8496 c/c-parser.c:16374
#, gcc-internal-format
@@ -25797,9 +22655,9 @@ msgid "type was previously declared %qE"
msgstr ""
#: c-family/c-common.c:8765 cp/class.c:4575
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<transaction_safe_dynamic%> may only be specified for a virtual function"
-msgstr "%<friend%> chỉ có thể được dùng trong một lớp"
+msgstr ""
#: c-family/c-common.c:8823
#, gcc-internal-format
@@ -25812,9 +22670,9 @@ msgid "%qD is not compatible with %qD"
msgstr "%qD không tương thích với %qD"
#: c-family/c-common.c:8837
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qE argument is not a function"
-msgstr "dá»n các đối số không phải hàm"
+msgstr ""
#: c-family/c-common.c:8885
#, gcc-internal-format
@@ -25922,14 +22780,14 @@ msgid "bad option %s to pragma attribute"
msgstr ""
#: c-family/c-common.c:9657
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "returns_nonnull attribute on a function not returning a pointer"
-msgstr "%<return%> (trả lại) không có giá trị, trong hàm trả lại non-void (không rỗng)"
+msgstr ""
#: c-family/c-common.c:9672
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qE attribute is only valid on %<struct%> type"
-msgstr "Thuộc tính %qE cần kiểu trả vỠlà void"
+msgstr ""
#: c-family/c-common.c:9797
#, gcc-internal-format
@@ -26104,7 +22962,7 @@ msgstr ""
#: c-family/c-common.c:10409
#, gcc-internal-format
msgid "assignment of function %qD"
-msgstr "phân bổ của hàm %qD"
+msgstr "gán của hàm %qD"
#: c-family/c-common.c:10410
#, gcc-internal-format
@@ -26207,10 +23065,9 @@ msgid "too few arguments to function %qE"
msgstr "quá ít đối số cho hàm %qE"
#: c-family/c-common.c:10710
-#, fuzzy, gcc-internal-format
-#| msgid "incompatible type for argument %d of %qE"
+#, gcc-internal-format
msgid "operand type %qT is incompatible with argument %d of %qE"
-msgstr "kiểu không tương thích cho đối số %d của %qE"
+msgstr ""
#: c-family/c-common.c:10844
#, gcc-internal-format
@@ -26384,8 +23241,7 @@ msgid "comparison of promoted ~unsigned with unsigned"
msgstr ""
#: c-family/c-common.c:11922
-#, fuzzy, gcc-internal-format
-#| msgid "unused parameter %q+D"
+#, gcc-internal-format
msgid "unused parameter %qD"
msgstr "tham số chưa dùng %q+D"
@@ -26423,16 +23279,14 @@ msgstr ""
#. Reject arguments that are built-in functions with
#. no library fallback.
#: c-family/c-common.c:12630
-#, fuzzy, gcc-internal-format
-#| msgid "inline function %q+D used but never defined"
+#, gcc-internal-format
msgid "built-in function %qE must be directly called"
-msgstr "hàm chung dòng %q+D được dùng nhưng chưa bao giỠđược định nghĩa"
+msgstr ""
#: c-family/c-common.c:12666
-#, fuzzy, gcc-internal-format
-#| msgid "duplicate %<const%>"
+#, gcc-internal-format
msgid "duplicated %<if%> condition"
-msgstr "lặp lại %<const%>"
+msgstr ""
#: c-family/c-common.c:12693 c/c-decl.c:5884
#, gcc-internal-format
@@ -26480,9 +23334,9 @@ msgid "format argument should be a %<%s%> reference"
msgstr ""
#: c-family/c-format.c:330
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "unrecognized format specifier"
-msgstr "Bộ ghi rõ định dạng thì yêu cầu một dấu chấm"
+msgstr ""
#: c-family/c-format.c:345
#, gcc-internal-format
@@ -26600,9 +23454,9 @@ msgid "zero width in %s format"
msgstr "độ rộng bằng không trong định dạng %s"
#: c-family/c-format.c:1927
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "empty left precision in %s format"
-msgstr "độ chính xác bị trống rỗng trong định dạng %s"
+msgstr "độ chính xác trái bị trống rỗng trong định dạng %s"
#: c-family/c-format.c:2008
#, gcc-internal-format, gfc-internal-format
@@ -26941,9 +23795,9 @@ msgid "invalid increment expression"
msgstr "biểu thức gia không hợp lệ"
#: c-family/c-omp.c:733
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "initializer expression refers to iteration variable %qD"
-msgstr "bộ khởi tạo được cung cấp cho hàm"
+msgstr ""
#: c-family/c-omp.c:737
#, gcc-internal-format
@@ -26951,10 +23805,9 @@ msgid "condition expression refers to iteration variable %qD"
msgstr ""
#: c-family/c-omp.c:741
-#, fuzzy, gcc-internal-format
-#| msgid "assignment of read-only variable %qD"
+#, gcc-internal-format
msgid "increment expression refers to iteration variable %qD"
-msgstr "gán cho biến chỉ Ä‘á»c %qD"
+msgstr ""
#: c-family/c-omp.c:1300
#, gcc-internal-format
@@ -27207,16 +24060,14 @@ msgid "junk at end of %<#pragma weak%>"
msgstr "có rác ở cuối %<#pragma weak%>"
#: c-family/c-pragma.c:369
-#, fuzzy, gcc-internal-format
-#| msgid "%<#pragma%> is not allowed here"
+#, gcc-internal-format
msgid "%<#pragma weak%> declaration of %q+D not allowed, ignored"
-msgstr "%<#pragma%> là không được phép ở đây"
+msgstr "không cho khai báo %<#pragma weak%> của %q+D, bỠqua"
#: c-family/c-pragma.c:416
-#, fuzzy, gcc-internal-format
-#| msgid "shared is not supported"
+#, gcc-internal-format
msgid "scalar_storage_order is not supported"
-msgstr "chia sẻ (dùng chung) không được hỗ trợ"
+msgstr "scalar_storage_order không được hỗ trợ"
#: c-family/c-pragma.c:420
#, gcc-internal-format
@@ -27289,15 +24140,14 @@ msgid "junk at end of %<#pragma GCC visibility%>"
msgstr "có rác ở cuối %<#pragma GCC visibility%>"
#: c-family/c-pragma.c:748
-#, fuzzy, gcc-internal-format
-#| msgid "missing [error|warning|ignored] after %<#pragma GCC diagnostic%>"
+#, gcc-internal-format
msgid "missing [error|warning|ignored|push|pop] after %<#pragma GCC diagnostic%>"
-msgstr "thiếu [error|warning|ignored] sau %<#pragma GCC diagnostic%>"
+msgstr "thiếu [error|warning|ignored|push|pop] sau %<#pragma GCC diagnostic%>"
#: c-family/c-pragma.c:774
#, gcc-internal-format
msgid "expected [error|warning|ignored|push|pop] after %<#pragma GCC diagnostic%>"
-msgstr ""
+msgstr "cần [error|warning|ignored|push|pop] sau %<#pragma GCC diagnostic%>"
#: c-family/c-pragma.c:783
#, gcc-internal-format
@@ -27310,14 +24160,12 @@ msgid "unknown option after %<#pragma GCC diagnostic%> kind"
msgstr ""
#: c-family/c-pragma.c:800
-#, fuzzy, gcc-internal-format
-#| msgid "%qs is not a valid option to the preprocessor"
+#, gcc-internal-format
msgid "%qs is not an option that controls warnings"
-msgstr "“%qs†không phải là má»™t tùy chá»n hợp lệ cho bá»™ tiá»n xá»­ lý"
+msgstr "“%qs†không phải là má»™t tùy chá»n cái mà Ä‘iá»u khiển cảnh báo"
#: c-family/c-pragma.c:808
-#, fuzzy, gcc-internal-format
-#| msgid "command line option %qs is valid for %s but not for %s"
+#, gcc-internal-format
msgid "option %qs is valid for %s but not for %s"
msgstr "tùy chá»n dòng lệnh %qs thì hợp lệ cho %s nhưng lại không vá»›i %s"
@@ -27477,9 +24325,9 @@ msgid "wrong type argument to %s"
msgstr "sai kiểu đối số cho %s"
#: c-family/cilk.c:93 cp/parser.c:6516
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<_Cilk_spawn%> may only be used inside a function"
-msgstr "%<friend%> chỉ có thể được dùng trong một lớp"
+msgstr "%<_Cilk_spawn%> chỉ có thể được dùng trong một hàm"
#: c-family/cilk.c:106
#, gcc-internal-format
@@ -27537,10 +24385,9 @@ msgid "multiple -mcpu= options specified."
msgstr "chỉ ra nhiá»u tùy chá»n -mcpu=."
#: common/config/arc/arc-common.c:127
-#, fuzzy, gcc-internal-format
-#| msgid "bad value %qs for -mtune switch"
+#, gcc-internal-format
msgid "bad value %qs for -mmpy-option switch"
-msgstr "giá trị sai %qs cho -mtune"
+msgstr "giá trị sai %qs cho tùy-chá»n -mmpy-option"
#: common/config/bfin/bfin-common.c:303 common/config/m68k/m68k-common.c:60
#, gcc-internal-format, gfc-internal-format
@@ -27555,7 +24402,7 @@ msgstr "-mcpu=%s không hợp lệ"
#: common/config/bfin/bfin-common.c:358
#, gcc-internal-format, gfc-internal-format
msgid "-mcpu=%s has invalid silicon revision"
-msgstr "-mcpu=%s không hợp lệ"
+msgstr "-mcpu=%s có số sửa đổi silíc không hợp lệ"
#: common/config/i386/i386-common.c:985
#, gcc-internal-format
@@ -27608,9 +24455,9 @@ msgid "bad value %<%s%> for -mtls-size= switch"
msgstr "giá trị sai %<%s%> cho -mtls-size="
#: common/config/msp430/msp430-common.c:57
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "unrecognised argument of -mcpu: %s"
-msgstr "không nhận ra đối số tá»›i tùy chá»n %qs"
+msgstr "không nhận ra đối số cá»§a tùy chá»n -mcpu: %s"
#: common/config/nds32/nds32-common.c:49
#, gcc-internal-format
@@ -27643,10 +24490,9 @@ msgid "-msimple-fpu option ignored"
msgstr "tùy chá»n -msimple-fpu bị bá» qua"
#: common/config/rs6000/rs6000-common.c:312
-#, fuzzy, gcc-internal-format
-#| msgid "%<-fsplit-stack%> currently only supported on GNU/Linux"
+#, gcc-internal-format
msgid "%<-fsplit-stack%> currently only supported on PowerPC64 GNU/Linux with glibc-2.18 or later"
-msgstr "%<-fsplit-stack%> hiện nay chỉ được hỗ trợ trên GNU/Linux"
+msgstr "%<-fsplit-stack%> hiện nay chỉ được hỗ trợ trên GNU/Linux PowerPC64 với glibc-2.18 hay mới hơn"
#: common/config/rx/rx-common.c:61
#, gcc-internal-format
@@ -27687,7 +24533,7 @@ msgstr "“#pragma options†sai dạng, bị bỠqua"
#: config/darwin-c.c:111
#, gcc-internal-format
msgid "junk at end of '#pragma options'"
-msgstr "có rác ở cuối của '#pragma options'"
+msgstr "có rác ở cuối cá»§a “#pragma optionsâ€"
#: config/darwin-c.c:121
#, gcc-internal-format
@@ -27697,12 +24543,12 @@ msgstr ""
#: config/darwin-c.c:133
#, gcc-internal-format
msgid "missing '(' after '#pragma unused', ignoring"
-msgstr "thiếu '(' trước '#pragma chưa dùng', nên bỠqua"
+msgstr "thiếu “(†trước “#pragma chưa dùngâ€, nên bá» qua"
#: config/darwin-c.c:154
#, gcc-internal-format
msgid "missing ')' after '#pragma unused', ignoring"
-msgstr "thiếu ')' trước '#pragma chưa dùng', nên bỠqua"
+msgstr "thiếu “)†trước “#pragma chưa dùngâ€, nên bá» qua"
#: config/darwin-c.c:157
#, gcc-internal-format
@@ -27722,7 +24568,7 @@ msgstr "“#pragma ms_struct {on|off|reset}†sai dạng, nên bỠqua"
#: config/darwin-c.c:179
#, gcc-internal-format
msgid "junk at end of '#pragma ms_struct'"
-msgstr "có rác ở cuối '#pragma ms_struct'"
+msgstr "có rác ở cuối “#pragma ms_structâ€"
#: config/darwin-c.c:405
#, gcc-internal-format, gfc-internal-format
@@ -27746,16 +24592,14 @@ msgstr ""
#. Arbitrary limit, number should be like xx.yy.zz
#: config/darwin-driver.c:124
-#, fuzzy, gcc-internal-format
-#| msgid "collect2 version %s\n"
+#, gcc-internal-format
msgid "couldn%'t understand version %s\n"
-msgstr "collect2 phiên bản %s\n"
+msgstr "không thể hiểu phiên bản %s\n"
#: config/darwin-driver.c:177
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "this target does not support %qs"
+#, gcc-internal-format, gfc-internal-format
msgid "this compiler does not support %s"
-msgstr "đích này không hỗ trợ %qs"
+msgstr "bộ dịch này không hỗ trợ %s"
#: config/darwin-driver.c:232
#, gcc-internal-format
@@ -27763,10 +24607,9 @@ msgid "this compiler does not support PowerPC (arch flags ignored)"
msgstr ""
#: config/darwin-driver.c:236
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "-mcpu=%s conflicts with -march=%s"
+#, gcc-internal-format, gfc-internal-format
msgid "%s conflicts with i386 (arch flags ignored)"
-msgstr "-mcpu=%s xung đột với -march=%s"
+msgstr ""
#: config/darwin-driver.c:244
#, gcc-internal-format, gfc-internal-format
@@ -27779,10 +24622,9 @@ msgid "this compiler does not support X86 (arch flags ignored)"
msgstr ""
#: config/darwin-driver.c:255
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "-mcpu=%s conflicts with -march=%s"
+#, gcc-internal-format, gfc-internal-format
msgid "%s conflicts with ppc (arch flags ignored)"
-msgstr "-mcpu=%s xung đột với -march=%s"
+msgstr ""
#: config/darwin-driver.c:263
#, gcc-internal-format, gfc-internal-format
@@ -27946,31 +24788,29 @@ msgid "profiler support for VxWorks"
msgstr ""
#: config/aarch64/aarch64-builtins.c:1003 config/arm/arm-builtins.c:2122
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%Kargument %d must be a constant immediate"
-msgstr "đối số cuối phải là giá trị trực tiếp"
+msgstr ""
#: config/aarch64/aarch64-builtins.c:1074 config/arm/arm-builtins.c:2241
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%Klane index must be a constant immediate"
-msgstr "mặt nạ phải là một giá trị trực tiếp"
+msgstr ""
#: config/aarch64/aarch64-builtins.c:1077
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%Ktotal size and element size must be a non-zero constant immediate"
-msgstr "mặt nạ phải là một giá trị trực tiếp"
+msgstr ""
#: config/aarch64/aarch64.c:722
-#, fuzzy, gcc-internal-format
-#| msgid "%qs is incompatible with %qs"
+#, gcc-internal-format
msgid "%qs is incompatible with %s %s"
-msgstr "%qs không tương thích với %qs"
+msgstr "%qs không tương thích với %s %s"
#: config/aarch64/aarch64.c:724
-#, fuzzy, gcc-internal-format
-#| msgid "%qs is incompatible with %qs"
+#, gcc-internal-format
msgid "%qs feature modifier is incompatible with %s %s"
-msgstr "%qs không tương thích với %qs"
+msgstr ""
#: config/aarch64/aarch64.c:7882
#, gcc-internal-format, gfc-internal-format
@@ -27983,16 +24823,14 @@ msgid "%s string ill-formed\n"
msgstr ""
#: config/aarch64/aarch64.c:7983
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Invalid range %s in option %s"
+#, gcc-internal-format, gfc-internal-format
msgid "tuning string missing in option (%s)"
-msgstr "Vùng %s không hợp lệ trong tùy chá»n %s"
+msgstr ""
#: config/aarch64/aarch64.c:8001
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "unknown spec function %qs"
+#, gcc-internal-format, gfc-internal-format
msgid "unknown tuning option (%s)"
-msgstr "không hiểu hàm đặc tả %qs"
+msgstr ""
#: config/aarch64/aarch64.c:8189
#, gcc-internal-format
@@ -28000,10 +24838,9 @@ msgid "missing cpu name in -mcpu=%qs"
msgstr "thiếu cpu trong -mcpu=%qs"
#: config/aarch64/aarch64.c:8195
-#, fuzzy, gcc-internal-format
-#| msgid "invalid pointer mode %qs"
+#, gcc-internal-format
msgid "invalid feature modifier in -mcpu=%qs"
-msgstr "chế độ con trỠ%qs không hợp lệ"
+msgstr ""
#: config/aarch64/aarch64.c:8222
#, gcc-internal-format
@@ -28016,16 +24853,14 @@ msgid "unknown value %qs for -march"
msgstr "không hiểu giá trị %qs cho -march"
#: config/aarch64/aarch64.c:8228
-#, fuzzy, gcc-internal-format
-#| msgid "missing arch name in -march=%qs"
+#, gcc-internal-format
msgid "invalid feature modifier in -march=%qs"
-msgstr "thiếu tên kiến trúc trong -march=%qs"
+msgstr ""
#: config/aarch64/aarch64.c:8254
-#, fuzzy, gcc-internal-format
-#| msgid "missing cpu name in -mcpu=%qs"
+#, gcc-internal-format
msgid "missing cpu name in -mtune=%qs"
-msgstr "thiếu cpu trong -mcpu=%qs"
+msgstr "thiếu tên cpu trong -mcpu=%qs"
#: config/aarch64/aarch64.c:8257
#, gcc-internal-format
@@ -28048,16 +24883,14 @@ msgid "code model %qs with -f%s"
msgstr "mô hình mã %qs với -f%s"
#: config/aarch64/aarch64.c:8641
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "missing arch name in -march=%qs"
+#, gcc-internal-format, gfc-internal-format
msgid "missing architecture name in 'arch' target %s"
-msgstr "thiếu tên kiến trúc trong -march=%qs"
+msgstr ""
#: config/aarch64/aarch64.c:8644
-#, fuzzy, gcc-internal-format
-#| msgid "unknown value %qs for -march"
+#, gcc-internal-format
msgid "unknown value %qs for 'arch' target %s"
-msgstr "không hiểu giá trị %qs cho -march"
+msgstr ""
#: config/aarch64/aarch64.c:8647
#, gcc-internal-format
@@ -28065,16 +24898,14 @@ msgid "invalid feature modifier %qs for 'arch' target %s"
msgstr ""
#: config/aarch64/aarch64.c:8681
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "missing cpu name in -mcpu=%qs"
+#, gcc-internal-format, gfc-internal-format
msgid "missing cpu name in 'cpu' target %s"
-msgstr "thiếu cpu trong -mcpu=%qs"
+msgstr "thiếu tên cpu trong “cpu†đích %s"
#: config/aarch64/aarch64.c:8684
-#, fuzzy, gcc-internal-format
-#| msgid "unknown value %qs for -mcpu"
+#, gcc-internal-format
msgid "unknown value %qs for 'cpu' target %s"
-msgstr "không hiểu giá trị %qs dành cho -mcpu"
+msgstr ""
#: config/aarch64/aarch64.c:8687
#, gcc-internal-format
@@ -28082,57 +24913,49 @@ msgid "invalid feature modifier %qs for 'cpu' target %s"
msgstr ""
#: config/aarch64/aarch64.c:8718
-#, fuzzy, gcc-internal-format
-#| msgid "unknown value %qs for -mtune"
+#, gcc-internal-format
msgid "unknown value %qs for 'tune' target %s"
-msgstr "không hiểu giá trị %qs dành cho -mtune"
+msgstr ""
#: config/aarch64/aarch64.c:8758
-#, fuzzy, gcc-internal-format
-#| msgid "missing makefile target after %qs"
+#, gcc-internal-format
msgid "missing feature modifier in target %s %qs"
-msgstr "thiếu đích makefile sau %qs"
+msgstr ""
#: config/aarch64/aarch64.c:8763
-#, fuzzy, gcc-internal-format
-#| msgid "invalid operand modifier letter"
+#, gcc-internal-format
msgid "invalid feature modifier in target %s %qs"
-msgstr "sai đặt chữ sửa đổi toán hạng"
+msgstr ""
#: config/aarch64/aarch64.c:8811
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "malformed spec function arguments"
+#, gcc-internal-format, gfc-internal-format
msgid "malformed target %s"
-msgstr "đối số hàm đặc tả dạng sai"
+msgstr ""
#: config/aarch64/aarch64.c:8859
-#, fuzzy, gcc-internal-format
-#| msgid "%<no-custom-%s%> does not accept arguments"
+#, gcc-internal-format
msgid "target %s %qs does not accept an argument"
-msgstr "%<no-custom-%s%> không chấp nhận đối số"
+msgstr ""
#: config/aarch64/aarch64.c:8868
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "target %s %qs does not allow a negated form"
-msgstr "%s không hỗ trợ %<%%%s%c%> định dạng %s"
+msgstr ""
#: config/aarch64/aarch64.c:8923
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "%s\"%s\"%s is invalid"
+#, gcc-internal-format, gfc-internal-format
msgid "target %s %s=%s is not valid"
-msgstr "%s\"%s\"%s không hợp lệ"
+msgstr ""
#: config/aarch64/aarch64.c:8989
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "malformed ptx file"
+#, gcc-internal-format, gfc-internal-format
msgid "malformed target %s value"
-msgstr "tập tin ptx có dạng sai"
+msgstr ""
#: config/aarch64/aarch64.c:9006
-#, fuzzy, gcc-internal-format
-#| msgid "%s\"%s\"%s is invalid"
+#, gcc-internal-format
msgid "target %s %qs is invalid"
-msgstr "%s\"%s\"%s không hợp lệ"
+msgstr ""
#: config/aarch64/aarch64.c:9015
#, gcc-internal-format
@@ -28212,15 +25035,14 @@ msgid "bad builtin fcode"
msgstr "fcode dựng sẵn sai"
#: config/arc/arc.c:698
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "-mmul64 not supported for ARC700 or ARCv2"
-msgstr "-mmul32x16 chỉ hỗ trợ ARC600 hay ARC601"
+msgstr ""
#: config/arc/arc.c:702
-#, fuzzy, gcc-internal-format
-#| msgid "-mmul32x16 supported only for ARC600 or ARC601"
+#, gcc-internal-format
msgid "-mno-mpy supported only for ARC700 or ARCv2"
-msgstr "-mmul32x16 chỉ hỗ trợ ARC600 hay ARC601"
+msgstr ""
#: config/arc/arc.c:706
#, gcc-internal-format
@@ -28233,9 +25055,9 @@ msgid "-mno-dpfp-lrsr supported only with -mdpfp"
msgstr "-mno-dpfp-lrsr chỉ được hỗ trợ với -mdpfp"
#: config/arc/arc.c:714
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "FPX fast and compact options cannot be specified together"
-msgstr "-mcorea và -mcoreb không thể dùng cùng với nhau"
+msgstr ""
#: config/arc/arc.c:718
#, gcc-internal-format
@@ -28248,10 +25070,9 @@ msgid "FPX extensions not available on pre-ARC600 cores"
msgstr ""
#: config/arc/arc.c:728
-#, fuzzy, gcc-internal-format
-#| msgid "this builtin function is only available on the fr450"
+#, gcc-internal-format
msgid "This multiplier configuration is not available for HS cores"
-msgstr "hàm dựng sẵn chỉ sẵn có trên fr405"
+msgstr ""
#: config/arc/arc.c:734
#, gcc-internal-format, gfc-internal-format
@@ -28259,16 +25080,14 @@ msgid "PIC is not supported for %s. Generating non-PIC code only.."
msgstr ""
#: config/arc/arc.c:740
-#, fuzzy, gcc-internal-format
-#| msgid "-mrelax is only supported for RTP PIC"
+#, gcc-internal-format
msgid "-matomic is only supported for ARC700 or ARC HS cores"
-msgstr "-mrelax chỉ hỗ trợ cho RTP PIC"
+msgstr ""
#: config/arc/arc.c:744
-#, fuzzy, gcc-internal-format
-#| msgid "-mrelax is only supported for RTP PIC"
+#, gcc-internal-format
msgid "-mll64 is only supported for ARC HS cores"
-msgstr "-mrelax chỉ hỗ trợ cho RTP PIC"
+msgstr ""
#: config/arc/arc.c:1218
#, gcc-internal-format, gfc-internal-format
@@ -28287,14 +25106,14 @@ msgid "argument of %qE attribute is not \"ilink1\" or \"ilink2\""
msgstr ""
#: config/arc/arc.c:1412
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "argument of %qE attribute is not \"ilink\""
-msgstr "đối số %qd không phải hằng số"
+msgstr ""
#: config/arc/arc.c:5274
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "__builtin_arc_aligned with non-constant alignment"
-msgstr "%<__builtin_next_arg%> được gá»i mà không có đối số"
+msgstr ""
#: config/arc/arc.c:5282
#, gcc-internal-format
@@ -28307,10 +25126,9 @@ msgid "builtin operand should be an unsigned 6-bit value"
msgstr ""
#: config/arc/arc.c:5450
-#, fuzzy, gcc-internal-format
-#| msgid "-mcorea should be used with -mmulticore"
+#, gcc-internal-format
msgid "operand 1 should be an unsigned 3-bit immediate"
-msgstr "-mcorea cần được dùng với -mmulticore"
+msgstr ""
#: config/arc/arc.c:5491 config/arc/arc.c:5588
#, gcc-internal-format
@@ -28323,14 +25141,14 @@ msgid "operand 1 should be an unsigned 3-bit value (I0-I7)"
msgstr ""
#: config/arc/arc.c:5528 config/arc/arc.c:5560
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "operand 2 should be an unsigned 8-bit value"
-msgstr "đối số 2 phải là kiểu văn không dấu 5-bit"
+msgstr ""
#: config/arc/arc.c:5592
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "operand 3 should be an unsigned 8-bit value"
-msgstr "đối số 2 phải là kiểu văn không dấu 5-bit"
+msgstr ""
#: config/arc/arc.c:5625
#, gcc-internal-format
@@ -28353,28 +25171,24 @@ msgid "operand 2 should be an even 3-bit value (subreg 0,2,4,6)"
msgstr ""
#: config/arc/arc.c:5686
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "symbol used as immediate operand"
+#, gcc-internal-format, gfc-internal-format
msgid "builtin requires an immediate for operand %d"
-msgstr "ký hiệu dùng như là toán hạng giá trị trực tiếp"
+msgstr ""
#: config/arc/arc.c:5691
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "argument 2 must be a 6-bit unsigned literal"
+#, gcc-internal-format, gfc-internal-format
msgid "operand %d should be a 6 bit unsigned immediate"
-msgstr "đối số 2 phải là kiểu văn không dấu 6-bit"
+msgstr ""
#: config/arc/arc.c:5695
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "argument 2 must be a 5-bit unsigned literal"
+#, gcc-internal-format, gfc-internal-format
msgid "operand %d should be a 8 bit unsigned immediate"
-msgstr "đối số 2 phải là kiểu văn không dấu 5-bit"
+msgstr ""
#: config/arc/arc.c:5699
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "argument 2 must be a 5-bit unsigned literal"
+#, gcc-internal-format, gfc-internal-format
msgid "operand %d should be a 3 bit unsigned immediate"
-msgstr "đối số 2 phải là kiểu văn không dấu 5-bit"
+msgstr ""
#: config/arc/arc.c:5702
#, gcc-internal-format, gfc-internal-format
@@ -28397,9 +25211,9 @@ msgid "Insn addresses not set after shorten_branches"
msgstr ""
#: config/arc/arc.c:6550
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "insn addresses not freed"
-msgstr "Äịa chỉ sai, không phải thanh ghi:"
+msgstr ""
#: config/arm/arm-builtins.c:2226
#, gcc-internal-format
@@ -28755,9 +25569,9 @@ msgid "unable to compute real location of stacked parameter"
msgstr ""
#: config/arm/arm.c:24153
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Unexpected thumb1 far jump"
-msgstr "Gặp kết thức mô-Ä‘un bất thưá»ng"
+msgstr ""
#: config/arm/arm.c:24420
#, gcc-internal-format
@@ -28780,8 +25594,7 @@ msgid "attribute %<target%> argument not a string"
msgstr "thuộc tính %<target%> không là một chuỗi"
#: config/arm/arm.c:29924
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "attribute(target(\"%s\")) is unknown"
+#, gcc-internal-format, gfc-internal-format
msgid "invalid fpu for attribute(target(\"%s\"))"
msgstr "thuộc tính(đích(\"%s\")) là không hiểu"
@@ -28792,8 +25605,7 @@ msgid "attribute(target(\"%s\")) is unknown"
msgstr "thuộc tính(đích(\"%s\")) là không hiểu"
#: config/arm/freebsd.h:126
-#, fuzzy, gcc-internal-format
-#| msgid "target CPU does not support unaligned accesses"
+#, gcc-internal-format
msgid "target OS does not support unaligned accesses"
msgstr "CPU đích không hỗ trợ truy cập chưa cân chỉnh"
@@ -28833,25 +25645,23 @@ msgid "%qs expects an integer value as second argument"
msgstr "%qs cần giá trị nguyên làm đối số thứ hai"
#: config/avr/avr-devices.c:203
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "-fpic is not supported"
+#, gcc-internal-format, gfc-internal-format
msgid "devices natively supported:%s"
-msgstr "-fpic không được hỗ trợ"
+msgstr ""
#: config/avr/avr-devices.c:212
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Known MCU architectures:"
+#, gcc-internal-format, gfc-internal-format
msgid "supported core architectures:%s"
-msgstr "Không biết kiến trúc MCU:"
+msgstr ""
#. Reached the end of `avr_mcu_types'. This should actually never
#. happen as options are provided by device-specs. It could be a
#. typo in a device-specs or calling the compiler proper directly
#. with -mmcu=<device>.
#: config/avr/avr.c:368
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "unknown core architecture %qs specified with %qs"
-msgstr "không hiểu hàm đặc tả %qs"
+msgstr ""
#: config/avr/avr.c:425 config/mep/mep.c:354 config/visium/visium.c:343
#, gcc-internal-format
@@ -28866,7 +25676,7 @@ msgstr "-fPIC không được hỗ trợ"
#: config/avr/avr.c:429
#, gcc-internal-format
msgid "-fpie is not supported"
-msgstr "-fpie không được hỗ trợ."
+msgstr "-fpie không được hỗ trợ"
#: config/avr/avr.c:431
#, gcc-internal-format
@@ -28940,9 +25750,9 @@ msgid "%qE attribute allows only an integer constant argument"
msgstr ""
#: config/avr/avr.c:9035
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qE attribute address out of range"
-msgstr "Thuộc tính %qE chỉ được áp dụng cho các biến"
+msgstr "Thuộc tính %qE nằm ngoài vùng địa chỉ"
#: config/avr/avr.c:9048
#, gcc-internal-format
@@ -28950,9 +25760,9 @@ msgid "both %s and %qE attribute provide address"
msgstr ""
#: config/avr/avr.c:9058
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qE attribute on non-volatile variable"
-msgstr "Thuộc tính %qE chỉ được áp dụng cho các biến"
+msgstr "Thuộc tính %qE trên biến không hay thay đổi"
#: config/avr/avr.c:9262
#, gcc-internal-format
@@ -28995,9 +25805,9 @@ msgid "static IO declaration for %q+D needs an address"
msgstr ""
#: config/avr/avr.c:9405
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "IO definition for %q+D needs an address"
-msgstr "khai báo trước đây của %q+D là đây"
+msgstr ""
#: config/avr/avr.c:9589
#, gcc-internal-format
@@ -29010,10 +25820,9 @@ msgid "uninitialized variable %q+D put into program memory area"
msgstr ""
#: config/avr/avr.c:9740
-#, fuzzy, gcc-internal-format
-#| msgid "-msecure-plt not supported by your assembler"
+#, gcc-internal-format
msgid "architecture %qs supported for assembler only"
-msgstr "-msecure-plt không được hỗ trợ bởi bộ dịch hợp ngữ của bạn"
+msgstr ""
#: config/avr/avr.c:12259
#, gcc-internal-format
@@ -29051,10 +25860,9 @@ msgid "you can provide your own specs files, see <%s> for details"
msgstr ""
#: config/avr/driver-avr.c:79
-#, fuzzy, gcc-internal-format
-#| msgid "unknown spec function %qs"
+#, gcc-internal-format
msgid "bad usage of spec function %qs"
-msgstr "không hiểu hàm đặc tả %qs"
+msgstr "cách dùng hàm đặc tả %qs sai"
#: config/avr/driver-avr.c:107
#, gcc-internal-format
@@ -29062,10 +25870,9 @@ msgid "specified option %qs more than once"
msgstr ""
#: config/avr/driver-avr.c:129
-#, fuzzy, gcc-internal-format
-#| msgid "specs file malformed after %ld characters"
+#, gcc-internal-format
msgid "strange device name %qs after %qs: bad character %qc"
-msgstr "tập tin đặc tả dạng sai sau %ld ký tự"
+msgstr ""
#: config/bfin/bfin.c:2348
#, gcc-internal-format
@@ -29169,7 +25976,7 @@ msgstr ""
#: config/cris/cris.c:893
#, gcc-internal-format
msgid "invalid use of ':' modifier"
-msgstr "số dòng sai"
+msgstr ""
#: config/cris/cris.c:1127 config/moxie/moxie.c:181
#, gcc-internal-format, gfc-internal-format
@@ -29291,9 +26098,9 @@ msgid "no FUNCTION_PROFILER for CRIS"
msgstr "không có FUNCTION_PROFILER cho CRIS"
#: config/epiphany/epiphany.c:480
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "interrupt handlers cannot have arguments"
-msgstr "%qs hàm không có đối số"
+msgstr ""
#: config/epiphany/epiphany.c:504
#, gcc-internal-format
@@ -29371,22 +26178,19 @@ msgid "this builtin function is only available on the fr450"
msgstr "hàm dựng sẵn chỉ sẵn có trên fr405"
#: config/ft32/ft32.c:175
-#, fuzzy, gcc-internal-format
-#| msgid "shift of non-integer operand"
+#, gcc-internal-format
msgid "'h' applied to non-register operand"
-msgstr "dịch của toán hạng không nguyên"
+msgstr "'h' áp dụng cho toán không nguyên"
#: config/ft32/ft32.c:200
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "array assignment"
+#, gcc-internal-format, gfc-internal-format
msgid "bad alignment: %d"
-msgstr "sự gán mảng"
+msgstr ""
#: config/ft32/ft32.c:478
-#, fuzzy, gcc-internal-format
-#| msgid "stack_offset must be at least 4"
+#, gcc-internal-format
msgid "stack frame must be smaller than 64K"
-msgstr "stack_offset bé nhất phải là 4"
+msgstr ""
#: config/h8300/h8300.c:325
#, gcc-internal-format
@@ -29424,9 +26228,9 @@ msgid "-mno-exr valid only with -ms or -msx - Option ignored!"
msgstr "-mno-exr chỉ hợp lệ vá»›i -ms hay -msx - Tùy chá»n bị bá» qua!"
#: config/h8300/h8300.c:384
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "-mn is not supported for linux targets"
-msgstr "%<__int%d%> không được hỗ trợ cho đích này"
+msgstr ""
#: config/i386/host-cygwin.c:62
#, gcc-internal-format
@@ -29444,9 +26248,9 @@ msgid "wrong arg %s to option %s"
msgstr "sai đối số %s cho tùy chá»n %s"
#: config/i386/i386.c:4073
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "size ranges of option %s should be increasing"
-msgstr "vùng bá»™ chá»n phải nằm từ 0 đến 7"
+msgstr ""
#: config/i386/i386.c:4084
#, gcc-internal-format, gfc-internal-format
@@ -29455,15 +26259,14 @@ msgstr ""
#. rep; movq isn't available in 32-bit code.
#: config/i386/i386.c:4094
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "-mstringop-strategy=rep_8byte not supported for 32-bit code"
+#, gcc-internal-format, gfc-internal-format
msgid "stringop strategy name %s specified for option %s not supported for 32-bit code"
-msgstr "-mstringop-strategy=rep_8byte không hỗ trợ mã 32-bit"
+msgstr ""
#: config/i386/i386.c:4109
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "unknown alignment %s specified for option %s"
-msgstr "không hiểu hàm đặc tả %qs"
+msgstr ""
#: config/i386/i386.c:4120
#, gcc-internal-format, gfc-internal-format
@@ -29471,9 +26274,9 @@ msgid "the max value for the last size range should be -1 for option %s"
msgstr ""
#: config/i386/i386.c:4128
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "too many size ranges specified in option %s"
-msgstr "Vùng %s không hợp lệ trong tùy chá»n %s"
+msgstr ""
#: config/i386/i386.c:4182
#, gcc-internal-format, gfc-internal-format
@@ -29481,10 +26284,9 @@ msgid "Unknown parameter to option -mtune-ctrl: %s"
msgstr ""
#: config/i386/i386.c:4570
-#, fuzzy, gcc-internal-format
-#| msgid "code model %qs not supported in x32 mode"
+#, gcc-internal-format
msgid "Intel MCU psABI isn%'t supported in %s mode"
-msgstr "mô hình mã %qs không được hỗ trợ trong chế độ x32"
+msgstr ""
#: config/i386/i386.c:4617
#, gcc-internal-format, gfc-internal-format
@@ -29564,8 +26366,7 @@ msgid "-mregparm is ignored in 64-bit mode"
msgstr "-mregparm bị bỠqua trên chế độ 64-bit"
#: config/i386/i386.c:5085
-#, fuzzy, gcc-internal-format
-#| msgid "-mregparm is ignored in 64-bit mode"
+#, gcc-internal-format
msgid "-mregparm is ignored for Intel MCU psABI"
msgstr "-mregparm bị bỠqua trên chế độ 64-bit"
@@ -29657,7 +26458,7 @@ msgstr ""
#: config/i386/i386.c:6806
#, gcc-internal-format
msgid "regparam and thiscall attributes are not compatible"
-msgstr "không tương thích với nhau"
+msgstr "thuộc tính regparam và thiscall không tương thích với nhau"
#: config/i386/i386.c:6813 config/i386/i386.c:44394
#, gcc-internal-format
@@ -29705,10 +26506,9 @@ msgid "cdecl and thiscall attributes are not compatible"
msgstr "các thuộc tính cdecl và thiscall không tương thích với nhau"
#: config/i386/i386.c:6897
-#, fuzzy, gcc-internal-format
-#| msgid "%qE attribute ignored for %qE"
+#, gcc-internal-format
msgid "%qE attribute is used for non-class method"
-msgstr "thuộc tính %qE bị lỠđi cho %qE"
+msgstr ""
#: config/i386/i386.c:7135
#, gcc-internal-format
@@ -29721,9 +26521,9 @@ msgid "calling %qT with attribute sseregparm without SSE/SSE2 enabled"
msgstr ""
#: config/i386/i386.c:7466
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "X32 does not support ms_abi attribute"
-msgstr "không hỗ trợ chức năng đa thư viện"
+msgstr ""
#: config/i386/i386.c:7498
#, gcc-internal-format
@@ -29893,9 +26693,9 @@ msgid "previous declaration of %D"
msgstr "khai báo trước đây của %D"
#: config/i386/i386.c:36920
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "multiversioning needs ifunc which is not supported on this target"
-msgstr "__builtin_thread_pointer không được hỗ trợ trên đích này"
+msgstr ""
#: config/i386/i386.c:37306
#, gcc-internal-format
@@ -29920,7 +26720,7 @@ msgstr "đối số thứ năm phải là giá trị trực tiếp 8-bit"
#: config/i386/i386.c:38282
#, gcc-internal-format
msgid "the third argument must be an 8-bit immediate"
-msgstr ""
+msgstr "đối số thứ ba phải là giá trị trực tiếp 8-bit"
#: config/i386/i386.c:39074
#, gcc-internal-format
@@ -29928,9 +26728,9 @@ msgid "the last argument must be an 1-bit immediate"
msgstr "đối số cuối phải là giá trị trực tiếp 1-bít"
#: config/i386/i386.c:39089
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "the last argument must be a 3-bit immediate"
-msgstr "đối số cuối phải là giá trị trực tiếp 32-bít"
+msgstr "đối số cuối phải là giá trị trực tiếp 3-bít"
#: config/i386/i386.c:39122
#, gcc-internal-format
@@ -29958,35 +26758,34 @@ msgid "the last argument must be an 8-bit immediate"
msgstr "đối số cuối phải là giá trị trực tiếp 8-bít"
#: config/i386/i386.c:39356
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "the third argument must be comparison constant"
msgstr "đối số thứ năm phải là giá trị trực tiếp 8-bit"
#: config/i386/i386.c:39361
-#, fuzzy, gcc-internal-format
-#| msgid "incorect comparison mode"
+#, gcc-internal-format
msgid "incorrect comparison mode"
msgstr "chế độ so sánh không đúng"
#: config/i386/i386.c:39367 config/i386/i386.c:39568
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "incorrect rounding operand"
msgstr "lệnh không đúng:"
#: config/i386/i386.c:39550
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "the immediate argument must be a 4-bit immediate"
-msgstr "đối số cuối phải là giá trị trực tiếp 4-bít"
+msgstr "đối số trực tiếp phải là giá trị trực tiếp 4-bít"
#: config/i386/i386.c:39556
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "the immediate argument must be a 5-bit immediate"
-msgstr "đối số cuối phải là giá trị trực tiếp 5-bít"
+msgstr "đối số trực tiếp phải là giá trị trực tiếp 5-bít"
#: config/i386/i386.c:39559
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "the immediate argument must be an 8-bit immediate"
-msgstr "đối số cuối phải là giá trị trực tiếp 8-bít"
+msgstr "đối số trực tiếp phải là giá trị trực tiếp 8-bít"
#: config/i386/i386.c:39951
#, gcc-internal-format
@@ -30024,7 +26823,7 @@ msgid "the forth argument must be scale 1, 2, 4, 8"
msgstr "đối số thứ tư phải là tỷ lệ 1, 2, 4, 8"
#: config/i386/i386.c:41843
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "incorrect hint operand"
msgstr "lệnh không đúng:"
@@ -30059,16 +26858,14 @@ msgid "alternatives not allowed in asm flag output"
msgstr ""
#: config/i386/i386.c:47476
-#, fuzzy, gcc-internal-format
-#| msgid "unknown IRA algorithm %qs"
+#, gcc-internal-format
msgid "unknown asm flag output %qs"
-msgstr "không hiểu thuật toán IRA %qs"
+msgstr ""
#: config/i386/i386.c:47505
-#, fuzzy, gcc-internal-format
-#| msgid "invalid type for property"
+#, gcc-internal-format
msgid "invalid type for asm flag output"
-msgstr "kiểu không hợp lệ cho thuộc tính"
+msgstr ""
#: config/i386/i386.c:53657
#, gcc-internal-format
@@ -30127,15 +26924,14 @@ msgid "COLLECT_GCC must be set"
msgstr "COLLECT_GCC phải được đặt"
#: config/i386/intelmic-mkoffload.c:563 config/nvptx/mkoffload.c:455
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "offload compiler %s not found"
-msgstr "không tìm thấy trưá»ng %qs"
+msgstr ""
#: config/i386/intelmic-mkoffload.c:582 config/nvptx/mkoffload.c:474
-#, fuzzy, gcc-internal-format
-#| msgid "unrecognized argument in option %qs"
+#, gcc-internal-format
msgid "unrecognizable argument of option "
-msgstr "không nhận ra đối số tá»›i tùy chá»n %qs"
+msgstr "không nhận ra đối số cá»§a tùy chá»n "
#: config/i386/winnt.c:78
#, gcc-internal-format
@@ -30647,15 +27443,14 @@ msgid "%qE redeclared with conflicting %qs attributes"
msgstr ""
#: config/mips/mips.c:1472 config/mips/mips.c:1526
-#, fuzzy, gcc-internal-format
-#| msgid "%qE attribute requires a void return type"
+#, gcc-internal-format
msgid "%qE attribute requires a string argument"
-msgstr "Thuộc tính %qE cần kiểu trả vỠlà void"
+msgstr "Thuộc tính %qE cần tham số là chuỗi"
#: config/mips/mips.c:1480
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "argument to %qE attribute is neither eic, nor vector=<line>"
-msgstr "đối số %qd không phải hằng số"
+msgstr ""
#: config/mips/mips.c:1496
#, gcc-internal-format
@@ -30663,9 +27458,9 @@ msgid "interrupt vector to %qE attribute is not vector=(sw0|sw1|hw0|hw1|hw2|hw3|
msgstr ""
#: config/mips/mips.c:1533
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "argument to %qE attribute is not intstack"
-msgstr "đối số %qd không phải hằng số"
+msgstr ""
#: config/mips/mips.c:7234
#, gcc-internal-format
@@ -30673,9 +27468,9 @@ msgid "cannot handle inconsistent calls to %qs"
msgstr ""
#: config/mips/mips.c:10341
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "the %<interrupt%> attribute requires a MIPS32r2 processor or greater"
-msgstr "thuộc tính %<interrupt%> cần %<-msoft-float%>"
+msgstr "thuộc tính %<interrupt%> cần bộ xử lý MIPS32r2 hay mới hơn"
#: config/mips/mips.c:10343
#, gcc-internal-format
@@ -30752,7 +27547,7 @@ msgid "%<-mgp64%> used with a 32-bit ABI"
msgstr "%<-mgp64%> được dùng với 32-bit ABI"
#: config/mips/mips.c:17848
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "the %qs architecture does not support %<-mfp32%>"
msgstr "đích này không hỗ trợ %qs"
@@ -30767,19 +27562,19 @@ msgid "%<-mgp32%> and %<-mfp64%> can only be combined when using the o32 ABI"
msgstr "%<-mgp32%> và %<-mfp64%> chỉ có thể được tổ hợp cùng nhau khi sử dụng o32 ABI"
#: config/mips/mips.c:17879
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<-mfpxx%> can only be used with the o32 ABI"
-msgstr "%<-mgp32%> và %<-mfp64%> chỉ có thể được tổ hợp cùng nhau khi sử dụng o32 ABI"
+msgstr ""
#: config/mips/mips.c:17883
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<-march=%s%> requires %<-mfp32%>"
-msgstr "%<-mips3d%> cần %<-mpaired-single%>"
+msgstr ""
#: config/mips/mips.c:17885
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<-mfpxx%> requires %<-mlra%>"
-msgstr "%<-mips3d%> cần %<-mpaired-single%>"
+msgstr ""
#: config/mips/mips.c:17901 config/mips/mips.c:17903 config/mips/mips.c:17916
#, gcc-internal-format
@@ -30802,9 +27597,9 @@ msgid "the %qs architecture does not support branch-likely instructions"
msgstr ""
#: config/mips/mips.c:17971
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "the %qs architecture does not support madd or msub instructions"
-msgstr "CPU đích không hỗ trợ chỉ lệnh THUMB"
+msgstr ""
#: config/mips/mips.c:17985
#, gcc-internal-format
@@ -30812,16 +27607,14 @@ msgid "the %qs architecture does not support odd single-precision registers"
msgstr ""
#: config/mips/mips.c:17998 config/mips/mips.c:18004
-#, fuzzy, gcc-internal-format
-#| msgid "unsupported combination: %s"
+#, gcc-internal-format
msgid "unsupported combination: %qs%s %s"
-msgstr "Hóa hợp không được hỗ trợ: %s"
+msgstr ""
#: config/mips/mips.c:18013
-#, fuzzy, gcc-internal-format
-#| msgid "unsupported combination: %s"
+#, gcc-internal-format
msgid "unsupported combination: %qs %s"
-msgstr "Hóa hợp không được hỗ trợ: %s"
+msgstr ""
#: config/mips/mips.c:18028
#, gcc-internal-format
@@ -30844,14 +27637,14 @@ msgid "cannot use small-data accesses for %qs"
msgstr ""
#: config/mips/mips.c:18090
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "the %qs architecture does not support %<-m%s=legacy%>"
-msgstr "đích này không hỗ trợ %qs"
+msgstr ""
#: config/mips/mips.c:18097
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "the %qs architecture does not support %<-m%s=2008%>"
-msgstr "đích này không hỗ trợ %qs"
+msgstr ""
#: config/mips/mips.c:18115
#, gcc-internal-format
@@ -30874,9 +27667,9 @@ msgid "%qs requires a target that provides the %qs instruction"
msgstr ""
#: config/mips/mips.c:18157
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "the %qs architecture does not support DSP instructions"
-msgstr "CPU đích không hỗ trợ chỉ lệnh THUMB"
+msgstr ""
#: config/mips/mips.c:18259
#, gcc-internal-format
@@ -31016,10 +27809,9 @@ msgid ""
msgstr ""
#: config/msp430/msp430.c:817
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "unrecognized register name %qs"
+#, gcc-internal-format, gfc-internal-format
msgid "Unrecognised MCU name '%s'."
-msgstr "không nhận ra tên thanh ghi %qs"
+msgstr ""
#: config/msp430/msp430.c:826
#, gcc-internal-format
@@ -31027,10 +27819,9 @@ msgid "-mlarge requires a 430X-compatible -mmcu="
msgstr ""
#: config/msp430/msp430.c:829
-#, fuzzy, gcc-internal-format
-#| msgid "-mpower8-vector requires -maltivec"
+#, gcc-internal-format
msgid "-mcode-region=upper requires 430X-compatible cpu"
-msgstr "-mpower8-vector cần -maltivec"
+msgstr ""
#: config/msp430/msp430.c:831
#, gcc-internal-format
@@ -31038,19 +27829,19 @@ msgid "-mdata-region=upper requires 430X-compatible cpu"
msgstr ""
#: config/msp430/msp430.c:1834
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "unrecognised interrupt vector argument of %qE attribute"
-msgstr "đối số của thuộc tính %qE không hợp lệ"
+msgstr ""
#: config/msp430/msp430.c:1843
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "numeric argument of %qE attribute must be in range 0..63"
-msgstr "đối số %d của %qE phải nằm trong vùng %d…%d"
+msgstr ""
#: config/msp430/msp430.c:1849
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "argument of %qE attribute is not a string constant or number"
-msgstr "đối số %qd không phải hằng số"
+msgstr ""
#: config/msp430/msp430.c:2458
#, gcc-internal-format
@@ -31079,19 +27870,19 @@ msgid "bad builtin code"
msgstr "mã dựng sẵn sai"
#: config/nds32/nds32-isr.c:337
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "multiple save reg attributes to function %qD"
-msgstr "quá ít đối số cho hàm %q#D"
+msgstr ""
#: config/nds32/nds32-isr.c:348
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "multiple nested types attributes to function %qD"
-msgstr "quá nhiá»u đối số cho hàm %q#D"
+msgstr ""
#: config/nds32/nds32-isr.c:360
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "multiple interrupt attributes to function %qD"
-msgstr "quá ít đối số cho hàm %q#D"
+msgstr ""
#. Trampoline is not supported on reduced-set registers yet.
#: config/nds32/nds32.c:1741 config/nds32/nds32.c:1795
@@ -31115,19 +27906,19 @@ msgid "invalid id value for interrupt/exception attribute"
msgstr ""
#: config/nds32/nds32.c:2609
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid id value for reset attribute"
-msgstr "đối số của thuộc tính %qs không hợp lệ"
+msgstr ""
#: config/nds32/nds32.c:2625
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid nmi function for reset attribute"
-msgstr "đối số của thuộc tính %qs không hợp lệ"
+msgstr ""
#: config/nds32/nds32.c:2638
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid warm function for reset attribute"
-msgstr "đối số của thuộc tính %qs không hợp lệ"
+msgstr ""
#: config/nds32/nds32.c:2706
#, gcc-internal-format
@@ -31185,20 +27976,19 @@ msgid "PIC support for -fstack-limit-symbol"
msgstr ""
#: config/nios2/nios2.c:1376
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "BMX instructions are only supported with R2 architecture"
-msgstr "Bật các chỉ lệnh MULX, coi là dịch nhanh hơn"
+msgstr ""
#: config/nios2/nios2.c:1378
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "CDX instructions are only supported with R2 architecture"
-msgstr "Bật các chỉ lệnh MULX, coi là dịch nhanh hơn"
+msgstr ""
#: config/nios2/nios2.c:1383
-#, fuzzy, gcc-internal-format
-#| msgid "Generate code in little-endian mode."
+#, gcc-internal-format
msgid "R2 architecture is little-endian only"
-msgstr "Tạo ra mã trong chế độ vá» cuối nhá»."
+msgstr "Kiến trúc R2 chỉ chế độ vá» cuối nhá»."
#: config/nios2/nios2.c:3119
#, gcc-internal-format
@@ -31211,9 +28001,9 @@ msgid "custom instruction opcode must be compile time constant in the range 0-25
msgstr ""
#: config/nios2/nios2.c:3373
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "invalid argument to built-in function %s"
-msgstr "đối số không hợp lệ cho %<__builtin_return_address%>"
+msgstr ""
#: config/nios2/nios2.c:3432
#, gcc-internal-format, gfc-internal-format
@@ -31221,15 +28011,14 @@ msgid "Control register number must be in range 0-31 for %s"
msgstr ""
#: config/nios2/nios2.c:3460
-#, 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 "số phải là 0 hay 1"
+msgstr ""
#: config/nios2/nios2.c:3467
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "The immediate value must fit into a %d-bit integer for %s"
-msgstr "đối số cuối phải là giá trị trực tiếp 4-bít"
+msgstr ""
#: config/nios2/nios2.c:3517
#, gcc-internal-format
@@ -31237,9 +28026,9 @@ msgid "The ENI instruction operand must be either 0 or 1"
msgstr ""
#: config/nios2/nios2.c:3545
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Builtin function %s requires Nios II R%d"
-msgstr "Cần danh sách đối số tại %C"
+msgstr ""
#: config/nios2/nios2.c:3627
#, gcc-internal-format
@@ -31303,10 +28092,9 @@ msgstr "Không thể mở tập tin xuất trung gian ptx"
#. The stabs testcases want to know stabs isn't supported.
#: config/nvptx/nvptx.c:165
-#, fuzzy, gcc-internal-format
-#| msgid "-mhard-float not supported"
+#, gcc-internal-format
msgid "stabs debug format not supported"
-msgstr "không hỗ trợ -mhard-float"
+msgstr ""
#: config/nvptx/nvptx.c:1540
#, gcc-internal-format
@@ -31355,41 +28143,37 @@ msgstr ""
#. Address spaces are currently only supported by C.
#: config/rl78/rl78.c:345
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "-mes0 can only be used with C"
-msgstr "-mmulticore chỉ có thể được dùng với BF561"
+msgstr "-mes0 chỉ có thể được dùng với C"
#: config/rl78/rl78.c:360
-#, 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 chỉ có thể được dùng với BF561"
+msgstr "-mmul=g13 không thể dùng với -mcpu=g10"
#: config/rl78/rl78.c:361
-#, 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 chỉ có thể được dùng với BF561"
+msgstr "-mmul=g14 không thể dùng với -mcpu=g10"
#. The S2 core does not have mul/div instructions.
#: config/rl78/rl78.c:372
-#, 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 chỉ có thể được dùng với BF561"
+msgstr "-mmul=g14 không thể dùng với -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:384
-#, 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 chỉ có thể được dùng với BF561"
+msgstr "-mmul=g13 không thể dùng với -mcpu=g14"
#: config/rl78/rl78.c:779
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "naked attribute only applies to functions"
-msgstr "thuộc tính %qE chỉ áp dụng cho các hàm"
+msgstr ""
#: config/rl78/rl78.c:803
#, gcc-internal-format
@@ -31399,7 +28183,7 @@ msgstr "Thuộc tính %qE không được áp dụng cho các hàm"
#. This is unpredictable, as we're truncating off usable address
#. bits.
#: config/rl78/rl78.c:1142
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "converting far pointer to near pointer"
msgstr "không thể chuyển đổi thành kiểu con trá»"
@@ -31608,73 +28392,64 @@ msgid "-mupper-regs-sf requires -mpower8-vector"
msgstr "-mupper-regs-sf cần -mpower8-vector"
#: config/rs6000/rs6000.c:4111
-#, fuzzy, gcc-internal-format
-#| msgid "-mupper-regs-sf requires -mpower8-vector"
+#, gcc-internal-format
msgid "-mpower8-fusion-sign requires -mpower8-fusion"
-msgstr "-mupper-regs-sf cần -mpower8-vector"
+msgstr "-mpower8-fusion-sign cần -mpower8-fusion"
#: config/rs6000/rs6000.c:4114
-#, fuzzy, gcc-internal-format
-#| msgid "-mupper-regs-sf requires -mpower8-vector"
+#, gcc-internal-format
msgid "-mtoc-fusion requires -mpower8-fusion"
-msgstr "-mupper-regs-sf cần -mpower8-vector"
+msgstr "-mtoc-fusion cần -mpower8-fusion"
#: config/rs6000/rs6000.c:4127
-#, fuzzy, gcc-internal-format
-#| msgid "-mupper-regs-sf requires -mpower8-vector"
+#, gcc-internal-format
msgid "-mpower9-fusion requires -mpower8-fusion"
-msgstr "-mupper-regs-sf cần -mpower8-vector"
+msgstr "-mpower9-fusion cần -mpower8-fusion"
#: config/rs6000/rs6000.c:4175
-#, fuzzy, gcc-internal-format
-#| msgid "-mupper-regs-sf requires -mpower8-vector"
+#, gcc-internal-format
msgid "-mpower9-dform requires -mpower9-vector"
-msgstr "-mupper-regs-sf cần -mpower8-vector"
+msgstr "-mpower9-dform cần -mpower9-vector"
#: config/rs6000/rs6000.c:4182
-#, fuzzy, gcc-internal-format
-#| msgid "-mpower8-vector requires -mvsx"
+#, gcc-internal-format
msgid "-mpower9-dform requires -mupper-regs-df"
-msgstr "-mpower8-vector cần -mvsx"
+msgstr "-mpower9-dform cần -mupper-regs-df"
#: config/rs6000/rs6000.c:4189
-#, fuzzy, gcc-internal-format
-#| msgid "-mpower8-vector requires -mvsx"
+#, gcc-internal-format
msgid "-mpower9-dform requires -mupper-regs-sf"
-msgstr "-mpower8-vector cần -mvsx"
+msgstr "-mpower9-dform cần -mupper-regs-sf"
#: config/rs6000/rs6000.c:4197
-#, fuzzy, gcc-internal-format
-#| msgid "-mupper-regs-sf requires -mpower8-vector"
+#, gcc-internal-format
msgid "-mpower9-vector requires -mpower8-vector"
-msgstr "-mupper-regs-sf cần -mpower8-vector"
+msgstr "-mpower9-vector cần -mpower8-vector"
#: config/rs6000/rs6000.c:4211
-#, fuzzy, gcc-internal-format
-#| msgid "-mdirect-move requires -mvsx"
+#, gcc-internal-format
msgid "-mallow-movmisalign requires -mvsx"
-msgstr "-mdirect-move cần -mvsx"
+msgstr "-mallow-movmisalign cần -mvsx"
#: config/rs6000/rs6000.c:4226
-#, fuzzy, gcc-internal-format
-#| msgid "-mdirect-move requires -mvsx"
+#, gcc-internal-format
msgid "-mefficient-unaligned-vsx requires -mvsx"
-msgstr "-mdirect-move cần -mvsx"
+msgstr "-mefficient-unaligned-vsx cần -mvsx"
#: config/rs6000/rs6000.c:4234
#, gcc-internal-format
msgid "-mefficient-unaligned-vsx requires -mallow-movmisalign"
-msgstr ""
+msgstr "-mefficient-unaligned-vsx cần -mallow-movmisalign"
#: config/rs6000/rs6000.c:4244
#, gcc-internal-format
msgid "-mfloat128 requires VSX support"
-msgstr ""
+msgstr "-mfloat128 cần hỗ trợ VSX"
#: config/rs6000/rs6000.c:4258
#, gcc-internal-format
msgid "-mfloat128-hardware requires full ISA 3.0 support"
-msgstr ""
+msgstr "-mfloat128-hardware cần được ISA 3.0 hỗ trợ"
#: config/rs6000/rs6000.c:4325
#, gcc-internal-format, gfc-internal-format
@@ -31772,38 +28547,36 @@ msgid "argument 1 of __builtin_altivec_predicate is out of range"
msgstr ""
#: config/rs6000/rs6000.c:13294
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "%srtd%s is ignored in 64bit mode"
+#, gcc-internal-format, gfc-internal-format
msgid "builtin %s is only valid in 64-bit mode"
-msgstr "%srtd%s bị bỠqua trong chế độ 64bit"
+msgstr ""
#: config/rs6000/rs6000.c:13343
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "argument %d must be an unsigned literal"
-msgstr "đối số 2 phải là kiểu văn không dấu 5-bit"
+msgstr ""
#: config/rs6000/rs6000.c:13345
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "argument %d is an unsigned literal that is out of range"
-msgstr "đối số 1 của __builtin_paired_predicate nằm ngoài phạm vi"
+msgstr ""
#: config/rs6000/rs6000.c:13483
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "%s only accepts 1 argument"
+#, gcc-internal-format, gfc-internal-format
msgid "builtin %s only accepts a string argument"
msgstr "%s chỉ chấp nhận một tham số"
#. Invalid CPU argument.
#: config/rs6000/rs6000.c:13502
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "cpu %s is an invalid argument to builtin %s"
-msgstr "đối số không hợp lệ cho %<__builtin_return_address%>"
+msgstr ""
#. Invalid HWCAP argument.
#: config/rs6000/rs6000.c:13530
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "hwcap %s is an invalid argument to builtin %s"
-msgstr "đối số không hợp lệ cho %<__builtin_return_address%>"
+msgstr ""
#: config/rs6000/rs6000.c:13603
#, gcc-internal-format
@@ -32334,33 +29107,29 @@ msgid "Mismatch in number of arguments for builtin %qF. Expected: %d got %d"
msgstr ""
#: config/s390/s390-c.c:907
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid parameter combination for intrinsic %qs"
-msgstr "đối số không hợp lệ cho %<__builtin_return_address%>"
+msgstr ""
#: config/s390/s390-c.c:913
-#, fuzzy, gcc-internal-format
-#| msgid "ambiguous overload for "
+#, gcc-internal-format
msgid "ambiguous overload for intrinsic %qs"
-msgstr "quá tải chưa rõ ràng đối với"
+msgstr ""
#: config/s390/s390-c.c:953
-#, fuzzy, gcc-internal-format
-#| msgid "constant argument out of range for %qs"
+#, gcc-internal-format
msgid "constant argument %d for builtin %qF is out of range for target type"
-msgstr "đối số hằng nằm ngoài phạm vi cho %qs"
+msgstr ""
#: config/s390/s390.c:732
-#, fuzzy, gcc-internal-format
-#| msgid "constant argument out of range for %qs"
+#, gcc-internal-format
msgid "constant argument %d for builtin %qF is out of range (0.."
-msgstr "đối số hằng nằm ngoài phạm vi cho %qs"
+msgstr ""
#: config/s390/s390.c:749
-#, fuzzy, gcc-internal-format
-#| msgid "constant argument out of range for %qs"
+#, gcc-internal-format
msgid "constant argument %d for builtin %qF is out of range ("
-msgstr "đối số hằng nằm ngoài phạm vi cho %qs"
+msgstr ""
#: config/s390/s390.c:800
#, gcc-internal-format
@@ -32373,10 +29142,9 @@ msgid "Builtin %qF is not supported without -mvx (default with -march=z13 and hi
msgstr ""
#: config/s390/s390.c:826
-#, fuzzy, gcc-internal-format
-#| msgid "<unresolved overloaded function type>"
+#, gcc-internal-format
msgid "Unresolved overloaded builtin"
-msgstr "<chưa giải quyết loại hàm quá tải>"
+msgstr ""
#: config/s390/s390.c:833 config/tilegx/tilegx.c:3543
#: config/tilepro/tilepro.c:3110
@@ -32385,15 +29153,14 @@ msgid "bad builtin icode"
msgstr "icode dựng sẵn sai"
#: config/s390/s390.c:869
-#, fuzzy, gcc-internal-format
-#| msgid "Invalid builtin arguments"
+#, gcc-internal-format
msgid "constant value required for builtin %qF argument %d"
-msgstr "Các đối số dựng sẵn không hợp lệ"
+msgstr ""
#: config/s390/s390.c:946
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Invalid argument %d for builtin %qF"
-msgstr "đối số không hợp lệ cho %<__builtin_return_address%>"
+msgstr ""
#: config/s390/s390.c:1047
#, gcc-internal-format
@@ -32426,16 +29193,14 @@ msgid "%qs uses dynamic stack allocation"
msgstr ""
#: config/s390/s390.c:13657
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "%<mwords-little-endian%> is deprecated and will be removed in a future release"
+#, 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 "%<mwords-little-endian%> bị phản đối và sẽ bị gỡ bỠtrong lần phát hành tương lai"
+msgstr ""
#: config/s390/s390.c:13669
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "%<mwords-little-endian%> is deprecated and will be removed in a future release"
+#, 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 "%<mwords-little-endian%> bị phản đối và sẽ bị gỡ bỠtrong lần phát hành tương lai"
+msgstr ""
#: config/s390/s390.c:13681
#, gcc-internal-format, gfc-internal-format
@@ -32494,9 +29259,9 @@ msgstr ""
#. argument is not a plain number
#: config/s390/s390.c:13861
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "arguments to %qs should be non-negative integers"
-msgstr "đối số đầu tiên của %q+D phải là %<int%>"
+msgstr ""
#: config/s390/s390.c:13868
#, gcc-internal-format
@@ -32505,9 +29270,9 @@ msgstr "đối số cho %qs quá lớn (tối đa là %d)"
#. Value is not allowed for the target attribute.
#: config/s390/s390.c:14076
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Value %qs is not supported by attribute %<target%>"
-msgstr "%<__int%d%> không được hỗ trợ cho đích này"
+msgstr ""
#: config/sh/sh.c:1028
#, gcc-internal-format
@@ -32608,9 +29373,9 @@ msgid "-fcall-saved-REG is not supported for out registers"
msgstr ""
#: config/spu/spu-c.c:131
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "insufficient arguments to overloaded function %s"
-msgstr "quá nhiá»u đối số cho hàm được quá tải %s"
+msgstr "thiếu đối số cho hàm được quá tải %s"
#: config/spu/spu-c.c:162
#, gcc-internal-format, gfc-internal-format
@@ -32928,9 +29693,9 @@ msgid "subprogram %q+F not marked Inline_Always"
msgstr ""
#: ada/gcc-interface/trans.c:1518 ada/gcc-interface/trans.c:1524
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "parent subprogram cannot be inlined"
-msgstr "các đối số tạm không thể là bạn"
+msgstr ""
#: ada/gcc-interface/trans.c:1522
#, gcc-internal-format
@@ -32953,9 +29718,9 @@ msgid "invalid element type for attribute %qs"
msgstr ""
#: ada/gcc-interface/utils.c:3760
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "number of components of vector not a power of two"
-msgstr "số lượng đối số không giống với nó khi khai báo mẫu hàm"
+msgstr "số lượng thành phần của véctơ không thể là mũ của hai"
#: ada/gcc-interface/utils.c:5774 ada/gcc-interface/utils.c:5948
#: ada/gcc-interface/utils.c:6010
@@ -32996,9 +29761,9 @@ msgstr ""
#: c/c-array-notation.c:718 c/c-array-notation.c:724
#: cp/cp-array-notation.c:606
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qE cannot be scalar when %qE is not"
-msgstr "%qE không thể dùng như một hàm"
+msgstr ""
#: c/c-array-notation.c:786 cp/cp-array-notation.c:659
#, gcc-internal-format
@@ -33006,19 +29771,19 @@ msgid "length mismatch between LHS and RHS"
msgstr ""
#: c/c-array-notation.c:1343 cp/cp-array-notation.c:1426
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "start-index of array notation triplet is not an integer"
-msgstr "chỉ số mảng không phải là số nguyên"
+msgstr ""
#: c/c-array-notation.c:1348 cp/cp-array-notation.c:1431
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "length of array notation triplet is not an integer"
-msgstr "chỉ số mảng không phải là số nguyên"
+msgstr ""
#: c/c-array-notation.c:1355 cp/cp-array-notation.c:1436
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "stride of array notation triplet is not an integer"
-msgstr "chỉ số mảng không phải là số nguyên"
+msgstr ""
#: c/c-array-notation.c:1376
#, gcc-internal-format
@@ -33141,7 +29906,7 @@ msgstr ""
#: c/c-decl.c:1787
#, gcc-internal-format
msgid "previous definition of %q+D was here"
-msgstr "khai báo trước đây của %q+D là đây"
+msgstr "định nghĩa trước đây của %q+D là đây"
#: c/c-decl.c:1789
#, gcc-internal-format
@@ -33169,9 +29934,9 @@ msgid "declaration of %q+D shadows a built-in function"
msgstr ""
#: c/c-decl.c:1847
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "redeclaration of enumerator %q+D"
-msgstr "khai báo lại của %<enum %E%>"
+msgstr ""
#. If types don't match for a built-in, throw away the
#. built-in. No point in calling locate_old_decl here, it
@@ -33297,7 +30062,7 @@ msgid "redefinition of parameter %q+D"
msgstr "định nghĩa lại của đối số %q+D"
#: c/c-decl.c:2308
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "redundant redeclaration of %q+D"
msgstr "tái khai báo không hợp lệ cho %q+D"
@@ -33343,9 +30108,9 @@ msgid "incompatible implicit declaration of built-in function %qD"
msgstr ""
#: c/c-decl.c:3354
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "include %qs or provide a declaration of %qD"
-msgstr "tái khai báo không hợp lệ cho %q+D"
+msgstr ""
#: c/c-decl.c:3363
#, gcc-internal-format
@@ -33407,7 +30172,7 @@ msgstr ""
#: c/c-decl.c:3688 cp/decl.c:3294
#, gcc-internal-format
msgid "duplicate label %qD"
-msgstr "nhãn nhân đôi %qD"
+msgstr "trùng nhãn %qD"
#: c/c-decl.c:3719
#, gcc-internal-format
@@ -33485,9 +30250,9 @@ msgid "useless storage class specifier in empty declaration"
msgstr ""
#: c/c-decl.c:4212
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "useless %qs in empty declaration"
-msgstr "%<inline%> trong khai báo trống rỗng"
+msgstr ""
#: c/c-decl.c:4225
#, gcc-internal-format
@@ -33882,9 +30647,9 @@ msgid "%<[*]%> not in a declaration"
msgstr "%<[*]%> không trong khai báo"
#: c/c-decl.c:5958
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "array type has incomplete element type %qT"
-msgstr "đối số %qD có kiểu chưa đầy đủ"
+msgstr ""
#: c/c-decl.c:5964
#, gcc-internal-format
@@ -34066,7 +30831,7 @@ msgstr "đối số %q+D được khai báo %<inline%>"
#: c/c-decl.c:6500
#, gcc-internal-format
msgid "parameter %q+D declared %<_Noreturn%>"
-msgstr ""
+msgstr "đối số %q+D được khai báo %<_Noreturn%>"
#: c/c-decl.c:6513
#, gcc-internal-format
@@ -34360,9 +31125,9 @@ msgid "return type defaults to %<int%>"
msgstr "trả vỠkiểu mặc định cho %<int%>"
#: c/c-decl.c:8353
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%q+D defined as variadic function without prototype"
-msgstr "trưá»ng %qE được khai báo như là má»™t hàm"
+msgstr ""
#: c/c-decl.c:8412
#, gcc-internal-format
@@ -34390,9 +31155,9 @@ msgid "return type of %qD is not %<int%>"
msgstr ""
#: c/c-decl.c:8460
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<_Atomic%>-qualified return type of %qD"
-msgstr "%<_Atomic%> áp dụng cho kiểu hạn định"
+msgstr ""
#: c/c-decl.c:8467
#, gcc-internal-format
@@ -34490,7 +31255,7 @@ msgid "argument %qD doesn%'t match prototype"
msgstr ""
#: c/c-decl.c:9052 cp/decl.c:14709
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "no return statement in function returning non-void"
msgstr "%<return%> (trả lại) không có giá trị, trong hàm trả lại non-void (không rỗng)"
@@ -34698,10 +31463,9 @@ msgid "%<#pragma omp declare reduction%> initializer refers to variable %qD whic
msgstr ""
#: c/c-fold.c:319 c/c-typeck.c:11001 cp/typeck.c:4425
-#, fuzzy, gcc-internal-format
-#| msgid "left shift count is negative"
+#, gcc-internal-format
msgid "left shift of negative value"
-msgstr "số lượng dịch trái là số âm"
+msgstr "dịch trái của một giá trị âm"
#: c/c-fold.c:331 c/c-typeck.c:11010 cp/typeck.c:4433
#, gcc-internal-format
@@ -34881,9 +31645,9 @@ msgid "expression in static assertion is not constant"
msgstr ""
#: c/c-parser.c:2237
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "static assertion failed: %E"
-msgstr "thẩm tra gặp lỗi: %s"
+msgstr ""
#: c/c-parser.c:2552
#, gcc-internal-format
@@ -34911,10 +31675,9 @@ msgid "%<_Atomic%> applied to a qualified type"
msgstr "%<_Atomic%> áp dụng cho kiểu hạn định"
#: c/c-parser.c:2704
-#, fuzzy, gcc-internal-format
-#| msgid "spec %qs invalid"
+#, gcc-internal-format
msgid "empty enum is invalid"
-msgstr "đặc tả %qs không hợp lệ"
+msgstr ""
#: c/c-parser.c:2708 c/c-parser.c:3650 c/c-parser.c:4434 c/c-parser.c:4730
#: c/c-parser.c:6071 c/c-parser.c:6158 c/c-parser.c:6833 c/c-parser.c:7444
@@ -35002,9 +31765,9 @@ msgid "expected identifier or %<(%>"
msgstr "cần một định danh hoặc %<(%>"
#: c/c-parser.c:3548 c/c-parser.c:3577
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "array notations cannot be used in declaration"
-msgstr "Cảnh báo vá» lá»i tuyên bố kiểu cÅ©"
+msgstr "Cảnh báo vá» lá»i khai báo kiểu cÅ©"
#: c/c-parser.c:3716
#, gcc-internal-format
@@ -35196,9 +31959,9 @@ msgid "%<_Generic%> association has function type"
msgstr ""
#: c/c-parser.c:7210
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<_Generic%> association has incomplete type"
-msgstr "đối số %qD có kiểu chưa đầy đủ"
+msgstr ""
#: c/c-parser.c:7214
#, gcc-internal-format
@@ -35226,9 +31989,9 @@ msgid "compatible type is here"
msgstr "kiểu tương thích là ở đây"
#: c/c-parser.c:7271
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<_Generic> selector matches multiple associations"
-msgstr "Tạo ra câu lệnh nạp/lưu nội"
+msgstr ""
#: c/c-parser.c:7273
#, gcc-internal-format
@@ -35256,9 +32019,9 @@ msgid "ISO C forbids braced-groups within expressions"
msgstr ""
#: c/c-parser.c:7538
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ISO C does not support %<__FUNCTION__%> predefined identifier"
-msgstr "ISO C không hỗ trợ kiểu %<__int%d%>"
+msgstr ""
#: c/c-parser.c:7547
#, gcc-internal-format
@@ -35266,7 +32029,7 @@ msgid "ISO C does not support %<__PRETTY_FUNCTION__%> predefined identifier"
msgstr ""
#: c/c-parser.c:7556
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ISO C90 does not support %<__func__%> predefined identifier"
msgstr "ISO C90 không hỗ trợ từ hạn định %<_Atomic%>"
@@ -35281,7 +32044,7 @@ msgid "first argument to %<__builtin_choose_expr%> not a constant"
msgstr ""
#: c/c-parser.c:7802
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "wrong number of arguments to %<__builtin_call_with_static_chain%>"
msgstr "sai số lượng đối số cho %<__builtin_choose_expr%>"
@@ -35291,7 +32054,7 @@ msgid "first argument to %<__builtin_call_with_static_chain%> must be a call exp
msgstr ""
#: c/c-parser.c:7819
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "second argument to %<__builtin_call_with_static_chain%> must be a pointer type"
msgstr "đối số 1 của __builtin_paired_predicate phải là một hằng"
@@ -35411,7 +32174,7 @@ msgid "the %<getter%> attribute may only be specified once"
msgstr ""
#: c/c-parser.c:9990
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<#pragma acc update%> may only be used in compound statements"
msgstr "%<#pragma omp cancel%> chỉ có thể sử dụng trong các biểu thức phức hợp"
@@ -35476,17 +32239,17 @@ msgid "too many %qs clauses"
msgstr "quá nhiá»u mệnh đỠ%qs"
#: c/c-parser.c:10460 cp/parser.c:30345
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "expected integer expression before ')'"
-msgstr "cần biểu thức nguyên"
+msgstr "cần biểu thức nguyên trước “)â€"
#: c/c-parser.c:10475
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "expression must be integral"
msgstr "chỉ số phải là số nguyên"
#: c/c-parser.c:10604 c/c-parser.c:10612 cp/parser.c:29914 cp/parser.c:29922
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qD is not a constant"
msgstr "%q#D không là const"
@@ -35496,9 +32259,9 @@ msgid "%qD is not a variable"
msgstr "%qD không phải là một biến"
#: c/c-parser.c:10768 cp/parser.c:30095
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qD is not a pointer variable"
-msgstr "%qD không phải là một biến"
+msgstr "%qD không phải là má»™t biến trá»"
#: c/c-parser.c:10808 cp/parser.c:30423
#, gcc-internal-format
@@ -35506,10 +32269,9 @@ msgid "collapse argument needs positive constant integer expression"
msgstr ""
#: c/c-parser.c:10878 cp/parser.c:30479
-#, fuzzy, gcc-internal-format
-#| msgid "expected %<new%>"
+#, gcc-internal-format
msgid "expected %<none%>"
-msgstr "cần %<new%>"
+msgstr "cần %<none%>"
#: c/c-parser.c:10880 cp/parser.c:30481
#, gcc-internal-format
@@ -35517,17 +32279,15 @@ msgid "expected %<none%> or %<shared%>"
msgstr "cần %<none%> hoặc %<shared%>"
#: c/c-parser.c:10980 cp/parser.c:30581
-#, fuzzy, gcc-internal-format
-#| msgid "expected %<;%>, %<,%> or %<)%>"
+#, gcc-internal-format
msgid "expected %<data%>, %<update%>, %<enter%> or %<exit%>"
-msgstr "cần %<;%>, %<,%> hoặc %<)%>"
+msgstr ""
#: c/c-parser.c:11000 c/c-parser.c:15839 c/c-parser.c:15924 cp/parser.c:30599
#: cp/parser.c:34579 cp/parser.c:34667
-#, fuzzy, gcc-internal-format
-#| msgid "expected %<catch%>"
+#, gcc-internal-format
msgid "expected %<data%>"
-msgstr "cần %<catch%>"
+msgstr "cần %<data%>"
#: c/c-parser.c:11047 cp/parser.c:30652
#, gcc-internal-format
@@ -35535,16 +32295,14 @@ msgid "too many %<if%> clauses with %qs modifier"
msgstr ""
#: c/c-parser.c:11054 cp/parser.c:30659
-#, fuzzy, gcc-internal-format
-#| msgid "too many %qs clauses"
+#, gcc-internal-format
msgid "too many %<if%> clauses"
-msgstr "quá nhiá»u mệnh đỠ%qs"
+msgstr "quá nhiá»u mệnh đỠ%<if%>"
#: c/c-parser.c:11056 cp/parser.c:30661
-#, fuzzy, gcc-internal-format
-#| msgid "too many %qs clauses"
+#, gcc-internal-format
msgid "too many %<if%> clauses without modifier"
-msgstr "quá nhiá»u mệnh đỠ%qs"
+msgstr ""
#: c/c-parser.c:11062 cp/parser.c:30667
#, gcc-internal-format
@@ -35560,9 +32318,9 @@ msgid "expected integer expression"
msgstr "cần biểu thức nguyên"
#: c/c-parser.c:11147
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<num_gangs%> value must be positive"
-msgstr "%<num_teams%> giá trị phải dương"
+msgstr "%<num_gangs%> giá trị phải dương"
#: c/c-parser.c:11191
#, gcc-internal-format
@@ -35570,70 +32328,62 @@ msgid "%<num_threads%> value must be positive"
msgstr "%<num_threads%> giá trị phải dương"
#: c/c-parser.c:11235
-#, fuzzy, gcc-internal-format
-#| msgid "%<num_teams%> value must be positive"
+#, gcc-internal-format
msgid "%<num_tasks%> value must be positive"
-msgstr "%<num_teams%> giá trị phải dương"
+msgstr "%<num_tasks%> giá trị phải dương"
#: c/c-parser.c:11279 cp/semantics.c:6828
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<grainsize%> value must be positive"
-msgstr "%<num_teams%> giá trị phải dương"
+msgstr "%<grainsize%> giá trị phải dương"
#: c/c-parser.c:11324 cp/semantics.c:6857
-#, fuzzy, gcc-internal-format
-#| msgid "%<thread_limit%> value must be positive"
+#, gcc-internal-format
msgid "%<priority%> value must be non-negative"
-msgstr "%<thread_limit%> giá trị phải dương"
+msgstr "%<priority%> giá trị phải dương"
#: c/c-parser.c:11385 c/c-parser.c:11391 cp/parser.c:30878 cp/parser.c:30885
-#, fuzzy, gcc-internal-format
-#| msgid "expected %<throw%>"
+#, gcc-internal-format
msgid "expected %<tofrom%>"
-msgstr "cần %<throw%>"
+msgstr "cần %<tofrom%>"
#: c/c-parser.c:11399 c/c-parser.c:11405 cp/parser.c:30894 cp/parser.c:30901
-#, fuzzy, gcc-internal-format
-#| msgid "expected %<declare%>"
+#, gcc-internal-format
msgid "expected %<scalar%>"
-msgstr "cần %<declare%>"
+msgstr "cần %<scalar%>"
#: c/c-parser.c:11471
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<num_workers%> value must be positive"
msgstr "%<num_threads%> giá trị phải dương"
#: c/c-parser.c:11535 cp/parser.c:30207
-#, fuzzy, gcc-internal-format
-#| msgid "too many arguments"
+#, gcc-internal-format
msgid "too many %<static%> arguments"
-msgstr "quá nhiá»u đối số"
+msgstr "quá nhiá»u đối số %<static%>"
#: c/c-parser.c:11569 cp/parser.c:30240
-#, fuzzy, gcc-internal-format
-#| msgid "unexpected attribute"
+#, gcc-internal-format
msgid "unexpected argument"
-msgstr "cần thuộc tính"
+msgstr "gặp tham số thừa"
#: c/c-parser.c:11595
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<%s%> value must be positive"
-msgstr "%<num_teams%> giá trị phải dương"
+msgstr "%<%s%> giá trị phải dương"
#: c/c-parser.c:11724 cp/semantics.c:6941
-#, fuzzy, gcc-internal-format
-#| msgid "%<device%> id must be integral"
+#, gcc-internal-format
msgid "%<tile%> value must be integral"
-msgstr "chỉ số %<device%> phải là số nguyên"
+msgstr "giá trị %<tile%> phải là số nguyên"
#: c/c-parser.c:11737 cp/semantics.c:6955
-#, fuzzy, gcc-internal-format
-#| msgid "%<num_teams%> value must be positive"
+#, gcc-internal-format
msgid "%<tile%> value must be positive"
-msgstr "%<num_teams%> giá trị phải dương"
+msgstr "%<tile%> giá trị phải dương"
#: c/c-parser.c:11803 cp/parser.c:30958
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ordered argument needs positive constant integer expression"
msgstr "cần biểu thức nguyên"
@@ -35723,9 +32473,9 @@ msgid "invalid proc_bind kind"
msgstr "kiểu proc_bind không hợp lệ"
#: c/c-parser.c:13099 cp/parser.c:32152
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "expected %<#pragma acc%> clause"
-msgstr "cần mệnh đỠ%<#pragma omp%>"
+msgstr "cần mệnh đỠ%<#pragma acc%>"
#: c/c-parser.c:13110 c/c-parser.c:13393 cp/parser.c:32163 cp/parser.c:32479
#, gcc-internal-format
@@ -35748,9 +32498,9 @@ msgid "no valid clauses specified in %<#pragma acc declare%>"
msgstr ""
#: c/c-parser.c:13530 cp/parser.c:35100
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "array section in %<#pragma acc declare%>"
-msgstr "sự khai báo của %qD như là mảng của %<auto%>"
+msgstr ""
#: c/c-parser.c:13554 cp/parser.c:35124
#, gcc-internal-format
@@ -35763,9 +32513,9 @@ msgid "invalid OpenACC clause at file scope"
msgstr ""
#: c/c-parser.c:13572 cp/parser.c:35142
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid use of %<extern%> variable %qD in %<#pragma acc declare%>"
-msgstr "không thể dùng %<::%> trong khai báo đối số"
+msgstr ""
#: c/c-parser.c:13580 cp/parser.c:35150
#, gcc-internal-format
@@ -35778,14 +32528,14 @@ msgid "variable %qD used more than once with %<#pragma acc declare%>"
msgstr ""
#: c/c-parser.c:13678 cp/parser.c:35245
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "expected %<data%> in %<#pragma acc enter data%>"
-msgstr "cần %<,%> hoặc %<)%> sau %qE"
+msgstr ""
#: c/c-parser.c:13687 cp/parser.c:35255
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid pragma"
-msgstr "#pragma %s không hợp lệ"
+msgstr "pragma không hợp lệ"
#: c/c-parser.c:13704 cp/parser.c:35272
#, gcc-internal-format
@@ -35793,10 +32543,9 @@ msgid "%<#pragma acc enter data%> has no data movement clause"
msgstr ""
#: c/c-parser.c:13906 cp/parser.c:36352
-#, fuzzy, gcc-internal-format
-#| msgid "%<#pragma GCC option%> is not a string"
+#, gcc-internal-format
msgid "%<#pragma acc routine%> not at file scope"
-msgstr "%<#pragma GCC option%> không phải là một chuỗi"
+msgstr ""
#: c/c-parser.c:13923 cp/parser.c:2829
#, gcc-internal-format
@@ -35804,10 +32553,9 @@ msgid "%qE has not been declared"
msgstr "%qE chưa được khai báo"
#: c/c-parser.c:13929
-#, fuzzy, gcc-internal-format
-#| msgid "expected function"
+#, gcc-internal-format
msgid "expected function name"
-msgstr "cần hàm"
+msgstr "cần tên hàm"
#: c/c-parser.c:13968
#, gcc-internal-format
@@ -35820,10 +32568,9 @@ msgid "%<#pragma acc routine%> already applied to %D"
msgstr ""
#: c/c-parser.c:13978 cp/parser.c:36572
-#, fuzzy, gcc-internal-format
-#| msgid "%<#pragma GCC pch_preprocess%> must be first"
+#, gcc-internal-format
msgid "%<#pragma acc routine%> must be applied before %s"
-msgstr "%<#pragma GCC pch_preprocess%> phải là đầu tiên"
+msgstr ""
#: c/c-parser.c:14015 cp/parser.c:35445
#, gcc-internal-format
@@ -35866,9 +32613,9 @@ msgid "for statement expected"
msgstr "cần câu lệnh for"
#: c/c-parser.c:14637 cp/parser.c:33465
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "_Cilk_for statement expected"
-msgstr "cần câu lệnh for"
+msgstr "cần câu lệnh _Cilk_for"
#: c/c-parser.c:14706 cp/semantics.c:7892 cp/semantics.c:7979
#, gcc-internal-format
@@ -35896,7 +32643,7 @@ msgid "%<ordered%> clause with parameter may not be specified on %qs construct"
msgstr ""
#: c/c-parser.c:15139
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<#pragma omp ordered%> with %<depend> clause may only be used in compound statements"
msgstr "%<#pragma omp taskwait%> chỉ có thể sử dụng trong các biểu thức phức hợp"
@@ -35916,24 +32663,24 @@ msgid "%<#pragma omp target data%> with map-type other than %<to%>, %<from%>, %<
msgstr ""
#: c/c-parser.c:15752 cp/parser.c:34534
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<#pragma omp target data%> must contain at least one %<map%> clause"
-msgstr "%<#pragma omp taskwait%> chỉ có thể sử dụng trong các biểu thức phức hợp"
+msgstr ""
#: c/c-parser.c:15787 cp/parser.c:34746
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<#pragma omp target update%> may only be used in compound statements"
-msgstr "%<#pragma omp taskwait%> chỉ có thể sử dụng trong các biểu thức phức hợp"
+msgstr ""
#: c/c-parser.c:15800 cp/parser.c:34759
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<#pragma omp target update%> must contain at least one %<from%> or %<to%> clauses"
-msgstr "%<#pragma omp taskwait%> chỉ có thể sử dụng trong các biểu thức phức hợp"
+msgstr ""
#: c/c-parser.c:15847 cp/parser.c:34587
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<#pragma omp target enter data%> may only be used in compound statements"
-msgstr "%<#pragma omp taskwait%> chỉ có thể sử dụng trong các biểu thức phức hợp"
+msgstr ""
#: c/c-parser.c:15873 cp/parser.c:34614
#, gcc-internal-format
@@ -35946,9 +32693,9 @@ msgid "%<#pragma omp target enter data%> must contain at least one %<map%> claus
msgstr ""
#: c/c-parser.c:15932 cp/parser.c:34675
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<#pragma omp target exit data%> may only be used in compound statements"
-msgstr "%<#pragma omp taskwait%> chỉ có thể sử dụng trong các biểu thức phức hợp"
+msgstr ""
#: c/c-parser.c:15960
#, gcc-internal-format
@@ -35971,9 +32718,9 @@ msgid "%<#pragma omp declare simd%> must be followed by function declaration or
msgstr ""
#: c/c-parser.c:16281 c/c-parser.c:16309
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<#pragma omp declare simd%> must be followed by function declaration or definition"
-msgstr "%<#pragma align%> phải xuất hiện trước khai báo của %D, đang lỠđi"
+msgstr ""
#: c/c-parser.c:16330
#, gcc-internal-format
@@ -36046,9 +32793,9 @@ msgid "redeclaration of %qs %<#pragma omp declare reduction%> for type %qT"
msgstr ""
#: c/c-parser.c:16667
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "previous %<#pragma omp declare reduction%>"
-msgstr "khai báo trước"
+msgstr "%<#pragma omp declare reduction%> trước"
#: c/c-parser.c:16784
#, gcc-internal-format
@@ -36066,9 +32813,9 @@ msgid "one of the initializer call arguments should be %<&omp_priv%>"
msgstr ""
#: c/c-parser.c:16934 cp/parser.c:36213
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "expected %<simd%> or %<reduction%> or %<target%>"
-msgstr "cần %<#pragma omp section%> hoặc %<}%>"
+msgstr ""
#: c/c-parser.c:17146 cp/semantics.c:7365
#, gcc-internal-format
@@ -36091,9 +32838,9 @@ msgid "pragma simd ignored because -fcilkplus is not enabled"
msgstr ""
#: c/c-parser.c:17189
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "pragma simd must be inside a function"
-msgstr "biểu thức không thể được dùng như một hàm"
+msgstr ""
#: c/c-parser.c:17233 cp/parser.c:37397
#, gcc-internal-format
@@ -36116,9 +32863,9 @@ msgid "expected %<#pragma simd%> clause"
msgstr "cần mệnh đỠ%<#pragma simd%>"
#: c/c-parser.c:17461 cp/parser.c:37049
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<#pragma cilk grainsize%> is not followed by %<_Cilk_for%>"
-msgstr "%<#pragma%> là không được phép ở đây"
+msgstr ""
#: c/c-parser.c:17760 cp/parser.c:36941
#, gcc-internal-format
@@ -36161,9 +32908,9 @@ msgid "start-index and length fields necessary for using array notations in poin
msgstr ""
#: c/c-parser.c:17878 c/c-parser.c:17921
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "array notations cannot be used with function type"
-msgstr "biểu thức không thể được dùng như một hàm"
+msgstr ""
#: c/c-parser.c:17887
#, gcc-internal-format
@@ -36176,14 +32923,14 @@ msgid "start-index and length fields necessary for using array notations in vari
msgstr ""
#: c/c-parser.c:17949 c/c-parser.c:17952
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "expected array notation expression"
-msgstr "cần một biểu thức lôgíc"
+msgstr ""
#: c/c-typeck.c:217
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qD has an incomplete type %qT"
-msgstr "đối số %qD có kiểu chưa đầy đủ"
+msgstr ""
#: c/c-typeck.c:231 c/c-typeck.c:9487 c/c-typeck.c:9529 cp/call.c:3968
#, gcc-internal-format
@@ -36201,16 +32948,15 @@ msgid "invalid use of array with unspecified bounds"
msgstr ""
#: c/c-typeck.c:253
-#, fuzzy, gcc-internal-format
-#| msgid "invalid definition of qualified type %qT"
+#, gcc-internal-format
msgid "invalid use of undefined type %qT"
-msgstr "định nghĩa không hợp lệ của kiểu hạn định %qT"
+msgstr ""
#. If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL.
#: c/c-typeck.c:256
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid use of incomplete typedef %qT"
-msgstr "đối số %qD có kiểu chưa đầy đủ"
+msgstr ""
#: c/c-typeck.c:329
#, gcc-internal-format
@@ -36263,10 +33009,9 @@ msgid "converting an array compound literal to a pointer is ill-formed in C++"
msgstr ""
#: c/c-typeck.c:2345
-#, fuzzy, gcc-internal-format
-#| msgid "%qT has no member named %qE"
+#, gcc-internal-format
msgid "%qT has no member named %qE; did you mean %qE?"
-msgstr "%qT không có thành viên nào mang tên %qE"
+msgstr "%qT không có thành viên nào mang tên %qE; ý bạn là %qE?"
#: c/c-typeck.c:2348
#, gcc-internal-format
@@ -36279,10 +33024,9 @@ msgid "accessing a member %qE of an atomic structure %qE"
msgstr ""
#: c/c-typeck.c:2360
-#, fuzzy, gcc-internal-format
-#| msgid "cannot capture member %qD of anonymous union"
+#, gcc-internal-format
msgid "accessing a member %qE of an atomic union %qE"
-msgstr "không thể chụp thành viên %qD trong hỗn hợp nặc danh"
+msgstr ""
#: c/c-typeck.c:2420
#, gcc-internal-format
@@ -36295,9 +33039,9 @@ msgid "request for member %qE in something not a structure or union"
msgstr ""
#: c/c-typeck.c:2477
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "dereferencing pointer to incomplete type %qT"
-msgstr "Cảnh báo khi xóa một con trỠtới kiểu không hoàn toàn"
+msgstr ""
#: c/c-typeck.c:2484
#, gcc-internal-format
@@ -36508,14 +33252,14 @@ msgid "wrong type argument to decrement"
msgstr "sai đối số kiểu để giảm"
#: c/c-typeck.c:4259
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "increment of pointer to an incomplete type %qT"
-msgstr "nguồn là một hàm trỠtới loại không hoàn toàn"
+msgstr "tăng con trỠtới loại không hoàn toàn %qT"
#: c/c-typeck.c:4263
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "decrement of pointer to an incomplete type %qT"
-msgstr "nguồn là một hàm trỠtới loại không hoàn toàn"
+msgstr "giảm con trỠtới loại không hoàn toàn %qT"
#: c/c-typeck.c:4367
#, gcc-internal-format
@@ -36578,9 +33322,9 @@ msgid "pointers to disjoint address spaces used in conditional expression"
msgstr ""
#: c/c-typeck.c:4886 c/c-typeck.c:4903
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "pointer to array loses qualifier in conditional expression"
-msgstr "kiểu không khá»›p trong biểu thức Ä‘iá»u kiện"
+msgstr ""
#: c/c-typeck.c:4891 c/c-typeck.c:4908
#, gcc-internal-format
@@ -36598,9 +33342,9 @@ msgid "pointer/integer type mismatch in conditional expression"
msgstr ""
#: c/c-typeck.c:5044 cp/typeck.c:6454
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "spawned function call cannot be part of a comma expression"
-msgstr "cú gá»i hàm không được xuất hiện trong biểu thức hằng"
+msgstr ""
#: c/c-typeck.c:5078
#, gcc-internal-format
@@ -36701,12 +33445,12 @@ msgid "defining a type in a cast is invalid in C++"
msgstr ""
#: c/c-typeck.c:5535
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "assignment to expression with array type"
-msgstr "thu hồi sự gán"
+msgstr ""
#: c/c-typeck.c:5658 c/c-typeck.c:6098
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "enum conversion in assignment is invalid in C++"
msgstr "chuyển đổi enum trong bộ khởi tạo thì không hợp lệ trong C++"
@@ -36747,9 +33491,9 @@ msgid "enum conversion in initialization is invalid in C++"
msgstr "chuyển đổi enum trong bộ khởi tạo thì không hợp lệ trong C++"
#: c/c-typeck.c:6102
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "enum conversion in return is invalid in C++"
-msgstr "chuyển đổi enum trong bộ khởi tạo thì không hợp lệ trong C++"
+msgstr "chuyển đổi enum trả vỠthì không hợp lệ trong C++"
#: c/c-typeck.c:6133
#, gcc-internal-format
@@ -37167,7 +33911,7 @@ msgid "function declared %<noreturn%> has a %<return%> statement"
msgstr "hàm đã khai báo %<noreturn%> có một câu lệnh %<return%>"
#: c/c-typeck.c:9616 cp/cp-array-notation.c:1087
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "array notation expression cannot be used as a return value"
msgstr "biểu thức không thể được dùng như một hàm"
@@ -37192,7 +33936,7 @@ msgid "ISO C forbids %<return%> with expression, in function returning void"
msgstr ""
#: c/c-typeck.c:9748
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "function returns address of label"
msgstr "hàm trả vỠđịa chỉ của biến cục bộ"
@@ -37257,9 +34001,9 @@ msgid "break statement within %<#pragma simd%> loop body"
msgstr ""
#: c/c-typeck.c:10168 cp/parser.c:11755
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "continue statement within %<#pragma simd%> loop body"
-msgstr "câu lệnh “continue†nằm ở ngoài một vòng lặp"
+msgstr ""
#: c/c-typeck.c:10194 cp/cp-gimplify.c:443
#, gcc-internal-format
@@ -37379,31 +34123,30 @@ msgstr ""
#: c/c-typeck.c:11969 c/c-typeck.c:13075 cp/semantics.c:4458
#: cp/semantics.c:6572
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "bit-field %qE in %qs clause"
-msgstr "Không thể chuyển đổi %s thành %s tại %L"
+msgstr ""
#: c/c-typeck.c:11978 c/c-typeck.c:13092 cp/semantics.c:4467
#: cp/semantics.c:6589
-#, fuzzy, gcc-internal-format
-#| msgid "%qD is not a member template function"
+#, gcc-internal-format
msgid "%qE is a member of a union"
-msgstr "%qD không phải là hàm thành viên mẫu"
+msgstr "%qE không phải là thành viên của union"
#: c/c-typeck.c:11988 cp/semantics.c:4479 cp/semantics.c:6612
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qD is not a variable in %qs clause"
msgstr "%qD không phải một biến trong mệnh đỠ%qs"
#: c/c-typeck.c:11992 c/c-typeck.c:13109 cp/semantics.c:4483
#: cp/semantics.c:6615
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qE is not a variable in %qs clause"
-msgstr "%qE không phải một biến trong mệnh đỠ%<depend%>"
+msgstr "%qE không phải một biến trong mệnh đỠ%qs"
#: c/c-typeck.c:12000 c/c-typeck.c:13116 c/c-typeck.c:13201
#: cp/semantics.c:4500 cp/semantics.c:6621 cp/semantics.c:6767
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qD is threadprivate variable in %qs clause"
msgstr "%qD không phải một biến trong mệnh đỠ%qs"
@@ -37419,9 +34162,9 @@ msgstr ""
#: c/c-typeck.c:12056 c/c-typeck.c:12120 c/c-typeck.c:12378
#: cp/semantics.c:4574 cp/semantics.c:4638
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "zero length array section in %qs clause"
-msgstr "mảng có độ dài biến đổi được dùng"
+msgstr ""
#: c/c-typeck.c:12075 cp/semantics.c:4593
#, gcc-internal-format
@@ -37435,9 +34178,9 @@ msgstr ""
#: c/c-typeck.c:12092 c/c-typeck.c:12202 cp/semantics.c:4610
#: cp/semantics.c:4720
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "negative length in array section in %qs clause"
-msgstr "mảng có độ dài biến đổi được dùng"
+msgstr ""
#: c/c-typeck.c:12109 cp/semantics.c:4627
#, gcc-internal-format
@@ -37461,14 +34204,14 @@ msgstr ""
#: c/c-typeck.c:12212 c/c-typeck.c:12321 cp/semantics.c:4730
#: cp/semantics.c:4842
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "array section is not contiguous in %qs clause"
-msgstr "Vào thủ tục thì cũng sao chép các phần mảng vào một khối kỠnhau"
+msgstr ""
#: c/c-typeck.c:12220 cp/semantics.c:4738
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qE does not have pointer or array type"
-msgstr "%qE không có kiểu lớp"
+msgstr "%qE không có con trỠhay kiểu mảng"
#: c/c-typeck.c:12598 c/c-typeck.c:12608
#, gcc-internal-format
@@ -37486,9 +34229,9 @@ msgid "user defined reduction not found for %qE"
msgstr ""
#: c/c-typeck.c:12763
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "variable length element type in array %<reduction%> clause"
-msgstr "mảng có độ dài biến đổi được dùng"
+msgstr ""
#: c/c-typeck.c:12781 c/c-typeck.c:13259 cp/semantics.c:7083
#, gcc-internal-format
@@ -37581,13 +34324,13 @@ msgid "%qD appears more than once in map clauses"
msgstr ""
#: c/c-typeck.c:13082 cp/semantics.c:6579
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qE does not have a mappable type in %qs clause"
-msgstr "%qD không phải một biến trong mệnh đỠ%qs"
+msgstr "%qE không phải một kiểu ánh xạ được trong mệnh đỠ%qs"
#: c/c-typeck.c:13135 c/c-typeck.c:13208 cp/semantics.c:6651
#: cp/semantics.c:6774
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qD does not have a mappable type in %qs clause"
msgstr "%qD không phải một biến trong mệnh đỠ%qs"
@@ -37598,15 +34341,14 @@ msgid "%qD appears more than once in data clauses"
msgstr ""
#: c/c-typeck.c:13189 cp/semantics.c:6754
-#, fuzzy, gcc-internal-format
-#| msgid "%qD is not a variable in clause %qs"
+#, gcc-internal-format
msgid "%qE is neither a variable nor a function name in clause %qs"
-msgstr "%qD không phải một biến trong mệnh đỠ%qs"
+msgstr "%qE không phải một biến cũng không phải tên hàm trong mệnh đỠ%qs"
#: c/c-typeck.c:13217 cp/semantics.c:6783
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qE appears more than once on the same %<declare target%> directive"
-msgstr "%qD không phải là một thành viên dữ liệu tĩnh của một mẫu lớp"
+msgstr ""
#: c/c-typeck.c:13231 cp/semantics.c:6798
#, gcc-internal-format
@@ -37619,9 +34361,9 @@ msgid "%qE is not an argument in %<uniform%> clause"
msgstr "%qE không phải một đối số trong mệnh đỠ%<uniform%>"
#: c/c-typeck.c:13249
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs variable is neither a pointer nor an array"
-msgstr "%qE không có kiểu lớp"
+msgstr ""
#: c/c-typeck.c:13324 cp/semantics.c:6216
#, gcc-internal-format
@@ -37659,9 +34401,9 @@ msgid "cannot use %<va_arg%> with reverse storage order"
msgstr ""
#: c/c-typeck.c:13588
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "second argument to %<va_arg%> is of incomplete type %qT"
-msgstr "nguồn là một hàm trỠtới loại không hoàn toàn"
+msgstr ""
#: c/c-typeck.c:13594
#, gcc-internal-format
@@ -37680,13 +34422,13 @@ msgid " no known conversion for implicit %<this%> parameter from %qT to %qT"
msgstr ""
#: cp/call.c:3322
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid " conversion of argument %d would be ill-formed:"
-msgstr " không hiểu chuyển đổi cho đối số %d từ %qT thành %qT"
+msgstr " chuyển đổi cho đối số %d nên là ill-formed:"
#. Conversion of conversion function return value failed.
#: cp/call.c:3329
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid " no known conversion from %qT to %qT"
msgstr " cho chuyển đổi từ %qT thành %qT"
@@ -37945,8 +34687,7 @@ msgid "%qD is a usual (non-placement) deallocation function in C++14 (or with -f
msgstr ""
#: cp/call.c:5991
-#, fuzzy, gcc-internal-format
-#| msgid "%qD is normally a non-static function"
+#, gcc-internal-format
msgid "%qD is a usual (non-placement) deallocation function"
msgstr "%qD thưá»ng không phải là hàm non-static"
@@ -37961,34 +34702,29 @@ msgid "no suitable %<operator %s%> for %qT"
msgstr ""
#: cp/call.c:6136
-#, fuzzy, gcc-internal-format
-#| msgid "within this context"
+#, gcc-internal-format
msgid "%q#D is private within this context"
-msgstr "trong ngữ cảnh này"
+msgstr ""
#: cp/call.c:6138
-#, fuzzy, gcc-internal-format
-#| msgid "declared here"
+#, gcc-internal-format
msgid "declared private here"
-msgstr "được khai báo ở đây"
+msgstr "được khai báo ở đây"
#: cp/call.c:6142
-#, fuzzy, gcc-internal-format
-#| msgid "within this context"
+#, gcc-internal-format
msgid "%q#D is protected within this context"
-msgstr "trong ngữ cảnh này"
+msgstr ""
#: cp/call.c:6144
-#, fuzzy, gcc-internal-format
-#| msgid "declared here"
+#, gcc-internal-format
msgid "declared protected here"
-msgstr "được khai báo ở đây"
+msgstr "được khai báo bảo vệ ở đây"
#: cp/call.c:6148
-#, fuzzy, gcc-internal-format
-#| msgid "%q+#D is inaccessible"
+#, gcc-internal-format
msgid "%q#D is inaccessible within this context"
-msgstr "%q+#D là không thể truy cập"
+msgstr "%q#D là không thể truy cập trong ngữ cảnh này"
#: cp/call.c:6201
#, gcc-internal-format
@@ -37996,9 +34732,9 @@ msgid "passing NULL to non-pointer argument %P of %qD"
msgstr ""
#: cp/call.c:6205
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "converting to non-pointer type %qT from NULL"
-msgstr "Cảnh báo vá» chuyển đổi NULL từ/đến má»™t loại không phải hàm trá»"
+msgstr ""
#: cp/call.c:6214
#, gcc-internal-format
@@ -38087,9 +34823,9 @@ msgid "passing objects of non-trivially-copyable type %q#T through %<...%> is co
msgstr ""
#: cp/call.c:6855
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "cannot receive reference type %qT through %<...%>"
-msgstr "không thể khai báo tham chiếu đến %q#T"
+msgstr ""
#: cp/call.c:6865
#, gcc-internal-format
@@ -38117,9 +34853,9 @@ msgid "use of multiversioned function without a default"
msgstr ""
#: cp/call.c:7364
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "passing %qT as %<this%> argument discards qualifiers"
-msgstr "Cảnh báo vá» sá»± gán mà loại bá» Ä‘oạn Ä‘iá»u kiện"
+msgstr ""
#: cp/call.c:7367 cp/call.c:7483 cp/call.c:9164 cp/name-lookup.c:5710
#, gcc-internal-format
@@ -38147,9 +34883,9 @@ msgid "could not find class$ field in java interface type %qT"
msgstr ""
#: cp/call.c:8026
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "constructor delegates to itself"
-msgstr "hằng tham chiếu đến chính nó"
+msgstr ""
#: cp/call.c:8116
#, gcc-internal-format
@@ -38377,9 +35113,9 @@ msgid "no unique final overrider for %qD in %qT"
msgstr ""
#: cp/class.c:2926
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qD can be marked override"
-msgstr "%q+#D không thể được quá tải"
+msgstr "%q#D không thể được tạo đè"
#: cp/class.c:2938
#, gcc-internal-format
@@ -38392,14 +35128,12 @@ msgid "%q+#D marked %<override%>, but does not override"
msgstr ""
#: cp/class.c:3010
-#, fuzzy, gcc-internal-format
-#| msgid "%q+D was hidden"
+#, gcc-internal-format
msgid "%qD was hidden"
msgstr "%q+D bị ẩn"
#: cp/class.c:3012
-#, fuzzy, gcc-internal-format
-#| msgid " by %q+D"
+#, gcc-internal-format
msgid " by %qD"
msgstr " bởi %q+D"
@@ -38414,28 +35148,24 @@ msgid "%q#D invalid; an anonymous struct can only have non-static data members"
msgstr ""
#: cp/class.c:3062 cp/decl2.c:1545
-#, fuzzy, gcc-internal-format
-#| msgid "private member %q+#D in anonymous union"
+#, gcc-internal-format
msgid "private member %q#D in anonymous union"
msgstr "thành viên riêng %q+#D trong hỗn hợp nặc danh"
#: cp/class.c:3065
-#, fuzzy, gcc-internal-format
-#| msgid "private member %q+#D in anonymous struct"
+#, gcc-internal-format
msgid "private member %q#D in anonymous struct"
msgstr "thành viên riêng %q+#D trong cấu trúc nặc danh"
#: cp/class.c:3071 cp/decl2.c:1548
-#, fuzzy, gcc-internal-format
-#| msgid "private member %q+#D in anonymous union"
+#, gcc-internal-format
msgid "protected member %q#D in anonymous union"
-msgstr "thành viên riêng %q+#D trong hỗn hợp nặc danh"
+msgstr "thành viên bảo vệ %q+#D trong hỗn hợp nặc danh"
#: cp/class.c:3074
-#, fuzzy, gcc-internal-format
-#| msgid "private member %q+#D in anonymous struct"
+#, gcc-internal-format
msgid "protected member %q#D in anonymous struct"
-msgstr "thành viên riêng %q+#D trong cấu trúc nặc danh"
+msgstr "thành viên bảo vệ %q+#D trong cấu trúc nặc danh"
#: cp/class.c:3253
#, gcc-internal-format
@@ -38468,10 +35198,9 @@ msgid "width of %qD exceeds its type"
msgstr ""
#: cp/class.c:3469
-#, fuzzy, gcc-internal-format
-#| msgid "%qT is not a nested class of %qT"
+#, gcc-internal-format
msgid "%qD is too small to hold all values of %q#T"
-msgstr "%qT không phải lớp lồng nhau của %qT"
+msgstr ""
#: cp/class.c:3529
#, gcc-internal-format
@@ -38529,15 +35258,14 @@ msgid "member %q+D cannot be declared both %<const%> and %<mutable%>"
msgstr ""
#: cp/class.c:3799
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "member %q+D cannot be declared as a %<mutable%> reference"
-msgstr "%qD được khai báo như là đối số %<virtual%>"
+msgstr ""
#: cp/class.c:3861
-#, fuzzy, gcc-internal-format
-#| msgid "%q#T is not a class"
+#, gcc-internal-format
msgid "field %q#D with same name as class"
-msgstr "%q#T không phải là một lớp"
+msgstr "trưá»ng %q#D vá»›i cùng tên vá»›i lá»›p"
#: cp/class.c:3884
#, gcc-internal-format
@@ -38610,20 +35338,19 @@ msgid " base class %qT of %q+T is non-literal"
msgstr " lớp cơ sở %qT của %q+T là non-literal"
#: cp/class.c:5677
-#, fuzzy, gcc-internal-format
-#| msgid " non-static data member %q+D has non-literal type"
+#, gcc-internal-format
msgid " non-static data member %qD has non-literal type"
-msgstr " thành viên dữ liệu không-tĩnh %q+D có kiểu không-văn-chương"
+msgstr " thành viên dữ liệu không-tĩnh %qD có kiểu không-văn-chương"
#: cp/class.c:5684
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid " non-static data member %qD has volatile type"
-msgstr " thành viên dữ liệu không-tĩnh %q+D có kiểu không-văn-chương"
+msgstr " thành viên dữ liệu không-tĩnh %qD có kiểu hay thay đổi"
#: cp/class.c:5802
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "base class %q#T has accessible non-virtual destructor"
-msgstr " %q+T có một cấu tử non-trivial"
+msgstr "lớp cơ sở %q+T có một hủy tử non-trivial truy cập được"
#: cp/class.c:5831
#, gcc-internal-format
@@ -38658,10 +35385,9 @@ msgid "offset of %qD is not ABI-compliant and may change in a future version of
msgstr ""
#: cp/class.c:6535
-#, fuzzy, gcc-internal-format
-#| msgid "size of array %qE is too large"
+#, gcc-internal-format
msgid "size of type %qT is too large (%qE bytes)"
-msgstr "kích cỡ mảng %qE quá lớn"
+msgstr ""
#: cp/class.c:6744
#, gcc-internal-format
@@ -38674,10 +35400,9 @@ msgid "zero-size array member %qD in an otherwise empty %q#T"
msgstr ""
#: cp/class.c:6751 cp/class.c:6774
-#, fuzzy, gcc-internal-format
-#| msgid "redefinition of %q#T"
+#, gcc-internal-format
msgid "in the definition of %q#T"
-msgstr "định nghĩa lại của %q#T"
+msgstr "trong định nghĩa của %q#T"
#: cp/class.c:6756
#, gcc-internal-format
@@ -38690,10 +35415,9 @@ msgid "flexible array member %qD in an otherwise empty %q#T"
msgstr ""
#: cp/class.c:6771
-#, fuzzy, gcc-internal-format
-#| msgid " %q+#D declared here"
+#, gcc-internal-format
msgid "next member %q#D declared here"
-msgstr " %q+#D đã khai báo ở đây"
+msgstr "thành viên kế %q#D đã khai báo ở đây"
#: cp/class.c:6868 cp/decl.c:12877 cp/parser.c:21917
#, gcc-internal-format
@@ -38786,10 +35510,9 @@ msgid "declaration of %q#D"
msgstr "khai báo của %q#D"
#: cp/class.c:8437
-#, fuzzy, gcc-internal-format
-#| msgid "changes meaning of %qD from %q+#D"
+#, gcc-internal-format
msgid "changes meaning of %qD from %q#D"
-msgstr "thay đổi nghĩa của %qD từ %q+#D"
+msgstr "thay đổi nghĩa của %qD từ %q#D"
#: cp/constexpr.c:95
#, gcc-internal-format
@@ -38847,15 +35570,14 @@ msgid "body of constexpr function %qD not a return-statement"
msgstr ""
#: cp/constexpr.c:830
-#, fuzzy, gcc-internal-format
-#| msgid "%qD is not an function argument"
+#, gcc-internal-format
msgid "%qD is not usable as a constexpr function because:"
-msgstr "%qD không phải là đối số hàm"
+msgstr ""
#: cp/constexpr.c:1185 cp/constexpr.c:4304
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "call to internal function"
-msgstr "hàm nội bộ"
+msgstr "gá»i hàm ná»™i bá»™"
#: cp/constexpr.c:1203
#, gcc-internal-format
@@ -38899,9 +35621,9 @@ msgid "%q+E is not a constant expression"
msgstr "%q+E không phải biểu thức hằng"
#: cp/constexpr.c:1506
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "right operand of shift expression %q+E is negative"
-msgstr "số lượng dịch trái là số âm"
+msgstr "toán hạng phải của biểu thức dịch %q+E là số âm"
#: cp/constexpr.c:1513
#, gcc-internal-format
@@ -38909,19 +35631,19 @@ msgid "right operand of shift expression %q+E is >= than the precision of the le
msgstr ""
#: cp/constexpr.c:1531
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "left operand of shift expression %q+E is negative"
-msgstr "số lượng dịch trái là số âm"
+msgstr ""
#: cp/constexpr.c:1550
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "shift expression %q+E overflows"
-msgstr "biểu thức nguyên %qE không là hằng"
+msgstr ""
#: cp/constexpr.c:1831
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "negative array subscript"
-msgstr "Cần chỉ số mảng tại %C"
+msgstr ""
#: cp/constexpr.c:1844
#, gcc-internal-format
@@ -38929,9 +35651,9 @@ msgid "array subscript out of bound"
msgstr "chỉ số mảng nằm ngoài phạm vi"
#: cp/constexpr.c:1869
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "accessing uninitialized array element"
-msgstr "gán thành viên chỉ-Ä‘á»c %qD"
+msgstr ""
#: cp/constexpr.c:1924 cp/constexpr.c:2003 cp/constexpr.c:3305
#, gcc-internal-format
@@ -38949,9 +35671,9 @@ msgid "accessing %qD member instead of initialized %qD member in constant expres
msgstr ""
#: cp/constexpr.c:1963
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "accessing uninitialized member %qD"
-msgstr "gán thành viên chỉ-Ä‘á»c %qD"
+msgstr ""
#: cp/constexpr.c:2648
#, gcc-internal-format
@@ -38994,9 +35716,9 @@ msgid "%qD does not have integral or enumeration type"
msgstr ""
#: cp/constexpr.c:2828
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "modification of %qE is not a constant-expression"
-msgstr "%qE không phải là biểu thức hằng"
+msgstr "bổ từ %qE không phải là biểu thức hằng"
#: cp/constexpr.c:3349 cp/constexpr.c:4673
#, gcc-internal-format
@@ -39004,9 +35726,9 @@ msgid "temporary of non-literal type %qT in a constant expression"
msgstr ""
#: cp/constexpr.c:3670
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "a reinterpret_cast is not a constant-expression"
-msgstr "yếu tố khởi tạo không phải là một biểu tượng hằng số"
+msgstr ""
#: cp/constexpr.c:3681 cp/constexpr.c:4411
#, gcc-internal-format
@@ -39014,14 +35736,14 @@ msgid "reinterpret_cast from integer to pointer"
msgstr ""
#: cp/constexpr.c:3741 cp/constexpr.c:4562 cp/constexpr.c:4841
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "expression %qE is not a constant-expression"
-msgstr "%qE không phải là biểu thức hằng"
+msgstr "biểu thức %qE không phải là biểu thức hằng"
#: cp/constexpr.c:3811
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "statement is not a constant-expression"
-msgstr "yếu tố khởi tạo không phải là một biểu tượng hằng số"
+msgstr "lệnh không phải biểu thức hằng"
#: cp/constexpr.c:3814
#, gcc-internal-format
@@ -39049,9 +35771,9 @@ msgid "address-of an object %qE with thread local or automatic storage is not a
msgstr ""
#: cp/constexpr.c:4469
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "use of %<this%> in a constant expression"
-msgstr "%qE không phải là biểu thức hằng"
+msgstr ""
#: cp/constexpr.c:4574
#, gcc-internal-format
@@ -39115,9 +35837,9 @@ msgid "start-index and length fields necessary for using array notation with arr
msgstr ""
#: cp/cp-array-notation.c:1441
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "array notation cannot be used with function type"
-msgstr "biểu thức không thể được dùng như một hàm"
+msgstr ""
#: cp/cp-array-notation.c:1451
#, gcc-internal-format
@@ -39480,9 +36202,9 @@ msgid "converting NULL to non-pointer type"
msgstr ""
#: cp/cvt.c:1653
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "default type conversion can't deduce template argument for %qD"
-msgstr "định nghĩa lại của đối số mặc định của %q#D"
+msgstr ""
#: cp/cvt.c:1668
#, gcc-internal-format
@@ -39500,10 +36222,9 @@ msgid "template-parameter-"
msgstr "template-parameter-"
#: cp/decl.c:634
-#, fuzzy, gcc-internal-format
-#| msgid "unused variable %q+D"
+#, gcc-internal-format
msgid "unused variable %qD"
-msgstr "biến chưa được dùng %q+D"
+msgstr "biến chưa được dùng %qD"
#: cp/decl.c:1177
#, gcc-internal-format
@@ -39521,10 +36242,9 @@ msgid "from previous declaration %q+F"
msgstr "từ khai báo trước đây %q+F"
#: cp/decl.c:1255
-#, fuzzy, gcc-internal-format
-#| msgid "declaration of %qD as %<typedef%>"
+#, gcc-internal-format
msgid "redeclaration %q+D differs in %<constexpr%>"
-msgstr "sự khai báo của %qD như là %<typedef%>"
+msgstr "sự khai báo lại %q+D khác trong %<constexpr%>"
#: cp/decl.c:1256
#, gcc-internal-format
@@ -39532,15 +36252,14 @@ msgid "from previous declaration %q+D"
msgstr "từ khai báo trước đây %q+D"
#: cp/decl.c:1285
-#, fuzzy, gcc-internal-format
-#| msgid "cannot declare pointer to %q#T"
+#, gcc-internal-format
msgid "cannot specialize concept %q#D"
-msgstr "không thể khai báo con trỠđến %q#T"
+msgstr ""
#: cp/decl.c:1307
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "redeclaration of %q#D may not have default arguments"
-msgstr "%qD không thể có đối số mặc định"
+msgstr ""
#: cp/decl.c:1354
#, gcc-internal-format
@@ -39553,24 +36272,22 @@ msgid "raw literal operator %q+D conflicts with literal operator template %qD"
msgstr ""
#: cp/decl.c:1381
-#, fuzzy, gcc-internal-format
-#| msgid "function %q+D redeclared as inline"
+#, gcc-internal-format
msgid "function %qD redeclared as inline"
-msgstr "hàm %q+D được khai báo lại là chung dòng (inline)"
+msgstr "hàm %qD được khai báo lại là không chung dòng (inline)"
#: cp/decl.c:1384
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "previous declaration of %qD with attribute noinline"
-msgstr "khai báo trước đây của %q+D ở đây"
+msgstr "khai báo trước đây của %qD với không chung dòng thuộc tính"
#: cp/decl.c:1392
-#, fuzzy, gcc-internal-format
-#| msgid "function %q+D redeclared as inline"
+#, gcc-internal-format
msgid "function %qD redeclared with attribute noinline"
-msgstr "hàm %q+D được khai báo lại là chung dòng (inline)"
+msgstr "hàm %qD được khai báo lại là không chung dòng (inline) thuộc "
#: cp/decl.c:1395
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "previous declaration of %qD was inline"
msgstr "khai báo trước đây của %q+D ở đây"
@@ -39580,9 +36297,9 @@ msgid "shadowing built-in function %q#D"
msgstr ""
#: cp/decl.c:1420 cp/decl.c:1498
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "shadowing library function %q#D"
-msgstr "đang dè lên hàm cuối %q+D"
+msgstr ""
#: cp/decl.c:1428
#, gcc-internal-format
@@ -39590,14 +36307,14 @@ msgid "library function %q#D redeclared as non-function %q#D"
msgstr ""
#: cp/decl.c:1431
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "declaration of %q+#D conflicts with built-in declaration %q#D"
-msgstr "%q#D xung đột với khai báo trước"
+msgstr ""
#: cp/decl.c:1439
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "redeclaration of %<pragma omp declare reduction%>"
-msgstr "sự khai báo của %qD như là mảng của %<auto%>"
+msgstr ""
#: cp/decl.c:1441
#, gcc-internal-format
@@ -39620,14 +36337,14 @@ msgid "previous declaration %q#D"
msgstr "khai báo trước đây %q#D"
#: cp/decl.c:1606
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "conflicting declaration of template %q+#D"
-msgstr "khai báo xung đột %q#D"
+msgstr ""
#: cp/decl.c:1625
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ambiguating new declaration %q+#D"
-msgstr "khai báo xung đột %q#D"
+msgstr ""
#: cp/decl.c:1627 cp/decl.c:1655
#, gcc-internal-format
@@ -39635,25 +36352,24 @@ msgid "old declaration %q#D"
msgstr "khai báo cũ %q#D"
#: cp/decl.c:1637
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "conflicting declaration of C function %q+#D"
-msgstr "khai báo xung đột %q#D"
+msgstr ""
#: cp/decl.c:1653
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ambiguating new declaration of %q+#D"
-msgstr "tái khai báo không hợp lệ cho %q+D"
+msgstr ""
#: cp/decl.c:1663
-#, fuzzy, gcc-internal-format
-#| msgid "conflicting declaration %q#D"
+#, gcc-internal-format
msgid "conflicting declaration %q+#D"
-msgstr "khai báo xung đột %q#D"
+msgstr "khai báo xung đột %q+#D"
#: cp/decl.c:1665
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "previous declaration as %q#D"
-msgstr "khai báo trước đây %q#D"
+msgstr "khai báo trước đây là %q#D"
#. [namespace.alias]
#.
@@ -39663,41 +36379,39 @@ msgstr "khai báo trước đây %q#D"
#. declared as the name of any other entity in any global scope
#. of the program.
#: cp/decl.c:1717
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "conflicting declaration of namespace %q+D"
-msgstr "khai báo xung đột %q#D"
+msgstr ""
#: cp/decl.c:1719
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "previous declaration of namespace %qD here"
-msgstr "khai báo trước đây của %q+D ở đây"
+msgstr "khai báo trước đây của không gian tên %qD ở đây"
#: cp/decl.c:1731
-#, fuzzy, gcc-internal-format
-#| msgid "%q+#D previously defined here"
+#, gcc-internal-format
msgid "%q#D previously defined here"
-msgstr "%q+#D trước được định nghĩa ở đây"
+msgstr "%q#D trước được định nghĩa ở đây"
#: cp/decl.c:1732 cp/name-lookup.c:1168 cp/name-lookup.c:1191
-#, fuzzy, gcc-internal-format
-#| msgid "%q+#D previously declared here"
+#, gcc-internal-format
msgid "%q#D previously declared here"
-msgstr "%q+#D trước định nghĩa ở đây"
+msgstr "%q#D trước định nghĩa ở đây"
#: cp/decl.c:1742
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "prototype specified for %q#D"
-msgstr "chưa ghi rõ loại bộ xử lý cần liên kết"
+msgstr ""
#: cp/decl.c:1744
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "previous non-prototype definition here"
-msgstr "định nghĩa trước ở đây"
+msgstr ""
#: cp/decl.c:1783
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "conflicting declaration of %q+#D with %qL linkage"
-msgstr "khai báo xung đột %q#D"
+msgstr ""
#: cp/decl.c:1786
#, gcc-internal-format
@@ -39720,10 +36434,9 @@ msgid "redundant redeclaration of %qD in same scope"
msgstr ""
#: cp/decl.c:1908
-#, fuzzy, gcc-internal-format
-#| msgid "redefinition of %q+D"
+#, gcc-internal-format
msgid "deleted definition of %q+D"
-msgstr "định nghĩa lại của %q+D"
+msgstr ""
#. From [temp.expl.spec]:
#.
@@ -39739,9 +36452,9 @@ msgid "explicit specialization of %qD after first use"
msgstr ""
#: cp/decl.c:2437
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qD: visibility attribute ignored because it conflicts with previous declaration"
-msgstr "%q#D xung đột với khai báo trước"
+msgstr ""
#. Reject two definitions.
#: cp/decl.c:2687 cp/decl.c:2716 cp/decl.c:2749 cp/decl.c:2766 cp/decl.c:2839
@@ -39814,16 +36527,14 @@ msgid " exits OpenMP structured block"
msgstr " thoát khá»i khối được cấu trúc OpenMP"
#: cp/decl.c:3049
-#, fuzzy, gcc-internal-format
-#| msgid " crosses initialization of %q+#D"
+#, gcc-internal-format
msgid " crosses initialization of %q#D"
msgstr " sự khởi tạo chéo của %q+#D"
#: cp/decl.c:3052 cp/decl.c:3204
-#, fuzzy, gcc-internal-format
-#| msgid " %q+T has a non-trivial destructor"
+#, gcc-internal-format
msgid " enters scope of %q#D which has non-trivial destructor"
-msgstr " %q+T có một cấu tử non-trivial"
+msgstr ""
#: cp/decl.c:3070 cp/decl.c:3212
#, gcc-internal-format
@@ -39846,10 +36557,9 @@ msgid " enters synchronized or atomic statement"
msgstr ""
#: cp/decl.c:3201
-#, fuzzy, gcc-internal-format
-#| msgid " skips initialization of %q+#D"
+#, gcc-internal-format
msgid " skips initialization of %q#D"
-msgstr " bỠqua sự khởi tạo của %q+#D"
+msgstr " bỠqua sự khởi tạo của %q#D"
#: cp/decl.c:3258 cp/parser.c:11735 cp/parser.c:11762
#, gcc-internal-format
@@ -39902,9 +36612,9 @@ msgid "%<typename %T::%D%> names %q#T, which is not a type"
msgstr ""
#: cp/decl.c:3750
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "template parameters do not match template %qD"
-msgstr "đối số mẫu %q+#D"
+msgstr ""
#: cp/decl.c:4483
#, gcc-internal-format
@@ -39967,21 +36677,19 @@ msgid "ISO C++ prohibits anonymous structs"
msgstr ""
#: cp/decl.c:4618
-#, fuzzy, gcc-internal-format
-#| msgid "%<explicit%> can only be specified for constructors"
+#, gcc-internal-format
msgid "%<inline%> can only be specified for functions"
-msgstr "%<explicit%> chỉ có thể được chỉ định cho cấu tử"
+msgstr "%<inline%> chỉ có thể được chỉ định cho hàm"
#: cp/decl.c:4621
-#, fuzzy, gcc-internal-format
-#| msgid "%<explicit%> can only be specified for constructors"
+#, gcc-internal-format
msgid "%<virtual%> can only be specified for functions"
-msgstr "%<explicit%> chỉ có thể được chỉ định cho cấu tử"
+msgstr "%<virtual%> chỉ có thể được chỉ định cho hàm"
#: cp/decl.c:4626
#, gcc-internal-format
msgid "%<friend%> can only be specified inside a class"
-msgstr "%<friend%> chỉ có thể được dùng trong một lớp"
+msgstr "%<friend%> chỉ có thể được chỉ định trong một lớp"
#: cp/decl.c:4629
#, gcc-internal-format
@@ -39994,28 +36702,24 @@ msgid "a storage class can only be specified for objects and functions"
msgstr ""
#: cp/decl.c:4636
-#, fuzzy, gcc-internal-format
-#| msgid "%<explicit%> can only be specified for constructors"
+#, gcc-internal-format
msgid "%<const%> can only be specified for objects and functions"
-msgstr "%<explicit%> chỉ có thể được chỉ định cho cấu tử"
+msgstr "%<const%> chỉ có thể được chỉ định cho lớp và hàm"
#: cp/decl.c:4640
-#, fuzzy, gcc-internal-format
-#| msgid "%<explicit%> can only be specified for constructors"
+#, gcc-internal-format
msgid "%<volatile%> can only be specified for objects and functions"
-msgstr "%<explicit%> chỉ có thể được chỉ định cho cấu tử"
+msgstr "%<volatile%> chỉ có thể được chỉ định cho đối tượng và hàm"
#: cp/decl.c:4644
-#, fuzzy, gcc-internal-format
-#| msgid "%<explicit%> can only be specified for constructors"
+#, gcc-internal-format
msgid "%<__restrict%> can only be specified for objects and functions"
-msgstr "%<explicit%> chỉ có thể được chỉ định cho cấu tử"
+msgstr "%<__restrict%> chỉ có thể được chỉ định cho đối tượng và hàm"
#: cp/decl.c:4648
-#, fuzzy, gcc-internal-format
-#| msgid "%<explicit%> can only be specified for constructors"
+#, gcc-internal-format
msgid "%<__thread%> can only be specified for objects and functions"
-msgstr "%<explicit%> chỉ có thể được chỉ định cho cấu tử"
+msgstr "%<__thread%> chỉ có thể được chỉ định cho đối tượng và hàm"
#: cp/decl.c:4652
#, gcc-internal-format
@@ -40064,19 +36768,19 @@ msgid "definition of %q#D is marked %<dllimport%>"
msgstr ""
#: cp/decl.c:4886
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%q+#D is not a static data member of %q#T"
-msgstr "%qD không phải là thành viên của %qT"
+msgstr "%q+#D không phải là thành viên tĩnh của %q#T"
#: cp/decl.c:4895
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "non-member-template declaration of %qD"
-msgstr "cho khai báo hàm mẫu %q+D"
+msgstr ""
#: cp/decl.c:4896
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "does not match member template declaration here"
-msgstr "%qD không phải là hàm thành viên mẫu"
+msgstr ""
#: cp/decl.c:4909
#, gcc-internal-format
@@ -40099,14 +36803,14 @@ msgid "declaration of %q#D outside of class is not definition"
msgstr ""
#: cp/decl.c:5002
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qD declared %<thread_local%> in %<constexpr%> function"
-msgstr "%qD được khai báo %<constexpr%> ngoài lớp của nó"
+msgstr ""
#: cp/decl.c:5005
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qD declared %<static%> in %<constexpr%> function"
-msgstr "%qD được khai báo %<constexpr%> ngoài lớp của nó"
+msgstr ""
#: cp/decl.c:5070
#, gcc-internal-format
@@ -40149,9 +36853,9 @@ msgid "non-trivial designated initializers not supported"
msgstr ""
#: cp/decl.c:5201
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "C99 designator %qE is not an integral constant-expression"
-msgstr "kích cỡ mảng không phải là biểu thức hằng số nguyên"
+msgstr ""
#: cp/decl.c:5249
#, gcc-internal-format
@@ -40197,9 +36901,9 @@ msgid "uninitialized const %qD"
msgstr ""
#: cp/decl.c:5412
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "uninitialized variable %qD in %<constexpr%> function"
-msgstr "bộ khởi tạo được cung cấp cho hàm"
+msgstr ""
#: cp/decl.c:5422
#, gcc-internal-format
@@ -40273,9 +36977,9 @@ msgid "variable-sized compound literal"
msgstr ""
#: cp/decl.c:6004
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%q#D has incomplete type"
-msgstr "đối số %qD có kiểu chưa đầy đủ"
+msgstr "đối số %q#D có kiểu chưa đầy đủ"
#: cp/decl.c:6024
#, gcc-internal-format
@@ -40308,9 +37012,9 @@ msgid "(an out of class initialization is required)"
msgstr ""
#: cp/decl.c:6373
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "reference %qD is initialized with itself"
-msgstr "%qD được khởi tạo bằng chính nó"
+msgstr "tham chiếu %qD được khởi tạo bằng chính nó"
#: cp/decl.c:6529
#, gcc-internal-format
@@ -40318,10 +37022,9 @@ msgid "assignment (not initialization) in declaration"
msgstr ""
#: cp/decl.c:6681
-#, fuzzy, gcc-internal-format
-#| msgid "variable-sized object may not be initialized"
+#, gcc-internal-format
msgid "variable concept has no initializer"
-msgstr "không thể khởi tạo một đối tượng có kích cỡ biến đổi"
+msgstr ""
#: cp/decl.c:6709
#, gcc-internal-format
@@ -40464,16 +37167,14 @@ msgid "static member function %q#D declared with type qualifiers"
msgstr ""
#: cp/decl.c:7754
-#, fuzzy, gcc-internal-format
-#| msgid "%qD declared as a non-parameter"
+#, gcc-internal-format
msgid "concept %q#D declared with function parameters"
-msgstr "%qD đã được định nghĩa là không có tham số"
+msgstr ""
#: cp/decl.c:7760
-#, fuzzy, gcc-internal-format
-#| msgid "parameter %qD declared with void type"
+#, gcc-internal-format
msgid "concept %q#D declared with a deduced return type"
-msgstr "đối số %qD được khai báo với kiểu void"
+msgstr ""
#: cp/decl.c:7762
#, gcc-internal-format
@@ -40481,9 +37182,9 @@ msgid "concept %q#D with non-%<bool%> return type %qT"
msgstr ""
#: cp/decl.c:7833
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "concept %qD has no definition"
-msgstr "định nghĩa hàm theo cách cũ"
+msgstr ""
#: cp/decl.c:7901
#, gcc-internal-format
@@ -40517,9 +37218,9 @@ msgid "cannot declare %<::main%> to be inline"
msgstr ""
#: cp/decl.c:7988
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "cannot declare %<::main%> to be constexpr"
-msgstr "%qD chưa được khai báo %<constexpr%>"
+msgstr ""
#: cp/decl.c:7990
#, gcc-internal-format
@@ -40537,14 +37238,14 @@ msgid "non-member function %qD cannot have cv-qualifier"
msgstr ""
#: cp/decl.c:8056
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "static member function %qD cannot have ref-qualifier"
-msgstr "Trong hàm bộ phận tĩnh %qs"
+msgstr ""
#: cp/decl.c:8057
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "non-member function %qD cannot have ref-qualifier"
-msgstr "%qs hàm không có đối số"
+msgstr ""
#: cp/decl.c:8074
#, gcc-internal-format
@@ -40597,15 +37298,14 @@ msgid "no %q#D member function declared in class %qT"
msgstr ""
#: cp/decl.c:8431
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "cannot declare %<::main%> to be a global variable"
-msgstr "%qD chưa được khai báo %<constexpr%>"
+msgstr ""
#: cp/decl.c:8439
-#, fuzzy, gcc-internal-format
-#| msgid "a destructor cannot be %<constexpr%>"
+#, gcc-internal-format
msgid "a non-template variable cannot be %<concept%>"
-msgstr "hủy tử không thể là %<constexpr%>"
+msgstr ""
#: cp/decl.c:8446
#, gcc-internal-format
@@ -40708,9 +37408,9 @@ msgid "overflow in array dimension"
msgstr "tràn kích thước mảng"
#: cp/decl.c:8922
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qD declared as array of %qT"
-msgstr "%q+D được khai báo là friend"
+msgstr "%qD được khai báo là mảng của %qT"
#: cp/decl.c:8932
#, gcc-internal-format
@@ -40853,10 +37553,9 @@ msgid "declaration of %qD as parameter"
msgstr "khai báo của %qD như là đối số"
#: cp/decl.c:9491
-#, fuzzy, gcc-internal-format
-#| msgid "%<constexpr%> cannot be used for type declarations"
+#, gcc-internal-format
msgid "%<concept%> cannot appear in a typedef declaration"
-msgstr "%<constexpr%> không thể dùng cho khai báo kiểu"
+msgstr ""
#: cp/decl.c:9497
#, gcc-internal-format
@@ -40874,9 +37573,9 @@ msgid "conflicting specifiers in declaration of %qs"
msgstr ""
#: cp/decl.c:9552
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ISO C++ does not support plain %<complex%> meaning %<double complex%>"
-msgstr "ISO C90 không hỗ trợ kiểu complex"
+msgstr ""
#: cp/decl.c:9600 cp/decl.c:9603 cp/decl.c:9606
#, gcc-internal-format
@@ -40884,14 +37583,14 @@ msgid "ISO C++ forbids declaration of %qs with no type"
msgstr ""
#: cp/decl.c:9622
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<__int%d%> is not supported by this target"
msgstr "%<__int%d%> không được hỗ trợ cho đích này"
#: cp/decl.c:9628
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ISO C++ does not support %<__int%d%> for %qs"
-msgstr "ISO C không hỗ trợ kiểu %<__int%d%>"
+msgstr "ISO C++ không hỗ trợ %<__int%d%> cho %qs"
#: cp/decl.c:9650 cp/decl.c:9670
#, gcc-internal-format
@@ -40954,14 +37653,14 @@ msgid "complex invalid for %qs"
msgstr "số ảo không hợp lệ cho %qs"
#: cp/decl.c:9795
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "member %qD cannot be declared both %<virtual%> and %<static%>"
-msgstr "%qD được khai báo như là đối số %<virtual%>"
+msgstr ""
#: cp/decl.c:9801
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "member %qD cannot be declared both %<virtual%> and %<constexpr%>"
-msgstr "%qD được khai báo như là đối số %<virtual%>"
+msgstr ""
#: cp/decl.c:9811
#, gcc-internal-format
@@ -40979,10 +37678,9 @@ msgid "storage class specifiers invalid in parameter declarations"
msgstr ""
#: cp/decl.c:9826
-#, fuzzy, gcc-internal-format
-#| msgid "parameter %q+D declared %<inline%>"
+#, gcc-internal-format
msgid "a parameter cannot be declared %<concept%>"
-msgstr "đối số %q+D được khai báo %<inline%>"
+msgstr ""
#: cp/decl.c:9831
#, gcc-internal-format
@@ -41040,10 +37738,9 @@ msgid "%qs declared as function returning an array"
msgstr ""
#: cp/decl.c:10063
-#, fuzzy, gcc-internal-format
-#| msgid "%qE attribute requires a void return type"
+#, gcc-internal-format
msgid "requires-clause on return type"
-msgstr "Thuộc tính %qE cần kiểu trả vỠlà void"
+msgstr ""
#: cp/decl.c:10082
#, gcc-internal-format
@@ -41051,14 +37748,14 @@ msgid "%qs function uses %<auto%> type specifier without trailing return type"
msgstr ""
#: cp/decl.c:10085
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "deduced return type only available with -std=c++14 or -std=gnu++14"
-msgstr "inline namespaces chỉ sẵn sàng với -std=c++11 hay -std=gnu++11"
+msgstr "kiểu trả vỠdeduced chỉ sẵn sàng với -std=c++14 hay -std=gnu++14"
#: cp/decl.c:10091
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "virtual function cannot have deduced return type"
-msgstr "hàm không thể trả lại loại __fp16"
+msgstr ""
#: cp/decl.c:10098
#, gcc-internal-format
@@ -41098,15 +37795,14 @@ msgid "constructors may not be cv-qualified"
msgstr ""
#: cp/decl.c:10164
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "destructors may not be ref-qualified"
-msgstr "hủy tử không được có đối số"
+msgstr ""
#: cp/decl.c:10183
-#, fuzzy, gcc-internal-format
-#| msgid "templates may not be %<virtual%>"
+#, gcc-internal-format
msgid "constructors cannot be declared %<virtual%>"
-msgstr "các mẫu không thể là %<virtual%>"
+msgstr ""
#. Cannot be both friend and virtual.
#: cp/decl.c:10198
@@ -41125,9 +37821,9 @@ msgid "can%'t define friend function %qs in a local class definition"
msgstr ""
#: cp/decl.c:10216
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "a conversion function cannot have a trailing return type"
-msgstr "hàm không thể trả lại loại __fp16"
+msgstr ""
#: cp/decl.c:10227
#, gcc-internal-format
@@ -41210,14 +37906,14 @@ msgid "parameter may not have variably modified type %qT"
msgstr ""
#: cp/decl.c:10579
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<explicit%> outside class declaration"
-msgstr "%<virtual%> ngoài khai báo lớp"
+msgstr "%<explicit%> ngoài khai báo lớp"
#: cp/decl.c:10582
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<explicit%> in friend declaration"
-msgstr "%<inline%> trong khai báo trống rỗng"
+msgstr ""
#: cp/decl.c:10585
#, gcc-internal-format
@@ -41315,10 +38011,9 @@ msgid "abstract declarator %qT used as declaration"
msgstr ""
#: cp/decl.c:10884
-#, fuzzy, gcc-internal-format
-#| msgid "implicit declaration of function %qE"
+#, gcc-internal-format
msgid "requires-clause on declaration of non-function type %qT"
-msgstr "khai báo ngầm của hàm %qE"
+msgstr ""
#: cp/decl.c:10902
#, gcc-internal-format
@@ -41326,9 +38021,9 @@ msgid "cannot use %<::%> in parameter declaration"
msgstr "không thể dùng %<::%> trong khai báo đối số"
#: cp/decl.c:10907
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<auto%> parameter not permitted in this context"
-msgstr "%<dynamic_cast%> không thừa nhận với -fno-rtti"
+msgstr ""
#: cp/decl.c:10909
#, gcc-internal-format
@@ -41352,16 +38047,14 @@ msgid "declaration of function %qD in invalid context"
msgstr ""
#: cp/decl.c:11018
-#, fuzzy, gcc-internal-format
-#| msgid "function %qD declared virtual inside a union"
+#, gcc-internal-format
msgid "function %qD declared %<virtual%> inside a union"
-msgstr "hàm %qD được khai báo nằm trong ảo một union"
+msgstr "hàm %qD được khai báo %<virtual%> trong một union"
#: cp/decl.c:11027
-#, fuzzy, gcc-internal-format
-#| msgid "%qD may not be declared as static"
+#, gcc-internal-format
msgid "%qD cannot be declared %<virtual%>, since it is always static"
-msgstr "%qD không được khai báo như là tĩnh"
+msgstr ""
#: cp/decl.c:11043
#, gcc-internal-format
@@ -41374,10 +38067,9 @@ msgid "declaration of %qD as member of %qT"
msgstr "sự khai báo của %qD như là thành viên của %qT"
#: cp/decl.c:11056
-#, fuzzy, gcc-internal-format
-#| msgid "a destructor cannot be %<constexpr%>"
+#, gcc-internal-format
msgid "a destructor cannot be %<concept%>"
-msgstr "hủy tử không thể là %<constexpr%>"
+msgstr "hủy tử không thể là %<concept%>"
#: cp/decl.c:11061
#, gcc-internal-format
@@ -41390,31 +38082,29 @@ msgid "expected qualified name in friend declaration for constructor %qD"
msgstr ""
#: cp/decl.c:11075
-#, fuzzy, gcc-internal-format
-#| msgid "a destructor cannot be %<constexpr%>"
+#, gcc-internal-format
msgid "a constructor cannot be %<concept%>"
-msgstr "hủy tử không thể là %<constexpr%>"
+msgstr "cấu tử không thể là %<concept%>"
#: cp/decl.c:11080
-#, fuzzy, gcc-internal-format
-#| msgid "constructor cannot be static member function"
+#, gcc-internal-format
msgid "a concept cannot be a member function"
msgstr "cấu tử không thể là hàm thành viên tĩnh"
#: cp/decl.c:11089
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "specialization of variable template %qD declared as function"
-msgstr "biến %qD được định nghĩa lại là một hàm"
+msgstr ""
#: cp/decl.c:11092
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "variable template declared here"
-msgstr "biến hay trưá»ng được khai báo là void"
+msgstr ""
#: cp/decl.c:11148
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "field %qD has incomplete type %qT"
-msgstr "đối số %qD có kiểu chưa đầy đủ"
+msgstr ""
#: cp/decl.c:11153
#, gcc-internal-format
@@ -41427,9 +38117,9 @@ msgid "%qE is neither function nor member function; cannot be declared friend"
msgstr ""
#: cp/decl.c:11222
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "static data member %qE declared %<concept%>"
-msgstr " thành viên dữ liệu không-tĩnh %q+D có kiểu không-văn-chương"
+msgstr ""
#: cp/decl.c:11226
#, gcc-internal-format
@@ -41437,10 +38127,9 @@ msgid "constexpr static data member %qD must have an initializer"
msgstr ""
#: cp/decl.c:11234
-#, fuzzy, gcc-internal-format
-#| msgid " non-static data member %q+D has non-literal type"
+#, gcc-internal-format
msgid "non-static data member %qE declared %<concept%>"
-msgstr " thành viên dữ liệu không-tĩnh %q+D có kiểu không-văn-chương"
+msgstr ""
#: cp/decl.c:11238
#, gcc-internal-format
@@ -41549,12 +38238,12 @@ msgid "default argument %qE uses local variable %qD"
msgstr ""
#: cp/decl.c:11679
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid use of cv-qualified type %qT in parameter declaration"
-msgstr "không thể dùng %<::%> trong khai báo đối số"
+msgstr ""
#: cp/decl.c:11683
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid use of type %<void%> in parameter declaration"
msgstr "không thể dùng %<::%> trong khai báo đối số"
@@ -41692,7 +38381,7 @@ msgstr "tiá»n tố %qD cần trả vá» %qT"
#: cp/decl.c:12341
#, gcc-internal-format
msgid "postfix %qD should return %qT"
-msgstr "postfix %qD cần trả vỠ%qT"
+msgstr "hậu tố %qD cần trả vỠ%qT"
#: cp/decl.c:12350
#, gcc-internal-format
@@ -41808,10 +38497,9 @@ msgid "Java class %qT cannot have multiple bases"
msgstr ""
#: cp/decl.c:12914
-#, fuzzy, gcc-internal-format
-#| msgid "%qD is defined with tls model %s"
+#, gcc-internal-format
msgid "%qT defined with multiple direct bases"
-msgstr "%qD được định nghĩa với mô hình tls %s"
+msgstr "%qT được định nghĩa với cơ sở đa trực tiếp"
#: cp/decl.c:12923
#, gcc-internal-format
@@ -41819,10 +38507,9 @@ msgid "Java class %qT cannot have virtual bases"
msgstr ""
#: cp/decl.c:12928
-#, fuzzy, gcc-internal-format
-#| msgid "%qD is defined with tls model %s"
+#, gcc-internal-format
msgid "%qT defined with direct virtual base"
-msgstr "%qD được định nghĩa với mô hình tls %s"
+msgstr "%qT được định nghĩa cơ sở trực tiếp ảo"
#: cp/decl.c:12946
#, gcc-internal-format
@@ -41894,9 +38581,9 @@ msgid "enumerator value %E is outside the range of underlying type %<%T%>"
msgstr ""
#: cp/decl.c:13675
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "return type %q#T is incomplete"
-msgstr "kiểu trả vỠlà một kiểu không hoàn toàn"
+msgstr "kiểu trả vỠ%q#T là một kiểu không hoàn toàn"
#: cp/decl.c:13677
#, gcc-internal-format
@@ -41979,7 +38666,7 @@ msgid "deleting %qT is undefined"
msgstr ""
#: cp/decl2.c:540 cp/pt.c:5166
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "template declaration of %q#D"
msgstr "cho khai báo hàm mẫu %q+D"
@@ -42017,12 +38704,12 @@ msgid "local class %q#T shall not have static data member %q#D"
msgstr ""
#: cp/decl2.c:843
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "static data member %qD in unnamed class"
-msgstr " thành viên dữ liệu không-tĩnh %q+D có kiểu không-văn-chương"
+msgstr "thành viên dữ liệu tĩnh %qD trong lớp không tên"
#: cp/decl2.c:845
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "unnamed class defined here"
msgstr "union được định nghĩa ở đây"
@@ -42047,9 +38734,9 @@ msgid "invalid initializer for member function %qD"
msgstr ""
#: cp/decl2.c:994
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "initializer specified for friend function %qD"
-msgstr "bộ khởi tạo được cung cấp cho hàm"
+msgstr ""
#: cp/decl2.c:997
#, gcc-internal-format
@@ -42092,9 +38779,9 @@ msgid "width of bit-field %qD has non-integral type %qT"
msgstr ""
#: cp/decl2.c:1458
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%q+D static data member inside of declare target directive"
-msgstr "%qD không phải là một thành viên dữ liệu tĩnh của một mẫu lớp"
+msgstr "thành viên dữ liệu tĩnh %q+D bên trong của chỉ thị khai báo đích"
#: cp/decl2.c:1522
#, gcc-internal-format
@@ -42205,9 +38892,9 @@ msgid "%q#D does not refer to the unqualified type, so it is not used for linkag
msgstr ""
#: cp/decl2.c:4280
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%q#D, declared using local type %qT, is used but never defined"
-msgstr "hàm chung dòng %q+D được dùng nhưng chưa bao giỠđược định nghĩa"
+msgstr ""
#: cp/decl2.c:4284
#, gcc-internal-format
@@ -42225,10 +38912,9 @@ msgid "the program should also define %qD"
msgstr ""
#: cp/decl2.c:4838
-#, fuzzy, gcc-internal-format
-#| msgid "inline function %q+D used but never defined"
+#, gcc-internal-format
msgid "inline function %qD used but never defined"
-msgstr "hàm chung dòng %q+D được dùng nhưng chưa bao giỠđược định nghĩa"
+msgstr "hàm chung dòng %qD được dùng nhưng chưa bao giỠđược định nghĩa"
#: cp/decl2.c:5027
#, gcc-internal-format
@@ -42273,9 +38959,9 @@ msgid "lambda expressions only available with -std=c++11 or -std=gnu++11"
msgstr ""
#: cp/error.c:3601
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "C++11 auto only available with -std=c++11 or -std=gnu++11"
-msgstr "inline namespaces chỉ sẵn sàng với -std=c++11 hay -std=gnu++11"
+msgstr "C++11 auto inline chỉ sẵn sàng với -std=c++11 hay -std=gnu++11"
#: cp/error.c:3605
#, gcc-internal-format
@@ -42323,9 +39009,9 @@ msgid "c++11 attributes only available with -std=c++11 or -std=gnu++11"
msgstr ""
#: cp/error.c:3649
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ref-qualifiers only available with -std=c++11 or -std=gnu++11"
-msgstr "inline namespaces chỉ sẵn sàng với -std=c++11 hay -std=gnu++11"
+msgstr "ref-qualifiers chỉ sẵn sàng với -std=c++11 hay -std=gnu++11"
#: cp/error.c:3699
#, gcc-internal-format
@@ -42499,9 +39185,9 @@ msgid "%qT is already a friend of %qT"
msgstr "%qT đã sẵn là bạn của %qT"
#: cp/friend.c:429
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "friend declaration %qD may not have virt-specifiers"
-msgstr "cần các định danh khai báo"
+msgstr ""
#: cp/friend.c:522
#, gcc-internal-format
@@ -42575,9 +39261,9 @@ msgstr ""
#: cp/init.c:758 cp/init.c:775 cp/init.c:782 cp/init.c:2227 cp/init.c:2255
#: cp/method.c:1220 cp/method.c:1231
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%q#D should be initialized"
-msgstr "%qD cần được khởi tạo"
+msgstr "%q#D nên được khởi tạo"
#: cp/init.c:773 cp/init.c:2214 cp/method.c:1228
#, gcc-internal-format
@@ -42585,10 +39271,9 @@ msgid "uninitialized reference member in %q#T"
msgstr ""
#: cp/init.c:950
-#, fuzzy, gcc-internal-format
-#| msgid "%q+D will be initialized after"
+#, gcc-internal-format
msgid "%qD will be initialized after"
-msgstr "%q+D sẽ được khởi tạo sau"
+msgstr "%qD sẽ được khởi tạo sau"
#: cp/init.c:953
#, gcc-internal-format
@@ -42596,10 +39281,9 @@ msgid "base %qT will be initialized after"
msgstr ""
#: cp/init.c:957
-#, fuzzy, gcc-internal-format
-#| msgid " %q+#D"
+#, gcc-internal-format
msgid " %q#D"
-msgstr " %q+#D"
+msgstr " %q#D"
#: cp/init.c:959
#, gcc-internal-format
@@ -42727,9 +39411,9 @@ msgid "uninitialized const member in base %q#T of %q#T using %<new%> without new
msgstr ""
#: cp/init.c:2251
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "uninitialized const member in base %q#T of %q#T"
-msgstr "chuyển đổi từ %qT thành %qT không hợp lệ"
+msgstr ""
#: cp/init.c:2457
#, gcc-internal-format
@@ -42772,9 +39456,9 @@ msgid "uninitialized const in %<new%> of %q#T"
msgstr ""
#: cp/init.c:2784
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qT isn%'t a valid Java class type"
-msgstr "không phải là một tập tin .class Java hợp lệ"
+msgstr ""
#: cp/init.c:2797
#, gcc-internal-format
@@ -42897,9 +39581,9 @@ msgid "cannot capture %qE by reference"
msgstr ""
#: cp/lambda.c:499
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "capture by copy of incomplete type %qT"
-msgstr "kiểu trả vỠlà một kiểu không hoàn toàn"
+msgstr ""
#: cp/lambda.c:523
#, gcc-internal-format
@@ -43042,16 +39726,14 @@ msgid "union member %q+D with non-trivial %qD"
msgstr ""
#: cp/method.c:1132
-#, fuzzy, gcc-internal-format
-#| msgid "a destructor cannot be %<constexpr%>"
+#, gcc-internal-format
msgid "defaulted constructor calls non-constexpr %qD"
-msgstr "hủy tử không thể là %<constexpr%>"
+msgstr ""
#: cp/method.c:1196
-#, fuzzy, gcc-internal-format
-#| msgid "initializer for %q+#D is invalid"
+#, gcc-internal-format
msgid "initializer for %q#D is invalid"
-msgstr "bộ khởi tạo cho %q+#D không hợp lệ"
+msgstr "bộ khởi tạo cho %q#D không hợp lệ"
#: cp/method.c:1248
#, gcc-internal-format
@@ -43059,9 +39741,9 @@ msgid "defaulted default constructor does not initialize %q#D"
msgstr ""
#: cp/method.c:1259
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "copying non-static data member %q#D of rvalue reference type"
-msgstr " thành viên dữ liệu không-tĩnh %q+D có kiểu không-văn-chương"
+msgstr ""
#. A trivial constructor doesn't have any NSDMI.
#: cp/method.c:1417
@@ -43099,9 +39781,9 @@ msgid "%q#F is implicitly deleted because its exception-specification does not m
msgstr ""
#: cp/method.c:1961
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "defaulted declaration %q+D"
-msgstr "khai báo cũ %q#D"
+msgstr "khai báo được mặc định %q+D"
#: cp/method.c:1963
#, gcc-internal-format
@@ -43164,10 +39846,9 @@ msgid "declaration of %q#D with C language linkage"
msgstr ""
#: cp/name-lookup.c:872 cp/name-lookup.c:887
-#, fuzzy, gcc-internal-format
-#| msgid "%q#D conflicts with a previous declaration"
+#, gcc-internal-format
msgid "conflicts with previous declaration %q#D"
-msgstr "%q#D xung đột với khai báo trước"
+msgstr "xung đột với khai báo trước %q#D"
#: cp/name-lookup.c:875
#, gcc-internal-format
@@ -43180,10 +39861,9 @@ msgid "type mismatch with previous external decl of %q#D"
msgstr ""
#: cp/name-lookup.c:989
-#, fuzzy, gcc-internal-format
-#| msgid "previous declaration of %q+#D"
+#, gcc-internal-format
msgid "previous external decl of %q#D"
-msgstr "khai báo trước đây của %q+#D"
+msgstr ""
#: cp/name-lookup.c:1077
#, gcc-internal-format
@@ -43191,10 +39871,9 @@ msgid "extern declaration of %q#D doesn%'t match"
msgstr ""
#: cp/name-lookup.c:1079
-#, fuzzy, gcc-internal-format
-#| msgid "global declaration %q+#D"
+#, gcc-internal-format
msgid "global declaration %q#D"
-msgstr "khai báo toàn cục %q+#D"
+msgstr "khai báo toàn cục %q#D"
#: cp/name-lookup.c:1131 cp/name-lookup.c:1201
#, gcc-internal-format
@@ -43212,9 +39891,9 @@ msgid "declaration of %qD shadows a previous local"
msgstr ""
#: cp/name-lookup.c:1251
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "declaration of %qD shadows a member of %qT"
-msgstr "sự khai báo của %qD như là thành viên của %qT"
+msgstr "sự khai báo của các bóng %qD như là thành viên của %qT"
#: cp/name-lookup.c:1406
#, gcc-internal-format
@@ -43222,14 +39901,12 @@ msgid "name lookup of %qD changed"
msgstr ""
#: cp/name-lookup.c:1408
-#, fuzzy, gcc-internal-format
-#| msgid " matches this %q+D under ISO standard rules"
+#, gcc-internal-format
msgid " matches this %qD under ISO standard rules"
msgstr " khớp %q+D này dưới quy tắc ISO tiêu chuẩn"
#: cp/name-lookup.c:1411
-#, fuzzy, gcc-internal-format
-#| msgid " matches this %q+D under old rules"
+#, gcc-internal-format
msgid " matches this %qD under old rules"
msgstr " khớp %q+D này dưới quy tắc cũ"
@@ -43279,9 +39956,9 @@ msgid "conflicts with function declaration %q#D"
msgstr ""
#: cp/name-lookup.c:2507
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qT is not a namespace or unscoped enum"
-msgstr "%qT không phải là một namespace"
+msgstr "%qT không phải là một namespace hay enum không hoạt vi"
#. 7.3.3/5
#. A using-declaration shall not name a template-id.
@@ -43327,7 +40004,7 @@ msgstr "%<%T::%D%> tên hủy tử"
#: cp/name-lookup.c:3361
#, gcc-internal-format
msgid "%<%T::%D%> names constructor in %qT"
-msgstr ""
+msgstr "%<%T::%D%> các tên cấu tử trong %qT"
#: cp/name-lookup.c:3412
#, gcc-internal-format
@@ -43360,9 +40037,9 @@ msgid "%qD attribute is meaningless since members of the anonymous namespace get
msgstr ""
#: cp/name-lookup.c:3652
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ignoring %qD attribute on non-inline namespace"
-msgstr "Thuộc tính %qE chỉ được áp dụng cho các biến"
+msgstr ""
#: cp/name-lookup.c:3658
#, gcc-internal-format
@@ -43442,9 +40119,9 @@ msgstr ""
#: cp/parser.c:1387 cp/parser.c:36371 cp/parser.c:36476 cp/parser.c:36501
#: cp/parser.c:36558
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<#pragma acc routine%> not followed by a function declaration or definition"
-msgstr "%<#pragma align%> phải xuất hiện trước khai báo của %D, đang lỠđi"
+msgstr ""
#: cp/parser.c:2773
#, gcc-internal-format
@@ -43664,9 +40341,9 @@ msgid "(perhaps %<typename %T::%E%> was intended)"
msgstr ""
#: cp/parser.c:3218
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qE in namespace %qE does not name a template type"
-msgstr "%qT không phải là một kiểu mẫu"
+msgstr ""
#: cp/parser.c:3222
#, gcc-internal-format
@@ -43755,31 +40432,29 @@ msgid "expected declaration"
msgstr "cần khai báo"
#: cp/parser.c:4607 cp/parser.c:4622
-#, fuzzy, gcc-internal-format
-#| msgid "expected operator"
+#, gcc-internal-format
msgid "expected binary operator"
-msgstr "cần toán tử"
+msgstr "cần toán tử hai ngôi"
#: cp/parser.c:4628
-#, fuzzy, gcc-internal-format
-#| msgid "expected %<...%>"
+#, gcc-internal-format
msgid "expected ..."
-msgstr "cần %<…%>"
+msgstr "cần ..."
#: cp/parser.c:4638
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "binary expression in operand of fold-expression"
-msgstr "Gặp loại saio trong biểu thức bất biến"
+msgstr ""
#: cp/parser.c:4641
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "conditional expression in operand of fold-expression"
-msgstr "Gặp loại saio trong biểu thức bất biến"
+msgstr ""
#: cp/parser.c:4649
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "mismatched operator in fold-expression"
-msgstr "không khớp kiểu trong biểu thức địa chỉ"
+msgstr ""
#: cp/parser.c:4753
#, gcc-internal-format
@@ -43797,9 +40472,9 @@ msgid "statement-expressions are not allowed outside functions nor in template-a
msgstr ""
#: cp/parser.c:4885
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "fold-expressions only available with -std=c++1z or -std=gnu++1z"
-msgstr "inline namespaces chỉ sẵn sàng với -std=c++11 hay -std=gnu++11"
+msgstr "fold-expressions chỉ sẵn sàng với -std=c++1z hay -std=gnu++1z"
#: cp/parser.c:4943 cp/parser.c:5114 cp/parser.c:5292
#, gcc-internal-format
@@ -43867,14 +40542,14 @@ msgid "decltype evaluates to %qT, which is not a class or enumeration type"
msgstr ""
#: cp/parser.c:5979
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "function template-id %qD in nested-name-specifier"
-msgstr "cần nested-name-specifier"
+msgstr ""
#: cp/parser.c:5987
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "variable template-id %qD in nested-name-specifier"
-msgstr "cần nested-name-specifier"
+msgstr ""
#: cp/parser.c:6091 cp/typeck.c:2605 cp/typeck.c:2625
#, gcc-internal-format
@@ -43912,9 +40587,9 @@ msgid "two consecutive %<[%> shall only introduce an attribute"
msgstr ""
#: cp/parser.c:7117
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "braced list index is not allowed with array notation"
-msgstr "không cho phép sử dụng -client_name với -dynamiclib"
+msgstr ""
#: cp/parser.c:7210
#, gcc-internal-format
@@ -43967,10 +40642,9 @@ msgid "initialization of new-expression for type %<auto%> requires exactly one e
msgstr ""
#: cp/parser.c:8165
-#, fuzzy, gcc-internal-format
-#| msgid "Expected expression type"
+#, gcc-internal-format
msgid "expected expression-list or type-id"
-msgstr "Mong đợi một loại biểu thức"
+msgstr ""
#: cp/parser.c:8194
#, gcc-internal-format
@@ -44008,9 +40682,9 @@ msgid "lambda-expression in unevaluated context"
msgstr ""
#: cp/parser.c:9693
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "lambda-expression in template-argument"
-msgstr "cần template-argument"
+msgstr ""
#: cp/parser.c:9844
#, gcc-internal-format
@@ -44023,9 +40697,9 @@ msgid "explicit by-copy capture of %<this%> redundant with by-copy capture defau
msgstr ""
#: cp/parser.c:9902
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "lambda capture initializers only available with -std=c++14 or -std=gnu++14"
-msgstr "inline namespaces chỉ sẵn sàng với -std=c++11 hay -std=gnu++11"
+msgstr "khởi tạo chụp lambda chỉ sẵn sàng với -std=c++14 hay -std=gnu++14"
#: cp/parser.c:9909
#, gcc-internal-format
@@ -44038,10 +40712,9 @@ msgid "capture of non-variable %qD "
msgstr ""
#: cp/parser.c:9935 cp/parser.c:9945 cp/semantics.c:3323 cp/semantics.c:3333
-#, fuzzy, gcc-internal-format
-#| msgid "%q+#D declared here"
+#, gcc-internal-format
msgid "%q#D declared here"
-msgstr "%q+#D được khai báo ở đây"
+msgstr "%q#D được khai báo ở đây"
#: cp/parser.c:9941
#, gcc-internal-format
@@ -44059,9 +40732,9 @@ msgid "explicit by-reference capture of %qD redundant with by-reference capture
msgstr ""
#: cp/parser.c:10031
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "lambda templates are only available with -std=c++14 or -std=gnu++14"
-msgstr "inline namespaces chỉ sẵn sàng với -std=c++11 hay -std=gnu++11"
+msgstr "mẫu lambda chỉ sẵn sàng với -std=c++14 hay -std=gnu++14"
#: cp/parser.c:10061
#, gcc-internal-format
@@ -44134,14 +40807,14 @@ msgid "expected iteration-statement"
msgstr "cần iteration-statement"
#: cp/parser.c:11667
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "range-based %<for%> loops only available with -std=c++11 or -std=gnu++11"
-msgstr "inline namespaces chỉ sẵn sàng với -std=c++11 hay -std=gnu++11"
+msgstr "vòng lặp range-based %<for%> chỉ sẵn sàng với -std=c++11 hay -std=gnu++11"
#: cp/parser.c:11741
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "break statement used with Cilk Plus for loop"
-msgstr "câu lệnh “continue†nằm ở ngoài một vòng lặp"
+msgstr ""
#: cp/parser.c:11798
#, gcc-internal-format
@@ -44222,9 +40895,9 @@ msgid "invalid linkage-specification"
msgstr "đặc tả linkage không hợp lệ"
#: cp/parser.c:12999
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "static_assert without a message only available with -std=c++1z or -std=gnu++1z"
-msgstr "inline namespaces chỉ sẵn sàng với -std=c++11 hay -std=gnu++11"
+msgstr "static_assert không có lá»i nhắn chỉ sẵn sàng vá»›i -std=c++1z hay -std=gnu++1z"
#: cp/parser.c:13193
#, gcc-internal-format
@@ -44232,9 +40905,9 @@ msgid "types may not be defined in %<decltype%> expressions"
msgstr ""
#: cp/parser.c:13336
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "types may not be defined in a conversion-type-id"
-msgstr "%<tree%> không được định nghÄ©a là kiểu con trá»"
+msgstr ""
#: cp/parser.c:13363
#, gcc-internal-format
@@ -44292,9 +40965,9 @@ msgid "expected empty string after %<operator%> keyword"
msgstr ""
#: cp/parser.c:14004
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid encoding prefix in literal operator"
-msgstr "toán hạng không hợp lệ trong phép toán tam nguyên"
+msgstr ""
#: cp/parser.c:14027
#, gcc-internal-format
@@ -44308,16 +40981,14 @@ msgid "keyword %<export%> not implemented, and will be ignored"
msgstr ""
#: cp/parser.c:14242
-#, fuzzy, gcc-internal-format
-#| msgid "invalid constraints for operand"
+#, gcc-internal-format
msgid "invalid constrained type parameter"
-msgstr "sai đặt ràng buộc cho toán hạng"
+msgstr ""
#: cp/parser.c:14250
-#, fuzzy, gcc-internal-format
-#| msgid "invalid parameter %qs"
+#, gcc-internal-format
msgid "cv-qualified type parameter"
-msgstr "tham số sai %qs"
+msgstr ""
#: cp/parser.c:14335
#, gcc-internal-format
@@ -44325,9 +40996,9 @@ msgid "variadic constraint introduced without %<...%>"
msgstr ""
#: cp/parser.c:14399
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid use of %<auto%> in default template argument"
-msgstr "dùng %<auto%> không hợp lệ"
+msgstr "dùng %<auto%> không hợp lệ trong đối số mẫu mặc định"
#: cp/parser.c:14634 cp/parser.c:14720 cp/parser.c:20535
#, gcc-internal-format
@@ -44478,9 +41149,8 @@ msgstr "%qD là một mẫu liệt kê"
#: cp/parser.c:17049
#, fuzzy, gcc-internal-format
-#| msgid "%qT is not an enumeration type"
msgid "%qD does not name an enumeration in %qT"
-msgstr "%qT không phải một kiểu enumeration"
+msgstr "%qD không phải một kiểu enumeration trong %qT"
#: cp/parser.c:17064
#, gcc-internal-format
@@ -44543,28 +41213,24 @@ msgid "expected namespace-name"
msgstr "cần namespace-name"
#: cp/parser.c:17517
-#, fuzzy, gcc-internal-format
-#| msgid "%<namespace%> definition is not allowed here"
+#, gcc-internal-format
msgid "a nested namespace definition cannot have attributes"
-msgstr "%<namespace%> không cho phép định nghĩa ở đây"
+msgstr ""
#: cp/parser.c:17520
#, fuzzy, gcc-internal-format
-#| msgid "inline namespaces only available with -std=c++11 or -std=gnu++11"
msgid "nested namespace definitions only available with -std=c++1z or -std=gnu++1z"
msgstr "inline namespaces chỉ sẵn sàng với -std=c++11 hay -std=gnu++11"
#: cp/parser.c:17523
-#, fuzzy, gcc-internal-format
-#| msgid "Warn when an inlined function cannot be inlined"
+#, gcc-internal-format
msgid "a nested namespace definition cannot be inline"
-msgstr "Cảnh báo khi không không thể dùng hàm chung dòng"
+msgstr ""
#: cp/parser.c:17531
-#, fuzzy, gcc-internal-format
-#| msgid "expected identifier"
+#, gcc-internal-format
msgid "nested identifier required"
-msgstr "cần định danh"
+msgstr ""
#: cp/parser.c:17559
#, gcc-internal-format
@@ -44633,9 +41299,9 @@ msgid "attributes after parenthesized initializer ignored"
msgstr ""
#: cp/parser.c:18595
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "non-function %qD declared as implicit template"
-msgstr "hàm %q+D được khai báo lại là chung dòng (inline)"
+msgstr ""
#: cp/parser.c:19040
#, gcc-internal-format
@@ -44704,14 +41370,14 @@ msgid "duplicate cv-qualifier"
msgstr "trùng cv-qualifier"
#: cp/parser.c:19551
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "multiple ref-qualifiers"
-msgstr "trùng cv-qualifier"
+msgstr "đa ref-qualifiers"
#: cp/parser.c:19588
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%E requires %<-fgnu-tm%>"
-msgstr "%<-mips3d%> cần %<-mpaired-single%>"
+msgstr "%E cần %<-fgnu-tm%>"
#: cp/parser.c:19644
#, gcc-internal-format
@@ -44729,9 +41395,9 @@ msgid "types may not be defined in template arguments"
msgstr "các kiểu không nên được định nghĩa trong đối số mẫu"
#: cp/parser.c:19898
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid use of %<auto%> in template argument"
-msgstr "dùng %<auto%> không hợp lệ"
+msgstr "dùng %<auto%> không hợp lệ trong đối số mẫu"
#: cp/parser.c:19986
#, gcc-internal-format
@@ -44741,7 +41407,7 @@ msgstr "cần type-specifier"
#: cp/parser.c:20292
#, gcc-internal-format
msgid "expected %<,%> or %<...%>"
-msgstr "cần %<,%> hoặc %<…%>"
+msgstr "cần %<,%> hoặc %<...%>"
#: cp/parser.c:20367
#, gcc-internal-format
@@ -44934,9 +41600,9 @@ msgid "dynamic exception specifications are deprecated in C++0x; use %<noexcept%
msgstr ""
#: cp/parser.c:23089
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid use of %<auto%> in exception-specification"
-msgstr "dùng %<auto%> không hợp lệ"
+msgstr "dùng %<auto%> không hợp lệ trong đặc tả ngoại lệ"
#: cp/parser.c:23128
#, gcc-internal-format
@@ -44959,9 +41625,9 @@ msgid "%<deprecated%> is a C++14 feature; use %<gnu::deprecated%>"
msgstr ""
#: cp/parser.c:23934
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "attribute noreturn can appear at most once in an attribute-list"
-msgstr "Thuộc tính %qE bị lỠđi với các kiểu"
+msgstr ""
#: cp/parser.c:23938
#, gcc-internal-format
@@ -44969,10 +41635,9 @@ msgid "attribute deprecated can appear at most once in an attribute-list"
msgstr ""
#: cp/parser.c:24224
-#, fuzzy, gcc-internal-format
-#| msgid "expression cannot be used as a function"
+#, gcc-internal-format
msgid "a requires expression cannot appear outside a template"
-msgstr "biểu thức không thể được dùng như một hàm"
+msgstr ""
#: cp/parser.c:24902
#, gcc-internal-format
@@ -45014,10 +41679,9 @@ msgid "literal operator template %qD has invalid parameter list. Expected non-t
msgstr ""
#: cp/parser.c:25483
-#, fuzzy, gcc-internal-format
-#| msgid "Enable multiply instructions"
+#, gcc-internal-format
msgid "empty introduction-list"
-msgstr "Bật câu lệnh nhân lên"
+msgstr ""
#: cp/parser.c:25507
#, gcc-internal-format
@@ -45325,12 +41989,12 @@ msgid "invalid type for property"
msgstr "kiểu không hợp lệ cho thuộc tính"
#: cp/parser.c:30362
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<wait%> expression must be integral"
-msgstr "chỉ số %<device%> phải là số nguyên"
+msgstr "biểu thức %<wait%> phải là số nguyên"
#: cp/parser.c:31056
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid reduction-identifier"
msgstr "bộ khởi tạo sai"
@@ -45340,9 +42004,9 @@ msgid "parenthesized initialization is not allowed in OpenMP %<for%> loop"
msgstr ""
#: cp/parser.c:33257
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "parenthesized initialization is not allowed in for-loop"
-msgstr "không cho phép định nghĩa hàm tại đây"
+msgstr ""
#: cp/parser.c:33327
#, gcc-internal-format
@@ -45360,10 +42024,9 @@ msgid "not enough collapsed for loops"
msgstr ""
#: cp/parser.c:33917
-#, fuzzy, gcc-internal-format
-#| msgid "%<#pragma omp barrier%> may only be used in compound statements"
+#, gcc-internal-format
msgid "%<#pragma omp ordered%> with %<depend%> clause may only be used in compound statements"
-msgstr "%<#pragma omp barrier%> chỉ có thể sử dụng trong các biểu thức phức hợp"
+msgstr "%<#pragma omp ordered%> với mệnh đỠ%<depend%> chỉ có thể sử dụng trong các biểu thức phức hợp"
#: cp/parser.c:34703
#, gcc-internal-format
@@ -45386,9 +42049,9 @@ msgid "invalid initializer clause"
msgstr "mệnh đỠkhởi tạo không hợp lệ"
#: cp/parser.c:35894
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "expected id-expression (arguments)"
-msgstr "cần id-expression"
+msgstr "cần id-expression (các đối số)"
#: cp/parser.c:35906
#, gcc-internal-format
@@ -45436,10 +42099,9 @@ msgid "%<#pragma acc routine%> does not refer to a namespace scope function"
msgstr ""
#: cp/parser.c:36436
-#, fuzzy, gcc-internal-format
-#| msgid "%<#pragma GCC option%> is not a string"
+#, gcc-internal-format
msgid "%<#pragma acc routine%> does not refer to a function"
-msgstr "%<#pragma GCC option%> không phải là một chuỗi"
+msgstr ""
#. cancel-and-throw is unimplemented.
#: cp/parser.c:36766
@@ -45463,14 +42125,14 @@ msgid "junk at end of %<#pragma GCC pch_preprocess%>"
msgstr ""
#: cp/parser.c:37040
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid grainsize for _Cilk_for"
-msgstr "sai đặt ràng buộc cho toán hạng"
+msgstr ""
#: cp/parser.c:37249
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<#pragma GCC ivdep%> must be inside a function"
-msgstr "biểu thức không thể được dùng như một hàm"
+msgstr ""
#: cp/parser.c:37270
#, gcc-internal-format
@@ -45503,9 +42165,9 @@ msgid "expected %<,%> or %<)%> after %qE"
msgstr "cần %<,%> hoặc %<)%> sau %qE"
#: cp/parser.c:37918
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "implicit templates may not be %<virtual%>"
-msgstr "các mẫu không thể là %<virtual%>"
+msgstr "các mẫu ngầm không nên là %<virtual%>"
#: cp/pt.c:294
#, gcc-internal-format
@@ -45538,10 +42200,9 @@ msgid "specialization of %qD in different namespace"
msgstr ""
#: cp/pt.c:791 cp/pt.c:1018
-#, fuzzy, gcc-internal-format
-#| msgid " from definition of %q+#D"
+#, gcc-internal-format
msgid " from definition of %q#D"
-msgstr " từ định nghĩa của %q+#D"
+msgstr " từ định nghĩa của %q#D"
#: cp/pt.c:808
#, gcc-internal-format
@@ -45606,7 +42267,7 @@ msgid "%qD is not a function template"
msgstr "%qD không phải là một mẫu hàm"
#: cp/pt.c:2090
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qD is not a variable template"
msgstr "%qD không phải là một biến"
@@ -45626,9 +42287,9 @@ msgid "ambiguous template specialization %qD for %q+D"
msgstr ""
#: cp/pt.c:2568
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "variable templates only available with -std=c++14 or -std=gnu++14"
-msgstr "inline namespaces chỉ sẵn sàng với -std=c++11 hay -std=gnu++11"
+msgstr "mẫu biến chỉ sẵn sàng với -std=c++14 hay -std=gnu++14"
#: cp/pt.c:2577
#, gcc-internal-format
@@ -45673,10 +42334,9 @@ msgid "explicit specialization of %qD must be introduced by %<template <>%>"
msgstr ""
#: cp/pt.c:2709
-#, fuzzy, gcc-internal-format
-#| msgid "function definition declared %<auto%>"
+#, gcc-internal-format
msgid "explicit specialization declared %<concept%>"
-msgstr "định nghĩa hàm được khai báo là %<auto%>"
+msgstr ""
#: cp/pt.c:2740
#, gcc-internal-format
@@ -45722,10 +42382,9 @@ msgid "%qD is not declared in %qD"
msgstr "%qD chưa được khai báo trong %qD"
#: cp/pt.c:3053
-#, fuzzy, gcc-internal-format
-#| msgid "implicit declaration of function %qE"
+#, gcc-internal-format
msgid "explicit specialization of function concept %qD"
-msgstr "khai báo ngầm của hàm %qE"
+msgstr ""
#: cp/pt.c:3648
#, gcc-internal-format
@@ -45758,32 +42417,29 @@ msgid " <anonymous>"
msgstr " <nặc danh>"
#: cp/pt.c:3897
-#, fuzzy, gcc-internal-format
-#| msgid "declaration of %qD as parameter"
+#, gcc-internal-format
msgid "declaration of template parameter %q+D shadows template parameter"
-msgstr "khai báo của %qD như là đối số"
+msgstr ""
#: cp/pt.c:3900
-#, fuzzy, gcc-internal-format
-#| msgid "declaration of %qD as parameter"
+#, gcc-internal-format
msgid "declaration of %q+#D shadows template parameter"
-msgstr "khai báo của %qD như là đối số"
+msgstr ""
#: cp/pt.c:3902
-#, fuzzy, gcc-internal-format
-#| msgid "template parameter %q+#D"
+#, gcc-internal-format
msgid "template parameter %qD declared here"
-msgstr "đối số mẫu %q+#D"
+msgstr ""
#: cp/pt.c:4441
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "specialization of variable concept %q#D"
-msgstr "biến %qD được định nghĩa lại là một hàm"
+msgstr ""
#: cp/pt.c:4500
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "template parameters not deducible in partial specialization:"
-msgstr "các đối số tạm không thể là bạn"
+msgstr ""
#: cp/pt.c:4524
#, gcc-internal-format
@@ -45798,7 +42454,7 @@ msgstr ""
#: cp/pt.c:4529 cp/pt.c:4540
#, gcc-internal-format
msgid "primary template here"
-msgstr "Mẫu nguyên gốc ở đây"
+msgstr "mẫu nguyên gốc ở đây"
#: cp/pt.c:4537
#, gcc-internal-format
@@ -45827,9 +42483,9 @@ msgid_plural "type %qT of template argument %qE depends on template parameters"
msgstr[0] ""
#: cp/pt.c:4710
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "declaration of %qD ambiguates earlier template instantiation for %qD"
-msgstr "%s: Trong minh dụ của %q#D:\n"
+msgstr ""
#: cp/pt.c:4714
#, gcc-internal-format
@@ -45875,10 +42531,9 @@ msgid "default argument for template parameter for class enclosing %qD"
msgstr ""
#: cp/pt.c:5114
-#, fuzzy, gcc-internal-format
-#| msgid "parameter %qD declared void"
+#, gcc-internal-format
msgid "template %qD declared"
-msgstr "đối số %qD được khai báo là void"
+msgstr ""
#: cp/pt.c:5121
#, gcc-internal-format
@@ -45952,11 +42607,10 @@ msgid_plural "redeclared with %d template parameters"
msgstr[0] ""
#: cp/pt.c:5533
-#, fuzzy, gcc-internal-format
-#| msgid "previous declaration %q+#D here"
+#, gcc-internal-format
msgid "previous declaration %qD used %d template parameter"
msgid_plural "previous declaration %qD used %d template parameters"
-msgstr[0] "khai báo trước đây %q+#D ở đây"
+msgstr[0] ""
#: cp/pt.c:5570
#, gcc-internal-format
@@ -45983,15 +42637,14 @@ msgid "original definition appeared here"
msgstr "định nghĩa nguyên bản xuất hiện ở đây"
#: cp/pt.c:5608
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "redeclaration %q#D with different constraints"
-msgstr "khai báo trước đây của %q+D ở đây"
+msgstr ""
#: cp/pt.c:5611
-#, fuzzy, gcc-internal-format
-#| msgid "original definition appeared here"
+#, gcc-internal-format
msgid "original declaration appeared here"
-msgstr "định nghĩa nguyên bản xuất hiện ở đây"
+msgstr ""
#: cp/pt.c:5866 cp/pt.c:5917
#, gcc-internal-format
@@ -46252,19 +42905,17 @@ msgstr " cần mẫu lớp, nhưng lại nhận được %qT"
#: cp/pt.c:7183
#, gcc-internal-format
msgid " expected a template of type %qD, got %qT"
-msgstr " cần hằng của kiểu %qD, nhưng lại nhận được %qT"
+msgstr " cần mẫu kiểu %qD, nhưng lại nhận được %qT"
#: cp/pt.c:7197
-#, fuzzy, gcc-internal-format
-#| msgid "got %d template parameters for %q#D"
+#, gcc-internal-format
msgid "constraint mismatch at argument %d in template parameter list for %qD"
-msgstr "nhận được %d đối số mẫu cho %q#D"
+msgstr ""
#: cp/pt.c:7200
-#, fuzzy, gcc-internal-format
-#| msgid " expected a type, got %qE"
+#, gcc-internal-format
msgid " expected %qD but got %qD"
-msgstr " cần kiểu, nhưng lại nhận %qE"
+msgstr " cần %qD nhưng lại nhận %qD"
#. Not sure if this is reachable, but it doesn't hurt
#. to be robust.
@@ -46294,10 +42945,9 @@ msgid "wrong number of template arguments (%d, should be at least %d)"
msgstr "sai số lượng đối số mẫu (%d, cần ít nhất phải là %d)"
#: cp/pt.c:7542
-#, fuzzy, gcc-internal-format
-#| msgid "provided for %q+D"
+#, gcc-internal-format
msgid "provided for %qD"
-msgstr "được cung cấp cho %q+D"
+msgstr "được cung cấp cho %qD"
#: cp/pt.c:7567
#, gcc-internal-format
@@ -46335,10 +42985,9 @@ msgid "for template declaration %q+D"
msgstr "cho khai báo hàm mẫu %q+D"
#: cp/pt.c:8334
-#, fuzzy, gcc-internal-format
-#| msgid "internal consistency failure"
+#, gcc-internal-format
msgid "template constraint failure"
-msgstr "tính nhất quán ná»™i tại gặp lá»—i nghiêm trá»ng"
+msgstr "ràng buá»™c mẫu gặp lá»—i nghiêm trá»ng"
#: cp/pt.c:8676
#, gcc-internal-format
@@ -46429,14 +43078,14 @@ msgid "forming reference to reference type %qT"
msgstr ""
#: cp/pt.c:13211
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "forming pointer to qualified function type %qT"
-msgstr "định nghĩa không hợp lệ của kiểu hạn định %qT"
+msgstr ""
#: cp/pt.c:13214
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "forming reference to qualified function type %qT"
-msgstr "định nghĩa không hợp lệ của kiểu hạn định %qT"
+msgstr ""
#: cp/pt.c:13262
#, gcc-internal-format
@@ -46529,8 +43178,7 @@ msgid "use %<%T::%D%> instead"
msgstr "dùng %<%T::%D%> thay thế"
#: cp/pt.c:16495
-#, fuzzy, gcc-internal-format
-#| msgid "%+D declared weakref after being used"
+#, gcc-internal-format
msgid "%qD declared here, later in the translation unit"
msgstr "%+D đã khai báo weakref sau khi được dùng"
@@ -46570,17 +43218,16 @@ msgid " trying to instantiate %qD"
msgstr ""
#: cp/pt.c:20933
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ambiguous template instantiation for %q#T"
-msgstr "%s: Trong minh dụ của %q#D:\n"
+msgstr ""
#: cp/pt.c:20935
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ambiguous template instantiation for %q#D"
-msgstr "%s: Trong minh dụ của %q#D:\n"
+msgstr ""
#: cp/pt.c:20941
-#, fuzzy
msgid "%s %#S"
msgstr "%s %#D"
@@ -46605,9 +43252,9 @@ msgid "type %qT for explicit instantiation %qD does not match declared type %qT"
msgstr ""
#: cp/pt.c:21003
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "explicit instantiation of %q#D"
-msgstr "khởi tạo lặp lại cho %qD"
+msgstr ""
#: cp/pt.c:21039
#, gcc-internal-format
@@ -46712,22 +43359,19 @@ msgid "placeholder constraints not satisfied"
msgstr ""
#: cp/pt.c:23931
-#, fuzzy, gcc-internal-format
-#| msgid "insn does not satisfy its constraints:"
+#, gcc-internal-format
msgid "deduced initializer does not satisfy placeholder constraints"
-msgstr "lệnh không thá»a những ràng buá»™c cá»§a nó:"
+msgstr ""
#: cp/pt.c:23935
-#, fuzzy, gcc-internal-format
-#| msgid "insn does not satisfy its constraints:"
+#, gcc-internal-format
msgid "deduced return type does not satisfy placeholder constraints"
-msgstr "lệnh không thá»a những ràng buá»™c cá»§a nó:"
+msgstr ""
#: cp/pt.c:23939
-#, fuzzy, gcc-internal-format
-#| msgid "insn does not satisfy its constraints:"
+#, gcc-internal-format
msgid "deduced expression type does not saatisy placeholder constraints"
-msgstr "lệnh không thá»a những ràng buá»™c cá»§a nó:"
+msgstr ""
#: cp/repo.c:113
#, gcc-internal-format
@@ -46760,9 +43404,9 @@ msgid "cannot create type information for type %qT because it involves types of
msgstr ""
#: cp/rtti.c:485
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "typeid of qualified function type %qT"
-msgstr "dùng hàm bị xóa %qD"
+msgstr ""
#: cp/rtti.c:665 cp/rtti.c:680
#, gcc-internal-format
@@ -46790,15 +43434,14 @@ msgid "%qT is an inaccessible base of %qT"
msgstr ""
#: cp/search.c:2050
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid covariant return type for %q#D"
-msgstr "kiểu trừu tượng cho %q+D không hợp lệ"
+msgstr ""
#: cp/search.c:2052
-#, fuzzy, gcc-internal-format
-#| msgid " overriding %q+#D"
+#, gcc-internal-format
msgid " overriding %q#D"
-msgstr " đè lên %q+#D"
+msgstr " đè lên %q#D"
#: cp/search.c:2065
#, gcc-internal-format
@@ -46831,16 +43474,14 @@ msgid "conflicting type attributes specified for %q+#D"
msgstr ""
#: cp/search.c:2113
-#, fuzzy, gcc-internal-format
-#| msgid "expected %<__transaction_atomic%>"
+#, gcc-internal-format
msgid "%qD declared %<transaction_safe_dynamic%>"
-msgstr "cần %<__transaction_atomic%>"
+msgstr ""
#: cp/search.c:2115
-#, fuzzy, gcc-internal-format
-#| msgid "variable %q+D declared %<inline%>"
+#, gcc-internal-format
msgid "overriding %qD declared %<transaction_safe%>"
-msgstr "biến %q+D được khai báo %<inline%>"
+msgstr ""
#: cp/search.c:2122
#, gcc-internal-format
@@ -46900,9 +43541,9 @@ msgid "__label__ declarations are only allowed in function scopes"
msgstr ""
#: cp/semantics.c:1725
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid use of member %qD in static member function"
-msgstr "cấu tử không thể là hàm thành viên tĩnh"
+msgstr ""
#: cp/semantics.c:2419
#, gcc-internal-format
@@ -47104,9 +43745,9 @@ msgid "linear clause applied to non-integral non-pointer variable with %qT type"
msgstr ""
#: cp/semantics.c:5856
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "linear step expression must be integral"
-msgstr "chỉ số phải là số nguyên"
+msgstr "biểu thức bước thẳng phải là số nguyên"
#: cp/semantics.c:5959
#, gcc-internal-format
@@ -47124,57 +43765,54 @@ msgid "%qD is not a variable in clause %<lastprivate%>"
msgstr "%qD không phải một biến trong mệnh đỠ%<lastprivate%>"
#: cp/semantics.c:6099
-#, fuzzy, gcc-internal-format
-#| msgid "%<async%> expression must be integral"
+#, gcc-internal-format
msgid "%<gang%> static expression must be integral"
-msgstr "%<async%> biểu thức phải nguyên"
+msgstr "biểu thức tĩnh %<gang%> phải nguyên"
#: cp/semantics.c:6113
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<gang%> static value must bepositive"
-msgstr "%<num_teams%> giá trị phải dương"
+msgstr "giá trị tĩnh %<gang%> phải dương"
#: cp/semantics.c:6145
-#, fuzzy, gcc-internal-format
-#| msgid "%<async%> expression must be integral"
+#, gcc-internal-format
msgid "%<gang%> num expression must be integral"
-msgstr "%<async%> biểu thức phải nguyên"
+msgstr "biểu thức số %<gang%> phải nguyên"
#: cp/semantics.c:6148
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<vector%> length expression must be integral"
-msgstr "%s tại %L phải là số nguyên"
+msgstr "chiá»u dài %<vector%> phải là số nguyên"
#: cp/semantics.c:6152
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<worker%> num expression must be integral"
-msgstr "chỉ số %<device%> phải là số nguyên"
+msgstr "biểu thức số %<worker%> phải là số nguyên"
#: cp/semantics.c:6156
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs expression must be integral"
-msgstr "chỉ số phải là số nguyên"
+msgstr "biểu thức %qs phải là số nguyên"
#: cp/semantics.c:6174
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<gang%> num value must be positive"
-msgstr "%<num_teams%> giá trị phải dương"
+msgstr "%<gang%> giá trị phải dương"
#: cp/semantics.c:6178
-#, fuzzy, gcc-internal-format
-#| msgid "%<vector_length%> value must be positive"
+#, gcc-internal-format
msgid "%<vector%> length value must bepositive"
-msgstr "%<vector_length%> giá trị phải dương"
+msgstr "chiá»u dài %<vector%> giá trị phải dương"
#: cp/semantics.c:6183
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<worker%> num value must bepositive"
-msgstr "%<num_threads%> giá trị phải dương"
+msgstr "%<worker%> giá trị phải dương"
#: cp/semantics.c:6188
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs value must be positive"
-msgstr "%<num_teams%> giá trị phải dương"
+msgstr "%qs giá trị phải dương"
#: cp/semantics.c:6235
#, gcc-internal-format
@@ -47182,9 +43820,9 @@ msgid "schedule chunk size expression must be integral"
msgstr ""
#: cp/semantics.c:6267
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs length expression must be integral"
-msgstr "%s tại %L phải là số nguyên"
+msgstr ""
#: cp/semantics.c:6280
#, gcc-internal-format
@@ -47242,24 +43880,22 @@ msgid "overloaded function name %qE in clause %qs"
msgstr ""
#: cp/semantics.c:6750
-#, fuzzy, gcc-internal-format
-#| msgid "too many %qs clauses"
+#, gcc-internal-format
msgid "template %qE in clause %qs"
-msgstr "quá nhiá»u mệnh đỠ%qs"
+msgstr ""
#: cp/semantics.c:6815
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<grainsize%> expression must be integral"
msgstr "chỉ số %<device%> phải là số nguyên"
#: cp/semantics.c:6844
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<priority%> expression must be integral"
msgstr "chỉ số %<device%> phải là số nguyên"
#: cp/semantics.c:6873
-#, fuzzy, gcc-internal-format
-#| msgid "%<num_teams%> expression must be integral"
+#, gcc-internal-format
msgid "%<num_tasks%> expression must be integral"
msgstr "%<num_teams%> biểu thức phải nguyên"
@@ -47294,14 +43930,14 @@ msgid "%<#pragma omp atomic update%> uses two different expressions for memory"
msgstr ""
#: cp/semantics.c:8642
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "static assertion failed"
-msgstr "thẩm tra gặp lỗi: %s"
+msgstr "thẩm tra tĩnh gặp lỗi"
#: cp/semantics.c:8644
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "static assertion failed: %s"
-msgstr "thẩm tra gặp lỗi: %s"
+msgstr "thẩm tra tĩnh gặp lỗi: %s"
#: cp/semantics.c:8649
#, gcc-internal-format
@@ -47339,9 +43975,9 @@ msgid "%qV qualifiers cannot be applied to %qT"
msgstr ""
#: cp/tree.c:1616
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "lambda-expression in a constant expression"
-msgstr "Gặp loại saio trong biểu thức bất biến"
+msgstr "Gặp biểu thức lambda trong biểu thức bất biến"
#: cp/tree.c:3539
#, gcc-internal-format
@@ -47394,20 +44030,19 @@ msgid "previous declaration here"
msgstr "khai báo trước ở đây"
#: cp/tree.c:3699
-#, fuzzy, gcc-internal-format
-#| msgid "%qE attribute requires a void return type"
+#, gcc-internal-format
msgid "the %qE attribute requires arguments"
-msgstr "Thuộc tính %qE cần kiểu trả vỠlà void"
+msgstr "thuộc tính %qE cần tham số"
#: cp/tree.c:3710
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "arguments to the %qE attribute must be narrow string literals"
-msgstr "đối số %d của %qE phải nằm trong vùng %d…%d"
+msgstr ""
#: cp/tree.c:3723 cp/tree.c:3736
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "arguments to the %qE attribute must contain valid identifiers"
-msgstr "đối số %qd không phải hằng số"
+msgstr ""
#: cp/tree.c:3725
#, gcc-internal-format
@@ -47415,10 +44050,9 @@ msgid "%<%c%> is not a valid first character for an identifier"
msgstr ""
#: cp/tree.c:3738
-#, fuzzy, gcc-internal-format
-#| msgid "'%%%c' is not a valid operand prefix"
+#, gcc-internal-format
msgid "%<%c%> is not a valid character in an identifier"
-msgstr "“%%%c†không phải là má»™t tiá»n tố toán hạng đúng"
+msgstr ""
#: cp/tree.c:3762
#, gcc-internal-format
@@ -47431,25 +44065,24 @@ msgid "%qE attribute applied to %qT after its definition"
msgstr ""
#: cp/tree.c:3775
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ignoring %qE attribute applied to template instantiation %qT"
-msgstr "thuộc tính %s được áp dụng cho %s %s tại %L"
+msgstr ""
#: cp/tree.c:3782
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ignoring %qE attribute applied to template specialization %qT"
-msgstr "thuộc tính %s được áp dụng cho %s %s tại %L"
+msgstr ""
#: cp/tree.c:3804
-#, fuzzy, gcc-internal-format
-#| msgid "%qE attribute only applies to functions"
+#, gcc-internal-format
msgid "%qE attribute applied to non-function, non-variable %qD"
-msgstr "thuộc tính %qE chỉ áp dụng cho các hàm"
+msgstr ""
#: cp/tree.c:3810
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qE attribute applied to extern \"C\" declaration %qD"
-msgstr "thuộc tính %s được áp dụng cho %s %s tại %L"
+msgstr ""
#: cp/tree.c:4511
#, gcc-internal-format
@@ -47542,9 +44175,9 @@ msgid "ISO C++ forbids applying %<__alignof%> to an expression of function type"
msgstr ""
#: cp/typeck.c:1836
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid use of non-static member function of type %qT"
-msgstr "cấu tử không thể là hàm thành viên tĩnh"
+msgstr ""
#: cp/typeck.c:2001
#, gcc-internal-format
@@ -47552,14 +44185,14 @@ msgid "taking address of temporary array"
msgstr "lấy địa chỉ của mảng tạm"
#: cp/typeck.c:2164
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ISO C++ forbids converting a string constant to %qT"
-msgstr "ISO C++ cấm biến có kích thước biến đổi %qD"
+msgstr "ISO C++ cấm chuyển đổi hằng chuỗi thành %qT"
#: cp/typeck.c:2168
#, gcc-internal-format
msgid "deprecated conversion from string constant to %qT"
-msgstr ""
+msgstr "việc chuyển đổi từ chuá»—i thành %qT đã lá»—i thá»i"
#: cp/typeck.c:2302 cp/typeck.c:2695
#, gcc-internal-format
@@ -47602,10 +44235,9 @@ msgid "%qT is not a base of %qT"
msgstr "%qT không là cơ sở của %qT"
#: cp/typeck.c:2812
-#, fuzzy, gcc-internal-format
-#| msgid "%q#T has no member named %qE"
+#, gcc-internal-format
msgid "%q#T has no member named %qE; did you mean %qE?"
-msgstr "%q#T không có thành viên nào mang tên %qE"
+msgstr "%q#T không có thành viên nào mang tên %qE; ý bạn là %qE?"
#: cp/typeck.c:2816
#, gcc-internal-format
@@ -47668,10 +44300,9 @@ msgid "object missing in use of %qE"
msgstr ""
#: cp/typeck.c:3527
-#, fuzzy, gcc-internal-format
-#| msgid "cannot disable built-in function %qs"
+#, gcc-internal-format
msgid "cannot call function %qD"
-msgstr "không thể tắt hàm dựng sẵn %qs"
+msgstr "không thể gá»i hàm %qD"
#: cp/typeck.c:3542
#, gcc-internal-format
@@ -47771,12 +44402,12 @@ msgstr "NULL được dùng trong số há»c"
#: cp/typeck.c:4463
#, gcc-internal-format
msgid "left rotate count is negative"
-msgstr "số lượng dịch trái bị âm"
+msgstr "số lượng quay trái bị âm"
#: cp/typeck.c:4464
#, gcc-internal-format
msgid "right rotate count is negative"
-msgstr ""
+msgstr "số lượng quay phải bị âm"
#: cp/typeck.c:4470
#, gcc-internal-format
@@ -47799,10 +44430,9 @@ msgid "the address of %qD will never be NULL"
msgstr "địa chỉ của %qD sẽ không bao giỠlà NULL"
#: cp/typeck.c:4539 cp/typeck.c:4583
-#, fuzzy, gcc-internal-format
-#| msgid "the address of %qD will never be NULL"
+#, gcc-internal-format
msgid "the compiler can assume that the address of %qD will never be NULL"
-msgstr "địa chỉ của %qD sẽ không bao giỠlà NULL"
+msgstr "trình biên dịch sẽ coi rằng địa chỉ của %qD sẽ không bao giỠlà NULL"
#: cp/typeck.c:4599 cp/typeck.c:4607 cp/typeck.c:4885 cp/typeck.c:4893
#, gcc-internal-format
@@ -47815,9 +44445,9 @@ msgid "operand types are %qT and %qT"
msgstr "các kiểu toán hạng là %qT và %qT"
#: cp/typeck.c:4846
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "could not find an integer type of the same size as %qT"
-msgstr "không tìm thấy giao diện cho lớp %qE"
+msgstr ""
#: cp/typeck.c:4910
#, gcc-internal-format
@@ -48157,9 +44787,9 @@ msgid "cannot convert %qT to %qT in assignment"
msgstr ""
#: cp/typeck.c:8408
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "class type %qT is incomplete"
-msgstr "lớp %qE bị phản đối"
+msgstr "kiểu lớp %qT chưa hoàn thiện"
#: cp/typeck.c:8426
#, gcc-internal-format
@@ -48187,10 +44817,9 @@ msgid "left-hand side of assignment might be a candidate for a format attribute"
msgstr ""
#: cp/typeck.c:8545
-#, fuzzy, gcc-internal-format
-#| msgid "in passing argument %P of %q+D"
+#, gcc-internal-format
msgid "in passing argument %P of %qD"
-msgstr "trong đối số chuyển qua %P của %q+D"
+msgstr "trong đối số chuyển qua %P của %qD"
#: cp/typeck.c:8604
#, gcc-internal-format
@@ -48203,20 +44832,17 @@ msgid "reference to non-lvalue returned"
msgstr ""
#: cp/typeck.c:8626
-#, fuzzy, gcc-internal-format
-#| msgid "address of local variable %q+D returned"
+#, gcc-internal-format
msgid "reference to local variable %qD returned"
-msgstr "địa chỉ cá»§a biến cục bá»™ %q+D được trả vá»"
+msgstr "tham chiếu đến biến cục bá»™ %qD được trả vá»"
#: cp/typeck.c:8630
-#, fuzzy, gcc-internal-format
-#| msgid "address of label %q+D returned"
+#, gcc-internal-format
msgid "address of label %qD returned"
-msgstr "địa chỉ cá»§a nhãn %q+D được trả vá»"
+msgstr "địa chỉ cá»§a nhãn %qD được trả vá»"
#: cp/typeck.c:8634
-#, fuzzy, gcc-internal-format
-#| msgid "address of local variable %q+D returned"
+#, gcc-internal-format
msgid "address of local variable %qD returned"
msgstr "địa chỉ cá»§a biến cục bá»™ %q+D được trả vá»"
@@ -48260,9 +44886,9 @@ msgid "inconsistent deduction for auto return type: %qT and then %qT"
msgstr ""
#: cp/typeck.c:8786
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "return-statement with a value, in function returning 'void'"
-msgstr "%<return%> với một giá trị, trong hàm trả lại void (rỗng)"
+msgstr "biểu thức trả vỠvới một giá trị, trong hàm trả lại `void'"
#: cp/typeck.c:8816
#, gcc-internal-format
@@ -48336,9 +44962,9 @@ msgid "cannot declare parameter %q+D to be of abstract type %qT"
msgstr ""
#: cp/typeck2.c:328
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "cannot declare parameter to be of abstract type %qT"
-msgstr "không thể khai báo tham chiếu đến %q#T"
+msgstr ""
#: cp/typeck2.c:332
#, gcc-internal-format
@@ -48372,24 +44998,24 @@ msgid "creating array of %qT, which is an abstract class type"
msgstr ""
#: cp/typeck2.c:351
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid cast to abstract class type %qT"
-msgstr "kiểu trừu tượng cho %q+D không hợp lệ"
+msgstr "áp đổi kiểu trừu tượng cho kiểu lớp %qT không hợp lệ"
#: cp/typeck2.c:354
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid new-expression of abstract class type %qT"
-msgstr "biểu thức như là toán hạng không hợp lệ"
+msgstr ""
#: cp/typeck2.c:357
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid abstract return type %qT"
-msgstr "kiểu đối số không hợp lệ %qT"
+msgstr ""
#: cp/typeck2.c:360
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid abstract parameter type %qT"
-msgstr "kiểu đối số không hợp lệ %qT"
+msgstr ""
#: cp/typeck2.c:363
#, gcc-internal-format
@@ -48422,9 +45048,9 @@ msgid "definition of %q#T is not complete until the closing brace"
msgstr ""
#: cp/typeck2.c:443
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "forward declaration of %q#T"
-msgstr "khai báo lại của %q#D"
+msgstr "khai báo trước của %q#T"
#: cp/typeck2.c:445
#, gcc-internal-format
@@ -48432,9 +45058,9 @@ msgid "declaration of %q#T"
msgstr "khai báo của %q#T"
#: cp/typeck2.c:472
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qD has incomplete type"
-msgstr "đối số %qD có kiểu chưa đầy đủ"
+msgstr "%qD có kiểu chưa đầy đủ"
#: cp/typeck2.c:487
#, gcc-internal-format
@@ -48452,9 +45078,9 @@ msgid "invalid use of member function %qD (did you forget the %<()%> ?)"
msgstr ""
#: cp/typeck2.c:521
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid use of member %qD (did you forget the %<&%> ?)"
-msgstr "cấu tử không thể là hàm thành viên tĩnh"
+msgstr ""
#: cp/typeck2.c:532
#, gcc-internal-format
@@ -48507,19 +45133,19 @@ msgid "narrowing conversion of %qE from %qT to %qT inside { }"
msgstr ""
#: cp/typeck2.c:960
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid " the expression has a constant value but is not a C++ constant-expression"
-msgstr "%qE không phải là biểu thức hằng"
+msgstr ""
#: cp/typeck2.c:1047
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "int-array initialized from non-wide string"
-msgstr "mảng ký tự bị khởi tạo từ chuỗi rộng"
+msgstr ""
#: cp/typeck2.c:1053
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "int-array initialized from incompatible wide string"
-msgstr "mảng ký tự rộng bị khởi tạo từ chuỗi rộng không tương thích"
+msgstr ""
#: cp/typeck2.c:1076
#, gcc-internal-format
@@ -48597,14 +45223,14 @@ msgid "pointer to member type %qT incompatible with object type %qT"
msgstr ""
#: cp/typeck2.c:1888
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "pointer-to-member-function type %qT requires an rvalue"
-msgstr " kiểu hàm thành viên %qT không phải là một đối số mẫu hợp lệ"
+msgstr ""
#: cp/typeck2.c:1895
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "pointer-to-member-function type %qT requires an lvalue"
-msgstr " kiểu hàm thành viên %qT không phải là một đối số mẫu hợp lệ"
+msgstr ""
#: cp/typeck2.c:1936
#, gcc-internal-format
@@ -48776,19 +45402,19 @@ msgstr "Chuyển đổi từ %qs sang %qs tại %L"
#: fortran/arith.c:2075 fortran/arith.c:2108 fortran/arith.c:2147
#: fortran/arith.c:2205 fortran/arith.c:2257 fortran/arith.c:2317
#: fortran/arith.c:2386
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Change of value in conversion from %qs to %qs at %L"
-msgstr "Chuyển đổi từ %s sang %s tại %L"
+msgstr "Äổi giá trị trong chuyển đổi từ %qs sang %qs tại %L"
#: fortran/arith.c:2303 fortran/arith.c:2372
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Non-zero imaginary part discarded in conversion from %qs to %qs at %L"
-msgstr "chuyển đổi từ %qT thành %qT không hợp lệ"
+msgstr ""
#: fortran/arith.c:2455
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Change of value in conversion from %qs to %qs at %L"
-msgstr "Chuyển đổi từ %s sang %s tại %L"
+msgstr "Äổi giá trị trong chuyển đổi từ %qs sang %qs tại %L"
#: fortran/arith.c:2528
#, gcc-internal-format
@@ -48801,9 +45427,9 @@ msgid "Expected array subscript at %C"
msgstr "Cần chỉ số mảng tại %C"
#: fortran/array.c:104
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Unexpected %<*%> in coarray subscript at %C"
-msgstr "Cần chỉ số mảng tại %C"
+msgstr ""
#: fortran/array.c:128
#, gcc-internal-format, gfc-internal-format
@@ -48849,9 +45475,9 @@ msgid "Too many codimensions at %C, expected %d not %d"
msgstr ""
#: fortran/array.c:250 fortran/array.c:258
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Unexpected %<*%> for codimension %d of %d at %C"
-msgstr "cần %<(%> hoặc xuống dòng"
+msgstr "Không cần %<*%> cho đối chiếu %d của %d tại %C"
#: fortran/array.c:253
#, gcc-internal-format, gfc-internal-format
@@ -48879,9 +45505,9 @@ msgid "Expected expression in array specification at %C"
msgstr ""
#: fortran/array.c:427 fortran/array.c:454
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Expecting a scalar INTEGER expression at %C"
-msgstr "Cần danh sách kết hợp tại %C"
+msgstr ""
#: fortran/array.c:490
#, gcc-internal-format, gfc-internal-format
@@ -48979,10 +45605,9 @@ msgid "Empty array constructor at %C is not allowed"
msgstr ""
#: fortran/array.c:1178 fortran/array.c:1188
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "incompatible type for argument %d of %qE"
+#, gcc-internal-format, gfc-internal-format
msgid "Incompatible typespec for array element at %L"
-msgstr "kiểu không tương thích cho đối số %d của %qE"
+msgstr "Äặc tả kiểu không tương thích cho phần tá»­ mảng tại %L"
#: fortran/array.c:1254
#, gcc-internal-format, gfc-internal-format
@@ -49020,9 +45645,9 @@ msgid "Array constructor value at %L shall not be unlimited polymorphic [F2008:
msgstr ""
#: fortran/array.c:2001
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Different CHARACTER lengths (%d/%d) in array constructor at %L"
-msgstr "Bá»™ dá»±ng mảng chứa các chiá»u dài KÃ_Tá»° khác nhau (%ld/%ld)"
+msgstr ""
#: fortran/array.c:2119
#, gcc-internal-format
@@ -49121,7 +45746,7 @@ msgid "%qs argument of %qs intrinsic at %L must be an array"
msgstr "đối số %qs của %qs intrinsict tại %L phải là một mảng"
#: fortran/check.c:282
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs at %L must be nonnegative"
msgstr "%s tại %L phải là số nguyên"
@@ -49136,9 +45761,9 @@ msgid "%qs at %L must be less than or equal to BIT_SIZE(%qs)"
msgstr ""
#: fortran/check.c:334
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs at %L must be less than BIT_SIZE(%qs)"
-msgstr "%s tại %L phải là Sá»-NGUYÊN"
+msgstr "%qs tại %L phải ít hơn BIT_SIZE(%qs)"
#: fortran/check.c:361
#, gcc-internal-format
@@ -49156,9 +45781,9 @@ msgid "%qs argument of %qs intrinsic at %L must be the same type and kind as %qs
msgstr ""
#: fortran/check.c:430
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs argument of %qs intrinsic at %L must be of rank %d"
-msgstr "Äối số cá»§a %s tại %L phải là cá»§a má»™t độ dài"
+msgstr ""
#: fortran/check.c:445
#, gcc-internal-format
@@ -49212,14 +45837,14 @@ msgid "Different type kinds at %L"
msgstr ""
#: fortran/check.c:912
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs argument of %qs intrinsic at %L must be a POINTER"
-msgstr "Äối số cá»§a hàm %s tại %L là âm"
+msgstr ""
#: fortran/check.c:921 fortran/check.c:957 fortran/check.c:3424
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs argument of %qs intrinsic at %L shall not be coindexed"
-msgstr "Äối số cá»§a hàm %s tại %L là âm"
+msgstr ""
#: fortran/check.c:939
#, gcc-internal-format
@@ -49252,14 +45877,14 @@ msgid "ATOM argument at %L of the %s intrinsic function shall be a coarray or co
msgstr ""
#: fortran/check.c:1042
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs argument of %qs intrinsic at %L shall have the same type as %qs at %L"
-msgstr "Äối số cá»§a %s tại %L phải là cá»§a má»™t độ dài"
+msgstr ""
#: fortran/check.c:1060 fortran/check.c:1205
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "STAT= argument to %s at %L"
-msgstr "Quá nhiá»u đối số cho %s tại %L"
+msgstr "STAT= đối số cho %s tại %L"
#: fortran/check.c:1079 fortran/check.c:1145 fortran/check.c:1242
#, gcc-internal-format, gfc-internal-format
@@ -49277,9 +45902,9 @@ msgid "VALUE argument of the %s intrinsic function at %L shall be definable"
msgstr ""
#: fortran/check.c:1152 fortran/check.c:1249
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "OLD argument of the %s intrinsic function at %L shall be definable"
-msgstr "Äối số cá»§a hàm %s tại %L là âm"
+msgstr ""
#: fortran/check.c:1167
#, gcc-internal-format, gfc-internal-format
@@ -49287,14 +45912,14 @@ msgid "EVENT argument at %L to the intrinsic EVENT_QUERY shall be of type EVENT_
msgstr ""
#: fortran/check.c:1177
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "COUNT argument of the EVENT_QUERY intrinsic function at %L shall be definable"
-msgstr "Äối số cá»§a hàm %s tại %L là âm"
+msgstr ""
#: fortran/check.c:1190
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "COUNT argument of the EVENT_QUERY intrinsic function at %L shall have at least the range of the default integer"
-msgstr "Äối số cá»§a hàm %s tại %L là âm"
+msgstr ""
#: fortran/check.c:1269
#, gcc-internal-format, gfc-internal-format
@@ -49327,9 +45952,9 @@ msgid "The A argument at %L to the intrinsic %s shall not be coindexed"
msgstr ""
#: fortran/check.c:1523
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "The stat= argument at %L must be a kind=4 integer variable"
-msgstr "đối số cuối phải là giá trị trực tiếp 2-bít"
+msgstr ""
#: fortran/check.c:1539
#, gcc-internal-format, gfc-internal-format
@@ -49357,9 +45982,9 @@ msgid "Support for the A argument at %L with allocatable components is not yet i
msgstr ""
#: fortran/check.c:1602
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "OPERATOR argument at %L must be a PURE function"
-msgstr "Äối số cá»§a %s tại %L phải là cá»§a má»™t độ dài"
+msgstr ""
#. None of the intrinsics fulfills the criteria of taking two arguments,
#. returning the same type and kind as the arguments and being permitted
@@ -49420,9 +46045,9 @@ msgid "The character length of the A argument at %L and of the function result o
msgstr ""
#: fortran/check.c:1744
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs argument of %qs intrinsic at %L shall be of type integer, real or character"
-msgstr "Äối số cá»§a hàm %s tại %L là âm"
+msgstr ""
#: fortran/check.c:1792 fortran/check.c:2324 fortran/check.c:2427
#: fortran/check.c:2628 fortran/check.c:2673 fortran/check.c:3984
@@ -49453,9 +46078,9 @@ msgid "Different shape for arguments %qs and %qs at %L for intrinsic %<dot_produ
msgstr ""
#: fortran/check.c:1991 fortran/check.c:1999
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs argument of %qs intrinsic at %L must be default real"
-msgstr "Äối số cá»§a %s tại %L phải là cá»§a má»™t độ dài"
+msgstr ""
#: fortran/check.c:2020
#, gcc-internal-format
@@ -49468,9 +46093,9 @@ msgid "non-default INTEGER kind argument to %s intrinsic at %L"
msgstr ""
#: fortran/check.c:2211
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "COMPLEX argument %qs of %qs intrinsic at %L"
-msgstr "đối số “%s†và “%s†cho %s thực chất"
+msgstr ""
#: fortran/check.c:2375
#, gcc-internal-format, gfc-internal-format
@@ -49478,9 +46103,9 @@ msgid "Argument of %s at %L must be of length one"
msgstr "Äối số cá»§a %s tại %L phải là cá»§a má»™t độ dài"
#: fortran/check.c:2434
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs argument of %qs intrinsic at %L must be the same kind as %qs"
-msgstr "Äối số cá»§a %s tại %L phải là cá»§a má»™t độ dài"
+msgstr ""
#: fortran/check.c:2524
#, gcc-internal-format, gfc-internal-format
@@ -49493,34 +46118,34 @@ msgid "The absolute value of SHIFT at %L must be less than or equal to SIZE at %
msgstr ""
#: fortran/check.c:2597
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs argument of %qs intrinsic at %L must be of intrinsic type"
-msgstr "Äối số cá»§a %s tại %L phải là cá»§a má»™t độ dài"
+msgstr ""
#: fortran/check.c:2604
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs argument of %qs intrinsic at %L must be a data entity"
-msgstr "Äối số cá»§a %s tại %L phải là cá»§a má»™t độ dài"
+msgstr "Äối số %qs cá»§a hạn chế %qs tại %L phải là thá»±c thể dữ liệu"
#: fortran/check.c:2815
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Intrinsic %qs at %L must have at least two arguments"
-msgstr "%qD cần chính các là hai đối số"
+msgstr ""
#: fortran/check.c:2863
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Missing %qs argument to the %s intrinsic at %L"
-msgstr "thiếu đối số đối cho %qs"
+msgstr ""
#: fortran/check.c:2878
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Duplicate argument %qs at %L to intrinsic %s"
-msgstr "đối số “%s†và “%s†cho %s thực chất"
+msgstr ""
#: fortran/check.c:2883
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Unknown argument %qs at %L to intrinsic %s"
-msgstr "đối số “%s†và “%s†cho %s thực chất"
+msgstr ""
#: fortran/check.c:2912
#, gcc-internal-format
@@ -49538,9 +46163,9 @@ msgid "%<a1%> argument of %qs intrinsic at %L must be INTEGER, REAL or CHARACTER
msgstr ""
#: fortran/check.c:3017
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Argument types of %qs intrinsic at %L must match (%s/%s)"
-msgstr "Äối số cá»§a hàm %s tại %L là âm"
+msgstr ""
#: fortran/check.c:3031
#, gcc-internal-format
@@ -49553,14 +46178,14 @@ msgid "Different shape on dimension 2 for argument %qs and dimension 1 for argum
msgstr ""
#: fortran/check.c:3059
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs argument of %qs intrinsic at %L must be of rank 1 or 2"
-msgstr "Äối số cá»§a %s tại %L phải là cá»§a má»™t độ dài"
+msgstr "Äối số %qs cá»§a hạn chế %qs tại %L phải là khoảng 1 hay 2"
#: fortran/check.c:3234
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs argument of %qs intrinsic at %L must be INTEGER"
-msgstr "%s tại %L phải là Sá»-NGUYÊN"
+msgstr "Tham số %qs cá»§a hạn chế %qs tại %L phải là Sá»-NGUYÊN"
#: fortran/check.c:3294
#, gcc-internal-format, gfc-internal-format
@@ -49608,9 +46233,9 @@ msgid "%qs argument of %qs intrinsic at %L must provide at least as many element
msgstr ""
#: fortran/check.c:3554
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs argument of %qs intrinsic at %L must be of a dummy variable"
-msgstr "Äối số cá»§a %s tại %L phải là cá»§a má»™t độ dài"
+msgstr ""
#: fortran/check.c:3562
#, gcc-internal-format
@@ -49618,9 +46243,9 @@ msgid "%qs argument of %qs intrinsic at %L must be of an OPTIONAL dummy variable
msgstr ""
#: fortran/check.c:3581
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs argument of %qs intrinsic at %L must not be a subobject of %qs"
-msgstr "Äối số cá»§a %s tại %L phải là cá»§a má»™t độ dài"
+msgstr ""
#: fortran/check.c:3629
#, gcc-internal-format, gfc-internal-format
@@ -49633,9 +46258,9 @@ msgid "%<shape%> argument of %<reshape%> intrinsic at %L must be an array of con
msgstr ""
#: fortran/check.c:3743
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs argument of %qs intrinsic at %L is empty"
-msgstr "Äối số cá»§a hàm %s tại %L là âm"
+msgstr ""
#: fortran/check.c:3750
#, gcc-internal-format
@@ -49643,9 +46268,9 @@ msgid "%<shape%> argument of %<reshape%> intrinsic at %L has more than %d elemen
msgstr ""
#: fortran/check.c:3767
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs argument of %qs intrinsic at %L has negative element (%d)"
-msgstr "Äối số cá»§a hàm %s tại %L là âm"
+msgstr ""
#: fortran/check.c:3799
#, gcc-internal-format, gfc-internal-format
@@ -49663,9 +46288,9 @@ msgid "%qs argument of %qs intrinsic at %L has out-of-range dimension (%d)"
msgstr ""
#: fortran/check.c:3864
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs argument of %qs intrinsic at %L has invalid permutation of dimensions (dimension %qd duplicated)"
-msgstr "Äối số cá»§a hàm %s tại %L là âm"
+msgstr ""
#: fortran/check.c:3900
#, gcc-internal-format, gfc-internal-format
@@ -49673,14 +46298,14 @@ msgid "Without padding, there are not enough elements in the intrinsic RESHAPE s
msgstr ""
#: fortran/check.c:3917 fortran/check.c:3936
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs argument of %qs intrinsic at %L cannot be of type %s"
-msgstr "thẻ %s tại %L phải là kiểu %s"
+msgstr ""
#: fortran/check.c:3927 fortran/check.c:3946
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs argument of %qs intrinsic at %L must be of an extensible type"
-msgstr "Äối số cá»§a %s tại %L phải là cá»§a má»™t độ dài"
+msgstr ""
#: fortran/check.c:4045
#, gcc-internal-format
@@ -49698,14 +46323,14 @@ msgid "%<source%> argument of %<shape%> intrinsic at %L must not be an assumed s
msgstr ""
#: fortran/check.c:4188 fortran/check.c:6356
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs argument of %qs intrinsic at %L shall not be a procedure"
-msgstr "Äối số cá»§a hàm %s tại %L là âm"
+msgstr ""
#: fortran/check.c:4201 fortran/check.c:4340 fortran/check.c:6348
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs argument of %qs intrinsic at %L shall not be TYPE(*)"
-msgstr "Äối số cá»§a hàm %s tại %L là âm"
+msgstr ""
#: fortran/check.c:4212 fortran/check.c:4352
#, gcc-internal-format
@@ -49853,9 +46478,9 @@ msgid "Array of interoperable type at %L to C_LOC which is nonallocatable and ne
msgstr ""
#: fortran/check.c:4636
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Array section at %L to C_LOC"
-msgstr "Khai báo Coarray tại %C"
+msgstr ""
#: fortran/check.c:4664
#, gcc-internal-format, gfc-internal-format
@@ -49863,9 +46488,9 @@ msgid "non double precision REAL argument to %s intrinsic at %L"
msgstr ""
#: fortran/check.c:4677
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs argument of %qs intrinsic at %L must be less than rank %d"
-msgstr "Äối số cá»§a %s tại %L phải là cá»§a má»™t độ dài"
+msgstr ""
#: fortran/check.c:4696
#, gcc-internal-format
@@ -49948,10 +46573,9 @@ msgid "fe_runtime_error string must be null terminated"
msgstr ""
#: fortran/check.c:5646
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "wrong number of template arguments (%d, should be %d)"
+#, gcc-internal-format, gfc-internal-format
msgid "fe_runtime_error: Wrong number of arguments (%d instead of %d)"
-msgstr "sai số lượng đối số hàm mẫu (%d, phải là %d)"
+msgstr ""
#: fortran/check.c:5686
#, gcc-internal-format, gfc-internal-format
@@ -50036,10 +46660,9 @@ msgid "Initialization string at %L was truncated to fit the variable (%d/%d)"
msgstr ""
#: fortran/data.c:266
-#, fuzzy, gcc-internal-format
-#| msgid "'%s' at %L already is initialized at %L"
+#, gcc-internal-format
msgid "%qs at %L already is initialized at %L"
-msgstr "“%s†tại %L đã được khởi tạo tại %L rồi"
+msgstr "“%qs†tại %L đã được khởi tạo tại %L rồi"
#: fortran/data.c:290
#, gcc-internal-format, gfc-internal-format
@@ -50127,20 +46750,19 @@ msgid "Syntax error in character length specification at %C"
msgstr ""
#: fortran/decl.c:990
-#, fuzzy, gcc-internal-format
-#| msgid "Procedure '%s' at %C is already defined at %L"
+#, gcc-internal-format
msgid "Procedure %qs at %C is already defined at %L"
-msgstr "Thủ tục “%s†tại %C đã được định nghĩa trước tại %L"
+msgstr "Thủ tục “%qs†tại %C đã được định nghĩa trước tại %L"
#: fortran/decl.c:998
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Name %qs at %C is already defined as a generic interface at %L"
-msgstr "Thủ tục “%s†tại %C đã được định nghĩa trước tại %L"
+msgstr "Tên “%qs†tại %C đã được định nghĩa trước tại %L"
#: fortran/decl.c:1011
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Procedure %qs at %C has an explicit interface and must not have attributes declared at %L"
-msgstr "Cảnh báo vá» cuá»™c gá»i có giao diện ngầm"
+msgstr ""
#: fortran/decl.c:1082
#, gcc-internal-format
@@ -50288,9 +46910,9 @@ msgid "non-NULL pointer initialization at %C"
msgstr "Khởi tạo con trỠkhác KHÔNG tại %C"
#: fortran/decl.c:1896
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Function name %qs not allowed at %C"
-msgstr "không cho phép định nghĩa hàm tại đây"
+msgstr ""
#: fortran/decl.c:1963
#, gcc-internal-format
@@ -50338,9 +46960,9 @@ msgid "Pointer initialization at %C requires %<=>%>, not %<=%>"
msgstr ""
#: fortran/decl.c:2170 fortran/decl.c:8285
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Expected an initialization expression at %C"
-msgstr "Cần danh sách kết hợp tại %C"
+msgstr ""
#: fortran/decl.c:2177
#, gcc-internal-format, gfc-internal-format
@@ -50368,9 +46990,9 @@ msgid "Missing right parenthesis at %C"
msgstr ""
#: fortran/decl.c:2354 fortran/decl.c:2488
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Expected initialization expression at %C"
-msgstr "Cần danh sách kết hợp tại %C"
+msgstr ""
#: fortran/decl.c:2362 fortran/decl.c:2494
#, gcc-internal-format, gfc-internal-format
@@ -50657,9 +47279,9 @@ msgid "Missing symbol"
msgstr "Thiếu ký hiệu"
#: fortran/decl.c:4436
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "BIND(C) statement at %C"
-msgstr "câu lệnh SYNC tại %C"
+msgstr "BIND(C) tại %C"
#: fortran/decl.c:4514
#, gcc-internal-format, gfc-internal-format
@@ -50682,20 +47304,19 @@ msgid "PURE and IMPURE must not appear both at %C"
msgstr ""
#: fortran/decl.c:4654
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "IMPURE procedure at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "MODULE prefix at %C"
-msgstr "thủ tục IMPURE tại %C"
+msgstr "Tiá»n tố MODULE tại %C"
#: fortran/decl.c:4730 fortran/primary.c:1773
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Alternate-return argument at %C"
-msgstr "Äối số âm N tại %L"
+msgstr ""
#: fortran/decl.c:4776
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Name %qs at %C is the name of the procedure"
-msgstr "Äịnh thá»i bắt đầu và kết thúc thá»§ tục"
+msgstr ""
#: fortran/decl.c:4788
#, gcc-internal-format, gfc-internal-format
@@ -50703,9 +47324,9 @@ msgid "Unexpected junk in formal argument list at %C"
msgstr ""
#: fortran/decl.c:4805
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Duplicate symbol %qs in formal argument list at %C"
-msgstr "Cần danh sách đối số tại %C"
+msgstr "Trùng ký hiệu %qs trong danh sách đối số hình thức tại %C"
#: fortran/decl.c:4844
#, gcc-internal-format, gfc-internal-format
@@ -50748,9 +47369,9 @@ msgid "Dummy procedure at %C may not have BIND(C) attribute with NAME"
msgstr ""
#: fortran/decl.c:5214
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Procedure %qs at %L already has basic type of %s"
-msgstr "Thủ tục “%s†tại %C đã được định nghĩa trước tại %L"
+msgstr "Thủ tục “%qs†tại %L đã sẵn có kiểu cơ bản của %s"
#: fortran/decl.c:5260 fortran/decl.c:5448 fortran/decl.c:8766
#, gcc-internal-format, gfc-internal-format
@@ -50758,9 +47379,9 @@ msgid "Syntax error in PROCEDURE statement at %C"
msgstr ""
#: fortran/decl.c:5309 fortran/decl.c:8668
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Expected %<::%> after binding-attributes at %C"
-msgstr "Cần thuộc tính ràng buộc tại %C"
+msgstr ""
#: fortran/decl.c:5316
#, gcc-internal-format, gfc-internal-format
@@ -50870,9 +47491,9 @@ msgid "ENTRY statement at %C cannot appear within a contained subprogram"
msgstr ""
#: fortran/decl.c:5790
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Unexpected ENTRY statement at %C"
-msgstr "Không cần câu lệnh CASE tại %C"
+msgstr "Không cần câu lệnh ENTRY tại %C"
#: fortran/decl.c:5811
#, gcc-internal-format, gfc-internal-format
@@ -50895,9 +47516,9 @@ msgid "Syntax error in NAME= specifier for binding label at %C"
msgstr ""
#: fortran/decl.c:6188
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "NAME= specifier at %C should be a constant expression"
-msgstr "%qD được gá»i trong má»™t biểu thức hằng"
+msgstr ""
#: fortran/decl.c:6196
#, gcc-internal-format, gfc-internal-format
@@ -50925,9 +47546,9 @@ msgid "NAME not allowed on BIND(C) for ABSTRACT INTERFACE at %C"
msgstr ""
#: fortran/decl.c:6481
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Unexpected END statement at %C"
-msgstr "Không cần câu lệnh CASE tại %C"
+msgstr "Không cần câu lệnh END tại %C"
#: fortran/decl.c:6490
#, gcc-internal-format, gfc-internal-format
@@ -50938,7 +47559,7 @@ msgstr ""
#: fortran/decl.c:6499
#, gcc-internal-format, gfc-internal-format
msgid "%s statement expected at %L"
-msgstr "cần biểu thức %s tại %L"
+msgstr "cần lệnh %s tại %L"
#: fortran/decl.c:6510
#, gcc-internal-format, gfc-internal-format
@@ -50946,9 +47567,9 @@ msgid "Expecting %s statement at %L"
msgstr "Cần câu lệnh %s tại %L"
#: fortran/decl.c:6530
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Expected block name of %qs in %s statement at %L"
-msgstr "Cần một giao diện không tên tại %C"
+msgstr ""
#: fortran/decl.c:6547
#, gcc-internal-format, gfc-internal-format
@@ -50956,9 +47577,9 @@ msgid "Expected terminating name at %C"
msgstr "Cần tên chấm dứt tại %C"
#: fortran/decl.c:6561 fortran/decl.c:6569
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Expected label %qs for %s statement at %C"
-msgstr "Không cần câu lệnh CASE tại %C"
+msgstr ""
#: fortran/decl.c:6668
#, gcc-internal-format, gfc-internal-format
@@ -51156,9 +47777,9 @@ msgid "Syntax error in ASYNCHRONOUS statement at %C"
msgstr ""
#: fortran/decl.c:7679
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "MODULE PROCEDURE declaration at %C"
-msgstr "SOURCE tag tại %L"
+msgstr ""
#: fortran/decl.c:7772
#, gcc-internal-format, gfc-internal-format
@@ -51226,9 +47847,9 @@ msgid "Derived type name %qs at %C already has a basic type of %s"
msgstr ""
#: fortran/decl.c:8066
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Derived type definition of %qs at %C has already been defined"
-msgstr "%qD đã định nghĩa rồi"
+msgstr ""
#: fortran/decl.c:8171
#, gcc-internal-format, gfc-internal-format
@@ -51316,9 +47937,9 @@ msgid "Interface-name expected after %<(%> at %C"
msgstr ""
#: fortran/decl.c:8632
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<)%> expected at %C"
-msgstr "Cần \",\" tại %C"
+msgstr "cần %<)%> tại %C"
#: fortran/decl.c:8652
#, gcc-internal-format, gfc-internal-format
@@ -51336,9 +47957,9 @@ msgid "Expected binding name at %C"
msgstr "Cần tên ràng buộc tại %C"
#: fortran/decl.c:8684
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "PROCEDURE list at %C"
-msgstr "SOURCE tag tại %L"
+msgstr "danh sách PROCEDURE tại %C"
#: fortran/decl.c:8696
#, gcc-internal-format
@@ -51351,9 +47972,9 @@ msgid "%<::%> needed in PROCEDURE binding with explicit target at %C"
msgstr ""
#: fortran/decl.c:8712
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Expected binding target after %<=>%> at %C"
-msgstr "Cần thuộc tính ràng buộc tại %C"
+msgstr ""
#: fortran/decl.c:8729
#, gcc-internal-format
@@ -51371,9 +47992,9 @@ msgid "GENERIC at %C must be inside a derived-type CONTAINS"
msgstr ""
#: fortran/decl.c:8809
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Expected %<::%> at %C"
-msgstr "cần %<::%>"
+msgstr "Cần %<::%> tại %C"
#: fortran/decl.c:8821
#, gcc-internal-format, gfc-internal-format
@@ -51381,15 +48002,14 @@ msgid "Expected generic name or operator descriptor at %C"
msgstr ""
#: fortran/decl.c:8841
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "ENTRY statement at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "Malformed GENERIC statement at %C"
-msgstr "câu lệnh ENTRY tại %C"
+msgstr ""
#: fortran/decl.c:8852
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Expected %<=>%> at %C"
-msgstr "Cần \",\" tại %C"
+msgstr "Cần %<=>%> tại %C"
#: fortran/decl.c:8894
#, gcc-internal-format
@@ -51442,14 +48062,14 @@ msgid "Expected %<,%> at %C"
msgstr "Cần %<,%> tại %C"
#: fortran/decl.c:9070
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Unknown procedure name %qs at %C"
-msgstr "Không rõ toán tử “%s†tại %%L"
+msgstr "Không rõ tên thủ tục “%qs†tại %C"
#: fortran/decl.c:9083
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs at %C is already defined as FINAL procedure!"
-msgstr "Thủ tục “%s†tại %C đã được định nghĩa trước tại %L"
+msgstr ""
#: fortran/decl.c:9153
#, gcc-internal-format, gfc-internal-format
@@ -51487,9 +48107,9 @@ msgid "show_array_ref(): Unknown array reference"
msgstr ""
#: fortran/dump-parse-tree.c:290
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "show_ref(): Bad component code"
-msgstr "gfc_trans_code(): Mã câu lệnh sai"
+msgstr ""
#: fortran/dump-parse-tree.c:554
#, gcc-internal-format
@@ -51502,9 +48122,9 @@ msgid "show_expr(): Don't know how to show expr"
msgstr ""
#: fortran/dump-parse-tree.c:2520
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "show_code_node(): Bad statement code"
-msgstr "gfc_trans_code(): Mã câu lệnh sai"
+msgstr ""
#: fortran/error.c:337
#, gcc-internal-format, gfc-internal-format
@@ -51627,9 +48247,9 @@ msgid "Intrinsic function %qs at %L is not permitted in an initialization expres
msgstr ""
#: fortran/expr.c:2550
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "PARAMETER %qs is used at %L before its definition is complete"
-msgstr "%qD được dùng trước khi nó được định nghĩa"
+msgstr ""
#: fortran/expr.c:2570
#, gcc-internal-format
@@ -51657,14 +48277,14 @@ msgid "Parameter %qs at %L has not been declared or is a variable, which does no
msgstr ""
#: fortran/expr.c:2652
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "check_init_expr(): Unknown expression type"
-msgstr "Mong đợi một loại biểu thức"
+msgstr ""
#: fortran/expr.c:2778
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Specification function %qs at %L cannot be a statement function"
-msgstr "cấu tử không thể là hàm thành viên tĩnh"
+msgstr ""
#: fortran/expr.c:2785
#, gcc-internal-format
@@ -51682,9 +48302,9 @@ msgid "Specification function %qs at %L cannot be RECURSIVE"
msgstr ""
#: fortran/expr.c:2946
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Dummy argument %qs not allowed in expression at %L"
-msgstr "Giá trị số nguyên quá lớn trong biểu thức tại %C"
+msgstr ""
#: fortran/expr.c:2953
#, gcc-internal-format
@@ -51697,9 +48317,9 @@ msgid "Dummy argument %qs at %L cannot be INTENT(OUT)"
msgstr ""
#: fortran/expr.c:2989
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Variable %qs cannot appear in the expression at %L"
-msgstr "%qs không thể xuất hiện trong biểu thức hằng"
+msgstr "Biến %qs không thể xuất hiện trong biểu thức tại %L"
#: fortran/expr.c:3020
#, gcc-internal-format
@@ -51802,9 +48422,9 @@ msgid "%qs in the pointer assignment at %L cannot be an l-value since it is a pr
msgstr ""
#: fortran/expr.c:3368
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Expected bounds specification for %qs at %L"
-msgstr "Cần danh sách kết hợp tại %C"
+msgstr ""
#: fortran/expr.c:3373
#, gcc-internal-format
@@ -52079,9 +48699,9 @@ msgid "Creating array temporary at %L"
msgstr "Äang tạo mảng tạm tại %L"
#: fortran/frontend-passes.c:718 fortran/frontend-passes.c:721
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Removing call to function %qs at %L"
-msgstr "gặp lỗi trong các đối số tới hàm đặc tả %qs"
+msgstr ""
#: fortran/frontend-passes.c:1696
#, gcc-internal-format
@@ -52169,10 +48789,9 @@ msgid "Expected %<END INTERFACE ASSIGNMENT (=)%> at %C"
msgstr "Cần %<END INTERFACE ASSIGNMENT (=)%> tại %C"
#: fortran/interface.c:350
-#, fuzzy, gcc-internal-format
-#| msgid "Expecting %<END INTERFACE OPERATOR (.%s.)%> at %C"
+#, gcc-internal-format
msgid "Expecting %<END INTERFACE OPERATOR (%s)%> at %C, "
-msgstr "Cần %<END INTERFACE OPERATOR (.%s.)%> tại %C"
+msgstr "Cần %<END INTERFACE OPERATOR (%s)%> tại %C, "
#: fortran/interface.c:353
#, gcc-internal-format
@@ -52280,9 +48899,9 @@ msgid "In %s at %L procedures must be all FUNCTIONs as the generic name is also
msgstr ""
#: fortran/interface.c:1618
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Internal procedure %qs in %s at %L"
-msgstr "Äối số thá»§ tục không hợp lệ tại %L"
+msgstr ""
#: fortran/interface.c:1675 fortran/interface.c:1679
#, gcc-internal-format
@@ -52295,9 +48914,9 @@ msgid "Although not referenced, %qs has ambiguous interfaces at %L"
msgstr ""
#: fortran/interface.c:1718
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs at %L is not a module procedure"
-msgstr "thủ tục mô-đun"
+msgstr ""
#: fortran/interface.c:1922
#, gcc-internal-format
@@ -52345,14 +48964,14 @@ msgid "Assumed-type actual argument at %L requires that dummy argument %qs is of
msgstr ""
#: fortran/interface.c:2066
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Actual argument to %qs at %L must be polymorphic"
-msgstr "Äối số cá»§a %s tại %L phải là cá»§a má»™t độ dài"
+msgstr ""
#: fortran/interface.c:2079
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Actual argument to %qs at %L must have the same declared type"
-msgstr "Äối số cá»§a %s tại %L phải là cá»§a má»™t độ dài"
+msgstr ""
#: fortran/interface.c:2094
#, gcc-internal-format
@@ -52360,9 +48979,9 @@ msgid "Actual argument to %qs at %L must be unlimited polymorphic since the form
msgstr ""
#: fortran/interface.c:2105
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Actual argument to %qs at %L must be a coarray"
-msgstr "Äối số cá»§a %s tại %L phải là cá»§a má»™t độ dài"
+msgstr ""
#: fortran/interface.c:2124
#, gcc-internal-format
@@ -52370,9 +48989,9 @@ msgid "Corank mismatch in argument %qs at %L (%d and %d)"
msgstr ""
#: fortran/interface.c:2142
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Actual argument to %qs at %L must be simply contiguous or an element of such an array"
-msgstr "Äối số cá»§a %s tại %L phải là cá»§a má»™t độ dài"
+msgstr ""
#: fortran/interface.c:2157
#, gcc-internal-format
@@ -52475,24 +49094,24 @@ msgid "Actual argument at %L to allocatable or pointer dummy argument %qs must h
msgstr ""
#: fortran/interface.c:2785
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Character length of actual argument shorter than of dummy argument %qs (%lu/%lu) at %L"
-msgstr "Chiá»u dài chuá»—i thật vẫn nhá» hÆ¡n Ä‘iá»u tuyên bố cho đối số giả “%s†(%ld/%ld)"
+msgstr "Chiá»u dài chuá»—i thật vẫn nhá» hÆ¡n Ä‘iá»u khai báo cho đối số giả “%qs†(%lu/%lu) tại %L"
#: fortran/interface.c:2790
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Actual argument contains too few elements for dummy argument %qs (%lu/%lu) at %L"
-msgstr "Chiá»u dài chuá»—i thật không tương ứng vá»›i Ä‘iá»u tuyên bố cho đối số giả “%s†(%ld/%ld)"
+msgstr "Äối số thá»±c tế có chứa quá ít phần tá»­ cho đối số giả “%qs†(%lu/%lu) tại %L"
#: fortran/interface.c:2809
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Expected a procedure pointer for argument %qs at %L"
-msgstr "Cần một giao diện không tên tại %C"
+msgstr "Cần một con trỠthủ tục cho đối số %qs tại %L"
#: fortran/interface.c:2825
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Expected a procedure for argument %qs at %L"
-msgstr "Äối số thá»§ tục không hợp lệ tại %L"
+msgstr "Cần một thủ tục cho đối số %qs tại %L"
#: fortran/interface.c:2839
#, gcc-internal-format
@@ -52500,9 +49119,9 @@ msgid "Actual argument for %qs cannot be an assumed-size array at %L"
msgstr ""
#: fortran/interface.c:2848
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Actual argument for %qs must be a pointer at %L"
-msgstr "sắp hàng cho %q+D phải ít nhất %d"
+msgstr ""
#: fortran/interface.c:2858
#, gcc-internal-format
@@ -52530,14 +49149,14 @@ msgid "Coindexed actual argument at %L with allocatable ultimate component to du
msgstr ""
#: fortran/interface.c:2921
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Actual CLASS array argument for %qs must be a full array at %L"
-msgstr "sắp hàng cho %q+D phải ít nhất %d"
+msgstr ""
#: fortran/interface.c:2931
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Actual argument for %qs must be ALLOCATABLE at %L"
-msgstr "sắp hàng cho %q+D phải ít nhất %d"
+msgstr ""
#: fortran/interface.c:2960
#, gcc-internal-format
@@ -52610,14 +49229,14 @@ msgid "Coindexed polymorphic actual argument at %L is passed polymorphic dummy a
msgstr ""
#: fortran/interface.c:3332 fortran/interface.c:3342
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Procedure %qs called at %L is not explicitly declared"
-msgstr "Cảnh báo vá» thá»§ tục được gá»i mà không phải được tuyên bố dứt khoát"
+msgstr "Thá»§ tục %qs được gá»i tại %L không được khai báo rõ ràng"
#: fortran/interface.c:3338
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Procedure %qs called with an implicit interface at %L"
-msgstr "Cảnh báo vá» cuá»™c gá»i có giao diện ngầm"
+msgstr ""
#: fortran/interface.c:3352
#, gcc-internal-format
@@ -52665,9 +49284,9 @@ msgid "Assumed-rank argument requires an explicit interface at %L"
msgstr ""
#: fortran/interface.c:3468
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Procedure pointer component %qs called with an implicit interface at %L"
-msgstr "Cảnh báo vá» cuá»™c gá»i có giao diện ngầm"
+msgstr ""
#: fortran/interface.c:3479
#, gcc-internal-format
@@ -52820,9 +49439,9 @@ msgid "make_generic(): Can't find generic symbol %qs"
msgstr ""
#: fortran/intrinsic.c:3871
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Too many arguments in call to %qs at %L"
-msgstr "Quá nhiá»u đối số cho %s tại %L"
+msgstr "Quá nhiá»u đối số trong cuá»™c gá»i đến %qs tại %L"
#: fortran/intrinsic.c:3886
#, gcc-internal-format, gfc-internal-format
@@ -52830,9 +49449,9 @@ msgid "The argument list functions %%VAL, %%LOC or %%REF are not allowed in this
msgstr ""
#: fortran/intrinsic.c:3889
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Can't find keyword named %qs in call to %qs at %L"
-msgstr "Không thể chuyển đổi %s thành %s tại %L"
+msgstr ""
#: fortran/intrinsic.c:3896
#, gcc-internal-format
@@ -52840,9 +49459,9 @@ msgid "Argument %qs appears twice in call to %qs at %L"
msgstr ""
#: fortran/intrinsic.c:3910
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Missing actual argument %qs in call to %qs at %L"
-msgstr "thiếu đối số đối cho %qs"
+msgstr "Thiếu đối số đối thá»±c tế %qs trong cú gá»i đến %qs tại %L"
#: fortran/intrinsic.c:3925
#, gcc-internal-format, gfc-internal-format
@@ -52880,9 +49499,9 @@ msgid "Intrinsic %qs (is %s) is used at %L"
msgstr ""
#: fortran/intrinsic.c:4443
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Function %qs as initialization expression at %L"
-msgstr "hàm %qD được khởi tạo giống như là một biến"
+msgstr "Hàm %qs được khởi tạo giống như là một biểu thức %L"
#: fortran/intrinsic.c:4519
#, gcc-internal-format, gfc-internal-format
@@ -52975,9 +49594,9 @@ msgid "Extension: Missing positive width after L descriptor at %L"
msgstr ""
#: fortran/io.c:825
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<G0%> in format at %L"
-msgstr "%s trong chuỗi định dạng tại %L"
+msgstr "%<G0%> trong chuỗi định dạng tại %L"
#: fortran/io.c:853
#, gcc-internal-format, gfc-internal-format
@@ -53045,9 +49664,9 @@ msgid "Invalid value for %s specification at %C"
msgstr ""
#: fortran/io.c:1304 fortran/io.c:1335
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Duplicate %s specification at %C"
-msgstr "Trùng thuộc tính %s tại %L"
+msgstr "Trùng đặc tả %s tại %C"
#: fortran/io.c:1342
#, gcc-internal-format, gfc-internal-format
@@ -53240,9 +49859,9 @@ msgid "%s statement not allowed in PURE procedure at %C"
msgstr ""
#: fortran/io.c:2531
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "UNIT number missing in statement at %L"
-msgstr "Câu lệnh V/R chứa con số đơn vị quá lớn"
+msgstr ""
#: fortran/io.c:2539 fortran/io.c:2976
#, gcc-internal-format, gfc-internal-format
@@ -53345,9 +49964,9 @@ msgid "io_kind_name(): bad I/O-kind"
msgstr ""
#: fortran/io.c:3171
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in I/O iterator at %C"
-msgstr "Gặp lỗi cú pháp trong biểu thức tại %C"
+msgstr ""
#: fortran/io.c:3202
#, gcc-internal-format, gfc-internal-format
@@ -53361,9 +49980,9 @@ msgstr ""
#. A general purpose syntax error.
#: fortran/io.c:3265 fortran/io.c:3883 fortran/gfortran.h:2715
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in %s statement at %C"
-msgstr "Gặp lỗi cú pháp trong biểu thức tại %C"
+msgstr ""
#: fortran/io.c:3349
#, gcc-internal-format, gfc-internal-format
@@ -53421,9 +50040,9 @@ msgid "INQUIRE statement at %L requires either FILE or UNIT specifier"
msgstr ""
#: fortran/io.c:4134
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "UNIT number in INQUIRE statement at %L can not be -1"
-msgstr "Câu lệnh V/R chứa con số đơn vị quá lớn"
+msgstr ""
#: fortran/io.c:4148
#, gcc-internal-format, gfc-internal-format
@@ -53441,9 +50060,9 @@ msgid "WAIT statement not allowed in PURE procedure at %C"
msgstr ""
#: fortran/match.c:109
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "gfc_op2string(): Bad code"
-msgstr "gfc_trans_code(): Mã câu lệnh sai"
+msgstr ""
#: fortran/match.c:166
#, gcc-internal-format
@@ -53476,9 +50095,9 @@ msgid "Label name %qs at %C is ambiguous"
msgstr ""
#: fortran/match.c:506
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Duplicate construct label %qs at %C"
-msgstr "Trùng thuộc tính %s tại %L"
+msgstr "Trùng nhãn cấu trúc %qs tại %C"
#: fortran/match.c:540
#, gcc-internal-format, gfc-internal-format
@@ -53511,9 +50130,9 @@ msgid "Expected a step value in iterator at %C"
msgstr ""
#: fortran/match.c:935
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in iterator at %C"
-msgstr "Gặp lỗi cú pháp trong biểu thức tại %C"
+msgstr ""
#: fortran/match.c:1103
#, gcc-internal-format, gfc-internal-format
@@ -53606,9 +50225,9 @@ msgid "Expected association at %C"
msgstr "Cần kết hợp tại %C"
#: fortran/match.c:1755
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Duplicate name %qs in association at %C"
-msgstr "Cần kết hợp tại %C"
+msgstr ""
#: fortran/match.c:1763
#, gcc-internal-format, gfc-internal-format
@@ -53616,9 +50235,9 @@ msgid "Association target at %C must not be coindexed"
msgstr ""
#: fortran/match.c:1781
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Expected %<)%> or %<,%> at %C"
-msgstr "cần %<,%> hoặc %<)%> sau %qE"
+msgstr "cần %<)%> hoặc %<,%> tại %C"
#: fortran/match.c:1799
#, gcc-internal-format, gfc-internal-format
@@ -53692,9 +50311,9 @@ msgid "%s statement at %C is not applicable to construct %qs"
msgstr ""
#: fortran/match.c:2507
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "%s statement at %C leaving OpenACC structured block"
-msgstr " vào khối được cấu trúc OpenMP"
+msgstr ""
#: fortran/match.c:2532
#, gcc-internal-format, gfc-internal-format
@@ -53794,16 +50413,14 @@ msgid "Redundant UNTIL_COUNT tag found at %L "
msgstr ""
#: fortran/match.c:2932
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "ENTRY statement at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "EVENT POST statement at %C"
-msgstr "câu lệnh ENTRY tại %C"
+msgstr ""
#: fortran/match.c:2942
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "ENTRY statement at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "EVENT WAIT statement at %C"
-msgstr "câu lệnh ENTRY tại %C"
+msgstr ""
#: fortran/match.c:2967
#, gcc-internal-format, gfc-internal-format
@@ -54059,9 +50676,9 @@ msgid "Variable %qs in common block %qs at %C can not be bind(c) since it is not
msgstr ""
#: fortran/match.c:4553
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Symbol %qs at %C is already in a COMMON block"
-msgstr "Thủ tục “%s†tại %C đã được định nghĩa trước tại %L"
+msgstr "Ký hiệu %qs tại %C đã có trong khối COMMON"
#: fortran/match.c:4561
#, gcc-internal-format
@@ -54129,9 +50746,9 @@ msgid "Statement function at %L is recursive"
msgstr ""
#: fortran/match.c:5118
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Statement function at %L cannot appear within an INTERFACE"
-msgstr " kiểu hàm thành viên %qT không phải là một đối số mẫu hợp lệ"
+msgstr "Hàm khai báo tại %L không phải xuất hiện trong một GIAO DIỆN"
#: fortran/match.c:5123
#, gcc-internal-format, gfc-internal-format
@@ -54149,14 +50766,14 @@ msgid "Expected initialization expression in CASE at %C"
msgstr ""
#: fortran/match.c:5318
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Expected block name %qs of SELECT construct at %C"
-msgstr "Cần một giao diện không tên tại %C"
+msgstr ""
#: fortran/match.c:5598
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "parse error in SELECT TYPE statement at %C"
-msgstr "câu lệnh ENTRY tại %C"
+msgstr ""
#: fortran/match.c:5622
#, gcc-internal-format, gfc-internal-format
@@ -54204,14 +50821,14 @@ msgid "Label %qs at %C doesn't match WHERE label %qs"
msgstr ""
#: fortran/matchexp.c:72
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Bad character %qc in OPERATOR name at %C"
-msgstr "Tên có chứa ký tự không hợp lệ tại %C"
+msgstr ""
#: fortran/matchexp.c:80
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "The name %qs cannot be used as a defined operator at %C"
-msgstr "%qE không thể dùng như một hàm"
+msgstr ""
#: fortran/matchexp.c:173
#, gcc-internal-format, gfc-internal-format
@@ -54245,9 +50862,9 @@ msgid "gfc_typename(): Undefined type"
msgstr ""
#: fortran/misc.c:187
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "gfc_code2string(): Bad code"
-msgstr "gfc_trans_code(): Mã câu lệnh sai"
+msgstr ""
#: fortran/module.c:240
#, gcc-internal-format
@@ -54295,15 +50912,14 @@ msgid "The name %qs at %C has already been used as an external module name."
msgstr ""
#: fortran/module.c:744
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Coarray declaration at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "SUBMODULE declaration at %C"
-msgstr "Khai báo Coarray tại %C"
+msgstr ""
#: fortran/module.c:814
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in SUBMODULE statement at %C"
-msgstr "Gặp lỗi cú pháp trong biểu thức tại %C"
+msgstr ""
#: fortran/module.c:1159
#, gcc-internal-format
@@ -54396,19 +51012,19 @@ msgid "write_symtree(): Symbol not written"
msgstr ""
#: fortran/module.c:6076
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Can't open module file %qs for writing at %C: %s"
-msgstr "can%'t mở %s để ghi: %m"
+msgstr ""
#: fortran/module.c:6095
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Error writing module file %qs for writing: %s"
-msgstr "Gặp lỗi khi ghi tập tin môt-đun: %s"
+msgstr ""
#: fortran/module.c:6106
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Can't delete module file %qs: %s"
-msgstr "can%'t đóng tập tin đầu vào %s: %m"
+msgstr ""
#: fortran/module.c:6109
#, gcc-internal-format
@@ -54416,15 +51032,15 @@ msgid "Can't rename module file %qs to %qs: %s"
msgstr ""
#: fortran/module.c:6115
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Can't delete temporary module file %qs: %s"
-msgstr "không thể tạo tập tin tạm thá»i"
+msgstr ""
#: fortran/module.c:6157 fortran/module.c:6484 fortran/module.c:6517
#: fortran/module.c:6559
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Symbol %qs already declared"
-msgstr "Thành phần “%s†tại %C đã sẵn được khai báo tại %L"
+msgstr "Ký hiệu %qs đã sẵn được khai báo"
#: fortran/module.c:6227
#, gcc-internal-format, gfc-internal-format
@@ -54482,24 +51098,24 @@ msgid "Can't find an intrinsic module named %qs at %C"
msgstr ""
#: fortran/module.c:6894
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "IEEE_FEATURES module at %C"
-msgstr "\"USE :: module\" tại %C"
+msgstr ""
#: fortran/module.c:6900
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "IEEE_EXCEPTIONS module at %C"
-msgstr "mô đun ISO_C_BINDING tại %C"
+msgstr ""
#: fortran/module.c:6906
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "IEEE_ARITHMETIC module at %C"
-msgstr "mô đun ISO_C_BINDING tại %C"
+msgstr ""
#: fortran/module.c:6913
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Can't open module file %qs for reading at %C: %s"
-msgstr "Gặp lá»—i khi mở tập tin thống kê %s để Ä‘á»c [%s]"
+msgstr ""
#: fortran/module.c:6921
#, gcc-internal-format
@@ -54533,25 +51149,24 @@ msgid "Syntax error in OpenMP variable list at %C"
msgstr ""
#: fortran/openmp.c:388
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in OpenACC expression list at %C"
-msgstr "Gặp lỗi cú pháp trong biểu thức tại %C"
+msgstr ""
#: fortran/openmp.c:463
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Enable alignment of COMMON blocks"
+#, gcc-internal-format, gfc-internal-format
msgid "Variable at %C is an element of a COMMON block"
-msgstr "Bật sự xếp hàng các khối CHUNG"
+msgstr ""
#: fortran/openmp.c:523
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after !$ACC DECLARE at %C"
-msgstr "Không cần câu lệnh CASE tại %C"
+msgstr ""
#: fortran/openmp.c:533
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in !$ACC DECLARE list at %C"
-msgstr "Gặp lỗi cú pháp trong biểu thức tại %C"
+msgstr ""
#: fortran/openmp.c:989
#, gcc-internal-format, gfc-internal-format
@@ -54564,9 +51179,9 @@ msgid "COLLAPSE clause argument not constant positive integer at %C"
msgstr ""
#: fortran/openmp.c:1474
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Invalid clause in module with $!ACC DECLARE at %L"
-msgstr "đối số hợp lệ cho cho %qs là: %s"
+msgstr ""
#: fortran/openmp.c:1484
#, gcc-internal-format, gfc-internal-format
@@ -54589,9 +51204,9 @@ msgid "Unexpected junk in !$ACC WAIT at %C"
msgstr ""
#: fortran/openmp.c:1598
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Invalid argument to $!ACC WAIT at %L"
-msgstr "đối số hợp lệ cho cho %qs là: %s"
+msgstr "Äối số hợp lệ cho $!ACC WAIT tại %L"
#: fortran/openmp.c:1607
#, gcc-internal-format, gfc-internal-format
@@ -54734,14 +51349,14 @@ msgid "Unexpected junk after $OMP BARRIER statement at %C"
msgstr ""
#: fortran/openmp.c:2829
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after $OMP TASKGROUP statement at %C"
-msgstr "Không cần câu lệnh CASE tại %C"
+msgstr ""
#: fortran/openmp.c:2879
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after $OMP CANCELLATION POINT statement at %C"
-msgstr "Không cần câu lệnh CASE tại %C"
+msgstr ""
#: fortran/openmp.c:2899
#, gcc-internal-format, gfc-internal-format
@@ -54754,9 +51369,9 @@ msgid "%s clause at %L requires a scalar INTEGER expression"
msgstr ""
#: fortran/openmp.c:2950
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "INTEGER expression of %s clause at %L must be positive"
-msgstr "SIZE tại %L phải là số dương"
+msgstr ""
#: fortran/openmp.c:2961
#, gcc-internal-format
@@ -54819,14 +51434,14 @@ msgid "POINTER object %qs in %s clause at %L"
msgstr ""
#: fortran/openmp.c:3030 fortran/openmp.c:3685
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Cray pointer object %qs in %s clause at %L"
-msgstr "Không thể chuyển đổi %s thành %s tại %L"
+msgstr ""
#: fortran/openmp.c:3035 fortran/openmp.c:3688
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Cray pointee object %qs in %s clause at %L"
-msgstr "Không thể chuyển đổi %s thành %s tại %L"
+msgstr ""
#: fortran/openmp.c:3040 fortran/openmp.c:3677
#, gcc-internal-format
@@ -54869,14 +51484,14 @@ msgid "SCHEDULE clause's chunk_size at %L requires a scalar INTEGER expression"
msgstr ""
#: fortran/openmp.c:3208
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Variable %qs is not a dummy argument at %L"
-msgstr "%qD không phải là đối số hàm"
+msgstr "Biến %qs không phải là đối số hàm giả tại %L"
#: fortran/openmp.c:3240
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Object %qs is not a variable at %L"
-msgstr "%qD không phải là một biến"
+msgstr "Äối tượng %qs không phải là má»™t biến tại %L"
#: fortran/openmp.c:3256 fortran/openmp.c:3267 fortran/openmp.c:3275
#: fortran/openmp.c:3286 fortran/openmp.c:3298 fortran/openmp.c:3313
@@ -54886,9 +51501,9 @@ msgid "Symbol %qs present on multiple clauses at %L"
msgstr ""
#: fortran/openmp.c:3320
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Array %qs is not permitted in reduction at %L"
-msgstr "%qs không thể xuất hiện trong biểu thức hằng"
+msgstr ""
#: fortran/openmp.c:3333
#, gcc-internal-format
@@ -54941,9 +51556,9 @@ msgid "%qs in %s clause at %L is not a proper array section"
msgstr ""
#: fortran/openmp.c:3431
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Coarrays not supported in %s clause at %L"
-msgstr "SPE không được hỗ trợ ở đích này"
+msgstr ""
#: fortran/openmp.c:3440
#, gcc-internal-format, gfc-internal-format
@@ -54961,9 +51576,9 @@ msgid "THREADPRIVATE object %qs in %s clause at %L"
msgstr ""
#: fortran/openmp.c:3486 fortran/openmp.c:3498
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Cray pointee %qs in %s clause at %L"
-msgstr "Không thể chuyển đổi %s thành %s tại %L"
+msgstr ""
#: fortran/openmp.c:3501
#, gcc-internal-format
@@ -54971,14 +51586,14 @@ msgid "ASSOCIATE name %qs in %s clause at %L"
msgstr ""
#: fortran/openmp.c:3506
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Procedure pointer %qs in %s clause at %L"
-msgstr "Thủ tục “%s†tại %C đã được định nghĩa trước tại %L"
+msgstr ""
#: fortran/openmp.c:3512
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Cray pointer %qs in %s clause at %L"
-msgstr "Không thể chuyển đổi %s thành %s tại %L"
+msgstr "Con trỠCray %qs trong mệnh đỠ%s tại %L"
#: fortran/openmp.c:3522
#, gcc-internal-format
@@ -54997,9 +51612,9 @@ msgid "!$OMP DECLARE REDUCTION %s not found for type %s at %L"
msgstr ""
#: fortran/openmp.c:3648
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "LINEAR variable %qs must be INTEGER at %L"
-msgstr "%s tại %L phải là Sá»-NGUYÊN"
+msgstr "biến LINEAR %qs tại %L phải là Sá»-NGUYÊN"
#: fortran/openmp.c:3651
#, gcc-internal-format
@@ -55082,9 +51697,9 @@ msgid "!$OMP ATOMIC with ALLOCATABLE variable at %L"
msgstr ""
#: fortran/openmp.c:4007
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "!$OMP ATOMIC assignment operator must be binary +, *, -, /, .AND., .OR., .EQV. or .NEQV. at %L"
-msgstr "!$OMP ATOMIC phân bổ bên trong phải là MIN, MAX, IAND, IOR hay IEOR tại %L"
+msgstr ""
#: fortran/openmp.c:4055
#, gcc-internal-format, gfc-internal-format
@@ -55147,9 +51762,9 @@ msgid "%s cannot be a DO CONCURRENT loop at %L"
msgstr ""
#: fortran/openmp.c:4485
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "%s iteration variable must be of type integer at %L"
-msgstr "thẻ %s tại %L phải là kiểu %s"
+msgstr ""
#: fortran/openmp.c:4489
#, gcc-internal-format, gfc-internal-format
@@ -55292,9 +51907,9 @@ msgid "Tiled loop cannot be parallelized across gangs, workers and vectors at th
msgstr ""
#: fortran/openmp.c:4867
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "TILE requires constant expression at %L"
-msgstr "%qE không phải là biểu thức hằng"
+msgstr "TILE cần biểu thức hằng tại %L"
#: fortran/openmp.c:4932
#, gcc-internal-format
@@ -55402,14 +52017,14 @@ msgid "Flag %<-fmax-stack-var-size=%d%> overwrites %<-frecursive%> implied by %<
msgstr ""
#: fortran/options.c:381
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Fixed line length must be at least seven"
-msgstr "sắp hàng cho %q+D phải ít nhất %d"
+msgstr ""
#: fortran/options.c:384
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Free line length must be at least three"
-msgstr "sắp hàng cho %q+D phải ít nhất %d"
+msgstr ""
#: fortran/options.c:387
#, gcc-internal-format, gfc-internal-format
@@ -55422,24 +52037,24 @@ msgid "gfortran: Only one %<-J%> option allowed"
msgstr ""
#: fortran/options.c:478
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Argument to %<-ffpe-trap%> is not valid: %s"
-msgstr "Äối số cho -fcoarray không hợp lệ: %s"
+msgstr ""
#: fortran/options.c:480
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Argument to %<-ffpe-summary%> is not valid: %s"
-msgstr "Äối số cho -fcoarray không hợp lệ: %s"
+msgstr ""
#: fortran/options.c:520
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Argument to %<-fcheck%> is not valid: %s"
-msgstr "Äối số cho -fcoarray không hợp lệ: %s"
+msgstr ""
#: fortran/options.c:569
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<-static-libgfortran%> is not supported in this configuration"
-msgstr "-gz=zlib không được hỗ trợ trong cấu hình này"
+msgstr ""
#: fortran/options.c:592
#, gcc-internal-format, gfc-internal-format
@@ -55447,9 +52062,9 @@ msgid "Maximum supported identifier length is %d"
msgstr ""
#: fortran/options.c:612
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Unrecognized option to %<-finit-logical%>: %s"
-msgstr "Không nhận ra tùy chá»n để khởi tạo giá trị dấu chấm động: %qs"
+msgstr ""
#: fortran/options.c:628
#, gcc-internal-format
@@ -55522,14 +52137,14 @@ msgid "FORMAT statement at %L does not have a statement label"
msgstr ""
#: fortran/parse.c:2194
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "gfc_ascii_statement(): Bad statement code"
-msgstr "gfc_trans_code(): Mã câu lệnh sai"
+msgstr ""
#: fortran/parse.c:2339
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Unexpected %s statement at %C"
-msgstr "Không cần câu lệnh CASE tại %C"
+msgstr "Không cần câu lệnh %s tại %C"
#: fortran/parse.c:2485
#, gcc-internal-format, gfc-internal-format
@@ -55537,9 +52152,9 @@ msgid "%s statement at %C cannot follow %s statement at %L"
msgstr ""
#: fortran/parse.c:2502
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Unexpected end of file in %qs"
-msgstr "cần kết thúc dòng"
+msgstr "Gặp kết thúc tập tin bất thưá»ng tại %qs"
#: fortran/parse.c:2534
#, gcc-internal-format
@@ -55742,14 +52357,14 @@ msgid "%s statement at %C follows another accessibility specification"
msgstr ""
#: fortran/parse.c:3435
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Bad kind expression for function %qs at %L"
-msgstr "Chuyển đổi từ %s sang %s tại %L"
+msgstr ""
#: fortran/parse.c:3439
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "The type for function %qs at %L is not accessible"
-msgstr "Äối số cá»§a hàm %s tại %L là âm"
+msgstr "Kiểu của hàm %qs tại %L là không thể truy cập"
#: fortran/parse.c:3499
#, gcc-internal-format, gfc-internal-format
@@ -55787,9 +52402,9 @@ msgid "Expected TYPE IS, CLASS IS or END SELECT statement following SELECT TYPE
msgstr ""
#: fortran/parse.c:3855
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Variable %qs at %C cannot be redefined inside loop beginning at %L"
-msgstr "%qs không thể xuất hiện trong biểu thức hằng"
+msgstr ""
#: fortran/parse.c:3888
#, gcc-internal-format, gfc-internal-format
@@ -55842,14 +52457,14 @@ msgid "OpenACC directive inside of CRITICAL block at %C"
msgstr ""
#: fortran/parse.c:4481
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Expecting %s at %C"
-msgstr "Cần \",\" tại %C"
+msgstr "Cần %s tại %C"
#: fortran/parse.c:4525
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Expected DO loop at %C"
-msgstr "Cần \",\" tại %C"
+msgstr "Cần vòng lặp DO tại %C"
#: fortran/parse.c:4545
#, gcc-internal-format, gfc-internal-format
@@ -55872,9 +52487,9 @@ msgid "DATA statement at %C after the first executable statement"
msgstr ""
#: fortran/parse.c:5060
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Contained procedure %qs at %C is already ambiguous"
-msgstr "Thủ tục “%s†tại %C đã được định nghĩa trước tại %L"
+msgstr ""
#: fortran/parse.c:5117
#, gcc-internal-format, gfc-internal-format
@@ -55897,14 +52512,14 @@ msgid "gfc_global_used(): Bad type"
msgstr ""
#: fortran/parse.c:5305
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Global binding name %qs at %L is already being used as a %s at %L"
-msgstr "Thủ tục “%s†tại %C đã được định nghĩa trước tại %L"
+msgstr ""
#: fortran/parse.c:5308
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Global name %qs at %L is already being used as a %s at %L"
-msgstr "Thủ tục “%s†tại %C đã được định nghĩa trước tại %L"
+msgstr ""
#: fortran/parse.c:5329
#, gcc-internal-format, gfc-internal-format
@@ -56215,9 +52830,9 @@ msgid "No initializer for component %qs given in the structure constructor at %C
msgstr ""
#: fortran/primary.c:2493
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Can't construct ABSTRACT type %qs at %L"
-msgstr "Không thể chuyển đổi %s thành %s tại %L"
+msgstr "Không thể xây dựng kiểu TRỪU TƯỢNG %qs tại %L"
#: fortran/primary.c:2513
#, gcc-internal-format, gfc-internal-format
@@ -56255,29 +52870,29 @@ msgid "%qs at %C is the name of a recursive function and so refers to the result
msgstr ""
#: fortran/primary.c:2948
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Unexpected use of subroutine name %qs at %C"
-msgstr "Cần tên chấm dứt tại %C"
+msgstr ""
#: fortran/primary.c:2980
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Statement function %qs requires argument list at %C"
-msgstr "Cần danh sách đối số tại %C"
+msgstr "Câu lệnh hàm %qs cần một danh sách đối số tại %C"
#: fortran/primary.c:2983
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Function %qs requires an argument list at %C"
-msgstr "Cần danh sách đối số tại %C"
+msgstr "Hàm %qs cần một danh sách đối số tại %C"
#: fortran/primary.c:3033
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Missing argument to %qs at %C"
-msgstr "thiếu đối số đối cho %qs"
+msgstr ""
#: fortran/primary.c:3189
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Missing argument list in function %qs at %C"
-msgstr "thiếu đối số đối cho %qs"
+msgstr ""
#: fortran/primary.c:3223
#, gcc-internal-format, gfc-internal-format
@@ -56300,9 +52915,9 @@ msgid "%qs at %L is of the ABSTRACT type %qs"
msgstr "%qs tại %L phải là kiểu ABSTRACT %s"
#: fortran/resolve.c:126
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ABSTRACT type %qs used at %L"
-msgstr "Kiểu TRỪU TƯỢNG tại %C"
+msgstr "Kiểu TRỪU TƯỢNG tại %qs được dùng tại %L"
#: fortran/resolve.c:143
#, gcc-internal-format
@@ -56315,9 +52930,9 @@ msgid "Interface %qs at %L may not be generic"
msgstr ""
#: fortran/resolve.c:163
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Interface %qs at %L may not be a statement function"
-msgstr "cấu tử không thể là hàm thành viên tĩnh"
+msgstr "Giao diện %qs tại %L không thể là hàm khai báo"
#: fortran/resolve.c:172
#, gcc-internal-format
@@ -56325,9 +52940,9 @@ msgid "Intrinsic procedure %qs not allowed in PROCEDURE statement at %L"
msgstr ""
#: fortran/resolve.c:178
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Interface %qs at %L must be explicit"
-msgstr "%s tại %L phải là số nguyên"
+msgstr ""
#: fortran/resolve.c:200
#, gcc-internal-format
@@ -56375,9 +52990,9 @@ msgid "Argument %qs of pure subroutine %qs at %L must have its INTENT specified
msgstr ""
#: fortran/resolve.c:419
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "INTENT(OUT) argument %qs of pure procedure %qs at %L may not be polymorphic"
-msgstr "Äối số cá»§a %s tại %L phải là cá»§a má»™t độ dài"
+msgstr ""
#: fortran/resolve.c:452
#, gcc-internal-format
@@ -56385,9 +53000,9 @@ msgid "Coarray dummy argument %qs at %L to elemental procedure"
msgstr ""
#: fortran/resolve.c:460
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Argument %qs of elemental procedure at %L must be scalar"
-msgstr "thẻ %s tại %L phải là scalar"
+msgstr "Tham số %qs của thủ tục cơ bản tại %L phải là vô hướng"
#: fortran/resolve.c:469
#, gcc-internal-format
@@ -56410,9 +53025,9 @@ msgid "Argument %qs of elemental procedure %qs at %L must have its INTENT specif
msgstr ""
#: fortran/resolve.c:509
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Argument %qs of statement function at %L must be scalar"
-msgstr "Äối số cá»§a hàm %s tại %L là âm"
+msgstr ""
#: fortran/resolve.c:519
#, gcc-internal-format
@@ -56590,9 +53205,9 @@ msgid "The upper bound in the last dimension must appear in the reference to the
msgstr ""
#: fortran/resolve.c:1539
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs at %L is ambiguous"
-msgstr "%s tại %L phải là số nguyên"
+msgstr "%qs tại %L phải là số nguyên"
#: fortran/resolve.c:1543
#, gcc-internal-format
@@ -56610,9 +53225,9 @@ msgid "Intrinsic subroutine %qs at %L shall not have a type specifier"
msgstr ""
#: fortran/resolve.c:1688
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs declared INTRINSIC at %L does not exist"
-msgstr "COMMON “%s†tại %L không tồn tại"
+msgstr ""
#: fortran/resolve.c:1701
#, gcc-internal-format
@@ -56630,9 +53245,9 @@ msgid "Label %d referenced at %L is never defined"
msgstr ""
#: fortran/resolve.c:1819
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Statement function %qs at %L is not allowed as an actual argument"
-msgstr " kiểu hàm thành viên %qT không phải là một đối số mẫu hợp lệ"
+msgstr ""
#: fortran/resolve.c:1827
#, gcc-internal-format
@@ -56640,9 +53255,9 @@ msgid "Intrinsic %qs at %L is not allowed as an actual argument"
msgstr ""
#: fortran/resolve.c:1834
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Internal procedure %qs is used as actual argument at %L"
-msgstr "Äối số thá»§ tục không hợp lệ tại %L"
+msgstr "Thủ tục nội tại %qs được dùng làm đối số thật tại %L"
#: fortran/resolve.c:1842
#, gcc-internal-format
@@ -56725,9 +53340,9 @@ msgid "Function %qs at %L is INTRINSIC but is not compatible with an intrinsic"
msgstr ""
#: fortran/resolve.c:2684
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Unable to resolve the specific function %qs at %L"
-msgstr "gặp lỗi trong các đối số tới hàm đặc tả %qs"
+msgstr "Không thể phân giải hàm đặc tả %qs tại %L"
#: fortran/resolve.c:2740 fortran/resolve.c:15282
#, gcc-internal-format
@@ -56755,9 +53370,9 @@ msgid "%qs at %L is not a function"
msgstr "“%qs†tại %L không phải là một hàm"
#: fortran/resolve.c:2934 fortran/resolve.c:3404
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ABSTRACT INTERFACE %qs must not be referenced at %L"
-msgstr "ABSTRACT INTERFACE tại %C"
+msgstr "ABSTRACT INTERFACE %qs phải không tham chiếu tại %L"
#. Internal procedures are taken care of in resolve_contained_fntype.
#: fortran/resolve.c:2977
@@ -56901,9 +53516,9 @@ msgid "Upper array reference at %L is out of bounds (%ld > %ld) in dimension %d"
msgstr ""
#: fortran/resolve.c:4127
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "check_dimension(): Bad array reference"
-msgstr "tạo mảng tham chiếu"
+msgstr ""
#: fortran/resolve.c:4150
#, gcc-internal-format, gfc-internal-format
@@ -57006,9 +53621,9 @@ msgid "Substring end index at %L is too large"
msgstr ""
#: fortran/resolve.c:4687
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "resolve_ref(): Bad array reference"
-msgstr "tạo mảng tham chiếu"
+msgstr ""
#: fortran/resolve.c:4701
#, gcc-internal-format, gfc-internal-format
@@ -57125,19 +53740,19 @@ msgid "Found no matching specific binding for the call to the GENERIC %qs at %L"
msgstr ""
#: fortran/resolve.c:5839
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs at %L should be a SUBROUTINE"
-msgstr "%s tại %L phải là Sá»-NGUYÊN"
+msgstr "%qs tại %L phải là THỦ TỤC CON"
#: fortran/resolve.c:5890
#, gcc-internal-format
msgid "%qs at %L should be a FUNCTION"
-msgstr ""
+msgstr "%qs tại %L phải là HÀM"
#: fortran/resolve.c:6407
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "gfc_resolve_expr(): Bad expression type"
-msgstr "Mong đợi một loại biểu thức"
+msgstr "gfc_resolve_expr(): sai kiểu biểu thức"
#: fortran/resolve.c:6433
#, gcc-internal-format, gfc-internal-format
@@ -57399,9 +54014,9 @@ msgid "Selector at %L must not be coindexed"
msgstr ""
#: fortran/resolve.c:8303
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Derived type %qs at %L must be extensible"
-msgstr "%s tại %L phải là số nguyên"
+msgstr ""
#: fortran/resolve.c:8315
#, gcc-internal-format
@@ -57409,9 +54024,9 @@ msgid "Derived type %qs at %L must be an extension of %qs"
msgstr ""
#: fortran/resolve.c:8318
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Unexpected intrinsic type %qs at %L"
-msgstr "cần kiểu số"
+msgstr "Gặp kiểu hạn chế không cần %qs tại %L"
#: fortran/resolve.c:8327
#, gcc-internal-format, gfc-internal-format
@@ -57424,9 +54039,9 @@ msgid "Double CLASS IS block in SELECT TYPE statement at %L"
msgstr ""
#: fortran/resolve.c:8608
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Invalid context for NULL () intrinsic at %L"
-msgstr "Gặp ngữ cảnh sai cho hàm trỠNULL() tại %%L"
+msgstr "Ngữ cảnh sai cho hạn chế NULL() tại %L"
#. FIXME: Test for defined input/output.
#: fortran/resolve.c:8636
@@ -57470,14 +54085,14 @@ msgid "Event variable at %L must be a scalar of type EVENT_TYPE"
msgstr ""
#: fortran/resolve.c:8766
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Event variable argument at %L must be a coarray or coindexed"
-msgstr "Äối số cá»§a %s tại %L phải là cá»§a má»™t độ dài"
+msgstr ""
#: fortran/resolve.c:8769
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Event variable argument at %L must be a coarray but not coindexed"
-msgstr "Äối số cá»§a %s tại %L phải là cá»§a má»™t độ dài"
+msgstr ""
#: fortran/resolve.c:8776 fortran/resolve.c:8894
#, gcc-internal-format, gfc-internal-format
@@ -57495,9 +54110,9 @@ msgid "ACQUIRED_LOCK= argument at %L must be a scalar LOGICAL variable"
msgstr ""
#: fortran/resolve.c:8811
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "UNTIL_COUNT= argument at %L must be a scalar INTEGER expression"
-msgstr "Äối số cá»§a %s tại %L phải là cá»§a má»™t độ dài"
+msgstr ""
#: fortran/resolve.c:8871
#, gcc-internal-format, gfc-internal-format
@@ -57643,10 +54258,9 @@ msgstr ""
#. Even if standard does not support this feature, continue to build
#. the two statements to avoid upsetting frontend_passes.c.
#: fortran/resolve.c:10239
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Invalid procedure argument at %L"
+#, gcc-internal-format, gfc-internal-format
msgid "Pointer procedure assignment at %L"
-msgstr "Äối số thá»§ tục không hợp lệ tại %L"
+msgstr ""
#: fortran/resolve.c:10251
#, gcc-internal-format, gfc-internal-format
@@ -57674,10 +54288,9 @@ msgid "ASSIGN statement at %L requires a scalar default INTEGER variable"
msgstr ""
#: fortran/resolve.c:10589
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Invalid kind for %s at %L"
+#, gcc-internal-format, gfc-internal-format
msgid "Invalid NULL at %L"
-msgstr "loại không hợp lệ cho %s tại %L"
+msgstr "NULL không hợp lệ %L"
#: fortran/resolve.c:10593
#, gcc-internal-format, gfc-internal-format
@@ -57787,10 +54400,9 @@ msgid "Entity with assumed character length at %L must be a dummy argument or a
msgstr ""
#: fortran/resolve.c:11546
-#, fuzzy, gcc-internal-format
-#| msgid "%s tag at %L must be a character string of default kind"
+#, gcc-internal-format
msgid "%qs at %L must have constant character length in this context"
-msgstr "thẻ %s tại %L phải là chuỗi ký tự của kiểu mặc định"
+msgstr ""
#: fortran/resolve.c:11553
#, gcc-internal-format
@@ -57828,10 +54440,9 @@ msgid "Automatic array %qs at %L cannot have an initializer"
msgstr ""
#: fortran/resolve.c:11658
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "in %s, at %s:%d"
+#, gcc-internal-format, gfc-internal-format
msgid "%s at %L"
-msgstr "trong %s, tại %s:%d"
+msgstr "%s tại %L"
#: fortran/resolve.c:11685
#, gcc-internal-format
@@ -57849,19 +54460,19 @@ msgid "Procedure %qs in PUBLIC interface %qs at %L takes dummy arguments of %qs
msgstr ""
#: fortran/resolve.c:11747
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Function %qs at %L cannot have an initializer"
-msgstr "bộ khởi tạo chứa một chỉ mục mảng không phải hằng số"
+msgstr "Hàm %qs tại %L không thể có bộ khởi tạo"
#: fortran/resolve.c:11756
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "External object %qs at %L may not have an initializer"
-msgstr "không thể khởi tạo một đối tượng có kích cỡ biến đổi"
+msgstr ""
#: fortran/resolve.c:11764
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ELEMENTAL function %qs at %L must have a scalar result"
-msgstr "%s tại %L phải là một scalar"
+msgstr ""
#: fortran/resolve.c:11774
#, gcc-internal-format
@@ -57904,9 +54515,9 @@ msgid "Dummy procedure %qs at %L shall not be elemental"
msgstr ""
#: fortran/resolve.c:11889
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "PROCEDURE attribute conflicts with SAVE attribute in %qs at %L"
-msgstr "thuộc tính %<readonly%> xung đột với %<setter%>"
+msgstr ""
#: fortran/resolve.c:11895
#, gcc-internal-format
@@ -57959,9 +54570,9 @@ msgid "FINAL procedure at %L must have exactly one argument"
msgstr ""
#: fortran/resolve.c:12081
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Argument of FINAL procedure at %L must be of type %qs"
-msgstr "Äối số cá»§a %s tại %L phải là cá»§a má»™t độ dài"
+msgstr "Äối số cá»§a thá»§ tục FINAL tại %L phải là kiểu %qs"
#: fortran/resolve.c:12089
#, gcc-internal-format, gfc-internal-format
@@ -58049,14 +54660,14 @@ msgid "Non-polymorphic passed-object dummy argument of %qs at %L"
msgstr ""
#: fortran/resolve.c:12668
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Argument %qs of %qs with PASS(%s) at %L must be of the derived-type %qs"
-msgstr "Äối số cá»§a %s tại %L phải là cá»§a má»™t độ dài"
+msgstr "Äối số %qs cá»§a %qs vá»›i PASS(%s) tại %L phải là kiểu dẫn xuất %qs"
#: fortran/resolve.c:12677
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Passed-object dummy argument of %qs at %L must be scalar"
-msgstr "thẻ %s tại %L phải là scalar"
+msgstr ""
#: fortran/resolve.c:12683
#, gcc-internal-format
@@ -58074,9 +54685,9 @@ msgid "Procedure %qs at %L has the same name as a component of %qs"
msgstr ""
#: fortran/resolve.c:12727
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Procedure %qs at %L has the same name as an inherited component of %qs"
-msgstr "Cảnh báo nếu má»™t thá»§ tục ngưá»i dùng có cùng má»™t tên vá»›i má»™t Ä‘iá»u thá»±c chất"
+msgstr ""
#: fortran/resolve.c:12819
#, gcc-internal-format
@@ -58124,14 +54735,14 @@ msgid "Procedure pointer component %qs with PASS at %L must have at least one ar
msgstr ""
#: fortran/resolve.c:13114
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Argument %qs of %qs with PASS(%s) at %L must be of the derived type %qs"
-msgstr "Äối số cá»§a %s tại %L phải là cá»§a má»™t độ dài"
+msgstr "Äối số %qs cá»§a %qs vá»›i PASS(%s) tại %L phải là dẫn xuất kiểu %qs"
#: fortran/resolve.c:13125
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Argument %qs of %qs with PASS(%s) at %L must be scalar"
-msgstr "Äối số cá»§a %s tại %L phải là cá»§a má»™t độ dài"
+msgstr "Äối số %qs cá»§a %qs vá»›i PASS(%s) tại %L phải là vô hướng"
#: fortran/resolve.c:13135
#, gcc-internal-format
@@ -58396,9 +55007,9 @@ msgid "Dummy argument %qs at %L of LOCK_TYPE shall not be INTENT(OUT)"
msgstr ""
#: fortran/resolve.c:14106
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Dummy argument %qs at %L of EVENT_TYPE shall not be INTENT(OUT)"
-msgstr "Äối số cá»§a hàm %s tại %L là âm"
+msgstr ""
#: fortran/resolve.c:14118
#, gcc-internal-format
@@ -58518,7 +55129,7 @@ msgstr ""
#: fortran/resolve.c:14893
#, gcc-internal-format, gfc-internal-format
msgid "Label %d at %L defined but not used"
-msgstr "nhãn %d tại %L đã định nghĩa nhưng chưa được dùng"
+msgstr "Nhãn %d tại %L đã định nghĩa nhưng chưa được dùng"
#: fortran/resolve.c:14898
#, gcc-internal-format, gfc-internal-format
@@ -58666,14 +55277,14 @@ msgid "Wrong OpenACC continuation at %C: expected !$ACC, got !$OMP"
msgstr ""
#: fortran/scanner.c:1422
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Missing %<&%> in continued character constant at %C"
-msgstr "Cảnh báo vỠký hiệu “&†còn thiếu trong hằng ký tự tiếp tục"
+msgstr "Thiếu %<&%> trong hằng ký tự tiếp tục tại %C"
#: fortran/scanner.c:1691
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Nonconforming tab character at %C"
-msgstr "Cho phép sử dụng ký tự tab một cách không phù hợp"
+msgstr "Có ký tự tab không phù hợp tại %C"
#: fortran/scanner.c:1779 fortran/scanner.c:1782
#, gcc-internal-format
@@ -58686,16 +55297,14 @@ msgid "Nonconforming tab character in column %d of line %d"
msgstr ""
#: fortran/scanner.c:2070
-#, fuzzy, gcc-internal-format
-#| msgid "%s:%d: file %s left but not entered"
+#, gcc-internal-format
msgid "file %qs left but not entered"
-msgstr "%s:%d: tập tin còn %s nhưng không vào được"
+msgstr "tập tin còn %qs nhưng không vào được"
#: fortran/scanner.c:2108
-#, fuzzy, gcc-internal-format
-#| msgid "%s:%d: Illegal preprocessor directive"
+#, gcc-internal-format
msgid "Illegal preprocessor directive"
-msgstr "%s:%d: chỉ thị tiá»n xá»­ lý không hợp lệ"
+msgstr "Chỉ thị tiá»n xá»­ lý không hợp lệ"
#: fortran/scanner.c:2232
#, gcc-internal-format
@@ -58926,9 +55535,9 @@ msgid "Second argument of MOD at %L is zero"
msgstr ""
#: fortran/simplify.c:4469
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "gfc_simplify_mod(): Bad arguments"
-msgstr "gfc_trans_code(): Mã câu lệnh sai"
+msgstr ""
#. Result is processor-dependent. This processor just opts
#. to not handle it at all.
@@ -58959,9 +55568,9 @@ msgid "Argument NCOPIES of REPEAT intrinsic is too large at %L"
msgstr ""
#: fortran/simplify.c:5256
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Reshaped array too large at %C"
-msgstr "Số nguyên quá lớn tại %C"
+msgstr ""
#: fortran/simplify.c:5370
#, gcc-internal-format, gfc-internal-format
@@ -58969,9 +55578,9 @@ msgid "Result of SCALE overflows its kind at %L"
msgstr ""
#: fortran/simplify.c:5949
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Bad type in gfc_simplify_sign"
-msgstr "Gặp loại saio trong biểu thức bất biến"
+msgstr ""
#: fortran/simplify.c:5978
#, gcc-internal-format
@@ -58999,9 +55608,9 @@ msgid "Argument of SQRT at %L has a negative value"
msgstr ""
#: fortran/simplify.c:6222
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "invalid argument of SQRT at %L"
-msgstr "đối số của thuộc tính %qE không hợp lệ"
+msgstr "đối số của SQRT tại %L không hợp lệ"
#: fortran/simplify.c:6517
#, gcc-internal-format, gfc-internal-format
@@ -59024,9 +55633,9 @@ msgid "Character %qs in string at %L cannot be converted into character kind %d"
msgstr ""
#: fortran/st.c:263
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "gfc_free_statement(): Bad statement"
-msgstr "gfc_trans_code(): Mã câu lệnh sai"
+msgstr ""
#: fortran/symbol.c:131
#, gcc-internal-format, gfc-internal-format
@@ -59034,9 +55643,9 @@ msgid "IMPLICIT NONE (type) statement at %L following an IMPLICIT statement"
msgstr ""
#: fortran/symbol.c:168
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Letter %qc already set in IMPLICIT statement at %C"
-msgstr "câu lệnh ENTRY tại %C"
+msgstr ""
#: fortran/symbol.c:190
#, gcc-internal-format, gfc-internal-format
@@ -59097,9 +55706,9 @@ msgid "Namelist group name at %L cannot have the SAVE attribute"
msgstr ""
#: fortran/symbol.c:468
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "internal procedure %qs at %L conflicts with DUMMY argument"
-msgstr "Äối số thá»§ tục không hợp lệ tại %L"
+msgstr ""
#: fortran/symbol.c:494
#, gcc-internal-format, gfc-internal-format
@@ -59122,19 +55731,19 @@ msgid "%s attribute conflicts with %s attribute at %L"
msgstr ""
#: fortran/symbol.c:805
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%s attribute conflicts with %s attribute in %qs at %L"
-msgstr "thuộc tính %<readonly%> xung đột với %<setter%>"
+msgstr "thuộc tính %s xung đột với thuộc tính %s trong %sq tại %L"
#: fortran/symbol.c:813
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "%s attribute with %s attribute at %L"
-msgstr "thuộc tính %s được áp dụng cho %s %s tại %L"
+msgstr "thuộc tính %s với thuộc tính %s tại %L"
#: fortran/symbol.c:819
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%s attribute with %s attribute in %qs at %L"
-msgstr "thuộc tính %s được áp dụng cho %s %s tại %L"
+msgstr "thuộc tính %s với thuộc tính %s trong %qs tại %L"
#: fortran/symbol.c:863
#, gcc-internal-format, gfc-internal-format
@@ -59202,9 +55811,9 @@ msgid "Duplicate ASYNCHRONOUS attribute specified at %L"
msgstr ""
#: fortran/symbol.c:1595
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%s attribute of %qs conflicts with %s attribute at %L"
-msgstr "thuộc tính %<readonly%> xung đột với %<setter%>"
+msgstr "thuộc tính %s của %qs xung đột với thuộc tính %s tại %L"
#: fortran/symbol.c:1631
#, gcc-internal-format, gfc-internal-format
@@ -59274,21 +55883,19 @@ msgid "Procedure %qs at %L may not have basic type of %s"
msgstr ""
#: fortran/symbol.c:1836
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Symbol %qs at %L cannot have a type"
-msgstr "%qE không có kiểu lớp"
+msgstr ""
#: fortran/symbol.c:2057
-#, fuzzy, gcc-internal-format
-#| msgid "Component '%s' at %C already declared at %L"
+#, gcc-internal-format
msgid "Component %qs at %C already declared at %L"
-msgstr "Thành phần “%s†tại %C đã sẵn được khai báo tại %L"
+msgstr "Thành phần “%qs†tại %C đã sẵn được khai báo tại %L"
#: fortran/symbol.c:2068
-#, fuzzy, gcc-internal-format
-#| msgid "Component '%s' at %C already declared at %L"
+#, gcc-internal-format
msgid "Component %qs at %C already in the parent type at %L"
-msgstr "Thành phần “%s†tại %C đã sẵn được khai báo tại %L"
+msgstr "Thành phần “%qs†tại %C đã sẵn trong kiểu cha mẹ %L"
#: fortran/symbol.c:2153
#, gcc-internal-format
@@ -59306,9 +55913,9 @@ msgid "Component %qs at %C is a PRIVATE component of %qs"
msgstr ""
#: fortran/symbol.c:2241
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs at %C is not a member of the %qs structure"
-msgstr "%qD không phải là thành viên của %qT"
+msgstr "%qs tại %C không phải là thành viên của cấu trúc %qs"
#: fortran/symbol.c:2381
#, gcc-internal-format, gfc-internal-format
@@ -59387,9 +55994,9 @@ msgid "Component %qs at %L cannot have the POINTER attribute because it is a mem
msgstr ""
#: fortran/symbol.c:4084
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Procedure pointer component %qs at %L cannot be a member of the BIND(C) derived type %qs at %L"
-msgstr "Cảnh báo vá» cuá»™c gá»i có giao diện ngầm"
+msgstr ""
#: fortran/symbol.c:4095
#, gcc-internal-format
@@ -59422,9 +56029,9 @@ msgid "Symbol %qs is used before it is typed at %L"
msgstr ""
#: fortran/target-memory.c:126
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Invalid expression in gfc_element_size."
-msgstr "biểu thức như là toán hạng không hợp lệ"
+msgstr ""
#: fortran/target-memory.c:346
#, gcc-internal-format
@@ -59469,9 +56076,9 @@ msgid "Named COMMON block %qs at %L shall be of the same size as elsewhere (%lu
msgstr ""
#: fortran/trans-common.c:775
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "get_mpz(): Not an integer constant"
-msgstr "chiá»u dài véc-tÆ¡ phải là má»™t hằng nguyên"
+msgstr ""
#: fortran/trans-common.c:803
#, gcc-internal-format
@@ -59489,10 +56096,9 @@ msgid "Illegal reference type at %L as EQUIVALENCE object"
msgstr ""
#: fortran/trans-common.c:913
-#, fuzzy, gcc-internal-format
-#| msgid "Inconsistent ranks for operator at %%L and %%L"
+#, gcc-internal-format
msgid "Inconsistent equivalence rules involving %qs at %L and %qs at %L"
-msgstr "Tại %%L và %%L có một toán tử với các phân hàng mâu thuẫn nhau"
+msgstr ""
#. Aligning this field would misalign a previous field.
#: fortran/trans-common.c:1046
@@ -59521,10 +56127,9 @@ msgid "Padding of %d bytes required before %qs in COMMON at %L; reorder elements
msgstr ""
#: fortran/trans-common.c:1169
-#, fuzzy, gcc-internal-format
-#| msgid "COMMON '%s' at %L does not exist"
+#, gcc-internal-format
msgid "COMMON %qs at %L does not exist"
-msgstr "COMMON “%s†tại %L không tồn tại"
+msgstr "COMMON “%qs†tại %L không tồn tại"
#: fortran/trans-common.c:1178
#, gcc-internal-format
@@ -59557,9 +56162,9 @@ msgid "intrinsic variable which isn't a procedure"
msgstr ""
#: fortran/trans-decl.c:3958 fortran/trans-decl.c:6184
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Return value of function %qs at %L not set"
-msgstr "Trả lại giá trị của hàm trong thanh ghi FPU (đơn vị dấu chấm động)"
+msgstr "Trả lại giá trị của hàm %qs tại %L chưa đặt"
#: fortran/trans-decl.c:4373
#, gcc-internal-format
@@ -59587,9 +56192,9 @@ msgid "Derived-type dummy argument %qs at %L was declared INTENT(OUT) but was no
msgstr ""
#: fortran/trans-decl.c:5199 fortran/trans-decl.c:5330
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Unused dummy argument %qs at %L"
-msgstr "Quá nhiá»u đối số cho %s tại %L"
+msgstr "Äối số giả chưa dùng %qs tại %L"
#: fortran/trans-decl.c:5214
#, gcc-internal-format
@@ -59597,14 +56202,14 @@ msgid "Unused module variable %qs which has been explicitly imported at %L"
msgstr ""
#: fortran/trans-decl.c:5223
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Unused variable %qs declared at %L"
-msgstr "biến %qD được định nghĩa lại là một hàm"
+msgstr "Biến số chưa dùng %qs được khai báo tại %L"
#: fortran/trans-decl.c:5272
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Unused parameter %qs declared at %L"
-msgstr "đối số %qD được khai báo là void"
+msgstr "Äối số chưa dùng %qs được khai báo tại %L"
#: fortran/trans-decl.c:5276
#, gcc-internal-format
@@ -59612,9 +56217,9 @@ msgid "Unused parameter %qs which has been explicitly imported at %L"
msgstr ""
#: fortran/trans-decl.c:5302
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Return value %qs of function %qs declared at %L not set"
-msgstr "Trả lại giá trị của hàm trong thanh ghi FPU (đơn vị dấu chấm động)"
+msgstr "Trả lại giá trị %sq của hàm %qs khai báo tại %L chưa đặt"
#: fortran/trans-decl.c:5911
#, gcc-internal-format, gfc-internal-format
@@ -59673,9 +56278,9 @@ msgid "Sorry, the event component of derived type at %L is not yet supported"
msgstr ""
#: fortran/trans-intrinsic.c:9373
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "The event variable at %L shall not be coindexed "
-msgstr "Äối số cá»§a hàm %s tại %L là âm"
+msgstr "Biến sự kiện tại %L sẽ không thể là coindexed "
#: fortran/trans-io.c:1849
#, gcc-internal-format
@@ -59708,9 +56313,9 @@ msgid "Sorry, only support for integer kind %d implemented for image-set at %L"
msgstr ""
#: fortran/trans-stmt.c:2943
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "gfc_trans_select(): Bad type for case expr."
-msgstr "gfc_trans_code(): Mã câu lệnh sai"
+msgstr "gfc_trans_select(): Kiểu cho biểu thức case sai."
#: fortran/trans-types.c:488
#, gcc-internal-format
@@ -59765,12 +56370,12 @@ msgstr ""
#: fortran/trans-types.c:721
#, gcc-internal-format
msgid "gfc_validate_kind(): Got bad type"
-msgstr ""
+msgstr "gfc_validate_kind(): Nhận kiểu sai"
#: fortran/trans-types.c:725
#, gcc-internal-format
msgid "gfc_validate_kind(): Got bad kind"
-msgstr ""
+msgstr "gfc_validate_kind(): Nhận loại sai"
#: fortran/trans-types.c:1463
#, gcc-internal-format, gfc-internal-format
@@ -59961,7 +56566,7 @@ msgstr "gặp lỗi khi phân bể hằng số"
#: java/jcf-parse.c:1442
#, gcc-internal-format, gfc-internal-format
msgid "reading class %s for the second time from %s"
-msgstr ""
+msgstr "Ä‘ang Ä‘á»c lÆ¡p %s cho lần thứ hai từ %s"
#: java/jcf-parse.c:1460
#, gcc-internal-format
@@ -59981,7 +56586,7 @@ msgstr "gặp lá»—i khi phân tích cú pháp cá»§a các thuá»™c tính cuối cÃ
#: java/jcf-parse.c:1505
#, gcc-internal-format
msgid "duplicate class will only be compiled once"
-msgstr ""
+msgstr "lớp trùng nhau thì chỉ biên dịch một lần"
#: java/jcf-parse.c:1602
#, gcc-internal-format
@@ -60171,9 +56776,9 @@ msgid "previously defined here"
msgstr "đã định nghĩa trước ở đây"
#: lto/lto-symtab.c:664
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qD violates the C++ One Definition Rule "
-msgstr "định nghĩa trước ở đây"
+msgstr ""
#: lto/lto-symtab.c:669
#, gcc-internal-format
@@ -60191,10 +56796,9 @@ msgid "size of %qD differ from the size of original declaration"
msgstr ""
#: lto/lto-symtab.c:700
-#, fuzzy, gcc-internal-format
-#| msgid "%q#T was previously declared here"
+#, gcc-internal-format
msgid "%qD was previously declared here"
-msgstr "%q#T trước đã khai báo ở đây"
+msgstr "%qD trước đã khai báo ở đây"
#: lto/lto-symtab.c:703
#, gcc-internal-format
@@ -60282,14 +56886,14 @@ msgid "lto_obj_file_open() failed"
msgstr "lto_obj_file_open() gặp lỗi"
#: lto/lto.c:2314
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "waitpid failed"
-msgstr "atexit gặp lỗi"
+msgstr "waitpid bị lỗi"
#: lto/lto.c:2317
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "streaming subprocess failed"
-msgstr "đang đổi tên tập tin .rpo: %m"
+msgstr ""
#: lto/lto.c:2320
#, gcc-internal-format
@@ -60414,17 +57018,17 @@ msgstr "thuộc tính %<readonly%> xung đột với %<setter%>"
#: objc/objc-act.c:864
#, gcc-internal-format
msgid "%<assign%> attribute conflicts with %<retain%> attribute"
-msgstr ""
+msgstr "thuộc tính %<assign%> xung đột với %<retain%>"
#: objc/objc-act.c:869
#, gcc-internal-format
msgid "%<assign%> attribute conflicts with %<copy%> attribute"
-msgstr ""
+msgstr "thuộc tính %<assign%> xung đột với %<copy%>"
#: objc/objc-act.c:874
#, gcc-internal-format
msgid "%<retain%> attribute conflicts with %<copy%> attribute"
-msgstr ""
+msgstr "thuộc tính %<retain%> xung đột với %<copy%>"
#: objc/objc-act.c:891
#, gcc-internal-format
@@ -60471,7 +57075,7 @@ msgstr "thuộc tính %<retain%> chỉ hợp lệ khi dùng với đối tượn
#: objc/objc-act.c:974
#, gcc-internal-format
msgid "%<copy%> attribute is only valid for Objective-C objects"
-msgstr ""
+msgstr "thuộc tính %<copy%> chỉ hợp lệ khi dùng với đối tượng trong Objective-C"
#: objc/objc-act.c:1028
#, gcc-internal-format
@@ -60539,7 +57143,7 @@ msgstr "không tìm thấy giao diện cho lớp %qE"
#: objc/objc-act.c:1679 objc/objc-act.c:6816 objc/objc-act.c:6947
#, gcc-internal-format
msgid "class %qE is deprecated"
-msgstr "lớp %qE bị phản đối"
+msgstr "lớp %qE đã lạc hậu"
#: objc/objc-act.c:1708
#, gcc-internal-format
@@ -61151,7 +57755,7 @@ msgstr ""
#: objc/objc-act.c:8075
#, gcc-internal-format
msgid "protocol %qE is deprecated"
-msgstr "giao thức %qE bị phản đối"
+msgstr "giao thức %qE đã lạc hậu"
#: objc/objc-act.c:8194
#, gcc-internal-format
@@ -61263,9 +57867,6 @@ msgstr "%<-fobjc-sjlj-exceptions%> bị lỠđi cho %<-fnext-runtime%> khi %<-f
msgid "creating selector for nonexistent method %qE"
msgstr ""
-#~ msgid "optimizing for size and code size would grow"
-#~ msgstr "đang tối ưu hóa cho kích cỡ, và kích cỡ mã sẽ tăng lại"
-
#~ msgid "Bound on the number of variables in Omega constraint systems"
#~ msgstr "Äóng kết vá»›i số các biến trong hệ thống ràng buá»™c Omega"
@@ -61325,9 +57926,6 @@ msgstr ""
#~ msgid "Ignored (obsolete)"
#~ msgstr "Bị bá» qua (lá»—i thá»i)"
-#~ msgid "-march=ARCH Select target architecture"
-#~ msgstr "-march=KTrúc Chá»n kiến trúc đích"
-
#~ msgid "mvcle use"
#~ msgstr "Cách sử dụng mvcle"
@@ -61335,10 +57933,6 @@ msgstr ""
#~ msgid "Target the RL78/G10 series"
#~ msgstr "Äặt mục đích là bá»™ xá»­ lý AM33/2.0"
-#, fuzzy
-#~ msgid "Use ISA 2.07 crypto instructions"
-#~ msgstr "Sử dụng các chỉ lệnh microMIPS"
-
#~ msgid "Use big-endian byte order"
#~ msgstr "Sử dụng thứ tự byte vỠcuối lớn"
@@ -61367,6 +57961,10 @@ msgstr ""
#~ msgid "enclosing parallel"
#~ msgstr "tác vụ bao quanh"
+#, fuzzy
+#~ msgid "type %qT should match type %qT that itself violate one definition rule"
+#~ msgstr "định nghĩa trước ở đây"
+
#~ msgid "clause not supported yet"
#~ msgstr "mệnh đỠvẫn chưa được hỗ trợ"
@@ -61375,8 +57973,8 @@ msgstr ""
#~ msgstr "-fsanitize=address không được hỗ trợ cho đích này"
#, fuzzy
-#~ msgid "mcu not found"
-#~ msgstr "không tìm thấy trưá»ng %qs"
+#~ msgid "-mcpu string too large"
+#~ msgstr "kiểu %qT quá lớn"
#, fuzzy
#~ msgid "unrecognizable argument of option -foffload-abi"
@@ -61391,13 +57989,6 @@ msgstr ""
#~ msgid "the %<interrupt%> attribute requires %<-msoft-float%>"
#~ msgstr "thuộc tính %<interrupt%> cần %<-msoft-float%>"
-#~ msgid "-munix=98 option required for C89 Amendment 1 features.\n"
-#~ msgstr "-munix=98 cần cho C89 Hiệu chỉnh 1 tính năng.\n"
-
-#, fuzzy
-#~ msgid "hotpatching is not compatible with nested functions"
-#~ msgstr "-mnop-mcount không tương thích với đích này"
-
#~ msgid "%<%s %E%> declared inside parameter list"
#~ msgstr "%<%s %E%> được khai báo bên trong danh sách đối số"
@@ -61444,13 +58035,34 @@ msgstr ""
#~ msgid "%q+D has incomplete type"
#~ msgstr "%q+D có kiểu chưa đầy đủ"
-#~ msgid "gfc_match_entry(): Bad state"
-#~ msgstr "gfc_match_entry(): Trạng thái sai"
-
#, fuzzy
#~ msgid "Sorry, !$ACC cache unimplemented yet"
#~ msgstr "tiếc là chưa thực hiện: "
+#~ msgid "optimizing for size and code size would grow"
+#~ msgstr "đang tối ưu hóa cho kích cỡ, và kích cỡ mã sẽ tăng lại"
+
+#~ msgid "-march=ARCH Select target architecture"
+#~ msgstr "-march=KTrúc Chá»n kiến trúc đích"
+
+#, fuzzy
+#~ msgid "Use ISA 2.07 crypto instructions"
+#~ msgstr "Sử dụng các chỉ lệnh microMIPS"
+
+#, fuzzy
+#~ msgid "mcu not found"
+#~ msgstr "không tìm thấy trưá»ng %qs"
+
+#~ msgid "-munix=98 option required for C89 Amendment 1 features.\n"
+#~ msgstr "-munix=98 cần cho C89 Hiệu chỉnh 1 tính năng.\n"
+
+#, fuzzy
+#~ msgid "hotpatching is not compatible with nested functions"
+#~ msgstr "-mnop-mcount không tương thích với đích này"
+
+#~ msgid "gfc_match_entry(): Bad state"
+#~ msgstr "gfc_match_entry(): Trạng thái sai"
+
#, fuzzy
#~ msgid "Unexpected %s statement in verify_st_order() at %C"
#~ msgstr "Không cần câu lệnh CASE tại %C"
@@ -61498,6 +58110,9 @@ msgstr ""
#~ msgid "fopen: %s"
#~ msgstr "fopen: %s"
+#~ msgid "enabled by default"
+#~ msgstr "mặc định được bật"
+
#~ msgid "out of memory"
#~ msgstr "không đủ bộ nhớ"
diff --git a/gcc/postreload.c b/gcc/postreload.c
index 66f691b..61c1ce8 100644
--- a/gcc/postreload.c
+++ b/gcc/postreload.c
@@ -1057,7 +1057,6 @@ static bool
reload_combine_recognize_pattern (rtx_insn *insn)
{
rtx set, reg, src;
- unsigned int regno;
set = single_set (insn);
if (set == NULL_RTX)
@@ -1068,7 +1067,20 @@ reload_combine_recognize_pattern (rtx_insn *insn)
if (!REG_P (reg) || REG_NREGS (reg) != 1)
return false;
- regno = REGNO (reg);
+ unsigned int regno = REGNO (reg);
+ machine_mode mode = GET_MODE (reg);
+
+ if (reg_state[regno].use_index < 0
+ || reg_state[regno].use_index >= RELOAD_COMBINE_MAX_USES)
+ return false;
+
+ for (int i = reg_state[regno].use_index;
+ i < RELOAD_COMBINE_MAX_USES; i++)
+ {
+ struct reg_use *use = reg_state[regno].reg_use + i;
+ if (GET_MODE (*use->usep) != mode)
+ return false;
+ }
/* Look for (set (REGX) (CONST_INT))
(set (REGX) (PLUS (REGX) (REGY)))
@@ -1090,8 +1102,6 @@ reload_combine_recognize_pattern (rtx_insn *insn)
&& REG_P (XEXP (src, 1))
&& rtx_equal_p (XEXP (src, 0), reg)
&& !rtx_equal_p (XEXP (src, 1), reg)
- && reg_state[regno].use_index >= 0
- && reg_state[regno].use_index < RELOAD_COMBINE_MAX_USES
&& last_label_ruid < reg_state[regno].use_ruid)
{
rtx base = XEXP (src, 1);
diff --git a/gcc/ree.c b/gcc/ree.c
index 13a7a05..4627b4f 100644
--- a/gcc/ree.c
+++ b/gcc/ree.c
@@ -1025,11 +1025,11 @@ add_removable_extension (const_rtx expr, rtx_insn *insn,
return;
}
/* For vector mode extensions, ensure that all uses of the
- XEXP (src, 0) register are the same extension (both code
- and to which mode), as unlike integral extensions lowpart
- subreg of the sign/zero extended register are not equal
- to the original register, so we have to change all uses or
- none. */
+ XEXP (src, 0) register are in insn or debug insns, as unlike
+ integral extensions lowpart subreg of the sign/zero extended
+ register are not equal to the original register, so we have
+ to change all uses or none and the current code isn't able
+ to change them all at once in one transaction. */
else if (VECTOR_MODE_P (GET_MODE (XEXP (src, 0))))
{
if (idx == 0)
@@ -1046,15 +1046,7 @@ add_removable_extension (const_rtx expr, rtx_insn *insn,
break;
}
rtx_insn *use_insn = DF_REF_INSN (ref_link->ref);
- const_rtx use_set;
- if (use_insn == insn || DEBUG_INSN_P (use_insn))
- continue;
- if (!(use_set = single_set (use_insn))
- || !REG_P (SET_DEST (use_set))
- || GET_MODE (SET_DEST (use_set)) != GET_MODE (dest)
- || GET_CODE (SET_SRC (use_set)) != code
- || !rtx_equal_p (XEXP (SET_SRC (use_set), 0),
- XEXP (src, 0)))
+ if (use_insn != insn && !DEBUG_INSN_P (use_insn))
{
idx = -1U;
break;
diff --git a/gcc/regcprop.c b/gcc/regcprop.c
index 445b159..933cc8a 100644
--- a/gcc/regcprop.c
+++ b/gcc/regcprop.c
@@ -32,6 +32,7 @@
#include "addresses.h"
#include "tree-pass.h"
#include "rtl-iter.h"
+#include "cfgrtl.h"
/* The following code does forward propagation of hard register copies.
The object is to eliminate as many dependencies as possible, so that
@@ -739,9 +740,9 @@ static bool
copyprop_hardreg_forward_1 (basic_block bb, struct value_data *vd)
{
bool anything_changed = false;
- rtx_insn *insn;
+ rtx_insn *insn, *next;
- for (insn = BB_HEAD (bb); ; insn = NEXT_INSN (insn))
+ for (insn = BB_HEAD (bb); ; insn = next)
{
int n_ops, i, predicated;
bool is_asm, any_replacements;
@@ -751,6 +752,7 @@ copyprop_hardreg_forward_1 (basic_block bb, struct value_data *vd)
bool changed = false;
struct kill_set_value_data ksvd;
+ next = NEXT_INSN (insn);
if (!NONDEBUG_INSN_P (insn))
{
if (DEBUG_INSN_P (insn))
@@ -1042,6 +1044,23 @@ copyprop_hardreg_forward_1 (basic_block bb, struct value_data *vd)
bool noop_p = (copy_p
&& rtx_equal_p (SET_DEST (set), SET_SRC (set)));
+ /* If a noop move is using narrower mode than we have recorded,
+ we need to either remove the noop move, or kill_set_value. */
+ if (noop_p
+ && (GET_MODE_BITSIZE (GET_MODE (SET_DEST (set)))
+ < GET_MODE_BITSIZE (vd->e[REGNO (SET_DEST (set))].mode)))
+ {
+ if (noop_move_p (insn))
+ {
+ bool last = insn == BB_END (bb);
+ delete_insn (insn);
+ if (last)
+ break;
+ }
+ else
+ noop_p = false;
+ }
+
if (!noop_p)
{
/* Notice stores. */
diff --git a/gcc/reload1.c b/gcc/reload1.c
index 2229fd3..c2800f8 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -1258,28 +1258,6 @@ reload (rtx_insn *first, int global)
}
}
- /* If we are doing generic stack checking, give a warning if this
- function's frame size is larger than we expect. */
- if (flag_stack_check == GENERIC_STACK_CHECK)
- {
- HOST_WIDE_INT size = get_frame_size () + STACK_CHECK_FIXED_FRAME_SIZE;
- static int verbose_warned = 0;
-
- for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
- if (df_regs_ever_live_p (i) && ! fixed_regs[i] && call_used_regs[i])
- size += UNITS_PER_WORD;
-
- if (size > STACK_CHECK_MAX_FRAME_SIZE)
- {
- warning (0, "frame size too large for reliable stack checking");
- if (! verbose_warned)
- {
- warning (0, "try reducing the number of local variables");
- verbose_warned = 1;
- }
- }
- }
-
free (temp_pseudo_reg_arr);
/* Indicate that we no longer have known memory locations or constants. */
@@ -7417,7 +7395,9 @@ emit_input_reload_insns (struct insn_chain *chain, struct reload *rl,
/* Adjust any debug insns between temp and insn. */
while ((temp = NEXT_INSN (temp)) != insn)
if (DEBUG_INSN_P (temp))
- replace_rtx (PATTERN (temp), old, reloadreg);
+ INSN_VAR_LOCATION_LOC (temp)
+ = simplify_replace_rtx (INSN_VAR_LOCATION_LOC (temp),
+ old, reloadreg);
else
gcc_assert (NOTE_P (temp));
}
diff --git a/gcc/reorg.c b/gcc/reorg.c
index a02141f..7b28821 100644
--- a/gcc/reorg.c
+++ b/gcc/reorg.c
@@ -3307,7 +3307,7 @@ relax_delay_slots (rtx_insn *first)
reorg_redirect_jump (delay_jump_insn, trial);
target_label = trial;
if (crossing)
- CROSSING_JUMP_P (insn) = 1;
+ CROSSING_JUMP_P (delay_jump_insn) = 1;
}
/* If the first insn at TARGET_LABEL is redundant with a previous
diff --git a/gcc/rtl.h b/gcc/rtl.h
index 2f5be5f..79916ad 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -3011,7 +3011,7 @@ extern bool can_nonlocal_goto (const rtx_insn *);
extern void copy_reg_eh_region_note_forward (rtx, rtx_insn *, rtx);
extern void copy_reg_eh_region_note_backward (rtx, rtx_insn *, rtx);
extern int inequality_comparisons_p (const_rtx);
-extern rtx replace_rtx (rtx, rtx, rtx);
+extern rtx replace_rtx (rtx, rtx, rtx, bool = false);
extern void replace_label (rtx *, rtx, rtx, bool);
extern void replace_label_in_insn (rtx_insn *, rtx, rtx, bool);
extern bool rtx_referenced_p (const_rtx, const_rtx);
@@ -3592,7 +3592,7 @@ extern void init_lower_subreg (void);
/* In gcse.c */
extern bool can_copy_p (machine_mode);
-extern bool can_assign_to_reg_without_clobbers_p (rtx);
+extern bool can_assign_to_reg_without_clobbers_p (rtx, machine_mode);
extern rtx fis_get_condition (rtx_insn *);
/* In ira.c */
@@ -3652,6 +3652,8 @@ extern int anti_dependence (const_rtx, const_rtx);
extern int canon_anti_dependence (const_rtx, bool,
const_rtx, machine_mode, rtx);
extern int output_dependence (const_rtx, const_rtx);
+extern int canon_output_dependence (const_rtx, bool,
+ const_rtx, machine_mode, rtx);
extern int may_alias_p (const_rtx, const_rtx);
extern void init_alias_target (void);
extern void init_alias_analysis (void);
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c
index 642611f..b4dff86 100644
--- a/gcc/rtlanal.c
+++ b/gcc/rtlanal.c
@@ -2946,10 +2946,13 @@ inequality_comparisons_p (const_rtx x)
not enter into CONST_DOUBLE for the replace.
Note that copying is not done so X must not be shared unless all copies
- are to be modified. */
+ are to be modified.
+
+ ALL_REGS is true if we want to replace all REGs equal to FROM, not just
+ those pointer-equal ones. */
rtx
-replace_rtx (rtx x, rtx from, rtx to)
+replace_rtx (rtx x, rtx from, rtx to, bool all_regs)
{
int i, j;
const char *fmt;
@@ -2961,9 +2964,17 @@ replace_rtx (rtx x, rtx from, rtx to)
if (x == 0)
return 0;
- if (GET_CODE (x) == SUBREG)
+ if (all_regs
+ && REG_P (x)
+ && REG_P (from)
+ && REGNO (x) == REGNO (from))
+ {
+ gcc_assert (GET_MODE (x) == GET_MODE (from));
+ return to;
+ }
+ else if (GET_CODE (x) == SUBREG)
{
- rtx new_rtx = replace_rtx (SUBREG_REG (x), from, to);
+ rtx new_rtx = replace_rtx (SUBREG_REG (x), from, to, all_regs);
if (CONST_INT_P (new_rtx))
{
@@ -2979,7 +2990,7 @@ replace_rtx (rtx x, rtx from, rtx to)
}
else if (GET_CODE (x) == ZERO_EXTEND)
{
- rtx new_rtx = replace_rtx (XEXP (x, 0), from, to);
+ rtx new_rtx = replace_rtx (XEXP (x, 0), from, to, all_regs);
if (CONST_INT_P (new_rtx))
{
@@ -2997,10 +3008,11 @@ replace_rtx (rtx x, rtx from, rtx to)
for (i = GET_RTX_LENGTH (GET_CODE (x)) - 1; i >= 0; i--)
{
if (fmt[i] == 'e')
- XEXP (x, i) = replace_rtx (XEXP (x, i), from, to);
+ XEXP (x, i) = replace_rtx (XEXP (x, i), from, to, all_regs);
else if (fmt[i] == 'E')
for (j = XVECLEN (x, i) - 1; j >= 0; j--)
- XVECEXP (x, i, j) = replace_rtx (XVECEXP (x, i, j), from, to);
+ XVECEXP (x, i, j) = replace_rtx (XVECEXP (x, i, j),
+ from, to, all_regs);
}
return x;
@@ -3358,7 +3370,7 @@ commutative_operand_precedence (rtx op)
if (code == CONST_INT)
return -8;
if (code == CONST_WIDE_INT)
- return -8;
+ return -7;
if (code == CONST_DOUBLE)
return -7;
if (code == CONST_FIXED)
diff --git a/gcc/sched-deps.c b/gcc/sched-deps.c
index 4961dfb..8f3a124 100644
--- a/gcc/sched-deps.c
+++ b/gcc/sched-deps.c
@@ -2860,6 +2860,17 @@ sched_macro_fuse_insns (rtx_insn *insn)
}
+/* Get the implicit reg pending clobbers for INSN and save them in TEMP. */
+void
+get_implicit_reg_pending_clobbers (HARD_REG_SET *temp, rtx_insn *insn)
+{
+ extract_insn (insn);
+ preprocess_constraints (insn);
+ alternative_mask preferred = get_preferred_alternatives (insn);
+ ira_implicitly_set_insn_hard_regs (temp, preferred);
+ AND_COMPL_HARD_REG_SET (*temp, ira_no_alloc_regs);
+}
+
/* Analyze an INSN with pattern X to find all dependencies. */
static void
sched_analyze_insn (struct deps_desc *deps, rtx x, rtx_insn *insn)
@@ -2872,12 +2883,7 @@ sched_analyze_insn (struct deps_desc *deps, rtx x, rtx_insn *insn)
if (! reload_completed)
{
HARD_REG_SET temp;
-
- extract_insn (insn);
- preprocess_constraints (insn);
- alternative_mask prefrred = get_preferred_alternatives (insn);
- ira_implicitly_set_insn_hard_regs (&temp, prefrred);
- AND_COMPL_HARD_REG_SET (temp, ira_no_alloc_regs);
+ get_implicit_reg_pending_clobbers (&temp, insn);
IOR_HARD_REG_SET (implicit_reg_pending_clobbers, temp);
}
@@ -3489,7 +3495,8 @@ sched_analyze_insn (struct deps_desc *deps, rtx x, rtx_insn *insn)
{
if (deps->last_args_size)
add_dependence (insn, deps->last_args_size, REG_DEP_OUTPUT);
- deps->last_args_size = insn;
+ if (!deps->readonly)
+ deps->last_args_size = insn;
}
}
diff --git a/gcc/sched-int.h b/gcc/sched-int.h
index 2a45703..de5d326 100644
--- a/gcc/sched-int.h
+++ b/gcc/sched-int.h
@@ -1351,6 +1351,7 @@ extern void finish_deps_global (void);
extern void deps_analyze_insn (struct deps_desc *, rtx_insn *);
extern void remove_from_deps (struct deps_desc *, rtx_insn *);
extern void init_insn_reg_pressure_info (rtx_insn *);
+extern void get_implicit_reg_pending_clobbers (HARD_REG_SET *, rtx_insn *);
extern dw_t get_dep_weak (ds_t, ds_t);
extern ds_t set_dep_weak (ds_t, ds_t, dw_t);
diff --git a/gcc/sel-sched-ir.c b/gcc/sel-sched-ir.c
index d6c86b8..83f813a 100644
--- a/gcc/sel-sched-ir.c
+++ b/gcc/sel-sched-ir.c
@@ -1871,12 +1871,16 @@ merge_expr (expr_t to, expr_t from, insn_t split_point)
/* Make sure that speculative pattern is propagated into exprs that
have non-speculative one. This will provide us with consistent
speculative bits and speculative patterns inside expr. */
- if ((EXPR_SPEC_DONE_DS (from) != 0
- && EXPR_SPEC_DONE_DS (to) == 0)
- /* Do likewise for volatile insns, so that we always retain
- the may_trap_p bit on the resulting expression. */
- || (VINSN_MAY_TRAP_P (EXPR_VINSN (from))
- && !VINSN_MAY_TRAP_P (EXPR_VINSN (to))))
+ if (EXPR_SPEC_DONE_DS (to) == 0
+ && (EXPR_SPEC_DONE_DS (from) != 0
+ /* Do likewise for volatile insns, so that we always retain
+ the may_trap_p bit on the resulting expression. However,
+ avoid propagating the trapping bit into the instructions
+ already speculated. This would result in replacing the
+ speculative pattern with the non-speculative one and breaking
+ the speculation support. */
+ || (!VINSN_MAY_TRAP_P (EXPR_VINSN (to))
+ && VINSN_MAY_TRAP_P (EXPR_VINSN (from)))))
change_vinsn_in_expr (to, EXPR_VINSN (from));
merge_expr_data (to, from, split_point);
@@ -2650,6 +2654,23 @@ maybe_downgrade_id_to_use (idata_t id, insn_t insn)
IDATA_TYPE (id) = USE;
}
+/* Setup implicit register clobbers calculated by sched-deps for INSN
+ before reload and save them in ID. */
+static void
+setup_id_implicit_regs (idata_t id, insn_t insn)
+{
+ if (reload_completed)
+ return;
+
+ HARD_REG_SET temp;
+ unsigned regno;
+ hard_reg_set_iterator hrsi;
+
+ get_implicit_reg_pending_clobbers (&temp, insn);
+ EXECUTE_IF_SET_IN_HARD_REG_SET (temp, 0, regno, hrsi)
+ SET_REGNO_REG_SET (IDATA_REG_SETS (id), regno);
+}
+
/* Setup register sets describing INSN in ID. */
static void
setup_id_reg_sets (idata_t id, insn_t insn)
@@ -2704,6 +2725,9 @@ setup_id_reg_sets (idata_t id, insn_t insn)
}
}
+ /* Also get implicit reg clobbers from sched-deps. */
+ setup_id_implicit_regs (id, insn);
+
return_regset_to_pool (tmp);
}
@@ -2735,20 +2759,18 @@ deps_init_id (idata_t id, insn_t insn, bool force_unique_p)
deps_init_id_data.force_use_p = false;
init_deps (dc, false);
-
memcpy (&deps_init_id_sched_deps_info,
&const_deps_init_id_sched_deps_info,
sizeof (deps_init_id_sched_deps_info));
-
if (spec_info != NULL)
deps_init_id_sched_deps_info.generate_spec_deps = 1;
-
sched_deps_info = &deps_init_id_sched_deps_info;
deps_analyze_insn (dc, insn);
+ /* Implicit reg clobbers received from sched-deps separately. */
+ setup_id_implicit_regs (id, insn);
free_deps (dc);
-
deps_init_id_data.id = NULL;
}
@@ -4084,11 +4106,14 @@ get_seqno_by_preds (rtx_insn *insn)
insn_t *preds;
int n, i, seqno;
- while (tmp != head)
+ /* Loop backwards from INSN to HEAD including both. */
+ while (1)
{
- tmp = PREV_INSN (tmp);
if (INSN_P (tmp))
- return INSN_SEQNO (tmp);
+ return INSN_SEQNO (tmp);
+ if (tmp == head)
+ break;
+ tmp = PREV_INSN (tmp);
}
cfg_preds (bb, &preds, &n);
diff --git a/gcc/sel-sched.c b/gcc/sel-sched.c
index bd32ab5..b795aea 100644
--- a/gcc/sel-sched.c
+++ b/gcc/sel-sched.c
@@ -1457,31 +1457,44 @@ choose_best_pseudo_reg (regset used_regs,
gcc_assert (mode == GET_MODE (dest));
orig_regno = REGNO (dest);
- if (!REGNO_REG_SET_P (used_regs, orig_regno))
- {
- if (orig_regno < FIRST_PSEUDO_REGISTER)
- {
- gcc_assert (df_regs_ever_live_p (orig_regno));
+ /* Check that nothing in used_regs intersects with orig_regno. When
+ we have a hard reg here, still loop over hard_regno_nregs. */
+ if (HARD_REGISTER_NUM_P (orig_regno))
+ {
+ int j, n;
+ for (j = 0, n = hard_regno_nregs[orig_regno][mode]; j < n; j++)
+ if (REGNO_REG_SET_P (used_regs, orig_regno + j))
+ break;
+ if (j < n)
+ continue;
+ }
+ else
+ {
+ if (REGNO_REG_SET_P (used_regs, orig_regno))
+ continue;
+ }
+ if (HARD_REGISTER_NUM_P (orig_regno))
+ {
+ gcc_assert (df_regs_ever_live_p (orig_regno));
- /* For hard registers, we have to check hardware imposed
- limitations (frame/stack registers, calls crossed). */
- if (!TEST_HARD_REG_BIT (reg_rename_p->unavailable_hard_regs,
- orig_regno))
- {
- /* Don't let register cross a call if it doesn't already
- cross one. This condition is written in accordance with
- that in sched-deps.c sched_analyze_reg(). */
- if (!reg_rename_p->crosses_call
- || REG_N_CALLS_CROSSED (orig_regno) > 0)
- return gen_rtx_REG (mode, orig_regno);
- }
+ /* For hard registers, we have to check hardware imposed
+ limitations (frame/stack registers, calls crossed). */
+ if (!TEST_HARD_REG_BIT (reg_rename_p->unavailable_hard_regs,
+ orig_regno))
+ {
+ /* Don't let register cross a call if it doesn't already
+ cross one. This condition is written in accordance with
+ that in sched-deps.c sched_analyze_reg(). */
+ if (!reg_rename_p->crosses_call
+ || REG_N_CALLS_CROSSED (orig_regno) > 0)
+ return gen_rtx_REG (mode, orig_regno);
+ }
- bad_hard_regs = true;
- }
- else
- return dest;
- }
- }
+ bad_hard_regs = true;
+ }
+ else
+ return dest;
+ }
*is_orig_reg_p_ptr = false;
@@ -4249,8 +4262,9 @@ invoke_aftermath_hooks (fence_t fence, rtx_insn *best_insn, int issue_more)
issue_more);
memcpy (FENCE_STATE (fence), curr_state, dfa_state_size);
}
- else if (GET_CODE (PATTERN (best_insn)) != USE
- && GET_CODE (PATTERN (best_insn)) != CLOBBER)
+ else if (!DEBUG_INSN_P (best_insn)
+ && GET_CODE (PATTERN (best_insn)) != USE
+ && GET_CODE (PATTERN (best_insn)) != CLOBBER)
issue_more--;
return issue_more;
diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c
index 450fa8b..b1b9936 100644
--- a/gcc/simplify-rtx.c
+++ b/gcc/simplify-rtx.c
@@ -3665,7 +3665,7 @@ simplify_binary_operation_1 (enum rtx_code code, machine_mode mode,
for (int i = 0; i < XVECLEN (trueop1, 0); i++)
{
rtx j = XVECEXP (trueop1, 0, i);
- if (sel & (1 << UINTVAL (j)))
+ if (sel & (HOST_WIDE_INT_1U << UINTVAL (j)))
all_operand1 = false;
else
all_operand0 = false;
@@ -4421,9 +4421,26 @@ simplify_plus_minus (enum rtx_code code, machine_mode mode, rtx op0,
n_ops = i;
}
- /* If nothing changed, fail. */
+ /* If nothing changed, check that rematerialization of rtl instructions
+ is still required. */
if (!canonicalized)
- return NULL_RTX;
+ {
+ /* Perform rematerialization if only all operands are registers and
+ all operations are PLUS. */
+ /* ??? Also disallow (non-global, non-frame) fixed registers to work
+ around rs6000 and how it uses the CA register. See PR67145. */
+ for (i = 0; i < n_ops; i++)
+ if (ops[i].neg
+ || !REG_P (ops[i].op)
+ || (REGNO (ops[i].op) < FIRST_PSEUDO_REGISTER
+ && fixed_regs[REGNO (ops[i].op)]
+ && !global_regs[REGNO (ops[i].op)]
+ && ops[i].op != frame_pointer_rtx
+ && ops[i].op != arg_pointer_rtx
+ && ops[i].op != stack_pointer_rtx))
+ return NULL_RTX;
+ goto gen_result;
+ }
/* Create (minus -C X) instead of (neg (const (plus X C))). */
if (n_ops == 2
@@ -4465,6 +4482,7 @@ simplify_plus_minus (enum rtx_code code, machine_mode mode, rtx op0,
}
/* Now make the result by performing the requested operations. */
+ gen_result:
result = ops[0].op;
for (i = 1; i < n_ops; i++)
result = gen_rtx_fmt_ee (ops[i].neg ? MINUS : PLUS,
diff --git a/gcc/ssa-iterators.h b/gcc/ssa-iterators.h
index c58639b..a7d75d6 100644
--- a/gcc/ssa-iterators.h
+++ b/gcc/ssa-iterators.h
@@ -448,9 +448,11 @@ num_imm_uses (const_tree var)
unsigned int num = 0;
if (!MAY_HAVE_DEBUG_STMTS)
- for (ptr = start->next; ptr != start; ptr = ptr->next)
- if (USE_STMT (ptr))
- num++;
+ {
+ for (ptr = start->next; ptr != start; ptr = ptr->next)
+ if (USE_STMT (ptr))
+ num++;
+ }
else
for (ptr = start->next; ptr != start; ptr = ptr->next)
if (USE_STMT (ptr) && !is_gimple_debug (USE_STMT (ptr)))
diff --git a/gcc/store-motion.c b/gcc/store-motion.c
index c3b4d46..fffdffc 100644
--- a/gcc/store-motion.c
+++ b/gcc/store-motion.c
@@ -557,7 +557,8 @@ find_moveable_store (rtx_insn *insn, int *regs_set_before, int *regs_set_after)
assumes that we can do this. But sometimes the target machine has
oddities like MEM read-modify-write instruction. See for example
PR24257. */
- if (!can_assign_to_reg_without_clobbers_p (SET_SRC (set)))
+ if (!can_assign_to_reg_without_clobbers_p (SET_SRC (set),
+ GET_MODE (SET_SRC (set))))
return;
ptr = st_expr_entry (dest);
diff --git a/gcc/symtab.c b/gcc/symtab.c
index 523c95d..3d3cc4f 100644
--- a/gcc/symtab.c
+++ b/gcc/symtab.c
@@ -1287,6 +1287,61 @@ symtab_node::make_decl_local (void)
SYMBOL_REF_WEAK (symbol) = DECL_WEAK (decl);
}
+/* Copy visibility from N.
+ This is useful when THIS becomes a transparent alias of N. */
+
+void
+symtab_node::copy_visibility_from (symtab_node *n)
+{
+ gcc_checking_assert (n->weakref == weakref);
+
+ ipa_ref *ref;
+ for (unsigned i = 0; iterate_direct_aliases (i, ref); i++)
+ {
+ struct symtab_node *alias = ref->referring;
+ if (alias->transparent_alias)
+ alias->copy_visibility_from (n);
+ }
+
+ if (TREE_CODE (decl) == VAR_DECL)
+ {
+ DECL_COMMON (decl) = DECL_COMMON (n->decl);
+ /* ADDRESSABLE flag is not defined for public symbols. */
+ if (TREE_PUBLIC (decl) && !TREE_PUBLIC (n->decl))
+ TREE_ADDRESSABLE (decl) = 1;
+ TREE_STATIC (decl) = TREE_STATIC (n->decl);
+ }
+ else gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
+
+ DECL_COMDAT (decl) = DECL_COMDAT (n->decl);
+ DECL_WEAK (decl) = DECL_WEAK (n->decl);
+ DECL_EXTERNAL (decl) = DECL_EXTERNAL (n->decl);
+ DECL_VISIBILITY_SPECIFIED (decl) = DECL_VISIBILITY_SPECIFIED (n->decl);
+ DECL_VISIBILITY (decl) = DECL_VISIBILITY (n->decl);
+ TREE_PUBLIC (decl) = TREE_PUBLIC (n->decl);
+ DECL_DLLIMPORT_P (decl) = DECL_DLLIMPORT_P (n->decl);
+ resolution = n->resolution;
+ set_comdat_group (n->get_comdat_group ());
+ call_for_symbol_and_aliases (symtab_node::set_section,
+ const_cast<char *>(n->get_section ()), true);
+ externally_visible = n->externally_visible;
+ if (!DECL_RTL_SET_P (decl))
+ return;
+
+ /* Update rtl flags. */
+ make_decl_rtl (decl);
+
+ rtx rtl = DECL_RTL (decl);
+ if (!MEM_P (rtl))
+ return;
+
+ rtx symbol = XEXP (rtl, 0);
+ if (GET_CODE (symbol) != SYMBOL_REF)
+ return;
+
+ SYMBOL_REF_WEAK (symbol) = DECL_WEAK (decl);
+}
+
/* Walk the alias chain to return the symbol NODE is alias of.
If NODE is not an alias, return NODE.
Assumes NODE is known to be alias. */
@@ -2137,3 +2192,17 @@ symtab_node::definition_alignment ()
call_for_symbol_and_aliases (get_alignment_1, &align, true);
return align;
}
+
+/* Return symbol used to separate symbol name from suffix. */
+
+char
+symbol_table::symbol_suffix_separator ()
+{
+#ifndef NO_DOT_IN_LABEL
+ return '.';
+#elif !defined NO_DOLLAR_IN_LABEL
+ return '$';
+#else
+ return '_';
+#endif
+}
diff --git a/gcc/system.h b/gcc/system.h
index 445073c..cb54541 100644
--- a/gcc/system.h
+++ b/gcc/system.h
@@ -1014,6 +1014,10 @@ extern void fancy_abort (const char *, int, const char *) ATTRIBUTE_NORETURN;
#undef rindex
#pragma GCC poison bcopy bzero bcmp rindex
+/* Poison ENABLE_CHECKING macro that should be replaced with
+ 'if (flag_checking)', or with CHECKING_P macro. */
+#pragma GCC poison ENABLE_CHECKING
+
#endif /* GCC >= 3.0 */
/* This macro allows casting away const-ness to pass -Wcast-qual
diff --git a/gcc/target.def b/gcc/target.def
index 5c8e4e1..20f2b32 100644
--- a/gcc/target.def
+++ b/gcc/target.def
@@ -4884,9 +4884,9 @@ DEFHOOK
DEFHOOK
(lra_p,
"A target hook which returns true if we use LRA instead of reload pass.\
- It means that LRA was ported to the target.\
\
- The default version of this target hook returns always false.",
+ The default version of this target hook returns always false, but new\
+ ports should use LRA.",
bool, (void),
default_lra_p)
diff --git a/gcc/targhooks.c b/gcc/targhooks.c
index 74af91a..a342277 100644
--- a/gcc/targhooks.c
+++ b/gcc/targhooks.c
@@ -1031,7 +1031,10 @@ tree default_mangle_decl_assembler_name (tree decl ATTRIBUTE_UNUSED,
HOST_WIDE_INT
default_vector_alignment (const_tree type)
{
- return tree_to_shwi (TYPE_SIZE (type));
+ HOST_WIDE_INT align = tree_to_shwi (TYPE_SIZE (type));
+ if (align > MAX_OFILE_ALIGNMENT)
+ align = MAX_OFILE_ALIGNMENT;
+ return align;
}
bool
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 13e3388..56527db 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,2325 @@
+2016-04-12 Jakub Jelinek <jakub@redhat.com>
+
+ * c-c++-common/cilk-plus/SE/ef_error2.c (func2): Use vectorlength
+ 128 instead of 32.
+
+ PR c++/70571
+ * g++.dg/ext/pr70571.C: New test.
+
+2016-04-12 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/70640
+ * gcc.target/powerpc/pr70640.c: New test.
+
+2016-04-12 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/68722
+ * g++.dg/parse/pr68722.C: New.
+
+2016-04-12 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/70596
+ * gcc.target/i386/pr70596.c: New test.
+
+2016-04-12 Nathan Sidwell <nathan@acm.org>
+
+ PR c++/70501
+ * g++.dg/init/pr70501.C: New.
+
+2016-04-12 David Wohlferd <dw@LimeGreenSocks.com>
+
+ * gcc.target/i386/asm-flag-6.c: New test.
+
+2016-04-12 Tom de Vries <tom@codesourcery.com>
+
+ PR tree-optimization/68756
+ * gcc.dg/graphite/pr68756.c: New test.
+
+2016-04-12 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/70602
+ * gcc.c-torture/execute/pr70602.c: New test.
+
+2016-04-11 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/70381
+ * gcc.target/powerpc/float128-1.c: New tests to make sure the
+ __float128 emulator is built and runs.
+ * gcc.target/powerpc/float128-1.c: Likewise.
+
+ * lib/target-supports.exp (check_ppc_float128_sw_available):
+ Rework tests for __float128 software and hardware
+ availability. Fix exit condition to return 0 on success.
+
+2016-04-11 James Greenhalgh <james.greenhalgh@arm.com>
+
+ PR target/70133
+ * gcc.target/aarch64/mgeneral-regs_4.c: Fix expected output.
+ * gcc.target/aarch64/target_attr_15.c: Likewise.
+
+2016-04-10 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/69066
+ * g++.dg/cpp1y/pr69066.C: New.
+
+2016-04-09 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR fortran/68566
+ * gfortran.dg/pr36192.f90: Update test.
+ * gfortran.dg/pr36192_1.f90: Update test.
+ * gfortran.dg/real_dimension_1.f: Update test.
+ * gfortran.dg/parameter_array_init_7.f90: New test.
+
+2016-04-09 John David Anglin <danglin@gcc.gnu.org>
+
+ PR testsuite/64039
+ * gcc.dg/tree-ssa/ssa-dom-cse-2.c: xfail scan-tree-dump on hppa*64*-*-*.
+
+ * gcc.dg/pr70317.c: Add -fno-common on hppa*-*-hpux*.
+
+ PR rtl-optimization/66669
+ * gcc.dg/loop-8.c: Skip on hppa*-*-*.
+
+ * gcc.dg/debug/dwarf2/prod-options.c: Adjust scan for hppa*64*-*-*.
+
+ * gcc.dg/pic-1.c: Skip on hppa*-*-*.
+ * gcc.dg/pie-1.c: Likewise.
+ * gcc.dg/pic-3.c: Skip on hppa*64*-*-*.
+ * gcc.dg/pic-4.c: Likewise.
+ * gcc.dg/pie-3.c: Likewise.
+ * gcc.dg/pie-4.c: Likewise.
+
+ * gcc.dg/uninit-19.c: Fix warning line for hppa*64*-*-*.
+
+ PR tree-optimization/68644
+ * gcc.dg/tree-ssa/ivopts-lt-2.c: Skip on hppa*-*-*.
+
+ PR rtl-optimization/64886
+ * gcc.dg/pr64434.c: Skip on hppa*-*-hpux*.
+
+2016-04-09 Tom de Vries <tom@codesourcery.com>
+
+ PR tree-optimization/68953
+ * gcc.dg/graphite/pr68953.c: New test.
+
+2016-04-09 Dominique d'Humieres <dominiq@lps.ens.fr>
+
+ PR fortran/70592
+ * gfortran.dg/deferred_character_16.f90: New test.
+
+2016-04-09 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/70586
+ * gcc.c-torture/execute/pr70586.c: New test.
+
+2016-04-09 Dominique d'Humieres <dominiq@lps.ens.fr>
+
+ PR sanitizer/70573
+ * c-c++-common/asan/halt_on_error-1.c: Replace memset
+ with __builtin_memset
+ * c-c++-common/asan/halt_on_error-2.c: Likewise.
+
+2016-04-08 Cesar Philippidis <cesar@codesourcery.com>
+
+ PR lto/70289
+ PR ipa/70348
+ PR tree-optimization/70373
+ PR middle-end/70533
+ PR middle-end/70534
+ PR middle-end/70535
+ * c-c++-common/goacc/reduction-5.c: New test.
+ * c-c++-common/goacc/reduction-promotions.c: New test.
+ * gfortran.dg/goacc/reduction-3.f95: New test.
+ * gfortran.dg/goacc/reduction-promotions.f90: New test.
+
+2016-04-08 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/70590
+ PR c++/70452
+ * g++.dg/pr70590.C: New test.
+ * g++.dg/pr70590-2.C: New test.
+
+2016-04-08 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/70593
+ * gcc.target/i386/pr70593.c: New test.
+
+ PR rtl-optimization/70574
+ * gcc.target/i386/avx2-pr70574.c: New test.
+
+2016-04-08 Maxim Ostapenko <m.ostapenko@samsung.com>
+
+ PR sanitizer/70541
+ * c-c++-common/asan/pr70541.c: New test.
+
+2016-04-08 Tom de Vries <tom@codesourcery.com>
+
+ * c-c++-common/goacc/uninit-firstprivate-clause.c: New test.
+ * gfortran.dg/goacc/uninit-firstprivate-clause.f95: New test.
+
+2016-04-08 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ PR target/70566
+ * gcc.c-torture/execute/pr70566.c: New test.
+
+2016-04-08 Tom de Vries <tom@codesourcery.com>
+
+ * c-c++-common/goacc/uninit-copy-clause.c: New test.
+ * gfortran.dg/goacc/uninit-copy-clause.f95: New test.
+
+2016-04-08 Alan Modra <amodra@gmail.com>
+
+ * gcc.target/powerpc/pr70117.c: New.
+
+2016-04-07 Jakub Jelinek <jakub@redhat.com>
+
+ PR testsuite/70581
+ * gcc.dg/lto/simd-function_0.c: New test.
+
+ * c-c++-common/attr-simd.c: Add scan-assembler* directives for AVX512F
+ clones.
+ * c-c++-common/attr-simd-2.c: Likewise.
+ * c-c++-common/attr-simd-4.c: Likewise.
+ * gcc.dg/gomp/simd-clones-2.c: Likewise.
+ * gcc.dg/gomp/simd-clones-3.c: Likewise.
+
+2016-04-07 Thomas Preud'homme <thomas.preudhomme@arm.com>
+
+ PR testsuite/70553
+ * gcc.target/arm/pr70496.c: Also require arm_arm_ok effective target.
+
+2016-04-07 Thomas Schwinge <thomas@codesourcery.com>
+ Tom de Vries <tom@codesourcery.com>
+
+ * gfortran.dg/goacc/kernels-loop-2.f95: Scan for parallelization.
+ * gfortran.dg/goacc/kernels-loop-data-2.f95: Likewise.
+ * gfortran.dg/goacc/kernels-loop-data-enter-exit-2.f95: Likewise.
+ * gfortran.dg/goacc/kernels-loop-data-enter-exit.f95: Likewise.
+ * gfortran.dg/goacc/kernels-loop-data-update.f95: Likewise.
+ * gfortran.dg/goacc/kernels-loop-data.f95: Likewise.
+ * gfortran.dg/goacc/kernels-loop.f95: Likewise.
+ * gfortran.dg/goacc/kernels-loop-n.f95: Likewise, XFAILed.
+
+2016-04-06 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c/70436
+ * g++.dg/warn/Wparentheses-29.C: New test.
+
+2016-04-06 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c/70436
+ * g++.dg/plugin/pragma_plugin.c (handle_pragma_sayhello): Add
+ explicit braces to resolve a future -Wparentheses warning.
+
+2016-04-06 Richard Henderson <rth@redhat.com>
+
+ * gcc.dg/pr61817-1.c: New test.
+ * gcc.dg/pr61817-2.c: New test.
+ * gcc.dg/pr69391-1.c: New test.
+ * gcc.dg/pr69391-2.c: New test.
+
+2016-04-06 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR rtl-optimization/70398
+ * testsuite/gcc.target/aarch64/pr70398.c: New.
+
+2016-04-06 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc.c-torture/execute/20101011-1.c (__VISIUM__): Set DO_TEST to 0.
+
+2016-04-06 Yvan Roux <yvan.roux@linaro.org>
+ Pedro Alves <palves@redhat.com>
+
+ * gcc.dg/guality/guality.h (main): Avoid GDB being blocked on signals.
+
+2016-04-06 Jakub Jelinek <jakub@redhat.com>
+
+ * lib/target-supports.exp (check_effective_target_vect_simd_clones):
+ Check for avx512f effective targets instead of avx2.
+ * gcc.dg/gomp/declare-simd-1.c: Add scan-assembler-times directives
+ for AVX512F clones.
+ * gcc.dg/gomp/declare-simd-3.c: Likewise.
+ * g++.dg/gomp/declare-simd-1.C: Likewise.
+ * g++.dg/gomp/declare-simd-3.C: Likewise.
+ * g++.dg/gomp/declare-simd-4.C: Likewise.
+
+ PR middle-end/70550
+ * c-c++-common/gomp/pr70550-1.c: New test.
+ * c-c++-common/gomp/pr70550-2.c: New test.
+
+2016-04-05 Nathan Sidwell <nathan@acm.org>
+
+ PR c++/70512
+ * g++.dg/ext/attribute-may-alias-5.C: New.
+
+2016-04-05 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/70336
+ * c-c++-common/pr70336.c: New test.
+ * gcc.dg/torture/builtin-isinf_sign-1.c (foo): Guard tests
+ no longer optimized away at -O0 with #ifndef __OPTIMIZE__.
+
+2016-04-05 Jan Hubicka <hubicka@ucw.cz>
+
+ PR ipa/66223
+ * g++.dg/ipa/devirt-51.C: Use -fsanitize=unreachable.
+
+2016-04-05 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/70542
+ * gcc.dg/torture/pr70542.c: New test.
+ * gcc.target/i386/avx2-pr70542.c: New test.
+
+2016-04-05 Zdenek Sojka <zsojka@seznam.cz>
+
+ PR tree-optimization/70509
+ * gcc.target/i386/avx512bw-pr70509.c: New test.
+
+2016-04-05 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/70452
+ * g++.dg/ext/constexpr-vla4.C: New test.
+
+2016-04-05 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/70510
+ * gcc.target/i386/pr70510.c: New test.
+
+2016-04-05 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/70526
+ * g++.dg/torture/pr70526.C: New testcase.
+
+2016-04-05 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/70525
+ * gcc.target/i386/pr70525.c: New test.
+
+2016-04-05 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/70499
+ * g++.dg/torture/pr70499.C: New testcase.
+
+2016-04-05 Richard Biener <rguenther@suse.de>
+
+ * gcc.dg/tree-ssa/20030814-6.c: Fix testcase, disable FRE,
+ remove XFAIL.
+
+2016-04-04 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/70307
+ * gcc.dg/torture/pr70307.c: Add -Wno-psabi to dg-options. Prune
+ rs6000 ABI warnings.
+
+2016-04-04 Jan Hubicka <hubicka@ucw.cz>
+
+ PR ipa/66223
+ * g++.dg/ipa/devirt-51.C: New testcase.
+
+2016-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+ Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/70457
+ * gcc.dg/torture/pr70457.c: New.
+
+2016-04-04 Andre Vehreschild <vehre@gcc.gnu.org>
+
+ PR fortran/67538
+ * gfortran.dg/allocate_with_source_19.f08: New test.
+
+2016-04-04 Andre Vehreschild <vehre@gcc.gnu.org>
+
+ PR fortran/65795
+ * gfortran.dg/coarray_allocate_6.f08: New test.
+
+2016-04-04 Richard Biener <rguenther@suse.de>
+
+ PR rtl-optimization/70484
+ * gcc.dg/torture/pr70484.c: New testcase.
+
+2016-04-04 Marek Polacek <polacek@redhat.com>
+
+ PR c/70307
+ * gcc.dg/torture/pr70307.c: New test.
+
+2016-04-03 Oleg Endo <olegendo@gcc.gnu.org>
+
+ PR target/70416
+ PR target/67391
+ * gcc.target/sh/torture/pr70416.c: New.
+
+2016-04-02 Martin Sebor <msebor@redhat.com>
+
+ PR c++/67376
+ PR c++/70170
+ PR c++/70172
+ PR c++/70228
+ * g++.dg/cpp0x/constexpr-array-ptr10.C: New test.
+ * g++.dg/cpp0x/constexpr-array-ptr9.C: New test.
+ * g++.dg/cpp0x/constexpr-nullptr-1.C: New test.
+ * g++.dg/cpp0x/constexpr-array5.C: Adjust text of expected diagnostic.
+ * g++.dg/cpp0x/constexpr-string.C: Same.
+ * g++.dg/cpp0x/constexpr-wstring2.C: Same.
+ * g++.dg/cpp0x/pr65398.C: Same.
+ * g++.dg/ext/constexpr-vla1.C: Same.
+ * g++.dg/ext/constexpr-vla2.C: Same.
+ * g++.dg/ext/constexpr-vla3.C: Same.
+ * g++.dg/ubsan/pr63956.C: Same.
+
+2016-04-01 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/70467
+ * gcc.target/i386/pr70467-2.c: New test.
+
+2016-04-01 Jakub Jelinek <jakub@redhat.com>
+ Marek Polacek <polacek@redhat.com>
+
+ PR c++/70488
+ * g++.dg/init/new47.C: New test.
+
+2016-04-01 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
+
+ PR target/70496
+ * gcc.target/arm/pr70496.c: New test.
+
+2016-04-01 Nathan Sidwell <nathan@acm.org>
+
+ PR c++/68475
+ * g++.dg/g++.dg/cpp0x/noexcept29.C: New.
+
+2016-04-01 Ilya Enkovich <enkovich.gnu@gmail.com>
+
+ PR target/69890
+ * gcc.dg/strlenopt.h (memmove): New.
+ * gcc.target/i386/chkp-strlen-1.c: Include "../../gcc.dg/strlenopt.h"
+ instead of "string.h".
+ * gcc.target/i386/chkp-strlen-2.c: Likewise.
+ * gcc.target/i386/chkp-strlen-3.c: Likewise.
+ * gcc.target/i386/chkp-strlen-4.c: Likewise.
+ * gcc.target/i386/chkp-strlen-5.c: Likewise.
+ * gcc.target/i386/chkp-stropt-1.c: Likewise.
+ * gcc.target/i386/chkp-stropt-10.c: Likewise.
+ * gcc.target/i386/chkp-stropt-11.c: Likewise.
+ * gcc.target/i386/chkp-stropt-12.c: Likewise.
+ * gcc.target/i386/chkp-stropt-13.c: Likewise.
+ * gcc.target/i386/chkp-stropt-14.c: Likewise.
+ * gcc.target/i386/chkp-stropt-15.c: Likewise.
+ * gcc.target/i386/chkp-stropt-16.c: Likewise.
+ * gcc.target/i386/chkp-stropt-2.c: Likewise.
+ * gcc.target/i386/chkp-stropt-3.c: Likewise.
+ * gcc.target/i386/chkp-stropt-4.c: Likewise.
+ * gcc.target/i386/chkp-stropt-5.c: Likewise.
+ * gcc.target/i386/chkp-stropt-6.c: Likewise.
+ * gcc.target/i386/chkp-stropt-7.c: Likewise.
+ * gcc.target/i386/chkp-stropt-8.c: Likewise.
+ * gcc.target/i386/chkp-stropt-9.c: Likewise.
+
+2016-03-31 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * g++.dg/template/ptrmem30.C (read): Rename to data_read.
+ (Holder::foo): Reflect this.
+
+2016-03-31 Ilya Enkovich <enkovich.gnu@gmail.com>
+
+ PR target/70442
+ * gcc.dg/pr70442.c: New test.
+
+2016-03-31 Nathan Sidwell <nathan@acm.org>
+
+ PR c++/70393
+ * g++.dg/cpp0x/constexpr-virtual6.C: New.
+
+2016-03-31 Kirill Yukhin <kirill.yukhin@intel.com>
+
+ PR target/70453
+ * gcc.target/i386/pr70453.c: New test.
+
+2016-03-31 Andrey Belevantsev <abel@ispras.ru>
+
+ PR target/70292
+ * gcc.c-torture/pr70292.c: New test.
+
+2016-03-31 Marek Polacek <polacek@redhat.com>
+
+ PR c/70297
+ * c-c++-common/pr70297.c: New test.
+ * g++.dg/cpp0x/typedef-redecl.C: New test.
+ * gcc.dg/typedef-redecl2.c: New test.
+
+2016-03-31 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/70460
+ * gcc.c-torture/execute/pr70460.c: New test.
+
+2016-03-31 Richard Biener <rguenther@suse.de>
+
+ PR c++/70430
+ * g++.dg/ext/vector30.C: New testcase.
+
+2016-03-30 Dominique d'Humieres <dominiq@lps.ens.fr>
+ Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ * gfortran.dg/fmt_pf.f90: New test.
+
+2016-03-30 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ Forward-port from 5 branch
+ 2016-03-30 Jakub Jelinek <jakub@redhat.com>
+
+ PR testsuite/70356
+ * gcc.target/i386/avx-vextractf128-256-5.c: Move
+ dg-require-effective-target after dg-do.
+
+ 2015-12-30 Kirill Yukhin <kirill.yukhin@intel.com>
+
+ * gcc.target/i386/avx-vextractf128-256-5.c: New test.
+
+2016-03-30 Thomas Schwinge <thomas@codesourcery.com>
+ Julian Brown <julian@codesourcery.com>
+ Chung-Lin Tang <cltang@codesourcery.com>
+ Cesar Philippidis <cesar@codesourcery.com>
+ James Norris <jnorris@codesourcery.com>
+ Tom de Vries <tom@codesourcery.com>
+ Nathan Sidwell <nathan@codesourcery.com>
+
+ * c-c++-common/goacc/combined-directives.c: Clean up dg-* directives.
+ * c-c++-common/goacc/loop-clauses.c: Likewise.
+ * g++.dg/goacc/template.C: Likewise.
+ * gfortran.dg/goacc/combined-directives.f90: Likewise.
+ * gfortran.dg/goacc/loop-1.f95: Likewise.
+ * gfortran.dg/goacc/loop-5.f95: Likewise.
+ * gfortran.dg/goacc/loop-6.f95: Likewise.
+ * gfortran.dg/goacc/loop-tree-1.f90: Likewise.
+ * c-c++-common/goacc-gomp/nesting-1.c: Update.
+ * c-c++-common/goacc-gomp/nesting-fail-1.c: Likewise.
+ * c-c++-common/goacc/clauses-fail.c: Likewise.
+ * c-c++-common/goacc/parallel-1.c: Likewise.
+ * c-c++-common/goacc/reduction-1.c: Likewise.
+ * c-c++-common/goacc/reduction-2.c: Likewise.
+ * c-c++-common/goacc/reduction-3.c: Likewise.
+ * c-c++-common/goacc/reduction-4.c: Likewise.
+ * c-c++-common/goacc/routine-3.c: Likewise.
+ * c-c++-common/goacc/routine-4.c: Likewise.
+ * c-c++-common/goacc/routine-5.c: Likewise.
+ * c-c++-common/goacc/tile.c: Likewise.
+ * g++.dg/goacc/template.C: Likewise.
+ * gfortran.dg/goacc/combined-directives.f90: Likewise.
+ * c-c++-common/goacc/nesting-1.c: Move dg-error test cases into...
+ * c-c++-common/goacc/nesting-fail-1.c: ... this file. Update.
+ * c-c++-common/goacc/kernels-1.c: Update. Incorporate...
+ * c-c++-common/goacc/kernels-empty.c: ... this file, and...
+ * c-c++-common/goacc/kernels-eternal.c: ... this file, and...
+ * c-c++-common/goacc/kernels-noreturn.c: ... this file.
+ * c-c++-common/goacc/host_data-1.c: New file. Incorporate...
+ * c-c++-common/goacc/use_device-1.c: ... this file.
+ * c-c++-common/goacc/host_data-2.c: New file. Incorporate...
+ * c-c++-common/goacc/host_data-5.c: ... this file, and...
+ * c-c++-common/goacc/host_data-6.c: ... this file.
+ * c-c++-common/goacc/loop-2-kernels.c: New file.
+ * c-c++-common/goacc/loop-2-parallel.c: Likewise.
+ * c-c++-common/goacc/loop-3.c: Likewise.
+ * g++.dg/goacc/reference.C: Likewise.
+ * g++.dg/goacc/routine-1.C: Likewise.
+ * g++.dg/goacc/routine-2.C: Likewise.
+
+2016-03-30 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/70450
+ * gcc.dg/torture/pr70450.c: New testcase.
+
+2016-03-30 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/70421
+ * gcc.dg/torture/pr70421.c: New test.
+ * gcc.target/i386/avx512f-pr70421.c: New test.
+
+2016-03-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR testsuite/70364
+ * gcc.target/i386/cleanup-1.c: Include <stddef.h>.
+ (check): New function.
+ (bar): Call check.
+ (foo): Align stack to 16 bytes when calling bar.
+ * gcc.target/i386/cleanup-2.c: Likewise.
+
+2016-03-30 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR tree-optimization/59124
+ * gcc.dg/Warray-bounds-19.c: New test.
+
+2016-03-29 Zachary T Welch <zwelch@codesourcery.com>
+
+ * lib/prune.exp (escape_regex_chars): New.
+ (prune_file_path): Update to quote metcharacters for regexp.
+
+2016-03-29 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/70429
+ * gcc.c-torture/execute/pr70429.c: New test.
+
+ PR tree-optimization/70405
+ * gcc.dg/pr70405.c: New test.
+
+2016-03-29 Andre Vehreschild <vehre@gcc.gnu.org>
+
+ PR fortran/70397
+ * gfortran.dg/unlimited_polymorphic_25.f90: New test.
+ * gfortran.dg/unlimited_polymorphic_26.f90: New test.
+
+2016-03-29 Thomas Schwinge <thomas@codesourcery.com>
+
+ PR testsuite/64177
+ * c-c++-common/cilk-plus/CK/spawning_arg.c (main): Call
+ __cilkrts_set_param to set two workers.
+ * c-c++-common/cilk-plus/CK/steal_check.c (main): Likewise.
+ * g++.dg/cilk-plus/CK/catch_exc.cc (main): Likewise.
+
+2016-03-28 Dominique d'Humieres <dominiq@lps.ens.fr>
+
+ * g++.dg/ext/fnname5.C: Update the test for Darwin.
+
+2016-03-28 Kirill Yukhin <kirill.yukhin@intel.com>
+
+ PR target/70406
+ * gcc.target/i386/pr70406.c: New test.
+
+2016-03-27 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/specs/double_record_extension3.ads: New test.
+
+2016-03-25 Richard Henderson <rth@redhat.com>
+
+ PR target/70120
+ * gcc.target/aarch64/pr70120-1.c: New.
+ * gcc.target/aarch64/pr70120-2.c: New.
+ * gcc.target/aarch64/pr70120-3.c: New.
+
+2016-03-25 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/62212
+ * g++.dg/template/mangle2.C: The dg-do directive should be
+ "compile" not "assemble".
+
+2016-03-25 Bernd Schmidt <bschmidt@redhat.com>
+
+ PR lto/69650
+ * gcc.dg/pr69650.c: New test.
+
+2016-03-25 David Edelsohn <dje.gcc@gmail.com>
+
+ * g++.dg/ext/pr70290.C: Prune non-standard ABI.
+
+2016-03-25 Alan Modra <amodra@gmail.com>
+
+ * gcc.dg/dfp/pr70052.c: New test.
+
+2016-03-24 Richard Henderson <rth@redhat.com>
+
+ PR middle-end/69845
+ * gcc.dg/tree-ssa/pr69845-1.c: New test.
+ * gcc.dg/tree-ssa/pr69845-2.c: New test.
+
+2016-03-24 Tom de Vries <tom@codesourcery.com>
+
+ * gfortran.dg/goacc/host_data-tree.f95: Add missing initialization.
+
+2016-03-24 Tom de Vries <tom@codesourcery.com>
+
+ * c-c++-common/goacc/uninit-use-device-clause.c: New test.
+ * gfortran.dg/goacc/uninit-use-device-clause.f95: New test.
+
+2016-03-24 Tom de Vries <tom@codesourcery.com>
+
+ * c-c++-common/goacc/uninit-dim-clause.c: New test.
+ * gfortran.dg/goacc/uninit-dim-clause.f95: New test.
+
+2016-03-24 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/62212
+ * g++.dg/template/mangle2.C: New test.
+
+2016-03-24 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/70396
+ * gcc.dg/torture/pr70396.c: New testcase.
+
+2016-03-24 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/70370
+ * gcc.dg/torture/pr70370.c: New testcase.
+
+2016-03-24 Tom de Vries <tom@codesourcery.com>
+
+ * gfortran.dg/goacc/data-tree.f95: Add missing initialization.
+ * gfortran.dg/goacc/kernels-tree.f95: Same.
+ * gfortran.dg/goacc/parallel-tree.f95: Same.
+
+2016-03-24 Tom de Vries <tom@codesourcery.com>
+
+ * c-c++-common/goacc/uninit-if-clause.c: New test.
+ * gfortran.dg/goacc/uninit-if-clause.f95: New test.
+
+2016-03-24 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/70290
+ * g++.dg/ext/pr70290.C: Add -Wno-psabi -w to dg-options.
+ Fix formatting.
+
+2016-03-24 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/70372
+ * gcc.dg/tree-ssa/pr70372.c: New testcase.
+
+2016-03-23 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/70347
+ * g++.dg/cpp1y/nsdmi-union1.C: New test.
+
+2016-03-23 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/70332
+ * g++.dg/cpp1y/nsdmi-aggr5.C: New test.
+
+2016-03-23 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/70001
+ * g++.dg/cpp0x/constexpr-70001-4.C: New test.
+ * g++.dg/cpp1y/pr70001.C: New test.
+
+ PR c++/70323
+ * g++.dg/cpp0x/constexpr-70323.C: New test.
+
+2016-03-23 Alexandre Oliva <aoliva@redhat.com>
+ Jason Merrill <jason@redhat.com>
+ Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/69315
+ * g++.dg/cpp0x/constexpr-69315.C: New test.
+ * g++.dg/cpp0x/variadic122.C: Change one dg-warning into dg-bogus.
+
+2016-03-23 Marek Polacek <polacek@redhat.com>
+
+ PR c++/69884
+ * g++.dg/warn/Wignored-attributes-1.C: New test.
+ * g++.dg/warn/Wignored-attributes-2.C: New test.
+
+2016-03-23 Tom de Vries <tom@codesourcery.com>
+
+ * c-c++-common/goacc/kernels-default.c (foo): Add missing
+ initialization.
+ * gfortran.dg/goacc/private-3.f95 (test): Same.
+ * gfortran.dg/goacc/routine-5.f90 (gang, worker, vector, seq): Add
+ missing use param.
+
+2016-03-23 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ * lib/target-supports.exp: Remove v7ve entry from loop
+ creating effective target checks.
+ (check_effective_target_arm_arch_v7ve_ok): New procedure.
+ (add_options_for_arm_arch_v7ve): Likewise.
+
+2016-03-23 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/70354
+ * gcc.dg/vect/pr70354-1.c: New test.
+ * gcc.dg/vect/pr70354-2.c: New test.
+ * gcc.target/i386/avx2-pr70354-1.c: New test.
+ * gcc.target/i386/avx2-pr70354-2.c: New test.
+
+2016-03-22 Jeff Law <law@redhat.com>
+
+ PR target/70232
+ * gcc.dg/tree-ssa/pr70232.c: New test.
+
+2016-03-22 Ilya Enkovich <enkovich.gnu@gmail.com>
+
+ PR target/70302
+ * gcc.target/i386/pr70302.c: New test.
+
+2016-03-22 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/70251
+ * g++.dg/torture/pr70251.C: New testcase.
+
+2016-03-22 David Malcolm <dmalcolm@redhat.com>
+
+ PR c/69993
+ * c-c++-common/Wmisleading-indentation-3.c: New test, based on
+ Wmisleading-indentation.c.
+ * c-c++-common/Wmisleading-indentation.c: Update thoughout to
+ reflect change to diagnostic text and order of messages.
+ * gcc.dg/plugin/location-overflow-test-2.c: Likewise.
+
+2016-03-22 David Edelsohn <dje.gcc@gmail.com>
+
+ * g++.dg/ext/java-3.C: Don't compile on AIX.
+
+2016-03-22 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/70333
+ * gcc.dg/torture/pr70333.c: New testcase.
+
+2016-03-22 Ilya Enkovich <enkovich.gnu@gmail.com>
+
+ * g++.dg/ext/pr70290.C: New test.
+
+2016-03-22 Kirill Yukhin <kirill.yukhin@intel.com>
+
+ PR target/70325
+ * gcc.target/i386/pr70325.c: New test.
+
+2016-03-22 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/70329
+ * gcc.target/i386/avx512bw-pr70329-1.c: New test.
+ * gcc.target/i386/avx512bw-pr70329-2.c: New test.
+
+ PR target/70300
+ * gcc.target/i386/pr70300.c: New test.
+
+ PR c++/70295
+ * c-c++-common/nonnull-1.c (func): Remove parens around cp4 != 0.
+ (func2): New function for cond with parens, xfail warning for c++.
+ * g++.dg/warn/Wnonnull-compare-8.C: New test.
+
+2016-03-22 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/70096
+ * g++.dg/template/ptrmem30.C: New test.
+
+2016-03-22 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/70204
+ * g++.dg/cpp0x/constexpr-70204a.C: New test.
+ * g++.dg/cpp0x/constexpr-70204b.C: New test.
+
+2016-03-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/70326
+ * gcc.dg/pr70326.c: New test.
+
+2016-03-21 Marc Glisse <marc.glisse@inria.fr>
+ Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/70317
+ * gcc.dg/pr70317.c: New test.
+
+2016-03-21 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/70327
+ * gcc.target/i386/pr70327.c: New test.
+
+2016-03-21 Martin Liska <mliska@suse.cz>
+
+ PR ipa/70306
+ * gcc.dg/ipa/pr70306.c: New test.
+
+2016-03-21 Andre Vieira <andre.simoesdiasvieira@arm.com>
+
+ * gcc.target/arm/attr-align1.c: Skip if M-profile.
+ * gcc.target/arm/attr-align3.c: Likewise.
+ * gcc.target/arm/attr_arm.c: Likewise.
+ * gcc.target/arm/flip-thumb.c: Likewise.
+
+2016-03-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/70296
+ * gcc.target/powerpc/altivec-36.c: New test.
+
+2016-03-21 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/70310
+ * gcc.dg/torture/pr70310.c: New testcase.
+
+2016-03-21 Kirill Yukhin <kirill.yukhin@intel.com>
+
+ PR target/70293
+ * gcc.target/i386/pr70293.c: New test.
+
+2016-03-21 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/70288
+ * gcc.dg/torture/pr70288-1.c: New testcase.
+ * gcc.dg/torture/pr70288-2.c: Likewise.
+
+2016-03-21 Andrey Belevantsev <abel@ispras.ru>
+
+ PR rtl-optimization/69307
+ * gcc.target/arm/pr69307.c: New test.
+
+2016-03-21 Andrey Belevantsev <abel@ispras.ru>
+
+ PR rtl-optimization/69102
+ * gcc.c-torture/compile/pr69102.c: New test.
+
+2016-03-18 Jeff Law <law@redhat.com>
+
+ PR rtl-optimization/70263
+ * gcc.c-torture/compile/pr70263-1.c: New test.
+ * gcc.target/i386/pr70263-2.c: New test.
+
+2016-03-18 Bernd Schmidt <bschmidt@redhat.com>
+
+ PR rtl-optimization/70278
+ * gcc.dg/torture/pr70278.c: New test.
+ * gcc.target/arm/pr70278.c: New test.
+
+2016-03-18 David Malcolm <dmalcolm@redhat.com>
+
+ PR c/70281
+ * gcc.dg/plugin/diagnostic-test-expressions-1.c
+ (test_builtin_types_compatible_p): New test function.
+ * gcc.dg/pr70281.c: New test case.
+
+2016-03-18 Christophe Lyon <christophe.lyon@linaro.org>
+
+ PR target/70113
+ * gcc.target/aarch64/pr63304_1.c: Add -mno-fix-cortex-a53-843419.
+
+2016-03-18 Ilya Enkovich <enkovich.gnu@gmail.com>
+
+ PR tree-optimization/70252
+ * gcc.dg/pr70252.c: New test.
+
+2016-03-18 Tom de Vries <tom@codesourcery.com>
+
+ * gcc.dg/pr70161-2.c: New test.
+ * gcc.dg/pr70161.c: New test.
+
+2016-03-18 Tom de Vries <tom@codesourcery.com>
+
+ PR ipa/70269
+ * gcc.dg/pr70269.c: New test.
+
+2016-03-18 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/70267
+ * g++.dg/ext/java-3.C: New test.
+
+2016-03-18 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/70205
+ * g++.dg/lookup/pr70205.C: New test.
+
+2016-03-18 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/70218
+ * g++.dg/cpp0x/lambda/lambda-70218.C: New test.
+
+2016-03-17 Marek Polacek <polacek@redhat.com>
+
+ PR c/69407
+ * gcc.dg/atomic-op-6.c: New test.
+
+2016-03-17 David Malcolm <dmalcolm@redhat.com>
+
+ PR c/70264
+ * c-c++-common/pr70264.c: New test case.
+
+2016-03-17 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/70144
+ * c-c++-common/pr70144-1.c: New test.
+ * c-c++-common/pr70144-2.c: New test.
+
+ PR c++/70272
+ * g++.dg/opt/flifetime-dse5.C (main): Remove extra semicolon.
+ * g++.dg/opt/flifetime-dse6.C: New test.
+ * g++.dg/tree-ssa/ehcleanup-1.C: Adjust unreachable count.
+
+2016-03-17 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR driver/70192
+ * gcc.dg/pic-1.c: New test.
+ * gcc.dg/pic-2.c: Likewise.
+ * gcc.dg/pic-3.c: Likewise.
+ * gcc.dg/pic-4.c: Likewise.
+ * gcc.dg/pie-1.c: Likewise.
+ * gcc.dg/pie-2.c: Likewise.
+ * gcc.dg/pie-3.c: Likewise.
+ * gcc.dg/pie-4.c: Likewise.
+ * gcc.dg/pie-5.c: Likewise.
+ * gcc.dg/pie-6.c: Likewise.
+
+2016-03-17 Tom de Vries <tom@codesourcery.com>
+
+ * gfortran.dg/goacc/kernels-alias-3.f95: New test.
+ * gfortran.dg/goacc/kernels-alias-4.f95: New test.
+
+2016-03-17 Richard Biener <rguenther@suse.de>
+
+ PR debug/70271
+ * g++.dg/debug/pr70271.C: New testcase.
+
+2016-03-17 Ilya Enkovich <enkovich.gnu@gmail.com>
+
+ * gcc.target/i386/pr70251.c: New test.
+
+2016-03-17 Marek Polacek <polacek@redhat.com>
+
+ PR c++/70194
+ * g++.dg/warn/constexpr-70194.C: New test.
+
+2016-03-16 Richard Henderson <rth@redhat.com>
+
+ PR middle-end/70240
+ * gcc.c-torture/compile/pr70240.c: New.
+
+2016-03-16 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
+
+ * gcc.c-torture/compile/20151204.c: Skip for avr.
+
+2016-03-16 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/70245
+ * g++.dg/opt/pr70245.C: New test.
+ * g++.dg/opt/pr70245.h: New file.
+ * g++.dg/opt/pr70245-aux.cc: New file.
+
+2016-03-16 Martin Sebor <msebor@redhat.com>
+
+ * g++.dg/cpp1y/constexpr-instantiate.C: Correct DejaGnu directives.
+
+2016-03-16 Richard Henderson <rth@redhat.com>
+
+ PR middle-end/70199
+ * gcc.c-torture/compile/pr70199.c: New.
+
+2016-03-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gcc.dg/uninit-19.c: Run dos2unix.
+
+2016-03-16 Marek Polacek <polacek@redhat.com>
+
+ PR c/70093
+ * gcc.dg/nested-func-10.c: New test.
+ * gcc.dg/nested-func-9.c: New test.
+
+2016-03-16 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/68714
+ * gcc.dg/tree-ssa/pr68714.c: Add -w -Wno-psabi to dg-options.
+
+2016-03-16 Tom de Vries <tom@codesourcery.com>
+
+ PR tree-optimization/68715
+ * gcc.dg/graphite/pr68715-2.c: New test.
+ * gcc.dg/graphite/pr68715.c: New test.
+ * gfortran.dg/graphite/pr68715.f90: New test.
+
+2016-03-16 Tom de Vries <tom@codesourcery.com>
+
+ PR tree-optimization/68809
+ * gcc.dg/graphite/pr68809-2.c: New test.
+ * gcc.dg/graphite/pr68809.c: New test.
+
+2016-03-16 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/70147
+ * g++.dg/ubsan/pr70147-2.C (C::C): Initialize A base with invalid
+ method call to i () as argument. Adjust expected output.
+
+ PR c++/70147
+ * g++.dg/ubsan/pr70147-1.C: New test.
+ * g++.dg/ubsan/pr70147-2.C: New test.
+
+2016-03-15 Martin Sebor <msebor@redhat.com>
+
+ PR c++/58281
+ * g++.dg/cpp1y/constexpr-instantiate.C: Add new test.
+
+2016-03-15 John David Anglin <danglin@gcc.gnu.org>
+
+ * gcc.c-torture/execute/pr68532.c: Add -fno-common option on
+ hppa*-*-hpux*.
+
+ * gcc.dg/ifcvt-4.c: Add hppa*64*-*-* to skip list.
+
+ PR libfortran/69799
+ * gfortran.dg/coarray_allocate_5.f08: Add "-latomic" option if
+ libatomic_available.
+
+2016-03-15 Marek Polacek <polacek@redhat.com>
+
+ PR c++/70209
+ * g++.dg/ext/attribute-may-alias-4.C: New test.
+
+2016-03-15 Alexander Monakov <amonakov@ispras.ru>
+
+ * g++.dg/pr63384.C: Add -w to dg-options. Remove '-toggle' in
+ -fvar-tracking-assignments-toggle flag.
+
+2016-03-15 Pat Haugen <pthaugen@us.ibm.com>
+
+ * gcc.dg/ifcvt-4.c: Add -misel for powerpc*.
+
+2016-03-15 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/70222
+ * gcc.c-torture/execute/pr70222-1.c: New test.
+ * gcc.c-torture/execute/pr70222-2.c: New test.
+
+2016-03-15 Richard Henderson <rth@redhat.com>
+
+ * gcc.dg/tree-ssa/pr68714.c: Test during reassoc1 pass.
+
+2016-03-15 Andrey Belevantsev <abel@ispras.ru>
+
+ PR rtl-optimization/69032
+ * gcc.dg/pr69032.c: New test.
+
+2016-03-15 Andrey Belevantsev <abel@ispras.ru>
+
+ PR rtl-optimization/63384
+ * g++.dg/pr63384.C: New test.
+
+2016-03-15 Andrey Belevantsev <abel@ispras.ru>
+
+ PR target/64411
+ * gcc.target/i386/pr64411.C: New test.
+
+2016-03-15 Tom de Vries <tom@codesourcery.com>
+
+ * gfortran.dg/goacc/kernels-alias-2.f95: New test.
+ * gfortran.dg/goacc/kernels-alias.f95: New test.
+
+2016-03-14 Martin Sebor <msebor@redhat.com>
+
+ PR c++/53792
+ * g++.dg/cpp0x/constexpr-inline.C: New test.
+ * g++.dg/cpp0x/constexpr-inline-1.C: Same.
+
+2016-03-14 David Edelsohn <dje.gcc@gmail.com>
+
+ * gcc.dg/torture/pr70083.c: Prune non-standard ABI.
+
+2016-03-14 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/70219
+ * gcc.dg/pr70219.c: New test.
+
+2016-03-14 Bernd Schmidt <bschmidt@redhat.com>
+
+ PR target/70083
+ * gcc.dg/torture/pr70083.c: New test.
+ * gcc.target/i386/pr70083.c: New test.
+
+2016-03-14 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/56365
+ * gcc.dg/tree-ssa/phi-opt-14.c: New testcase.
+
+2016-03-14 Segher Boessenkool <segher@kernel.crashing.org>
+
+ PR target/70098
+ * lib/target-supports.exp (check_effective_target_powerpc64_no_dm):
+ New function.
+ * g++.dg/pr70098.C: New testcase.
+
+
+2016-03-14 Tom de Vries <tom@codesourcery.com>
+
+ PR tree-optimization/70045
+ * gcc.dg/graphite/pr70045.c: New test.
+
+2016-03-13 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR fortran/69043
+ * gfortran.dg/include_9.f90: New test.
+
+2016-03-13 Dominique d'Humieres <dominiq@lps.ens.fr>
+
+ PR fortran/45076
+ gfortran.dg/prof/prof.exp: New script.
+ gfortran.dg/prof/dynamic_dispatch_6.f03: New test.
+
+2016-03-12 Andrey Belevantsev <abel@ispras.ru>
+
+ PR rtl-optimization/69307
+ * gcc.dg/pr69307.c: New test.
+
+2016-03-12 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR target/69614
+ * gcc.target/arm/pr69614.c: New.
+
+2016-03-12 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/70031
+ * gfortran.dg/submodule_14.f08: New test
+
+ PR fortran/69524
+ * gfortran.dg/submodule_15.f08: New test
+
+2016-03-12 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/70106
+ * g++.dg/cpp1y/paren3.C: New test.
+
+2016-03-11 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/70131
+ * gcc.target/powerpc/ppc-round2.c: New test.
+
+2016-03-11 Bernd Schmidt <bschmidt@redhat.com>
+
+ PR target/70123
+ * gcc.dg/torture/pr70123.c: New test.
+
+2016-03-11 Jeff Law <law@redhat.com>
+
+ PR tree-optimization/70190
+ * gcc.c-torture/compile/pr70190.c: New test.
+
+2016-03-11 David Malcolm <dmalcolm@redhat.com>
+
+ PR c/68187
+ * c-c++-common/Wmisleading-indentation.c (test43_a): New test
+ case.
+ (test43_b): Likewise.
+ (test43_c): Likewise.
+ (test43_d): Likewise.
+ (test43_e): Likewise.
+ (test43_f): Likewise.
+ (test43_g): Likewise.
+ (test44_a): Likewise.
+ (test44_b): Likewise.
+ (test44_c): Likewise.
+ (test44_d): Likewise.
+ (test44_e): Likewise.
+
+2016-03-11 David Malcolm <dmalcolm@redhat.com>
+
+ PR c/70085
+ * c-c++-common/Wmisleading-indentation.c (pr70085): New test case.
+
+2016-03-11 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ * gcc.target/aarch64/vect-reduc-or_1.c: Add -fno-vect-cost-model to
+ dg-options.
+
+2016-03-11 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ PR target/70002
+ PR target/69245
+ * gcc.target/aarch64/pr69245_2.c: New test.
+
+2016-03-11 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/70177
+ * gcc.dg/pr70177.c: New test.
+
+2016-03-11 Alan Lawrence <alan.lawrence@arm.com>
+
+ * gfortran.dg/unconstrained_commons.f: Widen regexp to match j_<N>.
+
+2016-03-11 Alan Lawrence <alan.lawrence@arm.com>
+
+ * gcc.dg/tree-ssa/sra-20.c: New.
+
+2016-03-11 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/70174
+ * gcc.dg/pr70174.c: New test.
+
+ PR tree-optimization/70169
+ * gcc.dg/pr70169.c: New test.
+
+2016-03-11 Ilya Enkovich <enkovich.gnu@gmail.com>
+
+ PR target/70160
+ * gcc.target/i386/pr70160.c: New test.
+
+2016-03-11 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * gcc.target/s390/dfp-1.c: New test.
+
+2016-03-10 Nick Clifton <nickc@redhat.com>
+
+ PR target/70044
+ * gcc.target/aarch64/pr70044.c: New test.
+
+2016-03-10 Patrick Palka <ppalka@gcc.gnu.org>
+ Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/70001
+ * g++.dg/cpp0x/constexpr-70001-1.C: New test.
+ * g++.dg/cpp0x/constexpr-70001-2.C: New test.
+ * g++.dg/cpp0x/constexpr-70001-3.C: New test.
+
+2016-03-10 Jan Hubicka <hubicka@ucw.cz>
+
+ PR lto/69589
+ * g++.dg/lto/pr69589_0.C: New testcase
+ * g++.dg/lto/pr69589_1.C: New testcase
+
+2016-03-10 Marek Polacek <polacek@redhat.com>
+
+ PR c++/70153
+ * g++.dg/delayedfold/unary-plus1.C: New test.
+
+2016-03-10 Andre Vieira <andre.simoesdiasvieira@arm.com>
+
+ * gcc.target/arm/pr45701-1.c: Escape brackets.
+ * gcc.target/arm/pr45701-2.c: Likewise.
+
+2016-03-10 Alan Lawrence <alan.lawrence@arm.com>
+
+ * gfortran.dg/unconstrained_commons.f: New.
+
+2016-03-10 Alan Modra <amodra@gmail.com>
+
+ * gcc.dg/pr69195.c: New.
+ * gcc.dg/pr69238.c: New.
+
+2016-03-10 Tom de Vries <tom@codesourcery.com>
+
+ PR testsuite/68915
+ * gcc.dg/vect/pr46032.c: Xfail scan if alignment requirements not met.
+
+2016-03-10 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/70128
+ * gcc.dg/tree-ssa/alias-34.c: New testcase.
+ * gcc.dg/tree-ssa/alias-35.c: Likewise.
+
+2016-03-09 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/70152
+ * gcc.dg/pr70152.c: New test.
+
+ PR target/70086
+ * gcc.target/i386/pr70086-1.c: New test.
+ * gcc.target/i386/pr70086-2.c: New test.
+ * gcc.target/i386/pr70086-3.c: New test.
+
+ PR tree-optimization/70127
+ * gcc.c-torture/execute/pr70127.c: New test.
+
+2016-03-09 Cesar Philippidis <cesar@codesourcery.com>
+
+ * c-c++-common/goacc/combined-directives-2.c: New test.
+
+2016-03-09 David Malcolm <dmalcolm@redhat.com>
+
+ PR c/68473
+ PR c++/70105
+ * g++.dg/diagnostic/pr70105.C: New test.
+ * gcc.dg/plugin/diagnostic-test-expressions-1.c (foo): New decl.
+ (test_multiple_ordinary_maps): New test function.
+
+2016-03-09 David Malcolm <dmalcolm@redhat.com>
+
+ PR c/68473
+ PR c++/70105
+ * gcc.dg/plugin/diagnostic_plugin_show_trees.c (show_tree):
+ Drop range information from call to inform_at_rich_loc.
+ * gcc.dg/plugin/diagnostic_plugin_test_show_locus.c (add_range):
+ New.
+ (test_show_locus): Replace calls to rich_location::add_range with
+ calls to add_range. Rewrite the tests that used the now-defunct
+ rich_location ctor taking a source_range. Simplify other tests
+ by replacing calls to COMBINE_LOCATION_DATA with calls to
+ make_location.
+
+2016-03-09 Richard Biener <rguenther@suse.de>
+ Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/70138
+ * gcc.dg/vect/pr70138-1.c: New testcase.
+ * gcc.dg/vect/pr70138-2.c: Likewise.
+
+2016-03-09 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/70049
+ * gcc.target/i386/pr70049.c: New test.
+
+2016-03-09 Richard Biener <rguenther@suse.de>
+
+ PR c/70143
+ * gcc.dg/Wstrict-aliasing-bogus-upcast.c: New testcase.
+ * gcc.dg/Wstrict-aliasing-struct-with-char-member.c: Likewise.
+ * gcc.dg/Wstrict-aliasing-struct-member.c: Remove again.
+
+2016-03-09 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * gcc.dg/vect/bb-slp-34.c: Really don't xfail on aarch64-*-*,
+ arm-*-*.
+
+2016-03-09 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/67278
+ * gcc.dg/simd-7.c: Add -w -Wno-psabi to dg-options.
+
+ PR target/67278
+ * gcc.dg/simd-8.c: Add -w -Wno-psabi to dg-options.
+
+ PR middle-end/70050
+ * gcc.dg/pr70050.c: Add -w to dg-options. Fix up PR number
+ in testcase comment.
+
+2016-03-09 Tom de Vries <tom@codesourcery.com>
+
+ * gfortran.dg/goacc/kernels-loop-2.f95: New test.
+ * gfortran.dg/goacc/kernels-loop-data-2.f95: New test.
+ * gfortran.dg/goacc/kernels-loop-data-enter-exit-2.f95: New test.
+ * gfortran.dg/goacc/kernels-loop-data-enter-exit.f95: New test.
+ * gfortran.dg/goacc/kernels-loop-data-update.f95: New test.
+ * gfortran.dg/goacc/kernels-loop-data.f95: New test.
+ * gfortran.dg/goacc/kernels-loop-n.f95: New test.
+ * gfortran.dg/goacc/kernels-loop.f95: New test.
+
+2016-03-08 Martin Sebor <msebor@redhat.com>
+
+ PR c++/62096
+ * g++.dg/warn/overflow-warn-7.C: New test.
+
+2016-03-08 Jason Merrill <jason@redhat.com>
+
+ * lib/g++-dg.exp (g++-dg-runtest): Handle "concepts" in std list.
+ * lib/target-supports.exp (check_effective_target_concepts): New.
+
+2016-03-08 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/70135
+ * g++.dg/cpp1y/constexpr-loop4.C: New test.
+ * g++.dg/ubsan/pr70135.C: New test.
+
+ PR target/70110
+ * gcc.dg/pr70110.c: New test.
+
+2016-03-07 Martin Jambor <mjambor@suse.cz>
+
+ * c-c++-common/gomp/clauses-1.c: Remove dg-options.
+ * c-c++-common/gomp/if-1.c: Likewise.
+ * c-c++-common/gomp/pr61486-2.c: Likewise.
+ * c-c++-common/gomp/target-teams-1.c: Moved dg-options except -fopenmp
+ to dg-additional-options.
+ * g++.dg/gomp/gomp.exp: Pass -Wno-hsa to all tests.
+ * g++/gomp/target-teams-1.c: Likewise.
+ * gcc.dg/gomp/gomp.exp: Likewise.
+ * gcc.dg/gomp/pr68128-2.c: Moved dg-options except -fopenmp to
+ dg-additional-options.
+ * gfortran.dg/gomp/gomp.exp: Likewise.
+ * gfortran.dg/gomp/target1.f90: Remove dg-options.
+ * gfortran.dg/gomp/target2.f90: Moved dg-options except -fopenmp to
+ dg-additional-options.
+ * gfortran.dg/gomp/target3.f90: Remove dg-options.
+
+2016-03-07 Martin Jambor <mjambor@suse.cz>
+
+ * lib/target-supports.exp (check_effective_target_offload_hsa): New.
+ * c-c++-common/gomp/gridify-1.c: New test.
+ * gfortran.dg/gomp/gridify-1.f90: Likewise.
+
+2016-03-07 Andre Vieira <andre.simoesdiasvieira@arm.com>
+
+ * gcc.target/arm/pr45701-1.c: Change assembler scan to not
+ trigger for cortex-r8, when scanning for register r8.
+ * gcc.target/arm/pr45701-2.c: Likewise.
+
+2016-02-26 Richard Biener <rguenther@suse.de>
+ Jeff Law <law@redhat.com>
+
+ PR tree-optimization/69740
+ * gcc.c-torture/compile/pr69740-1.c: New test.
+ * gcc.c-torture/compile/pr69740-2.c: New test.
+
+2016-03-07 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * lib/target-supports.exp
+ (check_effective_target_whole_vector_shift): Enable for PPC64.
+
+2016-03-07 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/70115
+ * gcc.dg/torture/pr70115.c: New testcase.
+
+2016-03-07 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR middle-end/69916
+ * c-c-++-common/goacc/pr69916.c: New.
+
+2016-03-07 Richard Henderson <rth@redhat.com>
+
+ * gcc.c-torture/compile/pr70061.c: New test.
+
+2016-03-07 Richard Biener <rguenther@suse.de>
+
+ PR testsuite/70109
+ * gcc.dg/vect/O3-pr36098.c: New testcase.
+
+2016-03-07 Christophe Lyon <christophe.lyon@linaro.org>
+
+ * gcc.target/arm/pragma_cpp_fma.c: Reset default FPU.
+
+2016-03-07 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/renaming9.ad[sb]: New testcase.
+
+2016-03-05 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/70084
+ * g++.dg/expr/stdarg3.C: New test.
+
+2016-03-04 Jeff Law <law@redhat.com>
+
+ PR tree-optimization/69196
+ * gcc.dg/tree-ssa/pr69196-1.c: Limit this to sparc*-*-* and
+ x86_64-*-*.
+
+2016-03-04 Bernd Schmidt <bschmidt@redhat.com>
+
+ PR c/69973
+ * gcc.dg/pr69973.c: New test.
+
+ PR rtl-optimization/69941
+ * gcc.dg/torture/pr69941.c: New test.
+
+ PR c/69824
+ * gcc.dg/pr69824.c: New test.
+
+2016-03-05 Tom de Vries <tom@codesourcery.com>
+
+ * c-c++-common/goacc/nesting-fail-1.c (f_acc_routine): New function.
+ * c-c++-common/goacc-gomp/nesting-fail-1.c (f_acc_routine): New
+ function.
+
+2016-03-05 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/66786
+ * g++.dg/cpp1y/var-templ48.C: New test.
+ * g++.dg/cpp1y/var-templ49.C: New test.
+
+2016-03-04 Eric Botcazou <ebotcazou@adacore.com>
+
+ * g++.dg/Wno-frame-address.C: Skip on IA-64.
+
+2016-03-04 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/70035
+ * g++.dg/ubsan/pr70035.C: New test.
+
+ PR target/70062
+ * gcc.target/i386/pr70062.c: New test.
+
+2016-03-04 H.J. Lu <hongjiu.lu@intel.com>
+
+ * g++.dg/template/typename21.C: Remove c++98_only.
+
+2016-03-04 H.J. Lu <hongjiu.lu@intel.com>
+
+ * g++.dg/template/typename21.C: Replace c++98 with c++98_only.
+
+2016-03-04 David Malcolm <dmalcolm@redhat.com>
+
+ PR c/68187
+ * c-c++-common/Wmisleading-indentation.c (fn_42_a): New test
+ function.
+ (fn_42_b): Likewise.
+ (fn_42_c): Likewise.
+
+2016-03-04 David Malcolm <dmalcolm@redhat.com>
+
+ PR c/68187
+ * c-c++-common/Wmisleading-indentation.c (fn_40_a): New test
+ function.
+ (fn_40_b): Likewise.
+ (fn_41_a): Likewise.
+ (fn_41_b): Likewise.
+
+2016-03-04 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/70059
+ * gcc.target/i386/avx512f-pr70059.c: New test.
+ * gcc.target/i386/avx512dq-pr70059.c: New test.
+
+2016-03-04 Bernd Schmidt <bschmidt@redhat.com>
+
+ PR rtl-optimization/57676
+ * gcc.dg/torture/pr57676.c: New test.
+
+2016-03-04 Ilya Enkovich <enkovich.gnu@gmail.com>
+
+ * gcc.dg/pr70026.c: New test.
+
+2016-03-04 Marek Polacek <polacek@redhat.com>
+
+ PR c/69798
+ * gcc.dg/cilk-plus/pr69798-1.c: New test.
+ * gcc.dg/cilk-plus/pr69798-2.c: New test.
+
+2016-03-04 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ PR target/70004
+ * gcc.target/aarch64/scalar_shift_1.c: (test_corners_sisd_di):
+ Delete.
+ (test_corners_sisd_si): Likewise.
+ (main): Remove checks of the above.
+ * gcc.target/aarch64/shift_wide_invalid_1.c: New test.
+
+2016-03-04 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc.dg/Wno-frame-address.c: Skip on IA-64.
+
+2016-03-04 Christophe Lyon <christophe.lyon@linaro.org>
+
+ * gcc.dg/torture/pr69951.c: Accept argc==0.
+
+2016-03-04 Richard Biener <rguenther@suse.de>
+
+ PR c++/70054
+ * g++.dg/warn/Wstrict-aliasing-bogus-union-2.C: New testcase.
+ * gcc.dg/Wstrict-aliasing-struct-member.c: New testcase.
+
+2016-03-04 Dominik Vogt <vogt@linux.vnet.ibm.com>
+
+ PR testsuite/69766
+ * go.test/go-test.exp: S/390: Set GOARCH to the current target when
+ testing multiarch.
+
+2016-03-04 Jakub Jelinek <jakub@redhat.com>
+
+ PR debug/69947
+ * gcc.dg/guality/pr69947.c: New test.
+
+2016-03-03 Jakub Jelinek <jakub@redhat.com>
+
+ PR ada/70017
+ * gcc.dg/pr70017.c (foo): Store 0 to first element of each array.
+
+2016-03-03 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ PR rtl-optimization/69904
+ * gcc.target/arm/pr69904.c: New test.
+
+2016-03-03 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/70021
+ * gcc.dg/vect/pr70021.c: New test.
+ * gcc.target/i386/pr70021.c: New test.
+
+2016-03-03 Marek Polacek <polacek@redhat.com>
+
+ PR middle-end/70050
+ * gcc.dg/pr70050.c: New test.
+
+2016-03-03 James Greenhalgh <james.greenhalgh@arm.com>
+
+ * gcc.dg/vect/bb-slp-34.c: Don't XFAIL for ARM/AArch64.
+
+2016-03-03 Ilya Enkovich <enkovich.gnu@gmail.com>
+
+ PR tree-optimization/70043
+ * gfortran.dg/vect/pr70043.f90: New test.
+
+2016-03-03 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/specs/task1.ads: New test.
+
+2016-03-03 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * lib/gcc-gdb-test.exp (gdb-test): Make log message match command.
+ Invoke gdb with -batch.
+ * lib/gcc-simulate-thread.exp (simulate-thread): Likewise.
+
+2016-03-03 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/55936
+ * gcc.dg/tree-ssa/vrp06.c: Remove XFAIL.
+
+2016-03-02 Jeff Law <law@redhat.com>
+
+ PR rtl-optimization/69942
+ * gcc.dg/ifcvt-5.c: Use "word_mode" rather than "int" to limit the
+ effects of argument promotions.
+
+ PR tree-optimization/69987
+ * gfortran.dg/pr69987.f90: Use "-w" to avoid failures when the
+ target does not support -fprefetch-loop-arrays.
+
+2016-03-02 Uros Bizjak <ubizjak@gmail.com>
+
+ * gcc.target/i386/bmi2-bzhi-2.c: Change to runtime test.
+
+2016-03-02 Bin Cheng <bin.cheng@arm.com>
+
+ PR rtl-optimization/69052
+ * gcc.target/i386/pr69052.c: New test.
+
+2016-03-02 Alan Modra <amodra@gmail.com>
+
+ * gcc.dg/pr69990.c: New.
+
+2016-03-02 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/68062
+ * c-c++-common/vector-compare-4.c: Add -Wno-psabi to dg-options.
+
+ PR middle-end/70022
+ * gcc.dg/pr70022.c: Add -w -Wno-psabi to dg-options.
+
+ PR target/70028
+ * gcc.target/i386/pr70028.c: New test.
+
+2016-03-02 Maxim Kuvyrkov <maxim.kuvyrkov@linaro.org>
+
+ * c-c++-common/asan/swapcontext-test-1.c,
+ * c-c++-common/tsan/thread_leak.c,
+ * g++.dg/tsan/aligned_vs_unaligned_race.C,
+ * g++.dg/tsan/benign_race.C,
+ * g++.dg/tsan/fd_close_norace.C,
+ * g++.dg/tsan/fd_close_norace2.C: Print markers to stderr to avoid
+ races with sanitizer output
+
+2016-03-02 Richard Biener <rguenther@suse.de>
+ Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/67278
+ * gcc.dg/simd-8.c: New testcase.
+
+2016-03-02 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/67278
+ * gcc.dg/simd-7.c: New testcase.
+
+2016-03-02 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc.target/i386/pr70007.c: Tweak.
+
+2016-03-02 Dominik Vogt <vogt@linux.vnet.ibm.com>
+
+ * gfortran.dg/bessel_6.f90: Reduce accuracy for S/390.
+
+2016-03-02 Marek Polacek <polacek@redhat.com>
+
+ PR c/67854
+ * gcc.dg/pr67854.c: New test.
+
+2016-03-02 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/70025
+ * gcc.dg/torture/pr70025.c: New test.
+
+2016-03-02 Venkataramanan Kumar <venkataramanan.kumar@amd.com>
+
+ PR tree-optimization/68621
+ * gcc.dg/tree-ssa/ifc-8.c: Adjust test.
+
+2016-03-01 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc.target/i386/pr70007.c: New test.
+
+2016-03-01 Jeff Law <law@redhat.com>
+
+ PR tree-optimization/69196
+ * gcc.dg/tree-ssa/pr69196-1.c: New test.
+
+ PR tree-optimization/69196
+ * gcc.dg/tree-ssa/vrp46.c: Twiddle threading params to keep it from
+ duplicating code and spoiling the expected output.
+
+2016-03-01 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/70033
+ * gcc.target/powerpc/p9-lxvx-stxvx-1.c: Make sure compiler
+ supports power9 before doing tests.
+ * gcc.target/powerpc/p9-lxvx-stxvx-2.c: Likewise.
+ * gcc.target/powerpc/p9-lxvx-stxvx-3.c: Likewise.
+ * gcc.target/powerpc/p9-permute.c: Likewise.
+
+2016-03-01 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/70027
+ * gcc.target/i386/pr70027.c: New test.
+
+2016-03-01 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc.dg/pr70017.c: New test.
+
+2016-03-01 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/69796
+ PR c/69974
+ * gcc.dg/pr69796.c: New test.
+ * gcc.dg/pr69974.c: New test.
+
+2016-03-01 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/stack_usage3.adb: Robustify and enable for all targets.
+
+2016-02-29 Jeff Law <law@redhat.com>
+
+ PR tree-optimization/69987
+ * gfortran.dg/pr69987.f90: New test.
+
+ PR tree-optimization/69989
+ * gcc.c-torture/compile/pr69989-2.c: New test.
+
+2016-03-01 Marek Polacek <polacek@redhat.com>
+
+ PR c++/69795
+ * g++.dg/parse/invalid1.C: New test.
+
+2016-03-01 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/70022
+ * gcc.dg/pr70022.c: New testcase.
+
+2016-03-01 Ilya Enkovich <enkovich.gnu@gmail.com>
+
+ PR tree-optimization/69956
+ * gcc.dg/pr69956.c: New test.
+
+2016-02-29 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ PR target/70011
+ * gcc.dg/vect/costmodel/ppc/costmodel-fast-math-vect-pr299925.c:
+ XFAIL when hardware supports efficient unaligned storage access.
+
+2016-03-01 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/69961
+ * g++.dg/template/pr69961a.C: New test.
+ * g++.dg/template/pr69961b.C: New test.
+
+2016-02-29 David Malcolm <dmalcolm@redhat.com>
+
+ PR preprocessor/69985
+ * gcc.dg/cpp/pr69985.c: New test case.
+
+2016-02-29 Jeff Law <law@redhat.com>
+
+ PR tree-optimization/70005
+ * gcc.c-torture/execute/pr70005.c New test.
+
+ PR tree-optimization/69999
+ * gcc.c-torture/compile/pr69999.c: New test.
+
+2016-02-29 Yuri Rumyantsev <ysrumyan@gmail.com>
+
+ PR tree-optimization/69652
+ * gcc.dg/torture/pr69652.c: Delete test.
+ * gcc.dg/vect/pr69652.c: New test.
+
+2016-02-19 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/69980
+ * gfortran.dg/vect/pr69980.f90: New testcase.
+
+2016-02-29 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc.target/sparc/20160229-1.c: New test.
+
+2016-02-29 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/stack_usage3.adb: New test.
+ * gnat.dg/stack_usage3_pkg.ads: New helper.
+
+2016-02-29 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/renaming8.adb: New test.
+ * gnat.dg/renaming8_pkg1.ads: New helper.
+ * gnat.dg/renaming8_pkg2.ad[sb]: Likewise.
+ * gnat.dg/renaming8_pkg3.ad[sb]: Likewise.
+
+2016-02-29 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/69720
+ * gcc.dg/vect/vect-outer-pr69720.c: New testcase.
+
+2016-02-28 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/68147
+ PR fortran/47674
+ * gfortran.dg/realloc_on_assign_26.f90: New test case.
+
+2016-02-28 Harald Anlauf <anlauf@gmx.de>
+ Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR fortran/56007
+ * gfortran.dg/coarray_8.f90: Adjust error message.
+ * gfortran.dg/pr56007.f90: New test.
+ * gfortran.dg/pr56007.f: New test.
+
+2016-02-28 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR tree-optimization/69989
+ * gcc.dg/torture/pr69989.c: New test.
+
+2016-02-28 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc.target/i386/stack-realign-win.c: New test.
+
+2016-02-28 Harald Anlauf <anlauf@gmx.de>
+
+ PR fortran/60126
+ * gfortran.dg/pr60126.f90: New test.
+
+2016-02-27 Jeff Law <law@redhat.com>
+
+ Revert
+ 2016-02-26 Richard Biener <rguenther@suse.de>
+ Jeff Law <law@redhat.com>
+
+ PR tree-optimization/69740
+ * gcc.c-torture/compile/pr69740-1.c: New test.
+ * gcc.c-torture/compile/pr69740-2.c: New test.
+
+2016-02-27 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR fortran/69910
+ * gfortran.dg/newunit_4.f90: New test.
+
+2016-02-27 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/69613
+ PR rtl-optimization/69886
+ * gcc.dg/torture/pr69886.c: Add -w -Wno-psabi to dg-options.
+ * gcc.dg/torture/pr69613.c: Likewise. Guard -mavx with avx_runtime
+ target.
+
+2016-02-26 Martin Sebor <msebor@redhat.com>
+
+ PR tree-optimization/15826
+ * gcc.dg/tree-ssa/pr15826.c: New test.
+
+2016-02-26 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/69969
+ * gcc.target/powerpc/pr69969.c: New test.
+
+2016-02-26 Martin Sebor <msebor@redhat.com>
+
+ PR c++/15766
+ * g++.old-deja/g++.other/decl5.C: Add a test case.
+
+2016-02-26 Segher Boessenkool <segher@kernel.crashing.org>
+
+ PR target/69946
+ * gcc.target/powerpc/pr69946.c: New file.
+
+2016-02-26 Richard Biener <rguenther@suse.de>
+ Jeff Law <law@redhat.com>
+
+ PR tree-optimization/69740
+ * gcc.c-torture/compile/pr69740-1.c: New test.
+ * gcc.c-torture/compile/pr69740-2.c: New test.
+
+2016-02-26 Martin Jambor <mjambor@suse.cz>
+
+ PR middle-end/69920
+ * gcc.dg/torture/pr69932.c: New test.
+ * gcc.dg/torture/pr69936.c: Likewise.
+
+2016-02-26 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ PR target/69709
+ * gcc.target/s390/pr69709.c: New test.
+
+2016-02-26 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ PR target/69245
+ * gcc.target/aarch64/pr69245_1.c: New test.
+
+2016-02-26 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ PR target/69613
+ * gcc.dg/torture/pr69613.c: New test.
+
+2016-02-26 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/69891
+ * gcc.target/i386/pr69891.c: New test.
+
+2016-02-26 Michael Meissner <meissner@linux.vnet.ibm.com>
+ Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ PR target/61397
+ * gcc.target/powerpc/p8vector-ldst.c: Adjust to test desired
+ functionality for both 32-bit and 64-bit.
+
+2016-02-26 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/69551
+ * gcc.dg/torture/pr69951.c: New testcase.
+
+2016-02-25 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/48795
+ * gcc.dg/Warray-bounds-18.c: New testcase.
+
+2016-02-25 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * g++.dg/ext/attr-constructor1.C: Require init_priority support.
+
+2016-02-25 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/69896
+ * gcc.dg/pr69896.c: New test.
+
+2016-02-25 Patrick Palka <ppalka@gcc.gnu.org>
+
+ PR c++/69736
+ * g++.dg/cpp1y/paren2.C: New test.
+
+2016-02-24 Martin Sebor <msebor@redhat.com>
+
+ PR c/51147
+ * gcc.dg/enum-mode-2.c: New test.
+
+2016-02-24 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/69922
+ * g++.dg/warn/Wnonnull-compare-6.C: New test.
+ * g++.dg/warn/Wnonnull-compare-7.C: New test.
+ * g++.dg/ubsan/pr69922.C: New test.
+
+2016-02-24 Marek Polacek <polacek@redhat.com>
+
+ PR c/69819
+ * gcc.dg/pr69819.c: New test.
+
+2016-02-24 Martin Sebor <msebor@redhat.com>
+
+ PR c++/69912
+ * g++.dg/ext/flexary15.C: New test.
+
+2016-02-24 Martin Sebor <msebor@redhat.com>
+
+ * gcc.dg/builtins-68.c: Avoid making unportable
+ assumptions about the relationship between SIZE_MAX and UINT_MAX.
+ * g++.dg/ext/builtin_alloca.C: Same.
+
+2016-02-24 Maxim Kuvyrkov <maxim.kuvyrkov@linaro.org>
+ Charles Baylis <charles.baylis@linaro.org>
+
+ PR debug/61033
+ * g++.dg/pr61033.C: Add a regression testcase for PR debug/61033.
+
+2016-02-24 Richard Biener <rguenther@suse.de>
+ Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/69760
+ * gcc.dg/torture/pr69760.c: New testcase.
+
+2016-02-24 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * gcc.dg/debug/dwarf2/prod-options.c: Use different DW_AT_producer
+ pattern on Solaris with as.
+
+2016-02-24 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ * gcc.target/arm/cond_sub_restrict_it.c: New test.
+ * gcc.target/arm/condarith_restrict_it.c: Likewise.
+ * gcc.target/arm/movcond_restrict_it.c: Likewise.
+ * gcc.target/arm/negscc_restrict_it.c: Likewise.
+
+2016-02-24 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/69915
+ * gcc.dg/pr69915.c: New test.
+
+2016-02-24 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ PR rtl-optimization/69886
+ * gcc.dg/torture/pr69886.c: New test.
+
+2016-02-24 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/68963
+ * gcc.dg/torture/pr68963.c: New testcase.
+
+2016-02-24 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ PR target/69875
+ * gcc.target/arm/atomic_loaddi_acquire.x: New file.
+ * gcc.target/arm/atomic_loaddi_relaxed.x: Likewise.
+ * gcc.target/arm/atomic_loaddi_seq_cst.x: Likewise.
+ * gcc.target/arm/atomic_loaddi_1.c: New test.
+ * gcc.target/arm/atomic_loaddi_2.c: Likewise.
+ * gcc.target/arm/atomic_loaddi_3.c: Likewise.
+ * gcc.target/arm/atomic_loaddi_4.c: Likewise.
+ * gcc.target/arm/atomic_loaddi_5.c: Likewise.
+ * gcc.target/arm/atomic_loaddi_6.c: Likewise.
+ * gcc.target/arm/atomic_loaddi_7.c: Likewise.
+ * gcc.target/arm/atomic_loaddi_8.c: Likewise.
+ * gcc.target/arm/atomic_loaddi_9.c: Likewise.
+
+2016-02-24 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/69909
+ * gcc.dg/torture/pr69909.c: New test.
+
+2016-02-24 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/69907
+ * gcc.dg/vect/bb-slp-pr69907.c: New testcase.
+ * gcc.dg/vect/bb-slp-34.c: XFAIL.
+ * gcc.dg/vect/bb-slp-pr68892.c: Likewise.
+
+2016-02-24 Christian Bruel <christian.bruel@st.com>
+
+ * gcc.target/arm/pragma_cpp_fma.c: New test.
+
+2016-02-23 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR fortran/61156
+ * gfortran.dg/include_6.f90: Update test.
+
+2016-02-23 Jakub Jelinek <jakub@redhat.com>
+
+ PR objc/69844
+ * objc.dg/pr69844.m: New test.
+
+2016-02-23 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR libgfortran/69456
+ * gfortran.dg/namelist_89.f90: New test.
+ * gfortran.dg/pr59700.f90: Update test..
+
+2016-02-23 Martin Sebor <msebor@redhat.com>
+
+ PR middle-end/69780
+ * g++.dg/ext/builtin_alloca.C: New test.
+ * gcc.dg/builtins-68.c: New test.
+
+2016-02-23 Richard Henderson <rth@redhat.com>
+
+ * gcc.target/i386/addr-space-3.c: Remove test.
+
+2016-02-23 David Malcolm <dmalcolm@redhat.com>
+
+ PR preprocessor/69126
+ PR preprocessor/69543
+ * c-c++-common/pr69126-2-long.c: New test.
+ * c-c++-common/pr69126-2-short.c: New test.
+ * c-c++-common/pr69543-1.c: Remove xfail.
+
+2016-02-23 David Malcolm <dmalcolm@redhat.com>
+
+ PR preprocessor/69126
+ PR preprocessor/69543
+ PR preprocessor/69558
+ * c-c++-common/pr69126.c (MACRO_1, test_1): New.
+ (f): Rename to...
+ (test_2): ...this, and add leading comment.
+ (MACRO_3, test_3): New.
+ (MACRO_4A, MACRO_4B, test_4): New.
+ (MACRO): Rename to...
+ (MACRO_5): ...this.
+ (g): Rename to...
+ (test_5): ...this, updating for renaming of MACRO, and
+ add leading comment.
+ * c-c++-common/pr69543-1.c: New.
+ * c-c++-common/pr69543-2.c: New.
+ * c-c++-common/pr69543-3.c: New.
+ * c-c++-common/pr69543-4.c: New.
+ * c-c++-common/pr69558-1.c: New.
+ * c-c++-common/pr69558-2.c: New.
+ * c-c++-common/pr69558-3.c: New.
+ * c-c++-common/pr69558-4.c: New.
+ * gcc.dg/pr69558.c: Move to...
+ * c-c++-common/pr69558.c: ...here. Add dg-bogus directives, with
+ xfail for c++.
+
+2016-02-23 Thomas Schwinge <thomas@codesourcery.com>
+
+ * c-c++-common/goacc/kernels-counter-vars-function-scope.c: Adjust
+ to -ftree-parallelize-loops/-fopenacc changes.
+ * c-c++-common/goacc/kernels-double-reduction-n.c: Likewise.
+ * c-c++-common/goacc/kernels-double-reduction.c: Likewise.
+ * c-c++-common/goacc/kernels-loop-2.c: Likewise.
+ * c-c++-common/goacc/kernels-loop-3.c: Likewise.
+ * c-c++-common/goacc/kernels-loop-g.c: Likewise.
+ * c-c++-common/goacc/kernels-loop-mod-not-zero.c: Likewise.
+ * c-c++-common/goacc/kernels-loop-n.c: Likewise.
+ * c-c++-common/goacc/kernels-loop-nest.c: Likewise.
+ * c-c++-common/goacc/kernels-loop.c: Likewise.
+ * c-c++-common/goacc/kernels-one-counter-var.c: Likewise.
+ * c-c++-common/goacc/kernels-reduction.c: Likewise.
+ * gfortran.dg/goacc/kernels-loop-inner.f95: Likewise.
+ * gfortran.dg/goacc/kernels-loops-adjacent.f95: Likewise.
+
+2016-02-23 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * gcc.target/i386/chkp-hidden-def.c: Require alias support.
+
+2016-02-23 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/69902
+ * g++.dg/warn/Wnonnull-compare-5.C: New test.
+
+ PR c/69900
+ * gcc.dg/pr69900.c: New test.
+
+2016-02-23 Martin Jambor <mjambor@suse.cz>
+
+ PR tree-optimization/69666
+ * gcc.dg/tree-ssa/pr69666.c: New test.
+
+2016-02-23 Andre Vehreschild <vehre@gcc.gnu.org>
+
+ PR fortran/67451
+ * gfortran.dg/coarray_allocate_5.f08: New test.
+
+2016-02-23 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * gcc.target/s390/vcond-shift.c: Move to ...
+ * gcc.target/s390/vector/vcond-shift.c: ... here.
+
+2016-02-23 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * gcc.target/s390/md/movstr-2.c: Move and rename to ...
+ * gcc.target/s390/vector/stpcpy-1.c: ... this one.
+
+2016-02-23 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * gcc.target/s390/md/movstr-1.c: Turn into compile test.
+
+2016-02-20 Mark Wielaard <mjw@redhat.com>
+
+ PR c/28901
+ * gcc.dg/unused-variable-3.c: New test.
+
+2016-02-22 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/69888
+ * gcc.target/i386/pr69888.c: New test.
+
+2016-02-22 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/69882
+ * gfortran.dg/vect/pr69882.f90: New testcase.
+
+2016-02-22 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/69885
+ * gcc.dg/pr69885.c: New test.
+
+2016-02-22 Oleg Endo <olegendo@gcc.gnu.org>
+
+ PR target/69806
+ PR target/54089
+ * gcc.target/sh/pr54089-10.c: New.
+
+2016-02-20 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/69423
+ * gfortran.dg/deferred_character_15.f90 : New test.
+
+2016-02-20 Dominique d'Humieres <dominiq@lps.ens.fr>
+
+ PR fortran/57365
+ gfortran.dg/allocate_with_source_18.f03: New test.
+
+2016-02-20 Harald Anlauf <anlauf@gmx.de>
+
+ PR fortran/52531
+ gfortran.dg/gomp/pr52531.f90: New test.
+
+2016-02-19 Bernd Edlinger <bernd.edlinger@hotmail.de>
+
+ PR c++/69865
+ * c-c++-common/Wshift-negative-value-6.c: Add -std=c++11 before
+ -std=c++03.
+
+2016-02-19 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/69826
+ * c-c++-common/cilk-plus/CK/pr69826-1.c: New test.
+ * c-c++-common/cilk-plus/CK/pr69826-2.c: New test.
+
+ PR c++/69850
+ * g++.dg/warn/Wnonnull-compare-4.C: New test.
+
+ PR c++/69851
+ * g++.dg/torture/pr69851.C: New test.
+
+2016-02-19 Martin Sebor <msebor@redhat.com>
+
+ PR testsuite/69573
+ * gcc.dg/pr61053.c: Tweaked test to avoid bogus failures.
+
+2016-02-19 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/69850
+ * g++.dg/warn/Wnonnull-compare-2.C: New test.
+ * g++.dg/warn/Wnonnull-compare-3.C: New test.
+
+ PR c++/67767
+ * g++.dg/cpp0x/pr67767.C: New test.
+
+2016-02-19 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ * lib/target-supports.exp: Define aarch64_asm_FUNC_ok checks
+ for fp, simd, crypto, crc, lse.
+ * doc/sourcebuild.texi (AArch64-specific attributes): Document the
+ above.
+ * gcc.target/aarch64/assembler_arch_1.c: Add aarch64_asm_lse_ok
+ effective target check.
+
+2016-02-19 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/69820
+ * gcc.target/i386/pr69820.c: New test.
+
+2016-02-19 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * gcc.target/s390/vector/int128-1.c: New test.
+
+2016-02-19 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * gcc.target/s390/vector/vec-vcond-1.c: New test.
+
+2016-02-19 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * gcc.target/s390/md/movstr-1.c: Allow also the z13 strings
+ instruction pattern name to prevent the testcase from failing with
+ -march=z13.
+
+2016-02-19 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+
+ * gcc.target/s390/md/movstr-2.c: New test.
+
+2016-02-19 Marcin Kościelnicki <koriakin@0x04.net>
+
+ * gcc.target/s390/morestack.c: New test.
+
+2016-02-19 Dominik Vogt <vogt@linux.vnet.ibm.com>
+
+ PR target/69625
+ * gcc.target/s390/pr69625.c: Add test case.
+
+2016-02-18 Bernd Edlinger <bernd.edlinger@hotmail.de>
+
+ PR testsuite/68580
+ * c-c++-common/tsan/pr65400-1.c (v, q, o): Make 8-byte aligned.
+
+2016-02-18 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/68404
+ * gcc.target/powerpc/fusion.c: Revert the 2016-02-09 change.
+ * gcc.target/powerpc/fusion3.c: Likewise.
+
+2016-02-18 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/69553
+ * g++.dg/torture/pr69553.C: New testcase.
+
+2016-02-18 Nick Clifton <nickc@redhat.com>
+
+ PR target/62254
+ PR target/69610
+ * gcc.target/arm/pr62554.c: New test.
+ * gcc.target/arm/pr69610-1.c: New test.
+ * gcc.target/arm/pr69610-2.c: New test.
+
+2016-02-18 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/69854
+ * gcc.dg/torture/pr69854.c: New testcase.
+
2016-02-17 Jakub Jelinek <jakub@redhat.com>
PR c++/69850
@@ -478,7 +2800,7 @@
PR tree-optimization/68541
* gcc.dg/tree-ssa/split-path-2.c: Make char array explicitly signed.
- PR tree-optimization/65917
+ PR tree-optimization/65917
* gcc.dg/tree-ssa/20030922-2.c: No longer xfailed.
2016-02-07 Jerry DeLisle <jvdelisle@gcc.gnu.org>
@@ -488,7 +2810,7 @@
2016-02-05 Jeff Law <law@redhat.com>
- PR tree-optimization/68541
+ PR tree-optimization/68541
* gcc.dg/tree-ssa/split-path-2.c: New test.
* gcc.dg/tree-ssa/split-path-3.c: New test.
* gcc.dg/tree-ssa/split-path-4.c: New test.
@@ -1733,7 +4055,7 @@
PR tree-optimization/69170
* gcc.dg/torture/pr69170.c: New testcase.
-2016-01-17 John David Anglin <danglin@gcc.gnu.org>
+2016-01-17 John David Anglin <danglin@gcc.gnu.org>
* gcc.dg/torture/builtin-integral-1.c: Require c99_runtime.
@@ -1866,11 +4188,11 @@
* gcc.target/i386/pr65105-5.c: New test.
-2016-01-15 Jan Hubicka <hubicka@ucw.cz>
+2016-01-15 Jan Hubicka <hubicka@ucw.cz>
* gcc.c-torture/execute/alias-4.c: New testcase.
-2016-01-15 Jan Hubicka <hubicka@ucw.cz>
+2016-01-15 Jan Hubicka <hubicka@ucw.cz>
PR ipa/68148
* g++.dg/ipa/devirt-49.C: New testcase.
diff --git a/gcc/testsuite/ChangeLog-2015 b/gcc/testsuite/ChangeLog-2015
index f48907a..17609b9 100644
--- a/gcc/testsuite/ChangeLog-2015
+++ b/gcc/testsuite/ChangeLog-2015
@@ -514,7 +514,7 @@
* g++.dg/lookup/pr21802.C: New test.
* g++.dg/lookup/two-stage4.C: Remove XFAIL.
-2015-12-14 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+2015-12-14 Jerry DeLisle <jvdelisle@gcc.gnu.org>
* gfortran.dg/quad_2.f90: Update test.
@@ -785,7 +785,7 @@
* gcc.c-torture/execute/alias-2.c: New testcase.
2015-12-09 Tobias Burnus <burnus@net-b.de>
- Alessandro Fanfarillo <fanfarillo.gcc@gmail.com>
+ Alessandro Fanfarillo <fanfarillo.gcc@gmail.com>
* gfortran.dg/coarray_40.f90: New.
@@ -1347,7 +1347,7 @@
* lib/g++-dg.exp (g++-dg-runtest): Use it.
2015-12-02 Tobias Burnus <burnus@net-b.de>
- Alessandro Fanfarillo <fanfarillo.gcc@gmail.com>
+ Alessandro Fanfarillo <fanfarillo.gcc@gmail.com>
* gfortran.dg/coarray/event_1.f90: New.
* gfortran.dg/coarray/event_2.f90: New.
@@ -2083,7 +2083,7 @@
PR c++/68087
* g++.dg/cpp0x/constexpr-array13.C: New.
-2015-11-25 Ilmir Usmanov <me@ilmir.us>
+2015-11-25 Ilmir Usmanov <me@ilmir.us>
Cesar Philippidis <cesar@codesourcery.com>
PR fortran/63858
@@ -2596,7 +2596,7 @@
PR c++/68308
* g++.dg/init/new46.C: New test.
-2015-11-17 Dominique d'Humieres <dominiq@lps.ens.fr>
+2015-11-17 Dominique d'Humieres <dominiq@lps.ens.fr>
PR fortran/65751
* gfortran.dg/unlimited_polymorphic_2.f03: Update test.
@@ -2786,12 +2786,12 @@
* g++.dg/vect/simd-bool-comparison-1.cc: New test.
* g++.dg/vect/simd-bool-comparison-2.cc: New test.
-2015-11-13 Dominique d'Humieres <dominiq@lps.ens.fr>
+2015-11-13 Dominique d'Humieres <dominiq@lps.ens.fr>
PR fortran/47266
* gfortran.dg/module_private_2.f90: New test.
-2015-11-13 Dominique d'Humieres <dominiq@lps.ens.fr>
+2015-11-13 Dominique d'Humieres <dominiq@lps.ens.fr>
PR fortran/47266
* gfortran.dg/warn_unused_function_2.f90: New test.
@@ -7096,7 +7096,7 @@
* g++.dg/lto/pr68057_0.C: Fix testcase.
-2015-11-08 Joost VandeVondele <vondele@gcc.gnu.org>
+2015-11-08 Joost VandeVondele <vondele@gcc.gnu.org>
* gfortran.dg/PR67518.f90: move from here...
* gfortran.dg/graphite/PR67518.f90: to here.
@@ -7179,7 +7179,7 @@
* gcc.target/arm/mincmp.c: New test.
-2015-11-06 Dominique d'Humieres <dominiq@lps.ens.fr>
+2015-11-06 Dominique d'Humieres <dominiq@lps.ens.fr>
PR fortran/54224
* gfortran.dg/warn_unused_function_2.f90: Add two new
@@ -7440,7 +7440,7 @@
PR c++-common/67882
* c-c++-common/builtin-offsetof-2.c: New test.
-2015-11-03 Dominique d'Humieres <dominiq@lps.ens.fr>
+2015-11-03 Dominique d'Humieres <dominiq@lps.ens.fr>
PR fortran/67982
* gfortran.dg/warn_unused_function_3.f90: New test.
@@ -7495,7 +7495,7 @@
* g++.dg/ext/mvc1.C: Require ifunc.
-2015-11-02 Alexandre Oliva <aoliva@redhat.com>
+2015-11-02 Alexandre Oliva <aoliva@redhat.com>
PR tree-optimization/68083
* gcc.dg/torture/pr68083.c: New. From Zhendong Su.
@@ -7704,7 +7704,7 @@
* c-c++-common/goacc/loop-shape.c: New test.
-2015-10-27 Nathan Sidwell <nathan@codesourcery.com>
+2015-10-27 Nathan Sidwell <nathan@codesourcery.com>
Cesar Philippidis <cesar@codesourcery.com>
* g++.dg/gomp/pr33372-1.C: Adjust diagnostic.
@@ -7953,7 +7953,7 @@
* gcc.dg/torture/pr67736.c: New test.
* gcc.dg/combine-subregs.c: New test.
-2015-10-23 Alan Hayward <alan.hayward@arm.com>
+2015-10-23 Alan Hayward <alan.hayward@arm.com>
PR tree-optimization/65947
* lib/target-supports.exp
@@ -8306,7 +8306,7 @@
* g++.dg/cpp1z/fold-ice1.C: New.
2015-10-16 Michael Collison <michael.collison@linaro.org>
- Andrew Pinski <andrew.pinski@caviumnetworks.com>
+ Andrew Pinski <andrew.pinski@caviumnetworks.com>
* gcc.dg/tree-ssa/minmax-loopend.c: New test.
@@ -8521,7 +8521,7 @@
* gcc.dg/ipa/ipa-sra-10.c: New test.
* gcc.dg/torture/pr67794.c: Likewise.
-2015-10-09 Alexandre Oliva <aoliva@redhat.com>
+2015-10-09 Alexandre Oliva <aoliva@redhat.com>
PR rtl-optimization/67828
* gcc.dg/torture/pr67828.c: New.
@@ -8594,7 +8594,7 @@
* c-c++-common/Wtautological-compare-4.c: New test.
2015-10-05 Michael Meissner <meissner@linux.vnet.ibm.com>
- Peter Bergner <bergner@vnet.ibm.com>
+ Peter Bergner <bergner@vnet.ibm.com>
PR target/67808
* gcc.target/powerpc/pr67808.c: New test.
@@ -9032,7 +9032,7 @@
* g++.dg/debug/dwarf2/pr44641.C: Revert line number change. Remove
skip on AIX. XFAIL individual line tests.
-2015-09-27 Alexandre Oliva <aoliva@redhat.com>
+2015-09-27 Alexandre Oliva <aoliva@redhat.com>
PR rtl-optimization/64164
PR tree-optimization/67312
@@ -9146,7 +9146,7 @@
PR libgcc/67624
* gcc.target/arm/fp16-inf.c: New test.
-2015-09-24 Kirill Yukhin <kirill.yukhin@intel.com>
+2015-09-24 Kirill Yukhin <kirill.yukhin@intel.com>
* gcc.target/i386/avx512vbmi-check.h (main): Fix register
name while checking for AVX-512VBMI presence.
@@ -9206,12 +9206,12 @@
PR tree-optimization/67671
* g++.dg/pr67671.C: New test.
-2015-09-22 Alexander Fomin <alexander.fomin@intel.com>
+2015-09-22 Alexander Fomin <alexander.fomin@intel.com>
PR target/67480
* gcc.target/i386/pr67480.c: New test.
-2015-09-22 Kirill Yukhin <kirill.yukhin@intel.com>
+2015-09-22 Kirill Yukhin <kirill.yukhin@intel.com>
* gcc.target/i386/funcspec-5.c: Test avx512vl, avx512bw,
avx512dq, avx512cd, avx512er, avx512pf and skylake-avx512.
@@ -9903,7 +9903,7 @@
2015-09-04 Andrey Turetskiy <andrey.turetskiy@intel.com>
Petr Murzin <petr.murzin@intel.com>
- Kirill Yukhin <kirill.yukhin@intel.com>
+ Kirill Yukhin <kirill.yukhin@intel.com>
* gcc.target/i386/avx512f-scatter-1.c: New.
* gcc.target/i386/avx512f-scatter-2.c: Ditto.
@@ -9977,7 +9977,7 @@
* lib/tsan-dg.exp: Likewise.
* lib/ubsan-dg.exp: Likewise.
-2015-09-01 Kenneth Zadeck <zadeck@naturalbridge.com>
+2015-09-01 Kenneth Zadeck <zadeck@naturalbridge.com>
* gcc.c-torture/execute/ieee/20000320-1.c Fixed misplaced test case.
@@ -10034,7 +10034,7 @@
* gcc.dg/vect/no-scevccp-outer-11.c: Don't xfail scan-tree-dump-times.
-2015-09-01 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+2015-09-01 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* gcc.dg/ifcvt-1.c: New test.
* gcc.dg/ifcvt-2.c: Likewise.
@@ -10257,7 +10257,7 @@
PR target/67211
* g++.dg/pr67211.C: New test.
-2015-08-24 Louis Krupp <louis.krupp@zoho.com>
+2015-08-24 Louis Krupp <louis.krupp@zoho.com>
PR fortran/62536
PR fortran/66175
@@ -11069,7 +11069,7 @@
* jit.dg/test-error-gcc_jit_timer_pop-mismatch.c: New test case.
* jit.dg/test-error-gcc_jit_timer_pop-too-many.c: New test case.
-2015-08-03 Alexander Basov <coohpt@gmail.com>
+2015-08-03 Alexander Basov <coohpt@gmail.com>
PR middle-end/64744
PR middle-end/48470
@@ -12424,7 +12424,7 @@
* gcc.dg/vect/pr48052.c: Use dg-require-effective-target vect_int_mult.
2015-07-05 Chung-Lin Tang <cltang@codesourcery.com>
- Sandra Loosemore <sandra@codesourcery.com>
+ Sandra Loosemore <sandra@codesourcery.com>
* gcc.target/nios2/gprel-offset.c: New test.
@@ -14580,7 +14580,7 @@
* lib/target-supports.exp (check_effective_target_pie): Add *-*-freebsd*
to the family of pie capable targets.
-2015-05-18 Alex Velenko <Alex.Velenko@arm.com>
+2015-05-18 Alex Velenko <Alex.Velenko@arm.com>
* gcc.target/arm/bics_1.c : New testcase.
* gcc.target/arm/bics_2.c : New testcase.
@@ -14765,7 +14765,7 @@
* c-c++-common/Wmisleading-indentation-2.c: New testcase.
* c-c++-common/Wmisleading-indentation-2.md: New file.
-2015-05-12 Sandra Loosemore <sandra@codesourcery.com>
+2015-05-12 Sandra Loosemore <sandra@codesourcery.com>
* gcc.target/nios2/nios2-trap-insn.c: Expect "trap" instead of
"break".
@@ -15332,7 +15332,7 @@
PR tree-optimization/65851
* g++.dg/torture/pr65851.C: New testcase.
-2015-04-27 Jeff Law <law@redhat.com>
+2015-04-27 Jeff Law <law@redhat.com>
PR tree-optimization/65217
* gcc.target/i386/pr65217.c: Remove XFAIL.
@@ -15419,7 +15419,7 @@
* c-c++-common/pr61534-1.c: New test.
2015-04-24 Thomas Preud'homme <thomas.preudhomme@arm.com>
- Steven Bosscher <steven@gcc.gnu.org>
+ Steven Bosscher <steven@gcc.gnu.org>
PR rtl-optimization/34503
* gcc.target/arm/pr64616.c: New file.
@@ -15583,7 +15583,7 @@
PR rtl-optimization/64818
* gcc.target/arm/pr64818.c: New test.
-2015-04-21 Jan Hubicka <hubicka@ucw.cz>
+2015-04-21 Jan Hubicka <hubicka@ucw.cz>
PR ipa/65076
* g++.dg/tree-ssa/pr61034.C: Update template.
@@ -15591,7 +15591,7 @@
* gcc.dg/Warray-bounds-11.c: Likewise.
* gcc.dg/Warray-bounds.c: Likewise.
-2015-04-21 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+2015-04-21 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/65234
* gfortran.dg/fmt_unlimited.f90: New test.
@@ -15608,7 +15608,7 @@
* gcc.target/i386/avx512vbmi-vpermi2b-2.c: Likewise.
* gcc.target/i386/avx512vbmi-vpermt2b-2.c: Likewise.
-2015-04-21 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+2015-04-21 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/56743
* gfortran.dg/namelist_87.f90: New test.
@@ -16241,7 +16241,7 @@
PR libgfortran/65563
* gfortran.dg/open_errors_2.f90: New test.
-2015-03-28 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+2015-03-28 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/65596
* gfortran.dg/namelist_86.f90: New test.
@@ -16670,7 +16670,7 @@
PR c++/65340
* g++.dg/cpp1y/pr65340.C: New.
-2015-03-17 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+2015-03-17 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/64432
* gfortran.dg/system_clock_3.f08: Adjust test.
@@ -16681,7 +16681,7 @@
* gfortran.dg/proc_ptr_comp_44.f90: New test.
* gfortran.dg/proc_ptr_comp_45.f90: New test.
-2015-03-16 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+2015-03-16 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/64432
* gfortran.dg/system_clock_3.f08: New test.
@@ -17450,7 +17450,7 @@
PR ipa/65236
* g++.dg/ipa/ipa-icf-6.C: New testcase.
-2015-02-27 Pat Haugen <pthaugen@us.ibm.com>
+2015-02-27 Pat Haugen <pthaugen@us.ibm.com>
* gcc.dg/vect/pr59354.c: Move vector producing code to
separate function.
@@ -19523,7 +19523,7 @@
* gcc.dg/tree-ssa/pr61743-1.c: Add -fno-tree-vectorize.
* gcc.dg/tree-ssa/pr61743-2.c: Likewise.
-2015-01-16 Zhenqiang Chen <zhenqiang.chen@arm.com>
+2015-01-16 Zhenqiang Chen <zhenqiang.chen@arm.com>
* gcc.dg/pr64015.c: New test.
@@ -19761,7 +19761,7 @@
* gcc.dg/tree-ssa/pr61743-1.c: New testcase.
* gcc.dg/tree-ssa/pr61743-2.c: Likewise.
-2015-01-15 Renlin Li <renlin.li@arm.com>
+2015-01-15 Renlin Li <renlin.li@arm.com>
* gcc.target/aarch64/volatileloadpair-1.c: Correct dg-options.
* gcc.target/aarch64/volatileloadpair-2.c: Likewise.
@@ -19833,7 +19833,7 @@
PR middle-end/64365
* gcc.dg/torture/pr64365.c: New testcase.
-2015-01-14 Marcos Diaz <marcos.diaz@tallertechnologies.com>
+2015-01-14 Marcos Diaz <marcos.diaz@tallertechnologies.com>
* gcc.dg/stackprotectexplicit1.c: New test.
* g++.dg/stackprotectexplicit2.c: New test.
@@ -19942,7 +19942,7 @@
* gcc.dg/vect/pr64493.c: New testcase.
* gcc.dg/vect/pr64495.c: Likewise.
-2015-01-13 Martin Uecker <uecker@eecs.berkeley.edu>
+2015-01-13 Martin Uecker <uecker@eecs.berkeley.edu>
* gcc.dg/Warray-bounds-11.c: New test-case.
@@ -20417,7 +20417,7 @@
* gcc.dg/tree-ssa/loop-1.c: Likewise.
* gcc.dg/weak/typeof-2.c: Likewise.
-2015-01-05 Radovan Obradovic <radovan.obradovic@imgtec.com>
+2015-01-05 Radovan Obradovic <radovan.obradovic@imgtec.com>
PR rtl-optimization/64287
* gcc.dg/aru-2.c: New test.
diff --git a/gcc/testsuite/c-c++-common/Wmisleading-indentation-3.c b/gcc/testsuite/c-c++-common/Wmisleading-indentation-3.c
new file mode 100644
index 0000000..277a388
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/Wmisleading-indentation-3.c
@@ -0,0 +1,82 @@
+/* Verify -Wmisleading-indentation with source-printing.
+ This is a subset of Wmisleading-indentation.c. */
+
+/* { dg-options "-Wmisleading-indentation -fdiagnostics-show-caret" } */
+/* { dg-do compile } */
+
+extern int foo (int);
+extern int bar (int, int);
+extern int flagA;
+extern int flagB;
+extern int flagC;
+extern int flagD;
+
+void
+fn_5 (double *a, double *b, double *sum, double *prod)
+{
+ int i = 0;
+ for (i = 0; i < 10; i++) /* { dg-warning "3: this 'for' clause does not guard..." } */
+ sum[i] = a[i] * b[i];
+ prod[i] = a[i] * b[i]; /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'for'" } */
+/* { dg-begin-multiline-output "" }
+ for (i = 0; i < 10; i++)
+ ^~~
+ { dg-end-multiline-output "" } */
+/* { dg-begin-multiline-output "" }
+ prod[i] = a[i] * b[i];
+ ^~~~
+ { dg-end-multiline-output "" } */
+}
+
+/* Based on CVE-2014-1266 aka "goto fail" */
+int fn_6 (int a, int b, int c)
+{
+ int err;
+
+ /* ... */
+ if ((err = foo (a)) != 0)
+ goto fail;
+ if ((err = foo (b)) != 0) /* { dg-message "2: this 'if' clause does not guard..." } */
+ goto fail;
+ goto fail; /* { dg-message "3: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */
+ if ((err = foo (c)) != 0)
+ goto fail;
+ /* ... */
+
+/* { dg-begin-multiline-output "" }
+ if ((err = foo (b)) != 0)
+ ^~
+ { dg-end-multiline-output "" } */
+/* { dg-begin-multiline-output "" }
+ goto fail;
+ ^~~~
+ { dg-end-multiline-output "" } */
+
+fail:
+ return err;
+}
+
+#define FOR_EACH(VAR, START, STOP) \
+ for ((VAR) = (START); (VAR) < (STOP); (VAR++)) /* { dg-warning "3: this 'for' clause does not guard..." } */
+
+void fn_14 (void)
+{
+ int i;
+ FOR_EACH (i, 0, 10) /* { dg-message "in expansion of macro .FOR_EACH." } */
+ foo (i);
+ bar (i, i); /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'for'" } */
+
+/* { dg-begin-multiline-output "" }
+ for ((VAR) = (START); (VAR) < (STOP); (VAR++))
+ ^
+ { dg-end-multiline-output "" } */
+/* { dg-begin-multiline-output "" }
+ FOR_EACH (i, 0, 10)
+ ^~~~~~~~
+ { dg-end-multiline-output "" } */
+/* { dg-begin-multiline-output "" }
+ bar (i, i);
+ ^~~
+ { dg-end-multiline-output "" } */
+}
+#undef FOR_EACH
diff --git a/gcc/testsuite/c-c++-common/Wmisleading-indentation.c b/gcc/testsuite/c-c++-common/Wmisleading-indentation.c
index 25db8fe..dcc66e7 100644
--- a/gcc/testsuite/c-c++-common/Wmisleading-indentation.c
+++ b/gcc/testsuite/c-c++-common/Wmisleading-indentation.c
@@ -12,17 +12,17 @@ int
fn_1 (int flag)
{
int x = 4, y = 5;
- if (flag) /* { dg-message "3: ...this 'if' clause, but it is not" } */
+ if (flag) /* { dg-warning "3: this 'if' clause does not guard..." } */
x = 3;
- y = 2; /* { dg-warning "statement is indented as if it were guarded by..." } */
+ y = 2; /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */
return x * y;
}
int
fn_2 (int flag, int x, int y)
{
- if (flag) /* { dg-message "3: ...this 'if' clause, but it is not" } */
- x++; y++; /* { dg-warning "statement is indented as if it were guarded by..." } */
+ if (flag) /* { dg-warning "3: this 'if' clause does not guard..." } */
+ x++; y++; /* { dg-message "10: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */
return x * y;
}
@@ -33,9 +33,9 @@ fn_3 (int flag)
int x = 4, y = 5;
if (flag)
x = 3;
- else /* { dg-message "3: ...this 'else' clause, but it is not" } */
+ else /* { dg-warning "3: this 'else' clause does not guard..." } */
x = 2;
- y = 2; /* { dg-warning "statement is indented as if it were guarded by..." } */
+ y = 2; /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'else'" } */
return x * y;
}
@@ -43,18 +43,18 @@ void
fn_4 (double *a, double *b, double *c)
{
int i = 0;
- while (i < 10) /* { dg-message "3: ...this 'while' clause, but it is not" } */
+ while (i < 10) /* { dg-warning "3: this 'while' clause does not guard..." } */
a[i] = b[i] * c[i];
- i++; /* { dg-warning "statement is indented as if it were guarded by..." } */
+ i++; /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'while'" } */
}
void
fn_5 (double *a, double *b, double *sum, double *prod)
{
int i = 0;
- for (i = 0; i < 10; i++) /* { dg-output "3: ...this 'for' clause, but it is not" } */
+ for (i = 0; i < 10; i++) /* { dg-warning "3: this 'for' clause does not guard..." } */
sum[i] = a[i] * b[i];
- prod[i] = a[i] * b[i]; /* { dg-warning "statement is indented as if it were guarded by..." } */
+ prod[i] = a[i] * b[i]; /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'for'" } */
}
/* Based on CVE-2014-1266 aka "goto fail" */
@@ -65,9 +65,9 @@ int fn_6 (int a, int b, int c)
/* ... */
if ((err = foo (a)) != 0)
goto fail;
- if ((err = foo (b)) != 0) /* { dg-message "2: ...this 'if' clause, but it is not" } */
+ if ((err = foo (b)) != 0) /* { dg-message "2: this 'if' clause does not guard..." } */
goto fail;
- goto fail; /* { dg-warning "statement is indented as if it were guarded by..." } */
+ goto fail; /* { dg-message "3: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */
if ((err = foo (c)) != 0)
goto fail;
/* ... */
@@ -80,8 +80,8 @@ int fn_7 (int p, int q, int r, int s, int t)
{
if (bar (p, q))
{
- if (p) /* { dg-message "7: ...this 'if' clause, but it is not" } */
- q++; r++; /* { dg-warning "statement is indented as if it were guarded by..." } */
+ if (p) /* { dg-message "7: this 'if' clause does not guard..." } */
+ q++; r++; /* { dg-message "14: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */
t++;
}
return p + q + r + s + t;
@@ -95,20 +95,20 @@ int fn_8 (int a, int b, int c)
void fn_9 (int flag)
{
- if (flag) /* { dg-message "3: ...this 'if' clause, but it is not" } */
+ if (flag) /* { dg-warning "3: this 'if' clause does not guard..." } */
foo (0);
- foo (1); /* { dg-warning "statement is indented as if it were guarded by..." } */
+ foo (1); /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */
}
void fn_10 (int flag)
{
- if (flag) /* { dg-message "3: ...this 'if' clause, but it is not" } */
+ if (flag) /* { dg-warning "3: this 'if' clause does not guard..." } */
if (flag / 2)
{
foo (0);
foo (1);
}
- foo (2); /* { dg-warning "statement is indented as if it were guarded by..." } */
+ foo (2); /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */
foo (3);
}
@@ -116,48 +116,48 @@ void fn_11 (void)
{
if (flagA)
if (flagB)
- if (flagC) /* { dg-message "7: ...this 'if' clause, but it is not" } */
+ if (flagC) /* { dg-message "7: this 'if' clause does not guard..." } */
foo (0);
- bar (1, 2); /* { dg-warning "statement is indented as if it were guarded by..." } */
+ bar (1, 2); /* { dg-message "9: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */
}
void fn_12 (void)
{
if (flagA)
- if (flagB) /* { dg-message "5: ...this 'if' clause, but it is not" } */
+ if (flagB) /* { dg-message "5: this 'if' clause does not guard..." } */
if (flagC)
foo (0);
- bar (1, 2); /* { dg-warning "statement is indented as if it were guarded by..." } */
+ bar (1, 2); /* { dg-message "7: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */
}
void fn_13 (void)
{
- if (flagA) /* { dg-message "3: ...this 'if' clause, but it is not" } */
+ if (flagA) /* { dg-warning "3: this 'if' clause does not guard..." } */
if (flagB)
if (flagC)
foo (0);
- bar (1, 2); /* { dg-warning "statement is indented as if it were guarded by..." } */
+ bar (1, 2); /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */
}
#define FOR_EACH(VAR, START, STOP) \
- for ((VAR) = (START); (VAR) < (STOP); (VAR++)) /* { dg-message "3: ...this 'for' clause, but it is not" } */
+ for ((VAR) = (START); (VAR) < (STOP); (VAR++)) /* { dg-warning "3: this 'for' clause does not guard..." } */
void fn_14 (void)
{
int i;
- FOR_EACH (i, 0, 10) /* { dg-message "3: in expansion of macro" } */
+ FOR_EACH (i, 0, 10) /* { dg-message "in expansion of macro .FOR_EACH." } */
foo (i);
- bar (i, i); /* { dg-warning "statement is indented as if it were guarded by..." } */
+ bar (i, i); /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'for'" } */
}
#undef FOR_EACH
-#define FOR_EACH(VAR, START, STOP) for ((VAR) = (START); (VAR) < (STOP); (VAR++)) /* { dg-message "36: ...this 'for' clause, but it is not" } */
+#define FOR_EACH(VAR, START, STOP) for ((VAR) = (START); (VAR) < (STOP); (VAR++)) /* { dg-message "36: this 'for' clause does not guard..." } */
void fn_15 (void)
{
int i;
- FOR_EACH (i, 0, 10) /* { dg-message "3: in expansion of macro" } */
+ FOR_EACH (i, 0, 10) /* { dg-message "in expansion of macro .FOR_EACH." } */
foo (i);
- bar (i, i); /* { dg-warning "statement is indented as if it were guarded by..." } */
+ bar (i, i); /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'for'" } */
}
#undef FOR_EACH
@@ -166,9 +166,9 @@ void fn_16_spaces (void)
int i;
for (i = 0; i < 10; i++)
while (flagA)
- if (flagB) /* { dg-message "7: ...this 'if' clause, but it is not" } */
+ if (flagB) /* { dg-message "7: this 'if' clause does not guard..." } */
foo (0);
- foo (1); /* { dg-warning "statement is indented as if it were guarded by..." } */
+ foo (1); /* { dg-message "9: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */
}
void fn_16_tabs (void)
@@ -176,49 +176,49 @@ void fn_16_tabs (void)
int i;
for (i = 0; i < 10; i++)
while (flagA)
- if (flagB) /* { dg-message "7: ...this 'if' clause, but it is not" } */
+ if (flagB) /* { dg-message "7: this 'if' clause does not guard..." } */
foo (0);
- foo (1);/* { dg-warning "statement is indented as if it were guarded by..." } */
+ foo (1);/* { dg-message "2: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */
}
void fn_17_spaces (void)
{
int i;
- for (i = 0; i < 10; i++) /* { dg-message "3: ...this 'for' clause, but it is not" } */
+ for (i = 0; i < 10; i++) /* { dg-warning "3: this 'for' clause does not guard..." } */
while (flagA)
if (flagB)
foo (0);
- foo (1);/* { dg-warning "statement is indented as if it were guarded by..." } */
+ foo (1);/* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'for'" } */
}
void fn_17_tabs (void)
{
int i;
- for (i = 0; i < 10; i++) /* { dg-message "3: ...this 'for' clause, but it is not" } */
+ for (i = 0; i < 10; i++) /* { dg-warning "3: this 'for' clause does not guard..." } */
while (flagA)
if (flagB)
foo (0);
- foo (1);/* { dg-warning "statement is indented as if it were guarded by..." } */
+ foo (1);/* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'for'" } */
}
void fn_18_spaces (void)
{
int i;
for (i = 0; i < 10; i++)
- while (flagA) /* { dg-message "5: ...this 'while' clause, but it is not" } */
+ while (flagA) /* { dg-message "5: this 'while' clause does not guard..." } */
if (flagB)
foo (0);
- foo (1);/* { dg-warning "statement is indented as if it were guarded by..." } */
+ foo (1);/* { dg-message "7: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'while'" } */
}
void fn_18_tabs (void)
{
int i;
for (i = 0; i < 10; i++)
- while (flagA) /* { dg-message "5: ...this 'while' clause, but it is not" } */
+ while (flagA) /* { dg-message "5: this 'while' clause does not guard..." } */
if (flagB)
foo (0);
- foo (1);/* { dg-warning "statement is indented as if it were guarded by..." } */
+ foo (1);/* { dg-message "7: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'while'" } */
}
/* This shouldn't lead to a warning. */
@@ -701,108 +701,108 @@ fn_37 (void)
int i;
#define EMPTY
-#define FOR_EACH(VAR, START, STOP) for (VAR = START; VAR < STOP; VAR++)
+#define FOR_EACH(VAR, START, STOP) for (VAR = START; VAR < STOP; VAR++) /* { dg-warning "this 'for' clause" } */
- while (flagA); /* { dg-message "3: ...this 'while' clause" } */
- foo (0); /* { dg-warning "statement is indented as if" } */
+ while (flagA); /* { dg-warning "3: this 'while' clause" } */
+ foo (0); /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'while'" } */
if (flagA)
;
- else if (flagB); /* { dg-message "8: ...this 'if' clause" } */
- foo (0); /* { dg-warning "statement is indented as if" } */
- while (flagA) /* { dg-message "3: ...this 'while' clause" } */
+ else if (flagB); /* { dg-warning "8: this 'if' clause" } */
+ foo (0); /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */
+ while (flagA) /* { dg-warning "3: this 'while' clause" } */
/* blah */;
- foo (0); /* { dg-warning "statement is indented as if" } */
+ foo (0); /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'while'" } */
if (flagA)
;
- else if (flagB) /* { dg-message "8: ...this 'if' clause" } */
+ else if (flagB) /* { dg-warning "8: this 'if' clause" } */
foo (1);
- foo (2); /* { dg-warning "statement is indented as if" } */
+ foo (2); /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */
if (flagA)
foo (1);
- else if (flagB) /* { dg-message "8: ...this 'if' clause" } */
+ else if (flagB) /* { dg-warning "8: this 'if' clause" } */
foo (2);
- foo (3); /* { dg-warning "statement is indented as if" } */
+ foo (3); /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */
- if (flagB) /* { dg-message "3: ...this 'if' clause" } */
+ if (flagB) /* { dg-warning "3: this 'if' clause" } */
/* blah */;
- { /* { dg-warning "statement is indented as if" } */
+ { /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */
foo (0);
}
- if (flagB) /* { dg-message "3: ...this 'if' clause" } */
+ if (flagB) /* { dg-warning "3: this 'if' clause" } */
/* blah */;
- { /* { dg-warning "statement is indented as if" } */
+ { /* { dg-message "4: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'" } */
foo (0);
}
if (flagB)
;
- else; foo (0); /* { dg-warning "statement is indented as if" } */
+ else; foo (0); /* { dg-warning "3: this 'else' clause" } */
- if (flagC); foo (2); /* { dg-warning "statement is indented as if" } */
+ if (flagC); foo (2); /* { dg-warning "3: this 'if' clause" } */
- if (flagA)
- ; /* blah */ { /* { dg-warning "statement is indented as if" } */
+ if (flagA) /* { dg-warning "3: this 'if' clause" } */
+ ; /* blah */ { /* { dg-message "18: ...this statement" } */
foo (1);
}
- if (flagB) ; /* { dg-message "3: ...this 'if' clause" } */
- return; /* { dg-warning "statement is indented as if" } */
+ if (flagB) ; /* { dg-warning "3: this 'if' clause" } */
+ return; /* { dg-message "5: ...this statement" } */
- if (flagB) EMPTY; /* { dg-message "3: ...this 'if' clause" } */
- foo (1); /* { dg-warning "statement is indented as if" } */
+ if (flagB) EMPTY; /* { dg-warning "3: this 'if' clause" } */
+ foo (1); /* { dg-message "5: ...this statement" } */
- for (i = 0; i < 10; i++); /* { dg-message "3: ...this 'for' clause" } */
- foo (2); /* { dg-warning "statement is indented as if" } */
+ for (i = 0; i < 10; i++); /* { dg-warning "3: this 'for' clause" } */
+ foo (2); /* { dg-message "5: ...this statement" } */
- FOR_EACH (i, 0, 10);
- foo (2); /* { dg-warning "statement is indented as if" } */
+ FOR_EACH (i, 0, 10); /* { dg-message "3: in expansion of macro .FOR_EACH." } */
+ foo (2); /* { dg-message "5: ...this statement" } */
- FOR_EACH (i, 0, 10);
- { /* { dg-warning "statement is indented as if" } */
+ FOR_EACH (i, 0, 10); /* { dg-message "3: in expansion of macro .FOR_EACH." } */
+ { /* { dg-message "5: ...this statement" } */
foo (3);
}
- FOR_EACH (i, 0, 10);
- { /* { dg-warning "statement is indented as if" } */
+ FOR_EACH (i, 0, 10); /* { dg-message "3: in expansion of macro .FOR_EACH." } */
+ { /* { dg-message "3: ...this statement" } */
foo (3);
}
- while (i++); { /* { dg-warning "statement is indented as if" } */
+ while (i++); { /* { dg-warning "3: this 'while' clause" } */
foo (3);
}
- if (i++); { /* { dg-warning "statement is indented as if" } */
+ if (i++); { /* { dg-warning "3: this 'if' clause" } */
foo (3);
}
if (flagA) {
foo (1);
- } else /* { dg-message "5: ...this 'else' clause" } */
+ } else /* { dg-warning "5: this 'else' clause" } */
if (flagB)
foo (2);
- foo (3); /* { dg-warning "statement is indented as if" } */
+ foo (3); /* { dg-message "5: ...this statement" } */
if (flagA)
foo (1);
- else if (flagB); /* { dg-message "8: ...this 'if' clause" } */
- foo (2); /* { dg-warning "statement is indented as if" } */
+ else if (flagB); /* { dg-warning "8: this 'if' clause" } */
+ foo (2); /* { dg-message "5: ...this statement" } */
- for (i = 0; /* { dg-message "3: ...this 'for' clause" } */
+ for (i = 0; /* { dg-warning "3: this 'for' clause" } */
i < 10;
i++);
- foo (i); /* { dg-warning "statement is indented as if" } */
+ foo (i); /* { dg-message "5: ...this statement" } */
if (flagA)
{
foo (1);
}
- else if (flagB); /* { dg-message "8: ...this 'if' clause" } */
- { /* { dg-warning "statement is indented as if" } */
+ else if (flagB); /* { dg-warning "8: this 'if' clause" } */
+ { /* { dg-message "3: ...this statement" } */
foo (2);
}
@@ -903,3 +903,338 @@ void pr69122 (void)
emit foo (1);
}
#undef emit
+
+/* In the following, the 'if' within the 'for' statement is not indented,
+ but arguably should be.
+ The for loop:
+ "for (cnt = 0; cnt < thousands_len; ++cnt)"
+ does not guard this conditional:
+ "cnt < thousands_len;".
+ and the poor indentation is not misleading. Verify that we do
+ not erroneously emit a warning about this.
+ Based on an example seen in glibc (PR c/68187). */
+
+void
+fn_40_a (const char *end, const char *thousands, int thousands_len)
+{
+ int cnt;
+
+ while (flagA)
+ if (flagA
+ && ({ for (cnt = 0; cnt < thousands_len; ++cnt)
+ if (thousands[cnt] != end[cnt])
+ break;
+ cnt < thousands_len; })
+ && flagB)
+ break;
+}
+
+/* As above, but with the indentation within the "for" loop fixed.
+ We should not emit a warning for this, either. */
+
+void
+fn_40_b (const char *end, const char *thousands, int thousands_len)
+{
+ int cnt;
+
+ while (flagA)
+ if (flagA
+ && ({ for (cnt = 0; cnt < thousands_len; ++cnt)
+ if (thousands[cnt] != end[cnt])
+ break;
+ cnt < thousands_len; })
+ && flagB)
+ break;
+}
+
+/* We should not warn for the following
+ (based on libstdc++-v3/src/c++11/random.cc:random_device::_M_init). */
+
+void
+fn_41_a (void)
+{
+ if (flagA)
+ {
+ }
+ else if (flagB)
+ fail:
+ foo (0);
+
+ foo (1);
+ if (!flagC)
+ goto fail;
+}
+
+/* Tweaked version of the above (with the label indented), which we should
+ also not warn for. */
+
+void
+fn_41_b (void)
+{
+ if (flagA)
+ {
+ }
+ else if (flagB)
+ fail:
+ foo (0);
+
+ foo (1);
+ if (!flagC)
+ goto fail;
+}
+
+/* In the following, the
+ "if (i > 0)"
+ is poorly indented, and ought to be on the same column as
+ "engine_ref_debug(e, 0, -1)"
+ However, it is not misleadingly indented, due to the presence
+ of that macro. Verify that we do not emit a warning about it
+ not being guarded by the "else" clause above.
+
+ Based on an example seen in OpenSSL 1.0.1, which was filed as
+ PR c/68187 in comment #1, though it's arguably a separate bug to
+ the one in comment #0. */
+
+int
+fn_42_a (int locked)
+{
+#define engine_ref_debug(X, Y, Z)
+
+ int i;
+
+ if (locked)
+ i = foo (0);
+ else
+ i = foo (1);
+ engine_ref_debug(e, 0, -1)
+ if (i > 0)
+ return 1;
+ return 0;
+#undef engine_ref_debug
+}
+
+/* As above, but the empty macro is at the same indentation level.
+ This *is* misleading; verify that we do emit a warning about it. */
+
+int
+fn_42_b (int locked)
+{
+#define engine_ref_debug(X, Y, Z)
+
+ int i;
+
+ if (locked)
+ i = foo (0);
+ else /* { dg-warning "this .else. clause" } */
+ i = foo (1);
+ engine_ref_debug(e, 0, -1)
+ if (i > 0) /* { dg-message "...this statement" } */
+ return 1;
+ return 0;
+#undef engine_ref_debug
+}
+
+/* As above, but where the body is a semicolon "hidden" by a preceding
+ comment, where the semicolon is not in the same column as the successor
+ "if" statement, but the empty macro expansion is at the same indentation
+ level as the guard.
+ This is poor indentation, but not misleading; verify that we don't emit a
+ warning about it. */
+
+int
+fn_42_c (int locked, int i)
+{
+#define engine_ref_debug(X, Y, Z)
+
+ if (locked)
+ /* blah */;
+ engine_ref_debug(e, 0, -1)
+ if (i > 0)
+ return 1;
+ return 0;
+#undef engine_ref_debug
+}
+
+/* We shouldn't complain about the following function. */
+#define ENABLE_FEATURE
+int pr70085 (int x, int y)
+{
+ if (x > y)
+ return x - y;
+
+ #ifdef ENABLE_FEATURE
+ if (x == y)
+ return 0;
+ #endif
+
+ return -1;
+}
+#undef ENABLE_FEATURE
+
+/* Additional test coverage for PR c/68187, with various locations for a
+ pair of aligned statements ("foo (2);" and "foo (3);") that may or may
+ not be misleadingly indented. */
+
+/* Before the "}".
+
+ The two statements aren't visually "within" the above line, so we
+ shouldn't warn. */
+
+void
+test43_a (void)
+{
+ if (flagA) {
+ foo (1);
+ } else if (flagB)
+ foo (2);
+ foo (3);
+}
+
+/* Aligned with the "}".
+
+ Again, the two statements aren't visually "within" the above line, so we
+ shouldn't warn. */
+
+void
+test43_b (void)
+{
+ if (flagA) {
+ foo (1);
+ } else if (flagB)
+ foo (2);
+ foo (3);
+}
+
+/* Indented between the "}" and the "else".
+
+ The two statements are indented "within" the line above, so appear that
+ they would be guarded together. We should warn about this. */
+
+void
+test43_c (void)
+{
+ if (flagA) {
+ foo (1);
+ } else if (flagB) /* { dg-message "...this .if. clause" } */
+ foo (2);
+ foo (3); /* { dg-message "...this statement" } */
+}
+
+/* Aligned with the "else". Likewise, we should warn. */
+
+void
+test43_d (void)
+{
+ if (flagA) {
+ foo (1);
+ } else if (flagB) /* { dg-message "...this .if. clause" } */
+ foo (2);
+ foo (3); /* { dg-message "...this statement" } */
+}
+
+/* Indented between the "else" and the "if". Likewise, we should warn. */
+
+void
+test43_e (void)
+{
+ if (flagA) {
+ foo (1);
+ } else if (flagB) /* { dg-message "...this .if. clause" } */
+ foo (2);
+ foo (3); /* { dg-message "...this statement" } */
+}
+
+/* Aligned with the "if". Likewise, we should warn. */
+
+void
+test43_f (void)
+{
+ if (flagA) {
+ foo (1);
+ } else if (flagB) /* { dg-warning "this .else. clause" } */
+ foo (2);
+ foo (3); /* { dg-message "...this statement" } */
+}
+
+/* Indented more than the "if". Likewise, we should warn. */
+
+void
+test43_g (void)
+{
+ if (flagA) {
+ foo (1);
+ } else if (flagB) /* { dg-message "...this .if. clause" } */
+ foo (2);
+ foo (3); /* { dg-message "...this statement" } */
+}
+
+/* Again, but without the 2nd "if". */
+
+/* Before the "}".
+
+ As before, the two statements aren't visually "within" the above line,
+ so we shouldn't warn. */
+
+void
+test44_a (void)
+{
+ if (flagA) {
+ foo (1);
+ } else
+ foo (2);
+ foo (3);
+}
+
+/* Aligned with the "}".
+
+ As before, the two statements aren't visually "within" the above line,
+ so we shouldn't warn. */
+
+void
+test44_b (void)
+{
+ if (flagA) {
+ foo (1);
+ } else
+ foo (2);
+ foo (3);
+}
+
+/* Indented between the "}" and the "else".
+
+ The two statements are indented "within" the line above, so appear that
+ they would be guarded together. We should warn about this. */
+
+void
+test44_c (void)
+{
+ if (flagA) {
+ foo (1);
+ } else /* { dg-warning "this .else. clause" } */
+ foo (2);
+ foo (3); /* { dg-message "...this statement" } */
+}
+
+/* Aligned with the "else". Likewise, we should warn. */
+
+void
+test44_d (void)
+{
+ if (flagA) {
+ foo (1);
+ } else /* { dg-warning "this .else. clause" } */
+ foo (2);
+ foo (3); /* { dg-message "...this statement" } */
+}
+
+/* Indented more than the "else". Likewise, we should warn. */
+
+void
+test44_e (void)
+{
+ if (flagA) {
+ foo (1);
+ } else /* { dg-warning "this .else. clause" } */
+ foo (2);
+ foo (3); /* { dg-message "...this statement" } */
+}
diff --git a/gcc/testsuite/c-c++-common/Wshift-negative-value-6.c b/gcc/testsuite/c-c++-common/Wshift-negative-value-6.c
index de9db52..3603b9e 100644
--- a/gcc/testsuite/c-c++-common/Wshift-negative-value-6.c
+++ b/gcc/testsuite/c-c++-common/Wshift-negative-value-6.c
@@ -1,7 +1,7 @@
/* PR c/65179 */
/* { dg-do compile } */
/* { dg-options "-O -Wextra" } */
-/* { dg-additional-options "-std=c++03" { target c++ } } */
+/* { dg-additional-options "-std=c++11 -std=c++03" { target c++ } } */
/* { dg-additional-options "-std=c90" { target c } } */
enum E {
diff --git a/gcc/testsuite/c-c++-common/asan/halt_on_error-1.c b/gcc/testsuite/c-c++-common/asan/halt_on_error-1.c
index b015e96..52e705d 100644
--- a/gcc/testsuite/c-c++-common/asan/halt_on_error-1.c
+++ b/gcc/testsuite/c-c++-common/asan/halt_on_error-1.c
@@ -9,7 +9,7 @@ volatile int ten = 10;
int main() {
char x[10];
- memset(x, 0, ten + 1);
+ __builtin_memset(x, 0, ten + 1);
asm volatile ("" : : : "memory");
volatile int res = x[ten];
x[ten] = res + 3;
diff --git a/gcc/testsuite/c-c++-common/asan/halt_on_error-2.c b/gcc/testsuite/c-c++-common/asan/halt_on_error-2.c
index 4527889..35dc0fa 100644
--- a/gcc/testsuite/c-c++-common/asan/halt_on_error-2.c
+++ b/gcc/testsuite/c-c++-common/asan/halt_on_error-2.c
@@ -10,7 +10,7 @@ volatile int ten = 10;
int main() {
char x[10];
- memset(x, 0, ten + 1);
+ __builtin_memset(x, 0, ten + 1);
asm volatile ("" : : : "memory");
volatile int res = x[ten];
x[ten] = res + 3;
diff --git a/gcc/testsuite/c-c++-common/asan/pr70541.c b/gcc/testsuite/c-c++-common/asan/pr70541.c
new file mode 100644
index 0000000..b2a4bd5
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/asan/pr70541.c
@@ -0,0 +1,34 @@
+/* { dg-do run } */
+/* { dg-options "-fno-builtin-malloc -fno-builtin-free" } */
+/* { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } */
+/* { dg-shouldfail "asan" } */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+struct Simple {
+ int value;
+};
+
+int f(struct Simple simple) {
+ return simple.value;
+}
+
+int main() {
+ struct Simple *psimple = (struct Simple *) malloc(sizeof(struct Simple));
+ psimple->value = 42;
+ free(psimple);
+ printf("%d\n", f(*psimple));
+ return 0;
+}
+
+/* { dg-output "ERROR: AddressSanitizer:? heap-use-after-free on address\[^\n\r]*" } */
+/* { dg-output "0x\[0-9a-f\]+ at pc 0x\[0-9a-f\]+ bp 0x\[0-9a-f\]+ sp 0x\[0-9a-f\]+\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*READ of size 4 at 0x\[0-9a-f\]+ thread T0\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output " #0 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*pr70541.c:21|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*freed by thread T0 here:\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output " #0 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)free|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output " #1 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*pr70541.c:20|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*previously allocated by thread T0 here:\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output " #0 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output " #1 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*pr70541.c:18|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
diff --git a/gcc/testsuite/c-c++-common/asan/swapcontext-test-1.c b/gcc/testsuite/c-c++-common/asan/swapcontext-test-1.c
index 23d3db0..555f2d9 100644
--- a/gcc/testsuite/c-c++-common/asan/swapcontext-test-1.c
+++ b/gcc/testsuite/c-c++-common/asan/swapcontext-test-1.c
@@ -52,9 +52,9 @@ volatile int zero = 0;
int main(int argc, char **argv) {
int ret = 0;
ret += Run(zero, 0);
- printf("Test1 passed\n");
+ fprintf(stderr, "Test1 passed\n");
ret += Run(zero, 1);
- printf("Test2 passed\n");
+ fprintf(stderr, "Test2 passed\n");
return ret;
}
diff --git a/gcc/testsuite/c-c++-common/attr-simd-2.c b/gcc/testsuite/c-c++-common/attr-simd-2.c
index dd08d18..d76eba6 100644
--- a/gcc/testsuite/c-c++-common/attr-simd-2.c
+++ b/gcc/testsuite/c-c++-common/attr-simd-2.c
@@ -19,3 +19,5 @@ int simd_attr (void)
/* { dg-final { scan-assembler-times "_ZGVcM4_simd_attr:" 1 { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-times "_ZGVdN8_simd_attr:" 1 { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-times "_ZGVdM8_simd_attr:" 1 { target { i?86-*-* x86_64-*-* } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeN16_simd_attr:" 1 { target { i?86-*-* x86_64-*-* } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeM16_simd_attr:" 1 { target { i?86-*-* x86_64-*-* } } } } */
diff --git a/gcc/testsuite/c-c++-common/attr-simd-4.c b/gcc/testsuite/c-c++-common/attr-simd-4.c
index 66cd8f1..2a58587 100644
--- a/gcc/testsuite/c-c++-common/attr-simd-4.c
+++ b/gcc/testsuite/c-c++-common/attr-simd-4.c
@@ -15,9 +15,11 @@ int simd_attr (void)
/* { dg-final { scan-assembler-times "_ZGVbN4_simd_attr:" 1 { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-times "_ZGVcN4_simd_attr:" 1 { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-times "_ZGVdN8_simd_attr:" 1 { target { i?86-*-* x86_64-*-* } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeN16_simd_attr:" 1 { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-not "_ZGVbM4_simd_attr:" { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-not "_ZGVcM4_simd_attr:" { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-not "_ZGVdM8_simd_attr:" { target { i?86-*-* x86_64-*-* } } } } */
+/* { dg-final { scan-assembler-not "_ZGVeM16_simd_attr:" { target { i?86-*-* x86_64-*-* } } } } */
extern
#ifdef __cplusplus
@@ -33,6 +35,8 @@ int simd_attr2 (void)
/* { dg-final { scan-assembler-not "_ZGVbN4_simd_attr2:" { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-not "_ZGVcN4_simd_attr2:" { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-not "_ZGVdN8_simd_attr2:" { target { i?86-*-* x86_64-*-* } } } } */
+/* { dg-final { scan-assembler-not "_ZGVeN16_simd_attr2:" { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-times "_ZGVbM4_simd_attr2:" 1 { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-times "_ZGVcM4_simd_attr2:" 1 { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-times "_ZGVdM8_simd_attr2:" 1 { target { i?86-*-* x86_64-*-* } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeM16_simd_attr2:" 1 { target { i?86-*-* x86_64-*-* } } } } */
diff --git a/gcc/testsuite/c-c++-common/attr-simd.c b/gcc/testsuite/c-c++-common/attr-simd.c
index 7674588..dde2475 100644
--- a/gcc/testsuite/c-c++-common/attr-simd.c
+++ b/gcc/testsuite/c-c++-common/attr-simd.c
@@ -18,6 +18,8 @@ int simd_attr (void)
/* { dg-final { scan-assembler-times "_ZGVcM4_simd_attr:" 1 { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-times "_ZGVdN8_simd_attr:" 1 { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-times "_ZGVdM8_simd_attr:" 1 { target { i?86-*-* x86_64-*-* } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeN16_simd_attr:" 1 { target { i?86-*-* x86_64-*-* } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeM16_simd_attr:" 1 { target { i?86-*-* x86_64-*-* } } } } */
extern
#ifdef __cplusplus
@@ -36,3 +38,5 @@ int simd_attr2 (void)
/* { dg-final { scan-assembler-times "_ZGVcM4_simd_attr2:" 1 { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-times "_ZGVdN8_simd_attr2:" 1 { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-times "_ZGVdM8_simd_attr2:" 1 { target { i?86-*-* x86_64-*-* } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeN16_simd_attr2:" 1 { target { i?86-*-* x86_64-*-* } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeM16_simd_attr2:" 1 { target { i?86-*-* x86_64-*-* } } } } */
diff --git a/gcc/testsuite/c-c++-common/cilk-plus/CK/pr69826-1.c b/gcc/testsuite/c-c++-common/cilk-plus/CK/pr69826-1.c
new file mode 100644
index 0000000..bcf7727
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/cilk-plus/CK/pr69826-1.c
@@ -0,0 +1,25 @@
+/* { dg-do run { target { i?86-*-* x86_64-*-* } } } */
+/* { dg-options "-fcilkplus" } */
+/* { dg-additional-options "-std=gnu99" { target c } } */
+/* { dg-additional-options "-lcilkrts" { target { i?86-*-* x86_64-*-* } } } */
+
+#define GRAINSIZE 2
+
+int
+main ()
+{
+ int a[64];
+ #pragma cilk grainsize=GRAINSIZE
+ _Cilk_for (int i = 0; i < 64; i++)
+ a[i] = 0;
+ #pragma cilk grainsize =GRAINSIZE
+ _Cilk_for (int i = 0; i < 64; i++)
+ a[i]++;
+ #pragma cilk grainsize = GRAINSIZE
+ _Cilk_for (int i = 0; i < 64; i++)
+ a[i]++;
+ for (int i = 0; i < 64; i++)
+ if (a[i] != 2)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/c-c++-common/cilk-plus/CK/pr69826-2.c b/gcc/testsuite/c-c++-common/cilk-plus/CK/pr69826-2.c
new file mode 100644
index 0000000..f4056c6
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/cilk-plus/CK/pr69826-2.c
@@ -0,0 +1,6 @@
+/* { dg-do run { target { i?86-*-* x86_64-*-* } } } */
+/* { dg-options "-fcilkplus -save-temps" } */
+/* { dg-additional-options "-std=gnu99" { target c } } */
+/* { dg-additional-options "-lcilkrts" { target { i?86-*-* x86_64-*-* } } } */
+
+#include "pr69826-1.c"
diff --git a/gcc/testsuite/c-c++-common/cilk-plus/CK/spawning_arg.c b/gcc/testsuite/c-c++-common/cilk-plus/CK/spawning_arg.c
index 95e6cab..138b82c 100644
--- a/gcc/testsuite/c-c++-common/cilk-plus/CK/spawning_arg.c
+++ b/gcc/testsuite/c-c++-common/cilk-plus/CK/spawning_arg.c
@@ -2,6 +2,17 @@
/* { dg-options "-fcilkplus" } */
/* { dg-additional-options "-lcilkrts" { target { i?86-*-* x86_64-*-* } } } */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int __cilkrts_set_param (const char *, const char *);
+
+#ifdef __cplusplus
+}
+#endif
+
+
void f0(volatile int *steal_flag)
{
int i = 0;
@@ -32,6 +43,10 @@ void f3()
int main()
{
+ /* Ensure more than one worker. */
+ if (__cilkrts_set_param("nworkers", "2") != 0)
+ __builtin_abort();
+
f3();
return 0;
}
diff --git a/gcc/testsuite/c-c++-common/cilk-plus/CK/steal_check.c b/gcc/testsuite/c-c++-common/cilk-plus/CK/steal_check.c
index 6e28765..6b41c7f 100644
--- a/gcc/testsuite/c-c++-common/cilk-plus/CK/steal_check.c
+++ b/gcc/testsuite/c-c++-common/cilk-plus/CK/steal_check.c
@@ -2,8 +2,16 @@
/* { dg-options "-fcilkplus" } */
/* { dg-additional-options "-lcilkrts" { target { i?86-*-* x86_64-*-* } } } */
-// #include <cilk/cilk_api.h>
-extern void __cilkrts_set_param (char *, char *);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int __cilkrts_set_param (const char *, const char *);
+
+#ifdef __cplusplus
+}
+#endif
+
void foo(volatile int *);
@@ -11,7 +19,10 @@ void main2(void);
int main(void)
{
- // __cilkrts_set_param ((char *)"nworkers", (char *)"2");
+ /* Ensure more than one worker. */
+ if (__cilkrts_set_param("nworkers", "2") != 0)
+ __builtin_abort();
+
main2();
return 0;
}
diff --git a/gcc/testsuite/c-c++-common/cilk-plus/SE/ef_error2.c b/gcc/testsuite/c-c++-common/cilk-plus/SE/ef_error2.c
index 518d640..89e0c39 100644
--- a/gcc/testsuite/c-c++-common/cilk-plus/SE/ef_error2.c
+++ b/gcc/testsuite/c-c++-common/cilk-plus/SE/ef_error2.c
@@ -1,8 +1,8 @@
/* { dg-do compile { target { i?86-*-* x86_64-*-* } } } */
/* { dg-options "-fcilkplus -Wall" } */
-__attribute__((vector (vectorlength(32))))
-//#pragma omp simd simdlen (32)
+__attribute__((vector (vectorlength(128))))
+//#pragma omp simd simdlen (128)
int func2 (int x, int y) /* { dg-warning "unsupported simdlen" } */
{
return (x+y);
diff --git a/gcc/testsuite/c-c++-common/goacc-gomp/nesting-1.c b/gcc/testsuite/c-c++-common/goacc-gomp/nesting-1.c
index dabba8c..aaf0e7a 100644
--- a/gcc/testsuite/c-c++-common/goacc-gomp/nesting-1.c
+++ b/gcc/testsuite/c-c++-common/goacc-gomp/nesting-1.c
@@ -20,12 +20,12 @@ f_acc_kernels (void)
}
}
+#pragma acc routine vector
void
f_acc_loop (void)
{
int i;
-#pragma acc parallel
#pragma acc loop
for (i = 0; i < 2; ++i)
{
diff --git a/gcc/testsuite/c-c++-common/goacc-gomp/nesting-fail-1.c b/gcc/testsuite/c-c++-common/goacc-gomp/nesting-fail-1.c
index 1a44721..1a33242 100644
--- a/gcc/testsuite/c-c++-common/goacc-gomp/nesting-fail-1.c
+++ b/gcc/testsuite/c-c++-common/goacc-gomp/nesting-fail-1.c
@@ -1,4 +1,5 @@
extern int i;
+#pragma acc declare create(i)
void
f_omp (void)
@@ -14,6 +15,9 @@ f_omp (void)
#pragma acc update host(i) /* { dg-error "OpenACC construct inside of non-OpenACC region" } */
#pragma acc enter data copyin(i) /* { dg-error "OpenACC construct inside of non-OpenACC region" } */
#pragma acc exit data delete(i) /* { dg-error "OpenACC construct inside of non-OpenACC region" } */
+#pragma acc loop /* { dg-error "loop directive must be associated with an OpenACC compute region" } */
+ for (i = 0; i < 2; ++i)
+ ;
}
#pragma omp for
@@ -358,84 +362,84 @@ f_acc_data (void)
}
}
+#pragma acc routine
void
f_acc_loop (void)
{
-#pragma acc parallel
#pragma acc loop
for (i = 0; i < 2; ++i)
{
-#pragma omp parallel /* { dg-error "non-OpenACC construct inside of OpenACC region" } */
+#pragma omp parallel /* { dg-error "non-OpenACC construct inside of OpenACC routine" } */
;
}
-#pragma acc parallel
#pragma acc loop
for (i = 0; i < 2; ++i)
{
-#pragma omp for /* { dg-error "non-OpenACC construct inside of OpenACC region" } */
+#pragma omp for /* { dg-error "non-OpenACC construct inside of OpenACC routine" } */
for (i = 0; i < 3; i++)
;
}
-#pragma acc parallel
#pragma acc loop
for (i = 0; i < 2; ++i)
{
-#pragma omp sections /* { dg-error "non-OpenACC construct inside of OpenACC region" } */
+#pragma omp sections /* { dg-error "non-OpenACC construct inside of OpenACC routine" } */
{
;
}
}
-#pragma acc parallel
#pragma acc loop
for (i = 0; i < 2; ++i)
{
-#pragma omp single /* { dg-error "non-OpenACC construct inside of OpenACC region" } */
+#pragma omp single /* { dg-error "non-OpenACC construct inside of OpenACC routine" } */
;
}
-#pragma acc parallel
#pragma acc loop
for (i = 0; i < 2; ++i)
{
-#pragma omp task /* { dg-error "non-OpenACC construct inside of OpenACC region" } */
+#pragma omp task /* { dg-error "non-OpenACC construct inside of OpenACC routine" } */
;
}
-#pragma acc parallel
#pragma acc loop
for (i = 0; i < 2; ++i)
{
-#pragma omp master /* { dg-error "non-OpenACC construct inside of OpenACC region" } */
+#pragma omp master /* { dg-error "non-OpenACC construct inside of OpenACC routine" } */
;
}
-#pragma acc parallel
#pragma acc loop
for (i = 0; i < 2; ++i)
{
-#pragma omp critical /* { dg-error "non-OpenACC construct inside of OpenACC region" } */
+#pragma omp critical /* { dg-error "non-OpenACC construct inside of OpenACC routine" } */
;
}
-#pragma acc parallel
#pragma acc loop
for (i = 0; i < 2; ++i)
{
-#pragma omp ordered /* { dg-error "non-OpenACC construct inside of OpenACC region" } */
+#pragma omp ordered /* { dg-error "non-OpenACC construct inside of OpenACC routine" } */
;
}
-#pragma acc parallel
#pragma acc loop
for (i = 0; i < 2; ++i)
{
-#pragma omp target /* { dg-error "non-OpenACC construct inside of OpenACC region" } */
+#pragma omp target /* { dg-error "non-OpenACC construct inside of OpenACC routine" } */
;
-#pragma omp target data map(i) /* { dg-error "non-OpenACC construct inside of OpenACC region" } */
+#pragma omp target data map(i) /* { dg-error "non-OpenACC construct inside of OpenACC routine" } */
;
-#pragma omp target update to(i) /* { dg-error "non-OpenACC construct inside of OpenACC region" } */
+#pragma omp target update to(i) /* { dg-error "non-OpenACC construct inside of OpenACC routine" } */
}
}
+
+#pragma acc routine
+void
+f_acc_routine (void)
+{
+#pragma omp target /* { dg-error "non-OpenACC construct inside of OpenACC routine" } */
+ ;
+}
diff --git a/gcc/testsuite/c-c++-common/goacc/clauses-fail.c b/gcc/testsuite/c-c++-common/goacc/clauses-fail.c
index 661d364..853d010 100644
--- a/gcc/testsuite/c-c++-common/goacc/clauses-fail.c
+++ b/gcc/testsuite/c-c++-common/goacc/clauses-fail.c
@@ -1,3 +1,5 @@
+/* Miscellaneous tests where clause parsing is expected to fail. */
+
void
f (void)
{
@@ -17,3 +19,13 @@ f (void)
for (i = 0; i < 2; ++i)
;
}
+
+
+void
+f2 (void)
+{
+ int a, b[100];
+
+#pragma acc parallel firstprivate (b[10:20]) /* { dg-error "expected ... before ... token" } */
+ ;
+}
diff --git a/gcc/testsuite/c-c++-common/goacc/combined-directives-2.c b/gcc/testsuite/c-c++-common/goacc/combined-directives-2.c
new file mode 100644
index 0000000..c51e2f9
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/goacc/combined-directives-2.c
@@ -0,0 +1,14 @@
+/* Ensure that bogus clauses aren't propagated in combined loop
+ constructs. */
+
+int
+main ()
+{
+ int a, i;
+
+#pragma acc parallel loop vector copy(a[0:100]) reduction(+:a) /* { dg-error "'a' does not have pointer or array type" } */
+ for (i = 0; i < 100; i++)
+ a++;
+
+ return a;
+}
diff --git a/gcc/testsuite/c-c++-common/goacc/combined-directives.c b/gcc/testsuite/c-c++-common/goacc/combined-directives.c
index c387285..c2a3c57 100644
--- a/gcc/testsuite/c-c++-common/goacc/combined-directives.c
+++ b/gcc/testsuite/c-c++-common/goacc/combined-directives.c
@@ -1,10 +1,7 @@
-// { dg-do compile }
-// { dg-options "-fopenacc -fdump-tree-gimple" }
+// { dg-additional-options "-fdump-tree-gimple" }
-// This error is temporary. Remove when support is added for these clauses
-// in the middle end. Also remove the comments from the reduction test
+// Remove the comments from the reduction test
// after the FE learns that reduction variables may appear in data clauses too.
-// { dg-prune-output "sorry, unimplemented" }
void
test ()
diff --git a/gcc/testsuite/c-c++-common/goacc/use_device-1.c b/gcc/testsuite/c-c++-common/goacc/host_data-1.c
index 9a4f6d0..0c7a857 100644
--- a/gcc/testsuite/c-c++-common/goacc/use_device-1.c
+++ b/gcc/testsuite/c-c++-common/goacc/host_data-1.c
@@ -1,4 +1,14 @@
-/* { dg-do compile } */
+/* Test valid use of host_data directive. */
+
+int v1[3][3];
+
+void
+f (void)
+{
+#pragma acc host_data use_device(v1)
+ ;
+}
+
void bar (float *, float *);
diff --git a/gcc/testsuite/c-c++-common/goacc/host_data-2.c b/gcc/testsuite/c-c++-common/goacc/host_data-2.c
new file mode 100644
index 0000000..bdce424
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/goacc/host_data-2.c
@@ -0,0 +1,78 @@
+/* Test invalid use of host_data directive. */
+
+int v0;
+#pragma acc host_data use_device(v0) /* { dg-error "expected declaration specifiers before" } */
+
+
+void
+f (void)
+{
+ int v2 = 3;
+#pragma acc host_data copy(v2) /* { dg-error ".copy. is not valid for ..pragma acc host_data." } */
+ ;
+
+#pragma acc host_data use_device(v2)
+ ;
+ /* { dg-error ".use_device_ptr. variable is neither a pointer nor an array" "" { target c } 14 } */
+ /* { dg-error ".use_device_ptr. variable is neither a pointer, nor an arraynor reference to pointer or array" "" { target c++ } 14 } */
+
+#pragma acc host_data use_device(v0)
+ ;
+ /* { dg-error ".use_device_ptr. variable is neither a pointer nor an array" "" { target c } 19 } */
+ /* { dg-error ".use_device_ptr. variable is neither a pointer, nor an arraynor reference to pointer or array" "" { target c++ } 19 } */
+}
+
+
+void
+f2 (void)
+{
+ int x[100];
+
+#pragma acc enter data copyin (x)
+ /* Specifying an array index is not valid for host_data/use_device. */
+#pragma acc host_data use_device (x[4]) /* { dg-error "expected '\\\)' before '\\\[' token" } */
+ ;
+#pragma acc exit data delete (x)
+}
+
+
+void
+f3 (void)
+{
+ int x[100];
+
+#pragma acc data copyin (x[25:50])
+ {
+ int *xp;
+#pragma acc host_data use_device (x)
+ {
+ /* This use of the present clause is undefined behavior for OpenACC. */
+#pragma acc parallel present (x) copyout (xp) /* { dg-error "variable .x. declared in enclosing .host_data. region" } */
+ {
+ xp = x;
+ }
+ }
+ }
+}
+
+
+void
+f4 (void)
+{
+ int x[50];
+
+#pragma acc data copyin (x[10:30])
+ {
+ int *xp;
+#pragma acc host_data use_device (x)
+ {
+ /* Here 'x' being implicitly firstprivate for the parallel region
+ conflicts with it being declared as use_device in the enclosing
+ host_data region. */
+#pragma acc parallel copyout (xp)
+ {
+ xp = x; /* { dg-error "variable .x. declared in enclosing .host_data. region" } */
+ }
+ }
+ }
+}
diff --git a/gcc/testsuite/c-c++-common/goacc/host_data-5.c b/gcc/testsuite/c-c++-common/goacc/host_data-5.c
deleted file mode 100644
index a4206c8..0000000
--- a/gcc/testsuite/c-c++-common/goacc/host_data-5.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* { dg-do compile } */
-
-#define N 1024
-
-int main (int argc, char* argv[])
-{
- int x[N];
-
-#pragma acc data copyin (x[0:N])
- {
- int *xp;
-#pragma acc host_data use_device (x)
- {
- /* This use of the present clause is undefined behavior for OpenACC. */
-#pragma acc parallel present (x) copyout (xp) /* { dg-error "variable 'x' declared in enclosing 'host_data' region" } */
- {
- xp = x;
- }
- }
- }
-
- return 0;
-}
diff --git a/gcc/testsuite/c-c++-common/goacc/host_data-6.c b/gcc/testsuite/c-c++-common/goacc/host_data-6.c
deleted file mode 100644
index 8be7912..0000000
--- a/gcc/testsuite/c-c++-common/goacc/host_data-6.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* { dg-do compile } */
-
-#define N 1024
-
-int main (int argc, char* argv[])
-{
- int x[N];
-
-#pragma acc data copyin (x[0:N])
- {
- int *xp;
-#pragma acc host_data use_device (x)
- {
- /* Here 'x' being implicitly firstprivate for the parallel region
- conflicts with it being declared as use_device in the enclosing
- host_data region. */
-#pragma acc parallel copyout (xp)
- {
- xp = x; /* { dg-error "variable 'x' declared in enclosing 'host_data' region" } */
- }
- }
- }
-
- return 0;
-}
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-1.c b/gcc/testsuite/c-c++-common/goacc/kernels-1.c
index e91b81c..4fcf86e 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-1.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-1.c
@@ -1,6 +1,45 @@
-void
-foo (void)
+int
+kernels_empty (void)
{
#pragma acc kernels
;
+
+ return 0;
+}
+
+int
+kernels_eternal (void)
+{
+#pragma acc kernels
+ {
+ while (1)
+ ;
+ }
+
+ return 0;
+}
+
+int
+kernels_noreturn (void)
+{
+#pragma acc kernels
+ __builtin_abort ();
+
+ return 0;
+}
+
+
+float b[10][15][10];
+
+void
+kernels_loop_ptr_it (void)
+{
+ float *i;
+
+#pragma acc kernels
+ {
+#pragma acc loop
+ for (i = &b[0][0][0]; i < &b[0][0][10]; i++)
+ ;
+ }
}
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-counter-vars-function-scope.c b/gcc/testsuite/c-c++-common/goacc/kernels-counter-vars-function-scope.c
index e8b5357..17f240e 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-counter-vars-function-scope.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-counter-vars-function-scope.c
@@ -1,5 +1,4 @@
/* { dg-additional-options "-O2" } */
-/* { dg-additional-options "-ftree-parallelize-loops=32" } */
/* { dg-additional-options "-fdump-tree-parloops1-all" } */
/* { dg-additional-options "-fdump-tree-optimized" } */
@@ -51,4 +50,4 @@ main (void)
/* Check that the loop has been split off into a function. */
/* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.0" 1 "optimized" } } */
-/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops1" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(0," 1 "parloops1" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-default.c b/gcc/testsuite/c-c++-common/goacc/kernels-default.c
index 58cd5e1..cb031c1 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-default.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-default.c
@@ -4,7 +4,7 @@
void
foo (void)
{
- unsigned int i;
+ unsigned int i = 0;
#pragma acc kernels
{
i++;
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-double-reduction-n.c b/gcc/testsuite/c-c++-common/goacc/kernels-double-reduction-n.c
index c39d674..750f576 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-double-reduction-n.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-double-reduction-n.c
@@ -1,5 +1,4 @@
/* { dg-additional-options "-O2" } */
-/* { dg-additional-options "-ftree-parallelize-loops=32" } */
/* { dg-additional-options "-fdump-tree-parloops1-all" } */
/* { dg-additional-options "-fdump-tree-optimized" } */
@@ -34,4 +33,4 @@ foo (unsigned int n)
/* Check that the loop has been split off into a function. */
/* { dg-final { scan-tree-dump-times "(?n);; Function .*foo.*._omp_fn.0" 1 "optimized" } } */
-/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops1" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(0," 1 "parloops1" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-double-reduction.c b/gcc/testsuite/c-c++-common/goacc/kernels-double-reduction.c
index 3501d0d..df60d6a 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-double-reduction.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-double-reduction.c
@@ -1,5 +1,4 @@
/* { dg-additional-options "-O2" } */
-/* { dg-additional-options "-ftree-parallelize-loops=32" } */
/* { dg-additional-options "-fdump-tree-parloops1-all" } */
/* { dg-additional-options "-fdump-tree-optimized" } */
@@ -34,4 +33,4 @@ foo (void)
/* Check that the loop has been split off into a function. */
/* { dg-final { scan-tree-dump-times "(?n);; Function .*foo.*._omp_fn.0" 1 "optimized" } } */
-/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops1" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(0," 1 "parloops1" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-empty.c b/gcc/testsuite/c-c++-common/goacc/kernels-empty.c
deleted file mode 100644
index e91b81c..0000000
--- a/gcc/testsuite/c-c++-common/goacc/kernels-empty.c
+++ /dev/null
@@ -1,6 +0,0 @@
-void
-foo (void)
-{
-#pragma acc kernels
- ;
-}
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-eternal.c b/gcc/testsuite/c-c++-common/goacc/kernels-eternal.c
deleted file mode 100644
index edc17d2..0000000
--- a/gcc/testsuite/c-c++-common/goacc/kernels-eternal.c
+++ /dev/null
@@ -1,11 +0,0 @@
-int
-main (void)
-{
-#pragma acc kernels
- {
- while (1)
- ;
- }
-
- return 0;
-}
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-loop-2.c b/gcc/testsuite/c-c++-common/goacc/kernels-loop-2.c
index f97584d..913d91f 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-loop-2.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-loop-2.c
@@ -1,5 +1,4 @@
/* { dg-additional-options "-O2" } */
-/* { dg-additional-options "-ftree-parallelize-loops=32" } */
/* { dg-additional-options "-fdump-tree-parloops1-all" } */
/* { dg-additional-options "-fdump-tree-optimized" } */
@@ -67,4 +66,4 @@ main (void)
/* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.1" 1 "optimized" } } */
/* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.2" 1 "optimized" } } */
-/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 3 "parloops1" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(0," 3 "parloops1" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-loop-3.c b/gcc/testsuite/c-c++-common/goacc/kernels-loop-3.c
index 530d62a..1822d2a 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-loop-3.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-loop-3.c
@@ -1,5 +1,4 @@
/* { dg-additional-options "-O2" } */
-/* { dg-additional-options "-ftree-parallelize-loops=32" } */
/* { dg-additional-options "-fdump-tree-parloops1-all" } */
/* { dg-additional-options "-fdump-tree-optimized" } */
@@ -45,5 +44,4 @@ main (void)
/* Check that the loop has been split off into a function. */
/* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.0" 1 "optimized" } } */
-/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops1" } } */
-
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(0," 1 "parloops1" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-loop-g.c b/gcc/testsuite/c-c++-common/goacc/kernels-loop-g.c
index 4f1c2c5..e946319 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-loop-g.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-loop-g.c
@@ -1,6 +1,5 @@
/* { dg-additional-options "-O2" } */
/* { dg-additional-options "-g" } */
-/* { dg-additional-options "-ftree-parallelize-loops=32" } */
/* { dg-additional-options "-fdump-tree-parloops1-all" } */
/* { dg-additional-options "-fdump-tree-optimized" } */
@@ -13,5 +12,4 @@
/* Check that the loop has been split off into a function. */
/* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.0" 1 "optimized" } } */
-/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops1" } } */
-
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(0," 1 "parloops1" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-loop-mod-not-zero.c b/gcc/testsuite/c-c++-common/goacc/kernels-loop-mod-not-zero.c
index 151db51..9b63b45 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-loop-mod-not-zero.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-loop-mod-not-zero.c
@@ -1,5 +1,4 @@
/* { dg-additional-options "-O2" } */
-/* { dg-additional-options "-ftree-parallelize-loops=32" } */
/* { dg-additional-options "-fdump-tree-parloops1-all" } */
/* { dg-additional-options "-fdump-tree-optimized" } */
@@ -49,4 +48,4 @@ main (void)
/* Check that the loop has been split off into a function. */
/* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.0" 1 "optimized" } } */
-/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops1" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(0," 1 "parloops1" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-loop-n.c b/gcc/testsuite/c-c++-common/goacc/kernels-loop-n.c
index bee5f5a..279f797 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-loop-n.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-loop-n.c
@@ -1,5 +1,4 @@
/* { dg-additional-options "-O2" } */
-/* { dg-additional-options "-ftree-parallelize-loops=32" } */
/* { dg-additional-options "-fdump-tree-parloops1-all" } */
/* { dg-additional-options "-fdump-tree-optimized" } */
@@ -52,5 +51,4 @@ foo (COUNTERTYPE n)
/* Check that the loop has been split off into a function. */
/* { dg-final { scan-tree-dump-times "(?n);; Function .*foo.*._omp_fn.0" 1 "optimized" } } */
-/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops1" } } */
-
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(0," 1 "parloops1" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-loop-nest.c b/gcc/testsuite/c-c++-common/goacc/kernels-loop-nest.c
index ea0e342..db1071f 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-loop-nest.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-loop-nest.c
@@ -1,5 +1,4 @@
/* { dg-additional-options "-O2" } */
-/* { dg-additional-options "-ftree-parallelize-loops=32" } */
/* { dg-additional-options "-fdump-tree-parloops1-all" } */
/* { dg-additional-options "-fdump-tree-optimized" } */
@@ -36,4 +35,4 @@ main (void)
/* Check that the loop has been split off into a function. */
/* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.0" 1 "optimized" } } */
-/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops1" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(0," 1 "parloops1" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-loop.c b/gcc/testsuite/c-c++-common/goacc/kernels-loop.c
index ab5dfb9..abf7a3c 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-loop.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-loop.c
@@ -1,5 +1,4 @@
/* { dg-additional-options "-O2" } */
-/* { dg-additional-options "-ftree-parallelize-loops=32" } */
/* { dg-additional-options "-fdump-tree-parloops1-all" } */
/* { dg-additional-options "-fdump-tree-optimized" } */
@@ -52,5 +51,4 @@ main (void)
/* Check that the loop has been split off into a function. */
/* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.0" 1 "optimized" } } */
-/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops1" } } */
-
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(0," 1 "parloops1" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-noreturn.c b/gcc/testsuite/c-c++-common/goacc/kernels-noreturn.c
deleted file mode 100644
index 1a8cc67..0000000
--- a/gcc/testsuite/c-c++-common/goacc/kernels-noreturn.c
+++ /dev/null
@@ -1,12 +0,0 @@
-int
-main (void)
-{
-
-#pragma acc kernels
- {
- __builtin_abort ();
- }
-
- return 0;
-}
-
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-one-counter-var.c b/gcc/testsuite/c-c++-common/goacc/kernels-one-counter-var.c
index b16a8cd..95f4817 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-one-counter-var.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-one-counter-var.c
@@ -1,5 +1,4 @@
/* { dg-additional-options "-O2" } */
-/* { dg-additional-options "-ftree-parallelize-loops=32" } */
/* { dg-additional-options "-fdump-tree-parloops1-all" } */
/* { dg-additional-options "-fdump-tree-optimized" } */
@@ -50,5 +49,4 @@ main (void)
/* Check that the loop has been split off into a function. */
/* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.0" 1 "optimized" } } */
-/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops1" } } */
-
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(0," 1 "parloops1" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-reduction.c b/gcc/testsuite/c-c++-common/goacc/kernels-reduction.c
index 61c5df3..6f5a418 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-reduction.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-reduction.c
@@ -1,5 +1,4 @@
/* { dg-additional-options "-O2" } */
-/* { dg-additional-options "-ftree-parallelize-loops=32" } */
/* { dg-additional-options "-fdump-tree-parloops1-all" } */
/* { dg-additional-options "-fdump-tree-optimized" } */
@@ -32,5 +31,4 @@ foo (void)
/* Check that the loop has been split off into a function. */
/* { dg-final { scan-tree-dump-times "(?n);; Function .*foo.*._omp_fn.0" 1 "optimized" } } */
-/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops1" } } */
-
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(0," 1 "parloops1" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/loop-2-kernels.c b/gcc/testsuite/c-c++-common/goacc/loop-2-kernels.c
new file mode 100644
index 0000000..01ad32d
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/goacc/loop-2-kernels.c
@@ -0,0 +1,189 @@
+void K(void)
+{
+ int i, j;
+
+#pragma acc kernels
+ {
+#pragma acc loop auto
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop gang
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop gang(5)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop gang(num:5)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop gang(static:5)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop gang(static:*)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop gang
+ for (i = 0; i < 10; i++)
+ {
+#pragma acc loop vector
+ for (j = 0; j < 10; j++)
+ { }
+#pragma acc loop worker
+ for (j = 0; j < 10; j++)
+ { }
+#pragma acc loop gang // { dg-error "inner loop uses same" }
+ for (j = 0; j < 10; j++)
+ { }
+ }
+#pragma acc loop seq gang // { dg-error "'seq' overrides" }
+ for (i = 0; i < 10; i++)
+ { }
+
+#pragma acc loop worker
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop worker(5)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop worker(num:5)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop worker
+ for (i = 0; i < 10; i++)
+ {
+#pragma acc loop vector
+ for (j = 0; j < 10; j++)
+ { }
+#pragma acc loop worker // { dg-error "inner loop uses same" }
+ for (j = 0; j < 10; j++)
+ { }
+#pragma acc loop gang
+ for (j = 0; j < 10; j++)
+ { }
+ }
+#pragma acc loop seq worker // { dg-error "'seq' overrides" }
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop gang worker
+ for (i = 0; i < 10; i++)
+ { }
+
+#pragma acc loop vector
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop vector(5)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop vector(length:5)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop vector
+ for (i = 0; i < 10; i++)
+ {
+#pragma acc loop vector // { dg-error "inner loop uses same" }
+ for (j = 1; j < 10; j++)
+ { }
+#pragma acc loop worker
+ for (j = 1; j < 10; j++)
+ { }
+#pragma acc loop gang
+ for (j = 1; j < 10; j++)
+ { }
+ }
+#pragma acc loop seq vector // { dg-error "'seq' overrides" }
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop gang vector
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop worker vector
+ for (i = 0; i < 10; i++)
+ { }
+
+#pragma acc loop auto
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop seq auto // { dg-error "'seq' overrides" }
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop gang auto // { dg-error "'auto' conflicts" }
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop worker auto // { dg-error "'auto' conflicts" }
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop vector auto // { dg-error "'auto' conflicts" }
+ for (i = 0; i < 10; i++)
+ { }
+ }
+
+#pragma acc kernels loop auto
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc kernels loop gang
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc kernels loop gang(5)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc kernels loop gang(num:5)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc kernels loop gang(static:5)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc kernels loop gang(static:*)
+ for (i = 0; i < 10; i++)
+ { }
+
+#pragma acc kernels loop worker
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc kernels loop worker(5)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc kernels loop worker(num:5)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc kernels loop seq worker // { dg-error "'seq' overrides" "" { target c } }
+ for (i = 0; i < 10; i++) // { dg-error "'seq' overrides" "" { target c++ } }
+ { }
+#pragma acc kernels loop gang worker
+ for (i = 0; i < 10; i++)
+ { }
+
+#pragma acc kernels loop vector
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc kernels loop vector(5)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc kernels loop vector(length:5)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc kernels loop seq vector // { dg-error "'seq' overrides" "" { target c } }
+ for (i = 0; i < 10; i++) // { dg-error "'seq' overrides" "" { target c++ } }
+ { }
+#pragma acc kernels loop gang vector
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc kernels loop worker vector
+ for (i = 0; i < 10; i++)
+ { }
+
+#pragma acc kernels loop auto
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc kernels loop seq auto // { dg-error "'seq' overrides" "" { target c } }
+ for (i = 0; i < 10; i++) // { dg-error "'seq' overrides" "" { target c++ } }
+ { }
+#pragma acc kernels loop gang auto // { dg-error "'auto' conflicts" "" { target c } }
+ for (i = 0; i < 10; i++) // { dg-error "'auto' conflicts" "" { target c++ } }
+ { }
+#pragma acc kernels loop worker auto // { dg-error "'auto' conflicts" "" { target c } }
+ for (i = 0; i < 10; i++) // { dg-error "'auto' conflicts" "" { target c++ } }
+ { }
+#pragma acc kernels loop vector auto // { dg-error "'auto' conflicts" "" { target c } }
+ for (i = 0; i < 10; i++) // { dg-error "'auto' conflicts" "" { target c++ } }
+ { }
+}
diff --git a/gcc/testsuite/c-c++-common/goacc/loop-2-parallel.c b/gcc/testsuite/c-c++-common/goacc/loop-2-parallel.c
new file mode 100644
index 0000000..0ef5741
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/goacc/loop-2-parallel.c
@@ -0,0 +1,162 @@
+void P(void)
+{
+ int i, j;
+
+#pragma acc parallel
+ {
+#pragma acc loop auto
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop gang
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop gang(static:5)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop gang(static:*)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop gang // { dg-message "containing loop" }
+ for (i = 0; i < 10; i++)
+ {
+#pragma acc loop vector
+ for (j = 1; j < 10; j++)
+ { }
+#pragma acc loop worker
+ for (j = 1; j < 10; j++)
+ { }
+#pragma acc loop gang // { dg-error "inner loop uses same" }
+ for (j = 1; j < 10; j++)
+ { }
+ }
+#pragma acc loop seq gang // { dg-error "'seq' overrides" }
+ for (i = 0; i < 10; i++)
+ { }
+
+#pragma acc loop worker
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop worker // { dg-message "containing loop" 2 }
+ for (i = 0; i < 10; i++)
+ {
+#pragma acc loop vector
+ for (j = 1; j < 10; j++)
+ { }
+#pragma acc loop worker // { dg-error "inner loop uses same" }
+ for (j = 1; j < 10; j++)
+ { }
+#pragma acc loop gang // { dg-error "incorrectly nested" }
+ for (j = 1; j < 10; j++)
+ { }
+ }
+#pragma acc loop seq worker // { dg-error "'seq' overrides" }
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop gang worker
+ for (i = 0; i < 10; i++)
+ { }
+
+#pragma acc loop vector
+ for (i = 0; i < 10; i++)
+ { }
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop vector // { dg-message "containing loop" 3 }
+ for (i = 0; i < 10; i++)
+ {
+#pragma acc loop vector // { dg-error "inner loop uses same" }
+ for (j = 1; j < 10; j++)
+ { }
+#pragma acc loop worker // { dg-error "incorrectly nested" }
+ for (j = 1; j < 10; j++)
+ { }
+#pragma acc loop gang // { dg-error "incorrectly nested" }
+ for (j = 1; j < 10; j++)
+ { }
+ }
+#pragma acc loop seq vector // { dg-error "'seq' overrides" }
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop gang vector
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop worker vector
+ for (i = 0; i < 10; i++)
+ { }
+
+#pragma acc loop auto
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop seq auto // { dg-error "'seq' overrides" }
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop gang auto // { dg-error "'auto' conflicts" }
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop worker auto // { dg-error "'auto' conflicts" }
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop vector auto // { dg-error "'auto' conflicts" }
+ for (i = 0; i < 10; i++)
+ { }
+
+ }
+
+#pragma acc parallel loop auto
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc parallel loop gang
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc parallel loop gang(static:5)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc parallel loop gang(static:*)
+ for (i = 0; i < 10; i++)
+ { }
+
+#pragma acc parallel loop seq gang // { dg-error "'seq' overrides" "" { target c } }
+ for (i = 0; i < 10; i++) // { dg-error "'seq' overrides" "" { target c++ } }
+ { }
+
+#pragma acc parallel loop worker
+ for (i = 0; i < 10; i++)
+ { }
+
+#pragma acc parallel loop seq worker // { dg-error "'seq' overrides" "" { target c } }
+ for (i = 0; i < 10; i++) // { dg-error "'seq' overrides" "" { target c++ } }
+ { }
+#pragma acc parallel loop gang worker
+ for (i = 0; i < 10; i++)
+ { }
+
+#pragma acc parallel loop vector
+ for (i = 0; i < 10; i++)
+ { }
+
+#pragma acc parallel loop seq vector // { dg-error "'seq' overrides" "" { target c } }
+ for (i = 0; i < 10; i++) // { dg-error "'seq' overrides" "" { target c++ } }
+ { }
+#pragma acc parallel loop gang vector
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc parallel loop worker vector
+ for (i = 0; i < 10; i++)
+ { }
+
+#pragma acc parallel loop auto
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc parallel loop seq auto // { dg-error "'seq' overrides" "" { target c } }
+ for (i = 0; i < 10; i++) // { dg-error "'seq' overrides" "" { target c++ } }
+ { }
+#pragma acc parallel loop gang auto // { dg-error "'auto' conflicts" "" { target c } }
+ for (i = 0; i < 10; i++) // { dg-error "'auto' conflicts" "" { target c++ } }
+ { }
+#pragma acc parallel loop worker auto // { dg-error "'auto' conflicts" "" { target c } }
+ for (i = 0; i < 10; i++) // { dg-error "'auto' conflicts" "" { target c++ } }
+ { }
+#pragma acc parallel loop vector auto // { dg-error "'auto' conflicts" "" { target c } }
+ for (i = 0; i < 10; i++) // { dg-error "'auto' conflicts" "" { target c++ } }
+ { }
+}
diff --git a/gcc/testsuite/c-c++-common/goacc/loop-3.c b/gcc/testsuite/c-c++-common/goacc/loop-3.c
new file mode 100644
index 0000000..44b65a8
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/goacc/loop-3.c
@@ -0,0 +1,58 @@
+void par1 (void)
+{
+ int i, j;
+
+#pragma acc parallel
+ {
+#pragma acc loop gang(5) // { dg-error "argument not permitted" }
+ for (i = 0; i < 10; i++)
+ { }
+
+#pragma acc loop gang(num:5) // { dg-error "argument not permitted" }
+ for (i = 0; i < 10; i++)
+ { }
+
+#pragma acc loop worker(5) // { dg-error "argument not permitted" }
+ for (i = 0; i < 10; i++)
+ { }
+
+#pragma acc loop worker(num:5) // { dg-error "argument not permitted" }
+ for (i = 0; i < 10; i++)
+ { }
+
+#pragma acc loop vector(5) // { dg-error "argument not permitted" }
+ for (i = 0; i < 10; i++)
+ { }
+
+#pragma acc loop vector(length:5) // { dg-error "argument not permitted" }
+ for (i = 0; i < 10; i++)
+ { }
+
+ }
+}
+
+void p2 (void)
+{
+ int i, j;
+
+#pragma acc parallel loop gang(5) // { dg-error "argument not permitted" "" { target c } }
+ for (i = 0; i < 10; i++) // { dg-error "argument not permitted" "" { target c++ } }
+ { }
+#pragma acc parallel loop gang(num:5) // { dg-error "argument not permitted" "" { target c } }
+ for (i = 0; i < 10; i++) // { dg-error "argument not permitted" "" { target c++ } }
+ { }
+
+#pragma acc parallel loop worker(5) // { dg-error "argument not permitted" "" { target c } }
+ for (i = 0; i < 10; i++) // { dg-error "argument not permitted" "" { target c++ } }
+ { }
+#pragma acc parallel loop worker(num:5) // { dg-error "argument not permitted" "" { target c } }
+ for (i = 0; i < 10; i++) // { dg-error "argument not permitted" "" { target c++ } }
+ { }
+
+#pragma acc parallel loop vector(5) // { dg-error "argument not permitted" "" { target c } }
+ for (i = 0; i < 10; i++) // { dg-error "argument not permitted" "" { target c++ } }
+ { }
+#pragma acc parallel loop vector(length:5) // { dg-error "argument not permitted" "" { target c } }
+ for (i = 0; i < 10; i++) // { dg-error "argument not permitted" "" { target c++ } }
+ { }
+}
diff --git a/gcc/testsuite/c-c++-common/goacc/loop-clauses.c b/gcc/testsuite/c-c++-common/goacc/loop-clauses.c
index 97b8786..f3c7207 100644
--- a/gcc/testsuite/c-c++-common/goacc/loop-clauses.c
+++ b/gcc/testsuite/c-c++-common/goacc/loop-clauses.c
@@ -1,7 +1,3 @@
-/* { dg-do compile } */
-
-/* { dg-prune-output "sorry, unimplemented" } */
-
int
main ()
{
diff --git a/gcc/testsuite/c-c++-common/goacc/nesting-1.c b/gcc/testsuite/c-c++-common/goacc/nesting-1.c
index 3a8f838..cab4f98 100644
--- a/gcc/testsuite/c-c++-common/goacc/nesting-1.c
+++ b/gcc/testsuite/c-c++-common/goacc/nesting-1.c
@@ -58,10 +58,6 @@ f_acc_data (void)
#pragma acc exit data delete(i)
-#pragma acc loop /* { dg-error "loop directive must be associated with an OpenACC compute region" } */
- for (i = 0; i < 2; ++i)
- ;
-
#pragma acc data
{
#pragma acc parallel
@@ -92,10 +88,6 @@ f_acc_data (void)
#pragma acc enter data copyin(i)
#pragma acc exit data delete(i)
-
-#pragma acc loop /* { dg-error "loop directive must be associated with an OpenACC compute region" } */
- for (i = 0; i < 2; ++i)
- ;
}
}
}
diff --git a/gcc/testsuite/c-c++-common/goacc/nesting-fail-1.c b/gcc/testsuite/c-c++-common/goacc/nesting-fail-1.c
index 7a36074..93a9111 100644
--- a/gcc/testsuite/c-c++-common/goacc/nesting-fail-1.c
+++ b/gcc/testsuite/c-c++-common/goacc/nesting-fail-1.c
@@ -37,3 +37,40 @@ f_acc_kernels (void)
#pragma acc exit data delete(i) /* { dg-error ".enter/exit data. construct inside of .kernels. region" } */
}
}
+
+void
+f_acc_data (void)
+{
+ unsigned int i;
+#pragma acc data
+ {
+#pragma acc loop /* { dg-error "loop directive must be associated with an OpenACC compute region" } */
+ for (i = 0; i < 2; ++i)
+ ;
+
+#pragma acc data
+ {
+#pragma acc loop /* { dg-error "loop directive must be associated with an OpenACC compute region" } */
+ for (i = 0; i < 2; ++i)
+ ;
+ }
+ }
+}
+
+#pragma acc routine
+void
+f_acc_routine (void)
+{
+#pragma acc parallel /* { dg-error "OpenACC region inside of OpenACC routine, nested parallelism not supported yet" } */
+ ;
+}
+
+void
+f (void)
+{
+ int i, v = 0;
+
+#pragma acc loop gang reduction (+:v) /* { dg-error "loop directive must be associated with an OpenACC compute region" } */
+ for (i = 0; i < 10; i++)
+ v++;
+}
diff --git a/gcc/testsuite/c-c++-common/goacc/parallel-1.c b/gcc/testsuite/c-c++-common/goacc/parallel-1.c
index a860526..6c6cc88 100644
--- a/gcc/testsuite/c-c++-common/goacc/parallel-1.c
+++ b/gcc/testsuite/c-c++-common/goacc/parallel-1.c
@@ -1,6 +1,38 @@
-void
-foo (void)
+int
+parallel_empty (void)
{
#pragma acc parallel
;
+
+ return 0;
+}
+
+int
+parallel_eternal (void)
+{
+#pragma acc parallel
+ {
+ while (1)
+ ;
+ }
+
+ return 0;
+}
+
+int
+parallel_noreturn (void)
+{
+#pragma acc parallel
+ __builtin_abort ();
+
+ return 0;
+}
+
+int
+parallel_clauses (void)
+{
+ int a, b[100];
+
+#pragma acc parallel firstprivate (a, b)
+ ;
}
diff --git a/gcc/testsuite/c-c++-common/goacc/pr69916.c b/gcc/testsuite/c-c++-common/goacc/pr69916.c
new file mode 100644
index 0000000..e037af3
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/goacc/pr69916.c
@@ -0,0 +1,20 @@
+/* { dg-additional-options "-O2" } */
+
+/* PR 69916, an loop determined to be empty sometime after omp-lower
+ and before oacc-device-lower can evaporate leading to no GOACC_LOOP
+ internal functions existing. */
+
+int
+main (void)
+{
+
+#pragma acc parallel
+ {
+ int j = 0;
+#pragma acc loop private (j)
+ for (int i = 0; i < 10; i++)
+ j++;
+ }
+
+ return 0;
+}
diff --git a/gcc/testsuite/c-c++-common/goacc/reduction-1.c b/gcc/testsuite/c-c++-common/goacc/reduction-1.c
index de97125b..3c1c2dd 100644
--- a/gcc/testsuite/c-c++-common/goacc/reduction-1.c
+++ b/gcc/testsuite/c-c++-common/goacc/reduction-1.c
@@ -1,70 +1,65 @@
-/* { dg-require-effective-target alloca } */
/* Integer reductions. */
-#define vl 32
+#define n 1000
int
main(void)
{
- const int n = 1000;
int i;
int result, array[n];
int lresult;
/* '+' reductions. */
-#pragma acc parallel vector_length (vl)
-#pragma acc loop reduction (+:result)
+#pragma acc parallel
+#pragma acc loop gang worker vector reduction (+:result)
for (i = 0; i < n; i++)
result += array[i];
/* '*' reductions. */
-#pragma acc parallel vector_length (vl)
-#pragma acc loop reduction (*:result)
+#pragma acc parallel
+#pragma acc loop gang worker vector reduction (*:result)
for (i = 0; i < n; i++)
result *= array[i];
-// result = 0;
-// vresult = 0;
-//
-// /* 'max' reductions. */
-// #pragma acc parallel vector_length (vl)
-// #pragma acc loop reduction (+:result)
-// for (i = 0; i < n; i++)
-// result = result > array[i] ? result : array[i];
-//
-// /* 'min' reductions. */
-// #pragma acc parallel vector_length (vl)
-// #pragma acc loop reduction (+:result)
-// for (i = 0; i < n; i++)
-// result = result < array[i] ? result : array[i];
+ /* 'max' reductions. */
+#pragma acc parallel
+#pragma acc loop gang worker vector reduction (max:result)
+ for (i = 0; i < n; i++)
+ result = result > array[i] ? result : array[i];
+
+ /* 'min' reductions. */
+#pragma acc parallel
+#pragma acc loop gang worker vector reduction (min:result)
+ for (i = 0; i < n; i++)
+ result = result < array[i] ? result : array[i];
/* '&' reductions. */
-#pragma acc parallel vector_length (vl)
-#pragma acc loop reduction (&:result)
+#pragma acc parallel
+#pragma acc loop gang worker vector reduction (&:result)
for (i = 0; i < n; i++)
result &= array[i];
/* '|' reductions. */
-#pragma acc parallel vector_length (vl)
-#pragma acc loop reduction (|:result)
+#pragma acc parallel
+#pragma acc loop gang worker vector reduction (|:result)
for (i = 0; i < n; i++)
result |= array[i];
/* '^' reductions. */
-#pragma acc parallel vector_length (vl)
-#pragma acc loop reduction (^:result)
+#pragma acc parallel
+#pragma acc loop gang worker vector reduction (^:result)
for (i = 0; i < n; i++)
result ^= array[i];
/* '&&' reductions. */
-#pragma acc parallel vector_length (vl)
-#pragma acc loop reduction (&&:lresult)
+#pragma acc parallel
+#pragma acc loop gang worker vector reduction (&&:lresult)
for (i = 0; i < n; i++)
lresult = lresult && (result > array[i]);
/* '||' reductions. */
-#pragma acc parallel vector_length (vl)
-#pragma acc loop reduction (||:lresult)
+#pragma acc parallel
+#pragma acc loop gang worker vector reduction (||:lresult)
for (i = 0; i < n; i++)
lresult = lresult || (result > array[i]);
diff --git a/gcc/testsuite/c-c++-common/goacc/reduction-2.c b/gcc/testsuite/c-c++-common/goacc/reduction-2.c
index 2964236..c3105a2 100644
--- a/gcc/testsuite/c-c++-common/goacc/reduction-2.c
+++ b/gcc/testsuite/c-c++-common/goacc/reduction-2.c
@@ -1,49 +1,47 @@
-/* { dg-require-effective-target alloca } */
/* float reductions. */
-#define vl 32
+#define n 1000
int
main(void)
{
- const int n = 1000;
int i;
float result, array[n];
int lresult;
/* '+' reductions. */
-#pragma acc parallel vector_length (vl)
-#pragma acc loop reduction (+:result)
+#pragma acc parallel
+#pragma acc loop gang worker vector reduction (+:result)
for (i = 0; i < n; i++)
result += array[i];
/* '*' reductions. */
-#pragma acc parallel vector_length (vl)
-#pragma acc loop reduction (*:result)
+#pragma acc parallel
+#pragma acc loop gang worker vector reduction (*:result)
for (i = 0; i < n; i++)
result *= array[i];
-// /* 'max' reductions. */
-// #pragma acc parallel vector_length (vl)
-// #pragma acc loop reduction (+:result)
-// for (i = 0; i < n; i++)
-// result = result > array[i] ? result : array[i];
-//
-// /* 'min' reductions. */
-// #pragma acc parallel vector_length (vl)
-// #pragma acc loop reduction (+:result)
-// for (i = 0; i < n; i++)
-// result = result < array[i] ? result : array[i];
+ /* 'max' reductions. */
+#pragma acc parallel
+#pragma acc loop gang worker vector reduction (max:result)
+ for (i = 0; i < n; i++)
+ result = result > array[i] ? result : array[i];
+
+ /* 'min' reductions. */
+#pragma acc parallel
+#pragma acc loop gang worker vector reduction (min:result)
+ for (i = 0; i < n; i++)
+ result = result < array[i] ? result : array[i];
/* '&&' reductions. */
-#pragma acc parallel vector_length (vl)
-#pragma acc loop reduction (&&:lresult)
+#pragma acc parallel
+#pragma acc loop gang worker vector reduction (&&:lresult)
for (i = 0; i < n; i++)
lresult = lresult && (result > array[i]);
/* '||' reductions. */
-#pragma acc parallel vector_length (vl)
-#pragma acc loop reduction (||:lresult)
+#pragma acc parallel
+#pragma acc loop gang worker vector reduction (||:lresult)
for (i = 0; i < n; i++)
lresult = lresult || (result > array[i]);
diff --git a/gcc/testsuite/c-c++-common/goacc/reduction-3.c b/gcc/testsuite/c-c++-common/goacc/reduction-3.c
index 34c51c2..4dbde04 100644
--- a/gcc/testsuite/c-c++-common/goacc/reduction-3.c
+++ b/gcc/testsuite/c-c++-common/goacc/reduction-3.c
@@ -1,49 +1,47 @@
-/* { dg-require-effective-target alloca } */
/* double reductions. */
-#define vl 32
+#define n 1000
int
main(void)
{
- const int n = 1000;
int i;
double result, array[n];
int lresult;
/* '+' reductions. */
-#pragma acc parallel vector_length (vl)
-#pragma acc loop reduction (+:result)
+#pragma acc parallel
+#pragma acc loop gang worker vector reduction (+:result)
for (i = 0; i < n; i++)
result += array[i];
/* '*' reductions. */
-#pragma acc parallel vector_length (vl)
-#pragma acc loop reduction (*:result)
+#pragma acc parallel
+#pragma acc loop gang worker vector reduction (*:result)
for (i = 0; i < n; i++)
result *= array[i];
-// /* 'max' reductions. */
-// #pragma acc parallel vector_length (vl)
-// #pragma acc loop reduction (+:result)
-// for (i = 0; i < n; i++)
-// result = result > array[i] ? result : array[i];
-//
-// /* 'min' reductions. */
-// #pragma acc parallel vector_length (vl)
-// #pragma acc loop reduction (+:result)
-// for (i = 0; i < n; i++)
-// result = result < array[i] ? result : array[i];
+ /* 'max' reductions. */
+#pragma acc parallel
+#pragma acc loop gang worker vector reduction (max:result)
+ for (i = 0; i < n; i++)
+ result = result > array[i] ? result : array[i];
+
+ /* 'min' reductions. */
+#pragma acc parallel
+#pragma acc loop gang worker vector reduction (min:result)
+ for (i = 0; i < n; i++)
+ result = result < array[i] ? result : array[i];
/* '&&' reductions. */
-#pragma acc parallel vector_length (vl)
-#pragma acc loop reduction (&&:lresult)
+#pragma acc parallel
+#pragma acc loop gang worker vector reduction (&&:lresult)
for (i = 0; i < n; i++)
lresult = lresult && (result > array[i]);
/* '||' reductions. */
-#pragma acc parallel vector_length (vl)
-#pragma acc loop reduction (||:lresult)
+#pragma acc parallel
+#pragma acc loop gang worker vector reduction (||:lresult)
for (i = 0; i < n; i++)
lresult = lresult || (result > array[i]);
diff --git a/gcc/testsuite/c-c++-common/goacc/reduction-4.c b/gcc/testsuite/c-c++-common/goacc/reduction-4.c
index 328c0d4..c4572b9 100644
--- a/gcc/testsuite/c-c++-common/goacc/reduction-4.c
+++ b/gcc/testsuite/c-c++-common/goacc/reduction-4.c
@@ -1,51 +1,35 @@
-/* { dg-require-effective-target alloca } */
/* complex reductions. */
-#define vl 32
+#define n 1000
int
main(void)
{
- const int n = 1000;
int i;
__complex__ double result, array[n];
int lresult;
/* '+' reductions. */
-#pragma acc parallel vector_length (vl)
-#pragma acc loop reduction (+:result)
+#pragma acc parallel
+#pragma acc loop gang worker vector reduction (+:result)
for (i = 0; i < n; i++)
result += array[i];
- /* Needs support for complex multiplication. */
-
-// /* '*' reductions. */
-// #pragma acc parallel vector_length (vl)
-// #pragma acc loop reduction (*:result)
-// for (i = 0; i < n; i++)
-// result *= array[i];
-//
-// /* 'max' reductions. */
-// #pragma acc parallel vector_length (vl)
-// #pragma acc loop reduction (+:result)
-// for (i = 0; i < n; i++)
-// result = result > array[i] ? result : array[i];
-//
-// /* 'min' reductions. */
-// #pragma acc parallel vector_length (vl)
-// #pragma acc loop reduction (+:result)
-// for (i = 0; i < n; i++)
-// result = result < array[i] ? result : array[i];
+ /* '*' reductions. */
+#pragma acc parallel
+#pragma acc loop gang worker vector reduction (*:result)
+ for (i = 0; i < n; i++)
+ result *= array[i];
/* '&&' reductions. */
-#pragma acc parallel vector_length (vl)
-#pragma acc loop reduction (&&:lresult)
+#pragma acc parallel
+#pragma acc loop gang worker vector reduction (&&:lresult)
for (i = 0; i < n; i++)
lresult = lresult && (__real__(result) > __real__(array[i]));
/* '||' reductions. */
-#pragma acc parallel vector_length (vl)
-#pragma acc loop reduction (||:lresult)
+#pragma acc parallel
+#pragma acc loop gang worker vector reduction (||:lresult)
for (i = 0; i < n; i++)
lresult = lresult || (__real__(result) > __real__(array[i]));
diff --git a/gcc/testsuite/c-c++-common/goacc/reduction-5.c b/gcc/testsuite/c-c++-common/goacc/reduction-5.c
new file mode 100644
index 0000000..74daad3
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/goacc/reduction-5.c
@@ -0,0 +1,16 @@
+/* Integer reductions. */
+
+#define n 1000
+
+int
+main(void)
+{
+ int v1;
+
+#pragma acc parallel reduction(+:v1) private(v1) /* { dg-error "appears more than once in data clauses" } */
+ ;
+#pragma acc parallel reduction(+:v1) firstprivate(v1) /* { dg-error "appears more than once in data clauses" } */
+ ;
+
+ return 0;
+}
diff --git a/gcc/testsuite/c-c++-common/goacc/reduction-promotions.c b/gcc/testsuite/c-c++-common/goacc/reduction-promotions.c
new file mode 100644
index 0000000..4cc09da
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/goacc/reduction-promotions.c
@@ -0,0 +1,32 @@
+/* Integer reductions. */
+
+#define n 1000
+
+int
+main(void)
+{
+ int v1, v2;
+
+#pragma acc parallel reduction(+:v1,v2)
+ ;
+#pragma acc parallel reduction(+:v1,v2) copy(v1,v2)
+ ;
+#pragma acc parallel reduction(+:v1,v2) pcopy(v1,v2)
+ ;
+#pragma acc parallel reduction(+:v1,v2) present(v1,v2)
+ ;
+#pragma acc parallel reduction(+:v1,v2) copyin(v1,v2) /* { dg-warning "incompatible data clause with reduction" } */
+ ;
+#pragma acc parallel reduction(+:v1,v2) pcopyin(v1,v2) /* { dg-warning "incompatible data clause with reduction" } */
+ ;
+#pragma acc parallel reduction(+:v1,v2) copyout(v1,v2) /* { dg-warning "incompatible data clause with reduction" } */
+ ;
+#pragma acc parallel reduction(+:v1,v2) pcopyout(v1,v2) /* { dg-warning "incompatible data clause with reduction" } */
+ ;
+#pragma acc parallel reduction(+:v1,v2) create(v1,v2) /* { dg-warning "incompatible data clause with reduction" } */
+ ;
+#pragma acc parallel reduction(+:v1,v2) pcreate(v1,v2) /* { dg-warning "incompatible data clause with reduction" } */
+ ;
+
+ return 0;
+}
diff --git a/gcc/testsuite/c-c++-common/goacc/routine-3.c b/gcc/testsuite/c-c++-common/goacc/routine-3.c
index e6f83bd..b322d26 100644
--- a/gcc/testsuite/c-c++-common/goacc/routine-3.c
+++ b/gcc/testsuite/c-c++-common/goacc/routine-3.c
@@ -1,52 +1,118 @@
+/* Test invalid calls to routines. */
+
#pragma acc routine gang
-void gang (void) /* { dg-message "declared here" 3 } */
+int
+gang () /* { dg-message "declared here" 3 } */
{
+ #pragma acc loop gang worker vector
+ for (int i = 0; i < 10; i++)
+ {
+ }
+
+ return 1;
}
#pragma acc routine worker
-void worker (void) /* { dg-message "declared here" 2 } */
+int
+worker () /* { dg-message "declared here" 2 } */
{
+ #pragma acc loop worker vector
+ for (int i = 0; i < 10; i++)
+ {
+ }
+
+ return 1;
}
#pragma acc routine vector
-void vector (void) /* { dg-message "declared here" 1 } */
+int
+vector () /* { dg-message "declared here" } */
{
+ #pragma acc loop vector
+ for (int i = 0; i < 10; i++)
+ {
+ }
+
+ return 1;
}
#pragma acc routine seq
-void seq (void)
+int
+seq ()
{
+ return 1;
}
-int main ()
+int
+main ()
{
-
-#pragma acc parallel num_gangs (32) num_workers (32) vector_length (32)
+ int red = 0;
+#pragma acc parallel copy (red)
{
- #pragma acc loop gang /* { dg-message "loop here" 1 } */
- for (int i = 0; i < 10; i++)
- {
- gang (); /* { dg-error "routine call uses same" } */
- worker ();
- vector ();
- seq ();
- }
- #pragma acc loop worker /* { dg-message "loop here" 2 } */
- for (int i = 0; i < 10; i++)
- {
- gang (); /* { dg-error "routine call uses same" } */
- worker (); /* { dg-error "routine call uses same" } */
- vector ();
- seq ();
- }
- #pragma acc loop vector /* { dg-message "loop here" 3 } */
- for (int i = 0; i < 10; i++)
- {
- gang (); /* { dg-error "routine call uses same" } */
- worker (); /* { dg-error "routine call uses same" } */
- vector (); /* { dg-error "routine call uses same" } */
- seq ();
- }
+ /* Independent/seq loop tests. */
+#pragma acc loop reduction (+:red) // { dg-warning "insufficient partitioning" }
+ for (int i = 0; i < 10; i++)
+ red += gang ();
+
+#pragma acc loop reduction (+:red)
+ for (int i = 0; i < 10; i++)
+ red += worker ();
+
+#pragma acc loop reduction (+:red)
+ for (int i = 0; i < 10; i++)
+ red += vector ();
+
+ /* Gang routine tests. */
+#pragma acc loop gang reduction (+:red) /* { dg-message "containing loop" } */
+ for (int i = 0; i < 10; i++)
+ red += gang (); // { dg-error "routine call uses same" }
+
+#pragma acc loop worker reduction (+:red) /* { dg-message "containing loop" } */
+ for (int i = 0; i < 10; i++)
+ red += gang (); // { dg-error "routine call uses same" }
+
+#pragma acc loop vector reduction (+:red) /* { dg-message "containing loop" } */
+ for (int i = 0; i < 10; i++)
+ red += gang (); // { dg-error "routine call uses same" }
+
+ /* Worker routine tests. */
+#pragma acc loop gang reduction (+:red)
+ for (int i = 0; i < 10; i++)
+ red += worker ();
+
+#pragma acc loop worker reduction (+:red) /* { dg-message "containing loop" } */
+ for (int i = 0; i < 10; i++)
+ red += worker (); // { dg-error "routine call uses same" }
+
+#pragma acc loop vector reduction (+:red) /* { dg-message "containing loop" } */
+ for (int i = 0; i < 10; i++)
+ red += worker (); // { dg-error "routine call uses same" }
+
+ /* Vector routine tests. */
+#pragma acc loop gang reduction (+:red)
+ for (int i = 0; i < 10; i++)
+ red += vector ();
+
+#pragma acc loop worker reduction (+:red)
+ for (int i = 0; i < 10; i++)
+ red += vector ();
+
+#pragma acc loop vector reduction (+:red) /* { dg-message "containing loop" } */
+ for (int i = 0; i < 10; i++)
+ red += vector (); // { dg-error "routine call uses same" }
+
+ /* Seq routine tests. */
+#pragma acc loop gang reduction (+:red)
+ for (int i = 0; i < 10; i++)
+ red += seq ();
+
+#pragma acc loop worker reduction (+:red)
+ for (int i = 0; i < 10; i++)
+ red += seq ();
+
+#pragma acc loop vector reduction (+:red)
+ for (int i = 0; i < 10; i++)
+ red += seq ();
}
return 0;
diff --git a/gcc/testsuite/c-c++-common/goacc/routine-4.c b/gcc/testsuite/c-c++-common/goacc/routine-4.c
index 004d713..3e5fc4f 100644
--- a/gcc/testsuite/c-c++-common/goacc/routine-4.c
+++ b/gcc/testsuite/c-c++-common/goacc/routine-4.c
@@ -1,3 +1,4 @@
+/* Test invalid intra-routine parallelism. */
void gang (void);
void worker (void);
@@ -14,6 +15,24 @@ void seq (void)
worker (); /* { dg-error "routine call uses" } */
vector (); /* { dg-error "routine call uses" } */
seq ();
+
+ int red;
+
+#pragma acc loop reduction (+:red) // { dg-warning "insufficient partitioning" }
+ for (int i = 0; i < 10; i++)
+ red ++;
+
+#pragma acc loop gang reduction (+:red) // { dg-error "disallowed by containing routine" }
+ for (int i = 0; i < 10; i++)
+ red ++;
+
+#pragma acc loop worker reduction (+:red) // { dg-error "disallowed by containing routine" }
+ for (int i = 0; i < 10; i++)
+ red ++;
+
+#pragma acc loop vector reduction (+:red) // { dg-error "disallowed by containing routine" }
+ for (int i = 0; i < 10; i++)
+ red ++;
}
void vector (void) /* { dg-message "declared here" 1 } */
@@ -22,6 +41,24 @@ void vector (void) /* { dg-message "declared here" 1 } */
worker (); /* { dg-error "routine call uses" } */
vector ();
seq ();
+
+ int red;
+
+#pragma acc loop reduction (+:red)
+ for (int i = 0; i < 10; i++)
+ red ++;
+
+#pragma acc loop gang reduction (+:red) // { dg-error "disallowed by containing routine" }
+ for (int i = 0; i < 10; i++)
+ red ++;
+
+#pragma acc loop worker reduction (+:red) // { dg-error "disallowed by containing routine" }
+ for (int i = 0; i < 10; i++)
+ red ++;
+
+#pragma acc loop vector reduction (+:red)
+ for (int i = 0; i < 10; i++)
+ red ++;
}
void worker (void) /* { dg-message "declared here" 2 } */
@@ -30,6 +67,24 @@ void worker (void) /* { dg-message "declared here" 2 } */
worker ();
vector ();
seq ();
+
+ int red;
+
+#pragma acc loop reduction (+:red)
+ for (int i = 0; i < 10; i++)
+ red ++;
+
+#pragma acc loop gang reduction (+:red) // { dg-error "disallowed by containing routine" }
+ for (int i = 0; i < 10; i++)
+ red ++;
+
+#pragma acc loop worker reduction (+:red)
+ for (int i = 0; i < 10; i++)
+ red ++;
+
+#pragma acc loop vector reduction (+:red)
+ for (int i = 0; i < 10; i++)
+ red ++;
}
void gang (void) /* { dg-message "declared here" 3 } */
@@ -38,4 +93,22 @@ void gang (void) /* { dg-message "declared here" 3 } */
worker ();
vector ();
seq ();
+
+ int red;
+
+#pragma acc loop reduction (+:red)
+ for (int i = 0; i < 10; i++)
+ red ++;
+
+#pragma acc loop gang reduction (+:red)
+ for (int i = 0; i < 10; i++)
+ red ++;
+
+#pragma acc loop worker reduction (+:red)
+ for (int i = 0; i < 10; i++)
+ red ++;
+
+#pragma acc loop vector reduction (+:red)
+ for (int i = 0; i < 10; i++)
+ red ++;
}
diff --git a/gcc/testsuite/c-c++-common/goacc/routine-5.c b/gcc/testsuite/c-c++-common/goacc/routine-5.c
index c34838f..2a9db90 100644
--- a/gcc/testsuite/c-c++-common/goacc/routine-5.c
+++ b/gcc/testsuite/c-c++-common/goacc/routine-5.c
@@ -46,6 +46,21 @@ using namespace g;
#pragma acc routine (c) /* { dg-error "does not refer to" } */
+
+void Bar ();
+
+void Foo ()
+{
+ Bar ();
+}
+
+#pragma acc routine (Bar) // { dg-error "must be applied before use" }
+
+#pragma acc routine (Foo) gang // { dg-error "must be applied before definition" }
+
+#pragma acc routine (Baz) // { dg-error "not been declared" }
+
+
int vb1; /* { dg-error "directive for use" } */
extern int vb2; /* { dg-error "directive for use" } */
static int vb3; /* { dg-error "directive for use" } */
diff --git a/gcc/testsuite/c-c++-common/goacc/tile.c b/gcc/testsuite/c-c++-common/goacc/tile.c
index 2a81427..8e70e71 100644
--- a/gcc/testsuite/c-c++-common/goacc/tile.c
+++ b/gcc/testsuite/c-c++-common/goacc/tile.c
@@ -1,5 +1,3 @@
-/* { dg-do compile } */
-
int
main ()
{
@@ -71,3 +69,259 @@ main ()
return 0;
}
+
+
+void par (void)
+{
+ int i, j;
+
+#pragma acc parallel
+ {
+#pragma acc loop tile // { dg-error "expected" }
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop tile() // { dg-error "expected" }
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop tile(1)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop tile(2)
+ for (i = 0; i < 10; i++)
+ {
+ for (j = 1; j < 10; j++)
+ { }
+ }
+#pragma acc loop tile(-2) // { dg-warning "'tile' value must be positive" }
+ for (i = 1; i < 10; i++)
+ { }
+#pragma acc loop tile(i)
+ for (i = 1; i < 10; i++)
+ { }
+#pragma acc loop tile(2, 2, 1)
+ for (i = 1; i < 3; i++)
+ {
+ for (j = 4; j < 6; j++)
+ { }
+ }
+#pragma acc loop tile(2, 2)
+ for (i = 1; i < 5; i+=2)
+ {
+ for (j = i + 1; j < 7; j+=i)
+ { }
+ }
+#pragma acc loop vector tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop worker tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop gang tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop vector gang tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop vector worker tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop gang worker tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+ }
+}
+void p3 (void)
+{
+ int i, j;
+
+
+#pragma acc parallel loop tile // { dg-error "expected" }
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc parallel loop tile() // { dg-error "expected" }
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc parallel loop tile(1)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc parallel loop tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc parallel loop tile(*, 1)
+ for (i = 0; i < 10; i++)
+ {
+ for (j = 1; j < 10; j++)
+ { }
+ }
+#pragma acc parallel loop tile(-2) // { dg-warning "'tile' value must be positive" }
+ for (i = 1; i < 10; i++)
+ { }
+#pragma acc parallel loop tile(i)
+ for (i = 1; i < 10; i++)
+ { }
+#pragma acc parallel loop tile(2, 2, 1)
+ for (i = 1; i < 3; i++)
+ {
+ for (j = 4; j < 6; j++)
+ { }
+ }
+#pragma acc parallel loop tile(2, 2)
+ for (i = 1; i < 5; i+=2)
+ {
+ for (j = i + 1; j < 7; j++)
+ { }
+ }
+#pragma acc parallel loop vector tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc parallel loop worker tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc parallel loop gang tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc parallel loop vector gang tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc parallel loop vector worker tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc parallel loop gang worker tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+
+}
+
+
+void
+kern (void)
+{
+ int i, j;
+
+#pragma acc kernels
+ {
+#pragma acc loop tile // { dg-error "expected" }
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop tile() // { dg-error "expected" }
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop tile(1)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop tile(2)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop tile(6-2)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop tile(6+2)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop tile(*, 1)
+ for (i = 0; i < 10; i++)
+ {
+ for (j = 0; j < 10; i++)
+ { }
+ }
+#pragma acc loop tile(-2) // { dg-warning "'tile' value must be positive" }
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop tile(i)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop tile(2, 2, 1)
+ for (i = 2; i < 4; i++)
+ for (i = 4; i < 6; i++)
+ { }
+#pragma acc loop tile(2, 2)
+ for (i = 1; i < 5; i+=2)
+ for (j = i+1; j < 7; i++)
+ { }
+#pragma acc loop vector tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop worker tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop gang tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop vector gang tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop vector worker tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc loop gang worker tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+ }
+}
+
+
+void k3 (void)
+{
+ int i, j;
+
+#pragma acc kernels loop tile // { dg-error "expected" }
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc kernels loop tile() // { dg-error "expected" }
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc kernels loop tile(1)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc kernels loop tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc kernels loop tile(*, 1)
+ for (i = 0; i < 10; i++)
+ {
+ for (j = 1; j < 10; j++)
+ { }
+ }
+#pragma acc kernels loop tile(-2) // { dg-warning "'tile' value must be positive" }
+ for (i = 1; i < 10; i++)
+ { }
+#pragma acc kernels loop tile(i)
+ for (i = 1; i < 10; i++)
+ { }
+#pragma acc kernels loop tile(2, 2, 1)
+ for (i = 1; i < 3; i++)
+ {
+ for (j = 4; j < 6; j++)
+ { }
+ }
+#pragma acc kernels loop tile(2, 2)
+ for (i = 1; i < 5; i++)
+ {
+ for (j = i + 1; j < 7; j += i)
+ { }
+ }
+#pragma acc kernels loop vector tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc kernels loop worker tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc kernels loop gang tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc kernels loop vector gang tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc kernels loop vector worker tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+#pragma acc kernels loop gang worker tile(*)
+ for (i = 0; i < 10; i++)
+ { }
+}
diff --git a/gcc/testsuite/c-c++-common/goacc/uninit-copy-clause.c b/gcc/testsuite/c-c++-common/goacc/uninit-copy-clause.c
new file mode 100644
index 0000000..b3cc445
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/goacc/uninit-copy-clause.c
@@ -0,0 +1,38 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-Wuninitialized" } */
+
+void
+foo (void)
+{
+ int i;
+
+#pragma acc kernels
+ {
+ i = 1;
+ }
+
+}
+
+void
+foo2 (void)
+{
+ int i;
+
+#pragma acc kernels copy (i)
+ {
+ i = 1;
+ }
+
+}
+
+void
+foo3 (void)
+{
+ int i;
+
+#pragma acc kernels copyin(i)
+ {
+ i = 1;
+ }
+
+}
diff --git a/gcc/testsuite/c-c++-common/goacc/uninit-dim-clause.c b/gcc/testsuite/c-c++-common/goacc/uninit-dim-clause.c
new file mode 100644
index 0000000..0a006e3
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/goacc/uninit-dim-clause.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-Wuninitialized" } */
+
+#include <stdbool.h>
+
+int
+main (void)
+{
+ int i, j, k;
+
+ #pragma acc parallel num_gangs(i) /* { dg-warning "is used uninitialized in this function" } */
+ ;
+
+ #pragma acc parallel num_workers(j) /* { dg-warning "is used uninitialized in this function" } */
+ ;
+
+ #pragma acc parallel vector_length(k) /* { dg-warning "is used uninitialized in this function" } */
+ ;
+}
diff --git a/gcc/testsuite/c-c++-common/goacc/uninit-firstprivate-clause.c b/gcc/testsuite/c-c++-common/goacc/uninit-firstprivate-clause.c
new file mode 100644
index 0000000..2584033
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/goacc/uninit-firstprivate-clause.c
@@ -0,0 +1,25 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-Wuninitialized" } */
+
+void
+foo (void)
+{
+ int i;
+
+#pragma acc parallel
+ {
+ i = 1;
+ }
+}
+
+
+void
+foo2 (void)
+{
+ int i;
+
+#pragma acc parallel firstprivate (i) /* { dg-warning "is used uninitialized in this function" } */
+ {
+ i = 1;
+ }
+}
diff --git a/gcc/testsuite/c-c++-common/goacc/uninit-if-clause.c b/gcc/testsuite/c-c++-common/goacc/uninit-if-clause.c
new file mode 100644
index 0000000..55caa4c
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/goacc/uninit-if-clause.c
@@ -0,0 +1,38 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-Wuninitialized" } */
+/* { dg-excess-errors "PR70392" { xfail c++ } } */
+
+#include <stdbool.h>
+
+int
+main (void)
+{
+ int l, l2, l3, l4;
+ bool b, b2, b3, b4;
+ int i, i2;
+
+ #pragma acc parallel if(l) /* { dg-warning "is used uninitialized in this function" } */
+ ;
+
+ #pragma acc parallel if(b) /* { dg-warning "is used uninitialized in this function" "" { xfail c++ } } */
+ ;
+
+ #pragma acc kernels if(l2) /* { dg-warning "is used uninitialized in this function" } */
+ ;
+
+ #pragma acc kernels if(b2) /* { dg-warning "is used uninitialized in this function" "" { xfail c++ } } */
+ ;
+
+ #pragma acc data if(l3) /* { dg-warning "is used uninitialized in this function" } */
+ ;
+
+ #pragma acc data if(b3) /* { dg-warning "is used uninitialized in this function" "" { xfail c++ } } */
+ ;
+
+ #pragma acc update if(l4) self(i) /* { dg-warning "is used uninitialized in this function" } */
+ ;
+
+ #pragma acc update if(b4) self(i2) /* { dg-warning "is used uninitialized in this function" "" { xfail c++ } } */
+ ;
+
+}
diff --git a/gcc/testsuite/c-c++-common/goacc/uninit-use-device-clause.c b/gcc/testsuite/c-c++-common/goacc/uninit-use-device-clause.c
new file mode 100644
index 0000000..c5d327c
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/goacc/uninit-use-device-clause.c
@@ -0,0 +1,14 @@
+/* Test fails due to PR70388. */
+/* { dg-do compile } */
+/* { dg-excess-errors "PR70388" { xfail *-*-* } } */
+/* { dg-additional-options "-Wuninitialized" } */
+
+void
+foo (void)
+{
+ int i;
+
+#pragma acc host_data use_device(i) /* { dg-warning "is used uninitialized in this function" "" { xfail *-*-* } } */
+ {
+ }
+}
diff --git a/gcc/testsuite/c-c++-common/gomp/clauses-1.c b/gcc/testsuite/c-c++-common/gomp/clauses-1.c
index 2d1c352..91aed39 100644
--- a/gcc/testsuite/c-c++-common/gomp/clauses-1.c
+++ b/gcc/testsuite/c-c++-common/gomp/clauses-1.c
@@ -1,5 +1,4 @@
/* { dg-do compile } */
-/* { dg-options "-fopenmp" } */
/* { dg-additional-options "-std=c99" { target c } } */
int t;
diff --git a/gcc/testsuite/c-c++-common/gomp/gridify-1.c b/gcc/testsuite/c-c++-common/gomp/gridify-1.c
new file mode 100644
index 0000000..ba7a866
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/gomp/gridify-1.c
@@ -0,0 +1,54 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target offload_hsa } */
+/* { dg-options "-fopenmp -fdump-tree-omplower-details" } */
+
+void
+foo1 (int n, int *a, int workgroup_size)
+{
+ int i;
+#pragma omp target
+#pragma omp teams thread_limit(workgroup_size)
+#pragma omp distribute parallel for shared(a) firstprivate(n) private(i)
+ for (i = 0; i < n; i++)
+ a[i]++;
+}
+
+void
+foo2 (int j, int n, int *a)
+{
+ int i;
+#pragma omp target teams
+#pragma omp distribute parallel for shared(a) firstprivate(n) private(i) firstprivate(j)
+ for (i = j + 1; i < n; i++)
+ a[i] = i;
+}
+
+void
+foo3 (int j, int n, int *a)
+{
+ int i;
+#pragma omp target teams
+#pragma omp distribute parallel for shared(a) firstprivate(n) private(i) firstprivate(j)
+ for (i = j + 1; i < n; i += 3)
+ a[i] = i;
+}
+
+void
+foo4 (int j, int n, int *a)
+{
+#pragma omp parallel
+ {
+ #pragma omp single
+ {
+ int i;
+#pragma omp target
+#pragma omp teams
+#pragma omp distribute parallel for shared(a) firstprivate(n) private(i) firstprivate(j)
+ for (i = j + 1; i < n; i += 3)
+ a[i] = i;
+ }
+ }
+}
+
+
+/* { dg-final { scan-tree-dump-times "Target construct will be turned into a gridified GPGPU kernel" 4 "omplower" } } */
diff --git a/gcc/testsuite/c-c++-common/gomp/if-1.c b/gcc/testsuite/c-c++-common/gomp/if-1.c
index 4ba708c..3a9b538 100644
--- a/gcc/testsuite/c-c++-common/gomp/if-1.c
+++ b/gcc/testsuite/c-c++-common/gomp/if-1.c
@@ -1,5 +1,4 @@
/* { dg-do compile } */
-/* { dg-options "-fopenmp" } */
void
foo (int a, int b, int *p, int *q)
diff --git a/gcc/testsuite/c-c++-common/gomp/pr61486-2.c b/gcc/testsuite/c-c++-common/gomp/pr61486-2.c
index db97143..4a68023 100644
--- a/gcc/testsuite/c-c++-common/gomp/pr61486-2.c
+++ b/gcc/testsuite/c-c++-common/gomp/pr61486-2.c
@@ -1,6 +1,5 @@
/* PR middle-end/61486 */
/* { dg-do compile } */
-/* { dg-options "-fopenmp" } */
/* { dg-require-effective-target alloca } */
#pragma omp declare target
diff --git a/gcc/testsuite/c-c++-common/gomp/pr70550-1.c b/gcc/testsuite/c-c++-common/gomp/pr70550-1.c
new file mode 100644
index 0000000..493d417
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/gomp/pr70550-1.c
@@ -0,0 +1,81 @@
+/* PR middle-end/70550 */
+/* { dg-do compile } */
+/* { dg-additional-options "-Wuninitialized" } */
+
+#ifdef __SIZEOF_INT128__
+typedef __int128 T;
+#else
+typedef long long T;
+#endif
+
+void bar (T);
+#pragma omp declare target (bar)
+
+void
+foo (void)
+{
+ {
+ int i;
+ #pragma omp target defaultmap(tofrom:scalar) /* { dg-bogus "is used uninitialized in this function" } */
+ {
+ i = 26;
+ bar (i);
+ }
+ }
+ {
+ T j;
+ #pragma omp target defaultmap(tofrom:scalar) /* { dg-bogus "is used uninitialized in this function" } */
+ {
+ j = 37;
+ bar (j);
+ }
+ }
+ {
+ int i;
+ #pragma omp target /* { dg-bogus "is used uninitialized in this function" } */
+ {
+ i = 26;
+ bar (i);
+ }
+ }
+ {
+ T j;
+ #pragma omp target /* { dg-bogus "is used uninitialized in this function" } */
+ {
+ j = 37;
+ bar (j);
+ }
+ }
+ {
+ int i;
+ #pragma omp target firstprivate (i) /* { dg-warning "is used uninitialized in this function" } */
+ {
+ i = 26;
+ bar (i);
+ }
+ }
+ {
+ T j;
+ #pragma omp target firstprivate (j) /* { dg-warning "is used uninitialized in this function" } */
+ {
+ j = 37;
+ bar (j);
+ }
+ }
+ {
+ int i;
+ #pragma omp target private (i) /* { dg-bogus "is used uninitialized in this function" } */
+ {
+ i = 26;
+ bar (i);
+ }
+ }
+ {
+ T j;
+ #pragma omp target private (j) /* { dg-bogus "is used uninitialized in this function" } */
+ {
+ j = 37;
+ bar (j);
+ }
+ }
+}
diff --git a/gcc/testsuite/c-c++-common/gomp/pr70550-2.c b/gcc/testsuite/c-c++-common/gomp/pr70550-2.c
new file mode 100644
index 0000000..31c34da
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/gomp/pr70550-2.c
@@ -0,0 +1,55 @@
+/* PR middle-end/70550 */
+/* { dg-do compile } */
+/* { dg-additional-options "-Wuninitialized" } */
+
+void bar (int);
+
+void
+foo (void)
+{
+ int i, j, k, l, m, n, o, p, q;
+ #pragma omp task /* { dg-bogus "is used uninitialized in this function" } */
+ {
+ i = 2;
+ bar (i);
+ }
+ #pragma omp taskloop /* { dg-bogus "is used uninitialized in this function" } */
+ for (j = 0; j < 10; j++)
+ {
+ k = 7;
+ bar (k);
+ }
+ #pragma omp task firstprivate (l) /* { dg-warning "is used uninitialized in this function" } */
+ {
+ l = 2;
+ bar (l);
+ }
+ #pragma omp taskloop firstprivate (m) /* { dg-warning "is used uninitialized in this function" } */
+ for (j = 0; j < 10; j++)
+ {
+ m = 7;
+ bar (m);
+ }
+ #pragma omp task shared (n) /* { dg-bogus "is used uninitialized in this function" } */
+ {
+ n = 2;
+ bar (n);
+ }
+ #pragma omp taskloop shared (o) /* { dg-bogus "is used uninitialized in this function" } */
+ for (j = 0; j < 10; j++)
+ {
+ o = 7;
+ bar (o);
+ }
+ #pragma omp task private (p) /* { dg-bogus "is used uninitialized in this function" } */
+ {
+ p = 2;
+ bar (p);
+ }
+ #pragma omp taskloop shared (q) /* { dg-bogus "is used uninitialized in this function" } */
+ for (j = 0; j < 10; j++)
+ {
+ q = 7;
+ bar (q);
+ }
+}
diff --git a/gcc/testsuite/c-c++-common/gomp/target-teams-1.c b/gcc/testsuite/c-c++-common/gomp/target-teams-1.c
index 0a707c2..51b8d48 100644
--- a/gcc/testsuite/c-c++-common/gomp/target-teams-1.c
+++ b/gcc/testsuite/c-c++-common/gomp/target-teams-1.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-fopenmp -fdump-tree-gimple" } */
+/* { dg-additional-options "-fdump-tree-gimple" } */
int v = 6;
void bar (int);
diff --git a/gcc/testsuite/c-c++-common/nonnull-1.c b/gcc/testsuite/c-c++-common/nonnull-1.c
index fb2814c..2446d6f 100644
--- a/gcc/testsuite/c-c++-common/nonnull-1.c
+++ b/gcc/testsuite/c-c++-common/nonnull-1.c
@@ -24,5 +24,11 @@ func (char *cp1, char *cp2, char *cp3, char *cp4)
if (NULL != cp3) /* { dg-warning "nonnull argument" "cp3 compared to NULL" } */
return 3;
- return (cp4 != 0) ? 0 : 1; /* { dg-warning "nonnull argument" "cp4 compared to NULL" } */
+ return cp4 != 0 ? 0 : 1; /* { dg-warning "nonnull argument" "cp4 compared to NULL" } */
+}
+
+__attribute__((nonnull (1))) int
+func2 (char *cp)
+{
+ return (cp != NULL) ? 1 : 0; /* { dg-warning "nonnull argument" "cp compared to NULL" { xfail c++ } } */
}
diff --git a/gcc/testsuite/c-c++-common/pr69126-2-long.c b/gcc/testsuite/c-c++-common/pr69126-2-long.c
new file mode 100644
index 0000000..f4f1964
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr69126-2-long.c
@@ -0,0 +1,11 @@
+/* { dg-options "-Wdeprecated-declarations" } */
+
+/* The macro's name is >= 32 characters long, and hence its location
+ requires an ad-hoc location. */
+
+#define IGNORE_WHERE_MACRO_IS_LONGER_THAN_31_CHARS _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
+__attribute__((deprecated)) void f();
+int main() {
+ IGNORE_WHERE_MACRO_IS_LONGER_THAN_31_CHARS
+ f();
+}
diff --git a/gcc/testsuite/c-c++-common/pr69126-2-short.c b/gcc/testsuite/c-c++-common/pr69126-2-short.c
new file mode 100644
index 0000000..aee43e5
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr69126-2-short.c
@@ -0,0 +1,11 @@
+/* { dg-options "-Wdeprecated-declarations" } */
+
+/* IGNORE_SHORT_MACRO is < 32 characters long, and hence its location
+ can be stored without needing an ad-hoc location. */
+
+#define IGNORE_SHORT_MACRO _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
+__attribute__((deprecated)) void f();
+int main() {
+ IGNORE_SHORT_MACRO
+ f();
+}
diff --git a/gcc/testsuite/c-c++-common/pr69126.c b/gcc/testsuite/c-c++-common/pr69126.c
index fb4dcfb..52c96eb 100644
--- a/gcc/testsuite/c-c++-common/pr69126.c
+++ b/gcc/testsuite/c-c++-common/pr69126.c
@@ -1,22 +1,79 @@
/* { dg-options "-Wunused-variable" } */
+/* Verify that ignoring -Wunused-variable works, for various placements
+ of the variable and the _Pragma. */
+
+/* Test 1: the _Pragma is in a macro, but the affected code isn't. */
+
+#pragma GCC diagnostic push
+
+#define MACRO_1 \
+ _Pragma("GCC diagnostic ignored \"-Wunused-variable\"")
+
+int test_1()
+{
+ _Pragma("GCC diagnostic ignored \"-Wunused-variable\"")
+ int x;
+ return 0;
+}
+#pragma GCC diagnostic pop
+
+
+/* Test 2: neither the _Pragma nor the affected code are in a macro. */
+
+#pragma GCC diagnostic push
+int test_2()
+{
+ _Pragma("GCC diagnostic ignored \"-Wunused-variable\"")
+ int x;
+ return 0;
+}
+#pragma GCC diagnostic pop
+
+
+/* Test 3: the _Pragma isn't in a macro, but the affected code is. */
+
+#define MACRO_3 \
+ int x;
+
#pragma GCC diagnostic push
-int f()
+int test_3()
{
_Pragma("GCC diagnostic ignored \"-Wunused-variable\"")
+ MACRO_3
+ return 0;
+}
+#pragma GCC diagnostic pop
+
+
+/* Test 4: the _Pragma and the affected code are in different macros. */
+
+#pragma GCC diagnostic push
+#define MACRO_4A \
+ _Pragma("GCC diagnostic ignored \"-Wunused-variable\"")
+
+#define MACRO_4B \
int x;
+
+int test_4()
+{
+ MACRO_4A;
+ MACRO_4B
return 0;
}
#pragma GCC diagnostic pop
+
+/* Test 5: both the _Pragma and the affected code are in the same macro. */
+
#pragma GCC diagnostic push
-#define MACRO \
+#define MACRO_5 \
_Pragma("GCC diagnostic ignored \"-Wunused-variable\"") \
int x;
-int g()
+int test_5()
{
- MACRO;
+ MACRO_5;
return 0;
}
#pragma GCC diagnostic pop
diff --git a/gcc/testsuite/c-c++-common/pr69543-1.c b/gcc/testsuite/c-c++-common/pr69543-1.c
new file mode 100644
index 0000000..bbf4759
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr69543-1.c
@@ -0,0 +1,19 @@
+/* { dg-options "-Wuninitialized" } */
+
+/* Verify disabling a warning, where the _Pragma is within
+ a macro, but the affected code is *not* in a macro. */
+
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
+ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+ _Pragma ("GCC diagnostic pop")
+
+void test (char yylval)
+{
+ char *yyvsp;
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ *++yyvsp = yylval;
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
+}
diff --git a/gcc/testsuite/c-c++-common/pr69543-2.c b/gcc/testsuite/c-c++-common/pr69543-2.c
new file mode 100644
index 0000000..4099fb2
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr69543-2.c
@@ -0,0 +1,14 @@
+/* { dg-options "-Wuninitialized" } */
+
+/* Verify disabling a warning, where both the _Pragma and the
+ affected code are *not* in a macro. */
+
+void test (char yylval)
+{
+ char *yyvsp;
+ _Pragma ("GCC diagnostic push")
+ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
+ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
+ *++yyvsp = yylval;
+ _Pragma ("GCC diagnostic pop")
+}
diff --git a/gcc/testsuite/c-c++-common/pr69543-3.c b/gcc/testsuite/c-c++-common/pr69543-3.c
new file mode 100644
index 0000000..fcf750c
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr69543-3.c
@@ -0,0 +1,20 @@
+/* { dg-options "-Wuninitialized" } */
+
+/* Verify disabling a warning, where the _Pragma is in regular code,
+ but the affected code is within a macro. */
+
+/* TODO: XFAIL: both C and C++ erroneously fail to suppress the warning
+ The warning is reported at the macro definition location, rather than
+ the macro expansion location. */
+
+#define WARNABLE_CODE *++yyvsp = yylval; /* { dg-bogus "used uninitialized" "" { xfail *-*-* } } */
+
+void test (char yylval)
+{
+ char *yyvsp; /* { dg-bogus "declared here" "" { xfail *-*-* } } */
+ _Pragma ("GCC diagnostic push")
+ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
+ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
+ WARNABLE_CODE
+ _Pragma ("GCC diagnostic pop")
+}
diff --git a/gcc/testsuite/c-c++-common/pr69543-4.c b/gcc/testsuite/c-c++-common/pr69543-4.c
new file mode 100644
index 0000000..cd71e7e
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr69543-4.c
@@ -0,0 +1,25 @@
+/* { dg-options "-Wuninitialized" } */
+
+/* Verify disabling a warning, where both the _Pragma and the
+ affected code are within (different) macros. */
+
+/* TODO: XFAIL: both C and C++ erroneously fail to suppress the warning
+ The warning is reported at the macro definition location, rather than
+ the macro expansion location. */
+
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
+ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+ _Pragma ("GCC diagnostic pop")
+
+#define WARNABLE_CODE *++yyvsp = yylval; /* { dg-bogus "used uninitialized" "" { xfail *-*-* } } */
+
+void test (char yylval)
+{
+ char *yyvsp; /* { dg-bogus "declared here" "" { xfail *-*-* } } */
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ WARNABLE_CODE
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
+}
diff --git a/gcc/testsuite/c-c++-common/pr69558-1.c b/gcc/testsuite/c-c++-common/pr69558-1.c
new file mode 100644
index 0000000..57ac490
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr69558-1.c
@@ -0,0 +1,21 @@
+/* PR c/69558 */
+/* { dg-do compile } */
+/* { dg-options "-Wdeprecated-declarations" } */
+
+/* Verify disabling -Wdeprecated-declarations, where the _Pragma is in a
+ macro, but the affected code is *not* in a macro. */
+
+#define A \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
+#define B \
+ _Pragma ("GCC diagnostic pop")
+
+__attribute__((deprecated)) void foo (void);
+
+void bar (void)
+{
+ A
+ foo ();
+ B
+}
diff --git a/gcc/testsuite/c-c++-common/pr69558-2.c b/gcc/testsuite/c-c++-common/pr69558-2.c
new file mode 100644
index 0000000..83ae647
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr69558-2.c
@@ -0,0 +1,16 @@
+/* PR c/69558 */
+/* { dg-do compile } */
+/* { dg-options "-Wdeprecated-declarations" } */
+
+/* Verify disabling -Wdeprecated-declarations, where neither the _Pragma nor
+ the affected code are in macros. */
+
+__attribute__((deprecated)) void foo (void);
+
+void bar (void)
+{
+ _Pragma ("GCC diagnostic push")
+ _Pragma ("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
+ foo ();
+ _Pragma ("GCC diagnostic pop")
+}
diff --git a/gcc/testsuite/c-c++-common/pr69558-3.c b/gcc/testsuite/c-c++-common/pr69558-3.c
new file mode 100644
index 0000000..45c38a9
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr69558-3.c
@@ -0,0 +1,19 @@
+/* PR c/69558 */
+/* { dg-do compile } */
+/* { dg-options "-Wdeprecated-declarations" } */
+
+/* Verify disabling -Wdeprecated-declarations, where the _Pragma is not
+ in a macro, but the affected code *is*. */
+
+#define C \
+ foo ();
+
+__attribute__((deprecated)) void foo (void);
+
+void bar (void)
+{
+ _Pragma ("GCC diagnostic push")
+ _Pragma ("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
+ C
+ _Pragma ("GCC diagnostic pop")
+}
diff --git a/gcc/testsuite/c-c++-common/pr69558-4.c b/gcc/testsuite/c-c++-common/pr69558-4.c
new file mode 100644
index 0000000..02d526e
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr69558-4.c
@@ -0,0 +1,23 @@
+/* PR c/69558 */
+/* { dg-do compile } */
+/* { dg-options "-Wdeprecated-declarations" } */
+
+/* Verify disabling -Wdeprecated-declarations, where the _Pragma and the
+ affected code are in different macros. */
+
+#define A \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
+#define B \
+ _Pragma ("GCC diagnostic pop")
+#define C \
+ foo ();
+
+__attribute__((deprecated)) void foo (void);
+
+void bar (void)
+{
+ A
+ C
+ B
+}
diff --git a/gcc/testsuite/gcc.dg/pr69558.c b/gcc/testsuite/c-c++-common/pr69558.c
index 3be8cf9..102d72c 100644
--- a/gcc/testsuite/gcc.dg/pr69558.c
+++ b/gcc/testsuite/c-c++-common/pr69558.c
@@ -2,6 +2,8 @@
/* { dg-do compile } */
/* { dg-options "-Wdeprecated-declarations" } */
+/* TODO: XFAIL for g++ (works for C). */
+
#define A \
_Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
@@ -9,9 +11,9 @@
_Pragma ("GCC diagnostic pop")
#define C(x) \
A \
- static inline void bar (void) { x (); } \
+ static inline void bar (void) { x (); } /* { dg-bogus "in definition of|deprecated" "" { xfail { c++ } } } */ \
B
-__attribute__((deprecated)) void foo (void); /* { dg-bogus "declared here" } */
+__attribute__((deprecated)) void foo (void); /* { dg-bogus "declared here" "" { xfail { c++ } } } */
-C (foo) /* { dg-bogus "is deprecated" } */
+C (foo) /* { dg-bogus "is deprecated" "" { xfail { c++ } } } */
diff --git a/gcc/testsuite/c-c++-common/pr70144-1.c b/gcc/testsuite/c-c++-common/pr70144-1.c
new file mode 100644
index 0000000..01c7b78
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr70144-1.c
@@ -0,0 +1,9 @@
+/* PR c++/70144 */
+/* { dg-do compile } */
+
+void
+foo ()
+{
+ __builtin_constant_p (__builtin_constant_p) ?: ({ unsigned t = 0; t; }); /* { dg-error "must be directly called" } */
+ __builtin_classify_type (__builtin_expect); /* { dg-error "must be directly called" } */
+}
diff --git a/gcc/testsuite/c-c++-common/pr70144-2.c b/gcc/testsuite/c-c++-common/pr70144-2.c
new file mode 100644
index 0000000..0973b79
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr70144-2.c
@@ -0,0 +1,12 @@
+/* PR c++/70144 */
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+
+int
+main ()
+{
+ if (__builtin_constant_p (__builtin_memset) != 0
+ || __builtin_classify_type (__builtin_memset) != 5)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/c-c++-common/pr70264.c b/gcc/testsuite/c-c++-common/pr70264.c
new file mode 100644
index 0000000..815aad1
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr70264.c
@@ -0,0 +1,13 @@
+/* { dg-options "-fdiagnostics-show-caret" } */
+
+#define X __LINE__ /* { dg-error "expected" } */
+X
+
+/* { dg-begin-multiline-output "" }
+ #define X __LINE__
+ ^
+ { dg-end-multiline-output "" } */
+/* { dg-begin-multiline-output "" }
+ X
+ ^
+ { dg-end-multiline-output "" } */
diff --git a/gcc/testsuite/c-c++-common/pr70297.c b/gcc/testsuite/c-c++-common/pr70297.c
new file mode 100644
index 0000000..70a4f15
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr70297.c
@@ -0,0 +1,9 @@
+/* PR c/70297 */
+/* { dg-do compile } */
+/* { dg-options "-g" } */
+
+typedef int T;
+typedef int T __attribute__((aligned (4)));
+struct S {
+ T *t;
+};
diff --git a/gcc/testsuite/c-c++-common/pr70336.c b/gcc/testsuite/c-c++-common/pr70336.c
new file mode 100644
index 0000000..095bd56
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr70336.c
@@ -0,0 +1,37 @@
+/* PR c++/70336 */
+/* { dg-do compile } */
+/* { dg-options "-Wconversion" } */
+
+void
+f1 (unsigned char * x, int y, int z)
+{
+ x[z / 8] |= (unsigned char) (0x80 >> y); /* { dg-bogus "may alter its value" } */
+}
+
+unsigned char
+f2 (unsigned char x, int y)
+{
+ x = x | (unsigned char) (0x80 >> y); /* { dg-bogus "may alter its value" } */
+ return x;
+}
+
+unsigned char
+f3 (unsigned char x, int y)
+{
+ x = x | (unsigned char) (y & 255); /* { dg-bogus "may alter its value" } */
+ return x;
+}
+
+unsigned char
+f4 (unsigned char x, unsigned char y)
+{
+ x = x | (unsigned char) (y & 255); /* { dg-bogus "may alter its value" } */
+ return x;
+}
+
+unsigned char
+f5 (unsigned char x, int y)
+{
+ x = (unsigned char) (y & 255); /* { dg-bogus "may alter its value" } */
+ return x;
+}
diff --git a/gcc/testsuite/c-c++-common/tsan/pr65400-1.c b/gcc/testsuite/c-c++-common/tsan/pr65400-1.c
index 96fbbfd..d441ff8 100644
--- a/gcc/testsuite/c-c++-common/tsan/pr65400-1.c
+++ b/gcc/testsuite/c-c++-common/tsan/pr65400-1.c
@@ -7,9 +7,9 @@
#include "tsan_barrier.h"
static pthread_barrier_t barrier;
-int v;
-int q;
-int o;
+int v __attribute__((aligned(8)));
+int q __attribute__((aligned(8)));
+int o __attribute__((aligned(8)));
extern void baz4 (int *);
__attribute__((noinline, noclone)) int
diff --git a/gcc/testsuite/c-c++-common/tsan/thread_leak.c b/gcc/testsuite/c-c++-common/tsan/thread_leak.c
index 02deaba..4ddda4a 100644
--- a/gcc/testsuite/c-c++-common/tsan/thread_leak.c
+++ b/gcc/testsuite/c-c++-common/tsan/thread_leak.c
@@ -9,7 +9,7 @@ int main() {
pthread_t t;
pthread_create(&t, 0, Thread, 0);
pthread_join(t, 0);
- printf("PASS\n");
+ fprintf(stderr, "PASS\n");
return 0;
}
diff --git a/gcc/testsuite/c-c++-common/vector-compare-4.c b/gcc/testsuite/c-c++-common/vector-compare-4.c
index b05decc..e7d37eb 100644
--- a/gcc/testsuite/c-c++-common/vector-compare-4.c
+++ b/gcc/testsuite/c-c++-common/vector-compare-4.c
@@ -1,6 +1,6 @@
/* PR c/68062 */
/* { dg-do compile } */
-/* { dg-options "-Wsign-compare" } */
+/* { dg-options "-Wsign-compare -Wno-psabi" } */
/* Ignore warning on some powerpc configurations. */
/* { dg-prune-output "non-standard ABI extension" } */
diff --git a/gcc/testsuite/g++.dg/Wno-frame-address.C b/gcc/testsuite/g++.dg/Wno-frame-address.C
index a0e9c36..a2df034 100644
--- a/gcc/testsuite/g++.dg/Wno-frame-address.C
+++ b/gcc/testsuite/g++.dg/Wno-frame-address.C
@@ -1,5 +1,5 @@
// { dg-do compile }
-// { dg-skip-if "Cannot access arbitrary stack frames." { arm*-*-* hppa*-*-* } }
+// { dg-skip-if "Cannot access arbitrary stack frames." { arm*-*-* hppa*-*-* ia64-*-* } }
// { dg-options "-Werror" }
// { dg-additional-options "-mbackchain" { target s390*-*-* } }
diff --git a/gcc/testsuite/g++.dg/abi/abi-tag16a.C b/gcc/testsuite/g++.dg/abi/abi-tag16a.C
index b02e856..12fe312 100644
--- a/gcc/testsuite/g++.dg/abi/abi-tag16a.C
+++ b/gcc/testsuite/g++.dg/abi/abi-tag16a.C
@@ -1,4 +1,4 @@
-// { dg-options "-fabi-version=9 -Wabi" }
+// { dg-options "-fabi-version=9" }
// { dg-final { scan-assembler "_ZGVZN1N1FEvE4Name" } }
namespace std {
__extension__ inline namespace __cxx11 __attribute__((abi_tag("cxx11"))) {
@@ -10,7 +10,7 @@ namespace std {
namespace N {
inline void F() {
{
- static std::String Name; // { dg-warning "mangled name" }
+ static std::String Name;
}
}
void F2() {
diff --git a/gcc/testsuite/g++.dg/abi/abi-tag18.C b/gcc/testsuite/g++.dg/abi/abi-tag18.C
new file mode 100644
index 0000000..89ee737
--- /dev/null
+++ b/gcc/testsuite/g++.dg/abi/abi-tag18.C
@@ -0,0 +1,20 @@
+// { dg-options -Wabi=9 }
+// { dg-final { scan-assembler "_Z1fB7__test1v" } }
+// { dg-final { scan-assembler "_ZZ1fB7__test1vEN1T1gB7__test2Ev" } }
+// { dg-final { scan-assembler "_ZZZ1fB7__test1vEN1T1gB7__test2EvE1x" } }
+// { dg-final { scan-assembler "_ZGVZZ1fB7__test1vEN1T1gB7__test2EvE1x" } }
+
+struct X { ~X(); };
+inline namespace __test1 __attribute__((abi_tag)) { struct A1 { }; }
+inline namespace __test2 __attribute__((abi_tag)) { struct A2 { }; }
+inline A1 f() {
+ struct T {
+ A2 g() { // { dg-warning "mangled name" }
+ static X x; // { dg-warning "mangled name" }
+ }
+ };
+ T().g();
+}
+int main() {
+ f();
+}
diff --git a/gcc/testsuite/g++.dg/abi/abi-tag18a.C b/gcc/testsuite/g++.dg/abi/abi-tag18a.C
new file mode 100644
index 0000000..f65f629
--- /dev/null
+++ b/gcc/testsuite/g++.dg/abi/abi-tag18a.C
@@ -0,0 +1,20 @@
+// { dg-options -fabi-version=9 }
+// { dg-final { scan-assembler "_Z1fB7__test1v" } }
+// { dg-final { scan-assembler "_ZZ1fB7__test1vEN1T1gB7__test2Ev" } }
+// { dg-final { scan-assembler "_ZZZ1fB7__test1vEN1T1gEvE1x" } }
+// { dg-final { scan-assembler "_ZGVZZ1fvEN1T1gEvE1x" } }
+
+struct X { ~X(); };
+inline namespace __test1 __attribute__((abi_tag)) { struct A1 { }; }
+inline namespace __test2 __attribute__((abi_tag)) { struct A2 { }; }
+inline A1 f() {
+ struct T {
+ A2 g() {
+ static X x;
+ }
+ };
+ T().g();
+}
+int main() {
+ f();
+}
diff --git a/gcc/testsuite/g++.dg/abi/abi-tag19.C b/gcc/testsuite/g++.dg/abi/abi-tag19.C
new file mode 100644
index 0000000..e21d7b1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/abi/abi-tag19.C
@@ -0,0 +1,4 @@
+struct __attribute__((abi_tag("a"))) X { };
+template<typename T> struct Y { X f() { return X(); } };
+template struct Y<int>;
+// { dg-final { scan-assembler "_ZN1YIiE1fB1aEv" } }
diff --git a/gcc/testsuite/g++.dg/abi/abi-tag20.C b/gcc/testsuite/g++.dg/abi/abi-tag20.C
new file mode 100644
index 0000000..229c170
--- /dev/null
+++ b/gcc/testsuite/g++.dg/abi/abi-tag20.C
@@ -0,0 +1,15 @@
+// { dg-do compile { target c++11 } }
+// { dg-final { scan-assembler "_ZN1B1gIcEEN7__cxx111XEv" } }
+
+inline namespace __cxx11 __attribute__((__abi_tag__ ("ABI_TAG"))) {
+ class X {};
+}
+struct B {
+ X f();
+ template <class U> X g();
+};
+int main() {
+ B b;
+ b.g<char>();
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/cilk-plus/CK/catch_exc.cc b/gcc/testsuite/g++.dg/cilk-plus/CK/catch_exc.cc
index 0633d19..09ddf8b 100644
--- a/gcc/testsuite/g++.dg/cilk-plus/CK/catch_exc.cc
+++ b/gcc/testsuite/g++.dg/cilk-plus/CK/catch_exc.cc
@@ -10,6 +10,16 @@
#endif
#include <cstdlib>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int __cilkrts_set_param (const char *, const char *);
+
+#ifdef __cplusplus
+}
+#endif
+
void func(int volatile* steal_me)
{
@@ -59,6 +69,10 @@ void my_test()
int main()
{
+ /* Ensure more than one worker. */
+ if (__cilkrts_set_param("nworkers", "2") != 0)
+ __builtin_abort();
+
my_test();
#if HAVE_IO
printf("PASSED\n");
diff --git a/gcc/testsuite/g++.dg/concepts/alias1.C b/gcc/testsuite/g++.dg/concepts/alias1.C
index 03b3cea..fdd54bd 100644
--- a/gcc/testsuite/g++.dg/concepts/alias1.C
+++ b/gcc/testsuite/g++.dg/concepts/alias1.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/alias2.C b/gcc/testsuite/g++.dg/concepts/alias2.C
index d81188e..7879d44 100644
--- a/gcc/testsuite/g++.dg/concepts/alias2.C
+++ b/gcc/testsuite/g++.dg/concepts/alias2.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/alias3.C b/gcc/testsuite/g++.dg/concepts/alias3.C
index e6ab669..a8f0f67 100644
--- a/gcc/testsuite/g++.dg/concepts/alias3.C
+++ b/gcc/testsuite/g++.dg/concepts/alias3.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/alias4.C b/gcc/testsuite/g++.dg/concepts/alias4.C
index 4227a44..8ffa0a1 100644
--- a/gcc/testsuite/g++.dg/concepts/alias4.C
+++ b/gcc/testsuite/g++.dg/concepts/alias4.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/auto1.C b/gcc/testsuite/g++.dg/concepts/auto1.C
index 6068e4c..be9237d 100644
--- a/gcc/testsuite/g++.dg/concepts/auto1.C
+++ b/gcc/testsuite/g++.dg/concepts/auto1.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template <class T1, class T2> class A { };
diff --git a/gcc/testsuite/g++.dg/concepts/auto3.C b/gcc/testsuite/g++.dg/concepts/auto3.C
index 1cface7..e1a4d73 100644
--- a/gcc/testsuite/g++.dg/concepts/auto3.C
+++ b/gcc/testsuite/g++.dg/concepts/auto3.C
@@ -1,4 +1,4 @@
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
template <class...> class tuple {};
diff --git a/gcc/testsuite/g++.dg/concepts/class.C b/gcc/testsuite/g++.dg/concepts/class.C
index ea74a54..0611057 100644
--- a/gcc/testsuite/g++.dg/concepts/class.C
+++ b/gcc/testsuite/g++.dg/concepts/class.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool Class() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/class1.C b/gcc/testsuite/g++.dg/concepts/class1.C
index b213cb5..a2c4f5d 100644
--- a/gcc/testsuite/g++.dg/concepts/class1.C
+++ b/gcc/testsuite/g++.dg/concepts/class1.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/class2.C b/gcc/testsuite/g++.dg/concepts/class2.C
index 2c3ea44..4b8706d 100644
--- a/gcc/testsuite/g++.dg/concepts/class2.C
+++ b/gcc/testsuite/g++.dg/concepts/class2.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/class3.C b/gcc/testsuite/g++.dg/concepts/class3.C
index e3a1d2a..c25c801 100644
--- a/gcc/testsuite/g++.dg/concepts/class3.C
+++ b/gcc/testsuite/g++.dg/concepts/class3.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/class4.C b/gcc/testsuite/g++.dg/concepts/class4.C
index 7ba8250..af6db25 100644
--- a/gcc/testsuite/g++.dg/concepts/class4.C
+++ b/gcc/testsuite/g++.dg/concepts/class4.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool Class() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/class5.C b/gcc/testsuite/g++.dg/concepts/class5.C
index 903bf24..218ec9f 100644
--- a/gcc/testsuite/g++.dg/concepts/class5.C
+++ b/gcc/testsuite/g++.dg/concepts/class5.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool One() { return sizeof(T) >= 4; }
diff --git a/gcc/testsuite/g++.dg/concepts/class6.C b/gcc/testsuite/g++.dg/concepts/class6.C
index fe6b42d..4a3a3d7 100644
--- a/gcc/testsuite/g++.dg/concepts/class6.C
+++ b/gcc/testsuite/g++.dg/concepts/class6.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool One() { return sizeof(T) >= 4; }
diff --git a/gcc/testsuite/g++.dg/concepts/constrained-parm.C b/gcc/testsuite/g++.dg/concepts/constrained-parm.C
index fd21c43..2650cae 100644
--- a/gcc/testsuite/g++.dg/concepts/constrained-parm.C
+++ b/gcc/testsuite/g++.dg/concepts/constrained-parm.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/decl-diagnose.C b/gcc/testsuite/g++.dg/concepts/decl-diagnose.C
index 67b56f9..9829ba1 100644
--- a/gcc/testsuite/g++.dg/concepts/decl-diagnose.C
+++ b/gcc/testsuite/g++.dg/concepts/decl-diagnose.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
typedef concept int CINT; // { dg-error "'concept' cannot appear in a typedef declaration" }
diff --git a/gcc/testsuite/g++.dg/concepts/deduction-constraint1.C b/gcc/testsuite/g++.dg/concepts/deduction-constraint1.C
index 6ff3be9..dfb0c6e 100644
--- a/gcc/testsuite/g++.dg/concepts/deduction-constraint1.C
+++ b/gcc/testsuite/g++.dg/concepts/deduction-constraint1.C
@@ -1,5 +1,5 @@
// PR c++/67007
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
template <class U>
concept bool A =
diff --git a/gcc/testsuite/g++.dg/concepts/diagnostic1.C b/gcc/testsuite/g++.dg/concepts/diagnostic1.C
index 7c360cc..aa98ffa 100644
--- a/gcc/testsuite/g++.dg/concepts/diagnostic1.C
+++ b/gcc/testsuite/g++.dg/concepts/diagnostic1.C
@@ -1,5 +1,5 @@
// PR c++/67159
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
template <class T>
concept bool R = requires (T& t) {
diff --git a/gcc/testsuite/g++.dg/concepts/disjunction1.C b/gcc/testsuite/g++.dg/concepts/disjunction1.C
index f67fa0b..24472cc 100644
--- a/gcc/testsuite/g++.dg/concepts/disjunction1.C
+++ b/gcc/testsuite/g++.dg/concepts/disjunction1.C
@@ -1,5 +1,5 @@
// PR c++/66962
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
template <typename> struct remove_cv;
template <typename> struct is_reference;
diff --git a/gcc/testsuite/g++.dg/concepts/dr1430.C b/gcc/testsuite/g++.dg/concepts/dr1430.C
index 7f857fe..3a7ba03 100644
--- a/gcc/testsuite/g++.dg/concepts/dr1430.C
+++ b/gcc/testsuite/g++.dg/concepts/dr1430.C
@@ -1,5 +1,5 @@
// PR c++/66092
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
#include <type_traits>
diff --git a/gcc/testsuite/g++.dg/concepts/equiv.C b/gcc/testsuite/g++.dg/concepts/equiv.C
index c2ac741..11e232f 100644
--- a/gcc/testsuite/g++.dg/concepts/equiv.C
+++ b/gcc/testsuite/g++.dg/concepts/equiv.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
// Check equivalence of short- and longhand declarations.
diff --git a/gcc/testsuite/g++.dg/concepts/equiv2.C b/gcc/testsuite/g++.dg/concepts/equiv2.C
index 675fe21..24d419b 100644
--- a/gcc/testsuite/g++.dg/concepts/equiv2.C
+++ b/gcc/testsuite/g++.dg/concepts/equiv2.C
@@ -1,5 +1,5 @@
// { dg-do run }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
// template<typename T>
diff --git a/gcc/testsuite/g++.dg/concepts/explicit-inst1.C b/gcc/testsuite/g++.dg/concepts/explicit-inst1.C
index 3079ca5..89eeb15 100644
--- a/gcc/testsuite/g++.dg/concepts/explicit-inst1.C
+++ b/gcc/testsuite/g++.dg/concepts/explicit-inst1.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/explicit-inst2.C b/gcc/testsuite/g++.dg/concepts/explicit-inst2.C
index 5e75f4f..0319756 100644
--- a/gcc/testsuite/g++.dg/concepts/explicit-inst2.C
+++ b/gcc/testsuite/g++.dg/concepts/explicit-inst2.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/explicit-inst3.C b/gcc/testsuite/g++.dg/concepts/explicit-inst3.C
index a471657..177fc6c 100644
--- a/gcc/testsuite/g++.dg/concepts/explicit-inst3.C
+++ b/gcc/testsuite/g++.dg/concepts/explicit-inst3.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/explicit-inst4.C b/gcc/testsuite/g++.dg/concepts/explicit-inst4.C
index b075c100..cf0d898 100644
--- a/gcc/testsuite/g++.dg/concepts/explicit-inst4.C
+++ b/gcc/testsuite/g++.dg/concepts/explicit-inst4.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/explicit-spec1.C b/gcc/testsuite/g++.dg/concepts/explicit-spec1.C
index 6316410..c6f559c 100644
--- a/gcc/testsuite/g++.dg/concepts/explicit-spec1.C
+++ b/gcc/testsuite/g++.dg/concepts/explicit-spec1.C
@@ -1,5 +1,5 @@
// { dg-do run }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
#include <cassert>
diff --git a/gcc/testsuite/g++.dg/concepts/explicit-spec2.C b/gcc/testsuite/g++.dg/concepts/explicit-spec2.C
index 4f19624..8fa7e8a 100644
--- a/gcc/testsuite/g++.dg/concepts/explicit-spec2.C
+++ b/gcc/testsuite/g++.dg/concepts/explicit-spec2.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/explicit-spec3.C b/gcc/testsuite/g++.dg/concepts/explicit-spec3.C
index 29546b3..6294cef 100644
--- a/gcc/testsuite/g++.dg/concepts/explicit-spec3.C
+++ b/gcc/testsuite/g++.dg/concepts/explicit-spec3.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/explicit-spec4.C b/gcc/testsuite/g++.dg/concepts/explicit-spec4.C
index e9aacd5..16698cb 100644
--- a/gcc/testsuite/g++.dg/concepts/explicit-spec4.C
+++ b/gcc/testsuite/g++.dg/concepts/explicit-spec4.C
@@ -1,5 +1,5 @@
// { dg-do run }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
#include <cassert>
diff --git a/gcc/testsuite/g++.dg/concepts/explicit-spec5.C b/gcc/testsuite/g++.dg/concepts/explicit-spec5.C
index 8047278..e889c21 100644
--- a/gcc/testsuite/g++.dg/concepts/explicit-spec5.C
+++ b/gcc/testsuite/g++.dg/concepts/explicit-spec5.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
#include <cassert>
diff --git a/gcc/testsuite/g++.dg/concepts/explicit-spec6.C b/gcc/testsuite/g++.dg/concepts/explicit-spec6.C
index 3eba9ff..0bf7640 100644
--- a/gcc/testsuite/g++.dg/concepts/explicit-spec6.C
+++ b/gcc/testsuite/g++.dg/concepts/explicit-spec6.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
struct A {
diff --git a/gcc/testsuite/g++.dg/concepts/expression.C b/gcc/testsuite/g++.dg/concepts/expression.C
index 5ae04e4..de68ef8 100644
--- a/gcc/testsuite/g++.dg/concepts/expression.C
+++ b/gcc/testsuite/g++.dg/concepts/expression.C
@@ -1,5 +1,5 @@
// { dg-do run }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
#include <cassert>
#include <iostream>
diff --git a/gcc/testsuite/g++.dg/concepts/expression2.C b/gcc/testsuite/g++.dg/concepts/expression2.C
index 40c2034..ebdadc2 100644
--- a/gcc/testsuite/g++.dg/concepts/expression2.C
+++ b/gcc/testsuite/g++.dg/concepts/expression2.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C1()
diff --git a/gcc/testsuite/g++.dg/concepts/expression3.C b/gcc/testsuite/g++.dg/concepts/expression3.C
index eb8406f..77b414e 100644
--- a/gcc/testsuite/g++.dg/concepts/expression3.C
+++ b/gcc/testsuite/g++.dg/concepts/expression3.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C()
diff --git a/gcc/testsuite/g++.dg/concepts/feature-macro.C b/gcc/testsuite/g++.dg/concepts/feature-macro.C
index 7bc7875..d8ea369 100644
--- a/gcc/testsuite/g++.dg/concepts/feature-macro.C
+++ b/gcc/testsuite/g++.dg/concepts/feature-macro.C
@@ -1,4 +1,4 @@
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
#ifndef __cpp_concepts
#error __cpp_concepts not defined
diff --git a/gcc/testsuite/g++.dg/concepts/fn-concept1.C b/gcc/testsuite/g++.dg/concepts/fn-concept1.C
index 385dcbc..4a8437f 100644
--- a/gcc/testsuite/g++.dg/concepts/fn-concept1.C
+++ b/gcc/testsuite/g++.dg/concepts/fn-concept1.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool Tuple() { // { dg-error "multiple statements" }
diff --git a/gcc/testsuite/g++.dg/concepts/fn-concept2.C b/gcc/testsuite/g++.dg/concepts/fn-concept2.C
index 092c91c5..86ba936 100644
--- a/gcc/testsuite/g++.dg/concepts/fn-concept2.C
+++ b/gcc/testsuite/g++.dg/concepts/fn-concept2.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept auto C1() { return 0; } // { dg-error "deduced return type" }
diff --git a/gcc/testsuite/g++.dg/concepts/fn1.C b/gcc/testsuite/g++.dg/concepts/fn1.C
index b2bdaf9..c4f9f55 100644
--- a/gcc/testsuite/g++.dg/concepts/fn1.C
+++ b/gcc/testsuite/g++.dg/concepts/fn1.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/fn10.C b/gcc/testsuite/g++.dg/concepts/fn10.C
index f4cd4c5..859c1d5 100644
--- a/gcc/testsuite/g++.dg/concepts/fn10.C
+++ b/gcc/testsuite/g++.dg/concepts/fn10.C
@@ -1,5 +1,5 @@
// { dg-do compile }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
// Test that constraint satisfaction checks work even when
// processing template declarations.
diff --git a/gcc/testsuite/g++.dg/concepts/fn2.C b/gcc/testsuite/g++.dg/concepts/fn2.C
index 0aee852..51a3fb5 100644
--- a/gcc/testsuite/g++.dg/concepts/fn2.C
+++ b/gcc/testsuite/g++.dg/concepts/fn2.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/fn3.C b/gcc/testsuite/g++.dg/concepts/fn3.C
index 06402e0..ef704f7 100644
--- a/gcc/testsuite/g++.dg/concepts/fn3.C
+++ b/gcc/testsuite/g++.dg/concepts/fn3.C
@@ -1,5 +1,5 @@
// { dg-do run }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
#include <cassert>
diff --git a/gcc/testsuite/g++.dg/concepts/fn4.C b/gcc/testsuite/g++.dg/concepts/fn4.C
index 5ced6a7..9fa5790 100644
--- a/gcc/testsuite/g++.dg/concepts/fn4.C
+++ b/gcc/testsuite/g++.dg/concepts/fn4.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/fn5.C b/gcc/testsuite/g++.dg/concepts/fn5.C
index b3c3f70..dd9a19e 100644
--- a/gcc/testsuite/g++.dg/concepts/fn5.C
+++ b/gcc/testsuite/g++.dg/concepts/fn5.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
// Check shorthand notation.
diff --git a/gcc/testsuite/g++.dg/concepts/fn6.C b/gcc/testsuite/g++.dg/concepts/fn6.C
index 73ef19a..f6f165e 100644
--- a/gcc/testsuite/g++.dg/concepts/fn6.C
+++ b/gcc/testsuite/g++.dg/concepts/fn6.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
// Redefinition errors.
diff --git a/gcc/testsuite/g++.dg/concepts/fn7.C b/gcc/testsuite/g++.dg/concepts/fn7.C
index 2abd34a..dd16a9a 100644
--- a/gcc/testsuite/g++.dg/concepts/fn7.C
+++ b/gcc/testsuite/g++.dg/concepts/fn7.C
@@ -1,5 +1,5 @@
// { dg-do link }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
// FIXME: What is this actually testing?
diff --git a/gcc/testsuite/g++.dg/concepts/fn8.C b/gcc/testsuite/g++.dg/concepts/fn8.C
index 71141f6..e7481be 100644
--- a/gcc/testsuite/g++.dg/concepts/fn8.C
+++ b/gcc/testsuite/g++.dg/concepts/fn8.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool Class() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/fn9.C b/gcc/testsuite/g++.dg/concepts/fn9.C
index b7ac4e1..c135bd7 100644
--- a/gcc/testsuite/g++.dg/concepts/fn9.C
+++ b/gcc/testsuite/g++.dg/concepts/fn9.C
@@ -1,5 +1,5 @@
// { dg-do run }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
#include <cassert>
diff --git a/gcc/testsuite/g++.dg/concepts/friend1.C b/gcc/testsuite/g++.dg/concepts/friend1.C
index 286e769..5c418cb 100644
--- a/gcc/testsuite/g++.dg/concepts/friend1.C
+++ b/gcc/testsuite/g++.dg/concepts/friend1.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool Eq() { return requires(T t) { t == t; }; }
diff --git a/gcc/testsuite/g++.dg/concepts/friend2.C b/gcc/testsuite/g++.dg/concepts/friend2.C
index 38b230c..6268801 100644
--- a/gcc/testsuite/g++.dg/concepts/friend2.C
+++ b/gcc/testsuite/g++.dg/concepts/friend2.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool Eq() { return requires(T t) { t == t; }; }
diff --git a/gcc/testsuite/g++.dg/concepts/generic-fn-err.C b/gcc/testsuite/g++.dg/concepts/generic-fn-err.C
index 1e97510..03a47d5 100644
--- a/gcc/testsuite/g++.dg/concepts/generic-fn-err.C
+++ b/gcc/testsuite/g++.dg/concepts/generic-fn-err.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/generic-fn.C b/gcc/testsuite/g++.dg/concepts/generic-fn.C
index 778356d..d74ea21 100644
--- a/gcc/testsuite/g++.dg/concepts/generic-fn.C
+++ b/gcc/testsuite/g++.dg/concepts/generic-fn.C
@@ -1,5 +1,5 @@
// { dg-do run }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
#include <cassert>
#include <type_traits>
diff --git a/gcc/testsuite/g++.dg/concepts/iconv1.C b/gcc/testsuite/g++.dg/concepts/iconv1.C
index c4dd38f..28f3566 100644
--- a/gcc/testsuite/g++.dg/concepts/iconv1.C
+++ b/gcc/testsuite/g++.dg/concepts/iconv1.C
@@ -1,5 +1,5 @@
// PR c++/67240
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
int foo(int x)
{
diff --git a/gcc/testsuite/g++.dg/concepts/inherit-ctor1.C b/gcc/testsuite/g++.dg/concepts/inherit-ctor1.C
index 29433ad..6f5115c 100644
--- a/gcc/testsuite/g++.dg/concepts/inherit-ctor1.C
+++ b/gcc/testsuite/g++.dg/concepts/inherit-ctor1.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/inherit-ctor2.C b/gcc/testsuite/g++.dg/concepts/inherit-ctor2.C
index 4f39203..435745a 100644
--- a/gcc/testsuite/g++.dg/concepts/inherit-ctor2.C
+++ b/gcc/testsuite/g++.dg/concepts/inherit-ctor2.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/inherit-ctor3.C b/gcc/testsuite/g++.dg/concepts/inherit-ctor3.C
index 3d0ddf2..07499bb 100644
--- a/gcc/testsuite/g++.dg/concepts/inherit-ctor3.C
+++ b/gcc/testsuite/g++.dg/concepts/inherit-ctor3.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/inherit-ctor4.C b/gcc/testsuite/g++.dg/concepts/inherit-ctor4.C
index cd9565f..4c53205 100644
--- a/gcc/testsuite/g++.dg/concepts/inherit-ctor4.C
+++ b/gcc/testsuite/g++.dg/concepts/inherit-ctor4.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/intro1.C b/gcc/testsuite/g++.dg/concepts/intro1.C
index 1b5f5d1..5f036c4 100644
--- a/gcc/testsuite/g++.dg/concepts/intro1.C
+++ b/gcc/testsuite/g++.dg/concepts/intro1.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C = __is_class(T);
diff --git a/gcc/testsuite/g++.dg/concepts/intro2.C b/gcc/testsuite/g++.dg/concepts/intro2.C
index 91a1cac..1db1d7a 100644
--- a/gcc/testsuite/g++.dg/concepts/intro2.C
+++ b/gcc/testsuite/g++.dg/concepts/intro2.C
@@ -1,5 +1,5 @@
// { dg-do run }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
#include <cassert>
diff --git a/gcc/testsuite/g++.dg/concepts/intro3.C b/gcc/testsuite/g++.dg/concepts/intro3.C
index 5dd95c6..3cb3ecb 100644
--- a/gcc/testsuite/g++.dg/concepts/intro3.C
+++ b/gcc/testsuite/g++.dg/concepts/intro3.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename ... T>
concept bool C1 = true;
diff --git a/gcc/testsuite/g++.dg/concepts/intro4.C b/gcc/testsuite/g++.dg/concepts/intro4.C
index 6d8aec3..1821291 100644
--- a/gcc/testsuite/g++.dg/concepts/intro4.C
+++ b/gcc/testsuite/g++.dg/concepts/intro4.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename ... T>
concept bool C1 = true;
diff --git a/gcc/testsuite/g++.dg/concepts/intro5.C b/gcc/testsuite/g++.dg/concepts/intro5.C
index 64771cd..31924f9 100644
--- a/gcc/testsuite/g++.dg/concepts/intro5.C
+++ b/gcc/testsuite/g++.dg/concepts/intro5.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T, typename U = int>
concept bool C()
diff --git a/gcc/testsuite/g++.dg/concepts/intro6.C b/gcc/testsuite/g++.dg/concepts/intro6.C
index 4e168ef..f8ed666 100644
--- a/gcc/testsuite/g++.dg/concepts/intro6.C
+++ b/gcc/testsuite/g++.dg/concepts/intro6.C
@@ -1,5 +1,5 @@
// PR c++/67003
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
namespace X {
template<class>
diff --git a/gcc/testsuite/g++.dg/concepts/intro7.C b/gcc/testsuite/g++.dg/concepts/intro7.C
index d92eafc..914c5fd 100644
--- a/gcc/testsuite/g++.dg/concepts/intro7.C
+++ b/gcc/testsuite/g++.dg/concepts/intro7.C
@@ -1,5 +1,5 @@
// PR c++/66985
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template <template <class> class T>
concept bool _Valid = requires { typename T<int>; };
diff --git a/gcc/testsuite/g++.dg/concepts/member-concept.C b/gcc/testsuite/g++.dg/concepts/member-concept.C
index 46404e3..2b06046 100644
--- a/gcc/testsuite/g++.dg/concepts/member-concept.C
+++ b/gcc/testsuite/g++.dg/concepts/member-concept.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
struct Base {
template<typename T>
diff --git a/gcc/testsuite/g++.dg/concepts/memfun-err.C b/gcc/testsuite/g++.dg/concepts/memfun-err.C
index a62fe5e..e44273c 100644
--- a/gcc/testsuite/g++.dg/concepts/memfun-err.C
+++ b/gcc/testsuite/g++.dg/concepts/memfun-err.C
@@ -1,5 +1,5 @@
// { dg-do run}
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
diff --git a/gcc/testsuite/g++.dg/concepts/memfun.C b/gcc/testsuite/g++.dg/concepts/memfun.C
index a96c018..523410c 100644
--- a/gcc/testsuite/g++.dg/concepts/memfun.C
+++ b/gcc/testsuite/g++.dg/concepts/memfun.C
@@ -1,5 +1,5 @@
// { dg-do run}
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
#include <cassert>
diff --git a/gcc/testsuite/g++.dg/concepts/partial-concept-id1.C b/gcc/testsuite/g++.dg/concepts/partial-concept-id1.C
index 114c12f..117400c 100644
--- a/gcc/testsuite/g++.dg/concepts/partial-concept-id1.C
+++ b/gcc/testsuite/g++.dg/concepts/partial-concept-id1.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool Type() { return true; }
diff --git a/gcc/testsuite/g++.dg/concepts/partial-concept-id2.C b/gcc/testsuite/g++.dg/concepts/partial-concept-id2.C
index fb75448..2e6866e 100644
--- a/gcc/testsuite/g++.dg/concepts/partial-concept-id2.C
+++ b/gcc/testsuite/g++.dg/concepts/partial-concept-id2.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
// Make sure that we check partial concept ids
// with variable concepts.
diff --git a/gcc/testsuite/g++.dg/concepts/partial-spec.C b/gcc/testsuite/g++.dg/concepts/partial-spec.C
index fe612d4..5db9a58 100644
--- a/gcc/testsuite/g++.dg/concepts/partial-spec.C
+++ b/gcc/testsuite/g++.dg/concepts/partial-spec.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
// Check that constraints don't break unconstrained partial
// specializations.
diff --git a/gcc/testsuite/g++.dg/concepts/partial-spec2.C b/gcc/testsuite/g++.dg/concepts/partial-spec2.C
index db75455..bc7621b 100644
--- a/gcc/testsuite/g++.dg/concepts/partial-spec2.C
+++ b/gcc/testsuite/g++.dg/concepts/partial-spec2.C
@@ -1,5 +1,5 @@
// PR c++/67084
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
template <class T>
constexpr bool p = false;
diff --git a/gcc/testsuite/g++.dg/concepts/partial-spec3.C b/gcc/testsuite/g++.dg/concepts/partial-spec3.C
index d73d787..9387ce00a 100644
--- a/gcc/testsuite/g++.dg/concepts/partial-spec3.C
+++ b/gcc/testsuite/g++.dg/concepts/partial-spec3.C
@@ -1,4 +1,4 @@
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
template <class T> struct A { };
template <class T> requires false struct A<T*> { };
diff --git a/gcc/testsuite/g++.dg/concepts/partial-spec4.C b/gcc/testsuite/g++.dg/concepts/partial-spec4.C
index d4b8e9c..80e41ab 100644
--- a/gcc/testsuite/g++.dg/concepts/partial-spec4.C
+++ b/gcc/testsuite/g++.dg/concepts/partial-spec4.C
@@ -1,4 +1,4 @@
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
template <class T> concept bool is_int = __is_same_as(T,int);
diff --git a/gcc/testsuite/g++.dg/concepts/partial-spec5.C b/gcc/testsuite/g++.dg/concepts/partial-spec5.C
index dcf167b..32a5eae 100644
--- a/gcc/testsuite/g++.dg/concepts/partial-spec5.C
+++ b/gcc/testsuite/g++.dg/concepts/partial-spec5.C
@@ -1,5 +1,5 @@
// PR c++/67138
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
template <class T>
concept bool _Auto = true;
diff --git a/gcc/testsuite/g++.dg/concepts/partial-spec6.C b/gcc/testsuite/g++.dg/concepts/partial-spec6.C
index 2196fcd..50ef289 100644
--- a/gcc/testsuite/g++.dg/concepts/partial-spec6.C
+++ b/gcc/testsuite/g++.dg/concepts/partial-spec6.C
@@ -1,5 +1,5 @@
// PR c++/67152
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
template <class T>
concept bool HasType = requires { typename T::type; };
diff --git a/gcc/testsuite/g++.dg/concepts/placeholder1.C b/gcc/testsuite/g++.dg/concepts/placeholder1.C
index 0b5a7cf..757bcef9b 100644
--- a/gcc/testsuite/g++.dg/concepts/placeholder1.C
+++ b/gcc/testsuite/g++.dg/concepts/placeholder1.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T, typename U>
struct is_same
diff --git a/gcc/testsuite/g++.dg/concepts/placeholder2.C b/gcc/testsuite/g++.dg/concepts/placeholder2.C
index 8165c81..cf2013e 100644
--- a/gcc/testsuite/g++.dg/concepts/placeholder2.C
+++ b/gcc/testsuite/g++.dg/concepts/placeholder2.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
// Check argument deduction constraints.
// TODO: We shoul have more of these...
diff --git a/gcc/testsuite/g++.dg/concepts/placeholder3.C b/gcc/testsuite/g++.dg/concepts/placeholder3.C
index bd89551..208fc29 100644
--- a/gcc/testsuite/g++.dg/concepts/placeholder3.C
+++ b/gcc/testsuite/g++.dg/concepts/placeholder3.C
@@ -1,5 +1,5 @@
// PR c++/66218
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template <class T, class U>
concept bool Same = __is_same_as(T, U);
diff --git a/gcc/testsuite/g++.dg/concepts/placeholder4.C b/gcc/testsuite/g++.dg/concepts/placeholder4.C
index e34fc94..2fb4758 100644
--- a/gcc/testsuite/g++.dg/concepts/placeholder4.C
+++ b/gcc/testsuite/g++.dg/concepts/placeholder4.C
@@ -1,5 +1,5 @@
// PR c++/66218
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template <class T, class U>
concept bool Same = __is_same_as(T, U);
diff --git a/gcc/testsuite/g++.dg/concepts/placeholder5.C b/gcc/testsuite/g++.dg/concepts/placeholder5.C
index 6aaf57b..e1d3092 100644
--- a/gcc/testsuite/g++.dg/concepts/placeholder5.C
+++ b/gcc/testsuite/g++.dg/concepts/placeholder5.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template <class T, class U>
concept bool Same = __is_same_as(T, U);
diff --git a/gcc/testsuite/g++.dg/concepts/placeholder6.C b/gcc/testsuite/g++.dg/concepts/placeholder6.C
index 7f2e67a..ee218fd 100644
--- a/gcc/testsuite/g++.dg/concepts/placeholder6.C
+++ b/gcc/testsuite/g++.dg/concepts/placeholder6.C
@@ -1,4 +1,4 @@
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
template <int I> struct B { static const int i = I; };
template <int I> concept bool Few = I < 10;
diff --git a/gcc/testsuite/g++.dg/concepts/pr65552.C b/gcc/testsuite/g++.dg/concepts/pr65552.C
index c72e6c6..c1cc0b1 100644
--- a/gcc/testsuite/g++.dg/concepts/pr65552.C
+++ b/gcc/testsuite/g++.dg/concepts/pr65552.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool Concept() {
diff --git a/gcc/testsuite/g++.dg/concepts/pr65575.C b/gcc/testsuite/g++.dg/concepts/pr65575.C
index fa24b7b..18e8059 100644
--- a/gcc/testsuite/g++.dg/concepts/pr65575.C
+++ b/gcc/testsuite/g++.dg/concepts/pr65575.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C = false;
diff --git a/gcc/testsuite/g++.dg/concepts/pr65634.C b/gcc/testsuite/g++.dg/concepts/pr65634.C
index 31dc87a..df64a3f 100644
--- a/gcc/testsuite/g++.dg/concepts/pr65634.C
+++ b/gcc/testsuite/g++.dg/concepts/pr65634.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C1() {
diff --git a/gcc/testsuite/g++.dg/concepts/pr65636.C b/gcc/testsuite/g++.dg/concepts/pr65636.C
index 8b6f2a1..ddeef82 100644
--- a/gcc/testsuite/g++.dg/concepts/pr65636.C
+++ b/gcc/testsuite/g++.dg/concepts/pr65636.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
using TD = int;
diff --git a/gcc/testsuite/g++.dg/concepts/pr65681.C b/gcc/testsuite/g++.dg/concepts/pr65681.C
index bdbbd66..fcbbab3 100644
--- a/gcc/testsuite/g++.dg/concepts/pr65681.C
+++ b/gcc/testsuite/g++.dg/concepts/pr65681.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C()
diff --git a/gcc/testsuite/g++.dg/concepts/pr65848.C b/gcc/testsuite/g++.dg/concepts/pr65848.C
index d0bb6a2..4affa23 100644
--- a/gcc/testsuite/g++.dg/concepts/pr65848.C
+++ b/gcc/testsuite/g++.dg/concepts/pr65848.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
// Performance test... This should be fast.
diff --git a/gcc/testsuite/g++.dg/concepts/pr65854.C b/gcc/testsuite/g++.dg/concepts/pr65854.C
index 4b0befa..c615ed7 100644
--- a/gcc/testsuite/g++.dg/concepts/pr65854.C
+++ b/gcc/testsuite/g++.dg/concepts/pr65854.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
// Handle alias templates in type requirements.
diff --git a/gcc/testsuite/g++.dg/concepts/pr66091.C b/gcc/testsuite/g++.dg/concepts/pr66091.C
index ee9d115..b53f64c 100644
--- a/gcc/testsuite/g++.dg/concepts/pr66091.C
+++ b/gcc/testsuite/g++.dg/concepts/pr66091.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C1()
diff --git a/gcc/testsuite/g++.dg/concepts/pr67249.C b/gcc/testsuite/g++.dg/concepts/pr67249.C
index cb0445d..9cfada5 100644
--- a/gcc/testsuite/g++.dg/concepts/pr67249.C
+++ b/gcc/testsuite/g++.dg/concepts/pr67249.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<class T> concept bool C1 = true;
template<class A, class B> struct Pair {};
diff --git a/gcc/testsuite/g++.dg/concepts/pr68434.C b/gcc/testsuite/g++.dg/concepts/pr68434.C
index d5f901a..ece5bb7 100644
--- a/gcc/testsuite/g++.dg/concepts/pr68434.C
+++ b/gcc/testsuite/g++.dg/concepts/pr68434.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template <class>
concept bool C1 () {
diff --git a/gcc/testsuite/g++.dg/concepts/pr68683.C b/gcc/testsuite/g++.dg/concepts/pr68683.C
index a0d8fcf..eef1b33 100644
--- a/gcc/testsuite/g++.dg/concepts/pr68683.C
+++ b/gcc/testsuite/g++.dg/concepts/pr68683.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template <typename, typename>
struct is_same {
diff --git a/gcc/testsuite/g++.dg/concepts/req-neg1.C b/gcc/testsuite/g++.dg/concepts/req-neg1.C
index 0b7520e..6c80d81 100644
--- a/gcc/testsuite/g++.dg/concepts/req-neg1.C
+++ b/gcc/testsuite/g++.dg/concepts/req-neg1.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
void f1(int a) requires true; // OK
auto f2(int a) -> bool requires true; // OK
diff --git a/gcc/testsuite/g++.dg/concepts/req1.C b/gcc/testsuite/g++.dg/concepts/req1.C
index 02d5de0..0636f1d 100644
--- a/gcc/testsuite/g++.dg/concepts/req1.C
+++ b/gcc/testsuite/g++.dg/concepts/req1.C
@@ -1,5 +1,5 @@
// { dg-do compile }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool Class () { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/req10.C b/gcc/testsuite/g++.dg/concepts/req10.C
index bd3b4e3..0352a08 100644
--- a/gcc/testsuite/g++.dg/concepts/req10.C
+++ b/gcc/testsuite/g++.dg/concepts/req10.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
// Test that standard conversions are checked with
// implicit conversion constraints.
diff --git a/gcc/testsuite/g++.dg/concepts/req11.C b/gcc/testsuite/g++.dg/concepts/req11.C
index 3e21c11..1a259e8 100644
--- a/gcc/testsuite/g++.dg/concepts/req11.C
+++ b/gcc/testsuite/g++.dg/concepts/req11.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
// Check that we can evaluate constant requires-expressions
// as constant expressions, for the curious case when they
diff --git a/gcc/testsuite/g++.dg/concepts/req12.C b/gcc/testsuite/g++.dg/concepts/req12.C
index 7b23d11..f285514 100644
--- a/gcc/testsuite/g++.dg/concepts/req12.C
+++ b/gcc/testsuite/g++.dg/concepts/req12.C
@@ -1,5 +1,5 @@
// PR c++/66218
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
#include <type_traits>
diff --git a/gcc/testsuite/g++.dg/concepts/req13.C b/gcc/testsuite/g++.dg/concepts/req13.C
index 54fcd8b..559c128 100644
--- a/gcc/testsuite/g++.dg/concepts/req13.C
+++ b/gcc/testsuite/g++.dg/concepts/req13.C
@@ -1,5 +1,5 @@
// PR c++/66758
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template <class T, class...Args>
concept bool Constructible =
diff --git a/gcc/testsuite/g++.dg/concepts/req14.C b/gcc/testsuite/g++.dg/concepts/req14.C
index e86281a..de7efcd 100644
--- a/gcc/testsuite/g++.dg/concepts/req14.C
+++ b/gcc/testsuite/g++.dg/concepts/req14.C
@@ -1,5 +1,5 @@
// PR c++/66758
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template <class T, class U>
concept bool C = requires (T t, U u) { t + u; };
diff --git a/gcc/testsuite/g++.dg/concepts/req15.C b/gcc/testsuite/g++.dg/concepts/req15.C
index 09ebf89..537669b 100644
--- a/gcc/testsuite/g++.dg/concepts/req15.C
+++ b/gcc/testsuite/g++.dg/concepts/req15.C
@@ -1,5 +1,5 @@
// PR c++/66832
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template <class T, class U, unsigned N>
requires requires (T& t, U &u) { t.foo(); u.foo(); }
diff --git a/gcc/testsuite/g++.dg/concepts/req16.C b/gcc/testsuite/g++.dg/concepts/req16.C
index 67ae5b5..2704c38 100644
--- a/gcc/testsuite/g++.dg/concepts/req16.C
+++ b/gcc/testsuite/g++.dg/concepts/req16.C
@@ -1,5 +1,5 @@
// PR c++/66988
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
#include <type_traits>
diff --git a/gcc/testsuite/g++.dg/concepts/req17.C b/gcc/testsuite/g++.dg/concepts/req17.C
index 48bd0a8..af622e2 100644
--- a/gcc/testsuite/g++.dg/concepts/req17.C
+++ b/gcc/testsuite/g++.dg/concepts/req17.C
@@ -1,5 +1,5 @@
// PR c++/67018
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template <typename T>
constexpr bool Val = true;
diff --git a/gcc/testsuite/g++.dg/concepts/req18.C b/gcc/testsuite/g++.dg/concepts/req18.C
index 9a47437..0b6848b 100644
--- a/gcc/testsuite/g++.dg/concepts/req18.C
+++ b/gcc/testsuite/g++.dg/concepts/req18.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template <class> struct all_same {
static constexpr bool value = 1;
diff --git a/gcc/testsuite/g++.dg/concepts/req2.C b/gcc/testsuite/g++.dg/concepts/req2.C
index a28f30b..b1258c4 100644
--- a/gcc/testsuite/g++.dg/concepts/req2.C
+++ b/gcc/testsuite/g++.dg/concepts/req2.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool Class () { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/req3.C b/gcc/testsuite/g++.dg/concepts/req3.C
index 69581ee..5bc7ac7 100644
--- a/gcc/testsuite/g++.dg/concepts/req3.C
+++ b/gcc/testsuite/g++.dg/concepts/req3.C
@@ -1,5 +1,5 @@
// { dg-do run }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool Class () { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/req4.C b/gcc/testsuite/g++.dg/concepts/req4.C
index 2077834..e7e71a4 100644
--- a/gcc/testsuite/g++.dg/concepts/req4.C
+++ b/gcc/testsuite/g++.dg/concepts/req4.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
struct fool {
constexpr fool operator&&(fool) const { return {}; }
diff --git a/gcc/testsuite/g++.dg/concepts/req5.C b/gcc/testsuite/g++.dg/concepts/req5.C
index c0af1f8..17db0dd 100644
--- a/gcc/testsuite/g++.dg/concepts/req5.C
+++ b/gcc/testsuite/g++.dg/concepts/req5.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
struct fool { };
diff --git a/gcc/testsuite/g++.dg/concepts/req6.C b/gcc/testsuite/g++.dg/concepts/req6.C
index e4f20ec..e8e94c0 100644
--- a/gcc/testsuite/g++.dg/concepts/req6.C
+++ b/gcc/testsuite/g++.dg/concepts/req6.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
struct X { };
int operator==(X, X) { return 0; }
diff --git a/gcc/testsuite/g++.dg/concepts/req7.C b/gcc/testsuite/g++.dg/concepts/req7.C
index 51aba7b..ef25987 100644
--- a/gcc/testsuite/g++.dg/concepts/req7.C
+++ b/gcc/testsuite/g++.dg/concepts/req7.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
#include <vector>
diff --git a/gcc/testsuite/g++.dg/concepts/req8.C b/gcc/testsuite/g++.dg/concepts/req8.C
index 35c0854..4adbc78 100644
--- a/gcc/testsuite/g++.dg/concepts/req8.C
+++ b/gcc/testsuite/g++.dg/concepts/req8.C
@@ -1,5 +1,5 @@
// { dg-do compile }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
// Check that type requirements are normalized correctly.
diff --git a/gcc/testsuite/g++.dg/concepts/req9.C b/gcc/testsuite/g++.dg/concepts/req9.C
index 5654be0..5f66376 100644
--- a/gcc/testsuite/g++.dg/concepts/req9.C
+++ b/gcc/testsuite/g++.dg/concepts/req9.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
struct S1 {};
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm1.C b/gcc/testsuite/g++.dg/concepts/template-parm1.C
index 20a7fb6..101432f 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm1.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm1.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C1 = __is_same_as(T, int);
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm10.C b/gcc/testsuite/g++.dg/concepts/template-parm10.C
index b803289..b61912c 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm10.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm10.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<int N, class T>
concept bool P() { return true; }
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm11.C b/gcc/testsuite/g++.dg/concepts/template-parm11.C
index 95ce784..1f0d91a 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm11.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm11.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool NameProvider()
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm12.C b/gcc/testsuite/g++.dg/concepts/template-parm12.C
index 1639f26..edeeb90 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm12.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm12.C
@@ -1,5 +1,5 @@
// Conceptized version of template/ttp23.C
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template <class T> concept bool Foo = true;
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm2.C b/gcc/testsuite/g++.dg/concepts/template-parm2.C
index ad715e1..146d1c6 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm2.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm2.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C1 = __is_same_as(T, int);
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm3.C b/gcc/testsuite/g++.dg/concepts/template-parm3.C
index e412fb4..5fcd5a2 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm3.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm3.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C1 = __is_same_as(T, int);
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm4.C b/gcc/testsuite/g++.dg/concepts/template-parm4.C
index a29bb11..ac9d2af 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm4.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm4.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C1 = __is_same_as(T, int);
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm5.C b/gcc/testsuite/g++.dg/concepts/template-parm5.C
index f33742b..25bd916 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm5.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm5.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C1 = __is_same_as(T, int);
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm6.C b/gcc/testsuite/g++.dg/concepts/template-parm6.C
index d23f259..e70cdc0 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm6.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm6.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename... Ts> struct are_same;
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm7.C b/gcc/testsuite/g++.dg/concepts/template-parm7.C
index 1086984..3e2a2f2 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm7.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm7.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename... Ts> struct are_same;
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm8.C b/gcc/testsuite/g++.dg/concepts/template-parm8.C
index f604d5a..69a31bc 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm8.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm8.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm9.C b/gcc/testsuite/g++.dg/concepts/template-parm9.C
index 7e68984..06b0f96 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm9.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm9.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/template-template-parm1.C b/gcc/testsuite/g++.dg/concepts/template-template-parm1.C
index 4091284..c2dcc3a 100644
--- a/gcc/testsuite/g++.dg/concepts/template-template-parm1.C
+++ b/gcc/testsuite/g++.dg/concepts/template-template-parm1.C
@@ -1,5 +1,5 @@
// PR c++/66937
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
#include <tuple>
diff --git a/gcc/testsuite/g++.dg/concepts/traits1.C b/gcc/testsuite/g++.dg/concepts/traits1.C
index f07c878..7ccf087 100644
--- a/gcc/testsuite/g++.dg/concepts/traits1.C
+++ b/gcc/testsuite/g++.dg/concepts/traits1.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool Nothrow_assignable() { return __has_nothrow_assign(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/traits2.C b/gcc/testsuite/g++.dg/concepts/traits2.C
index 28ced34..971a67b 100644
--- a/gcc/testsuite/g++.dg/concepts/traits2.C
+++ b/gcc/testsuite/g++.dg/concepts/traits2.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool Nothrow_assignable() { return __has_nothrow_assign(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/var-concept1.C b/gcc/testsuite/g++.dg/concepts/var-concept1.C
index eb8a2b7..b99016f 100644
--- a/gcc/testsuite/g++.dg/concepts/var-concept1.C
+++ b/gcc/testsuite/g++.dg/concepts/var-concept1.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C1 = __is_class(T);
diff --git a/gcc/testsuite/g++.dg/concepts/var-concept2.C b/gcc/testsuite/g++.dg/concepts/var-concept2.C
index 71663bd..21c69dd 100644
--- a/gcc/testsuite/g++.dg/concepts/var-concept2.C
+++ b/gcc/testsuite/g++.dg/concepts/var-concept2.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C1 = __is_class(T);
diff --git a/gcc/testsuite/g++.dg/concepts/var-concept3.C b/gcc/testsuite/g++.dg/concepts/var-concept3.C
index c901028..d27e4fa 100644
--- a/gcc/testsuite/g++.dg/concepts/var-concept3.C
+++ b/gcc/testsuite/g++.dg/concepts/var-concept3.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T>
concept bool C1 = __is_class(T);
diff --git a/gcc/testsuite/g++.dg/concepts/var-concept4.C b/gcc/testsuite/g++.dg/concepts/var-concept4.C
index b398353..1870a42 100644
--- a/gcc/testsuite/g++.dg/concepts/var-concept4.C
+++ b/gcc/testsuite/g++.dg/concepts/var-concept4.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T, typename U>
concept bool Same = __is_same_as(T, U);
diff --git a/gcc/testsuite/g++.dg/concepts/var-concept5.C b/gcc/testsuite/g++.dg/concepts/var-concept5.C
index 13f86dd..ca16332 100644
--- a/gcc/testsuite/g++.dg/concepts/var-concept5.C
+++ b/gcc/testsuite/g++.dg/concepts/var-concept5.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template<typename T1, typename T2>
concept bool C1 = true;
diff --git a/gcc/testsuite/g++.dg/concepts/var-concept6.C b/gcc/testsuite/g++.dg/concepts/var-concept6.C
index 2f775fd..40be4f9 100644
--- a/gcc/testsuite/g++.dg/concepts/var-concept6.C
+++ b/gcc/testsuite/g++.dg/concepts/var-concept6.C
@@ -1,4 +1,4 @@
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
template <class T>
concept int C = true; // { dg-error "bool" }
diff --git a/gcc/testsuite/g++.dg/concepts/var-templ1.C b/gcc/testsuite/g++.dg/concepts/var-templ1.C
index 79476c3..7dfa240 100644
--- a/gcc/testsuite/g++.dg/concepts/var-templ1.C
+++ b/gcc/testsuite/g++.dg/concepts/var-templ1.C
@@ -1,5 +1,5 @@
// PR c++/67117
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
template <class T>
requires false
diff --git a/gcc/testsuite/g++.dg/concepts/var-templ2.C b/gcc/testsuite/g++.dg/concepts/var-templ2.C
index e615f21..dc0be75 100644
--- a/gcc/testsuite/g++.dg/concepts/var-templ2.C
+++ b/gcc/testsuite/g++.dg/concepts/var-templ2.C
@@ -1,5 +1,5 @@
// PR c++/67139
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
template <class T>
constexpr typename T::type::value_type _v = T::type::value;
diff --git a/gcc/testsuite/g++.dg/concepts/variadic1.C b/gcc/testsuite/g++.dg/concepts/variadic1.C
index ed3d4f1..8129463 100644
--- a/gcc/testsuite/g++.dg/concepts/variadic1.C
+++ b/gcc/testsuite/g++.dg/concepts/variadic1.C
@@ -1,5 +1,5 @@
// PR c++/66712
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template <class T, class...Args>
concept bool _Constructible_ =
diff --git a/gcc/testsuite/g++.dg/concepts/variadic2.C b/gcc/testsuite/g++.dg/concepts/variadic2.C
index 6c55277..f7aa710 100644
--- a/gcc/testsuite/g++.dg/concepts/variadic2.C
+++ b/gcc/testsuite/g++.dg/concepts/variadic2.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
template <class T> concept bool Copyable = requires (T t) { T(t); };
template <class T> concept bool Constructable = requires { T(); };
diff --git a/gcc/testsuite/g++.dg/concepts/variadic3.C b/gcc/testsuite/g++.dg/concepts/variadic3.C
new file mode 100644
index 0000000..f980e99
--- /dev/null
+++ b/gcc/testsuite/g++.dg/concepts/variadic3.C
@@ -0,0 +1,8 @@
+// PR c++/70036
+// { dg-do compile { target c++14 } }
+// { dg-options "-fconcepts" }
+
+template <class T> concept bool C = true;
+
+template <class... T>
+void f(T...) requires C<T>; // { dg-error "parameter pack" }
diff --git a/gcc/testsuite/g++.dg/cpp/pr23827_cxx98_neg.C b/gcc/testsuite/g++.dg/cpp/pr23827_cxx98_neg.C
index 39d9fe4..a0e468c 100644
--- a/gcc/testsuite/g++.dg/cpp/pr23827_cxx98_neg.C
+++ b/gcc/testsuite/g++.dg/cpp/pr23827_cxx98_neg.C
@@ -1,4 +1,4 @@
// { dg-do compile { target c++98_only } }
/* { dg-options "-ansi -pedantic-errors" } */
-double x = 0x3.1415babep0; // { dg-error "use of C..11 hexadecimal floating constant" }
+double x = 0x3.1415babep0; // { dg-error "use of C..1z hexadecimal floating constant" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/auto3.C b/gcc/testsuite/g++.dg/cpp0x/auto3.C
index 27aab57..ed7084b 100644
--- a/gcc/testsuite/g++.dg/cpp0x/auto3.C
+++ b/gcc/testsuite/g++.dg/cpp0x/auto3.C
@@ -17,11 +17,11 @@ struct A { };
A<int> A1;
// CWG issue 625
-A<auto> A2 = A1; // { dg-error "" "" { target { ! c++1z } } }
+A<auto> A2 = A1; // { dg-error "" "" { target { ! concepts } } }
auto foo() { } // { dg-error "auto" "" { target { ! c++14 } } }
-void bar(auto i) // { dg-error "incomplete|auto" "" { target { ! c++1z } } }
+void bar(auto i) // { dg-error "incomplete|auto" "" { target { ! concepts } } }
{
(void)i;
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/auto9.C b/gcc/testsuite/g++.dg/cpp0x/auto9.C
index ee20441..9001f78 100644
--- a/gcc/testsuite/g++.dg/cpp0x/auto9.C
+++ b/gcc/testsuite/g++.dg/cpp0x/auto9.C
@@ -116,8 +116,8 @@ template <auto V = 4> struct G {}; // { dg-error "auto" }
template <typename T> struct H { H (); ~H (); };
H<auto> h; // { dg-error "invalid|initializer" }
-void qq (auto); // { dg-error "auto" "" { target { ! c++1z } } }
-void qr (auto*); // { dg-error "auto" "" { target { ! c++1z } } }
+void qq (auto); // { dg-error "auto" "" { target { ! concepts } } }
+void qr (auto*); // { dg-error "auto" "" { target { ! concepts } } }
// PR c++/46145
typedef auto autot; // { dg-error "auto" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-69315.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-69315.C
new file mode 100644
index 0000000..cf32938
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-69315.C
@@ -0,0 +1,35 @@
+// PR c++/69315
+// { dg-do compile { target c++11 } }
+// { dg-options "-O2" }
+
+// Template instantiation and evaluation for folding within
+// finish_function may call finish_function recursively.
+// Make sure we don't reject or delay that sort of recursion.
+
+template <bool> struct Iter;
+
+struct Arg {
+ Iter<true> begin();
+ Iter<true> end();
+};
+
+template <bool> struct Iter {
+ int operator*();
+ Iter operator++();
+ template <bool C1, bool C2> friend constexpr bool operator==(Iter<C1>, Iter<C2>);
+ template <bool C1, bool C2> friend constexpr bool operator!=(Iter<C1>, Iter<C2>);
+};
+
+void func(Arg a) {
+ for (auto ch : a) {
+ a.begin() == a.end();
+ }
+}
+
+template <bool C1, bool C2> constexpr bool operator==(Iter<C1>, Iter<C2>) {
+ return true;
+}
+
+template <bool C1, bool C2> constexpr bool operator!=(Iter<C1> a, Iter<C2> b) {
+ return a == b;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-70001-1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-70001-1.C
new file mode 100644
index 0000000..e68ff0e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-70001-1.C
@@ -0,0 +1,13 @@
+// PR c++/70001
+// { dg-do compile { target c++11 } }
+
+struct B
+{
+ int a;
+ constexpr B () : a (0) { }
+};
+
+struct A
+{
+ B b[1 << 19];
+} c;
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-70001-2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-70001-2.C
new file mode 100644
index 0000000..96f5ad4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-70001-2.C
@@ -0,0 +1,19 @@
+// PR c++/70001
+// { dg-do run { target c++11 } }
+
+struct B
+{
+ struct B *a;
+ constexpr B () : a (this) { }
+};
+
+constexpr int N = 1 << 4;
+struct A { B c[N]; } d;
+
+int
+main ()
+{
+ for (int i = 0; i < N; ++i)
+ if (d.c[i].a != &d.c[i])
+ __builtin_abort ();
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-70001-3.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-70001-3.C
new file mode 100644
index 0000000..99d4c38
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-70001-3.C
@@ -0,0 +1,26 @@
+// PR c++/70001
+// { dg-do compile { target c++11 } }
+
+#include <array>
+#include <complex>
+
+typedef std::complex<double> cd;
+
+const int LOG = 17;
+const int N = (1 << LOG);
+
+std::array<cd, N> a;
+std::array<cd, N> b;
+
+void
+foo (std::array<cd, N> &arr)
+{
+ std::array<std::array<cd, N>, LOG + 1> f;
+}
+
+int
+main ()
+{
+ foo (a);
+ foo (b);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-70001-4.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-70001-4.C
new file mode 100644
index 0000000..c1ab176
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-70001-4.C
@@ -0,0 +1,13 @@
+// PR c++/70001
+// { dg-do compile { target c++11 } }
+
+struct B
+{
+ int a;
+ constexpr B () : a (0) { }
+};
+
+struct A
+{
+ B b[1 << 19][1][1][1];
+} c;
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-70204a.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-70204a.C
new file mode 100644
index 0000000..5ac5519
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-70204a.C
@@ -0,0 +1,18 @@
+// PR c++/70204
+// { dg-do compile { target c++11 } }
+
+int a;
+
+template < int N, int I >
+void fn1 ()
+{
+ const int x = I * a, y = x;
+ fn1 < y, I > (); // { dg-error "constant|no match" }
+}
+
+int
+main ()
+{
+ fn1 < 0, 0 > ();
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-70204b.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-70204b.C
new file mode 100644
index 0000000..2b07d4f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-70204b.C
@@ -0,0 +1,10 @@
+// PR c++/70204
+// { dg-do compile { target c++11 } }
+
+int a;
+
+void fn1 ()
+{
+ const int x = 0 * a;
+ constexpr int y = x; // { dg-error "constant" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-70323.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-70323.C
new file mode 100644
index 0000000..8307ac8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-70323.C
@@ -0,0 +1,10 @@
+// PR c++/70323
+// { dg-do compile { target c++11 } }
+
+constexpr int overflow_if_0 (int i) { return __INT_MAX__ + !i; }
+constexpr int overflow_if_1 (int i) { return __INT_MAX__ + i; }
+
+constexpr bool i0_0 = overflow_if_0 (0); // { dg-error "overflow in constant expression" }
+constexpr bool i0_1 = overflow_if_0 (1);
+constexpr bool i1_0 = overflow_if_1 (0);
+constexpr bool i1_1 = overflow_if_1 (1); // { dg-error "overflow in constant expression" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-70323a.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-70323a.C
new file mode 100644
index 0000000..d166787
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-70323a.C
@@ -0,0 +1,11 @@
+// PR c++/70323
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wall" }
+
+constexpr int overflow_if_0 (int i) { return __INT_MAX__ + !i; }
+constexpr int overflow_if_1 (int i) { return __INT_MAX__ + i; }
+
+constexpr bool i0_0 = overflow_if_0 (0); // { dg-error "overflow in constant expression" }
+constexpr bool i0_1 = overflow_if_0 (1);
+constexpr bool i1_0 = overflow_if_1 (0);
+constexpr bool i1_1 = overflow_if_1 (1); // { dg-error "overflow in constant expression" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-__func__2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-__func__2.C
new file mode 100644
index 0000000..e678290
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-__func__2.C
@@ -0,0 +1,13 @@
+// PR c++/70353
+// { dg-do link { target c++11 } }
+
+constexpr const char* ce ()
+{
+ return __func__;
+}
+
+const char *c = ce();
+
+int main()
+{
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-aggr3.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-aggr3.C
new file mode 100644
index 0000000..547dec4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-aggr3.C
@@ -0,0 +1,30 @@
+// PR c++/67364
+// { dg-do compile { target c++11 } }
+
+template <typename Xn>
+struct tuple {
+ Xn storage_;
+
+ constexpr tuple(Xn const& xn)
+ : storage_(xn)
+ { }
+
+ template <typename ...dummy>
+ constexpr tuple(tuple const& other)
+ : storage_(other.storage_)
+ { }
+
+ template <typename ...dummy>
+ constexpr tuple(tuple& other)
+ : tuple(const_cast<tuple const&>(other))
+ { }
+};
+
+template <typename T>
+struct wrapper { T value; };
+
+template <typename T>
+constexpr wrapper<T> wrap(T t) { return {t}; }
+
+constexpr wrapper<tuple<int>> t = wrap(tuple<int>{2});
+static_assert(t.value.storage_ == 2, "");
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr10.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr10.C
new file mode 100644
index 0000000..f75b3c3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr10.C
@@ -0,0 +1,112 @@
+// PR c++/67376 - [5/6 regression] Comparison with pointer to past-the-end
+// of array fails inside constant expression
+// This test verifies the aspect of the bug raised in comment #10,
+// specifically comparing pointers to null. The basic regression test
+// is in g++.dg/cpp0x/constexpr-67376.C.
+// Note also that while the description of the bug talks about pointers
+// pointing past the end of arrays but the prolem is more general than
+// that and involves all constexpr object pointers.
+
+// { dg-do compile { target c++11 } }
+// { dg-additional-options "-Wall -Wextra" }
+
+namespace A {
+
+extern int i;
+
+constexpr int *p0 = &i;
+
+constexpr bool b0 = p0; // { dg-warning "address of .A::i." }
+constexpr bool b1 = p0 == 0; // { dg-warning "address of .A::i." }
+constexpr bool b2 = p0 != 0; // { dg-warning "address of .A::i." }
+constexpr bool b3 = p0 < 0; // { dg-warning "ordered comparison" }
+constexpr bool b4 = p0 <= 0; // { dg-warning "ordered comparison" }
+constexpr bool b5 = p0 > 0; // { dg-warning "ordered comparison" }
+constexpr bool b6 = p0 >= 0; // { dg-warning "ordered comparison" }
+
+constexpr bool b7 = !p0; // { dg-warning "address of .A::i." }
+constexpr bool b8 = 0 == p0; // { dg-warning "address of .A::i." }
+constexpr bool b9 = 0 != p0; // { dg-warning "address of .A::i." }
+constexpr bool b10 = 0 < p0; // { dg-warning "ordered comparison" }
+constexpr bool b11 = 0 <= p0; // { dg-warning "ordered comparison" }
+constexpr bool b12 = 0 > p0; // { dg-warning "ordered comparison" }
+constexpr bool b13 = 0 >= p0; // { dg-warning "ordered comparison" }
+
+}
+
+namespace B {
+
+// PR c++/70172 - incorrect reinterpret_cast from integer to pointer
+// error on invalid constexpr initialization
+
+struct S { int a, b[1]; } s;
+
+constexpr S *p0 = &s;
+
+constexpr int *q0 = p0->b; // { dg-bogus "reinterpret_cast from integer to pointer" }
+
+}
+
+namespace WeakRefTest1 {
+
+extern __attribute__ ((weak)) int i;
+
+constexpr int *p0 = &i;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wextra"
+// Suppress warning: ordered comparison of pointer with integer zero
+
+constexpr bool b0 = p0; // { dg-error "not a constant expression" }
+constexpr bool b1 = p0 == 0; // { dg-error "not a constant expression" }
+constexpr bool b2 = p0 != 0; // { dg-error "not a constant expression" }
+constexpr bool b4 = p0 <= 0; // { dg-error "not a constant expression" }
+constexpr bool b5 = p0 > 0; // { dg-error "not a constant expression" }
+
+constexpr bool b7 = !p0; // { dg-error "not a constant expression" }
+constexpr bool b8 = 0 == p0; // { dg-error "not a constant expression" }
+constexpr bool b9 = 0 != p0; // { dg-error "not a constant expression" }
+constexpr bool b10 = 0 < p0; // { dg-error "not a constant expression" }
+constexpr bool b13 = 0 >= p0; // { dg-error "not a constant expression" }
+
+// The following are accepted as constant expressions due to bug c++/70196.
+constexpr bool b3 = p0 < 0;
+constexpr bool b6 = p0 >= 0;
+constexpr bool b11 = 0 <= p0;
+constexpr bool b12 = 0 > p0;
+
+#pragma GCC diagnostic pop
+
+}
+
+namespace WeakRefTest2 {
+
+extern __attribute__ ((weak)) int i;
+
+constexpr int *p1 = &i + 1;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wextra"
+// Suppress warning: ordered comparison of pointer with integer zero
+
+constexpr bool b0 = p1; // { dg-error "not a constant expression" }
+constexpr bool b1 = p1 == 0; // { dg-error "not a constant expression" }
+constexpr bool b2 = p1 != 0; // { dg-error "not a constant expression" }
+constexpr bool b4 = p1 <= 0; // { dg-error "not a constant expression" }
+constexpr bool b5 = p1 > 0; // { dg-error "not a constant expression" }
+
+constexpr bool b7 = !p1; // { dg-error "not a constant expression" }
+constexpr bool b8 = 0 == p1; // { dg-error "not a constant expression" }
+constexpr bool b9 = 0 != p1; // { dg-error "not a constant expression" }
+constexpr bool b10 = 0 < p1; // { dg-error "not a constant expression" }
+constexpr bool b13 = 0 >= p1; // { dg-error "not a constant expression" }
+
+// The following are accepted as constant expressions due to bug c++/70196.
+// constexpr bool b3 = p1 < 0;
+// constexpr bool b6 = p1 >= 0;
+// constexpr bool b11 = 0 <= p1;
+// constexpr bool b12 = 0 > p1;
+
+#pragma GCC diagnostic pop
+
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr9.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr9.C
new file mode 100644
index 0000000..f0250cb
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr9.C
@@ -0,0 +1,57 @@
+// PR c++/67376 - [5/6 regression] Comparison with pointer to past-the-end
+// of array fails inside constant expression
+// { dg-do compile { target c++11 } }
+
+int a [2];
+
+constexpr const int* pa[] = {
+ a,
+ a + 0,
+ a + 1,
+ a + 2,
+ &a [0],
+ &a [0] + 0,
+ &a [0] + 1,
+ &a [0] + 2,
+ &a [1],
+ &a [1] - 1,
+ &a [1] + 0,
+ &a [1] + 1,
+ &a [2] - 2,
+ &a [2] - 1,
+ &a [2] + 0
+};
+
+#define Assert(e) static_assert ((e), #e)
+
+Assert (!(a == 0));
+Assert (!(a == (int*)0));
+Assert (!(a == nullptr));
+
+Assert (a != 0);
+Assert (a != (int*)0);
+Assert (a != nullptr);
+
+Assert (!(0 == a));
+Assert (!((int*)0 == a));
+Assert (!(nullptr == a));
+
+Assert (0 != a);
+Assert ((int*)0 != a);
+Assert (nullptr != a);
+
+bool constexpr test_eq (unsigned inx)
+{
+ return inx ? pa [inx - 1] == 0 && 0 == pa [inx - 1]
+ && test_eq (inx - 1) : pa [inx] == 0 && 0 == pa [inx];
+}
+
+Assert (!test_eq (sizeof pa / sizeof *pa));
+
+bool constexpr test_ne (unsigned inx)
+{
+ return inx ? pa [inx - 1] != 0 && 0 != pa [inx - 1]
+ && test_ne (inx - 1) : pa [inx] != 0 && 0 != pa [inx];
+}
+
+Assert (test_ne (sizeof pa / sizeof *pa));
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-array5.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-array5.C
index 4605b4b..00dfd6db 100644
--- a/gcc/testsuite/g++.dg/cpp0x/constexpr-array5.C
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-array5.C
@@ -3,7 +3,7 @@
// Reliable ICE
constexpr int n[3] = {};
-constexpr int k = n[-1]; // { dg-error "negative" }
+constexpr int k = n[-1]; // { dg-error "array subscript" }
// Some random byte
-constexpr char c = "foo"[-1000]; // { dg-error "negative" }
+constexpr char c = "foo"[-1000]; // { dg-error "array subscript" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-delete2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-delete2.C
new file mode 100644
index 0000000..4a453a4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-delete2.C
@@ -0,0 +1,12 @@
+// PR c++/69203
+// { dg-do compile { target c++11 } }
+
+struct A { ~A(); };
+constexpr int f(int i) { return i; }
+constexpr int g(A* ap)
+{
+ return f((delete[] ap, 42)); // { dg-message "" }
+}
+
+A a;
+constexpr int i = g(&a); // { dg-error "" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-empty10.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-empty10.C
new file mode 100644
index 0000000..694ed3d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-empty10.C
@@ -0,0 +1,17 @@
+// PR c++/67364
+// { dg-do compile { target c++11 } }
+
+template <typename Xn>
+struct element : Xn {
+ constexpr element() : Xn() { }
+};
+
+template <typename Xn>
+struct closure {
+ element<Xn> member;
+ constexpr closure() { }
+};
+
+struct empty { };
+constexpr closure<empty> tup{};
+constexpr empty first = tup.member;
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-empty11.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-empty11.C
new file mode 100644
index 0000000..7437367
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-empty11.C
@@ -0,0 +1,17 @@
+// PR c++/67364
+// { dg-do compile { target c++11 } }
+
+template <typename Xn>
+struct element : Xn {
+ constexpr element() : Xn() { }
+};
+
+template <typename Xn>
+struct closure {
+ element<Xn> member;
+ constexpr closure() { }
+};
+
+struct empty { struct {} s; };
+constexpr closure<empty> tup{};
+constexpr empty first = tup.member;
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-inline-1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-inline-1.C
new file mode 100644
index 0000000..fed6990
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-inline-1.C
@@ -0,0 +1,29 @@
+// PR c++/53792 - [C++11] improving compiler-time constexpr evaluation
+// Test case from comment #8.
+// { dg-do compile { target c++14 } }
+// { dg-additional-options "-O1 -fdump-tree-optimized" }
+
+template <class T>
+void sink (T);
+
+constexpr unsigned foo ()
+{
+ unsigned i = 1;
+ while ((i << 1) > i)
+ i = i << 1;
+
+ return i;
+}
+
+template <unsigned N>
+struct S { };
+
+void bar ()
+{
+ sink (foo ());
+ sink (S<foo ()>());
+}
+
+// Verify that the call to the foo() constexpr function is inlined
+// regardless of whether or not it's invoked in a constant expression.
+// { dg-final { scan-tree-dump-not "= *foo *\\\(" "optimized" } }
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-inline.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-inline.C
new file mode 100644
index 0000000..d04257c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-inline.C
@@ -0,0 +1,40 @@
+// PR c++/53792 - [C++11] improving compiler-time constexpr evaluation
+// { dg-do compile { target c++11 } }
+// { dg-additional-options "-O1 -fdump-tree-optimized" }
+
+struct entry
+{
+ char const* label;
+ int value;
+};
+
+constexpr bool same (char const *x, char const *y)
+{
+ return !*x && !*y ? true : /* default */ (*x == *y && same (x + 1, y + 1));
+}
+
+constexpr int
+keyToValue (char const *label, entry const *entries)
+{
+ return !entries->label ? entries->value
+ : same (entries->label, label) ? entries->value
+ : /* default */ keyToValue (label, entries + 1);
+}
+
+constexpr entry foo[] = {{"Foo", 0}, {"Bar", 1}, {"FooBar", 2}, {0, -1}};
+
+int bar ()
+{
+ int result = keyToValue ("Foo", foo);
+ return result;
+}
+
+int baz ()
+{
+ constexpr int result = keyToValue ("Foo", foo);
+ return result;
+}
+
+// Verify that the call to the keyToValue() constexpr function is inlined
+// regardless of whether or not it's invoked in a constexpr expression.
+// { dg-final { scan-tree-dump-not "keyToValue" "optimized" } }
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-nullptr-1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-nullptr-1.C
new file mode 100644
index 0000000..420a04b7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-nullptr-1.C
@@ -0,0 +1,125 @@
+// Verify the correctness of folding relational expressions involving
+// pointers to array elements and struct data members and null pointers.
+// Although the C semantics of relational expressions are only defined
+// for pointers to objects, C++ makes them well-defined when
+// (nullptr < p) yields true. See the discussion of the patch for
+// c++/67376 on gcc-patches for additional background.
+
+// { dg-do compile { target c++11 } }
+// { dg-options "-fdump-tree-optimized" }
+
+// Runtime assert. Used for potentially invalid expressions.
+#define RA(e) ((e) ? (void)0 : __builtin_abort ())
+
+// Static assert. Used for valid core constant expressions.
+#define SA(e) static_assert ((e), #e)
+
+void test_first_array_element ()
+{
+ static constexpr int a[] = { 0 };
+ constexpr const int *null = 0;
+ constexpr const int *pi = a;
+
+ // The following are valid constant expressions since in &*pi
+ // the '&*' "cancel each other out."
+ SA (!(null == &*pi));
+ SA ( (null != &*pi));
+
+ // The validity of the relational expressions involving null
+ // pointers in a constexpr context is questionable. Use a run
+ // time assertion to verify these.
+ RA ( (null < &*pi));
+ RA ( (null <= &*pi));
+ RA (!(null > &*pi));
+ RA (!(null >= &*pi));
+
+ SA (!(&*pi == null));
+ SA ( (&*pi != null));
+ RA (!(&*pi < null));
+ RA (!(&*pi <= null));
+ RA ( (&*pi > null));
+ RA ( (&*pi >= null));
+
+ // The following are valid constant expressions since &pi [0] is
+ // equivalent to &*pi.
+ SA (!(null == &pi [0]));
+ SA ( (null != &pi [0]));
+ RA ( (null < &pi [0]));
+ RA ( (null <= &pi [0]));
+ RA (!(null > &pi [0]));
+ RA (!(null >= &pi [0]));
+
+ SA (!(&pi [0] == null));
+ SA ( (&pi [0] != null));
+ RA (!(&pi [0] < null));
+ RA (!(&pi [0] <= null));
+ RA ( (&pi [0] > null));
+ RA ( (&pi [0] >= null));
+}
+
+void test_first_null_array_element ()
+{
+ constexpr const int *pi = 0;
+ constexpr const int *qi = 0;
+
+ // The following are valid constant expressions since in &*qi
+ // the '&*' "cancel each other out."
+ SA ( (pi == &*qi));
+ SA (!(pi != &*qi));
+
+ // The validity of the relational expressions involving null
+ // pointers in a constexpr context is questionable.
+ RA (!(pi < &*qi));
+ RA ( (pi <= &*qi));
+ RA (!(pi > &*qi));
+ RA ( (pi >= &*qi));
+
+ SA ( (&*qi == pi));
+ SA (!(&*qi != pi));
+ RA (!(&*qi < pi));
+ RA ( (&*qi <= pi));
+ RA (!(&*qi > pi));
+ RA ( (&*qi >= pi));
+
+ // The following are valid constant expressions since &qi [0] is
+ // equivalent to &*qi.
+ SA ( (pi == &qi [0]));
+ SA (!(pi != &qi [0]));
+ RA (!(pi < &qi [0]));
+ RA ( (pi <= &qi [0]));
+ RA (!(pi > &qi [0]));
+ RA ( (pi >= &qi [0]));
+
+ SA ( (&qi [0] == pi));
+ SA (!(&qi [0] != pi));
+ RA (!(&qi [0] < pi));
+ RA ( (&qi [0] <= pi));
+ RA (!(&qi [0] > pi));
+ RA ( (&qi [0] >= pi));
+}
+
+void test_first_struct_member ()
+{
+ static struct S { int a, b; } s = { 0, 0 };
+
+ constexpr const int *p = 0;
+ constexpr const S *q = &s;
+
+ SA (!(p == &q->b));
+ SA ( (p != &q->b));
+ RA ( (p < &q->b));
+ RA ( (p <= &q->b));
+ RA (!(p > &q->b));
+ RA (!(p >= &q->b));
+
+ SA (!(&q->b == p));
+ SA ( (&q->b != p));
+ RA (!(&q->b < p));
+ RA (!(&q->b <= p));
+ RA ( (&q->b > p));
+ RA ( (&q->b >= p));
+}
+
+// Expect all runtime asserts to have been eliminated as a result
+// of the tested expressions constant folded into true.
+// { dg-final { scan-assembler-not "abort" } }
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-recursion2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-recursion2.C
new file mode 100644
index 0000000..978b998
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-recursion2.C
@@ -0,0 +1,17 @@
+// PR c++/70344
+// { dg-do compile { target c++11 } }
+
+struct Z
+{
+ Z () = default;
+ Z (Z const &) = default;
+ constexpr Z (Z &&) {}
+};
+
+constexpr int
+fn (Z v)
+{
+ return fn (v);
+}
+
+auto t = fn (Z ());
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-string.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-string.C
index 0f561a4..41fa466 100644
--- a/gcc/testsuite/g++.dg/cpp0x/constexpr-string.C
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-string.C
@@ -2,4 +2,4 @@
constexpr char c1 = "hi"[1];
constexpr char c2 = "hi"[2];
-constexpr char c3 = "hi"[3]; // { dg-error "out of bound" }
+constexpr char c3 = "hi"[3]; // { dg-error "array subscript" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-trivial1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-trivial1.C
new file mode 100644
index 0000000..f4b74a7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-trivial1.C
@@ -0,0 +1,20 @@
+// PR c++/70139
+// { dg-options "-fno-elide-constructors" }
+// { dg-do compile { target c++11 } }
+
+template<class T, class U>
+struct A
+{
+ T a;
+ U b;
+ constexpr A () : a (), b () { }
+ constexpr A (const T &x, const U &y) : a (x), b (y) { }
+};
+struct B
+{
+ constexpr B (const bool x) : c (x) {}
+ constexpr bool operator!= (const B x) const { return c != x.c; }
+ bool c;
+};
+constexpr static A<B, B*> d[] = { { B (true), nullptr }, { B (false), nullptr } };
+static_assert (d[0].a != d[1].a, "");
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-virtual6.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-virtual6.C
new file mode 100644
index 0000000..f5abf2c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-virtual6.C
@@ -0,0 +1,49 @@
+// PR c++/70393
+// { dg-do run { target c++11 } }
+
+/* 'ab' has a static initializer, but we flubbed the initializer,
+ because of B being the primary base. */
+
+struct A
+{
+ int a = 1;
+};
+
+struct B
+{
+ B *element = (B*)2;
+
+ virtual int vfunc() = 0;
+
+ int call_element()
+ {
+ return element->vfunc();
+ }
+
+ void set_element()
+ {
+ element = this;
+ }
+};
+
+struct AB : public A, public B
+{
+ int vfunc()
+ {
+ return 0;
+ }
+};
+
+static AB ab;
+
+int main()
+{
+ if (ab.a != 1)
+ return 1;
+ if (ab.element != (void*)2)
+ return 2;
+
+ ab.set_element();
+ return ab.call_element();
+}
+
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-wstring2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-wstring2.C
index db79a9c..4055e0e 100644
--- a/gcc/testsuite/g++.dg/cpp0x/constexpr-wstring2.C
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-wstring2.C
@@ -1,6 +1,6 @@
// PR c++/48570
// { dg-do compile { target c++11 } }
-constexpr wchar_t c1 = L"hi"[3]; // { dg-error "out of bound" }
-constexpr char16_t c2 = u"hi"[3]; // { dg-error "out of bound" }
-constexpr char32_t c3 = U"hi"[3]; // { dg-error "out of bound" }
+constexpr wchar_t c1 = L"hi"[3]; // { dg-error "array subscript" }
+constexpr char16_t c2 = u"hi"[3]; // { dg-error "array subscript" }
+constexpr char32_t c3 = U"hi"[3]; // { dg-error "array subscript" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-70218.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-70218.C
new file mode 100644
index 0000000..ae8cc2f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-70218.C
@@ -0,0 +1,17 @@
+// PR c++/70218
+// { dg-do compile { target c++11 } }
+
+struct X {
+private:
+ int i;
+};
+
+struct Y {
+ Y (int) { }
+};
+
+void
+foo ()
+{
+ Y ([] { X x; x.i = 3; return 0; } ()); // { dg-error "private" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv10.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv10.C
new file mode 100644
index 0000000..8e806c8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv10.C
@@ -0,0 +1,34 @@
+// PR c++/69889
+// { dg-do compile { target c++11 } }
+
+template <typename F> struct Tag {
+ static void fp() { f()(0); }
+ static F f() {}
+};
+
+struct Dispatch {
+ template <typename F> Dispatch(F&&) : f(Tag<F>::fp) {}
+ void (*f)();
+};
+
+struct Empty { Empty(Empty&&); };
+
+struct Value {
+ Value();
+ template <typename U> Value(U);
+ void call(Dispatch);
+ Empty e;
+};
+
+struct EmptyValue {
+ EmptyValue(EmptyValue&&);
+ EmptyValue();
+};
+
+struct User {
+ User() {
+ Value().call([](Value) { return EmptyValue(); });
+ }
+};
+
+User user;
diff --git a/gcc/testsuite/g++.dg/cpp0x/noexcept29.C b/gcc/testsuite/g++.dg/cpp0x/noexcept29.C
new file mode 100644
index 0000000..8b920c5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/noexcept29.C
@@ -0,0 +1,19 @@
+// { dg-do compile { target c++11 } }
+// { dg-additional-options "-fno-exceptions" }
+
+// PR68475 we used to not check eh spec matching with -fno-exceptions,
+// but this could lead to ICEs.
+
+template <typename> struct traits;
+
+template <typename T> struct X
+{
+ void Foo () noexcept (traits <T>::foo ()); // { dg-message "previous declaration" }
+};
+
+template <typename T>
+void
+X<T>::Foo () noexcept (traits <T>::bar ()) // { dg-error "different exception specifier" }
+{
+}
+
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr65398.C b/gcc/testsuite/g++.dg/cpp0x/pr65398.C
index a4aeba5..6bd34a4 100644
--- a/gcc/testsuite/g++.dg/cpp0x/pr65398.C
+++ b/gcc/testsuite/g++.dg/cpp0x/pr65398.C
@@ -12,12 +12,12 @@ constexpr char c5 = *(&s[2] + 0);
constexpr char c6 = *(&s[0] + 2);
constexpr char c7 = *(&s[2] + 1);
-constexpr char d1 = *(&s[4] - 0); // { dg-error "array subscript out of bound" }
+constexpr char d1 = *(&s[4] - 0); // { dg-error "array subscript" }
constexpr char d2 = *(&s[4] - 1);
constexpr char d3 = *(&s[4] - 2);
constexpr char d4 = *(&s[4] - 3);
constexpr char d5 = *(&s[4] - 4);
-constexpr char d6 = *(&s[4] - 5); // { dg-error "negative array subscript" }
+constexpr char d6 = *(&s[4] - 5); // { dg-error "array subscript" }
/* Don't accept invalid stuff. */
constexpr char e1 = *(&s[5] - 1); // { dg-error "is not a constant expression" }
@@ -45,12 +45,12 @@ constexpr int i5 = *(&l[2] + 0);
constexpr int i6 = *(&l[0] + 2);
constexpr int i7 = *(&l[2] + 1);
-constexpr char j1 = *(&l[4] - 0); // { dg-error "array subscript out of bound" }
+constexpr char j1 = *(&l[4] - 0); // { dg-error "array subscript" }
constexpr char j2 = *(&l[4] - 1);
constexpr char j3 = *(&l[4] - 2);
constexpr char j4 = *(&l[4] - 3);
constexpr char j5 = *(&l[4] - 4);
-constexpr char j6 = *(&l[4] - 5); // { dg-error "negative array subscript" }
+constexpr char j6 = *(&l[4] - 5); // { dg-error "array subscript" }
/* Don't accept invalid stuff. */
constexpr char k1 = *(&l[5] - 1); // { dg-error "is not a constant expression" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr67767.C b/gcc/testsuite/g++.dg/cpp0x/pr67767.C
new file mode 100644
index 0000000..fd4ae2d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/pr67767.C
@@ -0,0 +1,10 @@
+// PR c++/67767
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wsuggest-attribute=noreturn" }
+
+void foo [[gnu::cold, gnu::noreturn]] ();
+
+void foo () // { dg-bogus "function might be candidate for attribute" }
+{
+ throw 1;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/range-for5.C b/gcc/testsuite/g++.dg/cpp0x/range-for5.C
index bf04406..2a20db4 100644
--- a/gcc/testsuite/g++.dg/cpp0x/range-for5.C
+++ b/gcc/testsuite/g++.dg/cpp0x/range-for5.C
@@ -31,7 +31,7 @@ struct Explicit
void test1()
{
container c;
- for (int x : c) // { dg-error "inconsistent|conversion" }
+ for (int x : c) // { dg-error "inconsistent|conversion|comparison" }
;
int a[2] = {1,2};
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv-cast5.C b/gcc/testsuite/g++.dg/cpp0x/rv-cast5.C
new file mode 100644
index 0000000..c2473e2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/rv-cast5.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+
+template <typename T>
+struct hold {
+ T value;
+ constexpr T&& operator()() && { return static_cast<T&&>(value); }
+};
+
+int main()
+{
+ hold<bool&&>{42}();
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/typedef-redecl.C b/gcc/testsuite/g++.dg/cpp0x/typedef-redecl.C
new file mode 100644
index 0000000..576c7ce
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/typedef-redecl.C
@@ -0,0 +1,12 @@
+// PR c/70297
+// { dg-do compile { target c++11 } }
+
+#define N 64
+
+typedef int T;
+typedef int T __attribute__((aligned (N)));
+typedef int T __attribute__((aligned (N * 2)));
+typedef int T __attribute__((aligned (N)));
+typedef int T;
+
+static_assert (alignof (T) == N * 2, "N * 2");
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-sizeof4.C b/gcc/testsuite/g++.dg/cpp0x/variadic-sizeof4.C
new file mode 100644
index 0000000..1187429
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-sizeof4.C
@@ -0,0 +1,33 @@
+// PR c++/69958
+// { dg-do compile { target c++11 } }
+
+typedef decltype(sizeof(int)) size_t;
+
+template <typename...Ts>
+struct list { };
+
+template <size_t N>
+struct size { };
+
+template <typename...Ts>
+using size_for = size<sizeof...(Ts)>;
+
+template<class T, class U> struct assert_same;
+template<class T> struct assert_same<T,T> {};
+
+template <typename T, typename...Ts>
+using wrapped = list<T, size_for<T, Ts...>>;
+
+// This assertion fails (produces size<4>)
+assert_same<
+ list<float, size<5>>,
+ wrapped<float, int, double, char, unsigned>> a3;
+
+
+template <typename T, typename...Ts>
+using wrapped2 = list<T, size_for<Ts..., T>>;
+
+// This assertion fails (produces size<2>)
+assert_same<
+ list<float, size<5>>,
+ wrapped2<float, int, double, char, unsigned>> a4;
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-sizeof4a.C b/gcc/testsuite/g++.dg/cpp0x/variadic-sizeof4a.C
new file mode 100644
index 0000000..0e8096d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-sizeof4a.C
@@ -0,0 +1,33 @@
+// PR c++/69958
+// { dg-do compile { target c++11 } }
+
+typedef decltype(sizeof(int)) size_t;
+
+template <typename...Ts>
+struct list { };
+
+template <size_t N>
+struct size { };
+
+template <unsigned...Ts>
+using size_for = size<sizeof...(Ts)>;
+
+template<class T, class U> struct assert_same;
+template<class T> struct assert_same<T,T> {};
+
+template <typename T, unsigned...Ts>
+using wrapped = list<T, size_for<0, Ts...>>;
+
+// This assertion fails (produces size<4>)
+assert_same<
+ list<float, size<5>>,
+ wrapped<float,2,3,4,5>> a3;
+
+
+template <typename T, unsigned...Ts>
+using wrapped2 = list<T, size_for<Ts..., 0>>;
+
+// This assertion fails (produces size<2>)
+assert_same<
+ list<float, size<5>>,
+ wrapped2<float,2,3,4,5>> a4;
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-tuple2.C b/gcc/testsuite/g++.dg/cpp0x/variadic-tuple2.C
new file mode 100644
index 0000000..43c00e9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-tuple2.C
@@ -0,0 +1,29 @@
+// PR c++/67164
+// { dg-do compile { target c++11 } }
+
+#include <type_traits>
+
+namespace detail {
+ template <bool ...b>
+ struct fast_and
+ : std::is_same<fast_and<b...>, fast_and<(b, true)...>>
+ { };
+}
+
+template <typename ...Xn>
+struct tuple {
+ tuple() { }
+
+ template <typename ...Yn, typename = typename std::enable_if<
+ detail::fast_and<std::is_constructible<Xn, Yn&&>::value...>::value
+ >::type>
+ tuple(Yn&& ...yn) { }
+
+ template <typename ...Yn, typename = typename std::enable_if<
+ detail::fast_and<std::is_constructible<Xn, Yn const&>::value...>::value
+ >::type>
+ tuple(tuple<Yn...> const& other) { }
+};
+
+tuple<tuple<>> t{};
+tuple<tuple<>> copy = t;
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic122.C b/gcc/testsuite/g++.dg/cpp0x/variadic122.C
index aa21ddd..12dc901 100644
--- a/gcc/testsuite/g++.dg/cpp0x/variadic122.C
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic122.C
@@ -9,7 +9,7 @@ template < class T > struct Container
template < class T >
T deref (T)
-{} // { dg-warning "no return" }
+{} // { dg-bogus "no return" }
template < class T, class ... Args >
auto deref (T u, int, Args ... args)->decltype (deref (u.f (), args ...))
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic167.C b/gcc/testsuite/g++.dg/cpp0x/variadic167.C
new file mode 100644
index 0000000..cada972
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic167.C
@@ -0,0 +1,18 @@
+// PR c++/69743
+// { dg-do compile { target c++11 } }
+
+template <typename D, typename... T>
+void f(int, T... d)
+{
+}
+
+template <typename D, typename... T>
+void f(T... d)
+{
+ f<D>(1, d...);
+}
+
+void g(void)
+{
+ f<long>(1.0);
+}
diff --git a/gcc/testsuite/g++.dg/cpp1y/constexpr-array3.C b/gcc/testsuite/g++.dg/cpp1y/constexpr-array3.C
new file mode 100644
index 0000000..8cea41a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/constexpr-array3.C
@@ -0,0 +1,43 @@
+// PR c++/69995
+// { dg-do compile { target c++14 } }
+
+#define assert(X) static_assert((X),#X)
+
+#define CONSTEXPR constexpr
+
+template <typename T, unsigned long Size>
+struct array {
+ T elems_[Size];
+
+ constexpr T const& operator[](unsigned long n) const
+ { return elems_[n]; }
+
+ constexpr T& operator[](unsigned long n)
+ { return elems_[n]; }
+};
+
+template <typename T>
+CONSTEXPR void my_swap(T& a, T& b) {
+ T tmp = a;
+ a = b;
+ b = tmp;
+}
+
+CONSTEXPR auto rotate2() {
+ array<array<int, 2>, 2> result{};
+ array<int, 2> a{{0, 1}};
+
+ result[0] = a;
+ my_swap(a[0], a[1]);
+ result[1] = a;
+
+ return result;
+}
+
+int main() {
+ CONSTEXPR auto indices = rotate2();
+ assert(indices[0][0] == 0);
+ assert(indices[0][1] == 1);
+ assert(indices[1][0] == 1);
+ assert(indices[1][1] == 0);
+}
diff --git a/gcc/testsuite/g++.dg/cpp1y/constexpr-array4.C b/gcc/testsuite/g++.dg/cpp1y/constexpr-array4.C
new file mode 100644
index 0000000..fc01047
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/constexpr-array4.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++14 } }
+
+constexpr bool g()
+{
+ int ar[4] = { 1, 2, 3, 4 };
+ auto e1 = ar;
+ auto e4 = ar+3;
+ return (e4-e1) == 3;
+}
+
+#define SA(X) static_assert((X),#X)
+SA(g());
diff --git a/gcc/testsuite/g++.dg/cpp1y/constexpr-assign1.C b/gcc/testsuite/g++.dg/cpp1y/constexpr-assign1.C
new file mode 100644
index 0000000..4583b64
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/constexpr-assign1.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++14 } }
+
+struct A { };
+
+struct B
+{
+ A a;
+ constexpr B& operator=(const B&) = default;
+};
diff --git a/gcc/testsuite/g++.dg/cpp1y/constexpr-copy2.C b/gcc/testsuite/g++.dg/cpp1y/constexpr-copy2.C
new file mode 100644
index 0000000..6707975
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/constexpr-copy2.C
@@ -0,0 +1,24 @@
+// PR c++/69995
+// { dg-do compile { target c++14 } }
+
+struct A
+{
+ int i;
+};
+
+constexpr int f(A a)
+{
+ ++a.i;
+ return a.i;
+}
+
+constexpr bool g()
+{
+ A a = { 42 };
+ if (f(a) != 43) return false;
+ if (a.i != 42) return false;
+ return true;
+}
+
+#define SA(X) static_assert((X),#X)
+SA(g());
diff --git a/gcc/testsuite/g++.dg/cpp1y/constexpr-copy3.C b/gcc/testsuite/g++.dg/cpp1y/constexpr-copy3.C
new file mode 100644
index 0000000..cce4b54
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/constexpr-copy3.C
@@ -0,0 +1,26 @@
+// PR c++/69995
+// { dg-do compile { target c++14 } }
+
+struct A
+{
+ int i;
+};
+
+constexpr int f(A a)
+{
+ ++a.i;
+ return a.i;
+}
+
+constexpr bool g()
+{
+ A a = { 42 };
+ A b = a;
+ ++b.i;
+ if (b.i != 43) return false;
+ if (a.i != 42) return false;
+ return true;
+}
+
+#define SA(X) static_assert((X),#X)
+SA(g());
diff --git a/gcc/testsuite/g++.dg/cpp1y/constexpr-empty2.C b/gcc/testsuite/g++.dg/cpp1y/constexpr-empty2.C
new file mode 100644
index 0000000..2acfa98
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/constexpr-empty2.C
@@ -0,0 +1,27 @@
+// { dg-do compile { target c++14 } }
+
+struct A
+{
+ constexpr A(int) { }
+};
+
+struct B: A {
+ constexpr B(int i): A(i) { }
+ constexpr B(const B& b): A(b) { }
+};
+
+struct C {
+ B b;
+ constexpr C(int i): b(i) { }
+ constexpr C(const C&c): b(c.b) {}
+};
+
+constexpr int f()
+{
+ C b1{42};
+ C b2{b1};
+ b2.b;
+ return 42;
+}
+
+constexpr int i = f();
diff --git a/gcc/testsuite/g++.dg/cpp1y/constexpr-instantiate.C b/gcc/testsuite/g++.dg/cpp1y/constexpr-instantiate.C
new file mode 100644
index 0000000..ab2021b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/constexpr-instantiate.C
@@ -0,0 +1,21 @@
+// PR c++/58281 - Problem with explicitly instantiated constexpr template
+// functions
+// { dg-do compile { target c++11 } }
+// { dg-options "-fdump-tree-optimized" }
+
+
+template <typename T>
+constexpr bool f (T a)
+{
+ return a == 3;
+}
+
+extern template bool f<int>(int);
+
+bool g (int x) { return f (x); }
+
+template bool f<int>(int);
+
+// Verify that the defintions of both f() and g() are emitted.
+// { dg-final { scan-tree-dump-times "\nconstexpr bool f\\\(" 1 "optimized" } }
+// { dg-final { scan-tree-dump-times "\nbool g\\\(" 1 "optimized" } }
diff --git a/gcc/testsuite/g++.dg/cpp1y/constexpr-loop3.C b/gcc/testsuite/g++.dg/cpp1y/constexpr-loop3.C
new file mode 100644
index 0000000..5e7c3c9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/constexpr-loop3.C
@@ -0,0 +1,23 @@
+// { dg-do compile { target c++14 } }
+
+struct A
+{
+ int i;
+};
+
+constexpr bool f()
+{
+ A ar[4] = { 1, 2, 3, 4 };
+ A *ap = ar;
+ int i = 0;
+ do
+ *ap++ = A{i};
+ while (++i < 3);
+ return (ar[0].i == 0
+ && ar[1].i == 1
+ && ar[2].i == 2
+ && ar[3].i == 4);
+}
+
+#define SA(X) static_assert((X),#X)
+SA(f());
diff --git a/gcc/testsuite/g++.dg/cpp1y/constexpr-loop4.C b/gcc/testsuite/g++.dg/cpp1y/constexpr-loop4.C
new file mode 100644
index 0000000..67f7cfa
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/constexpr-loop4.C
@@ -0,0 +1,27 @@
+// { dg-do compile { target c++14 } }
+
+struct A
+{
+ int i;
+};
+
+constexpr bool f()
+{
+ A ar[5] = { 6, 7, 8, 9, 10 };
+ A *ap = ar;
+ int i = 0, j = 0;
+ for (j = 0; j < 2; j++)
+ {
+ do
+ *ap++ = A{i};
+ while (++i < j * 2 + 2);
+ }
+ return (ar[0].i == 0
+ && ar[1].i == 1
+ && ar[2].i == 2
+ && ar[3].i == 3
+ && ar[4].i == 10);
+}
+
+#define SA(X) static_assert((X),#X)
+SA(f());
diff --git a/gcc/testsuite/g++.dg/cpp1y/constexpr-recursion1.C b/gcc/testsuite/g++.dg/cpp1y/constexpr-recursion1.C
new file mode 100644
index 0000000..79e0b5a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/constexpr-recursion1.C
@@ -0,0 +1,16 @@
+// PR c++/70449
+// { dg-do compile { target c++14 } }
+// { dg-options "-Wall" }
+
+template <int N>
+constexpr int f1 ()
+{
+ enum E { a = f1<0> () }; // { dg-error "called in a constant expression before its definition is complete|is not an integer constant" }
+ return 0;
+}
+
+constexpr int f3 ()
+{
+ enum E { a = f3 () }; // { dg-error "called in a constant expression before its definition is complete|is not an integer constant" }
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C b/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C
index 67f75a7..397b9a8 100644
--- a/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C
+++ b/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C
@@ -55,8 +55,8 @@
#ifndef __cpp_range_based_for
# error "__cpp_range_based_for"
-#elif __cpp_range_based_for != 200907
-# error "__cpp_range_based_for != 200907"
+#elif __cpp_range_based_for < 200907
+# error "__cpp_range_based_for < 200907"
#endif
#ifndef __cpp_static_assert
diff --git a/gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C b/gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C
index d9dbf62..fa59f90 100644
--- a/gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C
+++ b/gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C
@@ -48,8 +48,8 @@
#ifndef __cpp_range_based_for
# error "__cpp_range_based_for"
-#elif __cpp_range_based_for != 200907
-# error "__cpp_range_based_for != 200907"
+#elif __cpp_range_based_for < 200907
+# error "__cpp_range_based_for < 200907"
#endif
#ifndef __cpp_static_assert
diff --git a/gcc/testsuite/g++.dg/cpp1y/lambda-generic-trailing1.C b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-trailing1.C
new file mode 100644
index 0000000..96755b1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-trailing1.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++14 } }
+
+template <class T>
+void f()
+{
+ auto lam = [](auto a)->decltype(++a) { return a; };
+}
+
+int main()
+{
+ f<int>();
+}
diff --git a/gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic4.C b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic4.C
new file mode 100644
index 0000000..0b65f56
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic4.C
@@ -0,0 +1,20 @@
+// PR c++/69842
+// { dg-do compile { target c++14 } }
+
+template <class T, class U> struct assert_same;
+template <class T> struct assert_same<T,T> {};
+
+template<typename T>
+void sink(T &&)
+{
+ assert_same<int,T> a;
+}
+
+int main()
+{
+ auto const g([](auto &&... _var) {
+ sink(static_cast<decltype(_var)>(_var)...);
+ });
+
+ g(0);
+}
diff --git a/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr4.C b/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr4.C
new file mode 100644
index 0000000..71830cd
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr4.C
@@ -0,0 +1,13 @@
+// { dg-do compile { target c++14 } }
+
+struct A
+{
+ A(int);
+};
+
+struct B
+{
+ A a{42};
+};
+
+B f() { return {}; }
diff --git a/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr5.C b/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr5.C
new file mode 100644
index 0000000..fe377c3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr5.C
@@ -0,0 +1,24 @@
+// PR c++/70332
+// { dg-do run { target c++14 } }
+
+template <class T>
+struct C
+{
+ T m;
+ T *n = &m;
+};
+
+C<int> c { };
+
+int
+main ()
+{
+ *c.n = 5;
+ if (c.m != 5)
+ __builtin_abort ();
+
+ C<int> d { 10 };
+ *d.n = *d.n + 1;
+ if (d.m != 11)
+ __builtin_abort ();
+}
diff --git a/gcc/testsuite/g++.dg/cpp1y/nsdmi-union1.C b/gcc/testsuite/g++.dg/cpp1y/nsdmi-union1.C
new file mode 100644
index 0000000..d9dd0bf
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/nsdmi-union1.C
@@ -0,0 +1,33 @@
+// PR c++/70347
+// { dg-do run { target c++14 } }
+
+union A {
+ char a;
+ long b = -42;
+};
+
+struct B {
+ union {
+ char a = 10;
+ long b;
+ };
+};
+
+A c1{};
+A c2{4};
+B c3{};
+B c4{{9}};
+
+int main() {
+ if (c1.b != -42)
+ __builtin_abort ();
+
+ if (c2.a != 4)
+ __builtin_abort ();
+
+ if (c3.a != 10)
+ __builtin_abort ();
+
+ if (c4.a != 9)
+ __builtin_abort ();
+}
diff --git a/gcc/testsuite/g++.dg/cpp1y/paren2.C b/gcc/testsuite/g++.dg/cpp1y/paren2.C
new file mode 100644
index 0000000..b4a721f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/paren2.C
@@ -0,0 +1,31 @@
+// PR c++/69736
+// { dg-do compile { target c++14 } }
+
+void fn1(bool = true)
+{
+ (fn1)();
+}
+
+template <typename T>
+void fn2(T a = true)
+{
+ (fn1)();
+}
+
+void foo ()
+{
+ (fn2<bool>)();
+}
+
+struct X
+{
+ static void fn3(bool = true)
+ {
+ (X::fn3)();
+ }
+
+ void fn4(bool = true)
+ {
+ (X::fn4)();
+ }
+};
diff --git a/gcc/testsuite/g++.dg/cpp1y/paren3.C b/gcc/testsuite/g++.dg/cpp1y/paren3.C
new file mode 100644
index 0000000..850be2c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/paren3.C
@@ -0,0 +1,30 @@
+// PR c++/70106
+// { dg-do compile { target c++14 } }
+
+template <typename>
+struct A
+{
+ int x;
+
+ void foo () const {
+ (A::x);
+ }
+};
+
+struct B
+{
+ int x;
+
+ template <typename>
+ void foo () const {
+ (B::x);
+ }
+};
+
+void
+foo ()
+{
+ A<int> ().foo ();
+ B ().foo<int> ();
+}
+
diff --git a/gcc/testsuite/g++.dg/cpp1y/pr69066.C b/gcc/testsuite/g++.dg/cpp1y/pr69066.C
new file mode 100644
index 0000000..263e1b6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/pr69066.C
@@ -0,0 +1,75 @@
+// PR c++/69066
+// { dg-do compile { target c++14 } }
+
+template <typename T> T&& declval();
+
+template<typename T, T v>
+struct integral_constant
+{
+ static constexpr T value = v;
+ typedef T value_type;
+ typedef integral_constant<T, v> type;
+ constexpr operator value_type() const { return value; }
+};
+
+typedef integral_constant<bool, true> true_type;
+typedef integral_constant<bool, false> false_type;
+
+template <typename...>
+using void_t = void;
+
+template <typename, typename = void>
+class is_zero_callable : public false_type
+{
+};
+
+template <typename T>
+class is_zero_callable<T, void_t<decltype(declval<T>()())>>
+ : public true_type
+{
+};
+
+template <typename TF, bool TLastStep>
+struct curry_impl
+{
+ static auto exec(TF f)
+ {
+ // Bind `x` to subsequent calls.
+ return [=](auto x)
+ {
+ auto bound_f = [=](auto... xs) -> decltype(f(x, xs...))
+ {
+ return f(x, xs...);
+ };
+
+ // Recursive step.
+ return curry_impl<decltype(bound_f),
+ is_zero_callable<decltype(bound_f)>{}>::exec(bound_f);
+ };
+ }
+};
+
+template <typename TF>
+struct curry_impl<TF, true>
+{
+ static auto exec(TF f)
+ {
+ return f();
+ }
+};
+
+template <typename TF>
+auto curry(TF f)
+{
+ return curry_impl<TF, is_zero_callable<decltype(f)>{}>::exec(f);
+}
+
+int main()
+{
+ auto sum = [](int x, int y)
+ {
+ return x + y;
+ };
+
+ (void)curry(sum)(1)(1);
+}
diff --git a/gcc/testsuite/g++.dg/cpp1y/pr70001.C b/gcc/testsuite/g++.dg/cpp1y/pr70001.C
new file mode 100644
index 0000000..adbb132
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/pr70001.C
@@ -0,0 +1,49 @@
+// PR c++/70001
+// { dg-do compile { target c++14 } }
+
+struct B
+{
+ int a;
+ constexpr B () : a (0) { }
+ constexpr B (int x) : a (x) { }
+};
+struct C
+{
+ B c;
+ constexpr C () : c (0) { }
+};
+struct A
+{
+ B b[1 << 4];
+};
+struct D
+{
+ C d[1 << 4];
+};
+
+constexpr int
+foo (int a, int b)
+{
+ A c;
+ c.b[a].a += b;
+ c.b[b].a += a;
+ return c.b[0].a + c.b[a].a + c.b[b].a;
+}
+
+constexpr int
+bar (int a, int b)
+{
+ D c;
+ c.d[a].c.a += b;
+ c.d[b].c.a += a;
+ return c.d[0].c.a + c.d[a].c.a + c.d[b].c.a;
+}
+
+constexpr int d = foo (1, 2);
+constexpr int e = foo (0, 3);
+constexpr int f = foo (2, 4);
+constexpr int g = bar (1, 2);
+constexpr int h = bar (0, 3);
+constexpr int i = bar (2, 4);
+static_assert (d == 3 && e == 6 && f == 6, "");
+static_assert (g == 3 && h == 6 && i == 6, "");
diff --git a/gcc/testsuite/g++.dg/cpp1y/var-templ48.C b/gcc/testsuite/g++.dg/cpp1y/var-templ48.C
new file mode 100644
index 0000000..f0c7693
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/var-templ48.C
@@ -0,0 +1,5 @@
+// PR c++/66786
+// { dg-do compile { target c++14 } }
+
+template <typename... T> auto list = [](T... xs) { [=](auto f) { f(xs...); }; };
+int main() { list<int>(0); }
diff --git a/gcc/testsuite/g++.dg/cpp1y/var-templ49.C b/gcc/testsuite/g++.dg/cpp1y/var-templ49.C
new file mode 100644
index 0000000..7ac5744
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/var-templ49.C
@@ -0,0 +1,9 @@
+// PR c++/66786
+// { dg-do compile { target c++14 } }
+
+int f (int, bool);
+
+template <typename>
+auto list = [](auto... xs) { return [=](auto f, auto... ys) { return f(xs..., ys...); }; };
+
+const int &a = list<int>(0)(f, true);
diff --git a/gcc/testsuite/g++.dg/cpp1y/var-templ50.C b/gcc/testsuite/g++.dg/cpp1y/var-templ50.C
new file mode 100644
index 0000000..138a399
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/var-templ50.C
@@ -0,0 +1,11 @@
+// PR c++/70095
+// { dg-do link { target c++14 } }
+
+template <typename T> struct Foo;
+template <typename T> int variable_template = 0;
+template <typename T> int variable_template<Foo<T>> = 0;
+template <typename T> int get_variable_template() { return variable_template<T>; }
+
+int main() {
+ get_variable_template<Foo<int>>();
+}
diff --git a/gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C b/gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C
index 9b3b284..74c6f29 100644
--- a/gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C
+++ b/gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C
@@ -42,8 +42,8 @@
#ifndef __cpp_range_based_for
# error "__cpp_range_based_for"
-#elif __cpp_range_based_for != 200907
-# error "__cpp_range_based_for != 200907"
+#elif __cpp_range_based_for != 201603
+# error "__cpp_range_based_for != 201603"
#endif
#ifndef __cpp_decltype
@@ -328,8 +328,8 @@
#ifndef __cpp_fold_expressions
# error "__cpp_fold_expressions"
-#elif __cpp_fold_expressions != 201411
-# error "__cpp_fold_expressions != 201411"
+#elif __cpp_fold_expressions != 201603
+# error "__cpp_fold_expressions != 201603"
#endif
#ifndef __cpp_nontype_template_args
@@ -337,3 +337,9 @@
#elif __cpp_nontype_template_args != 201411
# error "__cpp_nontype_template_args != 201411"
#endif
+
+#ifndef __cpp_hex_float
+# error "__cpp_hex_float"
+#elif __cpp_hex_float != 201603
+# error "__cpp_hex_float != 201603"
+#endif
diff --git a/gcc/testsuite/g++.dg/cpp1z/fold1.C b/gcc/testsuite/g++.dg/cpp1z/fold1.C
index 3c33651..510d61a 100644
--- a/gcc/testsuite/g++.dg/cpp1z/fold1.C
+++ b/gcc/testsuite/g++.dg/cpp1z/fold1.C
@@ -22,11 +22,11 @@ MAKE_FNS (add, +);
MAKE_FNS (sub, -);
int main() {
- assert(unary_left_add() == 0);
+ // assert(unary_left_add() == 0);
assert(unary_left_add(1) == 1);
assert(unary_left_add(1, 2, 3) == 6);
- assert(unary_right_add() == 0);
+ // assert(unary_right_add() == 0);
assert(unary_right_add(1) == 1);
assert(unary_right_add(1, 2, 3) == 6);
diff --git a/gcc/testsuite/g++.dg/cpp1z/fold3.C b/gcc/testsuite/g++.dg/cpp1z/fold3.C
index 307818f..58d41e6 100644
--- a/gcc/testsuite/g++.dg/cpp1z/fold3.C
+++ b/gcc/testsuite/g++.dg/cpp1z/fold3.C
@@ -47,16 +47,16 @@ MAKE_FN (dot_star, .*);
MAKE_FN (arrow_star, ->*);
int main() {
- static_assert(add() == int(), "");
- static_assert(mul() == 1, "");
- static_assert(bor() == int(), "");
- static_assert(band() == -1, "");
static_assert(land() == true, "");
static_assert(lor() == false, "");
comma(); // No value to theck
// These are all errors, but the error is emitted at the point
// of instantiation (line 10).
+ add(); // { dg-message "required from here" }
+ mul(); // { dg-message "required from here" }
+ bor(); // { dg-message "required from here" }
+ band(); // { dg-message "required from here" }
sub(); // { dg-message "required from here" }
div(); // { dg-message "required from here" }
mod(); // { dg-message "required from here" }
diff --git a/gcc/testsuite/g++.dg/cpp1z/fold7.C b/gcc/testsuite/g++.dg/cpp1z/fold7.C
index 3e6925a..0451774 100644
--- a/gcc/testsuite/g++.dg/cpp1z/fold7.C
+++ b/gcc/testsuite/g++.dg/cpp1z/fold7.C
@@ -4,6 +4,6 @@
#error __cpp_fold_expressions not defined
#endif
-#if __cpp_fold_expressions != 201411
+#if __cpp_fold_expressions != 201603
#error Wrong value for __cpp_fold_expressions
#endif
diff --git a/gcc/testsuite/g++.dg/cpp1z/range-for1.C b/gcc/testsuite/g++.dg/cpp1z/range-for1.C
new file mode 100644
index 0000000..36e2d02
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1z/range-for1.C
@@ -0,0 +1,23 @@
+// P0184R0: Generalizing the Range-Based For Loop
+// { dg-options "-std=c++1z" }
+
+struct A {
+ int ar[4];
+ int *begin() { return ar; }
+ struct end_t {
+ int *p;
+ friend bool operator!= (int *p, end_t e) { return p != e.p; }
+ };
+ end_t end() { return { &ar[4] }; }
+};
+
+int main()
+{
+ A a { 1, 2, 3, 4 };
+ int i = 1;
+ for (auto x: a)
+ if (x != i++)
+ __builtin_abort ();
+ if (i != 5)
+ __builtin_abort ();
+}
diff --git a/gcc/testsuite/g++.dg/debug/pr70271.C b/gcc/testsuite/g++.dg/debug/pr70271.C
new file mode 100644
index 0000000..3c96d3a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/debug/pr70271.C
@@ -0,0 +1,36 @@
+// { dg-do compile }
+
+template <typename Function>
+struct function_traits
+: public function_traits<decltype(&Function::operator())>
+{ };
+
+template <typename ClassType, typename ReturnType, typename... Args>
+struct function_traits<ReturnType(ClassType::*)(Args...) const>
+{
+ typedef ReturnType (*pointer)(Args...);
+ typedef ReturnType return_type;
+};
+
+template <typename Function>
+typename function_traits<Function>::pointer
+FunctionPointer (const Function& lambda)
+{
+ return static_cast<typename function_traits<Function>::pointer>(lambda);
+}
+
+template <typename Function>
+typename function_traits<Function>::return_type
+GetReturnValue (Function func)
+{
+ typename function_traits<Function>::return_type *dummy;
+ return *dummy;
+}
+template <typename T> class ClassFoo {};
+template <typename T> void FuncBar () { }
+
+template <> inline void FuncBar<double> ()
+{
+ typedef void (*func_type)(ClassFoo<double> &);
+ func_type f1 = FunctionPointer ([](ClassFoo<double> & ref) { });
+}
diff --git a/gcc/testsuite/g++.dg/delayedfold/unary-plus1.C b/gcc/testsuite/g++.dg/delayedfold/unary-plus1.C
new file mode 100644
index 0000000..ebf3493
--- /dev/null
+++ b/gcc/testsuite/g++.dg/delayedfold/unary-plus1.C
@@ -0,0 +1,22 @@
+// PR c++/70153
+// { dg-do run }
+
+unsigned long long int
+fn1 (unsigned long long int i)
+{
+ return 2ULL * ((1 + (unsigned long int) +1) * i);
+}
+
+unsigned long long int
+fn2 (unsigned long long int i)
+{
+ return 2ULL * ((1 + (unsigned long int) +(1 + 0)) * i);
+}
+
+int
+main (void)
+{
+ if (fn1 (3ULL) != 12ULL
+ || fn2 (3ULL) != 12ULL)
+ __builtin_abort ();
+}
diff --git a/gcc/testsuite/g++.dg/diagnostic/pr70105.C b/gcc/testsuite/g++.dg/diagnostic/pr70105.C
new file mode 100644
index 0000000..9c9b02c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/diagnostic/pr70105.C
@@ -0,0 +1,43 @@
+// { dg-options "-Wsequence-point -fdiagnostics-show-caret" }
+
+void *libiberty_concat_ptr;
+extern unsigned long concat_length (const char *, ...);
+extern char *concat_copy2 (const char *, ...);
+
+#define ACONCAT(ACONCAT_PARAMS) \
+ (libiberty_concat_ptr = (char *) ALLOCA (concat_length ACONCAT_PARAMS + 1), /* { dg-warning "may be undefined" } */ \
+ concat_copy2 ACONCAT_PARAMS)
+
+/* Arbitrary content here.
+ In PR c++/70105, this was >500 lines of source.
+ This should not be printed. */
+
+# define ALLOCA(x) __builtin_alloca(x)
+
+int strlen (const char *);
+void *get_identifier (const char *);
+void *get_identifier_with_length (const char *, int);
+
+#define GET_IDENTIFIER(STR) \
+ (__builtin_constant_p (STR) \
+ ? get_identifier_with_length ((STR), strlen (STR)) \
+ : get_identifier (STR))
+
+void *test(void)
+{
+ int *i;
+ return GET_IDENTIFIER (ACONCAT (("foo")));
+}
+
+/* { dg-begin-multiline-output "" }
+ (libiberty_concat_ptr = (char *) ALLOCA (concat_length ACONCAT_PARAMS + 1),
+ ^
+ { dg-end-multiline-output "" } */
+/* { dg-begin-multiline-output "" }
+ ? get_identifier_with_length ((STR), strlen (STR)) \
+ ^~~
+ { dg-end-multiline-output "" } */
+/* { dg-begin-multiline-output "" }
+ return GET_IDENTIFIER (ACONCAT (("foo")));
+ ^~~~~~~
+ { dg-end-multiline-output "" } */
diff --git a/gcc/testsuite/g++.dg/expr/pmf-2.C b/gcc/testsuite/g++.dg/expr/pmf-2.C
new file mode 100644
index 0000000..79e36cf
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/pmf-2.C
@@ -0,0 +1,18 @@
+// PR c++/70386
+// { dg-options "-Wall" }
+
+struct A { void f () {} };
+struct B : public A {};
+struct C : public A {};
+struct D : public B, public C {};
+
+typedef void (C::*cp) ();
+typedef void (D::*dp) ();
+
+int
+main ()
+{
+ cp c = &A::f;
+ dp d = c;
+ return (cp () == d);
+}
diff --git a/gcc/testsuite/g++.dg/expr/stdarg3.C b/gcc/testsuite/g++.dg/expr/stdarg3.C
new file mode 100644
index 0000000..97aade0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/stdarg3.C
@@ -0,0 +1,18 @@
+// PR c++/70084
+// { dg-do compile }
+
+#include <stdarg.h>
+
+struct A
+{
+ A (const char *f, ...);
+};
+
+A::A (const char *f, ...)
+{
+ va_list ap;
+ va_start (ap, f);
+ int i = va_arg (ap, int); // { dg-bogus "first argument to 'va_arg' not of type 'va_list'" }
+ int j = va_arg ((ap), int); // { dg-bogus "first argument to 'va_arg' not of type 'va_list'" }
+ va_end (ap);
+}
diff --git a/gcc/testsuite/g++.dg/ext/attr-constructor1.C b/gcc/testsuite/g++.dg/ext/attr-constructor1.C
index ed522d3..9321871 100644
--- a/gcc/testsuite/g++.dg/ext/attr-constructor1.C
+++ b/gcc/testsuite/g++.dg/ext/attr-constructor1.C
@@ -1,5 +1,5 @@
// PR c++/59281
-// { dg-do compile { target c++11 } }
+// { dg-do compile { target { c++11 && init_priority } } }
enum class E : int { prio = 666 };
void f (int) __attribute__((constructor(E::prio))); // { dg-error "integer" }
diff --git a/gcc/testsuite/g++.dg/ext/attribute-may-alias-3.C b/gcc/testsuite/g++.dg/ext/attribute-may-alias-3.C
new file mode 100644
index 0000000..ba6091b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/attribute-may-alias-3.C
@@ -0,0 +1,22 @@
+// PR c++/68049
+// { dg-do compile { target c++11 } }
+
+template <typename T> struct Bar
+{
+ using type = T;
+};
+template <typename T> struct Foo
+{
+ typedef typename Bar<T>::type alias_type [[gnu::may_alias]];
+
+ alias_type operator()() { return {}; }
+};
+
+template <typename T> void print(T) {}
+
+int main()
+{
+ print(Foo<int>()());
+ print(0);
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/ext/attribute-may-alias-4.C b/gcc/testsuite/g++.dg/ext/attribute-may-alias-4.C
new file mode 100644
index 0000000..a459d49
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/attribute-may-alias-4.C
@@ -0,0 +1,17 @@
+// PR c++/70209
+
+struct V {
+ typedef float F;
+ template <typename S> void m_fn1(S);
+};
+
+template <typename> struct A {
+ typedef V::F Ta __attribute__((__may_alias__));
+ Ta *m_data;
+ void m_fn2(V &);
+};
+
+template <>
+void A<int>::m_fn2(V &p) {
+ p.m_fn1(m_data);
+}
diff --git a/gcc/testsuite/g++.dg/ext/attribute-may-alias-5.C b/gcc/testsuite/g++.dg/ext/attribute-may-alias-5.C
new file mode 100644
index 0000000..198e2ba
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/attribute-may-alias-5.C
@@ -0,0 +1,9 @@
+// PR c++/70512
+
+struct S
+{
+ S& operator= (int)
+ {
+ return *this;
+ }
+} __attribute__ ((__may_alias__));
diff --git a/gcc/testsuite/g++.dg/ext/builtin_alloca.C b/gcc/testsuite/g++.dg/ext/builtin_alloca.C
new file mode 100644
index 0000000..7a0d331
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/builtin_alloca.C
@@ -0,0 +1,195 @@
+// PR middle-end/69780 - [4.9/5/6 Regression] ICE on
+// __builtin_alloca_with_align with small alignment
+// { dg-require-effective-target alloca }
+// { dg-do compile }
+
+#define CHAR_BIT __CHAR_BIT__
+#define SIZE_MAX __SIZE_MAX__
+#define UINT_MAX (__INT_MAX__ + 1U)
+
+/* The largest valid alignment is undocumented and subject to change
+ but for the purposes of white box testing we rely on knowing that
+ it happens to be defined to (UINT_MAX >> 1) + 1. */
+#define ALIGN_MAX ((UINT_MAX >> 1) + 1)
+
+#if UINT_MAX < SIZE_MAX
+/* Define a constant to exercise an alignment that is valid a power
+ of 2 in excess of the maximum. */
+# define MAX_X_2 (ALIGN_MAX << 1)
+#else
+/* For targets where UINT_MAX is the same as SIZE_MAX, use an invalid
+ alignment that's less than the maximum to elicit the same errors. */
+# define MAX_X_2 (ALIGN_MAX + 1)
+#endif
+
+static void* p;
+
+// Verify that valid __builtin_alloca_with_align expressions are accepted.
+void test_valid (int n)
+{
+ enum {
+ A1 = CHAR_BIT * 1,
+ A2 = CHAR_BIT * 2,
+ A4 = CHAR_BIT * 4,
+ A8 = CHAR_BIT * 8,
+ A16 = CHAR_BIT * 16,
+ A32 = CHAR_BIT * 32
+ };
+
+ const int a1 = A1;
+ const int a2 = A2;
+ const int a4 = A4;
+ const int a8 = A8;
+ const int a16 = A16;
+ const int a32 = A32;
+
+ // Valid alignments are power of 2 positive multiples of CHAR_BIT.
+ p = __builtin_alloca_with_align (n, CHAR_BIT * 1);
+ p = __builtin_alloca_with_align (n, CHAR_BIT * 2);
+ p = __builtin_alloca_with_align (n, CHAR_BIT * 4);
+ p = __builtin_alloca_with_align (n, CHAR_BIT * 8);
+ p = __builtin_alloca_with_align (n, CHAR_BIT * 16);
+ p = __builtin_alloca_with_align (n, CHAR_BIT * 32);
+
+ p = __builtin_alloca_with_align (n, A1);
+ p = __builtin_alloca_with_align (n, A2);
+ p = __builtin_alloca_with_align (n, A4);
+ p = __builtin_alloca_with_align (n, A8);
+ p = __builtin_alloca_with_align (n, A16);
+ p = __builtin_alloca_with_align (n, A32);
+
+ p = __builtin_alloca_with_align (n, a1);
+ p = __builtin_alloca_with_align (n, a2);
+ p = __builtin_alloca_with_align (n, a4);
+ p = __builtin_alloca_with_align (n, a8);
+ p = __builtin_alloca_with_align (n, a16);
+ p = __builtin_alloca_with_align (n, a32);
+}
+
+template <int A> struct X { enum { Align = A }; };
+
+template <int A>
+void test_valid_template (int n)
+{
+ // Valid alignments are power of 2 positive multiples of CHAR_BIT.
+ p = __builtin_alloca_with_align (n, A);
+}
+
+template void test_valid_template<CHAR_BIT>(int);
+template void test_valid_template<CHAR_BIT * 2>(int);
+template void test_valid_template<CHAR_BIT * 4>(int);
+template void test_valid_template<CHAR_BIT * 8>(int);
+template void test_valid_template<CHAR_BIT * 16>(int);
+template void test_valid_template<CHAR_BIT * 32>(int);
+
+// Exercise the alignment in a dependent context.
+template <int A>
+void test_valid_template_dep (int n)
+{
+ // Valid alignments are power of 2 positive multiples of CHAR_BIT.
+ p = __builtin_alloca_with_align (n, X<A>::Align);
+}
+
+template void test_valid_template_dep<CHAR_BIT>(int);
+template void test_valid_template_dep<CHAR_BIT * 2>(int);
+template void test_valid_template_dep<CHAR_BIT * 4>(int);
+template void test_valid_template_dep<CHAR_BIT * 8>(int);
+template void test_valid_template_dep<CHAR_BIT * 16>(int);
+template void test_valid_template_dep<CHAR_BIT * 32>(int);
+
+// Invalid size must be rejected (and not cause an ICE).
+void test_arg1_non_int (int n)
+{
+ extern void f ();
+
+ p = __builtin_alloca_with_align ((void*)0, 32); // { dg-error "invalid conversion" }
+
+ p = __builtin_alloca_with_align ("", 32); // { dg-error "invalid conversion" }
+ p = __builtin_alloca_with_align (L"", 32); // { dg-error "invalid conversion" }
+ p = __builtin_alloca_with_align (f, 32); // { dg-error "invalid conversion" }
+}
+
+// Non-integer alignment must be rejected.
+void test_arg2_non_int (int n)
+{
+ // Verify the full text of the diagnostic just once.
+ p = __builtin_alloca_with_align (n, 0.0); // { dg-error "second argument to function .__builtin_alloca_with_align. must be a constant integer power of 2 between .8. and " }
+
+ p = __builtin_alloca_with_align (n, (void*)0); // { dg-error "invalid conversion|must be a constant integer" }
+ p = __builtin_alloca_with_align (n, ""); // { dg-error "invalid conversion|must be a constant integer" }
+ p = __builtin_alloca_with_align (n, L""); // { dg-error "invalid conversion|must be a constant integer" }
+}
+
+// Integer alignment that's not a constant expression must be rejected.
+void test_arg2_non_const (int n, int a1)
+{
+ extern const int a2;
+ static volatile const int a3 = CHAR_BIT;
+
+ p = __builtin_alloca_with_align (n, a1); // { dg-error "must be a constant integer" }
+ p = __builtin_alloca_with_align (n, a2); // { dg-error "must be a constant integer" }
+ p = __builtin_alloca_with_align (n, a3); // { dg-error "must be a constant integer" }
+}
+
+// Constant integer alignment that's not a power of 2 positive multiple
+// of CHAR_BIT must be rejected.
+void test_arg2_non_pow2 (int n)
+{
+ p = __builtin_alloca_with_align (n, 0); // { dg-error "must be a constant integer" }
+ p = __builtin_alloca_with_align (n, 1); // { dg-error "must be a constant integer" }
+ p = __builtin_alloca_with_align (n, 2); // { dg-error "must be a constant integer" }
+ p = __builtin_alloca_with_align (n, 3); // { dg-error "must be a constant integer" }
+ p = __builtin_alloca_with_align (n, 4); // { dg-error "must be a constant integer" }
+ p = __builtin_alloca_with_align (n, 5); // { dg-error "must be a constant integer" }
+ p = __builtin_alloca_with_align (n, 6); // { dg-error "must be a constant integer" }
+ p = __builtin_alloca_with_align (n, 7); // { dg-error "must be a constant integer" }
+ p = __builtin_alloca_with_align (n, 9); // { dg-error "must be a constant integer" }
+ p = __builtin_alloca_with_align (n, 10); // { dg-error "must be a constant integer" }
+ p = __builtin_alloca_with_align (n, 11); // { dg-error "must be a constant integer" }
+ p = __builtin_alloca_with_align (n, 12); // { dg-error "must be a constant integer" }
+ p = __builtin_alloca_with_align (n, 13); // { dg-error "must be a constant integer" }
+ p = __builtin_alloca_with_align (n, 14); // { dg-error "must be a constant integer" }
+ p = __builtin_alloca_with_align (n, 15); // { dg-error "must be a constant integer" }
+ p = __builtin_alloca_with_align (n, 17); // { dg-error "must be a constant integer" }
+ p = __builtin_alloca_with_align (n, 31); // { dg-error "must be a constant integer" }
+ p = __builtin_alloca_with_align (n, 33); // { dg-error "must be a constant integer" }
+ p = __builtin_alloca_with_align (n, 63); // { dg-error "must be a constant integer" }
+ p = __builtin_alloca_with_align (n, 65); // { dg-error "must be a constant integer" }
+ p = __builtin_alloca_with_align (n, SIZE_MAX); /* { dg-error "must be a constant integer" } */
+ p = __builtin_alloca_with_align (n, MAX_X_2); /* { dg-error "must be a constant integer" } */
+}
+
+// Exercise invalid alignment specified by a template argument.
+template <int A>
+void test_invalid_template_1 (int n)
+{
+ // Valid alignments are power of 2 positive multiples of CHAR_BIT.
+ p = __builtin_alloca_with_align (n, A); // { dg-error "must be a constant integer" }
+}
+
+template void test_invalid_template_1<1>(int);
+
+template <int A>
+void test_invalid_template_7 (int n)
+{
+ p = __builtin_alloca_with_align (n, A); // { dg-error "must be a constant integer" }
+}
+
+template void test_invalid_template_7<7>(int);
+
+template <int A>
+void test_invalid_template_9 (int n)
+{
+ p = __builtin_alloca_with_align (n, A); // { dg-error "must be a constant integer" }
+}
+
+template void test_invalid_template_9<9>(int);
+
+// Exercise invalid alignment specified by a template dependent argument.
+template <int A>
+void test_invalid_template_dep_1 (int n)
+{
+ p = __builtin_alloca_with_align (n, X<A>::Align); // { dg-error "must be a constant integer" }
+}
+
+template void test_invalid_template_dep_1<1>(int);
diff --git a/gcc/testsuite/g++.dg/ext/constexpr-vla1.C b/gcc/testsuite/g++.dg/ext/constexpr-vla1.C
index a5615bb..21eb93d 100644
--- a/gcc/testsuite/g++.dg/ext/constexpr-vla1.C
+++ b/gcc/testsuite/g++.dg/ext/constexpr-vla1.C
@@ -27,4 +27,4 @@ fn_not_ok (int n)
}
constexpr int n1 = fn_ok (3);
-constexpr int n2 = fn_not_ok (3); // { dg-error "array subscript out of bound" }
+constexpr int n2 = fn_not_ok (3); // { dg-error "array subscript" }
diff --git a/gcc/testsuite/g++.dg/ext/constexpr-vla2.C b/gcc/testsuite/g++.dg/ext/constexpr-vla2.C
index 6cb1f70..6aab1843 100644
--- a/gcc/testsuite/g++.dg/ext/constexpr-vla2.C
+++ b/gcc/testsuite/g++.dg/ext/constexpr-vla2.C
@@ -18,4 +18,4 @@ fn_ok (int n)
}
constexpr int i1 = fn_ok (3);
-constexpr int i2 = fn_bad (3); // { dg-error "array subscript out of bound" }
+constexpr int i2 = fn_bad (3); // { dg-error "array subscript" }
diff --git a/gcc/testsuite/g++.dg/ext/constexpr-vla3.C b/gcc/testsuite/g++.dg/ext/constexpr-vla3.C
index ba4eb50..33fc968 100644
--- a/gcc/testsuite/g++.dg/ext/constexpr-vla3.C
+++ b/gcc/testsuite/g++.dg/ext/constexpr-vla3.C
@@ -11,4 +11,4 @@ foo (int n)
return z;
}
-constexpr int n = foo (3); // { dg-error "array subscript out of bound" }
+constexpr int n = foo (3); // { dg-error "array subscript" }
diff --git a/gcc/testsuite/g++.dg/ext/constexpr-vla4.C b/gcc/testsuite/g++.dg/ext/constexpr-vla4.C
new file mode 100644
index 0000000..428a8fd
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/constexpr-vla4.C
@@ -0,0 +1,17 @@
+// PR c++/70452
+// { dg-do compile { target c++14 } }
+
+constexpr int
+foo (int n, bool p)
+{
+ __extension__ int a [n] = { 0 };
+ if (n == 3)
+ foo (n - 2, false);
+ if (n == 3)
+ foo(n - 1, true);
+ if (p)
+ return a[1];
+ return 0;
+}
+
+constexpr int i2 = foo (3, false); // { dg-bogus "array subscript out of bound" }
diff --git a/gcc/testsuite/g++.dg/ext/flexary15.C b/gcc/testsuite/g++.dg/ext/flexary15.C
new file mode 100644
index 0000000..c03a60e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/flexary15.C
@@ -0,0 +1,14 @@
+// PR c++/69912 - [6 regression] ICE in build_ctor_subob_ref initializing
+// a flexible array member
+// { dg-do compile }
+// { dg-options "-Wno-pedantic -Wno-write-strings -fpermissive" }
+
+struct S {
+ int n;
+ char *a[];
+};
+
+void foo (const char *a)
+{
+ const S s = { 1, { a, "b" } }; // { dg-warning "invalid conversion" }
+}
diff --git a/gcc/testsuite/g++.dg/ext/java-3.C b/gcc/testsuite/g++.dg/ext/java-3.C
new file mode 100644
index 0000000..128db65
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/java-3.C
@@ -0,0 +1,39 @@
+// PR c++/70267
+// { dg-do compile { target { ! { powerpc-ibm-aix* } } } }
+// { dg-options "-O2" }
+
+extern "Java"
+{
+ typedef __java_int jint;
+ namespace java
+ {
+ namespace lang
+ {
+ class Class;
+ class Object;
+ class Throwable {};
+ class Foo;
+ }
+ }
+}
+
+typedef struct java::lang::Object * jobject;
+typedef struct java::lang::Throwable * jthrowable;
+typedef class java::lang::Class * jclass;
+
+using java::lang::Foo;
+
+class Foo: public java::lang::Throwable
+{
+ public:static::java::lang::Class class$;
+};
+
+extern "C" Foo _Jv_AllocObject (jclass);
+extern "C" void _Jv_Throw (jthrowable) __attribute__ ((__noreturn__));
+
+void
+Bar4 (void)
+{
+ Foo * f = new java::lang::Foo; // { dg-error "is not a function returning a pointer" }
+ throw (f);
+}
diff --git a/gcc/testsuite/g++.dg/ext/pr70290.C b/gcc/testsuite/g++.dg/ext/pr70290.C
new file mode 100644
index 0000000..f524227
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/pr70290.C
@@ -0,0 +1,24 @@
+/* PR target/70290 */
+/* { dg-do compile } */
+/* { dg-options "-Wno-psabi -w" } */
+/* { dg-additional-options "-mavx512vl" { target { i?86-*-* x86_64-*-* } } } */
+
+typedef int vec __attribute__((vector_size(32)));
+
+vec
+test1 (vec x, vec y)
+{
+ return (x < y) ? 1 : 0;
+}
+
+vec
+test2 (vec x, vec y)
+{
+ vec zero = { };
+ vec one = zero + 1;
+ return (x < y) ? one : zero;
+}
+
+/* Ignore a warning that is irrelevant to the purpose of this test. */
+/* { dg-prune-output ".*GCC vector passed by reference.*" } */
+
diff --git a/gcc/testsuite/g++.dg/ext/pr70571.C b/gcc/testsuite/g++.dg/ext/pr70571.C
new file mode 100644
index 0000000..2381bfe
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/pr70571.C
@@ -0,0 +1,10 @@
+// PR c++/70571
+// { dg-do compile }
+
+typedef int V __attribute__ ((vector_size (sizeof (int))));
+
+void
+foo (V *x, V *y, int z)
+{
+ *x = (z == *y);
+}
diff --git a/gcc/testsuite/g++.dg/ext/vector30.C b/gcc/testsuite/g++.dg/ext/vector30.C
new file mode 100644
index 0000000..68326e3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/vector30.C
@@ -0,0 +1,15 @@
+// PR c++/70430
+// { dg-do run }
+extern "C" void abort (void);
+typedef int v4si __attribute__ ((vector_size (16)));
+int main()
+{
+ v4si b = {1,0,-1,2}, c;
+ c = b && 1;
+ if (c[0] != -1 || c[1] != 0 || c[2] != -1 || c[3] != -1)
+ abort ();
+ c = b && 0;
+ if (c[0] != 0 || c[1] != 0 || c[2] != 0 || c[3] != 0)
+ abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/goacc/reference.C b/gcc/testsuite/g++.dg/goacc/reference.C
new file mode 100644
index 0000000..b000668
--- /dev/null
+++ b/gcc/testsuite/g++.dg/goacc/reference.C
@@ -0,0 +1,39 @@
+int
+test1 (int &ref)
+{
+#pragma acc kernels copy (ref)
+ {
+ ref = 10;
+ }
+}
+
+int
+test2 (int &ref)
+{
+ int b;
+#pragma acc kernels copyout (b)
+ {
+ b = ref + 10;
+ }
+
+#pragma acc parallel copyout (b)
+ {
+ b = ref + 10;
+ }
+
+ ref = b;
+}
+
+int
+main()
+{
+ int a = 0;
+ int &ref_a = a;
+
+ #pragma acc parallel copy (a, ref_a)
+ {
+ ref_a = 5;
+ }
+
+ return a;
+}
diff --git a/gcc/testsuite/g++.dg/goacc/routine-1.C b/gcc/testsuite/g++.dg/goacc/routine-1.C
new file mode 100644
index 0000000..a73a73d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/goacc/routine-1.C
@@ -0,0 +1,13 @@
+/* Test valid use of the routine directive. */
+
+namespace N
+{
+ extern void foo1();
+ extern void foo2();
+#pragma acc routine (foo1)
+#pragma acc routine
+ void foo3()
+ {
+ }
+}
+#pragma acc routine (N::foo2)
diff --git a/gcc/testsuite/g++.dg/goacc/routine-2.C b/gcc/testsuite/g++.dg/goacc/routine-2.C
new file mode 100644
index 0000000..2d16466
--- /dev/null
+++ b/gcc/testsuite/g++.dg/goacc/routine-2.C
@@ -0,0 +1,42 @@
+/* Test invalid use of the routine directive. */
+
+template <typename T>
+extern T one_d();
+#pragma acc routine (one_d) /* { dg-error "names a set of overloads" } */
+
+template <typename T>
+T
+one()
+{
+ return 1;
+}
+#pragma acc routine (one) /* { dg-error "names a set of overloads" } */
+
+int incr (int);
+float incr (float);
+int inc;
+
+#pragma acc routine (incr) /* { dg-error "names a set of overloads" } */
+
+#pragma acc routine (increment) /* { dg-error "has not been declared" } */
+
+#pragma acc routine (inc) /* { dg-error "does not refer to a function" } */
+
+#pragma acc routine (+) /* { dg-error "expected unqualified-id before '.' token" } */
+
+int sum (int, int);
+
+namespace foo {
+#pragma acc routine (sum)
+ int sub (int, int);
+}
+
+#pragma acc routine (foo::sub)
+
+/* It's strange to apply a routine directive to subset of overloaded
+ functions, but that is permissible in OpenACC 2.x. */
+
+int decr (int a);
+
+#pragma acc routine
+float decr (float a);
diff --git a/gcc/testsuite/g++.dg/goacc/template.C b/gcc/testsuite/g++.dg/goacc/template.C
index f7a717b..f139dc2 100644
--- a/gcc/testsuite/g++.dg/goacc/template.C
+++ b/gcc/testsuite/g++.dg/goacc/template.C
@@ -1,8 +1,3 @@
-// This error is temporary. Remove when support is added for these clauses
-// in the middle end. Also remove the comments from the reduction test
-// after the FE learns that reduction variables may appear in data clauses too.
-// { dg-prune-output "sorry, unimplemented" }
-
#pragma acc routine
template <typename T> T
accDouble(int val)
@@ -20,55 +15,62 @@ oacc_parallel_copy (T a)
double z = 4;
#pragma acc parallel num_gangs (a) num_workers (a) vector_length (a) default (none) copyout (b) copyin (a)
- {
+#pragma acc loop gang worker vector
+ for (int i = 0; i < 1; i++)
b = a;
- }
#pragma acc parallel num_gangs (a) copy (w, x, y, z)
- {
- w = accDouble<char>(w);
- x = accDouble<int>(x);
- y = accDouble<float>(y);
- z = accDouble<double>(z);
- }
+#pragma acc loop
+ for (int i = 0; i < 1; i++)
+ {
+ w = accDouble<char>(w);
+ x = accDouble<int>(x);
+ y = accDouble<float>(y);
+ z = accDouble<double>(z);
+ }
#pragma acc parallel num_gangs (a) if (1)
{
+#pragma acc loop independent collapse (2) gang
+ for (int i = 0; i < a; i++)
+ for (int j = 0; j < 5; j++)
+ b = a;
+
#pragma acc loop auto tile (a, 3)
- for (int i = 0; i < a; i++)
- for (int j = 0; j < 5; j++)
- b = a;
+ for (int i = 0; i < a; i++)
+ for (int j = 0; j < 5; j++)
+ b = a;
#pragma acc loop seq
- for (int i = 0; i < a; i++)
- b = a;
+ for (int i = 0; i < a; i++)
+ b = a;
}
T c;
#pragma acc parallel num_workers (10)
- {
+#pragma acc loop worker
+ for (int i = 0; i < 1; i++)
+ {
#pragma acc atomic capture
- c = b++;
+ c = b++;
#pragma atomic update
- c++;
+ c++;
#pragma acc atomic read
- b = a;
+ b = a;
#pragma acc atomic write
- b = a;
- }
+ b = a;
+ }
-//#pragma acc parallel reduction (+:c)
-// {
-// c = 1;
-// }
+#pragma acc parallel reduction (+:c)
+ c = 1;
#pragma acc data if (1) copy (b)
{
- #pragma acc parallel
+#pragma acc parallel
{
b = a;
}
@@ -76,9 +78,9 @@ oacc_parallel_copy (T a)
#pragma acc enter data copyin (b)
#pragma acc parallel present (b)
- {
- b = a;
- }
+ {
+ b = a;
+ }
#pragma acc update host (b)
#pragma acc update self (b)
@@ -109,11 +111,9 @@ oacc_kernels_copy (T a)
#pragma acc kernels copyout (b) copyin (a)
b = a;
-//#pragma acc kernels loop reduction (+:c)
-// for (int i = 0; i < 10; i++)
-// {
-// c = 1;
-// }
+#pragma acc kernels loop reduction (+:c)
+ for (int i = 0; i < 10; i++)
+ c = 1;
#pragma acc data if (1) copy (b)
{
@@ -125,9 +125,10 @@ oacc_kernels_copy (T a)
#pragma acc enter data copyin (b)
#pragma acc kernels present (b)
- {
- b = a;
- }
+ {
+ b = a;
+ }
+
return b;
}
diff --git a/gcc/testsuite/g++.dg/gomp/declare-simd-1.C b/gcc/testsuite/g++.dg/gomp/declare-simd-1.C
index 1462efd..d2659e1 100644
--- a/gcc/testsuite/g++.dg/gomp/declare-simd-1.C
+++ b/gcc/testsuite/g++.dg/gomp/declare-simd-1.C
@@ -20,6 +20,8 @@ int f2 (int a, int *b, int c)
// { dg-final { scan-assembler-times "_ZGVcN8uva32l4__Z2f2iPii:" 1 { target { i?86-*-* x86_64-*-* } } } }
// { dg-final { scan-assembler-times "_ZGVdM8uva32l4__Z2f2iPii:" 1 { target { i?86-*-* x86_64-*-* } } } }
// { dg-final { scan-assembler-times "_ZGVdN8uva32l4__Z2f2iPii:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVeM8uva32l4__Z2f2iPii:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVeN8uva32l4__Z2f2iPii:" 1 { target { i?86-*-* x86_64-*-* } } } }
#pragma omp declare simd uniform (c) aligned (b : 4 * sizeof (int)) linear (a : 4) simdlen (4)
template <typename T>
@@ -85,6 +87,8 @@ namespace N1
// { dg-final { scan-assembler-times "_ZGVcN2va16__ZN2N12N23f10EPx:" 1 { target { i?86-*-* x86_64-*-* } } } }
// { dg-final { scan-assembler-times "_ZGVdM2va16__ZN2N12N23f10EPx:" 1 { target { i?86-*-* x86_64-*-* } } } }
// { dg-final { scan-assembler-times "_ZGVdN2va16__ZN2N12N23f10EPx:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVeM2va16__ZN2N12N23f10EPx:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVeN2va16__ZN2N12N23f10EPx:" 1 { target { i?86-*-* x86_64-*-* } } } }
struct A
{
@@ -193,6 +197,8 @@ int B<int>::f25<7> (int a, int *b, int c)
// { dg-final { scan-assembler-times "_ZGVcN8vuva32u__ZN1BIiE3f25ILi7EEEiiPii:" 1 { target { i?86-*-* x86_64-*-* } } } }
// { dg-final { scan-assembler-times "_ZGVdM8vuva32u__ZN1BIiE3f25ILi7EEEiiPii:" 1 { target { i?86-*-* x86_64-*-* } } } }
// { dg-final { scan-assembler-times "_ZGVdN8vuva32u__ZN1BIiE3f25ILi7EEEiiPii:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVeM8vuva32u__ZN1BIiE3f25ILi7EEEiiPii:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVeN8vuva32u__ZN1BIiE3f25ILi7EEEiiPii:" 1 { target { i?86-*-* x86_64-*-* } } } }
#pragma omp declare simd simdlen (4) aligned (b : 8 * sizeof (int)) linear (a, c : 2)
template <>
@@ -208,6 +214,8 @@ int B<int>::f26<-1> (int a, int *b, int c)
// { dg-final { scan-assembler-times "_ZGVcN4vl2va32__ZN1BIiE3f26ILin1EEEiiPii:" 1 { target { i?86-*-* x86_64-*-* } } } }
// { dg-final { scan-assembler-times "_ZGVdM4vl2va32__ZN1BIiE3f26ILin1EEEiiPii:" 1 { target { i?86-*-* x86_64-*-* } } } }
// { dg-final { scan-assembler-times "_ZGVdN4vl2va32__ZN1BIiE3f26ILin1EEEiiPii:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVeM4vl2va32__ZN1BIiE3f26ILin1EEEiiPii:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVeN4vl2va32__ZN1BIiE3f26ILin1EEEiiPii:" 1 { target { i?86-*-* x86_64-*-* } } } }
int
f27 (int x)
@@ -237,6 +245,8 @@ f30 (int x)
// { dg-final { scan-assembler-times "_ZGVcN16v__Z3f30i:" 1 { target { i?86-*-* x86_64-*-* } } } }
// { dg-final { scan-assembler-times "_ZGVdM16v__Z3f30i:" 1 { target { i?86-*-* x86_64-*-* } } } }
// { dg-final { scan-assembler-times "_ZGVdN16v__Z3f30i:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVeM16v__Z3f30i:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVeN16v__Z3f30i:" 1 { target { i?86-*-* x86_64-*-* } } } }
template <int N>
struct C
diff --git a/gcc/testsuite/g++.dg/gomp/declare-simd-3.C b/gcc/testsuite/g++.dg/gomp/declare-simd-3.C
index 4ae4251..32cdc58 100644
--- a/gcc/testsuite/g++.dg/gomp/declare-simd-3.C
+++ b/gcc/testsuite/g++.dg/gomp/declare-simd-3.C
@@ -19,6 +19,8 @@ int f1 (int a, int b, int c, int &d, int &e, int &f)
// { dg-final { scan-assembler-times "_ZGVcN4vulLUR4__Z2f1iiiRiS_S_:" 1 { target { i?86-*-* x86_64-*-* } } } }
// { dg-final { scan-assembler-times "_ZGVdM8vulLUR4__Z2f1iiiRiS_S_:" 1 { target { i?86-*-* x86_64-*-* } } } }
// { dg-final { scan-assembler-times "_ZGVdN8vulLUR4__Z2f1iiiRiS_S_:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVeM16vulLUR4__Z2f1iiiRiS_S_:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVeN16vulLUR4__Z2f1iiiRiS_S_:" 1 { target { i?86-*-* x86_64-*-* } } } }
#pragma omp declare simd uniform(b) linear(c, d) linear(uval(e)) linear(ref(f))
int f2 (int a, int b, int c, int &d, int &e, int &f)
@@ -44,6 +46,8 @@ int f2 (int a, int b, int c, int &d, int &e, int &f)
// { dg-final { scan-assembler-times "_ZGVcN4vulLUR4__Z2f2iiiRiS_S_:" 1 { target { i?86-*-* x86_64-*-* } } } }
// { dg-final { scan-assembler-times "_ZGVdM8vulLUR4__Z2f2iiiRiS_S_:" 1 { target { i?86-*-* x86_64-*-* } } } }
// { dg-final { scan-assembler-times "_ZGVdN8vulLUR4__Z2f2iiiRiS_S_:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVeM16vulLUR4__Z2f2iiiRiS_S_:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVeN16vulLUR4__Z2f2iiiRiS_S_:" 1 { target { i?86-*-* x86_64-*-* } } } }
#pragma omp declare simd uniform(b) linear(c, d) linear(uval(e)) linear(ref(f))
int f3 (const int a, const int b, const int c, const int &d, const int &e, const int &f)
@@ -57,6 +61,8 @@ int f3 (const int a, const int b, const int c, const int &d, const int &e, const
// { dg-final { scan-assembler-times "_ZGVcN4vulLUR4__Z2f3iiiRKiS0_S0_:" 1 { target { i?86-*-* x86_64-*-* } } } }
// { dg-final { scan-assembler-times "_ZGVdM8vulLUR4__Z2f3iiiRKiS0_S0_:" 1 { target { i?86-*-* x86_64-*-* } } } }
// { dg-final { scan-assembler-times "_ZGVdN8vulLUR4__Z2f3iiiRKiS0_S0_:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVeM16vulLUR4__Z2f3iiiRKiS0_S0_:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVeN16vulLUR4__Z2f3iiiRKiS0_S0_:" 1 { target { i?86-*-* x86_64-*-* } } } }
#pragma omp declare simd uniform(b) linear(c, d) linear(uval(e)) linear(ref(f))
int f4 (const int a, const int b, const int c, const int &d, const int &e, const int &f)
@@ -76,3 +82,5 @@ int f4 (const int a, const int b, const int c, const int &d, const int &e, const
// { dg-final { scan-assembler-times "_ZGVcN4vulLUR4__Z2f4iiiRKiS0_S0_:" 1 { target { i?86-*-* x86_64-*-* } } } }
// { dg-final { scan-assembler-times "_ZGVdM8vulLUR4__Z2f4iiiRKiS0_S0_:" 1 { target { i?86-*-* x86_64-*-* } } } }
// { dg-final { scan-assembler-times "_ZGVdN8vulLUR4__Z2f4iiiRKiS0_S0_:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVeM16vulLUR4__Z2f4iiiRKiS0_S0_:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVeN16vulLUR4__Z2f4iiiRKiS0_S0_:" 1 { target { i?86-*-* x86_64-*-* } } } }
diff --git a/gcc/testsuite/g++.dg/gomp/declare-simd-4.C b/gcc/testsuite/g++.dg/gomp/declare-simd-4.C
index 51382bf..acf03d9 100644
--- a/gcc/testsuite/g++.dg/gomp/declare-simd-4.C
+++ b/gcc/testsuite/g++.dg/gomp/declare-simd-4.C
@@ -11,6 +11,8 @@ f1 (int *p, int *q, short *s)
// { dg-final { scan-assembler-times "_ZGVcN4l4ln4ln6__Z2f1PiS_Ps:" 1 { target { i?86-*-* x86_64-*-* } } } }
// { dg-final { scan-assembler-times "_ZGVdM8l4ln4ln6__Z2f1PiS_Ps:" 1 { target { i?86-*-* x86_64-*-* } } } }
// { dg-final { scan-assembler-times "_ZGVdN8l4ln4ln6__Z2f1PiS_Ps:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVeM16l4ln4ln6__Z2f1PiS_Ps:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVeN16l4ln4ln6__Z2f1PiS_Ps:" 1 { target { i?86-*-* x86_64-*-* } } } }
#pragma omp declare simd linear(p:s) linear(q:t) uniform (s) linear(r:s) notinbranch simdlen(8) uniform(t)
int
@@ -22,6 +24,7 @@ f2 (int *p, short *q, int s, int r, int &t)
// { dg-final { scan-assembler-times "_ZGVbN8ls2ls4uls2u__Z2f2PiPsiiRi:" 1 { target { i?86-*-* x86_64-*-* } } } }
// { dg-final { scan-assembler-times "_ZGVcN8ls2ls4uls2u__Z2f2PiPsiiRi:" 1 { target { i?86-*-* x86_64-*-* } } } }
// { dg-final { scan-assembler-times "_ZGVdN8ls2ls4uls2u__Z2f2PiPsiiRi:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVeN8ls2ls4uls2u__Z2f2PiPsiiRi:" 1 { target { i?86-*-* x86_64-*-* } } } }
#pragma omp declare simd linear(ref(p):s) linear(val(q):t) uniform (s) linear(uval(r):s) notinbranch simdlen(8) uniform(t)
int
@@ -33,3 +36,4 @@ f3 (int &p, short &q, int s, int &r, int &t)
// { dg-final { scan-assembler-times "_ZGVbN8Rs2Ls4uUs2u__Z2f3RiRsiS_S_:" 1 { target { i?86-*-* x86_64-*-* } } } }
// { dg-final { scan-assembler-times "_ZGVcN8Rs2Ls4uUs2u__Z2f3RiRsiS_S_:" 1 { target { i?86-*-* x86_64-*-* } } } }
// { dg-final { scan-assembler-times "_ZGVdN8Rs2Ls4uUs2u__Z2f3RiRsiS_S_:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVeN8Rs2Ls4uUs2u__Z2f3RiRsiS_S_:" 1 { target { i?86-*-* x86_64-*-* } } } }
diff --git a/gcc/testsuite/g++.dg/gomp/gomp.exp b/gcc/testsuite/g++.dg/gomp/gomp.exp
index 7365389..d26596c 100644
--- a/gcc/testsuite/g++.dg/gomp/gomp.exp
+++ b/gcc/testsuite/g++.dg/gomp/gomp.exp
@@ -29,7 +29,7 @@ dg-init
# Main loop.
g++-dg-runtest [lsort [concat \
[find $srcdir/$subdir *.C] \
- [find $srcdir/c-c++-common/gomp *.c]]] "" "-fopenmp"
+ [find $srcdir/c-c++-common/gomp *.c]]] "" "-fopenmp -Wno-hsa"
# All done.
dg-finish
diff --git a/gcc/testsuite/g++.dg/gomp/target-teams-1.C b/gcc/testsuite/g++.dg/gomp/target-teams-1.C
index 0a97de0..f78a608 100644
--- a/gcc/testsuite/g++.dg/gomp/target-teams-1.C
+++ b/gcc/testsuite/g++.dg/gomp/target-teams-1.C
@@ -1,5 +1,5 @@
// { dg-do compile }
-// { dg-options "-fopenmp -fdump-tree-gimple" }
+// { dg-additional-options "-fdump-tree-gimple" }
int v = 6;
void bar (int);
diff --git a/gcc/testsuite/g++.dg/init/new47.C b/gcc/testsuite/g++.dg/init/new47.C
new file mode 100644
index 0000000..acd52d7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/new47.C
@@ -0,0 +1,19 @@
+// PR c++/70448
+// { dg-do compile }
+// { dg-options "-Wall" }
+
+typedef __typeof__ (sizeof 0) size_t;
+void *operator new (size_t, void *p) { return p; }
+void *operator new[] (size_t, void *p) { return p; }
+struct S { size_t s; };
+void bar (S *);
+
+void
+foo (unsigned int s)
+{
+ char t[sizeof (S) + s];
+ S *f = new (t) S;
+ bar (f);
+ f = new (t) S[1];
+ bar (f);
+}
diff --git a/gcc/testsuite/g++.dg/init/pr70501.C b/gcc/testsuite/g++.dg/init/pr70501.C
new file mode 100644
index 0000000..901b3c1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/pr70501.C
@@ -0,0 +1,11 @@
+/* { dg-options "" } Not pedantic */
+
+typedef int v4si __attribute__ ((vector_size (16)));
+
+struct S { v4si v; };
+
+void
+fn2 (int i, int j)
+{
+ struct S s = { .v = i <= j + (v4si){(1, 2)} };
+}
diff --git a/gcc/testsuite/g++.dg/ipa/devirt-51.C b/gcc/testsuite/g++.dg/ipa/devirt-51.C
new file mode 100644
index 0000000..236635a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ipa/devirt-51.C
@@ -0,0 +1,32 @@
+/* Be sure we do not optimize the virtual call into call of the only non-virtual
+ variant. Either keeping virtual call or optimizing to cxa_pure_virtual
+ is fine. */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fsanitize=unreachable -fdump-tree-optimized" } */
+namespace {
+ struct B {
+ B* self;
+ B() : self( this ) { self->f(); }
+ void E(void);
+ virtual void f() = 0;
+ };
+
+ struct D : B
+ {
+ void f() {}
+ };
+}
+
+struct D e;
+
+__attribute__ ((used))
+void B::E(void)
+ {
+ this->f();
+}
+
+ int main()
+ {
+ D d;
+ }
+/* { dg-final { scan-tree-dump "cxa_pure_virtual" "optimized" } } */
diff --git a/gcc/testsuite/g++.dg/lookup/pr70205.C b/gcc/testsuite/g++.dg/lookup/pr70205.C
new file mode 100644
index 0000000..3bda7fb
--- /dev/null
+++ b/gcc/testsuite/g++.dg/lookup/pr70205.C
@@ -0,0 +1,11 @@
+// PR c++/70205
+
+struct A
+{
+protected:
+ static void f ();
+};
+struct B : A { };
+struct C : A { };
+struct D : C, B { void a () { D::f (); } };
+struct E : D { void b () { D::f (); } };
diff --git a/gcc/testsuite/g++.dg/lto/pr69589_0.C b/gcc/testsuite/g++.dg/lto/pr69589_0.C
new file mode 100644
index 0000000..bbdcb73
--- /dev/null
+++ b/gcc/testsuite/g++.dg/lto/pr69589_0.C
@@ -0,0 +1,26 @@
+// { dg-lto-do link }
+// { dg-lto-options "-O2 -rdynamic" }
+// { dg-extra-ld-options "-r -nostdlib" }
+#pragma GCC visibility push(hidden)
+struct A { int &operator[] (long); };
+template <typename> struct B;
+template <typename T, typename = B<T> >
+using Z = int;
+template <typename> struct C;
+struct S {
+ int e;
+ virtual ~S () {}
+};
+struct D : S {
+ A a;
+ long i;
+ D() { { e ? &a[i] : nullptr; } }
+};
+template <>
+struct C<int> { Z<S> m8 () const; };
+Z<S>
+C<int>::m8 () const
+{
+ D ();
+}
+
diff --git a/gcc/testsuite/g++.dg/lto/pr69589_1.C b/gcc/testsuite/g++.dg/lto/pr69589_1.C
new file mode 100644
index 0000000..01c1620
--- /dev/null
+++ b/gcc/testsuite/g++.dg/lto/pr69589_1.C
@@ -0,0 +1,61 @@
+struct A;
+template <class T>
+struct Q { Q (T); };
+template<typename T, class D>
+struct U {
+ ~U () { m1 (nullptr); }
+ D m2 ();
+ T *u;
+ void m1 (T *) { m2 () (u); }
+};
+struct F { F (int *); };
+template <class, class T = F>
+using W = Q<T>;
+int a, b;
+void fn1 (void *);
+template <class T>
+void
+fn2 (T *x)
+{
+ if (x)
+ x->~T();
+ fn1 (x);
+}
+template <typename T>
+struct C {
+ void operator() (T *x) { fn2 (x); }
+};
+struct D;
+template <typename T, typename D = C<T> >
+using V = U<T, D>;
+struct A {
+ A (int *);
+};
+struct S;
+struct G {
+ V<S> m3 ();
+};
+struct S {
+ int e;
+ virtual ~S () {}
+};
+template<typename T>
+struct H {
+ H (int, T x, int) : h(x) {}
+ G g;
+ void m4 () { g.m3 (); }
+ T h;
+};
+struct I {
+ I(A, W<D>);
+};
+void
+test ()
+{
+ A c (&b);
+ W<D> d (&b);
+ I e (c, d);
+ H<I> f (0, e, a);
+ f.m4 ();
+}
+
diff --git a/gcc/testsuite/g++.dg/opt/flifetime-dse4.C b/gcc/testsuite/g++.dg/opt/flifetime-dse4.C
new file mode 100644
index 0000000..c72444a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/flifetime-dse4.C
@@ -0,0 +1,27 @@
+// { dg-options "-O3 -flifetime-dse=1" }
+// { dg-do run }
+
+typedef __SIZE_TYPE__ size_t;
+inline void * operator new (size_t, void *p) { return p; }
+
+struct A
+{
+ int i;
+ A() {}
+ ~A() {}
+};
+
+int main()
+{
+ int ar[1] = { 42 };
+ A* ap = new(ar) A;
+
+ // With -flifetime-dse=1 we retain the old value.
+ if (ap->i != 42) __builtin_abort();
+
+ ap->i = 42;
+ ap->~A();
+
+ // When the destructor ends the object no longer exists.
+ if (ar[0] == 42) __builtin_abort();
+}
diff --git a/gcc/testsuite/g++.dg/opt/flifetime-dse5.C b/gcc/testsuite/g++.dg/opt/flifetime-dse5.C
new file mode 100644
index 0000000..9275944
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/flifetime-dse5.C
@@ -0,0 +1,13 @@
+// PR c++/70259
+// { dg-options -O2 }
+// { dg-do run }
+
+struct Empty { };
+struct A { A() : a(true) { } bool a; };
+struct B : Empty { B() : Empty() { } };
+struct C : A, B { C() : A(), B() { } };
+int main() {
+ C c;
+ if ( c.a == false )
+ __builtin_abort();
+}
diff --git a/gcc/testsuite/g++.dg/opt/flifetime-dse6.C b/gcc/testsuite/g++.dg/opt/flifetime-dse6.C
new file mode 100644
index 0000000..6c80558
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/flifetime-dse6.C
@@ -0,0 +1,11 @@
+// PR c++/70272
+// { dg-options -O2 }
+// { dg-do run }
+
+struct Empty { };
+struct A { A() : a(true) { } bool a; ~A() { if (!a) __builtin_abort(); } };
+struct B : Empty { B() : Empty() { } ~B() { } };
+struct C : A, B { C() : A(), B() { } ~C() { } };
+int main() {
+ C c;
+}
diff --git a/gcc/testsuite/g++.dg/opt/pr70245-aux.cc b/gcc/testsuite/g++.dg/opt/pr70245-aux.cc
new file mode 100644
index 0000000..7f65f20
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/pr70245-aux.cc
@@ -0,0 +1,56 @@
+// PR target/70245
+// { dg-do compile }
+// { dg-options "" }
+
+#include "pr70245.h"
+
+D m;
+A n, o;
+int p, q;
+
+int *
+fn1 (char *x, int *y)
+{
+ *y = 0;
+ return &p;
+}
+
+void
+fn2 ()
+{
+ __builtin_abort ();
+}
+
+void *
+fn3 (int *x)
+{
+ *x = 0;
+ return (void *) &m;
+}
+
+void *
+fn4 ()
+{
+ a = &o;
+ o.a1.d = 9;
+ m.d = sizeof (D);
+ __builtin_memcpy (o.a2.c, "abcdefghijklmnop", 16);
+ return (void *) &n;
+}
+
+void
+fn5 (A *x, B *y, unsigned char *z, int *w)
+{
+ if (x != &n || y != &k || z != (unsigned char *) (&m + 1))
+ __builtin_abort ();
+ q++;
+}
+
+int
+main ()
+{
+ d = fn5;
+ baz (0);
+ if (q != 1)
+ __builtin_abort ();
+}
diff --git a/gcc/testsuite/g++.dg/opt/pr70245.C b/gcc/testsuite/g++.dg/opt/pr70245.C
new file mode 100644
index 0000000..21280b7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/pr70245.C
@@ -0,0 +1,52 @@
+// PR target/70245
+// { dg-do run }
+// { dg-additional-sources "pr70245-aux.cc" }
+// { dg-options "-O2" }
+// { dg-additional-options "-fPIC" { target fpic } }
+// { dg-additional-options "-march=i386 -mtune=atom" { target ia32 } }
+
+#include "pr70245.h"
+
+struct A *a, *i;
+int b, c, e, l;
+F d;
+
+static A *
+foo (B *x, int *y, int *z)
+{
+ unsigned char *f = (unsigned char *) fn3 (y);
+ D *g = (D *) f;
+ A *h;
+ if (e || a || c || b || g->d)
+ return 0;
+ h = (A *) fn4 ();
+ __builtin_memcpy (h, a, sizeof (A));
+ h->a1 = *(D *) f;
+ if (d)
+ {
+ d (h, x, f + g->d, z);
+ if (*z)
+ fn2 ();
+ }
+ return h;
+}
+
+static A *
+bar (B *x, int *y)
+{
+ int *j = fn1 (x->b, y);
+ if (*y > 0)
+ return 0;
+ i = foo (x, j, y);
+ return i;
+}
+
+B k;
+
+void
+baz (int x)
+{
+ if (x)
+ bar (0, 0);
+ bar (&k, &l);
+}
diff --git a/gcc/testsuite/g++.dg/opt/pr70245.h b/gcc/testsuite/g++.dg/opt/pr70245.h
new file mode 100644
index 0000000..b0c5406
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/pr70245.h
@@ -0,0 +1,14 @@
+extern struct A *a, *i;
+extern int b, c, e, l;
+int *fn1 (char *, int *);
+void fn2 ();
+void *fn3 (int *);
+struct B { char *b; };
+typedef void (*F) (A *, B *, unsigned char *, int *);
+struct C { int c[16]; };
+struct D { int d; };
+struct A { D a1; C a2; };
+void *fn4 ();
+extern F d;
+extern B k;
+extern void baz (int);
diff --git a/gcc/testsuite/g++.dg/other/bitfield5.C b/gcc/testsuite/g++.dg/other/bitfield5.C
new file mode 100644
index 0000000..b8cd4dd
--- /dev/null
+++ b/gcc/testsuite/g++.dg/other/bitfield5.C
@@ -0,0 +1,15 @@
+// PR c++/70285
+
+int a;
+
+struct S
+{
+ int i:8;
+} b;
+
+int
+fn1 (bool x)
+{
+ (&fn1 ? b.i : a) = 42;
+ return (&fn1 ? b.i : a);
+}
diff --git a/gcc/testsuite/g++.dg/parse/invalid1.C b/gcc/testsuite/g++.dg/parse/invalid1.C
new file mode 100644
index 0000000..f72e277
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/invalid1.C
@@ -0,0 +1,5 @@
+// PR c++/69795
+// { dg-do compile { target c++11 } }
+// { dg-options "-w" }
+
+int foo ( foo += *[ // { dg-error "" }
diff --git a/gcc/testsuite/g++.dg/parse/pr68722.C b/gcc/testsuite/g++.dg/parse/pr68722.C
new file mode 100644
index 0000000..44a6213
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/pr68722.C
@@ -0,0 +1,9 @@
+// PR c++/68722
+
+class A {
+ &__loc // { dg-error "" }
+} class ios_base { // { dg-error "" }
+ A _M_ios_locale ios_base(ios_base &) template <_Traits> class basic_ios { // { dg-error "" }
+basic_ios basic_ios = operator= // { dg-error "" }
+
+// { dg-prune-output "file ends in default argument" }
diff --git a/gcc/testsuite/g++.dg/plugin/pragma_plugin.c b/gcc/testsuite/g++.dg/plugin/pragma_plugin.c
index 940c302..6f47398 100644
--- a/gcc/testsuite/g++.dg/plugin/pragma_plugin.c
+++ b/gcc/testsuite/g++.dg/plugin/pragma_plugin.c
@@ -32,14 +32,16 @@ handle_pragma_sayhello (cpp_reader *dummy)
return;
}
if (TREE_STRING_LENGTH (message) > 1)
- if (cfun)
- warning (OPT_Wpragmas,
- "%<pragma GCCPLUGIN sayhello%> from function %qE: %s",
- cfun->decl, TREE_STRING_POINTER (message));
+ {
+ if (cfun)
+ warning (OPT_Wpragmas,
+ "%<pragma GCCPLUGIN sayhello%> from function %qE: %s",
+ cfun->decl, TREE_STRING_POINTER (message));
else
- warning (OPT_Wpragmas,
- "%<pragma GCCPLUGIN sayhello%> outside of function: %s",
- TREE_STRING_POINTER (message));
+ warning (OPT_Wpragmas,
+ "%<pragma GCCPLUGIN sayhello%> outside of function: %s",
+ TREE_STRING_POINTER (message));
+ }
}
/* Plugin callback called during pragma registration */
diff --git a/gcc/testsuite/g++.dg/pr61033.C b/gcc/testsuite/g++.dg/pr61033.C
new file mode 100644
index 0000000..6974351
--- /dev/null
+++ b/gcc/testsuite/g++.dg/pr61033.C
@@ -0,0 +1,86 @@
+// PR debug/61033
+// { dg-do compile }
+// { dg-options "-g -O2" }
+
+# 0 "" 3
+struct A {
+ A(int) : ch() {}
+ unicode() {}
+ int ch;
+};
+class QChar {
+public:
+ QChar(A ch) : ucs(ch.unicode()) {}
+ int ucs;
+};
+class B {
+public:
+ int isShared_count;
+ isShared() { return isShared_count; }
+};
+struct C {
+ unsigned short *data() {
+ void *__trans_tmp_1;
+ __trans_tmp_1 = reinterpret_cast<char *>(0) + offset;
+ return static_cast<unsigned short *>(__trans_tmp_1);
+ }
+ B ref;
+ int size;
+ int alloc;
+ int offset;
+};
+class D {
+public:
+ D(char *) : m_data() {} * m_data;
+};
+class F {
+public:
+ F(int, QChar);
+ F(D);
+ operator+=(QChar) {
+ if (d->ref.isShared() || d->alloc)
+ reallocData();
+ d->data()[d->size++] = 0;
+ d->data()[0] = '\0';
+ }
+ C *d;
+ reallocData();
+};
+struct G {
+ struct H {
+ int begin;
+ };
+ H d;
+ size() { return d.begin; }
+};
+class I {
+ G p;
+public:
+ ~I();
+ length() { return p.size(); }
+};
+class J;
+class K {
+public:
+ J toNodeListProperty() const;
+};
+class L {
+ F toQml(const K &property) const;
+ toQml() const;
+};
+class J {
+public:
+ I toModelNodeList();
+};
+F::F(D) {}
+F L::toQml(const K &property) const {
+ I nodes = property.toNodeListProperty().toModelNodeList();
+ F result("");
+ F(0, A(' '));
+ for (int i = 0; i < nodes.length(); ++i) {
+ if (i)
+ result += A(',');
+ result += A('\n');
+ toQml();
+ }
+}
diff --git a/gcc/testsuite/g++.dg/pr63384.C b/gcc/testsuite/g++.dg/pr63384.C
new file mode 100644
index 0000000..ac581d0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/pr63384.C
@@ -0,0 +1,12 @@
+/* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */
+/* { dg-options "-O2 -fselective-scheduling2 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops -fsel-sched-reschedule-pipelined -fvar-tracking-assignments -ftree-vectorize -w" } */
+
+template <class T> T **make_test_matrix() {
+ T **data = new T *;
+ for (int i = 0; i < 1000; i++)
+ ;
+}
+
+template <typename T> void test() { T **c = make_test_matrix<T>(); }
+
+main() { test<float>(); }
diff --git a/gcc/testsuite/g++.dg/pr70098.C b/gcc/testsuite/g++.dg/pr70098.C
new file mode 100644
index 0000000..f5eb48f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/pr70098.C
@@ -0,0 +1,91 @@
+// PR target/70098
+// { dg-do compile }
+// { dg-options -O2 }
+// { dg-require-effective-target c++11 }
+// { dg-xfail-if "PR70098" { lp64 && powerpc64_no_dm } }
+// { dg-prune-output ".*internal compiler error.*" }
+
+template < typename > struct traits;
+template < typename, int _Rows, int _Cols, int = 0, int = _Rows,
+ int = _Cols > class Matrix;
+template < typename > class G;
+template < typename Derived > struct A {
+ typedef G < Derived > type;
+};
+
+template < typename Derived > class C {
+public:
+ enum { RowsAtCompileTime =
+ traits < Derived >::RowsAtCompileTime } static Zero;
+};
+
+template < typename Derived > class G:public C < Derived > {
+};
+
+template < int _Rows > class D {
+public:
+ long rows() {
+ return _Rows;
+ }
+};
+
+template < typename Derived > class PlainObjectBase:public A < Derived >::type {
+ typedef typename A < Derived >::type Base;
+ D < Base::RowsAtCompileTime > m_storage;
+
+public:
+ long rows() {
+ return m_storage.rows();
+ }
+};
+
+int fn1();
+
+struct B {
+ static long run(long x, long) {
+ int offset(fn1());
+ return x + offset;
+}};
+
+long fn2(int x)
+{
+ return B::run(x, 0);
+}
+
+template < typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows,
+ int _MaxCols >
+ struct traits <Matrix < _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols >> {
+ enum { RowsAtCompileTime = _Rows };
+};
+
+template < typename, int, int, int, int _MaxRows, int _MaxCols >
+ class Matrix:public PlainObjectBase < Matrix < double, _MaxRows,
+ _MaxCols >> {
+public:
+ template < typename OtherDerived > Matrix(OtherDerived);
+};
+
+struct F {
+ static Matrix < double, 2, 2 > run(long size) {
+ Matrix < double, 2, 2 > diag = Matrix < double, 2, 2 >::Zero;
+ long i = 0;
+ while (i < size) {
+ long randomInt = fn2(-1);
+ if (randomInt == 0)
+ ++i;
+ else {
+ double alpha(randomInt);
+ diag = alpha;
+ i = 2;
+ }
+ }
+
+ return diag;
+ }
+};
+
+void fn3(Matrix < double, 2, 2 > m)
+{
+ long size = m.rows();
+ F::run(size);
+}
diff --git a/gcc/testsuite/g++.dg/pr70590-2.C b/gcc/testsuite/g++.dg/pr70590-2.C
new file mode 100644
index 0000000..409c86e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/pr70590-2.C
@@ -0,0 +1,21 @@
+// PR c++/70590
+// { dg-do compile { target c++11 } }
+// { dg-options "-O2" }
+
+int a;
+
+constexpr int *foo = &a;
+
+void blah (int *);
+
+int
+bar ()
+{
+ blah (foo);
+}
+
+int
+baz ()
+{
+ blah (foo);
+}
diff --git a/gcc/testsuite/g++.dg/pr70590.C b/gcc/testsuite/g++.dg/pr70590.C
new file mode 100644
index 0000000..4886200
--- /dev/null
+++ b/gcc/testsuite/g++.dg/pr70590.C
@@ -0,0 +1,25 @@
+// PR c++/70590
+// { dg-do compile { target c++11 } }
+// { dg-options "-O2" }
+
+int a;
+
+constexpr int *
+foo ()
+{
+ return &a;
+}
+
+void blah (int *);
+
+int
+bar ()
+{
+ blah (foo ());
+}
+
+int
+baz ()
+{
+ blah (foo ());
+}
diff --git a/gcc/testsuite/g++.dg/template/crash34.C b/gcc/testsuite/g++.dg/template/crash34.C
index ef4d21b..83dcc78 100644
--- a/gcc/testsuite/g++.dg/template/crash34.C
+++ b/gcc/testsuite/g++.dg/template/crash34.C
@@ -7,6 +7,6 @@
class Foo;
-template <typename T> class Foo { }; // { dg-error "not a template type" }
+template <typename T> class Foo { }; // { dg-error "not a template" }
Foo<int> x; // { dg-error "not a template|incomplete type" }
diff --git a/gcc/testsuite/g++.dg/template/friend61.C b/gcc/testsuite/g++.dg/template/friend61.C
new file mode 100644
index 0000000..1604f5c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/friend61.C
@@ -0,0 +1,12 @@
+// PR c++/69323
+
+template<int VALUE>
+struct Outer
+{
+ struct StupidValueTrick
+ {
+ template<int VAL> friend struct Outer<VAL>::StupidValueTrick;
+ };
+};
+typedef Outer<42>::StupidValueTrick GoodValue;
+GoodValue good;
diff --git a/gcc/testsuite/g++.dg/template/friend61a.C b/gcc/testsuite/g++.dg/template/friend61a.C
new file mode 100644
index 0000000..d38e53a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/friend61a.C
@@ -0,0 +1,12 @@
+// PR c++/69323
+
+template<int VALUE>
+struct Outer
+{
+ struct StupidValueTrick
+ {
+ template<int VAL> friend struct StupidValueTrick; // { dg-error "not a template" }
+ };
+};
+typedef Outer<42>::StupidValueTrick GoodValue;
+GoodValue good;
diff --git a/gcc/testsuite/g++.dg/template/friend61b.C b/gcc/testsuite/g++.dg/template/friend61b.C
new file mode 100644
index 0000000..2da5d60
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/friend61b.C
@@ -0,0 +1,12 @@
+// PR c++/69323
+
+template<int VALUE>
+struct Outer
+{
+ struct StupidValueTrick
+ {
+ template<int VAL> friend struct Outer::StupidValueTrick; // { dg-error "not a template" }
+ };
+};
+typedef Outer<42>::StupidValueTrick GoodValue;
+GoodValue good;
diff --git a/gcc/testsuite/g++.dg/template/mangle2.C b/gcc/testsuite/g++.dg/template/mangle2.C
new file mode 100644
index 0000000..2f3c5f4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/mangle2.C
@@ -0,0 +1,19 @@
+// PR c++/62212
+// { dg-do compile }
+
+typedef int my_int;
+
+template<typename T>
+struct X {
+ enum {value = 1};
+};
+
+template<typename T>
+void f(const my_int(&)[X<T>::value]);
+
+int main() {
+ const my_int a[1] = {};
+ f<void>(a);
+}
+
+// { dg-final { scan-assembler "_Z1fIvEvRAsr1XIT_E5value_Ki" } }
diff --git a/gcc/testsuite/g++.dg/template/partial-specialization4.C b/gcc/testsuite/g++.dg/template/partial-specialization4.C
new file mode 100644
index 0000000..1f2aced
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/partial-specialization4.C
@@ -0,0 +1,26 @@
+// PR c++/70141
+
+template <typename T>
+struct outer
+{
+ template <typename U>
+ struct inner
+ {
+
+ };
+};
+
+
+template <typename T>
+struct is_inner_for
+{
+ template <typename Whatever>
+ struct predicate;
+
+ template <typename U>
+ struct predicate<typename outer<T>::template inner<U> >
+ {
+ };
+};
+
+is_inner_for<int>::predicate<outer<int>::inner<double> > p;
diff --git a/gcc/testsuite/g++.dg/template/pr69961a.C b/gcc/testsuite/g++.dg/template/pr69961a.C
new file mode 100644
index 0000000..b0c5d41
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/pr69961a.C
@@ -0,0 +1,25 @@
+// PR c++/69961
+// { dg-do compile { target c++11 } }
+
+#include <string>
+
+using std::string;
+
+class Format {
+ public:
+ explicit Format(string formatted) {}
+ string buffer;
+};
+
+string StrCat(const string& a) {
+ return "";
+}
+
+template <typename... AV>
+Format Message(string msg, const AV&... args) {
+ return Format::Format(StrCat(msg, args...)); // { dg-error "cannot call constructor" }
+}
+
+int main(int, char**) {
+ Message("msg");
+}
diff --git a/gcc/testsuite/g++.dg/template/pr69961b.C b/gcc/testsuite/g++.dg/template/pr69961b.C
new file mode 100644
index 0000000..5fff1c9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/pr69961b.C
@@ -0,0 +1,15 @@
+// PR c++/69961
+
+struct A { A (int); };
+
+template <typename T>
+void foo ()
+{
+ A::A ((T)0); // { dg-error "cannot call constructor .A::A. directly" }
+}
+
+void
+bar ()
+{
+ foo<int> ();
+}
diff --git a/gcc/testsuite/g++.dg/template/ptrmem30.C b/gcc/testsuite/g++.dg/template/ptrmem30.C
new file mode 100644
index 0000000..31e9b5d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/ptrmem30.C
@@ -0,0 +1,45 @@
+// PR c++/70096
+// { dg-do run }
+
+int data_read;
+
+struct Holder
+{
+ void foo () { data_read = data; }
+ int data;
+};
+
+void
+poison_stack ()
+{
+ volatile char a[256];
+ __builtin_memset ((void *)a, 0xa, sizeof a);
+}
+
+template <typename F>
+void test1 ()
+{
+ Holder h;
+ h.data = 42;
+ F Holder::*fptr = &Holder::foo;
+ (h.*fptr)();
+}
+
+template <typename F>
+void test2 ()
+{
+ Holder h;
+ h.data = 42;
+ F Holder::*fptr1 = &Holder::foo;
+ F Holder::*fptr2 = fptr1;
+ (h.*fptr2)();
+}
+
+
+int main ()
+{
+ poison_stack ();
+ test1<void()>();
+ poison_stack ();
+ test2<void()>();
+}
diff --git a/gcc/testsuite/g++.dg/template/typename21.C b/gcc/testsuite/g++.dg/template/typename21.C
new file mode 100644
index 0000000..a76f133
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/typename21.C
@@ -0,0 +1,11 @@
+// PR c++/70067
+// { dg-do compile }
+
+template <class> struct A;
+template <class T> struct B { struct N { }; };
+template <class T> struct D: B<T> {
+ typedef typename D::N N;
+ A<N> *a;
+};
+
+D<int> d;
diff --git a/gcc/testsuite/g++.dg/torture/pr69553.C b/gcc/testsuite/g++.dg/torture/pr69553.C
new file mode 100644
index 0000000..e68e42f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr69553.C
@@ -0,0 +1,35 @@
+// { dg-do run }
+template <typename _Tp, long _Nm> struct A {
+ typedef _Tp _Type[_Nm];
+ static _Tp &_S_ref(const _Type &p1, int p2) {
+ return const_cast<_Tp &>(p1[p2]);
+ }
+};
+template <typename _Tp, long _Nm> struct B {
+ typedef A<_Tp, _Nm> _AT_Type;
+ typename _AT_Type::_Type _M_elems;
+ _Tp &operator[](long p1) const { return _AT_Type::_S_ref(_M_elems, p1); }
+};
+int t;
+void foo(int p1, int &p2) {
+ if ((t & 1) == 0) {
+ if (p1 != 1)
+ __builtin_abort();
+ if (p2 != 2)
+ __builtin_abort();
+ }
+ t++;
+}
+__attribute__((noinline))
+ void test1(const B<int, 2> &p1) { foo(p1[0], p1[1]); }
+ void test(B<B<int, 2>, 2> &p1) {
+ test1(p1[0]);
+ test1(p1[1]);
+ foo(p1[0][0], p1[0][1]);
+ }
+int main() {
+ B<B<int, 2>, 2> t;
+ t[0][0] = 1;
+ t[0][1] = 2;
+ test(t);
+}
diff --git a/gcc/testsuite/g++.dg/torture/pr69851.C b/gcc/testsuite/g++.dg/torture/pr69851.C
new file mode 100644
index 0000000..17dbfa6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr69851.C
@@ -0,0 +1,24 @@
+// PR c++/69851
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+
+template <typename T>
+struct A { T a; };
+template <unsigned long, typename...>
+struct B;
+template <unsigned long N, typename T, typename... U>
+struct B<N, T, U...> : B<1, U...>, A<T>
+{
+ B (B &) = default;
+ B (B &&x) : B(x) {}
+};
+template <unsigned long N, typename T>
+struct B<N, T> {};
+struct C { C (C &); };
+struct D {};
+
+void
+foo (B<0, C, D, int, int> a)
+{
+ B<0, C, D, int, int> b (a);
+}
diff --git a/gcc/testsuite/g++.dg/torture/pr70251.C b/gcc/testsuite/g++.dg/torture/pr70251.C
new file mode 100644
index 0000000..5af35b2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr70251.C
@@ -0,0 +1,11 @@
+// { dg-do compile }
+// { dg-additional-options "-w -Wno-psabi" }
+
+typedef int vec __attribute__((vector_size(64)));
+vec f(vec x,vec y,vec z)
+{
+ vec zero={};
+ vec one=zero+1;
+ vec c=x<y;
+ return z+(c?one:zero);
+}
diff --git a/gcc/testsuite/g++.dg/torture/pr70499.C b/gcc/testsuite/g++.dg/torture/pr70499.C
new file mode 100644
index 0000000..954fea5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr70499.C
@@ -0,0 +1,39 @@
+// { dg-do compile }
+// { dg-additional-options "-w -Wno-psabi" }
+// { dg-additional-options "-mavx" { target x86_64-*-* i?86-*-* } }
+
+typedef double __m256d __attribute__ ((__vector_size__ (32), __may_alias__));
+
+struct SIMD {
+ __m256d data;
+ SIMD() {};
+ SIMD (double val) { }
+ SIMD(__m256d _data) { data = _data; }
+ SIMD operator* (SIMD a) { return a; }
+};
+
+struct Foo {
+ SIMD val;
+ SIMD dval[2];
+ __attribute__((__always_inline__)) SIMD & Value() throw() { return val; }
+ __attribute__((__always_inline__)) Foo operator* ( const Foo & y) throw()
+ {
+ Foo res;
+ SIMD hx;
+ SIMD hy;
+ res.Value() = hx*hy;
+ res.dval[0] = hx*hy;
+ return res;
+ }
+};
+
+template<typename Tx>
+__attribute__((__always_inline__)) inline void inlineFunc(Tx hx[]) {
+ Tx x = hx[0], y = hx[1];
+ Tx lam[1] = (x*y);
+}
+
+void FooBarFunc () {
+ Foo adp[2];
+ inlineFunc (adp);
+}
diff --git a/gcc/testsuite/g++.dg/torture/pr70526.C b/gcc/testsuite/g++.dg/torture/pr70526.C
new file mode 100644
index 0000000..37a3e5f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr70526.C
@@ -0,0 +1,35 @@
+// { dg-do run }
+
+typedef unsigned uint32_t;
+
+template<typename T>
+struct AlignedStorage2
+{
+ char mBytes[sizeof(T)];
+
+ const T* addr() const { return reinterpret_cast<const T*>(mBytes); }
+ T* addr() { return reinterpret_cast<T*>(mBytes); }
+};
+
+struct Register {
+ uint32_t reg_;
+};
+
+class TypedOrValueRegister
+{
+ AlignedStorage2<Register> typed;
+ __attribute__((noinline)) Register& dataTyped() { return *typed.addr(); }
+public:
+ TypedOrValueRegister(Register reg)
+ {
+ dataTyped() = reg;
+ }
+ Register typedReg() const { return *typed.addr(); }
+};
+
+int main() {
+ Register reg = { 10u };
+ if (TypedOrValueRegister(reg).typedReg().reg_ != 10)
+ __builtin_abort();
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/tree-ssa/ehcleanup-1.C b/gcc/testsuite/g++.dg/tree-ssa/ehcleanup-1.C
index a5dc2aa..d6e4cf3 100644
--- a/gcc/testsuite/g++.dg/tree-ssa/ehcleanup-1.C
+++ b/gcc/testsuite/g++.dg/tree-ssa/ehcleanup-1.C
@@ -26,5 +26,5 @@ t (void)
// { dg-final { scan-tree-dump-times "Empty EH handler" 2 "ehcleanup1" } }
//
// And as a result also contained control flow.
-// { dg-final { scan-tree-dump-times "Removing unreachable" 6 "ehcleanup1" } }
+// { dg-final { scan-tree-dump-times "Removing unreachable" 4 "ehcleanup1" } }
//
diff --git a/gcc/testsuite/g++.dg/tsan/aligned_vs_unaligned_race.C b/gcc/testsuite/g++.dg/tsan/aligned_vs_unaligned_race.C
index 1facadc..fe64007 100644
--- a/gcc/testsuite/g++.dg/tsan/aligned_vs_unaligned_race.C
+++ b/gcc/testsuite/g++.dg/tsan/aligned_vs_unaligned_race.C
@@ -31,7 +31,7 @@ int main() {
pthread_create(&t[1], NULL, Thread2, NULL);
pthread_join(t[0], NULL);
pthread_join(t[1], NULL);
- printf("Pass\n");
+ fprintf(stderr, "Pass\n");
/* { dg-output "WARNING: ThreadSanitizer: data race.*(\n|\r\n|\r)" } */
/* { dg-output "Pass.*" } */
return 0;
diff --git a/gcc/testsuite/g++.dg/tsan/benign_race.C b/gcc/testsuite/g++.dg/tsan/benign_race.C
index b5f1720..e2acb81 100644
--- a/gcc/testsuite/g++.dg/tsan/benign_race.C
+++ b/gcc/testsuite/g++.dg/tsan/benign_race.C
@@ -32,7 +32,7 @@ int main() {
Global = 43;
WTFGlobal = 143;
pthread_join(t, 0);
- printf("OK\n");
+ fprintf(stderr, "OK\n");
}
/* { dg-prune-output "WARNING: ThreadSanitizer: data race.*(\n|\r\n|\r)" } */
diff --git a/gcc/testsuite/g++.dg/tsan/fd_close_norace.C b/gcc/testsuite/g++.dg/tsan/fd_close_norace.C
index 9babb6a..4ed45bc 100644
--- a/gcc/testsuite/g++.dg/tsan/fd_close_norace.C
+++ b/gcc/testsuite/g++.dg/tsan/fd_close_norace.C
@@ -24,7 +24,7 @@ int main() {
pthread_create(&t[1], NULL, Thread2, NULL);
pthread_join(t[0], NULL);
pthread_join(t[1], NULL);
- printf("OK\n");
+ fprintf(stderr, "OK\n");
}
/* { dg-prune-output "WARNING: ThreadSanitizer: data race.*(\n|\r\n|\r)" } */
diff --git a/gcc/testsuite/g++.dg/tsan/fd_close_norace2.C b/gcc/testsuite/g++.dg/tsan/fd_close_norace2.C
index 56f00f8..1dbd560 100644
--- a/gcc/testsuite/g++.dg/tsan/fd_close_norace2.C
+++ b/gcc/testsuite/g++.dg/tsan/fd_close_norace2.C
@@ -22,7 +22,7 @@ int main() {
while (write(pipes[1], &t, 1) != 1) {
}
pthread_join(t, 0);
- printf("OK\n");
+ fprintf(stderr, "OK\n");
}
/* { dg-prune-output "WARNING: ThreadSanitizer: data race.*(\n|\r\n|\r)" } */
diff --git a/gcc/testsuite/g++.dg/ubsan/pr63956.C b/gcc/testsuite/g++.dg/ubsan/pr63956.C
index b265631..90360be 100644
--- a/gcc/testsuite/g++.dg/ubsan/pr63956.C
+++ b/gcc/testsuite/g++.dg/ubsan/pr63956.C
@@ -86,7 +86,7 @@ fn5 (const int *a, int b)
constexpr int m1[4] = { 1, 2, 3, 4 };
constexpr int m2 = fn5 (m1, 3);
-constexpr int m3 = fn5 (m1, 4); // { dg-error "array subscript out of bound" }
+constexpr int m3 = fn5 (m1, 4); // { dg-error "array subscript" }
constexpr int
fn6 (const int &a, int b)
@@ -116,7 +116,7 @@ fn8 (int i)
}
constexpr int o1 = fn8 (9);
-constexpr int o2 = fn8 (10); // { dg-error "array subscript out of bound" }
+constexpr int o2 = fn8 (10); // { dg-error "array subscript" }
constexpr int
fn9 (int a, int b)
diff --git a/gcc/testsuite/g++.dg/ubsan/pr69922.C b/gcc/testsuite/g++.dg/ubsan/pr69922.C
new file mode 100644
index 0000000..0392750
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ubsan/pr69922.C
@@ -0,0 +1,18 @@
+// PR c++/69922
+// { dg-do compile }
+// { dg-options "-fsanitize=vptr -Wnonnull-compare" }
+
+struct S { virtual ~S (); };
+struct T : S { T *bar (); T *baz (); T *q; bool b; };
+
+T *
+T::bar ()
+{
+ return static_cast<T*>(reinterpret_cast<S*>(this)); // { dg-bogus "nonnull argument" }
+}
+
+T *
+T::baz ()
+{
+ return static_cast<T*>(reinterpret_cast<S*>(b ? this : q)); // { dg-bogus "nonnull argument" }
+}
diff --git a/gcc/testsuite/g++.dg/ubsan/pr70035.C b/gcc/testsuite/g++.dg/ubsan/pr70035.C
new file mode 100644
index 0000000..a1d3dc2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ubsan/pr70035.C
@@ -0,0 +1,26 @@
+// PR c++/70035
+// { dg-do run }
+// { dg-shouldfail "ubsan" }
+// { dg-options "-fsanitize=vptr -fno-sanitize-recover=undefined" }
+
+struct A {
+ A (int) {}
+ virtual int foo () { return 1; }
+};
+struct B : public A {
+ using A::foo;
+ B (int x) : A (foo (x)) {}
+ int foo (int x) { return x * 2; }
+};
+
+int
+main ()
+{
+ B b (20);
+}
+
+// { dg-output "\[^\n\r]*pr70035.C:12:\[0-9]*: runtime error: member call on address 0x\[0-9a-fA-F]* which does not point to an object of type 'B'(\n|\r\n|\r)" }
+// { dg-output "0x\[0-9a-fA-F]*: note: object has invalid vptr(\n|\r\n|\r)" }
+// { dg-output " ?.. .. .. .. ?.. .. .. .. ?.. .. .. .. \[^\n\r]*(\n|\r\n|\r)" }
+// { dg-output " ?\\^~~~~~~~~~~\[^\n\r]*(\n|\r\n|\r)" }
+// { dg-output " ?invalid vptr" }
diff --git a/gcc/testsuite/g++.dg/ubsan/pr70135.C b/gcc/testsuite/g++.dg/ubsan/pr70135.C
new file mode 100644
index 0000000..f5b47c9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ubsan/pr70135.C
@@ -0,0 +1,36 @@
+// PR c++/70135
+// { dg-do run }
+// { dg-options "-fsanitize=bounds -std=c++14" }
+
+template <bool... b>
+struct S {
+ static constexpr bool c[] {b...};
+ static constexpr auto foo ()
+ {
+ unsigned long n = 0;
+ for (unsigned long i = 0; i < sizeof (c); i++)
+ if (!c[i])
+ ++n;
+ return n;
+ }
+ static constexpr auto n = foo () + 1;
+ static constexpr auto bar ()
+ {
+ int h = 0;
+ for (int g = 0, i = 0; g < n; ++g)
+ {
+ while (i < sizeof...(b) && c[i++])
+ ++h;
+ h += 64;
+ }
+ return h;
+ }
+};
+
+int
+main ()
+{
+ S <true, false, false, true, true, true, false, true> s;
+ constexpr auto c = s.bar ();
+ static_assert (s.bar () == 4 * 64 + 5, "");
+}
diff --git a/gcc/testsuite/g++.dg/ubsan/pr70147-1.C b/gcc/testsuite/g++.dg/ubsan/pr70147-1.C
new file mode 100644
index 0000000..f4dd859
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ubsan/pr70147-1.C
@@ -0,0 +1,12 @@
+// PR c++/70147
+// { dg-do run }
+// { dg-options "-fsanitize=vptr" }
+
+struct A { A () {} virtual void f () {} };
+struct B : virtual A { B () {} virtual void f () {} };
+struct C : B, virtual A { C () {} } c;
+
+int
+main ()
+{
+}
diff --git a/gcc/testsuite/g++.dg/ubsan/pr70147-2.C b/gcc/testsuite/g++.dg/ubsan/pr70147-2.C
new file mode 100644
index 0000000..4e858a5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ubsan/pr70147-2.C
@@ -0,0 +1,77 @@
+// PR c++/70147
+// { dg-do run }
+// { dg-skip-if "" { *-*-* } { "*" } { "-O0" } }
+// { dg-options "-fsanitize=vptr" }
+
+struct A
+{
+ A () : a (0) {}
+ A (int x) : a (x) {}
+ virtual void f () {}
+ virtual int i () { int r = 0; __asm ("" : "+r" (r)); return r; }
+ int a;
+};
+struct E
+{
+ E () : e (0) {}
+ E (int x) : e (x) {}
+ virtual void f () {}
+ virtual int g () { int r = 0; __asm ("" : "+r" (r)); return r; }
+ int e;
+};
+struct F
+{
+ F () : f (0) {}
+ F (int x) : f (x) {}
+ virtual int h () { int r = 0; __asm ("" : "+r" (r)); return r; }
+ int f;
+};
+struct B : virtual A, public E, public F
+{
+ B ()
+ : E (
+ g ()
+ + h ()
+ + i ()
+ ),
+ F (g ()
+ + h ()
+ + i ()),
+ b (g () + h () + i ()) // It is ok to call the methods here.
+ {
+ b += g () + h () + i (); // And here too.
+ }
+ virtual void f () {}
+ int b;
+};
+struct C : B, virtual A
+{
+ C () : A (i ()) {}
+};
+
+int
+main ()
+{
+ C c;
+}
+
+// { dg-output "\[^\n\r]*pr70147-2.C:49:\[0-9]*: runtime error: member call on address 0x\[0-9a-fA-F]* which does not point to an object of type 'A'(\n|\r\n|\r)" }
+// { dg-output "0x\[0-9a-fA-F]*: note: object has invalid vptr(\n|\r\n|\r)" }
+// { dg-output " ?.. .. .. .. ?.. .. .. .. ?.. .. .. .. \[^\n\r]*(\n|\r\n|\r)" }
+// { dg-output " ?\\^~~~~~~~~~~\[^\n\r]*(\n|\r\n|\r)" }
+// { dg-output " ?invalid vptr\[^\n\r]*(\n|\r\n|\r)" }
+// { dg-output "\[^\n\r]*pr70147-2.C:33:\[0-9]*: runtime error: member call on address 0x\[0-9a-fA-F]* which does not point to an object of type 'E'(\n|\r\n|\r)" }
+// { dg-output "0x\[0-9a-fA-F]*: note: object has invalid vptr(\n|\r\n|\r)" }
+// { dg-output " ?.. .. .. .. ?.. .. .. .. ?.. .. .. .. \[^\n\r]*(\n|\r\n|\r)" }
+// { dg-output " ?\\^~~~~~~~~~~\[^\n\r]*(\n|\r\n|\r)" }
+// { dg-output " ?invalid vptr(\n|\r\n|\r)" }
+// { dg-output "\[^\n\r]*pr70147-2.C:34:\[0-9]*: runtime error: member call on address 0x\[0-9a-fA-F]* which does not point to an object of type 'F'(\n|\r\n|\r)" }
+// { dg-output "0x\[0-9a-fA-F]*: note: object has invalid vptr(\n|\r\n|\r)" }
+// { dg-output " ?.. .. .. .. ?.. .. .. .. ?.. .. .. .. \[^\n\r]*(\n|\r\n|\r)" }
+// { dg-output " ?\\^~~~~~~~~~~\[^\n\r]*(\n|\r\n|\r)" }
+// { dg-output " ?invalid vptr\[^\n\r]*(\n|\r\n|\r)" }
+// { dg-output "\[^\n\r]*pr70147-2.C:38:\[0-9]*: runtime error: member call on address 0x\[0-9a-fA-F]* which does not point to an object of type 'F'(\n|\r\n|\r)" }
+// { dg-output "0x\[0-9a-fA-F]*: note: object has invalid vptr(\n|\r\n|\r)" }
+// { dg-output " ?.. .. .. .. ?.. .. .. .. ?.. .. .. .. \[^\n\r]*(\n|\r\n|\r)" }
+// { dg-output " ?\\^~~~~~~~~~~\[^\n\r]*(\n|\r\n|\r)" }
+// { dg-output " ?invalid vptr" }
diff --git a/gcc/testsuite/g++.dg/ubsan/vptr-11.C b/gcc/testsuite/g++.dg/ubsan/vptr-11.C
new file mode 100644
index 0000000..4516b1e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ubsan/vptr-11.C
@@ -0,0 +1,84 @@
+// PR c++/70147
+// { dg-do run }
+// { dg-options "-fsanitize=vptr -fno-sanitize-recover=vptr" }
+
+static int ac, ad, bc, bd, cc, cd, dc, dd;
+struct A
+{
+ A ()
+ {
+ ac++;
+ }
+ virtual void f ()
+ {
+ }
+ __attribute__ ((noinline)) ~ A ();
+};
+
+struct D
+{
+ __attribute__ ((noinline)) D (int);
+ ~D ()
+ {
+ dd++;
+ }
+};
+struct B: virtual A, D
+{
+ B ():D (1)
+ {
+ bc++;
+ }
+ virtual void f ()
+ {
+ }
+ ~B ()
+ {
+ bd++;
+ }
+};
+
+struct C: B, virtual A
+{
+ C ()
+ {
+ cc++;
+ }
+ ~C ()
+ {
+ cd++;
+ }
+};
+
+D::D (int x)
+{
+ if (x)
+ throw 1;
+ dc++;
+}
+
+__attribute__ ((noinline, noclone))
+void foo (A * p)
+{
+ p->f ();
+}
+
+A::~A ()
+{
+ foo (this);
+ ad++;
+}
+
+int
+main ()
+{
+ try
+ {
+ C c;
+ }
+ catch ( ...)
+ {
+ }
+ if (ac != 1 || ad != 1 || bc || bd || cc || cd || dc || dd)
+ __builtin_abort ();
+}
diff --git a/gcc/testsuite/g++.dg/warn/Wignored-attributes-1.C b/gcc/testsuite/g++.dg/warn/Wignored-attributes-1.C
new file mode 100644
index 0000000..46ccc4a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wignored-attributes-1.C
@@ -0,0 +1,6 @@
+// PR c++/69884
+// { dg-do compile }
+
+typedef float __m128 __attribute__((__vector_size__(16), __may_alias__));
+template <typename> struct A;
+template <> struct A<__m128>; // { dg-warning "ignoring attributes on template argument" }
diff --git a/gcc/testsuite/g++.dg/warn/Wignored-attributes-2.C b/gcc/testsuite/g++.dg/warn/Wignored-attributes-2.C
new file mode 100644
index 0000000..6431607
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wignored-attributes-2.C
@@ -0,0 +1,7 @@
+// PR c++/69884
+// { dg-do compile }
+// { dg-options "-Wno-ignored-attributes" }
+
+typedef float __m128 __attribute__((__vector_size__(16), __may_alias__));
+template <typename> struct A;
+template <> struct A<__m128>;
diff --git a/gcc/testsuite/g++.dg/warn/Wnonnull-compare-2.C b/gcc/testsuite/g++.dg/warn/Wnonnull-compare-2.C
new file mode 100644
index 0000000..641bb67
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wnonnull-compare-2.C
@@ -0,0 +1,27 @@
+// PR c++/69850
+// { dg-do compile }
+// { dg-options "-Wnonnull-compare" }
+
+struct D {
+ virtual ~D ();
+ void foo () const { delete this; } // { dg-bogus "nonnull argument" }
+ template <typename> friend struct A;
+};
+template <typename T> struct A {
+ static void bar (T *x) { x->foo (); }
+};
+template <typename T> struct B {
+ T b;
+ void baz () { A<T>::bar (&b); }
+};
+class C {
+ class E : public D { ~E (); };
+ void baz ();
+ B<E> c;
+};
+
+void
+C::baz ()
+{
+ c.baz ();
+}
diff --git a/gcc/testsuite/g++.dg/warn/Wnonnull-compare-3.C b/gcc/testsuite/g++.dg/warn/Wnonnull-compare-3.C
new file mode 100644
index 0000000..f909a0f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wnonnull-compare-3.C
@@ -0,0 +1,28 @@
+// PR c++/69850
+// { dg-do compile }
+// { dg-options "-Wnonnull-compare" }
+
+template <typename T>
+struct A {
+ static void foo (T *x) { x->bar (); }
+};
+template <typename T>
+struct B {
+ T b;
+ void operator= (B) { A<T>::foo (&b); }
+};
+struct C {
+ void bar () { delete[] this; } // { dg-bogus "nonnull argument" }
+};
+struct D { B<C> d; };
+struct G {
+ D g[6];
+ void baz ();
+};
+int a;
+
+void
+G::baz ()
+{
+ g[a] = g[1];
+}
diff --git a/gcc/testsuite/g++.dg/warn/Wnonnull-compare-4.C b/gcc/testsuite/g++.dg/warn/Wnonnull-compare-4.C
new file mode 100644
index 0000000..851ed72
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wnonnull-compare-4.C
@@ -0,0 +1,14 @@
+// PR c++/69850
+// { dg-do compile }
+// { dg-options "-Wnonnull-compare" }
+
+struct A { virtual ~A (); int foo (); };
+struct B { virtual ~B () { } };
+struct C : B, A { };
+
+int
+A::foo ()
+{
+ C *c = dynamic_cast<C *> (this); // { dg-bogus "nonnull argument" }
+ return !c;
+}
diff --git a/gcc/testsuite/g++.dg/warn/Wnonnull-compare-5.C b/gcc/testsuite/g++.dg/warn/Wnonnull-compare-5.C
new file mode 100644
index 0000000..8b31e6c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wnonnull-compare-5.C
@@ -0,0 +1,18 @@
+// PR c++/69902
+// { dg-do compile }
+// { dg-options "-Wall" }
+
+struct A { virtual ~A (); };
+struct B : A {};
+
+bool
+foo (A &a)
+{
+ return dynamic_cast<B *>(&a) == (B *) 0; // { dg-bogus "nonnull argument" }
+}
+
+bool
+bar (A &a)
+{
+ return dynamic_cast<B *>(&a) != (B *) 0; // { dg-bogus "nonnull argument" }
+}
diff --git a/gcc/testsuite/g++.dg/warn/Wnonnull-compare-6.C b/gcc/testsuite/g++.dg/warn/Wnonnull-compare-6.C
new file mode 100644
index 0000000..d327df9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wnonnull-compare-6.C
@@ -0,0 +1,13 @@
+// PR c++/69922
+// { dg-do compile }
+// { dg-options "-Wnonnull-compare" }
+
+struct T { virtual ~T (); };
+struct S { virtual ~S (); T *f (bool); };
+struct U : S, T {};
+
+T *
+S::f (bool b)
+{
+ return b ? static_cast<U *> (this) : (U *) 0; // { dg-bogus "nonnull argument" }
+}
diff --git a/gcc/testsuite/g++.dg/warn/Wnonnull-compare-7.C b/gcc/testsuite/g++.dg/warn/Wnonnull-compare-7.C
new file mode 100644
index 0000000..6c19a43
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wnonnull-compare-7.C
@@ -0,0 +1,19 @@
+// PR c++/69922
+// { dg-do compile }
+// { dg-options "-Wnonnull-compare" }
+
+struct S { virtual ~S (); };
+struct T { virtual ~T (); };
+bool b, c;
+S *p;
+T *q, *r;
+
+S::~S ()
+{
+ delete (b ? this : p); // { dg-bogus "nonnull argument" }
+}
+
+T::~T ()
+{
+ delete (b ? (c ? this : q) : r); // { dg-bogus "nonnull argument" }
+}
diff --git a/gcc/testsuite/g++.dg/warn/Wnonnull-compare-8.C b/gcc/testsuite/g++.dg/warn/Wnonnull-compare-8.C
new file mode 100644
index 0000000..28dcac8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wnonnull-compare-8.C
@@ -0,0 +1,14 @@
+// PR c++/70295
+// { dg-do compile }
+// { dg-options "-O2 -Wnonnull-compare" }
+
+struct A { A (); virtual ~A (); bool foo (bool); };
+struct B : virtual public A { B (); virtual ~B (); };
+
+bool
+A::foo (bool x)
+{
+ if (x && dynamic_cast<B *>(this) != (B *) 0) // { dg-bogus "nonnull argument" }
+ return true;
+ return false;
+}
diff --git a/gcc/testsuite/g++.dg/warn/Wparentheses-29.C b/gcc/testsuite/g++.dg/warn/Wparentheses-29.C
new file mode 100644
index 0000000..7832415
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wparentheses-29.C
@@ -0,0 +1,135 @@
+/* PR c/70436 */
+/* { dg-options "-Wparentheses" } */
+
+int a, b, c;
+void bar (void);
+void baz (void);
+
+void
+foo (void)
+{
+ int i, j;
+
+ if (a) /* { dg-warning "ambiguous" } */
+ for (;;)
+ if (b)
+ bar ();
+ else
+ baz ();
+
+ if (a) /* { dg-warning "ambiguous" } */
+ while (1)
+ if (b)
+ bar ();
+ else
+ baz ();
+
+ if (a) /* { dg-warning "ambiguous" } */
+ while (1)
+ for (;;)
+ if (b)
+ bar ();
+ else
+ baz ();
+
+ if (a) /* { dg-warning "ambiguous" } */
+ while (1)
+ while (1)
+ if (b)
+ bar ();
+ else
+ baz ();
+
+ if (a) /* { dg-warning "ambiguous" } */
+ for (i = 0; i < 10; i++)
+ for (j = 0; j < 10; j++)
+ if (b)
+ bar ();
+ else
+ baz ();
+
+ if (a)
+ for (i = 0; i < 10; i++)
+ if (b) /* { dg-warning "ambiguous" } */
+ for (j = 0; j < 10; j++)
+ if (c)
+ bar ();
+ else
+ baz ();
+
+ if (a) /* { dg-warning "ambiguous" } */
+ for (i = 0; i < 10; i++)
+ if (b)
+ for (j = 0; j < 10; j++)
+ if (c)
+ bar ();
+ else
+ baz ();
+ else
+ bar ();
+
+ if (a) /* { dg-warning "ambiguous" } */
+ for (;;)
+ if (b)
+ while (1)
+ if (a)
+ bar ();
+ else
+ baz ();
+ else
+ bar ();
+
+ if (a) /* { dg-warning "ambiguous" } */
+ for (;;)
+ if (b)
+ while (1)
+ {
+ if (a) { bar (); } else { baz (); }
+ }
+ else
+ bar ();
+
+ if (a)
+ for (;;)
+ if (b)
+ bar ();
+ else
+ baz ();
+ else bar ();
+
+ if (a)
+ while (1)
+ if (b)
+ bar ();
+ else
+ baz ();
+ else bar ();
+
+ if (a)
+ for (;;)
+ {
+ if (b)
+ bar ();
+ else
+ baz ();
+ }
+
+ if (a)
+ {
+ for (;;)
+ if (b)
+ bar ();
+ }
+ else baz ();
+
+ if (a)
+ do
+ if (b) bar (); else baz ();
+ while (b);
+
+ if (a)
+ do
+ if (b) bar ();
+ while (b);
+ else baz ();
+}
diff --git a/gcc/testsuite/g++.dg/warn/Wstrict-aliasing-bogus-union-2.C b/gcc/testsuite/g++.dg/warn/Wstrict-aliasing-bogus-union-2.C
new file mode 100644
index 0000000..2b4895a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wstrict-aliasing-bogus-union-2.C
@@ -0,0 +1,14 @@
+/* { dg-do compile { target c++11 } } */
+/* { dg-options "-Wstrict-aliasing=2 -O2 -Wall" } */
+
+#include <type_traits>
+
+struct foo
+{
+ std::aligned_storage<sizeof(long), alignof(long)>::type raw;
+
+ long& cooked()
+ {
+ return *static_cast<long*>(static_cast<void*>(&raw)); /* { dg-bogus "strict-aliasing" } */
+ }
+};
diff --git a/gcc/testsuite/g++.dg/warn/constexpr-70194.C b/gcc/testsuite/g++.dg/warn/constexpr-70194.C
new file mode 100644
index 0000000..cdc56c0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/constexpr-70194.C
@@ -0,0 +1,12 @@
+// PR c++/70194
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wall" }
+
+int i;
+
+const bool b0 = &i == 0; // { dg-warning "the address of .i. will never be NULL" }
+constexpr int *p = &i;
+const bool b1 = p == 0; // { dg-warning "the address of .i. will never be NULL" }
+const bool b2 = 0 == p; // { dg-warning "the address of .i. will never be NULL" }
+const bool b3 = p != 0; // { dg-warning "the address of .i. will never be NULL" }
+const bool b4 = 0 != p; // { dg-warning "the address of .i. will never be NULL" }
diff --git a/gcc/testsuite/g++.dg/warn/overflow-warn-7.C b/gcc/testsuite/g++.dg/warn/overflow-warn-7.C
new file mode 100644
index 0000000..b536563
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/overflow-warn-7.C
@@ -0,0 +1,17 @@
+// PR c/62096 - unexpected warning overflow in implicit constant conversion
+// { dg-do compile { target c++11 } }
+
+enum E {
+ E_val = 1,
+};
+
+inline constexpr E operator~(E e)
+{
+ return E(~static_cast<int>(e));
+}
+
+int main()
+{
+ int val = ~E_val; // { dg-bogus "overflow in implicit constant conversion" }
+ (void) val;
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.other/decl5.C b/gcc/testsuite/g++.old-deja/g++.other/decl5.C
index d13f7b1..2a7a5f2 100644
--- a/gcc/testsuite/g++.old-deja/g++.other/decl5.C
+++ b/gcc/testsuite/g++.old-deja/g++.other/decl5.C
@@ -77,3 +77,9 @@ void NMS::fn()
{
i = 3;
}
+
+// From PR c++/15766 - bad parse error recovery (2 bugs)
+void confusion1(const UndefinedType& a) // { dg-error "does not name a type" }
+{
+}
+
diff --git a/gcc/testsuite/gcc.c-torture/compile/20151204.c b/gcc/testsuite/gcc.c-torture/compile/20151204.c
index 036316c..e07e13d 100644
--- a/gcc/testsuite/gcc.c-torture/compile/20151204.c
+++ b/gcc/testsuite/gcc.c-torture/compile/20151204.c
@@ -1,3 +1,5 @@
+/* { dg-skip-if "Array too big" { "avr-*-*" } } */
+
typedef __SIZE_TYPE__ size_t;
int strcmp (const char*, const char*);
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr69102.c b/gcc/testsuite/gcc.c-torture/compile/pr69102.c
new file mode 100644
index 0000000..b1328ca
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr69102.c
@@ -0,0 +1,21 @@
+/* { dg-options "-Og -fPIC -fschedule-insns2 -fselective-scheduling2 -fno-tree-fre --param=max-sched-extend-regions-iters=10" } */
+void bar (unsigned int);
+
+void
+foo (void)
+{
+ char buf[1] = { 3 };
+ const char *p = buf;
+ const char **q = &p;
+ unsigned int ch;
+ switch (**q)
+ {
+ case 1: ch = 5; break;
+ case 2: ch = 4; break;
+ case 3: ch = 3; break;
+ case 4: ch = 2; break;
+ case 5: ch = 1; break;
+ default: ch = 0; break;
+ }
+ bar (ch);
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr69740-1.c b/gcc/testsuite/gcc.c-torture/compile/pr69740-1.c
new file mode 100644
index 0000000..ac867d8
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr69740-1.c
@@ -0,0 +1,12 @@
+char a;
+short b;
+void fn1() {
+ if (b)
+ ;
+ else {
+ int c[1] = {0};
+ l1:;
+ }
+ if (a)
+ goto l1;
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr69740-2.c b/gcc/testsuite/gcc.c-torture/compile/pr69740-2.c
new file mode 100644
index 0000000..a89c9a0
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr69740-2.c
@@ -0,0 +1,19 @@
+inline int foo(int *p1, int p2) {
+ int z = *p1;
+ while (z > p2)
+ p2 = 2;
+ return z;
+}
+int main() {
+ int i;
+ for (;;) {
+ int j, k;
+ i = foo(&k, 7);
+ if (k)
+ j = i;
+ else
+ k = j;
+ if (2 != j)
+ __builtin_abort();
+ }
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr69989-2.c b/gcc/testsuite/gcc.c-torture/compile/pr69989-2.c
new file mode 100644
index 0000000..39cd516
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr69989-2.c
@@ -0,0 +1,16 @@
+int a, b, d;
+short c[] = {4073709551611, 1, 4, 4};
+
+void fn1() {
+ if (a)
+ goto LABEL_vhvhP;
+ for (;;) {
+ for (; b; b++)
+ d = c[b + 3] | c[b];
+ LABEL_vhvhP:
+ if (d)
+ break;
+ }
+}
+
+int main() { return 0; }
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr69999.c b/gcc/testsuite/gcc.c-torture/compile/pr69999.c
new file mode 100644
index 0000000..5659ce4
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr69999.c
@@ -0,0 +1,16 @@
+int uh;
+
+void
+ha(void)
+{
+ while (uh) {
+ for (uh = 0; uh < 1; ++uh) {
+ uh = 0;
+ if (uh != 0)
+ ts:
+ uh %= uh;
+ }
+ ++uh;
+ }
+ goto ts;
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr70061.c b/gcc/testsuite/gcc.c-torture/compile/pr70061.c
new file mode 100644
index 0000000..a7ebcfc
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr70061.c
@@ -0,0 +1,10 @@
+typedef int v8si __attribute__ ((vector_size (32)));
+
+int
+foo(v8si c, v8si d)
+{
+l0:
+ if (c[2])
+ d ^= c;
+ return d[3];
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr70190.c b/gcc/testsuite/gcc.c-torture/compile/pr70190.c
new file mode 100644
index 0000000..d3d209a
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr70190.c
@@ -0,0 +1,14 @@
+/* { dg-require-effective-target indirect_jumps } */
+/* { dg-require-effective-target label_values } */
+
+
+int
+fn1 ()
+{
+ static char a[] = "foo";
+ static void *b[] = { &&l1, &&l2 };
+ goto *(b[1]);
+ l1: goto *(a[0]);
+ l2: return 0;
+}
+
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr70199.c b/gcc/testsuite/gcc.c-torture/compile/pr70199.c
new file mode 100644
index 0000000..a4323f0
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr70199.c
@@ -0,0 +1,20 @@
+static volatile int v = 0;
+static
+void benchmark(long runs) {
+ void* labels[] = {
+ &&l0, &&l1, &&l2
+ };
+ for(unsigned int mask = 0x1F; mask > 0; mask >>= 1) {
+ unsigned lfsr = 0xACE1u;
+ long n = 10000000;
+ while(n > 0) {
+ l2: v;
+ l1: v;
+ goto *labels[lfsr & mask];
+ l0: n--;
+ }
+ }
+}
+int f(void) {
+ benchmark(10000000);
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr70240.c b/gcc/testsuite/gcc.c-torture/compile/pr70240.c
new file mode 100644
index 0000000..830d4dd
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr70240.c
@@ -0,0 +1,26 @@
+typedef short v16hi __attribute__ ((vector_size (32)));
+typedef int v8si __attribute__ ((vector_size (32)));
+typedef long long v4di __attribute__ ((vector_size (32)));
+
+int
+foo(int u16_0, int u32_0, int u64_0, int u16_1, int u32_1, int u64_1, v16hi v32u16_0, v8si v32u32_0, v4di v32u64_0, v16hi v32u16_1, v8si v32u32_1, v4di v32u64_1)
+{
+ do {
+ v32u16_1 += (v16hi){ v32u32_1[7], ~v32u32_1[3], 0, v32u64_0[0]};
+ u32_0 = (u32_0 << 31) | (u32_0 >> ~v32u32_0[1]);
+ u64_0 += 1;
+ v32u64_0[2] <<= v32u64_0[2] & 63;
+ u16_1 = (u16_1 >> (v32u16_0[11] & 15)) | (u16_1 << (-v32u16_0[11] & 15));
+ v32u16_0 -= ~v32u16_1;
+ v32u32_1[5] += u32_1;
+ if (v32u32_1[3] >= 0) {
+ u64_1 -= ~v32u64_1[1];
+ v32u16_1 += (v16hi){ -u64_1, ~u32_0, ~u16_1, v32u32_1[1], 0, ~v32u16_1[2], ~v32u64_1[2], ~v32u32_0[7]};
+ }
+ v32u64_1 += (v4di){0, 0, ~v32u32_0[5]};
+ v32u32_1 *= (v8si){0, ~v32u32_1[6]};
+ v32u64_0[3] &= 0x1234;
+ v32u64_0 += (v4di){v32u32_1[6]};
+ } while (u16_0 < 0x1234);
+ return u64_0 + u16_1;
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr70263-1.c b/gcc/testsuite/gcc.c-torture/compile/pr70263-1.c
new file mode 100644
index 0000000..d4bf280
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr70263-1.c
@@ -0,0 +1,11 @@
+int a[91];
+int b, c;
+void fn1() {
+ int n, m;
+ do {
+ a[c--];
+ a[--c] = m;
+ a[--m] = b;
+ } while (n);
+}
+
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr70355.c b/gcc/testsuite/gcc.c-torture/compile/pr70355.c
new file mode 100644
index 0000000..4749427
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr70355.c
@@ -0,0 +1,14 @@
+/* { dg-require-effective-target int128 } */
+/* { dg-additional-options "-g" } */
+
+typedef unsigned __int128 v2ti __attribute__ ((vector_size (32)));
+
+unsigned
+foo (unsigned i, v2ti v)
+{
+ do {
+ i--;
+ v %= ~v;
+ } while (i);
+ return v[0] + v[1];
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/20101011-1.c b/gcc/testsuite/gcc.c-torture/execute/20101011-1.c
index e7157c5..744763f 100644
--- a/gcc/testsuite/gcc.c-torture/execute/20101011-1.c
+++ b/gcc/testsuite/gcc.c-torture/execute/20101011-1.c
@@ -30,6 +30,9 @@
#elif defined (__TMS320C6X__)
/* On TI C6X division by zero does not trap. */
# define DO_TEST 0
+#elif defined (__VISIUM__)
+ /* On Visium division by zero does not trap. */
+# define DO_TEST 0
#elif defined (__mips__) && !defined(__linux__)
/* MIPS divisions do trap by default, but libgloss targets do not
intercept the trap and raise a SIGFPE. The same is probably
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr68532.c b/gcc/testsuite/gcc.c-torture/execute/pr68532.c
index 5d4bd8e..ac677cb 100644
--- a/gcc/testsuite/gcc.c-torture/execute/pr68532.c
+++ b/gcc/testsuite/gcc.c-torture/execute/pr68532.c
@@ -1,4 +1,5 @@
/* { dg-options "-O2 -ftree-vectorize -fno-vect-cost-model" } */
+/* { dg-additional-options "-fno-common" { target hppa*-*-hpux* } } */
#define SIZE 128
unsigned short _Alignas (16) in[SIZE];
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr70005.c b/gcc/testsuite/gcc.c-torture/execute/pr70005.c
new file mode 100644
index 0000000..bc37efe
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr70005.c
@@ -0,0 +1,25 @@
+
+unsigned char a = 6;
+int b, c;
+
+static void
+fn1 ()
+{
+ int i = a > 1 ? 1 : a, j = 6 & (c = a && (b = a));
+ int d = 0, e = a, f = ~c, g = b || a;
+ unsigned char h = ~a;
+ if (a)
+ f = j;
+ if (h && g)
+ d = a;
+ i = -~(f * d * h) + c && (e || i) ^ f;
+ if (i != 1)
+ __builtin_abort ();
+}
+
+int
+main ()
+{
+ fn1 ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr70127.c b/gcc/testsuite/gcc.c-torture/execute/pr70127.c
new file mode 100644
index 0000000..a0bf3c0
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr70127.c
@@ -0,0 +1,23 @@
+/* PR tree-optimization/70127 */
+
+struct S { int f; signed int g : 2; } a[1], c = {5, 1}, d;
+short b;
+
+__attribute__((noinline, noclone)) void
+foo (int x)
+{
+ if (x != 1)
+ __builtin_abort ();
+}
+
+int
+main ()
+{
+ while (b++ <= 0)
+ {
+ struct S e = {1, 1};
+ d = e = a[0] = c;
+ }
+ foo (a[0].g);
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr70222-1.c b/gcc/testsuite/gcc.c-torture/execute/pr70222-1.c
new file mode 100644
index 0000000..d79672e
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr70222-1.c
@@ -0,0 +1,30 @@
+/* PR rtl-optimization/70222 */
+
+int a = 1;
+unsigned int b = 2;
+int c = 0;
+int d = 0;
+
+void
+foo ()
+{
+ int e = ((-(c >= c)) < b) > ((int) (-1ULL >> ((a / a) * 15)));
+ d = -e;
+}
+
+__attribute__((noinline, noclone)) void
+bar (int x)
+{
+ if (x != -1)
+ __builtin_abort ();
+}
+
+int
+main ()
+{
+#if __CHAR_BIT__ == 8 && __SIZEOF_INT__ == 4 && __SIZEOF_LONG_LONG__ == 8
+ foo ();
+ bar (d);
+#endif
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr70222-2.c b/gcc/testsuite/gcc.c-torture/execute/pr70222-2.c
new file mode 100644
index 0000000..7611c98
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr70222-2.c
@@ -0,0 +1,20 @@
+/* PR rtl-optimization/70222 */
+
+#if __CHAR_BIT__ == 8 && __SIZEOF_INT__ == 4 && __SIZEOF_LONG_LONG__ == 8
+__attribute__((noinline, noclone)) unsigned int
+foo (int x)
+{
+ unsigned long long y = -1ULL >> x;
+ return (unsigned int) y >> 31;
+}
+#endif
+
+int
+main ()
+{
+#if __CHAR_BIT__ == 8 && __SIZEOF_INT__ == 4 && __SIZEOF_LONG_LONG__ == 8
+ if (foo (15) != 1 || foo (32) != 1 || foo (33) != 0)
+ __builtin_abort ();
+#endif
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr70429.c b/gcc/testsuite/gcc.c-torture/execute/pr70429.c
new file mode 100644
index 0000000..6b08c8e
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr70429.c
@@ -0,0 +1,17 @@
+/* PR rtl-optimization/70429 */
+
+__attribute__((noinline, noclone)) int
+foo (int a)
+{
+ return (int) (0x14ff6e2207db5d1fLL >> a) >> 4;
+}
+
+int
+main ()
+{
+ if (sizeof (int) != 4 || sizeof (long long) != 8 || __CHAR_BIT__ != 8)
+ return 0;
+ if (foo (1) != 0x3edae8 || foo (2) != -132158092)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr70460.c b/gcc/testsuite/gcc.c-torture/execute/pr70460.c
new file mode 100644
index 0000000..bfecea0
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr70460.c
@@ -0,0 +1,29 @@
+/* PR rtl-optimization/70460 */
+
+int c;
+
+__attribute__((noinline, noclone)) void
+foo (int x)
+{
+ static int b[] = { &&lab1 - &&lab0, &&lab2 - &&lab0 };
+ void *a = &&lab0 + b[x];
+ goto *a;
+lab1:
+ c += 2;
+lab2:
+ c++;
+lab0:
+ ;
+}
+
+int
+main ()
+{
+ foo (0);
+ if (c != 3)
+ __builtin_abort ();
+ foo (1);
+ if (c != 4)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr70566.c b/gcc/testsuite/gcc.c-torture/execute/pr70566.c
new file mode 100644
index 0000000..f47106e
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr70566.c
@@ -0,0 +1,47 @@
+/* PR target/70566. */
+
+#define NULL 0
+
+struct mystruct
+{
+ unsigned int f1 : 1;
+ unsigned int f2 : 1;
+ unsigned int f3 : 1;
+};
+
+__attribute__ ((noinline)) void
+myfunc (int a, void *b)
+{
+}
+__attribute__ ((noinline)) int
+myfunc2 (void *a)
+{
+ return 0;
+}
+
+static void
+set_f2 (struct mystruct *user, int f2)
+{
+ if (user->f2 != f2)
+ myfunc (myfunc2 (NULL), NULL);
+ else
+ __builtin_abort ();
+}
+
+__attribute__ ((noinline)) void
+foo (void *data)
+{
+ struct mystruct *user = data;
+ if (!user->f2)
+ set_f2 (user, 1);
+}
+
+int
+main (void)
+{
+ struct mystruct a;
+ a.f1 = 1;
+ a.f2 = 0;
+ foo (&a);
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr70586.c b/gcc/testsuite/gcc.c-torture/execute/pr70586.c
new file mode 100644
index 0000000..32e9e50
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr70586.c
@@ -0,0 +1,30 @@
+/* PR tree-optimization/70586 */
+
+int a, e, f;
+short b, c, d;
+
+int
+foo (int x, int y)
+{
+ return (y == 0 || (x && y == 1)) ? x : x % y;
+}
+
+static short
+bar (void)
+{
+ int i = foo (c, f);
+ f = foo (d, 2);
+ int g = foo (b, c);
+ int h = foo (g > 0, c);
+ c = (3 >= h ^ 7) <= foo (i, c);
+ if (foo (e, 1))
+ return a;
+ return 0;
+}
+
+int
+main ()
+{
+ bar ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr70602.c b/gcc/testsuite/gcc.c-torture/execute/pr70602.c
new file mode 100644
index 0000000..c6628b0
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr70602.c
@@ -0,0 +1,23 @@
+/* PR tree-optimization/70602 */
+
+struct __attribute__((packed)) S
+{
+ int s : 1;
+ int t : 20;
+};
+
+int a, b, c;
+
+int
+main ()
+{
+ for (; a < 1; a++)
+ {
+ struct S e[] = { {0, 9}, {0, 9}, {0, 9}, {0, 0}, {0, 9}, {0, 9}, {0, 9},
+ {0, 0}, {0, 9}, {0, 9}, {0, 9}, {0, 0}, {0, 9}, {0, 9},
+ {0, 9}, {0, 0}, {0, 9}, {0, 9}, {0, 9}, {0, 0}, {0, 9} };
+ b = b || e[0].s;
+ c = e[0].t;
+ }
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/Warray-bounds-18.c b/gcc/testsuite/gcc.dg/Warray-bounds-18.c
new file mode 100644
index 0000000..888fb80
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/Warray-bounds-18.c
@@ -0,0 +1,25 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -Warray-bounds" } */
+
+typedef struct
+{
+ int len;
+ char data[1];
+} rec;
+
+int
+p(rec *r, int len);
+
+int
+f (char prm1, char prm2)
+{
+ char buf[10];
+
+ rec *r1 = (rec *)&buf;
+
+ r1->len = 10;
+ r1->data[0] = prm1;
+ r1->data[1] = prm2; /* { dg-bogus "above array bounds" } */
+
+ return p(r1, r1->len);
+}
diff --git a/gcc/testsuite/gcc.dg/Warray-bounds-19.c b/gcc/testsuite/gcc.dg/Warray-bounds-19.c
new file mode 100644
index 0000000..e2f9661
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/Warray-bounds-19.c
@@ -0,0 +1,17 @@
+/* PR tree-optimization/59124 */
+/* { dg-options "-O3 -Warray-bounds" } */
+
+unsigned baz[6];
+
+void foo(unsigned *bar, unsigned n)
+{
+ unsigned i, j;
+
+ if (n > 6)
+ n = 6;
+
+ for (i = 1; i < n; i++)
+ for (j = i - 1; j > 0; j--)
+ bar[j - 1] = baz[j - 1];
+}
+
diff --git a/gcc/testsuite/gcc.dg/Wno-frame-address.c b/gcc/testsuite/gcc.dg/Wno-frame-address.c
index e5d078f..de5a8b8 100644
--- a/gcc/testsuite/gcc.dg/Wno-frame-address.c
+++ b/gcc/testsuite/gcc.dg/Wno-frame-address.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-skip-if "Cannot access arbitrary stack frames" { arm*-*-* hppa*-*-* visium-*-* } } */
+/* { dg-skip-if "Cannot access arbitrary stack frames" { arm*-*-* hppa*-*-* ia64-*-* visium-*-* } } */
/* { dg-options "-Werror" } */
/* { dg-additional-options "-mbackchain" { target { s390*-*-* } } } */
diff --git a/gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-upcast.c b/gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-upcast.c
new file mode 100644
index 0000000..cb70838
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-upcast.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -Wall" } */
+
+struct a {
+ int i;
+};
+struct b {
+ struct a a;
+ int j;
+};
+int main(void)
+{
+ static struct b b;
+ struct a *ap=(struct a *)&b;
+ return ((struct b *)&ap->i)->j; /* { dg-bogus "will break strict-aliasing" } */
+}
+
diff --git a/gcc/testsuite/gcc.dg/Wstrict-aliasing-struct-with-char-member.c b/gcc/testsuite/gcc.dg/Wstrict-aliasing-struct-with-char-member.c
new file mode 100644
index 0000000..0da9a16
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/Wstrict-aliasing-struct-with-char-member.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -Wall" } */
+
+struct a {
+ int i;
+ char c;
+};
+struct b {
+ float f;
+ float g;
+};
+int main(void)
+{
+ static struct b b;
+ return ((struct a *)&b)->i; /* { dg-warning "will break strict-aliasing" } */
+}
diff --git a/gcc/testsuite/gcc.dg/atomic-op-6.c b/gcc/testsuite/gcc.dg/atomic-op-6.c
new file mode 100644
index 0000000..f88c293
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/atomic-op-6.c
@@ -0,0 +1,11 @@
+/* Test we don't generate bogus warnings. */
+/* PR c/69407 */
+/* { dg-do compile } */
+/* { dg-options "-Wall -Wextra" } */
+
+void
+foo (int *p, int a)
+{
+ __atomic_fetch_add (&p, a, 0); /* { dg-bogus "value computed is not used" } */
+ __atomic_add_fetch (&p, a, 0); /* { dg-bogus "value computed is not used" } */
+}
diff --git a/gcc/testsuite/gcc.dg/builtins-68.c b/gcc/testsuite/gcc.dg/builtins-68.c
new file mode 100644
index 0000000..c0cc1eb
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/builtins-68.c
@@ -0,0 +1,114 @@
+/* PR middle-end/69780 - [4.9/5/6 Regression] ICE on
+ __builtin_alloca_with_align with small alignment */
+/* { dg-require-effective-target alloca } */
+/* { dg-do compile } */
+/* { dg-options "-Wno-long-long" } */
+
+#define CHAR_BIT __CHAR_BIT__
+#define SIZE_MAX __SIZE_MAX__
+#define UINT_MAX (__INT_MAX__ + 1U)
+
+/* The largest valid alignment is undocumented and subject to change
+ but for the purposes of white box testing we rely on knowing that
+ it happens to be defined to (UINT_MAX >> 1) + 1. */
+#define ALIGN_MAX ((UINT_MAX >> 1) + 1)
+
+#if UINT_MAX < SIZE_MAX
+/* Define a constant to exercise an alignment that is valid a power
+ of 2 in excess of the maximum. */
+# define MAX_X_2 (ALIGN_MAX << 1)
+#else
+/* For targets where UINT_MAX is the same as SIZE_MAX, use an invalid
+ alignment that's less than the maximum to elicit the same errors. */
+# define MAX_X_2 (ALIGN_MAX + 1)
+#endif
+
+static void* p;
+
+/* Verify that valid __builtin_alloca_with_align expressions are accepted. */
+void test_valid (int n)
+{
+ enum {
+ A1 = CHAR_BIT * 1,
+ A2 = CHAR_BIT * 2,
+ A4 = CHAR_BIT * 4,
+ A8 = CHAR_BIT * 8,
+ A16 = CHAR_BIT * 16,
+ A32 = CHAR_BIT * 32
+ };
+
+ /* Valid alignments are power of 2 positive multiples of CHAR_BIT. */
+ p = __builtin_alloca_with_align (n, CHAR_BIT * 1);
+ p = __builtin_alloca_with_align (n, CHAR_BIT * 2);
+ p = __builtin_alloca_with_align (n, CHAR_BIT * 4);
+ p = __builtin_alloca_with_align (n, CHAR_BIT * 8);
+ p = __builtin_alloca_with_align (n, CHAR_BIT * 16);
+ p = __builtin_alloca_with_align (n, CHAR_BIT * 32);
+
+ p = __builtin_alloca_with_align (n, A1);
+ p = __builtin_alloca_with_align (n, A2);
+ p = __builtin_alloca_with_align (n, A4);
+ p = __builtin_alloca_with_align (n, A8);
+ p = __builtin_alloca_with_align (n, A16);
+ p = __builtin_alloca_with_align (n, A32);
+}
+
+/* Non-integer alignments must be rejected. */
+void test_arg2_non_int (int n)
+{
+ /* Verify the full text of the diagnostic just once. */
+ p = __builtin_alloca_with_align (n, 0.0); /* { dg-error "second argument to function .__builtin_alloca_with_align. must be a constant integer power of 2 between .8. and " } */
+
+ /* Disable diagnostic complaining about converting void* to int that
+ preempts the "constant integer expression" error. */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wint-conversion"
+
+ p = __builtin_alloca_with_align (n, (void*)0); /* { dg-error "must be a constant integer" } */
+ p = __builtin_alloca_with_align (n, ""); /* { dg-error "must be a constant integer" } */
+ p = __builtin_alloca_with_align (n, L""); /* { dg-error "must be a constant integer" } */
+
+#pragma GCC diagnostic pop
+
+}
+
+/* Integer alignment that's not a constant expression must be rejected. */
+void test_arg2_non_const (int n, int a1)
+{
+ extern const int a2;
+ static const int a3 = CHAR_BIT;
+ static volatile const int a4 = CHAR_BIT;
+
+ p = __builtin_alloca_with_align (n, a1); /* { dg-error "must be a constant integer" } */
+ p = __builtin_alloca_with_align (n, a2); /* { dg-error "must be a constant integer" } */
+ p = __builtin_alloca_with_align (n, a3); /* { dg-error "must be a constant integer" } */
+ p = __builtin_alloca_with_align (n, a4); /* { dg-error "must be a constant integer" } */
+}
+
+/* Constant integer alignment that's not a power of 2 positive multiple
+ of CHAR_BIT less than (1LLU << 32) must be rejected. */
+void test_arg2_non_pow2 (int n)
+{
+ p = __builtin_alloca_with_align (n, 0); /* { dg-error "must be a constant integer" } */
+ p = __builtin_alloca_with_align (n, 1); /* { dg-error "must be a constant integer" } */
+ p = __builtin_alloca_with_align (n, 2); /* { dg-error "must be a constant integer" } */
+ p = __builtin_alloca_with_align (n, 3); /* { dg-error "must be a constant integer" } */
+ p = __builtin_alloca_with_align (n, 4); /* { dg-error "must be a constant integer" } */
+ p = __builtin_alloca_with_align (n, 5); /* { dg-error "must be a constant integer" } */
+ p = __builtin_alloca_with_align (n, 6); /* { dg-error "must be a constant integer" } */
+ p = __builtin_alloca_with_align (n, 7); /* { dg-error "must be a constant integer" } */
+ p = __builtin_alloca_with_align (n, 9); /* { dg-error "must be a constant integer" } */
+ p = __builtin_alloca_with_align (n, 10); /* { dg-error "must be a constant integer" } */
+ p = __builtin_alloca_with_align (n, 11); /* { dg-error "must be a constant integer" } */
+ p = __builtin_alloca_with_align (n, 12); /* { dg-error "must be a constant integer" } */
+ p = __builtin_alloca_with_align (n, 13); /* { dg-error "must be a constant integer" } */
+ p = __builtin_alloca_with_align (n, 14); /* { dg-error "must be a constant integer" } */
+ p = __builtin_alloca_with_align (n, 15); /* { dg-error "must be a constant integer" } */
+ p = __builtin_alloca_with_align (n, 17); /* { dg-error "must be a constant integer" } */
+ p = __builtin_alloca_with_align (n, 31); /* { dg-error "must be a constant integer" } */
+ p = __builtin_alloca_with_align (n, 33); /* { dg-error "must be a constant integer" } */
+ p = __builtin_alloca_with_align (n, 63); /* { dg-error "must be a constant integer" } */
+ p = __builtin_alloca_with_align (n, 65); /* { dg-error "must be a constant integer" } */
+ p = __builtin_alloca_with_align (n, SIZE_MAX); /* { dg-error "must be a constant integer" } */
+ p = __builtin_alloca_with_align (n, MAX_X_2); /* { dg-error "must be a constant integer" } */
+}
diff --git a/gcc/testsuite/gcc.dg/cilk-plus/pr69798-1.c b/gcc/testsuite/gcc.dg/cilk-plus/pr69798-1.c
new file mode 100644
index 0000000..c5a37a8
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/cilk-plus/pr69798-1.c
@@ -0,0 +1,73 @@
+/* PR c/69798 */
+/* { dg-do compile } */
+/* { dg-options "-fcilkplus" } */
+
+extern int foo (void);
+
+void
+fn1 (int i, int *p)
+{
+l:
+ _Cilk_spawn (void); /* { dg-error "expected expression" } */
+ _Cilk_spawn (char []); /* { dg-error "expected expression" } */
+ _Cilk_spawn (int *); /* { dg-error "expected expression" } */
+ _Cilk_spawn (int) 1; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn ({}); /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn ++i; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn i++; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn --i; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn i--; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn &i; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn +i; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn -i; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn ~i; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn !i; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn *p; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn &&l; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn sizeof (i); /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn sizeof (short); /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn __alignof__ (i); /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn __alignof__ (short); /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn __extension__ i; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn __func__; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn p[0]; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn __real__ i; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn __imag__ i; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn !foo (); /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn ~foo (); /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn (unsigned) foo (); /* { dg-error "only function calls can be spawned" } */
+}
+
+void
+fn2 (int i, int *p)
+{
+l:
+ _Cilk_spawn _Cilk_spawn (void); /* { dg-error "consecutive|expected expression" } */
+ _Cilk_spawn _Cilk_spawn (char []); /* { dg-error "consecutive|expected expression" } */
+ _Cilk_spawn _Cilk_spawn (int *); /* { dg-error "consecutive|expected expression" } */
+ _Cilk_spawn _Cilk_spawn (int) 1; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn ({}); /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn ++i; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn i++; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn --i; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn i--; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn &i; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn +i; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn -i; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn ~i; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn !i; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn *p; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn &&l; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn sizeof (i); /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn sizeof (short); /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn __alignof__ (i); /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn __alignof__ (short); /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn __extension__ i; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn __func__; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn p[0]; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn __real__ i; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn __imag__ i; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn !foo (); /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn ~foo (); /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn (unsigned) foo (); /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+}
diff --git a/gcc/testsuite/gcc.dg/cilk-plus/pr69798-2.c b/gcc/testsuite/gcc.dg/cilk-plus/pr69798-2.c
new file mode 100644
index 0000000..6719225
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/cilk-plus/pr69798-2.c
@@ -0,0 +1,72 @@
+/* PR c/69798 */
+/* { dg-do compile } */
+
+extern int foo (void);
+
+void
+fn1 (int i, int *p)
+{
+l:
+ _Cilk_spawn (void); /* { dg-error "expected expression" } */
+ _Cilk_spawn (char []); /* { dg-error "expected expression" } */
+ _Cilk_spawn (int *); /* { dg-error "expected expression" } */
+ _Cilk_spawn (int) 1; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn ({}); /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn ++i; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn i++; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn --i; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn i--; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn &i; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn +i; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn -i; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn ~i; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn !i; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn *p; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn &&l; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn sizeof (i); /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn sizeof (short); /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn __alignof__ (i); /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn __alignof__ (short); /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn __extension__ i; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn __func__; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn p[0]; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn __real__ i; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn __imag__ i; /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn !foo (); /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn ~foo (); /* { dg-error "only function calls can be spawned" } */
+ _Cilk_spawn (unsigned) foo (); /* { dg-error "only function calls can be spawned" } */
+}
+
+void
+fn2 (int i, int *p)
+{
+l:
+ _Cilk_spawn _Cilk_spawn (void); /* { dg-error "consecutive|expected expression" } */
+ _Cilk_spawn _Cilk_spawn (char []); /* { dg-error "consecutive|expected expression" } */
+ _Cilk_spawn _Cilk_spawn (int *); /* { dg-error "consecutive|expected expression" } */
+ _Cilk_spawn _Cilk_spawn (int) 1; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn ({}); /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn ++i; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn i++; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn --i; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn i--; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn &i; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn +i; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn -i; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn ~i; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn !i; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn *p; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn &&l; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn sizeof (i); /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn sizeof (short); /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn __alignof__ (i); /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn __alignof__ (short); /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn __extension__ i; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn __func__; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn p[0]; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn __real__ i; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn __imag__ i; /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn !foo (); /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn ~foo (); /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+ _Cilk_spawn _Cilk_spawn (unsigned) foo (); /* { dg-error "consecutive ._Cilk_spawn. keywords are not permitted" } */
+}
diff --git a/gcc/testsuite/gcc.dg/cpp/pr69985.c b/gcc/testsuite/gcc.dg/cpp/pr69985.c
new file mode 100644
index 0000000..28f17e9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/cpp/pr69985.c
@@ -0,0 +1,7 @@
+/* { dg-options "-Wformat" } */
+extern int printf (const char *__restrict __format, ...);
+void test (void)
+{
+ /* A very long line, so that we start a new line map. */
+ printf ("%llu01233456789012334567890123345678901233456789012334567890123345678901233456789012334567890123345678901233456789012334567890123345678901233456789"); /* { dg-warning "15: format .%llu. expects a matching" } */
+}
diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/prod-options.c b/gcc/testsuite/gcc.dg/debug/dwarf2/prod-options.c
index 21449f9..e6bc137 100644
--- a/gcc/testsuite/gcc.dg/debug/dwarf2/prod-options.c
+++ b/gcc/testsuite/gcc.dg/debug/dwarf2/prod-options.c
@@ -4,7 +4,8 @@
as well. */
/* { dg-do compile } */
/* { dg-options "-O2 -gdwarf -dA -fdebug-prefix-map=a=b" } */
-/* { dg-final { scan-assembler "DW_AT_producer: \"GNU C" } } */
+/* { dg-final { scan-assembler "DW_AT_producer: \"GNU C" { target { { { ! *-*-solaris2* } || gas } && { ! hppa*64*-*-* } } } } } */
+/* { dg-final { scan-assembler "\"GNU C\[^\\n\\r\]+ DW_AT_producer" { target { { *-*-solaris2* && { ! gas } } || { hppa*64*-*-* } } } } } */
/* { dg-final { scan-assembler-not "debug-prefix-map" } } */
void func (void)
diff --git a/gcc/testsuite/gcc.dg/dfp/pr70052.c b/gcc/testsuite/gcc.dg/dfp/pr70052.c
new file mode 100644
index 0000000..53eb075
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/dfp/pr70052.c
@@ -0,0 +1,24 @@
+/* { dg-do compile } */
+/* { dg-options "-O1" } */
+
+typedef struct
+{
+ _Decimal128 td0;
+ _Decimal128 td1;
+} TDx2_t;
+
+
+TDx2_t
+D256_add_finite (void)
+{
+ _Decimal128 z, zz;
+ TDx2_t result = {0.DL, 0.DL};
+
+ if (zz == 0.DL)
+ {
+ result.td0 = z;
+ return result;
+ }
+
+ return result;
+}
diff --git a/gcc/testsuite/gcc.dg/enum-mode-2.c b/gcc/testsuite/gcc.dg/enum-mode-2.c
new file mode 100644
index 0000000..8dba3c5
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/enum-mode-2.c
@@ -0,0 +1,22 @@
+/* PR c/51147 - attribute((mode(byte))) on an enum generates wrong code */
+
+/* { dg-do compile } */
+/* { dg-additional-options "-O2 -fdump-tree-optimized" } */
+
+enum _eq_bool
+{
+ false,
+ true
+} __attribute__((mode (byte)));
+
+typedef enum _eq_bool bool;
+
+bool foo (void);
+bool bar (void);
+
+bool test (void)
+{
+ return foo () || bar ();
+}
+
+/* { dg-final { scan-tree-dump-times "foo|bar" 2 "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/gomp/declare-simd-1.c b/gcc/testsuite/gcc.dg/gomp/declare-simd-1.c
index 027b24a..5022fbb 100644
--- a/gcc/testsuite/gcc.dg/gomp/declare-simd-1.c
+++ b/gcc/testsuite/gcc.dg/gomp/declare-simd-1.c
@@ -19,6 +19,8 @@ int f2 (int a, int *b, int c)
/* { dg-final { scan-assembler-times "_ZGVcN8uva32l4_f2:" 1 { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-times "_ZGVdM8uva32l4_f2:" 1 { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-times "_ZGVdN8uva32l4_f2:" 1 { target { i?86-*-* x86_64-*-* } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeM8uva32l4_f2:" 1 { target { i?86-*-* x86_64-*-* } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeN8uva32l4_f2:" 1 { target { i?86-*-* x86_64-*-* } } } } */
#pragma omp declare simd uniform (a) aligned (b : 8 * sizeof (long long)) linear (c : 4) simdlen (8)
__extension__
@@ -53,6 +55,8 @@ f7 (int x)
/* { dg-final { scan-assembler-times "_ZGVcN16v_f7:" 1 { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-times "_ZGVdM16v_f7:" 1 { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-times "_ZGVdN16v_f7:" 1 { target { i?86-*-* x86_64-*-* } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeM16v_f7:" 1 { target { i?86-*-* x86_64-*-* } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeN16v_f7:" 1 { target { i?86-*-* x86_64-*-* } } } } */
int
f9 (int x)
@@ -82,6 +86,8 @@ f13 (int c; int *b; int a; int a, int *b, int c)
/* { dg-final { scan-assembler-times "_ZGVcN8uva32l4_f13:" 1 { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-times "_ZGVdM8uva32l4_f13:" 1 { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-times "_ZGVdN8uva32l4_f13:" 1 { target { i?86-*-* x86_64-*-* } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeM8uva32l4_f13:" 1 { target { i?86-*-* x86_64-*-* } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeN8uva32l4_f13:" 1 { target { i?86-*-* x86_64-*-* } } } } */
#pragma omp declare simd uniform (a) aligned (b : 8 * sizeof (int)) linear (c : 4) simdlen (8)
int
@@ -98,6 +104,8 @@ f14 (a, b, c)
/* { dg-final { scan-assembler-times "_ZGVcN8uva32l4_f14:" 1 { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-times "_ZGVdM8uva32l4_f14:" 1 { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-times "_ZGVdN8uva32l4_f14:" 1 { target { i?86-*-* x86_64-*-* } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeM8uva32l4_f14:" 1 { target { i?86-*-* x86_64-*-* } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeN8uva32l4_f14:" 1 { target { i?86-*-* x86_64-*-* } } } } */
#pragma omp declare simd uniform (a) aligned (b : 8 * sizeof (int)) linear (c : 4) simdlen (8)
int
@@ -112,6 +120,8 @@ f15 (int a, int *b, int c)
/* { dg-final { scan-assembler-times "_ZGVcN8uva32l4_f15:" 1 { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-times "_ZGVdM8uva32l4_f15:" 1 { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-times "_ZGVdN8uva32l4_f15:" 1 { target { i?86-*-* x86_64-*-* } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeM8uva32l4_f15:" 1 { target { i?86-*-* x86_64-*-* } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeN8uva32l4_f15:" 1 { target { i?86-*-* x86_64-*-* } } } } */
#pragma omp declare simd uniform (d) aligned (e : 8 * sizeof (int)) linear (f : 4) simdlen (8)
int f15 (int d, int *e, int f);
@@ -131,12 +141,16 @@ int f17 (int g, long *h)
/* { dg-final { scan-assembler-times "_ZGVcN4l20va8_f17:" 1 { target { { i?86-*-* x86_64-*-* } && lp64 } } } } */
/* { dg-final { scan-assembler-times "_ZGVdM4l20va8_f17:" 1 { target { { i?86-*-* x86_64-*-* } && lp64 } } } } */
/* { dg-final { scan-assembler-times "_ZGVdN4l20va8_f17:" 1 { target { { i?86-*-* x86_64-*-* } && lp64 } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeM4l20va8_f17:" 1 { target { { i?86-*-* x86_64-*-* } && lp64 } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeN4l20va8_f17:" 1 { target { { i?86-*-* x86_64-*-* } && lp64 } } } } */
/* { dg-final { scan-assembler-times "_ZGVbM4l12va4_f17:" 1 { target { { i?86-*-* x86_64-*-* } && ilp32 } } } } */
/* { dg-final { scan-assembler-times "_ZGVbN4l12va4_f17:" 1 { target { { i?86-*-* x86_64-*-* } && ilp32 } } } } */
/* { dg-final { scan-assembler-times "_ZGVcM4l12va4_f17:" 1 { target { { i?86-*-* x86_64-*-* } && ilp32 } } } } */
/* { dg-final { scan-assembler-times "_ZGVcN4l12va4_f17:" 1 { target { { i?86-*-* x86_64-*-* } && ilp32 } } } } */
/* { dg-final { scan-assembler-times "_ZGVdM4l12va4_f17:" 1 { target { { i?86-*-* x86_64-*-* } && ilp32 } } } } */
/* { dg-final { scan-assembler-times "_ZGVdN4l12va4_f17:" 1 { target { { i?86-*-* x86_64-*-* } && ilp32 } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeM4l12va4_f17:" 1 { target { { i?86-*-* x86_64-*-* } && ilp32 } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeN4l12va4_f17:" 1 { target { { i?86-*-* x86_64-*-* } && ilp32 } } } } */
#pragma omp declare simd aligned (i : sizeof (*i)) linear (j : 2 * sizeof (i[0]) + sizeof (j)) simdlen (4)
int
@@ -153,9 +167,13 @@ f18 (j, i)
/* { dg-final { scan-assembler-times "_ZGVcN4l20va8_f18:" 1 { target { { i?86-*-* x86_64-*-* } && lp64 } } } } */
/* { dg-final { scan-assembler-times "_ZGVdM4l20va8_f18:" 1 { target { { i?86-*-* x86_64-*-* } && lp64 } } } } */
/* { dg-final { scan-assembler-times "_ZGVdN4l20va8_f18:" 1 { target { { i?86-*-* x86_64-*-* } && lp64 } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeM4l20va8_f18:" 1 { target { { i?86-*-* x86_64-*-* } && lp64 } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeN4l20va8_f18:" 1 { target { { i?86-*-* x86_64-*-* } && lp64 } } } } */
/* { dg-final { scan-assembler-times "_ZGVbM4l12va4_f18:" 1 { target { { i?86-*-* x86_64-*-* } && ilp32 } } } } */
/* { dg-final { scan-assembler-times "_ZGVbN4l12va4_f18:" 1 { target { { i?86-*-* x86_64-*-* } && ilp32 } } } } */
/* { dg-final { scan-assembler-times "_ZGVcM4l12va4_f18:" 1 { target { { i?86-*-* x86_64-*-* } && ilp32 } } } } */
/* { dg-final { scan-assembler-times "_ZGVcN4l12va4_f18:" 1 { target { { i?86-*-* x86_64-*-* } && ilp32 } } } } */
/* { dg-final { scan-assembler-times "_ZGVdM4l12va4_f18:" 1 { target { { i?86-*-* x86_64-*-* } && ilp32 } } } } */
/* { dg-final { scan-assembler-times "_ZGVdN4l12va4_f18:" 1 { target { { i?86-*-* x86_64-*-* } && ilp32 } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeM4l12va4_f18:" 1 { target { { i?86-*-* x86_64-*-* } && ilp32 } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeN4l12va4_f18:" 1 { target { { i?86-*-* x86_64-*-* } && ilp32 } } } } */
diff --git a/gcc/testsuite/gcc.dg/gomp/declare-simd-3.c b/gcc/testsuite/gcc.dg/gomp/declare-simd-3.c
index 51f08be..9b8546d 100644
--- a/gcc/testsuite/gcc.dg/gomp/declare-simd-3.c
+++ b/gcc/testsuite/gcc.dg/gomp/declare-simd-3.c
@@ -11,6 +11,8 @@ f1 (int *p, int *q, short *s)
/* { dg-final { scan-assembler-times "_ZGVcN4l4ln4ln6_f1:" 1 { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-times "_ZGVdM8l4ln4ln6_f1:" 1 { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-times "_ZGVdN8l4ln4ln6_f1:" 1 { target { i?86-*-* x86_64-*-* } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeM16l4ln4ln6_f1:" 1 { target { i?86-*-* x86_64-*-* } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeN16l4ln4ln6_f1:" 1 { target { i?86-*-* x86_64-*-* } } } } */
#pragma omp declare simd linear(p:s) linear(q:t) uniform (s) linear(r:s) notinbranch simdlen(8) uniform(t)
int
@@ -22,3 +24,4 @@ f2 (int *p, short *q, int s, int r, int t)
/* { dg-final { scan-assembler-times "_ZGVbN8ls2ls4uls2u_f2:" 1 { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-times "_ZGVcN8ls2ls4uls2u_f2:" 1 { target { i?86-*-* x86_64-*-* } } } } */
/* { dg-final { scan-assembler-times "_ZGVdN8ls2ls4uls2u_f2:" 1 { target { i?86-*-* x86_64-*-* } } } } */
+/* { dg-final { scan-assembler-times "_ZGVeN8ls2ls4uls2u_f2:" 1 { target { i?86-*-* x86_64-*-* } } } } */
diff --git a/gcc/testsuite/gcc.dg/gomp/gomp.exp b/gcc/testsuite/gcc.dg/gomp/gomp.exp
index 78623fc..b6b5932 100644
--- a/gcc/testsuite/gcc.dg/gomp/gomp.exp
+++ b/gcc/testsuite/gcc.dg/gomp/gomp.exp
@@ -31,7 +31,7 @@ dg-init
# Main loop.
dg-runtest [lsort [concat \
[find $srcdir/$subdir *.c] \
- [find $srcdir/c-c++-common/gomp *.c]]] "" "-fopenmp"
+ [find $srcdir/c-c++-common/gomp *.c]]] "" "-fopenmp -Wno-hsa"
# All done.
dg-finish
diff --git a/gcc/testsuite/gcc.dg/gomp/pr68128-2.c b/gcc/testsuite/gcc.dg/gomp/pr68128-2.c
index 58a07e9..9720add 100644
--- a/gcc/testsuite/gcc.dg/gomp/pr68128-2.c
+++ b/gcc/testsuite/gcc.dg/gomp/pr68128-2.c
@@ -1,6 +1,6 @@
/* PR tree-optimization/68128 */
/* { dg-do compile } */
-/* { dg-options "-O2 -fopenmp -fdump-tree-omplower" } */
+/* { dg-additional-options "-O2 -fdump-tree-omplower" } */
extern int omp_get_thread_num (void);
extern int omp_get_ancestor_thread_num (int);
diff --git a/gcc/testsuite/gcc.dg/gomp/simd-clones-2.c b/gcc/testsuite/gcc.dg/gomp/simd-clones-2.c
index 4fb9c40..df7f631 100644
--- a/gcc/testsuite/gcc.dg/gomp/simd-clones-2.c
+++ b/gcc/testsuite/gcc.dg/gomp/simd-clones-2.c
@@ -23,3 +23,6 @@ float setArray(float *a, float x, int k)
/* { dg-final { scan-tree-dump "_ZGVdN8ua32vl_setArray" "optimized" { target i?86-*-* x86_64-*-* } } } */
/* { dg-final { scan-tree-dump "_ZGVdN8vvva32_addit" "optimized" { target i?86-*-* x86_64-*-* } } } */
/* { dg-final { scan-tree-dump "_ZGVdM8vl66u_addit" "optimized" { target i?86-*-* x86_64-*-* } } } */
+/* { dg-final { scan-tree-dump "_ZGVeN16ua32vl_setArray" "optimized" { target i?86-*-* x86_64-*-* } } } */
+/* { dg-final { scan-tree-dump "_ZGVeN16vvva32_addit" "optimized" { target i?86-*-* x86_64-*-* } } } */
+/* { dg-final { scan-tree-dump "_ZGVeM16vl66u_addit" "optimized" { target i?86-*-* x86_64-*-* } } } */
diff --git a/gcc/testsuite/gcc.dg/gomp/simd-clones-3.c b/gcc/testsuite/gcc.dg/gomp/simd-clones-3.c
index 622b801..28570a2 100644
--- a/gcc/testsuite/gcc.dg/gomp/simd-clones-3.c
+++ b/gcc/testsuite/gcc.dg/gomp/simd-clones-3.c
@@ -15,3 +15,5 @@ int addit(int a, int b, int c)
/* { dg-final { scan-tree-dump "_ZGVcM4vvv_addit" "optimized" { target i?86-*-* x86_64-*-* } } } */
/* { dg-final { scan-tree-dump "_ZGVdN8vvv_addit" "optimized" { target i?86-*-* x86_64-*-* } } } */
/* { dg-final { scan-tree-dump "_ZGVdM8vvv_addit" "optimized" { target i?86-*-* x86_64-*-* } } } */
+/* { dg-final { scan-tree-dump "_ZGVeN16vvv_addit" "optimized" { target i?86-*-* x86_64-*-* } } } */
+/* { dg-final { scan-tree-dump "_ZGVeM16vvv_addit" "optimized" { target i?86-*-* x86_64-*-* } } } */
diff --git a/gcc/testsuite/gcc.dg/graphite/pr68715-2.c b/gcc/testsuite/gcc.dg/graphite/pr68715-2.c
new file mode 100644
index 0000000..270d948
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/graphite/pr68715-2.c
@@ -0,0 +1,35 @@
+/* { dg-do compile } */
+/* { dg-options "-Ofast -floop-interchange" } */
+
+int a, b, c, d, f, g;
+int e[1], h[1];
+void fn2 ();
+void fn3 ();
+void
+fn1 ()
+{
+ fn2 ();
+ b = 0;
+ for (; b < 10; b++)
+ ;
+}
+
+void
+fn2 ()
+{
+ if (a)
+ {
+ fn3 ();
+ c = d;
+ }
+}
+
+void
+fn3 ()
+{
+ for (; g; g++)
+ e[g] = 2;
+ if (f)
+ for (; g; g++)
+ h[g] = 5;
+}
diff --git a/gcc/testsuite/gcc.dg/graphite/pr68715.c b/gcc/testsuite/gcc.dg/graphite/pr68715.c
new file mode 100644
index 0000000..14da2fb
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/graphite/pr68715.c
@@ -0,0 +1,36 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -floop-interchange" } */
+
+int a[1], c[1];
+int b, d, e;
+
+void
+fn1 (int p1)
+{
+ for (;;)
+ ;
+}
+
+int
+fn3 ()
+{
+ for (; e; e++)
+ c[e] = 2;
+ for (; d; d--)
+ a[d] = 8;
+ return 0;
+}
+
+int fn5 (int);
+
+int
+fn2 ()
+{
+ fn3 ();
+}
+
+void
+fn4 ()
+{
+ fn1 (b || fn5 (fn2 ()));
+}
diff --git a/gcc/testsuite/gcc.dg/graphite/pr68756.c b/gcc/testsuite/gcc.dg/graphite/pr68756.c
new file mode 100644
index 0000000..ddb9789
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/graphite/pr68756.c
@@ -0,0 +1,26 @@
+/* { dg-do compile } */
+/* { dg-options "-O1 -floop-nest-optimize" } */
+
+unsigned int z4, pz;
+int nn[2];
+
+static unsigned int
+xq (unsigned int dj)
+{
+ return dj > 1 ? z4 : z4 + dj;
+}
+
+void
+la (void)
+{
+ int hd, dl;
+ unsigned int hn = 0;
+
+ for (hd = 0; hd < 2; ++hd)
+ {
+ for (dl = 0; dl < 2; ++dl)
+ nn[dl] = 0;
+ --hn;
+ pz = xq (hn);
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/graphite/pr68809-2.c b/gcc/testsuite/gcc.dg/graphite/pr68809-2.c
new file mode 100644
index 0000000..e6639b8
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/graphite/pr68809-2.c
@@ -0,0 +1,27 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -floop-nest-optimize" } */
+
+int ae, vs, gf;
+char ue;
+
+void
+kc (char);
+
+void
+pm (void)
+{
+ unsigned int v9;
+ int td = (gf != 0);
+ while (vs)
+ {
+ kc (ue);
+ for (ae = 0; ae < 70; ++ae)
+ {
+ }
+ ae &= 4;
+ ae ^ td && ((ue = 0) != 0);
+ ++vs;
+ }
+ v9 = ue + 1;
+ ue - v9 && ((ue = 0) != 0);
+}
diff --git a/gcc/testsuite/gcc.dg/graphite/pr68809.c b/gcc/testsuite/gcc.dg/graphite/pr68809.c
new file mode 100644
index 0000000..1d75841
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/graphite/pr68809.c
@@ -0,0 +1,28 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -floop-nest-optimize" } */
+
+int ae, vs;
+char ue;
+
+void
+kc (char);
+
+void
+pm (void)
+{
+ unsigned int v9;
+ int gf = 0;
+ vs = 1;
+ while (vs)
+ {
+ gf -= ue;
+ kc (ue);
+ for (ae = 0; ae < 70; ++ae)
+ {
+ }
+ ae &= 4;
+ ae ^ (gf != 0) && ((ue = 0) != 0);
+ }
+ v9 = ue + 1;
+ ue - v9 && ((ue = 0) != 0);
+}
diff --git a/gcc/testsuite/gcc.dg/graphite/pr68953.c b/gcc/testsuite/gcc.dg/graphite/pr68953.c
new file mode 100644
index 0000000..12c632d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/graphite/pr68953.c
@@ -0,0 +1,30 @@
+/* { dg-do run } */
+/* { dg-options "-O1 -floop-nest-optimize" } */
+
+extern void abort (void);
+
+int yu[4][1] = { { 1 }, { 2 }, { 3 }, { 4 } };
+
+static void __attribute__((noinline,noclone))
+foo (void)
+{
+ int zh, ro;
+
+ for (zh = 0; zh < 2; ++zh)
+ for (ro = 0; ro < 3; ++ro)
+ yu[ro][0] = yu[zh + 1][0];
+}
+
+int
+main (void)
+{
+ foo ();
+
+ if (yu[0][0] != 2
+ || yu[1][0] != 2
+ || yu[2][0] != 2
+ || yu[3][0] != 4)
+ abort ();
+
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/graphite/pr70045.c b/gcc/testsuite/gcc.dg/graphite/pr70045.c
new file mode 100644
index 0000000..9f98b1f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/graphite/pr70045.c
@@ -0,0 +1,28 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -floop-interchange" } */
+
+int a, b, d, e, f;
+int c[9];
+void
+fn1 ()
+{
+ e = 1;
+ for (; e >= 0; e--)
+ {
+ d = 1;
+ for (; d >= 0; d--)
+ {
+ f = 0;
+ for (; f <= 1; f++)
+ {
+ a = 0;
+ for (; a < 9; a++)
+ {
+ b = 0;
+ for (; b < 2; b++)
+ c[a + b] = 3;
+ }
+ }
+ }
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/guality/guality.h b/gcc/testsuite/gcc.dg/guality/guality.h
index 52fa706..d5867d8 100644
--- a/gcc/testsuite/gcc.dg/guality/guality.h
+++ b/gcc/testsuite/gcc.dg/guality/guality.h
@@ -252,6 +252,10 @@ main (int argc, char *argv[])
if (!guality_gdb_input
|| fprintf (guality_gdb_input, "\
set height 0\n\
+handle SIGINT pass nostop\n\
+handle SIGTERM pass nostop\n\
+handle SIGSEGV pass nostop\n\
+handle SIGBUS pass nostop\n\
attach %i\n\
set guality_attached = 1\n\
b %i\n\
diff --git a/gcc/testsuite/gcc.dg/guality/pr69947.c b/gcc/testsuite/gcc.dg/guality/pr69947.c
new file mode 100644
index 0000000..6280ed5
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/guality/pr69947.c
@@ -0,0 +1,22 @@
+/* PR debug/69947 */
+/* { dg-do run } */
+/* { dg-options "-g" } */
+
+#include "../nop.h"
+
+static const char *c = "foobar";
+
+__attribute__((noinline, noclone)) void
+foo (void)
+{
+ static const char a[] = "abcdefg";
+ const char *b = a; /* { dg-final { gdb-test 14 "c\[2\]" "'o'" } } */
+ asm (NOP : : : "memory"); /* { dg-final { gdb-test 14 "b\[4\]" "'e'" } } */
+}
+
+int
+main ()
+{
+ foo ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/ifcvt-4.c b/gcc/testsuite/gcc.dg/ifcvt-4.c
index c096523..d0d131b 100644
--- a/gcc/testsuite/gcc.dg/ifcvt-4.c
+++ b/gcc/testsuite/gcc.dg/ifcvt-4.c
@@ -1,5 +1,6 @@
/* { dg-options "-fdump-rtl-ce1 -O2 --param max-rtl-if-conversion-insns=3" } */
-/* { dg-skip-if "Multiple set if-conversion not guaranteed on all subtargets" { "arm*-*-* powerpc64le*-*-* visium-*-*" } {"*"} { "" } } */
+/* { dg-additional-options "-misel" { target { powerpc*-*-* } } } */
+/* { dg-skip-if "Multiple set if-conversion not guaranteed on all subtargets" { "arm*-*-* hppa*64*-*-* visium-*-*" } {"*"} { "" } } */
int
foo (int x, int y, int a)
diff --git a/gcc/testsuite/gcc.dg/ifcvt-5.c b/gcc/testsuite/gcc.dg/ifcvt-5.c
index 0b73e54..818099a 100644
--- a/gcc/testsuite/gcc.dg/ifcvt-5.c
+++ b/gcc/testsuite/gcc.dg/ifcvt-5.c
@@ -2,11 +2,14 @@
parameter would not allow it. */
/* { dg-options "-fdump-rtl-ce1 -O2 --param max-rtl-if-conversion-insns=1" } */
-int
-foo (int x, int y, int a)
+
+typedef int word __attribute__((mode(word)));
+
+word
+foo (word x, word y, word a)
{
- int i = x;
- int j = y;
+ word i = x;
+ word j = y;
if (x > y)
{
i = a;
diff --git a/gcc/testsuite/gcc.dg/ipa/pr70306.c b/gcc/testsuite/gcc.dg/ipa/pr70306.c
new file mode 100644
index 0000000..be18208
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/ipa/pr70306.c
@@ -0,0 +1,45 @@
+/* { dg-options "-O2 -fdump-ipa-icf" } */
+/* { dg-do run } */
+
+int ctor_counter = 1;
+int dtor_counter;
+
+__attribute__((constructor))
+void A()
+{
+ ctor_counter++;
+}
+
+__attribute__((destructor))
+void B()
+{
+ if (dtor_counter == 0)
+ __builtin_abort ();
+
+ dtor_counter--;
+}
+
+__attribute__((constructor))
+static void C() {
+ ctor_counter++;
+}
+
+__attribute__((destructor))
+static void D() {
+ if (dtor_counter == 0)
+ __builtin_abort ();
+
+ dtor_counter--;
+}
+
+int main()
+{
+ if (ctor_counter != 3)
+ __builtin_abort ();
+
+ dtor_counter = 2;
+
+ return 0;
+}
+
+/* { dg-final { scan-ipa-dump "Equal symbols: 0" "icf" } } */
diff --git a/gcc/testsuite/gcc.dg/loop-8.c b/gcc/testsuite/gcc.dg/loop-8.c
index 529f5c8..463c5d0 100644
--- a/gcc/testsuite/gcc.dg/loop-8.c
+++ b/gcc/testsuite/gcc.dg/loop-8.c
@@ -1,6 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-rtl-loop2_invariant" } */
-/* { dg-skip-if "unexpected IV" { "visium-*-*" } { "*" } { "" } } */
+/* { dg-skip-if "unexpected IV" { "hppa*-*-* visium-*-*" } { "*" } { "" } } */
void
f (int *a, int *b)
diff --git a/gcc/testsuite/gcc.dg/lto/simd-function_0.c b/gcc/testsuite/gcc.dg/lto/simd-function_0.c
index cda31aa..59f419b 100644
--- a/gcc/testsuite/gcc.dg/lto/simd-function_0.c
+++ b/gcc/testsuite/gcc.dg/lto/simd-function_0.c
@@ -1,4 +1,5 @@
/* { dg-lto-do link } */
+/* { dg-require-effective-target vect_simd_clones } */
/* { dg-require-effective-target avx2 } */
/* { dg-lto-options { { -fopenmp-simd -O3 -ffast-math -mavx2 -flto -flto-partition=max } } } */
diff --git a/gcc/testsuite/gcc.dg/nested-func-10.c b/gcc/testsuite/gcc.dg/nested-func-10.c
new file mode 100644
index 0000000..ac6f76f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/nested-func-10.c
@@ -0,0 +1,56 @@
+/* PR c/70093 */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+void __attribute__((noinline, noclone))
+foo (int n)
+{
+ struct S { int a[n]; };
+
+ struct S __attribute__((noreturn))
+ fn (void)
+ {
+ __builtin_abort ();
+ }
+
+ auto struct S __attribute__((noreturn))
+ fn2 (void)
+ {
+ __builtin_abort ();
+ }
+
+ struct S x;
+ __typeof__ (fn ()) *p = &x;
+ switch (n)
+ {
+ case 1:
+ fn ();
+ break;
+ case 2:
+ fn2 ();
+ break;
+ case 3:
+ x = fn ();
+ if (x.a[0] != 42)
+ __builtin_abort ();
+ break;
+ case 4:
+ if (fn ().a[0] != 42)
+ __builtin_abort ();
+ break;
+ case 5:
+ if (p->a[0] != 42)
+ __builtin_abort ();
+ break;
+ case 6:
+ if (fn2 ().a[0] != 42)
+ __builtin_abort ();
+ break;
+ }
+}
+
+int
+main (void)
+{
+ foo (1);
+}
diff --git a/gcc/testsuite/gcc.dg/nested-func-9.c b/gcc/testsuite/gcc.dg/nested-func-9.c
new file mode 100644
index 0000000..902c258
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/nested-func-9.c
@@ -0,0 +1,47 @@
+/* PR c/70093 */
+/* { dg-do run } */
+/* { dg-options "" } */
+
+void
+foo (int n)
+{
+ struct S { int a[n]; };
+
+ struct S
+ fn (void)
+ {
+ struct S s;
+ s.a[0] = 42;
+ return s;
+ }
+
+ auto struct S
+ fn2 (void)
+ {
+ return fn ();
+ }
+
+ struct S x;
+ fn ();
+ fn2 ();
+ x = fn ();
+
+ if (x.a[0] != 42)
+ __builtin_abort ();
+
+ if (fn ().a[0] != 42)
+ __builtin_abort ();
+
+ __typeof__ (fn ()) *p = &x;
+ if (p->a[0] != 42)
+ __builtin_abort ();
+
+ if (fn2 ().a[0] != 42)
+ __builtin_abort ();
+}
+
+int
+main (void)
+{
+ foo (1);
+}
diff --git a/gcc/testsuite/gcc.dg/pic-1.c b/gcc/testsuite/gcc.dg/pic-1.c
new file mode 100644
index 0000000..38414e9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pic-1.c
@@ -0,0 +1,10 @@
+/* { dg-do compile { target { ! { *-*-darwin* hppa*-*-* } } } } */
+/* { dg-options "-fpic" } */
+
+#if __PIC__ != 1
+# error __PIC__ is not 1!
+#endif
+
+#ifdef __PIE__
+# error __PIE__ is defined!
+#endif
diff --git a/gcc/testsuite/gcc.dg/pic-2.c b/gcc/testsuite/gcc.dg/pic-2.c
new file mode 100644
index 0000000..2c742e9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pic-2.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-fPIC" } */
+
+#if __PIC__ != 2
+# error __PIC__ is not 2!
+#endif
+
+#ifdef __PIE__
+# error __PIE__ is defined!
+#endif
diff --git a/gcc/testsuite/gcc.dg/pic-3.c b/gcc/testsuite/gcc.dg/pic-3.c
new file mode 100644
index 0000000..23ce999
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pic-3.c
@@ -0,0 +1,10 @@
+/* { dg-do compile { target { ! { *-*-darwin* hppa*64*-*-* } } } } */
+/* { dg-options "-fno-pic" } */
+
+#ifdef __PIC__
+# error __PIC__ is defined!
+#endif
+
+#ifdef __PIE__
+# error __PIE__ is defined!
+#endif
diff --git a/gcc/testsuite/gcc.dg/pic-4.c b/gcc/testsuite/gcc.dg/pic-4.c
new file mode 100644
index 0000000..8e14714
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pic-4.c
@@ -0,0 +1,10 @@
+/* { dg-do compile { target { ! { *-*-darwin* hppa*64*-*-* } } } } */
+/* { dg-options "-fno-PIC" } */
+
+#ifdef __PIC__
+# error __PIC__ is defined!
+#endif
+
+#ifdef __PIE__
+# error __PIE__ is defined!
+#endif
diff --git a/gcc/testsuite/gcc.dg/pie-1.c b/gcc/testsuite/gcc.dg/pie-1.c
new file mode 100644
index 0000000..e64763b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pie-1.c
@@ -0,0 +1,10 @@
+/* { dg-do compile { target { ! { *-*-darwin* hppa*-*-* } } } } */
+/* { dg-options "-fpie" } */
+
+#if __PIC__ != 1
+# error __PIC__ is not 1!
+#endif
+
+#if __PIE__ != 1
+# error __PIE__ is not 1!
+#endif
diff --git a/gcc/testsuite/gcc.dg/pie-2.c b/gcc/testsuite/gcc.dg/pie-2.c
new file mode 100644
index 0000000..e185e51
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pie-2.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-fPIE" } */
+
+#if __PIC__ != 2
+# error __PIC__ is not 2!
+#endif
+
+#if __PIE__ != 2
+# error __PIE__ is not 2!
+#endif
diff --git a/gcc/testsuite/gcc.dg/pie-3.c b/gcc/testsuite/gcc.dg/pie-3.c
new file mode 100644
index 0000000..a7201c0
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pie-3.c
@@ -0,0 +1,10 @@
+/* { dg-do compile { target { ! { *-*-darwin* hppa*64*-*-* } } } } */
+/* { dg-options "-fno-pie" } */
+
+#ifdef __PIC__
+# error __PIC__ is defined!
+#endif
+
+#ifdef __PIE__
+# error __PIE__ is defined!
+#endif
diff --git a/gcc/testsuite/gcc.dg/pie-4.c b/gcc/testsuite/gcc.dg/pie-4.c
new file mode 100644
index 0000000..b24eb8c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pie-4.c
@@ -0,0 +1,10 @@
+/* { dg-do compile { target { ! { *-*-darwin* hppa*64*-*-* } } } } */
+/* { dg-options "-fno-PIE" } */
+
+#ifdef __PIC__
+# error __PIC__ is defined!
+#endif
+
+#ifdef __PIE__
+# error __PIE__ is defined!
+#endif
diff --git a/gcc/testsuite/gcc.dg/pie-5.c b/gcc/testsuite/gcc.dg/pie-5.c
new file mode 100644
index 0000000..d49554f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pie-5.c
@@ -0,0 +1,10 @@
+/* { dg-do compile { target pie_enabled } } */
+/* { dg-options "" } */
+
+#ifndef __PIC__
+# error __PIC__ is not defined!
+#endif
+
+#ifndef __PIE__
+# error __PIE__ is not defined!
+#endif
diff --git a/gcc/testsuite/gcc.dg/pie-6.c b/gcc/testsuite/gcc.dg/pie-6.c
new file mode 100644
index 0000000..fac1e94
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pie-6.c
@@ -0,0 +1,6 @@
+/* { dg-do compile { target { ! pie_enabled } } } */
+/* { dg-options "" } */
+
+#ifdef __PIE__
+# error __PIE__ is defined!
+#endif
diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-expressions-1.c b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-expressions-1.c
index 97426f6..9372936 100644
--- a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-expressions-1.c
+++ b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-expressions-1.c
@@ -534,6 +534,24 @@ void test_builtin_choose_expr (int i)
}
extern int f (int);
+
+void test_builtin_types_compatible_p (unsigned long i)
+{
+ __emit_expression_range (0,
+ f (i) + __builtin_types_compatible_p (long, int)); /* { dg-warning "range" } */
+/* { dg-begin-multiline-output "" }
+ f (i) + __builtin_types_compatible_p (long, int));
+ ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ { dg-end-multiline-output "" } */
+
+ __emit_expression_range (0,
+ __builtin_types_compatible_p (long, int) + f (i)); /* { dg-warning "range" } */
+/* { dg-begin-multiline-output "" }
+ __builtin_types_compatible_p (long, int) + f (i));
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
+ { dg-end-multiline-output "" } */
+}
+
void test_builtin_call_with_static_chain (int i, void *ptr)
{
__emit_expression_range (0, __builtin_call_with_static_chain (f (i), ptr)); /* { dg-warning "range" } */
@@ -635,3 +653,39 @@ void test_macro (long double xl)
^~~~
{ dg-end-multiline-output "" } */
}
+
+/* Verify that we can underline expressions that span multiple
+ ordinary maps. */
+
+extern int foo (int, ...);
+
+void test_multiple_ordinary_maps (void)
+{
+ /* The expression
+ foo (0, "very long string...")
+ below contains a transition between ordinary maps due to a very long
+ line (>127 "columns", treating tab characters as 1 column). */
+ __emit_expression_range (0, foo (0, /* { dg-warning "range" } */
+ "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"));
+
+/* { dg-begin-multiline-output "" }
+ __emit_expression_range (0, foo (0,
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"));
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ { dg-end-multiline-output "" } */
+
+ /* Another expression that transitions between ordinary maps; this
+ one due to an ordinary map for a very long line transitioning back to
+ one for a very short line. The policy in linemap_line_start
+ means that we need a transition from >10 bits of column
+ (i.e. 2048 columns) to a line with <= 80 columns. */
+ __emit_expression_range (0, foo (0, "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789", /* { dg-warning "range" } */
+ 0));
+/* { dg-begin-multiline-output "" }
+ __emit_expression_range (0, foo (0, "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789",
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ 0));
+ ~~
+ { dg-end-multiline-output "" } */
+}
diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_show_trees.c b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_show_trees.c
index c98034f..f025f96 100644
--- a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_show_trees.c
+++ b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_show_trees.c
@@ -52,13 +52,7 @@ show_tree (tree node)
enum tree_code code = TREE_CODE (node);
location_range *range = richloc.get_range (1);
- inform_at_rich_loc (&richloc,
- "%s at range %i:%i-%i:%i",
- get_tree_code_name (code),
- range->m_start.line,
- range->m_start.column,
- range->m_finish.line,
- range->m_finish.column);
+ inform_at_rich_loc (&richloc, "%s", get_tree_code_name (code));
/* Recurse. */
int min_idx = 0;
diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.c b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
index b4f12ba..95078ce 100644
--- a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
+++ b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
@@ -140,6 +140,15 @@ custom_diagnostic_finalizer (diagnostic_context *context,
pp_flush (context->printer);
}
+/* Add a location to RICHLOC with caret==start at START, ranging to FINISH. */
+
+static void
+add_range (rich_location *richloc, location_t start, location_t finish,
+ bool show_caret_p)
+{
+ richloc->add_range (make_location (start, start, finish), show_caret_p);
+}
+
/* Exercise the diagnostic machinery to emit various warnings,
for use by diagnostic-test-show-locus-*.c.
@@ -165,8 +174,8 @@ test_show_locus (function *fun)
{
const int line = fnstart_line + 2;
rich_location richloc (line_table, get_loc (line, 15));
- richloc.add_range (get_loc (line, 10), get_loc (line, 14), false);
- richloc.add_range (get_loc (line, 16), get_loc (line, 16), false);
+ add_range (&richloc, get_loc (line, 10), get_loc (line, 14), false);
+ add_range (&richloc, get_loc (line, 16), get_loc (line, 16), false);
warning_at_rich_loc (&richloc, 0, "test");
}
@@ -174,10 +183,8 @@ test_show_locus (function *fun)
{
const int line = fnstart_line + 2;
rich_location richloc (line_table, get_loc (line, 24));
- richloc.add_range (get_loc (line, 6),
- get_loc (line, 22), false);
- richloc.add_range (get_loc (line, 26),
- get_loc (line, 43), false);
+ add_range (&richloc, get_loc (line, 6), get_loc (line, 22), false);
+ add_range (&richloc, get_loc (line, 26), get_loc (line, 43), false);
warning_at_rich_loc (&richloc, 0, "test");
}
@@ -185,10 +192,9 @@ test_show_locus (function *fun)
{
const int line = fnstart_line + 2;
rich_location richloc (line_table, get_loc (line + 1, 7));
- richloc.add_range (get_loc (line, 7),
- get_loc (line, 23), false);
- richloc.add_range (get_loc (line + 1, 9),
- get_loc (line + 1, 26), false);
+ add_range (&richloc, get_loc (line, 7), get_loc (line, 23), false);
+ add_range (&richloc, get_loc (line + 1, 9), get_loc (line + 1, 26),
+ false);
warning_at_rich_loc (&richloc, 0, "test");
}
@@ -196,22 +202,20 @@ test_show_locus (function *fun)
{
const int line = fnstart_line + 2;
rich_location richloc (line_table, get_loc (line + 5, 7));
- richloc.add_range (get_loc (line, 7),
- get_loc (line + 4, 65), false);
- richloc.add_range (get_loc (line + 5, 9),
- get_loc (line + 10, 61), false);
+ add_range (&richloc, get_loc (line, 7), get_loc (line + 4, 65), false);
+ add_range (&richloc, get_loc (line + 5, 9), get_loc (line + 10, 61),
+ false);
warning_at_rich_loc (&richloc, 0, "test");
}
- /* Example of a rich_location constructed directly from a
- source_range where the range is larger than one character. */
+ /* Example of a rich_location where the range is larger than
+ one character. */
if (0 == strcmp (fnname, "test_richloc_from_proper_range"))
{
const int line = fnstart_line + 2;
- source_range src_range;
- src_range.m_start = get_loc (line, 12);
- src_range.m_finish = get_loc (line, 16);
- rich_location richloc (src_range);
+ location_t start = get_loc (line, 12);
+ location_t finish = get_loc (line, 16);
+ rich_location richloc (line_table, make_location (start, start, finish));
warning_at_rich_loc (&richloc, 0, "test");
}
@@ -220,15 +224,9 @@ test_show_locus (function *fun)
if (0 == strcmp (fnname, "test_caret_within_proper_range"))
{
const int line = fnstart_line + 2;
- location_t caret = get_loc (line, 16);
- source_range src_range;
- src_range.m_start = get_loc (line, 12);
- src_range.m_finish = get_loc (line, 20);
- location_t combined_loc = COMBINE_LOCATION_DATA (line_table,
- caret,
- src_range,
- NULL);
- warning_at (combined_loc, 0, "test");
+ warning_at (make_location (get_loc (line, 16), get_loc (line, 12),
+ get_loc (line, 20)),
+ 0, "test");
}
/* Example of a very wide line, where the information of interest
@@ -236,15 +234,9 @@ test_show_locus (function *fun)
if (0 == strcmp (fnname, "test_very_wide_line"))
{
const int line = fnstart_line + 2;
- location_t caret = get_loc (line, 94);
- source_range src_range;
- src_range.m_start = get_loc (line, 90);
- src_range.m_finish = get_loc (line, 98);
- location_t combined_loc = COMBINE_LOCATION_DATA (line_table,
- caret,
- src_range,
- NULL);
- warning_at (combined_loc, 0, "test");
+ warning_at (make_location (get_loc (line, 94), get_loc (line, 90),
+ get_loc (line, 98)),
+ 0, "test");
}
/* Example of multiple carets. */
@@ -254,7 +246,7 @@ test_show_locus (function *fun)
location_t caret_a = get_loc (line, 7);
location_t caret_b = get_loc (line, 11);
rich_location richloc (line_table, caret_a);
- richloc.add_range (caret_b, caret_b, true);
+ add_range (&richloc, caret_b, caret_b, true);
global_dc->caret_chars[0] = 'A';
global_dc->caret_chars[1] = 'B';
warning_at_rich_loc (&richloc, 0, "test");
@@ -266,11 +258,10 @@ test_show_locus (function *fun)
if (0 == strcmp (fnname, "test_fixit_insert"))
{
const int line = fnstart_line + 2;
- source_range src_range;
- src_range.m_start = get_loc (line, 19);
- src_range.m_finish = get_loc (line, 22);
- rich_location richloc (src_range);
- richloc.add_fixit_insert (src_range.m_start, "{");
+ location_t start = get_loc (line, 19);
+ location_t finish = get_loc (line, 22);
+ rich_location richloc (line_table, make_location (start, start, finish));
+ richloc.add_fixit_insert (start, "{");
richloc.add_fixit_insert (get_loc (line, 23), "}");
warning_at_rich_loc (&richloc, 0, "example of insertion hints");
}
@@ -278,10 +269,12 @@ test_show_locus (function *fun)
if (0 == strcmp (fnname, "test_fixit_remove"))
{
const int line = fnstart_line + 2;
+ location_t start = get_loc (line, 8);
+ location_t finish = get_loc (line, 8);
+ rich_location richloc (line_table, make_location (start, start, finish));
source_range src_range;
- src_range.m_start = get_loc (line, 8);
- src_range.m_finish = get_loc (line, 8);
- rich_location richloc (src_range);
+ src_range.m_start = start;
+ src_range.m_finish = finish;
richloc.add_fixit_remove (src_range);
warning_at_rich_loc (&richloc, 0, "example of a removal hint");
}
@@ -289,10 +282,12 @@ test_show_locus (function *fun)
if (0 == strcmp (fnname, "test_fixit_replace"))
{
const int line = fnstart_line + 2;
+ location_t start = get_loc (line, 2);
+ location_t finish = get_loc (line, 19);
+ rich_location richloc (line_table, make_location (start, start, finish));
source_range src_range;
- src_range.m_start = get_loc (line, 2);
- src_range.m_finish = get_loc (line, 19);
- rich_location richloc (src_range);
+ src_range.m_start = start;
+ src_range.m_finish = finish;
richloc.add_fixit_replace (src_range, "gtk_widget_show_all");
warning_at_rich_loc (&richloc, 0, "example of a replacement hint");
}
@@ -310,7 +305,7 @@ test_show_locus (function *fun)
location_t caret_a = get_loc (line, 5);
location_t caret_b = get_loc (line - 1, 19);
rich_location richloc (line_table, caret_a);
- richloc.add_range (caret_b, caret_b, true);
+ richloc.add_range (caret_b, true);
global_dc->caret_chars[0] = '1';
global_dc->caret_chars[1] = '2';
warning_at_rich_loc (&richloc, 0, "test");
diff --git a/gcc/testsuite/gcc.dg/plugin/location-overflow-test-2.c b/gcc/testsuite/gcc.dg/plugin/location-overflow-test-2.c
index c8b45b6..eb37519 100644
--- a/gcc/testsuite/gcc.dg/plugin/location-overflow-test-2.c
+++ b/gcc/testsuite/gcc.dg/plugin/location-overflow-test-2.c
@@ -20,7 +20,7 @@ int
fn_1 (int flag)
{
int foo = 4, bar = 5;
- if (flag) foo = 3; bar = 2; /* { dg-warning "indented" } */
+ if (flag) foo = 3; bar = 2; /* { dg-warning "this .if." } */
return foo * bar;
}
diff --git a/gcc/testsuite/gcc.dg/pr61053.c b/gcc/testsuite/gcc.dg/pr61053.c
index e270420..1c090e0 100644
--- a/gcc/testsuite/gcc.dg/pr61053.c
+++ b/gcc/testsuite/gcc.dg/pr61053.c
@@ -67,9 +67,19 @@ _Alignas (long double) double dld;
_Alignas (char) long double ldc; /* { dg-error "cannot reduce alignment" } */
_Alignas (short int) long double lds; /* { dg-error "cannot reduce alignment" } */
-_Alignas (int) long double ldi; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
-_Alignas (long int) long double ldl; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
-_Alignas (long long int) long double ldll; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
-_Alignas (float) long double ldf; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
-_Alignas (double) long double ldd; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
+
+#if __SIZEOF_LONG_DOUBLE__ == 12
+/* Get around PR testsuite/69573 - FAIL: gcc.dg/pr61053.c (test for excess
+ errors) on targets such as x86_64-apple-darwin15.3.0 where long double
+ is 16 bytes wide even in LP32. */
+# define X(T) short
+#else
+# define X(T) T
+#endif
+
+_Alignas (X (int)) long double ldi; /* { dg-error "cannot reduce alignment" } */
+_Alignas (X (long int)) long double ldl; /* { dg-error "cannot reduce alignment" } */
+_Alignas (X (long long int)) long double ldll; /* { dg-error "cannot reduce alignment" } */
+_Alignas (X (float)) long double ldf; /* { dg-error "cannot reduce alignment" } */
+_Alignas (X (double)) long double ldd; /* { dg-error "cannot reduce alignment" } */
_Alignas (long double) long double ldld;
diff --git a/gcc/testsuite/gcc.dg/pr61817-1.c b/gcc/testsuite/gcc.dg/pr61817-1.c
new file mode 100644
index 0000000..4230485
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr61817-1.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c11 -ftrack-macro-expansion=0" } */
+
+#define A(x) _Static_assert(x, #x)
+#define F(x, y, z) a = __LINE__, b = x ## y, c = z
+
+enum {
+#line 10
+ F
+ (
+ __LI,
+ NE__,
+ __LINE__
+ )
+};
+
+A(a == 15);
+A(b == 15);
+A(c == 15);
diff --git a/gcc/testsuite/gcc.dg/pr61817-2.c b/gcc/testsuite/gcc.dg/pr61817-2.c
new file mode 100644
index 0000000..e4326b8
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr61817-2.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c11 -ftrack-macro-expansion=1" } */
+
+#define A(x) _Static_assert(x, #x)
+#define F(x, y, z) a = __LINE__, b = x ## y, c = z
+
+enum {
+#line 10
+ F
+ (
+ __LI,
+ NE__,
+ __LINE__
+ )
+};
+
+A(a == 15);
+A(b == 15);
+A(c == 15);
diff --git a/gcc/testsuite/gcc.dg/pr64434.c b/gcc/testsuite/gcc.dg/pr64434.c
index 550a63d..6996871 100644
--- a/gcc/testsuite/gcc.dg/pr64434.c
+++ b/gcc/testsuite/gcc.dg/pr64434.c
@@ -1,5 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-rtl-expand-details" } */
+/* { dg-skip-if "PR64886" { hppa*-*-hpux* } { "*" } { "" } } */
#define N 256
int a1[N], a2[N], a3[N], a4[N];
diff --git a/gcc/testsuite/gcc.dg/pr67854.c b/gcc/testsuite/gcc.dg/pr67854.c
new file mode 100644
index 0000000..af994c6
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr67854.c
@@ -0,0 +1,11 @@
+/* PR c/67854 */
+/* { dg-do compile } */
+
+#include <stdbool.h>
+#include <stdarg.h>
+
+void
+foo (va_list ap)
+{
+ va_arg (ap, bool); /* { dg-warning "is promoted to .int. when passed through" } */
+}
diff --git a/gcc/testsuite/gcc.dg/pr69032.c b/gcc/testsuite/gcc.dg/pr69032.c
new file mode 100644
index 0000000..e0925cd
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr69032.c
@@ -0,0 +1,11 @@
+/* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */
+/* { dg-options "-O2 -fsched-pressure -fsel-sched-pipelining -fselective-scheduling" } */
+
+void foo (long long i)
+{
+ while (i != -1)
+ {
+ ++i;
+ __asm__ ("");
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/pr69195.c b/gcc/testsuite/gcc.dg/pr69195.c
new file mode 100644
index 0000000..af373a1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr69195.c
@@ -0,0 +1,27 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -fno-dce -fno-forward-propagate" } */
+
+void __attribute__ ((noinline, noclone))
+foo (int *a, int n)
+{
+ int *lasta = a + n;
+ for (; a != lasta; a++)
+ {
+ *a *= 2;
+ a[1] = a[-1] + a[-2];
+ }
+}
+
+int
+main ()
+{
+ int a[16] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
+ int r[16] = { 1, 2, 6, 6, 16, 24, 44, 80,
+ 136, 248, 432, 768, 1360, 2400, 4256, 3760 };
+ unsigned i;
+ foo (&a[2], 13);
+ for (i = 0; i < 8; ++i)
+ if (a[i] != r[i])
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/pr69238.c b/gcc/testsuite/gcc.dg/pr69238.c
new file mode 100644
index 0000000..3538e63
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr69238.c
@@ -0,0 +1,28 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fno-dce -fno-forward-propagate -fno-rerun-cse-after-loop -funroll-loops" } */
+
+
+#define N 32
+
+short sa[N];
+short sb[N];
+int ia[N];
+int ib[N];
+
+int __attribute__ ((noinline, noclone))
+main1 (int n)
+{
+ int i;
+ for (i = 0; i < n; i++)
+ {
+ sa[i+7] = sb[i];
+ ia[i+3] = ib[i+1];
+ }
+ return 0;
+}
+
+int
+main (void)
+{
+ return main1 (N-7);
+}
diff --git a/gcc/testsuite/gcc.dg/pr69307.c b/gcc/testsuite/gcc.dg/pr69307.c
new file mode 100644
index 0000000..d9d343e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr69307.c
@@ -0,0 +1,34 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fselective-scheduling2" } */
+
+typedef unsigned char uint8_t;
+typedef unsigned short int uint16_t;
+typedef unsigned int uint32_t;
+typedef unsigned long long int uint64_t;
+typedef uint8_t u8;
+typedef uint16_t u16;
+typedef uint32_t u32;
+typedef uint64_t u64;
+u64 __attribute__((noinline, noclone))
+foo(u8 u8_0, u16 u16_0, u32 u32_0, u64 u64_0, u8 u8_1, u16 u16_1, u32 u32_1, u64 u64_1, u8 u8_2, u16 u16_2, u32 u32_2, u64 u64_2, u8 u8_3, u16 u16_3, u32 u32_3, u64 u64_3)
+{
+ u8 *p8_2 = &u8_2;
+ u16 *p16_2 = &u16_2;
+ u8 *p8_3 = &u8_3;
+ u64 *p64_3 = &u64_3;
+ p8_2 = &u8_3;
+ *p8_3 -= *p64_3;
+ *p8_2 = (u64)*p8_2 % ((u64)*p8_2 | 3);
+ u8_2 = (u64)u8_2 / ((u64)*p16_2 | 1);
+ u16_0 = (u64)u16_0 % ((u64)*p8_2 | 3);
+ return u8_0 + u16_0 + u32_0 + u64_0 + u8_1 + u16_1 + u32_1 + u64_1 + u8_2 + u16_2 + u32_2 + u64_2 + u8_3 + u16_3 + u32_3 + u64_3;
+}
+int main()
+{
+ u64 x = 0;
+ x += foo(3llu, 6llu, 15llu, 28llu, 5llu, 11llu, 20llu, 44llu, 7llu, 10llu, 20llu, 55llu, 0llu, 9llu, 17llu, 48llu);
+ if (x != 0x1f3)
+ __builtin_abort();
+ return 0;
+}
+
diff --git a/gcc/testsuite/gcc.dg/pr69391-1.c b/gcc/testsuite/gcc.dg/pr69391-1.c
new file mode 100644
index 0000000..15e49dc
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr69391-1.c
@@ -0,0 +1,12 @@
+/* { dg-do run } */
+/* { dg-additional-options "-ftrack-macro-expansion=0" } */
+#define STR_I(X) #X
+#define STR(X) STR_I(X)
+#define LINE STR(__LINE__) STR(__LINE__)
+int main()
+{
+ const char *s = LINE;
+ if (s[0] != '8' || s[1] != '8')
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/pr69391-2.c b/gcc/testsuite/gcc.dg/pr69391-2.c
new file mode 100644
index 0000000..7d2faae
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr69391-2.c
@@ -0,0 +1,12 @@
+/* { dg-do run } */
+/* { dg-additional-options "-ftrack-macro-expansion=1" } */
+#define STR_I(X) #X
+#define STR(X) STR_I(X)
+#define LINE STR(__LINE__) STR(__LINE__)
+int main()
+{
+ const char *s = LINE;
+ if (s[0] != '8' || s[1] != '8')
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/pr69650.c b/gcc/testsuite/gcc.dg/pr69650.c
new file mode 100644
index 0000000..decdb89
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr69650.c
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+/* { dg-options "-std=gnu99" } */
+
+# 9 "somefile" 2 /* { dg-warning "linemarker ignored due to incorrect nesting" } */
+not_a_type a; /* { dg-error "unknown type" } */
diff --git a/gcc/testsuite/gcc.dg/pr69796.c b/gcc/testsuite/gcc.dg/pr69796.c
new file mode 100644
index 0000000..ebf34aa
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr69796.c
@@ -0,0 +1,10 @@
+/* PR c/69796 */
+/* { dg-do compile } */
+
+struct S s; /* { dg-error "storage size of 's' isn't known" } */
+
+void
+foo ()
+{
+ s a; /* { dg-error "expression statement has incomplete type|expected" } */
+}
diff --git a/gcc/testsuite/gcc.dg/pr69819.c b/gcc/testsuite/gcc.dg/pr69819.c
new file mode 100644
index 0000000..a9594dd
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr69819.c
@@ -0,0 +1,5 @@
+/* PR c/69819 */
+/* { dg-do compile } */
+
+void foo () { }
+int foo[] = { 0 }; /* { dg-error ".foo. redeclared as different kind of symbol" } */
diff --git a/gcc/testsuite/gcc.dg/pr69824.c b/gcc/testsuite/gcc.dg/pr69824.c
new file mode 100644
index 0000000..e2913f8
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr69824.c
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+/* { dg-options "-w" } */
+int bar() { return foo(); }
+void baz(int c[foo()]) { return; }
diff --git a/gcc/testsuite/gcc.dg/pr69885.c b/gcc/testsuite/gcc.dg/pr69885.c
new file mode 100644
index 0000000..e3a218b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr69885.c
@@ -0,0 +1,13 @@
+/* PR target/69885 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+/* { dg-additional-options "-m68000" { target m68k*-*-* } } */
+
+void bar (void);
+
+void
+foo (long long x)
+{
+ if (x >> 1)
+ bar ();
+}
diff --git a/gcc/testsuite/gcc.dg/pr69896.c b/gcc/testsuite/gcc.dg/pr69896.c
new file mode 100644
index 0000000..af141ad
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr69896.c
@@ -0,0 +1,33 @@
+/* PR rtl-optimization/69896 */
+/* { dg-do run { target int128 } } */
+/* { dg-options "-w -O -fcaller-saves -fno-dse -frename-registers -fno-tree-ter" } */
+/* { dg-additional-options "-mno-sse" { target x86_64-*-* i?86-*-* } } */
+
+typedef unsigned short A;
+typedef unsigned short B __attribute__ ((vector_size (32)));
+typedef unsigned int C;
+typedef unsigned int D __attribute__ ((vector_size (32)));
+typedef unsigned long long E;
+typedef unsigned long long F __attribute__ ((vector_size (32)));
+typedef unsigned __int128 G;
+typedef unsigned __int128 H __attribute__ ((vector_size (32)));
+
+G __attribute__ ((noinline, noclone))
+foo (A a, C b, E c, G d, A e, C f, E g, G h, B i, D j, F k, H l, B m, D n, F o, H p)
+{
+ j /= (D) { -c, -c, ~h, 1, ~l[0], -m[0], p[0], 1} | 1;
+ l %= (H) o | 1;
+ l[1] = (l[1] << (e & 127)) | (l[1] >> (e & 127));
+ return j[6] + l[0] + l[1] + n[7] + o[0] + o[2] + o[3] + p[0] + p[1];
+}
+
+int
+main ()
+{
+ if (__CHAR_BIT__ != 8 || sizeof (A) != 2 || sizeof (C) != 4 || sizeof (E) != 8 || sizeof (G) != 16)
+ return 0;
+ G x = foo (0, 1, 2, 3, 4, 5, 6, 7, (B) {}, (D) {}, (F) {}, (H) {}, (B) {}, (D) {}, (F) {}, (H) { 0xffffffffffffffffULL, 0x74a3e4aULL });
+ if ((E) x != 0x00000000074a3e49ULL || (E) (x >> 64) != 1)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/pr69900.c b/gcc/testsuite/gcc.dg/pr69900.c
new file mode 100644
index 0000000..2761d9f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr69900.c
@@ -0,0 +1,6 @@
+/* PR c/69900 */
+/* { dg-do compile } */
+
+#pragma GCC diagnostic error "-Wunreachable-code" /* { dg-bogus "is not an option that controls warnings" } */
+#pragma GCC diagnostic warning "-Wunreachable-code" /* { dg-bogus "is not an option that controls warnings" } */
+#pragma GCC diagnostic ignored "-Wunreachable-code" /* { dg-bogus "is not an option that controls warnings" } */
diff --git a/gcc/testsuite/gcc.dg/pr69915.c b/gcc/testsuite/gcc.dg/pr69915.c
new file mode 100644
index 0000000..4c60c59
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr69915.c
@@ -0,0 +1,15 @@
+/* PR middle-end/69915 */
+/* { dg-do compile } */
+/* { dg-options "-O -ftracer" } */
+
+typedef unsigned short V __attribute__ ((vector_size (32)));
+
+unsigned
+foo (unsigned x, unsigned c, V *p)
+{
+ V v = *p;
+ if (c < 360)
+ v = (V) { 0 };
+ v *= (V) { x };
+ return v[1];
+}
diff --git a/gcc/testsuite/gcc.dg/pr69956.c b/gcc/testsuite/gcc.dg/pr69956.c
new file mode 100644
index 0000000..37d24d4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr69956.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftree-vectorize" } */
+/* { dg-additional-options "-march=skylake-avx512" { target { i?86-*-* x86_64-*-* } } } */
+
+void
+fn1 (char *b, char *d, int *c, int i)
+{
+ for (; i; i++, d++)
+ if (b[i])
+ *d = c[i];
+}
diff --git a/gcc/testsuite/gcc.dg/pr69973.c b/gcc/testsuite/gcc.dg/pr69973.c
new file mode 100644
index 0000000..648bc56
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr69973.c
@@ -0,0 +1,2 @@
+/* { dg-do compile } */
+typedef int v4si __attribute__ ((vector_size (1 << 29)));
diff --git a/gcc/testsuite/gcc.dg/pr69974.c b/gcc/testsuite/gcc.dg/pr69974.c
new file mode 100644
index 0000000..101d621
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr69974.c
@@ -0,0 +1,13 @@
+/* PR c/69974 */
+/* { dg-do compile } */
+
+struct S;
+char foo (struct S *);
+struct S a; /* { dg-error "storage size of 'a' isn't known" } */
+int b;
+
+void
+bar ()
+{
+ b &= foo (&a);
+}
diff --git a/gcc/testsuite/gcc.dg/pr69990.c b/gcc/testsuite/gcc.dg/pr69990.c
new file mode 100644
index 0000000..efb835e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr69990.c
@@ -0,0 +1,24 @@
+/* { dg-do run } */
+/* { dg-require-effective-target section_anchors } */
+/* { dg-options "-O2 -fsection-anchors -ftree-loop-vectorize" } */
+
+#pragma pack(1)
+struct S0 {
+ volatile int f0:12;
+} static a[] = {{15}}, c[] = {{15}};
+
+struct S0 b[] = {{7}};
+
+int __attribute__ ((noinline, noclone))
+ok (int a, int b, int c)
+{
+ return a == 15 && b == 7 && c == 15 ? 0 : 1;
+}
+
+int
+main (void)
+{
+ struct S0 *f[] = { c, b };
+
+ return ok (a[0].f0, b[0].f0, f[0]->f0);
+}
diff --git a/gcc/testsuite/gcc.dg/pr70017.c b/gcc/testsuite/gcc.dg/pr70017.c
new file mode 100644
index 0000000..52586fe
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr70017.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-options "-fstack-check=generic" } */
+
+/* Check that the expected warning is issued for large frames. */
+
+#define ONE(s) char a##s[32];
+#define TEN(s) ONE(s##0) ONE(s##1) ONE(s##2) ONE(s##3) ONE(s##4) \
+ ONE(s##5) ONE(s##6) ONE(s##7) ONE(s##8) ONE(s##9)
+#define HUNDRED(s) TEN(s##0) TEN(s##1) TEN(s##2) TEN(s##3) TEN(s##4) \
+ TEN(s##5) TEN(s##6) TEN(s##7) TEN(s##8) TEN(s##9)
+
+void foo(void)
+{
+ HUNDRED(a)
+ HUNDRED(b)
+#undef ONE
+#define ONE(s) a##s[0] = 0;
+ HUNDRED(a)
+ HUNDRED(b)
+} /* { dg-warning "frame size too large for reliable stack checking" } */
diff --git a/gcc/testsuite/gcc.dg/pr70022.c b/gcc/testsuite/gcc.dg/pr70022.c
new file mode 100644
index 0000000..30eb7ece
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr70022.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-w -Wno-psabi" } */
+
+typedef int v4si __attribute__ ((vector_size (16)));
+
+int
+foo (v4si v)
+{
+ return v[~0UL];
+}
diff --git a/gcc/testsuite/gcc.dg/pr70026.c b/gcc/testsuite/gcc.dg/pr70026.c
new file mode 100644
index 0000000..32f59e2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr70026.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+
+unsigned int a[64], b[64], c[64], d[64], e[64];
+
+void
+foo ()
+{
+ int i;
+ for (i = 0; i < 64; i++)
+ {
+ d[i] = a[i];
+ e[i] = ((b[i] < e[i]) != !c[i]) && !a[i];
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/pr70050.c b/gcc/testsuite/gcc.dg/pr70050.c
new file mode 100644
index 0000000..ec6834d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr70050.c
@@ -0,0 +1,11 @@
+/* PR middle-end/70050 */
+/* { dg-do compile } */
+/* { dg-options "-w -Wno-psabi" } */
+
+typedef int v8si __attribute__ ((vector_size (32)));
+
+v8si
+foo (v8si v)
+{
+ return v %= -v;
+}
diff --git a/gcc/testsuite/gcc.dg/pr70110.c b/gcc/testsuite/gcc.dg/pr70110.c
new file mode 100644
index 0000000..42bbe3a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr70110.c
@@ -0,0 +1,39 @@
+/* PR target/70110 */
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+/* { dg-additional-options "-msse2" { target i?86-*-* x86_64-*-* } } */
+
+int a, c, d, f, h;
+long long b;
+
+static inline void
+foo (void)
+{
+ if (a)
+ foo ();
+ b = c;
+}
+
+static inline void
+bar (int p)
+{
+ if (p)
+ f = 0;
+ b |= c;
+}
+
+void
+baz (int g, int i)
+{
+ for (b = d; (d = 1) != 0; )
+ {
+ if (a)
+ foo ();
+ b |= c;
+ bar (h);
+ bar (g);
+ bar (h);
+ bar (i);
+ bar (h);
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/pr70152.c b/gcc/testsuite/gcc.dg/pr70152.c
new file mode 100644
index 0000000..27a092d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr70152.c
@@ -0,0 +1,27 @@
+/* PR tree-optimization/70152 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+int a;
+int foo (void);
+int setjmp (char *);
+char buf[64];
+
+static int
+bar (int x)
+{
+ x = 0;
+ setjmp (buf);
+ for (;;)
+ {
+ switch (x)
+ case 5:
+ x = foo ();
+ }
+}
+
+void
+baz (void)
+{
+ bar (a);
+}
diff --git a/gcc/testsuite/gcc.dg/pr70161-2.c b/gcc/testsuite/gcc.dg/pr70161-2.c
new file mode 100644
index 0000000..d2cb221
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr70161-2.c
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-ipa-all-graph -fipa-pta" } */
+
+void
+foo (void)
+{
+}
diff --git a/gcc/testsuite/gcc.dg/pr70161.c b/gcc/testsuite/gcc.dg/pr70161.c
new file mode 100644
index 0000000..0b173c7
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr70161.c
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-ipa-all-graph" } */
+
+void
+foo (void)
+{
+}
diff --git a/gcc/testsuite/gcc.dg/pr70169.c b/gcc/testsuite/gcc.dg/pr70169.c
new file mode 100644
index 0000000..8d08f5c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr70169.c
@@ -0,0 +1,40 @@
+/* PR tree-optimization/70169 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-strict-aliasing -fno-tree-dce" } */
+
+int printf (const char *, ...);
+
+void
+foo ()
+{
+ unsigned char *p = (unsigned char *) &printf;
+ for (;;)
+ (*p)++;
+}
+
+void
+bar (int x)
+{
+ unsigned char *p = (unsigned char *) &printf;
+ int i;
+ for (i = 0; i < x; i++)
+ (*p)++;
+}
+
+void
+baz (int x, int y)
+{
+ unsigned char *p = (unsigned char *) &&lab;
+ int i;
+ if (y)
+ {
+ for (i = 0; i < x; i++)
+ (*p)++;
+ }
+ else
+ {
+ lab:
+ asm volatile ("");
+ foo ();
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/pr70174.c b/gcc/testsuite/gcc.dg/pr70174.c
new file mode 100644
index 0000000..8a3bc90
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr70174.c
@@ -0,0 +1,11 @@
+/* PR rtl-optimization/70174 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+struct S { int f : 4; } a;
+
+void
+foo (void)
+{
+ a.f = foo; /* { dg-warning "assignment makes integer from pointer without a cast" } */
+}
diff --git a/gcc/testsuite/gcc.dg/pr70177.c b/gcc/testsuite/gcc.dg/pr70177.c
new file mode 100644
index 0000000..1b2bec1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr70177.c
@@ -0,0 +1,15 @@
+/* PR tree-optimization/70177 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+int b[128];
+
+void
+foo (int i, int j)
+{
+ int c, f, g, h;
+ for (g = 0; g < 64; g++)
+ for (h = g, f = 0; f <= i; f++, h++)
+ for (c = 0; c < j; c++)
+ b[h] = 0;
+}
diff --git a/gcc/testsuite/gcc.dg/pr70219.c b/gcc/testsuite/gcc.dg/pr70219.c
new file mode 100644
index 0000000..bbdbe67
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr70219.c
@@ -0,0 +1,18 @@
+/* PR middle-end/70219 */
+/* { dg-do compile { target int128 } } */
+/* { dg-options "-O1 -w -Wno-psabi" } */
+
+typedef int B __attribute__ ((vector_size (32)));
+typedef int D __attribute__ ((vector_size (32)));
+typedef long E __attribute__ ((vector_size (32)));
+typedef __int128 F;
+typedef __int128 G __attribute__ ((vector_size (32)));
+
+F
+foo (int a, unsigned b, F c, B d, G e, B f, D g, E h, G i)
+{
+ b /= c;
+ e /= (G) ~d;
+ h -= (E){ g[4], e[1], 64, ~f[1] };
+ return b + e[1] + h[0] + h[1] + i[1];
+}
diff --git a/gcc/testsuite/gcc.dg/pr70252.c b/gcc/testsuite/gcc.dg/pr70252.c
new file mode 100644
index 0000000..209e691
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr70252.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+/* { dg-additional-options "-march=skylake-avx512" { target { i?86-*-* x86_64-*-* } } } */
+
+extern unsigned char a [150];
+extern unsigned char b [150];
+extern unsigned char c [150];
+extern unsigned char d [150];
+extern unsigned char e [150];
+
+void foo () {
+ for (int i = 92; i <= 141; i += 2) {
+ int tmp = (d [i] && b [i]) <= (a [i] > c [i]);
+ e [i] = tmp >> b [i];
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/pr70269.c b/gcc/testsuite/gcc.dg/pr70269.c
new file mode 100644
index 0000000..030cea1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr70269.c
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fipa-pta -fdump-ipa-pta-graph" } */
+
+void
+foo (void)
+{
+}
diff --git a/gcc/testsuite/gcc.dg/pr70281.c b/gcc/testsuite/gcc.dg/pr70281.c
new file mode 100644
index 0000000..9447fb1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr70281.c
@@ -0,0 +1,9 @@
+/* { dg-options "-Wall -fdiagnostics-show-caret" } */
+int bch_stats_show ()
+{
+ return __builtin_types_compatible_p (unsigned, int) ? "" : ""; /* { dg-warning "cast" } */
+/* { dg-begin-multiline-output "" }
+ return __builtin_types_compatible_p (unsigned, int) ? "" : "";
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
+ { dg-end-multiline-output "" } */
+}
diff --git a/gcc/testsuite/gcc.dg/pr70292.c b/gcc/testsuite/gcc.dg/pr70292.c
new file mode 100644
index 0000000..458cccd
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr70292.c
@@ -0,0 +1,12 @@
+/* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */
+/* { dg-options "-O1 -fno-inline -fno-dce -fschedule-insns -fselective-scheduling -fno-tree-dce" } */
+
+void bar() {}
+
+int t106_1mul(unsigned int x, unsigned int y) {
+ int r;
+ if (__builtin_mul_overflow(x, y, &r)) {
+ bar();
+ }
+ return r;
+}
diff --git a/gcc/testsuite/gcc.dg/pr70317.c b/gcc/testsuite/gcc.dg/pr70317.c
new file mode 100644
index 0000000..3a9c52e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr70317.c
@@ -0,0 +1,27 @@
+/* PR tree-optimization/70317 */
+/* { dg-do compile } */
+/* { dg-skip-if "No NaN support" { spu*-*-* vax*-*-* pdp11*-*-* } } */
+/* { dg-options "-O2 -fdump-tree-optimized" } */
+/* { dg-additional-options "-fno-common" { target hppa*-*-hpux* } } */
+
+typedef double V __attribute__((vector_size (256)));
+typedef __typeof ((V) {} < (V) {}) T;
+T a, b;
+
+__attribute__((noinline, noclone, optimize ("finite-math-only"))) void
+foo (V *x)
+{
+ V z = *x;
+ a = z <= z;
+}
+
+/* { dg-final { scan-tree-dump "a\[^\n\r]*= . -1, -1," "optimized" } } */
+
+__attribute__((noinline, noclone, optimize ("no-finite-math-only"))) void
+bar (V *x)
+{
+ V z = *x;
+ b = z <= z;
+}
+
+/* { dg-final { scan-tree-dump-not "b\[^\n\r]*= . -1, -1," "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/pr70326.c b/gcc/testsuite/gcc.dg/pr70326.c
new file mode 100644
index 0000000..8332899
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr70326.c
@@ -0,0 +1,20 @@
+/* PR middle-end/70326 */
+/* { dg-do compile { target int128 } } */
+/* { dg-options "-Og -fno-dce -fno-guess-branch-probability -fschedule-insns -fno-tree-coalesce-vars -fno-tree-dce -w -Wno-psabi" } */
+
+typedef unsigned int A __attribute__ ((vector_size (32)));
+typedef unsigned __int128 B;
+typedef unsigned __int128 C __attribute__ ((vector_size (32)));
+typedef unsigned __int128 D __attribute__ ((vector_size (32)));
+
+void
+foo (B a, D b, A c, A d, C e)
+{
+ b /= (D) {11} | 1;
+ a ^= a <= 10;
+ e *= (C) d;
+ e += (C) ~b;
+ c[0] ^= c[0] <= 0x1234;
+ a = (a >> 1) | (a << 127);
+ b += (D) {45, 123};
+}
diff --git a/gcc/testsuite/gcc.dg/pr70405.c b/gcc/testsuite/gcc.dg/pr70405.c
new file mode 100644
index 0000000..bff390f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr70405.c
@@ -0,0 +1,15 @@
+/* PR tree-optimization/70405 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fcompare-debug" } */
+/* { dg-additional-options "-mavx512f" { target i?86-*-* x86_64-*-* } } */
+
+typedef short V __attribute__ ((vector_size (32)));
+
+int
+foo (V *p)
+{
+ V v = *p;
+ v >>= v;
+ v -= v[0];
+ return v[3];
+}
diff --git a/gcc/testsuite/gcc.dg/pr70442.c b/gcc/testsuite/gcc.dg/pr70442.c
new file mode 100644
index 0000000..b9c11ea
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr70442.c
@@ -0,0 +1,20 @@
+/* PR target/70442 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+/* { dg-additional-options "-msse2" { target ia32 } } */
+
+char a, c;
+void
+fn1 ()
+{
+ long long b;
+ long m;
+ int d;
+ switch (d)
+ {
+ case 5:
+ b = a;
+ }
+ b ^= m;
+ c = b >> b;
+}
diff --git a/gcc/testsuite/gcc.dg/sibcall-11.c b/gcc/testsuite/gcc.dg/sibcall-11.c
new file mode 100644
index 0000000..ae58770
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/sibcall-11.c
@@ -0,0 +1,7 @@
+// Test for sibcall optimization with empty struct.
+// { dg-options "-O2" }
+// { dg-final { scan-assembler "jmp" { target i?86-*-* x86_64-*-* } } }
+
+struct A { };
+void f(struct A);
+void g(struct A a) { f(a); }
diff --git a/gcc/testsuite/gcc.dg/simd-7.c b/gcc/testsuite/gcc.dg/simd-7.c
new file mode 100644
index 0000000..42feccb
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/simd-7.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-options "-w -Wno-psabi" } */
+
+#if __SIZEOF_LONG_DOUBLE__ == 16 || __SIZEOF_LONG_DOUBLE__ == 8
+typedef long double a __attribute__((vector_size (16)));
+
+a __attribute__((noinline))
+sum (a first, a second)
+{
+ return first + second;
+}
+
+a
+foo (a x, a y, a z)
+{
+ return sum (x, y) + z;
+}
+#else
+int main() {}
+#endif
diff --git a/gcc/testsuite/gcc.dg/simd-8.c b/gcc/testsuite/gcc.dg/simd-8.c
new file mode 100644
index 0000000..5bc8637
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/simd-8.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-options "-w -Wno-psabi" } */
+
+#if __SIZEOF_LONG_DOUBLE__ == 16 || __SIZEOF_LONG_DOUBLE__ == 8
+typedef long double a __attribute__((vector_size (32)));
+
+a __attribute__((noinline))
+sum (a first, a second)
+{
+ return first + second;
+}
+
+a
+foo (a x, a y, a z)
+{
+ return sum (x, y) + z;
+}
+#else
+int main() {}
+#endif
diff --git a/gcc/testsuite/gcc.dg/sso/p1.c b/gcc/testsuite/gcc.dg/sso/p1.c
index bf14ffe..eb4087a 100644
--- a/gcc/testsuite/gcc.dg/sso/p1.c
+++ b/gcc/testsuite/gcc.dg/sso/p1.c
@@ -60,5 +60,6 @@ int main (void)
new_line ();
/* { dg-output "Local_R2 : 12 34 56 78.*\n" } */
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/p13.c b/gcc/testsuite/gcc.dg/sso/p13.c
index fa1af69..33af502 100644
--- a/gcc/testsuite/gcc.dg/sso/p13.c
+++ b/gcc/testsuite/gcc.dg/sso/p13.c
@@ -60,5 +60,6 @@ int main (void)
new_line ();
/* { dg-output "Local_R2 : 40 49 0f db c0 49 0f db.*\n" } */
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/p2.c b/gcc/testsuite/gcc.dg/sso/p2.c
index 2d92946..0755902 100644
--- a/gcc/testsuite/gcc.dg/sso/p2.c
+++ b/gcc/testsuite/gcc.dg/sso/p2.c
@@ -84,5 +84,6 @@ int main (void)
new_line ();
/* { dg-output "Local_R2 : 84 8d 15 9e 15 5b 35 df.*\n" } */
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/p3.c b/gcc/testsuite/gcc.dg/sso/p3.c
index fb71596..bdd3508 100644
--- a/gcc/testsuite/gcc.dg/sso/p3.c
+++ b/gcc/testsuite/gcc.dg/sso/p3.c
@@ -84,5 +84,6 @@ int main (void)
new_line ();
/* { dg-output "Local_R2 : 09 e2 af 37 bd 24 d2 b4.*\n" } */
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/p4.c b/gcc/testsuite/gcc.dg/sso/p4.c
index ba0775f..b0b05aa 100644
--- a/gcc/testsuite/gcc.dg/sso/p4.c
+++ b/gcc/testsuite/gcc.dg/sso/p4.c
@@ -60,5 +60,6 @@ int main (void)
new_line ();
/* { dg-output "Local_R2 : 40 49 0f db.*\n" } */
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/p5.c b/gcc/testsuite/gcc.dg/sso/p5.c
index fc8b7e1..c016b3c 100644
--- a/gcc/testsuite/gcc.dg/sso/p5.c
+++ b/gcc/testsuite/gcc.dg/sso/p5.c
@@ -70,5 +70,6 @@ int main (void)
new_line ();
/* { dg-output "Local_R2 : 12 34 56 78 00 ab 00 12 00 cd 00 34 00 ef 00 56.*\n" } */
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/p6.c b/gcc/testsuite/gcc.dg/sso/p6.c
index 90805a7..1f0d55d 100644
--- a/gcc/testsuite/gcc.dg/sso/p6.c
+++ b/gcc/testsuite/gcc.dg/sso/p6.c
@@ -70,5 +70,6 @@ int main (void)
new_line ();
/* { dg-output "Local_R2 : 12 34 56 78 12 00 ab 00 34 00 cd 00 56 00 ef 00.*\n" } */
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/p7.c b/gcc/testsuite/gcc.dg/sso/p7.c
index e347ecf..3c677f0 100644
--- a/gcc/testsuite/gcc.dg/sso/p7.c
+++ b/gcc/testsuite/gcc.dg/sso/p7.c
@@ -70,5 +70,6 @@ int main (void)
new_line ();
/* { dg-output "Local_R2 : 12 34 56 78 00 ab 00 12 00 cd 00 34 00 ef 00 56.*\n" } */
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/p8.c b/gcc/testsuite/gcc.dg/sso/p8.c
index d66c7da..d14a117 100644
--- a/gcc/testsuite/gcc.dg/sso/p8.c
+++ b/gcc/testsuite/gcc.dg/sso/p8.c
@@ -70,5 +70,6 @@ int main (void)
new_line ();
/* { dg-output "Local_R2 : 12 34 56 78 12 00 ab 00 34 00 cd 00 56 00 ef 00.*\n" } */
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/p9.c b/gcc/testsuite/gcc.dg/sso/p9.c
index ce565e9..c72de05 100644
--- a/gcc/testsuite/gcc.dg/sso/p9.c
+++ b/gcc/testsuite/gcc.dg/sso/p9.c
@@ -60,5 +60,6 @@ int main (void)
new_line ();
/* { dg-output "Local_R2 : 40 09 21 fb 54 44 2d 18.*\n" } */
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/q1.c b/gcc/testsuite/gcc.dg/sso/q1.c
index f61398b..7441c53 100644
--- a/gcc/testsuite/gcc.dg/sso/q1.c
+++ b/gcc/testsuite/gcc.dg/sso/q1.c
@@ -46,5 +46,6 @@ int main (void)
if (A2.I != 0x12345678) abort ();
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/q13.c b/gcc/testsuite/gcc.dg/sso/q13.c
index c00701d..cacc2a9 100644
--- a/gcc/testsuite/gcc.dg/sso/q13.c
+++ b/gcc/testsuite/gcc.dg/sso/q13.c
@@ -46,5 +46,6 @@ int main (void)
if (A2.F != Pi - Pi * I) abort ();
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/q2.c b/gcc/testsuite/gcc.dg/sso/q2.c
index 35e2839..66c39ee 100644
--- a/gcc/testsuite/gcc.dg/sso/q2.c
+++ b/gcc/testsuite/gcc.dg/sso/q2.c
@@ -50,5 +50,6 @@ int main (void)
if (A2.I != B2.I || A2.A1 != B2.A1) abort ();
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/q3.c b/gcc/testsuite/gcc.dg/sso/q3.c
index 31d395a..59cfa17 100644
--- a/gcc/testsuite/gcc.dg/sso/q3.c
+++ b/gcc/testsuite/gcc.dg/sso/q3.c
@@ -50,5 +50,6 @@ int main (void)
if (A2.I != B2.I || A2.N.C1 != B2.N.C1) abort ();
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/q4.c b/gcc/testsuite/gcc.dg/sso/q4.c
index 72a1366..5ac81a3 100644
--- a/gcc/testsuite/gcc.dg/sso/q4.c
+++ b/gcc/testsuite/gcc.dg/sso/q4.c
@@ -46,5 +46,6 @@ int main (void)
if (A2.F != Pi) abort ();
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/q5.c b/gcc/testsuite/gcc.dg/sso/q5.c
index 678c3d3..f965e5e 100644
--- a/gcc/testsuite/gcc.dg/sso/q5.c
+++ b/gcc/testsuite/gcc.dg/sso/q5.c
@@ -42,5 +42,6 @@ int main (void)
if (A2.I != B2.I || A2.A[0] != B2.A[0]) abort ();
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/q6.c b/gcc/testsuite/gcc.dg/sso/q6.c
index f69bad0..9bd146c 100644
--- a/gcc/testsuite/gcc.dg/sso/q6.c
+++ b/gcc/testsuite/gcc.dg/sso/q6.c
@@ -41,5 +41,6 @@ int main (void)
if (A2.I != B2.I || A2.N.A[0] != B2.N.A[0]) abort ();
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/q7.c b/gcc/testsuite/gcc.dg/sso/q7.c
index 0c3dbc5..d3bd6b3 100644
--- a/gcc/testsuite/gcc.dg/sso/q7.c
+++ b/gcc/testsuite/gcc.dg/sso/q7.c
@@ -42,5 +42,6 @@ int main (void)
if (A2.I != B2.I || A2.N.C1 != B2.N.C1) abort ();
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/q8.c b/gcc/testsuite/gcc.dg/sso/q8.c
index 3846cb1..2595fb4 100644
--- a/gcc/testsuite/gcc.dg/sso/q8.c
+++ b/gcc/testsuite/gcc.dg/sso/q8.c
@@ -42,5 +42,6 @@ int main (void)
if (A2.I != B2.I || A2.N.C1 != B2.N.C1) abort ();
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/q9.c b/gcc/testsuite/gcc.dg/sso/q9.c
index aafb81c..ed5f68f 100644
--- a/gcc/testsuite/gcc.dg/sso/q9.c
+++ b/gcc/testsuite/gcc.dg/sso/q9.c
@@ -46,5 +46,6 @@ int main (void)
if (A2.F != Pi) abort ();
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/r3.c b/gcc/testsuite/gcc.dg/sso/r3.c
index b9a0cc4..08430c4 100644
--- a/gcc/testsuite/gcc.dg/sso/r3.c
+++ b/gcc/testsuite/gcc.dg/sso/r3.c
@@ -61,5 +61,6 @@ int main (void)
Set_Elem2 (&A2, 0xCD0034);
if (Get_Elem2 (A2) != 0xCD0034) abort ();
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/r5.c b/gcc/testsuite/gcc.dg/sso/r5.c
index 1323325..7d784f3 100644
--- a/gcc/testsuite/gcc.dg/sso/r5.c
+++ b/gcc/testsuite/gcc.dg/sso/r5.c
@@ -61,5 +61,6 @@ int main (void)
Set_Elem2 (&A2, 0xCD0034);
if (Get_Elem2 (A2) != 0xCD0034) abort ();
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/r6.c b/gcc/testsuite/gcc.dg/sso/r6.c
index 452a106..1924fb7 100644
--- a/gcc/testsuite/gcc.dg/sso/r6.c
+++ b/gcc/testsuite/gcc.dg/sso/r6.c
@@ -61,5 +61,6 @@ int main (void)
Set_Elem2 (&A2, 0xCD0034);
if (Get_Elem2 (A2) != 0xCD0034) abort ();
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/r7.c b/gcc/testsuite/gcc.dg/sso/r7.c
index 3c46e61..f9ed1c7 100644
--- a/gcc/testsuite/gcc.dg/sso/r7.c
+++ b/gcc/testsuite/gcc.dg/sso/r7.c
@@ -61,5 +61,6 @@ int main (void)
Set_Elem2 (&A2, 0xCD0034);
if (Get_Elem2 (A2) != 0xCD0034) abort ();
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/r8.c b/gcc/testsuite/gcc.dg/sso/r8.c
index 0ea3a61..7dfb5e7 100644
--- a/gcc/testsuite/gcc.dg/sso/r8.c
+++ b/gcc/testsuite/gcc.dg/sso/r8.c
@@ -61,5 +61,6 @@ int main (void)
Set_Elem2 (&A2, 0xCD0034);
if (Get_Elem2 (A2) != 0xCD0034) abort ();
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/s3.c b/gcc/testsuite/gcc.dg/sso/s3.c
index 6a62937..3310402 100644
--- a/gcc/testsuite/gcc.dg/sso/s3.c
+++ b/gcc/testsuite/gcc.dg/sso/s3.c
@@ -75,5 +75,6 @@ int main (void)
new_line ();
/* { dg-output "A2 : 09 e2 af 37 bd 24 d2 b4.*\n" } */
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/s5.c b/gcc/testsuite/gcc.dg/sso/s5.c
index f29f634..67d3984 100644
--- a/gcc/testsuite/gcc.dg/sso/s5.c
+++ b/gcc/testsuite/gcc.dg/sso/s5.c
@@ -87,5 +87,6 @@ int main (void)
new_line ();
/* { dg-output "A2 : 12 34 56 78 00 ab 00 12 00 cd 00 34 00 ef 00 56.*\n" } */
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/s6.c b/gcc/testsuite/gcc.dg/sso/s6.c
index a1d0494..2cfc0cc 100644
--- a/gcc/testsuite/gcc.dg/sso/s6.c
+++ b/gcc/testsuite/gcc.dg/sso/s6.c
@@ -77,5 +77,6 @@ int main (void)
new_line ();
/* { dg-output "A2 : 12 34 56 78 12 00 ab 00 34 00 cd 00 56 00 ef 00.*\n" } */
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/s7.c b/gcc/testsuite/gcc.dg/sso/s7.c
index 37d07c7..4099943 100644
--- a/gcc/testsuite/gcc.dg/sso/s7.c
+++ b/gcc/testsuite/gcc.dg/sso/s7.c
@@ -75,5 +75,6 @@ int main (void)
new_line ();
/* { dg-output "A2 : 12 34 56 78 00 ab 00 12 00 cd 00 34 00 ef 00 56.*\n" } */
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/s8.c b/gcc/testsuite/gcc.dg/sso/s8.c
index 5ff9c36..1b08896 100644
--- a/gcc/testsuite/gcc.dg/sso/s8.c
+++ b/gcc/testsuite/gcc.dg/sso/s8.c
@@ -75,5 +75,6 @@ int main (void)
new_line ();
/* { dg-output "A2 : 12 34 56 78 12 00 ab 00 34 00 cd 00 56 00 ef 00.*\n" } */
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/sso.exp b/gcc/testsuite/gcc.dg/sso/sso.exp
index 6a38596..87dd494 100644
--- a/gcc/testsuite/gcc.dg/sso/sso.exp
+++ b/gcc/testsuite/gcc.dg/sso/sso.exp
@@ -32,6 +32,10 @@ set SSO_TORTURE_OPTIONS [list \
set-torture-options $SSO_TORTURE_OPTIONS
+if { ![check_effective_target_int32] } {
+ return
+}
+
# Main loop.
gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.c]] "" ""
diff --git a/gcc/testsuite/gcc.dg/sso/t1.c b/gcc/testsuite/gcc.dg/sso/t1.c
index 6f4a587..8b1c7b5 100644
--- a/gcc/testsuite/gcc.dg/sso/t1.c
+++ b/gcc/testsuite/gcc.dg/sso/t1.c
@@ -52,5 +52,6 @@ int main (void)
new_line ();
/* { dg-output "Local_R2 : 12 34 56 79.*\n" } */
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/t13.c b/gcc/testsuite/gcc.dg/sso/t13.c
index 077f0c9..223b42d 100644
--- a/gcc/testsuite/gcc.dg/sso/t13.c
+++ b/gcc/testsuite/gcc.dg/sso/t13.c
@@ -52,5 +52,6 @@ int main (void)
new_line ();
/* { dg-output "Local_R2 : 40 84 87 ee c0 09 0f db.*\n" } */
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/t2.c b/gcc/testsuite/gcc.dg/sso/t2.c
index 9d9d2af..1b19ff9 100644
--- a/gcc/testsuite/gcc.dg/sso/t2.c
+++ b/gcc/testsuite/gcc.dg/sso/t2.c
@@ -88,5 +88,6 @@ int main (void)
new_line ();
/* { dg-output "Local_R2 : 44 8d 15 9e 40 58 34 1e.*\n" } */
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/t3.c b/gcc/testsuite/gcc.dg/sso/t3.c
index 5a5a54f..895377d 100644
--- a/gcc/testsuite/gcc.dg/sso/t3.c
+++ b/gcc/testsuite/gcc.dg/sso/t3.c
@@ -88,5 +88,6 @@ int main (void)
new_line ();
/* { dg-output "Local_R2 : 05 e2 af 37 c0 04 10 30.*\n" } */
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/t4.c b/gcc/testsuite/gcc.dg/sso/t4.c
index e1662475..56e4581 100644
--- a/gcc/testsuite/gcc.dg/sso/t4.c
+++ b/gcc/testsuite/gcc.dg/sso/t4.c
@@ -52,5 +52,6 @@ int main (void)
new_line ();
/* { dg-output "Local_R2 : 40 84 87 ee.*\n" } */
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/t5.c b/gcc/testsuite/gcc.dg/sso/t5.c
index 1d506db..d59e9ae 100644
--- a/gcc/testsuite/gcc.dg/sso/t5.c
+++ b/gcc/testsuite/gcc.dg/sso/t5.c
@@ -68,5 +68,6 @@ int main (void)
new_line ();
/* { dg-output "Local_R2 : 12 34 56 79 00 ab 00 13 00 cd 00 35 00 ef 00 57.*\n" } */
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/t6.c b/gcc/testsuite/gcc.dg/sso/t6.c
index 018f9bd..ed21ad8 100644
--- a/gcc/testsuite/gcc.dg/sso/t6.c
+++ b/gcc/testsuite/gcc.dg/sso/t6.c
@@ -68,5 +68,6 @@ int main (void)
new_line ();
/* { dg-output "Local_R2 : 12 34 56 79 13 00 ab 00 35 00 cd 00 57 00 ef 00.*\n" } */
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/t7.c b/gcc/testsuite/gcc.dg/sso/t7.c
index 6e6443b..b82218a 100644
--- a/gcc/testsuite/gcc.dg/sso/t7.c
+++ b/gcc/testsuite/gcc.dg/sso/t7.c
@@ -68,5 +68,6 @@ int main (void)
new_line ();
/* { dg-output "Local_R2 : 12 34 56 79 00 ab 00 13 00 cd 00 35 00 ef 00 57.*\n" } */
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/t8.c b/gcc/testsuite/gcc.dg/sso/t8.c
index 8fbb817..33f51bf 100644
--- a/gcc/testsuite/gcc.dg/sso/t8.c
+++ b/gcc/testsuite/gcc.dg/sso/t8.c
@@ -68,5 +68,6 @@ int main (void)
new_line ();
/* { dg-output "Local_R2 : 12 34 56 79 13 00 ab 00 35 00 cd 00 57 00 ef 00.*\n" } */
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/t9.c b/gcc/testsuite/gcc.dg/sso/t9.c
index 2985bfc..2779e4d 100644
--- a/gcc/testsuite/gcc.dg/sso/t9.c
+++ b/gcc/testsuite/gcc.dg/sso/t9.c
@@ -52,5 +52,6 @@ int main (void)
new_line ();
/* { dg-output "Local_R2 : 40 10 90 fd aa 22 16 8c.*\n" } */
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/u5.c b/gcc/testsuite/gcc.dg/sso/u5.c
index 8b9d097..3b52142 100644
--- a/gcc/testsuite/gcc.dg/sso/u5.c
+++ b/gcc/testsuite/gcc.dg/sso/u5.c
@@ -48,5 +48,6 @@ int main (void)
printf ("C2 : %d\n", C2);
/* { dg-output "C2 : 15663190.*\n" } */
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/sso/u6.c b/gcc/testsuite/gcc.dg/sso/u6.c
index 4b2ca1c..9da9262 100644
--- a/gcc/testsuite/gcc.dg/sso/u6.c
+++ b/gcc/testsuite/gcc.dg/sso/u6.c
@@ -48,5 +48,6 @@ int main (void)
printf ("C2 : %d\n", C2);
/* { dg-output "C2 : 15663190.*\n" } */
+ new_line ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/strlenopt.h b/gcc/testsuite/gcc.dg/strlenopt.h
index ef47e5a..8f69940 100644
--- a/gcc/testsuite/gcc.dg/strlenopt.h
+++ b/gcc/testsuite/gcc.dg/strlenopt.h
@@ -10,6 +10,7 @@ void free (void *);
char *strdup (const char *);
size_t strlen (const char *);
void *memcpy (void *__restrict, const void *__restrict, size_t);
+void *memmove (void *, const void *, size_t);
char *strcpy (char *__restrict, const char *__restrict);
char *strcat (char *__restrict, const char *__restrict);
char *strchr (const char *, int);
@@ -31,6 +32,12 @@ memcpy (void *__restrict dest, const void *__restrict src, size_t len)
return __builtin___memcpy_chk (dest, src, len, bos0 (dest));
}
+extern inline __attribute__((gnu_inline, always_inline, artificial)) void *
+memmove (void *dest, const void *src, size_t len)
+{
+ return __builtin___memmove_chk (dest, src, len, bos0 (dest));
+}
+
extern inline __attribute__((gnu_inline, always_inline, artificial)) char *
strcpy (char *__restrict dest, const char *__restrict src)
{
diff --git a/gcc/testsuite/gcc.dg/torture/builtin-isinf_sign-1.c b/gcc/testsuite/gcc.dg/torture/builtin-isinf_sign-1.c
index 6dc2326..adfffcd 100644
--- a/gcc/testsuite/gcc.dg/torture/builtin-isinf_sign-1.c
+++ b/gcc/testsuite/gcc.dg/torture/builtin-isinf_sign-1.c
@@ -24,6 +24,7 @@ foo (float f, double d, long double ld)
!= (__builtin_isinf(ld) ? (__builtin_signbitl(ld) ? -1 : 1) : 0))
link_error (__LINE__);
+#ifdef __OPTIMIZE__
/* In boolean contexts, GCC will fold the inner conditional
expression to 1. So isinf_sign folds to plain isinf. */
@@ -33,6 +34,7 @@ foo (float f, double d, long double ld)
link_error (__LINE__);
if ((_Bool)__builtin_isinf_sign(ld) != (__builtin_isinf(ld) != 0))
link_error (__LINE__);
+#endif
if ((__builtin_isinf_sign(f) != 0) != (__builtin_isinf(f) != 0))
link_error (__LINE__);
diff --git a/gcc/testsuite/gcc.dg/torture/pr57676.c b/gcc/testsuite/gcc.dg/torture/pr57676.c
new file mode 100644
index 0000000..a8cacc6
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr57676.c
@@ -0,0 +1,28 @@
+/* Verify that LRA does not abort prematurely in a release build of the
+ compiler. */
+/* { dg-do compile } */
+/* { dg-options "-fno-checking -w -funroll-loops" } */
+
+int a, b, c;
+
+void f(p1)
+{
+ for(;;)
+ {
+ if(p1 ? : (c /= 0))
+ {
+ int d;
+
+ for(; d; d++)
+ {
+ for(b = 0; b < 4; b++)
+ p1 /= p1;
+lbl:
+ while(a);
+ }
+ }
+
+ if((c &= 1))
+ goto lbl;
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr68963.c b/gcc/testsuite/gcc.dg/torture/pr68963.c
new file mode 100644
index 0000000..c83b543
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr68963.c
@@ -0,0 +1,41 @@
+/* { dg-do run } */
+
+static const float a[3] = { 1, 2, 3 };
+int b = 3;
+
+__attribute__((noinline, noclone)) void
+bar (int x)
+{
+ if (x != b++)
+ __builtin_abort ();
+}
+
+void
+foo (float *x, int y)
+{
+ int i;
+ for (i = 0; i < 2 * y; ++i)
+ {
+ if (i < y)
+ x[i] = a[i];
+ else
+ {
+ bar (i);
+ x[i] = a[i - y];
+ }
+ }
+}
+
+int
+main ()
+{
+ float x[10];
+ unsigned int i;
+ for (i = 0; i < 10; ++i)
+ x[i] = 1337;
+ foo (x, 3);
+ for (i = 0; i < 10; ++i)
+ if (x[i] != (i < 6 ? (i % 3) + 1 : 1337))
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr69613.c b/gcc/testsuite/gcc.dg/torture/pr69613.c
new file mode 100644
index 0000000..d903c85
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr69613.c
@@ -0,0 +1,41 @@
+/* PR target/69613. */
+/* { dg-do run { target int128 } } */
+/* { dg-options "-w -Wno-psabi" } */
+/* { dg-additional-options "-mavx" { target avx_runtime } } */
+
+typedef unsigned short u16;
+typedef unsigned short v32u16 __attribute__ ((vector_size (32)));
+typedef unsigned int u32;
+typedef unsigned int v32u32 __attribute__ ((vector_size (32)));
+typedef unsigned long long u64;
+typedef unsigned long long v32u64 __attribute__ ((vector_size (32)));
+typedef unsigned __int128 u128;
+typedef unsigned __int128 v32u128 __attribute__ ((vector_size (32)));
+
+u128 __attribute__ ((noinline, noclone))
+foo (u32 u32_0, u64 u64_1, u128 u128_1, v32u16 v32u16_0, v32u128 v32u128_0,
+ v32u16 v32u16_1, v32u32 v32u32_1, v32u64 v32u64_1, v32u128 v32u128_1)
+{
+ u128 temp = (v32u128_1[0] << ((-u32_0) & 127));
+ u32 t2 = (u32_0 & 127);
+ v32u128_1[0] = (v32u128_1[0] >> t2);
+
+ v32u128_1[0] ^= temp;
+ v32u128_1 |= (v32u128){ v32u128_0[1] };
+
+ return u64_1 + u128_1 + v32u16_0[0] + v32u16_0[1] + v32u16_1[11]
+ + v32u16_1[12] + v32u16_1[13] + v32u32_1[0] + v32u32_1[1]
+ + v32u32_1[2] + v32u64_1[1] + v32u64_1[2] + v32u64_1[3] + v32u128_1[0]
+ + v32u128_1[1];
+}
+
+int
+main ()
+{
+ u128 x
+ = foo (1, 1, 1, (v32u16){ 1, 1, 1 }, (v32u128){ 1 }, (v32u16){ 1, 1, 1 },
+ (v32u32){ 1 }, (v32u64){ 1, 1, 1 }, (v32u128){ -1 });
+ if (x != 6)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr69760.c b/gcc/testsuite/gcc.dg/torture/pr69760.c
new file mode 100644
index 0000000..8f24608
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr69760.c
@@ -0,0 +1,50 @@
+/* PR tree-optimization/69760 */
+/* { dg-do run { target { { *-*-linux* *-*-gnu* } && mmap } } } */
+/* { dg-options "-O2" } */
+
+#include <unistd.h>
+#include <sys/mman.h>
+
+__attribute__((noinline, noclone)) void
+test_func (double *a, int L, int m, int n, int N)
+{
+ int i, k;
+ for (i = 0; i < N; i++)
+ {
+ k = i - m;
+ if (k >= 0 && k < n)
+ a[L * k] = 0.0;
+ }
+}
+
+int
+main ()
+{
+ char *p;
+ int L, m, n, N;
+ long l;
+ L = 10000000;
+ n = 4;
+ N = 100 * n;
+ long pgsz = sysconf(_SC_PAGESIZE);
+ if (pgsz < sizeof (double) || pgsz > L * sizeof (double))
+ return 0;
+ p = mmap ((void *) 0, L * n * sizeof (double), PROT_NONE,
+ MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+ if (p == MAP_FAILED)
+ return 0;
+ if (mprotect (p, pgsz, PROT_READ | PROT_WRITE))
+ return 0;
+ l = (L * sizeof (double)) / pgsz * pgsz;
+ if (mprotect (p + l, pgsz, PROT_READ | PROT_WRITE))
+ return 0;
+ l = (2 * L * sizeof (double)) / pgsz * pgsz;
+ if (mprotect (p + l, pgsz, PROT_READ | PROT_WRITE))
+ return 0;
+ l = (3 * L * sizeof (double)) / pgsz * pgsz;
+ if (mprotect (p + l, pgsz, PROT_READ | PROT_WRITE))
+ return 0;
+ for (m = 0; m < N; m += n)
+ test_func ((double *) p, L, m, n, N);
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr69854.c b/gcc/testsuite/gcc.dg/torture/pr69854.c
new file mode 100644
index 0000000..5655847
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr69854.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-frounding-math -ffast-math" } */
+
+double fn1()
+{
+ double w, s = fn1() - 6.12323399573676603587e17;
+ return 1.57079632679489655800e00 - (s + w);
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr69886.c b/gcc/testsuite/gcc.dg/torture/pr69886.c
new file mode 100644
index 0000000..cc88a95
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr69886.c
@@ -0,0 +1,15 @@
+/* PR rtl-optimization/69886. */
+/* { dg-do compile } */
+/* { dg-options "--param=gcse-unrestricted-cost=0 -w -Wno-psabi" } */
+/* { dg-additional-options "-mavx" { target { i?86-*-* x86_64-*-* } } } */
+
+typedef unsigned v32su __attribute__ ((vector_size (32)));
+
+unsigned
+foo (v32su v32su_0, v32su v32su_1, v32su v32su_2, v32su v32su_3, v32su v32su_4)
+{
+ v32su_3 += v32su_2 *= v32su_2[3];
+ if (v32su_4[3])
+ v32su_2 &= (v32su){ v32su_1[3], 0xbb72, 64 };
+ return v32su_0[2] + v32su_2[4] + v32su_3[1];
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr69909.c b/gcc/testsuite/gcc.dg/torture/pr69909.c
new file mode 100644
index 0000000..fb36c80
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr69909.c
@@ -0,0 +1,35 @@
+/* PR middle-end/69909 */
+/* { dg-do run { target int128 } } */
+/* { dg-additional-options "-w" } */
+
+typedef unsigned V __attribute__ ((vector_size (32)));
+typedef __int128 T;
+typedef __int128 U __attribute__ ((vector_size (32)));
+
+__attribute__((noinline, noclone)) T
+foo (T a, V b, V c, V d, V e, U f)
+{
+ d[6] ^= 0x10;
+ f -= (U) d;
+ f[1] |= f[1] << (a & 127);
+ c ^= d;
+ return b[7] + c[2] + c[2] + d[6] + e[2] + f[1];
+}
+
+int
+main ()
+{
+ if (__CHAR_BIT__ != 8 || sizeof (unsigned) != 4 || sizeof (T) != 16)
+ return 0;
+
+ T x = foo (1, (V) { 9, 2, 5, 8, 1, 2, 9, 3 },
+ (V) { 1, 2, 3, 4, 5, 6, 7, 8 },
+ (V) { 4, 1, 2, 9, 8, 3, 5, 2 },
+ (V) { 3, 6, 1, 3, 2, 9, 4, 8 }, (U) { 3, 5 });
+ if (((unsigned long long) (x >> 64) != 0xffffffffffffffffULL
+ || (unsigned long long) x != 0xfffffffe0000001aULL)
+ && ((unsigned long long) (x >> 64) != 0xfffffffffffffffdULL
+ || (unsigned long long) x != 0xffffffff00000022ULL))
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr69932.c b/gcc/testsuite/gcc.dg/torture/pr69932.c
new file mode 100644
index 0000000..4b82130
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr69932.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+
+int a;
+void fn1() {
+ int b = 4;
+ short c[4];
+ c[b] = c[a];
+ if (c[2]) {}
+
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr69936.c b/gcc/testsuite/gcc.dg/torture/pr69936.c
new file mode 100644
index 0000000..3023bbb
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr69936.c
@@ -0,0 +1,24 @@
+/* { dg-do compile } */
+
+int a;
+char b;
+void fn1(int p1) {}
+
+int fn2() { return 5; }
+
+void fn3() {
+ if (fn2())
+ ;
+ else {
+ char c[5];
+ c[0] = 5;
+ lbl_608:
+ fn1(c[9]);
+ int d = c[9];
+ c[2] | a;
+ d = c[b];
+ }
+ goto lbl_608;
+}
+
+int main() { return 0; }
diff --git a/gcc/testsuite/gcc.dg/torture/pr69941.c b/gcc/testsuite/gcc.dg/torture/pr69941.c
new file mode 100644
index 0000000..f15d41a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr69941.c
@@ -0,0 +1,30 @@
+/* { dg-do run } */
+
+int a = 0;
+int b = 0;
+int c = 0;
+int e = 0;
+int f = 0;
+int *g = &e;
+
+int fn1() { return b ? a : b; }
+
+int main() {
+ int h = fn1() <= 0x8000000000000000ULL; // h = 1;
+
+ int k = f; // k = 0;
+
+ long i = h ? k : k / h; // i = 0;
+
+ long l = (unsigned short)(i - 0x1800); // l = 0xe800
+
+ i = l ? l : c; // i = 0xe800;
+
+ *g = i; // *g = 0xe800; e = 0xe800;
+
+ unsigned char result = e >> 9; // result = 0x74;
+
+ if ((int)result != 0x74)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr69951.c b/gcc/testsuite/gcc.dg/torture/pr69951.c
new file mode 100644
index 0000000..be9a027
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr69951.c
@@ -0,0 +1,21 @@
+/* { dg-do run } */
+/* { dg-require-alias "" } */
+
+extern void abort (void);
+
+int a = 1, c = 1;
+extern int b __attribute__((alias("a")));
+extern int d __attribute__((alias("c")));
+int main(int argc)
+{
+ int *p, *q;
+ if (argc >= 0)
+ p = &c, q = &d;
+ else
+ p = &b, q = &d;
+ *p = 1;
+ *q = 2;
+ if (*p == 1)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr69989.c b/gcc/testsuite/gcc.dg/torture/pr69989.c
new file mode 100644
index 0000000..ada99f1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr69989.c
@@ -0,0 +1,23 @@
+/* { dg-do compile } */
+
+extern int a, b, d;
+extern char c[];
+void
+fn1 (void)
+{
+ for (;;)
+ {
+ if (b)
+ {
+LABEL_T5T5T:
+ for (; d < a; d++)
+ c[d] = 6;
+ }
+ break;
+ }
+ if (a > 6)
+ {
+ a = 4;
+ goto LABEL_T5T5T;
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr70025.c b/gcc/testsuite/gcc.dg/torture/pr70025.c
new file mode 100644
index 0000000..dafae0b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr70025.c
@@ -0,0 +1,81 @@
+/* PR middle-end/70025 */
+/* { dg-do run } */
+/* { dg-additional-options "-mtune=z10" { target s390*-*-* } } */
+
+typedef char (*F) (unsigned long, void *);
+typedef union { struct A { char a1, a2, a3, a4; unsigned long a5; F a6; void *a7; } b; char c[1]; } B;
+struct C { const char *c1; unsigned long c2; };
+typedef struct D { unsigned long d1; int d2; const char *d3; unsigned long d4, d5; struct C d6[49]; char d7[8]; } E[1];
+
+__attribute__ ((noinline, noclone))
+void foo (register E p)
+{
+ asm volatile ("" : : "r" (p) : "memory");
+}
+
+__attribute__ ((noinline, noclone))
+void bar (register E p)
+{
+ register unsigned long k = p[0].d1 + 1;
+ register struct C *l = &p[0].d6[p[0].d2];
+ register const char *m = l->c1;
+ p[0].d1 = k;
+ if (*m == '\0')
+ {
+ register struct A *f = &((B *) m)->b;
+ register unsigned long n = l->c2;
+ register unsigned long o = n + f->a5;
+ if (k < o)
+ {
+ register unsigned long i;
+ register unsigned long q = k + 8;
+ register F a6 = f->a6;
+ register void *a7 = f->a7;
+ if (q > o)
+ q = o;
+ for (i = k; i < q; i++)
+ p[0].d7[i - k] = (*a6) (i - n, a7);
+ p[0].d4 = k;
+ p[0].d3 = p[0].d7;
+ p[0].d5 = q;
+ return;
+ }
+ }
+ while (p[0].d2 > 0 && l[0].c2 != l[-1].c2)
+ {
+ p[0].d2--;
+ l--;
+ }
+ if (p[0].d2 == 0)
+ {
+ p[0].d2 = 0x55555555;
+ return;
+ }
+ p[0].d2--;
+ foo (p);
+}
+
+char
+baz (unsigned long i, void *j)
+{
+ if (j != 0)
+ __builtin_abort ();
+ return (char) i;
+}
+
+int
+main ()
+{
+ struct D p;
+ struct A f;
+ __builtin_memset (&f, 0, sizeof (f));
+ f.a2 = 4;
+ f.a5 = 13;
+ f.a6 = baz;
+ __builtin_memset (&p, 0, sizeof (p));
+ p.d6[0].c1 = (const char *) &f;
+ bar (&p);
+ if (p.d4 != 1 || p.d5 != 9 || p.d3 != p.d7)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr70083.c b/gcc/testsuite/gcc.dg/torture/pr70083.c
new file mode 100644
index 0000000..0cf2892
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr70083.c
@@ -0,0 +1,24 @@
+/* { dg-do compile } */
+/* { dg-options "-Wno-psabi" } */
+
+typedef short v16hi __attribute__ ((vector_size (32)));
+typedef int v8si __attribute__ ((vector_size (32)));
+typedef long long v4di __attribute__ ((vector_size (32)));
+
+int
+foo(int u32_0, int u64_0, int u64_1, v16hi v32u16_0, v8si v32u32_0, v4di v32u64_0, v16hi v32u16_1, v8si v32u32_1, v4di v32u64_1)
+{
+ v32u32_1 %= (v8si) v32u16_1 | 1;
+ v32u64_1[1] |= ((1));
+ v32u16_0 /= (v16hi){~u64_1, 1, 0xb56c, 0xd279, 0x26b6, 0x74d9, 0xf764, 0, 0, -v32u16_1[6]} | 1;
+ v32u16_1 ^= (v16hi){0xc98d, 1, 0x8c71, u32_0, 0x5366, 0, ~v32u64_1[1]} & 31;
+ v32u32_0 -= (v8si)~v32u64_1;
+ v32u32_1[2] |= 0x1f;
+ v32u16_0 %= (v16hi){2, 0xffff, u32_0, 1, v32u64_0[1], u32_0 };
+ v32u32_1 /= (v8si){0x1e7390, v32u16_0[12], ~v32u16_1[2], -u64_0};
+ return v32u16_0[4] + v32u16_0[5] + v32u32_0[5] + v32u32_1[6] + v32u64_1[3];
+}
+
+/* Ignore a warning that is irrelevant to the purpose of this test. */
+/* { dg-prune-output ".*GCC vector passed by reference.*" } */
+
diff --git a/gcc/testsuite/gcc.dg/torture/pr70115.c b/gcc/testsuite/gcc.dg/torture/pr70115.c
new file mode 100644
index 0000000..0044fe4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr70115.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+
+typedef int size_t;
+char a;
+int main()
+{
+ size_t b, c;
+ for (;;)
+ {
+ b = 0;
+ for (; c;)
+ ;
+ for (; b < sizeof(long); b++)
+ ;
+ for (; b < c; b++)
+ a++;
+ for (; c < b; c++)
+ ;
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr70123.c b/gcc/testsuite/gcc.dg/torture/pr70123.c
new file mode 100644
index 0000000..55b6077
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr70123.c
@@ -0,0 +1,198 @@
+/* { dg-do run } */
+/* { dg-options "-fPIC" { target fpic } } */
+__attribute__ ((noinline, noclone)) int
+bar (int flag, const char *__restrict format, ...)
+{
+ asm volatile ("" : : "r" (flag), "r" (format) : "memory");
+ return 0;
+}
+
+extern inline __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) int
+baz (const char *__restrict fmt, ...)
+{
+ return bar (1, fmt, __builtin_va_arg_pack ());
+}
+
+__attribute__ ((noinline, noclone)) int
+f1 (void **a, const char *b, int *c)
+{
+ *a = 0;
+ *c = 0;
+ asm volatile ("" : : "r" (&a), "r" (b), "r" (&c) : "memory");
+ return 0;
+}
+
+__attribute__ ((noinline, noclone)) int
+f2 (void *a, int b, int c, long d[], int *e)
+{
+ asm volatile ("" : : "r" (a), "r" (b), "r" (c), "r" (d), "r" (e) : "memory");
+ return 1;
+}
+
+__attribute__ ((noinline, noclone)) int
+f3 (void *a, int *b)
+{
+ asm volatile ("" : : "r" (a), "r" (b) : "memory");
+ return 0;
+}
+
+__attribute__ ((noinline, noclone)) int
+f4 (void *a, const char *b, int c, int d, double *e, int f, char **g, int *h)
+{
+ asm volatile ("" : : "r" (a), "r" (b), "r" (c), "r" (d) : "memory");
+ asm volatile ("" : : "r" (e), "r" (f), "r" (g), "r" (h) : "memory");
+ return 0;
+}
+
+__attribute__ ((noinline, noclone)) int
+f5 (void *a, long long b, int c, char **d, char **e, char **f, const char *g, long long h, int *i)
+{
+ asm volatile ("" : : "r" (a), "r" (b), "r" (c), "r" (d) : "memory");
+ asm volatile ("" : : "r" (e), "r" (f), "r" (g), "r" (h) : "memory");
+ asm volatile ("" : : "r" (i) : "memory");
+ return 0;
+}
+
+__attribute__ ((noinline, noclone)) int
+f6 (void *a, int b, int *c, int *d)
+{
+ asm volatile ("" : : "r" (a), "r" (b), "r" (c), "r" (d) : "memory");
+ return 0;
+}
+
+__attribute__ ((noinline, noclone)) int
+f7 (void *a, int b, long long c, long long d, long long e, double *f, int *g)
+{
+ asm volatile ("" : : "r" (a), "r" (b), "r" (c), "r" (d) : "memory");
+ asm volatile ("" : : "r" (e), "r" (f), "r" (g) : "memory");
+ return 0;
+}
+
+__attribute__ ((noinline, noclone)) int
+f8 (void *a, int b, long long c, long long d, long long e, char *f, const char **g, int *h, int *i)
+{
+ asm volatile ("" : : "r" (a), "r" (b), "r" (c), "r" (d) : "memory");
+ asm volatile ("" : : "r" (e), "r" (f), "r" (g), "r" (h) : "memory");
+ asm volatile ("" : : "r" (i) : "memory");
+ return 0;
+}
+
+__attribute__ ((noinline, noclone)) int
+f9 (void *a, int b, long long c, long long d, long long e, char *f, int *g)
+{
+ asm volatile ("" : : "r" (a), "r" (b), "r" (c), "r" (d) : "memory");
+ asm volatile ("" : : "r" (e), "r" (f), "r" (g) : "memory");
+ return 0;
+}
+
+__attribute__ ((noinline, noclone)) int
+f10 (void *a, int b, long long c, long long d, long long e, unsigned char f, unsigned char *g, int *h, int *i)
+{
+ asm volatile ("" : : "r" (a), "r" (b), "r" (c), "r" (d) : "memory");
+ asm volatile ("" : : "r" (e), "r" (f), "r" (g), "r" (h) : "memory");
+ asm volatile ("" : : "r" (i) : "memory");
+ return 0;
+}
+
+__attribute__ ((noinline, noclone)) int
+f11 (void *a, int b, long long c, long long d, long long e, long f, long *g, int *h, int *i)
+{
+ asm volatile ("" : : "r" (a), "r" (b), "r" (c), "r" (d) : "memory");
+ asm volatile ("" : : "r" (e), "r" (f), "r" (g), "r" (h) : "memory");
+ asm volatile ("" : : "r" (i) : "memory");
+ return 0;
+}
+
+__attribute__ ((noinline, noclone)) int
+f12 (void *a, int b, long long c, long long d, long long e, float f, float *g, int *h, int *i)
+{
+ asm volatile ("" : : "r" (a), "r" (b), "r" (c), "r" (d) : "memory");
+ asm volatile ("" : : "r" (e), "r" (f), "r" (g), "r" (h) : "memory");
+ asm volatile ("" : : "r" (i) : "memory");
+ return 0;
+}
+
+__attribute__ ((noinline, noclone)) int
+f13 (void *a, int b, long long c, long *d, long *e, int *f)
+{
+ asm volatile ("" : : "r" (a), "r" (b), "r" (c), "r" (d) : "memory");
+ asm volatile ("" : : "r" (e), "r" (f) : "memory");
+ return 0;
+}
+
+__attribute__ ((noinline, noclone)) int
+f14 (void *a, int b, int *c, int *d)
+{
+ asm volatile ("" : : "r" (a), "r" (b), "r" (c), "r" (d) : "memory");
+ return 0;
+}
+
+volatile int a;
+
+int
+main ()
+{
+ int b, c, d = 0, e, f = 0;
+ long g, h;
+ int j = 0;
+ long k, l;
+ int m;
+ unsigned char n[21];
+ long o[21];
+ float p[21];
+ double q[21];
+ long r[3], s = 0;
+ char t[42];
+ char u[21];
+ char *v[3];
+ const char *w[21];
+ double x[3] = { 15.1515151515151515, 16.1616161616161616, 17.1717171717171717 };
+ char y[40], z[81];
+ void *a2;
+ char *b2[10], *c2[10], *d2[10];
+ char e2[] = "abcdefghijklm";
+ for (g = 0; g < 21; g++)
+ w[g] = "";
+ f1 (&a2, y, &b);
+ if (b)
+ goto lab;
+ c = 32;
+ if (f2 (a2, c, d, r, &b) > 0)
+ __builtin_strcpy (z, "12345678901234567890123478901234567");
+ if (f3 (a2, &b) > 0)
+ goto lab;
+ if (f4 (a2, "abcdefg", 1, j, x, 14, v, &b) > 0)
+ goto lab;
+ for (g = 0; g < a; g++)
+ goto lab;
+ f5 (a2, s, f, b2, c2, d2, e2, 0L, &b);
+ if (f6 (a2, -1, &e, &b) > 0)
+ goto lab;
+ if (b > 0)
+ goto lab;
+ if (f6 (a2, 1, &e, &b) > 0)
+ goto lab;
+ f7 (a2, 8, g, 1, g, q, &b);
+ for (g = 1; g <= 20; g++)
+ {
+ for (h = 0; h < g; h++)
+ {
+ t[h] = 0;
+ q[h] = 0;
+ }
+ f8 (a2, 1, g, 1, 1, u, w, &m, &b);
+ for (h = 0; h < g; h++)
+ baz (" %2d", t[h]);
+ baz (" %d\nX", b);
+ f9 (a2, 3, g, 1, g, t, &b);
+ for (h = 0; h < g; h++)
+ baz (" %2d", t[h]);
+ f10 (a2, 4, g, 1, g, 99, n, &m, &b);
+ f11 (a2, 6, g, 1, g, 99, o, &m, &b);
+ f12 (a2, 7, g, 1, g, 99., p, &m, &b);
+ f13 (a2, 8, g, &k, &l, &b);
+ }
+ f14 (a2, 1, &e, &b);
+lab:
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr70278.c b/gcc/testsuite/gcc.dg/torture/pr70278.c
new file mode 100644
index 0000000..89bd266
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr70278.c
@@ -0,0 +1,37 @@
+/* { dg-do compile } */
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+typedef union
+{
+ double value;
+ struct
+ {
+ unsigned int msw;
+ } parts;
+} ieee_double_shape_type;
+double __ieee754_hypot(double x, double y)
+{
+ double a=x,b=y,t1,t2,y1,y2,w;
+ int j,k,ha,hb;
+ do { ieee_double_shape_type gh_u; gh_u.value = (x); (ha) = gh_u.parts.msw; } while (0);;
+ if(hb > ha) {a=y;b=x;j=ha; ha=hb;hb=j;} else {a=x;b=y;}
+ if(ha > 0x5f300000) {
+ do { ieee_double_shape_type sh_u; sh_u.value = (a); sh_u.parts.msw = (ha); (a) = sh_u.value; } while (0);;
+ }
+ w = a-b;
+ if (w <= b)
+ {
+ t2 = a - t1;
+ w = t1*y1-(w*(-w)-(t1*y2+t2*b));
+ }
+ if(k!=0) {
+ } else return w;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr70288-1.c b/gcc/testsuite/gcc.dg/torture/pr70288-1.c
new file mode 100644
index 0000000..1fb0495
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr70288-1.c
@@ -0,0 +1,36 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target int32plus } */
+
+int main()
+{
+ int var6 = -1267827473;
+ do {
+ ++var6;
+ double s1_115[4], s2_108[4];
+ int var8 = -161498264;
+ do {
+ ++var8;
+ int var12 = 1260960076;
+ for (; var12 <= 1260960080; ++var12) {
+ int var13 = 1960990937;
+ do {
+ ++var13;
+ int var14 = 2128638723;
+ for (; var14 <= 2128638728; ++var14) {
+ int var22 = -1141190839;
+ do {
+ ++var22;
+ if (s2_108 > s1_115) {
+ int var23 = -890798748;
+ do {
+ ++var23;
+ long long e_119[4];
+ } while (var23 <= -890798746);
+ }
+ } while (var22 <= -1141190829);
+ }
+ } while (var13 <= 1960990946);
+ }
+ } while (var8 <= -161498254);
+ } while (var6 <= -1267827462);
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr70288-2.c b/gcc/testsuite/gcc.dg/torture/pr70288-2.c
new file mode 100644
index 0000000..ad90fd4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr70288-2.c
@@ -0,0 +1,35 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target int32plus } */
+
+int main()
+{
+ int var6 = -1267827473;
+ do {
+ ++var6;
+ double s1_115[4], s2_108[4];
+ int var8 = -161498264;
+ do {
+ ++var8;
+ int var12 = 1260960076;
+ for (; var12 <= 1260960080; ++var12) {
+ int var13 = 1960990937;
+ do {
+ ++var13;
+ int var14 = 2128638723;
+ for (; var14 <= 2128638728; ++var14) {
+ int var22 = -1141190839;
+ do {
+ ++var22;
+ if (s2_108 > s1_115) {
+ int var23 = -890798748;
+ do {
+ long long e_119[4];
+ } while (var23 <= -890798746);
+ }
+ } while (var22 <= -1141190829);
+ }
+ } while (var13 <= 1960990946);
+ }
+ } while (var8 <= -161498254);
+ } while (var6 <= -1267827462);
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr70307.c b/gcc/testsuite/gcc.dg/torture/pr70307.c
new file mode 100644
index 0000000..0e0f146
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr70307.c
@@ -0,0 +1,67 @@
+/* PR c/70307 */
+/* { dg-do compile } */
+/* { dg-options "-Wno-psabi" } */
+
+typedef int v4si __attribute__ ((vector_size (16)));
+
+v4si foo (v4si);
+
+v4si
+fn1 (int i)
+{
+ return i <= (v4si){(0, 0)};
+}
+
+v4si
+fn2 (int i)
+{
+ v4si r;
+ r = i <= (v4si){(0, 0)};
+ return r;
+}
+
+v4si
+fn3 (int i)
+{
+ return foo (i <= (v4si){(0, 0)});
+}
+
+v4si
+fn4 (int i)
+{
+ struct S { v4si v; };
+ struct S s = { .v = i <= (v4si){(0, 0)} };
+ return s.v;
+}
+
+v4si
+fn5 (int i)
+{
+ return (v4si){(1, i++)} == (v4si){(0, 0)};
+}
+
+v4si
+fn6 (int i)
+{
+ v4si r;
+ r = (v4si){(1, i++)} == (v4si){(0, 0)};
+ return r;
+}
+
+v4si
+fn7 (int i)
+{
+ return foo ((v4si){(1, i++)} == (v4si){(0, 0)});
+}
+
+v4si
+fn8 (int i)
+{
+ struct S { v4si v; };
+ struct S s = { .v = (v4si){(1, i++)} == (v4si){(0, 0)} };
+ return s.v;
+}
+
+/* Ignore a warning that is irrelevant to the purpose of this test. */
+/* { dg-prune-output "\[^\n\r\]*GCC vector passed by reference\[^\n\r\]*" } */
+/* { dg-prune-output "\[^\n\r\]*GCC vector returned by reference\[^\n\r\]*" } */
diff --git a/gcc/testsuite/gcc.dg/torture/pr70310.c b/gcc/testsuite/gcc.dg/torture/pr70310.c
new file mode 100644
index 0000000..a962562
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr70310.c
@@ -0,0 +1,20 @@
+/* { dg-do run } */
+
+typedef unsigned char v32u8 __attribute__ ((vector_size (32)));
+
+unsigned __attribute__((noinline, noclone))
+foo(unsigned u)
+{
+ v32u8 v32u8_0 = (v32u8){} > (v32u8){-u};
+ return v32u8_0[31] + v32u8_0[0];
+}
+
+int
+main ()
+{
+ unsigned x = foo(0);
+ __builtin_printf ("%08x\n",x);
+ if (x != 0)
+ __builtin_abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr70333.c b/gcc/testsuite/gcc.dg/torture/pr70333.c
new file mode 100644
index 0000000..854e6d5
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr70333.c
@@ -0,0 +1,19 @@
+/* { dg-do run } */
+/* { dg-require-effective-target lp64 } */
+
+unsigned long int
+foo (signed char b, signed char e)
+{
+ return ((2ULL * b) * (e * 13)) * (32 << 24);
+}
+
+int
+main ()
+{
+ if (__CHAR_BIT__ == 8
+ && sizeof (int) == 4
+ && sizeof (long long) == 8
+ && foo (-60, 1) != 0xffffff3d00000000ULL)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr70370.c b/gcc/testsuite/gcc.dg/torture/pr70370.c
new file mode 100644
index 0000000..d077bee
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr70370.c
@@ -0,0 +1,45 @@
+/* { dg-do compile } */
+
+_Complex float
+test1 (_Complex float f)
+{
+ __asm__ ("" : "+r" (__real f));
+ return f;
+}
+
+_Complex float
+test2 (_Complex float f)
+{
+ __asm__ ("" : "=r" (__real f));
+ return f;
+}
+
+struct X { int i; };
+
+struct X
+test3 (struct X x)
+{
+ __asm__ ("" : "=r" (x.i));
+ return x;
+}
+
+struct X
+test4 (struct X x)
+{
+ __asm__ ("" : "+r" (x.i));
+ return x;
+}
+
+struct X
+test5 (struct X x)
+{
+ __asm__ ("" : "=r" (x));
+ return x;
+}
+
+struct X
+test6 (struct X x)
+{
+ __asm__ ("" : "+r" (x));
+ return x;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr70396.c b/gcc/testsuite/gcc.dg/torture/pr70396.c
new file mode 100644
index 0000000..839610f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr70396.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+
+struct S2 {
+ signed f1 : 3;
+};
+int a[100];
+int b, c;
+char d;
+void fn1() {
+ struct S2 e;
+ b / e.f1;
+ c = 2;
+ for (; c < 100; c++) {
+ d = 0;
+ a[c] = ~e.f1 != d;
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr70421.c b/gcc/testsuite/gcc.dg/torture/pr70421.c
new file mode 100644
index 0000000..8f97acd
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr70421.c
@@ -0,0 +1,22 @@
+/* PR target/70421 */
+/* { dg-do run } */
+/* { dg-additional-options "-Wno-psabi -w" } */
+
+typedef unsigned V __attribute__ ((vector_size (64)));
+
+unsigned __attribute__ ((noinline, noclone))
+foo (unsigned x, V u, V v)
+{
+ v[1] ^= v[2];
+ x ^= ((V) v)[u[0]];
+ return x;
+}
+
+int
+main ()
+{
+ unsigned x = foo (0x10, (V) { 1 }, (V) { 0x100, 0x1000, 0x10000 });
+ if (x != 0x11010)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr70450.c b/gcc/testsuite/gcc.dg/torture/pr70450.c
new file mode 100644
index 0000000..ee5e24d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr70450.c
@@ -0,0 +1,19 @@
+/* { dg-do run } */
+/* { dg-require-effective-target lp64 } */
+
+unsigned long int a = 2UL;
+int b = 2;
+unsigned long int c = 2UL;
+
+void foo ()
+{
+ c = 2 * ((2 * a) * (2 * (-b)));
+}
+
+int main ()
+{
+ foo();
+ if (c != 18446744073709551584UL)
+ __builtin_abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr70457.c b/gcc/testsuite/gcc.dg/torture/pr70457.c
new file mode 100644
index 0000000..74daed4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr70457.c
@@ -0,0 +1,29 @@
+/* { dg-do compile } */
+
+/* This formerly ICEd when trying to expand pow as a built-in with
+ the wrong number of arguments. */
+
+extern double pow (double, double) __attribute__ ((__nothrow__ , __leaf__));
+
+typedef struct {
+ long long data;
+ int tag;
+} Object;
+
+extern Object Make_Flonum (double);
+extern Object P_Pow (Object, Object);
+
+Object General_Function (Object x, Object y, double (*fun)()) {
+ double d, ret;
+
+ d = 1.0;
+
+ if (y.tag >> 1)
+ ret = (*fun) (d);
+ else
+ ret = (*fun) (d, 0.0);
+
+ return Make_Flonum (ret);
+}
+
+Object P_Pow (Object x, Object y) { return General_Function (x, y, pow); }
diff --git a/gcc/testsuite/gcc.dg/torture/pr70484.c b/gcc/testsuite/gcc.dg/torture/pr70484.c
new file mode 100644
index 0000000..7604c65
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr70484.c
@@ -0,0 +1,19 @@
+/* { dg-do run } */
+
+extern void abort (void);
+
+int __attribute__((noinline,noclone))
+f(int *pi, long *pl)
+{
+ *pi = 1;
+ *pl = 0;
+ return *(char *)pi;
+}
+
+int main()
+{
+ union { long l; int i; } a;
+ if (f (&a.i, &a.l) != 0)
+ abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr70542.c b/gcc/testsuite/gcc.dg/torture/pr70542.c
new file mode 100644
index 0000000..ed7ab9d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr70542.c
@@ -0,0 +1,31 @@
+/* PR rtl-optimization/70542 */
+/* { dg-do run } */
+
+int a[113], d[113];
+short b[113], c[113], e[113];
+
+int
+main ()
+{
+ int i;
+ long j;
+ for (i = 0; i < 113; ++i)
+ {
+ a[i] = -636544305;
+ b[i] = -31804;
+ }
+ for (j = 1; j <= 112; ++j)
+ {
+ c[j] = b[j] >> ((a[j] & 1587842570) - 1510214139);
+ if (a[j])
+ d[j] = j;
+ e[j] = 7 << ((2312631697 - b[j]) - 2312663500);
+ }
+ asm volatile ("" : : : "memory");
+ if (c[0] || d[0] || e[0])
+ __builtin_abort ();
+ for (i = 1; i <= 112; ++i)
+ if (c[i] != -1 || d[i] != i || e[i] != 14)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/20030814-6.c b/gcc/testsuite/gcc.dg/tree-ssa/20030814-6.c
index e84c958..e4b8d43 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/20030814-6.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/20030814-6.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O1 -fdump-tree-dom2" } */
+/* { dg-options "-O1 -fno-tree-fre -fdump-tree-dom2" } */
extern void abort (void);
union tree_node;
@@ -15,6 +15,7 @@ struct tree_common
};
struct tree_type
{
+ struct tree_common common;
double alias_set;
};
union tree_node
@@ -39,6 +40,4 @@ foo (t, set)
}
/* There should be precisely one load of common.code. If there is
more than one, then the dominator optimizations failed. */
-/* ??? Will fail until we properly distinguish member stores. At
- present the write to type.alias_set kills the previous load. */
-/* { dg-final { scan-tree-dump-times "common.code" 1 "dom2" { xfail *-*-* } } } */
+/* { dg-final { scan-tree-dump-times "common.code" 1 "dom2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/alias-34.c b/gcc/testsuite/gcc.dg/tree-ssa/alias-34.c
new file mode 100644
index 0000000..5738fea
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/alias-34.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-strict-aliasing -fdump-tree-optimized" } */
+
+void foo (int b)
+{
+ void *p;
+lab:
+ if (b)
+ p = &&lab;
+ else
+ {
+lab2:
+ p = &&lab2;
+ }
+ *(char *)p = 1;
+}
+
+/* We should keep the store to the label locations. */
+/* { dg-final { scan-tree-dump " = 1;" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/alias-35.c b/gcc/testsuite/gcc.dg/tree-ssa/alias-35.c
new file mode 100644
index 0000000..1ea2988
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/alias-35.c
@@ -0,0 +1,18 @@
+/* PR70128 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-strict-aliasing -fdump-tree-optimized" } */
+
+void foo (int b)
+{
+ extern void bar (void);
+ extern void baz (void);
+ void *p;
+ if (b)
+ p = bar;
+ else
+ p = baz;
+ *(char *)p = 1;
+}
+
+/* We should keep the store to the function locations. */
+/* { dg-final { scan-tree-dump " = 1;" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ifc-8.c b/gcc/testsuite/gcc.dg/tree-ssa/ifc-8.c
index 89a3410..81a4075 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ifc-8.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ifc-8.c
@@ -1,9 +1,10 @@
/* { dg-do compile } */
-/* { dg-options "-Ofast -fdump-tree-ifcvt-details -fno-common -ftree-loop-if-convert-stores" } */
+/* { dg-options "-Ofast -fdump-tree-ifcvt-details -ftree-loop-if-convert-stores" } */
+/* { dg-require-visibility "" } */
#define LEN 4096
- __attribute__((aligned (32))) float array[LEN];
+ __attribute__((visibility("hidden"), aligned (32))) float array[LEN] = {};
void test ()
{
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ivopts-lt-2.c b/gcc/testsuite/gcc.dg/tree-ssa/ivopts-lt-2.c
index 0f3f301..c809c9a 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ivopts-lt-2.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ivopts-lt-2.c
@@ -1,5 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-ivopts" } */
+/* { dg-skip-if "PR68644" { hppa*-*-* } { "*" } { "" } } */
void
f1 (int *p, unsigned int i)
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-14.c b/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-14.c
new file mode 100644
index 0000000..67fb4e9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-14.c
@@ -0,0 +1,37 @@
+/* { dg-do compile } */
+/* { dg-options "-O -fdump-tree-phiopt1" } */
+
+int test_01 (int a)
+{
+ if (127 <= a)
+ a = 127;
+ else if (a <= -128)
+ a = -128;
+ return a;
+}
+int test_02 (int a)
+{
+ if (127 < a)
+ a = 127;
+ else if (a <= -128)
+ a = -128;
+ return a;
+}
+int test_03 (int a)
+{
+ if (127 <= a)
+ a = 127;
+ else if (a < -128)
+ a = -128;
+ return a;
+}
+int test_04 (int a)
+{
+ if (127 < a)
+ a = 127;
+ else if (a < -128)
+ a = -128;
+ return a;
+}
+
+/* { dg-final { scan-tree-dump-not "if" "phiopt1" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr15826.c b/gcc/testsuite/gcc.dg/tree-ssa/pr15826.c
new file mode 100644
index 0000000..99ac0e2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr15826.c
@@ -0,0 +1,36 @@
+/* PR tree-optimization/15826 - don't use "if" to extract a single bit
+ bit-field */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-optimized" } */
+
+struct s {
+ unsigned int bit : 1;
+};
+
+unsigned int
+foo (struct s *p)
+{
+ if (p->bit)
+ return 1;
+ else
+ return 0;
+}
+
+unsigned int
+bar (struct s *p)
+{
+ return (unsigned int) (p->bit);
+}
+
+unsigned int
+andrew (struct s *p)
+{
+ int i;
+ if (p->bit)
+ i = 1;
+ else
+ i = 0;
+ return i;
+}
+
+/* { dg-final { scan-tree-dump-times " & | goto " 0 "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr68714.c b/gcc/testsuite/gcc.dg/tree-ssa/pr68714.c
new file mode 100644
index 0000000..8cd7c14
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr68714.c
@@ -0,0 +1,10 @@
+/* PR tree-optimization/68714 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-reassoc1 -w -Wno-psabi" } */
+
+typedef int vec __attribute__((vector_size(16)));
+vec f(vec x,vec y){
+ return x<y|x==y;
+}
+
+/* { dg-final { scan-tree-dump-times " <= " 1 "reassoc1" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr69196-1.c b/gcc/testsuite/gcc.dg/tree-ssa/pr69196-1.c
new file mode 100644
index 0000000..415ac2e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr69196-1.c
@@ -0,0 +1,138 @@
+/* { dg-do compile { target sparc*-*-* x86_64-*-* } } */
+/* { dg-options "-O2 -fdump-tree-vrp1-details" } */
+
+/* { dg-final { scan-tree-dump "FSM did not thread around loop and would copy too many statements" "vrp1" } } */
+
+
+typedef __builtin_va_list __gnuc_va_list;
+typedef __gnuc_va_list va_list;
+extern void rtems_putc(char c);
+
+void vprintk(
+ const char *fmt,
+ va_list ap
+)
+{
+ for (; *fmt != '\0'; fmt++) {
+ unsigned base = 0;
+ unsigned width = 0;
+ enum {
+ LFLAG_INT,
+ LFLAG_LONG,
+ LFLAG_LONG_LONG
+ } lflag = LFLAG_INT;
+ _Bool minus = 0;
+ _Bool sign = 0;
+ char lead = ' ';
+ char c = *fmt;
+ long long num;
+
+ if (c != '%') {
+ rtems_putc(c);
+ continue;
+ }
+
+ ++fmt; c = *fmt;
+
+ if (c == '0') {
+ lead = '0';
+ ++fmt; c = *fmt;
+ }
+
+ if (c == '-') {
+ minus = 1;
+ ++fmt; c = *fmt;
+ }
+
+ while (c >= '0' && c <= '9' ) {
+ width *= 10;
+ width += ((unsigned) c - '0');
+ ++fmt; c = *fmt;
+ }
+
+ if (c == 'l') {
+ lflag = LFLAG_LONG;
+ ++fmt; c = *fmt;
+
+ if (c == 'l') {
+ lflag = LFLAG_LONG_LONG;
+ ++fmt; c = *fmt;
+ }
+ }
+
+ if ( c == 'c' ) {
+
+ char chr = (char) __builtin_va_arg(ap,int);
+ rtems_putc(chr);
+ continue;
+ }
+
+ if ( c == 's' ) {
+ unsigned i, len;
+ char *s, *str;
+
+ str = __builtin_va_arg(ap,char *);
+
+ if ( str == ((void *)0) ) {
+ str = "";
+ }
+
+
+ for ( len=0, s=str ; *s ; len++, s++ )
+ ;
+
+
+ if ( !minus )
+ for ( i=len ; i<width ; i++ )
+ rtems_putc(' ');
+
+
+ if (width == 0) {
+ width = len;
+ }
+
+
+ for ( i=0 ; i<width && *str ; str++ )
+ rtems_putc(*str);
+
+
+ if ( minus )
+ for ( i=len ; i<width ; i++ )
+ rtems_putc(' ');
+
+ continue;
+ }
+
+
+ if ( c == 'o' || c == 'O' ) {
+ base = 8; sign = 0;
+ } else if ( c == 'i' || c == 'I' ||
+ c == 'd' || c == 'D' ) {
+ base = 10; sign = 1;
+ } else if ( c == 'u' || c == 'U' ) {
+ base = 10; sign = 0;
+ } else if ( c == 'x' || c == 'X' ) {
+ base = 16; sign = 0;
+ } else if ( c == 'p' ) {
+ base = 16; sign = 0; lflag = LFLAG_LONG;
+ } else {
+ rtems_putc(c);
+ continue;
+ }
+
+ switch (lflag) {
+ case LFLAG_LONG:
+ num = sign ? (long long) __builtin_va_arg(ap,long)
+ : (long long) __builtin_va_arg(ap,unsigned long);
+ break;
+ case LFLAG_LONG_LONG:
+ num = __builtin_va_arg(ap,long long);
+ break;
+ case LFLAG_INT:
+ default:
+ num = sign ? (long long) __builtin_va_arg(ap,int)
+ : (long long) __builtin_va_arg(ap,unsigned int);
+ break;
+ }
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr69666.c b/gcc/testsuite/gcc.dg/tree-ssa/pr69666.c
new file mode 100644
index 0000000..9be77ea
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr69666.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -w" } */
+
+int a, c, d;
+float b;
+void *memcpy();
+int fun1(int p1, unsigned char *p2) {
+ p2[p1] = b;
+ return a;
+}
+void fun2() {
+ unsigned char e[16];
+ fun1(16, e);
+ d = e[d];
+ memcpy(&c, e, sizeof(e));
+}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr69845-1.c b/gcc/testsuite/gcc.dg/tree-ssa/pr69845-1.c
new file mode 100644
index 0000000..92927ba
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr69845-1.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target int32 } */
+/* { dg-options "-O -fdump-tree-gimple -fdump-tree-optimized" } */
+
+int
+main ()
+{
+ struct S { char s; } v;
+ v.s = 47;
+ int a = (int) v.s;
+ int b = (27005061 + (a + 680455));
+ int c = ((1207142401 * (((8 * b) + 9483541) - 230968044)) + 469069442);
+ if (c != 1676211843)
+ __builtin_abort ();
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "b \\\* 8" 1 "gimple" } } */
+/* { dg-final { scan-tree-dump-not "abort" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr69845-2.c b/gcc/testsuite/gcc.dg/tree-ssa/pr69845-2.c
new file mode 100644
index 0000000..e0b38e9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr69845-2.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target int32 } */
+/* { dg-options "-O -fdump-tree-gimple -fdump-tree-optimized" } */
+
+int
+main ()
+{
+ struct S { char s; } v;
+ v.s = 47;
+ unsigned int a = (unsigned int) v.s;
+ unsigned int b = (27005061 + (a + 680455));
+ unsigned int c
+ = ((1207142401u * (((8u * b) + 9483541u) - 230968044u)) + 469069442u);
+ if (c != 1676211843u)
+ __builtin_abort ();
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "b \\\* 1067204616" 1 "gimple" } } */
+/* { dg-final { scan-tree-dump-not "abort" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr70232.c b/gcc/testsuite/gcc.dg/tree-ssa/pr70232.c
new file mode 100644
index 0000000..6cc987a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr70232.c
@@ -0,0 +1,129 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -w -fdump-tree-vrp1-details -fdump-tree-vrp2-details -fdump-tree-dom2-details -fdump-tree-dom3-details" } */
+
+/* All the threads found by the FSM threader should have too
+ many statements to be profitable. */
+/* { dg-final { scan-tree-dump-not "Registering FSM " "dom2"} } */
+/* { dg-final { scan-tree-dump-not "Registering FSM " "dom3"} } */
+/* { dg-final { scan-tree-dump-not "Registering FSM " "vrp1"} } */
+/* { dg-final { scan-tree-dump-not "Registering FSM " "vrp2"} } */
+
+typedef _Bool bool;
+typedef unsigned char uint8_t;
+typedef unsigned long uint32_t;
+typedef unsigned long long uint64_t;
+typedef unsigned int size_t;
+
+enum {
+ false = 0,
+ true = 1
+};
+
+struct list_head {
+ struct list_head *next, *prev;
+};
+
+
+extern void * memcpy(void *, const void *, size_t);
+extern int memcmp(const void *,const void *,size_t);
+extern void * memset(void *, int, size_t);
+extern void __memzero(void *ptr, size_t n);
+
+static inline uint64_t wwn_to_uint64_t(uint8_t *wwn)
+{
+ return (uint64_t)wwn[0] << 56 | (uint64_t)wwn[1] << 48 |
+ (uint64_t)wwn[2] << 40 | (uint64_t)wwn[3] << 32 |
+ (uint64_t)wwn[4] << 24 | (uint64_t)wwn[5] << 16 |
+ (uint64_t)wwn[6] << 8 | (uint64_t)wwn[7];
+}
+
+struct lpfc_name {
+ union {
+ uint8_t wwn[8];
+ } u;
+};
+
+struct lpfc_hba {
+ uint32_t cfg_fof;
+ uint32_t cfg_oas_flags;
+ struct list_head luns;
+};
+
+struct lpfc_device_id {
+ struct lpfc_name vport_wwpn;
+ struct lpfc_name target_wwpn;
+ uint64_t lun;
+};
+
+struct lpfc_device_data {
+ struct list_head listentry;
+ struct lpfc_device_id device_id;
+ bool oas_enabled;
+ bool available;
+};
+
+bool
+lpfc_find_next_oas_lun(struct lpfc_hba *phba, struct lpfc_name *vport_wwpn,
+ struct lpfc_name *target_wwpn, uint64_t *starting_lun,
+ struct lpfc_name *found_vport_wwpn,
+ struct lpfc_name *found_target_wwpn,
+ uint64_t *found_lun,
+ uint32_t *found_lun_status)
+{
+
+ struct lpfc_device_data *lun_info;
+ struct lpfc_device_id *device_id;
+ uint64_t lun;
+ bool found = false;
+
+ if (__builtin_expect(!!(!phba), 0) || !vport_wwpn || !target_wwpn ||
+ !starting_lun || !found_vport_wwpn ||
+ !found_target_wwpn || !found_lun || !found_lun_status ||
+ (*starting_lun == -1u) ||
+ !phba->cfg_fof)
+ return false;
+
+ lun = *starting_lun;
+ *found_lun = -1;
+ *starting_lun = -1;
+
+
+
+ for (lun_info = ({ const typeof( ((typeof(*lun_info) *)0)->listentry ) *__mptr = ((&phba->luns)->next); (typeof(*lun_info) *)( (char *)__mptr - __builtin_offsetof(typeof(*lun_info), listentry) );}); &lun_info->listentry != (&phba->luns); lun_info = ({ const typeof( ((typeof(*(lun_info)) *)0)->listentry ) *__mptr = ((lun_info)->listentry.next); (typeof(*(lun_info)) *)( (char *)__mptr - __builtin_offsetof(typeof(*(lun_info)), listentry) );})) {
+ if (((wwn_to_uint64_t(vport_wwpn->u.wwn) == 0) ||
+ (memcmp(&lun_info->device_id.vport_wwpn, vport_wwpn,
+ sizeof(struct lpfc_name)) == 0)) &&
+ ((wwn_to_uint64_t(target_wwpn->u.wwn) == 0) ||
+ (memcmp(&lun_info->device_id.target_wwpn, target_wwpn,
+ sizeof(struct lpfc_name)) == 0)) &&
+ (lun_info->oas_enabled)) {
+ device_id = &lun_info->device_id;
+ if ((!found) && ((lun == 0) || (device_id->lun == lun))) {
+ *found_lun = device_id->lun;
+ memcpy(found_vport_wwpn, &device_id->vport_wwpn, sizeof(struct lpfc_name));
+ memcpy(found_target_wwpn, &device_id->target_wwpn, sizeof(struct lpfc_name));
+ if (lun_info->available)
+ *found_lun_status = 0x01;
+ else
+ *found_lun_status = 0;
+ if (phba->cfg_oas_flags & 0x01)
+ ({ void *__p = (vport_wwpn); size_t __n = sizeof(struct lpfc_name); if ((__n) != 0) { if (__builtin_constant_p((0x0)) && (0x0) == 0) __memzero((__p),(__n)); else memset((__p),(0x0),(__n)); } (__p); })
+ ;
+ if (phba->cfg_oas_flags & 0x02)
+ ({ void *__p = (target_wwpn); size_t __n = sizeof(struct lpfc_name); if ((__n) != 0) { if (__builtin_constant_p((0x0)) && (0x0) == 0) __memzero((__p),(__n)); else memset((__p),(0x0),(__n)); } (__p); })
+ ;
+ found = true;
+ } else if (found) {
+ *starting_lun = device_id->lun;
+ memcpy(vport_wwpn, &device_id->vport_wwpn,
+ sizeof(struct lpfc_name));
+ memcpy(target_wwpn, &device_id->target_wwpn,
+ sizeof(struct lpfc_name));
+ break;
+ }
+ }
+ }
+ return found;
+}
+
+
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr70372.c b/gcc/testsuite/gcc.dg/tree-ssa/pr70372.c
new file mode 100644
index 0000000..a6d18d2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr70372.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-options "-O -fno-tree-fre -w -Wno-psabi" } */
+
+typedef unsigned v2ti __attribute__ ((vector_size (32)));
+
+v2ti
+foo (v2ti u, v2ti v)
+{
+ u[0] >>= 0xf;
+ v ^= ~v;
+ v &= ~u;
+ v -= -u;
+ return v;
+}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/sra-20.c b/gcc/testsuite/gcc.dg/tree-ssa/sra-20.c
new file mode 100644
index 0000000..5002c24
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/sra-20.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-options "-O1 -Wall" } */
+/* PR/70013, SRA of constant-pool loads removes initialization of part of d. */
+#pragma pack (1)
+struct S0 {
+ unsigned f0 : 17;
+};
+
+int c;
+
+int
+main (int argc, char **argv)
+{
+ struct S0 d[] = { { 1 }, { 2 } };
+ struct S0 e = d[1];
+
+ c = d[0].f0;
+ __builtin_printf ("%x\n", e.f0);
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-cse-2.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-cse-2.c
index 827cc7a..1a4bfe6 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-cse-2.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-cse-2.c
@@ -25,4 +25,4 @@ foo ()
but the loop reads only one element at a time, and DOM cannot resolve these.
The same happens on powerpc depending on the SIMD support available. */
-/* { dg-final { scan-tree-dump "return 28;" "optimized" { xfail { { alpha*-*-* powerpc64*-*-* } || { sparc*-*-* && lp64 } } } } } */
+/* { dg-final { scan-tree-dump "return 28;" "optimized" { xfail { { alpha*-*-* hppa*64*-*-* powerpc64*-*-* } || { sparc*-*-* && lp64 } } } } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp06.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp06.c
index 46bbef1..cdad534 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/vrp06.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp06.c
@@ -30,4 +30,4 @@ foo (int i, int j, int a)
/* { dg-final { scan-tree-dump-times "Folding predicate i_\[0-9\]+.*0 to 0" 1 "vrp1" } } */
/* { dg-final { scan-tree-dump-times "Folding predicate j_\[0-9\]+.*0 to 1" 1 "vrp1" } } */
-/* { dg-final { scan-tree-dump-times "Folding predicate i_\[0-9]+.*j_\[0-9\]+.* to 0" 1 "vrp1" { xfail *-*-* } } } */
+/* { dg-final { scan-tree-dump-times "Folding predicate i_\[0-9]+.*j_\[0-9\]+.* to 0" 1 "vrp1" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp46.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp46.c
index 8923eb4..d3c9ed1 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/vrp46.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp46.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-vrp1" } */
+/* { dg-options "-O2 -fdump-tree-vrp1 --param fsm-scale-path-blocks=1" } */
int func_81 (int);
int func_98 (int);
diff --git a/gcc/testsuite/gcc.dg/typedef-redecl2.c b/gcc/testsuite/gcc.dg/typedef-redecl2.c
new file mode 100644
index 0000000..c2314c7
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/typedef-redecl2.c
@@ -0,0 +1,13 @@
+/* PR c/70297 */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+#define N 64
+
+typedef int T;
+typedef int T __attribute__((aligned (N)));
+typedef int T __attribute__((aligned (N * 2)));
+typedef int T __attribute__((aligned (N)));
+typedef int T;
+
+_Static_assert (_Alignof (T) == N * 2, "N * 2");
diff --git a/gcc/testsuite/gcc.dg/uninit-19.c b/gcc/testsuite/gcc.dg/uninit-19.c
index fc7acea..b138a2c 100644
--- a/gcc/testsuite/gcc.dg/uninit-19.c
+++ b/gcc/testsuite/gcc.dg/uninit-19.c
@@ -1,26 +1,26 @@
-/* { dg-do compile } */
-/* { dg-options "-O -Wuninitialized" } */
-
-int a, l, m;
-float *b;
-float c, d, e, g, h;
-unsigned char i, k;
-void
-fn1 (int p1, float *f1, float *f2, float *f3, unsigned char *c1, float *f4,
- unsigned char *c2, float *p10)
-{
- if (p1 & 8)
- b[3] = p10[a]; /* 13. */
-}
-
-void
-fn2 ()
-{
- float *n;
- if (l & 6)
- n = &c + m;
- fn1 (l, &d, &e, &g, &i, &h, &k, n); /* 22. */
-}
-
-/* { dg-warning "may be used uninitialized" "" { target nonpic } 13 } */
-/* { dg-warning "may be used uninitialized" "" { target { ! nonpic } } 22 } */
+/* { dg-do compile } */
+/* { dg-options "-O -Wuninitialized" } */
+
+int a, l, m;
+float *b;
+float c, d, e, g, h;
+unsigned char i, k;
+void
+fn1 (int p1, float *f1, float *f2, float *f3, unsigned char *c1, float *f4,
+ unsigned char *c2, float *p10)
+{
+ if (p1 & 8)
+ b[3] = p10[a]; /* 13. */
+}
+
+void
+fn2 ()
+{
+ float *n;
+ if (l & 6)
+ n = &c + m;
+ fn1 (l, &d, &e, &g, &i, &h, &k, n); /* 22. */
+}
+
+/* { dg-warning "may be used uninitialized" "" { target { { nonpic } || { hppa*64*-*-* } } } 13 } */
+/* { dg-warning "may be used uninitialized" "" { target { ! { { nonpic } || { hppa*64*-*-* } } } } 22 } */
diff --git a/gcc/testsuite/gcc.dg/unused-variable-3.c b/gcc/testsuite/gcc.dg/unused-variable-3.c
new file mode 100644
index 0000000..6aca958
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/unused-variable-3.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-Wunused-variable" } */
+
+static const int cmain = 42; /* { dg-warning "defined but not used" } */
+
+/* Don't warn for unused static consts in headers,
+ unless -Wunused-const-variable=2. */
+#line 1 "header.h"
+static const int cheader = 42;
diff --git a/gcc/testsuite/gcc.dg/vect/O3-pr36098.c b/gcc/testsuite/gcc.dg/vect/O3-pr36098.c
index e5461ed..8e41717 100644
--- a/gcc/testsuite/gcc.dg/vect/O3-pr36098.c
+++ b/gcc/testsuite/gcc.dg/vect/O3-pr36098.c
@@ -17,4 +17,8 @@ void foo (int ncons, t_sortblock *sb, int *iatom)
iatom[m]=sb[i].iatom[m];
}
-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" } } */
+/* The testcase was originally added for correctness reasons but now we
+ can vectorize it correctly if the target supports the permutations
+ required. */
+
+/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" { target { ! vect_perm } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-34.c b/gcc/testsuite/gcc.dg/vect/bb-slp-34.c
index c51c770..ffd6ce2 100644
--- a/gcc/testsuite/gcc.dg/vect/bb-slp-34.c
+++ b/gcc/testsuite/gcc.dg/vect/bb-slp-34.c
@@ -32,4 +32,5 @@ int main()
return 0;
}
-/* { dg-final { scan-tree-dump "basic block vectorized" "slp2" { target vect_perm } } } */
+/* ??? XFAILed because we access "excess" elements with the permutation. */
+/* { dg-final { scan-tree-dump "basic block vectorized" "slp2" { target vect_perm xfail { ! { aarch64*-*-* arm*-*-* } } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-pr68892.c b/gcc/testsuite/gcc.dg/vect/bb-slp-pr68892.c
index ba51b76..216883f 100644
--- a/gcc/testsuite/gcc.dg/vect/bb-slp-pr68892.c
+++ b/gcc/testsuite/gcc.dg/vect/bb-slp-pr68892.c
@@ -13,5 +13,7 @@ void foo(void)
b[3] = a[3][0];
}
-/* { dg-final { scan-tree-dump "not profitable" "slp2" } } */
+/* ??? The profitability check is not reached because we give up on the
+ gaps we access earlier. */
+/* { dg-final { scan-tree-dump "not profitable" "slp2" { xfail *-*-* } } } */
/* { dg-final { scan-tree-dump-times "Basic block will be vectorized" 0 "slp2" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-pr69907.c b/gcc/testsuite/gcc.dg/vect/bb-slp-pr69907.c
new file mode 100644
index 0000000..9f1e71a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/bb-slp-pr69907.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-O3" } */
+/* { dg-require-effective-target vect_unpack } */
+
+void foo(unsigned *p1, unsigned short *p2)
+{
+ int n;
+ for (n = 0; n < 320; n++)
+ p1[n] = p2[n * 2];
+}
+
+/* { dg-final { scan-tree-dump "BB vectorization with gaps at the end of a load is not supported" "slp1" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-fast-math-vect-pr29925.c b/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-fast-math-vect-pr29925.c
index d8fe35c..a3662e2 100644
--- a/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-fast-math-vect-pr29925.c
+++ b/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-fast-math-vect-pr29925.c
@@ -35,5 +35,5 @@ int main()
return 0;
}
-/* { dg-final { scan-tree-dump-times "vectorization not profitable" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "vectorization not profitable" 1 "vect" { xfail { vect_hw_misalign } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr46032.c b/gcc/testsuite/gcc.dg/vect/pr46032.c
index d53d1f2..e1a5834 100644
--- a/gcc/testsuite/gcc.dg/vect/pr46032.c
+++ b/gcc/testsuite/gcc.dg/vect/pr46032.c
@@ -44,6 +44,6 @@ main (void)
return 0;
}
-/* { dg-final { scan-tree-dump-times "note: vectorized 1 loop" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "note: vectorized 1 loop" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
/* { dg-final { scan-tree-dump-not "versioning for alias required" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/torture/pr69652.c b/gcc/testsuite/gcc.dg/vect/pr69652.c
index ab7b698..29fe28c 100644
--- a/gcc/testsuite/gcc.dg/torture/pr69652.c
+++ b/gcc/testsuite/gcc.dg/vect/pr69652.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -ffast-math -ftree-vectorize " } */
+/* { dg-additional-options "-ffast-math" } */
/* { dg-additional-options "-mavx" { target { i?86-*-* x86_64-*-* } } } */
void fn1(double **matrix, int column, int row, int n)
diff --git a/gcc/testsuite/gcc.dg/vect/pr70021.c b/gcc/testsuite/gcc.dg/vect/pr70021.c
new file mode 100644
index 0000000..b147fa1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr70021.c
@@ -0,0 +1,40 @@
+/* PR target/70021 */
+/* { dg-do run } */
+
+#include "tree-vect.h"
+
+#define N 160
+int a[N];
+unsigned long long int b[N], c[N], d[N], e[N];
+
+__attribute__((noinline, noclone)) void
+foo (void)
+{
+ int i;
+ for (i = 0; i < N; i += 4)
+ {
+ unsigned long long int f = (_Bool) b[i];
+ unsigned long long int g = c[i] != d[i];
+ e[i] = g ^ (a[i] & (g << f));
+ }
+}
+
+int
+main ()
+{
+ int i;
+ check_vect ();
+ for (i = 0; i < N; ++i)
+ {
+ a[i] = 1618000128;
+ b[i] = 10919594786573202791ULL;
+ c[i] = 2593730175074624973ULL;
+ d[i] = 7447894520878803661ULL;
+ e[i] = 14234165565810642243ULL;
+ }
+ foo ();
+ for (i = 0; i < N; ++i)
+ if (e[i] != ((i & 3) ? 14234165565810642243ULL : 1ULL))
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/vect/pr70138-1.c b/gcc/testsuite/gcc.dg/vect/pr70138-1.c
new file mode 100644
index 0000000..bd4d006
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr70138-1.c
@@ -0,0 +1,40 @@
+/* { dg-do run } */
+
+#include "tree-vect.h"
+
+double u[33 * 33];
+
+__attribute__((noinline, noclone)) static void
+foo (int *x)
+{
+ double c = 0.0;
+ int a, b;
+ for (a = 0; a < 33; a++)
+ {
+ for (b = 0; b < 33; b++)
+ c = c + u[34 * a];
+ u[34 * a] *= 2.0;
+ }
+ *x = c;
+}
+
+int
+main ()
+{
+ int d, e;
+ check_vect ();
+ for (d = 0; d < 33 * 33; d++)
+ {
+ u[d] = 499.0;
+ __asm__ volatile ("" : : : "memory");
+ }
+ for (d = 0; d < 33; d++)
+ {
+ u[d * 34] = (d + 2);
+ __asm__ volatile ("" : : : "memory");
+ }
+ foo (&e);
+ if (e != 33 * (2 + 34) / 2 * 33)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/vect/pr70138-2.c b/gcc/testsuite/gcc.dg/vect/pr70138-2.c
new file mode 100644
index 0000000..b1f9737
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr70138-2.c
@@ -0,0 +1,35 @@
+/* { dg-do run } */
+
+#include "tree-vect.h"
+
+double u[33];
+
+__attribute__((noinline, noclone)) static void
+foo (int *x)
+{
+ double c = 0.0;
+ int a, b;
+ for (a = 0; a < 33; a++)
+ {
+ for (b = 0; b < 33; b++)
+ c = c + u[a];
+ u[a] *= 2.0;
+ }
+ *x = c;
+}
+
+int
+main ()
+{
+ int d, e;
+ check_vect ();
+ for (d = 0; d < 33; d++)
+ {
+ u[d] = (d + 2);
+ __asm__ volatile ("" : : : "memory");
+ }
+ foo (&e);
+ if (e != 33 * (2 + 34) / 2 * 33)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/vect/pr70354-1.c b/gcc/testsuite/gcc.dg/vect/pr70354-1.c
new file mode 100644
index 0000000..70de811
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr70354-1.c
@@ -0,0 +1,50 @@
+/* PR tree-optimization/70354 */
+/* { dg-do run } */
+
+#ifndef main
+#include "tree-vect.h"
+#endif
+
+long long int b[64], c[64], g[64];
+unsigned long long int a[64], d[64], e[64], f[64], h[64];
+
+__attribute__ ((noinline, noclone)) void
+foo (void)
+{
+ int i;
+ for (i = 0; i < 64; i++)
+ {
+ d[i] = h[i] << (((((unsigned long long int) b[i] * e[i])
+ << (-a[i] - 3752448776177690134ULL))
+ - 8214565720323784703ULL) - 1ULL);
+ e[i] = (_Bool) (f[i] + (unsigned long long int) g[i]);
+ g[i] = c[i];
+ }
+}
+
+int
+main ()
+{
+ int i;
+#ifndef main
+ check_vect ();
+#endif
+ if (__CHAR_BIT__ != 8 || sizeof (long long int) != 8)
+ return 0;
+ for (i = 0; i < 64; ++i)
+ {
+ a[i] = 14694295297531861425ULL;
+ b[i] = -1725558902283030715LL;
+ c[i] = 4402992416302558097LL;
+ e[i] = 6297173129107286501ULL;
+ f[i] = 13865724171235650855ULL;
+ g[i] = 982871027473857427LL;
+ h[i] = 8193845517487445944ULL;
+ }
+ foo ();
+ for (i = 0; i < 64; i++)
+ if (d[i] != 8193845517487445944ULL || e[i] != 1
+ || g[i] != 4402992416302558097ULL)
+ abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/vect/pr70354-2.c b/gcc/testsuite/gcc.dg/vect/pr70354-2.c
new file mode 100644
index 0000000..356a115
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr70354-2.c
@@ -0,0 +1,37 @@
+/* PR tree-optimization/70354 */
+/* { dg-do run } */
+
+#ifndef main
+#include "tree-vect.h"
+#endif
+
+unsigned long long a[64], b[64];
+
+__attribute__((noinline, noclone)) void
+foo (void)
+{
+ int i;
+ for (i = 0; i < 64; i++)
+ a[i] <<= (b[i] - 0x1200000000ULL);
+}
+
+int
+main ()
+{
+ int i;
+#ifndef main
+ check_vect ();
+#endif
+ if (__CHAR_BIT__ != 8 || sizeof (long long int) != 8)
+ return 0;
+ for (i = 0; i < 64; i++)
+ {
+ a[i] = 0x1234ULL;
+ b[i] = 0x1200000000ULL + (i % 54);
+ }
+ foo ();
+ for (i = 0; i < 64; i++)
+ if (a[i] != (0x1234ULL << (i % 54)))
+ abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/vect/vect-outer-pr69720.c b/gcc/testsuite/gcc.dg/vect/vect-outer-pr69720.c
new file mode 100644
index 0000000..bcfcc6d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-outer-pr69720.c
@@ -0,0 +1,28 @@
+extern void abort (void);
+
+int a[128];
+double b[128] = { 1., 2., 3., 4. };
+
+void __attribute__((noinline)) foo()
+{
+ int i;
+ for (i = 0; i < 128; ++i)
+ {
+ double tem1 = b[i];
+ for (int j = 0; j < 32; ++j)
+ tem1 += 1;
+ b[i] = tem1;
+ a[i] = i;
+ }
+}
+
+int main()
+{
+ foo ();
+ if (b[0] != 33. || b[1] != 34.
+ || b[2] != 35. || b[3] != 36.)
+ abort ();
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { target { vect_double && vect_int } } } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/assembler_arch_1.c b/gcc/testsuite/gcc.target/aarch64/assembler_arch_1.c
index 901e50a..5deea5c 100644
--- a/gcc/testsuite/gcc.target/aarch64/assembler_arch_1.c
+++ b/gcc/testsuite/gcc.target/aarch64/assembler_arch_1.c
@@ -1,4 +1,5 @@
/* { dg-do assemble } */
+/* { dg-require-effective-target aarch64_asm_lse_ok } */
/* { dg-options "-march=armv8-a" } */
/* Make sure that the function header in assembly doesn't override
diff --git a/gcc/testsuite/gcc.target/aarch64/mgeneral-regs_4.c b/gcc/testsuite/gcc.target/aarch64/mgeneral-regs_4.c
index 8eb50aa..49b74d9 100644
--- a/gcc/testsuite/gcc.target/aarch64/mgeneral-regs_4.c
+++ b/gcc/testsuite/gcc.target/aarch64/mgeneral-regs_4.c
@@ -6,4 +6,4 @@ test (void)
return 1;
}
-/* { dg-final { scan-assembler "\.arch.*fp.*simd" } } */
+/* { dg-final { scan-assembler-times "\\.arch armv8-a\n" 1 } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/pr63304_1.c b/gcc/testsuite/gcc.target/aarch64/pr63304_1.c
index fa0fb56..c917f81c 100644
--- a/gcc/testsuite/gcc.target/aarch64/pr63304_1.c
+++ b/gcc/testsuite/gcc.target/aarch64/pr63304_1.c
@@ -1,5 +1,5 @@
/* { dg-do assemble } */
-/* { dg-options "-O1 --save-temps" } */
+/* { dg-options "-O1 --save-temps -mno-fix-cortex-a53-843419" } */
#pragma GCC push_options
#pragma GCC target ("+nothing+simd, cmodel=small")
diff --git a/gcc/testsuite/gcc.target/aarch64/pr69245_1.c b/gcc/testsuite/gcc.target/aarch64/pr69245_1.c
new file mode 100644
index 0000000..dcc542b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/pr69245_1.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=armv8-a+fp -fomit-frame-pointer" } */
+
+#pragma GCC target "arch=armv8-a+nofp"
+long a;
+static void
+fn1 ()
+{
+}
+
+#pragma GCC target "arch=armv8-a+fp"
+float
+fn2 (float a)
+{
+ return a + 2.0;
+}
+
+/* { dg-final { scan-assembler-not "__addsf3" } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/pr69245_2.c b/gcc/testsuite/gcc.target/aarch64/pr69245_2.c
new file mode 100644
index 0000000..6743f5d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/pr69245_2.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=armv8-a+fp" } */
+
+#pragma GCC push_options
+#pragma GCC target "arch=armv8-a+nofp"
+static void
+fn1 ()
+{
+}
+#pragma GCC pop_options
+float
+fn2 (float a)
+{
+ return a + 2.0;
+}
+
+/* { dg-final { scan-assembler-not "__addsf3" } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/pr70044.c b/gcc/testsuite/gcc.target/aarch64/pr70044.c
new file mode 100644
index 0000000..1a84941
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/pr70044.c
@@ -0,0 +1,14 @@
+/* { dg-do link } */
+/* { dg-require-effective-target lto } */
+/* { dg-options "-flto -O --save-temps -fno-omit-frame-pointer" } */
+
+extern int atoi (const char *);
+
+int
+main (int argc, char **argv)
+{
+ return atoi (argv[0]) + 1;
+}
+
+/* Check that the frame pointer really is created. */
+/* { dg-final { scan-lto-assembler "add x29, sp," } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/pr70120-1.c b/gcc/testsuite/gcc.target/aarch64/pr70120-1.c
new file mode 100644
index 0000000..31a5e94
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/pr70120-1.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-Og -fschedule-insns -mno-pc-relative-literal-loads -g" } */
+
+typedef short v32u16 __attribute__ ((vector_size (32)));
+typedef int v32u32 __attribute__ ((vector_size (32)));
+typedef long v32u64 __attribute__ ((vector_size (32)));
+typedef __int128 u128;
+typedef __int128 v32u128 __attribute__ ((vector_size (32)));
+
+int
+foo(int u16_0, int u32_0, int u64_0, u128 u128_0, int u16_1, int u32_1, int u64_1, u128 u128_1, v32u16 v32u16_0, v32u32 v32u32_0, v32u64 v32u64_0, v32u128 v32u128_0, v32u16 v32u16_1, v32u32 v32u32_1, v32u64 v32u64_1, v32u128 v32u128_1)
+{
+ v32u32_1 ^= (v32u32) ~ v32u64_0;
+ v32u32_1 %= (v32u32) - v32u16_1 | 1;
+ v32u16_1 -= (v32u16) v32u16_1;
+ v32u64_0 *= (v32u64){~ u128_0, v32u16_1[5], v32u16_0[15], v32u32_1[4]};
+ v32u16_0 /= (v32u16){0x574c, ~u128_1, v32u128_1[0], u64_1, v32u64_0[1], v32u64_1[2], 0, 0x8ce6, u128_1, 0x5e69} |1;
+ return v32u16_0[0] + v32u16_0[6] + v32u16_0[8] + v32u16_0[9] + v32u32_0[0] + v32u32_0[1] + v32u32_0[2] + v32u32_0[3] + v32u32_0[4] + v32u32_0[6] + v32u64_0[0] + v32u64_0[2] + v32u64_0[3] + v32u128_0[0] + v32u128_0[1] + v32u32_1[0] + v32u32_1[2] + v32u64_1[2] + v32u64_1[3] + v32u128_1[1];
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/pr70120-2.c b/gcc/testsuite/gcc.target/aarch64/pr70120-2.c
new file mode 100644
index 0000000..0110224
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/pr70120-2.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-Og -freorder-functions -g3 -mcmodel=large" } */
+
+typedef short v32u16 __attribute__ ((vector_size (32)));
+typedef int v32u32 __attribute__ ((vector_size (32)));
+typedef long v32u64 __attribute__ ((vector_size (32)));
+typedef __int128 u128;
+typedef __int128 v32u128 __attribute__ ((vector_size (32)));
+
+int
+foo (int u16_0, int u32_0, int u64_0, u128 u128_0, int u16_1, int u32_1, v32u16 v32u16_0, v32u32 v32u32_0, v32u64 v32u64_0, v32u128 v32u128_0, v32u16 v32u16_1, v32u32 v32u32_1, v32u64 v32u64_1, v32u128 v32u128_1)
+{
+ u128_0 <<= 0x6c;
+ v32u16_1 %= (v32u16) { 1, 64, 0xf294, 0, u32_1, v32u32_1[6], ~u128_0, 0x2912, v32u32_0[2]} | 1;
+ v32u16_0 ^= (v32u16){-v32u16_1[11], -u32_1, 64, ~u128_0, 0, 1, 64, ~u64_0, 0};
+ return u16_0 + u32_0 + u16_1 + v32u16_0[0] + v32u32_0[1] + v32u32_0[2] + v32u32_0[4] + v32u32_0[6] + v32u64_0[0] + v32u64_0[1] + v32u64_0[2] + v32u64_0[3] + v32u128_0[0] + v32u128_0[1] + v32u16_1[0] + v32u32_1[7] + v32u64_1[0] + v32u64_1[1] + v32u64_1[2] + v32u64_1[3] + v32u128_1[0] + v32u128_1[1];
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/pr70120-3.c b/gcc/testsuite/gcc.target/aarch64/pr70120-3.c
new file mode 100644
index 0000000..2b70df7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/pr70120-3.c
@@ -0,0 +1,22 @@
+/* { dg-do compile } */
+/* { dg-options "-O1 -ffunction-sections -mno-pc-relative-literal-loads -g3" } */
+
+typedef unsigned short u16;
+typedef unsigned short v32u16 __attribute__((vector_size(32)));
+typedef unsigned int u32;
+typedef unsigned int v32u32 __attribute__((vector_size(32)));
+typedef unsigned long long u64;
+typedef unsigned long long v32u64 __attribute__((vector_size(32)));
+typedef unsigned __int128 u128;
+typedef unsigned __int128 v32u128 __attribute__((vector_size(32)));
+u128 __attribute__((noinline, noclone))
+foo(u16 u16_0, u32 u32_0, u64 u64_0, u128 u128_0, u16 u16_1, u32 u32_1, u64 u64_1, u128 u128_1, v32u16 v32u16_0, v32u32 v32u32_0, v32u64 v32u64_0, v32u128 v32u128_0, v32u16 v32u16_1, v32u32 v32u32_1, v32u64 v32u64_1, v32u128 v32u128_1)
+{
+ v32u128_1 %= (v32u128)v32u32_1 | 1;
+ u16_1 /= ((u32)~(u128)(((u128)0xa1 << 0))) | 1;
+ v32u32_0 += (v32u32){(u16)v32u16_1[9], (u16)v32u16_1[14], (u32)-v32u32_0[7], ((u64)(u32)(((u128)0x43bc59e9 << 0))), ((u32)(u32)(((u128)0x14a47ba8f240a6 << 0))), (u128)v32u128_1[1], (u16)u16_1, (u64)-u64_1};
+ return u16_0 + u32_0 + u64_0 + u128_0 + u16_1 + u32_1 + u64_1 + u128_1 + v32u16_0[0] + v32u16_0[1] + v32u16_0[2] + v32u16_0[3] + v32u16_0[4] + v32u16_0[5] + v32u16_0[6] + v32u16_0[7] + v32u16_0[8] + v32u16_0[9] + v32u16_0[10] + v32u16_0[11] + v32u16_0[12] + v32u16_0[13] + v32u16_0[14] + v32u16_0[15] + v32u32_0[0] + v32u32_0[1] + v32u32_0[2] + v32u32_0[3] + v32u32_0[4] + v32u32_0[5] + v32u32_0[6] + v32u32_0[7] + v32u64_0[0] + v32u64_0[1] + v32u64_0[2] + v32u64_0[3] + v32u128_0[0] + v32u128_0[1] + v32u16_1[0] + v32u16_1[1] + v32u16_1[2] + v32u16_1[3] + v32u16_1[4] + v32u16_1[5] + v32u16_1[6] + v32u16_1[7] + v32u16_1[8] + v32u16_1[9] + v32u16_1[10] + v32u16_1[11] + v32u16_1[12] + v32u16_1[13] + v32u16_1[14] + v32u16_1[15] + v32u32_1[0] + v32u32_1[1] + v32u32_1[2] + v32u32_1[3] + v32u32_1[4] + v32u32_1[5] + v32u32_1[6] + v32u32_1[7] + v32u64_1[0] + v32u64_1[1] + v32u64_1[2] + v32u64_1[3] + v32u128_1[0] + v32u128_1[1];
+}
+int main()
+{
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/pr70398.c b/gcc/testsuite/gcc.target/aarch64/pr70398.c
new file mode 100644
index 0000000..dbe5ad1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/pr70398.c
@@ -0,0 +1,26 @@
+/* { dg-do run } */
+/* { dg-options "-O -fno-tree-loop-optimize -fno-tree-ter -static" } */
+unsigned int in[8 * 8] =
+ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
+ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 };
+
+unsigned char out[8 * 8];
+
+int
+main (void)
+{
+ int i;
+ for (i = 0; i < 8 * 4; i++)
+ {
+ out[i * 2] = (unsigned char) in[i * 2] + 1;
+ out[i * 2 + 1] = (unsigned char) in[i * 2 + 1] + 2;
+ }
+ __asm__("":::"memory");
+ for (i = 0; i < 8 * 4; i++)
+ {
+ if (out[i * 2] != in[i * 2] + 1
+ || out[i * 2 + 1] != in[i * 2 + 1] + 2)
+ __builtin_abort ();
+ }
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/scalar_shift_1.c b/gcc/testsuite/gcc.target/aarch64/scalar_shift_1.c
index 8465c89..7be1b12 100644
--- a/gcc/testsuite/gcc.target/aarch64/scalar_shift_1.c
+++ b/gcc/testsuite/gcc.target/aarch64/scalar_shift_1.c
@@ -181,34 +181,6 @@ test_ashift_right_int_si (Int32x1 b, Int32x1 c)
/* { dg-final { scan-assembler "asr\tw\[0-9\]+,\ w\[0-9\]+,\ 4" } } */
/* { dg-final { scan-assembler "asr\tw\[0-9\]+,\ w\[0-9\]+,\ w\[0-9\]+" } } */
-Int64x1
-test_corners_sisd_di (Int64x1 b)
-{
- force_simd_di (b);
- b = b >> 63;
- force_simd_di (b);
- b = b >> 0;
- b += b >> 65; /* { dg-warning "right shift count >= width of type" } */
-
- return b;
-}
-/* { dg-final { scan-assembler "sshr\td\[0-9\]+,\ d\[0-9\]+,\ 63" } } */
-
-Int32x1
-test_corners_sisd_si (Int32x1 b)
-{
- force_simd_si (b);
- b = b >> 31;
- force_simd_si (b);
- b = b >> 0;
- b += b >> 33; /* { dg-warning "right shift count >= width of type" } */
-
- return b;
-}
-/* { dg-final { scan-assembler "sshr\tv\[0-9\]+\.2s,\ v\[0-9\]+\.2s,\ 31" } } */
-
-
-
#define CHECK(var,val) \
do \
{ \
@@ -236,8 +208,6 @@ main ()
CHECK (x, 0xffffffff21524110ull);
x = test_ashift_right_sisd_di (x, 8);
CHECK (x, 0xffffffffffff2152ull);
- x = test_corners_sisd_di (x);
- CHECK (x, 0xfffffffffffffffeull);
y = test_lshift_left_sisd_si (y, 4);
CHECK (y, 0xadbeef00);
@@ -252,8 +222,6 @@ main ()
CHECK (y, 0xffff5241);
y = test_ashift_right_sisd_si (y, 4);
CHECK (y, 0xffffff52);
- y = test_corners_sisd_si (y);
- CHECK (y, 0xfffffffe);
return 0;
}
diff --git a/gcc/testsuite/gcc.target/aarch64/shift_wide_invalid_1.c b/gcc/testsuite/gcc.target/aarch64/shift_wide_invalid_1.c
new file mode 100644
index 0000000..6b71cb5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/shift_wide_invalid_1.c
@@ -0,0 +1,36 @@
+/* { dg-do compile } */
+/* { dg-options "-O" } */
+
+/* These contain undefined behavior but may trigger edge cases in the
+ vector shift patterns. We don't check for their generation, we only
+ care about not ICEing. */
+
+typedef long long int Int64x1;
+typedef int Int32x1;
+
+#define force_simd_di(v) asm volatile ("mov %d0, %1.d[0]" : "=w"(v) : "w"(v) :)
+#define force_simd_si(v) asm volatile ("mov %s0, %1.s[0]" : "=w"(v) : "w"(v) :)
+
+Int64x1
+foo_di (Int64x1 b)
+{
+ force_simd_di (b);
+ b = b >> 63;
+ force_simd_di (b);
+ b = b >> 0;
+ b += b >> 65; /* { dg-warning "right shift count >= width of type" } */
+
+ return b;
+}
+
+Int32x1
+foo_si (Int32x1 b)
+{
+ force_simd_si (b);
+ b = b >> 31;
+ force_simd_si (b);
+ b = b >> 0;
+ b += b >> 33; /* { dg-warning "right shift count >= width of type" } */
+
+ return b;
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/target_attr_15.c b/gcc/testsuite/gcc.target/aarch64/target_attr_15.c
index f72bec8..2d8c7b9 100644
--- a/gcc/testsuite/gcc.target/aarch64/target_attr_15.c
+++ b/gcc/testsuite/gcc.target/aarch64/target_attr_15.c
@@ -10,4 +10,4 @@ foo (int a)
return a + 1;
}
-/* { dg-final { scan-assembler-times "\\.arch armv8-a\n" 1 } } */
+/* { dg-final { scan-assembler-times "\\.arch armv8-a\\+nofp\\+nosimd\n" 1 } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vect-reduc-or_1.c b/gcc/testsuite/gcc.target/aarch64/vect-reduc-or_1.c
index cfb1231..6261e9d 100644
--- a/gcc/testsuite/gcc.target/aarch64/vect-reduc-or_1.c
+++ b/gcc/testsuite/gcc.target/aarch64/vect-reduc-or_1.c
@@ -1,5 +1,5 @@
/* { dg-do run } */
-/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-all" } */
+/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-all -fno-vect-cost-model" } */
/* Write a reduction loop to be reduced using whole vector right shift. */
extern void abort (void);
diff --git a/gcc/testsuite/gcc.target/arm/atomic_loaddi_1.c b/gcc/testsuite/gcc.target/arm/atomic_loaddi_1.c
new file mode 100644
index 0000000..4f39971
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/atomic_loaddi_1.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c11 -O" } */
+/* { dg-require-effective-target arm_arch_v7a_ok } */
+/* { dg-add-options arm_arch_v7a } */
+
+#include "atomic_loaddi_acquire.x"
+
+/* { dg-final { scan-assembler-times "ldrexd\tr\[0-9\]+, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 1 } } */
+/* { dg-final { scan-assembler-times "dmb\tish" 1 } } */
diff --git a/gcc/testsuite/gcc.target/arm/atomic_loaddi_2.c b/gcc/testsuite/gcc.target/arm/atomic_loaddi_2.c
new file mode 100644
index 0000000..0b18f03
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/atomic_loaddi_2.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c11 -O" } */
+/* { dg-require-effective-target arm_arch_v7ve_ok } */
+/* { dg-add-options arm_arch_v7ve } */
+
+#include "atomic_loaddi_acquire.x"
+
+/* { dg-final { scan-assembler-times "ldrd\tr\[0-9\]+, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 1 } } */
+/* { dg-final { scan-assembler-times "dmb\tish" 1 } } */
diff --git a/gcc/testsuite/gcc.target/arm/atomic_loaddi_3.c b/gcc/testsuite/gcc.target/arm/atomic_loaddi_3.c
new file mode 100644
index 0000000..080a936
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/atomic_loaddi_3.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c11 -O" } */
+/* { dg-require-effective-target arm_arch_v8a_ok } */
+/* { dg-add-options arm_arch_v8a } */
+
+#include "atomic_loaddi_acquire.x"
+
+/* { dg-final { scan-assembler-times "ldaexd\tr\[0-9\]+, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 1 } } */
+/* { dg-final { scan-assembler-not "dmb\tish" } } */
diff --git a/gcc/testsuite/gcc.target/arm/atomic_loaddi_4.c b/gcc/testsuite/gcc.target/arm/atomic_loaddi_4.c
new file mode 100644
index 0000000..8f94ba6
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/atomic_loaddi_4.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c11 -O" } */
+/* { dg-require-effective-target arm_arch_v7a_ok } */
+/* { dg-add-options arm_arch_v7a } */
+
+#include "atomic_loaddi_relaxed.x"
+
+/* { dg-final { scan-assembler-times "ldrexd\tr\[0-9\]+, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 1 } } */
+/* { dg-final { scan-assembler-not "dmb\tish" } } */
diff --git a/gcc/testsuite/gcc.target/arm/atomic_loaddi_5.c b/gcc/testsuite/gcc.target/arm/atomic_loaddi_5.c
new file mode 100644
index 0000000..39502c7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/atomic_loaddi_5.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c11 -O" } */
+/* { dg-require-effective-target arm_arch_v7ve_ok } */
+/* { dg-add-options arm_arch_v7ve } */
+
+#include "atomic_loaddi_relaxed.x"
+
+/* { dg-final { scan-assembler-times "ldrd\tr\[0-9\]+, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 1 } } */
+/* { dg-final { scan-assembler-not "dmb\tish" } } */ \ No newline at end of file
diff --git a/gcc/testsuite/gcc.target/arm/atomic_loaddi_6.c b/gcc/testsuite/gcc.target/arm/atomic_loaddi_6.c
new file mode 100644
index 0000000..aa62d5a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/atomic_loaddi_6.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c11 -O" } */
+/* { dg-require-effective-target arm_arch_v8a_ok } */
+/* { dg-add-options arm_arch_v8a } */
+
+#include "atomic_loaddi_relaxed.x"
+
+/* { dg-final { scan-assembler-times "ldrd\tr\[0-9\]+, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 1 } } */
+/* { dg-final { scan-assembler-not "dmb\tish" } } */ \ No newline at end of file
diff --git a/gcc/testsuite/gcc.target/arm/atomic_loaddi_7.c b/gcc/testsuite/gcc.target/arm/atomic_loaddi_7.c
new file mode 100644
index 0000000..6743663
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/atomic_loaddi_7.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c11 -O" } */
+/* { dg-require-effective-target arm_arch_v7a_ok } */
+/* { dg-add-options arm_arch_v7a } */
+
+#include "atomic_loaddi_seq_cst.x"
+
+/* { dg-final { scan-assembler-times "ldrexd\tr\[0-9\]+, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 1 } } */
+/* { dg-final { scan-assembler-times "dmb\tish" 1 } } */
diff --git a/gcc/testsuite/gcc.target/arm/atomic_loaddi_8.c b/gcc/testsuite/gcc.target/arm/atomic_loaddi_8.c
new file mode 100644
index 0000000..f7bd3e5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/atomic_loaddi_8.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c11 -O" } */
+/* { dg-require-effective-target arm_arch_v7ve_ok } */
+/* { dg-add-options arm_arch_v7ve } */
+
+#include "atomic_loaddi_seq_cst.x"
+
+/* { dg-final { scan-assembler-times "ldrd\tr\[0-9\]+, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 1 } } */
+/* { dg-final { scan-assembler-times "dmb\tish" 1 } } */
diff --git a/gcc/testsuite/gcc.target/arm/atomic_loaddi_9.c b/gcc/testsuite/gcc.target/arm/atomic_loaddi_9.c
new file mode 100644
index 0000000..68b2934
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/atomic_loaddi_9.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c11 -O" } */
+/* { dg-require-effective-target arm_arch_v8a_ok } */
+/* { dg-add-options arm_arch_v8a } */
+
+#include "atomic_loaddi_seq_cst.x"
+
+/* { dg-final { scan-assembler-times "ldaexd\tr\[0-9\]+, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 1 } } */
+/* { dg-final { scan-assembler-not "dmb\tish" } } */
diff --git a/gcc/testsuite/gcc.target/arm/atomic_loaddi_acquire.x b/gcc/testsuite/gcc.target/arm/atomic_loaddi_acquire.x
new file mode 100644
index 0000000..28997ef
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/atomic_loaddi_acquire.x
@@ -0,0 +1,11 @@
+#include <stdatomic.h>
+
+atomic_ullong foo;
+int glob;
+
+int
+main (void)
+{
+ atomic_load_explicit (&foo, memory_order_acquire);
+ return glob;
+}
diff --git a/gcc/testsuite/gcc.target/arm/atomic_loaddi_relaxed.x b/gcc/testsuite/gcc.target/arm/atomic_loaddi_relaxed.x
new file mode 100644
index 0000000..701b3c4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/atomic_loaddi_relaxed.x
@@ -0,0 +1,11 @@
+#include <stdatomic.h>
+
+atomic_ullong foo;
+int glob;
+
+int
+main (void)
+{
+ atomic_load_explicit (&foo, memory_order_relaxed);
+ return glob;
+}
diff --git a/gcc/testsuite/gcc.target/arm/atomic_loaddi_seq_cst.x b/gcc/testsuite/gcc.target/arm/atomic_loaddi_seq_cst.x
new file mode 100644
index 0000000..32e78da
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/atomic_loaddi_seq_cst.x
@@ -0,0 +1,11 @@
+#include <stdatomic.h>
+
+atomic_ullong foo;
+int glob;
+
+int
+main (void)
+{
+ atomic_load_explicit (&foo, memory_order_seq_cst);
+ return glob;
+}
diff --git a/gcc/testsuite/gcc.target/arm/attr-align1.c b/gcc/testsuite/gcc.target/arm/attr-align1.c
index 96d29a9..a53f167 100644
--- a/gcc/testsuite/gcc.target/arm/attr-align1.c
+++ b/gcc/testsuite/gcc.target/arm/attr-align1.c
@@ -2,6 +2,7 @@
Verify alignment when both attribute optimize and target are used. */
/* { dg-do compile } */
/* { dg-skip-if "" { ! { arm_thumb1_ok || arm_thumb2_ok } } } */
+/* { dg-skip-if "" arm_cortex_m } */
void
__attribute__ ((target ("arm")))
diff --git a/gcc/testsuite/gcc.target/arm/attr-align3.c b/gcc/testsuite/gcc.target/arm/attr-align3.c
index edcf64b..593d7fb 100644
--- a/gcc/testsuite/gcc.target/arm/attr-align3.c
+++ b/gcc/testsuite/gcc.target/arm/attr-align3.c
@@ -2,6 +2,7 @@
Verify alignment when attribute target is used. */
/* { dg-do compile } */
/* { dg-skip-if "" { ! { arm_thumb1_ok || arm_thumb2_ok } } } */
+/* { dg-skip-if "" arm_cortex_m } */
/* { dg-options "-Os -mthumb" } */
/* Check that arm code is always 4 bytes aligned. */
diff --git a/gcc/testsuite/gcc.target/arm/attr_arm.c b/gcc/testsuite/gcc.target/arm/attr_arm.c
index f5c70ef..d765d12 100644
--- a/gcc/testsuite/gcc.target/arm/attr_arm.c
+++ b/gcc/testsuite/gcc.target/arm/attr_arm.c
@@ -1,5 +1,6 @@
/* Check that attribute target arm is recognized. */
/* { dg-do compile } */
+/* { dg-skip-if "" arm_cortex_m } */
/* { dg-final { scan-assembler "\\.arm" } } */
/* { dg-final { scan-assembler-not "\\.thumb_func" } } */
diff --git a/gcc/testsuite/gcc.target/arm/cond_sub_restrict_it.c b/gcc/testsuite/gcc.target/arm/cond_sub_restrict_it.c
new file mode 100644
index 0000000..8411643
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/cond_sub_restrict_it.c
@@ -0,0 +1,26 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_thumb2_ok } */
+/* { dg-options "-mthumb -O -mrestrict-it" } */
+
+int a;
+
+__attribute__((noinline, noclone)) int
+fn1 (int c, int d)
+{
+ a -= c == d;
+ return a;
+}
+
+int
+main (void)
+{
+ a = 10;
+ if (fn1 (4, 4) != 9)
+ __builtin_abort ();
+
+ a = 5;
+ if (fn1 (3, 4) != 5)
+ __builtin_abort ();
+
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/condarith_restrict_it.c b/gcc/testsuite/gcc.target/arm/condarith_restrict_it.c
new file mode 100644
index 0000000..ad0d15b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/condarith_restrict_it.c
@@ -0,0 +1,47 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_thumb2_ok } */
+/* { dg-options "-mthumb -O2 -mrestrict-it" } */
+
+__attribute__ ((noinline, noclone)) void
+fn2 ()
+{
+ __builtin_printf ("4");
+}
+
+enum
+{
+ ONE = 1,
+ TWO
+} a;
+
+int b;
+
+__attribute__ ((noinline, noclone)) int
+fn1 ()
+{
+ int c = b == 0;
+ if (a <= ONE)
+ if (b == 0)
+ fn2 ();
+ if (a)
+ if (c)
+ a = 0;
+
+ return a;
+}
+
+int
+main (void)
+{
+ a = ONE;
+ b = 1;
+ if (fn1 () != ONE)
+ __builtin_abort ();
+
+ a = TWO;
+ b = 0;
+ if (fn1 () != 0)
+ __builtin_abort ();
+
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/flip-thumb.c b/gcc/testsuite/gcc.target/arm/flip-thumb.c
index 355d663..4bbe546 100644
--- a/gcc/testsuite/gcc.target/arm/flip-thumb.c
+++ b/gcc/testsuite/gcc.target/arm/flip-thumb.c
@@ -2,6 +2,7 @@
/* { dg-do compile } */
/* Make sure the current multilib supports thumb. */
/* { dg-skip-if "" { ! { arm_thumb1_ok || arm_thumb2_ok } } } */
+/* { dg-skip-if "" arm_cortex_m } */
/* { dg-options "-O2 -mflip-thumb -mno-restrict-it" } */
/* { dg-final { scan-assembler "\\.arm" } } */
/* { dg-final { scan-assembler-times "\\.thumb_func" 1} } */
diff --git a/gcc/testsuite/gcc.target/arm/movcond_restrict_it.c b/gcc/testsuite/gcc.target/arm/movcond_restrict_it.c
new file mode 100644
index 0000000..f1f9cfa
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/movcond_restrict_it.c
@@ -0,0 +1,27 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_thumb2_ok } */
+/* { dg-options "-mthumb -O3 -mrestrict-it" } */
+
+int a;
+
+__attribute__ ((noinline, noclone)) int
+fn1 (int c, int d)
+{
+ if (c > d)
+ a = 1;
+ else
+ a = -1;
+ return a;
+}
+
+int
+main (void)
+{
+ if (fn1 (4, 5) != -1)
+ __builtin_abort ();
+
+ if (fn1 (5, 4) != 1)
+ __builtin_abort ();
+
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/negscc_restrict_it.c b/gcc/testsuite/gcc.target/arm/negscc_restrict_it.c
new file mode 100644
index 0000000..b24c6ece
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/negscc_restrict_it.c
@@ -0,0 +1,19 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_thumb2_ok } */
+/* { dg-options "-mthumb -O2 -mrestrict-it" } */
+
+__attribute__ ((noinline, noclone)) int
+fn1 (int a, int b)
+{
+ return (a == b ? 0 : -1);
+}
+
+int
+main (void)
+{
+ if (fn1 (3, 3) != 0)
+ __builtin_abort ();
+
+ if (fn1 (6, 7) != -1)
+ __builtin_abort ();
+}
diff --git a/gcc/testsuite/gcc.target/arm/pr45701-1.c b/gcc/testsuite/gcc.target/arm/pr45701-1.c
index 454a087..01db15a 100644
--- a/gcc/testsuite/gcc.target/arm/pr45701-1.c
+++ b/gcc/testsuite/gcc.target/arm/pr45701-1.c
@@ -2,7 +2,7 @@
/* { dg-skip-if "" { ! { arm_thumb1_ok || arm_thumb2_ok } } } */
/* { dg-options "-mthumb -Os" } */
/* { dg-final { scan-assembler "push\t\{r3" } } */
-/* { dg-final { scan-assembler-not "r8" } } */
+/* { dg-final { scan-assembler-not "\[^\-\]r8" } } */
extern int hist_verify;
extern int a1;
diff --git a/gcc/testsuite/gcc.target/arm/pr45701-2.c b/gcc/testsuite/gcc.target/arm/pr45701-2.c
index afe0840..ce66d75 100644
--- a/gcc/testsuite/gcc.target/arm/pr45701-2.c
+++ b/gcc/testsuite/gcc.target/arm/pr45701-2.c
@@ -2,7 +2,7 @@
/* { dg-skip-if "" { ! { arm_thumb1_ok || arm_thumb2_ok } } } */
/* { dg-options "-mthumb -Os" } */
/* { dg-final { scan-assembler "push\t\{r3" } } */
-/* { dg-final { scan-assembler-not "r8" } } */
+/* { dg-final { scan-assembler-not "\[^\-\]r8" } } */
extern int hist_verify;
extern int a1;
diff --git a/gcc/testsuite/gcc.target/arm/pr62554.c b/gcc/testsuite/gcc.target/arm/pr62554.c
new file mode 100644
index 0000000..4d6501c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr62554.c
@@ -0,0 +1,51 @@
+/* Check that pre ARMv4 compilation still works. */
+/* { dg-do compile } */
+/* { dg-options "-marm -march=armv3 -O" } */
+/* { dg-require-effective-target arm_arm_ok } */
+
+typedef struct
+{
+ char bits;
+ short val;
+} code;
+
+union uu
+{
+ short us;
+ char b[2];
+};
+
+int a, b, c, f, g, h;
+code *d;
+
+code e;
+
+int
+fn1 (void)
+{
+ char i;
+ do
+ if (e.bits)
+ {
+ dodist:
+ f = c;
+ if (e.bits & 6)
+ {
+ ++i;
+ if (g)
+ do
+ {
+ union uu j;
+ j.b[1] = a;
+ h = j.us;
+ }
+ while (fn1);
+ }
+ else
+ {
+ e = d[b];
+ goto dodist;
+ }
+ }
+ while (i);
+}
diff --git a/gcc/testsuite/gcc.target/arm/pr69307.c b/gcc/testsuite/gcc.target/arm/pr69307.c
new file mode 100644
index 0000000..c04cfa2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr69307.c
@@ -0,0 +1,34 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fselective-scheduling -mtune=arm1136j-s" } */
+
+typedef unsigned char uint8_t;
+typedef unsigned short int uint16_t;
+typedef unsigned int uint32_t;
+typedef unsigned long long int uint64_t;
+typedef uint8_t u8;
+typedef uint16_t u16;
+typedef uint32_t u32;
+typedef uint64_t u64;
+u64 __attribute__((noinline, noclone))
+foo(u8 u8_0, u16 u16_0, u32 u32_0, u64 u64_0, u8 u8_1, u16 u16_1, u32 u32_1, u64 u64_1, u8 u8_2, u16 u16_2, u32 u32_2, u64 u64_2, u8 u8_3, u16 u16_3, u32 u32_3, u64 u64_3)
+{
+ u8 *p8_2 = &u8_2;
+ u16 *p16_2 = &u16_2;
+ u8 *p8_3 = &u8_3;
+ u64 *p64_3 = &u64_3;
+ p8_2 = &u8_3;
+ *p8_3 -= *p64_3;
+ *p8_2 = (u64)*p8_2 % ((u64)*p8_2 | 3);
+ u8_2 = (u64)u8_2 / ((u64)*p16_2 | 1);
+ u16_0 = (u64)u16_0 % ((u64)*p8_2 | 3);
+ return u8_0 + u16_0 + u32_0 + u64_0 + u8_1 + u16_1 + u32_1 + u64_1 + u8_2 + u16_2 + u32_2 + u64_2 + u8_3 + u16_3 + u32_3 + u64_3;
+}
+int main()
+{
+ u64 x = 0;
+ x += foo(3llu, 6llu, 15llu, 28llu, 5llu, 11llu, 20llu, 44llu, 7llu, 10llu, 20llu, 55llu, 0llu, 9llu, 17llu, 48llu);
+ __builtin_printf("%02x%02x%02x%02x%02x%02x%02x%02x\n", (unsigned)((x >> 0) & 0xff), (unsigned)((x >> 8) & 0xff), (unsigned)((x >> 16) & 0xff), (unsigned)((x >> 24) & 0xff), (unsigned)((x >> 32) & 0xff), (unsigned)((x >> 40) & 0xff), (unsigned)((x >> 48) & 0xff), (unsigned)((x >> 56) & 0xff));
+ if (x != 0x1f3)
+ __builtin_abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/pr69610-1.c b/gcc/testsuite/gcc.target/arm/pr69610-1.c
new file mode 100644
index 0000000..a671b93
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr69610-1.c
@@ -0,0 +1,14 @@
+/* Check that pre ARMv4 compilation still works. */
+/* { dg-do compile } */
+/* { dg-options "-marm -march=armv3 -ftree-ter" } */
+/* { dg-require-effective-target arm_arm_ok } */
+
+typedef unsigned short v16u16 __attribute__ ((vector_size (16)));
+typedef unsigned int v16u32 __attribute__ ((vector_size (16)));
+
+unsigned short
+foo (v16u16 v16u16_1, v16u32 v16u32_1)
+{
+ v16u16_1 += (v16u16) v16u32_1;
+ return v16u16_1[5] + v16u32_1[1];
+}
diff --git a/gcc/testsuite/gcc.target/arm/pr69610-2.c b/gcc/testsuite/gcc.target/arm/pr69610-2.c
new file mode 100644
index 0000000..e932c63
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr69610-2.c
@@ -0,0 +1,33 @@
+/* Check that pre ARMv4 compilation still works. */
+/* { dg-do compile } */
+/* { dg-options "-marm -march=armv3 -O2 -fno-forward-propagate" } */
+/* { dg-require-effective-target arm_arm_ok } */
+
+typedef short v16u16 __attribute__ ((vector_size (16)));
+typedef unsigned v16u32 __attribute__ ((vector_size (16)));
+typedef long long v16u64 __attribute__ ((vector_size (16)));
+
+unsigned
+foo
+ (int
+ u16_0,
+ unsigned
+ u32_0,
+ int
+ u64_0,
+ int
+ u16_1,
+ unsigned
+ u64_1,
+ v16u16
+ v16u16_0,
+ v16u32
+ v16u32_0,
+ v16u64 v16u64_0, v16u16 v16u16_1, v16u32 v16u32_1, v16u64 v16u64_1)
+{
+ v16u16_1[3] -= v16u32_0[0];
+ v16u16_0 -= (v16u16) v16u32_0;
+ return u16_0 + u32_0 + u64_0 + u16_1 +
+ v16u16_0[0] + v16u16_0[2] + v16u16_0[3] + v16u16_0[4] + v16u16_0[5] + v16u32_0[0] + v16u32_0[1] + v16u32_0[3] + v16u64_0[1] +
+ v16u16_1[2] + v16u16_1[3] + v16u16_1[5] + v16u16_1[7] + v16u32_1[0] + v16u32_1[3] + v16u64_1[0] + v16u64_1[1];
+}
diff --git a/gcc/testsuite/gcc.target/arm/pr69614.c b/gcc/testsuite/gcc.target/arm/pr69614.c
new file mode 100644
index 0000000..dadcb5c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr69614.c
@@ -0,0 +1,39 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_arch_v7a_ok } */
+/* { dg-options "-Os -w -fno-expensive-optimizations -fschedule-insns -mtpcs-leaf-frame -fira-algorithm=priority" } */
+
+
+typedef unsigned short u16;
+typedef unsigned short v16u16 __attribute__ ((vector_size (16)));
+typedef unsigned int u32;
+typedef unsigned int v16u32 __attribute__ ((vector_size (16)));
+typedef unsigned long long u64;
+typedef unsigned long long v16u64 __attribute__ ((vector_size (16)));
+
+u64 __attribute__ ((noinline, noclone))
+foo(u16 u16_0, u32 u32_0, u64 u64_0, u16 u16_1, u32 u32_1, u64 u64_1,
+ v16u16 v16u16_0, v16u32 v16u32_0, v16u64 v16u64_0, v16u16 v16u16_1, v16u32 v16u32_1, v16u64 v16u64_1)
+{
+ v16u64_0 %= (v16u64){(u16) v16u16_0[5], ~v16u64_1[1]};
+ v16u64_0[1] = 1;
+ v16u32_1[3] >>= 31;
+ v16u64_1 ^= (v16u64){v16u16_1[4], u64_1};
+ v16u64_1[0] = (v16u64_1[0] >> 63) | (v16u64_1[0] << 1);
+ u16_0 -= 1;
+ v16u32_1 %= (v16u32)-v16u64_0 | 1;
+ v16u16_0 /= (v16u16){-u64_1} | 1;
+ v16u32_0[2] |= (u16)~u16_1;
+ return u16_0 + u64_0 + u32_1 + u64_1 +
+ v16u16_0[0] + v16u16_0[1] + v16u16_0[2] + v16u16_0[3] + v16u16_0[4] + v16u16_0[5] + v16u16_0[6] + v16u32_0[2] + v16u32_0[3] + v16u64_0[0] +
+ v16u16_1[2] + v16u16_1[4] + v16u32_1[0] + v16u32_1[1] + v16u32_1[2] + v16u32_1[3] + v16u64_1[0] + v16u64_1[1];
+}
+
+int
+main ()
+{
+ u64 x = foo(0, 0, 1, 0, 0, 1, (v16u16){-1, 0, 0, 0, 0, 1}, (v16u32){0}, (v16u64){0}, (v16u16){0}, (v16u32){0}, (v16u64){0x67784fdb22, 1});
+ __builtin_printf ("%016llx\n", (unsigned long long) (x >> 0));
+ if (x != 0x000000cef0a1b646)
+ __builtin_abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/pr69904.c b/gcc/testsuite/gcc.target/arm/pr69904.c
new file mode 100644
index 0000000..24fe844
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr69904.c
@@ -0,0 +1,24 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -marm" } */
+/* { dg-require-effective-target arm_arch_v7a_ok } */
+/* { dg-add-options arm_arch_v7a } */
+
+/* Make sure that RTL optimizers don't do any unexpected transformations
+ on the compare_exchange loop. */
+
+#include <stdatomic.h>
+
+atomic_uint foo;
+atomic_uint bar;
+int glob;
+
+int
+main (void)
+{
+ glob = atomic_compare_exchange_strong (&foo, &bar, 0);
+ return glob;
+}
+
+/* { dg-final { scan-assembler-times "dmb\tish" 2 } } */
+/* { dg-final { scan-assembler-times "ldrex\t" 1 } } */
+/* { dg-final { scan-assembler-times "strex\t" 1 } } */
diff --git a/gcc/testsuite/gcc.target/arm/pr70278.c b/gcc/testsuite/gcc.target/arm/pr70278.c
new file mode 100644
index 0000000..c44c07b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr70278.c
@@ -0,0 +1,41 @@
+/* { dg-do compile } */
+/* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-march=*" } { "-march=armv4t" } } */
+/* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" } { "" } } */
+/* { dg-options "-mthumb" } */
+/* { dg-add-options arm_arch_v4t } */
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+typedef union
+{
+ double value;
+ struct
+ {
+ unsigned int msw;
+ } parts;
+} ieee_double_shape_type;
+double __ieee754_hypot(double x, double y)
+{
+ double a=x,b=y,t1,t2,y1,y2,w;
+ int j,k,ha,hb;
+ do { ieee_double_shape_type gh_u; gh_u.value = (x); (ha) = gh_u.parts.msw; } while (0);;
+ if(hb > ha) {a=y;b=x;j=ha; ha=hb;hb=j;} else {a=x;b=y;}
+ if(ha > 0x5f300000) {
+ do { ieee_double_shape_type sh_u; sh_u.value = (a); sh_u.parts.msw = (ha); (a) = sh_u.value; } while (0);;
+ }
+ w = a-b;
+ if (w <= b)
+ {
+ t2 = a - t1;
+ w = t1*y1-(w*(-w)-(t1*y2+t2*b));
+ }
+ if(k!=0) {
+ } else return w;
+}
diff --git a/gcc/testsuite/gcc.target/arm/pr70496.c b/gcc/testsuite/gcc.target/arm/pr70496.c
new file mode 100644
index 0000000..d3ee0b5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr70496.c
@@ -0,0 +1,13 @@
+/* { dg-do assemble } */
+/* { dg-options "-mthumb -O2" } */
+/* { dg-require-effective-target arm_arm_ok } */
+/* { dg-require-effective-target arm_thumb2_ok } */
+
+int i;
+void
+main (void)
+{
+ __asm__ volatile (".arm");
+ i = 0;
+ __asm__ volatile ("\n cbz r0, 2f\n2:");
+}
diff --git a/gcc/testsuite/gcc.target/arm/pragma_cpp_fma.c b/gcc/testsuite/gcc.target/arm/pragma_cpp_fma.c
new file mode 100644
index 0000000..c72ea8c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pragma_cpp_fma.c
@@ -0,0 +1,39 @@
+/* Test that FMA macro is correctly undef. */
+/* { dg-do compile } */
+/* { dg-skip-if "Default no fma" { *-*-* } { "-mfpu=*vfpv4*" "-mfpu=*armv8"} } */
+/* { dg-require-effective-target arm_fp_ok } */
+/* { dg-add-options arm_fp } */
+
+/* Reset fpu to a value compatible with the next pragmas. */
+#pragma GCC target ("fpu=vfp")
+
+#pragma GCC push_options
+#pragma GCC target ("fpu=crypto-neon-fp-armv8")
+
+#ifndef __ARM_FEATURE_FMA
+#error "__ARM_FEATURE_FMA is not defined but should be"
+#endif
+
+#ifndef __ARM_FEATURE_CRYPTO
+#error "__ARM_FEATURE_CRYPTO is not defined but should be"
+#endif
+
+#if __ARM_NEON_FP != 6
+#error "__ARM_NEON_FP"
+#endif
+
+#if __ARM_FP != 14
+#error "__ARM_FP"
+#endif
+
+#pragma GCC pop_options
+
+#pragma GCC push_options
+#pragma GCC target ("fpu=neon-vfpv4")
+#pragma GCC pop_options
+
+#ifdef __ARM_FEATURE_FMA
+#error "__ARM_FEATURE_FMA is defined but should not be"
+#endif
+
+
diff --git a/gcc/testsuite/gcc.target/i386/addr-space-3.c b/gcc/testsuite/gcc.target/i386/addr-space-3.c
deleted file mode 100644
index 2b6f47e..0000000
--- a/gcc/testsuite/gcc.target/i386/addr-space-3.c
+++ /dev/null
@@ -1,10 +0,0 @@
-/* { dg-do compile } */
-/* { dg-options "-O" } */
-/* { dg-final { scan-assembler "\[fg]s:0" } } */
-
-void test(int *y)
-{
- int *x = (int __seg_tls *)0;
- if (x == y)
- asm("");
-}
diff --git a/gcc/testsuite/gcc.target/i386/asm-flag-6.c b/gcc/testsuite/gcc.target/i386/asm-flag-6.c
new file mode 100644
index 0000000..458587e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/asm-flag-6.c
@@ -0,0 +1,276 @@
+/* Executable testcase for 'output flags.' */
+/* { dg-do run } */
+
+char TestC ()
+{
+ char r;
+
+ __asm__ ("stc" : "=@ccc"(r));
+ if (r)
+ {
+ __asm__ ("clc" : "=@ccnc"(r));
+ if (r)
+ return 1;
+ }
+ return 0;
+}
+
+char TestE ()
+{
+ char r;
+
+ /* 1 equals 1. */
+ __asm__ ("cmp $1, %1" : "=@cce"(r) : "r" (1));
+ if (r)
+ {
+ /* 1 not equals 2. */
+ __asm__ ("cmp $2, %1" : "=@ccne"(r) : "r" (1));
+ if (r)
+ return 1;
+ }
+ return 0;
+}
+
+char TestZ ()
+{
+ char r;
+
+ /* 1 equals 1. */
+ __asm__ ("cmp $1, %1" : "=@ccz"(r) : "r" (1));
+ if (r)
+ {
+ /* 1 not equals 2. */
+ __asm__ ("cmp $2, %1" : "=@ccnz"(r) : "r" (1));
+ if (r)
+ return 1;
+ }
+ return 0;
+}
+
+char TestA ()
+{
+ char r;
+
+ /* 1 a 0. */
+ __asm__ ("cmp $0, %1" : "=@cca"(r) : "r" (1));
+ if (r)
+ {
+ /* 1 na 2. */
+ __asm__ ("cmp $2, %1" : "=@ccna"(r) : "r" (1));
+ if (r)
+ {
+ /* 1 na 1. */
+ __asm__ ("cmp $1, %1" : "=@ccna"(r) : "r" (1));
+ if (r)
+ return 1;
+ }
+ }
+ return 0;
+}
+
+char TestAE ()
+{
+ char r;
+
+ /* 1 ae 0. */
+ __asm__ ("cmp $0, %1" : "=@ccae"(r) : "r" (1));
+ if (r)
+ {
+ /* 1 nae 2. */
+ __asm__ ("cmp $2, %1" : "=@ccnae"(r) : "r" (1));
+ if (r)
+ {
+ /* 1 ae 1. */
+ __asm__ ("cmp $1, %1" : "=@ccae"(r) : "r" (1));
+ if (r)
+ return 1;
+ }
+ }
+ return 0;
+}
+
+char TestB ()
+{
+ char r;
+
+ /* 1 b 2. */
+ __asm__ ("cmp $2, %1" : "=@ccb"(r) : "r" (1));
+ if (r)
+ {
+ /* 1 nb 0. */
+ __asm__ ("cmp $0, %1" : "=@ccnb"(r) : "r" (1));
+ if (r)
+ {
+ /* 1 nb 1. */
+ __asm__ ("cmp $1, %1" : "=@ccnb"(r) : "r" (1));
+ if (r)
+ return 1;
+ }
+ }
+ return 0;
+}
+
+char TestBE ()
+{
+ char r;
+
+ /* 1 be 2. */
+ __asm__ ("cmp $2, %1" : "=@ccbe"(r) : "r" (1));
+ if (r)
+ {
+ /* 1 nbe 0. */
+ __asm__ ("cmp $0, %1" : "=@ccnbe"(r) : "r" (1));
+ if (r)
+ {
+ /* 1 be 1. */
+ __asm__ ("cmp $1, %1" : "=@ccbe"(r) : "r" (1));
+ if (r)
+ return 1;
+ }
+ }
+ return 0;
+}
+
+char TestG ()
+{
+ char r;
+
+ /* 1 g 0. */
+ __asm__ ("cmp $0, %1" : "=@ccg"(r) : "r" (1));
+ if (r)
+ {
+ /* 1 ng 2. */
+ __asm__ ("cmp $2, %1" : "=@ccng"(r) : "r" (1));
+ if (r)
+ {
+ /* 1 ng 1. */
+ __asm__ ("cmp $1, %1" : "=@ccng"(r) : "r" (1));
+ if (r)
+ return 1;
+ }
+ }
+ return 0;
+}
+
+char TestGE ()
+{
+ char r;
+
+ /* 1 ge 0. */
+ __asm__ ("cmp $0, %1" : "=@ccge"(r) : "r" (1));
+ if (r)
+ {
+ /* 1 nge 2. */
+ __asm__ ("cmp $2, %1" : "=@ccnge"(r) : "r" (1));
+ if (r)
+ {
+ /* 1 ge 1. */
+ __asm__ ("cmp $1, %1" : "=@ccge"(r) : "r" (1));
+ if (r)
+ return 1;
+ }
+ }
+ return 0;
+}
+
+char TestL ()
+{
+ char r;
+
+ /* 1 l 2. */
+ __asm__ ("cmp $2, %1" : "=@ccl"(r) : "r" (1));
+ if (r)
+ {
+ /* 1 nl 0. */
+ __asm__ ("cmp $0, %1" : "=@ccnl"(r) : "r" (1));
+ if (r)
+ {
+ /* 1 nl 1. */
+ __asm__ ("cmp $1, %1" : "=@ccnl"(r) : "r" (1));
+ if (r)
+ return 1;
+ }
+ }
+ return 0;
+}
+
+char TestLE ()
+{
+ char r;
+
+ /* 1 le 2. */
+ __asm__ ("cmp $2, %1" : "=@ccle"(r) : "r" (1));
+ if (r)
+ {
+ /* 1 nle 0. */
+ __asm__ ("cmp $0, %1" : "=@ccnle"(r) : "r" (1));
+ if (r)
+ {
+ /* 1 le 1. */
+ __asm__ ("cmp $1, %1" : "=@ccle"(r) : "r" (1));
+ if (r)
+ return 1;
+ }
+ }
+ return 0;
+}
+
+char TestO ()
+{
+ char r;
+ unsigned char res = 128;
+
+ /* overflow. */
+ __asm__ ("addb $128, %1" : "=@cco"(r), "+r"(res));
+ if (r)
+ {
+ /* not overflow. */
+ __asm__ ("addb $1, %1" : "=@ccno"(r), "+r"(res));
+ if (r)
+ return 1;
+ }
+ return 0;
+}
+
+char TestP ()
+{
+ char r, res = 1;
+
+ /* even # bits. */
+ __asm__ ("addb $2, %1" : "=@ccp"(r), "+r"(res));
+ if (r)
+ {
+ /* odd # bits. */
+ __asm__ ("addb $1, %1" : "=@ccnp"(r), "+r"(res));
+ if (r)
+ return 1;
+ }
+ return 0;
+}
+
+char TestS ()
+{
+ char r, res = 1;
+
+ /* sign bit set. */
+ __asm__ ("addb $128, %1" : "=@ccs"(r), "+r"(res));
+ if (r)
+ {
+ /* sign bit not set. */
+ __asm__ ("subb $128, %1" : "=@ccns"(r), "+r"(res));
+ if (r)
+ return 1;
+ }
+ return 0;
+}
+
+/* dg-do treats exit code of 0 as success. */
+int main ()
+{
+ if (TestC () && TestE () && TestZ () && TestA ()
+ && TestAE () && TestB () && TestBE () && TestG ()
+ && TestGE () && TestL () && TestLE () && TestO ()
+ && TestP () && TestS ())
+ return 0;
+ __builtin_abort ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/avx-vextractf128-256-5.c b/gcc/testsuite/gcc.target/i386/avx-vextractf128-256-5.c
new file mode 100644
index 0000000..3a1db4b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx-vextractf128-256-5.c
@@ -0,0 +1,12 @@
+/* { dg-do assemble { target { ! ia32 } } } */
+/* { dg-require-effective-target avx512f } */
+/* { dg-options "-O2 -mavx512f" } */
+
+#include <immintrin.h>
+
+register __m512d z asm ("zmm16"); /* { dg-warning "call-clobbered register used for global register variable" } */
+
+__m128d foo ()
+{
+ return _mm256_extractf128_pd (_mm512_extractf64x4_pd(z, 0), 1);
+}
diff --git a/gcc/testsuite/gcc.target/i386/avx2-pr70354-1.c b/gcc/testsuite/gcc.target/i386/avx2-pr70354-1.c
new file mode 100644
index 0000000..d2d9b83
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-pr70354-1.c
@@ -0,0 +1,16 @@
+/* PR tree-optimization/70354 */
+/* { dg-do run } */
+/* { dg-options "-O2 -ftree-vectorize -mavx2" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define main() do_main ()
+
+#include "../../gcc.dg/vect/pr70354-1.c"
+
+static void
+avx2_test (void)
+{
+ do_main ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/avx2-pr70354-2.c b/gcc/testsuite/gcc.target/i386/avx2-pr70354-2.c
new file mode 100644
index 0000000..709a51b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-pr70354-2.c
@@ -0,0 +1,16 @@
+/* PR tree-optimization/70354 */
+/* { dg-do run } */
+/* { dg-options "-O2 -ftree-vectorize -mavx2" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define main() do_main ()
+
+#include "../../gcc.dg/vect/pr70354-2.c"
+
+static void
+avx2_test (void)
+{
+ do_main ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/avx2-pr70542.c b/gcc/testsuite/gcc.target/i386/avx2-pr70542.c
new file mode 100644
index 0000000..2a95c5a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-pr70542.c
@@ -0,0 +1,16 @@
+/* PR tree-optimization/70542 */
+/* { dg-do run } */
+/* { dg-options "-O3 -mavx2" } */
+/* { dg-require-effective-target avx2 } */
+
+#include "avx2-check.h"
+
+#define main() do_main ()
+
+#include "../../gcc.dg/torture/pr70542.c"
+
+static void
+avx2_test (void)
+{
+ do_main ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/avx2-pr70574.c b/gcc/testsuite/gcc.target/i386/avx2-pr70574.c
new file mode 100644
index 0000000..c9867dd
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx2-pr70574.c
@@ -0,0 +1,26 @@
+/* PR rtl-optimization/70574 */
+/* { dg-do run { target lp64 } } */
+/* { dg-require-effective-target avx2 } */
+/* { dg-options "-O -frerun-cse-after-loop -fno-tree-ccp -mcmodel=medium -mavx2" } */
+/* { dg-additional-options "-fPIC" { target fpic } } */
+
+#include "avx2-check.h"
+
+typedef char A __attribute__((vector_size (32)));
+typedef short B __attribute__((vector_size (32)));
+
+int
+foo (int x, __int128 y, __int128 z, A w)
+{
+ y <<= 64;
+ w *= (A) { 0, -1, z, 0, ~y };
+ return w[0] + ((B) { x, 0, y, 0, -1 } | 1)[4];
+}
+
+static void
+avx2_test ()
+{
+ int x = foo (0, 0, 0, (A) {});
+ if (x != -1)
+ __builtin_abort ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/avx512bw-pr70329-1.c b/gcc/testsuite/gcc.target/i386/avx512bw-pr70329-1.c
new file mode 100644
index 0000000..bb9a955
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx512bw-pr70329-1.c
@@ -0,0 +1,27 @@
+/* PR target/70329 */
+/* { dg-do run } */
+/* { dg-options "-O0 -mavx512bw" } */
+/* { dg-require-effective-target avx512bw } */
+
+#define AVX512BW
+#include "avx512f-helper.h"
+
+typedef unsigned char A __attribute__ ((vector_size (64)));
+typedef unsigned int B __attribute__ ((vector_size (64)));
+
+unsigned __attribute__ ((noinline, noclone))
+foo (A a, A b, B c)
+{
+ a *= b;
+ c[1] += a[8];
+ return c[1];
+}
+
+void
+TEST (void)
+{
+ A a = (A) { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
+ unsigned x = foo (a, a, (B) { 1, 2 });
+ if (x != 83)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/avx512bw-pr70329-2.c b/gcc/testsuite/gcc.target/i386/avx512bw-pr70329-2.c
new file mode 100644
index 0000000..731b926
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx512bw-pr70329-2.c
@@ -0,0 +1,33 @@
+/* PR target/70329 */
+/* { dg-do run } */
+/* { dg-options "-O2 -ftree-vectorize -mavx512bw" } */
+/* { dg-require-effective-target avx512bw } */
+
+#define AVX512BW
+#include "avx512f-helper.h"
+
+__attribute__((noinline, noclone)) void
+foo (unsigned char *src1, unsigned char *src2, unsigned char *dst)
+{
+ int i;
+
+ for (i = 0; i < 64; i++)
+ dst[i] = (unsigned char) ((int) src1[i] * (int) src2[i]);
+}
+
+void
+TEST (void)
+{
+ unsigned char a[64], b[64], c[64];
+ int i;
+
+ for (i = 0; i < 64; i++)
+ {
+ a[i] = i;
+ b[i] = (i + 1);
+ }
+ foo (a, b, c);
+ for (i = 0; i < 64; i++)
+ if (c[i] != (unsigned char) (i * (i + 1)))
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/avx512bw-pr70509.c b/gcc/testsuite/gcc.target/i386/avx512bw-pr70509.c
new file mode 100644
index 0000000..d7bd659
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx512bw-pr70509.c
@@ -0,0 +1,26 @@
+/* PR tree-optimization/70509 */
+/* { dg-do run } */
+/* { dg-options "-O1 -mavx512bw" } */
+/* { dg-require-effective-target avx512bw } */
+
+#define AVX512BW
+#include "avx512f-helper.h"
+
+typedef char V __attribute__ ((vector_size (64)));
+
+int __attribute__ ((noinline, noclone))
+foo (V u, V v)
+{
+ u /= v[0x20];
+ return u[0];
+}
+
+void
+TEST (void)
+{
+ int x = foo ((V) { 9 }, (V) { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3 });
+ if (x != 3)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/avx512dq-pr70059.c b/gcc/testsuite/gcc.target/i386/avx512dq-pr70059.c
new file mode 100644
index 0000000..932ff6a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx512dq-pr70059.c
@@ -0,0 +1,33 @@
+/* PR target/70059 */
+/* { dg-do run } */
+/* { dg-require-effective-target avx512dq } */
+/* { dg-options "-O2 -mavx512dq" } */
+
+#include "avx512dq-check.h"
+
+__attribute__((noinline, noclone)) __m512i
+foo (__m256i a, __m256i b)
+{
+ __m512i r = _mm512_undefined_si512 ();
+ r = _mm512_inserti32x8 (r, a, 0);
+ r = _mm512_inserti32x8 (r, b, 1);
+ return r;
+}
+
+static void
+avx512dq_test (void)
+{
+ union256i_q a, b;
+ union512i_q r;
+ long long r_ref[8];
+ int i;
+ for (i = 0; i < 4; i++)
+ {
+ a.a[i] = 0x0101010101010101ULL * i;
+ b.a[i] = 0x1010101010101010ULL * i;
+ r_ref[i] = a.a[i];
+ r_ref[i + 4] = b.a[i];
+ }
+ r.x = foo (a.x, b.x);
+ check_union512i_q (r, r_ref);
+}
diff --git a/gcc/testsuite/gcc.target/i386/avx512f-pr70059.c b/gcc/testsuite/gcc.target/i386/avx512f-pr70059.c
new file mode 100644
index 0000000..95c8915
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx512f-pr70059.c
@@ -0,0 +1,33 @@
+/* PR target/70059 */
+/* { dg-do run } */
+/* { dg-require-effective-target avx512f } */
+/* { dg-options "-O2 -mavx512f" } */
+
+#include "avx512f-check.h"
+
+__attribute__((noinline, noclone)) __m512i
+foo (__m256i a, __m256i b)
+{
+ __m512i r = _mm512_undefined_si512 ();
+ r = _mm512_inserti64x4 (r, a, 0);
+ r = _mm512_inserti64x4 (r, b, 1);
+ return r;
+}
+
+static void
+avx512f_test (void)
+{
+ union256i_q a, b;
+ union512i_q r;
+ long long r_ref[8];
+ int i;
+ for (i = 0; i < 4; i++)
+ {
+ a.a[i] = 0x0101010101010101ULL * i;
+ b.a[i] = 0x1010101010101010ULL * i;
+ r_ref[i] = a.a[i];
+ r_ref[i + 4] = b.a[i];
+ }
+ r.x = foo (a.x, b.x);
+ check_union512i_q (r, r_ref);
+}
diff --git a/gcc/testsuite/gcc.target/i386/avx512f-pr70421.c b/gcc/testsuite/gcc.target/i386/avx512f-pr70421.c
new file mode 100644
index 0000000..60e1e2a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx512f-pr70421.c
@@ -0,0 +1,15 @@
+/* PR target/70421 */
+/* { dg-do run } */
+/* { dg-require-effective-target avx512f } */
+/* { dg-options "-O2 -mavx512f" } */
+
+#include "avx512f-check.h"
+
+#define main() do_main()
+#include "../../gcc.dg/torture/pr70421.c"
+
+static void
+avx512f_test (void)
+{
+ do_main ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/bmi2-bzhi-2.c b/gcc/testsuite/gcc.target/i386/bmi2-bzhi-2.c
index 34579d5..2e4a577 100644
--- a/gcc/testsuite/gcc.target/i386/bmi2-bzhi-2.c
+++ b/gcc/testsuite/gcc.target/i386/bmi2-bzhi-2.c
@@ -1,5 +1,5 @@
/* PR target/65368 */
-/* { dg-do assemble { target bmi2 } } */
+/* { dg-do run { target bmi2 } } */
/* { dg-options "-O2 -mbmi2" } */
#include <x86intrin.h>
diff --git a/gcc/testsuite/gcc.target/i386/chkp-hidden-def.c b/gcc/testsuite/gcc.target/i386/chkp-hidden-def.c
index ca7e9d2..68f70ff 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-hidden-def.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-hidden-def.c
@@ -1,4 +1,5 @@
/* { dg-do compile { target { ! x32 } } } */
+/* { dg-require-alias "" } */
/* { dg-options "-fcheck-pointer-bounds -mmpx -O2" } */
/* { dg-final { scan-assembler-not "test.chkp" } } */
diff --git a/gcc/testsuite/gcc.target/i386/chkp-strlen-1.c b/gcc/testsuite/gcc.target/i386/chkp-strlen-1.c
index de6279f..38d5390 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-strlen-1.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-strlen-1.c
@@ -2,7 +2,7 @@
/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-strlen" } */
/* { dg-final { scan-tree-dump "memcpy.chkp" "strlen" } } */
-#include "string.h"
+#include "../../gcc.dg/strlenopt.h"
char *test (char *str1, char *str2)
{
diff --git a/gcc/testsuite/gcc.target/i386/chkp-strlen-2.c b/gcc/testsuite/gcc.target/i386/chkp-strlen-2.c
index 470ac47..789ebc1 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-strlen-2.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-strlen-2.c
@@ -3,8 +3,8 @@
/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-strlen" } */
/* { dg-final { scan-tree-dump-not "strlen" "strlen" } } */
-#define _GNU_SOURCE
-#include "string.h"
+#define USE_GNU
+#include "../../gcc.dg/strlenopt.h"
char *test (char *str1, char *str2)
{
diff --git a/gcc/testsuite/gcc.target/i386/chkp-strlen-3.c b/gcc/testsuite/gcc.target/i386/chkp-strlen-3.c
index 311c9a0..276f412 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-strlen-3.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-strlen-3.c
@@ -2,7 +2,7 @@
/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-strlen" } */
/* { dg-final { scan-tree-dump-times "strlen" 1 "strlen" } } */
-#include "string.h"
+#include "../../gcc.dg/strlenopt.h"
size_t test (char *str1, char *str2)
{
diff --git a/gcc/testsuite/gcc.target/i386/chkp-strlen-4.c b/gcc/testsuite/gcc.target/i386/chkp-strlen-4.c
index dbf568b..51ff960 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-strlen-4.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-strlen-4.c
@@ -3,8 +3,8 @@
/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-strlen" } */
/* { dg-final { scan-tree-dump-times "strlen" 1 "strlen" } } */
-#define _GNU_SOURCE
-#include "string.h"
+#define USE_GNU
+#include "../../gcc.dg/strlenopt.h"
char * test (char *str1, char *str2)
{
diff --git a/gcc/testsuite/gcc.target/i386/chkp-strlen-5.c b/gcc/testsuite/gcc.target/i386/chkp-strlen-5.c
index e44096c..bbafecc 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-strlen-5.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-strlen-5.c
@@ -3,7 +3,7 @@
/* { dg-final { scan-tree-dump-times "strlen" 2 "strlen" } } */
/* { dg-final { scan-tree-dump "memcpy" "strlen" } } */
-#include "string.h"
+#include "../../gcc.dg/strlenopt.h"
size_t test (char *str1, char *str2)
{
diff --git a/gcc/testsuite/gcc.target/i386/chkp-stropt-1.c b/gcc/testsuite/gcc.target/i386/chkp-stropt-1.c
index 18aa281..d6148a8 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-stropt-1.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-stropt-1.c
@@ -2,7 +2,7 @@
/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-chkpopt -fchkp-use-nochk-string-functions" } */
/* { dg-final { scan-tree-dump "memcpy_nochk" "chkpopt" } } */
-#include "string.h"
+#include "../../gcc.dg/strlenopt.h"
void test (int *buf1, int *buf2, size_t len)
{
diff --git a/gcc/testsuite/gcc.target/i386/chkp-stropt-10.c b/gcc/testsuite/gcc.target/i386/chkp-stropt-10.c
index 26e9f13..18cff73 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-stropt-10.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-stropt-10.c
@@ -2,7 +2,7 @@
/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-chkpopt -fchkp-use-fast-string-functions" } */
/* { dg-final { scan-tree-dump-not "memset_nobnd" "chkpopt" } } */
-#include "string.h"
+#include "../../gcc.dg/strlenopt.h"
void test (void *buf1, int c, size_t len)
{
diff --git a/gcc/testsuite/gcc.target/i386/chkp-stropt-11.c b/gcc/testsuite/gcc.target/i386/chkp-stropt-11.c
index e84963f..c53db6a 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-stropt-11.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-stropt-11.c
@@ -2,7 +2,7 @@
/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-chkpopt -fchkp-use-fast-string-functions" } */
/* { dg-final { scan-tree-dump-not "memmove_nobnd" "chkpopt" } } */
-#include "string.h"
+#include "../../gcc.dg/strlenopt.h"
void test (void *buf1, void *buf2, size_t len)
{
diff --git a/gcc/testsuite/gcc.target/i386/chkp-stropt-12.c b/gcc/testsuite/gcc.target/i386/chkp-stropt-12.c
index 638810b8..a076d17 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-stropt-12.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-stropt-12.c
@@ -3,8 +3,8 @@
/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-chkpopt -fchkp-use-fast-string-functions" } */
/* { dg-final { scan-tree-dump-not "mempcpy_nobnd" "chkpopt" } } */
-#define _GNU_SOURCE
-#include "string.h"
+#define USE_GNU
+#include "../../gcc.dg/strlenopt.h"
void test (void *buf1, void *buf2, size_t len)
{
diff --git a/gcc/testsuite/gcc.target/i386/chkp-stropt-13.c b/gcc/testsuite/gcc.target/i386/chkp-stropt-13.c
index 3b926b1..279cae3 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-stropt-13.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-stropt-13.c
@@ -2,7 +2,7 @@
/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-chkpopt -fchkp-use-nochk-string-functions -fchkp-use-fast-string-functions" } */
/* { dg-final { scan-tree-dump "memcpy_nobnd_nochk" "chkpopt" } } */
-#include "string.h"
+#include "../../gcc.dg/strlenopt.h"
void test (int *buf1, int *buf2, size_t len)
{
diff --git a/gcc/testsuite/gcc.target/i386/chkp-stropt-14.c b/gcc/testsuite/gcc.target/i386/chkp-stropt-14.c
index a8d000b..b810c68 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-stropt-14.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-stropt-14.c
@@ -2,7 +2,7 @@
/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-chkpopt -fchkp-use-nochk-string-functions -fchkp-use-fast-string-functions" } */
/* { dg-final { scan-tree-dump "memset_nobnd_nochk" "chkpopt" } } */
-#include "string.h"
+#include "../../gcc.dg/strlenopt.h"
void test (int *buf1, int c, size_t len)
{
diff --git a/gcc/testsuite/gcc.target/i386/chkp-stropt-15.c b/gcc/testsuite/gcc.target/i386/chkp-stropt-15.c
index 7c606565..a9a79c1 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-stropt-15.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-stropt-15.c
@@ -2,7 +2,7 @@
/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-chkpopt -fchkp-use-nochk-string-functions -fchkp-use-fast-string-functions" } */
/* { dg-final { scan-tree-dump "memmove_nobnd_nochk" "chkpopt" } } */
-#include "string.h"
+#include "../../gcc.dg/strlenopt.h"
void test (int *buf1, int *buf2, size_t len)
{
diff --git a/gcc/testsuite/gcc.target/i386/chkp-stropt-16.c b/gcc/testsuite/gcc.target/i386/chkp-stropt-16.c
index b0f43a6..6ce170c 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-stropt-16.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-stropt-16.c
@@ -3,8 +3,8 @@
/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-chkpopt -fchkp-use-nochk-string-functions -fchkp-use-fast-string-functions" } */
/* { dg-final { scan-tree-dump "mempcpy_nobnd_nochk" "chkpopt" } } */
-#define _GNU_SOURCE
-#include "string.h"
+#define USE_GNU
+#include "../../gcc.dg/strlenopt.h"
void test (int *buf1, int *buf2, size_t len)
{
diff --git a/gcc/testsuite/gcc.target/i386/chkp-stropt-2.c b/gcc/testsuite/gcc.target/i386/chkp-stropt-2.c
index cac0fea..6a0c24e 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-stropt-2.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-stropt-2.c
@@ -2,7 +2,7 @@
/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-chkpopt -fchkp-use-nochk-string-functions" } */
/* { dg-final { scan-tree-dump "memset_nochk" "chkpopt" } } */
-#include "string.h"
+#include "../../gcc.dg/strlenopt.h"
void test (int *buf1, int c, size_t len)
{
diff --git a/gcc/testsuite/gcc.target/i386/chkp-stropt-3.c b/gcc/testsuite/gcc.target/i386/chkp-stropt-3.c
index 72ff386..310dec7 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-stropt-3.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-stropt-3.c
@@ -2,7 +2,7 @@
/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-chkpopt -fchkp-use-nochk-string-functions" } */
/* { dg-final { scan-tree-dump "memmove_nochk" "chkpopt" } } */
-#include "string.h"
+#include "../../gcc.dg/strlenopt.h"
void test (int *buf1, int *buf2, size_t len)
{
diff --git a/gcc/testsuite/gcc.target/i386/chkp-stropt-4.c b/gcc/testsuite/gcc.target/i386/chkp-stropt-4.c
index 216ed52..7a30d17 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-stropt-4.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-stropt-4.c
@@ -3,8 +3,8 @@
/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-chkpopt -fchkp-use-nochk-string-functions" } */
/* { dg-final { scan-tree-dump "mempcpy_nochk" "chkpopt" } } */
-#define _GNU_SOURCE
-#include "string.h"
+#define USE_GNU
+#include "../../gcc.dg/strlenopt.h"
void test (int *buf1, int *buf2, size_t len)
{
diff --git a/gcc/testsuite/gcc.target/i386/chkp-stropt-5.c b/gcc/testsuite/gcc.target/i386/chkp-stropt-5.c
index 02ad9cc..39850d6 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-stropt-5.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-stropt-5.c
@@ -2,7 +2,7 @@
/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-chkpopt -fchkp-use-fast-string-functions" } */
/* { dg-final { scan-tree-dump "memcpy_nobnd" "chkpopt" } } */
-#include "string.h"
+#include "../../gcc.dg/strlenopt.h"
void test (int *buf1, int *buf2, size_t len)
{
diff --git a/gcc/testsuite/gcc.target/i386/chkp-stropt-6.c b/gcc/testsuite/gcc.target/i386/chkp-stropt-6.c
index 6db5d83..06dcbfb 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-stropt-6.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-stropt-6.c
@@ -2,7 +2,7 @@
/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-chkpopt -fchkp-use-fast-string-functions" } */
/* { dg-final { scan-tree-dump "memset_nobnd" "chkpopt" } } */
-#include "string.h"
+#include "../../gcc.dg/strlenopt.h"
void test (int *buf1, int c, size_t len)
{
diff --git a/gcc/testsuite/gcc.target/i386/chkp-stropt-7.c b/gcc/testsuite/gcc.target/i386/chkp-stropt-7.c
index 761e626..40ded06 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-stropt-7.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-stropt-7.c
@@ -2,7 +2,7 @@
/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-chkpopt -fchkp-use-fast-string-functions" } */
/* { dg-final { scan-tree-dump "memmove_nobnd" "chkpopt" } } */
-#include "string.h"
+#include "../../gcc.dg/strlenopt.h"
void test (int *buf1, int *buf2, size_t len)
{
diff --git a/gcc/testsuite/gcc.target/i386/chkp-stropt-8.c b/gcc/testsuite/gcc.target/i386/chkp-stropt-8.c
index afde3c9..7e575bb 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-stropt-8.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-stropt-8.c
@@ -3,8 +3,8 @@
/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-chkpopt -fchkp-use-fast-string-functions" } */
/* { dg-final { scan-tree-dump "mempcpy_nobnd" "chkpopt" } } */
-#define _GNU_SOURCE
-#include "string.h"
+#define USE_GNU
+#include "../../gcc.dg/strlenopt.h"
void test (int *buf1, int *buf2, size_t len)
{
diff --git a/gcc/testsuite/gcc.target/i386/chkp-stropt-9.c b/gcc/testsuite/gcc.target/i386/chkp-stropt-9.c
index b79d096..bf26874 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-stropt-9.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-stropt-9.c
@@ -2,7 +2,7 @@
/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-chkpopt -fchkp-use-fast-string-functions" } */
/* { dg-final { scan-tree-dump-not "memcpy_nobnd" "chkpopt" } } */
-#include "string.h"
+#include "../../gcc.dg/strlenopt.h"
void test (void *buf1, void *buf2, size_t len)
{
diff --git a/gcc/testsuite/gcc.target/i386/cleanup-1.c b/gcc/testsuite/gcc.target/i386/cleanup-1.c
index fc82f35..dcfcc4e 100644
--- a/gcc/testsuite/gcc.target/i386/cleanup-1.c
+++ b/gcc/testsuite/gcc.target/i386/cleanup-1.c
@@ -4,6 +4,7 @@
#include <unwind.h>
#include <stdlib.h>
+#include <stddef.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
@@ -47,6 +48,14 @@ handler (void *p __attribute__((unused)))
_exit (0);
}
+static void
+__attribute__((noinline))
+check (intptr_t p)
+{
+ if ((p & 15) != 0)
+ abort ();
+}
+
static int __attribute__((noinline))
fn5 (void)
{
@@ -59,6 +68,8 @@ void
bar (void)
{
char dummy __attribute__((cleanup (counter)));
+ unsigned long tmp[4] __attribute__((aligned(16)));
+ check ((intptr_t) tmp);
fn5 ();
}
@@ -133,9 +144,9 @@ foo (int x)
".type _L_mutex_lock_%=, @function\n"
"_L_mutex_lock_%=:\n"
"1:\t" "leaq %1, %%rdi\n"
-"2:\t" "subq $128, %%rsp\n"
+"2:\t" "subq $136, %%rsp\n"
"3:\t" "call bar\n"
-"4:\t" "addq $128, %%rsp\n"
+"4:\t" "addq $136, %%rsp\n"
"5:\t" "jmp 24f\n"
"6:\t" ".size _L_mutex_lock_%=, .-_L_mutex_lock_%=\n\t"
".previous\n\t"
@@ -179,7 +190,7 @@ foo (int x)
".sleb128 4b-3b\n"
"16:\t" ".byte 0x40 + (4b-3b-1) # DW_CFA_advance_loc\n\t"
".byte 0x0e # DW_CFA_def_cfa_offset\n\t"
- ".uleb128 128\n\t"
+ ".uleb128 136\n\t"
".byte 0x16 # DW_CFA_val_expression\n\t"
".uleb128 0x10\n\t"
".uleb128 20f-17f\n"
diff --git a/gcc/testsuite/gcc.target/i386/cleanup-2.c b/gcc/testsuite/gcc.target/i386/cleanup-2.c
index 0ec7c31..7e603233 100644
--- a/gcc/testsuite/gcc.target/i386/cleanup-2.c
+++ b/gcc/testsuite/gcc.target/i386/cleanup-2.c
@@ -4,6 +4,7 @@
#include <unwind.h>
#include <stdlib.h>
+#include <stddef.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
@@ -47,6 +48,14 @@ handler (void *p __attribute__((unused)))
_exit (0);
}
+static void
+__attribute__((noinline))
+check (intptr_t p)
+{
+ if ((p & 15) != 0)
+ abort ();
+}
+
static int __attribute__((noinline))
fn5 (void)
{
@@ -59,6 +68,8 @@ void
bar (void)
{
char dummy __attribute__((cleanup (counter)));
+ unsigned long tmp[4] __attribute__((aligned(16)));
+ check ((intptr_t) tmp);
fn5 ();
}
@@ -74,9 +85,9 @@ foo (int x)
".type _L_mutex_lock_%=, @function\n"
"_L_mutex_lock_%=:\n"
"1:\t" "leaq %1, %%rdi\n"
-"2:\t" "subq $128, %%rsp\n"
+"2:\t" "subq $136, %%rsp\n"
"3:\t" "call bar\n"
-"4:\t" "addq $128, %%rsp\n"
+"4:\t" "addq $136, %%rsp\n"
"5:\t" "jmp 21f\n"
"6:\t" ".size _L_mutex_lock_%=, .-_L_mutex_lock_%=\n\t"
".previous\n\t"
@@ -160,7 +171,7 @@ foo (int x)
".uleb128 6b-5b-1\n"
"19:\t" ".byte 0x40 + (3b-1b) # DW_CFA_advance_loc\n\t"
".byte 0xe # DW_CFA_def_cfa_offset\n\t"
- ".uleb128 128\n\t"
+ ".uleb128 136\n\t"
".byte 0x40 + (5b-3b) # DW_CFA_advance_loc\n\t"
".byte 0xe # DW_CFA_def_cfa_offset\n\t"
".uleb128 0\n\t"
diff --git a/gcc/testsuite/gcc.target/i386/pr64411.C b/gcc/testsuite/gcc.target/i386/pr64411.C
new file mode 100644
index 0000000..55858fb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr64411.C
@@ -0,0 +1,27 @@
+/* { dg-do compile } */
+/* { dg-options "-Os -mcmodel=medium -fPIC -fschedule-insns -fselective-scheduling" } */
+
+typedef __SIZE_TYPE__ size_t;
+
+extern "C" long strtol ()
+ { return 0; }
+
+static struct {
+ void *sp[2];
+} info;
+
+union S813
+{
+ void * c[5];
+}
+s813;
+
+S813 a813[5];
+S813 check813 (S813, S813 *, S813);
+
+void checkx813 ()
+{
+ __builtin_memset (&s813, '\0', sizeof (s813));
+ __builtin_memset (&info, '\0', sizeof (info));
+ check813 (s813, &a813[1], a813[2]);
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr69052.c b/gcc/testsuite/gcc.target/i386/pr69052.c
new file mode 100644
index 0000000..6f491e9a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr69052.c
@@ -0,0 +1,54 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target pie } */
+/* { dg-options "-O2 -fPIE -pie" } */
+
+int look_nbits[256], loop_sym[256];
+const int ind[] = {
+ 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5,
+ 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28,
+ 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51,
+ 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63
+};
+int out[256];
+extern void bar (int *, int *);
+void foo (int *l1, int *l2, int *v, int *v1, int *m1, int i)
+{
+ int L = i + 1, b = 20;
+ int result, k;
+
+ for (k = 1; k < 64; k++)
+ {
+ int look = (((L >> (b - 8))) & ((1 << 8) - 1));
+ int nb = l1[look];
+ int code;
+ int r;
+
+ if (nb)
+ {
+ b -= nb;
+ result = l2[look];
+ }
+ else
+ {
+ nb = 9;
+ code = (((L >> (b -= nb))) & ((1 << nb) - 1));
+ result = v[(code + v1[nb])];
+ }
+ r = result >> 4;
+ result &= 15;
+ if (result)
+ {
+ k += r;
+ r = (((L >> (b -= result))) & ((1 << result) - 1));
+ if (r < (1 << (result - 1)))
+ result = r + (((-1) << result) + 1);
+ else
+ result = r;
+
+ out[ind[k]] = result;
+ }
+ bar (&L, &b);
+ }
+}
+
+/* { dg-final { scan-assembler-not "leal\[ \t\]ind@GOTOFF\\(%\[^,\]*\\), %" { target ia32 } } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr69820.c b/gcc/testsuite/gcc.target/i386/pr69820.c
new file mode 100644
index 0000000..8ce9778
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr69820.c
@@ -0,0 +1,14 @@
+/* PR target/69820 */
+/* { dg-do compile } */
+/* { dg-options "-O3 -mavx512f -mno-avx512bw" } */
+
+int a[100], b[100];
+short c[100];
+
+void
+foo ()
+{
+ int i;
+ for (i = 0; i < 100; ++i)
+ b[i] = a[i] * (_Bool) c[i];
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr69888.c b/gcc/testsuite/gcc.target/i386/pr69888.c
new file mode 100644
index 0000000..498fe5a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr69888.c
@@ -0,0 +1,10 @@
+/* PR target/69888 */
+/* { dg-do compile } */
+/* { dg-options "-minline-all-stringops -mmemset-strategy=no_stringop:-1:noalign" } */
+/* { dg-additional-options "-march=geode" { target ia32 } } */
+
+void
+foo (char *p)
+{
+ __builtin_memset (p, 0, 32);
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr69891.c b/gcc/testsuite/gcc.target/i386/pr69891.c
new file mode 100644
index 0000000..2c5e863
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr69891.c
@@ -0,0 +1,30 @@
+/* PR rtl-optimization/69891 */
+/* { dg-do run } */
+/* { dg-options "-O -fno-tree-fre -mstringop-strategy=libcall -Wno-psabi" } */
+/* { dg-additional-options "-mno-sse" { target ia32 } } */
+
+typedef unsigned short A;
+typedef unsigned short B __attribute__ ((vector_size (32)));
+typedef unsigned int C;
+typedef unsigned int D __attribute__ ((vector_size (32)));
+typedef unsigned long long E;
+typedef unsigned long long F __attribute__ ((vector_size (32)));
+
+__attribute__((noinline, noclone)) unsigned
+foo(D a, B b, D c, F d)
+{
+ b /= (B) {1, -c[0]} | 1;
+ c[0] |= 7;
+ a %= c | 1;
+ c ^= c;
+ return a[0] + b[15] + c[0] + d[3];
+}
+
+int
+main ()
+{
+ unsigned x = foo ((D) {}, (B) {}, (D) {}, (F) {});
+ if (x != 0)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr70007.c b/gcc/testsuite/gcc.target/i386/pr70007.c
new file mode 100644
index 0000000..ff58d17
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70007.c
@@ -0,0 +1,30 @@
+/* PR rtl-optimization/70007 */
+/* { dg-do run { target bmi2 } } */
+/* { dg-options "-O -fgcse -mbmi2 -Wno-psabi" } */
+/* { dg-require-effective-target int128 } */
+
+#include "bmi2-check.h"
+
+typedef unsigned short v32u16 __attribute__ ((vector_size (32)));
+typedef unsigned long long v32u64 __attribute__ ((vector_size (32)));
+typedef unsigned __int128 u128;
+typedef unsigned __int128 v32u128 __attribute__ ((vector_size (32)));
+
+u128
+foo (v32u16 v32u16_0, v32u64 v32u64_0, v32u64 v32u64_1)
+{
+ do {
+ v32u16_0[13] |= v32u64_1[3] = (v32u64_1[3] >> 19) | (v32u64_1[3] << 45);
+ v32u64_1 %= ~v32u64_1;
+ v32u64_0 *= (v32u64) v32u16_0;
+ } while (v32u64_0[0]);
+ return v32u64_1[3];
+}
+
+static void
+bmi2_test ()
+{
+ u128 x = foo((v32u16){(unsigned short) ~0xba31, 0x47c6}, (v32u64){64}, (v32u64){0, 0x8b217e2514d23242, 0xac569b6dff9f82, 0x9d4cffe03c139c});
+ if (x != 0x3c74da5ca328d09)
+ __builtin_abort();
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr70021.c b/gcc/testsuite/gcc.target/i386/pr70021.c
new file mode 100644
index 0000000..de6da34
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70021.c
@@ -0,0 +1,42 @@
+/* PR target/70021 */
+/* { dg-do run } */
+/* { dg-require-effective-target avx2 } */
+/* { dg-options "-O2 -ftree-vectorize -mavx2 -fdump-tree-vect-details" } */
+
+#include "avx2-check.h"
+
+#define N 160
+int a[N];
+unsigned long long int b[N], c[N], d[N], e[N];
+
+__attribute__((noinline, noclone)) void
+foo (void)
+{
+ int i;
+ for (i = 0; i < N; i += 4)
+ {
+ unsigned long long int f = (_Bool) b[i];
+ unsigned long long int g = c[i] != d[i];
+ e[i] = g ^ (a[i] & (g << f));
+ }
+}
+
+void
+avx2_test ()
+{
+ int i;
+ for (i = 0; i < N; ++i)
+ {
+ a[i] = 1618000128;
+ b[i] = 10919594786573202791ULL;
+ c[i] = 2593730175074624973ULL;
+ d[i] = 7447894520878803661ULL;
+ e[i] = 14234165565810642243ULL;
+ }
+ foo ();
+ for (i = 0; i < N; ++i)
+ if (e[i] != ((i & 3) ? 14234165565810642243ULL : 1ULL))
+ __builtin_abort ();
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr70027.c b/gcc/testsuite/gcc.target/i386/pr70027.c
new file mode 100644
index 0000000..b4b4830
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70027.c
@@ -0,0 +1,11 @@
+/* { dg-do assemble } */
+/* { dg-options "-fno-plt -masm=intel" } */
+/* { dg-require-effective-target masm_intel } */
+
+extern void bar (int);
+
+void
+foo (void)
+{
+ bar (123);
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr70028.c b/gcc/testsuite/gcc.target/i386/pr70028.c
new file mode 100644
index 0000000..c071aad
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70028.c
@@ -0,0 +1,19 @@
+/* PR target/70028 */
+/* { dg-do assemble { target avx512bw } } */
+/* { dg-require-effective-target int128 } */
+/* { dg-require-effective-target masm_intel } */
+/* { dg-options "-O2 -fno-forward-propagate -mavx512bw -masm=intel" } */
+
+typedef unsigned short A;
+typedef int B __attribute__ ((vector_size (32)));
+typedef unsigned __int128 C;
+typedef __int128 D __attribute__ ((vector_size (32)));
+
+C
+foo (A a, int b, unsigned c, C d, A e, unsigned f, B g, D h)
+{
+ g[1] ^= (A) ~ a;
+ a ^= (unsigned) g[0];
+ h %= (D) h | 1;
+ return a + b + c + d + e + g[0] + g[1] + h[1];
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr70049.c b/gcc/testsuite/gcc.target/i386/pr70049.c
new file mode 100644
index 0000000..a659bb3
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70049.c
@@ -0,0 +1,20 @@
+/* PR target/70049 */
+/* { dg-do assemble { target avx } } */
+/* { dg-require-effective-target masm_intel } */
+/* { dg-options "-Og -mavx -masm=intel" } */
+
+typedef unsigned short A;
+typedef unsigned short B __attribute__ ((vector_size (32)));
+typedef unsigned int C;
+typedef unsigned int D __attribute__ ((vector_size (32)));
+typedef unsigned long long E;
+typedef unsigned long long F __attribute__ ((vector_size (32)));
+
+C
+foo(A a, C b, E c, F d, B e, D f, F g)
+{
+ b <<= 28;
+ e[1] += b;
+ d %= (F) { 0, f[4] } | 1;
+ return a + b + c + d[3] + e[1] + g[3];
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr70062.c b/gcc/testsuite/gcc.target/i386/pr70062.c
new file mode 100644
index 0000000..e5cb854
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70062.c
@@ -0,0 +1,11 @@
+/* PR target/70062 */
+/* { dg-options "-minline-all-stringops -minline-stringops-dynamically -mmemcpy-strategy=libcall:-1:noalign -Wno-psabi" } */
+/* { dg-additional-options "-mtune=k6-2" { target ia32 } } */
+
+typedef int V __attribute__ ((vector_size (32)));
+
+V
+foo (V x)
+{
+ return (V) { x[0] };
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr70083.c b/gcc/testsuite/gcc.target/i386/pr70083.c
new file mode 100644
index 0000000..cfce620
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70083.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-options "-Wno-psabi -O2 -fno-dce -fschedule-insns -fno-sched-critical-path-heuristic -mavx512dq --param=max-cse-insns=1" } */
+
+typedef short v16hi __attribute__ ((vector_size (32)));
+typedef int v8si __attribute__ ((vector_size (32)));
+typedef long long v4di __attribute__ ((vector_size (32)));
+
+int
+foo(int u32_0, int u64_0, int u64_1, v16hi v32u16_0, v8si v32u32_0, v4di v32u64_0, v16hi v32u16_1, v8si v32u32_1, v4di v32u64_1)
+{
+ v32u32_1 %= (v8si) v32u16_1 | 1;
+ v32u64_1[1] |= ((1));
+ v32u16_0 /= (v16hi){~u64_1, 1, 0xb56c, 0xd279, 0x26b6, 0x74d9, 0xf764, 0, 0, -v32u16_1[6]} | 1;
+ v32u16_1 ^= (v16hi){0xc98d, 1, 0x8c71, u32_0, 0x5366, 0, ~v32u64_1[1]} & 31;
+ v32u32_0 -= (v8si)~v32u64_1;
+ v32u32_1[2] |= 0x1f;
+ v32u16_0 %= (v16hi){2, 0xffff, u32_0, 1, v32u64_0[1], u32_0 };
+ v32u32_1 /= (v8si){0x1e7390, v32u16_0[12], ~v32u16_1[2], -u64_0};
+ return v32u16_0[4] + v32u16_0[5] + v32u32_0[5] + v32u32_1[6] + v32u64_1[3];
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr70086-1.c b/gcc/testsuite/gcc.target/i386/pr70086-1.c
new file mode 100644
index 0000000..7289798
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70086-1.c
@@ -0,0 +1,11 @@
+/* PR target/70086 */
+/* { dg-do compile } */
+/* { dg-options "-mtune=barcelona -mavx512vl -ffloat-store" } */
+
+float
+foo (float a, float b, double c, float d, double e, float f)
+{
+ e -= d;
+ d *= e;
+ return e + d;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr70086-2.c b/gcc/testsuite/gcc.target/i386/pr70086-2.c
new file mode 100644
index 0000000..b613d54
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70086-2.c
@@ -0,0 +1,21 @@
+/* PR target/70086 */
+/* { dg-do compile { target { ! ia32 } } } */
+/* { dg-options "-O2 -mtune=barcelona -mavx512vl" } */
+
+float
+foo (double *p)
+{
+ register float xmm16 __asm ("xmm16");
+ xmm16 = *p;
+ asm volatile ("" : "+v" (xmm16));
+ return xmm16;
+}
+
+float
+bar (double x)
+{
+ register float xmm16 __asm ("xmm16");
+ xmm16 = x;
+ asm volatile ("" : "+v" (xmm16));
+ return xmm16;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr70086-3.c b/gcc/testsuite/gcc.target/i386/pr70086-3.c
new file mode 100644
index 0000000..ae523a9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70086-3.c
@@ -0,0 +1,21 @@
+/* PR target/70086 */
+/* { dg-do compile { target { ! ia32 } } } */
+/* { dg-options "-O2 -mtune=barcelona -mavx512f -mno-avx512vl" } */
+
+float
+foo (double *p)
+{
+ register float xmm16 __asm ("xmm16");
+ xmm16 = *p;
+ asm volatile ("" : "+v" (xmm16));
+ return xmm16;
+}
+
+float
+bar (double x)
+{
+ register float xmm16 __asm ("xmm16");
+ xmm16 = x;
+ asm volatile ("" : "+v" (xmm16));
+ return xmm16;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr70160.c b/gcc/testsuite/gcc.target/i386/pr70160.c
new file mode 100644
index 0000000..725e955
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70160.c
@@ -0,0 +1,19 @@
+/* { dg-do compile { target { ia32 } } } */
+/* { dg-options "-O2 -msse2 -Wno-uninitialized -Wno-maybe-uninitialized" } */
+
+long long a;
+void fn1();
+void fn2(unsigned t, int a_int, unsigned p)
+{
+ long long x;
+ int i, j = 1;
+ t = i;
+ for (; j;) {
+ a = x;
+ x = 1 + t;
+ j += a_int;
+ fn1();
+ if (x == 1)
+ return;
+ }
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr70251.c b/gcc/testsuite/gcc.target/i386/pr70251.c
new file mode 100644
index 0000000..97078cd
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70251.c
@@ -0,0 +1,52 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mavx512bw" } */
+/* { dg-require-effective-target avx512bw } */
+
+#define AVX512BW
+#include "avx512f-helper.h"
+
+unsigned long long int
+hash(unsigned long long int seed, unsigned long long int v)
+{
+ return seed ^ (v + 0x9e3779b9 + (seed<<6) + (seed>>2));
+}
+
+unsigned int a [100];
+signed char b [100];
+signed char c [100];
+
+void
+init ()
+{
+ for (int i = 0; i < 100; ++i)
+ {
+ a [i] = 1000L;
+ b [i] = 10;
+ c [i] = 5;
+ }
+}
+
+void
+foo ()
+{
+ for (int i = 0; i < 100; ++i)
+ b [i] = (!b [i] ^ (a [i] >= b [i])) + c [i];
+}
+
+unsigned long long int
+checksum ()
+{
+ unsigned long long int seed = 0ULL;
+ for (int i = 0; i < 100; ++i)
+ seed = hash (seed, b[i]);
+ return seed;
+}
+
+void
+TEST ()
+{
+ init ();
+ foo ();
+ if (checksum () != 5785906989299578598ULL)
+ __builtin_abort ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr70263-2.c b/gcc/testsuite/gcc.target/i386/pr70263-2.c
new file mode 100644
index 0000000..18ebbf0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70263-2.c
@@ -0,0 +1,23 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-rtl-ira" } */
+
+/* { dg-final { scan-rtl-dump "Adding REG_EQUIV to insn \[0-9\]+ for source of insn \[0-9\]+" "ira" } } */
+
+typedef float XFtype __attribute__ ((mode (XF)));
+typedef _Complex float XCtype __attribute__ ((mode (XC)));
+XCtype
+__mulxc3 (XFtype a, XFtype b, XFtype c, XFtype d)
+{
+ XFtype ac, bd, ad, bc, x, y;
+ ac = a * c;
+__asm__ ("": "=m" (ac):"m" (ac));
+ if (x != x)
+ {
+ _Bool recalc = 0;
+ if (((!(!(((ac) - (ac)) != ((ac) - (ac)))))))
+ recalc = 1;
+ if (recalc)
+ x = __builtin_huge_vall () * (a * c - b * d);
+ }
+ return x;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr70293.c b/gcc/testsuite/gcc.target/i386/pr70293.c
new file mode 100644
index 0000000..4510166
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70293.c
@@ -0,0 +1,38 @@
+/* PR target/70293 */
+/* { dg-do compile } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-options "-mtune=westmere -mavx512vl -O2" } */
+
+typedef short __v8hi __attribute__((__vector_size__(16)));
+typedef int __v8hu __attribute__((__vector_size__(16)));
+typedef long __m128i __attribute__((__vector_size__(16)));
+__m128i _mm_madd_epi16___B, _mm_mullo_epi16___A,
+ scaled_bilinear_scanline_sse2_8888_8_8888_OVER_xmm_b,
+ scaled_bilinear_scanline_sse2_8888_8_8888_OVER___trans_tmp_16,
+ scaled_bilinear_scanline_sse2_8888_8_8888_OVER___trans_tmp_13;
+int _mm_srli_epi16___B, scaled_bilinear_scanline_sse2_8888_8_8888_OVER_m,
+ scaled_bilinear_scanline_sse2_8888_8_8888_OVER_dst,
+ scaled_bilinear_scanline_sse2_8888_8_8888_OVER_wt;
+__m128i _mm_set_epi16();
+void _mm_cvtsi128_si32();
+void
+scaled_bilinear_scanline_sse2_8888_8_8888_OVER(int p1) {
+ __m128i __trans_tmp_12, __trans_tmp_6, __trans_tmp_5, xmm_x = _mm_set_epi16();
+ int mask;
+ __trans_tmp_5 = (__m128i){scaled_bilinear_scanline_sse2_8888_8_8888_OVER_wt};
+ __trans_tmp_6 = (__m128i)(__v8hi){p1, p1, p1, p1, p1, p1, p1, p1};
+ while (scaled_bilinear_scanline_sse2_8888_8_8888_OVER_dst) {
+ scaled_bilinear_scanline_sse2_8888_8_8888_OVER_m = mask++;
+ if (scaled_bilinear_scanline_sse2_8888_8_8888_OVER_m) {
+ __trans_tmp_12 =
+ (__m128i)((__v8hu)_mm_mullo_epi16___A * (__v8hu)__trans_tmp_6);
+ scaled_bilinear_scanline_sse2_8888_8_8888_OVER_xmm_b = __trans_tmp_12;
+ scaled_bilinear_scanline_sse2_8888_8_8888_OVER___trans_tmp_13 =
+ (__m128i)__builtin_ia32_psrlwi128((__v8hi)xmm_x, _mm_srli_epi16___B);
+ scaled_bilinear_scanline_sse2_8888_8_8888_OVER___trans_tmp_16 =
+ (__m128i)__builtin_ia32_pmaddwd128((__v8hi)__trans_tmp_5,
+ (__v8hi)_mm_madd_epi16___B);
+ _mm_cvtsi128_si32();
+ }
+ }
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr70300.c b/gcc/testsuite/gcc.target/i386/pr70300.c
new file mode 100644
index 0000000..ddfadfb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70300.c
@@ -0,0 +1,25 @@
+/* PR target/70300 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -mtune=amdfam10 -mavx512f" } */
+
+typedef _Complex A __attribute__ ((mode (SC)));
+typedef _Complex B __attribute__ ((mode (DC)));
+typedef _Complex C __attribute__ ((mode (TC)));
+
+C
+foo (A a, B b, C c, A d, B e, C f)
+{
+ b -= a;
+ d += a;
+ a += f;
+ return a + b + d + e;
+}
+
+__attribute__((target ("avx512vl"))) C
+bar (A a, B b, C c, A d, B e, C f)
+{
+ b -= a;
+ d += a;
+ a += f;
+ return a + b + d + e;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr70302.c b/gcc/testsuite/gcc.target/i386/pr70302.c
new file mode 100644
index 0000000..9b82a0c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70302.c
@@ -0,0 +1,22 @@
+/* { dg-do compile { target { ia32 } } } */
+/* { dg-options "-O2 -msse2" } */
+
+long a, c, e;
+int b, d;
+unsigned long long f;
+
+extern void fn2 (const char *, int, int, int);
+
+void
+fn1(long long p1)
+{
+ unsigned long long g;
+ int i;
+ for (; i;)
+ if (e)
+ g = c;
+ if (a)
+ f = p1;
+ if (!f && !g)
+ fn2("", b, d, d);
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr70325.c b/gcc/testsuite/gcc.target/i386/pr70325.c
new file mode 100644
index 0000000..e2b9342
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70325.c
@@ -0,0 +1,12 @@
+/* PR target/70325 */
+/* { dg-do compile } */
+/* { dg-options "-mavx512vl -O2" } */
+
+typedef char C __attribute((__vector_size__(32)));
+typedef int I __attribute((__vector_size__(32)));
+
+void
+f(int a,I b)
+{
+ __builtin_ia32_storedquqi256_mask((C*)f,(C)b,a); /* { dg-warning "implicit declaration of function" } */
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr70327.c b/gcc/testsuite/gcc.target/i386/pr70327.c
new file mode 100644
index 0000000..035bb68
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70327.c
@@ -0,0 +1,12 @@
+/* PR target/70327 */
+/* { dg-do compile } */
+/* { dg-require-effective-target int128 } */
+/* { dg-options "-mavx512f" } */
+
+typedef unsigned __int128 v4ti __attribute__ ((vector_size (64)));
+
+void
+foo (v4ti v)
+{
+ foo(v);
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr70355.c b/gcc/testsuite/gcc.target/i386/pr70355.c
new file mode 100644
index 0000000..b55f6fc
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70355.c
@@ -0,0 +1,14 @@
+/* { dg-require-effective-target int128 } */
+/* { dg-options "-O2 -fno-tree-ter -funroll-loops -mavx512f -g" } */
+
+typedef unsigned __int128 v2ti __attribute__ ((vector_size (32)));
+
+unsigned
+foo (unsigned i, v2ti v)
+{
+ do {
+ i--;
+ v %= ~v;
+ } while (i);
+ return v[0] + v[1];
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr70406.c b/gcc/testsuite/gcc.target/i386/pr70406.c
new file mode 100644
index 0000000..b75a5af
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70406.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target ia32 } */
+/* { dg-options "-O -mtune=pentium2 -mavx512f" } */
+
+typedef int v4si __attribute__ ((vector_size (16)));
+
+unsigned
+foo (unsigned char i, unsigned x, v4si u, v4si v, v4si w)
+{
+ i &= (unsigned)~x;
+ v <<= w[x];
+ return i + u[x] + v[i];
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr70453.c b/gcc/testsuite/gcc.target/i386/pr70453.c
new file mode 100644
index 0000000..2ff1fbb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70453.c
@@ -0,0 +1,18 @@
+/* PR target/70453 */
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target avx512vbmi } */
+/* { dg-options "-Og -fschedule-insns -mavx512vbmi" } */
+
+
+typedef char v64u8 __attribute__ ((vector_size (64)));
+typedef short v64u16 __attribute__ ((vector_size (64)));
+typedef __int128 v64u128 __attribute__ ((vector_size (64)));
+
+int
+foo(v64u8 v64u8_0, v64u16 v64u16_0, v64u128 v64u128_0)
+{
+ v64u128_0 /= (v64u128){ v64u8_0[28] } | 0x1424171b0c;
+ v64u8_0 %= (v64u8){ v64u16_0[25], v64u128_0[1]} ;
+ v64u128_0 %= (v64u128){ v64u16_0[8] };
+ return v64u8_0[0] + v64u8_0[1] + v64u16_0[0] + v64u128_0[0];
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr70467-2.c b/gcc/testsuite/gcc.target/i386/pr70467-2.c
new file mode 100644
index 0000000..4c1715c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70467-2.c
@@ -0,0 +1,20 @@
+/* PR rtl-optimization/70467 */
+/* { dg-do compile { target ia32 } } */
+/* { dg-options "-O2" } */
+
+unsigned long long
+foo (unsigned long long x)
+{
+ return x + 0x12345600000000ULL;
+}
+
+unsigned long long
+bar (unsigned long long x)
+{
+ return x - 0x12345600000000ULL;
+}
+
+/* { dg-final { scan-assembler-not "addl\[ \t\]*.0," } } */
+/* { dg-final { scan-assembler-not "subl\[ \t\]*.0," } } */
+/* { dg-final { scan-assembler-not "adcl\[^\n\r\]*%" } } */
+/* { dg-final { scan-assembler-not "sbbl\[^\n\r\]*%" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr70510.c b/gcc/testsuite/gcc.target/i386/pr70510.c
new file mode 100644
index 0000000..fdad97a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70510.c
@@ -0,0 +1,14 @@
+/* PR target/70510 */
+/* { dg-do assemble { target avx512bw } } */
+/* { dg-require-effective-target masm_intel } */
+/* { dg-options "-Og -mavx512bw -masm=intel" } */
+
+typedef int V __attribute__ ((vector_size (64)));
+
+V
+foo (V u, V v)
+{
+ v[0] |= v[u[0]];
+ u /= ((V)v)[0];
+ return u;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr70525.c b/gcc/testsuite/gcc.target/i386/pr70525.c
new file mode 100644
index 0000000..78ba752
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70525.c
@@ -0,0 +1,32 @@
+/* PR target/70525 */
+/* { dg-do assemble { target avx512bw } } */
+/* { dg-options "-O2 -mavx512bw -mno-avx512vl" } */
+
+typedef char v64qi __attribute__ ((vector_size (64)));
+typedef short v32hi __attribute__ ((vector_size (64)));
+typedef int v16si __attribute__ ((vector_size (64)));
+typedef long long v8di __attribute__ ((vector_size (64)));
+
+v64qi
+f1 (v64qi x, v64qi y)
+{
+ return x & ~y;
+}
+
+v32hi
+f2 (v32hi x, v32hi y)
+{
+ return x & ~y;
+}
+
+v16si
+f3 (v16si x, v16si y)
+{
+ return x & ~y;
+}
+
+v8di
+f4 (v8di x, v8di y)
+{
+ return x & ~y;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr70593.c b/gcc/testsuite/gcc.target/i386/pr70593.c
new file mode 100644
index 0000000..c013683
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70593.c
@@ -0,0 +1,19 @@
+/* PR middle-end/70593 */
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+
+__attribute__((noinline, noclone)) unsigned long
+foo (unsigned x)
+{
+ unsigned long a, c = x;
+ asm volatile ("xorl\t%k1, %k1\n\tmovl\t$7, %k0" : "=c" (c), "=a" (a) : "0" (c), "1" (c) : "memory");
+ return c;
+}
+
+int
+main ()
+{
+ if (foo (3) != 7)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr70596.c b/gcc/testsuite/gcc.target/i386/pr70596.c
new file mode 100644
index 0000000..0c73e83
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70596.c
@@ -0,0 +1,13 @@
+/* PR rtl-optimization/70596 */
+/* { dg-do compile { target avx512f } } */
+/* { dg-options "-O2 -fno-dce -fschedule-insns -fno-tree-coalesce-vars -fno-tree-dce -fno-tree-fre -fno-tree-pre -fcompare-debug -mavx512f" } */
+
+typedef char V __attribute__((vector_size (64)));
+
+int
+foo (V u, V v)
+{
+ v /= u | 1;
+ v[18] = 1 | v[8];
+ return v[1] + v[6] + v[0] + v[1] + v[18] + v[2] + v[7];
+}
diff --git a/gcc/testsuite/gcc.target/i386/stack-realign-win.c b/gcc/testsuite/gcc.target/i386/stack-realign-win.c
new file mode 100644
index 0000000..e27a565
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/stack-realign-win.c
@@ -0,0 +1,35 @@
+/* { dg-do compile { target *-*-mingw* *-*-cygwin* } } */
+/* { dg-require-effective-target ia32 } */
+/* { dg-options "-msse -O" } */
+
+extern void abort (void);
+
+typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__));
+
+static __m128
+load_m128 (float *e)
+{
+ return * (__m128 *) e;
+}
+
+typedef union
+{
+ __m128 x;
+ float a[4];
+} union128;
+
+void test (void)
+{
+ union128 u;
+ float e[4] __attribute__ ((aligned (16)))
+ = {2134.3343, 1234.635654, 1.2234, 876.8976};
+ int i;
+
+ u.x = load_m128 (e);
+
+ for (i = 0; i < 4; i++)
+ if (u.a[i] != e[i])
+ abort ();
+}
+
+/* { dg-final { scan-assembler "andl\\t\\$-16, %esp" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/altivec-36.c b/gcc/testsuite/gcc.target/powerpc/altivec-36.c
new file mode 100644
index 0000000..ce9e6a3
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/altivec-36.c
@@ -0,0 +1,46 @@
+/* PR target/70296 */
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-maltivec -std=gnu11" } */
+
+#define c(x) x
+#define f(x)
+#define i int
+#define k
+typedef int vector;
+typedef vector int V;
+vector int a;
+vector b;
+vector c(int) d;
+vector c(e);
+vector c;
+vector f(int) int g;
+vector f(int) h;
+vector i j;
+vector k int l;
+vector k m;
+#define int(x) x
+vector int n;
+vector int(int) o;
+vector int(r);
+#undef int
+
+void
+foo ()
+{
+ V *p;
+ p = &a;
+ p = &d;
+ p = &g;
+ p = &j;
+ p = &l;
+ p = &n;
+ p = &o;
+ int *q;
+ q = &b;
+ q = &e;
+ q = &c;
+ q = &h;
+ q = &m;
+ q = &r;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/float128-1.c b/gcc/testsuite/gcc.target/powerpc/float128-1.c
new file mode 100644
index 0000000..b8e71ce
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/float128-1.c
@@ -0,0 +1,147 @@
+/* { dg-do run { target { powerpc*-*-linux* } } } */
+/* { dg-require-effective-target ppc_float128_sw } */
+/* { dg-options "-mcpu=power7 -O2 -mfloat128 -static-libgcc" } */
+
+#ifdef DEBUG
+#include <stdio.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <inttypes.h>
+#endif
+
+#if !defined(__FLOAT128__) || !defined(_ARCH_PPC)
+static __float128
+pass_through (__float128 x)
+{
+ return x;
+}
+
+__float128 (*no_optimize) (__float128) = pass_through;
+#endif
+
+#ifdef DEBUG
+__attribute__((__noinline__))
+static void
+print_f128 (__float128 x)
+{
+ unsigned sign;
+ unsigned exponent;
+ uint64_t mantissa1;
+ uint64_t mantissa2;
+ uint64_t upper;
+ uint64_t lower;
+
+#if defined(_ARCH_PPC) && defined(__BIG_ENDIAN__)
+ struct ieee128 {
+ uint64_t upper;
+ uint64_t lower;
+ };
+
+#elif (defined(_ARCH_PPC) && defined(__LITTLE_ENDIAN__)) || defined(__x86_64__)
+ struct ieee128 {
+ uint64_t lower;
+ uint64_t upper;
+ };
+
+#else
+#error "Unknown system"
+#endif
+
+ union {
+ __float128 f128;
+ struct ieee128 s128;
+ } u;
+
+ u.f128 = x;
+ upper = u.s128.upper;
+ lower = u.s128.lower;
+
+ sign = (unsigned)((upper >> 63) & 1);
+ exponent = (unsigned)((upper >> 48) & ((((uint64_t)1) << 16) - 1));
+ mantissa1 = (upper & ((((uint64_t)1) << 48) - 1));
+ mantissa2 = lower;
+
+ printf ("%c 0x%.4x 0x%.12" PRIx64 " 0x%.16" PRIx64,
+ sign ? '-' : '+',
+ exponent,
+ mantissa1,
+ mantissa2);
+}
+#endif
+
+__attribute__((__noinline__))
+static void
+do_test (__float128 expected, __float128 got, const char *name)
+{
+ int equal_p = (expected == got);
+
+#ifdef DEBUG
+ printf ("Test %s, expected: ", name);
+ print_f128 (expected);
+ printf (" %5g, got: ", (double) expected);
+ print_f128 (got);
+ printf (" %5g, result %s\n",
+ (double) got,
+ (equal_p) ? "equal" : "not equal");
+#endif
+
+ if (!equal_p)
+ __builtin_abort ();
+}
+
+
+int
+main (void)
+{
+ __float128 one = 1.0q;
+ __float128 two = 2.0q;
+ __float128 three = 3.0q;
+ __float128 four = 4.0q;
+ __float128 five = 5.0q;
+ __float128 add_result = (1.0q + 2.0q);
+ __float128 mul_result = ((1.0q + 2.0q) * 3.0q);
+ __float128 div_result = (((1.0q + 2.0q) * 3.0q) / 4.0q);
+ __float128 sub_result = ((((1.0q + 2.0q) * 3.0q) / 4.0q) - 5.0q);
+ __float128 neg_result = - sub_result;
+ __float128 add_xresult;
+ __float128 mul_xresult;
+ __float128 div_xresult;
+ __float128 sub_xresult;
+ __float128 neg_xresult;
+
+#if defined(__FLOAT128__) && defined(_ARCH_PPC)
+ __asm__ (" #prevent constant folding, %x0" : "+wa" (one));
+ __asm__ (" #prevent constant folding, %x0" : "+wa" (two));
+ __asm__ (" #prevent constant folding, %x0" : "+wa" (three));
+ __asm__ (" #prevent constant folding, %x0" : "+wa" (four));
+ __asm__ (" #prevent constant folding, %x0" : "+wa" (five));
+
+#else
+ one = no_optimize (one);
+ two = no_optimize (two);
+ three = no_optimize (three);
+ four = no_optimize (four);
+ five = no_optimize (five);
+#endif
+
+ add_xresult = (one + two);
+ do_test (add_result, add_xresult, "add");
+
+ mul_xresult = add_xresult * three;
+ do_test (mul_result, mul_xresult, "mul");
+
+ div_xresult = mul_xresult / four;
+ do_test (div_result, div_xresult, "div");
+
+ sub_xresult = div_xresult - five;
+ do_test (sub_result, sub_xresult, "sub");
+
+ neg_xresult = - sub_xresult;
+ do_test (neg_result, neg_xresult, "neg");
+
+#ifdef DEBUG
+ printf ("Passed\n");
+#endif
+
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/float128-2.c b/gcc/testsuite/gcc.target/powerpc/float128-2.c
new file mode 100644
index 0000000..f517686
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/float128-2.c
@@ -0,0 +1,226 @@
+/* { dg-do run { target { powerpc*-*-linux* } } } */
+/* { dg-require-effective-target ppc_float128_sw } */
+/* { dg-options "-mcpu=power7 -O2 -mfloat128 -static-libgcc" } */
+
+/*
+ * Test program to make sure we are getting more precision than the 53 bits we
+ * get with IEEE double.
+ */
+
+#include <stdio.h>
+#include <math.h>
+#include <stdlib.h>
+#include <stddef.h>
+
+#ifndef TYPE
+#define TYPE __float128
+#endif
+
+#ifndef NO_INLINE
+#define NO_INLINE __attribute__((__noinline__))
+#endif
+
+static TYPE power_of_two (ssize_t) NO_INLINE;
+static TYPE calc1 (TYPE) NO_INLINE;
+static TYPE calc2 (TYPE) NO_INLINE;
+static TYPE calc3 (TYPE) NO_INLINE;
+
+#ifndef POWER2
+#define POWER2 60
+#endif
+
+
+/*
+ * Print TYPE in hex.
+ */
+
+
+#if defined(DEBUG) || defined(DEBUG2)
+static void print_hex (const char *prefix, TYPE, const char *suffix) NO_INLINE;
+
+#if defined (__i386__) || defined (__x86_64__) || defined (__LITTLE_ENDIAN__)
+#define ENDIAN_REVERSE(N, MAX) ((MAX) - 1 - (N))
+
+#else
+#define ENDIAN_REVERSE(N, MAX) (N)
+#endif
+
+static void
+print_hex (const char *prefix, TYPE value, const char *suffix)
+{
+ union {
+ TYPE f128;
+ unsigned char uc[sizeof (TYPE)];
+ } u;
+
+ size_t i;
+
+ u.f128 = value;
+ printf ("%s0x", prefix);
+ for (i = 0; i < sizeof (TYPE); i++)
+ printf ("%.2x", u.uc[ ENDIAN_REVERSE (i, sizeof (TYPE)) ]);
+
+ printf (", %24.2Lf%s", (long double)value, suffix);
+}
+#endif
+
+
+/*
+ * Return a power of two.
+ */
+
+static TYPE
+power_of_two (ssize_t num)
+{
+ TYPE ret = (TYPE) 1.0;
+ ssize_t i;
+
+ if (num >= 0)
+ {
+ for (i = 0; i < num; i++)
+ ret *= (TYPE) 2.0;
+ }
+ else
+ {
+ ssize_t num2 = -num;
+ for (i = 0; i < num2; i++)
+ ret /= (TYPE) 2.0;
+ }
+
+#ifdef DEBUG
+ printf ("power_of_two (%2ld) = ", (long) num);
+ print_hex ("", ret, "\n");
+#endif
+
+ return ret;
+}
+
+
+#ifdef ADDSUB
+static TYPE add (TYPE a, TYPE b) NO_INLINE;
+static TYPE sub (TYPE a, TYPE b) NO_INLINE;
+
+static TYPE
+add (TYPE a, TYPE b)
+{
+ TYPE c;
+#ifdef DEBUG
+ print_hex ("add, arg1 = ", a, "\n");
+ print_hex ("add, arg2 = ", b, "\n");
+#endif
+ c = a + b;
+#ifdef DEBUG
+ print_hex ("add, result = ", c, "\n");
+#endif
+ return c;
+}
+
+static TYPE
+sub (TYPE a, TYPE b)
+{
+ TYPE c;
+#ifdef DEBUG
+ print_hex ("sub, arg1 = ", a, "\n");
+ print_hex ("sub, arg2 = ", b, "\n");
+#endif
+ c = a - b;
+#ifdef DEBUG
+ print_hex ("sub, result = ", c, "\n");
+#endif
+ return c;
+}
+
+#else
+#define add(x, y) ((x) + (y))
+#define sub(x, y) ((x) - (y))
+#endif
+
+/*
+ * Various calculations. Add in 2**POWER2, and subtract 2**(POWER2-1) twice, and we should
+ * get the original value.
+ */
+
+static TYPE
+calc1 (TYPE num)
+{
+ TYPE num2 = add (power_of_two (POWER2), num);
+ TYPE ret;
+
+#ifdef DEBUG
+ print_hex ("calc1 (before call) = ", num2, "\n");
+#endif
+
+ ret = calc2 (num2);
+
+#ifdef DEBUG
+ print_hex ("calc1 (after call) = ", ret, "\n");
+#endif
+
+ return ret;
+}
+
+static TYPE
+calc2 (TYPE num)
+{
+ TYPE num2 = sub (num, power_of_two (POWER2-1));
+ TYPE ret;
+
+#ifdef DEBUG
+ print_hex ("calc2 (before call) = ", num2, "\n");
+#endif
+
+ ret = calc3 (num2);
+
+#ifdef DEBUG
+ print_hex ("calc2 (after call) = ", ret, "\n");
+#endif
+
+ return ret;
+}
+
+static TYPE
+calc3 (TYPE num)
+{
+ TYPE ret = sub (num, (((TYPE) 2.0) * power_of_two (POWER2-2)));
+
+#ifdef DEBUG
+ print_hex ("calc3 = ", ret, "\n");
+#endif
+
+ return ret;
+}
+
+
+int
+main (void)
+{
+ TYPE input, output;
+
+#ifdef DEBUG
+ printf ("Testing, %ld bytes\n", (long) sizeof (TYPE));
+#endif
+
+ input = power_of_two (-1);
+ if ((double)input != 0.5)
+ {
+#if defined(DEBUG) || defined(DEBUG2)
+ print_hex ("Input should be 0.5: ", output, "\n");
+ return 1;
+#else
+ __builtin_abort ();
+#endif
+ }
+
+ output = calc1 (input);
+ if ((double)output != 0.5)
+ {
+#if defined(DEBUG) || defined(DEBUG2)
+ print_hex ("Output should be 0.5: ", output, "\n");
+ return 1;
+#else
+ __builtin_abort ();
+#endif
+ }
+
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/fusion.c b/gcc/testsuite/gcc.target/powerpc/fusion.c
index 6f11c50..ed35006 100644
--- a/gcc/testsuite/gcc.target/powerpc/fusion.c
+++ b/gcc/testsuite/gcc.target/powerpc/fusion.c
@@ -1,28 +1,17 @@
-/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
+/* { dg-do compile { target { powerpc*-*-* } } } */
/* { 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=power7 -mtune=power8 -O3 -mcmodel=medium" } */
+/* { dg-options "-mcpu=power7 -mtune=power8 -O3" } */
-#define SIZE 4
-struct foo {
- unsigned char uc;
- signed char sc;
- unsigned short us;
- short ss;
- int i;
- unsigned u;
-};
+#define LARGE 0x12345
-static struct foo st[SIZE];
-struct foo *ptr_st = &st[0];
-
-int fusion_uchar (void){ return st[SIZE-1].uc; }
-int fusion_schar (void){ return st[SIZE-1].sc; }
-int fusion_ushort (void){ return st[SIZE-1].us; }
-int fusion_short (void){ return st[SIZE-1].ss; }
-int fusion_int (void){ return st[SIZE-1].i; }
-unsigned fusion_uns (void){ return st[SIZE-1].u; }
+int fusion_uchar (unsigned char *p){ return p[LARGE]; }
+int fusion_schar (signed char *p){ return p[LARGE]; }
+int fusion_ushort (unsigned short *p){ return p[LARGE]; }
+int fusion_short (short *p){ return p[LARGE]; }
+int fusion_int (int *p){ return p[LARGE]; }
+unsigned fusion_uns (unsigned *p){ return p[LARGE]; }
/* { dg-final { scan-assembler-times "gpr load fusion" 6 } } */
/* { dg-final { scan-assembler-times "lbz" 2 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/fusion3.c b/gcc/testsuite/gcc.target/powerpc/fusion3.c
index 2a8135d..8eca640 100644
--- a/gcc/testsuite/gcc.target/powerpc/fusion3.c
+++ b/gcc/testsuite/gcc.target/powerpc/fusion3.c
@@ -4,24 +4,15 @@
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */
/* { dg-options "-mcpu=power7 -mtune=power9 -O3" } */
-#define SIZE 4
-struct foo {
- float f;
- double d;
-};
+#define LARGE 0x12345
-static struct foo st[SIZE];
-struct foo *ptr_st = &st[0];
+int fusion_float_read (float *p){ return p[LARGE]; }
+int fusion_double_read (double *p){ return p[LARGE]; }
-float fusion_float_read (void){ return st[SIZE].f; }
-double fusion_float_extend (void){ return (double)st[SIZE].f; }
-double fusion_double_read (void){ return st[SIZE].d; }
+void fusion_float_write (float *p, float f){ p[LARGE] = f; }
+void fusion_double_write (double *p, double d){ p[LARGE] = d; }
-void fusion_float_write (float f){ st[SIZE].f = f; }
-void fusion_float_truncate (double d){ st[SIZE].f = (float)d; }
-void fusion_double_write (double d){ st[SIZE].d = d; }
-
-/* { dg-final { scan-assembler-times "load fusion, type SF" 2 } } */
-/* { dg-final { scan-assembler-times "load fusion, type DF" 1 } } */
-/* { dg-final { scan-assembler-times "store fusion, type SF" 2 } } */
-/* { dg-final { scan-assembler-times "store fusion, type DF" 1 } } */
+/* { dg-final { scan-assembler "load fusion, type SF" } } */
+/* { dg-final { scan-assembler "load fusion, type DF" } } */
+/* { dg-final { scan-assembler "store fusion, type SF" } } */
+/* { dg-final { scan-assembler "store fusion, type DF" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/p8vector-ldst.c b/gcc/testsuite/gcc.target/powerpc/p8vector-ldst.c
index 5da7388..de3f1b4 100644
--- a/gcc/testsuite/gcc.target/powerpc/p8vector-ldst.c
+++ b/gcc/testsuite/gcc.target/powerpc/p8vector-ldst.c
@@ -1,4 +1,4 @@
-/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
+/* { dg-do compile { target { powerpc*-*-* } } } */
/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
/* { dg-require-effective-target powerpc_p8vector_ok } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
@@ -51,13 +51,14 @@ load_store_sf (unsigned long num,
float value37 = 0.0f;
float value38 = 0.0f;
float value39 = 0.0f;
- unsigned long in_mask;
- unsigned long out_mask;
+ unsigned long in_mask, in_mask2;
+ unsigned long out_mask, out_mask2;
unsigned long i;
for (i = 0; i < num; i++)
{
in_mask = *in_mask_ptr++;
+ in_mask2 = *in_mask_ptr++;
if ((in_mask & (1L << 0)) != 0L)
value00 = *from_ptr++;
@@ -118,67 +119,68 @@ load_store_sf (unsigned long num,
if ((in_mask & (1L << 19)) != 0L)
value19 = *from_ptr++;
- if ((in_mask & (1L << 20)) != 0L)
+ if ((in_mask2 & (1L << 0)) != 0L)
value20 = *from_ptr++;
- if ((in_mask & (1L << 21)) != 0L)
+ if ((in_mask2 & (1L << 1)) != 0L)
value21 = *from_ptr++;
- if ((in_mask & (1L << 22)) != 0L)
+ if ((in_mask2 & (1L << 2)) != 0L)
value22 = *from_ptr++;
- if ((in_mask & (1L << 23)) != 0L)
+ if ((in_mask2 & (1L << 3)) != 0L)
value23 = *from_ptr++;
- if ((in_mask & (1L << 24)) != 0L)
+ if ((in_mask2 & (1L << 4)) != 0L)
value24 = *from_ptr++;
- if ((in_mask & (1L << 25)) != 0L)
+ if ((in_mask2 & (1L << 5)) != 0L)
value25 = *from_ptr++;
- if ((in_mask & (1L << 26)) != 0L)
+ if ((in_mask2 & (1L << 6)) != 0L)
value26 = *from_ptr++;
- if ((in_mask & (1L << 27)) != 0L)
+ if ((in_mask2 & (1L << 7)) != 0L)
value27 = *from_ptr++;
- if ((in_mask & (1L << 28)) != 0L)
+ if ((in_mask2 & (1L << 8)) != 0L)
value28 = *from_ptr++;
- if ((in_mask & (1L << 29)) != 0L)
+ if ((in_mask2 & (1L << 9)) != 0L)
value29 = *from_ptr++;
- if ((in_mask & (1L << 30)) != 0L)
+ if ((in_mask2 & (1L << 10)) != 0L)
value30 = *from_ptr++;
- if ((in_mask & (1L << 31)) != 0L)
+ if ((in_mask2 & (1L << 11)) != 0L)
value31 = *from_ptr++;
- if ((in_mask & (1L << 32)) != 0L)
+ if ((in_mask2 & (1L << 12)) != 0L)
value32 = *from_ptr++;
- if ((in_mask & (1L << 33)) != 0L)
+ if ((in_mask2 & (1L << 13)) != 0L)
value33 = *from_ptr++;
- if ((in_mask & (1L << 34)) != 0L)
+ if ((in_mask2 & (1L << 14)) != 0L)
value34 = *from_ptr++;
- if ((in_mask & (1L << 35)) != 0L)
+ if ((in_mask2 & (1L << 15)) != 0L)
value35 = *from_ptr++;
- if ((in_mask & (1L << 36)) != 0L)
+ if ((in_mask2 & (1L << 16)) != 0L)
value36 = *from_ptr++;
- if ((in_mask & (1L << 37)) != 0L)
+ if ((in_mask2 & (1L << 17)) != 0L)
value37 = *from_ptr++;
- if ((in_mask & (1L << 38)) != 0L)
+ if ((in_mask2 & (1L << 18)) != 0L)
value38 = *from_ptr++;
- if ((in_mask & (1L << 39)) != 0L)
+ if ((in_mask2 & (1L << 19)) != 0L)
value39 = *from_ptr++;
out_mask = *out_mask_ptr++;
+ out_mask2 = *out_mask_ptr++;
if ((out_mask & (1L << 0)) != 0L)
*to_ptr++ = value00;
@@ -239,64 +241,64 @@ load_store_sf (unsigned long num,
if ((out_mask & (1L << 19)) != 0L)
*to_ptr++ = value19;
- if ((out_mask & (1L << 20)) != 0L)
+ if ((out_mask2 & (1L << 0)) != 0L)
*to_ptr++ = value20;
- if ((out_mask & (1L << 21)) != 0L)
+ if ((out_mask2 & (1L << 1)) != 0L)
*to_ptr++ = value21;
- if ((out_mask & (1L << 22)) != 0L)
+ if ((out_mask2 & (1L << 2)) != 0L)
*to_ptr++ = value22;
- if ((out_mask & (1L << 23)) != 0L)
+ if ((out_mask2 & (1L << 3)) != 0L)
*to_ptr++ = value23;
- if ((out_mask & (1L << 24)) != 0L)
+ if ((out_mask2 & (1L << 4)) != 0L)
*to_ptr++ = value24;
- if ((out_mask & (1L << 25)) != 0L)
+ if ((out_mask2 & (1L << 5)) != 0L)
*to_ptr++ = value25;
- if ((out_mask & (1L << 26)) != 0L)
+ if ((out_mask2 & (1L << 6)) != 0L)
*to_ptr++ = value26;
- if ((out_mask & (1L << 27)) != 0L)
+ if ((out_mask2 & (1L << 7)) != 0L)
*to_ptr++ = value27;
- if ((out_mask & (1L << 28)) != 0L)
+ if ((out_mask2 & (1L << 8)) != 0L)
*to_ptr++ = value28;
- if ((out_mask & (1L << 29)) != 0L)
+ if ((out_mask2 & (1L << 9)) != 0L)
*to_ptr++ = value29;
- if ((out_mask & (1L << 30)) != 0L)
+ if ((out_mask2 & (1L << 10)) != 0L)
*to_ptr++ = value30;
- if ((out_mask & (1L << 31)) != 0L)
+ if ((out_mask2 & (1L << 11)) != 0L)
*to_ptr++ = value31;
- if ((out_mask & (1L << 32)) != 0L)
+ if ((out_mask2 & (1L << 12)) != 0L)
*to_ptr++ = value32;
- if ((out_mask & (1L << 33)) != 0L)
+ if ((out_mask2 & (1L << 13)) != 0L)
*to_ptr++ = value33;
- if ((out_mask & (1L << 34)) != 0L)
+ if ((out_mask2 & (1L << 14)) != 0L)
*to_ptr++ = value34;
- if ((out_mask & (1L << 35)) != 0L)
+ if ((out_mask2 & (1L << 15)) != 0L)
*to_ptr++ = value35;
- if ((out_mask & (1L << 36)) != 0L)
+ if ((out_mask2 & (1L << 16)) != 0L)
*to_ptr++ = value36;
- if ((out_mask & (1L << 37)) != 0L)
+ if ((out_mask2 & (1L << 17)) != 0L)
*to_ptr++ = value37;
- if ((out_mask & (1L << 38)) != 0L)
+ if ((out_mask2 & (1L << 18)) != 0L)
*to_ptr++ = value38;
- if ((out_mask & (1L << 39)) != 0L)
+ if ((out_mask2 & (1L << 19)) != 0L)
*to_ptr++ = value39;
}
@@ -357,13 +359,14 @@ load_store_df (unsigned long num,
double value37 = 0.0;
double value38 = 0.0;
double value39 = 0.0;
- unsigned long in_mask;
- unsigned long out_mask;
+ unsigned long in_mask, in_mask2;
+ unsigned long out_mask, out_mask2;
unsigned long i;
for (i = 0; i < num; i++)
{
in_mask = *in_mask_ptr++;
+ in_mask2 = *in_mask_ptr++;
if ((in_mask & (1L << 0)) != 0L)
value00 = *from_ptr++;
@@ -424,67 +427,68 @@ load_store_df (unsigned long num,
if ((in_mask & (1L << 19)) != 0L)
value19 = *from_ptr++;
- if ((in_mask & (1L << 20)) != 0L)
+ if ((in_mask2 & (1L << 0)) != 0L)
value20 = *from_ptr++;
- if ((in_mask & (1L << 21)) != 0L)
+ if ((in_mask2 & (1L << 1)) != 0L)
value21 = *from_ptr++;
- if ((in_mask & (1L << 22)) != 0L)
+ if ((in_mask2 & (1L << 2)) != 0L)
value22 = *from_ptr++;
- if ((in_mask & (1L << 23)) != 0L)
+ if ((in_mask2 & (1L << 3)) != 0L)
value23 = *from_ptr++;
- if ((in_mask & (1L << 24)) != 0L)
+ if ((in_mask2 & (1L << 4)) != 0L)
value24 = *from_ptr++;
- if ((in_mask & (1L << 25)) != 0L)
+ if ((in_mask2 & (1L << 5)) != 0L)
value25 = *from_ptr++;
- if ((in_mask & (1L << 26)) != 0L)
+ if ((in_mask2 & (1L << 6)) != 0L)
value26 = *from_ptr++;
- if ((in_mask & (1L << 27)) != 0L)
+ if ((in_mask2 & (1L << 7)) != 0L)
value27 = *from_ptr++;
- if ((in_mask & (1L << 28)) != 0L)
+ if ((in_mask2 & (1L << 8)) != 0L)
value28 = *from_ptr++;
- if ((in_mask & (1L << 29)) != 0L)
+ if ((in_mask2 & (1L << 9)) != 0L)
value29 = *from_ptr++;
- if ((in_mask & (1L << 30)) != 0L)
+ if ((in_mask2 & (1L << 10)) != 0L)
value30 = *from_ptr++;
- if ((in_mask & (1L << 31)) != 0L)
+ if ((in_mask2 & (1L << 11)) != 0L)
value31 = *from_ptr++;
- if ((in_mask & (1L << 32)) != 0L)
+ if ((in_mask2 & (1L << 12)) != 0L)
value32 = *from_ptr++;
- if ((in_mask & (1L << 33)) != 0L)
+ if ((in_mask2 & (1L << 13)) != 0L)
value33 = *from_ptr++;
- if ((in_mask & (1L << 34)) != 0L)
+ if ((in_mask2 & (1L << 14)) != 0L)
value34 = *from_ptr++;
- if ((in_mask & (1L << 35)) != 0L)
+ if ((in_mask2 & (1L << 15)) != 0L)
value35 = *from_ptr++;
- if ((in_mask & (1L << 36)) != 0L)
+ if ((in_mask2 & (1L << 16)) != 0L)
value36 = *from_ptr++;
- if ((in_mask & (1L << 37)) != 0L)
+ if ((in_mask2 & (1L << 17)) != 0L)
value37 = *from_ptr++;
- if ((in_mask & (1L << 38)) != 0L)
+ if ((in_mask2 & (1L << 18)) != 0L)
value38 = *from_ptr++;
- if ((in_mask & (1L << 39)) != 0L)
+ if ((in_mask2 & (1L << 19)) != 0L)
value39 = *from_ptr++;
out_mask = *out_mask_ptr++;
+ out_mask2 = *out_mask_ptr++;
if ((out_mask & (1L << 0)) != 0L)
*to_ptr++ = value00;
@@ -545,64 +549,64 @@ load_store_df (unsigned long num,
if ((out_mask & (1L << 19)) != 0L)
*to_ptr++ = value19;
- if ((out_mask & (1L << 20)) != 0L)
+ if ((out_mask2 & (1L << 0)) != 0L)
*to_ptr++ = value20;
- if ((out_mask & (1L << 21)) != 0L)
+ if ((out_mask2 & (1L << 1)) != 0L)
*to_ptr++ = value21;
- if ((out_mask & (1L << 22)) != 0L)
+ if ((out_mask2 & (1L << 2)) != 0L)
*to_ptr++ = value22;
- if ((out_mask & (1L << 23)) != 0L)
+ if ((out_mask2 & (1L << 3)) != 0L)
*to_ptr++ = value23;
- if ((out_mask & (1L << 24)) != 0L)
+ if ((out_mask2 & (1L << 4)) != 0L)
*to_ptr++ = value24;
- if ((out_mask & (1L << 25)) != 0L)
+ if ((out_mask2 & (1L << 5)) != 0L)
*to_ptr++ = value25;
- if ((out_mask & (1L << 26)) != 0L)
+ if ((out_mask2 & (1L << 6)) != 0L)
*to_ptr++ = value26;
- if ((out_mask & (1L << 27)) != 0L)
+ if ((out_mask2 & (1L << 7)) != 0L)
*to_ptr++ = value27;
- if ((out_mask & (1L << 28)) != 0L)
+ if ((out_mask2 & (1L << 8)) != 0L)
*to_ptr++ = value28;
- if ((out_mask & (1L << 29)) != 0L)
+ if ((out_mask2 & (1L << 9)) != 0L)
*to_ptr++ = value29;
- if ((out_mask & (1L << 30)) != 0L)
+ if ((out_mask2 & (1L << 10)) != 0L)
*to_ptr++ = value30;
- if ((out_mask & (1L << 31)) != 0L)
+ if ((out_mask2 & (1L << 11)) != 0L)
*to_ptr++ = value31;
- if ((out_mask & (1L << 32)) != 0L)
+ if ((out_mask2 & (1L << 12)) != 0L)
*to_ptr++ = value32;
- if ((out_mask & (1L << 33)) != 0L)
+ if ((out_mask2 & (1L << 13)) != 0L)
*to_ptr++ = value33;
- if ((out_mask & (1L << 34)) != 0L)
+ if ((out_mask2 & (1L << 14)) != 0L)
*to_ptr++ = value34;
- if ((out_mask & (1L << 35)) != 0L)
+ if ((out_mask2 & (1L << 15)) != 0L)
*to_ptr++ = value35;
- if ((out_mask & (1L << 36)) != 0L)
+ if ((out_mask2 & (1L << 16)) != 0L)
*to_ptr++ = value36;
- if ((out_mask & (1L << 37)) != 0L)
+ if ((out_mask2 & (1L << 17)) != 0L)
*to_ptr++ = value37;
- if ((out_mask & (1L << 38)) != 0L)
+ if ((out_mask2 & (1L << 18)) != 0L)
*to_ptr++ = value38;
- if ((out_mask & (1L << 39)) != 0L)
+ if ((out_mask2 & (1L << 19)) != 0L)
*to_ptr++ = value39;
}
diff --git a/gcc/testsuite/gcc.target/powerpc/p9-lxvx-stxvx-1.c b/gcc/testsuite/gcc.target/powerpc/p9-lxvx-stxvx-1.c
index df25d55..0956420 100644
--- a/gcc/testsuite/gcc.target/powerpc/p9-lxvx-stxvx-1.c
+++ b/gcc/testsuite/gcc.target/powerpc/p9-lxvx-stxvx-1.c
@@ -1,5 +1,6 @@
/* { dg-do compile { target { powerpc64le-*-* } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
+/* { dg-require-effective-target powerpc_p9vector_ok } */
/* { dg-options "-mcpu=power9 -O3" } */
/* { dg-final { scan-assembler "lxvx" } } */
/* { dg-final { scan-assembler "stxvx" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/p9-lxvx-stxvx-2.c b/gcc/testsuite/gcc.target/powerpc/p9-lxvx-stxvx-2.c
index 853a456..27e32a6 100644
--- a/gcc/testsuite/gcc.target/powerpc/p9-lxvx-stxvx-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/p9-lxvx-stxvx-2.c
@@ -1,5 +1,6 @@
/* { dg-do compile { target { powerpc64le-*-* } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
+/* { dg-require-effective-target powerpc_p9vector_ok } */
/* { dg-options "-mcpu=power9 -O1" } */
/* { dg-final { scan-assembler "lxvx" } } */
/* { dg-final { scan-assembler "stvewx" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/p9-lxvx-stxvx-3.c b/gcc/testsuite/gcc.target/powerpc/p9-lxvx-stxvx-3.c
index b298173..4947386 100644
--- a/gcc/testsuite/gcc.target/powerpc/p9-lxvx-stxvx-3.c
+++ b/gcc/testsuite/gcc.target/powerpc/p9-lxvx-stxvx-3.c
@@ -1,6 +1,7 @@
/* { dg-do compile { target { powerpc64le-*-* } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
/* { dg-options "-mcpu=power9 -O3" } */
+/* { dg-require-effective-target powerpc_p9vector_ok } */
/* { dg-final { scan-assembler "lxvx" } } */
/* { dg-final { scan-assembler "stxvx" } } */
/* { dg-final { scan-assembler-not "lxvd2x" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/p9-permute.c b/gcc/testsuite/gcc.target/powerpc/p9-permute.c
index 3496d5e..f090f18 100644
--- a/gcc/testsuite/gcc.target/powerpc/p9-permute.c
+++ b/gcc/testsuite/gcc.target/powerpc/p9-permute.c
@@ -1,6 +1,7 @@
/* { dg-do compile { target { powerpc64le-*-* } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
/* { dg-options "-mcpu=power9 -O2" } */
+/* { dg-require-effective-target powerpc_p9vector_ok } */
#include <altivec.h>
diff --git a/gcc/testsuite/gcc.target/powerpc/ppc-round2.c b/gcc/testsuite/gcc.target/powerpc/ppc-round2.c
new file mode 100644
index 0000000..39375a0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/ppc-round2.c
@@ -0,0 +1,42 @@
+/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-O2 -mcpu=power8" } */
+/* { dg-final { scan-assembler-times "fcfid " 2 } } */
+/* { dg-final { scan-assembler-times "fcfids " 2 } } */
+/* { dg-final { scan-assembler-times "fctiwuz " 2 } } */
+/* { dg-final { scan-assembler-times "fctiwz " 2 } } */
+/* { dg-final { scan-assembler-times "mfvsrd " 4 } } */
+/* { dg-final { scan-assembler-times "mtvsrwa " 2 } } */
+/* { dg-final { scan-assembler-times "mtvsrwz " 2 } } */
+/* { dg-final { scan-assembler-not "lwz" } } */
+/* { dg-final { scan-assembler-not "lfiwax " } } */
+/* { dg-final { scan-assembler-not "lfiwzx " } } */
+/* { dg-final { scan-assembler-not "stw" } } */
+/* { dg-final { scan-assembler-not "stfiwx " } } */
+
+/* Make sure we don't have loads/stores to the GPR unit. */
+double
+round_double_int (double a)
+{
+ return (double)(int)a;
+}
+
+float
+round_float_int (float a)
+{
+ return (float)(int)a;
+}
+
+double
+round_double_uint (double a)
+{
+ return (double)(unsigned int)a;
+}
+
+float
+round_float_uint (float a)
+{
+ return (float)(unsigned int)a;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/pr69946.c b/gcc/testsuite/gcc.target/powerpc/pr69946.c
new file mode 100644
index 0000000..eb0c365
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr69946.c
@@ -0,0 +1,38 @@
+/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
+/* { dg-skip-if "" { powerpc_elfv2 } } */
+/* { dg-options "-O2" } */
+
+/* This generates a rotate:DI by 44, with mask 0xf00, which is implemented
+ using a rlwinm instruction. We used to write 44 for the shift count
+ there; it should be 12. */
+
+struct A
+{
+ int a : 4;
+ int : 2;
+ int b : 2;
+ int : 2;
+ int c : 2;
+ int d : 1;
+ int e;
+};
+struct B
+{
+ int a : 4;
+} *a;
+void bar (struct A);
+
+void
+foo (void)
+{
+ struct B b = a[0];
+ struct A c;
+ c.a = b.a;
+ c.b = 1;
+ c.c = 1;
+ c.d = 0;
+ bar (c);
+}
+
+/* { dg-final { scan-assembler-not {(?n)rlwinm.*,44,20,23} } } */
+/* { dg-final { scan-assembler-times {(?n)rlwinm.*,12,20,23} 1 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/pr69969.c b/gcc/testsuite/gcc.target/powerpc/pr69969.c
new file mode 100644
index 0000000..1ca2c75
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr69969.c
@@ -0,0 +1,7 @@
+/* PR target/69969 */
+/* { dg-do compile } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-mcpu=power8" } */
+
+int bar (int x) { return x; }
+__attribute__((__target__("no-vsx"))) int foo (int x) { return x; } /* { dg-bogus "-mallow-movmisalign requires -mvsx" } */
diff --git a/gcc/testsuite/gcc.target/powerpc/pr70117.c b/gcc/testsuite/gcc.target/powerpc/pr70117.c
new file mode 100644
index 0000000..f1fdedb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr70117.c
@@ -0,0 +1,92 @@
+/* { dg-do run { target { powerpc*-*-linux* powerpc*-*-darwin* powerpc*-*-aix* rs6000-*-* } } } */
+/* { dg-options "-std=c99 -mlong-double-128 -O2" } */
+
+#include <float.h>
+
+union gl_long_double_union
+{
+ struct { double hi; double lo; } dd;
+ long double ld;
+};
+
+/* This is gnulib's LDBL_MAX which, being 107 bits in precision, is
+ slightly larger than gcc's 106 bit precision LDBL_MAX. */
+volatile union gl_long_double_union gl_LDBL_MAX =
+ { { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL } };
+
+volatile double min_denorm = 0x1p-1074;
+volatile double ld_low = 0x1p-969;
+volatile double dinf = 1.0/0.0;
+volatile double dnan = 0.0/0.0;
+
+int
+main (void)
+{
+ long double ld;
+
+ ld = gl_LDBL_MAX.ld;
+ if (__builtin_isinfl (ld))
+ __builtin_abort ();
+ ld = -gl_LDBL_MAX.ld;
+ if (__builtin_isinfl (ld))
+ __builtin_abort ();
+
+ ld = gl_LDBL_MAX.ld;
+ if (!__builtin_isfinite (ld))
+ __builtin_abort ();
+ ld = -gl_LDBL_MAX.ld;
+ if (!__builtin_isfinite (ld))
+ __builtin_abort ();
+
+ ld = ld_low;
+ if (!__builtin_isnormal (ld))
+ __builtin_abort ();
+ ld = -ld_low;
+ if (!__builtin_isnormal (ld))
+ __builtin_abort ();
+
+ ld = -min_denorm;
+ ld += ld_low;
+ if (__builtin_isnormal (ld))
+ __builtin_abort ();
+ ld = min_denorm;
+ ld -= ld_low;
+ if (__builtin_isnormal (ld))
+ __builtin_abort ();
+
+ ld = 0.0;
+ if (__builtin_isnormal (ld))
+ __builtin_abort ();
+ ld = -0.0;
+ if (__builtin_isnormal (ld))
+ __builtin_abort ();
+
+ ld = LDBL_MAX;
+ if (!__builtin_isnormal (ld))
+ __builtin_abort ();
+ ld = -LDBL_MAX;
+ if (!__builtin_isnormal (ld))
+ __builtin_abort ();
+
+ ld = gl_LDBL_MAX.ld;
+ if (!__builtin_isnormal (ld))
+ __builtin_abort ();
+ ld = -gl_LDBL_MAX.ld;
+ if (!__builtin_isnormal (ld))
+ __builtin_abort ();
+
+ ld = dinf;
+ if (__builtin_isnormal (ld))
+ __builtin_abort ();
+ ld = -dinf;
+ if (__builtin_isnormal (ld))
+ __builtin_abort ();
+
+ ld = dnan;
+ if (__builtin_isnormal (ld))
+ __builtin_abort ();
+ ld = -dnan;
+ if (__builtin_isnormal (ld))
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/pr70640.c b/gcc/testsuite/gcc.target/powerpc/pr70640.c
new file mode 100644
index 0000000..7b991c4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr70640.c
@@ -0,0 +1,11 @@
+/* { dg-do compile { target { powerpc*-*-linux* } } } */
+/* { dg-require-effective-target powerpc_float128_sw_ok } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-O2 -mcpu=power8 -mfloat128" } */
+
+__float128 foo (__float128 a) { return -a; }
+
+/* { dg-final { scan-assembler "xxlorc" } } */
+/* { dg-final { scan-assembler "xxlxor" } } */
+/* { dg-final { scan-assembler "vslb" } } */
+/* { dg-final { scan-assembler "vsldoi" } } */
diff --git a/gcc/testsuite/gcc.target/s390/dfp-1.c b/gcc/testsuite/gcc.target/s390/dfp-1.c
new file mode 100644
index 0000000..109d9fb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/dfp-1.c
@@ -0,0 +1,23 @@
+/* We do not have a direct conversion instruction from 128 bit DFP to
+ 32 bit DFP so this needs to be done in two steps. The first needs
+ to be done with the "prepare for shorter precision rounding mode"
+ in order to produce a correct result. Otherwise the 8th digit of
+ the number will change from 4 to 5 in the first rounding step which
+ then will turn the last digit of the 32 bit DFP number (the 3) into
+ a 4. Although with direct rounding it would stay a 3. */
+
+/* { dg-do run } */
+/* { dg-options "-O3 -march=z10 -mzarch" } */
+
+_Decimal32 __attribute__((noinline))
+foo (_Decimal128 a)
+{
+ return (_Decimal32)a;
+}
+
+int
+main ()
+{
+ if (foo (1.23456349999999999DL) != 1.234563DF)
+ __builtin_abort ();
+}
diff --git a/gcc/testsuite/gcc.target/s390/md/movstr-1.c b/gcc/testsuite/gcc.target/s390/md/movstr-1.c
index 7da749b..b83ed6d 100644
--- a/gcc/testsuite/gcc.target/s390/md/movstr-1.c
+++ b/gcc/testsuite/gcc.target/s390/md/movstr-1.c
@@ -1,7 +1,7 @@
/* Machine description pattern tests. */
-/* { dg-do run } */
-/* { dg-options "-dP -save-temps" } */
+/* { dg-do compile } */
+/* { dg-options "-dP" } */
__attribute__ ((noinline))
void test(char *dest, const char *src)
@@ -9,16 +9,4 @@ void test(char *dest, const char *src)
__builtin_stpcpy (dest, src);
}
-/* { dg-final { scan-assembler-times {{[*]movstr}} 1 } } */
-
-#define LEN 200
-char buf[LEN];
-
-int main(void)
-{
- __builtin_memset(buf, 0, LEN);
- test(buf, "hello world!");
- if (__builtin_strcmp(buf, "hello world!") != 0)
- __builtin_abort();
- return 0;
-}
+/* { dg-final { scan-assembler-times {{[*]movstr}|{vec_vfenesv16qi}} 1 } } */
diff --git a/gcc/testsuite/gcc.target/s390/morestack.c b/gcc/testsuite/gcc.target/s390/morestack.c
new file mode 100644
index 0000000..aa28b72
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/morestack.c
@@ -0,0 +1,260 @@
+/* Checks proper behavior of __morestack function - specifically, GPR
+ values surviving, stack parameters being copied, and vararg
+ pointer being correct. */
+
+/* { dg-do run } */
+/* { dg-options "" } */
+
+#include <stdlib.h>
+
+void *orig_r15;
+
+/* 1. Function "test" saves registers, makes a stack frame, puts known
+ * values in registers, and calls __morestack, telling it to jump to
+ * testinner, with return address pointing to "testret".
+ * 2. "testinner" checks that parameter registers match what has been
+ * passed from "test", stack parameters were copied properly to
+ * the new stack, and the argument pointer matches the calling
+ * function's stack pointer. It then leaves new values in volatile
+ * registers (including return value registers) and returns.
+ * 3. "testret" checks that return value registers contain the expected
+ * return value, callee-saved GPRs match the values from "test",
+ * and then returns to main. */
+
+extern unsigned long testparams[3];
+
+#ifdef __s390x__
+
+asm(
+ ".global test\n"
+ "test:\n"
+ ".type test, @function\n"
+ /* Save registers. */
+ "stmg %r6, %r15, 0x30(%r15)\n"
+ /* Save original sp in a global. */
+ "larl %r1, orig_r15\n"
+ "stg %r15, 0(%r1)\n"
+ /* Make a stack frame. */
+ "aghi %r15, -168\n"
+ /* A stack parameter. */
+ "lghi %r1, 0x1240\n"
+ "stg %r1, 160(%r15)\n"
+ /* Registers. */
+ "lghi %r0, 0x1230\n"
+ "lghi %r2, 0x1232\n"
+ "lghi %r3, 0x1233\n"
+ "lghi %r4, 0x1234\n"
+ "lghi %r5, 0x1235\n"
+ "lghi %r6, 0x1236\n"
+ "lghi %r7, 0x1237\n"
+ "lghi %r8, 0x1238\n"
+ "lghi %r9, 0x1239\n"
+ "lghi %r10, 0x123a\n"
+ "lghi %r11, 0x123b\n"
+ "lghi %r12, 0x123c\n"
+ "lghi %r13, 0x123d\n"
+ /* Fake return address. */
+ "larl %r14, testret\n"
+ /* Call morestack. */
+ "larl %r1, testparams\n"
+ "jg __morestack\n"
+
+ /* Entry point. */
+ "testinner:\n"
+ /* Check registers. */
+ "cghi %r0, 0x1230\n"
+ "jne testerr\n"
+ "cghi %r2, 0x1232\n"
+ "jne testerr\n"
+ "cghi %r3, 0x1233\n"
+ "jne testerr\n"
+ "cghi %r4, 0x1234\n"
+ "jne testerr\n"
+ "cghi %r5, 0x1235\n"
+ "jne testerr\n"
+ "cghi %r6, 0x1236\n"
+ "jne testerr\n"
+ /* Check stack param. */
+ "lg %r0, 0xa0(%r15)\n"
+ "cghi %r0, 0x1240\n"
+ "jne testerr\n"
+ /* Check argument pointer. */
+ "aghi %r1, 8\n"
+ "larl %r2, orig_r15\n"
+ "cg %r1, 0(%r2)\n"
+ "jne testerr\n"
+ /* Modify volatile registers. */
+ "lghi %r0, 0x1250\n"
+ "lghi %r1, 0x1251\n"
+ "lghi %r2, 0x1252\n"
+ "lghi %r3, 0x1253\n"
+ "lghi %r4, 0x1254\n"
+ "lghi %r5, 0x1255\n"
+ /* Return. */
+ "br %r14\n"
+
+ /* Returns here. */
+ "testret:\n"
+ /* Check return registers. */
+ "cghi %r2, 0x1252\n"
+ "jne testerr\n"
+ /* Check callee-saved registers. */
+ "cghi %r6, 0x1236\n"
+ "jne testerr\n"
+ "cghi %r7, 0x1237\n"
+ "jne testerr\n"
+ "cghi %r8, 0x1238\n"
+ "jne testerr\n"
+ "cghi %r9, 0x1239\n"
+ "jne testerr\n"
+ "cghi %r10, 0x123a\n"
+ "jne testerr\n"
+ "cghi %r11, 0x123b\n"
+ "jne testerr\n"
+ "cghi %r12, 0x123c\n"
+ "jne testerr\n"
+ "cghi %r13, 0x123d\n"
+ "jne testerr\n"
+ /* Return. */
+ "lmg %r6, %r15, 0xd8(%r15)\n"
+ "br %r14\n"
+
+ /* Parameters block. */
+ ".section .data\n"
+ ".align 8\n"
+ "testparams:\n"
+ ".quad 160\n"
+ ".quad 8\n"
+ ".quad testinner-testparams\n"
+ ".text\n"
+);
+
+#else
+
+asm(
+ ".global test\n"
+ "test:\n"
+ ".type test, @function\n"
+ /* Save registers. */
+ "stm %r6, %r15, 0x18(%r15)\n"
+ /* Save original sp in a global. */
+ "larl %r1, orig_r15\n"
+ "st %r15, 0(%r1)\n"
+ /* Make a stack frame. */
+ "ahi %r15, -0x68\n"
+ /* A stack parameter. */
+ "lhi %r1, 0x1240\n"
+ "st %r1, 0x60(%r15)\n"
+ "lhi %r1, 0x1241\n"
+ "st %r1, 0x64(%r15)\n"
+ /* Registers. */
+ "lhi %r0, 0x1230\n"
+ "lhi %r2, 0x1232\n"
+ "lhi %r3, 0x1233\n"
+ "lhi %r4, 0x1234\n"
+ "lhi %r5, 0x1235\n"
+ "lhi %r6, 0x1236\n"
+ "lhi %r7, 0x1237\n"
+ "lhi %r8, 0x1238\n"
+ "lhi %r9, 0x1239\n"
+ "lhi %r10, 0x123a\n"
+ "lhi %r11, 0x123b\n"
+ "lhi %r12, 0x123c\n"
+ "lhi %r13, 0x123d\n"
+ /* Fake return address. */
+ "larl %r14, testret\n"
+ /* Call morestack. */
+ "larl %r1, testparams\n"
+ "jg __morestack\n"
+
+ /* Entry point. */
+ "testinner:\n"
+ /* Check registers. */
+ "chi %r0, 0x1230\n"
+ "jne testerr\n"
+ "chi %r2, 0x1232\n"
+ "jne testerr\n"
+ "chi %r3, 0x1233\n"
+ "jne testerr\n"
+ "chi %r4, 0x1234\n"
+ "jne testerr\n"
+ "chi %r5, 0x1235\n"
+ "jne testerr\n"
+ "chi %r6, 0x1236\n"
+ "jne testerr\n"
+ /* Check stack param. */
+ "l %r0, 0x60(%r15)\n"
+ "chi %r0, 0x1240\n"
+ "jne testerr\n"
+ "l %r0, 0x64(%r15)\n"
+ "chi %r0, 0x1241\n"
+ "jne testerr\n"
+ /* Check argument pointer. */
+ "ahi %r1, 8\n"
+ "larl %r2, orig_r15\n"
+ "c %r1, 0(%r2)\n"
+ "jne testerr\n"
+ /* Modify volatile registers. */
+ "lhi %r0, 0x1250\n"
+ "lhi %r1, 0x1251\n"
+ "lhi %r2, 0x1252\n"
+ "lhi %r3, 0x1253\n"
+ "lhi %r4, 0x1254\n"
+ "lhi %r5, 0x1255\n"
+ /* Return. */
+ "br %r14\n"
+
+ /* Returns here. */
+ "testret:\n"
+ /* Check return registers. */
+ "chi %r2, 0x1252\n"
+ "jne testerr\n"
+ "chi %r3, 0x1253\n"
+ "jne testerr\n"
+ /* Check callee-saved registers. */
+ "chi %r6, 0x1236\n"
+ "jne testerr\n"
+ "chi %r7, 0x1237\n"
+ "jne testerr\n"
+ "chi %r8, 0x1238\n"
+ "jne testerr\n"
+ "chi %r9, 0x1239\n"
+ "jne testerr\n"
+ "chi %r10, 0x123a\n"
+ "jne testerr\n"
+ "chi %r11, 0x123b\n"
+ "jne testerr\n"
+ "chi %r12, 0x123c\n"
+ "jne testerr\n"
+ "chi %r13, 0x123d\n"
+ "jne testerr\n"
+ /* Return. */
+ "lm %r6, %r15, 0x80(%r15)\n"
+ "br %r14\n"
+
+ /* Parameters block. */
+ ".section .data\n"
+ ".align 4\n"
+ "testparams:\n"
+ ".long 96\n"
+ ".long 8\n"
+ ".long testinner-testparams\n"
+ ".text\n"
+);
+
+#endif
+
+_Noreturn void testerr (void) {
+ exit(1);
+}
+
+extern void test (void);
+
+int main (void) {
+ test();
+ /* Now try again, with huge stack frame requested - to exercise
+ both paths in __morestack (new allocation needed or not). */
+ testparams[0] = 1000000;
+ test();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/s390/pr69625.c b/gcc/testsuite/gcc.target/s390/pr69625.c
new file mode 100644
index 0000000..f717183
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/pr69625.c
@@ -0,0 +1,37 @@
+/* Test for PR 69625; make sure that a leaf vararg function does not overwrite
+ the caller's r6. */
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+
+extern void abort (void);
+
+__attribute__ ((noinline))
+int
+foo (int x, ...)
+{
+ __builtin_va_list vl;
+ int i;
+
+ __asm__ __volatile__ ("lhi %%r6,1" : : : "r6");
+ __builtin_va_start(vl, x);
+ for (i = 2; i <= 6; i++)
+ x += __builtin_va_arg(vl, int);
+ __builtin_va_end (vl);
+
+ return x;
+}
+
+__attribute__ ((noinline))
+void
+bar (int r2, int r3, int r4, int r5, int r6)
+{
+ foo (r2, r3, r4, r5, r6);
+ if (r6 != 6)
+ abort ();
+}
+
+int
+main (void)
+{
+ bar (2, 3, 4, 5, 6);
+}
diff --git a/gcc/testsuite/gcc.target/s390/pr69709.c b/gcc/testsuite/gcc.target/s390/pr69709.c
new file mode 100644
index 0000000..e9aa024
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/pr69709.c
@@ -0,0 +1,39 @@
+/* PR69709 This testcase used to fail due to a broken risbg
+ splitter. */
+
+/* { dg-do run } */
+/* { dg-options "-O3 -march=z10" } */
+
+
+typedef struct
+{
+ unsigned int sig[2];
+}
+val_t;
+
+unsigned int __attribute__ ((noinline))
+div_significands (const val_t * a)
+{
+ val_t u = *a;
+ int bit = 64;
+ unsigned int r;
+ do
+ {
+ u.sig[1] = (u.sig[1] << 1) | (u.sig[0] >> 31);
+ u.sig[0] = 42;
+
+ if (bit == 64)
+ r = u.sig[1];
+ }
+ while (--bit >= 0);
+ return r;
+}
+
+int
+main (void)
+{
+ val_t a = { { 0x1, 0x1 } };
+ if (div_significands (&a) != 2)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/s390/vector/int128-1.c b/gcc/testsuite/gcc.target/s390/vector/int128-1.c
new file mode 100644
index 0000000..b4a16b8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/vector/int128-1.c
@@ -0,0 +1,47 @@
+/* Check that vaq/vsq are used for int128 operations. */
+
+/* { dg-do compile { target { lp64 } } } */
+/* { dg-options "-O3 -mzarch -march=z13" } */
+
+
+const __int128 c = (__int128)0x0123456789abcd55 + ((__int128)7 << 64);
+
+
+__int128
+addreg(__int128 a, __int128 b)
+{
+ return a + b;
+}
+
+__int128
+addconst(__int128 a)
+{
+ return a + c;
+}
+
+__int128
+addmem(__int128 *a, __int128_t *b)
+{
+ return *a + *b;
+}
+
+__int128
+subreg(__int128 a, __int128 b)
+{
+ return a - b;
+}
+
+__int128
+subconst(__int128 a)
+{
+ return a - c; /* This becomes vaq as well. */
+}
+
+__int128
+submem(__int128 *a, __int128_t *b)
+{
+ return *a - *b;
+}
+
+/* { dg-final { scan-assembler-times "vaq" 4 } } */
+/* { dg-final { scan-assembler-times "vsq" 2 } } */
diff --git a/gcc/testsuite/gcc.target/s390/vector/stpcpy-1.c b/gcc/testsuite/gcc.target/s390/vector/stpcpy-1.c
new file mode 100644
index 0000000..91c1f7c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/vector/stpcpy-1.c
@@ -0,0 +1,100 @@
+/* The z13 stpcpy implementation plays some alignment tricks for good
+ performance. This test tries to make sure it works correctly and
+ does not access bytes beyond the source and destination
+ strings. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target vector } */
+/* { dg-options "-O3 -mzarch -march=z13" } */
+
+#include <stdio.h>
+#include <sys/mman.h>
+
+#define PAGE_SIZE 4096
+
+struct {
+ char unused[PAGE_SIZE - 32];
+ char m32[15]; /* page bndry - 32 */
+ char m17[1];
+ char m16[1];
+ char m15[14];
+ char m1[1];
+ char next_page[PAGE_SIZE];
+} s, d __attribute__((aligned(PAGE_SIZE)));
+
+char *__attribute__((noinline))
+my_stpcpy(char *dest, const char *src)
+{
+ return __builtin_stpcpy (dest, src);
+}
+
+void __attribute__ ((noinline))
+check (char *dest, char *src, size_t len)
+{
+ char *result;
+
+ result = my_stpcpy (dest, src);
+ if (result != dest + len)
+ __builtin_abort ();
+ if (__builtin_memcmp (src, dest, len) != 0)
+ __builtin_abort ();
+}
+
+int
+main ()
+{
+ char *src[5] = { s.m32, s.m17, s.m16, s.m15, s.m1 };
+ char *dst[5] = { d.m32, d.m17, d.m16, d.m15, d.m1 };
+ int len[8] = { 33, 32, 31, 17, 16, 15, 1, 0 };
+ int i, j, k;
+ char backup;
+
+ for (i = 0; i < sizeof (s); i++)
+ ((char*)&s)[i] = i % 26 + 97;
+
+ for (i = 0; i < 5; i++)
+ for (j = 0; j < 5; j++)
+ for (k = 0; k < 8; k++)
+ {
+ backup = src[j][len[k]];
+ src[j][len[k]] = 0;
+ __builtin_memset (&d, 0, sizeof (d));
+ check (dst[i], src[j], len[k]);
+ src[j][len[k]] = backup;
+ }
+
+ /* Make all source strings end before the page boundary. */
+ backup = s.m1[0];
+ s.m1[0] = 0;
+
+ if (mprotect (&s.next_page, PAGE_SIZE, PROT_NONE) == -1)
+ perror ("mprotect src");
+
+ for (i = 0; i < 5; i++)
+ for (j = 0; j < 5; j++)
+ check (dst[i], src[j],
+ PAGE_SIZE - ((unsigned long)src[j] & ((1UL << 12) - 1)) - 1);
+
+ if (mprotect (&s.next_page, PAGE_SIZE, PROT_READ | PROT_WRITE) == -1)
+ perror ("mprotect src");
+
+ s.m1[0] = backup;
+
+ if (mprotect (&d.next_page, PAGE_SIZE, PROT_NONE) == -1)
+ perror ("mprotect dst");
+
+ for (i = 0; i < 5; i++)
+ for (j = 0; j < 5; j++)
+ {
+ int len = PAGE_SIZE - ((unsigned long)dst[i] & ((1UL << 12) - 1)) - 1;
+ char backup = src[j][len];
+
+ src[j][len] = 0;
+ __builtin_memset (&d, 0,
+ (unsigned long)&d.next_page - (unsigned long)&d);
+ check (dst[i], src[j], len);
+ src[j][len] = backup;
+ }
+
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/s390/vcond-shift.c b/gcc/testsuite/gcc.target/s390/vector/vcond-shift.c
index f58bd1f..f58bd1f 100644
--- a/gcc/testsuite/gcc.target/s390/vcond-shift.c
+++ b/gcc/testsuite/gcc.target/s390/vector/vcond-shift.c
diff --git a/gcc/testsuite/gcc.target/s390/vector/vec-vcond-1.c b/gcc/testsuite/gcc.target/s390/vector/vec-vcond-1.c
new file mode 100644
index 0000000..ec65c6f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/vector/vec-vcond-1.c
@@ -0,0 +1,23 @@
+/* A const vector operand is forced into a register in
+ s390_expand_vcond.
+ This testcase once failed because the target mode (v2di) was picked
+ for the reg instead of the mode of the other comparison
+ operand. */
+
+/* { dg-do compile { target { s390*-*-* } } } */
+/* { dg-options "-O3 -mzarch -march=z13" } */
+
+typedef __attribute__((vector_size(16))) long v2di;
+typedef __attribute__((vector_size(16))) double v2df;
+
+v2di
+foo (v2df a)
+{
+ return a == (v2df){ 0.0, 0.0 };
+}
+
+v2di
+bar (v2df a)
+{
+ return (v2df){ 1.0, 1.0 } == (v2df){ 0.0, 0.0 };
+}
diff --git a/gcc/testsuite/gcc.target/sh/pr54089-10.c b/gcc/testsuite/gcc.target/sh/pr54089-10.c
new file mode 100644
index 0000000..85aeabd
--- /dev/null
+++ b/gcc/testsuite/gcc.target/sh/pr54089-10.c
@@ -0,0 +1,153 @@
+/* Check that there are no redundant zero extensions around logical right
+ shifts. */
+/* { dg-do compile } */
+/* { dg-options "-O1" } */
+/* { dg-final { scan-assembler-times "extu" 20 } } */
+
+/* { dg-final { scan-assembler-times "shll" 2 { target { "! sh2a" && has_dyn_shift } } } } */
+/* { dg-final { scan-assembler-times "shll" 3 { target { "! sh2a" && "! has_dyn_shift" } } } } */
+/* { dg-final { scan-assembler-times "movt" 2 { target { ! sh2a } } } } */
+
+/* { dg-final { scan-assembler-times "bld" 1 { target { sh2a } } } } */
+/* { dg-final { scan-assembler-times "movt" 1 { target { sh2a } } } } */
+/* { dg-final { scan-assembler-times "movrt" 1 { target { sh2a } } } } */
+/* { dg-final { scan-assembler-times "cmp/pz" 1 { target { sh2a } } } } */
+
+/* { dg-final { scan-assembler-times "shld" 9 { target { has_dyn_shift } } } } */
+
+void
+test_0 (unsigned char* x, unsigned int* y)
+{
+ y[0] = x[1] >> 1;
+}
+
+void
+test_1 (unsigned char* x, unsigned int* y)
+{
+ y[0] = x[1] >> 2;
+}
+
+void
+test_2 (unsigned char* x, unsigned int* y)
+{
+ y[0] = x[1] >> 3;
+}
+
+void
+test_3 (unsigned char* x, unsigned int* y)
+{
+ y[0] = x[1] >> 4;
+}
+
+void
+test_4 (unsigned char* x, unsigned int* y)
+{
+ y[0] = x[1] >> 5;
+}
+
+void
+test_5 (unsigned char* x, unsigned int* y)
+{
+ y[0] = x[1] >> 6;
+}
+
+void
+test_6 (unsigned char* x, unsigned int* y)
+{
+ /* non-SH2A: shll, movt
+ SH2A: bld, movt */
+ y[0] = x[1] >> 7;
+}
+
+
+void
+test_100 (unsigned short* x, unsigned int* y)
+{
+ y[0] = x[1] >> 1;
+}
+
+void
+test_101 (unsigned short* x, unsigned int* y)
+{
+ y[0] = x[1] >> 2;
+}
+
+void
+test_102 (unsigned short* x, unsigned int* y)
+{
+ y[0] = x[1] >> 3;
+}
+
+void
+test_103 (unsigned short* x, unsigned int* y)
+{
+ y[0] = x[1] >> 4;
+}
+
+void
+test_104 (unsigned short* x, unsigned int* y)
+{
+ y[0] = x[1] >> 5;
+}
+
+void
+test_105 (unsigned short* x, unsigned int* y)
+{
+ y[0] = x[1] >> 6;
+}
+
+void
+test_106 (unsigned short* x, unsigned int* y)
+{
+ y[0] = x[1] >> 7;
+}
+
+void
+test_107 (unsigned short* x, unsigned int* y)
+{
+ y[0] = x[1] >> 8;
+}
+
+void
+test_108 (unsigned short* x, unsigned int* y)
+{
+ y[0] = x[1] >> 9;
+}
+
+void
+test_109 (unsigned short* x, unsigned int* y)
+{
+ y[0] = x[1] >> 10;
+}
+
+void
+test_110 (unsigned short* x, unsigned int* y)
+{
+ y[0] = x[1] >> 11;
+}
+
+void
+test_111 (unsigned short* x, unsigned int* y)
+{
+ y[0] = x[1] >> 12;
+}
+
+void
+test_112 (unsigned short* x, unsigned int* y)
+{
+ y[0] = x[1] >> 13;
+}
+
+void
+test_113 (unsigned short* x, unsigned int* y)
+{
+ y[0] = x[1] >> 14;
+}
+
+void
+test_114 (unsigned short* x, unsigned int* y)
+{
+ /* non-SH2A: shll, movt
+ SH2A: cmp/pz, movrt */
+ y[0] = x[1] >> 15;
+}
diff --git a/gcc/testsuite/gcc.target/sh/torture/pr70416.c b/gcc/testsuite/gcc.target/sh/torture/pr70416.c
new file mode 100644
index 0000000..b1123be
--- /dev/null
+++ b/gcc/testsuite/gcc.target/sh/torture/pr70416.c
@@ -0,0 +1,136 @@
+/* { dg-additional-options "-std=gnu99 -fpic" } */
+/* { dg-do compile } */
+
+typedef unsigned long VALUE;
+typedef unsigned long ID;
+
+typedef struct rb_callable_method_entry_struct
+{
+ ID called_id;
+ const VALUE owner;
+} rb_callable_method_entry_t;
+
+typedef struct rb_iseq_struct rb_iseq_t;
+
+struct __jmp_buf_tag { int xx; };
+typedef struct __jmp_buf_tag jmp_buf[1];
+
+struct rb_iseq_struct
+{
+ const struct iseq_catch_table *catch_table;
+};
+
+typedef struct rb_control_frame_struct
+{
+ const VALUE *pc;
+ VALUE *sp;
+ const rb_iseq_t *iseq;
+ VALUE flag;
+ VALUE *ep;
+} rb_control_frame_t;
+
+typedef jmp_buf rb_jmpbuf_t;
+struct rb_vm_tag
+{
+ rb_jmpbuf_t buf;
+}rb_ensure_list_t;
+
+typedef struct rb_thread_struct
+{
+ rb_control_frame_t *cfp;
+ struct rb_vm_tag *tag;
+} rb_thread_t;
+
+struct iseq_catch_table_entry
+{
+ const rb_iseq_t *iseq;
+};
+
+struct iseq_catch_table
+{
+ unsigned int size;
+};
+
+extern unsigned long long __sdt_unsp;
+extern unsigned short ruby_cmethod__return_semaphore;
+
+struct ruby_dtrace_method_hook_args
+{
+ const char *classname;
+ const char *methodname;
+ const char *filename;
+ int line_no;
+};
+
+int ruby_th_dtrace_setup(rb_thread_t *th, VALUE klass, ID id, struct ruby_dtrace_method_hook_args *args);
+int rb_threadptr_tag_state (rb_thread_t *th);
+VALUE vm_exec_core (rb_thread_t *th, VALUE initial);
+const rb_callable_method_entry_t *rb_vm_frame_method_entry (const rb_control_frame_t *cfp);
+
+struct vm_throw_data;
+const rb_control_frame_t * THROW_DATA_CATCH_FRAME(const struct vm_throw_data *obj);
+rb_control_frame_t * vm_push_frame(rb_thread_t *th, const rb_iseq_t *iseq, VALUE type, VALUE self, VALUE specval, VALUE cref_or_me, const VALUE *pc, VALUE *sp, int local_size, int stack_max);
+
+
+VALUE vm_exec(rb_thread_t *th)
+{
+ int state;
+ VALUE result;
+ VALUE initial = 0;
+ struct vm_throw_data *err;
+ rb_thread_t * const _th = (th);
+ struct rb_vm_tag _tag;
+
+ if ((state = (__builtin_setjmp((_tag.buf)) ? rb_threadptr_tag_state((_th)) : ((void)(_th->tag = &_tag), 0))) == 0)
+ {
+ result = vm_exec_core(th, initial);
+ }
+ else
+ {
+ unsigned int i;
+ const struct iseq_catch_table_entry *entry;
+ const struct iseq_catch_table *ct;
+ unsigned long epc, cont_pc, cont_sp;
+ const rb_iseq_t *catch_iseq;
+ rb_control_frame_t *cfp;
+ const rb_control_frame_t *escape_cfp;
+
+ while (th->cfp->pc == 0 || th->cfp->iseq == 0)
+ {
+ if (ruby_cmethod__return_semaphore)
+ {
+ struct ruby_dtrace_method_hook_args args;
+ if (ruby_th_dtrace_setup(th, rb_vm_frame_method_entry(th->cfp)->owner, rb_vm_frame_method_entry(th->cfp)->called_id, &args))
+ {
+ __asm__ __volatile__ (
+ ".asciz \"%n[_SDT_S1]@%[_SDT_A1] %n[_SDT_S2]@%[_SDT_A2] %n[_SDT_S3]@%[_SDT_A3] %n[_SDT_S4]@%[_SDT_A4]\"\n"
+ :
+ : [_SDT_S1] "n" (((!__extension__ (__builtin_constant_p ((((unsigned long long) (__typeof (__builtin_choose_expr (((__builtin_classify_type ( args.classname ) + 3) & -4) == 4, ( args.classname ), 0U))) __sdt_unsp) & ((unsigned long long)1 << (sizeof (unsigned long long) * 8 - 1))) == 0) || (__typeof (__builtin_choose_expr (((__builtin_classify_type ( args.classname ) + 3) & -4) == 4, ( args.classname ), 0U))) -1 > (__typeof (__builtin_choose_expr (((__builtin_classify_type ( args.classname ) + 3) & -4) == 4, ( args.classname ), 0U))) 0)) ? 1 : -1) * (int) ((__builtin_classify_type ( args.classname ) == 14 || __builtin_classify_type ( args.classname ) == 5) ? sizeof (void *) : sizeof ( args.classname ))),
+ [_SDT_A1] "nor" (( args.classname )),
+ [_SDT_S2] "n" (((!__extension__ (__builtin_constant_p ((((unsigned long long) (__typeof (__builtin_choose_expr (((__builtin_classify_type ( args.methodname ) + 3) & -4) == 4, ( args.methodname ), 0U))) __sdt_unsp) & ((unsigned long long)1 << (sizeof (unsigned long long) * 8 - 1))) == 0) || (__typeof (__builtin_choose_expr (((__builtin_classify_type ( args.methodname ) + 3) & -4) == 4, ( args.methodname ), 0U))) -1 > (__typeof (__builtin_choose_expr (((__builtin_classify_type ( args.methodname ) + 3) & -4) == 4, ( args.methodname ), 0U))) 0)) ? 1 : -1) * (int) ((__builtin_classify_type ( args.methodname ) == 14 || __builtin_classify_type ( args.methodname ) == 5) ? sizeof (void *) : sizeof ( args.methodname ))),
+ [_SDT_A2] "nor" (( args.methodname )),
+ [_SDT_S3] "n" (((!__extension__ (__builtin_constant_p ((((unsigned long long) (__typeof (__builtin_choose_expr (((__builtin_classify_type ( args.filename ) + 3) & -4) == 4, ( args.filename ), 0U))) __sdt_unsp) & ((unsigned long long)1 << (sizeof (unsigned long long) * 8 - 1))) == 0) || (__typeof (__builtin_choose_expr (((__builtin_classify_type ( args.filename ) + 3) & -4) == 4, ( args.filename ), 0U))) -1 > (__typeof (__builtin_choose_expr (((__builtin_classify_type ( args.filename ) + 3) & -4) == 4, ( args.filename ), 0U))) 0)) ? 1 : -1) * (int) ((__builtin_classify_type ( args.filename ) == 14 || __builtin_classify_type ( args.filename ) == 5) ? sizeof (void *) : sizeof ( args.filename ))),
+ [_SDT_A3] "nor" (( args.filename )),
+ [_SDT_S4] "n" (((!__extension__ (__builtin_constant_p ((((unsigned long long) (__typeof (__builtin_choose_expr (((__builtin_classify_type ( args.line_no ) + 3) & -4) == 4, ( args.line_no ), 0U))) __sdt_unsp) & ((unsigned long long)1 << (sizeof (unsigned long long) * 8 - 1))) == 0) || (__typeof (__builtin_choose_expr (((__builtin_classify_type ( args.line_no ) + 3) & -4) == 4, ( args.line_no ), 0U))) -1 > (__typeof (__builtin_choose_expr (((__builtin_classify_type ( args.line_no ) + 3) & -4) == 4, ( args.line_no ), 0U))) 0)) ? 1 : -1) * (int) ((__builtin_classify_type ( args.line_no ) == 14 || __builtin_classify_type ( args.line_no ) == 5) ? sizeof (void *) : sizeof ( args.line_no ))),
+ [_SDT_A4] "nor" (( args.line_no ))
+ );
+ }
+ }
+ }
+
+ if (cfp == escape_cfp && !(((cfp)->flag & 0x0200) != 0))
+ catch_iseq = entry->iseq;
+
+ if (state == 6)
+ {
+ escape_cfp = THROW_DATA_CATCH_FRAME(err);
+
+ if (ct)
+ for (i = 0; i < ct->size; i++) { }
+ }
+ else
+ ct = cfp->iseq->catch_table;
+
+ vm_push_frame(th, catch_iseq, 0xb1, 0, 1, 0, 0, 0, 5, 123);
+ }
+}
diff --git a/gcc/testsuite/gcc.target/sparc/20160229-1.c b/gcc/testsuite/gcc.target/sparc/20160229-1.c
new file mode 100644
index 0000000..c64b7a8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/sparc/20160229-1.c
@@ -0,0 +1,157 @@
+/* PR target/69706 */
+/* Reported by John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de> */
+
+/* { dg-do run } */
+/* { dg-options "-std=gnu99" }
+/* { dg-require-effective-target lp64 } */
+
+extern void abort (void);
+
+
+/* Pass a 12-byte structure partially in slot #15 and on the stack. */
+
+struct t_rgb { float r, g, b; };
+
+void write_xpm (void *out, unsigned int flags, const char *title,
+ const char *legend, const char *label_x, const char *label_y,
+ int n_x, int n_y, float axis_x[], float axis_y[], float *mat[],
+ float lo, float hi, struct t_rgb rlo, struct t_rgb rhi)
+{
+ register float f30 asm ("f30");
+ register float f31 asm ("f31");
+
+ if (f30 != 1.0f)
+ abort ();
+
+ if (f31 != 2.0f)
+ abort ();
+
+ if (rhi.r != 1.0f)
+ abort ();
+
+ if (rhi.g != 2.0f)
+ abort ();
+
+ if (rhi.b != 3.0f)
+ abort ();
+}
+
+
+/* Pass a 16-byte structure partially in slot #15 and on the stack. */
+
+struct S1 { _Complex float f1; _Complex float f2; };
+
+void f1 (int p1, int p2, int p3, int p4, int p5, int p6, int p7, int p8,
+ int p9, int p10, int p11, int p12, int p13, int p14, int p15,
+ struct S1 s1)
+{
+ register float f30 asm ("f30");
+ register float f31 asm ("f31");
+
+ if (f30 != 4.0f)
+ abort ();
+
+ if (f31 != 5.0f)
+ abort ();
+
+ if (__real__ s1.f1 != 4.0f)
+ abort ();
+
+ if (__imag__ s1.f1 != 5.0f)
+ abort ();
+
+ if (__real__ s1.f2 != 6.0f)
+ abort ();
+
+ if (__imag__ s1.f2 != 7.0f)
+ abort ();
+}
+
+
+/* Pass a 16-byte structure partially in slot #15 and on the stack. */
+
+struct S2 { double d1; double d2; };
+
+void f2 (int p1, int p2, int p3, int p4, int p5, int p6, int p7, int p8,
+ int p9, int p10, int p11, int p12, int p13, int p14, int p15,
+ struct S2 s2)
+{
+ register double d30 asm ("f30");
+
+ if (d30 != 1.0)
+ abort ();
+
+ if (s2.d1 != 1.0)
+ abort ();
+
+ if (s2.d2 != 2.0)
+ abort ();
+}
+
+
+/* Pass a 16-byte structure partially in slot #15 and on the stack. */
+
+struct S3 { _Complex double d; };
+
+void f3 (int p1, int p2, int p3, int p4, int p5, int p6, int p7, int p8,
+ int p9, int p10, int p11, int p12, int p13, int p14, int p15,
+ struct S3 s3)
+{
+ register double d30 asm ("f30");
+
+ if (d30 != 3.0)
+ abort ();
+
+ if (__real__ s3.d != 3.0)
+ abort ();
+
+ if (__imag__ s3.d != 4.0)
+ abort ();
+}
+
+
+/* Pass a 16-byte structure entirely on the stack. */
+
+struct S4 { long l; double d; };
+
+void f4 (int p1, int p2, int p3, int p4, int p5, int p6, int p7, int p8,
+ int p9, int p10, int p11, int p12, int p13, int p14, int p15,
+ struct S4 s4)
+{
+ if (s4.l != 5)
+ abort ();
+
+ if (s4.d != 6.0)
+ abort ();
+}
+
+
+#define PI 3.141592654
+
+int main (void)
+{
+ struct t_rgb lo = { -1.0f, -2.0f, -3.0f };
+ struct t_rgb hi = { 1.0f, 2.0f, 3.0f };
+ float arrf[1];
+ float *arrp[1];
+ struct S1 s1 = { 4.0f + 5.0fi, 6.0f + 7.0fi };
+ struct S2 s2 = { 1.0, 2.0 };
+ struct S3 s3 = { 3.0 + 4.0i };
+ struct S4 s4 = { 5, 6.0 };
+ register double d32 asm ("f32") = PI;
+
+ write_xpm (0, 0, "", "", "", "", 0, 0, arrf, arrf, arrp, 0.0f, 0.0f, lo, hi);
+
+ f1 (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, s1);
+
+ f2 (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, s2);
+
+ f3 (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, s3);
+
+ f4 (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, s4);
+
+ if (d32 != PI)
+ abort ();
+
+ return 0;
+}
diff --git a/gcc/testsuite/gfortran.dg/allocate_with_source_18.f03 b/gcc/testsuite/gfortran.dg/allocate_with_source_18.f03
new file mode 100644
index 0000000..746bd0d
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/allocate_with_source_18.f03
@@ -0,0 +1,31 @@
+! { dg-do run }
+!
+! PR fortran/57365
+! [OOP] Sourced allocation fails with unlimited polymorphism
+! Contributed by <rxs@hotmail.de>
+!
+program bug
+
+ implicit none
+ character(len=:), allocatable :: test
+
+ test = "A test case"
+ call allocate_test(test)
+ deallocate(test)
+
+contains
+
+ subroutine allocate_test(var)
+ class(*) :: var
+ class(*), pointer :: copyofvar
+ allocate(copyofvar, source=var)
+ select type (copyofvar)
+ type is (character(len=*))
+! print*, len(copyofvar), copyofvar
+ if (len(copyofvar) /= 11) call abort ()
+ if (copyofvar /= "A test case") call abort ()
+ end select
+ deallocate(copyofvar)
+ end subroutine
+
+end program bug
diff --git a/gcc/testsuite/gfortran.dg/allocate_with_source_19.f08 b/gcc/testsuite/gfortran.dg/allocate_with_source_19.f08
new file mode 100644
index 0000000..ff84510
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/allocate_with_source_19.f08
@@ -0,0 +1,22 @@
+! { dg-do compile }
+! { dg-options -std=f2008 }
+
+! Contributed by mrestelli@gmail.com
+! Check that instead of an ICE the error message is emitted.
+
+module m
+ implicit none
+contains
+
+ subroutine s()
+ real, allocatable :: x(:)
+ real :: y
+
+ y = 5.0
+ ! x either needs an array spec, or y needs to be an array.
+ allocate( x , source=y ) ! { dg-error "Array specification or array-valued SOURCE= expression required in ALLOCATE statement" }
+
+ end subroutine s
+
+end module m
+
diff --git a/gcc/testsuite/gfortran.dg/bessel_6.f90 b/gcc/testsuite/gfortran.dg/bessel_6.f90
index e0220f7..da917ff 100644
--- a/gcc/testsuite/gfortran.dg/bessel_6.f90
+++ b/gcc/testsuite/gfortran.dg/bessel_6.f90
@@ -12,7 +12,7 @@
implicit none
real,parameter :: values(*) = [0.0, 0.5, 1.0, 0.9, 1.8,2.0,3.0,4.0,4.25,8.0,34.53, 475.78]
real,parameter :: myeps(size(values)) = epsilon(0.0) &
- * [2, 7, 5, 6, 9, 12, 12, 7, 7, 8, 92, 15 ]
+ * [2, 7, 5, 6, 9, 12, 12, 7, 7, 8, 98, 15 ]
! The following is sufficient for me - the values above are a bit
! more tolerant
! * [0, 5, 3, 4, 6, 7, 7, 5, 5, 6, 66, 4 ]
diff --git a/gcc/testsuite/gfortran.dg/coarray_8.f90 b/gcc/testsuite/gfortran.dg/coarray_8.f90
index 91d6e9a..db6eb6c 100644
--- a/gcc/testsuite/gfortran.dg/coarray_8.f90
+++ b/gcc/testsuite/gfortran.dg/coarray_8.f90
@@ -146,7 +146,7 @@ end module mmm4
subroutine tfgh()
integer :: i(2)
DATA i/(i, i=1,2)/ ! { dg-error "Expected PARAMETER symbol" }
- do i = 1, 5 ! { dg-error "cannot be a sub-component" }
+ do i = 1, 5 ! { dg-error "cannot be an array" }
end do ! { dg-error "Expecting END SUBROUTINE" }
end subroutine tfgh
diff --git a/gcc/testsuite/gfortran.dg/coarray_allocate_5.f08 b/gcc/testsuite/gfortran.dg/coarray_allocate_5.f08
new file mode 100644
index 0000000..2d87854
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/coarray_allocate_5.f08
@@ -0,0 +1,33 @@
+! { dg-do run }
+! { dg-options "-fcoarray=lib -lcaf_single -fdump-tree-original" }
+! { dg-additional-options "-latomic" { target libatomic_available } }
+!
+! Contributed by Ian Harvey <ian_harvey@bigpond.com>
+! Extended by Andre Vehreschild <vehre@gcc.gnu.org>
+! to test that coarray references in allocate work now
+! PR fortran/67451
+
+ program main
+ implicit none
+ type foo
+ integer :: bar = 99
+ end type
+ class(foo), dimension(:), allocatable :: foobar[:]
+ class(foo), dimension(:), allocatable :: some_local_object
+ allocate(foobar(10)[*])
+
+ allocate(some_local_object, source=foobar)
+
+ if (.not. allocated(foobar)) call abort()
+ if (lbound(foobar, 1) /= 1 .OR. ubound(foobar, 1) /= 10) call abort()
+ if (.not. allocated(some_local_object)) call abort()
+ if (any(some_local_object(:)%bar /= [99, 99, 99, 99, 99, 99, 99, 99, 99, 99])) call abort()
+
+ deallocate(some_local_object)
+ deallocate(foobar)
+ end program
+
+! Check that some_local_object is treated as rank-1 array.
+! This failed beforehand, because the coarray attribute of the source=expression
+! was propagated to some_local_object in the allocate.
+! { dg-final { scan-tree-dump-not "some_local_object\._data\.dim\[1\]\.lbound" "original" } }
diff --git a/gcc/testsuite/gfortran.dg/coarray_allocate_6.f08 b/gcc/testsuite/gfortran.dg/coarray_allocate_6.f08
new file mode 100644
index 0000000..2fdd4c1
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/coarray_allocate_6.f08
@@ -0,0 +1,27 @@
+! { dg-do run }
+! { dg-options "-fcoarray=single -fdump-tree-original" }
+
+! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
+! Test fix for pr65795.
+
+implicit none
+
+type t2
+ integer, allocatable :: x
+end type t2
+
+type t3
+ type(t2), allocatable :: caf[:]
+end type t3
+
+!type(t3), save, target :: c, d
+type(t3), target :: c, d
+integer :: stat
+
+allocate(c%caf[*], stat=stat)
+end
+
+! Besides checking that the executable does not crash anymore, check
+! that the cause has been remove.
+! { dg-final { scan-tree-dump-not "c.caf.x = 0B" "original" } }
+
diff --git a/gcc/testsuite/gfortran.dg/deferred_character_15.f90 b/gcc/testsuite/gfortran.dg/deferred_character_15.f90
new file mode 100644
index 0000000..c641c1f
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/deferred_character_15.f90
@@ -0,0 +1,44 @@
+! { dg-do run }
+!
+! Test the fix for PR69423.
+!
+! Contributed by Antony Lewis <antony@cosmologist.info>
+!
+program tester
+ character(LEN=:), allocatable :: S
+ S= test(2)
+ if (len(S) .ne. 4) call abort
+ if (S .ne. "test") call abort
+ if (allocated (S)) deallocate (S)
+
+ S= test2(2)
+ if (len(S) .ne. 4) call abort
+ if (S .ne. "test") call abort
+ if (allocated (S)) deallocate (S)
+contains
+ function test(alen)
+ character(LEN=:), allocatable :: test
+ integer alen, i
+ do i = alen, 1, -1
+ test = 'test'
+ exit
+ end do
+! This line would print nothing when compiled with -O1 and higher.
+! print *, len(test),test
+ if (len(test) .ne. 4) call abort
+ if (test .ne. "test") call abort
+ end function test
+
+ function test2(alen) result (test)
+ character(LEN=:), allocatable :: test
+ integer alen, i
+ do i = alen, 1, -1
+ test = 'test'
+ exit
+ end do
+! This worked before the fix.
+! print *, len(test),test
+ if (len(test) .ne. 4) call abort
+ if (test .ne. "test") call abort
+ end function test2
+end program tester
diff --git a/gcc/testsuite/gfortran.dg/deferred_character_16.f90 b/gcc/testsuite/gfortran.dg/deferred_character_16.f90
new file mode 100644
index 0000000..f5931ac
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/deferred_character_16.f90
@@ -0,0 +1,19 @@
+! { dg-do run }
+! PR70592 dynamically-allocated character array
+! Contributed by Peter Knowles <KnowlesPJ@Cardiff.ac.uk>
+!
+PROGRAM main
+ character(len=7) :: res
+ CHARACTER(len=:), DIMENSION(:), POINTER :: cp
+ INTEGER :: i
+ ALLOCATE(CHARACTER(len=1) :: cp(1:6))
+ if (SIZE(cp) /= 6 .or. LBOUND(cp,1) /= 1 .or. UBOUND(cp,1) /= 6) call abort()
+ cp(1)='1'
+ cp(2)='2'
+ cp(3)='3'
+ cp(4)='4'
+ cp(5)='5'
+ cp(6)='6'
+ write (res, *) cp
+ if (res /= ' 123456') call abort()
+END PROGRAM main
diff --git a/gcc/testsuite/gfortran.dg/fmt_pf.f90 b/gcc/testsuite/gfortran.dg/fmt_pf.f90
new file mode 100644
index 0000000..6cefa86
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/fmt_pf.f90
@@ -0,0 +1,226 @@
+! { dg-do run }
+! PR70235 Incorrect output with PF format.
+! Test case provided by Antoine Gardeux.
+program pr70235
+use ISO_FORTRAN_ENV
+ implicit none
+ integer, parameter :: j(size(real_kinds)+4)=[REAL_KINDS, [4, 4, 4, 4]]
+ logical :: l_skip(4) = .false.
+ integer :: i
+ integer :: n_tst = 0, n_cnt = 0, n_skip = 0
+ character(len=20) :: s, s1
+
+! Check that the default rounding mode is to nearest and to even on tie.
+ do i=1,size(real_kinds)
+ if (i == 1) then
+ write(s, '(2F4.1,2F4.0)') real(-9.49999905,kind=j(1)), &
+ real(9.49999905,kind=j(1)), &
+ real(9.5,kind=j(1)), real(8.5,kind=j(1))
+ write(s1, '(3PE10.3,2PE10.3)') real(987350.,kind=j(1)), &
+ real(98765.0,kind=j(1))
+ else if (i == 2) then
+ write(s, '(2F4.1,2F4.0)') real(-9.49999905,kind=j(2)), &
+ real(9.49999905,kind=j(2)), &
+ real(9.5,kind=j(2)), real(8.5,kind=j(2))
+ write(s1, '(3PE10.3,2PE10.3)') real(987350.,kind=j(2)), &
+ real(98765.0,kind=j(2))
+ else if (i == 3) then
+ write(s, '(2F4.1,2F4.0)') real(-9.49999905,kind=j(3)), &
+ real(9.49999905,kind=j(3)), &
+ real(9.5,kind=j(3)), real(8.5,kind=j(3))
+ write(s1, '(3PE10.3,2PE10.3)') real(987350.,kind=j(3)), &
+ real(98765.0,kind=j(3))
+ else if (i == 4) then
+ write(s, '(2F4.1,2F4.0)') real(-9.49999905,kind=j(4)), &
+ real(9.49999905,kind=j(4)), &
+ real(9.5,kind=j(4)), real(8.5,kind=j(4))
+ write(s1, '(3PE10.3,2PE10.3)') real(987350.,kind=j(4)), &
+ real(98765.0,kind=j(4))
+ end if
+ if (s /= '-9.5 9.5 10. 8.' .or. s1 /= ' 987.4E+03 98.76E+03') then
+ l_skip(i) = .true.
+! print "('Unsupported rounding for real(',i0,')')", j(i)
+ end if
+ end do
+
+
+! Original test.
+ call checkfmt("(-6PF8.3)", 1.0e4, " 0.010")
+ call checkfmt("(-6PF8.3)", 0.0, " 0.000")
+
+! Test for the bug in comment 6.
+ call checkfmt("(-8pf18.3)", 643.125, " 0.000")
+ call checkfmt("(-7pf18.3)", 643.125, " 0.000")
+ call checkfmt("(-6pf18.3)", 643.125, " 0.001")
+ call checkfmt("(-5pf18.3)", 643.125, " 0.006")
+ call checkfmt("(-4pf18.3)", 643.125, " 0.064")
+ call checkfmt("(-3pf18.3)", 643.125, " 0.643")
+ call checkfmt("(-2pf18.3)", 643.125, " 6.431")
+ call checkfmt("(-1pf18.3)", 643.125, " 64.312")
+ call checkfmt("( 0pf18.3)", 643.125, " 643.125")
+
+ call checkfmt("(ru,-8pf18.3)", 643.125, " 0.001")
+ call checkfmt("(ru,-7pf18.3)", 643.125, " 0.001")
+ call checkfmt("(ru,-6pf18.3)", 643.125, " 0.001")
+ call checkfmt("(ru,-5pf18.3)", 643.125, " 0.007")
+ call checkfmt("(ru,-4pf18.3)", 643.125, " 0.065")
+ call checkfmt("(ru,-3pf18.3)", 643.125, " 0.644")
+ call checkfmt("(ru,-2pf18.3)", 643.125, " 6.432")
+ call checkfmt("(ru,-1pf18.3)", 643.125, " 64.313")
+ call checkfmt("(ru, 0pf18.3)", 643.125, " 643.125")
+
+ call checkfmt("(rd,-8pf18.3)", 643.125, " 0.000")
+ call checkfmt("(rd,-7pf18.3)", 643.125, " 0.000")
+ call checkfmt("(rd,-6pf18.3)", 643.125, " 0.000")
+ call checkfmt("(rd,-5pf18.3)", 643.125, " 0.006")
+ call checkfmt("(rd,-4pf18.3)", 643.125, " 0.064")
+ call checkfmt("(rd,-3pf18.3)", 643.125, " 0.643")
+ call checkfmt("(rd,-2pf18.3)", 643.125, " 6.431")
+ call checkfmt("(rd,-1pf18.3)", 643.125, " 64.312")
+ call checkfmt("(rd, 0pf18.3)", 643.125, " 643.125")
+
+ call checkfmt("(rz,-8pf18.3)", 643.125, " 0.000")
+ call checkfmt("(rz,-7pf18.3)", 643.125, " 0.000")
+ call checkfmt("(rz,-6pf18.3)", 643.125, " 0.000")
+ call checkfmt("(rz,-5pf18.3)", 643.125, " 0.006")
+ call checkfmt("(rz,-4pf18.3)", 643.125, " 0.064")
+ call checkfmt("(rz,-3pf18.3)", 643.125, " 0.643")
+ call checkfmt("(rz,-2pf18.3)", 643.125, " 6.431")
+ call checkfmt("(rz,-1pf18.3)", 643.125, " 64.312")
+ call checkfmt("(rz, 0pf18.3)", 643.125, " 643.125")
+
+ call checkfmt("(rc,-8pf18.3)", 643.125, " 0.000")
+ call checkfmt("(rc,-7pf18.3)", 643.125, " 0.000")
+ call checkfmt("(rc,-6pf18.3)", 643.125, " 0.001")
+ call checkfmt("(rc,-5pf18.3)", 643.125, " 0.006")
+ call checkfmt("(rc,-4pf18.3)", 643.125, " 0.064")
+ call checkfmt("(rc,-3pf18.3)", 643.125, " 0.643")
+ call checkfmt("(rc,-2pf18.3)", 643.125, " 6.431")
+ call checkfmt("(rc,-1pf18.3)", 643.125, " 64.313")
+ call checkfmt("(rc, 0pf18.3)", 643.125, " 643.125")
+
+ call checkfmt("(rn,-8pf18.3)", 643.125, " 0.000")
+ call checkfmt("(rn,-7pf18.3)", 643.125, " 0.000")
+ call checkfmt("(rn,-6pf18.3)", 643.125, " 0.001")
+ call checkfmt("(rn,-5pf18.3)", 643.125, " 0.006")
+ call checkfmt("(rn,-4pf18.3)", 643.125, " 0.064")
+ call checkfmt("(rn,-3pf18.3)", 643.125, " 0.643")
+ call checkfmt("(rn,-2pf18.3)", 643.125, " 6.431")
+ call checkfmt("(rn,-1pf18.3)", 643.125, " 64.312")
+ call checkfmt("(rn, 0pf18.3)", 643.125, " 643.125")
+
+ call checkfmt("(rp,-8pf18.3)", 643.125, " 0.000")
+ call checkfmt("(rp,-7pf18.3)", 643.125, " 0.000")
+ call checkfmt("(rp,-6pf18.3)", 643.125, " 0.001")
+ call checkfmt("(rp,-5pf18.3)", 643.125, " 0.006")
+ call checkfmt("(rp,-4pf18.3)", 643.125, " 0.064")
+ call checkfmt("(rp,-3pf18.3)", 643.125, " 0.643")
+ call checkfmt("(rp,-2pf18.3)", 643.125, " 6.431")
+ call checkfmt("(rp,-1pf18.3)", 643.125, " 64.312")
+ call checkfmt("(rp, 0pf18.3)", 643.125, " 643.125")
+
+ call checkfmt("(-8pf18.3)", -643.125, " -0.000")
+ call checkfmt("(-7pf18.3)", -643.125, " -0.000")
+ call checkfmt("(-6pf18.3)", -643.125, " -0.001")
+ call checkfmt("(-5pf18.3)", -643.125, " -0.006")
+ call checkfmt("(-4pf18.3)", -643.125, " -0.064")
+ call checkfmt("(-3pf18.3)", -643.125, " -0.643")
+ call checkfmt("(-2pf18.3)", -643.125, " -6.431")
+ call checkfmt("(-1pf18.3)", -643.125, " -64.312")
+ call checkfmt("( 0pf18.3)", -643.125, " -643.125")
+
+ call checkfmt("(ru,-8pf18.3)", -643.125, " -0.000")
+ call checkfmt("(ru,-7pf18.3)", -643.125, " -0.000")
+ call checkfmt("(ru,-6pf18.3)", -643.125, " -0.000")
+ call checkfmt("(ru,-5pf18.3)", -643.125, " -0.006")
+ call checkfmt("(ru,-4pf18.3)", -643.125, " -0.064")
+ call checkfmt("(ru,-3pf18.3)", -643.125, " -0.643")
+ call checkfmt("(ru,-2pf18.3)", -643.125, " -6.431")
+ call checkfmt("(ru,-1pf18.3)", -643.125, " -64.312")
+ call checkfmt("(ru, 0pf18.3)", -643.125, " -643.125")
+
+ call checkfmt("(rd,-8pf18.3)", -643.125, " -0.001")
+ call checkfmt("(rd,-7pf18.3)", -643.125, " -0.001")
+ call checkfmt("(rd,-6pf18.3)", -643.125, " -0.001")
+ call checkfmt("(rd,-5pf18.3)", -643.125, " -0.007")
+ call checkfmt("(rd,-4pf18.3)", -643.125, " -0.065")
+ call checkfmt("(rd,-3pf18.3)", -643.125, " -0.644")
+ call checkfmt("(rd,-2pf18.3)", -643.125, " -6.432")
+ call checkfmt("(rd,-1pf18.3)", -643.125, " -64.313")
+ call checkfmt("(rd, 0pf18.3)", -643.125, " -643.125")
+
+ call checkfmt("(rz,-8pf18.3)", -643.125, " -0.000")
+ call checkfmt("(rz,-7pf18.3)", -643.125, " -0.000")
+ call checkfmt("(rz,-6pf18.3)", -643.125, " -0.000")
+ call checkfmt("(rz,-5pf18.3)", -643.125, " -0.006")
+ call checkfmt("(rz,-4pf18.3)", -643.125, " -0.064")
+ call checkfmt("(rz,-3pf18.3)", -643.125, " -0.643")
+ call checkfmt("(rz,-2pf18.3)", -643.125, " -6.431")
+ call checkfmt("(rz,-1pf18.3)", -643.125, " -64.312")
+ call checkfmt("(rz, 0pf18.3)", -643.125, " -643.125")
+
+ call checkfmt("(rc,-8pf18.3)", -643.125, " -0.000")
+ call checkfmt("(rc,-7pf18.3)", -643.125, " -0.000")
+ call checkfmt("(rc,-6pf18.3)", -643.125, " -0.001")
+ call checkfmt("(rc,-5pf18.3)", -643.125, " -0.006")
+ call checkfmt("(rc,-4pf18.3)", -643.125, " -0.064")
+ call checkfmt("(rc,-3pf18.3)", -643.125, " -0.643")
+ call checkfmt("(rc,-2pf18.3)", -643.125, " -6.431")
+ call checkfmt("(rc,-1pf18.3)", -643.125, " -64.313")
+ call checkfmt("(rc, 0pf18.3)", -643.125, " -643.125")
+
+ call checkfmt("(rn,-8pf18.3)", -643.125, " -0.000")
+ call checkfmt("(rn,-7pf18.3)", -643.125, " -0.000")
+ call checkfmt("(rn,-6pf18.3)", -643.125, " -0.001")
+ call checkfmt("(rn,-5pf18.3)", -643.125, " -0.006")
+ call checkfmt("(rn,-4pf18.3)", -643.125, " -0.064")
+ call checkfmt("(rn,-3pf18.3)", -643.125, " -0.643")
+ call checkfmt("(rn,-2pf18.3)", -643.125, " -6.431")
+ call checkfmt("(rn,-1pf18.3)", -643.125, " -64.312")
+ call checkfmt("(rn, 0pf18.3)", -643.125, " -643.125")
+
+ call checkfmt("(rp,-8pf18.3)", -643.125, " -0.000")
+ call checkfmt("(rp,-7pf18.3)", -643.125, " -0.000")
+ call checkfmt("(rp,-6pf18.3)", -643.125, " -0.001")
+ call checkfmt("(rp,-5pf18.3)", -643.125, " -0.006")
+ call checkfmt("(rp,-4pf18.3)", -643.125, " -0.064")
+ call checkfmt("(rp,-3pf18.3)", -643.125, " -0.643")
+ call checkfmt("(rp,-2pf18.3)", -643.125, " -6.431")
+ call checkfmt("(rp,-1pf18.3)", -643.125, " -64.312")
+ call checkfmt("(rp, 0pf18.3)", -643.125, " -643.125")
+
+ ! print *, n_tst, n_cnt, n_skip
+ if (n_cnt /= 0) call abort
+ if (all(.not. l_skip)) print *, "All kinds rounded to nearest"
+
+contains
+ subroutine checkfmt(fmt, x, cmp)
+ implicit none
+ integer :: i
+ character(len=*), intent(in) :: fmt
+ real, intent(in) :: x
+ character(len=*), intent(in) :: cmp
+ do i=1,size(real_kinds)
+ if (i == 1) then
+ write(s, fmt) real(x,kind=j(1))
+ else if (i == 2) then
+ write(s, fmt) real(x,kind=j(2))
+ else if (i == 3) then
+ write(s, fmt) real(x,kind=j(3))
+ else if (i == 4) then
+ write(s, fmt) real(x,kind=j(4))
+ end if
+ n_tst = n_tst + 1
+ if (s /= cmp) then
+ if (l_skip(i)) then
+ n_skip = n_skip + 1
+ else
+ print "(a,1x,a,' expected: ',1x,a)", fmt, s, cmp
+ n_cnt = n_cnt + 1
+ end if
+ end if
+ end do
+
+ end subroutine
+end program
+! { dg-output "All kinds rounded to nearest" { xfail { i?86-*-solaris2.9* hppa*-*-hpux* } } }
diff --git a/gcc/testsuite/gfortran.dg/goacc/combined-directives.f90 b/gcc/testsuite/gfortran.dg/goacc/combined-directives.f90
index 6977525..42a447a 100644
--- a/gcc/testsuite/gfortran.dg/goacc/combined-directives.f90
+++ b/gcc/testsuite/gfortran.dg/goacc/combined-directives.f90
@@ -1,17 +1,10 @@
! Exercise combined OpenACC directives.
-! { dg-do compile }
-! { dg-options "-fopenacc -fdump-tree-gimple" }
-
-! This error is temporary. Remove when support is added for these clauses
-! in the middle end.
-! { dg-prune-output "sorry, unimplemented" }
-
-! Update the reduction tests.
+! { dg-additional-options "-fdump-tree-gimple" }
subroutine test
implicit none
- integer a(100), i, j, z
+ integer a(100), i, j, y, z
! PARALLEL
@@ -73,10 +66,10 @@ subroutine test
end do
!$acc end parallel loop
-! !$acc parallel loop reduction (+:z) copy (z)
-! do i = 1, 100
-! end do
-! !$acc end parallel loop
+ !$acc parallel loop reduction (+:y) copy (y)
+ do i = 1, 100
+ end do
+ !$acc end parallel loop
! KERNELS
@@ -138,10 +131,10 @@ subroutine test
end do
!$acc end kernels loop
-! !$acc kernels loop reduction (+:z) copy (z)
-! do i = 1, 100
-! end do
-! !$acc end kernels loop
+ !$acc kernels loop reduction (+:y) copy (y)
+ do i = 1, 100
+ end do
+ !$acc end kernels loop
end subroutine test
! { dg-final { scan-tree-dump-times "acc loop private.i. private.j. collapse.2." 2 "gimple" } }
@@ -153,3 +146,5 @@ end subroutine test
! { dg-final { scan-tree-dump-times "acc loop private.i. private.j. tile.2, 3" 2 "gimple" } }
! { dg-final { scan-tree-dump-times "acc loop private.i. independent" 2 "gimple" } }
! { dg-final { scan-tree-dump-times "private.z" 2 "gimple" } }
+! { dg-final { scan-tree-dump-times "omp target oacc_\[^ \]+ map.force_tofrom:y" 2 "gimple" } }
+! { dg-final { scan-tree-dump-times "acc loop private.i. reduction..:y." 2 "gimple" } }
diff --git a/gcc/testsuite/gfortran.dg/goacc/data-tree.f95 b/gcc/testsuite/gfortran.dg/goacc/data-tree.f95
index 23745f3..44efc8a 100644
--- a/gcc/testsuite/gfortran.dg/goacc/data-tree.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/data-tree.f95
@@ -4,7 +4,7 @@
program test
implicit none
integer :: q, i, j, k, m, n, o, p, r, s, t, u, v, w
- logical :: l
+ logical :: l = .true.
!$acc data if(l) copy(i), copyin(j), copyout(k), create(m) &
!$acc present(o), pcopy(p), pcopyin(r), pcopyout(s), pcreate(t) &
diff --git a/gcc/testsuite/gfortran.dg/goacc/host_data-tree.f95 b/gcc/testsuite/gfortran.dg/goacc/host_data-tree.f95
index 23aba8c..4a11b9d 100644
--- a/gcc/testsuite/gfortran.dg/goacc/host_data-tree.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/host_data-tree.f95
@@ -3,7 +3,7 @@
program test
implicit none
- integer :: i
+ integer :: i = 1
!$acc host_data use_device(i)
!$acc end host_data
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-alias-2.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-alias-2.f95
new file mode 100644
index 0000000..7e348dd
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-alias-2.f95
@@ -0,0 +1,23 @@
+! { dg-additional-options "-O2" }
+! { dg-additional-options "-fdump-tree-ealias-all" }
+
+program main
+ implicit none
+ integer, parameter :: n = 2
+ integer :: a, b, c, d
+
+ !$acc kernels copyin (a) create (b) copyout (c) copy (d)
+ a = 0
+ b = 0
+ c = 0
+ d = 0
+ !$acc end kernels
+
+end program main
+
+! { dg-final { scan-tree-dump-times "clique 1 base 1" 4 "ealias" } }
+! { dg-final { scan-tree-dump-times "clique 1 base 2" 1 "ealias" } }
+! { dg-final { scan-tree-dump-times "clique 1 base 3" 1 "ealias" } }
+! { dg-final { scan-tree-dump-times "clique 1 base 4" 1 "ealias" } }
+! { dg-final { scan-tree-dump-times "clique 1 base 5" 1 "ealias" } }
+! { dg-final { scan-tree-dump-times "(?n)clique .* base .*" 8 "ealias" } }
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-alias-3.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-alias-3.f95
new file mode 100644
index 0000000..56f3d59
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-alias-3.f95
@@ -0,0 +1,19 @@
+! { dg-additional-options "-O2" }
+! { dg-additional-options "-fdump-tree-ealias-all" }
+
+program main
+ implicit none
+ integer, target :: a
+ integer, pointer :: ptr
+ ptr => a
+
+ !$acc kernels pcopyin (a, ptr)
+ a = 0
+ ptr = 1
+ !$acc end kernels
+
+end program main
+
+! Only the omp_data_i related loads should be annotated with cliques.
+! { dg-final { scan-tree-dump-times "clique 1 base 1" 2 "ealias" } }
+! { dg-final { scan-tree-dump-times "(?n)clique .* base .*" 2 "ealias" } }
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-alias-4.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-alias-4.f95
new file mode 100644
index 0000000..e65253b
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-alias-4.f95
@@ -0,0 +1,20 @@
+! { dg-additional-options "-O2" }
+! { dg-additional-options "-fdump-tree-ealias-all" }
+
+program main
+ implicit none
+ integer, parameter :: n = 2
+ integer, target, dimension (0:n-1) :: a
+ integer, pointer :: ptr(:)
+ ptr => a
+
+ !$acc kernels pcopyin (a, ptr(0:2))
+ a(0) = 0
+ ptr(0) = 1
+ !$acc end kernels
+
+end program main
+
+! Only the omp_data_i related loads should be annotated with cliques.
+! { dg-final { scan-tree-dump-times "clique 1 base 1" 3 "ealias" } }
+! { dg-final { scan-tree-dump-times "(?n)clique .* base .*" 3 "ealias" } }
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-alias.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-alias.f95
new file mode 100644
index 0000000..8d6ccb3
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-alias.f95
@@ -0,0 +1,23 @@
+! { dg-additional-options "-O2" }
+! { dg-additional-options "-fdump-tree-ealias-all" }
+
+program main
+ implicit none
+ integer, parameter :: n = 2
+ integer, dimension (0:n-1) :: a, b, c, d
+
+ !$acc kernels copyin (a) create (b) copyout (c) copy (d)
+ a(0) = 0
+ b(0) = 0
+ c(0) = 0
+ d(0) = 0
+ !$acc end kernels
+
+end program main
+
+! { dg-final { scan-tree-dump-times "clique 1 base 1" 4 "ealias" } }
+! { dg-final { scan-tree-dump-times "clique 1 base 2" 1 "ealias" } }
+! { dg-final { scan-tree-dump-times "clique 1 base 3" 1 "ealias" } }
+! { dg-final { scan-tree-dump-times "clique 1 base 4" 1 "ealias" } }
+! { dg-final { scan-tree-dump-times "clique 1 base 5" 1 "ealias" } }
+! { dg-final { scan-tree-dump-times "(?n)clique .* base .*" 8 "ealias" } }
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-loop-2.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-2.f95
new file mode 100644
index 0000000..865f7a6
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-2.f95
@@ -0,0 +1,44 @@
+! { dg-additional-options "-O2" }
+! { dg-additional-options "-fdump-tree-parloops1-all" }
+! { dg-additional-options "-fdump-tree-optimized" }
+
+program main
+ implicit none
+ integer, parameter :: n = 1024
+ integer, dimension (0:n-1) :: a, b, c
+ integer :: i, ii
+
+ !$acc kernels copyout (a(0:n-1))
+ do i = 0, n - 1
+ a(i) = i * 2
+ end do
+ !$acc end kernels
+
+ !$acc kernels copyout (b(0:n-1))
+ do i = 0, n -1
+ b(i) = i * 4
+ end do
+ !$acc end kernels
+
+ !$acc kernels copyin (a(0:n-1), b(0:n-1)) copyout (c(0:n-1))
+ do ii = 0, n - 1
+ c(ii) = a(ii) + b(ii)
+ end do
+ !$acc end kernels
+
+ do i = 0, n - 1
+ if (c(i) .ne. a(i) + b(i)) call abort
+ end do
+
+end program main
+
+! Check that only three loops are analyzed, and that all can be parallelized.
+! { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 3 "parloops1" } }
+! { dg-final { scan-tree-dump-not "FAILED:" "parloops1" } }
+
+! Check that the loop has been split off into a function.
+! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.0 " 1 "optimized" } }
+! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.1 " 1 "optimized" } }
+! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.2 " 1 "optimized" } }
+
+! { dg-final { scan-tree-dump-times "(?n)oacc function \\(0," 3 "parloops1" } }
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-2.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-2.f95
new file mode 100644
index 0000000..c9f3a62
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-2.f95
@@ -0,0 +1,50 @@
+! { dg-additional-options "-O2" }
+! { dg-additional-options "-fdump-tree-parloops1-all" }
+! { dg-additional-options "-fdump-tree-optimized" }
+
+program main
+ implicit none
+ integer, parameter :: n = 1024
+ integer, dimension (0:n-1) :: a, b, c
+ integer :: i, ii
+
+ !$acc data copyout (a(0:n-1))
+ !$acc kernels present (a(0:n-1))
+ do i = 0, n - 1
+ a(i) = i * 2
+ end do
+ !$acc end kernels
+ !$acc end data
+
+ !$acc data copyout (b(0:n-1))
+ !$acc kernels present (b(0:n-1))
+ do i = 0, n -1
+ b(i) = i * 4
+ end do
+ !$acc end kernels
+ !$acc end data
+
+ !$acc data copyin (a(0:n-1), b(0:n-1)) copyout (c(0:n-1))
+ !$acc kernels present (a(0:n-1), b(0:n-1), c(0:n-1))
+ do ii = 0, n - 1
+ c(ii) = a(ii) + b(ii)
+ end do
+ !$acc end kernels
+ !$acc end data
+
+ do i = 0, n - 1
+ if (c(i) .ne. a(i) + b(i)) call abort
+ end do
+
+end program main
+
+! Check that only three loops are analyzed, and that all can be parallelized.
+! { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 3 "parloops1" } }
+! { dg-final { scan-tree-dump-not "FAILED:" "parloops1" } }
+
+! Check that the loop has been split off into a function.
+! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.0 " 1 "optimized" } }
+! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.1 " 1 "optimized" } }
+! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.2 " 1 "optimized" } }
+
+! { dg-final { scan-tree-dump-times "(?n)oacc function \\(0," 3 "parloops1" } }
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-enter-exit-2.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-enter-exit-2.f95
new file mode 100644
index 0000000..3361607
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-enter-exit-2.f95
@@ -0,0 +1,50 @@
+! { dg-additional-options "-O2" }
+! { dg-additional-options "-fdump-tree-parloops1-all" }
+! { dg-additional-options "-fdump-tree-optimized" }
+
+program main
+ implicit none
+ integer, parameter :: n = 1024
+ integer, dimension (0:n-1) :: a, b, c
+ integer :: i, ii
+
+ !$acc enter data create (a(0:n-1))
+ !$acc kernels present (a(0:n-1))
+ do i = 0, n - 1
+ a(i) = i * 2
+ end do
+ !$acc end kernels
+ !$acc exit data copyout (a(0:n-1))
+
+ !$acc enter data create (b(0:n-1))
+ !$acc kernels present (b(0:n-1))
+ do i = 0, n -1
+ b(i) = i * 4
+ end do
+ !$acc end kernels
+ !$acc exit data copyout (b(0:n-1))
+
+ !$acc enter data copyin (a(0:n-1), b(0:n-1)) create (c(0:n-1))
+ !$acc kernels present (a(0:n-1), b(0:n-1), c(0:n-1))
+ do ii = 0, n - 1
+ c(ii) = a(ii) + b(ii)
+ end do
+ !$acc end kernels
+ !$acc exit data copyout (c(0:n-1))
+
+ do i = 0, n - 1
+ if (c(i) .ne. a(i) + b(i)) call abort
+ end do
+
+end program main
+
+! Check that only three loops are analyzed, and that all can be parallelized.
+! { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 3 "parloops1" } }
+! { dg-final { scan-tree-dump-not "FAILED:" "parloops1" } }
+
+! Check that the loop has been split off into a function.
+! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.0 " 1 "optimized" } }
+! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.1 " 1 "optimized" } }
+! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.2 " 1 "optimized" } }
+
+! { dg-final { scan-tree-dump-times "(?n)oacc function \\(0," 3 "parloops1" } }
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-enter-exit.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-enter-exit.f95
new file mode 100644
index 0000000..5ba56fb
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-enter-exit.f95
@@ -0,0 +1,48 @@
+! { dg-additional-options "-O2" }
+! { dg-additional-options "-fdump-tree-parloops1-all" }
+! { dg-additional-options "-fdump-tree-optimized" }
+
+program main
+ implicit none
+ integer, parameter :: n = 1024
+ integer, dimension (0:n-1) :: a, b, c
+ integer :: i, ii
+
+ !$acc enter data create (a(0:n-1), b(0:n-1), c(0:n-1))
+
+ !$acc kernels present (a(0:n-1))
+ do i = 0, n - 1
+ a(i) = i * 2
+ end do
+ !$acc end kernels
+
+ !$acc kernels present (b(0:n-1))
+ do i = 0, n -1
+ b(i) = i * 4
+ end do
+ !$acc end kernels
+
+ !$acc kernels present (a(0:n-1), b(0:n-1), c(0:n-1))
+ do ii = 0, n - 1
+ c(ii) = a(ii) + b(ii)
+ end do
+ !$acc end kernels
+
+ !$acc exit data copyout (a(0:n-1), b(0:n-1), c(0:n-1))
+
+ do i = 0, n - 1
+ if (c(i) .ne. a(i) + b(i)) call abort
+ end do
+
+end program main
+
+! Check that only three loops are analyzed, and that all can be parallelized.
+! { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 3 "parloops1" } }
+! { dg-final { scan-tree-dump-not "FAILED:" "parloops1" } }
+
+! Check that the loop has been split off into a function.
+! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.0 " 1 "optimized" } }
+! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.1 " 1 "optimized" } }
+! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.2 " 1 "optimized" } }
+
+! { dg-final { scan-tree-dump-times "(?n)oacc function \\(0," 3 "parloops1" } }
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-update.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-update.f95
new file mode 100644
index 0000000..a622a96
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-update.f95
@@ -0,0 +1,47 @@
+! { dg-additional-options "-O2" }
+! { dg-additional-options "-fdump-tree-parloops1-all" }
+! { dg-additional-options "-fdump-tree-optimized" }
+
+program main
+ implicit none
+ integer, parameter :: n = 1024
+ integer, dimension (0:n-1) :: a, b, c
+ integer :: i, ii
+
+ !$acc enter data create (a(0:n-1), b(0:n-1), c(0:n-1))
+
+ !$acc kernels present (a(0:n-1))
+ do i = 0, n - 1
+ a(i) = i * 2
+ end do
+ !$acc end kernels
+
+ do i = 0, n -1
+ b(i) = i * 4
+ end do
+
+ !$acc update device (b(0:n-1))
+
+ !$acc kernels present (a(0:n-1), b(0:n-1), c(0:n-1))
+ do ii = 0, n - 1
+ c(ii) = a(ii) + b(ii)
+ end do
+ !$acc end kernels
+
+ !$acc exit data copyout (a(0:n-1), c(0:n-1))
+
+ do i = 0, n - 1
+ if (c(i) .ne. a(i) + b(i)) call abort
+ end do
+
+end program main
+
+! Check that only three loops are analyzed, and that all can be parallelized.
+! { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 2 "parloops1" } }
+! { dg-final { scan-tree-dump-not "FAILED:" "parloops1" } }
+
+! Check that the loop has been split off into a function.
+! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.0 " 1 "optimized" } }
+! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.1 " 1 "optimized" } }
+
+! { dg-final { scan-tree-dump-times "(?n)oacc function \\(0," 2 "parloops1" } }
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data.f95
new file mode 100644
index 0000000..4ec2ac3
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data.f95
@@ -0,0 +1,48 @@
+! { dg-additional-options "-O2" }
+! { dg-additional-options "-fdump-tree-parloops1-all" }
+! { dg-additional-options "-fdump-tree-optimized" }
+
+program main
+ implicit none
+ integer, parameter :: n = 1024
+ integer, dimension (0:n-1) :: a, b, c
+ integer :: i, ii
+
+ !$acc data copyout (a(0:n-1), b(0:n-1), c(0:n-1))
+
+ !$acc kernels present (a(0:n-1))
+ do i = 0, n - 1
+ a(i) = i * 2
+ end do
+ !$acc end kernels
+
+ !$acc kernels present (b(0:n-1))
+ do i = 0, n -1
+ b(i) = i * 4
+ end do
+ !$acc end kernels
+
+ !$acc kernels present (a(0:n-1), b(0:n-1), c(0:n-1))
+ do ii = 0, n - 1
+ c(ii) = a(ii) + b(ii)
+ end do
+ !$acc end kernels
+
+ !$acc end data
+
+ do i = 0, n - 1
+ if (c(i) .ne. a(i) + b(i)) call abort
+ end do
+
+end program main
+
+! Check that only three loops are analyzed, and that all can be parallelized.
+! { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 3 "parloops1" } }
+! { dg-final { scan-tree-dump-not "FAILED:" "parloops1" } }
+
+! Check that the loop has been split off into a function.
+! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.0 " 1 "optimized" } }
+! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.1 " 1 "optimized" } }
+! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.2 " 1 "optimized" } }
+
+! { dg-final { scan-tree-dump-times "(?n)oacc function \\(0," 3 "parloops1" } }
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-loop-inner.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-inner.f95
index 4db3a50..3334741 100644
--- a/gcc/testsuite/gfortran.dg/goacc/kernels-loop-inner.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-inner.f95
@@ -1,5 +1,4 @@
! { dg-additional-options "-O2" }
-! { dg-additional-options "-ftree-parallelize-loops=32" }
program main
implicit none
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-loop-n.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-n.f95
new file mode 100644
index 0000000..409fe6f
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-n.f95
@@ -0,0 +1,41 @@
+! { dg-additional-options "-O2" }
+! { dg-additional-options "-fdump-tree-parloops1-all" }
+! { dg-additional-options "-fdump-tree-optimized" }
+
+module test
+contains
+ subroutine foo(n)
+ implicit none
+ integer :: n
+ integer, dimension (0:n-1) :: a, b, c
+ integer :: i, ii
+ do i = 0, n - 1
+ a(i) = i * 2
+ end do
+
+ do i = 0, n -1
+ b(i) = i * 4
+ end do
+
+ !$acc kernels copyin (a(0:n-1), b(0:n-1)) copyout (c(0:n-1))
+ do ii = 0, n - 1
+ c(ii) = a(ii) + b(ii)
+ end do
+ !$acc end kernels
+
+ do i = 0, n - 1
+ if (c(i) .ne. a(i) + b(i)) call abort
+ end do
+
+ end subroutine foo
+end module test
+
+! Check that only one loop is analyzed, and that it can be parallelized.
+! { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 1 "parloops1" } }
+! { dg-final { scan-tree-dump-not "FAILED:" "parloops1" } }
+
+! Check that the loop has been split off into a function.
+! { dg-final { scan-tree-dump-times "(?n);; Function __test_MOD_foo._omp_fn.0 " 1 "optimized" } }
+
+! TODO, PR70545.
+! { dg-final { scan-tree-dump-times "(?n)oacc function \\(0," 1 "parloops1" { xfail *-*-* } } }
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-loop.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-loop.f95
new file mode 100644
index 0000000..ae2cac6
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-loop.f95
@@ -0,0 +1,38 @@
+! { dg-additional-options "-O2" }
+! { dg-additional-options "-fdump-tree-parloops1-all" }
+! { dg-additional-options "-fdump-tree-optimized" }
+
+program main
+ implicit none
+ integer, parameter :: n = 1024
+ integer, dimension (0:n-1) :: a, b, c
+ integer :: i, ii
+
+ do i = 0, n - 1
+ a(i) = i * 2
+ end do
+
+ do i = 0, n -1
+ b(i) = i * 4
+ end do
+
+ !$acc kernels copyin (a(0:n-1), b(0:n-1)) copyout (c(0:n-1))
+ do ii = 0, n - 1
+ c(ii) = a(ii) + b(ii)
+ end do
+ !$acc end kernels
+
+ do i = 0, n - 1
+ if (c(i) .ne. a(i) + b(i)) call abort
+ end do
+
+end program main
+
+! Check that only one loop is analyzed, and that it can be parallelized.
+! { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 1 "parloops1" } }
+! { dg-final { scan-tree-dump-not "FAILED:" "parloops1" } }
+
+! Check that the loop has been split off into a function.
+! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.0 " 1 "optimized" } }
+
+! { dg-final { scan-tree-dump-times "(?n)oacc function \\(0," 1 "parloops1" } }
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-loops-adjacent.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-loops-adjacent.f95
index fef3d10..fb92da8 100644
--- a/gcc/testsuite/gfortran.dg/goacc/kernels-loops-adjacent.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-loops-adjacent.f95
@@ -1,5 +1,4 @@
! { dg-additional-options "-O2" }
-! { dg-additional-options "-ftree-parallelize-loops=10" }
program main
implicit none
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-tree.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-tree.f95
index fac5b85..4ec66de 100644
--- a/gcc/testsuite/gfortran.dg/goacc/kernels-tree.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-tree.f95
@@ -4,7 +4,7 @@
program test
implicit none
integer :: q, i, j, k, m, n, o, p, r, s, t, u, v, w
- logical :: l
+ logical :: l = .true.
!$acc kernels if(l) async copy(i), copyin(j), copyout(k), create(m) &
!$acc present(o), pcopy(p), pcopyin(r), pcopyout(s), pcreate(t) &
diff --git a/gcc/testsuite/gfortran.dg/goacc/loop-1.f95 b/gcc/testsuite/gfortran.dg/goacc/loop-1.f95
index 817039f..b5f9e03 100644
--- a/gcc/testsuite/gfortran.dg/goacc/loop-1.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/loop-1.f95
@@ -1,5 +1,3 @@
-! { dg-do compile }
-! { dg-additional-options "-fmax-errors=100" }
module test
implicit none
contains
@@ -29,14 +27,18 @@ subroutine test1
i = i + 1
end do
!$acc loop
- do 300 d = 1, 30, 6 ! { dg-error "integer" }
+ do 300 d = 1, 30, 6
i = d
300 a(i) = 1
+ ! { dg-warning "Deleted feature: Loop variable at .1. must be integer" "" { target *-*-* } 30 }
+ ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 30 }
!$acc loop
- do d = 1, 30, 5 ! { dg-error "integer" }
+ do d = 1, 30, 5
i = d
a(i) = 2
end do
+ ! { dg-warning "Deleted feature: Loop variable at .1. must be integer" "" { target *-*-* } 36 }
+ ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 36 }
!$acc loop
do i = 1, 30
if (i .eq. 16) exit ! { dg-error "EXIT statement" }
@@ -144,8 +146,10 @@ subroutine test1
end do
!$acc parallel loop collapse(2)
do i = 1, 3
- do r = 4, 6 ! { dg-error "integer" }
+ do r = 4, 6
end do
+ ! { dg-warning "Deleted feature: Loop variable at .1. must be integer" "" { target *-*-* } 149 }
+ ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 149 }
end do
! Both seq and independent are not allowed
@@ -167,4 +171,3 @@ subroutine test1
end subroutine test1
end module test
-! { dg-prune-output "Deleted" }
diff --git a/gcc/testsuite/gfortran.dg/goacc/loop-5.f95 b/gcc/testsuite/gfortran.dg/goacc/loop-5.f95
index 5cbd975..d059cf7 100644
--- a/gcc/testsuite/gfortran.dg/goacc/loop-5.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/loop-5.f95
@@ -1,9 +1,3 @@
-! { dg-do compile }
-! { dg-additional-options "-fmax-errors=100" }
-
-! { dg-prune-output "sorry, unimplemented" }
-! { dg-prune-output "Error: work-sharing region" }
-
program test
implicit none
integer :: i, j
diff --git a/gcc/testsuite/gfortran.dg/goacc/loop-6.f95 b/gcc/testsuite/gfortran.dg/goacc/loop-6.f95
index e844468..d0855b4 100644
--- a/gcc/testsuite/gfortran.dg/goacc/loop-6.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/loop-6.f95
@@ -1,11 +1,3 @@
-! { dg-do compile }
-! { dg-additional-options "-fmax-errors=100" }
-
-! This error is temporary. Remove when support is added for these clauses
-! in the middle end.
-! { dg-prune-output "sorry, unimplemented" }
-! { dg-prune-output "Error: work-sharing region" }
-
program test
implicit none
integer :: i, j
diff --git a/gcc/testsuite/gfortran.dg/goacc/loop-tree-1.f90 b/gcc/testsuite/gfortran.dg/goacc/loop-tree-1.f90
index 6cfd715..81bdc23 100644
--- a/gcc/testsuite/gfortran.dg/goacc/loop-tree-1.f90
+++ b/gcc/testsuite/gfortran.dg/goacc/loop-tree-1.f90
@@ -1,13 +1,7 @@
-! { dg-do compile }
! { dg-additional-options "-fdump-tree-original -std=f2008" }
! test for tree-dump-original and spaces-commas
-! This error is temporary. Remove when support is added for these clauses
-! in the middle end.
-! { dg-prune-output "sorry, unimplemented" }
-! { dg-prune-output "Error: work-sharing region" }
-
program test
implicit none
integer :: i, j, k, m, sum
diff --git a/gcc/testsuite/gfortran.dg/goacc/parallel-tree.f95 b/gcc/testsuite/gfortran.dg/goacc/parallel-tree.f95
index 9037f6c..5b2e01d 100644
--- a/gcc/testsuite/gfortran.dg/goacc/parallel-tree.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/parallel-tree.f95
@@ -6,7 +6,7 @@
program test
implicit none
integer :: q, i, j, k, m, n, o, p, r, s, t, u, v, w
- logical :: l
+ logical :: l = .true.
!$acc parallel if(l) async num_gangs(i) num_workers(i) vector_length(i) &
!$acc reduction(max:q), copy(i), copyin(j), copyout(k), create(m) &
diff --git a/gcc/testsuite/gfortran.dg/goacc/private-3.f95 b/gcc/testsuite/gfortran.dg/goacc/private-3.f95
index 3490263..a7c6d81 100644
--- a/gcc/testsuite/gfortran.dg/goacc/private-3.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/private-3.f95
@@ -14,6 +14,7 @@ program test
! !$acc end parallel
!$acc parallel private (k)
+ k = 0
!$acc loop reduction (+:k)
do i = 1, n
k = k + 1
diff --git a/gcc/testsuite/gfortran.dg/goacc/reduction-3.f95 b/gcc/testsuite/gfortran.dg/goacc/reduction-3.f95
new file mode 100644
index 0000000..72f0eb9
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/goacc/reduction-3.f95
@@ -0,0 +1,10 @@
+! { dg-do compile }
+
+subroutine foo (ia1)
+integer :: i1, i2
+
+!$acc parallel reduction (+:i1) private(i1) ! { dg-error "invalid private reduction on .i1." }
+!$acc end parallel
+!$acc parallel reduction (+:i2) firstprivate(i2) ! { dg-error "invalid private reduction on .i2." }
+!$acc end parallel
+end subroutine foo
diff --git a/gcc/testsuite/gfortran.dg/goacc/reduction-promotions.f90 b/gcc/testsuite/gfortran.dg/goacc/reduction-promotions.f90
new file mode 100644
index 0000000..6ff913a
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/goacc/reduction-promotions.f90
@@ -0,0 +1,46 @@
+! Ensure that each parallel reduction variable as a copy or pcopy
+! data clause.
+
+! { dg-additional-options "-fdump-tree-gimple" }
+
+program test
+ implicit none
+ integer :: v1, v2
+
+ !$acc parallel reduction(+:v1,v2)
+ !$acc end parallel
+
+ !$acc parallel reduction(+:v1,v2) copy(v1,v2)
+ !$acc end parallel
+
+ !$acc parallel reduction(+:v1,v2) pcopy(v1,v2)
+ !$acc end parallel
+
+ !$acc parallel reduction(+:v1,v2) present(v1,v2)
+ !$acc end parallel
+
+ !$acc parallel reduction(+:v1,v2) copyin(v1,v2) ! { dg-warning "incompatible data clause" }
+ !$acc end parallel
+
+ !$acc parallel reduction(+:v1,v2) pcopyin(v1,v2) ! { dg-warning "incompatible data clause" }
+ !$acc end parallel
+
+ !$acc parallel reduction(+:v1,v2) copyout(v1,v2) ! { dg-warning "incompatible data clause" }
+ !$acc end parallel
+
+ !$acc parallel reduction(+:v1,v2) pcopyout(v1,v2) ! { dg-warning "incompatible data clause" }
+ !$acc end parallel
+
+ !$acc parallel reduction(+:v1,v2) create(v1,v2) ! { dg-warning "incompatible data clause" }
+ !$acc end parallel
+
+ !$acc parallel reduction(+:v1,v2) pcreate(v1,v2) ! { dg-warning "incompatible data clause" }
+ !$acc end parallel
+end program test
+
+! { dg-final { scan-tree-dump-times "map.tofrom:v1" 8 "gimple" } }
+! { dg-final { scan-tree-dump-times "map.tofrom:v2" 8 "gimple" } }
+! { dg-final { scan-tree-dump-times "map.force_tofrom:v1" 1 "gimple" } }
+! { dg-final { scan-tree-dump-times "map.force_tofrom:v2" 1 "gimple" } }
+! { dg-final { scan-tree-dump-times "map.force_present:v1" 1 "gimple" } }
+! { dg-final { scan-tree-dump-times "map.force_present:v2" 1 "gimple" } }
diff --git a/gcc/testsuite/gfortran.dg/goacc/routine-5.f90 b/gcc/testsuite/gfortran.dg/goacc/routine-5.f90
index 68c5149..5037a31 100644
--- a/gcc/testsuite/gfortran.dg/goacc/routine-5.f90
+++ b/gcc/testsuite/gfortran.dg/goacc/routine-5.f90
@@ -5,6 +5,7 @@ module param
end module param
subroutine gang (a)
+ use param
!$acc routine gang
integer, intent (inout) :: a(N)
integer :: i
@@ -31,6 +32,7 @@ subroutine gang (a)
end subroutine gang
subroutine worker (a)
+ use param
!$acc routine worker
integer, intent (inout) :: a(N)
integer :: i
@@ -57,6 +59,7 @@ subroutine worker (a)
end subroutine worker
subroutine vector (a)
+ use param
!$acc routine vector
integer, intent (inout) :: a(N)
integer :: i
@@ -83,6 +86,7 @@ subroutine vector (a)
end subroutine vector
subroutine seq (a)
+ use param
!$acc routine seq
integer, intent (inout) :: a(N)
integer :: i
diff --git a/gcc/testsuite/gfortran.dg/goacc/uninit-copy-clause.f95 b/gcc/testsuite/gfortran.dg/goacc/uninit-copy-clause.f95
new file mode 100644
index 0000000..b2aae1d
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/goacc/uninit-copy-clause.f95
@@ -0,0 +1,29 @@
+! { dg-do compile }
+! { dg-additional-options "-Wuninitialized" }
+
+subroutine foo
+ integer :: i
+
+ !$acc kernels
+ i = 1
+ !$acc end kernels
+
+end subroutine foo
+
+subroutine foo2
+ integer :: i
+
+ !$acc kernels copy (i)
+ i = 1
+ !$acc end kernels
+
+end subroutine foo2
+
+subroutine foo3
+ integer :: i
+
+ !$acc kernels copyin (i)
+ i = 1
+ !$acc end kernels
+
+end subroutine foo3
diff --git a/gcc/testsuite/gfortran.dg/goacc/uninit-dim-clause.f95 b/gcc/testsuite/gfortran.dg/goacc/uninit-dim-clause.f95
new file mode 100644
index 0000000..b87d26f
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/goacc/uninit-dim-clause.f95
@@ -0,0 +1,17 @@
+! { dg-do compile }
+! { dg-additional-options "-Wuninitialized" }
+
+program test
+ implicit none
+ integer :: i, j, k
+
+ !$acc parallel num_gangs(i) ! { dg-warning "is used uninitialized in this function" }
+ !$acc end parallel
+
+ !$acc parallel num_workers(j) ! { dg-warning "is used uninitialized in this function" }
+ !$acc end parallel
+
+ !$acc parallel vector_length(k) ! { dg-warning "is used uninitialized in this function" }
+ !$acc end parallel
+
+end program test
diff --git a/gcc/testsuite/gfortran.dg/goacc/uninit-firstprivate-clause.f95 b/gcc/testsuite/gfortran.dg/goacc/uninit-firstprivate-clause.f95
new file mode 100644
index 0000000..14d960a
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/goacc/uninit-firstprivate-clause.f95
@@ -0,0 +1,18 @@
+! { dg-do compile }
+! { dg-additional-options "-Wuninitialized" }
+
+subroutine test
+ INTEGER :: i
+
+ !$acc parallel
+ i = 1
+ !$acc end parallel
+end subroutine test
+
+subroutine test2
+ INTEGER :: i
+
+ !$acc parallel firstprivate (i) ! { dg-warning "is used uninitialized in this function" }
+ i = 1
+ !$acc end parallel
+end subroutine test2
diff --git a/gcc/testsuite/gfortran.dg/goacc/uninit-if-clause.f95 b/gcc/testsuite/gfortran.dg/goacc/uninit-if-clause.f95
new file mode 100644
index 0000000..60dc53e
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/goacc/uninit-if-clause.f95
@@ -0,0 +1,20 @@
+! { dg-do compile }
+! { dg-additional-options "-Wuninitialized" }
+
+program test
+ implicit none
+ logical :: b, b2, b3, b4
+ integer :: data, data2
+
+ !$acc parallel if(b) ! { dg-warning "is used uninitialized in this function" }
+ !$acc end parallel
+
+ !$acc kernels if(b2) ! { dg-warning "is used uninitialized in this function" }
+ !$acc end kernels
+
+ !$acc data if(b3) ! { dg-warning "is used uninitialized in this function" }
+ !$acc end data
+
+ !$acc update if(b4) self(data2) ! { dg-warning "is used uninitialized in this function" }
+
+end program test
diff --git a/gcc/testsuite/gfortran.dg/goacc/uninit-use-device-clause.f95 b/gcc/testsuite/gfortran.dg/goacc/uninit-use-device-clause.f95
new file mode 100644
index 0000000..873eea7
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/goacc/uninit-use-device-clause.f95
@@ -0,0 +1,10 @@
+! { dg-do compile }
+! { dg-additional-options "-Wuninitialized" }
+
+subroutine test
+ integer :: i
+
+ !$acc host_data use_device(i) ! { dg-warning "is used uninitialized in this function" }
+ !$acc end host_data
+end subroutine test
+
diff --git a/gcc/testsuite/gfortran.dg/gomp/gomp.exp b/gcc/testsuite/gfortran.dg/gomp/gomp.exp
index 625361b..1cd2e36 100644
--- a/gcc/testsuite/gfortran.dg/gomp/gomp.exp
+++ b/gcc/testsuite/gfortran.dg/gomp/gomp.exp
@@ -30,7 +30,7 @@ dg-init
# Main loop.
gfortran-dg-runtest [lsort \
- [find $srcdir/$subdir *.\[fF\]{,90,95,03,08} ] ] "" "-fopenmp"
+ [find $srcdir/$subdir *.\[fF\]{,90,95,03,08} ] ] "" "-fopenmp -Wno-hsa"
# All done.
dg-finish
diff --git a/gcc/testsuite/gfortran.dg/gomp/gridify-1.f90 b/gcc/testsuite/gfortran.dg/gomp/gridify-1.f90
new file mode 100644
index 0000000..00ff7f5
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/gomp/gridify-1.f90
@@ -0,0 +1,16 @@
+! { dg-do compile }
+! { dg-require-effective-target offload_hsa }
+! { dg-options "-fopenmp -fdump-tree-omplower-details" } */
+
+subroutine vector_square(n, a, b)
+ integer i, n, b(n), a(n)
+!$omp target teams
+!$omp distribute parallel do
+ do i=1,n
+ b(i) = a(i) * a(i)
+ enddo
+!$omp end distribute parallel do
+!$omp end target teams
+end subroutine vector_square
+
+! { dg-final { scan-tree-dump "Target construct will be turned into a gridified GPGPU kernel" "omplower" } }
diff --git a/gcc/testsuite/gfortran.dg/gomp/pr52531.f90 b/gcc/testsuite/gfortran.dg/gomp/pr52531.f90
new file mode 100644
index 0000000..e39d359
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/gomp/pr52531.f90
@@ -0,0 +1,16 @@
+! { dg-do compile }
+! PR fortran/52531
+module test_mod
+ type, public :: test_type
+ end type
+contains
+ subroutine foo(bar)
+ type(test_type) :: bar
+!$omp parallel default(none) shared(bar) ! Compiles if one removes default(none)
+ call question(bar)
+!$omp end parallel
+ end subroutine
+ subroutine question(var)
+ class(test_type), intent(in) :: var ! Compiles if one replaces class by type
+ end subroutine
+end module
diff --git a/gcc/testsuite/gfortran.dg/gomp/target1.f90 b/gcc/testsuite/gfortran.dg/gomp/target1.f90
index 14db497..1e77176 100644
--- a/gcc/testsuite/gfortran.dg/gomp/target1.f90
+++ b/gcc/testsuite/gfortran.dg/gomp/target1.f90
@@ -1,5 +1,4 @@
! { dg-do compile }
-! { dg-options "-fopenmp" }
module target1
interface
diff --git a/gcc/testsuite/gfortran.dg/gomp/target2.f90 b/gcc/testsuite/gfortran.dg/gomp/target2.f90
index 7521331..dfe0ec3 100644
--- a/gcc/testsuite/gfortran.dg/gomp/target2.f90
+++ b/gcc/testsuite/gfortran.dg/gomp/target2.f90
@@ -1,5 +1,5 @@
! { dg-do compile }
-! { dg-options "-fopenmp -ffree-line-length-160" }
+! { dg-additional-options "-ffree-line-length-160" }
subroutine foo (n, s, t, u, v, w)
integer :: n, i, s, t, u, v, w
diff --git a/gcc/testsuite/gfortran.dg/gomp/target3.f90 b/gcc/testsuite/gfortran.dg/gomp/target3.f90
index 7ba42a0..d968e54 100644
--- a/gcc/testsuite/gfortran.dg/gomp/target3.f90
+++ b/gcc/testsuite/gfortran.dg/gomp/target3.f90
@@ -1,5 +1,4 @@
! { dg-do compile }
-! { dg-options "-fopenmp" }
subroutine foo (r)
integer :: i, r
diff --git a/gcc/testsuite/gfortran.dg/graphite/pr68715.f90 b/gcc/testsuite/gfortran.dg/graphite/pr68715.f90
new file mode 100644
index 0000000..c011756
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/graphite/pr68715.f90
@@ -0,0 +1,31 @@
+! { dg-do compile }
+! { dg-options "-floop-nest-optimize -O1" }
+
+SUBROUTINE se_core_core_interaction(calculate_forces)
+ INTEGER, PARAMETER :: dp=8
+ LOGICAL, INTENT(in) :: calculate_forces
+ REAL(KIND=dp), DIMENSION(3) :: force_ab, rij
+ LOGICAL :: lfoo,kfoo,mfoo,nfoo,ffoo
+ INTEGER, PARAMETER :: mi2=42
+ CALL dummy(lfoo,kfoo,mfoo,nfoo,method_id,core_core)
+ IF (lfoo) THEN
+ DO WHILE (ffoo())
+ IF (lfoo) CYCLE
+ IF (kfoo) CYCLE
+ dr1 = DOT_PRODUCT(rij,rij)
+ IF (dr1 > rij_threshold) THEN
+ SELECT CASE (method_id)
+ CASE (mi2)
+ IF (calculate_forces) THEN
+ CALL dummy2(force_ab)
+ IF (nfoo) THEN
+ force_ab = force_ab + core_core*dr3inv
+ END IF
+ END IF
+ END SELECT
+ END IF
+ enuclear = enuclear + enucij
+ END DO
+ CALL dummy3(enuclear)
+ END IF
+END SUBROUTINE se_core_core_interaction
diff --git a/gcc/testsuite/gfortran.dg/include_6.f90 b/gcc/testsuite/gfortran.dg/include_6.f90
index 0bac390..f5bb085 100644
--- a/gcc/testsuite/gfortran.dg/include_6.f90
+++ b/gcc/testsuite/gfortran.dg/include_6.f90
@@ -1,5 +1,6 @@
! { dg-do compile }
! { dg-options "-I gfortran.log" }
-! { dg-warning "is not a directory" "" { target *-*-* } 0 }
+! { dg-error "is not a directory" "" { target *-*-* } 0 }
+! { dg-prune-output "compilation terminated." }
end
diff --git a/gcc/testsuite/gfortran.dg/include_9.f90 b/gcc/testsuite/gfortran.dg/include_9.f90
new file mode 100644
index 0000000..c4ef50f
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/include_9.f90
@@ -0,0 +1,6 @@
+! { dg-do compile }
+! PR69043 Trying to include a directory causes an infinite loop
+ include '.'
+ program main
+ end program
+! { dg-error "is not a regular file" " " { target *-*-* } 3 }
diff --git a/gcc/testsuite/gfortran.dg/namelist_89.f90 b/gcc/testsuite/gfortran.dg/namelist_89.f90
new file mode 100644
index 0000000..cfae466
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/namelist_89.f90
@@ -0,0 +1,47 @@
+! { dg-do run }
+! PR69456 Namelist value with trailing sign is ignored without error
+implicit none
+integer :: ios
+character(256) :: errormsg
+real :: r1 = -1
+real :: r2 = -1
+real :: r3 = -1
+real :: r4 = -1
+complex :: c1 = (-1,-1)
+namelist /nml/ r1, r2, r3, r4, c1
+
+open (99, status="scratch")
+
+write(99,*) "&nml"
+write(99,*) " r1=1+1" ! Treated as 1e+1!
+write(99,*) " r2=1-1" ! Treated as 1e-1!
+write(99,*) " r3=1+1" ! Treated as 1e+1!
+write(99,*) " r4=1-1" ! Treated as 1e-1!
+write(99,*) " c1=(1-,1+1)" ! Should give error on item number 5
+write(99,*) "/"
+
+rewind(99)
+
+read (99, nml=nml, iostat=ios, iomsg=errormsg)
+if (ios.ne.5010) call abort
+if (scan(errormsg, "5").ne.44) call abort
+
+rewind(99)
+
+write(99,*) "&nml"
+write(99,*) " r1=1+1" ! Treated as 1e+1!
+write(99,*) " r2=1-" ! Should give error on item number 2
+write(99,*) " r3=1+1" ! Treated as 1e+1!
+write(99,*) " r4=1-1" ! Treated as 1e-1!
+write(99,*) " c1=(1-1,1+1)" ! Treated as (1e-1,1e+1)!
+write(99,*) "/"
+
+rewind(99)
+
+read (99, nml=nml, iostat=ios, iomsg=errormsg)
+if (ios.ne.5010) call abort
+if (scan(errormsg, "2").ne.25) call abort
+
+close (99)
+
+end
diff --git a/gcc/testsuite/gfortran.dg/newunit_4.f90 b/gcc/testsuite/gfortran.dg/newunit_4.f90
new file mode 100644
index 0000000..4d7d738
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/newunit_4.f90
@@ -0,0 +1,7 @@
+! { dg-do compile }
+! PR69110 ICE with NEWUNIT
+subroutine open_file_safe(fname, fstatus, faction, fposition, funit)
+ character(*), intent(in) :: fname, fstatus, faction, fposition
+ integer, intent(out) :: funit
+ open(newunit=funit, status=fstatus)
+end subroutine open_file_safe
diff --git a/gcc/testsuite/gfortran.dg/parameter_array_init_7.f90 b/gcc/testsuite/gfortran.dg/parameter_array_init_7.f90
new file mode 100644
index 0000000..890da35
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/parameter_array_init_7.f90
@@ -0,0 +1,8 @@
+! { dg-do compile }
+! PR68566 ICE on using unusable array in reshape
+program p
+ integer, parameter :: n = 2
+ integer, parameter :: a(:) = 0 !{ dg-error "automatic or of deferred shape" }
+ integer, parameter :: b(n, n) = reshape([a, 1+a], [n, n])
+end
+
diff --git a/gcc/testsuite/gfortran.dg/pr36192.f90 b/gcc/testsuite/gfortran.dg/pr36192.f90
index df3bfd7..ebf95e3 100644
--- a/gcc/testsuite/gfortran.dg/pr36192.f90
+++ b/gcc/testsuite/gfortran.dg/pr36192.f90
@@ -3,7 +3,6 @@
!
program three_body
real, parameter :: n = 2, d = 2
- real, dimension(n,d) :: x ! { dg-error "of INTEGER type|of INTEGER type" }
- x(1,:) = (/ 1.0, 0.0 /)
+ real, dimension(n,d) :: x ! { dg-error "Expecting a scalar INTEGER" }
+ x(1,:) = (/ 1.0, 0.0 /) ! { dg-error "Unclassifiable" }
end program three_body
-! { dg-prune-output "have constant shape" }
diff --git a/gcc/testsuite/gfortran.dg/pr36192_1.f90 b/gcc/testsuite/gfortran.dg/pr36192_1.f90
index 77df317..687a465 100644
--- a/gcc/testsuite/gfortran.dg/pr36192_1.f90
+++ b/gcc/testsuite/gfortran.dg/pr36192_1.f90
@@ -2,11 +2,11 @@
! PR fortran/36192
program three_body
real, parameter :: n = 2, d = 2
- real, dimension(n,d) :: x_hq ! { dg-error "of INTEGER type|of INTEGER type" }
+ real, dimension(n,d) :: x_hq ! { dg-error "Expecting a scalar INTEGER" }
call step(x_hq)
contains
subroutine step(x)
real, dimension(:,:), intent(in) :: x
end subroutine step
end program three_body
-! { dg-prune-output "must have constant shape" }
+! { dg-prune-output "Rank mismatch in argument" }
diff --git a/gcc/testsuite/gfortran.dg/pr56007.f b/gcc/testsuite/gfortran.dg/pr56007.f
new file mode 100644
index 0000000..644f28ef
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr56007.f
@@ -0,0 +1,10 @@
+! { dg-do compile }
+! PR fortran/56007
+! Based on testcase by Tobias Schlüter
+
+ integer iw1(90), doiw1(90)
+ do iw1(1)=1
+ do iw1=1
+ do iw1=1,2 ! { dg-error "cannot be an array" }
+ end do ! { dg-error "Expecting END PROGRAM statement" }
+ END
diff --git a/gcc/testsuite/gfortran.dg/pr56007.f90 b/gcc/testsuite/gfortran.dg/pr56007.f90
new file mode 100644
index 0000000..b91baf5
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr56007.f90
@@ -0,0 +1,11 @@
+! { dg-do compile }
+! PR fortran/56007
+! Based on testcase by Tobias Schlüter
+
+ integer iw1(90), doiw1(90)
+ do iw1=1,2 ! { dg-error "cannot be an array" }
+ end do ! { dg-error "Expecting END PROGRAM statement" }
+ do iw1(1)=1 ! { dg-error "Unclassifiable statement" }
+ do iw1=1 ! { dg-error "cannot be an array" }
+ end do ! { dg-error "Expecting END PROGRAM statement" }
+END program
diff --git a/gcc/testsuite/gfortran.dg/pr59700.f90 b/gcc/testsuite/gfortran.dg/pr59700.f90
index 579d8a4..15bf261 100644
--- a/gcc/testsuite/gfortran.dg/pr59700.f90
+++ b/gcc/testsuite/gfortran.dg/pr59700.f90
@@ -35,6 +35,6 @@ program foo
rewind(fd)
msg = 'ok'
read(fd, *, err=40, iomsg=msg) c1, c2
-40 if (msg /= 'Bad floating point number for item 2') call abort
+40 if (msg /= 'Bad complex floating point number for item 2') call abort
close(fd)
end program foo
diff --git a/gcc/testsuite/gfortran.dg/pr60126.f90 b/gcc/testsuite/gfortran.dg/pr60126.f90
new file mode 100644
index 0000000..038f544
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr60126.f90
@@ -0,0 +1,18 @@
+! { dg-do compile }
+! PR fortran/60126 - ICE on pointer rank remapping
+! Based on testcase by Michel Valin <mfvalin at gmail dot com>
+
+subroutine simple_bug_demo
+ implicit none
+ interface
+ function offset_ptr_R4(nelements) result (dest)
+ implicit none
+ real, pointer, dimension(:) :: dest
+ integer, intent(IN) :: nelements
+ end function offset_ptr_R4
+ end interface
+
+ real, dimension(:,:), pointer :: R2D
+
+ R2D(-2:2,-3:3) => offset_ptr_R4(100)
+end
diff --git a/gcc/testsuite/gfortran.dg/pr69987.f90 b/gcc/testsuite/gfortran.dg/pr69987.f90
new file mode 100644
index 0000000..9e0c9ff
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr69987.f90
@@ -0,0 +1,28 @@
+! { dg-do compile }
+! { dg-options "-O3 -fprefetch-loop-arrays -w" }
+
+MODULE cp_lbfgs
+ INTEGER, PARAMETER :: dp=8
+CONTAINS
+ SUBROUTINE mainlb(n, m, x, l, u, nbd, f, g, factr, pgtol, ws, wy, &
+ csave, lsave, isave, dsave)
+ REAL(KIND=dp) :: x(n), l(n), u(n)
+ REAL(KIND=dp) :: f, g(n), factr, pgtol, ws(n, m), wy(n, m), sy(m, m), &
+ ss(m, m), wt(m, m), wn(2*m, 2*m), snd(2*m, 2*m), z(n), r(n), d(n), &
+ t(n), wa(8*m)
+ CHARACTER(len=60) :: task
+ IF (task == 'START') THEN
+ IF (task(1:5) == 'FG_LN') GOTO 666
+ ENDIF
+222 CONTINUE
+ DO 40 i = 1, n
+ d(i) = z(i) - x(i)
+40 ENDDO
+666 CONTINUE
+ IF (info /= 0 .OR. iback >= 20) THEN
+ CALL dcopy(n,r,1,g,1)
+ ENDIF
+ GOTO 222
+ END SUBROUTINE mainlb
+END MODULE cp_lbfgs
+
diff --git a/gcc/testsuite/gfortran.dg/prof/dynamic_dispatch_6.f03 b/gcc/testsuite/gfortran.dg/prof/dynamic_dispatch_6.f03
new file mode 100644
index 0000000..82e4e6f
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/prof/dynamic_dispatch_6.f03
@@ -0,0 +1,68 @@
+! { dg-require-profiling "-fprofile-generate" }
+! { dg-options "-Ofast" }
+!
+! PR 45076: [OOP] gfortran.dg/dynamic_dispatch_6.f03 ICEs with -fprofile-use
+!
+! Contributed by Damian Rouson <damian@rouson.net>
+
+module field_module
+ implicit none
+ private
+ public :: field
+ type ,abstract :: field
+ end type
+end module
+
+module periodic_5th_order_module
+ use field_module ,only : field
+ implicit none
+ type ,extends(field) :: periodic_5th_order
+ end type
+end module
+
+module field_factory_module
+ implicit none
+ private
+ public :: field_factory
+ type, abstract :: field_factory
+ contains
+ procedure(create_interface), deferred :: create
+ end type
+ abstract interface
+ function create_interface(this)
+ use field_module ,only : field
+ import :: field_factory
+ class(field_factory), intent(in) :: this
+ class(field) ,pointer :: create_interface
+ end function
+ end interface
+end module
+
+module periodic_5th_factory_module
+ use field_factory_module , only : field_factory
+ implicit none
+ private
+ public :: periodic_5th_factory
+ type, extends(field_factory) :: periodic_5th_factory
+ contains
+ procedure :: create=>new_periodic_5th_order
+ end type
+contains
+ function new_periodic_5th_order(this)
+ use field_module ,only : field
+ use periodic_5th_order_module ,only : periodic_5th_order
+ class(periodic_5th_factory), intent(in) :: this
+ class(field) ,pointer :: new_periodic_5th_order
+ end function
+end module
+
+program main
+ use field_module ,only : field
+ use field_factory_module ,only : field_factory
+ use periodic_5th_factory_module ,only : periodic_5th_factory
+ implicit none
+ class(field) ,pointer :: u
+ class(field_factory), allocatable :: field_creator
+ allocate (periodic_5th_factory :: field_creator)
+ u => field_creator%create()
+end program
diff --git a/gcc/testsuite/gfortran.dg/prof/prof.exp b/gcc/testsuite/gfortran.dg/prof/prof.exp
new file mode 100644
index 0000000..0bad01d
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/prof/prof.exp
@@ -0,0 +1,56 @@
+# Copyright (C) 2001-2016 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# Test the functionality of programs compiled with profile-directed block
+# ordering using -fprofile-generate followed by -fprofile-use.
+
+load_lib target-supports.exp
+
+# Some targets don't support tree profiling.
+if { ![check_profiling_available "-fprofile-generate"] } {
+ return
+}
+
+# The procedures in profopt.exp need these parameters.
+set tool gfortran
+set prof_ext "gcda"
+
+if $tracelevel then {
+ strace $tracelevel
+}
+
+# Load support procs.
+load_lib profopt.exp
+
+# Save and override the default list defined in profopt.exp.
+set treeprof_save_profopt_options $PROFOPT_OPTIONS
+set PROFOPT_OPTIONS [list {}]
+
+# These are globals used by profopt-execute. The first is options
+# needed to generate profile data, the second is options to use the
+# profile data.
+set profile_option "-fprofile-generate -D_PROFILE_GENERATE"
+set feedback_option "-fprofile-use -D_PROFILE_USE"
+
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.f*]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] then {
+ continue
+ }
+ profopt-execute $src
+}
+
+set PROFOPT_OPTIONS $treeprof_save_profopt_options
diff --git a/gcc/testsuite/gfortran.dg/real_dimension_1.f b/gcc/testsuite/gfortran.dg/real_dimension_1.f
index 73e9131..3dd1a5a 100644
--- a/gcc/testsuite/gfortran.dg/real_dimension_1.f
+++ b/gcc/testsuite/gfortran.dg/real_dimension_1.f
@@ -1,7 +1,7 @@
! { dg-do compile }
-! PR 34305 - make sure there's an error message for specifying a
+! PR 34305 - Test for specifying a real as dimension
program test
- parameter (datasize = 1000)
- dimension idata (datasize) ! { dg-error "must be of INTEGER type|must have constant shape" }
- idata (1) = -1
+ real , parameter :: dsize = 1000
+ dimension idata (dsize) ! { dg-error "scalar INTEGER expression" }
+ idata (1) = -1 ! { dg-error "must have the pointer attribute" }
end
diff --git a/gcc/testsuite/gfortran.dg/realloc_on_assign_26.f90 b/gcc/testsuite/gfortran.dg/realloc_on_assign_26.f90
new file mode 100644
index 0000000..4791c24
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/realloc_on_assign_26.f90
@@ -0,0 +1,12 @@
+! { dg-do run }
+! PR 68147 - no temprorary within the IF statement.
+! Original test case by Martin Reinecke.
+program test
+ implicit none
+ character(len=:),allocatable ::name
+ name="./a.out"
+ if (index(name,"/") /= 0) THEN
+ name=name(3:)
+ if (name .ne. "a.out") call abort
+ endif
+end program
diff --git a/gcc/testsuite/gfortran.dg/submodule_14.f08 b/gcc/testsuite/gfortran.dg/submodule_14.f08
new file mode 100644
index 0000000..0d0806d
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/submodule_14.f08
@@ -0,0 +1,49 @@
+! { dg-do compile }
+!
+! Check the fix for PR70031, where the 'module' prefix had to preceed
+! 'function/subroutine' in the interface (or in the CONTAINS section.
+!
+! As reported by "Bulova" on
+! https://groups.google.com/forum/#!topic/comp.lang.fortran/hE8LkVMhghQ
+!
+module test
+ Interface
+ Module Recursive Subroutine sub1 (x)
+ Integer, Intent (InOut) :: x
+ End Subroutine sub1
+ module recursive function fcn1 (x) result(res)
+ integer, intent (inout) :: x
+ integer :: res
+ end function
+ End Interface
+end module test
+
+submodule(test) testson
+ integer :: n = 10
+contains
+ Module Procedure sub1
+ If (x < n) Then
+ x = x + 1
+ Call sub1 (x)
+ End If
+ End Procedure sub1
+ module function fcn1 (x) result(res)
+ integer, intent (inout) :: x
+ integer :: res
+ res = x - 1
+ if (x > 0) then
+ x = fcn1 (res)
+ else
+ res = x
+ end if
+ end function
+end submodule testson
+
+ use test
+ integer :: x = 5
+ call sub1(x)
+ if (x .ne. 10) call abort
+ x = 10
+ if (fcn1 (x) .ne. 0) call abort
+end
+
diff --git a/gcc/testsuite/gfortran.dg/submodule_15.f08 b/gcc/testsuite/gfortran.dg/submodule_15.f08
new file mode 100644
index 0000000..499bc66
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/submodule_15.f08
@@ -0,0 +1,58 @@
+! { dg-do run }
+!
+! Check the fix for PR69524, where module procedures were not permitted
+! in a module CONTAINS section.
+!
+! Reorted by Kirill Yukhin <kyukhin@gcc.gnu.org>
+!
+module A
+ implicit none
+ interface
+ module subroutine A1(i)
+ integer, intent(inout) :: i
+ end subroutine A1
+ module subroutine A2(i)
+ integer, intent(inout) :: i
+ end subroutine A2
+ integer module function A3(i)
+ integer, intent(inout) :: i
+ end function A3
+ module subroutine B1(i)
+ integer, intent(inout) :: i
+ end subroutine B1
+ end interface
+ integer :: incr ! Make sure that everybody can access a module variable
+contains
+ module subroutine A1(i) ! Full declaration
+ integer, intent(inout) :: i
+ call b1 (i) ! Call the submodule procedure
+ incr = incr + 1
+ end subroutine A1
+
+ module PROCEDURE A2 ! Abreviated declaration
+ call b1 (i) ! Call the submodule procedure
+ incr = incr + 1
+ end procedure A2
+
+ module PROCEDURE A3 ! Abreviated declaration
+ call a1 (i) ! Call the module procedure in the module
+ call a2 (i) ! ditto
+ call b1 (i) ! Call the submodule procedure
+ incr = incr + 1
+ a3 = i + incr
+ end procedure A3
+end module A
+
+submodule (A) a_son
+ implicit none
+contains
+ module procedure b1
+ i = i + incr
+ end procedure
+end submodule
+
+ use A
+ integer :: i = 1
+ incr = 1
+ if (a3(i) .ne. 11) call abort
+end
diff --git a/gcc/testsuite/gfortran.dg/unconstrained_commons.f b/gcc/testsuite/gfortran.dg/unconstrained_commons.f
new file mode 100644
index 0000000..bee67ab
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/unconstrained_commons.f
@@ -0,0 +1,20 @@
+! { dg-do compile }
+! { dg-options "-O3 -funconstrained-commons -fdump-tree-dom2-details" }
+
+! Test for PR69368: a single-element array in a common block, which will be
+! overridden with a larger size at link time (contrary to language spec).
+! Dominator opts considers accesses to differently-computed elements of X as
+! equivalent, unless -funconstrained-commons is passed in.
+ SUBROUTINE FOO
+ IMPLICIT DOUBLE PRECISION (X)
+ INTEGER J
+ COMMON /MYCOMMON / X(1)
+ DO 10 J=1,1024
+ X(J+1)=X(J+7)
+ 10 CONTINUE
+ RETURN
+ END
+! { dg-final { scan-tree-dump-not "FIND" "dom2" } }
+! We should retain both a read and write of mycommon.x.
+! { dg-final { scan-tree-dump-times " _\[0-9\]+ = mycommon\\.x\\\[_\[0-9\]+\\\];" 1 "dom2" } }
+! { dg-final { scan-tree-dump-times " mycommon\\.x\\\[j?_\[0-9\]+\\\] = _\[0-9\]+;" 1 "dom2" } }
diff --git a/gcc/testsuite/gfortran.dg/unlimited_polymorphic_25.f90 b/gcc/testsuite/gfortran.dg/unlimited_polymorphic_25.f90
new file mode 100644
index 0000000..d0b2a2e
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/unlimited_polymorphic_25.f90
@@ -0,0 +1,40 @@
+! { dg-do run }
+!
+! Test contributed by Valery Weber <valeryweber@hotmail.com>
+
+module mod
+
+ TYPE, PUBLIC :: base_type
+ END TYPE base_type
+
+ TYPE, PUBLIC :: dict_entry_type
+ CLASS( * ), ALLOCATABLE :: key
+ CLASS( * ), ALLOCATABLE :: val
+ END TYPE dict_entry_type
+
+
+contains
+
+ SUBROUTINE dict_put ( this, key, val )
+ CLASS(dict_entry_type), INTENT(INOUT) :: this
+ CLASS(base_type), INTENT(IN) :: key, val
+ INTEGER :: istat
+ ALLOCATE( this%key, SOURCE=key, STAT=istat )
+ end SUBROUTINE dict_put
+end module mod
+
+program test
+ use mod
+ type(dict_entry_type) :: t
+ type(base_type) :: a, b
+ call dict_put(t, a, b)
+
+ if (.NOT. allocated(t%key)) call abort()
+ select type (x => t%key)
+ type is (base_type)
+ class default
+ call abort()
+ end select
+ deallocate(t%key)
+end
+
diff --git a/gcc/testsuite/gfortran.dg/unlimited_polymorphic_26.f90 b/gcc/testsuite/gfortran.dg/unlimited_polymorphic_26.f90
new file mode 100644
index 0000000..1300069
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/unlimited_polymorphic_26.f90
@@ -0,0 +1,47 @@
+! { dg-do run }
+!
+! Test contributed by Valery Weber <valeryweber@hotmail.com>
+
+module mod
+
+ TYPE, PUBLIC :: dict_entry_type
+ CLASS( * ), ALLOCATABLE :: key
+ CLASS( * ), ALLOCATABLE :: val
+ END TYPE dict_entry_type
+
+
+contains
+
+ SUBROUTINE dict_put ( this, key, val )
+ CLASS(dict_entry_type), INTENT(INOUT) :: this
+ CLASS(*), INTENT(IN) :: key, val
+ INTEGER :: istat
+ ALLOCATE( this%key, SOURCE=key, STAT=istat )
+ ALLOCATE( this%val, SOURCE=val, STAT=istat )
+ end SUBROUTINE dict_put
+end module mod
+
+program test
+ use mod
+ type(dict_entry_type) :: t
+ call dict_put(t, "foo", 42)
+
+ if (.NOT. allocated(t%key)) call abort()
+ select type (x => t%key)
+ type is (CHARACTER(*))
+ if (x /= "foo") call abort()
+ class default
+ call abort()
+ end select
+ deallocate(t%key)
+
+ if (.NOT. allocated(t%val)) call abort()
+ select type (x => t%val)
+ type is (INTEGER)
+ if (x /= 42) call abort()
+ class default
+ call abort()
+ end select
+ deallocate(t%val)
+end
+
diff --git a/gcc/testsuite/gfortran.dg/vect/pr69882.f90 b/gcc/testsuite/gfortran.dg/vect/pr69882.f90
new file mode 100644
index 0000000..f77e33f
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/vect/pr69882.f90
@@ -0,0 +1,41 @@
+! { dg-additional-options "-Ofast" }
+! { dg-additional-options "-mavx" { target avx_runtime } }
+
+subroutine foo(a, x)
+ implicit none
+
+ integer, parameter :: XX=4, YY=26
+ integer, intent(in) :: x
+ real *8, intent(in) :: a(XX,YY)
+ real *8 :: c(XX)
+
+ integer i, k
+
+ c = 0
+
+ do k=x,YY
+ do i=1,2
+ c(i) = max(c(i), a(i,k))
+ end do
+ end do
+
+ PRINT *, "c=", c
+
+ IF (c(1) .gt. 0.0) THEN
+ CALL ABORT
+ END IF
+
+ IF (c(2) .gt. 0.0) THEN
+ CALL ABORT
+ END IF
+end subroutine foo
+
+PROGRAM MAIN
+ real *8 a(4, 26)
+
+ a = 0
+ a(3,1) = 100.0
+ a(4,1) = 100.0
+
+ CALL FOO(a, 1)
+END PROGRAM
diff --git a/gcc/testsuite/gfortran.dg/vect/pr69980.f90 b/gcc/testsuite/gfortran.dg/vect/pr69980.f90
new file mode 100644
index 0000000..8a20b98
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/vect/pr69980.f90
@@ -0,0 +1,40 @@
+! { dg-do run }
+! { dg-additional-options "-Ofast -fno-inline" }
+
+subroutine check (a, b)
+ real *8, intent(in) :: a(4), b(4)
+
+ IF (abs(a(1)-b(1)) > 1) THEN
+ CALL ABORT
+ END IF
+end subroutine check
+
+program main
+ real *8 :: mu(4,26), mumax(4), mumax2(4)
+
+ integer :: i, k
+
+ do k=1,26
+ do i=1,4
+ mu(i, k) = 4*(i-1) + k
+ end do
+ end do
+
+ mumax = 0;
+ do k=1,26
+ do i=1,3
+ mumax(i) = max(mumax(i), mu(i,k)+mu(i,k))
+ end do
+ end do
+
+ mumax2 = 0;
+ do i=1,3
+ do k=1,26
+ mumax2(i) = max(mumax2(i), mu(i,k)+mu(i,k))
+ end do
+ end do
+
+ CALL check (mumax, mumax2)
+
+ return
+end program
diff --git a/gcc/testsuite/gfortran.dg/vect/pr70043.f90 b/gcc/testsuite/gfortran.dg/vect/pr70043.f90
new file mode 100644
index 0000000..36d6a0b
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/vect/pr70043.f90
@@ -0,0 +1,15 @@
+! { dg-do compile }
+! { dg-additional-options "-Ofast -g" }
+! { dg-additional-options "-march=haswell" { target i?86-*-* x86_64-*-* } }
+
+subroutine fn1(a, b)
+ real(8), intent(in) :: b(100)
+ real(8), intent(inout) :: a(100)
+ real(8) c
+ do i=0,100
+ if( a(i) < 0.0 ) then
+ c = a(i) * b(i)
+ a(i) = a(i) - c / b(i)
+ endif
+ enddo
+end subroutine fn1
diff --git a/gcc/testsuite/gnat.dg/incomplete4.adb b/gcc/testsuite/gnat.dg/incomplete4.adb
new file mode 100644
index 0000000..2191d38
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/incomplete4.adb
@@ -0,0 +1,10 @@
+-- { dg-do compile }
+
+with Incomplete4_Pkg; use Incomplete4_Pkg;
+with System;
+
+procedure Incomplete4 is
+ L : System.Address := A'Address;
+begin
+ null;
+end;
diff --git a/gcc/testsuite/gnat.dg/incomplete4_pkg.ads b/gcc/testsuite/gnat.dg/incomplete4_pkg.ads
new file mode 100644
index 0000000..992986e
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/incomplete4_pkg.ads
@@ -0,0 +1,9 @@
+package Incomplete4_Pkg is
+
+ type Circular_Type;
+ type Ptr is access Circular_Type;
+ type Circular_Type is array (1..100) of Ptr;
+
+ A : Circular_Type;
+
+end Incomplete4_Pkg;
diff --git a/gcc/testsuite/gnat.dg/renaming8.adb b/gcc/testsuite/gnat.dg/renaming8.adb
new file mode 100644
index 0000000..f41c813
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/renaming8.adb
@@ -0,0 +1,11 @@
+-- { dg-do run }
+-- { dg-options "-gnatp" }
+
+with Renaming8_Pkg1; use Renaming8_Pkg1;
+
+procedure Renaming8 is
+begin
+ if not B then
+ raise Program_Error;
+ end if;
+end;
diff --git a/gcc/testsuite/gnat.dg/renaming8_pkg1.ads b/gcc/testsuite/gnat.dg/renaming8_pkg1.ads
new file mode 100644
index 0000000..ff5768c
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/renaming8_pkg1.ads
@@ -0,0 +1,7 @@
+with Renaming8_Pkg2; use Renaming8_Pkg2;
+
+package Renaming8_Pkg1 is
+
+ B: Boolean renames F.E(1);
+
+end Renaming8_Pkg1;
diff --git a/gcc/testsuite/gnat.dg/renaming8_pkg2.adb b/gcc/testsuite/gnat.dg/renaming8_pkg2.adb
new file mode 100644
index 0000000..c135b39
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/renaming8_pkg2.adb
@@ -0,0 +1,8 @@
+package body Renaming8_Pkg2 is
+
+ function F return Rec is
+ begin
+ return (E => (others => True));
+ end;
+
+end Renaming8_Pkg2;
diff --git a/gcc/testsuite/gnat.dg/renaming8_pkg2.ads b/gcc/testsuite/gnat.dg/renaming8_pkg2.ads
new file mode 100644
index 0000000..5d117db
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/renaming8_pkg2.ads
@@ -0,0 +1,13 @@
+with Renaming8_Pkg3; use Renaming8_Pkg3;
+
+package Renaming8_Pkg2 is
+
+ type Arr is array (Positive range 1 .. Last_Index) of Boolean;
+
+ type Rec is record
+ E : Arr;
+ end record;
+
+ function F return Rec;
+
+end Renaming8_Pkg2;
diff --git a/gcc/testsuite/gnat.dg/renaming8_pkg3.adb b/gcc/testsuite/gnat.dg/renaming8_pkg3.adb
new file mode 100644
index 0000000..c17786b
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/renaming8_pkg3.adb
@@ -0,0 +1,8 @@
+package body Renaming8_Pkg3 is
+
+ function Last_Index return Integer is
+ begin
+ return 16;
+ end;
+
+end Renaming8_Pkg3;
diff --git a/gcc/testsuite/gnat.dg/renaming8_pkg3.ads b/gcc/testsuite/gnat.dg/renaming8_pkg3.ads
new file mode 100644
index 0000000..dda8101
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/renaming8_pkg3.ads
@@ -0,0 +1,5 @@
+package Renaming8_Pkg3 is
+
+ function Last_Index return Integer;
+
+end Renaming8_Pkg3;
diff --git a/gcc/testsuite/gnat.dg/renaming9.adb b/gcc/testsuite/gnat.dg/renaming9.adb
new file mode 100644
index 0000000..c50243e
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/renaming9.adb
@@ -0,0 +1,12 @@
+-- { dg-do compile }
+
+package body Renaming9 is
+
+ procedure Proc is
+ begin
+ Obj.I := 0;
+ end;
+
+begin
+ Obj.I := 0;
+end Renaming9;
diff --git a/gcc/testsuite/gnat.dg/renaming9.ads b/gcc/testsuite/gnat.dg/renaming9.ads
new file mode 100644
index 0000000..ce6b4ed
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/renaming9.ads
@@ -0,0 +1,16 @@
+package Renaming9 is
+
+ pragma Elaborate_Body;
+
+ type Object is tagged null record;
+
+ type Pointer is access all Object'Class;
+
+ type Derived is new Object with record
+ I : Integer;
+ end record;
+
+ Ptr : Pointer := new Derived;
+ Obj : Derived renames Derived (Ptr.all);
+
+end Renaming9;
diff --git a/gcc/testsuite/gnat.dg/specs/double_record_extension3.ads b/gcc/testsuite/gnat.dg/specs/double_record_extension3.ads
new file mode 100644
index 0000000..de53655
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/specs/double_record_extension3.ads
@@ -0,0 +1,22 @@
+-- { dg-do compile }
+
+package Double_Record_Extension3 is
+
+ type Rec1 is tagged record
+ Id : Integer;
+ end record;
+
+ for Rec1 use record
+ Id at 8 range 0 .. 31;
+ end record;
+
+ type Rec2 (Size : Integer) is new Rec1 with record
+ Data : String (1 .. Size);
+ end record;
+
+ type Rec3 is new Rec2 (Size => 128) with record
+ Valid : Boolean;
+ end record;
+
+end Double_Record_Extension3;
+
diff --git a/gcc/testsuite/gnat.dg/specs/task1.ads b/gcc/testsuite/gnat.dg/specs/task1.ads
new file mode 100644
index 0000000..c108d29
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/specs/task1.ads
@@ -0,0 +1,16 @@
+-- { dg-do compile }
+-- { dg-options "-gnatct" }
+
+package Task1 is
+
+ type Cable_Task_1 (C : Boolean) is limited private;
+
+ type Cable_Rec is limited record
+ Tsk_1 : Cable_Task_1 (C => False);
+ end record;
+
+private
+ task type Cable_Task_1 (C : Boolean) is
+end Cable_Task_1;
+
+end Task1;
diff --git a/gcc/testsuite/gnat.dg/stack_usage3.adb b/gcc/testsuite/gnat.dg/stack_usage3.adb
new file mode 100644
index 0000000..bd7d811
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/stack_usage3.adb
@@ -0,0 +1,32 @@
+-- { dg-do compile }
+-- { dg-options "-O -fstack-usage" }
+
+with Ada.Text_IO; use Ada.Text_IO;
+with Stack_Usage3_Pkg; use Stack_Usage3_Pkg;
+
+procedure Stack_Usage3 is
+begin
+ Put_Line (Diag ("Diag line 1"));
+ Put_Line (Diag ("Diag line 2"));
+ Put_Line (Diag ("Diag line 3"));
+ Put_Line (Diag ("Diag line 4"));
+ Put_Line (Diag ("Diag line 5"));
+ Put_Line (Diag ("Diag line 6"));
+ Put_Line (Diag ("Diag line 7"));
+ Put_Line (Diag ("Diag line 8"));
+ Put_Line (Diag ("Diag line 9"));
+ Put_Line (Diag ("Diag line 10"));
+ Put_Line (Diag ("Diag line 11"));
+ Put_Line (Diag ("Diag line 12"));
+ Put_Line (Diag ("Diag line 13"));
+ Put_Line (Diag ("Diag line 14"));
+ Put_Line (Diag ("Diag line 15"));
+ Put_Line (Diag ("Diag line 16"));
+ Put_Line (Diag ("Diag line 17"));
+ Put_Line (Diag ("Diag line 18"));
+ Put_Line (Diag ("Diag line 19"));
+ Put_Line (Diag ("Diag line 20"));
+end;
+
+-- { dg-final { scan-stack-usage-not "\t\[0-9\]\[0-9\]\[0-9\]\[0-9\]\t" } }
+-- { dg-final { cleanup-stack-usage } }
diff --git a/gcc/testsuite/gnat.dg/stack_usage3_pkg.ads b/gcc/testsuite/gnat.dg/stack_usage3_pkg.ads
new file mode 100644
index 0000000..e4a80c3
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/stack_usage3_pkg.ads
@@ -0,0 +1,7 @@
+package Stack_Usage3_Pkg is
+
+ subtype Small_String is String (1..80);
+
+ function Diag (S : String) return Small_String;
+
+end Stack_Usage3_Pkg;
diff --git a/gcc/testsuite/go.test/go-test.exp b/gcc/testsuite/go.test/go-test.exp
index 92f6c41..e867051 100644
--- a/gcc/testsuite/go.test/go-test.exp
+++ b/gcc/testsuite/go.test/go-test.exp
@@ -248,11 +248,12 @@ proc go-set-goarch { } {
}
}
}
- "s390-*-*" {
- set goarch "s390"
- }
- "s390x-*-*" {
- set goarch "s390x"
+ "s390*-*-*" {
+ if [check_effective_target_ilp32] {
+ set goarch "s390"
+ } else {
+ set goarch "s390x"
+ }
}
"sparc*-*-*" {
if [check_effective_target_ilp32] {
diff --git a/gcc/testsuite/lib/g++-dg.exp b/gcc/testsuite/lib/g++-dg.exp
index 1343533..4f7d18a 100644
--- a/gcc/testsuite/lib/g++-dg.exp
+++ b/gcc/testsuite/lib/g++-dg.exp
@@ -56,6 +56,8 @@ proc g++-dg-runtest { testcases flags default-extra-flags } {
}
set option_list { }
foreach x $std_list {
+ # Handle "concepts" as C++1z plus Concepts TS.
+ if { $x eq "concepts" } then { set x "1z -fconcepts" }
lappend option_list "${std_prefix}$x"
}
} else {
diff --git a/gcc/testsuite/lib/gcc-gdb-test.exp b/gcc/testsuite/lib/gcc-gdb-test.exp
index c4a636c..9fd6d9f 100644
--- a/gcc/testsuite/lib/gcc-gdb-test.exp
+++ b/gcc/testsuite/lib/gcc-gdb-test.exp
@@ -73,8 +73,8 @@ proc gdb-test { args } {
puts $fd "quit"
close $fd
- send_log "Spawning: $gdb_name -nx -nw -quiet -x $cmd_file ./$output_file\n"
- set res [remote_spawn target "$gdb_name -nx -nw -quiet -x $cmd_file ./$output_file"]
+ send_log "Spawning: $gdb_name -nx -nw -quiet -batch -x $cmd_file ./$output_file\n"
+ set res [remote_spawn target "$gdb_name -nx -nw -quiet -batch -x $cmd_file ./$output_file"]
if { $res < 0 || $res == "" } {
unsupported "$testname"
file delete $cmd_file
diff --git a/gcc/testsuite/lib/gcc-simulate-thread.exp b/gcc/testsuite/lib/gcc-simulate-thread.exp
index b2b0e98..b33678f 100644
--- a/gcc/testsuite/lib/gcc-simulate-thread.exp
+++ b/gcc/testsuite/lib/gcc-simulate-thread.exp
@@ -49,8 +49,8 @@ proc simulate-thread { args } {
set message "thread simulation test"
- send_log "Spawning: $gdb_name -nx -nw -quiet -x $cmd_file ./$exec_file\n"
- set res [remote_spawn target "$gdb_name -nx -nw -x $cmd_file ./$exec_file"]
+ send_log "Spawning: $gdb_name -nx -nw -batch -x $cmd_file ./$exec_file\n"
+ set res [remote_spawn target "$gdb_name -nx -nw -batch -x $cmd_file ./$exec_file"]
if { $res < 0 || $res == "" } {
unsupported "$testcase $message"
return
diff --git a/gcc/testsuite/lib/prune.exp b/gcc/testsuite/lib/prune.exp
index 20fa1a2..ab6f369 100644
--- a/gcc/testsuite/lib/prune.exp
+++ b/gcc/testsuite/lib/prune.exp
@@ -78,12 +78,33 @@ proc prune_gcc_output { text } {
return $text
}
+# escape metacharacters in literal string, so it can be used in regex
+
+proc escape_regex_chars { line } {
+ return [string map {"^" "\\^"
+ "$" "\\$"
+ "(" "\\("
+ ")" "\\)"
+ "[" "\\["
+ "]" "\\]"
+ "{" "\\{"
+ "}" "\\}"
+ "." "\\."
+ "\\" "\\\\"
+ "?" "\\?"
+ "+" "\\+"
+ "*" "\\*"
+ "|" "\\|"} $line]
+}
+
proc prune_file_path { text } {
global srcdir
+ set safedir [escape_regex_chars $srcdir]
+ regsub -all "$safedir\/" $text "" text
+
# Truncate absolute file path into relative path.
- set topdir "[file dirname [file dirname [file dirname $srcdir]]]"
- regsub -all "$srcdir\/" $text "" text
+ set topdir "[file dirname [file dirname [file dirname $safedir]]]"
regsub -all "$topdir\/" $text "" text
return $text
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 66fb1ea..3d44e17 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -1629,6 +1629,19 @@ proc check_effective_target_avx_runtime { } {
return 0
}
+# Return 1 if we are compiling for 64-bit PowerPC but we do not use direct
+# move instructions for moves from GPR to FPR.
+
+proc check_effective_target_powerpc64_no_dm { } {
+ # The "mulld" checks if we are generating PowerPC64 code. The "lfd"
+ # checks if we do not use direct moves, but use the old-fashioned
+ # slower move-via-the-stack.
+ return [check_no_messages_and_pattern powerpc64_no_dm \
+ {\mmulld\M.*\mlfd} assembly {
+ double f(long long x) { return x*x; }
+ } {-O2}]
+}
+
# Return 1 if the target supports executing power8 vector instructions, 0
# otherwise. Cache the result.
@@ -1727,7 +1740,7 @@ proc check_ppc_float128_sw_available { } {
int main()
{
__float128 z = x + y;
- return (z == 3.0q);
+ return (z != 3.0q);
}
} $options
}
@@ -1746,7 +1759,7 @@ proc check_ppc_float128_hw_available { } {
|| [istarget *-*-darwin*]} {
expr 0
} else {
- set options "-mfloat128-hardware"
+ set options "-mfloat128 -mvsx -mfloat128-hardware -mpower9-vector"
check_runtime_nocache ppc_float128_hw_available {
volatile __float128 x = 1.0q;
volatile __float128 y = 2.0q;
@@ -1756,7 +1769,7 @@ proc check_ppc_float128_hw_available { } {
__float128 w = -1.0q;
__asm__ ("xsaddqp %0,%1,%2" : "+v" (w) : "v" (x), "v" (y));
- return ((z == 3.0q) && (z == w);
+ return ((z != 3.0q) || (z != w);
}
} $options
}
@@ -2590,7 +2603,7 @@ proc check_effective_target_vect_simd_clones { } {
# avx2 clone. Only the right clone for the specified arch will be
# chosen, but still we need to at least be able to assemble
# avx2.
- if { [check_effective_target_avx2] } {
+ if { [check_effective_target_avx512f] } {
set et_vect_simd_clones_saved 1
}
}
@@ -3158,7 +3171,9 @@ proc check_effective_target_arm_fp16_ok { } {
# Creates a series of routines that return 1 if the given architecture
# can be selected and a routine to give the flags to select that architecture
# Note: Extra flags may be added to disable options from newer compilers
-# (Thumb in particular - but others may be added in the future)
+# (Thumb in particular - but others may be added in the future).
+# -march=armv7ve is special and is handled explicitly after this loop because
+# it needs more than one predefine check to identify.
# Usage: /* { dg-require-effective-target arm_arch_v5_ok } */
# /* { dg-add-options arm_arch_v5 } */
# /* { dg-require-effective-target arm_arch_v5_multilib } */
@@ -3173,7 +3188,6 @@ foreach { armfunc armflag armdef } { v4 "-march=armv4 -marm" __ARM_ARCH_4__
v6z "-march=armv6z" __ARM_ARCH_6Z__
v6m "-march=armv6-m -mthumb" __ARM_ARCH_6M__
v7a "-march=armv7-a" __ARM_ARCH_7A__
- v7ve "-march=armv7ve" __ARM_ARCH_7A__
v7r "-march=armv7-r" __ARM_ARCH_7R__
v7m "-march=armv7-m -mthumb" __ARM_ARCH_7M__
v7em "-march=armv7e-m -mthumb" __ARM_ARCH_7EM__
@@ -3208,6 +3222,26 @@ foreach { armfunc armflag armdef } { v4 "-march=armv4 -marm" __ARM_ARCH_4__
}]
}
+# Same functions as above but for -march=armv7ve. To uniquely identify
+# -march=armv7ve we need to check for __ARM_ARCH_7A__ as well as
+# __ARM_FEATURE_IDIV otherwise it aliases with armv7-a.
+
+proc check_effective_target_arm_arch_v7ve_ok { } {
+ if { [ string match "*-marm*" "-march=armv7ve" ] &&
+ ![check_effective_target_arm_arm_ok] } {
+ return 0
+ }
+ return [check_no_compiler_messages arm_arch_v7ve_ok assembly {
+ #if !defined (__ARM_ARCH_7A__) || !defined (__ARM_FEATURE_IDIV)
+ #error !armv7ve
+ #endif
+ } "-march=armv7ve" ]
+}
+
+proc add_options_for_arm_arch_v7ve { flags } {
+ return "$flags -march=armv7ve"
+}
+
# Return 1 if this is an ARM target where -marm causes ARM to be
# used (not Thumb)
@@ -4006,6 +4040,7 @@ proc check_effective_target_whole_vector_shift { } {
if { [istarget i?86-*-*] || [istarget x86_64-*-*]
|| [istarget ia64-*-*]
|| [istarget aarch64*-*-*]
+ || [istarget powerpc64*-*-*]
|| ([check_effective_target_arm32]
&& [check_effective_target_arm_little_endian])
|| ([istarget mips*-*-*]
@@ -6556,6 +6591,11 @@ proc check_effective_target_c++1z { } {
return [check_effective_target_c++1z_only]
}
+# Check for C++ Concepts TS support, i.e. -fconcepts flag.
+proc check_effective_target_concepts { } {
+ return [check-flags { "" { } { -fconcepts } }]
+}
+
# Return 1 if expensive testcases should be run.
proc check_effective_target_run_expensive_tests { } {
@@ -6719,6 +6759,23 @@ proc check_effective_target_aarch64_tiny { } {
}
}
+# Create functions to check that the AArch64 assembler supports the
+# various architecture extensions via the .arch_extension pseudo-op.
+
+foreach { aarch64_ext } { "fp" "simd" "crypto" "crc" "lse"} {
+ eval [string map [list FUNC $aarch64_ext] {
+ proc check_effective_target_aarch64_asm_FUNC_ok { } {
+ if { [istarget aarch64*-*-*] } {
+ return [check_no_compiler_messages aarch64_FUNC_assembler object {
+ __asm__ (".arch_extension FUNC");
+ } "-march=armv8-a+FUNC"]
+ } else {
+ return 0
+ }
+ }
+ }]
+}
+
proc check_effective_target_aarch64_small { } {
if { [istarget aarch64*-*-*] } {
return [check_no_compiler_messages aarch64_small object {
@@ -6919,3 +6976,11 @@ proc check_effective_target_offload_nvptx { } {
int main () {return 0;}
} "-foffload=nvptx-none" ]
}
+
+# Return 1 if the compiler has been configured with hsa offloading.
+
+proc check_effective_target_offload_hsa { } {
+ return [check_no_compiler_messages offload_hsa assembly {
+ int main () {return 0;}
+ } "-foffload=hsa" ]
+}
diff --git a/gcc/testsuite/objc.dg/pr69844.m b/gcc/testsuite/objc.dg/pr69844.m
new file mode 100644
index 0000000..9abcc7a
--- /dev/null
+++ b/gcc/testsuite/objc.dg/pr69844.m
@@ -0,0 +1,24 @@
+/* PR objc/69844 */
+/* { dg-do compile } */
+/* { dg-options "-std=gnu99" } */
+
+@class D;
+
+void
+foo (void)
+{
+ for (;;)
+ ;
+ D *d = (id) 0;
+ (void) d;
+}
+
+void
+bar (void)
+{
+ for (int D = 0; D < 30; D++)
+ if (1)
+ ;
+ D *d = (id) 0;
+ (void) d;
+}
diff --git a/gcc/toplev.c b/gcc/toplev.c
index 28c115d..c480bfc 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -2107,6 +2107,9 @@ toplev::main (int argc, char **argv)
finalize_plugins ();
location_adhoc_data_fini (line_table);
+
+ after_memory_report = true;
+
if (seen_error () || werrorcount)
return (FATAL_EXIT_CODE);
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index b54545d..04e46fd 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -2959,10 +2959,10 @@ verify_expr (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
}
else if (!INTEGRAL_TYPE_P (TREE_TYPE (t))
&& TYPE_MODE (TREE_TYPE (t)) != BLKmode
- && (GET_MODE_PRECISION (TYPE_MODE (TREE_TYPE (t)))
+ && (GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (t)))
!= tree_to_uhwi (t1)))
{
- error ("mode precision of non-integral result does not "
+ error ("mode size of non-integral result does not "
"match field size of BIT_FIELD_REF");
return t;
}
diff --git a/gcc/tree-chkp.c b/gcc/tree-chkp.c
index d3119c6..3fba12c 100644
--- a/gcc/tree-chkp.c
+++ b/gcc/tree-chkp.c
@@ -895,7 +895,7 @@ chkp_mark_invalid_bounds_walker (tree const &bounds,
static void
chkp_finish_incomplete_bounds (void)
{
- bool found_valid;
+ bool found_valid = true;
while (found_valid)
{
diff --git a/gcc/tree-chrec.c b/gcc/tree-chrec.c
index 7a2e100..ee789a2 100644
--- a/gcc/tree-chrec.c
+++ b/gcc/tree-chrec.c
@@ -1468,11 +1468,11 @@ eq_evolutions_p (const_tree chrec0, const_tree chrec1)
if (chrec0 == chrec1)
return true;
+ if (! types_compatible_p (TREE_TYPE (chrec0), TREE_TYPE (chrec1)))
+ return false;
+
switch (TREE_CODE (chrec0))
{
- case INTEGER_CST:
- return operand_equal_p (chrec0, chrec1, 0);
-
case POLYNOMIAL_CHREC:
return (CHREC_VARIABLE (chrec0) == CHREC_VARIABLE (chrec1)
&& eq_evolutions_p (CHREC_LEFT (chrec0), CHREC_LEFT (chrec1))
@@ -1487,8 +1487,12 @@ eq_evolutions_p (const_tree chrec0, const_tree chrec1)
&& eq_evolutions_p (TREE_OPERAND (chrec0, 1),
TREE_OPERAND (chrec1, 1));
+ CASE_CONVERT:
+ return eq_evolutions_p (TREE_OPERAND (chrec0, 0),
+ TREE_OPERAND (chrec1, 0));
+
default:
- return false;
+ return operand_equal_p (chrec0, chrec1, 0);
}
}
diff --git a/gcc/tree-dfa.c b/gcc/tree-dfa.c
index 0e98056..f133abc 100644
--- a/gcc/tree-dfa.c
+++ b/gcc/tree-dfa.c
@@ -612,9 +612,22 @@ get_ref_base_and_extent (tree exp, HOST_WIDE_INT *poffset,
if (DECL_P (exp))
{
+ if (flag_unconstrained_commons
+ && TREE_CODE (exp) == VAR_DECL && DECL_COMMON (exp))
+ {
+ tree sz_tree = TYPE_SIZE (TREE_TYPE (exp));
+ /* If size is unknown, or we have read to the end, assume there
+ may be more to the structure than we are told. */
+ if (TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE
+ || (seen_variable_array_ref
+ && (sz_tree == NULL_TREE
+ || TREE_CODE (sz_tree) != INTEGER_CST
+ || (bit_offset + maxsize == wi::to_offset (sz_tree)))))
+ maxsize = -1;
+ }
/* If maxsize is unknown adjust it according to the size of the
base decl. */
- if (maxsize == -1
+ else if (maxsize == -1
&& DECL_SIZE (exp)
&& TREE_CODE (DECL_SIZE (exp)) == INTEGER_CST)
maxsize = wi::to_offset (DECL_SIZE (exp)) - bit_offset;
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index 073c1c7..a4e044c 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -616,7 +616,8 @@ remap_decls (tree decls, vec<tree, va_gc> **nonlocalized_list,
/* We need to add this variable to the local decls as otherwise
nothing else will do so. */
if (TREE_CODE (old_var) == VAR_DECL
- && ! DECL_EXTERNAL (old_var))
+ && ! DECL_EXTERNAL (old_var)
+ && cfun)
add_local_decl (cfun, old_var);
if ((!optimize || debug_info_level > DINFO_LEVEL_TERSE)
&& !DECL_IGNORED_P (old_var)
@@ -1266,7 +1267,12 @@ copy_tree_body_r (tree *tp, int *walk_subtrees, void *data)
/* Handle the case where we substituted an INDIRECT_REF
into the operand of the ADDR_EXPR. */
if (TREE_CODE (TREE_OPERAND (*tp, 0)) == INDIRECT_REF)
- *tp = TREE_OPERAND (TREE_OPERAND (*tp, 0), 0);
+ {
+ tree t = TREE_OPERAND (TREE_OPERAND (*tp, 0), 0);
+ if (TREE_TYPE (t) != TREE_TYPE (*tp))
+ t = fold_convert (remap_type (TREE_TYPE (*tp), id), t);
+ *tp = t;
+ }
else
recompute_tree_invariant_for_addr_expr (*tp);
@@ -3499,33 +3505,13 @@ declare_return_variable (copy_body_data *id, tree return_slot, tree modify_dest,
return use;
}
-/* Callback through walk_tree. Determine if a DECL_INITIAL makes reference
- to a local label. */
-
-static tree
-has_label_address_in_static_1 (tree *nodep, int *walk_subtrees, void *fnp)
-{
- tree node = *nodep;
- tree fn = (tree) fnp;
-
- if (TREE_CODE (node) == LABEL_DECL && DECL_CONTEXT (node) == fn)
- return node;
-
- if (TYPE_P (node))
- *walk_subtrees = 0;
-
- return NULL_TREE;
-}
-
/* Determine if the function can be copied. If so return NULL. If
not return a string describng the reason for failure. */
const char *
-copy_forbidden (struct function *fun, tree fndecl)
+copy_forbidden (struct function *fun)
{
const char *reason = fun->cannot_be_copied_reason;
- tree decl;
- unsigned ix;
/* Only examine the function once. */
if (fun->cannot_be_copied_set)
@@ -3544,19 +3530,12 @@ copy_forbidden (struct function *fun, tree fndecl)
goto fail;
}
- FOR_EACH_LOCAL_DECL (fun, ix, decl)
- if (TREE_CODE (decl) == VAR_DECL
- && TREE_STATIC (decl)
- && !DECL_EXTERNAL (decl)
- && DECL_INITIAL (decl)
- && walk_tree_without_duplicates (&DECL_INITIAL (decl),
- has_label_address_in_static_1,
- fndecl))
- {
- reason = G_("function %q+F can never be copied because it saves "
- "address of local label in a static variable");
- goto fail;
- }
+ if (fun->has_forced_label_in_static)
+ {
+ reason = G_("function %q+F can never be copied because it saves "
+ "address of local label in a static variable");
+ goto fail;
+ }
fail:
fun->cannot_be_copied_reason = reason;
@@ -3700,7 +3679,7 @@ inline_forbidden_p (tree fndecl)
bool forbidden_p = false;
/* First check for shared reasons not to copy the code. */
- inline_forbidden_reason = copy_forbidden (fun, fndecl);
+ inline_forbidden_reason = copy_forbidden (fun);
if (inline_forbidden_reason != NULL)
return true;
@@ -4086,7 +4065,7 @@ estimate_num_insns (gimple *stmt, eni_weights *weights)
return 0;
else if (is_inexpensive_builtin (decl))
return weights->target_builtin_call_cost;
- else if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
+ else if (gimple_call_builtin_p (stmt, BUILT_IN_NORMAL))
{
/* We canonicalize x * x to pow (x, 2.0) with -ffast-math, so
specialize the cheap expansion we do here.
@@ -5547,7 +5526,7 @@ bool
tree_versionable_function_p (tree fndecl)
{
return (!lookup_attribute ("noclone", DECL_ATTRIBUTES (fndecl))
- && copy_forbidden (DECL_STRUCT_FUNCTION (fndecl), fndecl) == NULL);
+ && copy_forbidden (DECL_STRUCT_FUNCTION (fndecl)) == NULL);
}
/* Delete all unreachable basic blocks and update callgraph.
diff --git a/gcc/tree-inline.h b/gcc/tree-inline.h
index 4cc1f19..9ca2a91 100644
--- a/gcc/tree-inline.h
+++ b/gcc/tree-inline.h
@@ -217,7 +217,7 @@ extern tree remap_type (tree type, copy_body_data *id);
extern gimple_seq copy_gimple_seq_and_replace_locals (gimple_seq seq);
extern bool debug_find_tree (tree, tree);
extern tree copy_fn (tree, tree&, tree&);
-extern const char *copy_forbidden (struct function *fun, tree fndecl);
+extern const char *copy_forbidden (struct function *fun);
/* This is in tree-inline.c since the routine uses
data structures from the inliner. */
diff --git a/gcc/tree-outof-ssa.c b/gcc/tree-outof-ssa.c
index 25286a2..4125529 100644
--- a/gcc/tree-outof-ssa.c
+++ b/gcc/tree-outof-ssa.c
@@ -41,6 +41,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-ssa-ter.h"
#include "tree-ssa-coalesce.h"
#include "tree-outof-ssa.h"
+#include "dojump.h"
/* FIXME: A lot of code here deals with expanding to RTL. All that code
should be in cfgexpand.c. */
@@ -220,6 +221,7 @@ emit_partition_copy (rtx dest, rtx src, int unsignedsrcp, tree sizeexp)
}
else
emit_move_insn (dest, src);
+ do_pending_stack_adjust ();
rtx_insn *seq = get_insns ();
end_sequence ();
@@ -312,6 +314,8 @@ insert_value_copy_on_edge (edge e, int dest, tree src, source_location locus)
if (x != dest_rtx)
emit_move_insn (dest_rtx, x);
+ do_pending_stack_adjust ();
+
seq = get_insns ();
end_sequence ();
diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c
index 139e38c..2e55b79 100644
--- a/gcc/tree-parloops.c
+++ b/gcc/tree-parloops.c
@@ -767,14 +767,16 @@ eliminate_local_variables (edge entry, edge exit)
FOR_EACH_VEC_ELT (body, i, bb)
if (bb != entry_bb && bb != exit_bb)
- for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
- if (is_gimple_debug (gsi_stmt (gsi)))
- {
- if (gimple_debug_bind_p (gsi_stmt (gsi)))
- has_debug_stmt = true;
- }
- else
- eliminate_local_variables_stmt (entry, &gsi, &decl_address);
+ {
+ for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
+ if (is_gimple_debug (gsi_stmt (gsi)))
+ {
+ if (gimple_debug_bind_p (gsi_stmt (gsi)))
+ has_debug_stmt = true;
+ }
+ else
+ eliminate_local_variables_stmt (entry, &gsi, &decl_address);
+ }
if (has_debug_stmt)
FOR_EACH_VEC_ELT (body, i, bb)
@@ -2016,7 +2018,8 @@ transform_to_exit_first_loop (struct loop *loop,
/* Create the parallel constructs for LOOP as described in gen_parallel_loop.
LOOP_FN and DATA are the arguments of GIMPLE_OMP_PARALLEL.
NEW_DATA is the variable that should be initialized from the argument
- of LOOP_FN. N_THREADS is the requested number of threads. */
+ of LOOP_FN. N_THREADS is the requested number of threads, which can be 0 if
+ that number is to be determined later. */
static void
create_parallel_loop (struct loop *loop, tree loop_fn, tree data,
@@ -2049,6 +2052,7 @@ create_parallel_loop (struct loop *loop, tree loop_fn, tree data,
basic_block paral_bb = single_pred (bb);
gsi = gsi_last_bb (paral_bb);
+ gcc_checking_assert (n_threads != 0);
t = build_omp_clause (loc, OMP_CLAUSE_NUM_THREADS);
OMP_CLAUSE_NUM_THREADS_EXPR (t)
= build_int_cst (integer_type_node, n_threads);
@@ -2221,7 +2225,8 @@ create_parallel_loop (struct loop *loop, tree loop_fn, tree data,
}
/* Generates code to execute the iterations of LOOP in N_THREADS
- threads in parallel.
+ threads in parallel, which can be 0 if that number is to be determined
+ later.
NITER describes number of iterations of LOOP.
REDUCTION_LIST describes the reductions existent in the LOOP. */
@@ -2318,6 +2323,7 @@ gen_parallel_loop (struct loop *loop,
else
m_p_thread=MIN_PER_THREAD;
+ gcc_checking_assert (n_threads != 0);
many_iterations_cond =
fold_build2 (GE_EXPR, boolean_type_node,
nit, build_int_cst (type, m_p_thread * n_threads));
@@ -3177,7 +3183,7 @@ oacc_entry_exit_ok (struct loop *loop,
static bool
parallelize_loops (bool oacc_kernels_p)
{
- unsigned n_threads = flag_tree_parallelize_loops;
+ unsigned n_threads;
bool changed = false;
struct loop *loop;
struct loop *skip_loop = NULL;
@@ -3199,6 +3205,13 @@ parallelize_loops (bool oacc_kernels_p)
if (cfun->has_nonlocal_label)
return false;
+ /* For OpenACC kernels, n_threads will be determined later; otherwise, it's
+ the argument to -ftree-parallelize-loops. */
+ if (oacc_kernels_p)
+ n_threads = 0;
+ else
+ n_threads = flag_tree_parallelize_loops;
+
gcc_obstack_init (&parloop_obstack);
reduction_info_table_type reduction_list (10);
@@ -3361,7 +3374,13 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_tree_parallelize_loops > 1; }
+ virtual bool gate (function *)
+ {
+ if (oacc_kernels_p)
+ return flag_openacc;
+ else
+ return flag_tree_parallelize_loops > 1;
+ }
virtual unsigned int execute (function *);
opt_pass * clone () { return new pass_parallelize_loops (m_ctxt); }
void set_pass_param (unsigned int n, bool param)
diff --git a/gcc/tree-pretty-print.c b/gcc/tree-pretty-print.c
index 9c13d84..39e3691 100644
--- a/gcc/tree-pretty-print.c
+++ b/gcc/tree-pretty-print.c
@@ -621,7 +621,7 @@ dump_omp_clause (pretty_printer *pp, tree clause, int spc, int flags)
case GOMP_MAP_FORCE_PRESENT:
pp_string (pp, "force_present");
break;
- case GOMP_MAP_FORCE_DEALLOC:
+ case GOMP_MAP_DELETE:
pp_string (pp, "delete");
break;
case GOMP_MAP_FORCE_DEVICEPTR:
diff --git a/gcc/tree-scalar-evolution.c b/gcc/tree-scalar-evolution.c
index c36a039..fdd5da0 100644
--- a/gcc/tree-scalar-evolution.c
+++ b/gcc/tree-scalar-evolution.c
@@ -1703,7 +1703,7 @@ static tree
interpret_rhs_expr (struct loop *loop, gimple *at_stmt,
tree type, tree rhs1, enum tree_code code, tree rhs2)
{
- tree res, chrec1, chrec2;
+ tree res, chrec1, chrec2, ctype;
gimple *def;
if (get_gimple_rhs_class (code) == GIMPLE_SINGLE_RHS)
@@ -1798,30 +1798,63 @@ interpret_rhs_expr (struct loop *loop, gimple *at_stmt,
case PLUS_EXPR:
chrec1 = analyze_scalar_evolution (loop, rhs1);
chrec2 = analyze_scalar_evolution (loop, rhs2);
- chrec1 = chrec_convert (type, chrec1, at_stmt);
- chrec2 = chrec_convert (type, chrec2, at_stmt);
+ ctype = type;
+ /* When the stmt is conditionally executed re-write the CHREC
+ into a form that has well-defined behavior on overflow. */
+ if (at_stmt
+ && INTEGRAL_TYPE_P (type)
+ && ! TYPE_OVERFLOW_WRAPS (type)
+ && ! dominated_by_p (CDI_DOMINATORS, loop->latch,
+ gimple_bb (at_stmt)))
+ ctype = unsigned_type_for (type);
+ chrec1 = chrec_convert (ctype, chrec1, at_stmt);
+ chrec2 = chrec_convert (ctype, chrec2, at_stmt);
chrec1 = instantiate_parameters (loop, chrec1);
chrec2 = instantiate_parameters (loop, chrec2);
- res = chrec_fold_plus (type, chrec1, chrec2);
+ res = chrec_fold_plus (ctype, chrec1, chrec2);
+ if (type != ctype)
+ res = chrec_convert (type, res, at_stmt);
break;
case MINUS_EXPR:
chrec1 = analyze_scalar_evolution (loop, rhs1);
chrec2 = analyze_scalar_evolution (loop, rhs2);
- chrec1 = chrec_convert (type, chrec1, at_stmt);
- chrec2 = chrec_convert (type, chrec2, at_stmt);
+ ctype = type;
+ /* When the stmt is conditionally executed re-write the CHREC
+ into a form that has well-defined behavior on overflow. */
+ if (at_stmt
+ && INTEGRAL_TYPE_P (type)
+ && ! TYPE_OVERFLOW_WRAPS (type)
+ && ! dominated_by_p (CDI_DOMINATORS,
+ loop->latch, gimple_bb (at_stmt)))
+ ctype = unsigned_type_for (type);
+ chrec1 = chrec_convert (ctype, chrec1, at_stmt);
+ chrec2 = chrec_convert (ctype, chrec2, at_stmt);
chrec1 = instantiate_parameters (loop, chrec1);
chrec2 = instantiate_parameters (loop, chrec2);
- res = chrec_fold_minus (type, chrec1, chrec2);
+ res = chrec_fold_minus (ctype, chrec1, chrec2);
+ if (type != ctype)
+ res = chrec_convert (type, res, at_stmt);
break;
case NEGATE_EXPR:
chrec1 = analyze_scalar_evolution (loop, rhs1);
- chrec1 = chrec_convert (type, chrec1, at_stmt);
+ ctype = type;
+ /* When the stmt is conditionally executed re-write the CHREC
+ into a form that has well-defined behavior on overflow. */
+ if (at_stmt
+ && INTEGRAL_TYPE_P (type)
+ && ! TYPE_OVERFLOW_WRAPS (type)
+ && ! dominated_by_p (CDI_DOMINATORS,
+ loop->latch, gimple_bb (at_stmt)))
+ ctype = unsigned_type_for (type);
+ chrec1 = chrec_convert (ctype, chrec1, at_stmt);
/* TYPE may be integer, real or complex, so use fold_convert. */
chrec1 = instantiate_parameters (loop, chrec1);
- res = chrec_fold_multiply (type, chrec1,
- fold_convert (type, integer_minus_one_node));
+ res = chrec_fold_multiply (ctype, chrec1,
+ fold_convert (ctype, integer_minus_one_node));
+ if (type != ctype)
+ res = chrec_convert (type, res, at_stmt);
break;
case BIT_NOT_EXPR:
@@ -1837,11 +1870,22 @@ interpret_rhs_expr (struct loop *loop, gimple *at_stmt,
case MULT_EXPR:
chrec1 = analyze_scalar_evolution (loop, rhs1);
chrec2 = analyze_scalar_evolution (loop, rhs2);
- chrec1 = chrec_convert (type, chrec1, at_stmt);
- chrec2 = chrec_convert (type, chrec2, at_stmt);
+ ctype = type;
+ /* When the stmt is conditionally executed re-write the CHREC
+ into a form that has well-defined behavior on overflow. */
+ if (at_stmt
+ && INTEGRAL_TYPE_P (type)
+ && ! TYPE_OVERFLOW_WRAPS (type)
+ && ! dominated_by_p (CDI_DOMINATORS,
+ loop->latch, gimple_bb (at_stmt)))
+ ctype = unsigned_type_for (type);
+ chrec1 = chrec_convert (ctype, chrec1, at_stmt);
+ chrec2 = chrec_convert (ctype, chrec2, at_stmt);
chrec1 = instantiate_parameters (loop, chrec1);
chrec2 = instantiate_parameters (loop, chrec2);
- res = chrec_fold_multiply (type, chrec1, chrec2);
+ res = chrec_fold_multiply (ctype, chrec1, chrec2);
+ if (type != ctype)
+ res = chrec_convert (type, res, at_stmt);
break;
case LSHIFT_EXPR:
diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c
index 72157ed..1d2b1c5 100644
--- a/gcc/tree-sra.c
+++ b/gcc/tree-sra.c
@@ -1673,7 +1673,7 @@ build_ref_for_offset (location_t loc, tree base, HOST_WIDE_INT offset,
}
else
{
- off = build_int_cst (reference_alias_ptr_type (base),
+ off = build_int_cst (reference_alias_ptr_type (prev_base),
base_offset + offset / BITS_PER_UNIT);
base = build_fold_addr_expr (unshare_expr (base));
}
@@ -2427,7 +2427,8 @@ analyze_access_subtree (struct access *root, struct access *parent,
if (!hole || root->grp_total_scalarization)
root->grp_covered = 1;
- else if (root->grp_write || TREE_CODE (root->base) == PARM_DECL)
+ else if (root->grp_write || TREE_CODE (root->base) == PARM_DECL
+ || constant_decl_p (root->base))
root->grp_unscalarized_data = 1; /* not covered and written to */
return sth_created;
}
@@ -2742,6 +2743,9 @@ generate_subtree_copies (struct access *access, tree agg,
gimple_stmt_iterator *gsi, bool write,
bool insert_after, location_t loc)
{
+ /* Never write anything into constant pool decls. See PR70602. */
+ if (!write && constant_decl_p (agg))
+ return;
do
{
if (chunk_size && access->offset >= start_offset + chunk_size)
@@ -3339,6 +3343,7 @@ sra_modify_assign (gimple *stmt, gimple_stmt_iterator *gsi)
}
else if (racc
&& !racc->grp_unscalarized_data
+ && !racc->grp_unscalarizable_region
&& TREE_CODE (lhs) == SSA_NAME
&& !access_has_replacements_p (racc))
{
@@ -3503,7 +3508,8 @@ sra_modify_assign (gimple *stmt, gimple_stmt_iterator *gsi)
else
{
if (access_has_children_p (racc)
- && !racc->grp_unscalarized_data)
+ && !racc->grp_unscalarized_data
+ && TREE_CODE (lhs) != SSA_NAME)
{
if (dump_file)
{
@@ -4756,6 +4762,8 @@ replace_removed_params_ssa_names (tree old_name, gimple *stmt,
repl = get_replaced_param_substitute (adj);
new_name = make_ssa_name (repl, stmt);
+ SSA_NAME_OCCURS_IN_ABNORMAL_PHI (new_name)
+ = SSA_NAME_OCCURS_IN_ABNORMAL_PHI (old_name);
if (dump_file)
{
diff --git a/gcc/tree-ssa-coalesce.c b/gcc/tree-ssa-coalesce.c
index 6624e7e..4b0134d 100644
--- a/gcc/tree-ssa-coalesce.c
+++ b/gcc/tree-ssa-coalesce.c
@@ -50,8 +50,41 @@ struct coalesce_pair
int first_element;
int second_element;
int cost;
+
+ /* A count of the number of unique partitions this pair would conflict
+ with if coalescing was successful. This is the secondary sort key,
+ given two pairs with equal costs, we will prefer the pair with a smaller
+ conflict set.
+
+ This is lazily initialized when we discover two coalescing pairs have
+ the same primary cost.
+
+ Note this is not updated and propagated as pairs are coalesced. */
+ int conflict_count;
+
+ /* The order in which coalescing pairs are discovered is recorded in this
+ field, which is used as the final tie breaker when sorting coalesce
+ pairs. */
+ int index;
+};
+
+/* This represents a conflict graph. Implemented as an array of bitmaps.
+ A full matrix is used for conflicts rather than just upper triangular form.
+ this makes it much simpler and faster to perform conflict merges. */
+
+struct ssa_conflicts
+{
+ bitmap_obstack obstack; /* A place to allocate our bitmaps. */
+ vec<bitmap> conflicts;
};
+/* The narrow API of the qsort comparison function doesn't allow easy
+ access to additional arguments. So we have two globals (ick) to hold
+ the data we need. They're initialized before the call to qsort and
+ wiped immediately after. */
+static ssa_conflicts *conflicts_;
+static var_map map_;
+
/* Coalesce pair hashtable helpers. */
struct coalesce_pair_hasher : nofree_ptr_hash <coalesce_pair>
@@ -254,6 +287,13 @@ delete_coalesce_list (coalesce_list *cl)
free (cl);
}
+/* Return the number of unique coalesce pairs in CL. */
+
+static inline int
+num_coalesce_pairs (coalesce_list *cl)
+{
+ return cl->list->elements ();
+}
/* Find a matching coalesce pair object in CL for the pair P1 and P2. If
one isn't found, return NULL if CREATE is false, otherwise create a new
@@ -290,6 +330,8 @@ find_coalesce_pair (coalesce_list *cl, int p1, int p2, bool create)
pair->first_element = p.first_element;
pair->second_element = p.second_element;
pair->cost = 0;
+ pair->index = num_coalesce_pairs (cl);
+ pair->conflict_count = 0;
*slot = pair;
}
@@ -332,40 +374,70 @@ add_coalesce (coalesce_list *cl, int p1, int p2, int value)
}
}
+/* Compute and record how many unique conflicts would exist for the
+ representative partition for each coalesce pair in CL.
+
+ CONFLICTS is the conflict graph and MAP is the current partition view. */
+
+static void
+initialize_conflict_count (coalesce_pair *p,
+ ssa_conflicts *conflicts,
+ var_map map)
+{
+ int p1 = var_to_partition (map, ssa_name (p->first_element));
+ int p2 = var_to_partition (map, ssa_name (p->second_element));
+
+ /* 4 cases. If both P1 and P2 have conflicts, then build their
+ union and count the members. Else handle the degenerate cases
+ in the obvious ways. */
+ if (conflicts->conflicts[p1] && conflicts->conflicts[p2])
+ p->conflict_count = bitmap_count_unique_bits (conflicts->conflicts[p1],
+ conflicts->conflicts[p2]);
+ else if (conflicts->conflicts[p1])
+ p->conflict_count = bitmap_count_bits (conflicts->conflicts[p1]);
+ else if (conflicts->conflicts[p2])
+ p->conflict_count = bitmap_count_bits (conflicts->conflicts[p2]);
+ else
+ p->conflict_count = 0;
+}
+
/* Comparison function to allow qsort to sort P1 and P2 in Ascending order. */
static int
compare_pairs (const void *p1, const void *p2)
{
- const coalesce_pair *const *const pp1 = (const coalesce_pair *const *) p1;
- const coalesce_pair *const *const pp2 = (const coalesce_pair *const *) p2;
+ coalesce_pair *const *const pp1 = (coalesce_pair *const *) p1;
+ coalesce_pair *const *const pp2 = (coalesce_pair *const *) p2;
int result;
result = (* pp1)->cost - (* pp2)->cost;
- /* Since qsort does not guarantee stability we use the elements
- as a secondary key. This provides us with independence from
- the host's implementation of the sorting algorithm. */
+ /* We use the size of the resulting conflict set as the secondary sort key.
+ Given two equal costing coalesce pairs, we want to prefer the pair that
+ has the smaller conflict set. */
if (result == 0)
{
- result = (* pp2)->first_element - (* pp1)->first_element;
+ if (flag_expensive_optimizations)
+ {
+ /* Lazily initialize the conflict counts as it's fairly expensive
+ to compute. */
+ if ((*pp2)->conflict_count == 0)
+ initialize_conflict_count (*pp2, conflicts_, map_);
+ if ((*pp1)->conflict_count == 0)
+ initialize_conflict_count (*pp1, conflicts_, map_);
+
+ result = (*pp2)->conflict_count - (*pp1)->conflict_count;
+ }
+
+ /* And if everything else is equal, then sort based on which
+ coalesce pair was found first. */
if (result == 0)
- result = (* pp2)->second_element - (* pp1)->second_element;
+ result = (*pp2)->index - (*pp1)->index;
}
return result;
}
-
-/* Return the number of unique coalesce pairs in CL. */
-
-static inline int
-num_coalesce_pairs (coalesce_list *cl)
-{
- return cl->list->elements ();
-}
-
-
/* Iterate over CL using ITER, returning values in PAIR. */
#define FOR_EACH_PARTITION_PAIR(PAIR, ITER, CL) \
@@ -376,7 +448,7 @@ num_coalesce_pairs (coalesce_list *cl)
in order from most important coalesce to least important. */
static void
-sort_coalesce_list (coalesce_list *cl)
+sort_coalesce_list (coalesce_list *cl, ssa_conflicts *conflicts, var_map map)
{
unsigned x, num;
coalesce_pair *p;
@@ -402,19 +474,14 @@ sort_coalesce_list (coalesce_list *cl)
if (num == 1)
return;
- /* If there are only 2, just pick swap them if the order isn't correct. */
- if (num == 2)
- {
- if (cl->sorted[0]->cost > cl->sorted[1]->cost)
- std::swap (cl->sorted[0], cl->sorted[1]);
- return;
- }
-
- /* Only call qsort if there are more than 2 items.
- ??? Maybe std::sort will do better, provided that compare_pairs
- can be inlined. */
- if (num > 2)
- qsort (cl->sorted, num, sizeof (coalesce_pair *), compare_pairs);
+ /* We don't want to depend on qsort_r, so we have to stuff away
+ additional data into globals so it can be referenced in
+ compare_pairs. */
+ conflicts_ = conflicts;
+ map_ = map;
+ qsort (cl->sorted, num, sizeof (coalesce_pair *), compare_pairs);
+ conflicts_ = NULL;
+ map_ = NULL;
}
@@ -439,7 +506,7 @@ dump_coalesce_list (FILE *f, coalesce_list *cl)
print_generic_expr (f, var1, TDF_SLIM);
fprintf (f, " <-> ");
print_generic_expr (f, var2, TDF_SLIM);
- fprintf (f, " (%1d), ", node->cost);
+ fprintf (f, " (%1d, %1d), ", node->cost, node->conflict_count);
fprintf (f, "\n");
}
}
@@ -449,7 +516,7 @@ dump_coalesce_list (FILE *f, coalesce_list *cl)
for (x = cl->num_sorted - 1 ; x >=0; x--)
{
node = cl->sorted[x];
- fprintf (f, "(%d) ", node->cost);
+ fprintf (f, "(%d, %d) ", node->cost, node->conflict_count);
var = ssa_name (node->first_element);
print_generic_expr (f, var, TDF_SLIM);
fprintf (f, " <-> ");
@@ -461,16 +528,6 @@ dump_coalesce_list (FILE *f, coalesce_list *cl)
}
-/* This represents a conflict graph. Implemented as an array of bitmaps.
- A full matrix is used for conflicts rather than just upper triangular form.
- this make sit much simpler and faster to perform conflict merges. */
-
-struct ssa_conflicts
-{
- bitmap_obstack obstack; /* A place to allocate our bitmaps. */
- vec<bitmap> conflicts;
-};
-
/* Return an empty new conflict graph for SIZE elements. */
static inline ssa_conflicts *
@@ -849,6 +906,23 @@ build_ssa_conflict_graph (tree_live_info_p liveinfo)
else if (is_gimple_debug (stmt))
continue;
+ /* For stmts with more than one SSA_NAME definition pretend all the
+ SSA_NAME outputs but the first one are live at this point, so
+ that conflicts are added in between all those even when they are
+ actually not really live after the asm, because expansion might
+ copy those into pseudos after the asm and if multiple outputs
+ share the same partition, it might overwrite those that should
+ be live. E.g.
+ asm volatile (".." : "=r" (a) : "=r" (b) : "0" (a), "1" (a));
+ return a;
+ See PR70593. */
+ bool first = true;
+ FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_DEF)
+ if (first)
+ first = false;
+ else
+ live_track_process_use (live, var);
+
FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_DEF)
live_track_process_def (live, var, graph);
@@ -1802,7 +1876,7 @@ coalesce_ssa_name (void)
if (dump_file && (dump_flags & TDF_DETAILS))
ssa_conflicts_dump (dump_file, graph);
- sort_coalesce_list (cl);
+ sort_coalesce_list (cl, graph, map);
if (dump_file && (dump_flags & TDF_DETAILS))
{
diff --git a/gcc/tree-ssa-forwprop.c b/gcc/tree-ssa-forwprop.c
index 6575d50..c40f9e2 100644
--- a/gcc/tree-ssa-forwprop.c
+++ b/gcc/tree-ssa-forwprop.c
@@ -1477,7 +1477,7 @@ defcodefor_name (tree name, enum tree_code *code, tree *arg1, tree *arg2)
|| GIMPLE_BINARY_RHS
|| GIMPLE_UNARY_RHS
|| GIMPLE_SINGLE_RHS)
- extract_ops_from_tree_1 (name, &code1, &arg11, &arg21, &arg31);
+ extract_ops_from_tree (name, &code1, &arg11, &arg21, &arg31);
*code = code1;
*arg1 = arg11;
@@ -1773,7 +1773,7 @@ simplify_bitfield_ref (gimple_stmt_iterator *gsi)
if (code == VEC_PERM_EXPR)
{
- tree p, m, index, tem;
+ tree p, m, tem;
unsigned nelts;
m = gimple_assign_rhs3 (def_stmt);
if (TREE_CODE (m) != VECTOR_CST)
@@ -1790,9 +1790,8 @@ simplify_bitfield_ref (gimple_stmt_iterator *gsi)
p = gimple_assign_rhs2 (def_stmt);
idx -= nelts;
}
- index = build_int_cst (TREE_TYPE (TREE_TYPE (m)), idx * size);
tem = build3 (BIT_FIELD_REF, TREE_TYPE (op),
- unshare_expr (p), op1, index);
+ unshare_expr (p), op1, bitsize_int (idx * size));
gimple_assign_set_rhs1 (stmt, tem);
fold_stmt (gsi);
update_stmt (gsi_stmt (*gsi));
diff --git a/gcc/tree-ssa-ifcombine.c b/gcc/tree-ssa-ifcombine.c
index 22b8b78..79fe3a8 100644
--- a/gcc/tree-ssa-ifcombine.c
+++ b/gcc/tree-ssa-ifcombine.c
@@ -125,7 +125,14 @@ bb_no_side_effects_p (basic_block bb)
if (gimple_has_side_effects (stmt)
|| gimple_uses_undefined_value_p (stmt)
|| gimple_could_trap_p (stmt)
- || gimple_vuse (stmt))
+ || gimple_vuse (stmt)
+ /* const calls don't match any of the above, yet they could
+ still have some side-effects - they could contain
+ gimple_could_trap_p statements, like floating point
+ exceptions or integer division by zero. See PR70586.
+ FIXME: perhaps gimple_has_side_effects or gimple_could_trap_p
+ should handle this. */
+ || is_gimple_call (stmt))
return false;
}
diff --git a/gcc/tree-ssa-loop-ivcanon.c b/gcc/tree-ssa-loop-ivcanon.c
index ab1f7e6..9b59b44 100644
--- a/gcc/tree-ssa-loop-ivcanon.c
+++ b/gcc/tree-ssa-loop-ivcanon.c
@@ -298,11 +298,17 @@ tree_estimate_loop_size (struct loop *loop, edge exit, edge edge_to_cancel, stru
/* Conditionals. */
else if ((gimple_code (stmt) == GIMPLE_COND
&& constant_after_peeling (gimple_cond_lhs (stmt), stmt, loop)
- && constant_after_peeling (gimple_cond_rhs (stmt), stmt, loop))
+ && constant_after_peeling (gimple_cond_rhs (stmt), stmt, loop)
+ /* We don't simplify all constant compares so make sure
+ they are not both constant already. See PR70288. */
+ && (! is_gimple_min_invariant (gimple_cond_lhs (stmt))
+ || ! is_gimple_min_invariant (gimple_cond_rhs (stmt))))
|| (gimple_code (stmt) == GIMPLE_SWITCH
&& constant_after_peeling (gimple_switch_index (
as_a <gswitch *> (stmt)),
- stmt, loop)))
+ stmt, loop)
+ && ! is_gimple_min_invariant (gimple_switch_index (
+ as_a <gswitch *> (stmt)))))
{
if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, " Constant conditional.\n");
@@ -929,7 +935,7 @@ try_peel_loop (struct loop *loop,
edge exit, tree niter,
HOST_WIDE_INT maxiter)
{
- int npeel;
+ HOST_WIDE_INT npeel;
struct loop_size size;
int peeled_size;
sbitmap wont_exit;
@@ -984,7 +990,7 @@ try_peel_loop (struct loop *loop,
{
if (dump_file)
fprintf (dump_file, "Not peeling: rolls too much "
- "(%i + 1 > --param max-peel-times)\n", npeel);
+ "(%i + 1 > --param max-peel-times)\n", (int) npeel);
return false;
}
npeel++;
@@ -992,7 +998,7 @@ try_peel_loop (struct loop *loop,
/* Check peeled loops size. */
tree_estimate_loop_size (loop, exit, NULL, &size,
PARAM_VALUE (PARAM_MAX_PEELED_INSNS));
- if ((peeled_size = estimated_peeled_sequence_size (&size, npeel))
+ if ((peeled_size = estimated_peeled_sequence_size (&size, (int) npeel))
> PARAM_VALUE (PARAM_MAX_PEELED_INSNS))
{
if (dump_file)
@@ -1026,7 +1032,7 @@ try_peel_loop (struct loop *loop,
if (dump_file && (dump_flags & TDF_DETAILS))
{
fprintf (dump_file, "Peeled loop %d, %i times.\n",
- loop->num, npeel);
+ loop->num, (int) npeel);
}
if (loop->any_upper_bound)
loop->nb_iterations_upper_bound -= npeel;
@@ -1164,38 +1170,6 @@ canonicalize_induction_variables (void)
return 0;
}
-/* Propagate VAL into all uses of SSA_NAME. */
-
-static void
-propagate_into_all_uses (tree ssa_name, tree val)
-{
- imm_use_iterator iter;
- gimple *use_stmt;
-
- FOR_EACH_IMM_USE_STMT (use_stmt, iter, ssa_name)
- {
- gimple_stmt_iterator use_stmt_gsi = gsi_for_stmt (use_stmt);
- use_operand_p use;
-
- FOR_EACH_IMM_USE_ON_STMT (use, iter)
- SET_USE (use, val);
-
- if (is_gimple_assign (use_stmt)
- && get_gimple_rhs_class (gimple_assign_rhs_code (use_stmt))
- == GIMPLE_SINGLE_RHS)
- {
- tree rhs = gimple_assign_rhs1 (use_stmt);
-
- if (TREE_CODE (rhs) == ADDR_EXPR)
- recompute_tree_invariant_for_addr_expr (rhs);
- }
-
- fold_stmt_inplace (&use_stmt_gsi);
- update_stmt (use_stmt);
- maybe_clean_or_replace_eh_stmt (use_stmt, use_stmt);
- }
-}
-
/* Propagate constant SSA_NAMEs defined in basic block BB. */
static void
@@ -1212,7 +1186,7 @@ propagate_constants_for_unrolling (basic_block bb)
&& gimple_phi_num_args (phi) == 1
&& TREE_CODE (arg) == INTEGER_CST)
{
- propagate_into_all_uses (result, arg);
+ replace_uses_by (result, arg);
gsi_remove (&gsi, true);
release_ssa_name (result);
}
@@ -1231,7 +1205,7 @@ propagate_constants_for_unrolling (basic_block bb)
&& (lhs = gimple_assign_lhs (stmt), TREE_CODE (lhs) == SSA_NAME)
&& !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (lhs))
{
- propagate_into_all_uses (lhs, gimple_assign_rhs1 (stmt));
+ replace_uses_by (lhs, gimple_assign_rhs1 (stmt));
gsi_remove (&gsi, true);
release_ssa_name (lhs);
}
diff --git a/gcc/tree-ssa-loop-ivopts.c b/gcc/tree-ssa-loop-ivopts.c
index 5302edf..a016e9f 100644
--- a/gcc/tree-ssa-loop-ivopts.c
+++ b/gcc/tree-ssa-loop-ivopts.c
@@ -168,10 +168,11 @@ struct comp_cost
the computation (in no concrete units --
complexity field should be larger for more
complex expressions and addressing modes). */
+ int scratch; /* Scratch used during cost computation. */
};
-static const comp_cost no_cost = {0, 0};
-static const comp_cost infinite_cost = {INFTY, INFTY};
+static const comp_cost no_cost = {0, 0, 0};
+static const comp_cost infinite_cost = {INFTY, INFTY, INFTY};
/* The candidate - cost pair. */
struct cost_pair
@@ -3232,11 +3233,13 @@ add_iv_candidate_for_use (struct ivopts_data *data, struct iv_use *use)
basetype = sizetype;
record_common_cand (data, build_int_cst (basetype, 0), iv->step, use);
- /* Record common candidate with constant offset stripped in base. */
+ /* Record common candidate with constant offset stripped in base.
+ Like the use itself, we also add candidate directly for it. */
+ base = strip_offset (iv->base, &offset);
+ if (offset || base != iv->base)
{
- base = strip_offset (iv->base, &offset);
- if (offset || base != iv->base)
- record_common_cand (data, base, iv->step, use);
+ record_common_cand (data, base, iv->step, use);
+ add_candidate (data, base, iv->step, false, use);
}
/* Record common candidate with base_object removed in base. */
@@ -4947,6 +4950,8 @@ get_computation_cost_at (struct ivopts_data *data,
cost.cost += add_cost (data->speed, TYPE_MODE (ctype));
}
+ /* Record setup cost in scrach field. */
+ cost.scratch = cost.cost;
/* Set of invariants depended on by sub use has already been computed
for the first use in the group. */
if (use->sub_id)
@@ -5021,7 +5026,9 @@ fallback:
if (address_p)
comp = build_simple_mem_ref (comp);
- return new_cost (computation_cost (comp, speed), 0);
+ cost = new_cost (computation_cost (comp, speed), 0);
+ cost.scratch = 0;
+ return cost;
}
}
@@ -5082,12 +5089,12 @@ determine_use_iv_cost_address (struct ivopts_data *data,
struct iv_use *use, struct iv_cand *cand)
{
bitmap depends_on;
- bool can_autoinc;
+ bool can_autoinc, first;
int inv_expr_id = -1;
struct iv_use *sub_use;
- comp_cost sub_cost;
comp_cost cost = get_computation_cost (data, use, cand, true, &depends_on,
&can_autoinc, &inv_expr_id);
+ comp_cost sub_cost = cost;
if (cand->ainc_use == use)
{
@@ -5099,13 +5106,47 @@ determine_use_iv_cost_address (struct ivopts_data *data,
else if (cand->pos == IP_AFTER_USE || cand->pos == IP_BEFORE_USE)
cost = infinite_cost;
}
- for (sub_use = use->next;
- sub_use && !infinite_cost_p (cost);
- sub_use = sub_use->next)
+
+ if (!infinite_cost_p (cost) && use->next)
{
- sub_cost = get_computation_cost (data, sub_use, cand, true, NULL,
- &can_autoinc, NULL);
- cost = add_costs (cost, sub_cost);
+ first = true;
+ sub_use = use->next;
+ /* We don't want to add setup cost for sub-uses. */
+ sub_cost.cost -= sub_cost.scratch;
+ /* Add cost for sub uses in group. */
+ do
+ {
+ /* Compute cost for the first sub use with different offset to
+ the main use and add it afterwards. Costs for these uses
+ could be quite different. Given below uses in a group:
+ use 0 : {base + A + offset_0, step}
+ use 0.1: {base + A + offset_0, step}
+ use 0.2: {base + A + offset_1, step}
+ use 0.3: {base + A + offset_2, step}
+ when we need to compute costs with candidate:
+ cand 1 : {base + B + offset_0, step}
+
+ The first sub use with different offset is use 0.2, its cost
+ is larger than cost of use 0/0.1 because we need to compute:
+ A - B + offset_1 - offset_0
+ rather than:
+ A - B. */
+ if (first && use->addr_offset != sub_use->addr_offset)
+ {
+ first = false;
+ sub_cost = get_computation_cost (data, sub_use, cand, true,
+ NULL, &can_autoinc, NULL);
+ if (infinite_cost_p (sub_cost))
+ {
+ cost = infinite_cost;
+ break;
+ }
+ }
+
+ cost = add_costs (cost, sub_cost);
+ sub_use = sub_use->next;
+ }
+ while (sub_use);
}
set_use_iv_cost (data, use, cand, cost, depends_on, NULL_TREE, ERROR_MARK,
diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c
index fbeeb9d..81689fc 100644
--- a/gcc/tree-ssa-loop-niter.c
+++ b/gcc/tree-ssa-loop-niter.c
@@ -2742,9 +2742,9 @@ static widest_int
derive_constant_upper_bound (tree val)
{
enum tree_code code;
- tree op0, op1;
+ tree op0, op1, op2;
- extract_ops_from_tree (val, &code, &op0, &op1);
+ extract_ops_from_tree (val, &code, &op0, &op1, &op2);
return derive_constant_upper_bound_ops (TREE_TYPE (val), op0, code, op1);
}
@@ -2757,7 +2757,7 @@ derive_constant_upper_bound_ops (tree type, tree op0,
enum tree_code code, tree op1)
{
tree subtype, maxt;
- widest_int bnd, max, mmax, cst;
+ widest_int bnd, max, cst;
gimple *stmt;
if (INTEGRAL_TYPE_P (type))
@@ -2823,8 +2823,8 @@ derive_constant_upper_bound_ops (tree type, tree op0,
/* OP0 + CST. We need to check that
BND <= MAX (type) - CST. */
- mmax -= cst;
- if (wi::ltu_p (bnd, max))
+ widest_int mmax = max - cst;
+ if (wi::leu_p (bnd, mmax))
return max;
return bnd + cst;
@@ -3065,7 +3065,9 @@ record_nonwrapping_iv (struct loop *loop, tree base, tree step, gimple *stmt,
&& get_range_info (orig_base, &min, &max) == VR_RANGE
&& wi::gts_p (high, max))
base = wide_int_to_tree (unsigned_type, max);
- else if (TREE_CODE (base) != INTEGER_CST)
+ else if (TREE_CODE (base) != INTEGER_CST
+ && dominated_by_p (CDI_DOMINATORS,
+ loop->latch, gimple_bb (stmt)))
base = fold_convert (unsigned_type, high);
delta = fold_build2 (MINUS_EXPR, unsigned_type, base, extreme);
step = fold_build1 (NEGATE_EXPR, unsigned_type, step);
@@ -3080,7 +3082,9 @@ record_nonwrapping_iv (struct loop *loop, tree base, tree step, gimple *stmt,
&& get_range_info (orig_base, &min, &max) == VR_RANGE
&& wi::gts_p (min, low))
base = wide_int_to_tree (unsigned_type, min);
- else if (TREE_CODE (base) != INTEGER_CST)
+ else if (TREE_CODE (base) != INTEGER_CST
+ && dominated_by_p (CDI_DOMINATORS,
+ loop->latch, gimple_bb (stmt)))
base = fold_convert (unsigned_type, low);
delta = fold_build2 (MINUS_EXPR, unsigned_type, extreme, base);
}
diff --git a/gcc/tree-ssa-loop.c b/gcc/tree-ssa-loop.c
index bdbade5..06354e3 100644
--- a/gcc/tree-ssa-loop.c
+++ b/gcc/tree-ssa-loop.c
@@ -148,7 +148,7 @@ make_pass_tree_loop (gcc::context *ctxt)
static bool
gate_oacc_kernels (function *fn)
{
- if (flag_tree_parallelize_loops <= 1)
+ if (!flag_openacc)
return false;
tree oacc_function_attr = get_oacc_fn_attrib (fn->decl);
@@ -230,10 +230,9 @@ public:
virtual bool gate (function *)
{
return (optimize
- /* Don't bother doing anything if the program has errors. */
- && !seen_error ()
&& flag_openacc
- && flag_tree_parallelize_loops > 1);
+ /* Don't bother doing anything if the program has errors. */
+ && !seen_error ());
}
}; // class pass_ipa_oacc
@@ -770,6 +769,8 @@ gen_lsm_tmp_name (tree ref)
case SSA_NAME:
case VAR_DECL:
case PARM_DECL:
+ case FUNCTION_DECL:
+ case LABEL_DECL:
name = get_name (ref);
if (!name)
name = "D";
@@ -785,11 +786,9 @@ gen_lsm_tmp_name (tree ref)
break;
case INTEGER_CST:
+ default:
/* Nothing. */
break;
-
- default:
- gcc_unreachable ();
}
}
diff --git a/gcc/tree-ssa-math-opts.c b/gcc/tree-ssa-math-opts.c
index 2215b4d..735b7c6 100644
--- a/gcc/tree-ssa-math-opts.c
+++ b/gcc/tree-ssa-math-opts.c
@@ -42,7 +42,7 @@ along with GCC; see the file COPYING3. If not see
First of all, with some experiments it was found out that the
transformation is not always useful if there are only two divisions
- hy the same divisor. This is probably because modern processors
+ by the same divisor. This is probably because modern processors
can pipeline the divisions; on older, in-order processors it should
still be effective to optimize two divisions by the same number.
We make this a param, and it shall be called N in the remainder of
@@ -3827,7 +3827,7 @@ pass_optimize_widening_mul::execute (function *fun)
{
tree fndecl = gimple_call_fndecl (stmt);
if (fndecl
- && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL)
+ && gimple_call_builtin_p (stmt, BUILT_IN_NORMAL))
{
switch (DECL_FUNCTION_CODE (fndecl))
{
diff --git a/gcc/tree-ssa-phiopt.c b/gcc/tree-ssa-phiopt.c
index 8da7a5c..a752fe0 100644
--- a/gcc/tree-ssa-phiopt.c
+++ b/gcc/tree-ssa-phiopt.c
@@ -1045,7 +1045,7 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb,
gassign *new_stmt;
edge true_edge, false_edge;
enum tree_code cmp, minmax, ass_code;
- tree smaller, larger, arg_true, arg_false;
+ tree smaller, alt_smaller, larger, alt_larger, arg_true, arg_false;
gimple_stmt_iterator gsi, gsi_from;
type = TREE_TYPE (PHI_RESULT (phi));
@@ -1059,15 +1059,59 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb,
/* This transformation is only valid for order comparisons. Record which
operand is smaller/larger if the result of the comparison is true. */
+ alt_smaller = NULL_TREE;
+ alt_larger = NULL_TREE;
if (cmp == LT_EXPR || cmp == LE_EXPR)
{
smaller = gimple_cond_lhs (cond);
larger = gimple_cond_rhs (cond);
+ /* If we have smaller < CST it is equivalent to smaller <= CST-1.
+ Likewise smaller <= CST is equivalent to smaller < CST+1. */
+ if (TREE_CODE (larger) == INTEGER_CST)
+ {
+ if (cmp == LT_EXPR)
+ {
+ bool overflow;
+ wide_int alt = wi::sub (larger, 1, TYPE_SIGN (TREE_TYPE (larger)),
+ &overflow);
+ if (! overflow)
+ alt_larger = wide_int_to_tree (TREE_TYPE (larger), alt);
+ }
+ else
+ {
+ bool overflow;
+ wide_int alt = wi::add (larger, 1, TYPE_SIGN (TREE_TYPE (larger)),
+ &overflow);
+ if (! overflow)
+ alt_larger = wide_int_to_tree (TREE_TYPE (larger), alt);
+ }
+ }
}
else if (cmp == GT_EXPR || cmp == GE_EXPR)
{
smaller = gimple_cond_rhs (cond);
larger = gimple_cond_lhs (cond);
+ /* If we have larger > CST it is equivalent to larger >= CST+1.
+ Likewise larger >= CST is equivalent to larger > CST-1. */
+ if (TREE_CODE (smaller) == INTEGER_CST)
+ {
+ if (cmp == GT_EXPR)
+ {
+ bool overflow;
+ wide_int alt = wi::add (smaller, 1, TYPE_SIGN (TREE_TYPE (smaller)),
+ &overflow);
+ if (! overflow)
+ alt_smaller = wide_int_to_tree (TREE_TYPE (smaller), alt);
+ }
+ else
+ {
+ bool overflow;
+ wide_int alt = wi::sub (smaller, 1, TYPE_SIGN (TREE_TYPE (smaller)),
+ &overflow);
+ if (! overflow)
+ alt_smaller = wide_int_to_tree (TREE_TYPE (smaller), alt);
+ }
+ }
}
else
return false;
@@ -1098,8 +1142,12 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb,
if (empty_block_p (middle_bb))
{
- if (operand_equal_for_phi_arg_p (arg_true, smaller)
- && operand_equal_for_phi_arg_p (arg_false, larger))
+ if ((operand_equal_for_phi_arg_p (arg_true, smaller)
+ || (alt_smaller
+ && operand_equal_for_phi_arg_p (arg_true, alt_smaller)))
+ && (operand_equal_for_phi_arg_p (arg_false, larger)
+ || (alt_larger
+ && operand_equal_for_phi_arg_p (arg_true, alt_larger))))
{
/* Case
@@ -1109,8 +1157,12 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb,
rslt = larger; */
minmax = MIN_EXPR;
}
- else if (operand_equal_for_phi_arg_p (arg_false, smaller)
- && operand_equal_for_phi_arg_p (arg_true, larger))
+ else if ((operand_equal_for_phi_arg_p (arg_false, smaller)
+ || (alt_smaller
+ && operand_equal_for_phi_arg_p (arg_false, alt_smaller)))
+ && (operand_equal_for_phi_arg_p (arg_true, larger)
+ || (alt_larger
+ && operand_equal_for_phi_arg_p (arg_true, alt_larger))))
minmax = MAX_EXPR;
else
return false;
@@ -1148,7 +1200,9 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb,
if (!operand_equal_for_phi_arg_p (lhs, arg_true))
return false;
- if (operand_equal_for_phi_arg_p (arg_false, larger))
+ if (operand_equal_for_phi_arg_p (arg_false, larger)
+ || (alt_larger
+ && operand_equal_for_phi_arg_p (arg_false, alt_larger)))
{
/* Case
@@ -1161,9 +1215,13 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb,
return false;
minmax = MIN_EXPR;
- if (operand_equal_for_phi_arg_p (op0, smaller))
+ if (operand_equal_for_phi_arg_p (op0, smaller)
+ || (alt_smaller
+ && operand_equal_for_phi_arg_p (op0, alt_smaller)))
bound = op1;
- else if (operand_equal_for_phi_arg_p (op1, smaller))
+ else if (operand_equal_for_phi_arg_p (op1, smaller)
+ || (alt_smaller
+ && operand_equal_for_phi_arg_p (op1, alt_smaller)))
bound = op0;
else
return false;
@@ -1173,7 +1231,9 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb,
bound, larger)))
return false;
}
- else if (operand_equal_for_phi_arg_p (arg_false, smaller))
+ else if (operand_equal_for_phi_arg_p (arg_false, smaller)
+ || (alt_smaller
+ && operand_equal_for_phi_arg_p (arg_false, alt_smaller)))
{
/* Case
@@ -1186,9 +1246,13 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb,
return false;
minmax = MAX_EXPR;
- if (operand_equal_for_phi_arg_p (op0, larger))
+ if (operand_equal_for_phi_arg_p (op0, larger)
+ || (alt_larger
+ && operand_equal_for_phi_arg_p (op0, alt_larger)))
bound = op1;
- else if (operand_equal_for_phi_arg_p (op1, larger))
+ else if (operand_equal_for_phi_arg_p (op1, larger)
+ || (alt_larger
+ && operand_equal_for_phi_arg_p (op1, alt_larger)))
bound = op0;
else
return false;
@@ -1207,7 +1271,9 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb,
if (!operand_equal_for_phi_arg_p (lhs, arg_false))
return false;
- if (operand_equal_for_phi_arg_p (arg_true, larger))
+ if (operand_equal_for_phi_arg_p (arg_true, larger)
+ || (alt_larger
+ && operand_equal_for_phi_arg_p (arg_true, alt_larger)))
{
/* Case
@@ -1220,9 +1286,13 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb,
return false;
minmax = MAX_EXPR;
- if (operand_equal_for_phi_arg_p (op0, smaller))
+ if (operand_equal_for_phi_arg_p (op0, smaller)
+ || (alt_smaller
+ && operand_equal_for_phi_arg_p (op0, alt_smaller)))
bound = op1;
- else if (operand_equal_for_phi_arg_p (op1, smaller))
+ else if (operand_equal_for_phi_arg_p (op1, smaller)
+ || (alt_smaller
+ && operand_equal_for_phi_arg_p (op1, alt_smaller)))
bound = op0;
else
return false;
@@ -1232,7 +1302,9 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb,
bound, larger)))
return false;
}
- else if (operand_equal_for_phi_arg_p (arg_true, smaller))
+ else if (operand_equal_for_phi_arg_p (arg_true, smaller)
+ || (alt_smaller
+ && operand_equal_for_phi_arg_p (arg_true, alt_smaller)))
{
/* Case
diff --git a/gcc/tree-ssa-propagate.c b/gcc/tree-ssa-propagate.c
index 3277e49..c4535a4 100644
--- a/gcc/tree-ssa-propagate.c
+++ b/gcc/tree-ssa-propagate.c
@@ -55,6 +55,8 @@
SSA_PROP_NOT_INTERESTING: Statement S produces nothing of
interest and does not affect any of the work lists.
+ The statement may be simulated again if any of its input
+ operands change in future iterations of the simulator.
SSA_PROP_VARYING: The value produced by S cannot be determined
at compile time. Further simulation of S is not required.
diff --git a/gcc/tree-ssa-reassoc.c b/gcc/tree-ssa-reassoc.c
index 17eb64f..d23dabd 100644
--- a/gcc/tree-ssa-reassoc.c
+++ b/gcc/tree-ssa-reassoc.c
@@ -605,6 +605,21 @@ is_reassociable_op (gimple *stmt, enum tree_code code, struct loop *loop)
}
+/* Return true if STMT is a nop-conversion. */
+
+static bool
+gimple_nop_conversion_p (gimple *stmt)
+{
+ if (gassign *ass = dyn_cast <gassign *> (stmt))
+ {
+ if (CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (ass))
+ && tree_nop_conversion_p (TREE_TYPE (gimple_assign_lhs (ass)),
+ TREE_TYPE (gimple_assign_rhs1 (ass))))
+ return true;
+ }
+ return false;
+}
+
/* Given NAME, if NAME is defined by a unary operation OPCODE, return the
operand of the negate operation. Otherwise, return NULL. */
@@ -613,6 +628,11 @@ get_unary_op (tree name, enum tree_code opcode)
{
gimple *stmt = SSA_NAME_DEF_STMT (name);
+ /* Look through nop conversions (sign changes). */
+ if (gimple_nop_conversion_p (stmt)
+ && TREE_CODE (gimple_assign_rhs1 (stmt)) == SSA_NAME)
+ stmt = SSA_NAME_DEF_STMT (gimple_assign_rhs1 (stmt));
+
if (!is_gimple_assign (stmt))
return NULL_TREE;
@@ -621,6 +641,42 @@ get_unary_op (tree name, enum tree_code opcode)
return NULL_TREE;
}
+/* Return true if OP1 and OP2 have the same value if casted to either type. */
+
+static bool
+ops_equal_values_p (tree op1, tree op2)
+{
+ if (op1 == op2)
+ return true;
+
+ tree orig_op1 = op1;
+ if (TREE_CODE (op1) == SSA_NAME)
+ {
+ gimple *stmt = SSA_NAME_DEF_STMT (op1);
+ if (gimple_nop_conversion_p (stmt))
+ {
+ op1 = gimple_assign_rhs1 (stmt);
+ if (op1 == op2)
+ return true;
+ }
+ }
+
+ if (TREE_CODE (op2) == SSA_NAME)
+ {
+ gimple *stmt = SSA_NAME_DEF_STMT (op2);
+ if (gimple_nop_conversion_p (stmt))
+ {
+ op2 = gimple_assign_rhs1 (stmt);
+ if (op1 == op2
+ || orig_op1 == op2)
+ return true;
+ }
+ }
+
+ return false;
+}
+
+
/* If CURR and LAST are a pair of ops that OPCODE allows us to
eliminate through equivalences, do so, remove them from OPS, and
return true. Otherwise, return false. */
@@ -731,9 +787,9 @@ eliminate_plus_minus_pair (enum tree_code opcode,
&& oe->rank >= curr->rank - 1 ;
i++)
{
- if (oe->op == negateop)
+ if (negateop
+ && ops_equal_values_p (oe->op, negateop))
{
-
if (dump_file && (dump_flags & TDF_DETAILS))
{
fprintf (dump_file, "Equivalence: ");
@@ -750,7 +806,8 @@ eliminate_plus_minus_pair (enum tree_code opcode,
return true;
}
- else if (oe->op == notop)
+ else if (notop
+ && ops_equal_values_p (oe->op, notop))
{
tree op_type = TREE_TYPE (oe->op);
@@ -764,7 +821,7 @@ eliminate_plus_minus_pair (enum tree_code opcode,
}
ops->ordered_remove (i);
- add_to_ops_vec (ops, build_int_cst_type (op_type, -1));
+ add_to_ops_vec (ops, build_all_ones_cst (op_type));
ops->ordered_remove (currindex);
reassociate_stats.ops_eliminated ++;
@@ -772,9 +829,10 @@ eliminate_plus_minus_pair (enum tree_code opcode,
}
}
- /* CURR->OP is a negate expr in a plus expr: save it for later
- inspection in repropagate_negates(). */
- if (negateop != NULL_TREE)
+ /* If CURR->OP is a negate expr without nop conversion in a plus expr:
+ save it for later inspection in repropagate_negates(). */
+ if (negateop != NULL_TREE
+ && gimple_assign_rhs_code (SSA_NAME_DEF_STMT (curr->op)) == NEGATE_EXPR)
plus_negates.safe_push (curr->op);
return false;
@@ -2711,6 +2769,146 @@ optimize_range_tests (enum tree_code opcode,
return any_changes;
}
+/* A subroutine of optimize_vec_cond_expr to extract and canonicalize
+ the operands of the VEC_COND_EXPR. Returns ERROR_MARK on failure,
+ otherwise the comparison code. */
+
+static tree_code
+ovce_extract_ops (tree var, gassign **rets, bool *reti)
+{
+ if (TREE_CODE (var) != SSA_NAME)
+ return ERROR_MARK;
+
+ gassign *stmt = dyn_cast <gassign *> (SSA_NAME_DEF_STMT (var));
+ if (stmt == NULL)
+ return ERROR_MARK;
+
+ /* ??? If we start creating more COND_EXPR, we could perform
+ this same optimization with them. For now, simplify. */
+ if (gimple_assign_rhs_code (stmt) != VEC_COND_EXPR)
+ return ERROR_MARK;
+
+ tree cond = gimple_assign_rhs1 (stmt);
+ tree_code cmp = TREE_CODE (cond);
+ if (TREE_CODE_CLASS (cmp) != tcc_comparison)
+ return ERROR_MARK;
+
+ /* ??? For now, allow only canonical true and false result vectors.
+ We could expand this to other constants should the need arise,
+ but at the moment we don't create them. */
+ tree t = gimple_assign_rhs2 (stmt);
+ tree f = gimple_assign_rhs3 (stmt);
+ bool inv;
+ if (integer_all_onesp (t))
+ inv = false;
+ else if (integer_all_onesp (f))
+ {
+ cmp = invert_tree_comparison (cmp, false);
+ inv = true;
+ }
+ else
+ return ERROR_MARK;
+ if (!integer_zerop (f))
+ return ERROR_MARK;
+
+ /* Success! */
+ if (rets)
+ *rets = stmt;
+ if (reti)
+ *reti = inv;
+ return cmp;
+}
+
+/* Optimize the condition of VEC_COND_EXPRs which have been combined
+ with OPCODE (either BIT_AND_EXPR or BIT_IOR_EXPR). */
+
+static bool
+optimize_vec_cond_expr (tree_code opcode, vec<operand_entry *> *ops)
+{
+ unsigned int length = ops->length (), i, j;
+ bool any_changes = false;
+
+ if (length == 1)
+ return false;
+
+ for (i = 0; i < length; ++i)
+ {
+ tree elt0 = (*ops)[i]->op;
+
+ gassign *stmt0;
+ bool invert;
+ tree_code cmp0 = ovce_extract_ops (elt0, &stmt0, &invert);
+ if (cmp0 == ERROR_MARK)
+ continue;
+
+ for (j = i + 1; j < length; ++j)
+ {
+ tree &elt1 = (*ops)[j]->op;
+
+ gassign *stmt1;
+ tree_code cmp1 = ovce_extract_ops (elt1, &stmt1, NULL);
+ if (cmp1 == ERROR_MARK)
+ continue;
+
+ tree cond0 = gimple_assign_rhs1 (stmt0);
+ tree x0 = TREE_OPERAND (cond0, 0);
+ tree y0 = TREE_OPERAND (cond0, 1);
+
+ tree cond1 = gimple_assign_rhs1 (stmt1);
+ tree x1 = TREE_OPERAND (cond1, 0);
+ tree y1 = TREE_OPERAND (cond1, 1);
+
+ tree comb;
+ if (opcode == BIT_AND_EXPR)
+ comb = maybe_fold_and_comparisons (cmp0, x0, y0, cmp1, x1, y1);
+ else if (opcode == BIT_IOR_EXPR)
+ comb = maybe_fold_or_comparisons (cmp0, x0, y0, cmp1, x1, y1);
+ else
+ gcc_unreachable ();
+ if (comb == NULL)
+ continue;
+
+ /* Success! */
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "Transforming ");
+ print_generic_expr (dump_file, cond0, 0);
+ fprintf (dump_file, " %c ", opcode == BIT_AND_EXPR ? '&' : '|');
+ print_generic_expr (dump_file, cond1, 0);
+ fprintf (dump_file, " into ");
+ print_generic_expr (dump_file, comb, 0);
+ fputc ('\n', dump_file);
+ }
+
+ gimple_assign_set_rhs1 (stmt0, comb);
+ if (invert)
+ std::swap (*gimple_assign_rhs2_ptr (stmt0),
+ *gimple_assign_rhs3_ptr (stmt0));
+ update_stmt (stmt0);
+
+ elt1 = error_mark_node;
+ any_changes = true;
+ }
+ }
+
+ if (any_changes)
+ {
+ operand_entry *oe;
+ j = 0;
+ FOR_EACH_VEC_ELT (*ops, i, oe)
+ {
+ if (oe->op == error_mark_node)
+ continue;
+ else if (i != j)
+ (*ops)[j] = oe;
+ j++;
+ }
+ ops->truncate (j);
+ }
+
+ return any_changes;
+}
+
/* Return true if STMT is a cast like:
<bb N>:
...
@@ -4211,7 +4409,7 @@ repropagate_negates (void)
if (gimple_assign_rhs2 (user) == negate)
{
tree rhs1 = gimple_assign_rhs1 (user);
- tree rhs2 = get_unary_op (negate, NEGATE_EXPR);
+ tree rhs2 = gimple_assign_rhs1 (SSA_NAME_DEF_STMT (negate));
gimple_stmt_iterator gsi = gsi_for_stmt (user);
gimple_assign_set_rhs_with_ops (&gsi, MINUS_EXPR, rhs1, rhs2);
update_stmt (user);
@@ -4268,7 +4466,7 @@ static bool
can_reassociate_p (tree op)
{
tree type = TREE_TYPE (op);
- if ((INTEGRAL_TYPE_P (type) && TYPE_OVERFLOW_WRAPS (type))
+ if ((ANY_INTEGRAL_TYPE_P (type) && TYPE_OVERFLOW_WRAPS (type))
|| NON_SAT_FIXED_POINT_TYPE_P (type)
|| (flag_associative_math && FLOAT_TYPE_P (type)))
return true;
@@ -4894,6 +5092,7 @@ reassociate_bb (basic_block bb)
{
auto_vec<operand_entry *> ops;
tree powi_result = NULL_TREE;
+ bool is_vector = VECTOR_TYPE_P (TREE_TYPE (lhs));
/* There may be no immediate uses left by the time we
get here because we may have eliminated them all. */
@@ -4912,15 +5111,21 @@ reassociate_bb (basic_block bb)
}
if (rhs_code == BIT_IOR_EXPR || rhs_code == BIT_AND_EXPR)
- optimize_range_tests (rhs_code, &ops);
+ {
+ if (is_vector)
+ optimize_vec_cond_expr (rhs_code, &ops);
+ else
+ optimize_range_tests (rhs_code, &ops);
+ }
- if (rhs_code == MULT_EXPR)
- attempt_builtin_copysign (&ops);
+ if (rhs_code == MULT_EXPR && !is_vector)
+ {
+ attempt_builtin_copysign (&ops);
- if (reassoc_insert_powi_p
- && rhs_code == MULT_EXPR
- && flag_unsafe_math_optimizations)
- powi_result = attempt_builtin_powi (stmt, &ops);
+ if (reassoc_insert_powi_p
+ && flag_unsafe_math_optimizations)
+ powi_result = attempt_builtin_powi (stmt, &ops);
+ }
/* If the operand vector is now empty, all operands were
consumed by the __builtin_powi optimization. */
diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c
index 1c237a4..8a5b641 100644
--- a/gcc/tree-ssa-sccvn.c
+++ b/gcc/tree-ssa-sccvn.c
@@ -407,7 +407,7 @@ VN_INFO_GET (tree name)
newinfo = XOBNEW (&vn_ssa_aux_obstack, struct vn_ssa_aux);
memset (newinfo, 0, sizeof (struct vn_ssa_aux));
if (SSA_NAME_VERSION (name) >= vn_ssa_aux_table.length ())
- vn_ssa_aux_table.safe_grow (SSA_NAME_VERSION (name) + 1);
+ vn_ssa_aux_table.safe_grow_cleared (SSA_NAME_VERSION (name) + 1);
vn_ssa_aux_table[SSA_NAME_VERSION (name)] = newinfo;
return newinfo;
}
diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c
index d7a7dc5..bad1ea1 100644
--- a/gcc/tree-ssa-structalias.c
+++ b/gcc/tree-ssa-structalias.c
@@ -2943,6 +2943,14 @@ get_constraint_for_ssa_var (tree t, vec<ce_s> *results, bool address_p)
if (node && node->alias && node->analyzed)
{
node = node->ultimate_alias_target ();
+ /* Canonicalize the PT uid of all aliases to the ultimate target.
+ ??? Hopefully the set of aliases can't change in a way that
+ changes the ultimate alias target. */
+ gcc_assert ((! DECL_PT_UID_SET_P (node->decl)
+ || DECL_PT_UID (node->decl) == DECL_UID (node->decl))
+ && (! DECL_PT_UID_SET_P (t)
+ || DECL_PT_UID (t) == DECL_UID (node->decl)));
+ DECL_PT_UID (t) = DECL_UID (node->decl);
t = node->decl;
}
}
@@ -6272,6 +6280,16 @@ set_uids_in_ptset (bitmap into, bitmap from, struct pt_solution *pt,
&& ! auto_var_in_fn_p (vi->decl, fndecl)))
pt->vars_contains_nonlocal = true;
}
+
+ else if (TREE_CODE (vi->decl) == FUNCTION_DECL
+ || TREE_CODE (vi->decl) == LABEL_DECL)
+ {
+ /* Nothing should read/write from/to code so we can
+ save bits by not including them in the points-to bitmaps.
+ Still mark the points-to set as containing global memory
+ to make code-patching possible - see PR70128. */
+ pt->vars_contains_nonlocal = true;
+ }
}
}
diff --git a/gcc/tree-ssa-tail-merge.c b/gcc/tree-ssa-tail-merge.c
index 5d32790..e95879f 100644
--- a/gcc/tree-ssa-tail-merge.c
+++ b/gcc/tree-ssa-tail-merge.c
@@ -1207,6 +1207,42 @@ gsi_advance_bw_nondebug_nonlocal (gimple_stmt_iterator *gsi, tree *vuse,
}
}
+/* Return true if equal (in the sense of gimple_equal_p) statements STMT1 and
+ STMT2 are allowed to be merged. */
+
+static bool
+merge_stmts_p (gimple *stmt1, gimple *stmt2)
+{
+ /* What could be better than this here is to blacklist the bb
+ containing the stmt, when encountering the stmt f.i. in
+ same_succ_hash. */
+ if (is_tm_ending (stmt1))
+ return false;
+
+ if (is_gimple_call (stmt1)
+ && gimple_call_internal_p (stmt1))
+ switch (gimple_call_internal_fn (stmt1))
+ {
+ case IFN_UBSAN_NULL:
+ case IFN_UBSAN_BOUNDS:
+ case IFN_UBSAN_VPTR:
+ case IFN_UBSAN_CHECK_ADD:
+ case IFN_UBSAN_CHECK_SUB:
+ case IFN_UBSAN_CHECK_MUL:
+ case IFN_UBSAN_OBJECT_SIZE:
+ case IFN_ASAN_CHECK:
+ /* For these internal functions, gimple_location is an implicit
+ parameter, which will be used explicitly after expansion.
+ Merging these statements may cause confusing line numbers in
+ sanitizer messages. */
+ return gimple_location (stmt1) == gimple_location (stmt2);
+ default:
+ break;
+ }
+
+ return true;
+}
+
/* Determines whether BB1 and BB2 (members of same_succ) are duplicates. If so,
clusters them. */
@@ -1226,14 +1262,10 @@ find_duplicate (same_succ *same_succ, basic_block bb1, basic_block bb2)
gimple *stmt1 = gsi_stmt (gsi1);
gimple *stmt2 = gsi_stmt (gsi2);
- /* What could be better than this here is to blacklist the bb
- containing the stmt, when encountering the stmt f.i. in
- same_succ_hash. */
- if (is_tm_ending (stmt1)
- || is_tm_ending (stmt2))
+ if (!gimple_equal_p (same_succ, stmt1, stmt2))
return;
- if (!gimple_equal_p (same_succ, stmt1, stmt2))
+ if (!merge_stmts_p (stmt1, stmt2))
return;
gsi_prev_nondebug (&gsi1);
diff --git a/gcc/tree-ssa-threadbackward.c b/gcc/tree-ssa-threadbackward.c
index 55dbcad..44b1b47 100644
--- a/gcc/tree-ssa-threadbackward.c
+++ b/gcc/tree-ssa-threadbackward.c
@@ -286,6 +286,41 @@ fsm_find_control_statement_thread_paths (tree name,
break;
}
+ /* PHIs in the path will create degenerate PHIS in the
+ copied path which will then get propagated away, so
+ looking at just the duplicate path the PHIs would
+ seem unimportant.
+
+ But those PHIs, because they're assignments to objects
+ typically with lives that exist outside the thread path,
+ will tend to generate PHIs (or at least new PHI arguments)
+ at points where we leave the thread path and rejoin
+ the original blocks. So we do want to account for them.
+
+ We ignore virtual PHIs. We also ignore cases where BB
+ has a single incoming edge. That's the most common
+ degenerate PHI we'll see here. Finally we ignore PHIs
+ that are associated with the value we're tracking as
+ that object likely dies. */
+ if (EDGE_COUNT (bb->succs) > 1 && EDGE_COUNT (bb->preds) > 1)
+ {
+ for (gphi_iterator gsip = gsi_start_phis (bb);
+ !gsi_end_p (gsip);
+ gsi_next (&gsip))
+ {
+ gphi *phi = gsip.phi ();
+ tree dst = gimple_phi_result (phi);
+
+ /* Note that if both NAME and DST are anonymous
+ SSA_NAMEs, then we do not have enough information
+ to consider them associated. */
+ if ((SSA_NAME_VAR (dst) != SSA_NAME_VAR (name)
+ || !SSA_NAME_VAR (dst))
+ && !virtual_operand_p (dst))
+ ++n_insns;
+ }
+ }
+
for (gsi = gsi_after_labels (bb);
!gsi_end_p (gsi);
gsi_next_nondebug (&gsi))
@@ -324,6 +359,11 @@ fsm_find_control_statement_thread_paths (tree name,
threaded_through_latch = true;
}
+ /* We are going to remove the control statement at the end of the
+ last block in the threading path. So don't count it against our
+ statement count. */
+ n_insns--;
+
gimple *stmt = get_gimple_control_stmt ((*path)[0]);
gcc_assert (stmt);
/* We have found a constant value for ARG. For GIMPLE_SWITCH
@@ -345,6 +385,16 @@ fsm_find_control_statement_thread_paths (tree name,
We have to know the outgoing edge to figure this out. */
edge taken_edge = find_taken_edge ((*path)[0], arg);
+
+ /* There are cases where we may not be able to extract the
+ taken edge. For example, a computed goto to an absolute
+ address. Handle those cases gracefully. */
+ if (taken_edge == NULL)
+ {
+ path->pop ();
+ continue;
+ }
+
bool creates_irreducible_loop = false;
if (threaded_through_latch
&& loop == taken_edge->dest->loop_father
@@ -352,24 +402,6 @@ fsm_find_control_statement_thread_paths (tree name,
== DOMST_NONDOMINATING))
creates_irreducible_loop = true;
- /* PHIs in the final target and only the final target will need
- to be duplicated. So only count those against the number
- of statements. */
- gphi_iterator gsip;
- for (gsip = gsi_start_phis (taken_edge->dest);
- !gsi_end_p (gsip);
- gsi_next (&gsip))
- {
- gphi *phi = gsip.phi ();
- tree dst = gimple_phi_result (phi);
-
- /* We consider any non-virtual PHI as a statement since it
- count result in a constant assignment or copy
- operation. */
- if (!virtual_operand_p (dst))
- ++n_insns;
- }
-
if (path_crosses_loops)
{
if (dump_file && (dump_flags & TDF_DETAILS))
@@ -411,6 +443,26 @@ fsm_find_control_statement_thread_paths (tree name,
continue;
}
+
+ /* If this path does not thread through the loop latch, then we are
+ using the FSM threader to find old style jump threads. This
+ is good, except the FSM threader does not re-use an existing
+ threading path to reduce code duplication.
+
+ So for that case, drastically reduce the number of statements
+ we are allowed to copy. */
+ if (!(threaded_through_latch && threaded_multiway_branch)
+ && (n_insns * PARAM_VALUE (PARAM_FSM_SCALE_PATH_STMTS)
+ >= PARAM_VALUE (PARAM_MAX_JUMP_THREAD_DUPLICATION_STMTS)))
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file,
+ "FSM did not thread around loop and would copy too "
+ "many statements.\n");
+ path->pop ();
+ continue;
+ }
+
/* When there is a multi-way branch on the path, then threading can
explode the CFG due to duplicating the edges for that multi-way
branch. So like above, only allow a multi-way branch on the path
diff --git a/gcc/tree-ssa-uncprop.c b/gcc/tree-ssa-uncprop.c
index 307bb1f..e2e8212 100644
--- a/gcc/tree-ssa-uncprop.c
+++ b/gcc/tree-ssa-uncprop.c
@@ -95,7 +95,8 @@ associate_equivalences_with_edges (void)
if (TREE_CODE (op0) == SSA_NAME
&& !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (op0)
&& ssa_name_has_boolean_range (op0)
- && is_gimple_min_invariant (op1))
+ && is_gimple_min_invariant (op1)
+ && (integer_zerop (op1) || integer_onep (op1)))
{
tree true_val = constant_boolean_node (true, TREE_TYPE (op0));
tree false_val = constant_boolean_node (false,
diff --git a/gcc/tree-streamer-out.c b/gcc/tree-streamer-out.c
index 42281a5..c37755d 100644
--- a/gcc/tree-streamer-out.c
+++ b/gcc/tree-streamer-out.c
@@ -325,7 +325,7 @@ pack_ts_type_common_value_fields (struct bitpack_d *bp, tree expr)
bp_pack_value (bp, TYPE_READONLY (expr), 1);
/* We used to stream TYPE_ALIAS_SET == 0 information to let frontends mark
types that are opaque for TBAA. This however did not work as intended,
- becuase TYPE_ALIAS_SET == 0 was regularly lost in type merging. */
+ because TYPE_ALIAS_SET == 0 was regularly lost in type merging. */
if (RECORD_OR_UNION_TYPE_P (expr))
{
bp_pack_value (bp, TYPE_TRANSPARENT_AGGR (expr), 1);
diff --git a/gcc/tree-vect-generic.c b/gcc/tree-vect-generic.c
index f0ff4c5..ce91270 100644
--- a/gcc/tree-vect-generic.c
+++ b/gcc/tree-vect-generic.c
@@ -103,7 +103,8 @@ typedef tree (*elem_op_func) (gimple_stmt_iterator *,
tree);
static inline tree
-tree_vec_extract (tree type, tree t, tree bitsize, tree bitpos)
+tree_vec_extract (gimple_stmt_iterator *gsi, tree type,
+ tree t, tree bitsize, tree bitpos)
{
if (TREE_CODE (t) == SSA_NAME)
{
@@ -114,21 +115,22 @@ tree_vec_extract (tree type, tree t, tree bitsize, tree bitpos)
&& gimple_assign_rhs_code (def_stmt) == CONSTRUCTOR)))
t = gimple_assign_rhs1 (def_stmt);
}
-
if (bitpos)
{
if (TREE_CODE (type) == BOOLEAN_TYPE)
{
tree itype
= build_nonstandard_integer_type (tree_to_uhwi (bitsize), 0);
- tree field = fold_build3 (BIT_FIELD_REF, itype, t, bitsize, bitpos);
- return fold_build2 (NE_EXPR, type, field, build_zero_cst (itype));
+ tree field = gimplify_build3 (gsi, BIT_FIELD_REF, itype, t,
+ bitsize, bitpos);
+ return gimplify_build2 (gsi, NE_EXPR, type, field,
+ build_zero_cst (itype));
}
-
- return fold_build3 (BIT_FIELD_REF, type, t, bitsize, bitpos);
+ else
+ return gimplify_build3 (gsi, BIT_FIELD_REF, type, t, bitsize, bitpos);
}
-
- return fold_build1 (VIEW_CONVERT_EXPR, type, t);
+ else
+ return gimplify_build1 (gsi, VIEW_CONVERT_EXPR, type, t);
}
static tree
@@ -136,7 +138,7 @@ do_unop (gimple_stmt_iterator *gsi, tree inner_type, tree a,
tree b ATTRIBUTE_UNUSED, tree bitpos, tree bitsize,
enum tree_code code, tree type ATTRIBUTE_UNUSED)
{
- a = tree_vec_extract (inner_type, a, bitsize, bitpos);
+ a = tree_vec_extract (gsi, inner_type, a, bitsize, bitpos);
return gimplify_build1 (gsi, code, inner_type, a);
}
@@ -146,9 +148,9 @@ do_binop (gimple_stmt_iterator *gsi, tree inner_type, tree a, tree b,
tree type ATTRIBUTE_UNUSED)
{
if (TREE_CODE (TREE_TYPE (a)) == VECTOR_TYPE)
- a = tree_vec_extract (inner_type, a, bitsize, bitpos);
+ a = tree_vec_extract (gsi, inner_type, a, bitsize, bitpos);
if (TREE_CODE (TREE_TYPE (b)) == VECTOR_TYPE)
- b = tree_vec_extract (inner_type, b, bitsize, bitpos);
+ b = tree_vec_extract (gsi, inner_type, b, bitsize, bitpos);
return gimplify_build2 (gsi, code, inner_type, a, b);
}
@@ -167,8 +169,8 @@ do_compare (gimple_stmt_iterator *gsi, tree inner_type, tree a, tree b,
tree cst_true = build_all_ones_cst (stype);
tree cmp;
- a = tree_vec_extract (inner_type, a, bitsize, bitpos);
- b = tree_vec_extract (inner_type, b, bitsize, bitpos);
+ a = tree_vec_extract (gsi, inner_type, a, bitsize, bitpos);
+ b = tree_vec_extract (gsi, inner_type, b, bitsize, bitpos);
cmp = build2 (code, boolean_type_node, a, b);
return gimplify_build3 (gsi, COND_EXPR, stype, cmp, cst_true, cst_false);
@@ -200,8 +202,8 @@ do_plus_minus (gimple_stmt_iterator *gsi, tree word_type, tree a, tree b,
low_bits = build_replicated_const (word_type, inner_type, max >> 1);
high_bits = build_replicated_const (word_type, inner_type, max & ~(max >> 1));
- a = tree_vec_extract (word_type, a, bitsize, bitpos);
- b = tree_vec_extract (word_type, b, bitsize, bitpos);
+ a = tree_vec_extract (gsi, word_type, a, bitsize, bitpos);
+ b = tree_vec_extract (gsi, word_type, b, bitsize, bitpos);
signs = gimplify_build2 (gsi, BIT_XOR_EXPR, word_type, a, b);
b_low = gimplify_build2 (gsi, BIT_AND_EXPR, word_type, b, low_bits);
@@ -233,7 +235,7 @@ do_negate (gimple_stmt_iterator *gsi, tree word_type, tree b,
low_bits = build_replicated_const (word_type, inner_type, max >> 1);
high_bits = build_replicated_const (word_type, inner_type, max & ~(max >> 1));
- b = tree_vec_extract (word_type, b, bitsize, bitpos);
+ b = tree_vec_extract (gsi, word_type, b, bitsize, bitpos);
b_low = gimplify_build2 (gsi, BIT_AND_EXPR, word_type, b, low_bits);
signs = gimplify_build1 (gsi, BIT_NOT_EXPR, word_type, b);
@@ -889,16 +891,16 @@ expand_vector_condition (gimple_stmt_iterator *gsi)
i++, index = int_const_binop (PLUS_EXPR, index, width))
{
tree aa, result;
- tree bb = tree_vec_extract (inner_type, b, width, index);
- tree cc = tree_vec_extract (inner_type, c, width, index);
+ tree bb = tree_vec_extract (gsi, inner_type, b, width, index);
+ tree cc = tree_vec_extract (gsi, inner_type, c, width, index);
if (a_is_comparison)
{
- tree aa1 = tree_vec_extract (comp_inner_type, a1, width, index);
- tree aa2 = tree_vec_extract (comp_inner_type, a2, width, index);
- aa = build2 (TREE_CODE (a), cond_type, aa1, aa2);
+ tree aa1 = tree_vec_extract (gsi, comp_inner_type, a1, width, index);
+ tree aa2 = tree_vec_extract (gsi, comp_inner_type, a2, width, index);
+ aa = fold_build2 (TREE_CODE (a), cond_type, aa1, aa2);
}
else
- aa = tree_vec_extract (cond_type, a, width, index);
+ aa = tree_vec_extract (gsi, cond_type, a, width, index);
result = gimplify_build3 (gsi, COND_EXPR, inner_type, aa, bb, cc);
constructor_elt ce = {NULL_TREE, result};
v->quick_push (ce);
@@ -1405,6 +1407,7 @@ get_compute_type (enum tree_code code, optab op, tree type)
if (vector_compute_type != NULL_TREE
&& (TYPE_VECTOR_SUBPARTS (vector_compute_type)
< TYPE_VECTOR_SUBPARTS (compute_type))
+ && TYPE_VECTOR_SUBPARTS (vector_compute_type) > 1
&& (optab_handler (op, TYPE_MODE (vector_compute_type))
!= CODE_FOR_nothing))
compute_type = vector_compute_type;
@@ -1447,9 +1450,9 @@ do_cond (gimple_stmt_iterator *gsi, tree inner_type, tree a, tree b,
tree type ATTRIBUTE_UNUSED)
{
if (TREE_CODE (TREE_TYPE (a)) == VECTOR_TYPE)
- a = tree_vec_extract (inner_type, a, bitsize, bitpos);
+ a = tree_vec_extract (gsi, inner_type, a, bitsize, bitpos);
if (TREE_CODE (TREE_TYPE (b)) == VECTOR_TYPE)
- b = tree_vec_extract (inner_type, b, bitsize, bitpos);
+ b = tree_vec_extract (gsi, inner_type, b, bitsize, bitpos);
tree cond = gimple_assign_rhs1 (gsi_stmt (*gsi));
return gimplify_build3 (gsi, code, inner_type, unshare_expr (cond), a, b);
}
diff --git a/gcc/tree-vect-loop-manip.c b/gcc/tree-vect-loop-manip.c
index f8a44b5..7ec6dae 100644
--- a/gcc/tree-vect-loop-manip.c
+++ b/gcc/tree-vect-loop-manip.c
@@ -1692,7 +1692,8 @@ vect_update_ivs_after_vectorizer (loop_vec_info loop_vinfo, tree niters,
/* Skip reduction phis. */
stmt_info = vinfo_for_stmt (phi);
- if (STMT_VINFO_DEF_TYPE (stmt_info) == vect_reduction_def)
+ if (STMT_VINFO_DEF_TYPE (stmt_info) == vect_reduction_def
+ || STMT_VINFO_DEF_TYPE (stmt_info) == vect_double_reduction_def)
{
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
index bbef502..d813b86 100644
--- a/gcc/tree-vect-loop.c
+++ b/gcc/tree-vect-loop.c
@@ -1772,8 +1772,9 @@ vect_analyze_loop_2 (loop_vec_info loop_vinfo, bool &fatal)
{
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
- "not vectorized: loop contains function calls"
- " or data references that cannot be analyzed\n");
+ "not vectorized: loop nest containing two "
+ "or more consecutive inner loops cannot be "
+ "vectorized\n");
return false;
}
@@ -3430,8 +3431,8 @@ vect_estimate_min_profitable_iters (loop_vec_info loop_vinfo,
min_profitable_estimate = MAX (min_profitable_estimate, min_profitable_iters);
if (dump_enabled_p ())
dump_printf_loc (MSG_NOTE, vect_location,
- " Static estimate profitability threshold = %d\n",
- min_profitable_iters);
+ " Static estimate profitability threshold = %d\n",
+ min_profitable_estimate);
*ret_min_profitable_estimate = min_profitable_estimate;
}
@@ -4110,6 +4111,15 @@ get_initial_def_for_reduction (gimple *stmt, tree init_val,
return vect_create_destination_var (init_val, vectype);
}
+ /* In case of a nested reduction do not use an adjustment def as
+ that case is not supported by the epilogue generation correctly
+ if ncopies is not one. */
+ if (adjustment_def && nested_in_vect_loop)
+ {
+ *adjustment_def = NULL;
+ return vect_get_vec_def_for_operand (init_val, stmt);
+ }
+
switch (code)
{
case WIDEN_SUM_EXPR:
@@ -4124,12 +4134,7 @@ get_initial_def_for_reduction (gimple *stmt, tree init_val,
/* ADJUSMENT_DEF is NULL when called from
vect_create_epilog_for_reduction to vectorize double reduction. */
if (adjustment_def)
- {
- if (nested_in_vect_loop)
- *adjustment_def = vect_get_vec_def_for_operand (init_val, stmt);
- else
- *adjustment_def = init_val;
- }
+ *adjustment_def = init_val;
if (code == MULT_EXPR)
{
@@ -4341,6 +4346,7 @@ vect_create_epilog_for_reduction (vec<tree> vect_defs, gimple *stmt,
(in case of SLP, do it for all the phis). */
/* Get the loop-entry arguments. */
+ enum vect_def_type initial_def_dt = vect_unknown_def_type;
if (slp_node)
vect_get_vec_defs (reduction_op, NULL_TREE, stmt, &vec_initial_defs,
NULL, slp_node, reduc_index);
@@ -4351,9 +4357,10 @@ vect_create_epilog_for_reduction (vec<tree> vect_defs, gimple *stmt,
gimple *def_stmt = SSA_NAME_DEF_STMT (reduction_op);
initial_def = PHI_ARG_DEF_FROM_EDGE (def_stmt,
loop_preheader_edge (loop));
- vec_initial_defs.create (1);
+ vect_is_simple_use (initial_def, loop_vinfo, &def_stmt, &initial_def_dt);
vec_initial_def = get_initial_def_for_reduction (stmt, initial_def,
&adjustment_def);
+ vec_initial_defs.create (1);
vec_initial_defs.quick_push (vec_initial_def);
}
@@ -4368,6 +4375,15 @@ vect_create_epilog_for_reduction (vec<tree> vect_defs, gimple *stmt,
def = vect_defs[i];
for (j = 0; j < ncopies; j++)
{
+ if (j != 0)
+ {
+ phi = STMT_VINFO_RELATED_STMT (vinfo_for_stmt (phi));
+ if (nested_in_vect_loop)
+ vec_init_def
+ = vect_get_vec_def_for_stmt_copy (initial_def_dt,
+ vec_init_def);
+ }
+
/* Set the loop-entry arg of the reduction-phi. */
if (STMT_VINFO_VEC_REDUCTION_TYPE (stmt_info)
@@ -4404,8 +4420,6 @@ vect_create_epilog_for_reduction (vec<tree> vect_defs, gimple *stmt,
dump_gimple_stmt (MSG_NOTE, TDF_SLIM, SSA_NAME_DEF_STMT (def), 0);
dump_printf (MSG_NOTE, "\n");
}
-
- phi = STMT_VINFO_RELATED_STMT (vinfo_for_stmt (phi));
}
}
@@ -7077,7 +7091,10 @@ optimize_mask_stores (struct loop *loop)
/* Skip debug statements. */
if (is_gimple_debug (gsi_stmt (gsi)))
- continue;
+ {
+ gsi_prev (&gsi);
+ continue;
+ }
stmt1 = gsi_stmt (gsi);
/* Do not consider statements writing to memory or having
volatile operand. */
diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c
index 95ce38d..27080d2 100644
--- a/gcc/tree-vect-patterns.c
+++ b/gcc/tree-vect-patterns.c
@@ -2090,13 +2090,27 @@ vect_recog_vector_vector_shift_pattern (vec<gimple *> *stmts,
return NULL;
tree def = NULL_TREE;
- if (gimple_assign_cast_p (def_stmt))
+ stmt_vec_info def_vinfo = vinfo_for_stmt (def_stmt);
+ if (!STMT_VINFO_IN_PATTERN_P (def_vinfo) && gimple_assign_cast_p (def_stmt))
{
tree rhs1 = gimple_assign_rhs1 (def_stmt);
if (TYPE_MODE (TREE_TYPE (rhs1)) == TYPE_MODE (TREE_TYPE (oprnd0))
&& TYPE_PRECISION (TREE_TYPE (rhs1))
== TYPE_PRECISION (TREE_TYPE (oprnd0)))
- def = rhs1;
+ {
+ if (TYPE_PRECISION (TREE_TYPE (oprnd1))
+ >= TYPE_PRECISION (TREE_TYPE (rhs1)))
+ def = rhs1;
+ else
+ {
+ tree mask
+ = build_low_bits_mask (TREE_TYPE (rhs1),
+ TYPE_PRECISION (TREE_TYPE (oprnd1)));
+ def = vect_recog_temp_ssa_var (TREE_TYPE (rhs1), NULL);
+ def_stmt = gimple_build_assign (def, BIT_AND_EXPR, rhs1, mask);
+ new_pattern_def_seq (stmt_vinfo, def_stmt);
+ }
+ }
}
if (def == NULL_TREE)
@@ -3219,6 +3233,15 @@ search_type_for_mask (tree var, vec_info *vinfo)
{
tree comp_vectype, mask_type;
+ if (TREE_CODE (TREE_TYPE (rhs1)) == BOOLEAN_TYPE)
+ {
+ res = search_type_for_mask (rhs1, vinfo);
+ res2 = search_type_for_mask (gimple_assign_rhs2 (def_stmt), vinfo);
+ if (!res || (res2 && TYPE_PRECISION (res) > TYPE_PRECISION (res2)))
+ res = res2;
+ break;
+ }
+
comp_vectype = get_vectype_for_scalar_type (TREE_TYPE (rhs1));
if (comp_vectype == NULL_TREE)
return NULL_TREE;
diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c
index 660b14c..d713848 100644
--- a/gcc/tree-vect-slp.c
+++ b/gcc/tree-vect-slp.c
@@ -1332,8 +1332,22 @@ vect_attempt_slp_rearrange_stmts (slp_instance slp_instn)
node->load_permutation);
/* We are done, no actual permutations need to be generated. */
+ unsigned int unrolling_factor = SLP_INSTANCE_UNROLLING_FACTOR (slp_instn);
FOR_EACH_VEC_ELT (SLP_INSTANCE_LOADS (slp_instn), i, node)
- SLP_TREE_LOAD_PERMUTATION (node).release ();
+ {
+ gimple *first_stmt = SLP_TREE_SCALAR_STMTS (node)[0];
+ first_stmt = GROUP_FIRST_ELEMENT (vinfo_for_stmt (first_stmt));
+ /* But we have to keep those permutations that are required because
+ of handling of gaps. */
+ if (unrolling_factor == 1
+ || (group_size == GROUP_SIZE (vinfo_for_stmt (first_stmt))
+ && GROUP_GAP (vinfo_for_stmt (first_stmt)) == 0))
+ SLP_TREE_LOAD_PERMUTATION (node).release ();
+ else
+ for (j = 0; j < SLP_TREE_LOAD_PERMUTATION (node).length (); ++j)
+ SLP_TREE_LOAD_PERMUTATION (node)[j] = j;
+ }
+
return true;
}
@@ -1381,12 +1395,7 @@ vect_supported_load_permutation_p (slp_instance slp_instn)
In reduction chain the order of the loads is not important. */
if (!STMT_VINFO_DATA_REF (vinfo_for_stmt (stmt))
&& !GROUP_FIRST_ELEMENT (vinfo_for_stmt (stmt)))
- {
- if (vect_attempt_slp_rearrange_stmts (slp_instn))
- return true;
-
- /* Fallthru to general load permutation handling. */
- }
+ vect_attempt_slp_rearrange_stmts (slp_instn);
/* In basic block vectorization we allow any subchain of an interleaving
chain.
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index 1aade9e..cd5afea 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -181,8 +181,7 @@ create_array_ref (tree type, tree ptr, struct data_reference *first_dr)
static void
vect_mark_relevant (vec<gimple *> *worklist, gimple *stmt,
- enum vect_relevant relevant, bool live_p,
- bool used_in_pattern)
+ enum vect_relevant relevant, bool live_p)
{
stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
enum vect_relevant save_relevant = STMT_VINFO_RELEVANT (stmt_info);
@@ -202,62 +201,22 @@ vect_mark_relevant (vec<gimple *> *worklist, gimple *stmt,
stmt itself should be marked. */
if (STMT_VINFO_IN_PATTERN_P (stmt_info))
{
- bool found = false;
- if (!used_in_pattern)
- {
- imm_use_iterator imm_iter;
- use_operand_p use_p;
- gimple *use_stmt;
- tree lhs;
- loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_info);
- struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
-
- if (is_gimple_assign (stmt))
- lhs = gimple_assign_lhs (stmt);
- else
- lhs = gimple_call_lhs (stmt);
-
- /* This use is out of pattern use, if LHS has other uses that are
- pattern uses, we should mark the stmt itself, and not the pattern
- stmt. */
- if (lhs && TREE_CODE (lhs) == SSA_NAME)
- FOR_EACH_IMM_USE_FAST (use_p, imm_iter, lhs)
- {
- if (is_gimple_debug (USE_STMT (use_p)))
- continue;
- use_stmt = USE_STMT (use_p);
-
- if (!flow_bb_inside_loop_p (loop, gimple_bb (use_stmt)))
- continue;
-
- if (vinfo_for_stmt (use_stmt)
- && STMT_VINFO_IN_PATTERN_P (vinfo_for_stmt (use_stmt)))
- {
- found = true;
- break;
- }
- }
- }
-
- if (!found)
- {
- /* This is the last stmt in a sequence that was detected as a
- pattern that can potentially be vectorized. Don't mark the stmt
- as relevant/live because it's not going to be vectorized.
- Instead mark the pattern-stmt that replaces it. */
+ /* This is the last stmt in a sequence that was detected as a
+ pattern that can potentially be vectorized. Don't mark the stmt
+ as relevant/live because it's not going to be vectorized.
+ Instead mark the pattern-stmt that replaces it. */
- pattern_stmt = STMT_VINFO_RELATED_STMT (stmt_info);
+ pattern_stmt = STMT_VINFO_RELATED_STMT (stmt_info);
- if (dump_enabled_p ())
- dump_printf_loc (MSG_NOTE, vect_location,
- "last stmt in pattern. don't mark"
- " relevant/live.\n");
- stmt_info = vinfo_for_stmt (pattern_stmt);
- gcc_assert (STMT_VINFO_RELATED_STMT (stmt_info) == stmt);
- save_relevant = STMT_VINFO_RELEVANT (stmt_info);
- save_live_p = STMT_VINFO_LIVE_P (stmt_info);
- stmt = pattern_stmt;
- }
+ if (dump_enabled_p ())
+ dump_printf_loc (MSG_NOTE, vect_location,
+ "last stmt in pattern. don't mark"
+ " relevant/live.\n");
+ stmt_info = vinfo_for_stmt (pattern_stmt);
+ gcc_assert (STMT_VINFO_RELATED_STMT (stmt_info) == stmt);
+ save_relevant = STMT_VINFO_RELEVANT (stmt_info);
+ save_live_p = STMT_VINFO_LIVE_P (stmt_info);
+ stmt = pattern_stmt;
}
STMT_VINFO_LIVE_P (stmt_info) |= live_p;
@@ -572,8 +531,7 @@ process_use (gimple *stmt, tree use, loop_vec_info loop_vinfo, bool live_p,
}
}
- vect_mark_relevant (worklist, def_stmt, relevant, live_p,
- is_pattern_stmt_p (stmt_vinfo));
+ vect_mark_relevant (worklist, def_stmt, relevant, live_p);
return true;
}
@@ -630,7 +588,7 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo)
}
if (vect_stmt_relevant_p (phi, loop_vinfo, &relevant, &live_p))
- vect_mark_relevant (&worklist, phi, relevant, live_p, false);
+ vect_mark_relevant (&worklist, phi, relevant, live_p);
}
for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
{
@@ -642,7 +600,7 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo)
}
if (vect_stmt_relevant_p (stmt, loop_vinfo, &relevant, &live_p))
- vect_mark_relevant (&worklist, stmt, relevant, live_p, false);
+ vect_mark_relevant (&worklist, stmt, relevant, live_p);
}
}
@@ -1784,7 +1742,8 @@ vectorizable_mask_load_store (gimple *stmt, gimple_stmt_iterator *gsi,
if (!mask_vectype)
mask_vectype = get_mask_type_for_scalar_type (TREE_TYPE (vectype));
- if (!mask_vectype || !VECTOR_BOOLEAN_TYPE_P (mask_vectype))
+ if (!mask_vectype || !VECTOR_BOOLEAN_TYPE_P (mask_vectype)
+ || TYPE_VECTOR_SUBPARTS (mask_vectype) != TYPE_VECTOR_SUBPARTS (vectype))
return false;
if (is_store)
@@ -6395,6 +6354,19 @@ vectorizable_load (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
slp_perm = true;
group_size = GROUP_SIZE (vinfo_for_stmt (first_stmt));
+
+ /* ??? The following is overly pessimistic (as well as the loop
+ case above) in the case we can statically determine the excess
+ elements loaded are within the bounds of a decl that is accessed.
+ Likewise for BB vectorizations using masked loads is a possibility. */
+ if (bb_vinfo && slp_perm && group_size % nunits != 0)
+ {
+ dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+ "BB vectorization with gaps at the end of a load "
+ "is not supported\n");
+ return false;
+ }
+
if (!slp
&& !PURE_SLP_STMT (stmt_info)
&& !STMT_VINFO_STRIDED_P (stmt_info))
@@ -7818,8 +7790,8 @@ vectorizable_comparison (gimple *stmt, gimple_stmt_iterator *gsi,
/* Invariant comparison. */
if (!vectype)
{
- vectype = build_vector_type (TREE_TYPE (rhs1), nunits);
- if (tree_to_shwi (TYPE_SIZE_UNIT (vectype)) != current_vector_size)
+ vectype = get_vectype_for_scalar_type (TREE_TYPE (rhs1));
+ if (TYPE_VECTOR_SUBPARTS (vectype) != nunits)
return false;
}
else if (nunits != TYPE_VECTOR_SUBPARTS (vectype))
@@ -8968,7 +8940,12 @@ supportable_widening_operation (enum tree_code code, gimple *stmt,
if (insn_data[icode1].operand[0].mode == TYPE_MODE (wide_vectype)
&& insn_data[icode2].operand[0].mode == TYPE_MODE (wide_vectype))
- return true;
+ /* For scalar masks we may have different boolean
+ vector types having the same QImode. Thus we
+ add additional check for elements number. */
+ return (!VECTOR_BOOLEAN_TYPE_P (vectype)
+ || (TYPE_VECTOR_SUBPARTS (vectype) / 2
+ == TYPE_VECTOR_SUBPARTS (wide_vectype)));
/* Check if it's a multi-step conversion that can be done using intermediate
types. */
@@ -8987,9 +8964,19 @@ supportable_widening_operation (enum tree_code code, gimple *stmt,
for (i = 0; i < MAX_INTERM_CVT_STEPS; i++)
{
intermediate_mode = insn_data[icode1].operand[0].mode;
- intermediate_type
- = lang_hooks.types.type_for_mode (intermediate_mode,
- TYPE_UNSIGNED (prev_type));
+ if (VECTOR_BOOLEAN_TYPE_P (prev_type))
+ {
+ intermediate_type
+ = build_truth_vector_type (TYPE_VECTOR_SUBPARTS (prev_type) / 2,
+ current_vector_size);
+ if (intermediate_mode != TYPE_MODE (intermediate_type))
+ return false;
+ }
+ else
+ intermediate_type
+ = lang_hooks.types.type_for_mode (intermediate_mode,
+ TYPE_UNSIGNED (prev_type));
+
optab3 = optab_for_tree_code (c1, intermediate_type, optab_default);
optab4 = optab_for_tree_code (c2, intermediate_type, optab_default);
@@ -9009,7 +8996,9 @@ supportable_widening_operation (enum tree_code code, gimple *stmt,
if (insn_data[icode1].operand[0].mode == TYPE_MODE (wide_vectype)
&& insn_data[icode2].operand[0].mode == TYPE_MODE (wide_vectype))
- return true;
+ return (!VECTOR_BOOLEAN_TYPE_P (vectype)
+ || (TYPE_VECTOR_SUBPARTS (intermediate_type) / 2
+ == TYPE_VECTOR_SUBPARTS (wide_vectype)));
prev_type = intermediate_type;
prev_mode = intermediate_mode;
@@ -9052,7 +9041,7 @@ supportable_narrowing_operation (enum tree_code code,
tree vectype = vectype_in;
tree narrow_vectype = vectype_out;
enum tree_code c1;
- tree intermediate_type;
+ tree intermediate_type, prev_type;
machine_mode intermediate_mode, prev_mode;
int i;
bool uns;
@@ -9093,11 +9082,17 @@ supportable_narrowing_operation (enum tree_code code,
*code1 = c1;
if (insn_data[icode1].operand[0].mode == TYPE_MODE (narrow_vectype))
- return true;
+ /* For scalar masks we may have different boolean
+ vector types having the same QImode. Thus we
+ add additional check for elements number. */
+ return (!VECTOR_BOOLEAN_TYPE_P (vectype)
+ || (TYPE_VECTOR_SUBPARTS (vectype) * 2
+ == TYPE_VECTOR_SUBPARTS (narrow_vectype)));
/* Check if it's a multi-step conversion that can be done using intermediate
types. */
prev_mode = vec_mode;
+ prev_type = vectype;
if (code == FIX_TRUNC_EXPR)
uns = TYPE_UNSIGNED (vectype_out);
else
@@ -9132,8 +9127,17 @@ supportable_narrowing_operation (enum tree_code code,
for (i = 0; i < MAX_INTERM_CVT_STEPS; i++)
{
intermediate_mode = insn_data[icode1].operand[0].mode;
- intermediate_type
- = lang_hooks.types.type_for_mode (intermediate_mode, uns);
+ if (VECTOR_BOOLEAN_TYPE_P (prev_type))
+ {
+ intermediate_type
+ = build_truth_vector_type (TYPE_VECTOR_SUBPARTS (prev_type) * 2,
+ current_vector_size);
+ if (intermediate_mode != TYPE_MODE (intermediate_type))
+ return false;
+ }
+ else
+ intermediate_type
+ = lang_hooks.types.type_for_mode (intermediate_mode, uns);
interm_optab
= optab_for_tree_code (VEC_PACK_TRUNC_EXPR, intermediate_type,
optab_default);
@@ -9148,9 +9152,12 @@ supportable_narrowing_operation (enum tree_code code,
(*multi_step_cvt)++;
if (insn_data[icode1].operand[0].mode == TYPE_MODE (narrow_vectype))
- return true;
+ return (!VECTOR_BOOLEAN_TYPE_P (vectype)
+ || (TYPE_VECTOR_SUBPARTS (intermediate_type) * 2
+ == TYPE_VECTOR_SUBPARTS (narrow_vectype)));
prev_mode = intermediate_mode;
+ prev_type = intermediate_type;
optab1 = interm_optab;
}
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index 0ce7f1f..bbdf9ce 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -5310,6 +5310,27 @@ register_edge_assert_for_2 (tree name, edge e, gimple_stmt_iterator bsi,
if (is_gimple_assign (def_stmt))
rhs_code = gimple_assign_rhs_code (def_stmt);
+ /* In the case of NAME != CST1 where NAME = A +- CST2 we can
+ assert that A != CST1 -+ CST2. */
+ if ((comp_code == EQ_EXPR || comp_code == NE_EXPR)
+ && (rhs_code == PLUS_EXPR || rhs_code == MINUS_EXPR))
+ {
+ tree op0 = gimple_assign_rhs1 (def_stmt);
+ tree op1 = gimple_assign_rhs2 (def_stmt);
+ if (TREE_CODE (op0) == SSA_NAME
+ && TREE_CODE (op1) == INTEGER_CST
+ && live_on_edge (e, op0)
+ && !has_single_use (op0))
+ {
+ enum tree_code reverse_op = (rhs_code == PLUS_EXPR
+ ? MINUS_EXPR : PLUS_EXPR);
+ op1 = int_const_binop (reverse_op, val, op1);
+ if (TREE_OVERFLOW (op1))
+ op1 = drop_tree_overflow (op1);
+ register_new_assert_for (op0, op0, comp_code, op1, NULL, e, bsi);
+ }
+ }
+
/* Add asserts for NAME cmp CST and NAME being defined
as NAME = (int) NAME2. */
if (!TYPE_UNSIGNED (TREE_TYPE (val))
@@ -6450,7 +6471,6 @@ check_array_ref (location_t location, tree ref, bool ignore_off_by_one)
value_range *vr = NULL;
tree low_sub, up_sub;
tree low_bound, up_bound, up_bound_p1;
- tree base;
if (TREE_NO_WARNING (ref))
return;
@@ -6465,27 +6485,9 @@ check_array_ref (location_t location, tree ref, bool ignore_off_by_one)
/* Accesses to trailing arrays via pointers may access storage
beyond the types array bounds. */
- base = get_base_address (ref);
- if ((warn_array_bounds < 2)
- && base && TREE_CODE (base) == MEM_REF)
- {
- tree cref, next = NULL_TREE;
-
- if (TREE_CODE (TREE_OPERAND (ref, 0)) != COMPONENT_REF)
- return;
-
- cref = TREE_OPERAND (ref, 0);
- if (TREE_CODE (TREE_TYPE (TREE_OPERAND (cref, 0))) == RECORD_TYPE)
- for (next = DECL_CHAIN (TREE_OPERAND (cref, 1));
- next && TREE_CODE (next) != FIELD_DECL;
- next = DECL_CHAIN (next))
- ;
-
- /* If this is the last field in a struct type or a field in a
- union type do not warn. */
- if (!next)
- return;
- }
+ if (warn_array_bounds < 2
+ && array_at_struct_end_p (ref))
+ return;
low_bound = array_ref_low_bound (ref);
up_bound_p1 = int_const_binop (PLUS_EXPR, up_bound,
@@ -7180,7 +7182,7 @@ get_vr_for_comparison (int i)
static tree
compare_name_with_value (enum tree_code comp, tree var, tree val,
- bool *strict_overflow_p)
+ bool *strict_overflow_p, bool use_equiv_p)
{
bitmap_iterator bi;
unsigned i;
@@ -7215,6 +7217,11 @@ compare_name_with_value (enum tree_code comp, tree var, tree val,
EXECUTE_IF_SET_IN_BITMAP (e, 0, i, bi)
{
+ if (! use_equiv_p
+ && ! SSA_NAME_IS_DEFAULT_DEF (ssa_name (i))
+ && prop_simulate_again_p (SSA_NAME_DEF_STMT (ssa_name (i))))
+ continue;
+
equiv_vr = get_vr_for_comparison (i);
sop = false;
t = compare_range_with_value (comp, &equiv_vr, val, &sop);
@@ -7400,24 +7407,21 @@ vrp_evaluate_conditional_warnv_with_ops (enum tree_code code, tree op0,
&& !POINTER_TYPE_P (TREE_TYPE (op0)))
return NULL_TREE;
- if (use_equiv_p)
- {
- if (only_ranges
- && (ret = vrp_evaluate_conditional_warnv_with_ops_using_ranges
- (code, op0, op1, strict_overflow_p)))
- return ret;
- *only_ranges = false;
- if (TREE_CODE (op0) == SSA_NAME && TREE_CODE (op1) == SSA_NAME)
- return compare_names (code, op0, op1, strict_overflow_p);
- else if (TREE_CODE (op0) == SSA_NAME)
- return compare_name_with_value (code, op0, op1, strict_overflow_p);
- else if (TREE_CODE (op1) == SSA_NAME)
- return (compare_name_with_value
- (swap_tree_comparison (code), op1, op0, strict_overflow_p));
- }
- else
- return vrp_evaluate_conditional_warnv_with_ops_using_ranges (code, op0, op1,
- strict_overflow_p);
+ if ((ret = vrp_evaluate_conditional_warnv_with_ops_using_ranges
+ (code, op0, op1, strict_overflow_p)))
+ return ret;
+ if (only_ranges)
+ *only_ranges = false;
+ /* Do not use compare_names during propagation, it's quadratic. */
+ if (TREE_CODE (op0) == SSA_NAME && TREE_CODE (op1) == SSA_NAME
+ && use_equiv_p)
+ return compare_names (code, op0, op1, strict_overflow_p);
+ else if (TREE_CODE (op0) == SSA_NAME)
+ return compare_name_with_value (code, op0, op1,
+ strict_overflow_p, use_equiv_p);
+ else if (TREE_CODE (op1) == SSA_NAME)
+ return compare_name_with_value (swap_tree_comparison (code), op1, op0,
+ strict_overflow_p, use_equiv_p);
return NULL_TREE;
}
diff --git a/gcc/tree.c b/gcc/tree.c
index 1d14583..ed28429 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -1114,7 +1114,7 @@ free_node (tree node)
{
tree_code_counts[(int) TREE_CODE (node)]--;
tree_node_counts[(int) t_kind]--;
- tree_node_sizes[(int) t_kind] -= tree_code_size (TREE_CODE (node));
+ tree_node_sizes[(int) t_kind] -= tree_size (node);
}
if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR))
vec_free (CONSTRUCTOR_ELTS (node));
@@ -1749,7 +1749,7 @@ build_vector_from_ctor (tree type, vec<constructor_elt, va_gc> *v)
else
vec[pos++] = value;
}
- for (; idx < TYPE_VECTOR_SUBPARTS (type); ++idx)
+ while (pos < TYPE_VECTOR_SUBPARTS (type))
vec[pos++] = build_zero_cst (TREE_TYPE (type));
return build_vector (type, vec);
@@ -5329,6 +5329,7 @@ need_assembler_name_p (tree decl)
&& TREE_CODE (decl) == TYPE_DECL
&& DECL_NAME (decl)
&& decl == TYPE_NAME (TREE_TYPE (decl))
+ && TYPE_MAIN_VARIANT (TREE_TYPE (decl)) == TREE_TYPE (decl)
&& !TYPE_ARTIFICIAL (TREE_TYPE (decl))
&& (type_with_linkage_p (TREE_TYPE (decl))
|| TREE_CODE (TREE_TYPE (decl)) == INTEGER_TYPE)
@@ -5472,8 +5473,13 @@ free_lang_data_in_decl (tree decl)
|| (decl_function_context (decl) && !TREE_STATIC (decl)))
DECL_INITIAL (decl) = NULL_TREE;
}
- else if (TREE_CODE (decl) == TYPE_DECL
- || TREE_CODE (decl) == FIELD_DECL)
+ else if (TREE_CODE (decl) == TYPE_DECL)
+ {
+ DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
+ DECL_VISIBILITY_SPECIFIED (decl) = 0;
+ DECL_INITIAL (decl) = NULL_TREE;
+ }
+ else if (TREE_CODE (decl) == FIELD_DECL)
DECL_INITIAL (decl) = NULL_TREE;
else if (TREE_CODE (decl) == TRANSLATION_UNIT_DECL
&& DECL_INITIAL (decl)
@@ -12952,8 +12958,10 @@ array_at_struct_end_p (tree ref)
}
/* If the reference is based on a declared entity, the size of the array
- is constrained by its given domain. */
- if (DECL_P (ref))
+ is constrained by its given domain. (Do not trust commons PR/69368). */
+ if (DECL_P (ref)
+ && !(flag_unconstrained_commons
+ && TREE_CODE (ref) == VAR_DECL && DECL_COMMON (ref)))
return false;
return true;
diff --git a/gcc/tree.def b/gcc/tree.def
index 2355a7c..44130d7 100644
--- a/gcc/tree.def
+++ b/gcc/tree.def
@@ -870,10 +870,10 @@ DEFTREECODE (POSTINCREMENT_EXPR, "postincrement_expr", tcc_expression, 2)
/* Used to implement `va_arg'. */
DEFTREECODE (VA_ARG_EXPR, "va_arg_expr", tcc_expression, 1)
-/* Evaluate operand 1. If and only if an exception is thrown during
- the evaluation of operand 1, evaluate operand 2.
+/* Evaluate operand 0. If and only if an exception is thrown during
+ the evaluation of operand 0, evaluate operand 1.
- This differs from TRY_FINALLY_EXPR in that operand 2 is not evaluated
+ This differs from TRY_FINALLY_EXPR in that operand 1 is not evaluated
on a normal or jump exit, only on an exception. */
DEFTREECODE (TRY_CATCH_EXPR, "try_catch_expr", tcc_statement, 2)
diff --git a/gcc/tree.h b/gcc/tree.h
index 544a6a1..87e7563 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -1430,6 +1430,10 @@ extern void protected_set_expr_location (tree, location_t);
#define OMP_CLAUSE_PRIVATE_TASKLOOP_IV(NODE) \
TREE_PROTECTED (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_PRIVATE))
+/* True on a FIRSTPRIVATE clause if it has been added implicitly. */
+#define OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT(NODE) \
+ (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_FIRSTPRIVATE)->base.public_flag)
+
/* True on a LASTPRIVATE clause if a FIRSTPRIVATE clause for the same
decl is present in the chain. */
#define OMP_CLAUSE_LASTPRIVATE_FIRSTPRIVATE(NODE) \
@@ -1532,6 +1536,9 @@ extern void protected_set_expr_location (tree, location_t);
treatment if OMP_CLAUSE_SIZE is zero. */
#define OMP_CLAUSE_MAP_MAYBE_ZERO_LENGTH_ARRAY_SECTION(NODE) \
TREE_PROTECTED (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_MAP))
+/* Nonzero if this map clause is for an ACC parallel reduction variable. */
+#define OMP_CLAUSE_MAP_IN_REDUCTION(NODE) \
+ TREE_PRIVATE (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_MAP))
#define OMP_CLAUSE_PROC_BIND_KIND(NODE) \
(OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_PROC_BIND)->omp_clause.subcode.proc_bind_kind)
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 3a3573e..b0f2af0 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -4929,6 +4929,14 @@ output_constructor_regular_field (oc_local_state *local)
unsigned int align2;
+ /* Output any buffered-up bit-fields preceding this element. */
+ if (local->byte_buffer_in_use)
+ {
+ assemble_integer (GEN_INT (local->byte), 1, BITS_PER_UNIT, 1);
+ local->total_bytes++;
+ local->byte_buffer_in_use = false;
+ }
+
if (local->index != NULL_TREE)
{
/* Perform the index calculation in modulo arithmetic but
@@ -4945,22 +4953,19 @@ output_constructor_regular_field (oc_local_state *local)
else
fieldpos = 0;
- /* Output any buffered-up bit-fields preceding this element. */
- if (local->byte_buffer_in_use)
- {
- assemble_integer (GEN_INT (local->byte), 1, BITS_PER_UNIT, 1);
- local->total_bytes++;
- local->byte_buffer_in_use = false;
- }
-
/* Advance to offset of this element.
Note no alignment needed in an array, since that is guaranteed
if each element has the proper size. */
- if ((local->field != NULL_TREE || local->index != NULL_TREE)
- && fieldpos > local->total_bytes)
+ if (local->field != NULL_TREE || local->index != NULL_TREE)
{
- assemble_zeros (fieldpos - local->total_bytes);
- local->total_bytes = fieldpos;
+ if (fieldpos > local->total_bytes)
+ {
+ assemble_zeros (fieldpos - local->total_bytes);
+ local->total_bytes = fieldpos;
+ }
+ else
+ /* Must not go backwards. */
+ gcc_assert (fieldpos == local->total_bytes);
}
/* Find the alignment of this element. */
diff --git a/gnattools/ChangeLog b/gnattools/ChangeLog
index bdcd968..18aa702 100644
--- a/gnattools/ChangeLog
+++ b/gnattools/ChangeLog
@@ -1,3 +1,8 @@
+2016-04-04 Segher Boessenkool <segher@kernel.crashing.org>
+
+ PR bootstrap/70173
+ * Makefile.in (distclean): Also delete config.cache .
+
2015-12-06 Eric Botcazou <ebotcazou@adacore.com>
PR ada/50048
diff --git a/gnattools/Makefile.in b/gnattools/Makefile.in
index 0c889ee..f949ca9 100644
--- a/gnattools/Makefile.in
+++ b/gnattools/Makefile.in
@@ -309,7 +309,7 @@ mostlyclean:
clean:
distclean:
- $(RM) Makefile config.status config.log
+ $(RM) Makefile config.status config.log config.cache
maintainer-clean:
diff --git a/include/ChangeLog b/include/ChangeLog
index 51736f7..d09d548 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,23 @@
+2016-03-17 Thomas Schwinge <thomas@codesourcery.com>
+
+ * gomp-constants.h (enum gomp_map_kind): Rename
+ GOMP_MAP_FORCE_DEALLOC to GOMP_MAP_DELETE. Adjust all users.
+
+2016-03-03 Than McIntosh <thanm@google.com>
+
+ * plugin-api.h: Add new hooks to the plugin transfer vector to
+ to support querying section alignment and section size.
+ (ld_plugin_get_input_section_alignment): New hook.
+ (ld_plugin_get_input_section_size): New hook.
+ (ld_plugin_tag): Add LDPT_GET_INPUT_SECTION_ALIGNMENT
+ and LDPT_GET_INPUT_SECTION_SIZE.
+ (ld_plugin_tv): Add tv_get_input_section_alignment and
+ tv_get_input_section_size.
+
+2016-03-03 Evgenii Stepanov <eugenis@google.com>
+
+ * plugin-api.h (enum ld_plugin_tag): Add LDPT_GET_SYMBOLS_V3.
+
2016-01-19 Martin Jambor <mjambor@suse.cz>
* gomp-constants.h (GOMP_DEVICE_HSA): New macro.
diff --git a/include/gomp-constants.h b/include/gomp-constants.h
index a8e7723..e31c2e0 100644
--- a/include/gomp-constants.h
+++ b/include/gomp-constants.h
@@ -67,7 +67,7 @@ enum gomp_map_kind
/* Must already be present. */
GOMP_MAP_FORCE_PRESENT = (GOMP_MAP_FLAG_SPECIAL_0 | 2),
/* Deallocate a mapping, without copying from device. */
- GOMP_MAP_FORCE_DEALLOC = (GOMP_MAP_FLAG_SPECIAL_0 | 3),
+ GOMP_MAP_DELETE = (GOMP_MAP_FLAG_SPECIAL_0 | 3),
/* Is a device pointer. OMP_CLAUSE_SIZE for these is unused; is implicitly
POINTER_SIZE_UNITS. */
GOMP_MAP_FORCE_DEVICEPTR = (GOMP_MAP_FLAG_SPECIAL_1 | 0),
@@ -125,11 +125,9 @@ enum gomp_map_kind
GOMP_MAP_DELETE_ZERO_LEN_ARRAY_SECTION
= (GOMP_MAP_FLAG_SPECIAL_2
| GOMP_MAP_FLAG_SPECIAL | 3),
- /* OpenMP 4.5 alias for forced deallocation. */
- GOMP_MAP_DELETE = GOMP_MAP_FORCE_DEALLOC,
/* Decrement usage count and deallocate if zero. */
GOMP_MAP_RELEASE = (GOMP_MAP_FLAG_SPECIAL_2
- | GOMP_MAP_FORCE_DEALLOC),
+ | GOMP_MAP_DELETE),
/* Internal to GCC, not used in libgomp. */
/* Do not map, but pointer assign a pointer instead. */
diff --git a/include/plugin-api.h b/include/plugin-api.h
index 1bf1750..a794a37 100644
--- a/include/plugin-api.h
+++ b/include/plugin-api.h
@@ -1,6 +1,6 @@
/* plugin-api.h -- External linker plugin API. */
-/* Copyright (C) 2009-2015 Free Software Foundation, Inc.
+/* Copyright (C) 2009-2016 Free Software Foundation, Inc.
Written by Cary Coutant <ccoutant@google.com>.
This file is part of binutils.
@@ -345,6 +345,26 @@ enum ld_plugin_status
const struct ld_plugin_section * section_list,
unsigned int num_sections);
+/* The linker's interface for retrieving the section alignment requirement
+ of a specific section in an object. This interface should only be invoked in the
+ claim_file handler. This function sets *ADDRALIGN to the ELF sh_addralign
+ value of the input section. */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_get_input_section_alignment) (const struct ld_plugin_section section,
+ unsigned int *addralign);
+
+/* The linker's interface for retrieving the section size of a specific section
+ in an object. This interface should only be invoked in the claim_file handler.
+ This function sets *SECSIZE to the ELF sh_size
+ value of the input section. */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_get_input_section_size) (const struct ld_plugin_section section,
+ uint64_t *secsize);
+
enum ld_plugin_level
{
LDPL_INFO,
@@ -384,7 +404,10 @@ enum ld_plugin_tag
LDPT_ALLOW_SECTION_ORDERING = 24,
LDPT_GET_SYMBOLS_V2 = 25,
LDPT_ALLOW_UNIQUE_SEGMENT_FOR_SECTIONS = 26,
- LDPT_UNIQUE_SEGMENT_FOR_SECTIONS = 27
+ LDPT_UNIQUE_SEGMENT_FOR_SECTIONS = 27,
+ LDPT_GET_SYMBOLS_V3 = 28,
+ LDPT_GET_INPUT_SECTION_ALIGNMENT = 29,
+ LDPT_GET_INPUT_SECTION_SIZE = 30
};
/* The plugin transfer vector. */
@@ -416,6 +439,8 @@ struct ld_plugin_tv
ld_plugin_allow_section_ordering tv_allow_section_ordering;
ld_plugin_allow_unique_segment_for_sections tv_allow_unique_segment_for_sections;
ld_plugin_unique_segment_for_sections tv_unique_segment_for_sections;
+ ld_plugin_get_input_section_alignment tv_get_input_section_alignment;
+ ld_plugin_get_input_section_size tv_get_input_section_size;
} tv_u;
};
diff --git a/libbacktrace/ChangeLog b/libbacktrace/ChangeLog
index b38e2fe..eba3427 100644
--- a/libbacktrace/ChangeLog
+++ b/libbacktrace/ChangeLog
@@ -1,3 +1,10 @@
+2016-03-02 Maxim Ostapenko <m.ostapenko@partner.samsung.com>
+
+ * elf.c (backtrace_initialize): Properly initialize elf_fileline_fn to
+ avoid possible crash.
+ (elf_add): Don't set *fileline_fn to elf_nodebug value in case of
+ missing debug info anymore.
+
2016-02-06 John David Anglin <danglin@gcc.gnu.org>
* mmap.c (MAP_FAILED): Define if not defined.
diff --git a/libbacktrace/elf.c b/libbacktrace/elf.c
index 05cc5c0..f85ac65 100644
--- a/libbacktrace/elf.c
+++ b/libbacktrace/elf.c
@@ -791,7 +791,6 @@ elf_add (struct backtrace_state *state, int descriptor, uintptr_t base_address,
{
if (!backtrace_close (descriptor, error_callback, data))
goto fail;
- *fileline_fn = elf_nodebug;
return 1;
}
@@ -925,7 +924,7 @@ backtrace_initialize (struct backtrace_state *state, int descriptor,
int ret;
int found_sym;
int found_dwarf;
- fileline elf_fileline_fn;
+ fileline elf_fileline_fn = elf_nodebug;
struct phdr_data pd;
ret = elf_add (state, descriptor, 0, error_callback, data, &elf_fileline_fn,
diff --git a/libcc1/ChangeLog b/libcc1/ChangeLog
index 2aaceda..a65af09 100644
--- a/libcc1/ChangeLog
+++ b/libcc1/ChangeLog
@@ -1,3 +1,16 @@
+2016-04-11 Segher Boessenkool <segher@kernel.crashing.org>
+
+ PR bootstrap/70173
+ * Makefile.am (MOSTLYCLEANFILES): New, add compiler-name.h .
+ (compiler-name.h): Shorten recipe so that it fits the line.
+ * Makefile.in: Regenerate.
+
+2016-03-14 Andreas Schwab <schwab@suse.de>
+
+ * configure.ac (CONFIG_STATUS_DEPENDENCIES): Substitute.
+ * configure: Regenerate.
+ * Makefile.in: Regenerate.
+
2015-06-25 Richard Sandiford <richard.sandiford@arm.com>
* plugin.cc (decl_addr_hasher): Inherit from free_ptr_hash
diff --git a/libcc1/Makefile.am b/libcc1/Makefile.am
index 7a274b3..b40820b 100644
--- a/libcc1/Makefile.am
+++ b/libcc1/Makefile.am
@@ -44,11 +44,12 @@ cc1lib_LTLIBRARIES = libcc1.la
endif
BUILT_SOURCES = compiler-name.h
+MOSTLYCLEANFILES = compiler-name.h
# Put this in a header so we don't run sed for each compilation. This
# is also simpler to debug as one can easily see the constant.
compiler-name.h: Makefile
- echo "#define COMPILER_NAME \"`echo gcc | sed '$(transform)'`\"" > compiler-name.h
+ echo "#define COMPILER_NAME \"`echo gcc | sed '$(transform)'`\"" > $@
shared_source = callbacks.cc callbacks.hh connection.cc connection.hh \
diff --git a/libcc1/Makefile.in b/libcc1/Makefile.in
index 83a1ec8..79d39d3 100644
--- a/libcc1/Makefile.in
+++ b/libcc1/Makefile.in
@@ -151,6 +151,7 @@ AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CONFIG_STATUS_DEPENDENCIES = @CONFIG_STATUS_DEPENDENCIES@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
@@ -295,6 +296,7 @@ cc1libdir = $(libdir)/$(libsuffix)
@ENABLE_PLUGIN_TRUE@plugin_LTLIBRARIES = libcc1plugin.la
@ENABLE_PLUGIN_TRUE@cc1lib_LTLIBRARIES = libcc1.la
BUILT_SOURCES = compiler-name.h
+MOSTLYCLEANFILES = compiler-name.h
shared_source = callbacks.cc callbacks.hh connection.cc connection.hh \
marshall.cc marshall.hh rpc.hh status.hh
@@ -562,6 +564,7 @@ install-strip:
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
+ -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
clean-generic:
@@ -671,7 +674,7 @@ override LDFLAGS := $(filter-out -fsanitize=address,$(LDFLAGS))
# Put this in a header so we don't run sed for each compilation. This
# is also simpler to debug as one can easily see the constant.
compiler-name.h: Makefile
- echo "#define COMPILER_NAME \"`echo gcc | sed '$(transform)'`\"" > compiler-name.h
+ echo "#define COMPILER_NAME \"`echo gcc | sed '$(transform)'`\"" > $@
# 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/libcc1/configure b/libcc1/configure
index bbd3e72..bf112bb 100755
--- a/libcc1/configure
+++ b/libcc1/configure
@@ -608,6 +608,7 @@ libsuffix
GMPINC
WERROR
WARN_FLAGS
+CONFIG_STATUS_DEPENDENCIES
gcc_version
visibility
CXXCPP
@@ -8511,7 +8512,7 @@ _LT_EOF
if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
else
- export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
fi
aix_use_runtimelinking=no
@@ -10539,7 +10540,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10542 "configure"
+#line 10543 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -10645,7 +10646,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10648 "configure"
+#line 10649 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -13403,7 +13404,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
else
- export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
fi
;;
pw32*)
@@ -14306,6 +14307,14 @@ _ACEOF
gcc_version=`cat $srcdir/../gcc/BASE-VER`
+CONFIG_STATUS_DEPENDENCIES='$(top_srcdir)/../gcc/BASE-VER'
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
WARN_FLAGS=
save_CFLAGS="$CFLAGS"
@@ -14351,8 +14360,20 @@ $as_echo "$ac_res" >&6; }
fi
done
CFLAGS="$save_CFLAGS"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
WERROR=
# Check whether --enable-werror-always was given.
if test "${enable_werror_always+set}" = set; then :
@@ -14365,6 +14386,12 @@ if test $enable_werror_always = yes; then :
WERROR="$WERROR${WERROR:+ }-Werror"
fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
diff --git a/libcc1/configure.ac b/libcc1/configure.ac
index 6c97afd..e2e3fda 100644
--- a/libcc1/configure.ac
+++ b/libcc1/configure.ac
@@ -50,6 +50,7 @@ AC_CHECK_DECLS([basename])
gcc_version=`cat $srcdir/../gcc/BASE-VER`
AC_SUBST(gcc_version)
+AC_SUBST([CONFIG_STATUS_DEPENDENCIES], ['$(top_srcdir)/../gcc/BASE-VER'])
ACX_PROG_CC_WARNING_OPTS([-W -Wall], [WARN_FLAGS])
AC_SUBST(WARN_FLAGS)
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
index a5cef17..583f954 100644
--- a/libcpp/ChangeLog
+++ b/libcpp/ChangeLog
@@ -1,3 +1,98 @@
+2016-04-06 Richard Henderson <rth@redhat.com>
+
+ PR preprocessor/61817
+ PR preprocessor/69391
+ * internal.h (_cpp_builtin_macro_text): Update decl.
+ * macro.c (_cpp_builtin_macro_text): Accept location for __LINE__.
+ (builtin_macro): Accept a second location for __LINE__.
+ (enter_macro_context): Compute both virtual and real expansion
+ locations for the macro.
+
+2016-03-25 Bernd Schmidt <bschmidt@redhat.com>
+
+ PR lto/69650
+ * directives.c (do_linemarker): Test for file left but not entered
+ here.
+ * line-map.c (linemap_add): Not here.
+
+2016-03-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/70296
+ * include/cpplib.h (cpp_fun_like_macro_p): New prototype.
+ * macro.c (cpp_fun_like_macro_p): New function.
+
+2016-03-15 Richard Henderson <rth@redhat.com>
+
+ * line-map.c (new_linemap): Make alloc_size a size_t.
+
+2016-03-14 Jason Merrill <jason@redhat.com>
+
+ * expr.c (cpp_classify_number): Hex floats are new in C++1z.
+ * init.c (lang_defaults): Likewise.
+
+2016-03-09 David Malcolm <dmalcolm@redhat.com>
+
+ PR c/68473
+ PR c++/70105
+ * line-map.c (linemap_macro_map_loc_unwind_toward_spelling): Move
+ decl...
+ * include/line-map.h
+ (linemap_macro_map_loc_unwind_toward_spelling): ...here,
+ converting from static to extern.
+
+2016-03-09 David Malcolm <dmalcolm@redhat.com>
+
+ PR c/68473
+ PR c++/70105
+ * include/line-map.h (source_range::debug): Delete.
+ (struct location_range): Update comment. Replace
+ expanded_location fields "m_start", "m_finish", and "m_caret" with
+ a source_location field: "m_loc".
+ (class rich_location): Reword comment.
+ (rich_location::get_loc): Reimplement in terms of a new overloaded
+ variant which takes an unsigned int.
+ (rich_location::get_loc_addr): Delete.
+ (rich_location::add_range): Drop params "start" and "finish" in
+ favor of param "loc". Drop overloaded variants taking a
+ source_range or location_range *.
+ (rich_location::lazily_expand_location): Delete in favor of...
+ (rich_location::get_expanded_location): New decl.
+ (rich_location::m_loc): Delete field.
+ (rich_location::m_column_override): New field.
+ * line-map.c (rich_location::rich_location): Drop name of
+ line_maps * param. Update initializations for deletion of field
+ "m_loc" and addition of field "m_column_override". Reimplement
+ body as a call to add_range. Delete overloaded variant taking a
+ source_range.
+ (rich_location::get_loc): New function.
+ (rich_location::lazily_expand_location): Delete in favor of...
+ (rich_location::get_expanded_location): New function.
+ (rich_location::override_column): Reimplement.
+ (rich_location::add_range): Drop params "start" and "finish" in
+ favor of param "loc". Eliminate location expansion in favor of
+ simply storing loc. Drop overloaded variants taking a
+ source_range or location_range *.
+ (rich_location::set_range): Eliminate location expansion.
+
+2016-02-29 David Malcolm <dmalcolm@redhat.com>
+
+ PR preprocessor/69985
+ (linemap_position_for_loc_and_offset): Rename param from "offset"
+ to "column_offset". Right-shift the column_offset by m_range_bits
+ of the pertinent ordinary map whenever offsetting a
+ source_location. For clarity, offset the column by the column
+ offset, rather than the other way around.
+
+2016-02-23 David Malcolm <dmalcolm@redhat.com>
+
+ PR preprocessor/69126
+ PR preprocessor/69543
+ * line-map.c (linemap_compare_locations): At the function top,
+ replace inlined bodies of get_location_from_adhoc_loc with calls
+ to get_location_from_adhoc_loc. Add a pair of calls to
+ get_location_from_adhoc_loc at the bottom of the function, to
+ avoid meaningless comparisons of ad-hoc and non-ad-hoc locations.
+
2016-02-08 David Malcolm <dmalcolm@redhat.com>
PR preprocessor/69664
diff --git a/libcpp/directives.c b/libcpp/directives.c
index 63f54ef..6aa6bd1 100644
--- a/libcpp/directives.c
+++ b/libcpp/directives.c
@@ -1046,6 +1046,19 @@ do_linemarker (cpp_reader *pfile)
skip_rest_of_line (pfile);
+ if (reason == LC_LEAVE)
+ {
+ const line_map_ordinary *from;
+ if (MAIN_FILE_P (map)
+ || (new_file
+ && (from = INCLUDED_FROM (pfile->line_table, map)) != NULL
+ && filename_cmp (ORDINARY_MAP_FILE_NAME (from), new_file) != 0))
+ {
+ cpp_warning (pfile, CPP_W_NONE,
+ "file \"%s\" linemarker ignored due to incorrect nesting", new_file);
+ return;
+ }
+ }
/* Compensate for the increment in linemap_add that occurs in
_cpp_do_file_change. We're currently at the start of the line
*following* the #line directive. A separate source_location for this
diff --git a/libcpp/expr.c b/libcpp/expr.c
index 5353bde..5cdca6f 100644
--- a/libcpp/expr.c
+++ b/libcpp/expr.c
@@ -552,7 +552,7 @@ cpp_classify_number (cpp_reader *pfile, const cpp_token *token,
{
if (CPP_OPTION (pfile, cplusplus))
cpp_error_with_line (pfile, CPP_DL_PEDWARN, virtual_location, 0,
- "use of C++11 hexadecimal floating constant");
+ "use of C++1z hexadecimal floating constant");
else
cpp_error_with_line (pfile, CPP_DL_PEDWARN, virtual_location, 0,
"use of C99 hexadecimal floating constant");
diff --git a/libcpp/include/cpplib.h b/libcpp/include/cpplib.h
index 882f80c..35b0375 100644
--- a/libcpp/include/cpplib.h
+++ b/libcpp/include/cpplib.h
@@ -813,6 +813,7 @@ extern int cpp_avoid_paste (cpp_reader *, const cpp_token *,
extern const cpp_token *cpp_get_token (cpp_reader *);
extern const cpp_token *cpp_get_token_with_location (cpp_reader *,
source_location *);
+extern bool cpp_fun_like_macro_p (cpp_hashnode *);
extern const unsigned char *cpp_macro_definition (cpp_reader *,
cpp_hashnode *);
extern void _cpp_backup_tokens (cpp_reader *, unsigned int);
diff --git a/libcpp/include/line-map.h b/libcpp/include/line-map.h
index 6e858a6..292abce 100644
--- a/libcpp/include/line-map.h
+++ b/libcpp/include/line-map.h
@@ -273,20 +273,6 @@ struct GTY(()) source_range
source_location m_start;
source_location m_finish;
- /* Display this source_range instance, with MSG as a descriptive
- comment. This issues a "note" diagnostic at the range, using
- gcc's diagnostic machinery.
-
- This is declared here, but is implemented within gcc/diagnostic.c,
- since it makes use of gcc's diagnostic-printing machinery. This
- is a slight layering violation, but this is sufficiently useful
- for debugging that it's worth it.
-
- This declaration would have a DEBUG_FUNCTION annotation, but that
- is implemented in gcc/system.h and thus is not available here in
- libcpp. */
- void debug (const char *msg) const;
-
/* We avoid using constructors, since various structs that
don't yet have constructors will embed instances of
source_range. */
@@ -1080,6 +1066,14 @@ int linemap_location_in_system_header_p (struct line_maps *,
bool linemap_location_from_macro_expansion_p (const struct line_maps *,
source_location);
+/* With the precondition that LOCATION is the locus of a token that is
+ an argument of a function-like macro MACRO_MAP and appears in the
+ expansion of MACRO_MAP, return the locus of that argument in the
+ context of the caller of MACRO_MAP. */
+
+extern source_location linemap_macro_map_loc_unwind_toward_spelling
+ (line_maps *set, const line_map_macro *macro_map, source_location location);
+
/* source_location values from 0 to RESERVED_LOCATION_COUNT-1 will
be reserved for libcpp user as special values, no token from libcpp
will contain any of those locations. */
@@ -1249,13 +1243,12 @@ typedef struct
i.e. "3:1:" in GCC corresponds to "(3, 0)" in Emacs. */
-/* Ranges are closed
- m_start is the first location within the range, and
- m_finish is the last location within the range. */
+/* A location within a rich_location: a caret&range, with
+ the caret potentially flagged for display. */
+
struct location_range
{
- expanded_location m_start;
- expanded_location m_finish;
+ source_location m_loc;
/* Should a caret be drawn for this range? Typically this is
true for the 0th range, and false for subsequent ranges,
@@ -1267,7 +1260,6 @@ struct location_range
where "1" and "2" are notionally carets. */
bool m_show_caret_p;
- expanded_location m_caret;
};
class fixit_hint;
@@ -1276,9 +1268,10 @@ class fixit_hint;
class fixit_replace;
/* A "rich" source code location, for use when printing diagnostics.
- A rich_location has one or more ranges, each optionally with
- a caret. Typically the zeroth range has a caret; other ranges
- sometimes have carets.
+ A rich_location has one or more carets&ranges, where the carets
+ are optional. These are referred to as "ranges" from here.
+ Typically the zeroth range has a caret; other ranges sometimes
+ have carets.
The "primary" location of a rich_location is the caret of range 0,
used for determining the line/column when printing diagnostic
@@ -1361,19 +1354,11 @@ class rich_location
~rich_location ();
/* Accessors. */
- source_location get_loc () const { return m_loc; }
-
- source_location *get_loc_addr () { return &m_loc; }
+ source_location get_loc () const { return get_loc (0); }
+ source_location get_loc (unsigned int idx) const;
void
- add_range (source_location start, source_location finish,
- bool show_caret_p);
-
- void
- add_range (source_range src_range, bool show_caret_p);
-
- void
- add_range (location_range *src_range);
+ add_range (source_location loc, bool show_caret_p);
void
set_range (line_maps *set, unsigned int idx, source_location loc,
@@ -1387,7 +1372,7 @@ class rich_location
return &m_ranges[idx];
}
- expanded_location lazily_expand_location ();
+ expanded_location get_expanded_location (unsigned int idx);
void
override_column (int column);
@@ -1412,11 +1397,11 @@ public:
static const int MAX_FIXIT_HINTS = 2;
protected:
- source_location m_loc;
-
unsigned int m_num_ranges;
location_range m_ranges[MAX_RANGES];
+ int m_column_override;
+
bool m_have_expanded_location;
expanded_location m_expanded_location;
diff --git a/libcpp/init.c b/libcpp/init.c
index 6bc4296..4343075 100644
--- a/libcpp/init.c
+++ b/libcpp/init.c
@@ -105,9 +105,9 @@ static const struct lang_flags lang_defaults[] =
/* GNUCXX */ { 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },
/* CXX98 */ { 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0 },
/* GNUCXX11 */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0 },
- /* CXX11 */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0 },
+ /* CXX11 */ { 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0 },
/* GNUCXX14 */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0 },
- /* CXX14 */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
+ /* CXX14 */ { 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
/* GNUCXX1Z */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1 },
/* CXX1Z */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 },
/* ASM */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
diff --git a/libcpp/internal.h b/libcpp/internal.h
index bafd480..9ce8707 100644
--- a/libcpp/internal.h
+++ b/libcpp/internal.h
@@ -626,7 +626,8 @@ extern bool _cpp_save_parameter (cpp_reader *, cpp_macro *, cpp_hashnode *,
extern bool _cpp_arguments_ok (cpp_reader *, cpp_macro *, const cpp_hashnode *,
unsigned int);
extern const unsigned char *_cpp_builtin_macro_text (cpp_reader *,
- cpp_hashnode *);
+ cpp_hashnode *,
+ source_location = 0);
extern int _cpp_warn_if_unused_macro (cpp_reader *, cpp_hashnode *, void *);
extern void _cpp_push_token_context (cpp_reader *, cpp_hashnode *,
const cpp_token *, unsigned int);
diff --git a/libcpp/line-map.c b/libcpp/line-map.c
index e9175df..2e61895 100644
--- a/libcpp/line-map.c
+++ b/libcpp/line-map.c
@@ -54,8 +54,6 @@ static const line_map_macro* linemap_macro_map_lookup (struct line_maps *,
source_location);
static source_location linemap_macro_map_loc_to_def_point
(const line_map_macro *, source_location);
-static source_location linemap_macro_map_loc_unwind_toward_spelling
-(line_maps *set, const line_map_macro *, source_location);
static source_location linemap_macro_map_loc_to_exp_point
(const line_map_macro *, source_location);
static source_location linemap_macro_loc_to_spelling_point
@@ -378,7 +376,7 @@ new_linemap (struct line_maps *set,
if (LINEMAPS_USED (set, macro_map_p) == LINEMAPS_ALLOCATED (set, macro_map_p))
{
/* We ran out of allocated line maps. Let's allocate more. */
- unsigned alloc_size;
+ size_t alloc_size;
/* Cast away extern "C" from the type of xrealloc. */
line_map_realloc reallocator = (set->reallocator
@@ -514,43 +512,23 @@ linemap_add (struct line_maps *set, enum lc_reason reason,
"included", this variable points the map in use right before the
#include "included", inside the same "includer" file. */
line_map_ordinary *from;
- bool error;
- if (MAIN_FILE_P (map - 1))
- {
- /* So this _should_ mean we are leaving the main file --
- effectively ending the compilation unit. But to_file not
- being NULL means the caller thinks we are leaving to
- another file. This is an erroneous behaviour but we'll
- try to recover from it. Let's pretend we are not leaving
- the main file. */
- error = true;
- reason = LC_RENAME;
- from = map - 1;
- }
- else
- {
- /* (MAP - 1) points to the map we are leaving. The
- map from which (MAP - 1) got included should be the map
- that comes right before MAP in the same file. */
- from = INCLUDED_FROM (set, map - 1);
- error = to_file && filename_cmp (ORDINARY_MAP_FILE_NAME (from),
- to_file);
- }
-
- /* Depending upon whether we are handling preprocessed input or
- not, this can be a user error or an ICE. */
- if (error)
- fprintf (stderr, "line-map.c: file \"%s\" left but not entered\n",
- to_file);
+ linemap_assert (!MAIN_FILE_P (map - 1));
+ /* (MAP - 1) points to the map we are leaving. The
+ map from which (MAP - 1) got included should be the map
+ that comes right before MAP in the same file. */
+ from = INCLUDED_FROM (set, map - 1);
/* A TO_FILE of NULL is special - we use the natural values. */
- if (error || to_file == NULL)
+ if (to_file == NULL)
{
to_file = ORDINARY_MAP_FILE_NAME (from);
to_line = SOURCE_LINE (from, from[1].start_location);
sysp = ORDINARY_MAP_IN_SYSTEM_HEADER_P (from);
}
+ else
+ linemap_assert (filename_cmp (ORDINARY_MAP_FILE_NAME (from),
+ to_file) == 0);
}
map->sysp = sysp;
@@ -864,13 +842,13 @@ linemap_position_for_line_and_column (line_maps *set,
}
/* Encode and return a source_location starting from location LOC and
- shifting it by OFFSET columns. This function does not support
+ shifting it by COLUMN_OFFSET columns. This function does not support
virtual locations. */
source_location
linemap_position_for_loc_and_offset (struct line_maps *set,
source_location loc,
- unsigned int offset)
+ unsigned int column_offset)
{
const line_map_ordinary * map = NULL;
@@ -882,7 +860,7 @@ linemap_position_for_loc_and_offset (struct line_maps *set,
(!linemap_location_from_macro_expansion_p (set, loc)))
return loc;
- if (offset == 0
+ if (column_offset == 0
/* Adding an offset to a reserved location (like
UNKNOWN_LOCATION for the C/C++ FEs) does not really make
sense. So let's leave the location intact in that case. */
@@ -894,7 +872,7 @@ linemap_position_for_loc_and_offset (struct line_maps *set,
/* The new location (loc + offset) should be higher than the first
location encoded by MAP. This can fail if the line information
is messed up because of line directives (see PR66415). */
- if (MAP_START_LOCATION (map) >= loc + offset)
+ if (MAP_START_LOCATION (map) >= loc + (column_offset << map->m_range_bits))
return loc;
linenum_type line = SOURCE_LINE (map, loc);
@@ -905,7 +883,8 @@ linemap_position_for_loc_and_offset (struct line_maps *set,
the next line map of the set. Otherwise, we try to encode the
location in the next map. */
while (map != LINEMAPS_LAST_ORDINARY_MAP (set)
- && loc + offset >= MAP_START_LOCATION (&map[1]))
+ && (loc + (column_offset << map->m_range_bits)
+ >= MAP_START_LOCATION (&map[1])))
{
map = &map[1];
/* If the next map starts in a higher line, we cannot encode the
@@ -914,12 +893,12 @@ linemap_position_for_loc_and_offset (struct line_maps *set,
return loc;
}
- offset += column;
- if (linemap_assert_fails (offset < (1u << map->m_column_and_range_bits)))
+ column += column_offset;
+ if (linemap_assert_fails (column < (1u << map->m_column_and_range_bits)))
return loc;
source_location r =
- linemap_position_for_line_and_column (set, map, line, offset);
+ linemap_position_for_line_and_column (set, map, line, column);
if (linemap_assert_fails (r <= set->highest_location)
|| linemap_assert_fails (map == linemap_lookup (set, r)))
return loc;
@@ -1328,9 +1307,9 @@ linemap_compare_locations (struct line_maps *set,
source_location l0 = pre, l1 = post;
if (IS_ADHOC_LOC (l0))
- l0 = set->location_adhoc_data_map.data[l0 & MAX_SOURCE_LOCATION].locus;
+ l0 = get_location_from_adhoc_loc (set, l0);
if (IS_ADHOC_LOC (l1))
- l1 = set->location_adhoc_data_map.data[l1 & MAX_SOURCE_LOCATION].locus;
+ l1 = get_location_from_adhoc_loc (set, l1);
if (l0 == l1)
return 0;
@@ -1365,6 +1344,11 @@ linemap_compare_locations (struct line_maps *set,
return i1 - i0;
}
+ if (IS_ADHOC_LOC (l0))
+ l0 = get_location_from_adhoc_loc (set, l0);
+ if (IS_ADHOC_LOC (l1))
+ l1 = get_location_from_adhoc_loc (set, l1);
+
return l1 - l0;
}
@@ -1987,29 +1971,13 @@ source_range::intersects_line_p (const char *file, int line) const
/* Construct a rich_location with location LOC as its initial range. */
-rich_location::rich_location (line_maps *set, source_location loc) :
- m_loc (loc),
+rich_location::rich_location (line_maps */*set*/, source_location loc) :
m_num_ranges (0),
+ m_column_override (0),
m_have_expanded_location (false),
m_num_fixit_hints (0)
{
- /* Set up the 0th range, extracting any range from LOC. */
- source_range src_range = get_range_from_loc (set, loc);
- add_range (src_range, true);
- m_ranges[0].m_caret = lazily_expand_location ();
-}
-
-/* Construct a rich_location with source_range SRC_RANGE as its
- initial range. */
-
-rich_location::rich_location (source_range src_range)
-: m_loc (src_range.m_start),
- m_num_ranges (0),
- m_have_expanded_location (false),
- m_num_fixit_hints (0)
-{
- /* Set up the 0th range: */
- add_range (src_range, true);
+ add_range (loc, true);
}
/* The destructor for class rich_location. */
@@ -2020,73 +1988,62 @@ rich_location::~rich_location ()
delete m_fixit_hints[i];
}
+/* Get location IDX within this rich_location. */
+
+source_location
+rich_location::get_loc (unsigned int idx) const
+{
+ linemap_assert (idx < m_num_ranges);
+ return m_ranges[idx].m_loc;
+}
+
+/* Expand location IDX within this rich_location. */
/* Get an expanded_location for this rich_location's primary
location. */
expanded_location
-rich_location::lazily_expand_location ()
+rich_location::get_expanded_location (unsigned int idx)
{
- if (!m_have_expanded_location)
- {
- m_expanded_location
- = linemap_client_expand_location_to_spelling_point (m_loc);
- m_have_expanded_location = true;
- }
-
- return m_expanded_location;
+ if (idx == 0)
+ {
+ /* Cache the expansion of the primary location. */
+ if (!m_have_expanded_location)
+ {
+ m_expanded_location
+ = linemap_client_expand_location_to_spelling_point (get_loc (0));
+ if (m_column_override)
+ m_expanded_location.column = m_column_override;
+ m_have_expanded_location = true;
+ }
+
+ return m_expanded_location;
+ }
+ else
+ return linemap_client_expand_location_to_spelling_point (get_loc (idx));
}
-/* Set the column of the primary location. This can only be called for
- rich_location instances for which the primary location has
- caret==start==finish. */
+/* Set the column of the primary location, with 0 meaning
+ "don't override it". */
void
rich_location::override_column (int column)
{
- lazily_expand_location ();
- gcc_assert (m_ranges[0].m_show_caret_p);
- gcc_assert (m_ranges[0].m_caret.column == m_expanded_location.column);
- gcc_assert (m_ranges[0].m_start.column == m_expanded_location.column);
- gcc_assert (m_ranges[0].m_finish.column == m_expanded_location.column);
- m_expanded_location.column = column;
- m_ranges[0].m_caret.column = column;
- m_ranges[0].m_start.column = column;
- m_ranges[0].m_finish.column = column;
+ m_column_override = column;
+ m_have_expanded_location = false;
}
/* Add the given range. */
void
-rich_location::add_range (source_location start, source_location finish,
- bool show_caret_p)
+rich_location::add_range (source_location loc, bool show_caret_p)
{
linemap_assert (m_num_ranges < MAX_RANGES);
location_range *range = &m_ranges[m_num_ranges++];
- range->m_start = linemap_client_expand_location_to_spelling_point (start);
- range->m_finish = linemap_client_expand_location_to_spelling_point (finish);
- range->m_caret = range->m_start;
+ range->m_loc = loc;
range->m_show_caret_p = show_caret_p;
}
-/* Add the given range. */
-
-void
-rich_location::add_range (source_range src_range, bool show_caret_p)
-{
- linemap_assert (m_num_ranges < MAX_RANGES);
-
- add_range (src_range.m_start, src_range.m_finish, show_caret_p);
-}
-
-void
-rich_location::add_range (location_range *src_range)
-{
- linemap_assert (m_num_ranges < MAX_RANGES);
-
- m_ranges[m_num_ranges++] = *src_range;
-}
-
/* Add or overwrite the location given by IDX, setting its location to LOC,
and setting its "should my caret be printed" flag to SHOW_CARET_P.
@@ -2101,7 +2058,7 @@ rich_location::add_range (location_range *src_range)
- the "%C" and "%L" format codes in the Fortran frontend. */
void
-rich_location::set_range (line_maps *set, unsigned int idx,
+rich_location::set_range (line_maps * /*set*/, unsigned int idx,
source_location loc, bool show_caret_p)
{
linemap_assert (idx < MAX_RANGES);
@@ -2110,28 +2067,17 @@ rich_location::set_range (line_maps *set, unsigned int idx,
on the end of the array. */
linemap_assert (idx <= m_num_ranges);
- source_range src_range = get_range_from_loc (set, loc);
-
location_range *locrange = &m_ranges[idx];
- locrange->m_start
- = linemap_client_expand_location_to_spelling_point (src_range.m_start);
- locrange->m_finish
- = linemap_client_expand_location_to_spelling_point (src_range.m_finish);
-
+ locrange->m_loc = loc;
locrange->m_show_caret_p = show_caret_p;
- locrange->m_caret
- = linemap_client_expand_location_to_spelling_point (loc);
/* Are we adding a range onto the end? */
if (idx == m_num_ranges)
m_num_ranges = idx + 1;
if (idx == 0)
- {
- m_loc = loc;
- /* Mark any cached value here as dirty. */
- m_have_expanded_location = false;
- }
+ /* Mark any cached value here as dirty. */
+ m_have_expanded_location = false;
}
/* Add a fixit-hint, suggesting insertion of NEW_CONTENT
diff --git a/libcpp/macro.c b/libcpp/macro.c
index cfb09ce..c251553 100644
--- a/libcpp/macro.c
+++ b/libcpp/macro.c
@@ -93,7 +93,8 @@ struct macro_arg_saved_data {
static int enter_macro_context (cpp_reader *, cpp_hashnode *,
const cpp_token *, source_location);
-static int builtin_macro (cpp_reader *, cpp_hashnode *, source_location);
+static int builtin_macro (cpp_reader *, cpp_hashnode *,
+ source_location, source_location);
static void push_ptoken_context (cpp_reader *, cpp_hashnode *, _cpp_buff *,
const cpp_token **, unsigned int);
static void push_extended_tokens_context (cpp_reader *, cpp_hashnode *,
@@ -229,7 +230,8 @@ static const char * const monthnames[] =
/* Helper function for builtin_macro. Returns the text generated by
a builtin macro. */
const uchar *
-_cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
+_cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node,
+ source_location loc)
{
const uchar *result = NULL;
linenum_type number = 1;
@@ -319,11 +321,14 @@ _cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
case BT_SPECLINE:
/* If __LINE__ is embedded in a macro, it must expand to the
line of the macro's invocation, not its definition.
- Otherwise things like assert() will not work properly. */
- number = linemap_get_expansion_line (pfile->line_table,
- CPP_OPTION (pfile, traditional)
- ? pfile->line_table->highest_line
- : pfile->cur_token[-1].src_loc);
+ Otherwise things like assert() will not work properly.
+ See WG14 N1911, WG21 N4220 sec 6.5, and PR 61861. */
+ if (CPP_OPTION (pfile, traditional))
+ loc = pfile->line_table->highest_line;
+ else
+ loc = linemap_resolve_location (pfile->line_table, loc,
+ LRK_MACRO_EXPANSION_POINT, NULL);
+ number = linemap_get_expansion_line (pfile->line_table, loc);
break;
/* __STDC__ has the value 1 under normal circumstances.
@@ -417,7 +422,8 @@ _cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
return the token to the caller. LOC is the location of the expansion
point of the macro. */
static int
-builtin_macro (cpp_reader *pfile, cpp_hashnode *node, source_location loc)
+builtin_macro (cpp_reader *pfile, cpp_hashnode *node,
+ source_location loc, source_location expand_loc)
{
const uchar *buf;
size_t len;
@@ -433,7 +439,7 @@ builtin_macro (cpp_reader *pfile, cpp_hashnode *node, source_location loc)
return _cpp_do__Pragma (pfile, loc);
}
- buf = _cpp_builtin_macro_text (pfile, node);
+ buf = _cpp_builtin_macro_text (pfile, node, expand_loc);
len = ustrlen (buf);
nbuf = (char *) alloca (len + 1);
memcpy (nbuf, buf, len);
@@ -456,8 +462,7 @@ builtin_macro (cpp_reader *pfile, cpp_hashnode *node, source_location loc)
source_location *virt_locs = NULL;
_cpp_buff *token_buf = tokens_buff_new (pfile, 1, &virt_locs);
const line_map_macro * map =
- linemap_enter_macro (pfile->line_table, node,
- token->src_loc, 1);
+ linemap_enter_macro (pfile->line_table, node, loc, 1);
tokens_buff_add_token (token_buf, virt_locs, token,
pfile->line_table->builtin_location,
pfile->line_table->builtin_location,
@@ -1231,22 +1236,29 @@ enter_macro_context (cpp_reader *pfile, cpp_hashnode *node,
pfile->about_to_expand_macro_p = false;
/* Handle built-in macros and the _Pragma operator. */
{
- source_location loc;
+ source_location loc, expand_loc;
+
if (/* The top-level macro invocation that triggered the expansion
we are looking at is with a standard macro ...*/
!(pfile->top_most_macro_node->flags & NODE_BUILTIN)
/* ... and it's a function-like macro invocation. */
&& pfile->top_most_macro_node->value.macro->fun_like)
- /* Then the location of the end of the macro invocation is the
- location of the closing parenthesis. */
- loc = pfile->cur_token[-1].src_loc;
+ {
+ /* Then the location of the end of the macro invocation is the
+ location of the closing parenthesis. */
+ loc = pfile->cur_token[-1].src_loc;
+ expand_loc = loc;
+ }
else
- /* Otherwise, the location of the end of the macro invocation is
- the location of the expansion point of that top-level macro
- invocation. */
- loc = location;
+ {
+ /* Otherwise, the location of the end of the macro invocation is
+ the location of the expansion point of that top-level macro
+ invocation. */
+ loc = location;
+ expand_loc = pfile->invocation_location;
+ }
- return builtin_macro (pfile, node, loc);
+ return builtin_macro (pfile, node, loc, expand_loc);
}
}
@@ -3301,6 +3313,15 @@ check_trad_stringification (cpp_reader *pfile, const cpp_macro *macro,
}
}
+/* Returns true of NODE is a function-like macro. */
+bool
+cpp_fun_like_macro_p (cpp_hashnode *node)
+{
+ return (node->type == NT_MACRO
+ && (node->flags & (NODE_BUILTIN | NODE_MACRO_ARG)) == 0
+ && node->value.macro->fun_like);
+}
+
/* Returns the name, arguments and expansion of a macro, in a format
suitable to be read back in again, and therefore also for DWARF 2
debugging info. e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
diff --git a/libcpp/po/ChangeLog b/libcpp/po/ChangeLog
index 97a5570..4343e49 100644
--- a/libcpp/po/ChangeLog
+++ b/libcpp/po/ChangeLog
@@ -1,3 +1,19 @@
+2016-04-08 Joseph Myers <joseph@codesourcery.com>
+
+ * cpplib.pot: Regenerate.
+
+2016-03-30 Joseph Myers <joseph@codesourcery.com>
+
+ * da.po: Update.
+
+2016-03-17 Joseph Myers <joseph@codesourcery.com>
+
+ * fr.po: Update.
+
+2016-03-05 Joseph Myers <joseph@codesourcery.com>
+
+ * sr.po: Update.
+
2016-02-12 Joseph Myers <joseph@codesourcery.com>
* eo.po: Update.
diff --git a/libcpp/po/cpplib.pot b/libcpp/po/cpplib.pot
index ebf8f5a..56b4b3b 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: http://gcc.gnu.org/bugs.html\n"
-"POT-Creation-Date: 2016-01-31 15:50+0000\n"
+"POT-Creation-Date: 2016-04-08 20:55+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"
@@ -89,7 +89,7 @@ msgid "universal character %.*s is not valid at the start of an identifier"
msgstr ""
#: charset.c:1110
-#: charset.c:1684
+#: charset.c:1691
msgid "converting UCN to source character set"
msgstr ""
@@ -149,7 +149,7 @@ msgstr ""
msgid "empty character constant"
msgstr ""
-#: charset.c:1731
+#: charset.c:1738
#, c-format
msgid "failure to convert %s to %s"
msgstr ""
@@ -277,143 +277,148 @@ msgstr ""
msgid "\"%s\" after # is not a positive integer"
msgstr ""
-#: directives.c:1103
-#: directives.c:1105
-#: directives.c:1107
-#: directives.c:1693
+#: directives.c:1058
+#, c-format
+msgid "file \"%s\" linemarker ignored due to incorrect nesting"
+msgstr ""
+
+#: directives.c:1116
+#: directives.c:1118
+#: directives.c:1120
+#: directives.c:1706
#, c-format
msgid "%s"
msgstr ""
-#: directives.c:1131
+#: directives.c:1144
#, c-format
msgid "invalid #%s directive"
msgstr ""
-#: directives.c:1194
+#: directives.c:1207
#, c-format
msgid "registering pragmas in namespace \"%s\" with mismatched name expansion"
msgstr ""
-#: directives.c:1203
+#: directives.c:1216
#, c-format
msgid "registering pragma \"%s\" with name expansion and no namespace"
msgstr ""
-#: directives.c:1221
+#: directives.c:1234
#, c-format
msgid "registering \"%s\" as both a pragma and a pragma namespace"
msgstr ""
-#: directives.c:1224
+#: directives.c:1237
#, c-format
msgid "#pragma %s %s is already registered"
msgstr ""
-#: directives.c:1227
+#: directives.c:1240
#, c-format
msgid "#pragma %s is already registered"
msgstr ""
-#: directives.c:1257
+#: directives.c:1270
msgid "registering pragma with NULL handler"
msgstr ""
-#: directives.c:1474
+#: directives.c:1487
msgid "#pragma once in main file"
msgstr ""
-#: directives.c:1497
+#: directives.c:1510
msgid "invalid #pragma push_macro directive"
msgstr ""
-#: directives.c:1552
+#: directives.c:1565
msgid "invalid #pragma pop_macro directive"
msgstr ""
-#: directives.c:1607
+#: directives.c:1620
msgid "invalid #pragma GCC poison directive"
msgstr ""
-#: directives.c:1616
+#: directives.c:1629
#, c-format
msgid "poisoning existing macro \"%s\""
msgstr ""
-#: directives.c:1635
+#: directives.c:1648
msgid "#pragma system_header ignored outside include file"
msgstr ""
-#: directives.c:1660
+#: directives.c:1673
#, c-format
msgid "cannot find source file %s"
msgstr ""
-#: directives.c:1664
+#: directives.c:1677
#, c-format
msgid "current file is older than %s"
msgstr ""
-#: directives.c:1688
+#: directives.c:1701
#, c-format
msgid "invalid \"#pragma GCC %s\" directive"
msgstr ""
-#: directives.c:1889
+#: directives.c:1902
msgid "_Pragma takes a parenthesized string literal"
msgstr ""
-#: directives.c:2010
+#: directives.c:2023
msgid "#else without #if"
msgstr ""
-#: directives.c:2015
+#: directives.c:2028
msgid "#else after #else"
msgstr ""
-#: directives.c:2017
-#: directives.c:2050
+#: directives.c:2030
+#: directives.c:2063
msgid "the conditional began here"
msgstr ""
-#: directives.c:2043
+#: directives.c:2056
msgid "#elif without #if"
msgstr ""
-#: directives.c:2048
+#: directives.c:2061
msgid "#elif after #else"
msgstr ""
-#: directives.c:2079
+#: directives.c:2092
msgid "#endif without #if"
msgstr ""
-#: directives.c:2159
+#: directives.c:2172
msgid "missing '(' after predicate"
msgstr ""
-#: directives.c:2174
+#: directives.c:2187
msgid "missing ')' to complete answer"
msgstr ""
-#: directives.c:2194
+#: directives.c:2207
msgid "predicate's answer is empty"
msgstr ""
-#: directives.c:2221
+#: directives.c:2234
msgid "assertion without predicate"
msgstr ""
-#: directives.c:2224
+#: directives.c:2237
msgid "predicate must be an identifier"
msgstr ""
-#: directives.c:2310
+#: directives.c:2323
#, c-format
msgid "\"%s\" re-asserted"
msgstr ""
-#: directives.c:2602
+#: directives.c:2615
#, c-format
msgid "unterminated #%s"
msgstr ""
@@ -424,13 +429,13 @@ msgstr ""
msgid "unterminated comment"
msgstr ""
-#: errors.c:233
-#: errors.c:246
+#: errors.c:234
+#: errors.c:247
#, c-format
msgid "%s: %s"
msgstr ""
-#: errors.c:244
+#: errors.c:245
msgid "stdout"
msgstr ""
@@ -444,7 +449,7 @@ msgid "invalid prefix \"0b\" for floating constant"
msgstr ""
#: expr.c:555
-msgid "use of C++11 hexadecimal floating constant"
+msgid "use of C++1z hexadecimal floating constant"
msgstr ""
#: expr.c:558
@@ -805,163 +810,163 @@ msgstr ""
msgid "unspellable token %s"
msgstr ""
-#: macro.c:202
+#: macro.c:203
#, c-format
msgid "macro \"%s\" is not used"
msgstr ""
-#: macro.c:240
-#: macro.c:472
+#: macro.c:242
+#: macro.c:477
#, c-format
msgid "invalid built-in macro \"%s\""
msgstr ""
-#: macro.c:247
-#: macro.c:344
+#: macro.c:249
+#: macro.c:349
#, c-format
msgid "macro \"%s\" might prevent reproducible builds"
msgstr ""
-#: macro.c:278
+#: macro.c:280
msgid "could not determine file timestamp"
msgstr ""
-#: macro.c:379
+#: macro.c:384
msgid "could not determine date and time"
msgstr ""
-#: macro.c:395
+#: macro.c:400
msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
msgstr ""
-#: macro.c:583
+#: macro.c:588
msgid "invalid string literal, ignoring final '\\'"
msgstr ""
-#: macro.c:645
+#: macro.c:650
#, c-format
msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token"
msgstr ""
-#: macro.c:769
+#: macro.c:774
msgid ""
"ISO C++11 requires at least one argument for the \"...\" in a variadic macro"
msgstr ""
-#: macro.c:773
+#: macro.c:778
msgid ""
"ISO C99 requires at least one argument for the \"...\" in a variadic macro"
msgstr ""
-#: macro.c:780
+#: macro.c:785
#, c-format
msgid "macro \"%s\" requires %u arguments, but only %u given"
msgstr ""
-#: macro.c:785
+#: macro.c:790
#, c-format
msgid "macro \"%s\" passed %u arguments, but takes just %u"
msgstr ""
-#: macro.c:979
+#: macro.c:984
#: traditional.c:819
#, c-format
msgid "unterminated argument list invoking macro \"%s\""
msgstr ""
-#: macro.c:1130
+#: macro.c:1135
#, c-format
msgid "function-like macro \"%s\" must be used with arguments in traditional C"
msgstr ""
-#: macro.c:1813
+#: macro.c:1825
#, c-format
msgid ""
"invoking macro %s argument %d: empty macro arguments are undefined in ISO C+"
"+98"
msgstr ""
-#: macro.c:1821
-#: macro.c:1830
+#: macro.c:1833
+#: macro.c:1842
#, c-format
msgid ""
"invoking macro %s argument %d: empty macro arguments are undefined in ISO C90"
msgstr ""
-#: macro.c:2794
+#: macro.c:2806
#, c-format
msgid "duplicate macro parameter \"%s\""
msgstr ""
-#: macro.c:2843
+#: macro.c:2855
#, c-format
msgid "\"%s\" may not appear in macro parameter list"
msgstr ""
-#: macro.c:2851
+#: macro.c:2863
msgid "macro parameters must be comma-separated"
msgstr ""
-#: macro.c:2869
+#: macro.c:2881
msgid "parameter name missing"
msgstr ""
-#: macro.c:2890
+#: macro.c:2902
msgid "anonymous variadic macros were introduced in C++11"
msgstr ""
-#: macro.c:2894
-#: macro.c:2899
+#: macro.c:2906
+#: macro.c:2911
msgid "anonymous variadic macros were introduced in C99"
msgstr ""
-#: macro.c:2906
+#: macro.c:2918
msgid "ISO C++ does not permit named variadic macros"
msgstr ""
-#: macro.c:2909
+#: macro.c:2921
msgid "ISO C does not permit named variadic macros"
msgstr ""
-#: macro.c:2919
+#: macro.c:2931
msgid "missing ')' in macro parameter list"
msgstr ""
-#: macro.c:2970
+#: macro.c:2982
msgid "'##' cannot appear at either end of a macro expansion"
msgstr ""
-#: macro.c:3007
+#: macro.c:3019
msgid "ISO C++11 requires whitespace after the macro name"
msgstr ""
-#: macro.c:3010
+#: macro.c:3022
msgid "ISO C99 requires whitespace after the macro name"
msgstr ""
-#: macro.c:3035
+#: macro.c:3047
msgid "missing whitespace after the macro name"
msgstr ""
-#: macro.c:3069
+#: macro.c:3081
msgid "'#' is not followed by a macro parameter"
msgstr ""
-#: macro.c:3230
+#: macro.c:3242
#, c-format
msgid "\"%s\" redefined"
msgstr ""
-#: macro.c:3235
+#: macro.c:3247
msgid "this is the location of the previous definition"
msgstr ""
-#: macro.c:3296
+#: macro.c:3308
#, c-format
msgid "macro argument \"%s\" would be stringified in traditional C"
msgstr ""
-#: macro.c:3323
+#: macro.c:3344
#, c-format
msgid "invalid hash type %d in cpp_macro_definition"
msgstr ""
diff --git a/libcpp/po/da.po b/libcpp/po/da.po
index b3395be..3805d8f 100644
--- a/libcpp/po/da.po
+++ b/libcpp/po/da.po
@@ -1,8 +1,8 @@
# Danish version of cpplib.
-# Copyright (C) 2015 Free Software Foundation, Inc.
+# Copyright (C) 2016 Free Software Foundation, Inc.
# This file is distributed under the same license as the gcc package.
# Ole Laursen <olau@hardworking.dk>, 2001, 02, 03.
-# Joe Hansen <joedalton2@yahoo.dk>, 2015.
+# Joe Hansen <joedalton2@yahoo.dk>, 2015, 2016.
#
# Konventioner:
#
@@ -128,10 +128,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: cpplib 5.1-b20150208\n"
+"Project-Id-Version: cpplib 6.1-b20160131\n"
"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
"POT-Creation-Date: 2016-01-31 15:50+0000\n"
-"PO-Revision-Date: 2015-04-06 18:00+0200\n"
+"PO-Revision-Date: 2016-03-27 18:00+0200\n"
"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
"Language: da\n"
@@ -871,10 +871,8 @@ msgid "missing terminating %c character"
msgstr "manglende afsluttende %c-tegn"
#: lex.c:1932
-#, fuzzy
-#| msgid "invalid suffix on literal; C++11 requires a space between literal and string macro"
msgid "C++11 requires a space between string literal and macro"
-msgstr "ugyldig suffiks på ordret; C++11 kræver et mellemrum mellem ordret og strengmakro"
+msgstr "C++11 kræver et mellemrum mellem ordret og strengmakro"
#: lex.c:2474 lex.c:2508
msgid "C++ style comments are not allowed in ISO C90"
diff --git a/libcpp/po/fr.po b/libcpp/po/fr.po
index 2f4129e..085a19f 100644
--- a/libcpp/po/fr.po
+++ b/libcpp/po/fr.po
@@ -3,7 +3,7 @@
# This file is distributed under the same license as the gcc package.
# Michel Robitaille <robitail@IRO.UMontreal.CA>, traducteur depuis/since 1996.
# François-Xavier Coudert <fxcoudert@gcc.gnu.org>, 2008.
-# Stéphane Aulery <lkppo@free.fr>, 2015.
+# Stéphane Aulery <lkppo@free.fr>, 2015, 2016.
#
# Vocabulaire utilisé
# lvalue = membre gauche
@@ -119,10 +119,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: GNU cpplib 5.1-b20150208\n"
+"Project-Id-Version: GNU cpplib 6.1-b20160131\n"
"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
"POT-Creation-Date: 2016-01-31 15:50+0000\n"
-"PO-Revision-Date: 2015-04-11 00:44+0200\n"
+"PO-Revision-Date: 2016-03-16 23:56+0100\n"
"Last-Translator: Stéphane Aulery <lkppo@free.fr>\n"
"Language-Team: French <traduc@traduc.org>\n"
"Language: fr\n"
@@ -877,10 +877,8 @@ msgid "missing terminating %c character"
msgstr "caractère %c de terminaison manquant"
#: lex.c:1932
-#, fuzzy
-#| msgid "invalid suffix on literal; C++11 requires a space between literal and string macro"
msgid "C++11 requires a space between string literal and macro"
-msgstr "suffixe de chaîne invalide ; C++11 requière un espace entre une chaîne et une macro de chaîne"
+msgstr "C++11 requière un espace entre une chaîne et une macro"
#: lex.c:2474 lex.c:2508
msgid "C++ style comments are not allowed in ISO C90"
diff --git a/libcpp/po/sr.po b/libcpp/po/sr.po
index 1e0bd18..3107635 100644
--- a/libcpp/po/sr.po
+++ b/libcpp/po/sr.po
@@ -1,13 +1,13 @@
# Serbian translation of cpplib.
# Copyright (C) 2014 Free Software Foundation, Inc.
# This file is distributed under the same license as the gcc package.
-# МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>, 2012—2014, 2015.
+# МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>, 2012—2016.
msgid ""
msgstr ""
-"Project-Id-Version: cpplib-5.1-b20150208\n"
+"Project-Id-Version: cpplib-6.1-b20160131\n"
"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
"POT-Creation-Date: 2016-01-31 15:50+0000\n"
-"PO-Revision-Date: 2015-04-12 10:37+0200\n"
+"PO-Revision-Date: 2016-03-05 08:37+0200\n"
"Last-Translator: МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <(nothing)>\n"
"Language: sr\n"
@@ -748,10 +748,8 @@ msgid "missing terminating %c character"
msgstr "недоÑтаје завршни знак %c"
#: lex.c:1932
-#, fuzzy
-#| msgid "invalid suffix on literal; C++11 requires a space between literal and string macro"
msgid "C++11 requires a space between string literal and macro"
-msgstr "неиÑправан ÑÑƒÑ„Ð¸ÐºÑ Ñƒ ÑловноÑти; Ц++11 захтева размак између ÑловноÑти и макроа ниÑке"
+msgstr "Ц++11 захтева размак између ÑловноÑти и макроа ниÑке"
#: lex.c:2474 lex.c:2508
msgid "C++ style comments are not allowed in ISO C90"
diff --git a/libffi/ChangeLog b/libffi/ChangeLog
index 91d0f41..5027680 100644
--- a/libffi/ChangeLog
+++ b/libffi/ChangeLog
@@ -1,3 +1,48 @@
+2016-03-17 Andreas Schwab <schwab@suse.de>
+
+ * src/aarch64/ffitarget.h (FFI_SIZEOF_JAVA_RAW) [__ILP32__]:
+ Define.
+
+2016-03-02 Richard Henderson <rth@redhat.com>
+
+ * libtool-version: Increase to 7:0:0.
+ * libffi.map.in: Increase version numbers to 7.0.
+
+2016-03-03 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * Makefile.am (libffi.map-sun): Properly convert
+ $(libffi_la_OBJECTS) to object names.
+ * Makefile.in: Regenerate.
+
+2016-03-03 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * Makefile.am (libffi.map-sun): Tabify:
+ * Makefile.in: Regenerate.
+
+2016-03-02 Richard Henderson <rth@redhat.com>
+
+ PR libffi/70024
+ * Makefile.am (libffi_version_script): New.
+ (libffi_version_dep): New.
+ (libffi_version_info): New.
+ (libffi_la_LDFLAGS): Include libffi_version_info, libffi_version_script.
+ (libffi_la_DEPENDENCIES): Include libffi_version_dep.
+ * acinclude.m4 (LIBAT_ENABLE, LIBAT_CHECK_LINKER_FEATURES): New.
+ (LIBAT_ENABLE_SYMVERS, LIBAT_BUILD_VERSIONED_SHLIB): New.
+ (LIBAT_BUILD_VERSIONED_SHLIB_GNU): New.
+ (LIBAT_BUILD_VERSIONED_SHLIB_SUN): New.
+ * configure.ac: Invoke LIBAT_ENABLE_SYMVERS.
+ * libffi.map: New file.
+ * libtool-version: Increase to 5.0.0.
+ * Makefile.in, configure: Rebuild.
+ * man/Makefile.in, testsuite/Makefile.in: Rebuild.
+
+ * Makefile.am (libffi_version_script): Look in cwd for libffi.map.
+ (libffi_version_dep, libffi.map-sun): Likewise.
+ (libffi.map): New target.
+ * libffi.map.in: Rename from libffi.map. Add required defines,
+ includes, and conditionals.
+
2015-10-26 John David Anglin <danglin@gcc.gnu.org>
PR libffi/65441
diff --git a/libffi/Makefile.am b/libffi/Makefile.am
index af98000..dc43328 100644
--- a/libffi/Makefile.am
+++ b/libffi/Makefile.am
@@ -188,7 +188,6 @@ EXTRA_libffi_la_SOURCES = \
TARGET_OBJ = @TARGET_OBJ@
libffi_la_LIBADD = $(TARGET_OBJ)
-libffi_la_DEPENDENCIES = $(TARGET_OBJ)
libffi_convenience_la_SOURCES = $(libffi_la_SOURCES)
EXTRA_libffi_convenience_la_SOURCES = $(EXTRA_libffi_la_SOURCES)
@@ -205,7 +204,32 @@ if FFI_DEBUG
AM_CFLAGS += -DFFI_DEBUG
endif
-libffi_la_LDFLAGS = -no-undefined -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) $(AM_LTLDFLAGS)
+if LIBAT_BUILD_VERSIONED_SHLIB
+if LIBAT_BUILD_VERSIONED_SHLIB_GNU
+libffi_version_script = -Wl,--version-script,libffi.map
+libffi_version_dep = libffi.map
+endif
+if LIBAT_BUILD_VERSIONED_SHLIB_SUN
+libffi_version_script = -Wl,-M,libffi.map-sun
+libffi_version_dep = libffi.map-sun
+libffi.map-sun : libffi.map $(top_srcdir)/../contrib/make_sunver.pl \
+ $(libffi_la_OBJECTS) $(libffi_la_LIBADD)
+ perl $(top_srcdir)/../contrib/make_sunver.pl libffi.map \
+ `echo $(libffi_la_OBJECTS) $(libffi_la_LIBADD) | \
+ sed 's,\([^/ ]*\)\.l\([ao]\),.libs/\1.\2,g'` \
+ > $@ || (rm -f $@ ; exit 1)
+endif
+else
+libffi_version_script =
+libffi_version_dep =
+endif
+libffi_version_info = -version-info `grep -v '^\#' $(srcdir)/libtool-version`
+
+libffi.map: $(top_srcdir)/libffi.map.in
+ $(COMPILE) -D$(TARGET) -E -x assembler-with-cpp -o $@ $<
+
+libffi_la_LDFLAGS = -no-undefined $(libffi_version_info) $(libffi_version_script) $(LTLDFLAGS) $(AM_LTLDFLAGS)
+libffi_la_DEPENDENCIES = $(libffi_la_LIBADD) $(libffi_version_dep)
AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
AM_CCASFLAGS = $(AM_CPPFLAGS)
diff --git a/libffi/Makefile.in b/libffi/Makefile.in
index 259c3e8..f4292b5 100644
--- a/libffi/Makefile.in
+++ b/libffi/Makefile.in
@@ -248,6 +248,7 @@ NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
+OPT_LDFLAGS = @OPT_LDFLAGS@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
@@ -259,6 +260,7 @@ PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
+SECTION_LDFLAGS = @SECTION_LDFLAGS@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
@@ -478,7 +480,6 @@ EXTRA_libffi_la_SOURCES = \
src/xtensa/ffi.c src/xtensa/sysv.S
libffi_la_LIBADD = $(TARGET_OBJ)
-libffi_la_DEPENDENCIES = $(TARGET_OBJ)
libffi_convenience_la_SOURCES = $(libffi_la_SOURCES)
EXTRA_libffi_convenience_la_SOURCES = $(EXTRA_libffi_la_SOURCES)
libffi_convenience_la_LIBADD = $(libffi_la_LIBADD)
@@ -486,7 +487,15 @@ libffi_convenience_la_DEPENDENCIES = $(libffi_la_DEPENDENCIES)
nodist_libffi_convenience_la_SOURCES = $(nodist_libffi_la_SOURCES)
LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
AM_CFLAGS = -Wall -g -fexceptions $(am__append_2)
-libffi_la_LDFLAGS = -no-undefined -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) $(AM_LTLDFLAGS)
+@LIBAT_BUILD_VERSIONED_SHLIB_FALSE@libffi_version_script =
+@LIBAT_BUILD_VERSIONED_SHLIB_GNU_TRUE@@LIBAT_BUILD_VERSIONED_SHLIB_TRUE@libffi_version_script = -Wl,--version-script,libffi.map
+@LIBAT_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBAT_BUILD_VERSIONED_SHLIB_TRUE@libffi_version_script = -Wl,-M,libffi.map-sun
+@LIBAT_BUILD_VERSIONED_SHLIB_FALSE@libffi_version_dep =
+@LIBAT_BUILD_VERSIONED_SHLIB_GNU_TRUE@@LIBAT_BUILD_VERSIONED_SHLIB_TRUE@libffi_version_dep = libffi.map
+@LIBAT_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBAT_BUILD_VERSIONED_SHLIB_TRUE@libffi_version_dep = libffi.map-sun
+libffi_version_info = -version-info `grep -v '^\#' $(srcdir)/libtool-version`
+libffi_la_LDFLAGS = -no-undefined $(libffi_version_info) $(libffi_version_script) $(LTLDFLAGS) $(AM_LTLDFLAGS)
+libffi_la_DEPENDENCIES = $(libffi_la_LIBADD) $(libffi_version_dep)
AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
AM_CCASFLAGS = $(AM_CPPFLAGS)
all: fficonfig.h
@@ -1892,6 +1901,15 @@ doc/libffi.info: $(STAMP_BUILD_INFO)
stamp-build-info: doc/libffi.texi $(srcdir)/doc/version.texi doc/$(am__dirstamp)
$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)/doc -o doc/libffi.info $(srcdir)/doc/libffi.texi
@touch $@
+@LIBAT_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBAT_BUILD_VERSIONED_SHLIB_TRUE@libffi.map-sun : libffi.map $(top_srcdir)/../contrib/make_sunver.pl \
+@LIBAT_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBAT_BUILD_VERSIONED_SHLIB_TRUE@ $(libffi_la_OBJECTS) $(libffi_la_LIBADD)
+@LIBAT_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBAT_BUILD_VERSIONED_SHLIB_TRUE@ perl $(top_srcdir)/../contrib/make_sunver.pl libffi.map \
+@LIBAT_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBAT_BUILD_VERSIONED_SHLIB_TRUE@ `echo $(libffi_la_OBJECTS) $(libffi_la_LIBADD) | \
+@LIBAT_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBAT_BUILD_VERSIONED_SHLIB_TRUE@ sed 's,\([^/ ]*\)\.l\([ao]\),.libs/\1.\2,g'` \
+@LIBAT_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBAT_BUILD_VERSIONED_SHLIB_TRUE@ > $@ || (rm -f $@ ; exit 1)
+
+libffi.map: $(top_srcdir)/libffi.map.in
+ $(COMPILE) -D$(TARGET) -E -x assembler-with-cpp -o $@ $<
# Multilib support. Automake should provide these on its own.
all-recursive: all-multi
diff --git a/libffi/acinclude.m4 b/libffi/acinclude.m4
index 3e8f8ba..270dadf 100644
--- a/libffi/acinclude.m4
+++ b/libffi/acinclude.m4
@@ -90,3 +90,384 @@ if test $ac_cv_func_mmap_anon = yes; then
[Define if mmap with MAP_ANON(YMOUS) works.])
fi
])
+
+dnl ----------------------------------------------------------------------
+dnl This whole bit snagged from libstdc++-v3, via libatomic.
+
+dnl
+dnl LIBAT_ENABLE
+dnl (FEATURE, DEFAULT, HELP-ARG, HELP-STRING)
+dnl (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, permit a|b|c)
+dnl (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, SHELL-CODE-HANDLER)
+dnl
+dnl See docs/html/17_intro/configury.html#enable for documentation.
+dnl
+m4_define([LIBAT_ENABLE],[dnl
+m4_define([_g_switch],[--enable-$1])dnl
+m4_define([_g_help],[AC_HELP_STRING(_g_switch$3,[$4 @<:@default=$2@:>@])])dnl
+ AC_ARG_ENABLE($1,_g_help,
+ m4_bmatch([$5],
+ [^permit ],
+ [[
+ case "$enableval" in
+ m4_bpatsubst([$5],[permit ])) ;;
+ *) AC_MSG_ERROR(Unknown argument to enable/disable $1) ;;
+ dnl Idea for future: generate a URL pointing to
+ dnl "onlinedocs/configopts.html#whatever"
+ esac
+ ]],
+ [^$],
+ [[
+ case "$enableval" in
+ yes|no) ;;
+ *) AC_MSG_ERROR(Argument to enable/disable $1 must be yes or no) ;;
+ esac
+ ]],
+ [[$5]]),
+ [enable_]m4_bpatsubst([$1],-,_)[=][$2])
+m4_undefine([_g_switch])dnl
+m4_undefine([_g_help])dnl
+])
+
+dnl
+dnl If GNU ld is in use, check to see if tricky linker opts can be used. If
+dnl the native linker is in use, all variables will be defined to something
+dnl safe (like an empty string).
+dnl
+dnl Defines:
+dnl SECTION_LDFLAGS='-Wl,--gc-sections' if possible
+dnl OPT_LDFLAGS='-Wl,-O1' if possible
+dnl LD (as a side effect of testing)
+dnl Sets:
+dnl with_gnu_ld
+dnl libat_ld_is_gold (possibly)
+dnl libat_gnu_ld_version (possibly)
+dnl
+dnl The last will be a single integer, e.g., version 1.23.45.0.67.89 will
+dnl set libat_gnu_ld_version to 12345. Zeros cause problems.
+dnl
+AC_DEFUN([LIBAT_CHECK_LINKER_FEATURES], [
+ # If we're not using GNU ld, then there's no point in even trying these
+ # tests. Check for that first. We should have already tested for gld
+ # by now (in libtool), but require it now just to be safe...
+ test -z "$SECTION_LDFLAGS" && SECTION_LDFLAGS=''
+ test -z "$OPT_LDFLAGS" && OPT_LDFLAGS=''
+ AC_REQUIRE([AC_PROG_LD])
+ AC_REQUIRE([AC_PROG_AWK])
+
+ # The name set by libtool depends on the version of libtool. Shame on us
+ # for depending on an impl detail, but c'est la vie. Older versions used
+ # ac_cv_prog_gnu_ld, but now it's lt_cv_prog_gnu_ld, and is copied back on
+ # top of with_gnu_ld (which is also set by --with-gnu-ld, so that actually
+ # makes sense). We'll test with_gnu_ld everywhere else, so if that isn't
+ # set (hence we're using an older libtool), then set it.
+ if test x${with_gnu_ld+set} != xset; then
+ if test x${ac_cv_prog_gnu_ld+set} != xset; then
+ # We got through "ac_require(ac_prog_ld)" and still not set? Huh?
+ with_gnu_ld=no
+ else
+ with_gnu_ld=$ac_cv_prog_gnu_ld
+ fi
+ fi
+
+ # Start by getting the version number. I think the libtool test already
+ # does some of this, but throws away the result.
+ libat_ld_is_gold=no
+ if $LD --version 2>/dev/null | grep 'GNU gold'> /dev/null 2>&1; then
+ libat_ld_is_gold=yes
+ fi
+ changequote(,)
+ ldver=`$LD --version 2>/dev/null |
+ sed -e 's/GNU gold /GNU ld /;s/GNU ld version /GNU ld /;s/GNU ld ([^)]*) /GNU ld /;s/GNU ld \([0-9.][0-9.]*\).*/\1/; q'`
+ changequote([,])
+ libat_gnu_ld_version=`echo $ldver | \
+ $AWK -F. '{ if (NF<3) [$]3=0; print ([$]1*100+[$]2)*100+[$]3 }'`
+
+ # Set --gc-sections.
+ if test "$with_gnu_ld" = "notbroken"; then
+ # GNU ld it is! Joy and bunny rabbits!
+
+ # All these tests are for C++; save the language and the compiler flags.
+ # Need to do this so that g++ won't try to link in libstdc++
+ ac_test_CFLAGS="${CFLAGS+set}"
+ ac_save_CFLAGS="$CFLAGS"
+ CFLAGS='-x c++ -Wl,--gc-sections'
+
+ # Check for -Wl,--gc-sections
+ # XXX This test is broken at the moment, as symbols required for linking
+ # are now in libsupc++ (not built yet). In addition, this test has
+ # cored on solaris in the past. In addition, --gc-sections doesn't
+ # really work at the moment (keeps on discarding used sections, first
+ # .eh_frame and now some of the glibc sections for iconv).
+ # Bzzzzt. Thanks for playing, maybe next time.
+ AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
+ AC_TRY_RUN([
+ int main(void)
+ {
+ try { throw 1; }
+ catch (...) { };
+ return 0;
+ }
+ ], [ac_sectionLDflags=yes],[ac_sectionLDflags=no], [ac_sectionLDflags=yes])
+ if test "$ac_test_CFLAGS" = set; then
+ CFLAGS="$ac_save_CFLAGS"
+ else
+ # this is the suspicious part
+ CFLAGS=''
+ fi
+ if test "$ac_sectionLDflags" = "yes"; then
+ SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS"
+ fi
+ AC_MSG_RESULT($ac_sectionLDflags)
+ fi
+
+ # Set linker optimization flags.
+ if test x"$with_gnu_ld" = x"yes"; then
+ OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS"
+ fi
+
+ AC_SUBST(SECTION_LDFLAGS)
+ AC_SUBST(OPT_LDFLAGS)
+])
+
+
+dnl
+dnl If GNU ld is in use, check to see if tricky linker opts can be used. If
+dnl the native linker is in use, all variables will be defined to something
+dnl safe (like an empty string).
+dnl
+dnl Defines:
+dnl SECTION_LDFLAGS='-Wl,--gc-sections' if possible
+dnl OPT_LDFLAGS='-Wl,-O1' if possible
+dnl LD (as a side effect of testing)
+dnl Sets:
+dnl with_gnu_ld
+dnl libat_ld_is_gold (possibly)
+dnl libat_gnu_ld_version (possibly)
+dnl
+dnl The last will be a single integer, e.g., version 1.23.45.0.67.89 will
+dnl set libat_gnu_ld_version to 12345. Zeros cause problems.
+dnl
+AC_DEFUN([LIBAT_CHECK_LINKER_FEATURES], [
+ # If we're not using GNU ld, then there's no point in even trying these
+ # tests. Check for that first. We should have already tested for gld
+ # by now (in libtool), but require it now just to be safe...
+ test -z "$SECTION_LDFLAGS" && SECTION_LDFLAGS=''
+ test -z "$OPT_LDFLAGS" && OPT_LDFLAGS=''
+ AC_REQUIRE([AC_PROG_LD])
+ AC_REQUIRE([AC_PROG_AWK])
+
+ # The name set by libtool depends on the version of libtool. Shame on us
+ # for depending on an impl detail, but c'est la vie. Older versions used
+ # ac_cv_prog_gnu_ld, but now it's lt_cv_prog_gnu_ld, and is copied back on
+ # top of with_gnu_ld (which is also set by --with-gnu-ld, so that actually
+ # makes sense). We'll test with_gnu_ld everywhere else, so if that isn't
+ # set (hence we're using an older libtool), then set it.
+ if test x${with_gnu_ld+set} != xset; then
+ if test x${ac_cv_prog_gnu_ld+set} != xset; then
+ # We got through "ac_require(ac_prog_ld)" and still not set? Huh?
+ with_gnu_ld=no
+ else
+ with_gnu_ld=$ac_cv_prog_gnu_ld
+ fi
+ fi
+
+ # Start by getting the version number. I think the libtool test already
+ # does some of this, but throws away the result.
+ libat_ld_is_gold=no
+ if $LD --version 2>/dev/null | grep 'GNU gold'> /dev/null 2>&1; then
+ libat_ld_is_gold=yes
+ fi
+ changequote(,)
+ ldver=`$LD --version 2>/dev/null |
+ sed -e 's/GNU gold /GNU ld /;s/GNU ld version /GNU ld /;s/GNU ld ([^)]*) /GNU ld /;s/GNU ld \([0-9.][0-9.]*\).*/\1/; q'`
+ changequote([,])
+ libat_gnu_ld_version=`echo $ldver | \
+ $AWK -F. '{ if (NF<3) [$]3=0; print ([$]1*100+[$]2)*100+[$]3 }'`
+
+ # Set --gc-sections.
+ if test "$with_gnu_ld" = "notbroken"; then
+ # GNU ld it is! Joy and bunny rabbits!
+
+ # All these tests are for C++; save the language and the compiler flags.
+ # Need to do this so that g++ won't try to link in libstdc++
+ ac_test_CFLAGS="${CFLAGS+set}"
+ ac_save_CFLAGS="$CFLAGS"
+ CFLAGS='-x c++ -Wl,--gc-sections'
+
+ # Check for -Wl,--gc-sections
+ # XXX This test is broken at the moment, as symbols required for linking
+ # are now in libsupc++ (not built yet). In addition, this test has
+ # cored on solaris in the past. In addition, --gc-sections doesn't
+ # really work at the moment (keeps on discarding used sections, first
+ # .eh_frame and now some of the glibc sections for iconv).
+ # Bzzzzt. Thanks for playing, maybe next time.
+ AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
+ AC_TRY_RUN([
+ int main(void)
+ {
+ try { throw 1; }
+ catch (...) { };
+ return 0;
+ }
+ ], [ac_sectionLDflags=yes],[ac_sectionLDflags=no], [ac_sectionLDflags=yes])
+ if test "$ac_test_CFLAGS" = set; then
+ CFLAGS="$ac_save_CFLAGS"
+ else
+ # this is the suspicious part
+ CFLAGS=''
+ fi
+ if test "$ac_sectionLDflags" = "yes"; then
+ SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS"
+ fi
+ AC_MSG_RESULT($ac_sectionLDflags)
+ fi
+
+ # Set linker optimization flags.
+ if test x"$with_gnu_ld" = x"yes"; then
+ OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS"
+ fi
+
+ AC_SUBST(SECTION_LDFLAGS)
+ AC_SUBST(OPT_LDFLAGS)
+])
+
+
+dnl
+dnl Add version tags to symbols in shared library (or not), additionally
+dnl marking other symbols as private/local (or not).
+dnl
+dnl --enable-symvers=style adds a version script to the linker call when
+dnl creating the shared library. The choice of version script is
+dnl controlled by 'style'.
+dnl --disable-symvers does not.
+dnl + Usage: LIBAT_ENABLE_SYMVERS[(DEFAULT)]
+dnl Where DEFAULT is either 'yes' or 'no'. Passing `yes' tries to
+dnl choose a default style based on linker characteristics. Passing
+dnl 'no' disables versioning.
+dnl
+AC_DEFUN([LIBAT_ENABLE_SYMVERS], [
+
+LIBAT_ENABLE(symvers,yes,[=STYLE],
+ [enables symbol versioning of the shared library],
+ [permit yes|no|gnu*|sun])
+
+# If we never went through the LIBAT_CHECK_LINKER_FEATURES macro, then we
+# don't know enough about $LD to do tricks...
+AC_REQUIRE([LIBAT_CHECK_LINKER_FEATURES])
+
+# Turn a 'yes' into a suitable default.
+if test x$enable_symvers = xyes ; then
+ # FIXME The following test is too strict, in theory.
+ if test $enable_shared = no || test "x$LD" = x; then
+ enable_symvers=no
+ else
+ if test $with_gnu_ld = yes ; then
+ enable_symvers=gnu
+ else
+ case ${target_os} in
+ # Sun symbol versioning exists since Solaris 2.5.
+ solaris2.[[5-9]]* | solaris2.1[[0-9]]*)
+ enable_symvers=sun ;;
+ *)
+ enable_symvers=no ;;
+ esac
+ fi
+ fi
+fi
+
+# Check if 'sun' was requested on non-Solaris 2 platforms.
+if test x$enable_symvers = xsun ; then
+ case ${target_os} in
+ solaris2*)
+ # All fine.
+ ;;
+ *)
+ # Unlikely to work.
+ AC_MSG_WARN([=== You have requested Sun symbol versioning, but])
+ AC_MSG_WARN([=== you are not targetting Solaris 2.])
+ AC_MSG_WARN([=== Symbol versioning will be disabled.])
+ enable_symvers=no
+ ;;
+ esac
+fi
+
+# Check to see if libgcc_s exists, indicating that shared libgcc is possible.
+if test $enable_symvers != no; then
+ AC_MSG_CHECKING([for shared libgcc])
+ ac_save_CFLAGS="$CFLAGS"
+ CFLAGS=' -lgcc_s'
+ AC_TRY_LINK(, [return 0;], libat_shared_libgcc=yes, libat_shared_libgcc=no)
+ CFLAGS="$ac_save_CFLAGS"
+ if test $libat_shared_libgcc = no; then
+ cat > conftest.c <<EOF
+int main (void) { return 0; }
+EOF
+changequote(,)dnl
+ libat_libgcc_s_suffix=`${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
+ -shared -shared-libgcc -o conftest.so \
+ conftest.c -v 2>&1 >/dev/null \
+ | sed -n 's/^.* -lgcc_s\([^ ]*\) .*$/\1/p'`
+changequote([,])dnl
+ rm -f conftest.c conftest.so
+ if test x${libat_libgcc_s_suffix+set} = xset; then
+ CFLAGS=" -lgcc_s$libat_libgcc_s_suffix"
+ AC_TRY_LINK(, [return 0;], libat_shared_libgcc=yes)
+ CFLAGS="$ac_save_CFLAGS"
+ fi
+ fi
+ AC_MSG_RESULT($libat_shared_libgcc)
+fi
+
+# For GNU ld, we need at least this version. The format is described in
+# LIBAT_CHECK_LINKER_FEATURES above.
+libat_min_gnu_ld_version=21400
+# XXXXXXXXXXX libat_gnu_ld_version=21390
+
+# Check to see if unspecified "yes" value can win, given results above.
+# Change "yes" into either "no" or a style name.
+if test $enable_symvers != no && test $libat_shared_libgcc = yes; then
+ if test $with_gnu_ld = yes; then
+ if test $libat_gnu_ld_version -ge $libat_min_gnu_ld_version ; then
+ enable_symvers=gnu
+ elif test $libat_ld_is_gold = yes ; then
+ enable_symvers=gnu
+ else
+ # The right tools, the right setup, but too old. Fallbacks?
+ AC_MSG_WARN(=== Linker version $libat_gnu_ld_version is too old for)
+ AC_MSG_WARN(=== full symbol versioning support in this release of GCC.)
+ AC_MSG_WARN(=== You would need to upgrade your binutils to version)
+ AC_MSG_WARN(=== $libat_min_gnu_ld_version or later and rebuild GCC.)
+ if test $libat_gnu_ld_version -ge 21200 ; then
+ # Globbing fix is present, proper block support is not.
+ dnl AC_MSG_WARN([=== Dude, you are soooo close. Maybe we can fake it.])
+ dnl enable_symvers=???
+ AC_MSG_WARN([=== Symbol versioning will be disabled.])
+ enable_symvers=no
+ else
+ # 2.11 or older.
+ AC_MSG_WARN([=== Symbol versioning will be disabled.])
+ enable_symvers=no
+ fi
+ fi
+ elif test $enable_symvers = sun; then
+ : All interesting versions of Sun ld support sun style symbol versioning.
+ else
+ # just fail for now
+ AC_MSG_WARN([=== You have requested some kind of symbol versioning, but])
+ AC_MSG_WARN([=== either you are not using a supported linker, or you are])
+ AC_MSG_WARN([=== not building a shared libgcc_s (which is required).])
+ AC_MSG_WARN([=== Symbol versioning will be disabled.])
+ enable_symvers=no
+ fi
+fi
+if test $enable_symvers = gnu; then
+ AC_DEFINE(LIBAT_GNU_SYMBOL_VERSIONING, 1,
+ [Define to 1 if GNU symbol versioning is used for libatomic.])
+fi
+
+AM_CONDITIONAL(LIBAT_BUILD_VERSIONED_SHLIB, test $enable_symvers != no)
+AM_CONDITIONAL(LIBAT_BUILD_VERSIONED_SHLIB_GNU, test $enable_symvers = gnu)
+AM_CONDITIONAL(LIBAT_BUILD_VERSIONED_SHLIB_SUN, test $enable_symvers = sun)
+AC_MSG_NOTICE(versioning on shared library symbols is $enable_symvers)
+])
diff --git a/libffi/configure b/libffi/configure
index 79b430a..f40dd4d 100755
--- a/libffi/configure
+++ b/libffi/configure
@@ -604,6 +604,14 @@ ac_subst_vars='am__EXEEXT_FALSE
am__EXEEXT_TRUE
LTLIBOBJS
LIBOBJS
+LIBAT_BUILD_VERSIONED_SHLIB_SUN_FALSE
+LIBAT_BUILD_VERSIONED_SHLIB_SUN_TRUE
+LIBAT_BUILD_VERSIONED_SHLIB_GNU_FALSE
+LIBAT_BUILD_VERSIONED_SHLIB_GNU_TRUE
+LIBAT_BUILD_VERSIONED_SHLIB_FALSE
+LIBAT_BUILD_VERSIONED_SHLIB_TRUE
+OPT_LDFLAGS
+SECTION_LDFLAGS
toolexeclibdir
toolexecdir
FFI_DEBUG_FALSE
@@ -768,6 +776,7 @@ enable_debug
enable_structs
enable_raw_api
enable_purify_safety
+enable_symvers
'
ac_precious_vars='build_alias
host_alias
@@ -1416,6 +1425,8 @@ Optional Features:
--disable-structs omit code for struct support
--disable-raw-api make the raw api unavailable
--enable-purify-safety purify-safe mode
+ --enable-symvers=STYLE enables symbol versioning of the shared library
+ [default=yes]
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
@@ -9347,7 +9358,7 @@ _LT_EOF
if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
else
- export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
fi
aix_use_runtimelinking=no
@@ -11375,7 +11386,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11378 "configure"
+#line 11389 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11481,7 +11492,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11484 "configure"
+#line 11495 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -13833,7 +13844,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
else
- export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
fi
;;
pw32*)
@@ -16009,6 +16020,419 @@ else
multilib_arg=
fi
+# Check linker support.
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+ with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [\\/]* | ?:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if test "${lt_cv_path_LD+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$LD"; then
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if test "${lt_cv_prog_gnu_ld+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+ # If we're not using GNU ld, then there's no point in even trying these
+ # tests. Check for that first. We should have already tested for gld
+ # by now (in libtool), but require it now just to be safe...
+ test -z "$SECTION_LDFLAGS" && SECTION_LDFLAGS=''
+ test -z "$OPT_LDFLAGS" && OPT_LDFLAGS=''
+
+
+
+ # The name set by libtool depends on the version of libtool. Shame on us
+ # for depending on an impl detail, but c'est la vie. Older versions used
+ # ac_cv_prog_gnu_ld, but now it's lt_cv_prog_gnu_ld, and is copied back on
+ # top of with_gnu_ld (which is also set by --with-gnu-ld, so that actually
+ # makes sense). We'll test with_gnu_ld everywhere else, so if that isn't
+ # set (hence we're using an older libtool), then set it.
+ if test x${with_gnu_ld+set} != xset; then
+ if test x${ac_cv_prog_gnu_ld+set} != xset; then
+ # We got through "ac_require(ac_prog_ld)" and still not set? Huh?
+ with_gnu_ld=no
+ else
+ with_gnu_ld=$ac_cv_prog_gnu_ld
+ fi
+ fi
+
+ # Start by getting the version number. I think the libtool test already
+ # does some of this, but throws away the result.
+ libat_ld_is_gold=no
+ if $LD --version 2>/dev/null | grep 'GNU gold'> /dev/null 2>&1; then
+ libat_ld_is_gold=yes
+ fi
+
+ ldver=`$LD --version 2>/dev/null |
+ sed -e 's/GNU gold /GNU ld /;s/GNU ld version /GNU ld /;s/GNU ld ([^)]*) /GNU ld /;s/GNU ld \([0-9.][0-9.]*\).*/\1/; q'`
+
+ libat_gnu_ld_version=`echo $ldver | \
+ $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'`
+
+ # Set --gc-sections.
+ if test "$with_gnu_ld" = "notbroken"; then
+ # GNU ld it is! Joy and bunny rabbits!
+
+ # All these tests are for C++; save the language and the compiler flags.
+ # Need to do this so that g++ won't try to link in libstdc++
+ ac_test_CFLAGS="${CFLAGS+set}"
+ ac_save_CFLAGS="$CFLAGS"
+ CFLAGS='-x c++ -Wl,--gc-sections'
+
+ # Check for -Wl,--gc-sections
+ # XXX This test is broken at the moment, as symbols required for linking
+ # are now in libsupc++ (not built yet). In addition, this test has
+ # cored on solaris in the past. In addition, --gc-sections doesn't
+ # really work at the moment (keeps on discarding used sections, first
+ # .eh_frame and now some of the glibc sections for iconv).
+ # Bzzzzt. Thanks for playing, maybe next time.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld that supports -Wl,--gc-sections" >&5
+$as_echo_n "checking for ld that supports -Wl,--gc-sections... " >&6; }
+ if test "$cross_compiling" = yes; then :
+ ac_sectionLDflags=yes
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ int main(void)
+ {
+ try { throw 1; }
+ catch (...) { };
+ return 0;
+ }
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ ac_sectionLDflags=yes
+else
+ ac_sectionLDflags=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ if test "$ac_test_CFLAGS" = set; then
+ CFLAGS="$ac_save_CFLAGS"
+ else
+ # this is the suspicious part
+ CFLAGS=''
+ fi
+ if test "$ac_sectionLDflags" = "yes"; then
+ SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS"
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_sectionLDflags" >&5
+$as_echo "$ac_sectionLDflags" >&6; }
+ fi
+
+ # Set linker optimization flags.
+ if test x"$with_gnu_ld" = x"yes"; then
+ OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS"
+ fi
+
+
+
+
+
+
+ # Check whether --enable-symvers was given.
+if test "${enable_symvers+set}" = set; then :
+ enableval=$enable_symvers;
+ case "$enableval" in
+ yes|no|gnu*|sun) ;;
+ *) as_fn_error "Unknown argument to enable/disable symvers" "$LINENO" 5 ;;
+ esac
+
+else
+ enable_symvers=yes
+fi
+
+
+
+# If we never went through the LIBAT_CHECK_LINKER_FEATURES macro, then we
+# don't know enough about $LD to do tricks...
+
+
+# Turn a 'yes' into a suitable default.
+if test x$enable_symvers = xyes ; then
+ # FIXME The following test is too strict, in theory.
+ if test $enable_shared = no || test "x$LD" = x; then
+ enable_symvers=no
+ else
+ if test $with_gnu_ld = yes ; then
+ enable_symvers=gnu
+ else
+ case ${target_os} in
+ # Sun symbol versioning exists since Solaris 2.5.
+ solaris2.[5-9]* | solaris2.1[0-9]*)
+ enable_symvers=sun ;;
+ *)
+ enable_symvers=no ;;
+ esac
+ fi
+ fi
+fi
+
+# Check if 'sun' was requested on non-Solaris 2 platforms.
+if test x$enable_symvers = xsun ; then
+ case ${target_os} in
+ solaris2*)
+ # All fine.
+ ;;
+ *)
+ # Unlikely to work.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: === You have requested Sun symbol versioning, but" >&5
+$as_echo "$as_me: WARNING: === You have requested Sun symbol versioning, but" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: === you are not targetting Solaris 2." >&5
+$as_echo "$as_me: WARNING: === you are not targetting Solaris 2." >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: === Symbol versioning will be disabled." >&5
+$as_echo "$as_me: WARNING: === Symbol versioning will be disabled." >&2;}
+ enable_symvers=no
+ ;;
+ esac
+fi
+
+# Check to see if libgcc_s exists, indicating that shared libgcc is possible.
+if test $enable_symvers != no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared libgcc" >&5
+$as_echo_n "checking for shared libgcc... " >&6; }
+ ac_save_CFLAGS="$CFLAGS"
+ CFLAGS=' -lgcc_s'
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ libat_shared_libgcc=yes
+else
+ libat_shared_libgcc=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$ac_save_CFLAGS"
+ if test $libat_shared_libgcc = no; then
+ cat > conftest.c <<EOF
+int main (void) { return 0; }
+EOF
+ libat_libgcc_s_suffix=`${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
+ -shared -shared-libgcc -o conftest.so \
+ conftest.c -v 2>&1 >/dev/null \
+ | sed -n 's/^.* -lgcc_s\([^ ]*\) .*$/\1/p'`
+ rm -f conftest.c conftest.so
+ if test x${libat_libgcc_s_suffix+set} = xset; then
+ CFLAGS=" -lgcc_s$libat_libgcc_s_suffix"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ libat_shared_libgcc=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$ac_save_CFLAGS"
+ fi
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libat_shared_libgcc" >&5
+$as_echo "$libat_shared_libgcc" >&6; }
+fi
+
+# For GNU ld, we need at least this version. The format is described in
+# LIBAT_CHECK_LINKER_FEATURES above.
+libat_min_gnu_ld_version=21400
+# XXXXXXXXXXX libat_gnu_ld_version=21390
+
+# Check to see if unspecified "yes" value can win, given results above.
+# Change "yes" into either "no" or a style name.
+if test $enable_symvers != no && test $libat_shared_libgcc = yes; then
+ if test $with_gnu_ld = yes; then
+ if test $libat_gnu_ld_version -ge $libat_min_gnu_ld_version ; then
+ enable_symvers=gnu
+ elif test $libat_ld_is_gold = yes ; then
+ enable_symvers=gnu
+ else
+ # The right tools, the right setup, but too old. Fallbacks?
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: === Linker version $libat_gnu_ld_version is too old for" >&5
+$as_echo "$as_me: WARNING: === Linker version $libat_gnu_ld_version is too old for" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: === full symbol versioning support in this release of GCC." >&5
+$as_echo "$as_me: WARNING: === full symbol versioning support in this release of GCC." >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: === You would need to upgrade your binutils to version" >&5
+$as_echo "$as_me: WARNING: === You would need to upgrade your binutils to version" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: === $libat_min_gnu_ld_version or later and rebuild GCC." >&5
+$as_echo "$as_me: WARNING: === $libat_min_gnu_ld_version or later and rebuild GCC." >&2;}
+ if test $libat_gnu_ld_version -ge 21200 ; then
+ # Globbing fix is present, proper block support is not.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: === Symbol versioning will be disabled." >&5
+$as_echo "$as_me: WARNING: === Symbol versioning will be disabled." >&2;}
+ enable_symvers=no
+ else
+ # 2.11 or older.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: === Symbol versioning will be disabled." >&5
+$as_echo "$as_me: WARNING: === Symbol versioning will be disabled." >&2;}
+ enable_symvers=no
+ fi
+ fi
+ elif test $enable_symvers = sun; then
+ : All interesting versions of Sun ld support sun style symbol versioning.
+ else
+ # just fail for now
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: === You have requested some kind of symbol versioning, but" >&5
+$as_echo "$as_me: WARNING: === You have requested some kind of symbol versioning, but" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: === either you are not using a supported linker, or you are" >&5
+$as_echo "$as_me: WARNING: === either you are not using a supported linker, or you are" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: === not building a shared libgcc_s (which is required)." >&5
+$as_echo "$as_me: WARNING: === not building a shared libgcc_s (which is required)." >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: === Symbol versioning will be disabled." >&5
+$as_echo "$as_me: WARNING: === Symbol versioning will be disabled." >&2;}
+ enable_symvers=no
+ fi
+fi
+if test $enable_symvers = gnu; then
+
+$as_echo "#define LIBAT_GNU_SYMBOL_VERSIONING 1" >>confdefs.h
+
+fi
+
+ if test $enable_symvers != no; then
+ LIBAT_BUILD_VERSIONED_SHLIB_TRUE=
+ LIBAT_BUILD_VERSIONED_SHLIB_FALSE='#'
+else
+ LIBAT_BUILD_VERSIONED_SHLIB_TRUE='#'
+ LIBAT_BUILD_VERSIONED_SHLIB_FALSE=
+fi
+
+ if test $enable_symvers = gnu; then
+ LIBAT_BUILD_VERSIONED_SHLIB_GNU_TRUE=
+ LIBAT_BUILD_VERSIONED_SHLIB_GNU_FALSE='#'
+else
+ LIBAT_BUILD_VERSIONED_SHLIB_GNU_TRUE='#'
+ LIBAT_BUILD_VERSIONED_SHLIB_GNU_FALSE=
+fi
+
+ if test $enable_symvers = sun; then
+ LIBAT_BUILD_VERSIONED_SHLIB_SUN_TRUE=
+ LIBAT_BUILD_VERSIONED_SHLIB_SUN_FALSE='#'
+else
+ LIBAT_BUILD_VERSIONED_SHLIB_SUN_TRUE='#'
+ LIBAT_BUILD_VERSIONED_SHLIB_SUN_FALSE=
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: versioning on shared library symbols is $enable_symvers" >&5
+$as_echo "$as_me: versioning on shared library symbols is $enable_symvers" >&6;}
+
+
ac_config_commands="$ac_config_commands include"
ac_config_commands="$ac_config_commands src"
@@ -16170,6 +16594,18 @@ if test -z "${FFI_DEBUG_TRUE}" && test -z "${FFI_DEBUG_FALSE}"; then
as_fn_error "conditional \"FFI_DEBUG\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${LIBAT_BUILD_VERSIONED_SHLIB_TRUE}" && test -z "${LIBAT_BUILD_VERSIONED_SHLIB_FALSE}"; then
+ as_fn_error "conditional \"LIBAT_BUILD_VERSIONED_SHLIB\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${LIBAT_BUILD_VERSIONED_SHLIB_GNU_TRUE}" && test -z "${LIBAT_BUILD_VERSIONED_SHLIB_GNU_FALSE}"; then
+ as_fn_error "conditional \"LIBAT_BUILD_VERSIONED_SHLIB_GNU\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${LIBAT_BUILD_VERSIONED_SHLIB_SUN_TRUE}" && test -z "${LIBAT_BUILD_VERSIONED_SHLIB_SUN_FALSE}"; then
+ as_fn_error "conditional \"LIBAT_BUILD_VERSIONED_SHLIB_SUN\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
: ${CONFIG_STATUS=./config.status}
ac_write_fail=0
diff --git a/libffi/configure.ac b/libffi/configure.ac
index 68501d1..6205a10 100644
--- a/libffi/configure.ac
+++ b/libffi/configure.ac
@@ -355,6 +355,9 @@ else
multilib_arg=
fi
+# Check linker support.
+LIBAT_ENABLE_SYMVERS
+
AC_CONFIG_COMMANDS(include, [test -d include || mkdir include])
AC_CONFIG_COMMANDS(src, [
test -d src || mkdir src
diff --git a/libffi/include/Makefile.in b/libffi/include/Makefile.in
index c3e083b..82b25d7 100644
--- a/libffi/include/Makefile.in
+++ b/libffi/include/Makefile.in
@@ -166,6 +166,7 @@ NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
+OPT_LDFLAGS = @OPT_LDFLAGS@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
@@ -177,6 +178,7 @@ PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
+SECTION_LDFLAGS = @SECTION_LDFLAGS@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
diff --git a/libffi/libffi.map.in b/libffi/libffi.map.in
new file mode 100644
index 0000000..8bd27ef
--- /dev/null
+++ b/libffi/libffi.map.in
@@ -0,0 +1,78 @@
+#define LIBFFI_ASM
+#define LIBFFI_H
+#include <fficonfig.h>
+#include <ffitarget.h>
+
+LIBFFI_BASE_7.0 {
+ global:
+ /* Exported data variables. */
+ ffi_type_void;
+ ffi_type_uint8;
+ ffi_type_sint8;
+ ffi_type_uint16;
+ ffi_type_sint16;
+ ffi_type_uint32;
+ ffi_type_sint32;
+ ffi_type_uint64;
+ ffi_type_sint64;
+ ffi_type_float;
+ ffi_type_double;
+ ffi_type_longdouble;
+ ffi_type_pointer;
+
+ /* Exported functions. */
+ ffi_call;
+ ffi_prep_cif;
+ ffi_prep_cif_var;
+
+ ffi_raw_call;
+ ffi_ptrarray_to_raw;
+ ffi_raw_to_ptrarray;
+ ffi_raw_size;
+
+ ffi_java_raw_call;
+ ffi_java_ptrarray_to_raw;
+ ffi_java_raw_to_ptrarray;
+ ffi_java_raw_size;
+
+ /* Functions in the ffi.h header, but not exported.
+ These are listed here for documentation purposes only.
+ ffi_prep_types
+ ffi_prep_cif_core
+ */
+
+ local:
+ *;
+};
+
+#ifdef FFI_TARGET_HAS_COMPLEX_TYPE
+LIBFFI_COMPLEX_7.0 {
+ global:
+ /* Exported data variables. */
+ ffi_type_complex_float;
+ ffi_type_complex_double;
+ ffi_type_complex_longdouble;
+} LIBFFI_BASE_7.0;
+#endif
+
+#if FFI_CLOSURES
+LIBFFI_CLOSURE_7.0 {
+ global:
+ ffi_closure_alloc;
+ ffi_closure_free;
+ ffi_prep_closure;
+ ffi_prep_closure_loc;
+ ffi_prep_raw_closure;
+ ffi_prep_raw_closure_loc;
+ ffi_prep_java_raw_closure;
+ ffi_prep_java_raw_closure_loc;
+} LIBFFI_BASE_7.0;
+#endif
+
+#if FFI_GO_CLOSURES
+LIBFFI_GO_CLOSURE_7.0 {
+ global:
+ ffi_call_go;
+ ffi_prep_go_closure;
+} LIBFFI_CLOSURE_7.0;
+#endif
diff --git a/libffi/libtool-version b/libffi/libtool-version
index 6753286..dfb8b11 100644
--- a/libffi/libtool-version
+++ b/libffi/libtool-version
@@ -3,4 +3,4 @@
# a separate file so that version updates don't involve re-running
# automake.
# CURRENT:REVISION:AGE
-4:1:0
+7:0:0
diff --git a/libffi/man/Makefile.in b/libffi/man/Makefile.in
index 6d5fff3..be296a5 100644
--- a/libffi/man/Makefile.in
+++ b/libffi/man/Makefile.in
@@ -164,6 +164,7 @@ NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
+OPT_LDFLAGS = @OPT_LDFLAGS@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
@@ -175,6 +176,7 @@ PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
+SECTION_LDFLAGS = @SECTION_LDFLAGS@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
diff --git a/libffi/src/aarch64/ffitarget.h b/libffi/src/aarch64/ffitarget.h
index 2862ec7..34200ad 100644
--- a/libffi/src/aarch64/ffitarget.h
+++ b/libffi/src/aarch64/ffitarget.h
@@ -29,6 +29,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
#ifndef LIBFFI_ASM
#ifdef __ILP32__
#define FFI_SIZEOF_ARG 8
+#define FFI_SIZEOF_JAVA_RAW 4
typedef unsigned long long ffi_arg;
typedef signed long long ffi_sarg;
#else
diff --git a/libffi/testsuite/Makefile.in b/libffi/testsuite/Makefile.in
index a65de37..0e24420 100644
--- a/libffi/testsuite/Makefile.in
+++ b/libffi/testsuite/Makefile.in
@@ -135,6 +135,7 @@ NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
+OPT_LDFLAGS = @OPT_LDFLAGS@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
@@ -146,6 +147,7 @@ PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
+SECTION_LDFLAGS = @SECTION_LDFLAGS@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
index 4020e23..2a13862 100644
--- a/libgcc/ChangeLog
+++ b/libgcc/ChangeLog
@@ -1,3 +1,63 @@
+2016-04-11 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/70381
+ * configure.ac (powerpc*-*-linux*): Rework tests to build
+ __float128 emulation routines to not depend on using #pragma GCC
+ target to enable -mfloat128.
+ * configure: Regnerate.
+
+2016-04-04 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR target/67172
+ * libgcc2.c (L__main): Undefine __LIBGCC_EH_FRAME_SECTION_NAME__ if
+ __MINGW32__ is defined.
+
+2016-03-28 James Bowman <james.bowman@ftdichip.com>
+
+ * libgcc/config/ft32/lib1funcs.S (*divsi3, *modsi3): New.
+
+2016-03-22 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR libgcc/70363
+ * config/rs6000/extendkftf2-sw.c (__extendkftf2_sw): If libgcc was
+ built with an assembler that does not support ISA 3.0
+ instructions, rename __extendkftf2_sw to __extendkftf2.
+
+2016-03-16 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ PR target/38239
+ * config/sol2/gmon.c [__i386__] (_mcount): Save and restore
+ call-clobbered registers.
+ (internal_mcount): Remove __i386__ handling.
+
+2016-02-26 Joel Sherrill <joel@rtems.org>
+
+ * config.host: Add x86_64-*-rtems*.
+
+2016-02-26 Joel Sherrill <joel@rtems.org>
+
+ * libgcc/config.host: Add aarch64-*-rtems*.
+
+2016-02-26 Paul E. Murphy <murphyp@linux.vnet.ibm.com>
+ Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/sfp-machine.h (_FP_DECL_EX): Declare _fpsr as a
+ union of u64 and double.
+ (FP_TRAPPING_EXCEPTIONS): Return a bitmask of trapping exceptions.
+ (FP_INIT_ROUNDMODE): Read the fpscr instead of writing a mystery
+ value.
+ (FP_ROUNDMODE): Update the usage of _fpscr.
+
+2016-02-25 Ilya Verbin <ilya.verbin@intel.com>
+
+ PR driver/68463
+ * Makefile.in (crtoffloadtable$(objext)): New rule.
+ * configure.ac (extra_parts): Add crtoffloadtable$(objext) if
+ enable_offload_targets is not empty.
+ * configure: Regenerate.
+ * offloadstuff.c: Move __OFFLOAD_TABLE__ from crtoffloadend to
+ crtoffloadtable.
+
2016-02-17 Max Filippov <jcmvbkbc@gmail.com>
* config/xtensa/ieee754-df.S (__muldf3_aux, __divdf3_aux): Add
diff --git a/libgcc/Makefile.in b/libgcc/Makefile.in
index 570b1a7..f09b39b 100644
--- a/libgcc/Makefile.in
+++ b/libgcc/Makefile.in
@@ -995,12 +995,16 @@ crtbeginT$(objext): $(srcdir)/crtstuff.c
$(crt_compile) $(CRTSTUFF_T_CFLAGS) -c $< -DCRT_BEGIN -DCRTSTUFFT_O
# crtoffloadbegin and crtoffloadend contain symbols, that mark the begin and
-# the end of tables with addresses, required for offloading.
+# the end of tables with addresses, required for offloading. crtoffloadtable
+# contains the array with addresses of those symbols.
crtoffloadbegin$(objext): $(srcdir)/offloadstuff.c
$(crt_compile) $(CRTSTUFF_T_CFLAGS) -c $< -DCRT_BEGIN
crtoffloadend$(objext): $(srcdir)/offloadstuff.c
$(crt_compile) $(CRTSTUFF_T_CFLAGS) -c $< -DCRT_END
+
+crtoffloadtable$(objext): $(srcdir)/offloadstuff.c
+ $(crt_compile) $(CRTSTUFF_T_CFLAGS) -c $< -DCRT_TABLE
endif
ifeq ($(enable_vtable_verify),yes)
diff --git a/libgcc/config.host b/libgcc/config.host
index ef7dfd0..b61a579 100644
--- a/libgcc/config.host
+++ b/libgcc/config.host
@@ -327,7 +327,7 @@ i[34567]86-*-mingw* | x86_64-*-mingw*)
esac
case ${host} in
-aarch64*-*-elf)
+aarch64*-*-elf | aarch64*-*-rtems*)
extra_parts="$extra_parts crtbegin.o crtend.o crti.o crtn.o"
extra_parts="$extra_parts crtfastmath.o"
tmake_file="${tmake_file} ${cpu_type}/t-aarch64"
@@ -577,7 +577,7 @@ i[34567]86-*-elfiamcu)
i[34567]86-*-elf*)
tmake_file="$tmake_file i386/t-crtstuff t-crtstuff-pic t-libgcc-pic"
;;
-x86_64-*-elf*)
+x86_64-*-elf* | x86_64-*-rtems*)
tmake_file="$tmake_file i386/t-crtstuff t-crtstuff-pic t-libgcc-pic"
;;
i[34567]86-*-dragonfly*)
diff --git a/libgcc/config/ft32/lib1funcs.S b/libgcc/config/ft32/lib1funcs.S
index 6d52af7..a6b0478 100644
--- a/libgcc/config/ft32/lib1funcs.S
+++ b/libgcc/config/ft32/lib1funcs.S
@@ -25,8 +25,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
# for implementation details of all except division which is detailed below
#
+#ifdef L_fp_tools
// .global __cmpsf2_
-
nan: .long 0x7FFFFFFF # also abs mask
inf: .long 0x7F800000
sign_mask: .long 0x80000000
@@ -37,6 +37,14 @@ smallest_norm: .long 0x00800000 # implicit bit
high_FF: .long 0xFF000000
high_uint: .long 0xFFFFFFFF
+ntz_table:
+ .byte 32,0,1,12,2,6,0,13,3,0,7,0,0,0,0,14
+ .byte 10,4,0,0,8,0,0,25,0,0,0,0,0,21,27,15
+ .byte 31,11,5,0,0,0,0,0,9,0,0,24,0,0,20,26
+ .byte 30,0,0,0,0,23,0,19,29,0,22,18,28,17,16,0
+
+#endif
+
# Supply a few 'missing' instructions
# not
@@ -87,12 +95,6 @@ high_uint: .long 0xFFFFFFFF
lpmi.b \x, \x, 0
.endm
-ntz_table:
- .byte 32,0,1,12,2,6,0,13,3,0,7,0,0,0,0,14
- .byte 10,4,0,0,8,0,0,25,0,0,0,0,0,21,27,15
- .byte 31,11,5,0,0,0,0,0,9,0,0,24,0,0,20,26
- .byte 30,0,0,0,0,23,0,19,29,0,22,18,28,17,16,0
-
# calculate leading zero count
.macro nlz x, scr
flip \x, \x, 31
@@ -503,6 +505,9 @@ mul_z0:
## for implementation details
+
+
+#ifdef L_divsf3
dc_1: .long 0xffffe7d7
dc_2: .long 0xffffffe8
dc_3: .long 0xffbad86f
@@ -517,9 +522,6 @@ dc_11: .long 0x0452b1bf
dc_12: .long 0xFFFFFFC0
spec_val_test: .long 0x7F7FFFFF
-
-
-#ifdef L_divsf3
.global __divsf3
__divsf3:
push $r13
@@ -869,6 +871,7 @@ float_not_zero2:
return
#endif
+#if 0
##########################################################################
##########################################################################
## float compare
@@ -913,7 +916,74 @@ cmp_is_gt:
cmp_is_eq:
ldk $r0, 0
return
+#endif
+#ifdef L_udivsi3
+.global __udivsi3
+__udivsi3:
+ # $r0 is dividend
+ # $r1 is divisor
+ ldk $r2,0
+ push $r28
+ ldk $r28,-32
+0:
+ lshr $r3,$r0,31 # Shift $r2:$r0 left one
+ ashl $r0,$r0,1
+ ashl $r2,$r2,1
+ or $r2,$r2,$r3
+ cmp $r2,$r1
+ jmpc b,1f
+2:
+ sub $r2,$r2,$r1
+ add $r0,$r0,1
+1:
+ add $r28,$r28,1
+ jmpx 31,$r28,1,0b
+ pop $r28
+ # $r0: quotient
+ # $r2: remainder
+ return
+#endif
+#ifdef L_umodsi3
+.global __umodsi3
+__umodsi3:
+ call __udivsi3
+ move $r0,$r2
+ return
+#endif
+#ifdef L_divsi3
+.global __divsi3
+__divsi3:
+ xor $r5,$r0,$r1 # $r5 is sign of result
+ ashr $r2,$r0,31 # $r0 = abs($r0)
+ xor $r0,$r0,$r2
+ sub $r0,$r0,$r2
+ ashr $r2,$r1,31 # $r1 = abs($r1)
+ xor $r1,$r1,$r2
+ sub $r1,$r1,$r2
+ call __udivsi3
+ ashr $r5,$r5,31
+ xor $r0,$r0,$r5
+ sub $r0,$r0,$r5
+ return
+
+#endif
+#ifdef L_modsi3
+.global __modsi3
+__modsi3:
+ move $r5,$r0 # $r5 is sign of result
+ ashr $r2,$r0,31 # $r0 = abs($r0)
+ xor $r0,$r0,$r2
+ sub $r0,$r0,$r2
+ ashr $r2,$r1,31 # $r1 = abs($r1)
+ xor $r1,$r1,$r2
+ sub $r1,$r1,$r2
+ call __umodsi3
+ ashr $r5,$r5,31
+ xor $r0,$r0,$r5
+ sub $r0,$r0,$r5
+ return
+#endif
diff --git a/libgcc/config/ft32/t-ft32 b/libgcc/config/ft32/t-ft32
index 8360bbf..33f26db 100644
--- a/libgcc/config/ft32/t-ft32
+++ b/libgcc/config/ft32/t-ft32
@@ -1,3 +1,7 @@
+LIB1ASMSRC = ft32/lib1funcs.S
+LIB1ASMFUNCS = \
+ _udivsi3 _divsi3 _umodsi3 _modsi3
+
LIB2ADD = $(srcdir)/config/ft32/epilog.S $(srcdir)/config/ft32/prolog.S
crti-hw.o: $(srcdir)/config/ft32/crti-hw.S
diff --git a/libgcc/config/rs6000/extendkftf2-sw.c b/libgcc/config/rs6000/extendkftf2-sw.c
index 3be88bf..2ce2f7d 100644
--- a/libgcc/config/rs6000/extendkftf2-sw.c
+++ b/libgcc/config/rs6000/extendkftf2-sw.c
@@ -39,6 +39,10 @@
#include "soft-fp.h"
#include "quad-float128.h"
+#ifndef FLOAT128_HW_INSNS
+#define __extendkftf2_sw __extendkftf2
+#endif
+
IBM128_TYPE
__extendkftf2_sw (__float128 value)
{
diff --git a/libgcc/config/rs6000/sfp-machine.h b/libgcc/config/rs6000/sfp-machine.h
index 75d5e1a..ab028fe 100644
--- a/libgcc/config/rs6000/sfp-machine.h
+++ b/libgcc/config/rs6000/sfp-machine.h
@@ -130,10 +130,14 @@ void __sfp_handle_exceptions (int);
if (__builtin_expect (_fex, 0)) \
__sfp_handle_exceptions (_fex); \
} while (0);
-/* A set bit indicates an exception is masked and a clear bit indicates it is
- trapping. */
-# define FP_TRAPPING_EXCEPTIONS (~_fpscr & (FP_EX_ALL >> 22))
+/* The FP_EX_* bits track whether the exception has occurred. This macro
+ must set the FP_EX_* bits of those exceptions which are configured to
+ trap. The FPSCR bit which indicates this is 22 ISA bits above the
+ respective FP_EX_* bit. Note, the ISA labels bits from msb to lsb,
+ so 22 ISA bits above is 22 bits below when counted from the lsb. */
+# define FP_TRAPPING_EXCEPTIONS ((_fpscr.i << 22) & FP_EX_ALL)
+
# define FP_RND_NEAREST 0x0
# define FP_RND_ZERO 0x1
# define FP_RND_PINF 0x2
@@ -141,16 +145,16 @@ void __sfp_handle_exceptions (int);
# define FP_RND_MASK 0x3
# define _FP_DECL_EX \
- unsigned long long _fpscr __attribute__ ((unused)) = FP_RND_NEAREST
-
+ union { unsigned long long i; double d; } _fpscr __attribute__ ((unused)) = \
+ { .i = FP_RND_NEAREST }
+
#define FP_INIT_ROUNDMODE \
do { \
- __asm__ __volatile__ ("mtfsf 255, %0" \
- : \
- : "f" (_fpscr)); \
+ __asm__ __volatile__ ("mffs %0" \
+ : "=f" (_fpscr.d)); \
} while (0)
-# define FP_ROUNDMODE (_fpscr & FP_RND_MASK)
+# define FP_ROUNDMODE (_fpscr.i & FP_RND_MASK)
#endif /* !__FLOAT128__ */
/* Define ALIASNAME as a strong alias for NAME. */
diff --git a/libgcc/config/sol2/gmon.c b/libgcc/config/sol2/gmon.c
index 81a0346..652fd1e 100644
--- a/libgcc/config/sol2/gmon.c
+++ b/libgcc/config/sol2/gmon.c
@@ -44,11 +44,7 @@
extern void monstartup (char *, char *);
extern void _mcleanup (void);
-#ifdef __i386__
-static void internal_mcount (void) __attribute__ ((used));
-#else
static void internal_mcount (char *, unsigned short *) __attribute__ ((used));
-#endif
static void moncontrol (int);
struct phdr {
@@ -223,8 +219,19 @@ _mcleanup (void)
/* Solaris 2 libraries use _mcount. */
#if defined __i386__
asm(".globl _mcount\n"
+ " .type _mcount, @function\n"
"_mcount:\n"
- " jmp internal_mcount\n");
+ /* Save and restore the call-clobbered registers. */
+ " pushl %eax\n"
+ " pushl %ecx\n"
+ " pushl %edx\n"
+ " movl 12(%esp), %edx\n"
+ " movl 4(%ebp), %eax\n"
+ " call internal_mcount\n"
+ " popl %edx\n"
+ " popl %ecx\n"
+ " popl %eax\n"
+ " ret\n");
#elif defined __x86_64__
/* See GLIBC for additional information about this technique. */
asm(".globl _mcount\n"
@@ -299,32 +306,13 @@ asm(".global _mcount\n"
#endif
static void
-#ifdef __i386__
-internal_mcount (void)
-#else
internal_mcount (char *selfpc, unsigned short *frompcindex)
-#endif
{
struct tostruct *top;
struct tostruct *prevtop;
long toindex;
static char already_setup;
-#ifdef __i386__
- char *selfpc;
- unsigned short *frompcindex;
-
- /* Find the return address for mcount and the return address for mcount's
- caller. */
-
- /* selfpc = pc pushed by mcount call.
- This identifies the function that was just entered. */
- selfpc = (void *) __builtin_return_address (0);
- /* frompcindex = pc in preceding frame.
- This identifies the caller of the function just entered. */
- frompcindex = (void *) __builtin_return_address (1);
-#endif
-
/* Only necessary without the Solaris CRTs or a proper gcrt1.o, otherwise
crtpg.o or gcrt1.o take care of that.
diff --git a/libgcc/configure b/libgcc/configure
index de8c13c..e7d6c75 100644
--- a/libgcc/configure
+++ b/libgcc/configure
@@ -4767,16 +4767,20 @@ esac
esac
case ${host} in
+# At present, we cannot turn -mfloat128 on via #pragma GCC target,
+# so just check if we have VSX (ISA 2.06) support to build the
+# software libraries, and whether the assembler can handle xsaddqp
+# for hardware support.
powerpc*-*-linux*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the PowerPC compiler can do __float128" >&5
-$as_echo_n "checking whether the PowerPC compiler can do __float128... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PowerPC ISA 2.06 to build __float128 libraries" >&5
+$as_echo_n "checking for PowerPC ISA 2.06 to build __float128 libraries... " >&6; }
if test "${libgcc_cv_powerpc_float128+set}" = set; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#pragma GCC target ("vsx,float128")
- __float128 add (__float128 *a) { return *a + *(a+1); }
+#pragma GCC target ("vsx")
+ vector double dadd (vector double a, vector double b) { return a + b; }
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
libgcc_cv_powerpc_float128=yes
@@ -4788,21 +4792,21 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libgcc_cv_powerpc_float128" >&5
$as_echo "$libgcc_cv_powerpc_float128" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the PowerPC compiler can do hardware __float128" >&5
-$as_echo_n "checking whether the PowerPC compiler can do hardware __float128... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PowerPC ISA 3.0 to build hardware __float128 libraries" >&5
+$as_echo_n "checking for PowerPC ISA 3.0 to build hardware __float128 libraries... " >&6; }
if test "${libgcc_cv_powerpc_float128_hw+set}" = set; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#pragma GCC target ("cpu=power9,float128,float128-hardware")
+#pragma GCC target ("vsx,power9-vector")
#include <sys/auxv.h>
#ifndef AT_PLATFORM
#error "AT_PLATFORM is not defined"
#endif
- __float128 add (__float128 a, __float128 b)
+ vector unsigned char (vector unsigned char a, vector unsigned char b)
{
- __float128 ret;
+ vector unsigned char ret;
__asm__ ("xsaddqp %0,%1,%2" : "=v" (ret) : "v" (a), "v" (b));
return ret;
}
@@ -4835,7 +4839,7 @@ fi
if test x"$enable_offload_targets" != x; then
- extra_parts="${extra_parts} crtoffloadbegin.o crtoffloadend.o"
+ extra_parts="${extra_parts} crtoffloadbegin.o crtoffloadend.o crtoffloadtable.o"
fi
# Check if Solaris/x86 linker supports ZERO terminator unwind entries.
diff --git a/libgcc/configure.ac b/libgcc/configure.ac
index 860a5f5..269997f 100644
--- a/libgcc/configure.ac
+++ b/libgcc/configure.ac
@@ -374,26 +374,30 @@ esac
esac
case ${host} in
+# At present, we cannot turn -mfloat128 on via #pragma GCC target,
+# so just check if we have VSX (ISA 2.06) support to build the
+# software libraries, and whether the assembler can handle xsaddqp
+# for hardware support.
powerpc*-*-linux*)
- AC_CACHE_CHECK([whether the PowerPC compiler can do __float128],
+ AC_CACHE_CHECK([for PowerPC ISA 2.06 to build __float128 libraries],
[libgcc_cv_powerpc_float128],
[AC_COMPILE_IFELSE(
- [#pragma GCC target ("vsx,float128")
- __float128 add (__float128 *a) { return *a + *(a+1); }],
+ [#pragma GCC target ("vsx")
+ vector double dadd (vector double a, vector double b) { return a + b; }],
[libgcc_cv_powerpc_float128=yes],
[libgcc_cv_powerpc_float128=no])])
- AC_CACHE_CHECK([whether the PowerPC compiler can do hardware __float128],
+ AC_CACHE_CHECK([for PowerPC ISA 3.0 to build hardware __float128 libraries],
[libgcc_cv_powerpc_float128_hw],
[AC_COMPILE_IFELSE(
- [#pragma GCC target ("cpu=power9,float128,float128-hardware")
+ [#pragma GCC target ("vsx,power9-vector")
#include <sys/auxv.h>
#ifndef AT_PLATFORM
#error "AT_PLATFORM is not defined"
#endif
- __float128 add (__float128 a, __float128 b)
+ vector unsigned char (vector unsigned char a, vector unsigned char b)
{
- __float128 ret;
+ vector unsigned char ret;
__asm__ ("xsaddqp %0,%1,%2" : "=v" (ret) : "v" (a), "v" (b));
return ret;
}
@@ -418,7 +422,7 @@ AC_SUBST(accel_dir_suffix)
AC_SUBST(real_host_noncanonical)
if test x"$enable_offload_targets" != x; then
- extra_parts="${extra_parts} crtoffloadbegin.o crtoffloadend.o"
+ extra_parts="${extra_parts} crtoffloadbegin.o crtoffloadend.o crtoffloadtable.o"
fi
# Check if Solaris/x86 linker supports ZERO terminator unwind entries.
diff --git a/libgcc/libgcc2.c b/libgcc/libgcc2.c
index 340d1f7..6bc9a2f 100644
--- a/libgcc/libgcc2.c
+++ b/libgcc/libgcc2.c
@@ -2209,7 +2209,12 @@ TRANSFER_FROM_TRAMPOLINE
#if !defined (HAS_INIT_SECTION) || !defined (OBJECT_FORMAT_ELF)
/* Some ELF crosses use crtstuff.c to provide __CTOR_LIST__, but use this
- code to run constructors. In that case, we need to handle EH here, too. */
+ code to run constructors. In that case, we need to handle EH here, too.
+ But MINGW32 is special because it handles CRTSTUFF and EH on its own. */
+
+#ifdef __MINGW32__
+#undef __LIBGCC_EH_FRAME_SECTION_NAME__
+#endif
#ifdef __LIBGCC_EH_FRAME_SECTION_NAME__
#include "unwind-dw2-fde.h"
diff --git a/libgcc/offloadstuff.c b/libgcc/offloadstuff.c
index 45e89cf..4ab6397 100644
--- a/libgcc/offloadstuff.c
+++ b/libgcc/offloadstuff.c
@@ -40,23 +40,22 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include "tm.h"
#include "libgcc_tm.h"
+#if defined(HAVE_GAS_HIDDEN) && ENABLE_OFFLOADING == 1
+
#define OFFLOAD_FUNC_TABLE_SECTION_NAME ".gnu.offload_funcs"
#define OFFLOAD_VAR_TABLE_SECTION_NAME ".gnu.offload_vars"
#ifdef CRT_BEGIN
-#if defined(HAVE_GAS_HIDDEN) && defined(ENABLE_OFFLOADING)
const void *const __offload_func_table[0]
__attribute__ ((__used__, visibility ("hidden"),
section (OFFLOAD_FUNC_TABLE_SECTION_NAME))) = { };
const void *const __offload_var_table[0]
__attribute__ ((__used__, visibility ("hidden"),
section (OFFLOAD_VAR_TABLE_SECTION_NAME))) = { };
-#endif
#elif defined CRT_END
-#if defined(HAVE_GAS_HIDDEN) && defined(ENABLE_OFFLOADING)
const void *const __offload_funcs_end[0]
__attribute__ ((__used__, visibility ("hidden"),
section (OFFLOAD_FUNC_TABLE_SECTION_NAME))) = { };
@@ -64,8 +63,12 @@ const void *const __offload_vars_end[0]
__attribute__ ((__used__, visibility ("hidden"),
section (OFFLOAD_VAR_TABLE_SECTION_NAME))) = { };
+#elif defined CRT_TABLE
+
extern const void *const __offload_func_table[];
extern const void *const __offload_var_table[];
+extern const void *const __offload_funcs_end[];
+extern const void *const __offload_vars_end[];
const void *const __OFFLOAD_TABLE__[]
__attribute__ ((__visibility__ ("hidden"))) =
@@ -73,8 +76,9 @@ const void *const __OFFLOAD_TABLE__[]
&__offload_func_table, &__offload_funcs_end,
&__offload_var_table, &__offload_vars_end
};
+
+#else /* ! CRT_BEGIN && ! CRT_END && ! CRT_TABLE */
+#error "One of CRT_BEGIN, CRT_END or CRT_TABLE must be defined."
#endif
-#else /* ! CRT_BEGIN && ! CRT_END */
-#error "One of CRT_BEGIN or CRT_END must be defined."
#endif
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 436b598..688a16e 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,25 @@
+2016-03-30 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+ Dominique d'Humieres <dominiq@lps.ens.fr>
+
+ PR libgfortran/70235
+ * io/write_float.def: Fix PF format for negative values of the scale
+ factor.
+
+2016-03-28 Alessandro Fanfarillo <fanfarillo.gcc@gmail.com>
+
+ * caf/libcaf.h: caf_stop_numeric and caf_stop_str prototype.
+ * caf/single.c: _gfortran_caf_stop_numeric and
+ _gfortran_caf_stop_str implementation.
+
+2016-02-23 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR libgfortran/69456
+ * io/list_read.c (read_real): If digit is missing from exponent issue
+ an error. (parse_real): Likewise and adjusted error message to clarify
+ it is part of a complex number.
+ (nml_read_obj): Bump item count and add comment that this is used to
+ identify which item in a namelist read has a problem.
+
2016-02-17 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/69651
diff --git a/libgfortran/caf/libcaf.h b/libgfortran/caf/libcaf.h
index 427c8bf..01a33f9 100644
--- a/libgfortran/caf/libcaf.h
+++ b/libgfortran/caf/libcaf.h
@@ -105,6 +105,10 @@ void _gfortran_caf_sync_all (int *, char *, int);
void _gfortran_caf_sync_memory (int *, char *, int);
void _gfortran_caf_sync_images (int, int[], int *, char *, int);
+void _gfortran_caf_stop_numeric (int32_t)
+ __attribute__ ((noreturn));
+void _gfortran_caf_stop_str (const char *, int32_t)
+ __attribute__ ((noreturn));
void _gfortran_caf_error_stop_str (const char *, int32_t)
__attribute__ ((noreturn));
void _gfortran_caf_error_stop (int32_t) __attribute__ ((noreturn));
diff --git a/libgfortran/caf/single.c b/libgfortran/caf/single.c
index 23278dc..f726537 100644
--- a/libgfortran/caf/single.c
+++ b/libgfortran/caf/single.c
@@ -204,6 +204,23 @@ _gfortran_caf_sync_images (int count __attribute__ ((unused)),
*stat = 0;
}
+void
+_gfortran_caf_stop_numeric(int32_t stop_code)
+{
+ fprintf (stderr, "STOP %d\n", stop_code);
+ exit (0);
+}
+
+void
+_gfortran_caf_stop_str(const char *string, int32_t len)
+{
+ fputs ("STOP ", stderr);
+ while (len--)
+ fputc (*(string++), stderr);
+ fputs ("\n", stderr);
+
+ exit (0);
+}
void
_gfortran_caf_error_stop_str (const char *string, int32_t len)
diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c
index bebdd8c..e24b392 100644
--- a/libgfortran/io/list_read.c
+++ b/libgfortran/io/list_read.c
@@ -1374,7 +1374,7 @@ parse_real (st_parameter_dt *dtp, void *buffer, int length)
exp2:
if (!isdigit (c))
- goto bad;
+ goto bad_exponent;
push_char (dtp, c);
@@ -1472,6 +1472,8 @@ parse_real (st_parameter_dt *dtp, void *buffer, int length)
if (nml_bad_return (dtp, c))
return 0;
+ bad_exponent:
+
free_saved (dtp);
if (c == EOF)
{
@@ -1482,8 +1484,8 @@ parse_real (st_parameter_dt *dtp, void *buffer, int length)
else if (c != '\n')
eat_line (dtp);
- snprintf (message, MSGLEN, "Bad floating point number for item %d",
- dtp->u.p.item_count);
+ snprintf (message, MSGLEN, "Bad complex floating point "
+ "number for item %d", dtp->u.p.item_count);
free_line (dtp);
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
@@ -1814,7 +1816,8 @@ read_real (st_parameter_dt *dtp, void * dest, int length)
exp2:
if (!isdigit (c))
- goto bad_real;
+ goto bad_exponent;
+
push_char (dtp, c);
for (;;)
@@ -1983,6 +1986,8 @@ read_real (st_parameter_dt *dtp, void * dest, int length)
if (nml_bad_return (dtp, c))
return;
+ bad_exponent:
+
free_saved (dtp);
if (c == EOF)
{
@@ -2810,6 +2815,7 @@ nml_read_obj (st_parameter_dt *dtp, namelist_info * nl, index_type offset,
if (dtp->u.p.nml_read_error || !nl->touched)
return true;
+ dtp->u.p.item_count++; /* Used in error messages. */
dtp->u.p.repeat_count = 0;
eat_spaces (dtp);
diff --git a/libgfortran/io/write_float.def b/libgfortran/io/write_float.def
index d427019..d32440f 100644
--- a/libgfortran/io/write_float.def
+++ b/libgfortran/io/write_float.def
@@ -184,9 +184,6 @@ output_float (st_parameter_dt *dtp, const fnode *f, char *buffer, size_t size,
memmove (digits + nbefore, digits + nbefore + 1, p);
digits[nbefore + p] = '.';
nbefore += p;
- nafter = d - p;
- if (nafter < 0)
- nafter = 0;
nafter = d;
nzero = 0;
}
@@ -204,12 +201,27 @@ output_float (st_parameter_dt *dtp, const fnode *f, char *buffer, size_t size,
{
nzero = -(nbefore + p);
memmove (digits + 1, digits, nbefore);
- digits++;
- nafter = d + nbefore;
+ nafter = d - nzero;
+ if (nafter == 0 && d > 0)
+ {
+ /* This is needed to get the correct rounding. */
+ memmove (digits + 1, digits, ndigits - 1);
+ digits[1] = '0';
+ nafter = 1;
+ nzero = d - 1;
+ }
+ else if (nafter < 0)
+ {
+ /* Reset digits to 0 in order to get correct rounding
+ towards infinity. */
+ for (i = 0; i < ndigits; i++)
+ digits[i] = '0';
+ digits[ndigits - 1] = '1';
+ nafter = d;
+ nzero = 0;
+ }
nbefore = 0;
}
- if (nzero > d)
- nzero = d;
}
}
else
diff --git a/libgo/go/reflect/all_test.go b/libgo/go/reflect/all_test.go
index 595d690..b8e7cd8 100644
--- a/libgo/go/reflect/all_test.go
+++ b/libgo/go/reflect/all_test.go
@@ -1478,6 +1478,12 @@ func TestFunc(t *testing.T) {
if i != 10 || j != 20 || k != 30 || l != (two{40, 50}) || m != 60 || n != 70 || o != 80 {
t.Errorf("Call returned %d, %d, %d, %v, %d, %g, %d; want 10, 20, 30, [40, 50], 60, 70, 80", i, j, k, l, m, n, o)
}
+
+ for i, v := range ret {
+ if v.CanAddr() {
+ t.Errorf("result %d is addressable", i)
+ }
+ }
}
type emptyStruct struct{}
diff --git a/libgo/go/reflect/value.go b/libgo/go/reflect/value.go
index 0f0eb84..75944a6 100644
--- a/libgo/go/reflect/value.go
+++ b/libgo/go/reflect/value.go
@@ -433,9 +433,11 @@ func (v Value) call(op string, in []Value) []Value {
ret := make([]Value, nout)
results := make([]unsafe.Pointer, nout)
for i := 0; i < nout; i++ {
- v := New(t.Out(i))
- results[i] = unsafe.Pointer(v.Pointer())
- ret[i] = Indirect(v)
+ tv := t.Out(i)
+ v := New(tv)
+ results[i] = v.pointer()
+ fl := flagIndir | flag(tv.Kind())
+ ret[i] = Value{tv.common(), v.pointer(), fl}
}
var pp *unsafe.Pointer
diff --git a/libgo/go/syscall/socket.go b/libgo/go/syscall/socket.go
index d96a717..93bbc38 100644
--- a/libgo/go/syscall/socket.go
+++ b/libgo/go/syscall/socket.go
@@ -251,6 +251,13 @@ func GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, error) {
return &value, err
}
+func GetsockoptICMPv6Filter(fd, level, opt int) (*ICMPv6Filter, error) {
+ var value ICMPv6Filter
+ vallen := Socklen_t(SizeofICMPv6Filter)
+ err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
+ return &value, err
+}
+
//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen Socklen_t) (err error)
//setsockopt(s _C_int, level _C_int, optname _C_int, val *byte, vallen Socklen_t) _C_int
diff --git a/libgo/go/syscall/socket_bsd.go b/libgo/go/syscall/socket_bsd.go
index 72d7180..c8da102 100644
--- a/libgo/go/syscall/socket_bsd.go
+++ b/libgo/go/syscall/socket_bsd.go
@@ -80,3 +80,10 @@ func BindToDevice(fd int, device string) (err error) {
func anyToSockaddrOS(rsa *RawSockaddrAny) (Sockaddr, error) {
return nil, EAFNOSUPPORT
}
+
+func GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) {
+ var value IPv6MTUInfo
+ vallen := Socklen_t(SizeofIPv6MTUInfo)
+ err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
+ return &value, err
+}
diff --git a/libgo/go/syscall/socket_linux.go b/libgo/go/syscall/socket_linux.go
index 5064e77..3c3098e 100644
--- a/libgo/go/syscall/socket_linux.go
+++ b/libgo/go/syscall/socket_linux.go
@@ -168,6 +168,20 @@ func anyToSockaddrOS(rsa *RawSockaddrAny) (Sockaddr, error) {
return nil, EAFNOSUPPORT
}
+func GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) {
+ var value IPv6MTUInfo
+ vallen := Socklen_t(SizeofIPv6MTUInfo)
+ err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
+ return &value, err
+}
+
+func GetsockoptUcred(fd, level, opt int) (*Ucred, error) {
+ var value Ucred
+ vallen := Socklen_t(SizeofUcred)
+ err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
+ return &value, err
+}
+
//sysnb EpollCreate(size int) (fd int, err error)
//epoll_create(size _C_int) _C_int
diff --git a/libgo/mksysinfo.sh b/libgo/mksysinfo.sh
index 9062c2c..1271e1a 100755
--- a/libgo/mksysinfo.sh
+++ b/libgo/mksysinfo.sh
@@ -870,6 +870,14 @@ if ! grep 'type ICMPv6Filter ' ${OUT} > /dev/null 2>&1; then
echo 'type ICMPv6Filter struct { Data [8]uint32 }' >> ${OUT}
fi
+# The ip6_mtuinfo struct.
+grep '^type _ip6_mtuinfo ' gen-sysinfo.go | \
+ sed -e 's/_ip6_mtuinfo/IPv6MTUInfo/' \
+ -e 's/ip6m_addr/Addr/' \
+ -e 's/_sockaddr_in6/RawSockaddrInet6/' \
+ -e 's/ip6m_mtu/Mtu/' \
+ >> ${OUT}
+
# Try to guess the type to use for fd_set.
fd_set=`grep '^type _fd_set ' gen-sysinfo.go || true`
fds_bits_type="_C_long"
@@ -1464,7 +1472,7 @@ set cmsghdr Cmsghdr ip_mreq IPMreq ip_mreqn IPMreqn ipv6_mreq IPv6Mreq \
msghdr Msghdr nlattr NlAttr nlmsgerr NlMsgerr nlmsghdr NlMsghdr \
rtattr RtAttr rtgenmsg RtGenmsg rtmsg RtMsg rtnexthop RtNexthop \
sock_filter SockFilter sock_fprog SockFprog ucred Ucred \
- icmp6_filter ICMPv6Filter
+ icmp6_filter ICMPv6Filter ip6_mtuinfo IPv6MTUInfo
while test $# != 0; do
nc=$1
ngo=$2
diff --git a/libgo/runtime/go-cgo.c b/libgo/runtime/go-cgo.c
index a36eac9..610bcf5e 100644
--- a/libgo/runtime/go-cgo.c
+++ b/libgo/runtime/go-cgo.c
@@ -41,6 +41,8 @@ syscall_cgocall ()
if (runtime_needextram && runtime_cas (&runtime_needextram, 1, 0))
runtime_newextram ();
+ runtime_lockOSThread();
+
m = runtime_m ();
++m->ncgocall;
g = runtime_g ();
@@ -70,6 +72,8 @@ syscall_cgocalldone ()
_cgo_panic will already have exited syscall mode. */
if (g->status == Gsyscall)
runtime_exitsyscall ();
+
+ runtime_unlockOSThread();
}
/* Call back from C/C++ code to Go code. */
diff --git a/libgo/runtime/proc.c b/libgo/runtime/proc.c
index 9ba199b..c6ac972 100644
--- a/libgo/runtime/proc.c
+++ b/libgo/runtime/proc.c
@@ -2042,7 +2042,7 @@ doentersyscall()
m->mcache = nil;
m->p->m = nil;
runtime_atomicstore(&m->p->status, Psyscall);
- if(runtime_sched.gcwaiting) {
+ if(runtime_atomicload(&runtime_sched.gcwaiting)) {
runtime_lock(&runtime_sched);
if (runtime_sched.stopwait > 0 && runtime_cas(&m->p->status, Psyscall, Pgcstop)) {
if(--runtime_sched.stopwait == 0)
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index 0b03e66..7628c93 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,3 +1,396 @@
+2016-04-12 Thomas Schwinge <thomas@codesourcery.com>
+
+ * libgomp_g.h: Rename GOACC_parallel_keyd prototype to
+ GOACC_parallel_keyed, restore GOACC_parallel prototype, new
+ GOACC_declare prototype.
+
+ * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gang-np-1.c:
+ Merge this file, and...
+ * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gv-np-1.c:
+ ... this file, and...
+ * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gw-np-1.c:
+ ... this file, and...
+ * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-1.c:
+ ... this file, and...
+ * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-2.c:
+ ... this file, and...
+ * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-3.c:
+ ... this file, and...
+ * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-4.c:
+ ... this file, and...
+ * testsuite/libgomp.oacc-c-c++-common/loop-reduction-vector-p-1.c:
+ ... this file, and...
+ * testsuite/libgomp.oacc-c-c++-common/loop-reduction-vector-p-2.c:
+ ... this file, and...
+ * testsuite/libgomp.oacc-c-c++-common/loop-reduction-worker-p-1.c:
+ ... this file, and...
+ * testsuite/libgomp.oacc-c-c++-common/loop-reduction-wv-p-1.c:
+ ... this file, and...
+ * testsuite/libgomp.oacc-c-c++-common/loop-reduction-wv-p-2.c:
+ ... this file, and...
+ * testsuite/libgomp.oacc-c-c++-common/loop-reduction-wv-p-3.c:
+ ... this file into...
+ * testsuite/libgomp.oacc-c-c++-common/reduction-7.c: ... this
+ file.
+
+ * testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-2.c:
+ Make failure observable.
+
+2016-04-12 Jakub Jelinek <jakub@redhat.com>
+
+ * libgomp.h (struct gomp_target_task): Remove firstprivate_copies
+ field.
+ * target.c (gomp_target_fallback_firstprivate,
+ gomp_target_unshare_firstprivate): Removed.
+ (GOMP_target_ext): Copy firstprivate vars into gomp_allocaed memory
+ before waiting for dependencies.
+ (gomp_target_task_fn): Don't copy firstprivate vars here.
+ * task.c (GOMP_PLUGIN_target_task_completion): Don't free
+ firstprivate_copies here.
+ (gomp_create_target_task): Don't initialize firstprivate_copies field.
+ * testsuite/libgomp.c/target-25.c (main): Use map (to:) instead of
+ explicit/implicit firstprivate.
+
+2016-04-08 Cesar Philippidis <cesar@codesourcery.com>
+
+ PR lto/70289
+ PR ipa/70348
+ PR tree-optimization/70373
+ PR middle-end/70533
+ PR middle-end/70534
+ PR middle-end/70535
+ * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gang-np-1.c: New
+ test.
+ * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gw-np-1.c: New
+ test.
+ * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-1.c: New
+ test.
+ * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-2.c: New
+ test.
+ * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-3.c: New
+ test.
+ * testsuite/libgomp.oacc-c-c++-common/loop-reduction-gwv-np-4.c: New
+ test.
+ * testsuite/libgomp.oacc-c-c++-common/loop-reduction-vector-p-1.c: New
+ test.
+ * testsuite/libgomp.oacc-c-c++-common/loop-reduction-vector-p-2.c: New
+ test.
+ * testsuite/libgomp.oacc-c-c++-common/loop-reduction-worker-p-1.c: New
+ test.
+ * testsuite/libgomp.oacc-c-c++-common/loop-reduction-wv-p-1.c: New test.
+ * testsuite/libgomp.oacc-c-c++-common/loop-reduction-wv-p-2.c: New test.
+ * testsuite/libgomp.oacc-c-c++-common/loop-reduction-wv-p-3.c: New test.
+ * testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-1.c: New
+ test.
+ * testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-2.c: New
+ test.
+ * testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-3.c: New
+ test.
+ * testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-4.c: New
+ test.
+ * testsuite/libgomp.oacc-c-c++-common/par-reduction-1.c: Add test
+ coverage.
+ * testsuite/libgomp.oacc-c-c++-common/par-reduction-2.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/parallel-dims.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/parallel-reduction.c: New test.
+ * testsuite/libgomp.oacc-c-c++-common/pr70289.c: New test.
+ * testsuite/libgomp.oacc-c-c++-common/pr70373.c: New test.
+ * testsuite/libgomp.oacc-c-c++-common/reduction-1.c: Add test
+ coverage.
+ * testsuite/libgomp.oacc-c-c++-common/reduction-2.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/reduction-3.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/reduction-4.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/reduction-5.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/reduction-6.c: New test.
+ * testsuite/libgomp.oacc-c-c++-common/reduction.h: New test.
+ * testsuite/libgomp.oacc-fortran/parallel-reduction.f90: New test.
+ * testsuite/libgomp.oacc-fortran/pr70289.f90: New test.
+ * testsuite/libgomp.oacc-fortran/reduction-1.f90: Add test coverage.
+ * testsuite/libgomp.oacc-fortran/reduction-2.f90: Likewise.
+ * testsuite/libgomp.oacc-fortran/reduction-3.f90: Likewise.
+ * testsuite/libgomp.oacc-fortran/reduction-4.f90: Likewise.
+ * testsuite/libgomp.oacc-fortran/reduction-5.f90: Likewise.
+ * testsuite/libgomp.oacc-fortran/reduction-6.f90: Likewise.
+ * testsuite/libgomp.oacc-fortran/reduction-7.f90: New test.
+
+2016-03-30 Thomas Schwinge <thomas@codesourcery.com>
+ James Norris <jnorris@codesourcery.com>
+ Nathan Sidwell <nathan@codesourcery.com>
+ Julian Brown <julian@codesourcery.com>
+ Cesar Philippidis <cesar@codesourcery.com>
+ Chung-Lin Tang <cltang@codesourcery.com>
+ Tom de Vries <tom@codesourcery.com>
+
+ * testsuite/libgomp.oacc-c-c++-common/clauses-1.c: Update.
+ * testsuite/libgomp.oacc-c-c++-common/deviceptr-1.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/if-1.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/vector-loop.c: Likewise.
+ * testsuite/libgomp.oacc-fortran/asyncwait-1.f90: Likewise.
+ * testsuite/libgomp.oacc-fortran/asyncwait-2.f90: Likewise.
+ * testsuite/libgomp.oacc-fortran/asyncwait-3.f90: Likewise.
+ * testsuite/libgomp.oacc-fortran/declare-1.f90: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/asyncwait-1.c: Likewise.
+ XFAIL.
+ * testsuite/libgomp.oacc-c-c++-common/firstprivate-1.c: Update.
+ Incorporate...
+ * testsuite/libgomp.oacc-c-c++-common/firstprivate-2.c: ... this
+ file.
+ * testsuite/libgomp.oacc-c++/template-reduction.C: New file.
+ * testsuite/libgomp.oacc-c-c++-common/gang-static-1.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/gang-static-2.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/kernels-loop-clauses.c:
+ Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/private-variables.c:
+ Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/reduction-7.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/routine-1.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/routine-4.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/routine-wv-2.c: Likewise.
+ * testsuite/libgomp.oacc-fortran/clauses-1.f90: Likewise.
+ * testsuite/libgomp.oacc-fortran/default-1.f90: Likewise.
+ * testsuite/libgomp.oacc-fortran/firstprivate-1.f90: Likewise.
+ * testsuite/libgomp.oacc-fortran/gang-static-1.f90: Likewise.
+ * testsuite/libgomp.oacc-fortran/if-1.f90: Likewise.
+ * testsuite/libgomp.oacc-fortran/implicit-firstprivate-ref.f90:
+ Likewise.
+ * testsuite/libgomp.oacc-fortran/pr68813.f90: Likewise.
+ * testsuite/libgomp.oacc-fortran/private-variables.f90: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/kernels-1.c: Merge this
+ file...
+ * testsuite/libgomp.oacc-c-c++-common/parallel-1.c: ..., and this
+ file into...
+ * testsuite/libgomp.oacc-c-c++-common/data-clauses.h: ... this new
+ file. Update.
+ * testsuite/libgomp.oacc-c-c++-common/data-clauses-kernels.c: New
+ file.
+ * testsuite/libgomp.oacc-c-c++-common/data-clauses-parallel.c:
+ Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/kernels-2.c: Rename to...
+ * testsuite/libgomp.oacc-c-c++-common/data-clauses-kernels-ipa-pta.c:
+ ... this new file. Update.
+ * testsuite/libgomp.oacc-c-c++-common/parallel-2.c: Rename to...
+ * testsuite/libgomp.oacc-c-c++-common/data-clauses-parallel-ipa-pta.c:
+ ... this new file. Update.
+ * testsuite/libgomp.oacc-c-c++-common/mode-transitions.c: New
+ file. Incorporate...
+ * testsuite/libgomp.oacc-c-c++-common/worker-single-1a.c: ... this
+ file, and...
+ * testsuite/libgomp.oacc-c-c++-common/worker-single-4.c: ... this
+ file, and...
+ * testsuite/libgomp.oacc-c-c++-common/worker-single-6.c: ... this
+ file.
+ * testsuite/libgomp.oacc-c-c++-common/update-1-2.c: Remove file.
+
+2016-03-29 Thomas Schwinge <thomas@codesourcery.com>
+
+ * testsuite/libgomp.oacc-c++/c++.exp [!lang_test_file_found]: Call
+ set-torture-options.
+
+2016-03-24 Thomas Schwinge <thomas@codesourcery.com>
+
+ * testsuite/libgomp.oacc-c++/c++.exp: Set up torture testing, use
+ gcc-dg-runtest.
+ * testsuite/libgomp.oacc-c/c.exp: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/acc-on-device-2.c: Specify
+ -fno-builtin-acc_on_device instead of -O0.
+ * testsuite/libgomp.oacc-c-c++-common/acc-on-device.c: Skip for
+ -O0.
+ * testsuite/libgomp.oacc-c-c++-common/loop-auto-1.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/loop-dim-default.c:
+ Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/loop-g-1.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/loop-g-2.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/loop-gwv-1.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/loop-red-g-1.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/loop-red-gwv-1.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/loop-red-v-1.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/loop-red-v-2.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/loop-red-w-2.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/loop-v-1.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/loop-w-1.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/loop-wv-1.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/routine-g-1.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/routine-gwv-1.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/routine-v-1.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/routine-w-1.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/routine-wv-1.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/kernels-alias-ipa-pta-2.c:
+ Don't specify -O2.
+ * testsuite/libgomp.oacc-c-c++-common/kernels-alias-ipa-pta-3.c:
+ Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/kernels-alias-ipa-pta.c:
+ Likewise.
+
+2016-03-24 Martin Liska <mliska@suse.cz>
+
+ * plugin/plugin-hsa.c (packet_store_release): New function
+ that is taken from the HSA runtime manual.
+ (GOMP_OFFLOAD_run): Use the function.
+
+2016-03-23 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/70376
+ * testsuite/libgomp.c++/pr70376.C: New test.
+
+2016-03-23 Tom de Vries <tom@codesourcery.com>
+
+ * testsuite/libgomp.oacc-fortran/reduction-2.f90: Add missing
+ initialization of lresult and lvresult.
+ * testsuite/libgomp.oacc-fortran/reduction-3.f90: Same.
+
+2016-03-23 James Norris <jnorris@codesourcery.com>
+ Daichi Fukuoka <dc-fukuoka@sgi.com>
+
+ PR libgomp/69414
+ * oacc-mem.c (delete_copyout, update_dev_host): Fix device address.
+ * testsuite/libgomp.oacc-c-c++-common/update-1.c: Additional tests.
+ * testsuite/libgomp.oacc-c-c++-common/update-1-2.c: Likewise.
+ * testsuite/libgomp.oacc-fortran/update-1.f90: New file.
+
+2016-03-23 Martin Liska <mliska@suse.cz>
+
+ PR hsa/70337
+ * plugin/plugin-hsa.c (GOMP_OFFLOAD_run): Copy shadow
+ argument just in case a dispatched kernel uses that argument.
+
+2016-03-16 Thomas Schwinge <thomas@codesourcery.com>
+
+ * testsuite/libgomp.oacc-fortran/kernels-loop-2.f95: Adjust to
+ -ftree-parallelize-loops/-fopenacc changes.
+ * testsuite/libgomp.oacc-fortran/kernels-loop-data-2.f95:
+ Likewise.
+ * testsuite/libgomp.oacc-fortran/kernels-loop-data-enter-exit-2.f95:
+ Likewise.
+ * testsuite/libgomp.oacc-fortran/kernels-loop-data-enter-exit.f95:
+ Likewise.
+ * testsuite/libgomp.oacc-fortran/kernels-loop-data-update.f95:
+ Likewise.
+ * testsuite/libgomp.oacc-fortran/kernels-loop-data.f95: Likewise.
+ * testsuite/libgomp.oacc-fortran/kernels-loop.f95: Likewise.
+
+2016-03-13 Thomas Schwinge <thomas@codesourcery.com>
+
+ * testsuite/lib/libgomp.exp (libgomp_init): Potentially append to
+ always_ld_library_path the path to libgcc_s.
+
+2016-03-10 Cesar Philippidis <cesar@codesourcery.com>
+
+ PR testsuite/70009
+ * testsuite/libgomp.oacc-c-c++-common/vprop.c: Make test data signed.
+
+2016-03-09 Tom de Vries <tom@codesourcery.com>
+
+ * testsuite/libgomp.oacc-fortran/kernels-loop-2.f95: New test.
+ * testsuite/libgomp.oacc-fortran/kernels-loop-data-2.f95: Same.
+ * testsuite/libgomp.oacc-fortran/kernels-loop-data-enter-exit-2.f95:
+ Same.
+ * testsuite/libgomp.oacc-fortran/kernels-loop-data-enter-exit.f95: Same.
+ * testsuite/libgomp.oacc-fortran/kernels-loop-data-update.f95: Same.
+ * testsuite/libgomp.oacc-fortran/kernels-loop-data.f95: Same.
+ * testsuite/libgomp.oacc-fortran/kernels-loop.f95: Same.
+
+2016-03-07 Martin Jambor <mjambor@suse.cz>
+
+ * testsuite/lib/libgomp.exp
+ (check_effective_target_hsa_offloading_selected_nocache): New.
+ (check_effective_target_hsa_offloading_selected): Likewise.
+ * testsuite/libgomp.hsa.c/c.exp: Likewise.
+ * testsuite/libgomp.hsa.c/alloca-1.c: Likewise.
+ * testsuite/libgomp.hsa.c/bitfield-1.c: Likewise.
+ * testsuite/libgomp.hsa.c/builtins-1.c: Likewise.
+ * testsuite/libgomp.hsa.c/complex-1.c: Likewise.
+ * testsuite/libgomp.hsa.c/formal-actual-args-1.c: Likewise.
+ * testsuite/libgomp.hsa.c/function-call-1.c: Likewise.
+ * testsuite/libgomp.hsa.c/get-level-1.c: Likewise.
+ * testsuite/libgomp.hsa.c/gridify-1.c: Likewise.
+ * testsuite/libgomp.hsa.c/gridify-2.c: Likewise.
+ * testsuite/libgomp.hsa.c/gridify-3.c: Likewise.
+ * testsuite/libgomp.hsa.c/gridify-4.c: Likewise.
+ * testsuite/libgomp.hsa.c/memory-operations-1.c: Likewise.
+ * testsuite/libgomp.hsa.c/pr69568.c: Likewise.
+ * testsuite/libgomp.hsa.c/rotate-1.c: Likewise.
+ * testsuite/libgomp.hsa.c/switch-1.c: Likewise.
+ * testsuite/libgomp.hsa.c/switch-branch-1.c: Likewise.
+
+2016-03-07 Martin Jambor <mjambor@suse.cz>
+
+ * testsuite/libgomp.c/examples-4/async_target-2.c: Only run on
+ non-shared memory accelerators.
+ * testsuite/libgomp.c/examples-4/device-1.c: Likewise.
+ * testsuite/libgomp.c/examples-4/target-5.c: Likewise.
+ * testsuite/libgomp.c/examples-4/target_data-6.c: Likewise.
+ * testsuite/libgomp.c/examples-4/target_data-7.c: Likewise.
+ * testsuite/libgomp.fortran/examples-4/async_target-2.f90: Likewise.
+ * testsuite/libgomp.fortran/examples-4/device-1.f90: Likewise.
+ * testsuite/libgomp.fortran/examples-4/target-5.f90: Likewise.
+ * testsuite/libgomp.fortran/examples-4/target_data-6.f90: Likewise.
+ * testsuite/libgomp.fortran/examples-4/target_data-7.f90: Likewise.
+
+2016-03-07 Martin Jambor <mjambor@suse.cz>
+
+ * testsuite/lib/libgomp.exp (libgomp_init): Append -Wno-hsa to
+ ALWAYS_CFLAGS.
+
+2016-03-02 Jakub Jelinek <jakub@redhat.com>
+
+ PR libgomp/69555
+ * testsuite/libgomp.c++/pr69555-1.C: New test.
+ * testsuite/libgomp.c++/pr69555-2.C: New test.
+
+2016-02-26 Keith McDaniel <k.allen.mcdaniel@gmail.com>
+ Martin Jambor <mjambor@suse.cz>
+
+ * testsuite/lib/libgomp.exp
+ (check_effective_target_offload_device_shared_as): New proc.
+ * testsuite/libgomp.c++/declare_target-1.C: New test.
+
+2016-02-25 Ilya Verbin <ilya.verbin@intel.com>
+
+ PR driver/68463
+ * testsuite/libgomp.oacc-c-c++-common/parallel-dims-2.c: Remove.
+
+2016-02-23 Thomas Schwinge <thomas@codesourcery.com>
+
+ * oacc-parallel.c (GOACC_parallel_keyed): Initialize dims.
+ * plugin/plugin-nvptx.c (nvptx_exec): Provide default values for
+ dims.
+ * testsuite/libgomp.oacc-c-c++-common/kernels-loop-2.c: Adjust to
+ -ftree-parallelize-loops/-fopenacc changes.
+ * testsuite/libgomp.oacc-c-c++-common/kernels-loop-3.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-2.c:
+ Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-3.c:
+ Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-4.c:
+ Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-5.c:
+ Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-6.c:
+ Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq.c:
+ Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/kernels-loop-collapse.c:
+ Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/kernels-loop-g.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/kernels-loop-mod-not-zero.c:
+ Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/kernels-loop-n.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/kernels-loop-nest.c:
+ Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/kernels-loop.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/kernels-reduction.c:
+ Likewise.
+
+2016-02-22 Cesar Philippidis <cesar@codesourcery.com>
+
+ * testsuite/libgomp.oacc-c-c++-common/vprop.c: New test.
+
+2016-02-19 Jakub Jelinek <jakub@redhat.com>
+
+ PR driver/69805
+ * testsuite/libgomp.c/pr69805.c: New test.
+
2016-02-16 Tom de Vries <tom@codesourcery.com>
PR lto/67709
@@ -1249,7 +1642,7 @@
* oacc-init.c (goacc_runtime_initialize): Call goacc_host_init() at end.
2015-09-08 Aditya Kumar <hiraditya@msn.com>
- Sebastian Pop <s.pop@samsung.com>
+ Sebastian Pop <s.pop@samsung.com>
* testsuite/libgomp.graphite/bounds.c (int foo): Modifed test case to
match o/p.
@@ -4755,7 +5148,6 @@
PR fortran/41102
omp_lib.h.in: Fix -std=f95 errors.
-
2009-08-14 David Edelsohn <edelsohn@gnu.org>
* testsuite/libgomp.graphite: Move from gcc.dg/graphite.
diff --git a/libgomp/libgomp.h b/libgomp/libgomp.h
index 7108a6d..664e76b 100644
--- a/libgomp/libgomp.h
+++ b/libgomp/libgomp.h
@@ -496,8 +496,6 @@ struct gomp_target_task
struct target_mem_desc *tgt;
struct gomp_task *task;
struct gomp_team *team;
- /* Copies of firstprivate mapped data for shared memory accelerators. */
- void *firstprivate_copies;
/* Device-specific target arguments. */
void **args;
void *hostaddrs[];
diff --git a/libgomp/libgomp_g.h b/libgomp/libgomp_g.h
index 24eebb6..20454e6 100644
--- a/libgomp/libgomp_g.h
+++ b/libgomp/libgomp_g.h
@@ -295,17 +295,20 @@ extern void GOMP_teams (unsigned int, unsigned int);
/* oacc-parallel.c */
+extern void GOACC_parallel_keyed (int, void (*) (void *), size_t,
+ void **, size_t *, unsigned short *, ...);
+extern void GOACC_parallel (int, void (*) (void *), size_t, void **, size_t *,
+ unsigned short *, int, int, int, int, int, ...);
extern void GOACC_data_start (int, size_t, void **, size_t *,
unsigned short *);
extern void GOACC_data_end (void);
extern void GOACC_enter_exit_data (int, size_t, void **,
size_t *, unsigned short *, int, int, ...);
-extern void GOACC_parallel_keyd (int, void (*) (void *), size_t,
- void **, size_t *, unsigned short *, ...);
extern void GOACC_update (int, size_t, void **, size_t *,
unsigned short *, int, int, ...);
extern void GOACC_wait (int, int, ...);
extern int GOACC_get_num_threads (void);
extern int GOACC_get_thread_num (void);
+extern void GOACC_declare (int, size_t, void **, size_t *, unsigned short *);
#endif /* LIBGOMP_G_H */
diff --git a/libgomp/oacc-mem.c b/libgomp/oacc-mem.c
index f6cc373..ce1905c 100644
--- a/libgomp/oacc-mem.c
+++ b/libgomp/oacc-mem.c
@@ -509,7 +509,8 @@ delete_copyout (unsigned f, void *h, size_t s)
gomp_fatal ("[%p,%d] is not mapped", (void *)h, (int)s);
}
- d = (void *) (n->tgt->tgt_start + n->tgt_offset);
+ d = (void *) (n->tgt->tgt_start + n->tgt_offset
+ + (uintptr_t) h - n->host_start);
host_size = n->host_end - n->host_start;
@@ -562,7 +563,8 @@ update_dev_host (int is_dev, void *h, size_t s)
gomp_fatal ("[%p,%d] is not mapped", h, (int)s);
}
- d = (void *) (n->tgt->tgt_start + n->tgt_offset);
+ d = (void *) (n->tgt->tgt_start + n->tgt_offset
+ + (uintptr_t) h - n->host_start);
gomp_mutex_unlock (&acc_dev->lock);
diff --git a/libgomp/oacc-parallel.c b/libgomp/oacc-parallel.c
index bc24651..1fdb01d 100644
--- a/libgomp/oacc-parallel.c
+++ b/libgomp/oacc-parallel.c
@@ -103,6 +103,10 @@ GOACC_parallel_keyed (int device, void (*fn) (void *),
return;
}
+ /* Default: let the runtime choose. */
+ for (i = 0; i != GOMP_DIM_MAX; i++)
+ dims[i] = 0;
+
va_start (ap, kinds);
/* TODO: This will need amending when device_type is implemented. */
while ((tag = va_arg (ap, unsigned)) != 0)
@@ -303,7 +307,7 @@ GOACC_enter_exit_data (int device, size_t mapnum,
break;
}
- if (kind == GOMP_MAP_FORCE_DEALLOC
+ if (kind == GOMP_MAP_DELETE
|| kind == GOMP_MAP_FORCE_FROM)
break;
@@ -370,7 +374,7 @@ GOACC_enter_exit_data (int device, size_t mapnum,
== GOMP_MAP_FORCE_FROM,
async, 1);
break;
- case GOMP_MAP_FORCE_DEALLOC:
+ case GOMP_MAP_DELETE:
acc_delete (hostaddrs[i], sizes[i]);
break;
case GOMP_MAP_FORCE_FROM:
@@ -518,10 +522,10 @@ GOACC_declare (int device, size_t mapnum,
switch (kind)
{
case GOMP_MAP_FORCE_ALLOC:
- case GOMP_MAP_FORCE_DEALLOC:
case GOMP_MAP_FORCE_FROM:
case GOMP_MAP_FORCE_TO:
case GOMP_MAP_POINTER:
+ case GOMP_MAP_DELETE:
GOACC_enter_exit_data (device, 1, &hostaddrs[i], &sizes[i],
&kinds[i], 0, 0);
break;
diff --git a/libgomp/plugin/plugin-hsa.c b/libgomp/plugin/plugin-hsa.c
index d888493..0b3b67a 100644
--- a/libgomp/plugin/plugin-hsa.c
+++ b/libgomp/plugin/plugin-hsa.c
@@ -1185,6 +1185,14 @@ failure:
return false;
}
+/* Atomically store pair of uint16_t values (HEADER and REST) to a PACKET. */
+
+void
+packet_store_release (uint32_t* packet, uint16_t header, uint16_t rest)
+{
+ __atomic_store_n (packet, header | (rest << 16), __ATOMIC_RELEASE);
+}
+
/* Part of the libgomp plugin interface. Run a kernel on device N and pass it
an array of pointers in VARS as a parameter. The kernel is identified by
FN_PTR which must point to a kernel_info structure. */
@@ -1232,7 +1240,6 @@ GOMP_OFFLOAD_run (int n, void *fn_ptr, void *vars, void **args)
+ index % agent->command_q->size;
memset (((uint8_t *) packet) + 4, 0, sizeof (*packet) - 4);
- packet->setup |= (uint16_t) 1 << HSA_KERNEL_DISPATCH_PACKET_SETUP_DIMENSIONS;
packet->grid_size_x = kla->gdims[0];
uint32_t wgs = kla->wdims[0];
if (wgs == 0)
@@ -1255,8 +1262,16 @@ GOMP_OFFLOAD_run (int n, void *fn_ptr, void *vars, void **args)
hsa_signal_store_relaxed (s, 1);
memcpy (shadow->kernarg_address, &vars, sizeof (vars));
- memcpy (shadow->kernarg_address + sizeof (vars), &shadow,
- sizeof (struct hsa_kernel_runtime *));
+ /* PR hsa/70337. */
+ size_t vars_size = sizeof (vars);
+ if (kernel->kernarg_segment_size > vars_size)
+ {
+ if (kernel->kernarg_segment_size != vars_size
+ + sizeof (struct hsa_kernel_runtime *))
+ GOMP_PLUGIN_fatal ("Kernel segment size has an unexpected value");
+ memcpy (packet->kernarg_address + vars_size, &shadow,
+ sizeof (struct hsa_kernel_runtime *));
+ }
HSA_DEBUG ("Copying kernel runtime pointer to kernarg_address\n");
@@ -1267,7 +1282,9 @@ GOMP_OFFLOAD_run (int n, void *fn_ptr, void *vars, void **args)
HSA_DEBUG ("Going to dispatch kernel %s\n", kernel->name);
- __atomic_store_n ((uint16_t *) (&packet->header), header, __ATOMIC_RELEASE);
+ packet_store_release ((uint32_t *) packet, header,
+ 1 << HSA_KERNEL_DISPATCH_PACKET_SETUP_DIMENSIONS);
+
hsa_signal_store_release (agent->command_q->doorbell_signal, index);
/* TODO: GPU agents in Carrizo APUs cannot properly update L2 cache for
diff --git a/libgomp/plugin/plugin-nvptx.c b/libgomp/plugin/plugin-nvptx.c
index 7ec1810..3f1bb6d 100644
--- a/libgomp/plugin/plugin-nvptx.c
+++ b/libgomp/plugin/plugin-nvptx.c
@@ -894,9 +894,21 @@ nvptx_exec (void (*fn), size_t mapnum, void **hostaddrs, void **devaddrs,
/* Initialize the launch dimensions. Typically this is constant,
provided by the device compiler, but we must permit runtime
values. */
- for (i = 0; i != 3; i++)
- if (targ_fn->launch->dim[i])
- dims[i] = targ_fn->launch->dim[i];
+ int seen_zero = 0;
+ for (i = 0; i != GOMP_DIM_MAX; i++)
+ {
+ if (targ_fn->launch->dim[i])
+ dims[i] = targ_fn->launch->dim[i];
+ if (!dims[i])
+ seen_zero = 1;
+ }
+
+ if (seen_zero)
+ {
+ for (i = 0; i != GOMP_DIM_MAX; i++)
+ if (!dims[i])
+ dims[i] = /* TODO */ 32;
+ }
/* This reserves a chunk of a pre-allocated page of memory mapped on both
the host and the device. HP is a host pointer to the new chunk, and DP is
diff --git a/libgomp/target.c b/libgomp/target.c
index 96fe3d5..e2dd0e0 100644
--- a/libgomp/target.c
+++ b/libgomp/target.c
@@ -1372,47 +1372,6 @@ copy_firstprivate_data (char *tgt, size_t mapnum, void **hostaddrs,
}
}
-/* Host fallback with firstprivate map-type handling. */
-
-static void
-gomp_target_fallback_firstprivate (void (*fn) (void *), size_t mapnum,
- void **hostaddrs, size_t *sizes,
- unsigned short *kinds)
-{
- size_t tgt_align = 0, tgt_size = 0;
- calculate_firstprivate_requirements (mapnum, sizes, kinds, &tgt_align,
- &tgt_size);
- if (tgt_align)
- {
- char *tgt = gomp_alloca (tgt_size + tgt_align - 1);
- copy_firstprivate_data (tgt, mapnum, hostaddrs, sizes, kinds, tgt_align,
- tgt_size);
- }
- gomp_target_fallback (fn, hostaddrs);
-}
-
-/* Handle firstprivate map-type for shared memory devices and the host
- fallback. Return the pointer of firstprivate copies which has to be freed
- after use. */
-
-static void *
-gomp_target_unshare_firstprivate (size_t mapnum, void **hostaddrs,
- size_t *sizes, unsigned short *kinds)
-{
- size_t tgt_align = 0, tgt_size = 0;
- char *tgt = NULL;
-
- calculate_firstprivate_requirements (mapnum, sizes, kinds, &tgt_align,
- &tgt_size);
- if (tgt_align)
- {
- tgt = gomp_malloc (tgt_size + tgt_align - 1);
- copy_firstprivate_data (tgt, mapnum, hostaddrs, sizes, kinds, tgt_align,
- tgt_size);
- }
- return tgt;
-}
-
/* Helper function of GOMP_target{,_ext} routines. */
static void *
@@ -1504,6 +1463,8 @@ GOMP_target_ext (int device, void (*fn) (void *), size_t mapnum,
unsigned int flags, void **depend, void **args)
{
struct gomp_device_descr *devicep = resolve_device (device);
+ size_t tgt_align = 0, tgt_size = 0;
+ bool fpc_done = false;
if (flags & GOMP_TARGET_FLAG_NOWAIT)
{
@@ -1555,7 +1516,19 @@ GOMP_target_ext (int device, void (*fn) (void *), size_t mapnum,
{
struct gomp_thread *thr = gomp_thread ();
if (thr->task && thr->task->depend_hash)
- gomp_task_maybe_wait_for_dependencies (depend);
+ {
+ /* If we might need to wait, copy firstprivate now. */
+ calculate_firstprivate_requirements (mapnum, sizes, kinds,
+ &tgt_align, &tgt_size);
+ if (tgt_align)
+ {
+ char *tgt = gomp_alloca (tgt_size + tgt_align - 1);
+ copy_firstprivate_data (tgt, mapnum, hostaddrs, sizes, kinds,
+ tgt_align, tgt_size);
+ }
+ fpc_done = true;
+ gomp_task_maybe_wait_for_dependencies (depend);
+ }
}
void *fn_addr;
@@ -1564,15 +1537,35 @@ GOMP_target_ext (int device, void (*fn) (void *), size_t mapnum,
|| !(fn_addr = gomp_get_target_fn_addr (devicep, fn))
|| (devicep->can_run_func && !devicep->can_run_func (fn_addr)))
{
- gomp_target_fallback_firstprivate (fn, mapnum, hostaddrs, sizes, kinds);
+ if (!fpc_done)
+ {
+ calculate_firstprivate_requirements (mapnum, sizes, kinds,
+ &tgt_align, &tgt_size);
+ if (tgt_align)
+ {
+ char *tgt = gomp_alloca (tgt_size + tgt_align - 1);
+ copy_firstprivate_data (tgt, mapnum, hostaddrs, sizes, kinds,
+ tgt_align, tgt_size);
+ }
+ }
+ gomp_target_fallback (fn, hostaddrs);
return;
}
struct target_mem_desc *tgt_vars;
- void *fpc = NULL;
if (devicep->capabilities & GOMP_OFFLOAD_CAP_SHARED_MEM)
{
- fpc = gomp_target_unshare_firstprivate (mapnum, hostaddrs, sizes, kinds);
+ if (!fpc_done)
+ {
+ calculate_firstprivate_requirements (mapnum, sizes, kinds,
+ &tgt_align, &tgt_size);
+ if (tgt_align)
+ {
+ char *tgt = gomp_alloca (tgt_size + tgt_align - 1);
+ copy_firstprivate_data (tgt, mapnum, hostaddrs, sizes, kinds,
+ tgt_align, tgt_size);
+ }
+ }
tgt_vars = NULL;
}
else
@@ -1583,8 +1576,6 @@ GOMP_target_ext (int device, void (*fn) (void *), size_t mapnum,
args);
if (tgt_vars)
gomp_unmap_vars (tgt_vars, true);
- else
- free (fpc);
}
/* Host fallback for GOMP_target_data{,_ext} routines. */
@@ -1891,9 +1882,7 @@ gomp_target_task_fn (void *data)
|| (devicep->can_run_func && !devicep->can_run_func (fn_addr)))
{
ttask->state = GOMP_TARGET_TASK_FALLBACK;
- gomp_target_fallback_firstprivate (ttask->fn, ttask->mapnum,
- ttask->hostaddrs, ttask->sizes,
- ttask->kinds);
+ gomp_target_fallback (ttask->fn, ttask->hostaddrs);
return false;
}
@@ -1908,9 +1897,6 @@ gomp_target_task_fn (void *data)
if (devicep->capabilities & GOMP_OFFLOAD_CAP_SHARED_MEM)
{
ttask->tgt = NULL;
- ttask->firstprivate_copies
- = gomp_target_unshare_firstprivate (ttask->mapnum, ttask->hostaddrs,
- ttask->sizes, ttask->kinds);
actual_arguments = ttask->hostaddrs;
}
else
diff --git a/libgomp/task.c b/libgomp/task.c
index 38d4e9b..023663f 100644
--- a/libgomp/task.c
+++ b/libgomp/task.c
@@ -582,7 +582,6 @@ GOMP_PLUGIN_target_task_completion (void *data)
return;
}
ttask->state = GOMP_TARGET_TASK_FINISHED;
- free (ttask->firstprivate_copies);
gomp_target_task_completion (team, task);
gomp_mutex_unlock (&team->task_lock);
}
@@ -683,7 +682,6 @@ gomp_create_target_task (struct gomp_device_descr *devicep,
ttask->state = state;
ttask->task = task;
ttask->team = team;
- ttask->firstprivate_copies = NULL;
task->fn = NULL;
task->fn_data = ttask;
task->final_task = 0;
diff --git a/libgomp/testsuite/lib/libgomp.exp b/libgomp/testsuite/lib/libgomp.exp
index a4c9d83..1cb4991 100644
--- a/libgomp/testsuite/lib/libgomp.exp
+++ b/libgomp/testsuite/lib/libgomp.exp
@@ -142,6 +142,8 @@ proc libgomp_init { args } {
append always_ld_library_path ":${blddir}/../liboffloadmic/plugin/.libs"
# libstdc++ is required by liboffloadmic
append always_ld_library_path ":${blddir}/../libstdc++-v3/src/.libs"
+ # libgcc_s is required by libstdc++
+ append always_ld_library_path ":${blddir}/../libgcc"
}
global offload_additional_lib_paths
@@ -237,6 +239,9 @@ proc libgomp_init { args } {
# Disable caret
lappend ALWAYS_CFLAGS "additional_flags=-fno-diagnostics-show-caret"
+ # Disable HSA warnings by default.
+ lappend ALWAYS_CFLAGS "additional_flags=-Wno-hsa"
+
# Disable color diagnostics
lappend ALWAYS_CFLAGS "additional_flags=-fdiagnostics-color=never"
@@ -343,6 +348,19 @@ proc check_effective_target_offload_device_nonshared_as { } {
}
} ]
}
+
+# Return 1 if offload device is available and it has shared address space.
+proc check_effective_target_offload_device_shared_as { } {
+ return [check_runtime_nocache offload_device_shared_as {
+ int main ()
+ {
+ int x = 10;
+ #pragma omp target map(to: x)
+ x++;
+ return x == 10;
+ }
+ } ]
+}
# Return 1 if at least one nvidia board is present.
@@ -379,3 +397,56 @@ proc check_effective_target_openacc_host_selected { } {
}
return 0;
}
+
+# Return 1 if the selected OMP device is actually a HSA device
+
+proc check_effective_target_hsa_offloading_selected_nocache {} {
+ global tool
+
+ set src {
+ int main () {
+ int v = 1;
+ #pragma omp target map(from:v)
+ v = 0;
+ return v;
+ }
+ }
+
+ set result [eval [list check_compile hsa_offloading_src executable $src] ""]
+ set lines [lindex $result 0]
+ set output [lindex $result 1]
+
+ set ok 0
+ if { [string match "" $lines] } {
+ # No error messages, let us switch on HSA debugging output and run it
+ set prev_HSA_DEBUG [getenv HSA_DEBUG]
+ setenv HSA_DEBUG "1"
+ set result [remote_load target "./$output" "2>&1" ""]
+ if { [string match "" $prev_HSA_DEBUG] } {
+ unsetenv HSA_DEBUG
+ } else {
+ setenv HSA_DEBUG $prev_HSA_DEBUG
+ }
+ set status [lindex $result 0]
+ if { $status != "pass" } {
+ verbose "HSA availability test failed"
+ return 0
+ }
+ set output [lindex $result 1]
+ if { [string match "*HSA debug: Going to dispatch kernel*" $output] } {
+ verbose "HSA availability detected"
+ set ok 1
+ }
+ }
+ remote_file build delete $output
+ return $ok
+}
+
+# Return 1 if the selected OMP device is actually a HSA device and
+# cache the result
+
+proc check_effective_target_hsa_offloading_selected {} {
+ return [check_cached_effective_target hsa_offloading_selected {
+ check_effective_target_hsa_offloading_selected_nocache
+ }]
+}
diff --git a/libgomp/testsuite/libgomp.c++/declare_target-1.C b/libgomp/testsuite/libgomp.c++/declare_target-1.C
new file mode 100644
index 0000000..4394bb1
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c++/declare_target-1.C
@@ -0,0 +1,38 @@
+// { dg-do run }
+// { dg-require-effective-target offload_device_shared_as }
+
+#include <stdlib.h>
+
+struct typeX
+{
+ int a;
+};
+
+class typeY
+{
+public:
+ int foo () { return a^0x01; }
+ int a;
+};
+
+#pragma omp declare target
+struct typeX varX;
+class typeY varY;
+#pragma omp end declare target
+
+int main ()
+{
+ varX.a = 0;
+ varY.a = 0;
+
+ #pragma omp target
+ {
+ varX.a = 100;
+ varY.a = 100;
+ }
+
+ if (varX.a != 100 || varY.a != 100)
+ abort ();
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c++/pr69555-1.C b/libgomp/testsuite/libgomp.c++/pr69555-1.C
new file mode 100644
index 0000000..c6885ff
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c++/pr69555-1.C
@@ -0,0 +1,114 @@
+// PR libgomp/69555
+// { dg-do run }
+
+#include <omp.h>
+
+__attribute__((noinline, noclone)) void
+f1 (int y)
+{
+ int a[y - 2];
+ int (&c)[y - 2] = a;
+ c[0] = 111;
+ int e = 0;
+
+ #pragma omp parallel private (c) num_threads (4) reduction (+:e)
+ {
+ int v = omp_get_thread_num ();
+ for (int i = 0; i < y - 2; i++)
+ c[i] = i + v;
+ #pragma omp barrier
+ for (int i = 0; i < y - 2; i++)
+ if (c[i] != i + v)
+ e++;
+ }
+ if (c[0] != 111 || e)
+ __builtin_abort ();
+}
+
+__attribute__((noinline, noclone)) void
+f2 (int y)
+{
+ int a[y - 2];
+ int (&c)[y - 2] = a;
+ c[0] = 111;
+
+ #pragma omp task private (c)
+ {
+ int v = omp_get_thread_num ();
+ for (int i = 0; i < y - 2; i++)
+ c[i] = i + v;
+ asm volatile ("" : : "r" (&c[0]) : "memory");
+ for (int i = 0; i < y - 2; i++)
+ if (c[i] != i + v)
+ __builtin_abort ();
+ }
+ if (c[0] != 111)
+ __builtin_abort ();
+}
+
+__attribute__((noinline, noclone)) void
+f3 (int y)
+{
+ int a[y - 2];
+ int (&c)[y - 2] = a;
+ for (int i = 0; i < y - 2; i++)
+ c[i] = i + 4;
+
+ #pragma omp parallel firstprivate (c) num_threads (4)
+ {
+ int v = omp_get_thread_num ();
+ for (int i = 0; i < y - 2; i++)
+ {
+ if (c[i] != i + 4)
+ __builtin_abort ();
+ c[i] = i + v;
+ }
+ #pragma omp barrier
+ for (int i = 0; i < y - 2; i++)
+ if (c[i] != i + v)
+ __builtin_abort ();
+ }
+ for (int i = 0; i < y - 2; i++)
+ if (c[i] != i + 4)
+ __builtin_abort ();
+}
+
+__attribute__((noinline, noclone)) void
+f4 (int y)
+{
+ int a[y - 2];
+ int (&c)[y - 2] = a;
+ for (int i = 0; i < y - 2; i++)
+ c[i] = i + 4;
+
+ #pragma omp task firstprivate (c)
+ {
+ int v = omp_get_thread_num ();
+ for (int i = 0; i < y - 2; i++)
+ {
+ if (c[i] != i + 4)
+ __builtin_abort ();
+ c[i] = i + v;
+ }
+ asm volatile ("" : : "r" (&c[0]) : "memory");
+ for (int i = 0; i < y - 2; i++)
+ if (c[i] != i + v)
+ __builtin_abort ();
+ }
+ for (int i = 0; i < y - 2; i++)
+ if (c[i] != i + 4)
+ __builtin_abort ();
+}
+
+int
+main ()
+{
+ f1 (6);
+ f3 (6);
+ #pragma omp parallel num_threads (4)
+ {
+ f2 (6);
+ f4 (6);
+ }
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c++/pr69555-2.C b/libgomp/testsuite/libgomp.c++/pr69555-2.C
new file mode 100644
index 0000000..78776ea
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c++/pr69555-2.C
@@ -0,0 +1,58 @@
+// PR libgomp/69555
+// { dg-do run }
+
+__attribute__((noinline, noclone)) void
+f1 (int y)
+{
+ int a[y - 2];
+ int (&c)[y - 2] = a;
+ for (int i = 0; i < y - 2; i++)
+ c[i] = i + 4;
+
+ #pragma omp target firstprivate (c)
+ {
+ for (int i = 0; i < y - 2; i++)
+ {
+ if (c[i] != i + 4)
+ __builtin_abort ();
+ c[i] = i + 9;
+ }
+ asm volatile ("" : : "r" (&c[0]) : "memory");
+ for (int i = 0; i < y - 2; i++)
+ if (c[i] != i + 9)
+ __builtin_abort ();
+ }
+ for (int i = 0; i < y - 2; i++)
+ if (c[i] != i + 4)
+ __builtin_abort ();
+}
+
+__attribute__((noinline, noclone)) void
+f2 (int y)
+{
+ int a[y - 2];
+ int (&c)[y - 2] = a;
+ for (int i = 0; i < y - 2; i++)
+ c[i] = i + 4;
+
+ #pragma omp target private (c)
+ {
+ for (int i = 0; i < y - 2; i++)
+ c[i] = i + 9;
+ asm volatile ("" : : "r" (&c[0]) : "memory");
+ for (int i = 0; i < y - 2; i++)
+ if (c[i] != i + 9)
+ __builtin_abort ();
+ }
+ for (int i = 0; i < y - 2; i++)
+ if (c[i] != i + 4)
+ __builtin_abort ();
+}
+
+int
+main ()
+{
+ f1 (6);
+ f2 (6);
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c++/pr70376.C b/libgomp/testsuite/libgomp.c++/pr70376.C
new file mode 100644
index 0000000..595c2cc
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c++/pr70376.C
@@ -0,0 +1,20 @@
+// PR c++/70376
+// { dg-do link }
+
+template <typename T>
+struct A
+{
+ A() { }
+ A(const A&) { }
+ void foo() { }
+};
+
+int
+main ()
+{
+ A<int> a;
+ #pragma omp taskloop
+ for (int i = 0; i < 64; i++)
+ a.foo();
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/examples-4/async_target-2.c b/libgomp/testsuite/libgomp.c/examples-4/async_target-2.c
index ce63328..0c76f8e 100644
--- a/libgomp/testsuite/libgomp.c/examples-4/async_target-2.c
+++ b/libgomp/testsuite/libgomp.c/examples-4/async_target-2.c
@@ -1,5 +1,5 @@
/* { dg-do run } */
-/* { dg-require-effective-target offload_device } */
+/* { dg-require-effective-target offload_device_nonshared_as } */
#include <omp.h>
#include <stdlib.h>
diff --git a/libgomp/testsuite/libgomp.c/examples-4/device-1.c b/libgomp/testsuite/libgomp.c/examples-4/device-1.c
index dad8572..46aa160 100644
--- a/libgomp/testsuite/libgomp.c/examples-4/device-1.c
+++ b/libgomp/testsuite/libgomp.c/examples-4/device-1.c
@@ -1,5 +1,5 @@
/* { dg-do run } */
-/* { dg-require-effective-target offload_device } */
+/* { dg-require-effective-target offload_device_nonshared_as } */
#include <omp.h>
#include <stdlib.h>
diff --git a/libgomp/testsuite/libgomp.c/examples-4/target-5.c b/libgomp/testsuite/libgomp.c/examples-4/target-5.c
index 1853fba..1c14bae 100644
--- a/libgomp/testsuite/libgomp.c/examples-4/target-5.c
+++ b/libgomp/testsuite/libgomp.c/examples-4/target-5.c
@@ -1,5 +1,5 @@
/* { dg-do run } */
-/* { dg-require-effective-target offload_device } */
+/* { dg-require-effective-target offload_device_nonshared_as } */
#include <omp.h>
#include <stdlib.h>
diff --git a/libgomp/testsuite/libgomp.c/examples-4/target_data-6.c b/libgomp/testsuite/libgomp.c/examples-4/target_data-6.c
index affeb49..57c7c0c 100644
--- a/libgomp/testsuite/libgomp.c/examples-4/target_data-6.c
+++ b/libgomp/testsuite/libgomp.c/examples-4/target_data-6.c
@@ -1,5 +1,5 @@
/* { dg-do run } */
-/* { dg-require-effective-target offload_device } */
+/* { dg-require-effective-target offload_device_nonshared_as } */
#include <stdlib.h>
#include <omp.h>
diff --git a/libgomp/testsuite/libgomp.c/examples-4/target_data-7.c b/libgomp/testsuite/libgomp.c/examples-4/target_data-7.c
index c18d480..8ec41ea 100644
--- a/libgomp/testsuite/libgomp.c/examples-4/target_data-7.c
+++ b/libgomp/testsuite/libgomp.c/examples-4/target_data-7.c
@@ -1,5 +1,5 @@
/* { dg-do run } */
-/* { dg-require-effective-target offload_device } */
+/* { dg-require-effective-target offload_device_nonshared_as } */
#include <stdlib.h>
#include <omp.h>
diff --git a/libgomp/testsuite/libgomp.c/pr69805.c b/libgomp/testsuite/libgomp.c/pr69805.c
new file mode 100644
index 0000000..735d6d9
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c/pr69805.c
@@ -0,0 +1,9 @@
+/* PR driver/69805 */
+/* { dg-do link } */
+/* { dg-options "-ftree-parallelize-loops=1 -O2 -ftree-parallelize-loops=2" } */
+
+int
+main ()
+{
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/target-25.c b/libgomp/testsuite/libgomp.c/target-25.c
index aeb19ae..09b8d52 100644
--- a/libgomp/testsuite/libgomp.c/target-25.c
+++ b/libgomp/testsuite/libgomp.c/target-25.c
@@ -23,7 +23,7 @@ main ()
usleep (7000);
z = 3;
}
- #pragma omp target map(tofrom: x) map(from: err) firstprivate (y) depend(inout: x, z)
+ #pragma omp target map(tofrom: x) map(from: err) map (to: y, z) depend(inout: x, z)
err = (x != 1 || y != 2 || z != 3);
if (err)
abort ();
diff --git a/libgomp/testsuite/libgomp.fortran/examples-4/async_target-2.f90 b/libgomp/testsuite/libgomp.fortran/examples-4/async_target-2.f90
index b12b0ea..a94db89 100644
--- a/libgomp/testsuite/libgomp.fortran/examples-4/async_target-2.f90
+++ b/libgomp/testsuite/libgomp.fortran/examples-4/async_target-2.f90
@@ -1,5 +1,5 @@
! { dg-do run }
-! { dg-require-effective-target offload_device }
+! { dg-require-effective-target offload_device_nonshared_as }
subroutine init (v1, v2, N)
!$omp declare target
diff --git a/libgomp/testsuite/libgomp.fortran/examples-4/device-1.f90 b/libgomp/testsuite/libgomp.fortran/examples-4/device-1.f90
index 291604b..a411db4 100644
--- a/libgomp/testsuite/libgomp.fortran/examples-4/device-1.f90
+++ b/libgomp/testsuite/libgomp.fortran/examples-4/device-1.f90
@@ -1,5 +1,5 @@
! { dg-do run }
-! { dg-require-effective-target offload_device }
+! { dg-require-effective-target offload_device_nonshared_as }
program e_57_1
use omp_lib, only: omp_is_initial_device
diff --git a/libgomp/testsuite/libgomp.fortran/examples-4/target-5.f90 b/libgomp/testsuite/libgomp.fortran/examples-4/target-5.f90
index 3f454d7..813a273 100644
--- a/libgomp/testsuite/libgomp.fortran/examples-4/target-5.f90
+++ b/libgomp/testsuite/libgomp.fortran/examples-4/target-5.f90
@@ -1,5 +1,5 @@
! { dg-do run }
-! { dg-require-effective-target offload_device }
+! { dg-require-effective-target offload_device_nonshared_as }
module e_50_5_mod
integer, parameter :: THRESHOLD1 = 500, THRESHOLD2 = 100
diff --git a/libgomp/testsuite/libgomp.fortran/examples-4/target_data-6.f90 b/libgomp/testsuite/libgomp.fortran/examples-4/target_data-6.f90
index 258da21e..9b79104 100644
--- a/libgomp/testsuite/libgomp.fortran/examples-4/target_data-6.f90
+++ b/libgomp/testsuite/libgomp.fortran/examples-4/target_data-6.f90
@@ -1,5 +1,5 @@
! { dg-do run }
-! { dg-require-effective-target offload_device }
+! { dg-require-effective-target offload_device_nonshared_as }
module e_51_6_mod
integer, parameter :: THRESHOLD = 500
diff --git a/libgomp/testsuite/libgomp.fortran/examples-4/target_data-7.f90 b/libgomp/testsuite/libgomp.fortran/examples-4/target_data-7.f90
index 2ddac9e..8fc5832 100644
--- a/libgomp/testsuite/libgomp.fortran/examples-4/target_data-7.f90
+++ b/libgomp/testsuite/libgomp.fortran/examples-4/target_data-7.f90
@@ -1,5 +1,5 @@
! { dg-do run }
-! { dg-require-effective-target offload_device }
+! { dg-require-effective-target offload_device_nonshared_as }
module e_51_7_mod
integer, parameter :: THRESHOLD = 500
diff --git a/libgomp/testsuite/libgomp.hsa.c/alloca-1.c b/libgomp/testsuite/libgomp.hsa.c/alloca-1.c
new file mode 100644
index 0000000..48dca94
--- /dev/null
+++ b/libgomp/testsuite/libgomp.hsa.c/alloca-1.c
@@ -0,0 +1,25 @@
+#define size 10
+int i, j, k;
+
+int
+main ()
+{
+ char *s = __builtin_malloc (size + 1);
+
+#pragma omp target teams
+ {
+#pragma omp distribute parallel for default(none) private(i) shared(s)
+ for (i = 0; i < size; ++i)
+ {
+ char *buffer = __builtin_alloca (10);
+ buffer[5] = 97 + i;
+ s[i] = buffer[5];
+ }
+ }
+
+ for (i = 0; i < size; ++i)
+ if (s[i] != 97 + i)
+ __builtin_abort ();
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.hsa.c/bitfield-1.c b/libgomp/testsuite/libgomp.hsa.c/bitfield-1.c
new file mode 100644
index 0000000..4dbf348
--- /dev/null
+++ b/libgomp/testsuite/libgomp.hsa.c/bitfield-1.c
@@ -0,0 +1,160 @@
+#include <assert.h>
+
+#define ASSIGN_SX(N) \
+ s##N.a1 = 1; \
+ s##N.a2 = 2; \
+ s##N.a3 = 3; \
+ s##N.a4 = 4; \
+ s##N.a5 = 5; \
+ s##N.a6 = 6; \
+ s##N.a7 = 7; \
+ s##N.a8 = 8; \
+ s##N.a9 = 9; \
+ s##N.a10 = 10;
+
+#define ASSERT_SX(N) \
+ assert (s##N.a1 == 1); \
+ assert (s##N.a2 == 2); \
+ assert (s##N.a3 == 3); \
+ assert (s##N.a4 == 4); \
+ assert (s##N.a5 == 5); \
+ assert (s##N.a6 == 6); \
+ assert (s##N.a7 == 7); \
+ assert (s##N.a8 == 8); \
+ assert (s##N.a9 == 9); \
+ assert (s##N.a10 == 10);
+
+struct S1
+{
+ unsigned a : 10;
+ unsigned b : 20;
+};
+
+struct S2
+{
+ unsigned a1 : 10;
+ unsigned a2 : 10;
+ unsigned a3 : 10;
+ unsigned a4 : 10;
+ unsigned a5 : 10;
+ unsigned a6 : 10;
+ unsigned a7 : 10;
+ unsigned a8 : 10;
+ unsigned a9 : 10;
+ unsigned a10 : 10;
+};
+
+struct S3
+{
+ unsigned a1 : 10;
+ unsigned a2 : 9;
+ unsigned a3 : 8;
+ unsigned a4 : 7;
+ unsigned a5 : 6;
+ unsigned a6 : 5;
+ unsigned a7 : 6;
+ unsigned a8 : 7;
+ unsigned a9 : 8;
+ unsigned a10 : 9;
+};
+
+struct S4
+{
+ unsigned a1 : 10;
+ int a2 : 9;
+ unsigned a3 : 8;
+ int a4 : 7;
+ unsigned a5 : 6;
+ int a6 : 5;
+ unsigned a7 : 6;
+ int a8 : 7;
+ unsigned a9 : 8;
+ int a10 : 9;
+};
+
+struct S5
+{
+ unsigned a1 : 31;
+ int a2 : 9;
+ unsigned a3 : 17;
+ int a4 : 7;
+ unsigned a5 : 6;
+ int a6 : 5;
+ unsigned long a7 : 55;
+ int a8 : 7;
+ unsigned a9 : 8;
+ int a10 : 9;
+};
+
+int
+main ()
+{
+ struct S1 s1;
+
+#pragma omp target map(to: s1)
+ {
+ s1.a = 2;
+ s1.b = 3;
+ }
+
+ assert (s1.a == 2);
+ assert (s1.b == 3);
+
+ struct S2 s2;
+
+#pragma omp target map(to: s2)
+ {
+ ASSIGN_SX (2)
+ }
+
+ ASSERT_SX (2)
+
+ struct S3 s3;
+
+#pragma omp target map(to: s3)
+ {
+ ASSIGN_SX (3)
+ }
+
+ ASSERT_SX (3)
+
+ struct S4 s4;
+
+#pragma omp target map(to: s4)
+ {
+ ASSIGN_SX (4)
+ }
+
+ ASSERT_SX (4)
+
+ struct S4 s5;
+
+ s5.a1 = 0;
+ s5.a2 = 1;
+ s5.a3 = 2;
+ s5.a4 = 3;
+ s5.a5 = 4;
+ s5.a6 = 5;
+ s5.a7 = 6;
+ s5.a8 = 7;
+ s5.a9 = 8;
+ s5.a10 = 9;
+
+#pragma omp target map(to: s5)
+ {
+ s5.a1++;
+ s5.a2++;
+ s5.a3++;
+ s5.a4++;
+ s5.a5++;
+ s5.a6++;
+ s5.a7++;
+ s5.a8++;
+ s5.a9++;
+ s5.a10++;
+ }
+
+ ASSERT_SX (5)
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.hsa.c/builtins-1.c b/libgomp/testsuite/libgomp.hsa.c/builtins-1.c
new file mode 100644
index 0000000..e603c21
--- /dev/null
+++ b/libgomp/testsuite/libgomp.hsa.c/builtins-1.c
@@ -0,0 +1,97 @@
+/* { dg-additional-options "-ffast-math" } */
+
+#include <assert.h>
+#include <math.h>
+
+#define N 10
+#define N2 14
+
+#define c1 1.2345f
+#define c2 1.2345
+
+#define DELTA 0.001
+
+#define TEST_BIT_BUILTINS(T, S, S2) \
+ { \
+ T arguments[N2] \
+ = {0##S, 1##S, 2##S, 3##S, \
+ 111##S, 333##S, 444##S, 0x80000000##S, \
+ 0x0000ffff##S, 0xf0000000##S, 0xff000000##S, 0xffffffff##S}; \
+ int clrsb[N2] = {}; \
+ int clz[N2] = {}; \
+ int ctz[N2] = {}; \
+ int ffs[N2] = {}; \
+ int parity[N2] = {}; \
+ int popcount[N2] = {}; \
+ \
+ _Pragma ("omp target map(to:clz[:N2], ctz[:N2], ffs[:N2], parity[:N2], popcount[:N2])") \
+ { \
+ for (unsigned i = 0; i < N2; i++) \
+ { \
+ clrsb[i] = __builtin_clrsb##S2 (arguments[i]); \
+ clz[i] = __builtin_clz##S2 (arguments[i]); \
+ ctz[i] = __builtin_ctz##S2 (arguments[i]); \
+ ffs[i] = __builtin_ffs##S2 (arguments[i]); \
+ parity[i] = __builtin_parity##S2 (arguments[i]); \
+ popcount[i] = __builtin_popcount##S2 (arguments[i]); \
+ } \
+ } \
+ \
+ for (unsigned i = 0; i < N2; i++) \
+ { \
+ assert (clrsb[i] == __builtin_clrsb##S2 (arguments[i])); \
+ if (arguments[0] != 0) \
+ { \
+ assert (clz[i] == __builtin_clz##S2 (arguments[i])); \
+ assert (ctz[i] == __builtin_ctz##S2 (arguments[i])); \
+ } \
+ assert (ffs[i] == __builtin_ffs##S2 (arguments[i])); \
+ assert (parity[i] == __builtin_parity##S2 (arguments[i])); \
+ assert (popcount[i] == __builtin_popcount##S2 (arguments[i])); \
+ } \
+ }
+
+#define ASSERT(v1, v2) assert (fabs (v1 - v2) < DELTA)
+
+int
+main ()
+{
+ float f[N] = {};
+ float d[N] = {};
+
+/* 1) test direct mapping to HSA insns. */
+
+#pragma omp target map(to: f[ : N], d[ : N])
+ {
+ f[0] = sinf (c1);
+ f[1] = cosf (c1);
+ f[2] = exp2f (c1);
+ f[3] = log2f (c1);
+ f[4] = truncf (c1);
+ f[5] = sqrtf (c1);
+
+ d[0] = trunc (c2);
+ d[1] = sqrt (c2);
+ }
+
+ ASSERT (f[0], sinf (c1));
+ ASSERT (f[1], cosf (c1));
+ ASSERT (f[2], exp2f (c1));
+ ASSERT (f[3], log2f (c1));
+ ASSERT (f[4], truncf (c1));
+ ASSERT (f[5], sqrtf (c1));
+
+ ASSERT (d[0], trunc (c2));
+ ASSERT (d[1], sqrt (c2));
+
+ /* 2) test bit builtins for unsigned int. */
+ TEST_BIT_BUILTINS (int, , );
+
+ /* 3) test bit builtins for unsigned long int. */
+ TEST_BIT_BUILTINS (long, l, l);
+
+ /* 4) test bit builtins for unsigned long long int. */
+ TEST_BIT_BUILTINS (long long, ll, ll);
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.hsa.c/c.exp b/libgomp/testsuite/libgomp.hsa.c/c.exp
new file mode 100644
index 0000000..4614192
--- /dev/null
+++ b/libgomp/testsuite/libgomp.hsa.c/c.exp
@@ -0,0 +1,42 @@
+if [info exists lang_library_path] then {
+ unset lang_library_path
+ unset lang_link_flags
+}
+if [info exists lang_test_file] then {
+ unset lang_test_file
+}
+if [info exists lang_include_flags] then {
+ unset lang_include_flags
+}
+
+load_lib libgomp-dg.exp
+load_gcc_lib gcc-dg.exp
+
+# Initialize dg.
+dg-init
+
+# Turn on OpenMP.
+lappend ALWAYS_CFLAGS "additional_flags=-fopenmp"
+
+set ld_library_path $always_ld_library_path
+append ld_library_path [gcc-set-multilib-library-path $GCC_UNDER_TEST]
+set_ld_library_path_env_vars
+
+global DEFAULT_CFLAGS
+if [info exists DEFAULT_CFLAGS] then {
+ set CFLAGS_list [list "-O0" $DEFAULT_CFLAGS]
+} else {
+ set CFLAGS_list [list "-O0" "-O2"]
+}
+
+if [check_effective_target_hsa_offloading_selected] {
+ foreach USE_CFLAGS $CFLAGS_list {
+ # Gather a list of all tests.
+ set tests [lsort [find $srcdir/$subdir *.c]]
+ # Main loop.
+ dg-runtest $tests "" [concat $USE_CFLAGS "-Whsa"]
+ }
+}
+
+# All done.
+dg-finish
diff --git a/libgomp/testsuite/libgomp.hsa.c/complex-1.c b/libgomp/testsuite/libgomp.hsa.c/complex-1.c
new file mode 100644
index 0000000..438c64a
--- /dev/null
+++ b/libgomp/testsuite/libgomp.hsa.c/complex-1.c
@@ -0,0 +1,65 @@
+#include <assert.h>
+#include <complex.h>
+#include <math.h>
+
+#define uchar unsigned char
+#define C 123
+
+#define TEST(type) \
+ type foo_##type (void) \
+ { \
+ _Complex type a = C + 45I; \
+ return __real__ a; \
+ }
+
+#pragma omp declare target
+TEST (char)
+TEST (uchar)
+TEST (short)
+TEST (int)
+
+float
+bar (float a, float b)
+{
+ _Complex float c = a + b * I;
+
+ c += 11.f + 12.f * I;
+
+ _Complex float d = 2.f + 4.44f * I;
+
+ return __real__(crealf (c + d) + cimag (d) * I);
+}
+
+#pragma omp end declare target
+
+int
+main (void)
+{
+ int v = 0;
+ float v2 = 0.0f;
+
+#pragma omp target map(to: v)
+ v = foo_char ();
+
+ assert (v == C);
+
+#pragma omp target map(to: v)
+ v = foo_uchar ();
+
+ assert (v == C);
+
+#pragma omp target map(to: v)
+ v = foo_short ();
+
+ assert (v == C);
+
+#pragma omp target map(to: v)
+ v = foo_int ();
+
+ assert (v == C);
+
+#pragma omp target map(to: v2)
+ v2 = bar (1.12f, 4.44f);
+
+ assert (fabs (v2 - 14.12) < 0.0001f);
+}
diff --git a/libgomp/testsuite/libgomp.hsa.c/formal-actual-args-1.c b/libgomp/testsuite/libgomp.hsa.c/formal-actual-args-1.c
new file mode 100644
index 0000000..058a036
--- /dev/null
+++ b/libgomp/testsuite/libgomp.hsa.c/formal-actual-args-1.c
@@ -0,0 +1,83 @@
+#include <assert.h>
+
+struct Cube
+{
+ int x;
+ int y;
+ int z;
+};
+
+#pragma omp declare target
+int
+foo (short a)
+{
+ switch (a)
+ {
+ case 1:
+ return 11;
+ break;
+ case 33:
+ return 333;
+ break;
+ case 55:
+ return 55;
+ break;
+ default:
+ return -1;
+ }
+}
+
+int
+bar (int a)
+{
+ int *ptr = &a;
+
+ *ptr = 100;
+ return a + *ptr;
+}
+
+struct Cube
+baz (struct Cube c)
+{
+ c.x = 11;
+ return c;
+}
+
+#pragma omp end declare target
+
+#define s 100
+
+int
+main (int argc)
+{
+ /* Test 1: argument types: char to short. */
+
+ int array[s];
+#pragma omp target map(tofrom : array[ : s])
+ {
+ for (char i = 0; i < s; i++)
+ array[i] = foo (i);
+ }
+
+ for (int i = 0; i < s; i++)
+ assert (array[i] == foo (i));
+
+ /* Test 2: argument address is taken. */
+ int v = 2;
+
+#pragma omp target map(tofrom : v)
+ v = bar (v);
+
+ assert (v == 200);
+
+ /* Test 3: passing a structure as a function argument. */
+ struct Cube r;
+ struct Cube c = {.x = 1, .y = 2, .z = 3};
+
+#pragma omp target map(to : r) map(from : c)
+ r = baz (c);
+
+ assert (r.x == 11);
+ assert (r.y == c.y);
+ assert (r.z == c.z);
+}
diff --git a/libgomp/testsuite/libgomp.hsa.c/function-call-1.c b/libgomp/testsuite/libgomp.hsa.c/function-call-1.c
new file mode 100644
index 0000000..7f15dff
--- /dev/null
+++ b/libgomp/testsuite/libgomp.hsa.c/function-call-1.c
@@ -0,0 +1,50 @@
+#define size 8
+
+#pragma omp declare target
+int
+identity (int x)
+{
+ return x;
+}
+
+int
+expx (int x, int n)
+{
+ for (int i = 0; i < n - 1; i++)
+ x *= x;
+
+ return x;
+}
+
+float
+init (int x, int y)
+{
+ int x1 = identity (identity (identity (identity (x))));
+ int y1 = identity (identity (identity (identity (y))));
+
+ int x2 = expx (x1, 2);
+ int y2 = expx (y1, 2);
+
+ return (x2 + y2);
+}
+#pragma omp end declare target
+
+int
+main ()
+{
+ int i, j;
+ int a[size][size];
+
+#pragma omp target teams map(to:a[:size][:size])
+#pragma omp distribute parallel for default(none) private(i, j) shared(a)
+ for (i = 0; i < size; ++i)
+ for (j = 0; j < size; ++j)
+ a[i][j] = init (i, j);
+
+ for (i = 0; i < size; ++i)
+ for (j = 0; j < size; ++j)
+ if (i * i + j * j != a[i][j])
+ __builtin_abort ();
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.hsa.c/get-level-1.c b/libgomp/testsuite/libgomp.hsa.c/get-level-1.c
new file mode 100644
index 0000000..81c9df0
--- /dev/null
+++ b/libgomp/testsuite/libgomp.hsa.c/get-level-1.c
@@ -0,0 +1,26 @@
+#include <omp.h>
+
+int
+main ()
+{
+ int i;
+ int level = -1;
+
+#pragma omp target map(tofrom : level)
+ {
+ level = omp_get_level ();
+ }
+
+ if (level != 0)
+ __builtin_abort ();
+
+#pragma omp target teams map(tofrom : level)
+#pragma omp distribute parallel for default(none) private(i) shared(level)
+ for (i = 0; i < 1; ++i)
+ level += omp_get_level ();
+
+ if (level != 1)
+ __builtin_abort ();
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.hsa.c/gridify-1.c b/libgomp/testsuite/libgomp.hsa.c/gridify-1.c
new file mode 100644
index 0000000..b670b9b
--- /dev/null
+++ b/libgomp/testsuite/libgomp.hsa.c/gridify-1.c
@@ -0,0 +1,26 @@
+void __attribute__((noinline, noclone))
+foo (int n, int *a, int workgroup_size)
+{
+ int i;
+#pragma omp target
+#pragma omp teams thread_limit(workgroup_size)
+#pragma omp distribute parallel for shared(a) firstprivate(n) private(i)
+ for (i = 0; i < n; i++)
+ a[i]++;
+}
+
+int main (int argc, char **argv)
+{
+ int n = 32;
+ int *a = __builtin_malloc (sizeof (int) * n);
+ int i;
+
+ __builtin_memset (a, 0, sizeof (int) * n);
+ foo (n, a, 32);
+ for (i = 0; i < n; i ++)
+ {
+ if (a[i] != 1)
+ __builtin_abort ();
+ }
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.hsa.c/gridify-2.c b/libgomp/testsuite/libgomp.hsa.c/gridify-2.c
new file mode 100644
index 0000000..3692eb0
--- /dev/null
+++ b/libgomp/testsuite/libgomp.hsa.c/gridify-2.c
@@ -0,0 +1,26 @@
+void __attribute__((noinline, noclone))
+foo (int j, int n, int *a)
+{
+ int i;
+#pragma omp target
+#pragma omp teams
+#pragma omp distribute parallel for shared(a) firstprivate(n) private(i) firstprivate(j)
+ for (i = j + 1; i < n; i++)
+ a[i] = i;
+}
+
+int main (int argc, char **argv)
+{
+ int n = 32;
+ int *a = __builtin_malloc (sizeof (int) * n);
+ int i, j = 4;
+
+ __builtin_memset (a, 0, sizeof (int) * n);
+ foo (j, n, a);
+ for (i = j + 1; i < n; i ++)
+ {
+ if (a[i] != i)
+ __builtin_abort ();
+ }
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.hsa.c/gridify-3.c b/libgomp/testsuite/libgomp.hsa.c/gridify-3.c
new file mode 100644
index 0000000..f881d81
--- /dev/null
+++ b/libgomp/testsuite/libgomp.hsa.c/gridify-3.c
@@ -0,0 +1,39 @@
+#define THE_LOOP \
+ for (i = j + 1; i < n; i += 3) \
+ a[i] = i
+
+void __attribute__((noinline, noclone))
+foo (int j, int n, int *a)
+{
+ int i;
+#pragma omp target
+#pragma omp teams
+#pragma omp distribute parallel for shared(a) firstprivate(n) private(i) firstprivate(j)
+ THE_LOOP;
+}
+
+void __attribute__((noinline, noclone))
+bar (int j, int n, int *a)
+{
+ int i;
+ THE_LOOP;
+}
+
+int main (int argc, char **argv)
+{
+ int n = 32;
+ int *a = __builtin_malloc (sizeof (int) * n);
+ int *ref = __builtin_malloc (sizeof (int) * n);
+ int i, j = 4;
+
+ __builtin_memset (a, 0, sizeof (int) * n);
+ __builtin_memset (ref, 0, sizeof (int) * n);
+ bar (j, n, ref);
+ foo (j, n, a);
+ for (i = 0; i < n; i ++)
+ {
+ if (a[i] != ref[i])
+ __builtin_abort ();
+ }
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.hsa.c/gridify-4.c b/libgomp/testsuite/libgomp.hsa.c/gridify-4.c
new file mode 100644
index 0000000..c3fbdbf
--- /dev/null
+++ b/libgomp/testsuite/libgomp.hsa.c/gridify-4.c
@@ -0,0 +1,45 @@
+#define THE_LOOP \
+ for (i = j + 1; i < n; i += 3) \
+ a[i] = i
+
+void __attribute__((noinline, noclone))
+foo (int j, int n, int *a)
+{
+#pragma omp parallel
+ {
+ #pragma omp single
+ {
+ int i;
+#pragma omp target
+#pragma omp teams
+#pragma omp distribute parallel for shared(a) firstprivate(n) private(i) firstprivate(j)
+ THE_LOOP;
+ }
+ }
+}
+
+void __attribute__((noinline, noclone))
+bar (int j, int n, int *a)
+{
+ int i;
+ THE_LOOP;
+}
+
+int main (int argc, char **argv)
+{
+ int n = 32;
+ int *a = __builtin_malloc (sizeof (int) * n);
+ int *ref = __builtin_malloc (sizeof (int) * n);
+ int i, j = 4;
+
+ __builtin_memset (a, 0, sizeof (int) * n);
+ __builtin_memset (ref, 0, sizeof (int) * n);
+ bar (j, n, ref);
+ foo (j, n, a);
+ for (i = 0; i < n; i ++)
+ {
+ if (a[i] != ref[i])
+ __builtin_abort ();
+ }
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.hsa.c/memory-operations-1.c b/libgomp/testsuite/libgomp.hsa.c/memory-operations-1.c
new file mode 100644
index 0000000..a17be93
--- /dev/null
+++ b/libgomp/testsuite/libgomp.hsa.c/memory-operations-1.c
@@ -0,0 +1,92 @@
+#include <assert.h>
+
+#define C 55
+
+int i, j, k;
+
+static void
+test_bzero (unsigned size)
+{
+ unsigned bsize = size * sizeof (int);
+ int *x = __builtin_malloc (bsize);
+ __builtin_memset (x, C, bsize);
+
+#pragma omp target map(tofrom: x[:size]) map(from: bsize)
+ {
+ __builtin_bzero (x, bsize);
+ }
+
+ char *buffer = (char *) x;
+ for (unsigned i = 0; i < bsize; ++i)
+ assert (buffer[i] == 0);
+}
+
+static void
+test_memcpy (unsigned size)
+{
+ unsigned bsize = size * sizeof (int);
+ int *x = __builtin_malloc (bsize);
+ __builtin_memset (x, C, bsize);
+ int *y = __builtin_malloc (bsize);
+
+#pragma omp target map(tofrom: x[:size], y[:size]) map(from: bsize)
+ {
+ __builtin_memcpy (y, x, bsize);
+ }
+
+ char *buffer = (char *) y;
+ for (unsigned i = 0; i < bsize; ++i)
+ assert (buffer[i] == C);
+}
+
+static void
+test_mempcpy (unsigned size)
+{
+ unsigned bsize = size * sizeof (int);
+ int *x = __builtin_malloc (bsize);
+ __builtin_memset (x, C, bsize);
+ int *y = __builtin_malloc (bsize);
+ int *ptr = 0;
+
+#pragma omp target map(tofrom :x[:size], y[:size], ptr) map(from: bsize)
+ {
+ ptr = __builtin_mempcpy (y, x, bsize);
+ }
+
+ char *buffer = (char *) y;
+ for (unsigned i = 0; i < bsize; ++i)
+ assert (buffer[i] == C);
+
+ assert (ptr == y + size);
+}
+
+static void
+test_memset (unsigned size)
+{
+ unsigned bsize = size * sizeof (int);
+ int *x = __builtin_malloc (bsize);
+ __builtin_bzero (x, bsize);
+
+#pragma omp target map(tofrom : x[:size]) map(from: bsize)
+ {
+ __builtin_memset (x, C, bsize);
+ }
+
+ char *buffer = (char *) x;
+ for (unsigned i = 0; i < bsize; ++i)
+ assert (buffer[i] == C);
+}
+
+int
+main (void)
+{
+ unsigned tests[] = {1, 2, 3, 4, 5, 8, 15, 17, 23, 33, 0};
+
+ for (unsigned i = 0; tests[i]; i++)
+ {
+ test_bzero (tests[i]);
+ test_memset (tests[i]);
+ test_memcpy (tests[i]);
+ test_mempcpy (tests[i]);
+ }
+}
diff --git a/libgomp/testsuite/libgomp.hsa.c/pr69568.c b/libgomp/testsuite/libgomp.hsa.c/pr69568.c
new file mode 100644
index 0000000..6262eee
--- /dev/null
+++ b/libgomp/testsuite/libgomp.hsa.c/pr69568.c
@@ -0,0 +1,41 @@
+/* PR hsa/69568 */
+
+typedef float float2 __attribute__ ((vector_size (8)));
+float2 *output;
+
+void __attribute__((noinline, noclone))
+foo (int n, float2 *a, int workgroup_size)
+{
+ int i;
+#pragma omp target map(from:a[:n]) firstprivate(n, workgroup_size)
+#pragma omp teams thread_limit(workgroup_size)
+#pragma omp distribute parallel for shared(a) firstprivate(n) private(i)
+ for (i = 0; i < n; i++)
+ { float2 v;
+ v[0] = i;
+ v[1] = 1+i;
+ a[i] = v;
+ }
+}
+
+int main (int argc, char **argv)
+{
+ int n = 32;
+ float2 *a = __builtin_malloc (sizeof (float2) * n);
+ int i;
+
+ __builtin_memset (a, 0, sizeof (float2) * n);
+ foo (n, a, 32);
+ for (i = 0; i < n; i++)
+ {
+ float2 v = a[i];
+ if (__builtin_abs (v[0] - i) > 0.1
+ || __builtin_abs (v[1] - i - 1) > 0.1)
+ {
+ __builtin_abort ();
+ return 1;
+ }
+ }
+ return 0;
+}
+
diff --git a/libgomp/testsuite/libgomp.hsa.c/rotate-1.c b/libgomp/testsuite/libgomp.hsa.c/rotate-1.c
new file mode 100644
index 0000000..494388b
--- /dev/null
+++ b/libgomp/testsuite/libgomp.hsa.c/rotate-1.c
@@ -0,0 +1,39 @@
+#include <assert.h>
+#include <limits.h>
+
+#define T unsigned int
+#define BITSIZE CHAR_BIT * sizeof (T)
+
+#define C1 123u
+
+#pragma omp declare target
+T
+rotate (T value, T shift)
+{
+ T r = (value << shift) | (value >> (BITSIZE - shift));
+ return (r >> shift) | (r << (BITSIZE - shift));
+}
+#pragma omp end declare target
+
+int
+main (int argc)
+{
+ T v1, v2, v3, v4, v5;
+
+#pragma omp target map(to: v1, v2, v3, v4, v5)
+ {
+ v1 = rotate (C1, 10);
+ v2 = rotate (C1, 2);
+ v3 = rotate (C1, 5);
+ v4 = rotate (C1, 16);
+ v5 = rotate (C1, 32);
+ }
+
+ assert (v1 == C1);
+ assert (v2 == C1);
+ assert (v3 == C1);
+ assert (v4 == C1);
+ assert (v5 == C1);
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.hsa.c/switch-1.c b/libgomp/testsuite/libgomp.hsa.c/switch-1.c
new file mode 100644
index 0000000..a180cf6
--- /dev/null
+++ b/libgomp/testsuite/libgomp.hsa.c/switch-1.c
@@ -0,0 +1,145 @@
+#include <assert.h>
+
+#define s 100
+
+#pragma omp declare target
+int
+switch1 (int a)
+{
+ switch (a)
+ {
+ case 1:
+ return 11;
+ case 33:
+ return 333;
+ case 55:
+ return 55;
+ default:
+ return -1;
+ }
+}
+
+int
+switch2 (int a)
+{
+ switch (a)
+ {
+ case 1 ... 11:
+ return 11;
+ break;
+ case 33:
+ return 333;
+ break;
+ case 55:
+ return 55;
+ break;
+ default:
+ return -1;
+ }
+}
+
+int
+switch3 (int a)
+{
+ switch (a)
+ {
+ case 1 ... 11:
+ return 11;
+ case 12 ... 22:
+ return 22;
+ case 23 ... 33:
+ return 33;
+ case 34 ... 44:
+ return 44;
+ default:
+ return 44;
+ }
+}
+
+int
+switch4 (int a, int b)
+{
+ switch (a)
+ {
+ case 1 ... 11:
+ return a;
+ case 12 ... 22:
+ return b;
+ case 23 ... 33:
+ return a;
+ case 34 ... 44:
+ return b;
+ default:
+ return 12345;
+ }
+}
+
+int
+switch5 (int a, int b)
+{
+ switch (a)
+ {
+ case 1 ... 2:
+ return 1;
+ case 3 ... 4:
+ return 2;
+ case 5 ... 6:
+ return 3;
+ case 7 ... 11:
+ return 4;
+ }
+
+ return -1;
+}
+#pragma omp end declare target
+
+int
+main (int argc)
+{
+ int array[s];
+
+#pragma omp target map(tofrom : array[:s])
+ {
+ for (int i = 0; i < s; i++)
+ array[i] = switch1 (i);
+ }
+
+ for (int i = 0; i < s; i++)
+ assert (array[i] == switch1 (i));
+
+#pragma omp target map(tofrom : array[:s])
+ {
+ for (int i = 0; i < s; i++)
+ array[i] = switch2 (i);
+ }
+
+ for (int i = 0; i < s; i++)
+ assert (array[i] == switch2 (i));
+
+#pragma omp target map(tofrom : array[:s])
+ {
+ for (int i = 0; i < s; i++)
+ array[i] = switch3 (i);
+ }
+
+ for (int i = 0; i < s; i++)
+ assert (array[i] == switch3 (i));
+
+#pragma omp target map(tofrom : array[:s])
+ {
+ for (int i = 0; i < s; i++)
+ array[i] = switch4 (i, i + 1);
+ }
+
+ for (int i = 0; i < s; i++)
+ assert (array[i] == switch4 (i, i + 1));
+
+#pragma omp target map(tofrom : array[:s])
+ {
+ for (int i = 0; i < s; i++)
+ array[i] = switch5 (i, i + 1);
+ }
+
+ for (int i = 0; i < s; i++)
+ assert (array[i] == switch5 (i, i + 1));
+}
diff --git a/libgomp/testsuite/libgomp.hsa.c/switch-branch-1.c b/libgomp/testsuite/libgomp.hsa.c/switch-branch-1.c
new file mode 100644
index 0000000..9af1d6d
--- /dev/null
+++ b/libgomp/testsuite/libgomp.hsa.c/switch-branch-1.c
@@ -0,0 +1,116 @@
+#include <assert.h>
+
+#define s 100
+
+#pragma omp declare target
+int
+switch1 (unsigned a)
+{
+ switch (a)
+ {
+ case 1 ... 11:
+ return 11;
+ case 12 ... 13:
+ return 22;
+ default:
+ return 44;
+ }
+}
+
+int
+switch2 (unsigned a)
+{
+ switch (a)
+ {
+ case 1 ... 5:
+ return 1;
+ case 9 ... 11:
+ return a + 3;
+ case 12 ... 13:
+ return a + 3;
+ default:
+ return 44;
+ }
+}
+
+#define OFFSET 12
+
+int
+switch3 (unsigned a)
+{
+ switch (a)
+ {
+ case (OFFSET + 0):
+ return 1;
+ case (OFFSET + 1)...(OFFSET + 11):
+ return 11;
+ case (OFFSET + 12)...(OFFSET + 13):
+ return (OFFSET + 22);
+ default:
+ return (OFFSET + 44);
+ }
+}
+
+int
+switch4 (unsigned a)
+{
+ switch (a)
+ {
+ case -2:
+ return 1;
+ case -1:
+ return a + 3;
+ case 3:
+ return a + 3;
+ default:
+ return 44;
+ }
+}
+#pragma omp end declare target
+
+#define low -33
+#define high 55
+
+int
+main (int argc)
+{
+ int array[s];
+
+#pragma omp target map(tofrom : array[:s])
+ {
+ for (int i = low; i < high; i++)
+ array[i - low] = switch1 (i);
+ }
+
+ for (int i = low; i < high; i++)
+ assert (array[i - low] == switch1 (i));
+
+#pragma omp target map(tofrom : array[:s])
+ {
+ for (int i = low; i < high; i++)
+ array[i - low] = switch2 (i);
+ }
+
+ for (int i = low; i < high; i++)
+ assert (array[i - low] == switch2 (i));
+
+#pragma omp target map(tofrom : array[:s])
+ {
+ for (int i = low; i < high; i++)
+ array[i - low] = switch3 (i);
+ }
+
+ for (int i = low; i < high; i++)
+ assert (array[i - low] == switch3 (i));
+
+#pragma omp target map(tofrom : array[:s])
+ {
+ for (int i = low; i < high; i++)
+ array[i - low] = switch4 (i);
+ }
+
+ for (int i = low; i < high; i++)
+ assert (array[i - low] == switch4 (i));
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.oacc-c++/c++.exp b/libgomp/testsuite/libgomp.oacc-c++/c++.exp
index 88b0269..608b298 100644
--- a/libgomp/testsuite/libgomp.oacc-c++/c++.exp
+++ b/libgomp/testsuite/libgomp.oacc-c++/c++.exp
@@ -2,6 +2,7 @@
load_lib libgomp-dg.exp
load_gcc_lib gcc-dg.exp
+load_gcc_lib torture-options.exp
global shlib_ext
@@ -13,13 +14,9 @@ if [info exists lang_include_flags] then {
unset lang_include_flags
}
-# If a testcase doesn't have special options, use these.
-if ![info exists DEFAULT_CFLAGS] then {
- set DEFAULT_CFLAGS "-O2"
-}
-
# Initialize dg.
dg-init
+torture-init
# Turn on OpenACC.
lappend ALWAYS_CFLAGS "additional_flags=-fopenacc"
@@ -104,12 +101,36 @@ if { $lang_test_file_found } {
setenv ACC_DEVICE_TYPE $offload_target_openacc
- dg-runtest $tests "$tagopt" "$libstdcxx_includes $DEFAULT_CFLAGS"
+ # To get better test coverage for device-specific code that is only
+ # ever used in offloading configurations, we'd like more thorough
+ # testing for test cases that deal with offloading, which most of all
+ # OpenACC test cases are. We enable torture testing, but limit it to
+ # -O0 and -O2 only, to avoid testing times exploding too much, under
+ # the assumption that between -O0 and -O[something] there is the
+ # biggest difference in the overall structure of the generated code.
+ switch $offload_target_openacc {
+ host {
+ set-torture-options [list \
+ { -O2 } ]
+ }
+ default {
+ set-torture-options [list \
+ { -O0 } \
+ { -O2 } ]
+ }
+ }
+
+ gcc-dg-runtest $tests "$tagopt" "$libstdcxx_includes"
}
+} else {
+ # Call this once, which placates the subsequent torture-finish.
+ set-torture-options [list \
+ { INVALID } ]
}
# See above.
set GCC_UNDER_TEST "$SAVE_GCC_UNDER_TEST"
# All done.
+torture-finish
dg-finish
diff --git a/libgomp/testsuite/libgomp.oacc-c++/template-reduction.C b/libgomp/testsuite/libgomp.oacc-c++/template-reduction.C
new file mode 100644
index 0000000..fb5924c
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c++/template-reduction.C
@@ -0,0 +1,98 @@
+const int n = 100;
+
+// Check explicit template copy map
+
+template<typename T> T
+sum (T array[])
+{
+ T s = 0;
+
+#pragma acc parallel loop num_gangs (10) gang reduction (+:s) copy (s, array[0:n])
+ for (int i = 0; i < n; i++)
+ s += array[i];
+
+ return s;
+}
+
+// Check implicit template copy map
+
+template<typename T> T
+sum ()
+{
+ T s = 0;
+ T array[n];
+
+ for (int i = 0; i < n; i++)
+ array[i] = i+1;
+
+#pragma acc parallel loop num_gangs (10) gang reduction (+:s) copy (s)
+ for (int i = 0; i < n; i++)
+ s += array[i];
+
+ return s;
+}
+
+// Check present and async
+
+template<typename T> T
+async_sum (T array[])
+{
+ T s = 0;
+
+#pragma acc parallel loop num_gangs (10) gang async (1) present (array[0:n])
+ for (int i = 0; i < n; i++)
+ array[i] = i+1;
+
+#pragma acc parallel loop num_gangs (10) gang reduction (+:s) present (array[0:n]) copy (s) async wait (1)
+ for (int i = 0; i < n; i++)
+ s += array[i];
+
+#pragma acc wait
+
+ return s;
+}
+
+// Check present and async and an explicit firstprivate
+
+template<typename T> T
+async_sum (int c)
+{
+ T s = 0;
+
+#pragma acc parallel loop num_gangs (10) gang reduction (+:s) copy(s) firstprivate (c) async wait (1)
+ for (int i = 0; i < n; i++)
+ s += i+c;
+
+#pragma acc wait
+
+ return s;
+}
+
+int
+main()
+{
+ int a[n];
+ int result = 0;
+
+ for (int i = 0; i < n; i++)
+ {
+ a[i] = i+1;
+ result += i+1;
+ }
+
+ if (sum (a) != result)
+ __builtin_abort ();
+
+ if (sum<int> () != result)
+ __builtin_abort ();
+
+#pragma acc enter data copyin (a)
+ if (async_sum (a) != result)
+ __builtin_abort ();
+
+ if (async_sum<int> (1) != result)
+ __builtin_abort ();
+#pragma acc exit data delete (a)
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/acc-on-device-2.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/acc-on-device-2.c
index e5d9c36..bfcb67d 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/acc-on-device-2.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/acc-on-device-2.c
@@ -1,9 +1,8 @@
-/* { dg-additional-options "-O0" } */
+/* Test the acc_on_device library function. */
+/* { dg-additional-options "-fno-builtin-acc_on_device" } */
#include <openacc.h>
-/* acc_on_device might not be folded at -O0, but it should work. */
-
int main ()
{
int dev;
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/acc-on-device.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/acc-on-device.c
index 88c000e..e0d8710 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/acc-on-device.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/acc-on-device.c
@@ -1,5 +1,6 @@
/* { dg-do compile } */
-/* { dg-additional-options "-O2" } */
+/* We don't expect this to work with optimizations disabled.
+ { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
#include <openacc.h>
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/asyncwait-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/asyncwait-1.c
index 22cef6d..f3b490a 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/asyncwait-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/asyncwait-1.c
@@ -1,4 +1,6 @@
/* { dg-do run { target openacc_nvidia_accel_selected } } */
+/* <http://news.gmane.org/find-root.php?message_id=%3C87pp0aaksc.fsf%40kepler.schwinge.homeip.net%3E>.
+ { dg-xfail-run-if "TODO" { *-*-* } } */
/* { dg-additional-options "-lcuda" } */
#include <openacc.h>
@@ -460,6 +462,438 @@ main (int argc, char **argv)
abort ();
}
+ for (i = 0; i < N; i++)
+ {
+ a[i] = 3.0;
+ b[i] = 0.0;
+ }
+
+#pragma acc data copy (a[0:N]) copy (b[0:N]) copyin (N)
+ {
+
+#pragma acc kernels async
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ b[ii] = a[ii];
+ }
+
+#pragma acc wait
+
+ }
+
+ for (i = 0; i < N; i++)
+ {
+ if (a[i] != 3.0)
+ abort ();
+
+ if (b[i] != 3.0)
+ abort ();
+ }
+
+ for (i = 0; i < N; i++)
+ {
+ a[i] = 2.0;
+ b[i] = 0.0;
+ }
+
+#pragma acc data copy (a[0:N]) copy (b[0:N]) copyin (N)
+ {
+
+#pragma acc kernels async (1)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ b[ii] = a[ii];
+ }
+
+#pragma acc wait (1)
+
+ }
+
+ for (i = 0; i < N; i++)
+ {
+ if (a[i] != 2.0)
+ abort ();
+
+ if (b[i] != 2.0)
+ abort ();
+ }
+
+ for (i = 0; i < N; i++)
+ {
+ a[i] = 3.0;
+ b[i] = 0.0;
+ c[i] = 0.0;
+ d[i] = 0.0;
+ }
+
+#pragma acc data copy (a[0:N]) copy (b[0:N]) copy (c[0:N]) copy (d[0:N]) copyin (N)
+ {
+
+#pragma acc kernels async (1)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ b[ii] = (a[ii] * a[ii] * a[ii]) / a[ii];
+ }
+
+#pragma acc kernels async (1)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ c[ii] = (a[ii] + a[ii] + a[ii] + a[ii]) / a[ii];
+ }
+
+
+#pragma acc kernels async (1)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ d[ii] = ((a[ii] * a[ii] + a[ii]) / a[ii]) - a[ii];
+ }
+
+#pragma acc wait (1)
+
+ }
+
+ for (i = 0; i < N; i++)
+ {
+ if (a[i] != 3.0)
+ abort ();
+
+ if (b[i] != 9.0)
+ abort ();
+
+ if (c[i] != 4.0)
+ abort ();
+
+ if (d[i] != 1.0)
+ abort ();
+ }
+
+ for (i = 0; i < N; i++)
+ {
+ a[i] = 2.0;
+ b[i] = 0.0;
+ c[i] = 0.0;
+ d[i] = 0.0;
+ e[i] = 0.0;
+ }
+
+#pragma acc data copy (a[0:N], b[0:N], c[0:N], d[0:N], e[0:N]) copyin (N)
+ {
+
+#pragma acc kernels async (1)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ b[ii] = (a[ii] * a[ii] * a[ii]) / a[ii];
+ }
+
+#pragma acc kernels async (1)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ c[ii] = (a[ii] + a[ii] + a[ii] + a[ii]) / a[ii];
+ }
+
+#pragma acc kernels async (1)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ d[ii] = ((a[ii] * a[ii] + a[ii]) / a[ii]) - a[ii];
+ }
+
+#pragma acc kernels wait (1) async (1)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ e[ii] = a[ii] + b[ii] + c[ii] + d[ii];
+ }
+
+#pragma acc wait (1)
+
+ }
+
+ for (i = 0; i < N; i++)
+ {
+ if (a[i] != 2.0)
+ abort ();
+
+ if (b[i] != 4.0)
+ abort ();
+
+ if (c[i] != 4.0)
+ abort ();
+
+ if (d[i] != 1.0)
+ abort ();
+
+ if (e[i] != 11.0)
+ abort ();
+ }
+
+
+ r = cuStreamCreate (&stream1, CU_STREAM_NON_BLOCKING);
+ if (r != CUDA_SUCCESS)
+ {
+ fprintf (stderr, "cuStreamCreate failed: %d\n", r);
+ abort ();
+ }
+
+ acc_set_cuda_stream (1, stream1);
+
+ for (i = 0; i < N; i++)
+ {
+ a[i] = 5.0;
+ b[i] = 0.0;
+ }
+
+#pragma acc data copy (a[0:N], b[0:N]) copyin (N)
+ {
+
+#pragma acc kernels async (1)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ b[ii] = a[ii];
+ }
+
+#pragma acc wait (1)
+
+ }
+
+ for (i = 0; i < N; i++)
+ {
+ if (a[i] != 5.0)
+ abort ();
+
+ if (b[i] != 5.0)
+ abort ();
+ }
+
+ for (i = 0; i < N; i++)
+ {
+ a[i] = 7.0;
+ b[i] = 0.0;
+ c[i] = 0.0;
+ d[i] = 0.0;
+ }
+
+#pragma acc data copy (a[0:N]) copy (b[0:N]) copy (c[0:N]) copy (d[0:N]) copyin (N)
+ {
+
+#pragma acc kernels async (1)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ b[ii] = (a[ii] * a[ii] * a[ii]) / a[ii];
+ }
+
+#pragma acc kernels async (1)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ c[ii] = (a[ii] + a[ii] + a[ii] + a[ii]) / a[ii];
+ }
+
+#pragma acc kernels async (1)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ d[ii] = ((a[ii] * a[ii] + a[ii]) / a[ii]) - a[ii];
+ }
+
+#pragma acc wait (1)
+
+ }
+
+ for (i = 0; i < N; i++)
+ {
+ if (a[i] != 7.0)
+ abort ();
+
+ if (b[i] != 49.0)
+ abort ();
+
+ if (c[i] != 4.0)
+ abort ();
+
+ if (d[i] != 1.0)
+ abort ();
+ }
+
+ for (i = 0; i < N; i++)
+ {
+ a[i] = 3.0;
+ b[i] = 0.0;
+ c[i] = 0.0;
+ d[i] = 0.0;
+ e[i] = 0.0;
+ }
+
+#pragma acc data copy (a[0:N], b[0:N], c[0:N], d[0:N], e[0:N]) copyin (N)
+ {
+
+#pragma acc kernels async (1)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ b[ii] = (a[ii] * a[ii] * a[ii]) / a[ii];
+ }
+
+#pragma acc kernels async (1)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ c[ii] = (a[ii] + a[ii] + a[ii] + a[ii]) / a[ii];
+ }
+
+#pragma acc kernels async (1)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ d[ii] = ((a[ii] * a[ii] + a[ii]) / a[ii]) - a[ii];
+ }
+
+#pragma acc kernels wait (1) async (1)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ e[ii] = a[ii] + b[ii] + c[ii] + d[ii];
+ }
+
+#pragma acc wait (1)
+
+ }
+
+ for (i = 0; i < N; i++)
+ {
+ if (a[i] != 3.0)
+ abort ();
+
+ if (b[i] != 9.0)
+ abort ();
+
+ if (c[i] != 4.0)
+ abort ();
+
+ if (d[i] != 1.0)
+ abort ();
+
+ if (e[i] != 17.0)
+ abort ();
+ }
+
+ for (i = 0; i < N; i++)
+ {
+ a[i] = 4.0;
+ b[i] = 0.0;
+ c[i] = 0.0;
+ d[i] = 0.0;
+ e[i] = 0.0;
+ }
+
+#pragma acc data copyin (a[0:N], b[0:N], c[0:N]) copyin (N)
+ {
+
+#pragma acc kernels async (1)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ b[ii] = (a[ii] * a[ii] * a[ii]) / a[ii];
+ }
+
+#pragma acc kernels async (1)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ c[ii] = (a[ii] + a[ii] + a[ii] + a[ii]) / a[ii];
+ }
+
+#pragma acc update host (a[0:N], b[0:N], c[0:N]) wait (1)
+
+ }
+
+ for (i = 0; i < N; i++)
+ {
+ if (a[i] != 4.0)
+ abort ();
+
+ if (b[i] != 16.0)
+ abort ();
+
+ if (c[i] != 4.0)
+ abort ();
+ }
+
+
+ for (i = 0; i < N; i++)
+ {
+ a[i] = 5.0;
+ b[i] = 0.0;
+ c[i] = 0.0;
+ d[i] = 0.0;
+ e[i] = 0.0;
+ }
+
+#pragma acc data copyin (a[0:N], b[0:N], c[0:N]) copyin (N)
+ {
+
+#pragma acc kernels async (1)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ b[ii] = (a[ii] * a[ii] * a[ii]) / a[ii];
+ }
+
+#pragma acc kernels async (1)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ c[ii] = (a[ii] + a[ii] + a[ii] + a[ii]) / a[ii];
+ }
+
+#pragma acc update host (a[0:N], b[0:N], c[0:N]) async (1)
+
+#pragma acc wait (1)
+
+ }
+
+ for (i = 0; i < N; i++)
+ {
+ if (a[i] != 5.0)
+ abort ();
+
+ if (b[i] != 25.0)
+ abort ();
+
+ if (c[i] != 4.0)
+ abort ();
+ }
+
acc_shutdown (acc_device_nvidia);
return 0;
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/clauses-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/clauses-1.c
index 51c0cf5..410c46c 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/clauses-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/clauses-1.c
@@ -586,6 +586,32 @@ main (int argc, char **argv)
for (i = 0; i < N; i++)
{
+ a[i] = 6.0;
+ b[i] = 0.0;
+ }
+
+#pragma acc parallel pcopy (a[0:N], b[0:N])
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ b[ii] = a[ii];
+ }
+
+ for (i = 0; i < N; i++)
+ {
+ if (b[i] != 6.0)
+ abort ();
+ }
+
+ if (acc_is_present (&a[0], (N * sizeof (float))))
+ abort ();
+
+ if (acc_is_present (&b[0], (N * sizeof (float))))
+ abort ();
+
+ for (i = 0; i < N; i++)
+ {
a[i] = 5.0;
b[i] = 7.0;
}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-2.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/data-clauses-kernels-ipa-pta.c
index f76c926..2cd98bd 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-2.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/data-clauses-kernels-ipa-pta.c
@@ -1,4 +1,4 @@
/* { dg-do run { target lto } } */
/* { dg-additional-options "-fipa-pta -flto -flto-partition=max" } */
-#include "kernels-1.c"
+#include "data-clauses-kernels.c"
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/data-clauses-kernels.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/data-clauses-kernels.c
new file mode 100644
index 0000000..f7f2d1c
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/data-clauses-kernels.c
@@ -0,0 +1,2 @@
+#define CONSTRUCT kernels
+#include "data-clauses.h"
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-2.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/data-clauses-parallel-ipa-pta.c
index d9fff6f..ddcf4e3 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-2.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/data-clauses-parallel-ipa-pta.c
@@ -1,4 +1,4 @@
/* { dg-do run { target lto } } */
/* { dg-additional-options "-fipa-pta -flto -flto-partition=max" } */
-#include "parallel-1.c"
+#include "data-clauses-parallel.c"
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/data-clauses-parallel.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/data-clauses-parallel.c
new file mode 100644
index 0000000..e734b2f
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/data-clauses-parallel.c
@@ -0,0 +1,2 @@
+#define CONSTRUCT parallel
+#include "data-clauses.h"
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/data-clauses.h
index fd9df33..d557bef 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/data-clauses.h
@@ -1,7 +1,3 @@
-/* { dg-do run } */
-
-#include <stdlib.h>
-
int i;
int main(void)
@@ -11,145 +7,145 @@ int main(void)
i = -1;
j = -2;
v = 0;
-#pragma acc parallel /* copyout */ present_or_copyout (v) copyin (i, j)
+#pragma acc CONSTRUCT /* copyout */ present_or_copyout (v) copyin (i, j)
{
if (i != -1 || j != -2)
- abort ();
+ __builtin_abort ();
i = 2;
j = 1;
if (i != 2 || j != 1)
- abort ();
+ __builtin_abort ();
v = 1;
}
#if ACC_MEM_SHARED
if (v != 1 || i != 2 || j != 1)
- abort ();
+ __builtin_abort ();
#else
if (v != 1 || i != -1 || j != -2)
- abort ();
+ __builtin_abort ();
#endif
i = -1;
j = -2;
v = 0;
-#pragma acc parallel /* copyout */ present_or_copyout (v) copyout (i, j)
+#pragma acc CONSTRUCT /* copyout */ present_or_copyout (v) copyout (i, j)
{
i = 2;
j = 1;
if (i != 2 || j != 1)
- abort ();
+ __builtin_abort ();
v = 1;
}
if (v != 1 || i != 2 || j != 1)
- abort ();
+ __builtin_abort ();
i = -1;
j = -2;
v = 0;
-#pragma acc parallel /* copyout */ present_or_copyout (v) copy (i, j)
+#pragma acc CONSTRUCT /* copyout */ present_or_copyout (v) copy (i, j)
{
if (i != -1 || j != -2)
- abort ();
+ __builtin_abort ();
i = 2;
j = 1;
if (i != 2 || j != 1)
- abort ();
+ __builtin_abort ();
v = 1;
}
if (v != 1 || i != 2 || j != 1)
- abort ();
+ __builtin_abort ();
i = -1;
j = -2;
v = 0;
-#pragma acc parallel /* copyout */ present_or_copyout (v) create (i, j)
+#pragma acc CONSTRUCT /* copyout */ present_or_copyout (v) create (i, j)
{
i = 2;
j = 1;
if (i != 2 || j != 1)
- abort ();
+ __builtin_abort ();
v = 1;
}
#if ACC_MEM_SHARED
if (v != 1 || i != 2 || j != 1)
- abort ();
+ __builtin_abort ();
#else
if (v != 1 || i != -1 || j != -2)
- abort ();
+ __builtin_abort ();
#endif
i = -1;
j = -2;
v = 0;
-#pragma acc parallel /* copyout */ present_or_copyout (v) present_or_copyin (i, j)
+#pragma acc CONSTRUCT /* copyout */ present_or_copyout (v) present_or_copyin (i, j)
{
if (i != -1 || j != -2)
- abort ();
+ __builtin_abort ();
i = 2;
j = 1;
if (i != 2 || j != 1)
- abort ();
+ __builtin_abort ();
v = 1;
}
if (v != 1)
- abort ();
+ __builtin_abort ();
#if ACC_MEM_SHARED
if (v != 1 || i != 2 || j != 1)
- abort ();
+ __builtin_abort ();
#else
if (v != 1 || i != -1 || j != -2)
- abort ();
+ __builtin_abort ();
#endif
i = -1;
j = -2;
v = 0;
-#pragma acc parallel /* copyout */ present_or_copyout (v) present_or_copyout (i, j)
+#pragma acc CONSTRUCT /* copyout */ present_or_copyout (v) present_or_copyout (i, j)
{
i = 2;
j = 1;
if (i != 2 || j != 1)
- abort ();
+ __builtin_abort ();
v = 1;
}
if (v != 1 || i != 2 || j != 1)
- abort ();
+ __builtin_abort ();
i = -1;
j = -2;
v = 0;
-#pragma acc parallel /* copyout */ present_or_copyout (v) present_or_copy (i, j)
+#pragma acc CONSTRUCT /* copyout */ present_or_copyout (v) present_or_copy (i, j)
{
if (i != -1 || j != -2)
- abort ();
+ __builtin_abort ();
i = 2;
j = 1;
if (i != 2 || j != 1)
- abort ();
+ __builtin_abort ();
v = 1;
}
if (v != 1 || i != 2 || j != 1)
- abort ();
+ __builtin_abort ();
i = -1;
j = -2;
v = 0;
-#pragma acc parallel /* copyout */ present_or_copyout (v) present_or_create (i, j)
+#pragma acc CONSTRUCT /* copyout */ present_or_copyout (v) present_or_create (i, j)
{
i = 2;
j = 1;
if (i != 2 || j != 1)
- abort ();
+ __builtin_abort ();
v = 1;
}
if (v != 1)
- abort ();
+ __builtin_abort ();
#if ACC_MEM_SHARED
if (v != 1 || i != 2 || j != 1)
- abort ();
+ __builtin_abort ();
#else
if (v != 1 || i != -1 || j != -2)
- abort ();
+ __builtin_abort ();
#endif
i = -1;
@@ -158,23 +154,23 @@ int main(void)
#pragma acc data copyin (i, j)
{
-#pragma acc parallel /* copyout */ present_or_copyout (v) present (i, j)
+#pragma acc CONSTRUCT /* copyout */ present_or_copyout (v) present (i, j)
{
if (i != -1 || j != -2)
- abort ();
+ __builtin_abort ();
i = 2;
j = 1;
if (i != 2 || j != 1)
- abort ();
+ __builtin_abort ();
v = 1;
}
}
#if ACC_MEM_SHARED
if (v != 1 || i != 2 || j != 1)
- abort ();
+ __builtin_abort ();
#else
if (v != 1 || i != -1 || j != -2)
- abort ();
+ __builtin_abort ();
#endif
i = -1;
@@ -183,23 +179,23 @@ int main(void)
#pragma acc data copyin(i, j)
{
-#pragma acc parallel /* copyout */ present_or_copyout (v)
+#pragma acc CONSTRUCT /* copyout */ present_or_copyout (v)
{
if (i != -1 || j != -2)
- abort ();
+ __builtin_abort ();
i = 2;
j = 1;
if (i != 2 || j != 1)
- abort ();
+ __builtin_abort ();
v = 1;
}
}
#if ACC_MEM_SHARED
if (v != 1 || i != 2 || j != 1)
- abort ();
+ __builtin_abort ();
#else
if (v != 1 || i != -1 || j != -2)
- abort ();
+ __builtin_abort ();
#endif
return 0;
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/deviceptr-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/deviceptr-1.c
index e271a37..8247e7b 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/deviceptr-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/deviceptr-1.c
@@ -1,5 +1,3 @@
-/* { dg-do run } */
-
#include <stdlib.h>
int main (void)
@@ -28,5 +26,26 @@ int main (void)
abort ();
#endif
+ a_1 = a_2 = 0;
+
+#pragma acc data deviceptr (a)
+#pragma acc parallel copyout (a_1, a_2)
+ {
+ a_1 = a;
+ a_2 = &a;
+ }
+
+ if (a != A)
+ abort ();
+ if (a_1 != a)
+ abort ();
+#if ACC_MEM_SHARED
+ if (a_2 != &a)
+ abort ();
+#else
+ if (a_2 == &a)
+ abort ();
+#endif
+
return 0;
}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/firstprivate-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/firstprivate-1.c
index 7f5d3d3..689a443 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/firstprivate-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/firstprivate-1.c
@@ -1,8 +1,7 @@
-/* { dg-do run } */
-
#include <openacc.h>
-int main ()
+
+void t1 ()
{
int ok = 1;
int val = 2;
@@ -28,14 +27,115 @@ int main ()
if (ondev)
{
if (!ok)
- return 1;
+ __builtin_abort ();
if (val != 2)
- return 1;
+ __builtin_abort ();
for (int i = 0; i < 32; i++)
if (ary[i] != 2 + i)
- return 1;
+ __builtin_abort ();
}
-
+}
+
+
+void t2 ()
+{
+ int ok = 1;
+ int val = 2;
+
+#pragma acc data copy(val)
+ {
+#pragma acc parallel present (val)
+ {
+ val = 7;
+ }
+
+#pragma acc parallel firstprivate (val) copy(ok)
+ {
+ ok = val == 7;
+ val = 9;
+ }
+ }
+
+ if (!ok)
+ __builtin_abort ();
+ if (val != 7)
+ __builtin_abort ();
+}
+
+
+#define N 100
+void t3 ()
+{
+ int a, b[N], c, d, i;
+ int n = acc_get_device_type () == acc_device_nvidia ? N : 1;
+
+ a = 5;
+ for (i = 0; i < n; i++)
+ b[i] = -1;
+
+ #pragma acc parallel num_gangs (n) firstprivate (a)
+ #pragma acc loop gang
+ for (i = 0; i < n; i++)
+ {
+ a = a + i;
+ b[i] = a;
+ }
+
+ for (i = 0; i < n; i++)
+ if (a + i != b[i])
+ __builtin_abort ();
+
+ #pragma acc data copy (a)
+ {
+ #pragma acc parallel firstprivate (a) copyout (c)
+ {
+ a = 10;
+ c = a;
+ }
+
+ /* This version of 'a' should still be 5. */
+ #pragma acc parallel copyout (d) present (a)
+ {
+ d = a;
+ }
+ }
+
+ if (c != 10)
+ __builtin_abort ();
+ if (d != 5)
+ __builtin_abort ();
+}
+#undef N
+
+
+void t4 ()
+{
+ int x = 5, i, arr[32];
+
+ for (i = 0; i < 32; i++)
+ arr[i] = 3;
+
+#pragma acc parallel firstprivate(x) copy(arr) num_gangs(32) num_workers(8) vector_length(32)
+ {
+#pragma acc loop gang
+ for (i = 0; i < 32; i++)
+ arr[i] += x;
+ }
+
+ for (i = 0; i < 32; i++)
+ if (arr[i] != 8)
+ __builtin_abort ();
+}
+
+
+int
+main()
+{
+ t1 ();
+ t2 ();
+ t3 ();
+ t4 ();
+
return 0;
}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/firstprivate-2.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/firstprivate-2.c
deleted file mode 100644
index 9666542..0000000
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/firstprivate-2.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* { dg-do run } */
-
-#include <openacc.h>
-
-int main ()
-{
- int ok = 1;
- int val = 2;
-
-#pragma acc data copy(val)
- {
-#pragma acc parallel present (val)
- {
- val = 7;
- }
-
-#pragma acc parallel firstprivate (val) copy(ok)
- {
- ok = val == 7;
- val = 9;
- }
-
- }
-
- if (!ok)
- return 1;
- if(val != 7)
- return 1;
-
- return 0;
-}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/gang-static-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/gang-static-1.c
new file mode 100644
index 0000000..d8ab958
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/gang-static-1.c
@@ -0,0 +1,48 @@
+#include <assert.h>
+
+#define N 100
+
+void
+test (int *a, int *b, int sarg)
+{
+ int i;
+
+ for (i = 0; i < N; i++)
+ assert (a[i] == b[i] + sarg);
+}
+
+int
+main ()
+{
+ int a[N], b[N];
+ int i;
+
+ for (i = 0; i < N; i++)
+ b[i] = i+1;
+
+#pragma acc parallel loop gang (static:*) num_gangs (10)
+ for (i = 0; i < 100; i++)
+ a[i] = b[i] + 0;
+
+ test (a, b, 0);
+
+#pragma acc parallel loop gang (static:1) num_gangs (10)
+ for (i = 0; i < 100; i++)
+ a[i] = b[i] + 1;
+
+ test (a, b, 1);
+
+#pragma acc parallel loop gang (static:5) num_gangs (10)
+ for (i = 0; i < 100; i++)
+ a[i] = b[i] + 5;
+
+ test (a, b, 5);
+
+#pragma acc parallel loop gang (static:20) num_gangs (10)
+ for (i = 0; i < 100; i++)
+ a[i] = b[i] + 20;
+
+ test (a, b, 20);
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/gang-static-2.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/gang-static-2.c
new file mode 100644
index 0000000..ce9632c
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/gang-static-2.c
@@ -0,0 +1,100 @@
+/* { dg-do run { target openacc_nvidia_accel_selected } } */
+/* This code uses nvptx inline assembly guarded with acc_on_device, which is
+ not optimized away at -O0, and then confuses the target assembler.
+ { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
+
+#include <assert.h>
+#include <openacc.h>
+
+#define N 100
+
+#define GANG_ID(I) \
+ (acc_on_device (acc_device_nvidia) \
+ ? ({unsigned __r; \
+ __asm__ volatile ("mov.u32 %0,%%ctaid.x;" : "=r" (__r)); \
+ __r; }) : (I))
+
+int
+test_static(int *a, int num_gangs, int sarg)
+{
+ int i, j;
+
+ if (sarg == 0)
+ sarg = 1;
+
+ for (i = 0; i < N / sarg; i++)
+ for (j = 0; j < sarg; j++)
+ assert (a[i*sarg+j] == i % num_gangs);
+}
+
+int
+test_nonstatic(int *a, int gangs)
+{
+ int i, j;
+
+ for (i = 0; i < N; i+=gangs)
+ for (j = 0; j < gangs; j++)
+ assert (a[i+j] == i/gangs);
+}
+
+int
+main ()
+{
+ int a[N];
+ int i, x;
+
+#pragma acc parallel loop gang (static:*) num_gangs (10)
+ for (i = 0; i < 100; i++)
+ a[i] = GANG_ID (i);
+
+ test_nonstatic (a, 10);
+
+#pragma acc parallel loop gang (static:1) num_gangs (10)
+ for (i = 0; i < 100; i++)
+ a[i] = GANG_ID (i);
+
+ test_static (a, 10, 1);
+
+#pragma acc parallel loop gang (static:2) num_gangs (10)
+ for (i = 0; i < 100; i++)
+ a[i] = GANG_ID (i);
+
+ test_static (a, 10, 2);
+
+#pragma acc parallel loop gang (static:5) num_gangs (10)
+ for (i = 0; i < 100; i++)
+ a[i] = GANG_ID (i);
+
+ test_static (a, 10, 5);
+
+#pragma acc parallel loop gang (static:20) num_gangs (10)
+ for (i = 0; i < 100; i++)
+ a[i] = GANG_ID (i);
+
+ test_static (a, 10, 20);
+
+ /* Non-static gang. */
+#pragma acc parallel loop gang num_gangs (10)
+ for (i = 0; i < 100; i++)
+ a[i] = GANG_ID (i);
+
+ test_nonstatic (a, 10);
+
+ /* Static arguments with a variable expression. */
+
+ x = 20;
+#pragma acc parallel loop gang (static:0+x) num_gangs (10)
+ for (i = 0; i < 100; i++)
+ a[i] = GANG_ID (i);
+
+ test_static (a, 10, 20);
+
+ x = 20;
+#pragma acc parallel loop gang (static:x) num_gangs (10)
+ for (i = 0; i < 100; i++)
+ a[i] = GANG_ID (i);
+
+ test_static (a, 10, 20);
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/if-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/if-1.c
index 6aa3bb7..5398905 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/if-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/if-1.c
@@ -1,5 +1,3 @@
-/* { dg-do run } */
-
#include <openacc.h>
#include <stdlib.h>
#include <stdbool.h>
@@ -608,5 +606,357 @@ main(int argc, char **argv)
abort ();
#endif
+ for (i = 0; i < N; i++)
+ a[i] = 4.0;
+
+#pragma acc kernels copyin(a[0:N]) copyout(b[0:N]) if(1)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ {
+ if (acc_on_device (acc_device_host))
+ b[ii] = a[ii] + 1;
+ else
+ b[ii] = a[ii];
+ }
+ }
+
+#if ACC_MEM_SHARED
+ exp = 5.0;
+#else
+ exp = 4.0;
+#endif
+
+ for (i = 0; i < N; i++)
+ {
+ if (b[i] != exp)
+ abort();
+ }
+
+ for (i = 0; i < N; i++)
+ a[i] = 16.0;
+
+#pragma acc kernels if(0)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ {
+ if (acc_on_device (acc_device_host))
+ b[ii] = a[ii] + 1;
+ else
+ b[ii] = a[ii];
+ }
+ }
+
+ for (i = 0; i < N; i++)
+ {
+ if (b[i] != 17.0)
+ abort();
+ }
+
+ for (i = 0; i < N; i++)
+ a[i] = 8.0;
+
+#pragma acc kernels copyin(a[0:N]) copyout(b[0:N]) if(one)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ {
+ if (acc_on_device (acc_device_host))
+ b[ii] = a[ii] + 1;
+ else
+ b[ii] = a[ii];
+ }
+ }
+
+#if ACC_MEM_SHARED
+ exp = 9.0;
+#else
+ exp = 8.0;
+#endif
+
+ for (i = 0; i < N; i++)
+ {
+ if (b[i] != exp)
+ abort();
+ }
+
+ for (i = 0; i < N; i++)
+ a[i] = 22.0;
+
+#pragma acc kernels if(zero)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ {
+ if (acc_on_device (acc_device_host))
+ b[ii] = a[ii] + 1;
+ else
+ b[ii] = a[ii];
+ }
+ }
+
+ for (i = 0; i < N; i++)
+ {
+ if (b[i] != 23.0)
+ abort();
+ }
+
+ for (i = 0; i < N; i++)
+ a[i] = 16.0;
+
+#pragma acc kernels copyin(a[0:N]) copyout(b[0:N]) if(true)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ {
+ if (acc_on_device (acc_device_host))
+ b[ii] = a[ii] + 1;
+ else
+ b[ii] = a[ii];
+ }
+ }
+
+#if ACC_MEM_SHARED
+ exp = 17.0;
+#else
+ exp = 16.0;
+#endif
+
+ for (i = 0; i < N; i++)
+ {
+ if (b[i] != exp)
+ abort();
+ }
+
+ for (i = 0; i < N; i++)
+ a[i] = 76.0;
+
+#pragma acc kernels if(false)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ {
+ if (acc_on_device (acc_device_host))
+ b[ii] = a[ii] + 1;
+ else
+ b[ii] = a[ii];
+ }
+ }
+
+ for (i = 0; i < N; i++)
+ {
+ if (b[i] != 77.0)
+ abort();
+ }
+
+ for (i = 0; i < N; i++)
+ a[i] = 22.0;
+
+ n = 1;
+
+#pragma acc kernels copyin(a[0:N]) copyout(b[0:N]) if(n)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ {
+ if (acc_on_device (acc_device_host))
+ b[ii] = a[ii] + 1;
+ else
+ b[ii] = a[ii];
+ }
+ }
+
+#if ACC_MEM_SHARED
+ exp = 23.0;
+#else
+ exp = 22.0;
+#endif
+
+ for (i = 0; i < N; i++)
+ {
+ if (b[i] != exp)
+ abort();
+ }
+
+ for (i = 0; i < N; i++)
+ a[i] = 18.0;
+
+ n = 0;
+
+#pragma acc kernels if(n)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ {
+ if (acc_on_device (acc_device_host))
+ b[ii] = a[ii] + 1;
+ else
+ b[ii] = a[ii];
+ }
+ }
+
+ for (i = 0; i < N; i++)
+ {
+ if (b[i] != 19.0)
+ abort();
+ }
+
+ for (i = 0; i < N; i++)
+ a[i] = 49.0;
+
+ n = 1;
+
+#pragma acc kernels copyin(a[0:N]) copyout(b[0:N]) if(n + n)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ {
+ if (acc_on_device (acc_device_host))
+ b[ii] = a[ii] + 1;
+ else
+ b[ii] = a[ii];
+ }
+ }
+
+#if ACC_MEM_SHARED
+ exp = 50.0;
+#else
+ exp = 49.0;
+#endif
+
+ for (i = 0; i < N; i++)
+ {
+ if (b[i] != exp)
+ abort();
+ }
+
+ for (i = 0; i < N; i++)
+ a[i] = 38.0;
+
+ n = 0;
+
+#pragma acc kernels if(n + n)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ {
+ if (acc_on_device (acc_device_host))
+ b[ii] = a[ii] + 1;
+ else
+ b[ii] = a[ii];
+ }
+ }
+
+ for (i = 0; i < N; i++)
+ {
+ if (b[i] != 39.0)
+ abort();
+ }
+
+ for (i = 0; i < N; i++)
+ a[i] = 91.0;
+
+#pragma acc kernels copyin(a[0:N]) copyout(b[0:N]) if(-2)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ {
+ if (acc_on_device (acc_device_host))
+ b[ii] = a[ii] + 1;
+ else
+ b[ii] = a[ii];
+ }
+ }
+
+#if ACC_MEM_SHARED
+ exp = 92.0;
+#else
+ exp = 91.0;
+#endif
+
+ for (i = 0; i < N; i++)
+ {
+ if (b[i] != exp)
+ abort();
+ }
+
+ for (i = 0; i < N; i++)
+ a[i] = 43.0;
+
+#pragma acc kernels copyin(a[0:N]) copyout(b[0:N]) if(one == 1)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ {
+ if (acc_on_device (acc_device_host))
+ b[ii] = a[ii] + 1;
+ else
+ b[ii] = a[ii];
+ }
+ }
+
+#if ACC_MEM_SHARED
+ exp = 44.0;
+#else
+ exp = 43.0;
+#endif
+
+ for (i = 0; i < N; i++)
+ {
+ if (b[i] != exp)
+ abort();
+ }
+
+ for (i = 0; i < N; i++)
+ a[i] = 87.0;
+
+#pragma acc kernels if(one == 0)
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ {
+ if (acc_on_device (acc_device_host))
+ b[ii] = a[ii] + 1;
+ else
+ b[ii] = a[ii];
+ }
+ }
+
+ for (i = 0; i < N; i++)
+ {
+ if (b[i] != 88.0)
+ abort();
+ }
+
+ for (i = 0; i < N; i++)
+ {
+ a[i] = 3.0;
+ b[i] = 9.0;
+ }
+
+#if ACC_MEM_SHARED
+ exp = 0.0;
+ exp2 = 0.0;
+#else
+ acc_map_data (a, d_a, N * sizeof (float));
+ acc_map_data (b, d_b, N * sizeof (float));
+ exp = 3.0;
+ exp2 = 9.0;
+#endif
+
return 0;
}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-1.c
deleted file mode 100644
index 3acfdf5..0000000
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-1.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/* { dg-do run } */
-
-#include <stdlib.h>
-
-int i;
-
-int main (void)
-{
- int j, v;
-
-#if 0
- i = -1;
- j = -2;
- v = 0;
-#pragma acc kernels /* copyout */ present_or_copyout (v) copyin (i, j)
- {
- if (i != -1 || j != -2)
- abort ();
- i = 2;
- j = 1;
- if (i != 2 || j != 1)
- abort ();
- v = 1;
- }
- if (v != 1 || i != -1 || j != -2)
- abort ();
-
- i = -1;
- j = -2;
- v = 0;
-#pragma acc kernels /* copyout */ present_or_copyout (v) copyout (i, j)
- {
- i = 2;
- j = 1;
- if (i != 2 || j != 1)
- abort ();
- v = 1;
- }
- if (v != 1 || i != 2 || j != 1)
- abort ();
-
- i = -1;
- j = -2;
- v = 0;
-#pragma acc kernels /* copyout */ present_or_copyout (v) copy (i, j)
- {
- if (i != -1 || j != -2)
- abort ();
- i = 2;
- j = 1;
- if (i != 2 || j != 1)
- abort ();
- v = 1;
- }
- if (v != 1 || i != 2 || j != 1)
- abort ();
-
- i = -1;
- j = -2;
- v = 0;
-#pragma acc kernels /* copyout */ present_or_copyout (v) create (i, j)
- {
- i = 2;
- j = 1;
- if (i != 2 || j != 1)
- abort ();
- v = 1;
- }
- if (v != 1 || i != -1 || j != -2)
- abort ();
-#endif
-
- i = -1;
- j = -2;
- v = 0;
-#pragma acc kernels /* copyout */ present_or_copyout (v) present_or_copyin (i, j)
- {
- if (i != -1 || j != -2)
- abort ();
- i = 2;
- j = 1;
- if (i != 2 || j != 1)
- abort ();
- v = 1;
- }
- if (v != 1)
- abort ();
-#if ACC_MEM_SHARED
- if (i != 2 || j != 1)
- abort ();
-#else
- if (i != -1 || j != -2)
- abort ();
-#endif
-
- i = -1;
- j = -2;
- v = 0;
-#pragma acc kernels /* copyout */ present_or_copyout (v) present_or_copyout (i, j)
- {
- i = 2;
- j = 1;
- if (i != 2 || j != 1)
- abort ();
- v = 1;
- }
- if (v != 1 || i != 2 || j != 1)
- abort ();
-
- i = -1;
- j = -2;
- v = 0;
-#pragma acc kernels /* copyout */ present_or_copyout (v) present_or_copy (i, j)
- {
- if (i != -1 || j != -2)
- abort ();
- i = 2;
- j = 1;
- if (i != 2 || j != 1)
- abort ();
- v = 1;
- }
- if (v != 1 || i != 2 || j != 1)
- abort ();
-
- i = -1;
- j = -2;
- v = 0;
-#pragma acc kernels /* copyout */ present_or_copyout (v) present_or_create (i, j)
- {
- i = 2;
- j = 1;
- if (i != 2 || j != 1)
- abort ();
- v = 1;
- }
- if (v != 1)
- abort ();
-#if ACC_MEM_SHARED
- if (i != 2 || j != 1)
- abort ();
-#else
- if (i != -1 || j != -2)
- abort ();
-#endif
-
-#if 0
- i = -1;
- j = -2;
- v = 0;
-#pragma acc kernels /* copyout */ present_or_copyout (v) present (i, j)
- {
- if (i != -1 || j != -2)
- abort ();
- i = 2;
- j = 1;
- if (i != 2 || j != 1)
- abort ();
- v = 1;
- }
- if (v != 1 || i != 2 || j != 1)
- abort ();
-#endif
-
-#if 0
- i = -1;
- j = -2;
- v = 0;
-#pragma acc kernels /* copyout */ present_or_copyout (v)
- {
- if (i != -1 || j != -2)
- abort ();
- i = 2;
- j = 1;
- if (i != 2 || j != 1)
- abort ();
- v = 1;
- }
- if (v != 1 || i != 2 || j != 1)
- abort ();
-#endif
-
- return 0;
-}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-alias-ipa-pta-2.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-alias-ipa-pta-2.c
index 0f323c8..e8d65df 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-alias-ipa-pta-2.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-alias-ipa-pta-2.c
@@ -1,4 +1,4 @@
-/* { dg-additional-options "-O2 -fipa-pta" } */
+/* { dg-additional-options "-fipa-pta" } */
#include <stdlib.h>
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-alias-ipa-pta-3.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-alias-ipa-pta-3.c
index 654e750..dd8ca87 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-alias-ipa-pta-3.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-alias-ipa-pta-3.c
@@ -1,4 +1,4 @@
-/* { dg-additional-options "-O2 -fipa-pta" } */
+/* { dg-additional-options "-fipa-pta" } */
#include <stdlib.h>
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-alias-ipa-pta.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-alias-ipa-pta.c
index 44d4fd2..50e7dc1 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-alias-ipa-pta.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-alias-ipa-pta.c
@@ -1,4 +1,4 @@
-/* { dg-additional-options "-O2 -fipa-pta" } */
+/* { dg-additional-options "-fipa-pta" } */
#include <stdlib.h>
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-2.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-2.c
index 13e57bd..c7592d6 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-2.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-2.c
@@ -1,6 +1,3 @@
-/* { dg-do run } */
-/* { dg-additional-options "-ftree-parallelize-loops=32" } */
-
#include <stdlib.h>
#define N (1024 * 512)
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-3.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-3.c
index f61a74a..31114ac 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-3.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-3.c
@@ -1,6 +1,3 @@
-/* { dg-do run } */
-/* { dg-additional-options "-ftree-parallelize-loops=32" } */
-
#include <stdlib.h>
#define N (1024 * 512)
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-2.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-2.c
index 2e4100f..d36592f 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-2.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-2.c
@@ -1,6 +1,3 @@
-/* { dg-do run } */
-/* { dg-additional-options "-ftree-parallelize-loops=32" } */
-
#include <stdlib.h>
#define N 32
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-3.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-3.c
index b3e736b..e622971 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-3.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-3.c
@@ -1,6 +1,3 @@
-/* { dg-do run } */
-/* { dg-additional-options "-ftree-parallelize-loops=32" } */
-
#include <stdlib.h>
#define N 32
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-4.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-4.c
index 8b9affa..c731278 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-4.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-4.c
@@ -1,6 +1,3 @@
-/* { dg-do run } */
-/* { dg-additional-options "-ftree-parallelize-loops=32" } */
-
#include <stdlib.h>
#define N 32
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-5.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-5.c
index 83d4e7f..67dcce2 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-5.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-5.c
@@ -1,6 +1,3 @@
-/* { dg-do run } */
-/* { dg-additional-options "-ftree-parallelize-loops=32" } */
-
#include <stdlib.h>
#define N 32
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-6.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-6.c
index 01d5e5e..b8b5dde 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-6.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-6.c
@@ -1,6 +1,3 @@
-/* { dg-do run } */
-/* { dg-additional-options "-ftree-parallelize-loops=32" } */
-
#include <stdlib.h>
#define N 32
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq.c
index 61d1283..9d9308a 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq.c
@@ -1,6 +1,3 @@
-/* { dg-do run } */
-/* { dg-additional-options "-ftree-parallelize-loops=32" } */
-
#include <stdlib.h>
#define N 32
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-clauses.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-clauses.c
new file mode 100644
index 0000000..2c42497
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-clauses.c
@@ -0,0 +1,62 @@
+/* Exercise the auto, independent, seq and tile loop clauses inside
+ kernels regions. */
+
+#include <assert.h>
+
+#define N 100
+
+void
+check (int *a, int *b)
+{
+ int i;
+
+ for (i = 0; i < N; i++)
+ assert (a[i] == b[i]);
+}
+
+int
+main ()
+{
+ int i, a[N], b[N];
+
+#pragma acc kernels copy(a)
+ {
+#pragma acc loop auto
+ for (i = 0; i < N; i++)
+ a[i] = i;
+ }
+
+ for (i = 0; i < N; i++)
+ b[i] = i;
+
+ check (a, b);
+
+#pragma acc kernels copyout(a)
+ {
+#pragma acc loop independent
+ for (i = 0; i < N; i++)
+ a[i] = i;
+ }
+
+ check (a, b);
+
+#pragma acc kernels present_or_copy(a)
+ {
+#pragma acc loop seq
+ for (i = 0; i < N; i++)
+ a[i] = i;
+ }
+
+ check (a, b);
+
+#pragma acc kernels pcopyout(a) present_or_copyin(b)
+ {
+#pragma acc loop seq
+ for (i = 0; i < N; i++)
+ a[i] = b[i];
+ }
+
+ check (a, b);
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-collapse.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-collapse.c
index f7f04cb..997d6c7 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-collapse.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-collapse.c
@@ -1,6 +1,3 @@
-/* { dg-do run } */
-/* { dg-additional-options "-ftree-parallelize-loops=32" } */
-
#include <stdlib.h>
#define N 100
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-g.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-g.c
index 96b6e4e..88258be 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-g.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-g.c
@@ -1,5 +1,3 @@
-/* { dg-do run } */
-/* { dg-additional-options "-ftree-parallelize-loops=32" } */
/* { dg-additional-options "-g" } */
#include "kernels-loop.c"
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-mod-not-zero.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-mod-not-zero.c
index 1433cb2..147ebb5 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-mod-not-zero.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-mod-not-zero.c
@@ -1,6 +1,3 @@
-/* { dg-do run } */
-/* { dg-additional-options "-ftree-parallelize-loops=32" } */
-
#include <stdlib.h>
#define N ((1024 * 512) + 1)
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-n.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-n.c
index fd0d5b1..9a3eaca 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-n.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-n.c
@@ -1,6 +1,3 @@
-/* { dg-do run } */
-/* { dg-additional-options "-ftree-parallelize-loops=32" } */
-
#include <stdlib.h>
#define N ((1024 * 512) + 1)
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-nest.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-nest.c
index 21d2599..28c725a 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-nest.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-nest.c
@@ -1,6 +1,3 @@
-/* { dg-do run } */
-/* { dg-additional-options "-ftree-parallelize-loops=32" } */
-
#include <stdlib.h>
#define N 1000
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop.c
index 3762e5a..355123c 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop.c
@@ -1,6 +1,3 @@
-/* { dg-do run } */
-/* { dg-additional-options "-ftree-parallelize-loops=32" } */
-
#include <stdlib.h>
#define N (1024 * 512)
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-reduction.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-reduction.c
index 511e25f..8647a94 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-reduction.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-reduction.c
@@ -1,6 +1,3 @@
-/* { dg-do run } */
-/* { dg-additional-options "-ftree-parallelize-loops=32" } */
-
#include <stdlib.h>
#define n 10000
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-auto-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-auto-1.c
index 4922c9c..622bbdf 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-auto-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-auto-1.c
@@ -1,5 +1,6 @@
-/* { dg-do run } */
-/* { dg-additional-options "-O2" } */
+/* This code uses nvptx inline assembly guarded with acc_on_device, which is
+ not optimized away at -O0, and then confuses the target assembler.
+ { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
#include <stdio.h>
#include <openacc.h>
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-dim-default.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-dim-default.c
index 36b882f..c433b80 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-dim-default.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-dim-default.c
@@ -1,5 +1,7 @@
-
-/* { dg-additional-options "-O2 -fopenacc-dim=16:16" } */
+/* This code uses nvptx inline assembly guarded with acc_on_device, which is
+ not optimized away at -O0, and then confuses the target assembler.
+ { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
+/* { dg-additional-options "-fopenacc-dim=16:16" } */
#include <openacc.h>
#include <alloca.h>
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-g-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-g-1.c
index 23c2a75..7bff6cd 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-g-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-g-1.c
@@ -1,5 +1,6 @@
-/* { dg-do run } */
-/* { dg-additional-options "-O2" } */
+/* This code uses nvptx inline assembly guarded with acc_on_device, which is
+ not optimized away at -O0, and then confuses the target assembler.
+ { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
#include <stdio.h>
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-g-2.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-g-2.c
index 1a93db3..92b82a0 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-g-2.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-g-2.c
@@ -1,5 +1,6 @@
-/* { dg-do run } */
-/* { dg-additional-options "-O2" } */
+/* This code uses nvptx inline assembly guarded with acc_on_device, which is
+ not optimized away at -O0, and then confuses the target assembler.
+ { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
#include <stdio.h>
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-gwv-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-gwv-1.c
index 26b2df9..42b612a 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-gwv-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-gwv-1.c
@@ -1,5 +1,6 @@
-/* { dg-do run } */
-/* { dg-additional-options "-O2" } */
+/* This code uses nvptx inline assembly guarded with acc_on_device, which is
+ not optimized away at -O0, and then confuses the target assembler.
+ { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
#include <stdio.h>
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-g-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-g-1.c
index c14bddd..a8684f95 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-g-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-g-1.c
@@ -1,5 +1,6 @@
-/* { dg-do run } */
-/* { dg-additional-options "-O2" } */
+/* This code uses nvptx inline assembly guarded with acc_on_device, which is
+ not optimized away at -O0, and then confuses the target assembler.
+ { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
#include <stdio.h>
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-gwv-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-gwv-1.c
index 3de8b09..3b104cf 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-gwv-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-gwv-1.c
@@ -1,5 +1,6 @@
-/* { dg-do run } */
-/* { dg-additional-options "-O2" } */
+/* This code uses nvptx inline assembly guarded with acc_on_device, which is
+ not optimized away at -O0, and then confuses the target assembler.
+ { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
#include <stdio.h>
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-v-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-v-1.c
index bae5c66..b77ae76 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-v-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-v-1.c
@@ -1,5 +1,6 @@
-/* { dg-do run } */
-/* { dg-additional-options "-O2" } */
+/* This code uses nvptx inline assembly guarded with acc_on_device, which is
+ not optimized away at -O0, and then confuses the target assembler.
+ { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
#include <stdio.h>
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-v-2.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-v-2.c
index ada92e3..16d8f9f 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-v-2.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-v-2.c
@@ -1,5 +1,6 @@
-/* { dg-do run } */
-/* { dg-additional-options "-O2" } */
+/* This code uses nvptx inline assembly guarded with acc_on_device, which is
+ not optimized away at -O0, and then confuses the target assembler.
+ { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
#include <stdio.h>
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c
index 706d0d8..9cc12b3 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c
@@ -1,5 +1,6 @@
-/* { dg-do run } */
-/* { dg-additional-options "-O2" } */
+/* This code uses nvptx inline assembly guarded with acc_on_device, which is
+ not optimized away at -O0, and then confuses the target assembler.
+ { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
#include <stdio.h>
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-2.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-2.c
index a073ac8..f0c9d81 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-2.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-2.c
@@ -1,5 +1,6 @@
-/* { dg-do run } */
-/* { dg-additional-options "-O2" } */
+/* This code uses nvptx inline assembly guarded with acc_on_device, which is
+ not optimized away at -O0, and then confuses the target assembler.
+ { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
#include <stdio.h>
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-v-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-v-1.c
index b9ec95b..2974807 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-v-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-v-1.c
@@ -1,5 +1,6 @@
-/* { dg-do run } */
-/* { dg-additional-options "-O2" } */
+/* This code uses nvptx inline assembly guarded with acc_on_device, which is
+ not optimized away at -O0, and then confuses the target assembler.
+ { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
#include <stdio.h>
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-w-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-w-1.c
index 539e41d..33b6eae 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-w-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-w-1.c
@@ -1,5 +1,6 @@
-/* { dg-do run } */
-/* { dg-additional-options "-O2" } */
+/* This code uses nvptx inline assembly guarded with acc_on_device, which is
+ not optimized away at -O0, and then confuses the target assembler.
+ { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
#include <stdio.h>
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-wv-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-wv-1.c
index fcb9079..578cfad 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-wv-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-wv-1.c
@@ -1,5 +1,6 @@
-/* { dg-do run } */
-/* { dg-additional-options "-O2" } */
+/* This code uses nvptx inline assembly guarded with acc_on_device, which is
+ not optimized away at -O0, and then confuses the target assembler.
+ { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
#include <stdio.h>
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/mode-transitions.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/mode-transitions.c
new file mode 100644
index 0000000..2394ac8
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/mode-transitions.c
@@ -0,0 +1,895 @@
+/* Miscellaneous test cases for gang/worker/vector mode transitions. */
+
+#include <assert.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <math.h>
+#include <openacc.h>
+
+
+/* Test basic vector-partitioned mode transitions. */
+
+void t1()
+{
+ int n = 0, arr[32], i;
+
+ for (i = 0; i < 32; i++)
+ arr[i] = 0;
+
+ #pragma acc parallel copy(n, arr) \
+ num_gangs(1) num_workers(1) vector_length(32)
+ {
+ int j;
+ n++;
+ #pragma acc loop vector
+ for (j = 0; j < 32; j++)
+ arr[j]++;
+ n++;
+ }
+
+ assert (n == 2);
+
+ for (i = 0; i < 32; i++)
+ assert (arr[i] == 1);
+}
+
+
+/* Test vector-partitioned, gang-partitioned mode. */
+
+void t2()
+{
+ int n[32], arr[1024], i;
+
+ for (i = 0; i < 1024; i++)
+ arr[i] = 0;
+
+ for (i = 0; i < 32; i++)
+ n[i] = 0;
+
+ #pragma acc parallel copy(n, arr) \
+ num_gangs(32) num_workers(1) vector_length(32)
+ {
+ int j, k;
+
+ #pragma acc loop gang(static:*)
+ for (j = 0; j < 32; j++)
+ n[j]++;
+
+ #pragma acc loop gang
+ for (j = 0; j < 32; j++)
+ #pragma acc loop vector
+ for (k = 0; k < 32; k++)
+ arr[j * 32 + k]++;
+
+ #pragma acc loop gang(static:*)
+ for (j = 0; j < 32; j++)
+ n[j]++;
+ }
+
+ for (i = 0; i < 32; i++)
+ assert (n[i] == 2);
+
+ for (i = 0; i < 1024; i++)
+ assert (arr[i] == 1);
+}
+
+
+/* Test conditions inside vector-partitioned loops. */
+
+void t4()
+{
+ int n[32], arr[1024], i;
+
+ for (i = 0; i < 1024; i++)
+ arr[i] = i;
+
+ for (i = 0; i < 32; i++)
+ n[i] = 0;
+
+ #pragma acc parallel copy(n, arr) \
+ num_gangs(32) num_workers(1) vector_length(32)
+ {
+ int j, k;
+
+ #pragma acc loop gang(static:*)
+ for (j = 0; j < 32; j++)
+ n[j]++;
+
+ #pragma acc loop gang
+ for (j = 0; j < 32; j++)
+ {
+ #pragma acc loop vector
+ for (k = 0; k < 32; k++)
+ if ((arr[j * 32 + k] % 2) != 0)
+ arr[j * 32 + k] *= 2;
+ }
+
+ #pragma acc loop gang(static:*)
+ for (j = 0; j < 32; j++)
+ n[j]++;
+ }
+
+ for (i = 0; i < 32; i++)
+ assert (n[i] == 2);
+
+ for (i = 0; i < 1024; i++)
+ assert (arr[i] == ((i % 2) == 0 ? i : i * 2));
+}
+
+
+/* Test conditions inside gang-partitioned/vector-partitioned loops. */
+
+void t5()
+{
+ int n[32], arr[1024], i;
+
+ for (i = 0; i < 1024; i++)
+ arr[i] = i;
+
+ for (i = 0; i < 32; i++)
+ n[i] = 0;
+
+ #pragma acc parallel copy(n, arr) \
+ num_gangs(32) num_workers(1) vector_length(32)
+ {
+ int j;
+
+ #pragma acc loop gang(static:*)
+ for (j = 0; j < 32; j++)
+ n[j]++;
+
+ #pragma acc loop gang vector
+ for (j = 0; j < 1024; j++)
+ if ((arr[j] % 2) != 0)
+ arr[j] *= 2;
+
+ #pragma acc loop gang(static:*)
+ for (j = 0; j < 32; j++)
+ n[j]++;
+ }
+
+ for (i = 0; i < 32; i++)
+ assert (n[i] == 2);
+
+ for (i = 0; i < 1024; i++)
+ assert (arr[i] == ((i % 2) == 0 ? i : i * 2));
+}
+
+
+/* Test trivial operation of vector-single mode. */
+
+void t7()
+{
+ int n = 0;
+ #pragma acc parallel copy(n) \
+ num_gangs(1) num_workers(1) vector_length(32)
+ {
+ n++;
+ }
+ assert (n == 1);
+}
+
+
+/* Test vector-single, gang-partitioned mode. */
+
+void t8()
+{
+ int arr[1024];
+ int gangs;
+
+ for (gangs = 1; gangs <= 1024; gangs <<= 1)
+ {
+ int i;
+
+ for (i = 0; i < 1024; i++)
+ arr[i] = 0;
+
+ #pragma acc parallel copy(arr) \
+ num_gangs(gangs) num_workers(1) vector_length(32)
+ {
+ int j;
+ #pragma acc loop gang
+ for (j = 0; j < 1024; j++)
+ arr[j]++;
+ }
+
+ for (i = 0; i < 1024; i++)
+ assert (arr[i] == 1);
+ }
+}
+
+
+/* Test conditions in vector-single mode. */
+
+void t9()
+{
+ int arr[1024];
+ int gangs;
+
+ for (gangs = 1; gangs <= 1024; gangs <<= 1)
+ {
+ int i;
+
+ for (i = 0; i < 1024; i++)
+ arr[i] = 0;
+
+ #pragma acc parallel copy(arr) \
+ num_gangs(gangs) num_workers(1) vector_length(32)
+ {
+ int j;
+ #pragma acc loop gang
+ for (j = 0; j < 1024; j++)
+ if ((j % 3) == 0)
+ arr[j]++;
+ else
+ arr[j] += 2;
+ }
+
+ for (i = 0; i < 1024; i++)
+ assert (arr[i] == ((i % 3) == 0) ? 1 : 2);
+ }
+}
+
+
+/* Test switch in vector-single mode. */
+
+void t10()
+{
+ int arr[1024];
+ int gangs;
+
+ for (gangs = 1; gangs <= 1024; gangs <<= 1)
+ {
+ int i;
+
+ for (i = 0; i < 1024; i++)
+ arr[i] = 0;
+
+ #pragma acc parallel copy(arr) \
+ num_gangs(gangs) num_workers(1) vector_length(32)
+ {
+ int j;
+ #pragma acc loop gang
+ for (j = 0; j < 1024; j++)
+ switch (j % 5)
+ {
+ case 0: arr[j] += 1; break;
+ case 1: arr[j] += 2; break;
+ case 2: arr[j] += 3; break;
+ case 3: arr[j] += 4; break;
+ case 4: arr[j] += 5; break;
+ default: arr[j] += 99;
+ }
+ }
+
+ for (i = 0; i < 1024; i++)
+ assert (arr[i] == (i % 5) + 1);
+ }
+}
+
+
+/* Test switch in vector-single mode, initialise array on device. */
+
+void t11()
+{
+ int arr[1024];
+ int i;
+
+ for (i = 0; i < 1024; i++)
+ arr[i] = 99;
+
+ #pragma acc parallel copy(arr) \
+ num_gangs(1024) num_workers(1) vector_length(32)
+ {
+ int j;
+
+ /* This loop and the one following must be distributed to available gangs
+ in the same way to ensure data dependencies are not violated (hence the
+ "static" clauses). */
+ #pragma acc loop gang(static:*)
+ for (j = 0; j < 1024; j++)
+ arr[j] = 0;
+
+ #pragma acc loop gang(static:*)
+ for (j = 0; j < 1024; j++)
+ switch (j % 5)
+ {
+ case 0: arr[j] += 1; break;
+ case 1: arr[j] += 2; break;
+ case 2: arr[j] += 3; break;
+ case 3: arr[j] += 4; break;
+ case 4: arr[j] += 5; break;
+ default: arr[j] += 99;
+ }
+ }
+
+ for (i = 0; i < 1024; i++)
+ assert (arr[i] == (i % 5) + 1);
+}
+
+
+/* Test multiple conditions in vector-single mode. */
+
+#define NUM_GANGS 4096
+void t12()
+{
+ bool fizz[NUM_GANGS], buzz[NUM_GANGS], fizzbuzz[NUM_GANGS];
+ int i;
+
+ #pragma acc parallel copyout(fizz, buzz, fizzbuzz) \
+ num_gangs(NUM_GANGS) num_workers(1) vector_length(32)
+ {
+ int j;
+
+ /* This loop and the one following must be distributed to available gangs
+ in the same way to ensure data dependencies are not violated (hence the
+ "static" clauses). */
+ #pragma acc loop gang(static:*)
+ for (j = 0; j < NUM_GANGS; j++)
+ fizz[j] = buzz[j] = fizzbuzz[j] = 0;
+
+ #pragma acc loop gang(static:*)
+ for (j = 0; j < NUM_GANGS; j++)
+ {
+ if ((j % 3) == 0 && (j % 5) == 0)
+ fizzbuzz[j] = 1;
+ else
+ {
+ if ((j % 3) == 0)
+ fizz[j] = 1;
+ else if ((j % 5) == 0)
+ buzz[j] = 1;
+ }
+ }
+ }
+
+ for (i = 0; i < NUM_GANGS; i++)
+ {
+ assert (fizzbuzz[i] == ((i % 3) == 0 && (i % 5) == 0));
+ assert (fizz[i] == ((i % 3) == 0 && (i % 5) != 0));
+ assert (buzz[i] == ((i % 3) != 0 && (i % 5) == 0));
+ }
+}
+#undef NUM_GANGS
+
+
+/* Test worker-partitioned/vector-single mode. */
+
+void t13()
+{
+ int arr[32 * 8], i;
+
+ for (i = 0; i < 32 * 8; i++)
+ arr[i] = 0;
+
+ #pragma acc parallel copy(arr) \
+ num_gangs(8) num_workers(8) vector_length(32)
+ {
+ int j;
+ #pragma acc loop gang
+ for (j = 0; j < 32; j++)
+ {
+ int k;
+ #pragma acc loop worker
+ for (k = 0; k < 8; k++)
+ arr[j * 8 + k] += j * 8 + k;
+ }
+ }
+
+ for (i = 0; i < 32 * 8; i++)
+ assert (arr[i] == i);
+}
+
+
+/* Test worker-single/worker-partitioned transitions. */
+
+void t16()
+{
+ int n[32], arr[32 * 32], i;
+
+ for (i = 0; i < 32 * 32; i++)
+ arr[i] = 0;
+
+ for (i = 0; i < 32; i++)
+ n[i] = 0;
+
+ #pragma acc parallel copy(n, arr) \
+ num_gangs(8) num_workers(16) vector_length(32)
+ {
+ int j;
+ #pragma acc loop gang
+ for (j = 0; j < 32; j++)
+ {
+ int k;
+
+ n[j]++;
+
+ #pragma acc loop worker
+ for (k = 0; k < 32; k++)
+ arr[j * 32 + k]++;
+
+ n[j]++;
+
+ #pragma acc loop worker
+ for (k = 0; k < 32; k++)
+ arr[j * 32 + k]++;
+
+ n[j]++;
+
+ #pragma acc loop worker
+ for (k = 0; k < 32; k++)
+ arr[j * 32 + k]++;
+
+ n[j]++;
+ }
+ }
+
+ for (i = 0; i < 32; i++)
+ assert (n[i] == 4);
+
+ for (i = 0; i < 32 * 32; i++)
+ assert (arr[i] == 3);
+}
+
+
+/* Test correct synchronisation between worker-partitioned loops. */
+
+void t17()
+{
+ int arr_a[32 * 32], arr_b[32 * 32], i;
+ int num_workers, num_gangs;
+
+ for (num_workers = 1; num_workers <= 32; num_workers <<= 1)
+ for (num_gangs = 1; num_gangs <= 32; num_gangs <<= 1)
+ {
+ for (i = 0; i < 32 * 32; i++)
+ arr_a[i] = i;
+
+ #pragma acc parallel copyin(arr_a) copyout(arr_b) \
+ num_gangs(num_gangs) num_workers(num_workers) vector_length(32)
+ {
+ int j;
+ #pragma acc loop gang
+ for (j = 0; j < 32; j++)
+ {
+ int k;
+
+ #pragma acc loop worker
+ for (k = 0; k < 32; k++)
+ arr_b[j * 32 + (31 - k)] = arr_a[j * 32 + k] * 2;
+
+ #pragma acc loop worker
+ for (k = 0; k < 32; k++)
+ arr_a[j * 32 + (31 - k)] = arr_b[j * 32 + k] * 2;
+
+ #pragma acc loop worker
+ for (k = 0; k < 32; k++)
+ arr_b[j * 32 + (31 - k)] = arr_a[j * 32 + k] * 2;
+ }
+ }
+
+ for (i = 0; i < 32 * 32; i++)
+ assert (arr_b[i] == (i ^ 31) * 8);
+ }
+}
+
+
+/* Test correct synchronisation between worker+vector-partitioned loops. */
+
+void t18()
+{
+ int arr_a[32 * 32 * 32], arr_b[32 * 32 * 32], i;
+ int num_workers, num_gangs;
+
+ for (num_workers = 1; num_workers <= 32; num_workers <<= 1)
+ for (num_gangs = 1; num_gangs <= 32; num_gangs <<= 1)
+ {
+ for (i = 0; i < 32 * 32 * 32; i++)
+ arr_a[i] = i;
+
+ #pragma acc parallel copyin(arr_a) copyout(arr_b) \
+ num_gangs(num_gangs) num_workers(num_workers) vector_length(32)
+ {
+ int j;
+ #pragma acc loop gang
+ for (j = 0; j < 32; j++)
+ {
+ int k;
+
+ #pragma acc loop worker vector
+ for (k = 0; k < 32 * 32; k++)
+ arr_b[j * 32 * 32 + (1023 - k)] = arr_a[j * 32 * 32 + k] * 2;
+
+ #pragma acc loop worker vector
+ for (k = 0; k < 32 * 32; k++)
+ arr_a[j * 32 * 32 + (1023 - k)] = arr_b[j * 32 * 32 + k] * 2;
+
+ #pragma acc loop worker vector
+ for (k = 0; k < 32 * 32; k++)
+ arr_b[j * 32 * 32 + (1023 - k)] = arr_a[j * 32 * 32 + k] * 2;
+ }
+ }
+
+ for (i = 0; i < 32 * 32 * 32; i++)
+ assert (arr_b[i] == (i ^ 1023) * 8);
+ }
+}
+
+
+/* Test correct synchronisation between vector-partitioned loops in
+ worker-partitioned mode. */
+
+void t19()
+{
+ int n[32 * 32], arr_a[32 * 32 * 32], arr_b[32 * 32 * 32], i;
+ int num_workers, num_gangs;
+
+ for (num_workers = 1; num_workers <= 32; num_workers <<= 1)
+ for (num_gangs = 1; num_gangs <= 32; num_gangs <<= 1)
+ {
+ for (i = 0; i < 32 * 32 * 32; i++)
+ arr_a[i] = i;
+
+ for (i = 0; i < 32 * 32; i++)
+ n[i] = 0;
+
+ #pragma acc parallel copy (n) copyin(arr_a) copyout(arr_b) \
+ num_gangs(num_gangs) num_workers(num_workers) vector_length(32)
+ {
+ int j;
+ #pragma acc loop gang
+ for (j = 0; j < 32; j++)
+ {
+ int k;
+
+ #pragma acc loop worker
+ for (k = 0; k < 32; k++)
+ {
+ int m;
+
+ n[j * 32 + k]++;
+
+ #pragma acc loop vector
+ for (m = 0; m < 32; m++)
+ {
+ if (((j * 1024 + k * 32 + m) % 2) == 0)
+ arr_b[j * 1024 + k * 32 + (31 - m)]
+ = arr_a[j * 1024 + k * 32 + m] * 2;
+ else
+ arr_b[j * 1024 + k * 32 + (31 - m)]
+ = arr_a[j * 1024 + k * 32 + m] * 3;
+ }
+
+ /* Test returning to vector-single mode... */
+ n[j * 32 + k]++;
+
+ #pragma acc loop vector
+ for (m = 0; m < 32; m++)
+ {
+ if (((j * 1024 + k * 32 + m) % 3) == 0)
+ arr_a[j * 1024 + k * 32 + (31 - m)]
+ = arr_b[j * 1024 + k * 32 + m] * 5;
+ else
+ arr_a[j * 1024 + k * 32 + (31 - m)]
+ = arr_b[j * 1024 + k * 32 + m] * 7;
+ }
+
+ /* ...and back-to-back vector loops. */
+
+ #pragma acc loop vector
+ for (m = 0; m < 32; m++)
+ {
+ if (((j * 1024 + k * 32 + m) % 2) == 0)
+ arr_b[j * 1024 + k * 32 + (31 - m)]
+ = arr_a[j * 1024 + k * 32 + m] * 3;
+ else
+ arr_b[j * 1024 + k * 32 + (31 - m)]
+ = arr_a[j * 1024 + k * 32 + m] * 2;
+ }
+ }
+ }
+ }
+
+ for (i = 0; i < 32 * 32; i++)
+ assert (n[i] == 2);
+
+ for (i = 0; i < 32 * 32 * 32; i++)
+ {
+ int m = 6 * ((i % 3) == 0 ? 5 : 7);
+ assert (arr_b[i] == (i ^ 31) * m);
+ }
+ }
+}
+
+
+/* With -O0, variables are on the stack, not in registers. Check that worker
+ state propagation handles the stack frame. */
+
+void t20()
+{
+ int w0 = 0;
+ int w1 = 0;
+ int w2 = 0;
+ int w3 = 0;
+ int w4 = 0;
+ int w5 = 0;
+ int w6 = 0;
+ int w7 = 0;
+
+ int i;
+
+#pragma acc parallel copy (w0, w1, w2, w3, w4, w5, w6, w7) \
+ num_gangs (1) num_workers (8)
+ {
+ int internal = 100;
+
+#pragma acc loop worker
+ for (i = 0; i < 8; i++)
+ {
+ switch (i)
+ {
+ case 0: w0 = internal; break;
+ case 1: w1 = internal; break;
+ case 2: w2 = internal; break;
+ case 3: w3 = internal; break;
+ case 4: w4 = internal; break;
+ case 5: w5 = internal; break;
+ case 6: w6 = internal; break;
+ case 7: w7 = internal; break;
+ default: break;
+ }
+ }
+ }
+
+ if (w0 != 100
+ || w1 != 100
+ || w2 != 100
+ || w3 != 100
+ || w4 != 100
+ || w5 != 100
+ || w6 != 100
+ || w7 != 100)
+ __builtin_abort ();
+}
+
+
+/* Test worker-single/vector-single mode. */
+
+void t21()
+{
+ int arr[32], i;
+
+ for (i = 0; i < 32; i++)
+ arr[i] = 0;
+
+ #pragma acc parallel copy(arr) \
+ num_gangs(8) num_workers(8) vector_length(32)
+ {
+ int j;
+ #pragma acc loop gang
+ for (j = 0; j < 32; j++)
+ arr[j]++;
+ }
+
+ for (i = 0; i < 32; i++)
+ assert (arr[i] == 1);
+}
+
+
+/* Test worker-single/vector-single mode. */
+
+void t22()
+{
+ int arr[32], i;
+
+ for (i = 0; i < 32; i++)
+ arr[i] = 0;
+
+ #pragma acc parallel copy(arr) \
+ num_gangs(8) num_workers(8) vector_length(32)
+ {
+ int j;
+ #pragma acc loop gang
+ for (j = 0; j < 32; j++)
+ {
+ #pragma acc atomic
+ arr[j]++;
+ }
+ }
+
+ for (i = 0; i < 32; i++)
+ assert (arr[i] == 1);
+}
+
+
+/* Test condition in worker-single/vector-single mode. */
+
+void t23()
+{
+ int arr[32], i;
+
+ for (i = 0; i < 32; i++)
+ arr[i] = i;
+
+ #pragma acc parallel copy(arr) \
+ num_gangs(8) num_workers(8) vector_length(32)
+ {
+ int j;
+ #pragma acc loop gang
+ for (j = 0; j < 32; j++)
+ if ((arr[j] % 2) != 0)
+ arr[j]++;
+ else
+ arr[j] += 2;
+ }
+
+ for (i = 0; i < 32; i++)
+ assert (arr[i] == ((i % 2) != 0) ? i + 1 : i + 2);
+}
+
+
+/* Test switch in worker-single/vector-single mode. */
+
+void t24()
+{
+ int arr[32], i;
+
+ for (i = 0; i < 32; i++)
+ arr[i] = i;
+
+ #pragma acc parallel copy(arr) \
+ num_gangs(8) num_workers(8) vector_length(32)
+ {
+ int j;
+ #pragma acc loop gang
+ for (j = 0; j < 32; j++)
+ switch (arr[j] % 5)
+ {
+ case 0: arr[j] += 1; break;
+ case 1: arr[j] += 2; break;
+ case 2: arr[j] += 3; break;
+ case 3: arr[j] += 4; break;
+ case 4: arr[j] += 5; break;
+ default: arr[j] += 99;
+ }
+ }
+
+ for (i = 0; i < 32; i++)
+ assert (arr[i] == i + (i % 5) + 1);
+}
+
+
+/* Test worker-single/vector-partitioned mode. */
+
+void t25()
+{
+ int arr[32 * 32], i;
+
+ for (i = 0; i < 32 * 32; i++)
+ arr[i] = i;
+
+ #pragma acc parallel copy(arr) \
+ num_gangs(8) num_workers(8) vector_length(32)
+ {
+ int j;
+ #pragma acc loop gang
+ for (j = 0; j < 32; j++)
+ {
+ int k;
+ #pragma acc loop vector
+ for (k = 0; k < 32; k++)
+ {
+ #pragma acc atomic
+ arr[j * 32 + k]++;
+ }
+ }
+ }
+
+ for (i = 0; i < 32 * 32; i++)
+ assert (arr[i] == i + 1);
+}
+
+
+/* Test worker-single, vector-partitioned, gang-redundant mode. */
+
+#define ACTUAL_GANGS 8
+void t27()
+{
+ int n, arr[32], i;
+ int ondev;
+
+ for (i = 0; i < 32; i++)
+ arr[i] = 0;
+
+ n = 0;
+
+ #pragma acc parallel copy(n, arr) copyout(ondev) \
+ num_gangs(ACTUAL_GANGS) num_workers(8) vector_length(32)
+ {
+ int j;
+
+ ondev = acc_on_device (acc_device_not_host);
+
+ #pragma acc atomic
+ n++;
+
+ #pragma acc loop vector
+ for (j = 0; j < 32; j++)
+ {
+ #pragma acc atomic
+ arr[j] += 1;
+ }
+
+ #pragma acc atomic
+ n++;
+ }
+
+ int m = ondev ? ACTUAL_GANGS : 1;
+
+ assert (n == m * 2);
+
+ for (i = 0; i < 32; i++)
+ assert (arr[i] == m);
+}
+#undef ACTUAL_GANGS
+
+
+/* Check if worker-single variables get broadcastd to vectors. */
+
+#pragma acc routine
+float t28_routine ()
+{
+ return 2.71;
+}
+
+#define N 32
+void t28()
+{
+ float threads[N], v1 = 3.14;
+
+ for (int i = 0; i < N; i++)
+ threads[i] = -1;
+
+#pragma acc parallel num_gangs (1) vector_length (32) copy (v1)
+ {
+ float val = t28_routine ();
+
+#pragma acc loop vector
+ for (int i = 0; i < N; i++)
+ threads[i] = val + v1*i;
+ }
+
+ for (int i = 0; i < N; i++)
+ assert (fabs (threads[i] - (t28_routine () + v1*i)) < 0.0001);
+}
+#undef N
+
+
+int main()
+{
+ t1();
+ t2();
+ t4();
+ t5();
+ t7();
+ t8();
+ t9();
+ t10();
+ t11();
+ t12();
+ t13();
+ t16();
+ t17();
+ t18();
+ t19();
+ t20();
+ t21();
+ t22();
+ t23();
+ t24();
+ t25();
+ t27();
+ t28();
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-1.c
new file mode 100644
index 0000000..5e82e1d
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-1.c
@@ -0,0 +1,38 @@
+#include <assert.h>
+
+/* Test of reduction on both parallel and loop directives (worker and
+ vector-partitioned loops individually in gang-partitioned mode, int
+ type). */
+
+int
+main (int argc, char *argv[])
+{
+ int i, j, arr[32768], res = 0, hres = 0;
+
+ for (i = 0; i < 32768; i++)
+ arr[i] = i;
+
+ #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
+ reduction(+:res) copy(res)
+ {
+ #pragma acc loop gang
+ for (j = 0; j < 32; j++)
+ {
+ #pragma acc loop worker reduction(+:res)
+ for (i = 0; i < 1024; i++)
+ res += arr[j * 1024 + i];
+
+ #pragma acc loop vector reduction(+:res)
+ for (i = 1023; i >= 0; i--)
+ res += arr[j * 1024 + i];
+ }
+ }
+
+ for (j = 0; j < 32; j++)
+ for (i = 0; i < 1024; i++)
+ hres += arr[j * 1024 + i] * 2;
+
+ assert (res == hres);
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-2.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-2.c
new file mode 100644
index 0000000..a339f32
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-2.c
@@ -0,0 +1,40 @@
+#include <assert.h>
+
+/* Test of reduction on both parallel and loop directives (workers and vectors
+ in gang-partitioned mode, int type with XOR). */
+
+int
+main (int argc, char *argv[])
+{
+ int i, j, arr[32768], res = 0, hres = 0;
+
+ for (i = 0; i < 32768; i++)
+ arr[i] = i;
+
+ #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
+ reduction(^:res)
+ {
+ #pragma acc loop gang
+ for (j = 0; j < 32; j++)
+ {
+ #pragma acc loop worker vector reduction(^:res)
+ for (i = 0; i < 1024; i++)
+ res ^= 3 * arr[j * 1024 + i];
+
+ #pragma acc loop worker vector reduction(^:res)
+ for (i = 0; i < 1024; i++)
+ res ^= arr[j * 1024 + (1023 - i)];
+ }
+ }
+
+ for (j = 0; j < 32; j++)
+ for (i = 0; i < 1024; i++)
+ {
+ hres ^= 3 * arr[j * 1024 + i];
+ hres ^= arr[j * 1024 + (1023 - i)];
+ }
+
+ assert (res == hres);
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-3.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-3.c
new file mode 100644
index 0000000..8d85fed
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-3.c
@@ -0,0 +1,42 @@
+#include <assert.h>
+
+/* Test of reduction on both parallel and loop directives (workers and vectors
+ together in gang-partitioned mode, float type). */
+
+int
+main (int argc, char *argv[])
+{
+ int i, j;
+ float arr[32768];
+ float res = 0, hres = 0;
+
+ for (i = 0; i < 32768; i++)
+ arr[i] = i;
+
+ #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
+ reduction(+:res) copy(res)
+ {
+ #pragma acc loop gang
+ for (j = 0; j < 32; j++)
+ {
+ #pragma acc loop worker vector reduction(+:res)
+ for (i = 0; i < 1024; i++)
+ res += arr[j * 1024 + i];
+
+ #pragma acc loop worker vector reduction(+:res)
+ for (i = 0; i < 1024; i++)
+ res += arr[j * 1024 + (1023 - i)];
+ }
+ }
+
+ for (j = 0; j < 32; j++)
+ for (i = 0; i < 1024; i++)
+ {
+ hres += arr[j * 1024 + i];
+ hres += arr[j * 1024 + (1023 - i)];
+ }
+
+ assert (res == hres);
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-4.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-4.c
new file mode 100644
index 0000000..1904b4a
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-4.c
@@ -0,0 +1,55 @@
+#include <assert.h>
+
+/* Test of reduction on both parallel and loop directives (workers and vectors
+ together in gang-partitioned mode, float type, multiple reductions). */
+
+int
+main (int argc, char *argv[])
+{
+ int i, j;
+ float arr[32768];
+ float res = 0, mres = 0, hres = 0, hmres = 0;
+
+ for (i = 0; i < 32768; i++)
+ arr[i] = i;
+
+ #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
+ reduction(+:res) reduction(max:mres) copy(res, mres)
+ {
+ #pragma acc loop gang
+ for (j = 0; j < 32; j++)
+ {
+ #pragma acc loop worker vector reduction(+:res) reduction(max:mres)
+ for (i = 0; i < 1024; i++)
+ {
+ res += arr[j * 1024 + i];
+ if (arr[j * 1024 + i] > mres)
+ mres = arr[j * 1024 + i];
+ }
+
+ #pragma acc loop worker vector reduction(+:res) reduction(max:mres)
+ for (i = 0; i < 1024; i++)
+ {
+ res += arr[j * 1024 + (1023 - i)];
+ if (arr[j * 1024 + (1023 - i)] > mres)
+ mres = arr[j * 1024 + (1023 - i)];
+ }
+ }
+ }
+
+ for (j = 0; j < 32; j++)
+ for (i = 0; i < 1024; i++)
+ {
+ hres += arr[j * 1024 + i];
+ hres += arr[j * 1024 + (1023 - i)];
+ if (arr[j * 1024 + i] > hmres)
+ hmres = arr[j * 1024 + i];
+ if (arr[j * 1024 + (1023 - i)] > hmres)
+ hmres = arr[j * 1024 + (1023 - i)];
+ }
+
+ assert (res == hres);
+ assert (mres == hmres);
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/par-reduction-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/par-reduction-1.c
index dceac39..a88b60f 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/par-reduction-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/par-reduction-1.c
@@ -1,40 +1,54 @@
+/* { dg-additional-options "-w" } */
+
#include <assert.h>
+/* Test of reduction on parallel directive. */
+
+#define ACTUAL_GANGS 256
+
int
main (int argc, char *argv[])
{
- int res, res2 = 0;
+ int res, res1 = 0, res2 = 0;
#if defined(ACC_DEVICE_TYPE_host)
# define GANGS 1
#else
# define GANGS 256
#endif
- #pragma acc parallel num_gangs(GANGS) copy(res2)
+ #pragma acc parallel num_gangs(GANGS) num_workers(32) vector_length(32) \
+ reduction(+:res1) copy(res2, res1)
{
+ res1 += 5;
+
#pragma acc atomic
res2 += 5;
}
res = GANGS * 5;
+ assert (res == res1);
assert (res == res2);
#undef GANGS
- res = res2 = 1;
+ res = res1 = res2 = 1;
#if defined(ACC_DEVICE_TYPE_host)
# define GANGS 1
#else
# define GANGS 8
#endif
- #pragma acc parallel num_gangs(GANGS) copy(res2)
+ #pragma acc parallel num_gangs(GANGS) num_workers(32) vector_length(32) \
+ reduction(*:res1) copy(res1, res2)
{
+ res1 *= 5;
+
#pragma acc atomic
res2 *= 5;
}
for (int i = 0; i < GANGS; ++i)
res *= 5;
+ assert (res == res1);
assert (res == res2);
#undef GANGS
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/par-reduction-2.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/par-reduction-2.c
index bd5715c..911b76c 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/par-reduction-2.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/par-reduction-2.c
@@ -1,18 +1,25 @@
+/* { dg-additional-options "-w" } */
+
#include <assert.h>
#include <openacc.h>
+/* Test of reduction on parallel directive (with async). */
+
int
main (int argc, char *argv[])
{
- int res, res2 = 0;
+ int res, res1 = 0, res2 = 0;
#if defined(ACC_DEVICE_TYPE_host)
# define GANGS 1
#else
# define GANGS 256
#endif
- #pragma acc parallel num_gangs(GANGS) copy(res2) async(1)
+ #pragma acc parallel num_gangs(GANGS) num_workers(32) vector_length(32) \
+ reduction(+:res1) copy(res1, res2) async(1)
{
+ res1 += 5;
+
#pragma acc atomic
res2 += 5;
}
@@ -20,18 +27,22 @@ main (int argc, char *argv[])
acc_wait (1);
+ assert (res == res1);
assert (res == res2);
#undef GANGS
- res = res2 = 1;
+ res = res1 = res2 = 1;
#if defined(ACC_DEVICE_TYPE_host)
# define GANGS 1
#else
# define GANGS 8
#endif
- #pragma acc parallel num_gangs(GANGS) copy(res2) async(1)
+ #pragma acc parallel num_gangs(GANGS) num_workers(32) vector_length(32) \
+ reduction(*:res1) copy(res1, res2) async(1)
{
+ res1 *= 5;
+
#pragma acc atomic
res2 *= 5;
}
@@ -40,6 +51,7 @@ main (int argc, char *argv[])
acc_wait (1);
+ assert (res == res1);
assert (res == res2);
return 0;
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-dims-2.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-dims-2.c
deleted file mode 100644
index eea8c7e..0000000
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-dims-2.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/* { dg-do run { target { openacc_nvidia_accel_selected && lto } } } */
-/* { dg-additional-options "-flto -fno-use-linker-plugin" } */
-
-/* Worker and vector size checks. Picked an outrageously large
- value. */
-
-int main ()
-{
-#pragma acc parallel num_workers (2<<20) /* { dg-error "using num_workers" } */
- {
- }
-
-#pragma acc parallel vector_length (2<<20) /* { dg-error "using vector_length" } */
- {
- }
-
- return 0;
-}
-
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-dims.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-dims.c
index 39357ce..f5766a4 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-dims.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-dims.c
@@ -5,12 +5,20 @@
int main ()
{
+ int dummy[10];
+
#pragma acc parallel num_workers (2<<20) /* { dg-error "using num_workers" } */
{
+#pragma acc loop worker
+ for (int i = 0; i < 10; i++)
+ dummy[i] = i;
}
#pragma acc parallel vector_length (2<<20) /* { dg-error "using vector_length" } */
{
+#pragma acc loop vector
+ for (int i = 0; i < 10; i++)
+ dummy[i] = i;
}
return 0;
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-reduction.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-reduction.c
new file mode 100644
index 0000000..b2c60e5
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-reduction.c
@@ -0,0 +1,72 @@
+/* { dg-do run } */
+/* { dg-additional-options "-w" } */
+
+#include <stdlib.h>
+#include <openacc.h>
+
+#define N 10
+
+int
+main ()
+{
+ int s1 = 0, s2 = 0;
+ int i;
+ int dummy = 0;
+
+#pragma acc data copy (dummy)
+ {
+#pragma acc parallel num_gangs (N) reduction (+:s1) copy(s1)
+ {
+ s1++;
+ }
+ }
+
+ if (acc_get_device_type () != acc_device_nvidia)
+ {
+ if (s1 != 1)
+ abort ();
+ }
+ else
+ {
+ if (s1 != N)
+ abort ();
+ }
+
+ s1 = 0;
+ s2 = 0;
+
+#pragma acc parallel num_gangs (10) reduction (+:s1, s2) copy(s1, s2)
+ {
+ s1++;
+ s2 += N;
+ }
+
+ if (acc_get_device_type () != acc_device_nvidia)
+ {
+ if (s1 != 1)
+ abort ();
+ if (s2 != N)
+ abort ();
+ }
+ else
+ {
+ if (s1 != N)
+ abort ();
+ if (s2 != N*N)
+ abort ();
+ }
+
+ s1 = 0;
+
+#pragma acc parallel num_gangs (10) reduction (+:s1) copy(s1)
+ {
+#pragma acc loop gang reduction (+:s1)
+ for (i = 0; i < 10; i++)
+ s1++;
+ }
+
+ if (s1 != N)
+ abort ();
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/pr70289.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/pr70289.c
new file mode 100644
index 0000000..6d52222
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/pr70289.c
@@ -0,0 +1,13 @@
+int
+main ()
+{
+ int i;
+ static int temp;
+
+#pragma acc parallel reduction(+:temp)
+ {
+ temp++;
+ }
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/pr70373.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/pr70373.c
new file mode 100644
index 0000000..af629c8
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/pr70373.c
@@ -0,0 +1,20 @@
+#define N 32
+
+int
+foo (unsigned int sum)
+{
+#pragma acc parallel reduction (+:sum)
+ {
+ sum;
+ }
+
+ return sum;
+}
+
+int
+main (void)
+{
+ unsigned int sum = 0;
+ foo (sum);
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/private-variables.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/private-variables.c
new file mode 100644
index 0000000..53f03d1
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/private-variables.c
@@ -0,0 +1,953 @@
+#include <assert.h>
+#include <openacc.h>
+
+typedef struct {
+ int x, y;
+} vec2;
+
+typedef struct {
+ int x, y, z;
+ int attr[13];
+} vec3_attr;
+
+
+/* Test of gang-private variables declared in local scope with parallel
+ directive. */
+
+void local_g_1()
+{
+ int i, arr[32];
+
+ for (i = 0; i < 32; i++)
+ arr[i] = 3;
+
+ #pragma acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
+ {
+ int x;
+
+ #pragma acc loop gang(static:1)
+ for (i = 0; i < 32; i++)
+ x = i * 2;
+
+ #pragma acc loop gang(static:1)
+ for (i = 0; i < 32; i++)
+ {
+ if (acc_on_device (acc_device_host))
+ x = i * 2;
+ arr[i] += x;
+ }
+ }
+
+ for (i = 0; i < 32; i++)
+ assert (arr[i] == 3 + i * 2);
+}
+
+
+/* Test of worker-private variables declared in a local scope, broadcasting
+ to vector-partitioned mode. Back-to-back worker loops. */
+
+void local_w_1()
+{
+ int i, arr[32 * 32 * 32];
+
+ for (i = 0; i < 32 * 32 * 32; i++)
+ arr[i] = i;
+
+ #pragma acc parallel copy(arr) num_gangs(32) num_workers(32) vector_length(32)
+ {
+ int j;
+
+ #pragma acc loop gang
+ for (i = 0; i < 32; i++)
+ {
+ #pragma acc loop worker
+ for (j = 0; j < 32; j++)
+ {
+ int k;
+ int x = i ^ j * 3;
+
+ #pragma acc loop vector
+ for (k = 0; k < 32; k++)
+ arr[i * 1024 + j * 32 + k] += x * k;
+ }
+
+ #pragma acc loop worker
+ for (j = 0; j < 32; j++)
+ {
+ int k;
+ int x = i | j * 5;
+
+ #pragma acc loop vector
+ for (k = 0; k < 32; k++)
+ arr[i * 1024 + j * 32 + k] += x * k;
+ }
+ }
+ }
+
+ for (i = 0; i < 32; i++)
+ for (int j = 0; j < 32; j++)
+ for (int k = 0; k < 32; k++)
+ {
+ int idx = i * 1024 + j * 32 + k;
+ assert (arr[idx] == idx + (i ^ j * 3) * k + (i | j * 5) * k);
+ }
+}
+
+
+/* Test of worker-private variables declared in a local scope, broadcasting
+ to vector-partitioned mode. Successive vector loops. */
+
+void local_w_2()
+{
+ int i, arr[32 * 32 * 32];
+
+ for (i = 0; i < 32 * 32 * 32; i++)
+ arr[i] = i;
+
+ #pragma acc parallel copy(arr) num_gangs(32) num_workers(32) vector_length(32)
+ {
+ int j;
+
+ #pragma acc loop gang
+ for (i = 0; i < 32; i++)
+ {
+ #pragma acc loop worker
+ for (j = 0; j < 32; j++)
+ {
+ int k;
+ int x = i ^ j * 3;
+
+ #pragma acc loop vector
+ for (k = 0; k < 32; k++)
+ arr[i * 1024 + j * 32 + k] += x * k;
+
+ x = i | j * 5;
+
+ #pragma acc loop vector
+ for (k = 0; k < 32; k++)
+ arr[i * 1024 + j * 32 + k] += x * k;
+ }
+ }
+ }
+
+ for (i = 0; i < 32; i++)
+ for (int j = 0; j < 32; j++)
+ for (int k = 0; k < 32; k++)
+ {
+ int idx = i * 1024 + j * 32 + k;
+ assert (arr[idx] == idx + (i ^ j * 3) * k + (i | j * 5) * k);
+ }
+}
+
+
+/* Test of worker-private variables declared in a local scope, broadcasting
+ to vector-partitioned mode. Aggregate worker variable. */
+
+void local_w_3()
+{
+ int i, arr[32 * 32 * 32];
+
+ for (i = 0; i < 32 * 32 * 32; i++)
+ arr[i] = i;
+
+ #pragma acc parallel copy(arr) num_gangs(32) num_workers(32) vector_length(32)
+ {
+ int j;
+
+ #pragma acc loop gang
+ for (i = 0; i < 32; i++)
+ {
+ #pragma acc loop worker
+ for (j = 0; j < 32; j++)
+ {
+ int k;
+ vec2 pt;
+
+ pt.x = i ^ j * 3;
+ pt.y = i | j * 5;
+
+ #pragma acc loop vector
+ for (k = 0; k < 32; k++)
+ arr[i * 1024 + j * 32 + k] += pt.x * k;
+
+ #pragma acc loop vector
+ for (k = 0; k < 32; k++)
+ arr[i * 1024 + j * 32 + k] += pt.y * k;
+ }
+ }
+ }
+
+ for (i = 0; i < 32; i++)
+ for (int j = 0; j < 32; j++)
+ for (int k = 0; k < 32; k++)
+ {
+ int idx = i * 1024 + j * 32 + k;
+ assert (arr[idx] == idx + (i ^ j * 3) * k + (i | j * 5) * k);
+ }
+}
+
+
+/* Test of worker-private variables declared in a local scope, broadcasting
+ to vector-partitioned mode. Addressable worker variable. */
+
+void local_w_4()
+{
+ int i, arr[32 * 32 * 32];
+
+ for (i = 0; i < 32 * 32 * 32; i++)
+ arr[i] = i;
+
+ #pragma acc parallel copy(arr) num_gangs(32) num_workers(32) vector_length(32)
+ {
+ int j;
+
+ #pragma acc loop gang
+ for (i = 0; i < 32; i++)
+ {
+ #pragma acc loop worker
+ for (j = 0; j < 32; j++)
+ {
+ int k;
+ vec2 pt, *ptp;
+
+ ptp = &pt;
+
+ pt.x = i ^ j * 3;
+
+ #pragma acc loop vector
+ for (k = 0; k < 32; k++)
+ arr[i * 1024 + j * 32 + k] += ptp->x * k;
+
+ ptp->y = i | j * 5;
+
+ #pragma acc loop vector
+ for (k = 0; k < 32; k++)
+ arr[i * 1024 + j * 32 + k] += pt.y * k;
+ }
+ }
+ }
+
+ for (i = 0; i < 32; i++)
+ for (int j = 0; j < 32; j++)
+ for (int k = 0; k < 32; k++)
+ {
+ int idx = i * 1024 + j * 32 + k;
+ assert (arr[idx] == idx + (i ^ j * 3) * k + (i | j * 5) * k);
+ }
+}
+
+
+/* Test of worker-private variables declared in a local scope, broadcasting
+ to vector-partitioned mode. Array worker variable. */
+
+void local_w_5()
+{
+ int i, arr[32 * 32 * 32];
+
+ for (i = 0; i < 32 * 32 * 32; i++)
+ arr[i] = i;
+
+ #pragma acc parallel copy(arr) num_gangs(32) num_workers(32) vector_length(32)
+ {
+ int j;
+
+ #pragma acc loop gang
+ for (i = 0; i < 32; i++)
+ {
+ #pragma acc loop worker
+ for (j = 0; j < 32; j++)
+ {
+ int k;
+ int pt[2];
+
+ pt[0] = i ^ j * 3;
+
+ #pragma acc loop vector
+ for (k = 0; k < 32; k++)
+ arr[i * 1024 + j * 32 + k] += pt[0] * k;
+
+ pt[1] = i | j * 5;
+
+ #pragma acc loop vector
+ for (k = 0; k < 32; k++)
+ arr[i * 1024 + j * 32 + k] += pt[1] * k;
+ }
+ }
+ }
+
+ for (i = 0; i < 32; i++)
+ for (int j = 0; j < 32; j++)
+ for (int k = 0; k < 32; k++)
+ {
+ int idx = i * 1024 + j * 32 + k;
+ assert (arr[idx] == idx + (i ^ j * 3) * k + (i | j * 5) * k);
+ }
+}
+
+
+/* Test of gang-private variables declared on loop directive. */
+
+void loop_g_1()
+{
+ int x = 5, i, arr[32];
+
+ for (i = 0; i < 32; i++)
+ arr[i] = i;
+
+ #pragma acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
+ {
+ #pragma acc loop gang private(x)
+ for (i = 0; i < 32; i++)
+ {
+ x = i * 2;
+ arr[i] += x;
+ }
+ }
+
+ for (i = 0; i < 32; i++)
+ assert (arr[i] == i * 3);
+}
+
+
+/* Test of gang-private variables declared on loop directive, with broadcasting
+ to partitioned workers. */
+
+void loop_g_2()
+{
+ int x = 5, i, arr[32 * 32];
+
+ for (i = 0; i < 32 * 32; i++)
+ arr[i] = i;
+
+ #pragma acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
+ {
+ #pragma acc loop gang private(x)
+ for (i = 0; i < 32; i++)
+ {
+ x = i * 2;
+
+ #pragma acc loop worker
+ for (int j = 0; j < 32; j++)
+ arr[i * 32 + j] += x;
+ }
+ }
+
+ for (i = 0; i < 32 * 32; i++)
+ assert (arr[i] == i + (i / 32) * 2);
+}
+
+
+/* Test of gang-private variables declared on loop directive, with broadcasting
+ to partitioned vectors. */
+
+void loop_g_3()
+{
+ int x = 5, i, arr[32 * 32];
+
+ for (i = 0; i < 32 * 32; i++)
+ arr[i] = i;
+
+ #pragma acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
+ {
+ #pragma acc loop gang private(x)
+ for (i = 0; i < 32; i++)
+ {
+ x = i * 2;
+
+ #pragma acc loop vector
+ for (int j = 0; j < 32; j++)
+ arr[i * 32 + j] += x;
+ }
+ }
+
+ for (i = 0; i < 32 * 32; i++)
+ assert (arr[i] == i + (i / 32) * 2);
+}
+
+
+/* Test of gang-private addressable variable declared on loop directive, with
+ broadcasting to partitioned workers. */
+
+void loop_g_4()
+{
+ int x = 5, i, arr[32 * 32];
+
+ for (i = 0; i < 32 * 32; i++)
+ arr[i] = i;
+
+ #pragma acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
+ {
+ #pragma acc loop gang private(x)
+ for (i = 0; i < 32; i++)
+ {
+ int *p = &x;
+
+ x = i * 2;
+
+ #pragma acc loop worker
+ for (int j = 0; j < 32; j++)
+ arr[i * 32 + j] += x;
+
+ (*p)--;
+ }
+ }
+
+ for (i = 0; i < 32 * 32; i++)
+ assert (arr[i] == i + (i / 32) * 2);
+}
+
+
+/* Test of gang-private array variable declared on loop directive, with
+ broadcasting to partitioned workers. */
+
+void loop_g_5()
+{
+ int x[8], i, arr[32 * 32];
+
+ for (i = 0; i < 32 * 32; i++)
+ arr[i] = i;
+
+ #pragma acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
+ {
+ #pragma acc loop gang private(x)
+ for (i = 0; i < 32; i++)
+ {
+ for (int j = 0; j < 8; j++)
+ x[j] = j * 2;
+
+ #pragma acc loop worker
+ for (int j = 0; j < 32; j++)
+ arr[i * 32 + j] += x[j % 8];
+ }
+ }
+
+ for (i = 0; i < 32 * 32; i++)
+ assert (arr[i] == i + (i % 8) * 2);
+}
+
+
+/* Test of gang-private aggregate variable declared on loop directive, with
+ broadcasting to partitioned workers. */
+
+void loop_g_6()
+{
+ int i, arr[32 * 32];
+ vec3_attr pt;
+
+ for (i = 0; i < 32 * 32; i++)
+ arr[i] = i;
+
+ #pragma acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
+ {
+ #pragma acc loop gang private(pt)
+ for (i = 0; i < 32; i++)
+ {
+ pt.x = i;
+ pt.y = i * 2;
+ pt.z = i * 4;
+ pt.attr[5] = i * 6;
+
+ #pragma acc loop worker
+ for (int j = 0; j < 32; j++)
+ arr[i * 32 + j] += pt.x + pt.y + pt.z + pt.attr[5];
+ }
+ }
+
+ for (i = 0; i < 32 * 32; i++)
+ assert (arr[i] == i + (i / 32) * 13);
+}
+
+
+/* Test of vector-private variables declared on loop directive. */
+
+void loop_v_1()
+{
+ int x, i, arr[32 * 32 * 32];
+
+ for (i = 0; i < 32 * 32 * 32; i++)
+ arr[i] = i;
+
+ #pragma acc parallel copy(arr) num_gangs(32) num_workers(32) vector_length(32)
+ {
+ int j;
+
+ #pragma acc loop gang
+ for (i = 0; i < 32; i++)
+ {
+ #pragma acc loop worker
+ for (j = 0; j < 32; j++)
+ {
+ int k;
+
+ #pragma acc loop vector private(x)
+ for (k = 0; k < 32; k++)
+ {
+ x = i ^ j * 3;
+ arr[i * 1024 + j * 32 + k] += x * k;
+ }
+
+ #pragma acc loop vector private(x)
+ for (k = 0; k < 32; k++)
+ {
+ x = i | j * 5;
+ arr[i * 1024 + j * 32 + k] += x * k;
+ }
+ }
+ }
+ }
+
+ for (i = 0; i < 32; i++)
+ for (int j = 0; j < 32; j++)
+ for (int k = 0; k < 32; k++)
+ {
+ int idx = i * 1024 + j * 32 + k;
+ assert (arr[idx] == idx + (i ^ j * 3) * k + (i | j * 5) * k);
+ }
+}
+
+
+/* Test of vector-private variables declared on loop directive. Array type. */
+
+void loop_v_2()
+{
+ int pt[2], i, arr[32 * 32 * 32];
+
+ for (i = 0; i < 32 * 32 * 32; i++)
+ arr[i] = i;
+
+ #pragma acc parallel copy(arr) num_gangs(32) num_workers(32) vector_length(32)
+ {
+ int j;
+
+ #pragma acc loop gang
+ for (i = 0; i < 32; i++)
+ {
+ #pragma acc loop worker
+ for (j = 0; j < 32; j++)
+ {
+ int k;
+
+ #pragma acc loop vector private(pt)
+ for (k = 0; k < 32; k++)
+ {
+ pt[0] = i ^ j * 3;
+ pt[1] = i | j * 5;
+ arr[i * 1024 + j * 32 + k] += pt[0] * k;
+ arr[i * 1024 + j * 32 + k] += pt[1] * k;
+ }
+ }
+ }
+ }
+
+ for (i = 0; i < 32; i++)
+ for (int j = 0; j < 32; j++)
+ for (int k = 0; k < 32; k++)
+ {
+ int idx = i * 1024 + j * 32 + k;
+ assert (arr[idx] == idx + (i ^ j * 3) * k + (i | j * 5) * k);
+ }
+}
+
+
+/* Test of worker-private variables declared on a loop directive. */
+
+void loop_w_1()
+{
+ int x = 5, i, arr[32 * 32];
+
+ for (i = 0; i < 32 * 32; i++)
+ arr[i] = i;
+
+ #pragma acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
+ {
+ int j;
+
+ #pragma acc loop gang
+ for (i = 0; i < 32; i++)
+ {
+ #pragma acc loop worker private(x)
+ for (j = 0; j < 32; j++)
+ {
+ x = i ^ j * 3;
+ /* Try to ensure 'x' accesses doesn't get optimized into a
+ temporary. */
+ __asm__ __volatile__ ("");
+ arr[i * 32 + j] += x;
+ }
+ }
+ }
+
+ for (i = 0; i < 32 * 32; i++)
+ assert (arr[i] == i + ((i / 32) ^ (i % 32) * 3));
+}
+
+
+/* Test of worker-private variables declared on a loop directive, broadcasting
+ to vector-partitioned mode. */
+
+void loop_w_2()
+{
+ int x = 5, i, arr[32 * 32 * 32];
+
+ for (i = 0; i < 32 * 32 * 32; i++)
+ arr[i] = i;
+
+ #pragma acc parallel copy(arr) num_gangs(32) num_workers(32) vector_length(32)
+ {
+ int j;
+
+ #pragma acc loop gang
+ for (i = 0; i < 32; i++)
+ {
+ #pragma acc loop worker private(x)
+ for (j = 0; j < 32; j++)
+ {
+ int k;
+ x = i ^ j * 3;
+
+ #pragma acc loop vector
+ for (k = 0; k < 32; k++)
+ arr[i * 1024 + j * 32 + k] += x * k;
+ }
+ }
+ }
+
+ for (i = 0; i < 32; i++)
+ for (int j = 0; j < 32; j++)
+ for (int k = 0; k < 32; k++)
+ {
+ int idx = i * 1024 + j * 32 + k;
+ assert (arr[idx] == idx + (i ^ j * 3) * k);
+ }
+}
+
+
+/* Test of worker-private variables declared on a loop directive, broadcasting
+ to vector-partitioned mode. Back-to-back worker loops. */
+
+void loop_w_3()
+{
+ int x = 5, i, arr[32 * 32 * 32];
+
+ for (i = 0; i < 32 * 32 * 32; i++)
+ arr[i] = i;
+
+ #pragma acc parallel copy(arr) num_gangs(32) num_workers(32) vector_length(32)
+ {
+ int j;
+
+ #pragma acc loop gang
+ for (i = 0; i < 32; i++)
+ {
+ #pragma acc loop worker private(x)
+ for (j = 0; j < 32; j++)
+ {
+ int k;
+ x = i ^ j * 3;
+
+ #pragma acc loop vector
+ for (k = 0; k < 32; k++)
+ arr[i * 1024 + j * 32 + k] += x * k;
+ }
+
+ #pragma acc loop worker private(x)
+ for (j = 0; j < 32; j++)
+ {
+ int k;
+ x = i | j * 5;
+
+ #pragma acc loop vector
+ for (k = 0; k < 32; k++)
+ arr[i * 1024 + j * 32 + k] += x * k;
+ }
+ }
+ }
+
+ for (i = 0; i < 32; i++)
+ for (int j = 0; j < 32; j++)
+ for (int k = 0; k < 32; k++)
+ {
+ int idx = i * 1024 + j * 32 + k;
+ assert (arr[idx] == idx + (i ^ j * 3) * k + (i | j * 5) * k);
+ }
+}
+
+
+/* Test of worker-private variables declared on a loop directive, broadcasting
+ to vector-partitioned mode. Successive vector loops. */
+
+void loop_w_4()
+{
+ int x = 5, i, arr[32 * 32 * 32];
+
+ for (i = 0; i < 32 * 32 * 32; i++)
+ arr[i] = i;
+
+ #pragma acc parallel copy(arr) num_gangs(32) num_workers(32) vector_length(32)
+ {
+ int j;
+
+ #pragma acc loop gang
+ for (i = 0; i < 32; i++)
+ {
+ #pragma acc loop worker private(x)
+ for (j = 0; j < 32; j++)
+ {
+ int k;
+ x = i ^ j * 3;
+
+ #pragma acc loop vector
+ for (k = 0; k < 32; k++)
+ arr[i * 1024 + j * 32 + k] += x * k;
+
+ x = i | j * 5;
+
+ #pragma acc loop vector
+ for (k = 0; k < 32; k++)
+ arr[i * 1024 + j * 32 + k] += x * k;
+ }
+ }
+ }
+
+ for (i = 0; i < 32; i++)
+ for (int j = 0; j < 32; j++)
+ for (int k = 0; k < 32; k++)
+ {
+ int idx = i * 1024 + j * 32 + k;
+ assert (arr[idx] == idx + (i ^ j * 3) * k + (i | j * 5) * k);
+ }
+}
+
+
+/* Test of worker-private variables declared on a loop directive, broadcasting
+ to vector-partitioned mode. Addressable worker variable. */
+
+void loop_w_5()
+{
+ int x = 5, i, arr[32 * 32 * 32];
+
+ for (i = 0; i < 32 * 32 * 32; i++)
+ arr[i] = i;
+
+ #pragma acc parallel copy(arr) num_gangs(32) num_workers(32) vector_length(32)
+ {
+ int j;
+
+ #pragma acc loop gang
+ for (i = 0; i < 32; i++)
+ {
+ #pragma acc loop worker private(x)
+ for (j = 0; j < 32; j++)
+ {
+ int k;
+ int *p = &x;
+
+ x = i ^ j * 3;
+
+ #pragma acc loop vector
+ for (k = 0; k < 32; k++)
+ arr[i * 1024 + j * 32 + k] += x * k;
+
+ *p = i | j * 5;
+
+ #pragma acc loop vector
+ for (k = 0; k < 32; k++)
+ arr[i * 1024 + j * 32 + k] += x * k;
+ }
+ }
+ }
+
+ for (i = 0; i < 32; i++)
+ for (int j = 0; j < 32; j++)
+ for (int k = 0; k < 32; k++)
+ {
+ int idx = i * 1024 + j * 32 + k;
+ assert (arr[idx] == idx + (i ^ j * 3) * k + (i | j * 5) * k);
+ }
+}
+
+
+/* Test of worker-private variables declared on a loop directive, broadcasting
+ to vector-partitioned mode. Aggregate worker variable. */
+
+void loop_w_6()
+{
+ int i, arr[32 * 32 * 32];
+ vec2 pt;
+
+ for (i = 0; i < 32 * 32 * 32; i++)
+ arr[i] = i;
+
+ #pragma acc parallel copy(arr) num_gangs(32) num_workers(32) vector_length(32)
+ {
+ int j;
+
+ #pragma acc loop gang
+ for (i = 0; i < 32; i++)
+ {
+ #pragma acc loop worker private(pt)
+ for (j = 0; j < 32; j++)
+ {
+ int k;
+
+ pt.x = i ^ j * 3;
+ pt.y = i | j * 5;
+
+ #pragma acc loop vector
+ for (k = 0; k < 32; k++)
+ arr[i * 1024 + j * 32 + k] += pt.x * k;
+
+ #pragma acc loop vector
+ for (k = 0; k < 32; k++)
+ arr[i * 1024 + j * 32 + k] += pt.y * k;
+ }
+ }
+ }
+
+ for (i = 0; i < 32; i++)
+ for (int j = 0; j < 32; j++)
+ for (int k = 0; k < 32; k++)
+ {
+ int idx = i * 1024 + j * 32 + k;
+ assert (arr[idx] == idx + (i ^ j * 3) * k + (i | j * 5) * k);
+ }
+}
+
+
+/* Test of worker-private variables declared on loop directive, broadcasting
+ to vector-partitioned mode. Array worker variable. */
+
+void loop_w_7()
+{
+ int i, arr[32 * 32 * 32];
+ int pt[2];
+
+ for (i = 0; i < 32 * 32 * 32; i++)
+ arr[i] = i;
+
+ /* "pt" is treated as "present_or_copy" on the parallel directive because it
+ is an array variable. */
+ #pragma acc parallel copy(arr) num_gangs(32) num_workers(32) vector_length(32)
+ {
+ int j;
+
+ #pragma acc loop gang
+ for (i = 0; i < 32; i++)
+ {
+ /* But here, it is made private per-worker. */
+ #pragma acc loop worker private(pt)
+ for (j = 0; j < 32; j++)
+ {
+ int k;
+
+ pt[0] = i ^ j * 3;
+
+ #pragma acc loop vector
+ for (k = 0; k < 32; k++)
+ arr[i * 1024 + j * 32 + k] += pt[0] * k;
+
+ pt[1] = i | j * 5;
+
+ #pragma acc loop vector
+ for (k = 0; k < 32; k++)
+ arr[i * 1024 + j * 32 + k] += pt[1] * k;
+ }
+ }
+ }
+
+ for (i = 0; i < 32; i++)
+ for (int j = 0; j < 32; j++)
+ for (int k = 0; k < 32; k++)
+ {
+ int idx = i * 1024 + j * 32 + k;
+ assert (arr[idx] == idx + (i ^ j * 3) * k + (i | j * 5) * k);
+ }
+}
+
+
+/* Test of gang-private variables declared on the parallel directive. */
+
+void parallel_g_1()
+{
+ int x = 5, i, arr[32];
+
+ for (i = 0; i < 32; i++)
+ arr[i] = 3;
+
+ #pragma acc parallel private(x) copy(arr) num_gangs(32) num_workers(8) vector_length(32)
+ {
+ #pragma acc loop gang(static:1)
+ for (i = 0; i < 32; i++)
+ x = i * 2;
+
+ #pragma acc loop gang(static:1)
+ for (i = 0; i < 32; i++)
+ {
+ if (acc_on_device (acc_device_host))
+ x = i * 2;
+ arr[i] += x;
+ }
+ }
+
+ for (i = 0; i < 32; i++)
+ assert (arr[i] == 3 + i * 2);
+}
+
+
+/* Test of gang-private array variable declared on the parallel directive. */
+
+void parallel_g_2()
+{
+ int x[32], i, arr[32 * 32];
+
+ for (i = 0; i < 32 * 32; i++)
+ arr[i] = i;
+
+ #pragma acc parallel private(x) copy(arr) num_gangs(32) num_workers(2) vector_length(32)
+ {
+ #pragma acc loop gang
+ for (i = 0; i < 32; i++)
+ {
+ int j;
+ for (j = 0; j < 32; j++)
+ x[j] = j * 2;
+
+ #pragma acc loop worker
+ for (j = 0; j < 32; j++)
+ arr[i * 32 + j] += x[31 - j];
+ }
+ }
+
+ for (i = 0; i < 32 * 32; i++)
+ assert (arr[i] == i + (31 - (i % 32)) * 2);
+}
+
+
+int main ()
+{
+ local_g_1();
+ local_w_1();
+ local_w_2();
+ local_w_3();
+ local_w_4();
+ local_w_5();
+ loop_g_1();
+ loop_g_2();
+ loop_g_3();
+ loop_g_4();
+ loop_g_5();
+ loop_g_6();
+ loop_v_1();
+ loop_v_2();
+ loop_w_1();
+ loop_w_2();
+ loop_w_3();
+ loop_w_4();
+ loop_w_5();
+ loop_w_6();
+ loop_w_7();
+ parallel_g_1();
+ parallel_g_2();
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-1.c
index e557931..10eb2788 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-1.c
@@ -1,46 +1,59 @@
/* { dg-do run } */
+/* Ignore vector_length warnings for offloaded (nvptx) targets. */
+/* { dg-additional-options "-foffload=-w" } */
+
/* Integer reductions. */
#include <stdlib.h>
-#include <stdbool.h>
-
-#define vl 32
-
-#define DO_PRAGMA(x) _Pragma (#x)
-
-#define check_reduction_op(type, op, init, b) \
- { \
- type res, vres; \
- res = (init); \
- DO_PRAGMA (acc parallel vector_length (vl) copy(res)) \
-DO_PRAGMA (acc loop reduction (op:res))\
- for (i = 0; i < n; i++) \
- res = res op (b); \
- \
- vres = (init); \
- for (i = 0; i < n; i++) \
- vres = vres op (b); \
- \
- if (res != vres) \
- abort (); \
- }
+#include "reduction.h"
+
+const int ng = 8;
+const int nw = 4;
+const int vl = 32;
static void
-test_reductions_int (void)
+test_reductions (void)
{
- const int n = 1000;
+ const int n = 100;
int i;
int array[n];
for (i = 0; i < n; i++)
- array[i] = i;
-
- check_reduction_op (int, +, 0, array[i]);
- check_reduction_op (int, *, 1, array[i]);
- check_reduction_op (int, &, -1, array[i]);
- check_reduction_op (int, |, 0, array[i]);
- check_reduction_op (int, ^, 0, array[i]);
+ array[i] = i+1;
+
+ /* Gang reductions. */
+ check_reduction_op (int, +, 0, array[i], num_gangs (ng), gang);
+ check_reduction_op (int, *, 1, array[i], num_gangs (ng), gang);
+ check_reduction_op (int, &, -1, array[i], num_gangs (ng), gang);
+ check_reduction_op (int, |, 0, array[i], num_gangs (ng), gang);
+ check_reduction_op (int, ^, 0, array[i], num_gangs (ng), gang);
+
+ /* Worker reductions. */
+ check_reduction_op (int, +, 0, array[i], num_workers (nw), worker);
+ check_reduction_op (int, *, 1, array[i], num_workers (nw), worker);
+ check_reduction_op (int, &, -1, array[i], num_workers (nw), worker);
+ check_reduction_op (int, |, 0, array[i], num_workers (nw), worker);
+ check_reduction_op (int, ^, 0, array[i], num_workers (nw), worker);
+
+ /* Vector reductions. */
+ check_reduction_op (int, +, 0, array[i], vector_length (vl), vector);
+ check_reduction_op (int, *, 1, array[i], vector_length (vl), vector);
+ check_reduction_op (int, &, -1, array[i], vector_length (vl), vector);
+ check_reduction_op (int, |, 0, array[i], vector_length (vl), vector);
+ check_reduction_op (int, ^, 0, array[i], vector_length (vl), vector);
+
+ /* Combined reductions. */
+ check_reduction_op (int, +, 0, array[i], num_gangs (ng) num_workers (nw)
+ vector_length (vl), gang worker vector);
+ check_reduction_op (int, *, 1, array[i], num_gangs (ng) num_workers (nw)
+ vector_length (vl), gang worker vector);
+ check_reduction_op (int, &, -1, array[i], num_gangs (ng) num_workers (nw)
+ vector_length (vl), gang worker vector);
+ check_reduction_op (int, |, 0, array[i], num_gangs (ng) num_workers (nw)
+ vector_length (vl), gang worker vector);
+ check_reduction_op (int, ^, 0, array[i], num_gangs (ng) num_workers (nw)
+ vector_length (vl), gang worker vector);
}
static void
@@ -55,29 +68,31 @@ test_reductions_bool (void)
array[i] = i;
cmp_val = 5;
- check_reduction_op (bool, &&, true, (cmp_val > array[i]));
- check_reduction_op (bool, ||, false, (cmp_val > array[i]));
-}
-#define check_reduction_macro(type, op, init, b) \
- { \
- type res, vres; \
- res = (init); \
-DO_PRAGMA (acc parallel vector_length (vl) copy(res))\
-DO_PRAGMA (acc loop reduction (op:res))\
- for (i = 0; i < n; i++) \
- res = op (res, (b)); \
- \
- vres = (init); \
- for (i = 0; i < n; i++) \
- vres = op (vres, (b)); \
- \
- if (res != vres) \
- abort (); \
- }
-
-#define max(a, b) (((a) > (b)) ? (a) : (b))
-#define min(a, b) (((a) < (b)) ? (a) : (b))
+ /* Gang reductions. */
+ check_reduction_op (int, &&, 1, (cmp_val > array[i]), num_gangs (ng),
+ gang);
+ check_reduction_op (int, ||, 0, (cmp_val > array[i]), num_gangs (ng),
+ gang);
+
+ /* Worker reductions. */
+ check_reduction_op (int, &&, 1, (cmp_val > array[i]), num_workers (nw),
+ worker);
+ check_reduction_op (int, ||, 0, (cmp_val > array[i]), num_workers (nw),
+ worker);
+
+ /* Vector reductions. */
+ check_reduction_op (int, &&, 1, (cmp_val > array[i]), vector_length (vl),
+ vector);
+ check_reduction_op (int, ||, 0, (cmp_val > array[i]), vector_length (vl),
+ vector);
+
+ /* Combined reductions. */
+ check_reduction_op (int, &&, 1, (cmp_val > array[i]), num_gangs (ng)
+ num_workers (nw) vector_length (vl), gang worker vector);
+ check_reduction_op (int, ||, 0, (cmp_val > array[i]), num_gangs (ng)
+ num_workers (nw) vector_length (vl), gang worker vector);
+}
static void
test_reductions_minmax (void)
@@ -89,14 +104,32 @@ test_reductions_minmax (void)
for (i = 0; i < n; i++)
array[i] = i;
- check_reduction_macro (int, min, n + 1, array[i]);
- check_reduction_macro (int, max, -1, array[i]);
+ /* Gang reductions. */
+ check_reduction_macro (int, min, n + 1, array[i], num_gangs (ng), gang);
+ check_reduction_macro (int, max, -1, array[i], num_gangs (ng), gang);
+
+ /* Worker reductions. */
+ check_reduction_macro (int, min, n + 1, array[i], num_workers (nw), worker);
+ check_reduction_macro (int, max, -1, array[i], num_workers (nw), worker);
+
+ /* Vector reductions. */
+ check_reduction_macro (int, min, n + 1, array[i], vector_length (vl),
+ vector);
+ check_reduction_macro (int, max, -1, array[i], vector_length (vl), vector);
+
+ /* Combined reductions. */
+ check_reduction_macro (int, min, n + 1, array[i], num_gangs (ng)
+ num_workers (nw) vector_length (vl), gang worker
+ vector);
+ check_reduction_macro (int, max, -1, array[i], num_gangs (ng)
+ num_workers (nw) vector_length (vl), gang worker
+ vector);
}
int
main (void)
{
- test_reductions_int ();
+ test_reductions ();
test_reductions_bool ();
test_reductions_minmax ();
return 0;
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-2.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-2.c
index 8a0b0d6..7cb9497 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-2.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-2.c
@@ -1,124 +1,83 @@
/* { dg-do run } */
+/* Ignore vector_length warnings for offloaded (nvptx) targets. */
+/* { dg-additional-options "-foffload=-w" } */
+
/* float reductions. */
#include <stdlib.h>
-#include <stdbool.h>
-#include <math.h>
+#include "reduction.h"
-#define vl 32
+const int ng = 8;
+const int nw = 4;
+const int vl = 32;
-int
-main(void)
+static void
+test_reductions (void)
{
- const int n = 1000;
+ const int n = 100;
int i;
- float vresult, result, array[n];
- bool lvresult, lresult;
+ float array[n];
for (i = 0; i < n; i++)
- array[i] = i;
-
- result = 0;
- vresult = 0;
+ array[i] = i+1;
- /* '+' reductions. */
-#pragma acc parallel vector_length (vl) copy(result)
-#pragma acc loop reduction (+:result)
- for (i = 0; i < n; i++)
- result += array[i];
+ /* Gang reductions. */
+ check_reduction_op (float, +, 0, array[i], num_gangs (ng), gang);
+ check_reduction_op (float, *, 1, array[i], num_gangs (ng), gang);
- /* Verify the reduction. */
- for (i = 0; i < n; i++)
- vresult += array[i];
-
- if (result != vresult)
- abort ();
-
- result = 0;
- vresult = 0;
-
- /* '*' reductions. */
-#pragma acc parallel vector_length (vl) copy(result)
-#pragma acc loop reduction (*:result)
- for (i = 0; i < n; i++)
- result *= array[i];
+ /* Worker reductions. */
+ check_reduction_op (float, +, 0, array[i], num_workers (nw), worker);
+ check_reduction_op (float, *, 1, array[i], num_workers (nw), worker);
- /* Verify the reduction. */
- for (i = 0; i < n; i++)
- vresult *= array[i];
-
- if (fabs(result - vresult) > .0001)
- abort ();
- result = 0;
- vresult = 0;
-
- /* 'max' reductions. */
-#pragma acc parallel vector_length (vl) copy(result)
-#pragma acc loop reduction (max:result)
- for (i = 0; i < n; i++)
- result = result > array[i] ? result : array[i];
-
- /* Verify the reduction. */
- for (i = 0; i < n; i++)
- vresult = vresult > array[i] ? vresult : array[i];
-
- if (result != vresult)
- abort ();
-
- result = 0;
- vresult = 0;
-
- /* 'min' reductions. */
-#pragma acc parallel vector_length (vl) copy(result)
-#pragma acc loop reduction (min:result)
- for (i = 0; i < n; i++)
- result = result < array[i] ? result : array[i];
+ /* Vector reductions. */
+ check_reduction_op (float, +, 0, array[i], vector_length (vl), vector);
+ check_reduction_op (float, *, 1, array[i], vector_length (vl), vector);
- /* Verify the reduction. */
- for (i = 0; i < n; i++)
- vresult = vresult < array[i] ? vresult : array[i];
-
- if (result != vresult)
- abort ();
-
- result = 5;
- vresult = 5;
-
- lresult = false;
- lvresult = false;
-
- /* '&&' reductions. */
-#pragma acc parallel vector_length (vl) copy(lresult)
-#pragma acc loop reduction (&&:lresult)
- for (i = 0; i < n; i++)
- lresult = lresult && (result > array[i]);
-
- /* Verify the reduction. */
- for (i = 0; i < n; i++)
- lvresult = lresult && (result > array[i]);
-
- if (lresult != lvresult)
- abort ();
-
- result = 5;
- vresult = 5;
-
- lresult = false;
- lvresult = false;
+ /* Combined reductions. */
+ check_reduction_op (float, +, 0, array[i], num_gangs (ng) num_workers (nw)
+ vector_length (vl), gang worker vector);
+ check_reduction_op (float, *, 1, array[i], num_gangs (ng) num_workers (nw)
+ vector_length (vl), gang worker vector);
+}
- /* '||' reductions. */
-#pragma acc parallel vector_length (vl) copy(lresult)
-#pragma acc loop reduction (||:lresult)
- for (i = 0; i < n; i++)
- lresult = lresult || (result > array[i]);
+static void
+test_reductions_minmax (void)
+{
+ const int n = 1000;
+ int i;
+ float array[n];
- /* Verify the reduction. */
for (i = 0; i < n; i++)
- lvresult = lresult || (result > array[i]);
+ array[i] = i;
- if (lresult != lvresult)
- abort ();
+ /* Gang reductions. */
+ check_reduction_macro (float, min, n + 1, array[i], num_gangs (ng), gang);
+ check_reduction_macro (float, max, -1, array[i], num_gangs (ng), gang);
+
+ /* Worker reductions. */
+ check_reduction_macro (float, min, n + 1, array[i], num_workers (nw),
+ worker);
+ check_reduction_macro (float, max, -1, array[i], num_workers (nw), worker);
+
+ /* Vector reductions. */
+ check_reduction_macro (float, min, n + 1, array[i], vector_length (vl),
+ vector);
+ check_reduction_macro (float, max, -1, array[i], vector_length (vl), vector);
+
+ /* Combined reductions. */
+ check_reduction_macro (float, min, n + 1, array[i], num_gangs (ng)
+ num_workers (nw) vector_length (vl), gang worker
+ vector);
+ check_reduction_macro (float, max, -1, array[i], num_gangs (ng)
+ num_workers (nw)vector_length (vl), gang worker
+ vector);
+}
+int
+main (void)
+{
+ test_reductions ();
+ test_reductions_minmax ();
return 0;
}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-3.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-3.c
index a233e29..1b948be 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-3.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-3.c
@@ -1,93 +1,84 @@
/* { dg-do run } */
+/* Ignore vector_length warnings for offloaded (nvptx) targets. */
+/* { dg-additional-options "-foffload=-w" } */
+
/* double reductions. */
#include <stdlib.h>
-#include <stdbool.h>
-#include <math.h>
+#include "reduction.h"
-#define vl 32
+const int ng = 8;
+const int nw = 4;
+const int vl = 32;
-int
-main(void)
+static void
+test_reductions (void)
{
- const int n = 1000;
+ const int n = 10;
int i;
- double vresult, result, array[n];
- bool lvresult, lresult;
-
- for (i = 0; i < n; i++)
- array[i] = i;
-
- result = 0;
- vresult = 0;
-
- /* 'max' reductions. */
-#pragma acc parallel vector_length (vl) copy(result)
-#pragma acc loop reduction (max:result)
- for (i = 0; i < n; i++)
- result = result > array[i] ? result : array[i];
-
- /* Verify the reduction. */
- for (i = 0; i < n; i++)
- vresult = vresult > array[i] ? vresult : array[i];
-
- if (result != vresult)
- abort ();
-
- result = 0;
- vresult = 0;
-
- /* 'min' reductions. */
-#pragma acc parallel vector_length (vl) copy(result)
-#pragma acc loop reduction (min:result)
- for (i = 0; i < n; i++)
- result = result < array[i] ? result : array[i];
+ double array[n];
- /* Verify the reduction. */
for (i = 0; i < n; i++)
- vresult = vresult < array[i] ? vresult : array[i];
+ array[i] = i+1;
- if (result != vresult)
- abort ();
+ /* Gang reductions. */
+ check_reduction_op (double, +, 0, array[i], num_gangs (ng), gang);
+ check_reduction_op (double, *, 1, array[i], num_gangs (ng), gang);
- result = 5;
- vresult = 5;
+ /* Worker reductions. */
+ check_reduction_op (double, +, 0, array[i], num_workers (nw), worker);
+ check_reduction_op (double, *, 1, array[i], num_workers (nw), worker);
- lresult = false;
- lvresult = false;
+ /* Vector reductions. */
+ check_reduction_op (double, +, 0, array[i], vector_length (vl), vector);
+ check_reduction_op (double, *, 1, array[i], vector_length (vl), vector);
- /* '&&' reductions. */
-#pragma acc parallel vector_length (vl) copy(lresult)
-#pragma acc loop reduction (&&:lresult)
- for (i = 0; i < n; i++)
- lresult = lresult && (result > array[i]);
-
- /* Verify the reduction. */
- for (i = 0; i < n; i++)
- lvresult = lresult && (result > array[i]);
-
- if (lresult != lvresult)
- abort ();
-
- result = 5;
- vresult = 5;
-
- lresult = false;
- lvresult = false;
+ /* Combined reductions. */
+ check_reduction_op (double, +, 0, array[i], num_gangs (ng) num_workers (nw)
+ vector_length (vl), gang worker vector);
+ check_reduction_op (double, *, 1, array[i], num_gangs (ng) num_workers (nw)
+ vector_length (vl), gang worker vector);
+}
- /* '||' reductions. */
-#pragma acc parallel vector_length (vl) copy(lresult)
-#pragma acc loop reduction (||:lresult)
- for (i = 0; i < n; i++)
- lresult = lresult || (result > array[i]);
+static void
+test_reductions_minmax (void)
+{
+ const int n = 1000;
+ int i;
+ double array[n];
- /* Verify the reduction. */
for (i = 0; i < n; i++)
- lvresult = lresult || (result > array[i]);
+ array[i] = i;
- if (lresult != lvresult)
- abort ();
+ /* Gang reductions. */
+ check_reduction_macro (double, min, n + 1, array[i], num_gangs (ng), gang);
+ check_reduction_macro (double, max, -1, array[i], num_gangs (ng), gang);
+
+ /* Worker reductions. */
+ check_reduction_macro (double, min, n + 1, array[i], num_workers (nw),
+ worker);
+ check_reduction_macro (double, max, -1, array[i], num_workers (nw), worker);
+
+ /* Vector reductions. */
+ check_reduction_macro (double, min, n + 1, array[i], vector_length (vl),
+ vector);
+ check_reduction_macro (double, max, -1, array[i], vector_length (vl),
+ vector);
+
+ /* Combined reductions. */
+ check_reduction_macro (double, min, n + 1, array[i], num_gangs (ng)
+ num_workers (nw) vector_length (vl), gang worker
+ vector);
+ check_reduction_macro (double, max, -1, array[i], num_gangs (ng)
+ num_workers (nw) vector_length (vl), gang worker
+ vector);
+}
+int
+main (void)
+{
+ test_reductions ();
+ test_reductions_minmax ();
return 0;
}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-4.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-4.c
index 59d49c1..79355ed 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-4.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-4.c
@@ -1,59 +1,56 @@
/* { dg-do run { target { ! { hppa*-*-hpux* } } } } */
+/* Ignore vector_length warnings for offloaded (nvptx) targets. */
+/* { dg-additional-options "-foffload=-w" } */
+
/* complex reductions. */
#include <stdlib.h>
-#include <stdbool.h>
-#include <math.h>
#include <complex.h>
+#include "reduction.h"
-#define vl 32
+const int ng = 8;
+const int nw = 4;
+const int vl = 32;
-int
-main(void)
+static void
+test_reductions (void)
{
- const int n = 1000;
+ const int n = 10;
int i;
- double _Complex vresult, result, array[n];
- bool lvresult, lresult;
-
- for (i = 0; i < n; i++)
- array[i] = i;
-
- result = 0;
- vresult = 0;
-
- /* '&&' reductions. */
-#pragma acc parallel vector_length (vl) copy(lresult)
-#pragma acc loop reduction (&&:lresult)
- for (i = 0; i < n; i++)
- lresult = lresult && (creal(result) > creal(array[i]));
-
- /* Verify the reduction. */
- for (i = 0; i < n; i++)
- lvresult = lresult && (creal(result) > creal(array[i]));
+ double _Complex array[n];
- if (lresult != lvresult)
- abort ();
-
- result = 5;
- vresult = 5;
-
- lresult = false;
- lvresult = false;
-
- /* '||' reductions. */
-#pragma acc parallel vector_length (vl) copy(lresult)
-#pragma acc loop reduction (||:lresult)
- for (i = 0; i < n; i++)
- lresult = lresult || (creal(result) > creal(array[i]));
-
- /* Verify the reduction. */
for (i = 0; i < n; i++)
- lvresult = lresult || (creal(result) > creal(array[i]));
-
- if (lresult != lvresult)
- abort ();
+ array[i] = i+1;
+
+ /* Gang reductions. */
+ check_reduction_op (double, +, 0, creal (array[i]), num_gangs (ng), gang);
+ check_reduction_op (double, *, 1, creal (array[i]), num_gangs (ng), gang);
+
+ /* Worker reductions. */
+ check_reduction_op (double, +, 0, creal (array[i]), num_workers (nw),
+ worker);
+ check_reduction_op (double, *, 1, creal (array[i]), num_workers (nw),
+ worker);
+
+ /* Vector reductions. */
+ check_reduction_op (double, +, 0, creal (array[i]), vector_length (vl),
+ vector);
+ check_reduction_op (double, *, 1, creal (array[i]), vector_length (vl),
+ vector);
+
+ /* Combined reductions. */
+ check_reduction_op (double, +, 0, creal (array[i]), num_gangs (ng)
+ num_workers (nw) vector_length (vl), gang worker
+ vector);
+ check_reduction_op (double, *, 1, creal (array[i]), num_gangs (ng)
+ num_workers (nw) vector_length (vl), gang worker
+ vector);
+}
+int
+main (void)
+{
+ test_reductions ();
return 0;
}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-5.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-5.c
index efe8702..46b553a 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-5.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-5.c
@@ -1,32 +1,57 @@
+/* { dg-do run } */
+/* { dg-additional-options "-w" } */
+
+/* Ignore vector_length warnings for offloaded (nvptx) targets. */
+/* { dg-additional-options "-foffload=-w" } */
+
+/* Multiple reductions. */
+
#include <stdio.h>
#include <stdlib.h>
+const int ng = 8;
+const int nw = 4;
+const int vl = 32;
+
+const int n = 100;
+
+#define DO_PRAGMA(x) _Pragma (#x)
+
+#define check_reduction(gwv_par, gwv_loop) \
+ { \
+ s1 = 2; s2 = 5; \
+DO_PRAGMA (acc parallel gwv_par copy (s1, s2)) \
+DO_PRAGMA (acc loop gwv_loop reduction (+:s1, s2)) \
+ for (i = 0; i < n; i++) \
+ { \
+ s1 = s1 + 3; \
+ s2 = s2 + 5; \
+ } \
+ \
+ if (s1 != v1 && s2 != v2) \
+ abort (); \
+ }
+
int
main (void)
{
int s1 = 2, s2 = 5, v1 = 2, v2 = 5;
- int n = 100;
int i;
-#pragma acc parallel vector_length (32) copy(s1,s2)
-#pragma acc loop reduction (+:s1, s2)
- for (i = 0; i < n; i++)
- {
- s1 = s1 + 3;
- s2 = s2 + 2;
- }
-
for (i = 0; i < n; i++)
{
v1 = v1 + 3;
v2 = v2 + 2;
}
-
- if (s1 != v1)
- abort ();
-
- if (s2 != v2)
- abort ();
-
+
+ check_reduction (num_gangs (ng), gang);
+
+ /* Nvptx targets require a vector_length or 32 in to allow spinlocks with
+ gangs. */
+ check_reduction (num_workers (nw) vector_length (vl), worker);
+ check_reduction (vector_length (vl), vector);
+ check_reduction (num_gangs (ng) num_workers (nw) vector_length (vl), gang
+ worker vector);
+
return 0;
}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-6.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-6.c
new file mode 100644
index 0000000..af30b31
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-6.c
@@ -0,0 +1,36 @@
+/* { dg-do run } */
+/* { dg-additional-options "-w" } */
+
+/* Test reductions on explicitly private variables. */
+
+#include <assert.h>
+
+int
+main ()
+{
+ int i, j, red[10];
+ int v;
+
+ for (i = 0; i < 10; i++)
+ red[i] = -1;
+
+#pragma acc parallel copyout(red)
+ {
+#pragma acc loop gang private(v)
+ for (j = 0; j < 10; j++)
+ {
+ v = j;
+
+#pragma acc loop vector reduction (+:v)
+ for (i = 0; i < 100; i++)
+ v++;
+
+ red[j] = v;
+ }
+ }
+
+ for (i = 0; i < 10; i++)
+ assert (red[i] == i + 100);
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c
new file mode 100644
index 0000000..76c33e4
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c
@@ -0,0 +1,480 @@
+/* Tests of reduction on loop directive. */
+
+#include <assert.h>
+
+
+/* Test of reduction on loop directive (gangs, non-private reduction
+ variable). */
+
+void g_np_1()
+{
+ int i, arr[1024], res = 0, hres = 0;
+
+ for (i = 0; i < 1024; i++)
+ arr[i] = i;
+
+ #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
+ copy(res)
+ {
+ #pragma acc loop gang reduction(+:res)
+ for (i = 0; i < 1024; i++)
+ res += arr[i];
+ }
+
+ for (i = 0; i < 1024; i++)
+ hres += arr[i];
+
+ assert (res == hres);
+
+ res = hres = 1;
+
+ #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
+ copy(res)
+ {
+ #pragma acc loop gang reduction(*:res)
+ for (i = 0; i < 12; i++)
+ res *= arr[i];
+ }
+
+ for (i = 0; i < 12; i++)
+ hres *= arr[i];
+
+ assert (res == hres);
+}
+
+
+/* Test of reduction on loop directive (gangs and vectors, non-private
+ reduction variable). */
+
+void gv_np_1()
+{
+ int i, arr[1024], res = 0, hres = 0;
+
+ for (i = 0; i < 1024; i++)
+ arr[i] = i;
+
+ #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
+ copy(res)
+ {
+ #pragma acc loop gang vector reduction(+:res)
+ for (i = 0; i < 1024; i++)
+ res += arr[i];
+ }
+
+ for (i = 0; i < 1024; i++)
+ hres += arr[i];
+
+ assert (res == hres);
+}
+
+
+/* Test of reduction on loop directive (gangs and workers, non-private
+ reduction variable). */
+
+void gw_np_1()
+{
+ int i, arr[1024], res = 0, hres = 0;
+
+ for (i = 0; i < 1024; i++)
+ arr[i] = i;
+
+ #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
+ copy(res)
+ {
+ #pragma acc loop gang worker reduction(+:res)
+ for (i = 0; i < 1024; i++)
+ res += arr[i];
+ }
+
+ for (i = 0; i < 1024; i++)
+ hres += arr[i];
+
+ assert (res == hres);
+}
+
+
+/* Test of reduction on loop directive (gangs, workers and vectors, non-private
+ reduction variable). */
+
+void gwv_np_1()
+{
+ int i, arr[1024], res = 0, hres = 0;
+
+ for (i = 0; i < 1024; i++)
+ arr[i] = i;
+
+ #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
+ copy(res)
+ {
+ #pragma acc loop gang worker vector reduction(+:res)
+ for (i = 0; i < 1024; i++)
+ res += arr[i];
+ }
+
+ for (i = 0; i < 1024; i++)
+ hres += arr[i];
+
+ assert (res == hres);
+}
+
+
+/* Test of reduction on loop directive (gangs, workers and vectors, non-private
+ reduction variable: separate gang and worker/vector loops). */
+
+void gwv_np_2()
+{
+ int i, j, arr[32768], res = 0, hres = 0;
+
+ for (i = 0; i < 32768; i++)
+ arr[i] = i;
+
+ #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
+ copy(res)
+ {
+ #pragma acc loop gang reduction(+:res)
+ for (j = 0; j < 32; j++)
+ {
+ #pragma acc loop worker vector reduction(+:res)
+ for (i = 0; i < 1024; i++)
+ res += arr[j * 1024 + i];
+ }
+ /* "res" is non-private, and is not available until after the parallel
+ region. */
+ }
+
+ for (i = 0; i < 32768; i++)
+ hres += arr[i];
+
+ assert (res == hres);
+}
+
+
+/* Test of reduction on loop directive (gangs, workers and vectors, non-private
+ reduction variable: separate gang and worker/vector loops). */
+
+void gwv_np_3()
+{
+ int i, j;
+ double arr[32768], res = 0, hres = 0;
+
+ for (i = 0; i < 32768; i++)
+ arr[i] = i;
+
+ #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
+ copyin(arr) copy(res)
+ {
+ #pragma acc loop gang reduction(+:res)
+ for (j = 0; j < 32; j++)
+ {
+ #pragma acc loop worker vector reduction(+:res)
+ for (i = 0; i < 1024; i++)
+ res += arr[j * 1024 + i];
+ }
+ }
+
+ for (i = 0; i < 32768; i++)
+ hres += arr[i];
+
+ assert (res == hres);
+}
+
+
+/* Test of reduction on loop directive (gangs, workers and vectors, multiple
+ non-private reduction variables, float type). */
+
+void gwv_np_4()
+{
+ int i, j;
+ float arr[32768];
+ float res = 0, mres = 0, hres = 0, hmres = 0;
+
+ for (i = 0; i < 32768; i++)
+ arr[i] = i;
+
+ #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
+ copy(res, mres)
+ {
+ #pragma acc loop gang reduction(+:res) reduction(max:mres)
+ for (j = 0; j < 32; j++)
+ {
+ #pragma acc loop worker vector reduction(+:res) reduction(max:mres)
+ for (i = 0; i < 1024; i++)
+ {
+ res += arr[j * 1024 + i];
+ if (arr[j * 1024 + i] > mres)
+ mres = arr[j * 1024 + i];
+ }
+
+ #pragma acc loop worker vector reduction(+:res) reduction(max:mres)
+ for (i = 0; i < 1024; i++)
+ {
+ res += arr[j * 1024 + (1023 - i)];
+ if (arr[j * 1024 + (1023 - i)] > mres)
+ mres = arr[j * 1024 + (1023 - i)];
+ }
+ }
+ }
+
+ for (j = 0; j < 32; j++)
+ for (i = 0; i < 1024; i++)
+ {
+ hres += arr[j * 1024 + i];
+ hres += arr[j * 1024 + (1023 - i)];
+ if (arr[j * 1024 + i] > hmres)
+ hmres = arr[j * 1024 + i];
+ if (arr[j * 1024 + (1023 - i)] > hmres)
+ hmres = arr[j * 1024 + (1023 - i)];
+ }
+
+ assert (res == hres);
+ assert (mres == hmres);
+}
+
+
+/* Test of reduction on loop directive (vectors, private reduction
+ variable). */
+
+void v_p_1()
+{
+ int i, j, arr[1024], out[32], res = 0, hres = 0;
+
+ for (i = 0; i < 1024; i++)
+ arr[i] = i;
+
+ #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
+ private(res) copyout(out)
+ {
+ #pragma acc loop gang
+ for (j = 0; j < 32; j++)
+ {
+ res = 0;
+
+ #pragma acc loop vector reduction(+:res)
+ for (i = 0; i < 32; i++)
+ res += arr[j * 32 + i];
+
+ out[j] = res;
+ }
+ }
+
+ for (j = 0; j < 32; j++)
+ {
+ hres = 0;
+
+ for (i = 0; i < 32; i++)
+ hres += arr[j * 32 + i];
+
+ assert (out[j] == hres);
+ }
+}
+
+
+/* Test of reduction on loop directive (vector reduction in
+ gang-partitioned/worker-partitioned mode, private reduction variable). */
+
+void v_p_2()
+{
+ int i, j, k;
+ double ina[1024], inb[1024], out[1024], acc;
+
+ for (j = 0; j < 32; j++)
+ for (i = 0; i < 32; i++)
+ {
+ ina[j * 32 + i] = (i == j) ? 2.0 : 0.0;
+ inb[j * 32 + i] = (double) (i + j);
+ }
+
+ #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
+ private(acc) copyin(ina, inb) copyout(out)
+ {
+ #pragma acc loop gang worker
+ for (k = 0; k < 32; k++)
+ for (j = 0; j < 32; j++)
+ {
+ acc = 0;
+
+ #pragma acc loop vector reduction(+:acc)
+ for (i = 0; i < 32; i++)
+ acc += ina[k * 32 + i] * inb[i * 32 + j];
+
+ out[k * 32 + j] = acc;
+ }
+ }
+
+ for (j = 0; j < 32; j++)
+ for (i = 0; i < 32; i++)
+ assert (out[j * 32 + i] == (i + j) * 2);
+}
+
+
+/* Test of reduction on loop directive (workers, private reduction
+ variable). */
+
+void w_p_1()
+{
+ int i, j, arr[1024], out[32], res = 0, hres = 0;
+
+ for (i = 0; i < 1024; i++)
+ arr[i] = i;
+
+ #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
+ private(res) copyout(out)
+ {
+ #pragma acc loop gang
+ for (j = 0; j < 32; j++)
+ {
+ res = 0;
+
+ #pragma acc loop worker reduction(+:res)
+ for (i = 0; i < 32; i++)
+ res += arr[j * 32 + i];
+
+ out[j] = res;
+ }
+ }
+
+ for (j = 0; j < 32; j++)
+ {
+ hres = 0;
+
+ for (i = 0; i < 32; i++)
+ hres += arr[j * 32 + i];
+
+ assert (out[j] == hres);
+ }
+}
+
+
+/* Test of reduction on loop directive (workers and vectors, private reduction
+ variable). */
+
+void wv_p_1()
+{
+ int i, j, arr[1024], out[32], res = 0, hres = 0;
+
+ for (i = 0; i < 1024; i++)
+ arr[i] = i;
+
+ #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
+ private(res) copyout(out)
+ {
+ #pragma acc loop gang
+ for (j = 0; j < 32; j++)
+ {
+ res = 0;
+
+ #pragma acc loop worker vector reduction(+:res)
+ for (i = 0; i < 32; i++)
+ res += arr[j * 32 + i];
+
+ out[j] = res;
+ }
+ }
+
+ for (j = 0; j < 32; j++)
+ {
+ hres = 0;
+
+ for (i = 0; i < 32; i++)
+ hres += arr[j * 32 + i];
+
+ assert (out[j] == hres);
+ }
+}
+
+
+/* Test of reduction on loop directive (workers and vectors, private reduction
+ variable). */
+
+void wv_p_2()
+{
+ int i, j, arr[32768], out[32], res = 0, hres = 0;
+
+ for (i = 0; i < 32768; i++)
+ arr[i] = i;
+
+ #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
+ private(res) copyout(out)
+ {
+ #pragma acc loop gang
+ for (j = 0; j < 32; j++)
+ {
+ res = j;
+
+ #pragma acc loop worker reduction(+:res)
+ for (i = 0; i < 1024; i++)
+ res += arr[j * 1024 + i];
+
+ #pragma acc loop vector reduction(+:res)
+ for (i = 1023; i >= 0; i--)
+ res += arr[j * 1024 + i];
+
+ out[j] = res;
+ }
+ }
+
+ for (j = 0; j < 32; j++)
+ {
+ hres = j;
+
+ for (i = 0; i < 1024; i++)
+ hres += arr[j * 1024 + i] * 2;
+
+ assert (out[j] == hres);
+ }
+}
+
+
+/* Test of reduction on loop directive (workers and vectors, private reduction
+ variable: gang-redundant mode). */
+
+void wv_p_3()
+{
+ int i, arr[1024], out[32], res = 0, hres = 0;
+
+ for (i = 0; i < 1024; i++)
+ arr[i] = i ^ 33;
+
+ #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
+ private(res) copyin(arr) copyout(out)
+ {
+ /* Private variables aren't initialized by default in openacc. */
+ res = 0;
+
+ /* "res" should be available at the end of the following loop (and should
+ have the same value redundantly in each gang). */
+ #pragma acc loop worker vector reduction(+:res)
+ for (i = 0; i < 1024; i++)
+ res += arr[i];
+
+ #pragma acc loop gang (static: 1)
+ for (i = 0; i < 32; i++)
+ out[i] = res;
+ }
+
+ for (i = 0; i < 1024; i++)
+ hres += arr[i];
+
+ for (i = 0; i < 32; i++)
+ assert (out[i] == hres);
+}
+
+
+int main()
+{
+ g_np_1();
+ gv_np_1();
+ gw_np_1();
+ gwv_np_1();
+ gwv_np_2();
+ gwv_np_3();
+ gwv_np_4();
+ v_p_1();
+ v_p_2();
+ w_p_1();
+ wv_p_1();
+ wv_p_2();
+ wv_p_3();
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction.h b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction.h
new file mode 100644
index 0000000..1b3f8d4
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction.h
@@ -0,0 +1,43 @@
+#ifndef REDUCTION_H
+#define REDUCTION_H
+
+#define DO_PRAGMA(x) _Pragma (#x)
+
+#define check_reduction_op(type, op, init, b, gwv_par, gwv_loop) \
+ { \
+ type res, vres; \
+ res = (init); \
+DO_PRAGMA (acc parallel gwv_par copy (res)) \
+DO_PRAGMA (acc loop gwv_loop reduction (op:res)) \
+ for (i = 0; i < n; i++) \
+ res = res op (b); \
+ \
+ vres = (init); \
+ for (i = 0; i < n; i++) \
+ vres = vres op (b); \
+ \
+ if (res != vres) \
+ abort (); \
+ }
+
+#define check_reduction_macro(type, op, init, b, gwv_par, gwv_loop) \
+ { \
+ type res, vres; \
+ res = (init); \
+ DO_PRAGMA (acc parallel gwv_par copy(res)) \
+DO_PRAGMA (acc loop gwv_loop reduction (op:res)) \
+ for (i = 0; i < n; i++) \
+ res = op (res, (b)); \
+ \
+ vres = (init); \
+ for (i = 0; i < n; i++) \
+ vres = op (vres, (b)); \
+ \
+ if (res != vres) \
+ abort (); \
+ }
+
+#define max(a, b) (((a) > (b)) ? (a) : (b))
+#define min(a, b) (((a) < (b)) ? (a) : (b))
+
+#endif
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-1.c
new file mode 100644
index 0000000..f112457
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-1.c
@@ -0,0 +1,88 @@
+// { dg-additional-options "-fno-exceptions" }
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#pragma acc routine
+int fact(int n)
+{
+ if (n == 0 || n == 1)
+ return 1;
+ else
+ return n * fact (n - 1);
+}
+
+int main()
+{
+ int *s, *g, *w, *v, *gw, *gv, *wv, *gwv, i, n = 10;
+
+ s = (int *) malloc (sizeof (int) * n);
+ g = (int *) malloc (sizeof (int) * n);
+ w = (int *) malloc (sizeof (int) * n);
+ v = (int *) malloc (sizeof (int) * n);
+ gw = (int *) malloc (sizeof (int) * n);
+ gv = (int *) malloc (sizeof (int) * n);
+ wv = (int *) malloc (sizeof (int) * n);
+ gwv = (int *) malloc (sizeof (int) * n);
+
+#pragma acc parallel loop async copyout(s[0:n]) seq
+ for (i = 0; i < n; i++)
+ s[i] = fact (i);
+
+#pragma acc parallel loop async copyout(g[0:n]) gang
+ for (i = 0; i < n; i++)
+ g[i] = fact (i);
+
+#pragma acc parallel loop async copyout(w[0:n]) worker
+ for (i = 0; i < n; i++)
+ w[i] = fact (i);
+
+#pragma acc parallel loop async copyout(v[0:n]) vector
+ for (i = 0; i < n; i++)
+ v[i] = fact (i);
+
+#pragma acc parallel loop async copyout(gw[0:n]) gang worker
+ for (i = 0; i < n; i++)
+ gw[i] = fact (i);
+
+#pragma acc parallel loop async copyout(gv[0:n]) gang vector
+ for (i = 0; i < n; i++)
+ gv[i] = fact (i);
+
+#pragma acc parallel loop async copyout(wv[0:n]) worker vector
+ for (i = 0; i < n; i++)
+ wv[i] = fact (i);
+
+#pragma acc parallel loop async copyout(gwv[0:n]) gang worker vector
+ for (i = 0; i < n; i++)
+ gwv[i] = fact (i);
+
+#pragma acc wait
+
+ for (i = 0; i < n; i++)
+ if (s[i] != fact (i))
+ abort ();
+ for (i = 0; i < n; i++)
+ if (g[i] != s[i])
+ abort ();
+ for (i = 0; i < n; i++)
+ if (w[i] != s[i])
+ abort ();
+ for (i = 0; i < n; i++)
+ if (v[i] != s[i])
+ abort ();
+ for (i = 0; i < n; i++)
+ if (gw[i] != s[i])
+ abort ();
+ for (i = 0; i < n; i++)
+ if (gv[i] != s[i])
+ abort ();
+ for (i = 0; i < n; i++)
+ if (wv[i] != s[i])
+ abort ();
+ for (i = 0; i < n; i++)
+ if (gwv[i] != s[i])
+ abort ();
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-4.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-4.c
new file mode 100644
index 0000000..d6ff44d
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-4.c
@@ -0,0 +1,123 @@
+#include <stdlib.h>
+#include <stdio.h>
+
+#define M 8
+#define N 32
+
+#pragma acc routine vector
+void
+vector (int *a)
+{
+ int i;
+
+#pragma acc loop vector
+ for (i = 0; i < N; i++)
+ a[i] -= a[i];
+}
+
+#pragma acc routine worker
+void
+worker (int *b)
+{
+ int i, j;
+
+#pragma acc loop worker
+ for (i = 0; i < N; i++)
+ {
+#pragma acc loop vector
+ for (j = 0; j < M; j++)
+ b[i * M + j] += b[i * M + j];
+ }
+}
+
+#pragma acc routine gang
+void
+gang (int *a)
+{
+ int i;
+
+#pragma acc loop gang worker vector
+ for (i = 0; i < N; i++)
+ a[i] -= i;
+}
+
+#pragma acc routine seq
+void
+seq (int *a)
+{
+ int i;
+
+ for (i = 0; i < N; i++)
+ a[i] += 1;
+}
+
+int
+main(int argc, char **argv)
+{
+ int i;
+ int a[N];
+ int b[M * N];
+
+ i = 0;
+
+ for (i = 0; i < N; i++)
+ a[i] = 0;
+
+#pragma acc parallel copy (a[0:N])
+ {
+#pragma acc loop seq
+ for (i = 0; i < N; i++)
+ seq (&a[0]);
+ }
+
+ for (i = 0; i < N; i++)
+ {
+ if (a[i] != N)
+ abort ();
+ }
+
+#pragma acc parallel copy (a[0:N])
+ {
+#pragma acc loop seq
+ for (i = 0; i < N; i++)
+ gang (&a[0]);
+ }
+
+ for (i = 0; i < N; i++)
+ {
+ if (a[i] != N + (N * (-1 * i)))
+ abort ();
+ }
+
+ for (i = 0; i < N; i++)
+ a[i] = i;
+
+#pragma acc parallel copy (b[0:M*N])
+ {
+ worker (&b[0]);
+ }
+
+ for (i = 0; i < N; i++)
+ {
+ if (a[i] != i)
+ abort ();
+ }
+
+ for (i = 0; i < N; i++)
+ a[i] = i;
+
+#pragma acc parallel copy (a[0:N])
+ {
+#pragma acc loop
+ for (i = 0; i < N; i++)
+ vector (&a[0]);
+ }
+
+ for (i = 0; i < N; i++)
+ {
+ if (a[i] != 0)
+ abort ();
+ }
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-g-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-g-1.c
index 201dc72..9d14c3b 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-g-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-g-1.c
@@ -1,5 +1,6 @@
-/* { dg-do run } */
-/* { dg-additional-options "-O2" } */
+/* This code uses nvptx inline assembly guarded with acc_on_device, which is
+ not optimized away at -O0, and then confuses the target assembler.
+ { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
#include <stdio.h>
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-gwv-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-gwv-1.c
index 8fc4cb5..ace2f49 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-gwv-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-gwv-1.c
@@ -1,5 +1,6 @@
-/* { dg-do run } */
-/* { dg-additional-options "-O2" } */
+/* This code uses nvptx inline assembly guarded with acc_on_device, which is
+ not optimized away at -O0, and then confuses the target assembler.
+ { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
#include <stdio.h>
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-v-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-v-1.c
index fefeb93..2503e8d 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-v-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-v-1.c
@@ -1,5 +1,6 @@
-/* { dg-do run } */
-/* { dg-additional-options "-O2" } */
+/* This code uses nvptx inline assembly guarded with acc_on_device, which is
+ not optimized away at -O0, and then confuses the target assembler.
+ { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
#include <stdio.h>
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-w-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-w-1.c
index 01d1dc8..80cd462 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-w-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-w-1.c
@@ -1,5 +1,6 @@
-/* { dg-do run } */
-/* { dg-additional-options "-O2" } */
+/* This code uses nvptx inline assembly guarded with acc_on_device, which is
+ not optimized away at -O0, and then confuses the target assembler.
+ { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
#include <stdio.h>
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-wv-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-wv-1.c
index bd9f1df..5e45fad 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-wv-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-wv-1.c
@@ -1,5 +1,6 @@
-/* { dg-do run } */
-/* { dg-additional-options "-O2" } */
+/* This code uses nvptx inline assembly guarded with acc_on_device, which is
+ not optimized away at -O0, and then confuses the target assembler.
+ { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
#include <stdio.h>
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-wv-2.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-wv-2.c
new file mode 100644
index 0000000..b5cbc90
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/routine-wv-2.c
@@ -0,0 +1,76 @@
+/* This code uses nvptx inline assembly guarded with acc_on_device, which is
+ not optimized away at -O0, and then confuses the target assembler.
+ { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
+
+#include <stdio.h>
+#include <openacc.h>
+
+#define NUM_WORKERS 16
+#define NUM_VECTORS 32
+#define WIDTH 64
+#define HEIGHT 32
+
+#define WORK_ID(I,N) \
+ (acc_on_device (acc_device_nvidia) \
+ ? ({unsigned __r; \
+ __asm__ volatile ("mov.u32 %0,%%tid.y;" : "=r" (__r)); \
+ __r; }) : (I % N))
+#define VEC_ID(I,N) \
+ (acc_on_device (acc_device_nvidia) \
+ ? ({unsigned __r; \
+ __asm__ volatile ("mov.u32 %0,%%tid.x;" : "=r" (__r)); \
+ __r; }) : (I % N))
+
+#pragma acc routine worker
+void __attribute__ ((noinline))
+ WorkVec (int *ptr, int w, int h, int nw, int nv)
+{
+#pragma acc loop worker
+ for (int i = 0; i < h; i++)
+#pragma acc loop vector
+ for (int j = 0; j < w; j++)
+ ptr[i*w + j] = (WORK_ID (i, nw) << 8) | VEC_ID(j, nv);
+}
+
+int DoWorkVec (int nw)
+{
+ int ary[HEIGHT][WIDTH];
+ int err = 0;
+
+ for (int ix = 0; ix != HEIGHT; ix++)
+ for (int jx = 0; jx != WIDTH; jx++)
+ ary[ix][jx] = 0xdeadbeef;
+
+ printf ("spawning %d ...", nw); fflush (stdout);
+
+#pragma acc parallel num_workers(nw) vector_length (NUM_VECTORS) copy (ary)
+ {
+ WorkVec ((int *)ary, WIDTH, HEIGHT, nw, NUM_VECTORS);
+ }
+
+ for (int ix = 0; ix != HEIGHT; ix++)
+ for (int jx = 0; jx != WIDTH; jx++)
+ {
+ int exp = ((ix % nw) << 8) | (jx % NUM_VECTORS);
+
+ if (ary[ix][jx] != exp)
+ {
+ printf ("\nary[%d][%d] = %#x expected %#x", ix, jx,
+ ary[ix][jx], exp);
+ err = 1;
+ }
+ }
+ printf (err ? " failed\n" : " ok\n");
+
+ return err;
+}
+
+int main ()
+{
+ int err = 0;
+
+ for (int W = 1; W <= NUM_WORKERS; W <<= 1)
+ err |= DoWorkVec (W);
+
+ return err;
+}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/update-1-2.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/update-1-2.c
deleted file mode 100644
index c7e7257..0000000
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/update-1-2.c
+++ /dev/null
@@ -1,282 +0,0 @@
-/* Copy of update-1.c with self exchanged with host for #pragma acc update. */
-
-/* { dg-do run } */
-/* { dg-skip-if "" { *-*-* } { "*" } { "-DACC_MEM_SHARED=0" } } */
-
-#include <openacc.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdbool.h>
-
-int
-main (int argc, char **argv)
-{
- int N = 8;
- float *a, *b, *c;
- float *d_a, *d_b, *d_c;
- int i;
-
- a = (float *) malloc (N * sizeof (float));
- b = (float *) malloc (N * sizeof (float));
- c = (float *) malloc (N * sizeof (float));
-
- d_a = (float *) acc_malloc (N * sizeof (float));
- d_b = (float *) acc_malloc (N * sizeof (float));
- d_c = (float *) acc_malloc (N * sizeof (float));
-
- for (i = 0; i < N; i++)
- {
- a[i] = 3.0;
- b[i] = 0.0;
- }
-
- acc_map_data (a, d_a, N * sizeof (float));
- acc_map_data (b, d_b, N * sizeof (float));
- acc_map_data (c, d_c, N * sizeof (float));
-
-#pragma acc update device (a[0:N], b[0:N])
-
-#pragma acc parallel present (a[0:N], b[0:N])
- {
- int ii;
-
- for (ii = 0; ii < N; ii++)
- b[ii] = a[ii];
- }
-
-#pragma acc update self (a[0:N], b[0:N])
-
- for (i = 0; i < N; i++)
- {
- if (a[i] != 3.0)
- abort ();
-
- if (b[i] != 3.0)
- abort ();
- }
-
- if (!acc_is_present (&a[0], (N * sizeof (float))))
- abort ();
-
- if (!acc_is_present (&b[0], (N * sizeof (float))))
- abort ();
-
- for (i = 0; i < N; i++)
- {
- a[i] = 5.0;
- b[i] = 1.0;
- }
-
-#pragma acc update device (a[0:N], b[0:N])
-
-#pragma acc parallel present (a[0:N], b[0:N])
- {
- int ii;
-
- for (ii = 0; ii < N; ii++)
- b[ii] = a[ii];
- }
-
-#pragma acc update self (a[0:N], b[0:N])
-
- for (i = 0; i < N; i++)
- {
- if (a[i] != 5.0)
- abort ();
-
- if (b[i] != 5.0)
- abort ();
- }
-
- if (!acc_is_present (&a[0], (N * sizeof (float))))
- abort ();
-
- if (!acc_is_present (&b[0], (N * sizeof (float))))
- abort ();
-
- for (i = 0; i < N; i++)
- {
- a[i] = 5.0;
- b[i] = 1.0;
- }
-
-#pragma acc update device (a[0:N], b[0:N])
-
-#pragma acc parallel present (a[0:N], b[0:N])
- {
- int ii;
-
- for (ii = 0; ii < N; ii++)
- b[ii] = a[ii];
- }
-
-#pragma acc update host (a[0:N], b[0:N])
-
- for (i = 0; i < N; i++)
- {
- if (a[i] != 5.0)
- abort ();
-
- if (b[i] != 5.0)
- abort ();
- }
-
- if (!acc_is_present (&a[0], (N * sizeof (float))))
- abort ();
-
- if (!acc_is_present (&b[0], (N * sizeof (float))))
- abort ();
-
- for (i = 0; i < N; i++)
- {
- a[i] = 6.0;
- b[i] = 0.0;
- }
-
-#pragma acc update device (a[0:N], b[0:N])
-
- for (i = 0; i < N; i++)
- {
- a[i] = 9.0;
- }
-
-#pragma acc parallel present (a[0:N], b[0:N])
- {
- int ii;
-
- for (ii = 0; ii < N; ii++)
- b[ii] = a[ii];
- }
-
-#pragma acc update self (a[0:N], b[0:N])
-
- for (i = 0; i < N; i++)
- {
- if (a[i] != 6.0)
- abort ();
-
- if (b[i] != 6.0)
- abort ();
- }
-
- if (!acc_is_present (&a[0], (N * sizeof (float))))
- abort ();
-
- if (!acc_is_present (&b[0], (N * sizeof (float))))
- abort ();
-
- for (i = 0; i < N; i++)
- {
- a[i] = 7.0;
- b[i] = 2.0;
- }
-
-#pragma acc update device (a[0:N], b[0:N])
-
- for (i = 0; i < N; i++)
- {
- a[i] = 9.0;
- }
-
-#pragma acc parallel present (a[0:N], b[0:N])
- {
- int ii;
-
- for (ii = 0; ii < N; ii++)
- b[ii] = a[ii];
- }
-
-#pragma acc update self (a[0:N], b[0:N])
-
- for (i = 0; i < N; i++)
- {
- if (a[i] != 7.0)
- abort ();
-
- if (b[i] != 7.0)
- abort ();
- }
-
- for (i = 0; i < N; i++)
- {
- a[i] = 9.0;
- }
-
-#pragma acc update device (a[0:N])
-
-#pragma acc parallel present (a[0:N], b[0:N])
- {
- int ii;
-
- for (ii = 0; ii < N; ii++)
- b[ii] = a[ii];
- }
-
-#pragma acc update self (a[0:N], b[0:N])
-
- for (i = 0; i < N; i++)
- {
- if (a[i] != 9.0)
- abort ();
-
- if (b[i] != 9.0)
- abort ();
- }
-
- if (!acc_is_present (&a[0], (N * sizeof (float))))
- abort ();
-
- if (!acc_is_present (&b[0], (N * sizeof (float))))
- abort ();
-
- for (i = 0; i < N; i++)
- {
- a[i] = 5.0;
- }
-
-#pragma acc update device (a[0:N])
-
- for (i = 0; i < N; i++)
- {
- a[i] = 6.0;
- }
-
-#pragma acc update device (a[0:N >> 1])
-
-#pragma acc parallel present (a[0:N], b[0:N])
- {
- int ii;
-
- for (ii = 0; ii < N; ii++)
- b[ii] = a[ii];
- }
-
-#pragma acc update self (a[0:N], b[0:N])
-
- for (i = 0; i < (N >> 1); i++)
- {
- if (a[i] != 6.0)
- abort ();
-
- if (b[i] != 6.0)
- abort ();
- }
-
- for (i = (N >> 1); i < N; i++)
- {
- if (a[i] != 5.0)
- abort ();
-
- if (b[i] != 5.0)
- abort ();
- }
-
- if (!acc_is_present (&a[0], (N * sizeof (float))))
- abort ();
-
- if (!acc_is_present (&b[0], (N * sizeof (float))))
- abort ();
-
- return 0;
-}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/update-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/update-1.c
index dff139f..1b2a460 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/update-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/update-1.c
@@ -11,6 +11,7 @@ int
main (int argc, char **argv)
{
int N = 8;
+ int NDIV2 = N / 2;
float *a, *b, *c;
float *d_a, *d_b, *d_c;
int i;
@@ -109,7 +110,7 @@ main (int argc, char **argv)
b[ii] = a[ii];
}
-#pragma acc update self (a[0:N], b[0:N])
+#pragma acc update host (a[0:N], b[0:N])
for (i = 0; i < N; i++)
{
@@ -240,7 +241,7 @@ main (int argc, char **argv)
a[i] = 6.0;
}
-#pragma acc update device (a[0:N >> 1])
+#pragma acc update device (a[0:NDIV2])
#pragma acc parallel present (a[0:N], b[0:N])
{
@@ -252,7 +253,7 @@ main (int argc, char **argv)
#pragma acc update host (a[0:N], b[0:N])
- for (i = 0; i < (N >> 1); i++)
+ for (i = 0; i < NDIV2; i++)
{
if (a[i] != 6.0)
abort ();
@@ -261,7 +262,7 @@ main (int argc, char **argv)
abort ();
}
- for (i = (N >> 1); i < N; i++)
+ for (i = NDIV2; i < N; i++)
{
if (a[i] != 5.0)
abort ();
@@ -276,5 +277,83 @@ main (int argc, char **argv)
if (!acc_is_present (&b[0], (N * sizeof (float))))
abort ();
+ for (i = 0; i < N; i++)
+ {
+ a[i] = 0.0;
+ }
+
+#pragma acc update device (a[0:4])
+
+#pragma acc parallel present (a[0:N])
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ a[ii] = a[ii] + 1.0;
+ }
+
+#pragma acc update host (a[4:4])
+
+ for (i = 0; i < NDIV2; i++)
+ {
+ if (a[i] != 0.0)
+ abort ();
+ }
+
+ for (i = NDIV2; i < N; i++)
+ {
+ if (a[i] != 6.0)
+ abort ();
+ }
+
+#pragma acc update host (a[0:4])
+
+ for (i = 0; i < NDIV2; i++)
+ {
+ if (a[i] != 1.0)
+ abort ();
+ }
+
+ for (i = NDIV2; i < N; i++)
+ {
+ if (a[i] != 6.0)
+ abort ();
+ }
+
+ a[2] = 9;
+ a[3] = 9;
+ a[4] = 9;
+ a[5] = 9;
+
+#pragma acc update device (a[2:4])
+
+#pragma acc parallel present (a[0:N])
+ {
+ int ii;
+
+ for (ii = 0; ii < N; ii++)
+ a[ii] = a[ii] + 1.0;
+ }
+
+#pragma acc update host (a[2:4])
+
+ for (i = 0; i < 2; i++)
+ {
+ if (a[i] != 1.0)
+ abort ();
+ }
+
+ for (i = 2; i < 6; i++)
+ {
+ if (a[i] != 10.0)
+ abort ();
+ }
+
+ for (i = 6; i < N; i++)
+ {
+ if (a[i] != 6.0)
+ abort ();
+ }
+
return 0;
}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/vector-loop.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/vector-loop.c
index 8a51ee3..807347f 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/vector-loop.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/vector-loop.c
@@ -20,7 +20,7 @@ main (void)
#pragma acc parallel vector_length (32) copyin (a,b) copyout (c)
{
-#pragma acc loop /* vector clause is missing, since it's not yet supported. */
+#pragma acc loop vector
for (unsigned int i = 0; i < n; i++)
c[i] = a[i] + b[i];
}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/vprop.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/vprop.c
new file mode 100644
index 0000000..17b9568
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/vprop.c
@@ -0,0 +1,34 @@
+#include <assert.h>
+
+#define test(type) \
+void \
+test_##type () \
+{ \
+ signed type b[100]; \
+ signed type i, j, x = -1, y = -1; \
+ \
+ _Pragma("acc parallel loop copyout (b)") \
+ for (j = 0; j > -5; j--) \
+ { \
+ type c = x+y; \
+ _Pragma("acc loop vector") \
+ for (i = 0; i < 20; i++) \
+ b[-j*20 + i] = c; \
+ b[5-j] = c; \
+ } \
+ \
+ for (i = 0; i < 100; i++) \
+ assert (b[i] == -2); \
+}
+
+test(char)
+test(short)
+
+int
+main ()
+{
+ test_char ();
+ test_short ();
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/worker-single-1a.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/worker-single-1a.c
deleted file mode 100644
index 99c6dfb..0000000
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/worker-single-1a.c
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <assert.h>
-
-/* Test worker-single/vector-single mode. */
-
-int
-main (int argc, char *argv[])
-{
- int arr[32], i;
-
- for (i = 0; i < 32; i++)
- arr[i] = 0;
-
- #pragma acc parallel copy(arr) num_gangs(8) num_workers(8) vector_length(32)
- {
- int j;
- #pragma acc loop gang
- for (j = 0; j < 32; j++)
- {
- #pragma acc atomic
- arr[j]++;
- }
- }
-
- for (i = 0; i < 32; i++)
- assert (arr[i] == 1);
-
- return 0;
-}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/worker-single-4.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/worker-single-4.c
deleted file mode 100644
index 84080d0..0000000
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/worker-single-4.c
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <assert.h>
-
-/* Test worker-single/vector-partitioned mode. */
-
-int
-main (int argc, char *argv[])
-{
- int arr[32], i;
-
- for (i = 0; i < 32; i++)
- arr[i] = i;
-
- #pragma acc parallel copy(arr) num_gangs(1) num_workers(8) vector_length(32)
- {
- int k;
- #pragma acc loop vector
- for (k = 0; k < 32; k++)
- {
- #pragma acc atomic
- arr[k]++;
- }
- }
-
- for (i = 0; i < 32; i++)
- assert (arr[i] == i + 1);
-
- return 0;
-}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/worker-single-6.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/worker-single-6.c
deleted file mode 100644
index cbc3e37..0000000
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/worker-single-6.c
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <assert.h>
-
-#if defined(ACC_DEVICE_TYPE_host)
-#define ACTUAL_GANGS 1
-#else
-#define ACTUAL_GANGS 8
-#endif
-
-/* Test worker-single, vector-partitioned, gang-redundant mode. */
-
-int
-main (int argc, char *argv[])
-{
- int n, arr[32], i;
-
- for (i = 0; i < 32; i++)
- arr[i] = 0;
-
- n = 0;
-
- #pragma acc parallel copy(n, arr) num_gangs(ACTUAL_GANGS) num_workers(8) \
- vector_length(32)
- {
- int j;
-
- #pragma acc atomic
- n++;
-
- #pragma acc loop vector
- for (j = 0; j < 32; j++)
- {
- #pragma acc atomic
- arr[j] += 1;
- }
-
- #pragma acc atomic
- n++;
- }
-
- assert (n == ACTUAL_GANGS * 2);
-
- for (i = 0; i < 32; i++)
- assert (arr[i] == ACTUAL_GANGS);
-
- return 0;
-}
diff --git a/libgomp/testsuite/libgomp.oacc-c/c.exp b/libgomp/testsuite/libgomp.oacc-c/c.exp
index 5020e6a..b509a10 100644
--- a/libgomp/testsuite/libgomp.oacc-c/c.exp
+++ b/libgomp/testsuite/libgomp.oacc-c/c.exp
@@ -13,14 +13,11 @@ if [info exists lang_include_flags] then {
load_lib libgomp-dg.exp
load_gcc_lib gcc-dg.exp
-
-# If a testcase doesn't have special options, use these.
-if ![info exists DEFAULT_CFLAGS] then {
- set DEFAULT_CFLAGS "-O2"
-}
+load_gcc_lib torture-options.exp
# Initialize dg.
dg-init
+torture-init
# Turn on OpenACC.
lappend ALWAYS_CFLAGS "additional_flags=-fopenacc"
@@ -67,8 +64,28 @@ foreach offload_target_openacc $offload_targets_s_openacc {
setenv ACC_DEVICE_TYPE $offload_target_openacc
- dg-runtest $tests "$tagopt" $DEFAULT_CFLAGS
+ # To get better test coverage for device-specific code that is only
+ # ever used in offloading configurations, we'd like more thorough
+ # testing for test cases that deal with offloading, which most of all
+ # OpenACC test cases are. We enable torture testing, but limit it to
+ # -O0 and -O2 only, to avoid testing times exploding too much, under
+ # the assumption that between -O0 and -O[something] there is the
+ # biggest difference in the overall structure of the generated code.
+ switch $offload_target_openacc {
+ host {
+ set-torture-options [list \
+ { -O2 } ]
+ }
+ default {
+ set-torture-options [list \
+ { -O0 } \
+ { -O2 } ]
+ }
+ }
+
+ gcc-dg-runtest $tests "$tagopt" ""
}
# All done.
+torture-finish
dg-finish
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/asyncwait-1.f90 b/libgomp/testsuite/libgomp.oacc-fortran/asyncwait-1.f90
index b6e637b..01728bd 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/asyncwait-1.f90
+++ b/libgomp/testsuite/libgomp.oacc-fortran/asyncwait-1.f90
@@ -132,4 +132,126 @@ program asyncwait
if (d(i) .ne. 1.0) call abort
if (e(i) .ne. 11.0) call abort
end do
+
+ a(:) = 3.0
+ b(:) = 0.0
+
+ !$acc data copy (a(1:N)) copy (b(1:N))
+
+ !$acc kernels async
+ !$acc loop
+ do i = 1, N
+ b(i) = a(i)
+ end do
+ !$acc end kernels
+
+ !$acc wait
+ !$acc end data
+
+ do i = 1, N
+ if (a(i) .ne. 3.0) call abort
+ if (b(i) .ne. 3.0) call abort
+ end do
+
+ a(:) = 2.0
+ b(:) = 0.0
+
+ !$acc data copy (a(1:N)) copy (b(1:N))
+
+ !$acc kernels async (1)
+ !$acc loop
+ do i = 1, N
+ b(i) = a(i)
+ end do
+ !$acc end kernels
+
+ !$acc wait (1)
+ !$acc end data
+
+ do i = 1, N
+ if (a(i) .ne. 2.0) call abort
+ if (b(i) .ne. 2.0) call abort
+ end do
+
+ a(:) = 3.0
+ b(:) = 0.0
+ c(:) = 0.0
+ d(:) = 0.0
+
+ !$acc data copy (a(1:N)) copy (b(1:N)) copy (c(1:N)) copy (d(1:N))
+
+ !$acc kernels async (1)
+ do i = 1, N
+ b(i) = (a(i) * a(i) * a(i)) / a(i)
+ end do
+ !$acc end kernels
+
+ !$acc kernels async (1)
+ do i = 1, N
+ c(i) = (a(i) * 4) / a(i)
+ end do
+ !$acc end kernels
+
+ !$acc kernels async (1)
+ !$acc loop
+ do i = 1, N
+ d(i) = ((a(i) * a(i) + a(i)) / a(i)) - a(i)
+ end do
+ !$acc end kernels
+
+ !$acc wait (1)
+ !$acc end data
+
+ do i = 1, N
+ if (a(i) .ne. 3.0) call abort
+ if (b(i) .ne. 9.0) call abort
+ if (c(i) .ne. 4.0) call abort
+ if (d(i) .ne. 1.0) call abort
+ end do
+
+ a(:) = 2.0
+ b(:) = 0.0
+ c(:) = 0.0
+ d(:) = 0.0
+ e(:) = 0.0
+
+ !$acc data copy (a(1:N), b(1:N), c(1:N), d(1:N), e(1:N))
+
+ !$acc kernels async (1)
+ do i = 1, N
+ b(i) = (a(i) * a(i) * a(i)) / a(i)
+ end do
+ !$acc end kernels
+
+ !$acc kernels async (1)
+ !$acc loop
+ do i = 1, N
+ c(i) = (a(i) * 4) / a(i)
+ end do
+ !$acc end kernels
+
+ !$acc kernels async (1)
+ !$acc loop
+ do i = 1, N
+ d(i) = ((a(i) * a(i) + a(i)) / a(i)) - a(i)
+ end do
+ !$acc end kernels
+
+ !$acc kernels wait (1) async (1)
+ !$acc loop
+ do i = 1, N
+ e(i) = a(i) + b(i) + c(i) + d(i)
+ end do
+ !$acc end kernels
+
+ !$acc wait (1)
+ !$acc end data
+
+ do i = 1, N
+ if (a(i) .ne. 2.0) call abort
+ if (b(i) .ne. 4.0) call abort
+ if (c(i) .ne. 4.0) call abort
+ if (d(i) .ne. 1.0) call abort
+ if (e(i) .ne. 11.0) call abort
+ end do
end program asyncwait
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/asyncwait-2.f90 b/libgomp/testsuite/libgomp.oacc-fortran/asyncwait-2.f90
index bade52b..fe131b6 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/asyncwait-2.f90
+++ b/libgomp/testsuite/libgomp.oacc-fortran/asyncwait-2.f90
@@ -1,6 +1,6 @@
! { dg-do run }
-program parallel_wait
+program asyncwait
integer, parameter :: N = 64
real, allocatable :: a(:), b(:), c(:)
integer i
@@ -33,8 +33,33 @@ program parallel_wait
do i = 1, N
if (c(i) .ne. 2.0) call abort
end do
+
+ !$acc kernels async (0)
+ !$acc loop
+ do i = 1, N
+ a(i) = 1
+ end do
+ !$acc end kernels
+
+ !$acc kernels async (1)
+ !$acc loop
+ do i = 1, N
+ b(i) = 1
+ end do
+ !$acc end kernels
+
+ !$acc kernels wait (0, 1)
+ !$acc loop
+ do i = 1, N
+ c(i) = a(i) + b(i)
+ end do
+ !$acc end kernels
+
+ do i = 1, N
+ if (c(i) .ne. 2.0) call abort
+ end do
deallocate (a)
deallocate (b)
deallocate (c)
-end program parallel_wait
+end program asyncwait
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/asyncwait-3.f90 b/libgomp/testsuite/libgomp.oacc-fortran/asyncwait-3.f90
index d48dc11..fa96a01 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/asyncwait-3.f90
+++ b/libgomp/testsuite/libgomp.oacc-fortran/asyncwait-3.f90
@@ -1,6 +1,6 @@
! { dg-do run }
-program parallel_wait
+program asyncwait
integer, parameter :: N = 64
real, allocatable :: a(:), b(:), c(:)
integer i
@@ -35,8 +35,35 @@ program parallel_wait
do i = 1, N
if (c(i) .ne. 2.0) call abort
end do
+
+ !$acc kernels async (0)
+ !$acc loop
+ do i = 1, N
+ a(i) = 1
+ end do
+ !$acc end kernels
+
+ !$acc kernels async (1)
+ !$acc loop
+ do i = 1, N
+ b(i) = 1
+ end do
+ !$acc end kernels
+
+ !$acc wait (0, 1)
+
+ !$acc kernels
+ !$acc loop
+ do i = 1, N
+ c(i) = a(i) + b(i)
+ end do
+ !$acc end kernels
+
+ do i = 1, N
+ if (c(i) .ne. 2.0) call abort
+ end do
deallocate (a)
deallocate (b)
deallocate (c)
-end program parallel_wait
+end program asyncwait
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/clauses-1.f90 b/libgomp/testsuite/libgomp.oacc-fortran/clauses-1.f90
new file mode 100644
index 0000000..e6ab78d
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/clauses-1.f90
@@ -0,0 +1,290 @@
+! { dg-do run }
+! { dg-skip-if "" { *-*-* } { "*" } { "-DACC_MEM_SHARED=0" } }
+
+program main
+ use openacc
+ implicit none
+
+ integer, parameter :: N = 32
+ real, allocatable :: a(:), b(:), c(:)
+ integer i
+
+ i = 0
+
+ allocate (a(N))
+ allocate (b(N))
+ allocate (c(N))
+
+ a(:) = 3.0
+ b(:) = 0.0
+
+ !$acc parallel copyin (a(1:N)) copyout (b(1:N))
+ do i = 1, N
+ b(i) = a(i)
+ end do
+ !$acc end parallel
+
+ do i = 1, N
+ if (b(i) .ne. 3.0) call abort
+ end do
+
+ if (acc_is_present (a) .eqv. .TRUE.) call abort
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+
+ a(:) = 5.0
+ b(:) = 1.0
+
+ !$acc parallel copyin (a(1:N)) copyout (b(1:N))
+ do i = 1, N
+ b(i) = a(i)
+ end do
+ !$acc end parallel
+
+ do i = 1, N
+ if (b(i) .ne. 5.0) call abort
+ end do
+
+ if (acc_is_present (a) .eqv. .TRUE.) call abort
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+
+ a(:) = 6.0
+ b(:) = 0.0
+
+ call acc_copyin (a, sizeof (a))
+
+ a(:) = 9.0
+
+ !$acc parallel present_or_copyin (a(1:N)) copyout (b(1:N))
+ do i = 1, N
+ b(i) = a(i)
+ end do
+ !$acc end parallel
+
+ do i = 1, N
+ if (b(i) .ne. 6.0) call abort
+ end do
+
+ call acc_copyout (a, sizeof (a))
+
+ if (acc_is_present (a) .eqv. .TRUE.) call abort
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+
+ a(:) = 6.0
+ b(:) = 0.0
+
+ !$acc parallel copyin (a(1:N)) present_or_copyout (b(1:N))
+ do i = 1, N
+ b(i) = a(i)
+ end do
+ !$acc end parallel
+
+ do i = 1, N
+ if (b(i) .ne. 6.0) call abort
+ end do
+
+ if (acc_is_present (a) .eqv. .TRUE.) call abort
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+
+ a(:) = 5.0
+ b(:) = 2.0
+
+ call acc_copyin (b, sizeof (b))
+
+ !$acc parallel copyin (a(1:N)) present_or_copyout (b(1:N))
+ do i = 1, N
+ b(i) = a(i)
+ end do
+ !$acc end parallel
+
+ do i = 1, N
+ if (a(i) .ne. 5.0) call abort
+ if (b(i) .ne. 2.0) call abort
+ end do
+
+ call acc_copyout (b, sizeof (b))
+
+ if (acc_is_present (a) .eqv. .TRUE.) call abort
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+
+ a(:) = 3.0;
+ b(:) = 4.0;
+
+ !$acc parallel copy (a(1:N)) copyout (b(1:N))
+ do i = 1, N
+ a(i) = a(i) + 1
+ b(i) = a(i) + 2
+ end do
+ !$acc end parallel
+
+ do i = 1, N
+ if (a(i) .ne. 4.0) call abort
+ if (b(i) .ne. 6.0) call abort
+ end do
+
+ if (acc_is_present (a) .eqv. .TRUE.) call abort
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+
+ a(:) = 4.0
+ b(:) = 7.0
+
+ !$acc parallel present_or_copy (a(1:N)) present_or_copy (b(1:N))
+ do i = 1, N
+ a(i) = a(i) + 1
+ b(i) = b(i) + 2
+ end do
+ !$acc end parallel
+
+ do i = 1, N
+ if (a(i) .ne. 5.0) call abort
+ if (b(i) .ne. 9.0) call abort
+ end do
+
+ if (acc_is_present (a) .eqv. .TRUE.) call abort
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+
+ a(:) = 3.0
+ b(:) = 7.0
+
+ call acc_copyin (a, sizeof (a))
+ call acc_copyin (b, sizeof (b))
+
+ !$acc parallel present_or_copy (a(1:N)) present_or_copy (b(1:N))
+ do i = 1, N
+ a(i) = a(i) + 1
+ b(i) = b(i) + 2
+ end do
+ !$acc end parallel
+
+ do i = 1, N
+ if (a(i) .ne. 3.0) call abort
+ if (b(i) .ne. 7.0) call abort
+ end do
+
+ call acc_copyout (a, sizeof (a))
+ call acc_copyout (b, sizeof (b))
+
+ if (acc_is_present (a) .eqv. .TRUE.) call abort
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+
+ a(:) = 3.0
+ b(:) = 7.0
+
+ !$acc parallel copyin (a(1:N)) create (c(1:N)) copyout (b(1:N))
+ do i = 1, N
+ c(i) = a(i)
+ b(i) = c(i)
+ end do
+ !$acc end parallel
+
+ do i = 1, N
+ if (a(i) .ne. 3.0) call abort
+ if (b(i) .ne. 3.0) call abort
+ end do
+
+ if (acc_is_present (a) .eqv. .TRUE.) call abort
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+ if (acc_is_present (c) .eqv. .TRUE.) call abort
+
+ a(:) = 4.0
+ b(:) = 8.0
+
+ !$acc parallel copyin (a(1:N)) present_or_create (c(1:N)) copyout (b(1:N))
+ do i = 1, N
+ c(i) = a(i)
+ b(i) = c(i)
+ end do
+ !$acc end parallel
+
+ do i = 1, N
+ if (a(i) .ne. 4.0) call abort
+ if (b(i) .ne. 4.0) call abort
+ end do
+
+ if (acc_is_present (a) .eqv. .TRUE.) call abort
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+ if (acc_is_present (c) .eqv. .TRUE.) call abort
+
+ a(:) = 4.0
+
+ call acc_copyin (a, sizeof (a))
+ call acc_copyin (b, sizeof (b))
+ call acc_copyin (c, sizeof (c))
+
+ !$acc parallel present (a(1:N)) present (c(1:N)) present (b(1:N))
+ do i = 1, N
+ c(i) = a(i)
+ b(i) = c(i)
+ end do
+ !$acc end parallel
+
+ call acc_copyout (a, sizeof (a))
+ call acc_copyout (b, sizeof (b))
+ call acc_copyout (c, sizeof (c))
+
+ do i = 1, N
+ if (a(i) .ne. 4.0) call abort
+ if (b(i) .ne. 4.0) call abort
+ end do
+
+ if (acc_is_present (a) .eqv. .TRUE.) call abort
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+ if (acc_is_present (c) .eqv. .TRUE.) call abort
+
+ a(:) = 6.0
+ b(:) = 0.0
+
+ call acc_copyin (a, sizeof (a))
+
+ a(:) = 9.0
+
+ !$acc parallel pcopyin (a(1:N)) copyout (b(1:N))
+ do i = 1, N
+ b(i) = a(i)
+ end do
+ !$acc end parallel
+
+ do i = 1, N
+ if (b(i) .ne. 6.0) call abort
+ end do
+
+ call acc_copyout (a, sizeof (a))
+
+ if (acc_is_present (a) .eqv. .TRUE.) call abort
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+
+ a(:) = 6.0
+ b(:) = 0.0
+
+ !$acc parallel copyin (a(1:N)) pcopyout (b(1:N))
+ do i = 1, N
+ b(i) = a(i)
+ end do
+ !$acc end parallel
+
+ do i = 1, N
+ if (b(i) .ne. 6.0) call abort
+ end do
+
+ if (acc_is_present (a) .eqv. .TRUE.) call abort
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+
+ a(:) = 5.0
+ b(:) = 7.0
+
+ !$acc parallel copyin (a(1:N)) pcreate (c(1:N)) copyout (b(1:N))
+ do i = 1, N
+ c(i) = a(i)
+ b(i) = c(i)
+ end do
+ !$acc end parallel
+
+ do i = 1, N
+ if (a(i) .ne. 5.0) call abort
+ if (b(i) .ne. 5.0) call abort
+ end do
+
+ if (acc_is_present (a) .eqv. .TRUE.) call abort
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+ if (acc_is_present (c) .eqv. .TRUE.) call abort
+
+end program main
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/declare-1.f90 b/libgomp/testsuite/libgomp.oacc-fortran/declare-1.f90
index f717d1b..2d4b707 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/declare-1.f90
+++ b/libgomp/testsuite/libgomp.oacc-fortran/declare-1.f90
@@ -1,29 +1,22 @@
! { dg-do run { target openacc_nvidia_accel_selected } }
+! Tests to exercise the declare directive along with
+! the clauses: copy
+! copyin
+! copyout
+! create
+! present
+! present_or_copy
+! present_or_copyin
+! present_or_copyout
+! present_or_create
+
module vars
implicit none
integer z
!$acc declare create (z)
end module vars
-subroutine subr6 (a, d)
- implicit none
- integer, parameter :: N = 8
- integer :: i
- integer :: a(N)
- !$acc declare deviceptr (a)
- integer :: d(N)
-
- i = 0
-
- !$acc parallel copy (d)
- do i = 1, N
- d(i) = a(i) + a(i)
- end do
- !$acc end parallel
-
-end subroutine
-
subroutine subr5 (a, b, c, d)
implicit none
integer, parameter :: N = 8
@@ -201,15 +194,6 @@ subroutine subr0 (a, b, c, d)
if (d(i) .ne. 13) call abort
end do
- call subr6 (a, d)
-
- call test (a, .true.)
- call test (d, .false.)
-
- do i = 1, N
- if (d(i) .ne. 16) call abort
- end do
-
end subroutine
program main
@@ -241,8 +225,7 @@ program main
if (a(i) .ne. 8) call abort
if (b(i) .ne. 8) call abort
if (c(i) .ne. 8) call abort
- if (d(i) .ne. 16) call abort
+ if (d(i) .ne. 13) call abort
end do
-
end program
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/default-1.f90 b/libgomp/testsuite/libgomp.oacc-fortran/default-1.f90
new file mode 100644
index 0000000..1059089
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/default-1.f90
@@ -0,0 +1,54 @@
+! { dg-do run }
+
+program main
+ implicit none
+ real a, b
+ real c
+ !$acc declare create (c)
+
+ a = 2.0
+ b = 0.0
+
+ !$acc parallel copy (a) create (b) default (none)
+ b = a
+ a = 1.0
+ a = a + b
+ !$acc end parallel
+
+ if (a .ne. 3.0) call abort
+
+ !$acc kernels copy (a) create (b) default (none)
+ b = a
+ a = 1.0
+ a = a + b
+ !$acc end kernels
+
+ if (a .ne. 4.0) call abort
+
+ !$acc parallel default (none) copy (a) create (b)
+ b = a
+ a = 1.0
+ a = a + b
+ !$acc end parallel
+
+ if (a .ne. 5.0) call abort
+
+ !$acc parallel default (none) copy (a)
+ c = a
+ a = 1.0
+ a = a + c
+ !$acc end parallel
+
+ if (a .ne. 6.0) call abort
+
+ !$acc data copy (a)
+ !$acc parallel default (none)
+ c = a
+ a = 1.0
+ a = a + c
+ !$acc end parallel
+ !$acc end data
+
+ if (a .ne. 7.0) call abort
+
+end program main
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/firstprivate-1.f90 b/libgomp/testsuite/libgomp.oacc-fortran/firstprivate-1.f90
new file mode 100644
index 0000000..d3f9093
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/firstprivate-1.f90
@@ -0,0 +1,42 @@
+! { dg-do run }
+
+program firstprivate
+ integer, parameter :: Nupper=100
+ integer :: a, b(Nupper), c, d, n
+ include "openacc_lib.h"
+
+ if (acc_get_device_type () .eq. acc_device_nvidia) then
+ n = Nupper
+ else
+ n = 1
+ end if
+
+ b(:) = -1
+ a = 5
+
+ !$acc parallel firstprivate (a) num_gangs (n)
+ !$acc loop gang
+ do i = 1, n
+ a = a + i
+ b(i) = a
+ end do
+ !$acc end parallel
+
+ do i = 1, n
+ if (b(i) .ne. i + a) call abort ()
+ end do
+
+ !$acc data copy (a)
+ !$acc parallel firstprivate (a) copyout (c)
+ a = 10
+ c = a
+ !$acc end parallel
+
+ !$acc parallel copyout (d) present (a)
+ d = a
+ !$acc end parallel
+ !$acc end data
+
+ if (c .ne. 10) call abort ()
+ if (d .ne. 5) call abort ()
+end program firstprivate
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/gang-static-1.f90 b/libgomp/testsuite/libgomp.oacc-fortran/gang-static-1.f90
new file mode 100644
index 0000000..7d56060
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/gang-static-1.f90
@@ -0,0 +1,79 @@
+! { dg-do run }
+
+program main
+ integer, parameter :: n = 100
+ integer i, a(n), b(n)
+ integer x
+
+ do i = 1, n
+ b(i) = i
+ end do
+
+ !$acc parallel loop gang (static:*) num_gangs (10)
+ do i = 1, n
+ a(i) = b(i) + 0
+ end do
+ !$acc end parallel loop
+
+ call test (a, b, 0, n)
+
+ !$acc parallel loop gang (static:1) num_gangs (10)
+ do i = 1, n
+ a(i) = b(i) + 1
+ end do
+ !$acc end parallel loop
+
+ call test (a, b, 1, n)
+
+ !$acc parallel loop gang (static:2) num_gangs (10)
+ do i = 1, n
+ a(i) = b(i) + 2
+ end do
+ !$acc end parallel loop
+
+ call test (a, b, 2, n)
+
+ !$acc parallel loop gang (static:5) num_gangs (10)
+ do i = 1, n
+ a(i) = b(i) + 5
+ end do
+ !$acc end parallel loop
+
+ call test (a, b, 5, n)
+
+ !$acc parallel loop gang (static:20) num_gangs (10)
+ do i = 1, n
+ a(i) = b(i) + 20
+ end do
+ !$acc end parallel loop
+
+ call test (a, b, 20, n)
+
+ x = 5
+ !$acc parallel loop gang (static:0+x) num_gangs (10)
+ do i = 1, n
+ a(i) = b(i) + 5
+ end do
+ !$acc end parallel loop
+
+ call test (a, b, 5, n)
+
+ x = 10
+ !$acc parallel loop gang (static:x) num_gangs (10)
+ do i = 1, n
+ a(i) = b(i) + 10
+ end do
+ !$acc end parallel loop
+
+ call test (a, b, 10, n)
+end program main
+
+subroutine test (a, b, sarg, n)
+ integer n
+ integer a (n), b(n), sarg
+ integer i
+
+ do i = 1, n
+ if (a(i) .ne. b(i) + sarg) call abort ()
+ end do
+end subroutine test
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/if-1.f90 b/libgomp/testsuite/libgomp.oacc-fortran/if-1.f90
new file mode 100644
index 0000000..44055e1
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/if-1.f90
@@ -0,0 +1,886 @@
+! { dg-do run }
+! { dg-additional-options "-cpp" }
+
+program main
+ use openacc
+ implicit none
+
+ integer, parameter :: N = 8
+ integer, parameter :: one = 1
+ integer, parameter :: zero = 0
+ integer i, nn
+ real, allocatable :: a(:), b(:)
+ real exp, exp2
+
+ i = 0
+
+ allocate (a(N))
+ allocate (b(N))
+
+ a(:) = 4.0
+
+ !$acc parallel copyin (a(1:N)) copyout (b(1:N)) if (1 == 1)
+ do i = 1, N
+ if (acc_on_device (acc_device_host) .eqv. .TRUE.) then
+ b(i) = a(i) + 1
+ else
+ b(i) = a(i)
+ end if
+ end do
+ !$acc end parallel
+
+#if ACC_MEM_SHARED
+ exp = 5.0
+#else
+ exp = 4.0
+#endif
+
+ do i = 1, N
+ if (b(i) .ne. exp) call abort
+ end do
+
+ a(:) = 16.0
+
+ !$acc parallel if (0 == 1)
+ do i = 1, N
+ if (acc_on_device (acc_device_host) .eqv. .TRUE.) then
+ b(i) = a(i) + 1
+ else
+ b(i) = a(i)
+ end if
+ end do
+ !$acc end parallel
+
+ do i = 1, N
+ if (b(i) .ne. 17.0) call abort
+ end do
+
+ a(:) = 8.0
+
+ !$acc parallel copyin (a(1:N)) copyout (b(1:N)) if (one == 1)
+ do i = 1, N
+ if (acc_on_device (acc_device_host) .eqv. .TRUE.) then
+ b(i) = a(i) + 1
+ else
+ b(i) = a(i)
+ end if
+ end do
+ !$acc end parallel
+
+#if ACC_MEM_SHARED
+ exp = 9.0
+#else
+ exp = 8.0
+#endif
+
+ do i = 1, N
+ if (b(i) .ne. exp) call abort
+ end do
+
+ a(:) = 22.0
+
+ !$acc parallel if (zero == 1)
+ do i = 1, N
+ if (acc_on_device (acc_device_host) .eqv. .TRUE.) then
+ b(i) = a(i) + 1
+ else
+ b(i) = a(i)
+ end if
+ end do
+ !$acc end parallel
+
+ do i = 1, N
+ if (b(i) .ne. 23.0) call abort
+ end do
+
+ a(:) = 16.0
+
+ !$acc parallel copyin (a(1:N)) copyout (b(1:N)) if (.TRUE.)
+ do i = 1, N
+ if (acc_on_device (acc_device_host) .eqv. .TRUE.) then
+ b(i) = a(i) + 1
+ else
+ b(i) = a(i)
+ end if
+ end do
+ !$acc end parallel
+
+#if ACC_MEM_SHARED
+ exp = 17.0;
+#else
+ exp = 16.0;
+#endif
+
+ do i = 1, N
+ if (b(i) .ne. exp) call abort
+ end do
+
+ a(:) = 76.0
+
+ !$acc parallel if (.FALSE.)
+ do i = 1, N
+ if (acc_on_device (acc_device_host) .eqv. .TRUE.) then
+ b(i) = a(i) + 1
+ else
+ b(i) = a(i)
+ end if
+ end do
+ !$acc end parallel
+
+ do i = 1, N
+ if (b(i) .ne. 77.0) call abort
+ end do
+
+ a(:) = 22.0
+
+ nn = 1
+
+ !$acc parallel copyin (a(1:N)) copyout (b(1:N)) if (nn == 1)
+ do i = 1, N
+ if (acc_on_device (acc_device_host) .eqv. .TRUE.) then
+ b(i) = a(i) + 1
+ else
+ b(i) = a(i)
+ end if
+ end do
+ !$acc end parallel
+
+#if ACC_MEM_SHARED
+ exp = 23.0;
+#else
+ exp = 22.0;
+#endif
+
+ do i = 1, N
+ if (b(i) .ne. exp) call abort
+ end do
+
+ a(:) = 18.0
+
+ nn = 0
+
+ !$acc parallel if (nn == 1)
+ do i = 1, N
+ if (acc_on_device (acc_device_host) .eqv. .TRUE.) then
+ b(i) = a(i) + 1
+ else
+ b(i) = a(i)
+ end if
+ end do
+ !$acc end parallel
+
+ do i = 1, N
+ if (b(i) .ne. 19.0) call abort
+ end do
+
+ a(:) = 49.0
+
+ nn = 1
+
+ !$acc parallel copyin (a(1:N)) copyout (b(1:N)) if ((nn + nn) > 0)
+ do i = 1, N
+ if (acc_on_device (acc_device_host) .eqv. .TRUE.) then
+ b(i) = a(i) + 1
+ else
+ b(i) = a(i)
+ end if
+ end do
+ !$acc end parallel
+
+#if ACC_MEM_SHARED
+ exp = 50.0
+#else
+ exp = 49.0
+#endif
+
+ do i = 1, N
+ if (b(i) .ne. exp) call abort
+ end do
+
+ a(:) = 38.0
+
+ nn = 0;
+
+ !$acc parallel copyin (a(1:N)) copyout (b(1:N)) if ((nn + nn) > 0)
+ do i = 1, N
+ if (acc_on_device (acc_device_host) .eqv. .TRUE.) then
+ b(i) = a(i) + 1
+ else
+ b(i) = a(i)
+ end if
+ end do
+ !$acc end parallel
+
+ do i = 1, N
+ if (b(i) .ne. 39.0) call abort
+ end do
+
+ a(:) = 91.0
+
+ !$acc parallel copyin (a(1:N)) copyout (b(1:N)) if (-2 > 0)
+ do i = 1, N
+ if (acc_on_device (acc_device_host) .eqv. .TRUE.) then
+ b(i) = a(i) + 1
+ else
+ b(i) = a(i)
+ end if
+ end do
+ !$acc end parallel
+
+ do i = 1, N
+ if (b(i) .ne. 92.0) call abort
+ end do
+
+ a(:) = 43.0
+
+ !$acc parallel copyin (a(1:N)) copyout (b(1:N)) if (one == 1)
+ do i = 1, N
+ if (acc_on_device (acc_device_host) .eqv. .TRUE.) then
+ b(i) = a(i) + 1
+ else
+ b(i) = a(i)
+ end if
+ end do
+ !$acc end parallel
+
+#if ACC_MEM_SHARED
+ exp = 44.0
+#else
+ exp = 43.0
+#endif
+
+ do i = 1, N
+ if (b(i) .ne. exp) call abort
+ end do
+
+ a(:) = 87.0
+
+ !$acc parallel if (one == 0)
+ do i = 1, N
+ if (acc_on_device (acc_device_host) .eqv. .TRUE.) then
+ b(i) = a(i) + 1
+ else
+ b(i) = a(i)
+ end if
+ end do
+ !$acc end parallel
+
+ do i = 1, N
+ if (b(i) .ne. 88.0) call abort
+ end do
+
+ a(:) = 3.0
+ b(:) = 9.0
+
+#if ACC_MEM_SHARED
+ exp = 0.0
+ exp2 = 0.0
+#else
+ call acc_copyin (a, sizeof (a))
+ call acc_copyin (b, sizeof (b))
+ exp = 3.0;
+ exp2 = 9.0;
+#endif
+
+ !$acc update device (a(1:N), b(1:N)) if (1 == 1)
+
+ a(:) = 0.0
+ b(:) = 0.0
+
+ !$acc update host (a(1:N), b(1:N)) if (1 == 1)
+
+ do i = 1, N
+ if (a(i) .ne. exp) call abort
+ if (b(i) .ne. exp2) call abort
+ end do
+
+ a(:) = 6.0
+ b(:) = 12.0
+
+ !$acc update device (a(1:N), b(1:N)) if (0 == 1)
+
+ a(:) = 0.0
+ b(:) = 0.0
+
+ !$acc update host (a(1:N), b(1:N)) if (1 == 1)
+
+ do i = 1, N
+ if (a(i) .ne. exp) call abort
+ if (b(i) .ne. exp2) call abort
+ end do
+
+ a(:) = 26.0
+ b(:) = 21.0
+
+ !$acc update device (a(1:N), b(1:N)) if (1 == 1)
+
+ a(:) = 0.0
+ b(:) = 0.0
+
+ !$acc update host (a(1:N), b(1:N)) if (0 == 1)
+
+ do i = 1, N
+ if (a(i) .ne. 0.0) call abort
+ if (b(i) .ne. 0.0) call abort
+ end do
+
+#if !ACC_MEM_SHARED
+ call acc_copyout (a, sizeof (a))
+ call acc_copyout (b, sizeof (b))
+#endif
+
+ a(:) = 4.0
+ b(:) = 0.0
+
+ !$acc data copyin (a(1:N)) copyout (b(1:N)) if (1 == 1)
+
+ !$acc parallel present (a(1:N))
+ do i = 1, N
+ b(i) = a(i)
+ end do
+ !$acc end parallel
+ !$acc end data
+
+ do i = 1, N
+ if (b(i) .ne. 4.0) call abort
+ end do
+
+ a(:) = 8.0
+ b(:) = 1.0
+
+ !$acc data copyin (a(1:N)) copyout (b(1:N)) if (0 == 1)
+
+#if !ACC_MEM_SHARED
+ if (acc_is_present (a) .eqv. .TRUE.) call abort
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+#endif
+
+ !$acc end data
+
+ a(:) = 18.0
+ b(:) = 21.0
+
+ !$acc data copyin (a(1:N)) if (1 == 1)
+
+#if !ACC_MEM_SHARED
+ if (acc_is_present (a) .eqv. .FALSE.) call abort
+#endif
+
+ !$acc data copyout (b(1:N)) if (0 == 1)
+#if !ACC_MEM_SHARED
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+#endif
+ !$acc data copyout (b(1:N)) if (1 == 1)
+
+ !$acc parallel present (a(1:N)) present (b(1:N))
+ do i = 1, N
+ b(i) = a(i)
+ end do
+ !$acc end parallel
+
+ !$acc end data
+
+#if !ACC_MEM_SHARED
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+#endif
+ !$acc end data
+ !$acc end data
+
+ do i = 1, N
+ if (b(1) .ne. 18.0) call abort
+ end do
+
+ !$acc enter data copyin (b(1:N)) if (0 == 1)
+
+#if !ACC_MEM_SHARED
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+#endif
+
+ !$acc exit data delete (b(1:N)) if (0 == 1)
+
+ !$acc enter data copyin (b(1:N)) if (1 == 1)
+
+#if !ACC_MEM_SHARED
+ if (acc_is_present (b) .eqv. .FALSE.) call abort
+#endif
+
+ !$acc exit data delete (b(1:N)) if (1 == 1)
+
+#if !ACC_MEM_SHARED
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+#endif
+
+ !$acc enter data copyin (b(1:N)) if (zero == 1)
+
+#if !ACC_MEM_SHARED
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+#endif
+
+ !$acc exit data delete (b(1:N)) if (zero == 1)
+
+ !$acc enter data copyin (b(1:N)) if (one == 1)
+
+#if !ACC_MEM_SHARED
+ if (acc_is_present (b) .eqv. .FALSE.) call abort
+#endif
+
+ !$acc exit data delete (b(1:N)) if (one == 1)
+
+#if !ACC_MEM_SHARED
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+#endif
+
+ !$acc enter data copyin (b(1:N)) if (one == 0)
+
+#if !ACC_MEM_SHARED
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+#endif
+
+ !$acc exit data delete (b(1:N)) if (one == 0)
+
+ !$acc enter data copyin (b(1:N)) if (one == 1)
+
+#if !ACC_MEM_SHARED
+ if (acc_is_present (b) .eqv. .FALSE.) call abort
+#endif
+
+ !$acc exit data delete (b(1:N)) if (one == 1)
+
+#if !ACC_MEM_SHARED
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+#endif
+
+ a(:) = 4.0
+
+ !$acc kernels copyin (a(1:N)) copyout (b(1:N)) if (1 == 1)
+ do i = 1, N
+ if (acc_on_device (acc_device_host) .eqv. .TRUE.) then
+ b(i) = a(i) + 1
+ else
+ b(i) = a(i)
+ end if
+ end do
+ !$acc end kernels
+
+#if ACC_MEM_SHARED
+ exp = 5.0
+#else
+ exp = 4.0
+#endif
+
+ do i = 1, N
+ if (b(i) .ne. exp) call abort
+ end do
+
+ a(:) = 16.0
+
+ !$acc kernels if (0 == 1)
+ do i = 1, N
+ if (acc_on_device (acc_device_host) .eqv. .TRUE.) then
+ b(i) = a(i) + 1
+ else
+ b(i) = a(i)
+ end if
+ end do
+ !$acc end kernels
+
+ do i = 1, N
+ if (b(i) .ne. 17.0) call abort
+ end do
+
+ a(:) = 8.0
+
+ !$acc kernels copyin (a(1:N)) copyout (b(1:N)) if (one == 1)
+ do i = 1, N
+ if (acc_on_device (acc_device_host) .eqv. .TRUE.) then
+ b(i) = a(i) + 1
+ else
+ b(i) = a(i)
+ end if
+ end do
+ !$acc end kernels
+
+#if ACC_MEM_SHARED
+ exp = 9.0
+#else
+ exp = 8.0
+#endif
+
+ do i = 1, N
+ if (b(i) .ne. exp) call abort
+ end do
+
+ a(:) = 22.0
+
+ !$acc kernels if (zero == 1)
+ do i = 1, N
+ if (acc_on_device (acc_device_host) .eqv. .TRUE.) then
+ b(i) = a(i) + 1
+ else
+ b(i) = a(i)
+ end if
+ end do
+ !$acc end kernels
+
+ do i = 1, N
+ if (b(i) .ne. 23.0) call abort
+ end do
+
+ a(:) = 16.0
+
+ !$acc kernels copyin (a(1:N)) copyout (b(1:N)) if (.TRUE.)
+ do i = 1, N
+ if (acc_on_device (acc_device_host) .eqv. .TRUE.) then
+ b(i) = a(i) + 1
+ else
+ b(i) = a(i)
+ end if
+ end do
+ !$acc end kernels
+
+#if ACC_MEM_SHARED
+ exp = 17.0;
+#else
+ exp = 16.0;
+#endif
+
+ do i = 1, N
+ if (b(i) .ne. exp) call abort
+ end do
+
+ a(:) = 76.0
+
+ !$acc kernels if (.FALSE.)
+ do i = 1, N
+ if (acc_on_device (acc_device_host) .eqv. .TRUE.) then
+ b(i) = a(i) + 1
+ else
+ b(i) = a(i)
+ end if
+ end do
+ !$acc end kernels
+
+ do i = 1, N
+ if (b(i) .ne. 77.0) call abort
+ end do
+
+ a(:) = 22.0
+
+ nn = 1
+
+ !$acc kernels copyin (a(1:N)) copyout (b(1:N)) if (nn == 1)
+ do i = 1, N
+ if (acc_on_device (acc_device_host) .eqv. .TRUE.) then
+ b(i) = a(i) + 1
+ else
+ b(i) = a(i)
+ end if
+ end do
+ !$acc end kernels
+
+#if ACC_MEM_SHARED
+ exp = 23.0;
+#else
+ exp = 22.0;
+#endif
+
+ do i = 1, N
+ if (b(i) .ne. exp) call abort
+ end do
+
+ a(:) = 18.0
+
+ nn = 0
+
+ !$acc kernels if (nn == 1)
+ do i = 1, N
+ if (acc_on_device (acc_device_host) .eqv. .TRUE.) then
+ b(i) = a(i) + 1
+ else
+ b(i) = a(i)
+ end if
+ end do
+ !$acc end kernels
+
+ do i = 1, N
+ if (b(i) .ne. 19.0) call abort
+ end do
+
+ a(:) = 49.0
+
+ nn = 1
+
+ !$acc kernels copyin (a(1:N)) copyout (b(1:N)) if ((nn + nn) > 0)
+ do i = 1, N
+ if (acc_on_device (acc_device_host) .eqv. .TRUE.) then
+ b(i) = a(i) + 1
+ else
+ b(i) = a(i)
+ end if
+ end do
+ !$acc end kernels
+
+#if ACC_MEM_SHARED
+ exp = 50.0
+#else
+ exp = 49.0
+#endif
+
+ do i = 1, N
+ if (b(i) .ne. exp) call abort
+ end do
+
+ a(:) = 38.0
+
+ nn = 0;
+
+ !$acc kernels copyin (a(1:N)) copyout (b(1:N)) if ((nn + nn) > 0)
+ do i = 1, N
+ if (acc_on_device (acc_device_host) .eqv. .TRUE.) then
+ b(i) = a(i) + 1
+ else
+ b(i) = a(i)
+ end if
+ end do
+ !$acc end kernels
+
+ do i = 1, N
+ if (b(i) .ne. 39.0) call abort
+ end do
+
+ a(:) = 91.0
+
+ !$acc kernels copyin (a(1:N)) copyout (b(1:N)) if (-2 > 0)
+ do i = 1, N
+ if (acc_on_device (acc_device_host) .eqv. .TRUE.) then
+ b(i) = a(i) + 1
+ else
+ b(i) = a(i)
+ end if
+ end do
+ !$acc end kernels
+
+ do i = 1, N
+ if (b(i) .ne. 92.0) call abort
+ end do
+
+ a(:) = 43.0
+
+ !$acc kernels copyin (a(1:N)) copyout (b(1:N)) if (one == 1)
+ do i = 1, N
+ if (acc_on_device (acc_device_host) .eqv. .TRUE.) then
+ b(i) = a(i) + 1
+ else
+ b(i) = a(i)
+ end if
+ end do
+ !$acc end kernels
+
+#if ACC_MEM_SHARED
+ exp = 44.0
+#else
+ exp = 43.0
+#endif
+
+ do i = 1, N
+ if (b(i) .ne. exp) call abort
+ end do
+
+ a(:) = 87.0
+
+ !$acc kernels if (one == 0)
+ do i = 1, N
+ if (acc_on_device (acc_device_host) .eqv. .TRUE.) then
+ b(i) = a(i) + 1
+ else
+ b(i) = a(i)
+ end if
+ end do
+ !$acc end kernels
+
+ do i = 1, N
+ if (b(i) .ne. 88.0) call abort
+ end do
+
+ a(:) = 3.0
+ b(:) = 9.0
+
+#if ACC_MEM_SHARED
+ exp = 0.0
+ exp2 = 0.0
+#else
+ call acc_copyin (a, sizeof (a))
+ call acc_copyin (b, sizeof (b))
+ exp = 3.0;
+ exp2 = 9.0;
+#endif
+
+ !$acc update device (a(1:N), b(1:N)) if (1 == 1)
+
+ a(:) = 0.0
+ b(:) = 0.0
+
+ !$acc update host (a(1:N), b(1:N)) if (1 == 1)
+
+ do i = 1, N
+ if (a(i) .ne. exp) call abort
+ if (b(i) .ne. exp2) call abort
+ end do
+
+ a(:) = 6.0
+ b(:) = 12.0
+
+ !$acc update device (a(1:N), b(1:N)) if (0 == 1)
+
+ a(:) = 0.0
+ b(:) = 0.0
+
+ !$acc update host (a(1:N), b(1:N)) if (1 == 1)
+
+ do i = 1, N
+ if (a(i) .ne. exp) call abort
+ if (b(i) .ne. exp2) call abort
+ end do
+
+ a(:) = 26.0
+ b(:) = 21.0
+
+ !$acc update device (a(1:N), b(1:N)) if (1 == 1)
+
+ a(:) = 0.0
+ b(:) = 0.0
+
+ !$acc update host (a(1:N), b(1:N)) if (0 == 1)
+
+ do i = 1, N
+ if (a(i) .ne. 0.0) call abort
+ if (b(i) .ne. 0.0) call abort
+ end do
+
+#if !ACC_MEM_SHARED
+ call acc_copyout (a, sizeof (a))
+ call acc_copyout (b, sizeof (b))
+#endif
+
+ a(:) = 4.0
+ b(:) = 0.0
+
+ !$acc data copyin (a(1:N)) copyout (b(1:N)) if (1 == 1)
+
+ !$acc kernels present (a(1:N))
+ do i = 1, N
+ b(i) = a(i)
+ end do
+ !$acc end kernels
+ !$acc end data
+
+ do i = 1, N
+ if (b(i) .ne. 4.0) call abort
+ end do
+
+ a(:) = 8.0
+ b(:) = 1.0
+
+ !$acc data copyin (a(1:N)) copyout (b(1:N)) if (0 == 1)
+
+#if !ACC_MEM_SHARED
+ if (acc_is_present (a) .eqv. .TRUE.) call abort
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+#endif
+
+ !$acc end data
+
+ a(:) = 18.0
+ b(:) = 21.0
+
+ !$acc data copyin (a(1:N)) if (1 == 1)
+
+#if !ACC_MEM_SHARED
+ if (acc_is_present (a) .eqv. .FALSE.) call abort
+#endif
+
+ !$acc data copyout (b(1:N)) if (0 == 1)
+#if !ACC_MEM_SHARED
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+#endif
+ !$acc data copyout (b(1:N)) if (1 == 1)
+
+ !$acc kernels present (a(1:N)) present (b(1:N))
+ do i = 1, N
+ b(i) = a(i)
+ end do
+ !$acc end kernels
+
+ !$acc end data
+
+#if !ACC_MEM_SHARED
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+#endif
+ !$acc end data
+ !$acc end data
+
+ do i = 1, N
+ if (b(1) .ne. 18.0) call abort
+ end do
+
+ !$acc enter data copyin (b(1:N)) if (0 == 1)
+
+#if !ACC_MEM_SHARED
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+#endif
+
+ !$acc exit data delete (b(1:N)) if (0 == 1)
+
+ !$acc enter data copyin (b(1:N)) if (1 == 1)
+
+#if !ACC_MEM_SHARED
+ if (acc_is_present (b) .eqv. .FALSE.) call abort
+#endif
+
+ !$acc exit data delete (b(1:N)) if (1 == 1)
+
+#if !ACC_MEM_SHARED
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+#endif
+
+ !$acc enter data copyin (b(1:N)) if (zero == 1)
+
+#if !ACC_MEM_SHARED
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+#endif
+
+ !$acc exit data delete (b(1:N)) if (zero == 1)
+
+ !$acc enter data copyin (b(1:N)) if (one == 1)
+
+#if !ACC_MEM_SHARED
+ if (acc_is_present (b) .eqv. .FALSE.) call abort
+#endif
+
+ !$acc exit data delete (b(1:N)) if (one == 1)
+
+#if !ACC_MEM_SHARED
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+#endif
+
+ !$acc enter data copyin (b(1:N)) if (one == 0)
+
+#if !ACC_MEM_SHARED
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+#endif
+
+ !$acc exit data delete (b(1:N)) if (one == 0)
+
+ !$acc enter data copyin (b(1:N)) if (one == 1)
+
+#if !ACC_MEM_SHARED
+ if (acc_is_present (b) .eqv. .FALSE.) call abort
+#endif
+
+ !$acc exit data delete (b(1:N)) if (one == 1)
+
+#if !ACC_MEM_SHARED
+ if (acc_is_present (b) .eqv. .TRUE.) call abort
+#endif
+
+end program main
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/implicit-firstprivate-ref.f90 b/libgomp/testsuite/libgomp.oacc-fortran/implicit-firstprivate-ref.f90
new file mode 100644
index 0000000..a5f3840
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/implicit-firstprivate-ref.f90
@@ -0,0 +1,42 @@
+! This test checks if the runtime can properly handle implicit
+! firstprivate varaibles inside subroutines in modules.
+
+! { dg-do run }
+
+module test_mod
+ contains
+ subroutine test(x)
+
+ IMPLICIT NONE
+
+ INTEGER :: x, y, j
+
+ x = 5
+
+ !$ACC PARALLEL LOOP copyout (y)
+ DO j=1,10
+ y=x
+ ENDDO
+ !$ACC END PARALLEL LOOP
+
+ y = -1;
+
+ !$ACC PARALLEL LOOP firstprivate (y) copyout (x)
+ DO j=1,10
+ x=y
+ ENDDO
+ !$ACC END PARALLEL LOOP
+ end subroutine test
+end module test_mod
+
+program t
+ use test_mod
+
+ INTEGER :: x_min
+
+ x_min = 8
+
+ CALL test(x_min)
+
+ if (x_min .ne. -1) call abort
+end program t
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-2.f95 b/libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-2.f95
new file mode 100644
index 0000000..163e8d5
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-2.f95
@@ -0,0 +1,31 @@
+! { dg-do run }
+
+program main
+ implicit none
+ integer, parameter :: n = 1024
+ integer, dimension (0:n-1) :: a, b, c
+ integer :: i, ii
+
+ !$acc kernels copyout (a(0:n-1))
+ do i = 0, n - 1
+ a(i) = i * 2
+ end do
+ !$acc end kernels
+
+ !$acc kernels copyout (b(0:n-1))
+ do i = 0, n -1
+ b(i) = i * 4
+ end do
+ !$acc end kernels
+
+ !$acc kernels copyin (a(0:n-1), b(0:n-1)) copyout (c(0:n-1))
+ do ii = 0, n - 1
+ c(ii) = a(ii) + b(ii)
+ end do
+ !$acc end kernels
+
+ do i = 0, n - 1
+ if (c(i) .ne. a(i) + b(i)) call abort
+ end do
+
+end program main
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-data-2.f95 b/libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-data-2.f95
new file mode 100644
index 0000000..4c73606
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-data-2.f95
@@ -0,0 +1,37 @@
+! { dg-do run }
+
+program main
+ implicit none
+ integer, parameter :: n = 1024
+ integer, dimension (0:n-1) :: a, b, c
+ integer :: i, ii
+
+ !$acc data copyout (a(0:n-1))
+ !$acc kernels present (a(0:n-1))
+ do i = 0, n - 1
+ a(i) = i * 2
+ end do
+ !$acc end kernels
+ !$acc end data
+
+ !$acc data copyout (b(0:n-1))
+ !$acc kernels present (b(0:n-1))
+ do i = 0, n -1
+ b(i) = i * 4
+ end do
+ !$acc end kernels
+ !$acc end data
+
+ !$acc data copyin (a(0:n-1), b(0:n-1)) copyout (c(0:n-1))
+ !$acc kernels present (a(0:n-1), b(0:n-1), c(0:n-1))
+ do ii = 0, n - 1
+ c(ii) = a(ii) + b(ii)
+ end do
+ !$acc end kernels
+ !$acc end data
+
+ do i = 0, n - 1
+ if (c(i) .ne. a(i) + b(i)) call abort
+ end do
+
+end program main
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-data-enter-exit-2.f95 b/libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-data-enter-exit-2.f95
new file mode 100644
index 0000000..da11aafa
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-data-enter-exit-2.f95
@@ -0,0 +1,37 @@
+! { dg-do run }
+
+program main
+ implicit none
+ integer, parameter :: n = 1024
+ integer, dimension (0:n-1) :: a, b, c
+ integer :: i, ii
+
+ !$acc enter data create (a(0:n-1))
+ !$acc kernels present (a(0:n-1))
+ do i = 0, n - 1
+ a(i) = i * 2
+ end do
+ !$acc end kernels
+ !$acc exit data copyout (a(0:n-1))
+
+ !$acc enter data create (b(0:n-1))
+ !$acc kernels present (b(0:n-1))
+ do i = 0, n -1
+ b(i) = i * 4
+ end do
+ !$acc end kernels
+ !$acc exit data copyout (b(0:n-1))
+
+ !$acc enter data copyin (a(0:n-1), b(0:n-1)) create (c(0:n-1))
+ !$acc kernels present (a(0:n-1), b(0:n-1), c(0:n-1))
+ do ii = 0, n - 1
+ c(ii) = a(ii) + b(ii)
+ end do
+ !$acc end kernels
+ !$acc exit data copyout (c(0:n-1))
+
+ do i = 0, n - 1
+ if (c(i) .ne. a(i) + b(i)) call abort
+ end do
+
+end program main
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-data-enter-exit.f95 b/libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-data-enter-exit.f95
new file mode 100644
index 0000000..f4b4eb3
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-data-enter-exit.f95
@@ -0,0 +1,35 @@
+! { dg-do run }
+
+program main
+ implicit none
+ integer, parameter :: n = 1024
+ integer, dimension (0:n-1) :: a, b, c
+ integer :: i, ii
+
+ !$acc enter data create (a(0:n-1), b(0:n-1), c(0:n-1))
+
+ !$acc kernels present (a(0:n-1))
+ do i = 0, n - 1
+ a(i) = i * 2
+ end do
+ !$acc end kernels
+
+ !$acc kernels present (b(0:n-1))
+ do i = 0, n -1
+ b(i) = i * 4
+ end do
+ !$acc end kernels
+
+ !$acc kernels present (a(0:n-1), b(0:n-1), c(0:n-1))
+ do ii = 0, n - 1
+ c(ii) = a(ii) + b(ii)
+ end do
+ !$acc end kernels
+
+ !$acc exit data copyout (a(0:n-1), b(0:n-1), c(0:n-1))
+
+ do i = 0, n - 1
+ if (c(i) .ne. a(i) + b(i)) call abort
+ end do
+
+end program main
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-data-update.f95 b/libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-data-update.f95
new file mode 100644
index 0000000..d2083e2
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-data-update.f95
@@ -0,0 +1,35 @@
+! { dg-do run }
+
+program main
+ implicit none
+ integer, parameter :: n = 1024
+ integer, dimension (0:n-1) :: a, b, c
+ integer :: i, ii
+
+ !$acc enter data create (a(0:n-1), b(0:n-1), c(0:n-1))
+
+ !$acc kernels present (a(0:n-1))
+ do i = 0, n - 1
+ a(i) = i * 2
+ end do
+ !$acc end kernels
+
+ do i = 0, n -1
+ b(i) = i * 4
+ end do
+
+ !$acc update device (b(0:n-1))
+
+ !$acc kernels present (a(0:n-1), b(0:n-1), c(0:n-1))
+ do ii = 0, n - 1
+ c(ii) = a(ii) + b(ii)
+ end do
+ !$acc end kernels
+
+ !$acc exit data copyout (a(0:n-1), c(0:n-1))
+
+ do i = 0, n - 1
+ if (c(i) .ne. a(i) + b(i)) call abort
+ end do
+
+end program main
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-data.f95 b/libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-data.f95
new file mode 100644
index 0000000..a908f54
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-data.f95
@@ -0,0 +1,35 @@
+! { dg-do run }
+
+program main
+ implicit none
+ integer, parameter :: n = 1024
+ integer, dimension (0:n-1) :: a, b, c
+ integer :: i, ii
+
+ !$acc data copyout (a(0:n-1), b(0:n-1), c(0:n-1))
+
+ !$acc kernels present (a(0:n-1))
+ do i = 0, n - 1
+ a(i) = i * 2
+ end do
+ !$acc end kernels
+
+ !$acc kernels present (b(0:n-1))
+ do i = 0, n -1
+ b(i) = i * 4
+ end do
+ !$acc end kernels
+
+ !$acc kernels present (a(0:n-1), b(0:n-1), c(0:n-1))
+ do ii = 0, n - 1
+ c(ii) = a(ii) + b(ii)
+ end do
+ !$acc end kernels
+
+ !$acc end data
+
+ do i = 0, n - 1
+ if (c(i) .ne. a(i) + b(i)) call abort
+ end do
+
+end program main
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/kernels-loop.f95 b/libgomp/testsuite/libgomp.oacc-fortran/kernels-loop.f95
new file mode 100644
index 0000000..6fb5ba3
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/kernels-loop.f95
@@ -0,0 +1,27 @@
+! { dg-do run }
+
+program main
+ implicit none
+ integer, parameter :: n = 1024
+ integer, dimension (0:n-1) :: a, b, c
+ integer :: i, ii
+
+ do i = 0, n - 1
+ a(i) = i * 2
+ end do
+
+ do i = 0, n -1
+ b(i) = i * 4
+ end do
+
+ !$acc kernels copyin (a(0:n-1), b(0:n-1)) copyout (c(0:n-1))
+ do ii = 0, n - 1
+ c(ii) = a(ii) + b(ii)
+ end do
+ !$acc end kernels
+
+ do i = 0, n - 1
+ if (c(i) .ne. a(i) + b(i)) call abort
+ end do
+
+end program main
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/parallel-reduction.f90 b/libgomp/testsuite/libgomp.oacc-fortran/parallel-reduction.f90
new file mode 100644
index 0000000..31db7e1
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/parallel-reduction.f90
@@ -0,0 +1,47 @@
+! { dg-do run }
+! { dg-additional-options "-w" }
+
+program reduction
+ implicit none
+ integer, parameter :: n = 10
+ integer s1, s2
+ include "openacc_lib.h"
+
+ s1 = 0
+ s2 = 0
+
+ !$acc parallel reduction(+:s1,s2) num_gangs (n) copy(s1)
+ s1 = s1 + 1
+ s2 = s2 + 1
+ !$acc end parallel
+
+ if (acc_get_device_type () .eq. acc_device_nvidia) then
+ if (s1 .ne. n) call abort
+ if (s2 .ne. n) call abort
+ else
+ if (s1 .ne. 1) call abort
+ if (s2 .ne. 1) call abort
+ end if
+
+ ! Test reductions inside subroutines
+
+ s1 = 0
+ s2 = 0
+ call redsub (s1, s2, n)
+
+ if (acc_get_device_type () .eq. acc_device_nvidia) then
+ if (s1 .ne. n) call abort
+ else
+ if (s2 .ne. 1) call abort
+ end if
+end program reduction
+
+subroutine redsub(s1, s2, n)
+ implicit none
+ integer :: s1, s2, n
+
+ !$acc parallel reduction(+:s1,s2) num_gangs (10) copy(s1)
+ s1 = s1 + 1
+ s2 = s2 + 1
+ !$acc end parallel
+end subroutine redsub
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/pr68813.f90 b/libgomp/testsuite/libgomp.oacc-fortran/pr68813.f90
new file mode 100644
index 0000000..735350f
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/pr68813.f90
@@ -0,0 +1,19 @@
+program foo
+ implicit none
+ integer, parameter :: n = 100
+ integer, dimension(n,n) :: a
+ integer :: i, j, sum = 0
+
+ a = 1
+
+ !$acc parallel copyin(a(1:n,1:n)) firstprivate (sum)
+ !$acc loop gang reduction(+:sum)
+ do i=1, n
+ !$acc loop vector reduction(+:sum)
+ do j=1, n
+ sum = sum + a(i, j)
+ enddo
+ enddo
+ !$acc end parallel
+
+end program foo
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/pr70289.f90 b/libgomp/testsuite/libgomp.oacc-fortran/pr70289.f90
new file mode 100644
index 0000000..63bde44
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/pr70289.f90
@@ -0,0 +1,20 @@
+program foo
+ implicit none
+ integer :: i
+ integer :: temp = 0
+ integer :: temp2 = 0
+
+ !$acc parallel
+ !$acc loop gang private(temp)
+ do i=1, 10000
+ temp = 0
+ enddo
+ !$acc end parallel
+
+ !$acc parallel reduction(+:temp2)
+ !$acc loop gang reduction(+:temp2)
+ do i=1, 10000
+ temp2 = 0
+ enddo
+ !$acc end parallel
+end program foo
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/private-variables.f90 b/libgomp/testsuite/libgomp.oacc-fortran/private-variables.f90
new file mode 100644
index 0000000..3c1940b
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/private-variables.f90
@@ -0,0 +1,544 @@
+! Miscellaneous tests for private variables.
+
+! { dg-do run }
+
+
+! Test of gang-private variables declared on loop directive.
+
+subroutine t1()
+ integer :: x, i, arr(32)
+
+ do i = 1, 32
+ arr(i) = i
+ end do
+
+ !$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
+ !$acc loop gang private(x)
+ do i = 1, 32
+ x = i * 2;
+ arr(i) = arr(i) + x
+ end do
+ !$acc end parallel
+
+ do i = 1, 32
+ if (arr(i) .ne. i * 3) call abort
+ end do
+end subroutine t1
+
+
+! Test of gang-private variables declared on loop directive, with broadcasting
+! to partitioned workers.
+
+subroutine t2()
+ integer :: x, i, j, arr(0:32*32)
+
+ do i = 0, 32*32-1
+ arr(i) = i
+ end do
+
+ !$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
+ !$acc loop gang private(x)
+ do i = 0, 31
+ x = i * 2;
+
+ !$acc loop worker
+ do j = 0, 31
+ arr(i * 32 + j) = arr(i * 32 + j) + x
+ end do
+ end do
+ !$acc end parallel
+
+ do i = 0, 32 * 32 - 1
+ if (arr(i) .ne. i + (i / 32) * 2) call abort
+ end do
+end subroutine t2
+
+
+! Test of gang-private variables declared on loop directive, with broadcasting
+! to partitioned vectors.
+
+subroutine t3()
+ integer :: x, i, j, arr(0:32*32)
+
+ do i = 0, 32*32-1
+ arr(i) = i
+ end do
+
+ !$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
+ !$acc loop gang private(x)
+ do i = 0, 31
+ x = i * 2;
+
+ !$acc loop vector
+ do j = 0, 31
+ arr(i * 32 + j) = arr(i * 32 + j) + x
+ end do
+ end do
+ !$acc end parallel
+
+ do i = 0, 32 * 32 - 1
+ if (arr(i) .ne. i + (i / 32) * 2) call abort
+ end do
+end subroutine t3
+
+
+! Test of gang-private addressable variable declared on loop directive, with
+! broadcasting to partitioned workers.
+
+subroutine t4()
+ type vec3
+ integer x, y, z, attr(13)
+ end type vec3
+
+ integer i, j, arr(0:32*32)
+ type(vec3) pt
+
+ do i = 0, 32*32-1
+ arr(i) = i
+ end do
+
+ !$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
+ !$acc loop gang private(pt)
+ do i = 0, 31
+ pt%x = i
+ pt%y = i * 2
+ pt%z = i * 4
+ pt%attr(5) = i * 6
+
+ !$acc loop vector
+ do j = 0, 31
+ arr(i * 32 + j) = arr(i * 32 + j) + pt%x + pt%y + pt%z + pt%attr(5);
+ end do
+ end do
+ !$acc end parallel
+
+ do i = 0, 32 * 32 - 1
+ if (arr(i) .ne. i + (i / 32) * 13) call abort
+ end do
+end subroutine t4
+
+
+! Test of vector-private variables declared on loop directive.
+
+subroutine t5()
+ integer :: x, i, j, k, idx, arr(0:32*32*32)
+
+ do i = 0, 32*32*32-1
+ arr(i) = i
+ end do
+
+ !$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
+ !$acc loop gang
+ do i = 0, 31
+ !$acc loop worker
+ do j = 0, 31
+ !$acc loop vector private(x)
+ do k = 0, 31
+ x = ieor(i, j * 3)
+ arr(i * 1024 + j * 32 + k) = arr(i * 1024 + j * 32 + k) + x * k
+ end do
+ !$acc loop vector private(x)
+ do k = 0, 31
+ x = ior(i, j * 5)
+ arr(i * 1024 + j * 32 + k) = arr(i * 1024 + j * 32 + k) + x * k
+ end do
+ end do
+ end do
+ !$acc end parallel
+
+ do i = 0, 32 - 1
+ do j = 0, 32 -1
+ do k = 0, 32 - 1
+ idx = i * 1024 + j * 32 + k
+ if (arr(idx) .ne. idx + ieor(i, j * 3) * k + ior(i, j * 5) * k) then
+ call abort
+ end if
+ end do
+ end do
+ end do
+end subroutine t5
+
+
+! Test of vector-private variables declared on loop directive. Array type.
+
+subroutine t6()
+ integer :: i, j, k, idx, arr(0:32*32*32), pt(2)
+
+ do i = 0, 32*32*32-1
+ arr(i) = i
+ end do
+
+ !$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
+ !$acc loop gang
+ do i = 0, 31
+ !$acc loop worker
+ do j = 0, 31
+ !$acc loop vector private(x, pt)
+ do k = 0, 31
+ pt(1) = ieor(i, j * 3)
+ pt(2) = ior(i, j * 5)
+ arr(i * 1024 + j * 32 + k) = arr(i * 1024 + j * 32 + k) + pt(1) * k
+ arr(i * 1024 + j * 32 + k) = arr(i * 1024 + j * 32 + k) + pt(2) * k
+ end do
+ end do
+ end do
+ !$acc end parallel
+
+ do i = 0, 32 - 1
+ do j = 0, 32 -1
+ do k = 0, 32 - 1
+ idx = i * 1024 + j * 32 + k
+ if (arr(idx) .ne. idx + ieor(i, j * 3) * k + ior(i, j * 5) * k) then
+ call abort
+ end if
+ end do
+ end do
+ end do
+end subroutine t6
+
+
+! Test of worker-private variables declared on a loop directive.
+
+subroutine t7()
+ integer :: x, i, j, arr(0:32*32)
+ common x
+
+ do i = 0, 32*32-1
+ arr(i) = i
+ end do
+
+ !$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
+ !$acc loop gang private(x)
+ do i = 0, 31
+ !$acc loop worker private(x)
+ do j = 0, 31
+ x = ieor(i, j * 3)
+ arr(i * 32 + j) = arr(i * 32 + j) + x
+ end do
+ end do
+ !$acc end parallel
+
+ do i = 0, 32 * 32 - 1
+ if (arr(i) .ne. i + ieor(i / 32, mod(i, 32) * 3)) call abort
+ end do
+end subroutine t7
+
+
+! Test of worker-private variables declared on a loop directive, broadcasting
+! to vector-partitioned mode.
+
+subroutine t8()
+ integer :: x, i, j, k, idx, arr(0:32*32*32)
+
+ do i = 0, 32*32*32-1
+ arr(i) = i
+ end do
+
+ !$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
+ !$acc loop gang
+ do i = 0, 31
+ !$acc loop worker private(x)
+ do j = 0, 31
+ x = ieor(i, j * 3)
+
+ !$acc loop vector
+ do k = 0, 31
+ arr(i * 1024 + j * 32 + k) = arr(i * 1024 + j * 32 + k) + x * k
+ end do
+ end do
+ end do
+ !$acc end parallel
+
+ do i = 0, 32 - 1
+ do j = 0, 32 -1
+ do k = 0, 32 - 1
+ idx = i * 1024 + j * 32 + k
+ if (arr(idx) .ne. idx + ieor(i, j * 3) * k) call abort
+ end do
+ end do
+ end do
+end subroutine t8
+
+
+! Test of worker-private variables declared on a loop directive, broadcasting
+! to vector-partitioned mode. Back-to-back worker loops.
+
+subroutine t9()
+ integer :: x, i, j, k, idx, arr(0:32*32*32)
+
+ do i = 0, 32*32*32-1
+ arr(i) = i
+ end do
+
+ !$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
+ !$acc loop gang
+ do i = 0, 31
+ !$acc loop worker private(x)
+ do j = 0, 31
+ x = ieor(i, j * 3)
+
+ !$acc loop vector
+ do k = 0, 31
+ arr(i * 1024 + j * 32 + k) = arr(i * 1024 + j * 32 + k) + x * k
+ end do
+ end do
+
+ !$acc loop worker private(x)
+ do j = 0, 31
+ x = ior(i, j * 5)
+
+ !$acc loop vector
+ do k = 0, 31
+ arr(i * 1024 + j * 32 + k) = arr(i * 1024 + j * 32 + k) + x * k
+ end do
+ end do
+ end do
+ !$acc end parallel
+
+ do i = 0, 32 - 1
+ do j = 0, 32 -1
+ do k = 0, 32 - 1
+ idx = i * 1024 + j * 32 + k
+ if (arr(idx) .ne. idx + ieor(i, j * 3) * k + ior(i, j * 5) * k) then
+ call abort
+ end if
+ end do
+ end do
+ end do
+end subroutine t9
+
+
+! Test of worker-private variables declared on a loop directive, broadcasting
+! to vector-partitioned mode. Successive vector loops. */
+
+subroutine t10()
+ integer :: x, i, j, k, idx, arr(0:32*32*32)
+
+ do i = 0, 32*32*32-1
+ arr(i) = i
+ end do
+
+ !$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
+ !$acc loop gang
+ do i = 0, 31
+ !$acc loop worker private(x)
+ do j = 0, 31
+ x = ieor(i, j * 3)
+
+ !$acc loop vector
+ do k = 0, 31
+ arr(i * 1024 + j * 32 + k) = arr(i * 1024 + j * 32 + k) + x * k
+ end do
+
+ x = ior(i, j * 5)
+
+ !$acc loop vector
+ do k = 0, 31
+ arr(i * 1024 + j * 32 + k) = arr(i * 1024 + j * 32 + k) + x * k
+ end do
+ end do
+ end do
+ !$acc end parallel
+
+ do i = 0, 32 - 1
+ do j = 0, 32 -1
+ do k = 0, 32 - 1
+ idx = i * 1024 + j * 32 + k
+ if (arr(idx) .ne. idx + ieor(i, j * 3) * k + ior(i, j * 5) * k) then
+ call abort
+ end if
+ end do
+ end do
+ end do
+end subroutine t10
+
+
+! Test of worker-private variables declared on a loop directive, broadcasting
+! to vector-partitioned mode. Addressable worker variable.
+
+subroutine t11()
+ integer :: i, j, k, idx, arr(0:32*32*32)
+ integer, target :: x
+ integer, pointer :: p
+
+ do i = 0, 32*32*32-1
+ arr(i) = i
+ end do
+
+ !$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
+ !$acc loop gang
+ do i = 0, 31
+ !$acc loop worker private(x, p)
+ do j = 0, 31
+ p => x
+ x = ieor(i, j * 3)
+
+ !$acc loop vector
+ do k = 0, 31
+ arr(i * 1024 + j * 32 + k) = arr(i * 1024 + j * 32 + k) + x * k
+ end do
+
+ p = ior(i, j * 5)
+
+ !$acc loop vector
+ do k = 0, 31
+ arr(i * 1024 + j * 32 + k) = arr(i * 1024 + j * 32 + k) + x * k
+ end do
+ end do
+ end do
+ !$acc end parallel
+
+ do i = 0, 32 - 1
+ do j = 0, 32 -1
+ do k = 0, 32 - 1
+ idx = i * 1024 + j * 32 + k
+ if (arr(idx) .ne. idx + ieor(i, j * 3) * k + ior(i, j * 5) * k) then
+ call abort
+ end if
+ end do
+ end do
+ end do
+end subroutine t11
+
+
+! Test of worker-private variables declared on a loop directive, broadcasting
+! to vector-partitioned mode. Aggregate worker variable.
+
+subroutine t12()
+ type vec2
+ integer x, y
+ end type vec2
+
+ integer :: i, j, k, idx, arr(0:32*32*32)
+ type(vec2) :: pt
+
+ do i = 0, 32*32*32-1
+ arr(i) = i
+ end do
+
+ !$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
+ !$acc loop gang
+ do i = 0, 31
+ !$acc loop worker private(pt)
+ do j = 0, 31
+ pt%x = ieor(i, j * 3)
+ pt%y = ior(i, j * 5)
+
+ !$acc loop vector
+ do k = 0, 31
+ arr(i * 1024 + j * 32 + k) = arr(i * 1024 + j * 32 + k) + pt%x * k
+ end do
+
+ !$acc loop vector
+ do k = 0, 31
+ arr(i * 1024 + j * 32 + k) = arr(i * 1024 + j * 32 + k) + pt%y * k
+ end do
+ end do
+ end do
+ !$acc end parallel
+
+ do i = 0, 32 - 1
+ do j = 0, 32 -1
+ do k = 0, 32 - 1
+ idx = i * 1024 + j * 32 + k
+ if (arr(idx) .ne. idx + ieor(i, j * 3) * k + ior(i, j * 5) * k) then
+ call abort
+ end if
+ end do
+ end do
+ end do
+end subroutine t12
+
+
+! Test of worker-private variables declared on loop directive, broadcasting
+! to vector-partitioned mode. Array worker variable.
+
+subroutine t13()
+ integer :: i, j, k, idx, arr(0:32*32*32), pt(2)
+
+ do i = 0, 32*32*32-1
+ arr(i) = i
+ end do
+
+ !$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
+ !$acc loop gang
+ do i = 0, 31
+ !$acc loop worker private(pt)
+ do j = 0, 31
+ pt(1) = ieor(i, j * 3)
+ pt(2) = ior(i, j * 5)
+
+ !$acc loop vector
+ do k = 0, 31
+ arr(i * 1024 + j * 32 + k) = arr(i * 1024 + j * 32 + k) + pt(1) * k
+ end do
+
+ !$acc loop vector
+ do k = 0, 31
+ arr(i * 1024 + j * 32 + k) = arr(i * 1024 + j * 32 + k) + pt(2) * k
+ end do
+ end do
+ end do
+ !$acc end parallel
+
+ do i = 0, 32 - 1
+ do j = 0, 32 -1
+ do k = 0, 32 - 1
+ idx = i * 1024 + j * 32 + k
+ if (arr(idx) .ne. idx + ieor(i, j * 3) * k + ior(i, j * 5) * k) then
+ call abort
+ end if
+ end do
+ end do
+ end do
+end subroutine t13
+
+
+! Test of gang-private variables declared on the parallel directive.
+
+subroutine t14()
+ use openacc
+ integer :: x = 5
+ integer, parameter :: n = 32
+ integer :: arr(n)
+
+ do i = 1, n
+ arr(i) = 3
+ end do
+
+ !$acc parallel private(x) copy(arr) num_gangs(n) num_workers(8) vector_length(32)
+ !$acc loop gang(static:1)
+ do i = 1, n
+ x = i * 2;
+ end do
+
+ !$acc loop gang(static:1)
+ do i = 1, n
+ if (acc_on_device (acc_device_host) .eqv. .TRUE.) x = i * 2
+ arr(i) = arr(i) + x
+ end do
+ !$acc end parallel
+
+ do i = 1, n
+ if (arr(i) .ne. (3 + i * 2)) call abort
+ end do
+
+end subroutine t14
+
+
+program main
+ call t1()
+ call t2()
+ call t3()
+ call t4()
+ call t5()
+ call t6()
+ call t7()
+ call t8()
+ call t9()
+ call t10()
+ call t11()
+ call t12()
+ call t13()
+ call t14()
+end program main
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/reduction-1.f90 b/libgomp/testsuite/libgomp.oacc-fortran/reduction-1.f90
index db0a52d..e51509f 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/reduction-1.f90
+++ b/libgomp/testsuite/libgomp.oacc-fortran/reduction-1.f90
@@ -1,28 +1,55 @@
! { dg-do run }
+! { dg-additional-options "-w" }
! Integer reductions
program reduction_1
implicit none
- integer, parameter :: n = 10, vl = 32
- integer :: i, vresult, result
- logical :: lresult, lvresult
+ integer, parameter :: n = 10, ng = 8, nw = 4, vl = 32
+ integer :: i, vresult, rg, rw, rv, rc
+ logical :: lrg, lrw, lrv, lrc, lvresult
integer, dimension (n) :: array
do i = 1, n
array(i) = i
end do
- result = 0
+ !
+ ! '+' reductions
+ !
+
+ rg = 0
+ rw = 0
+ rv = 0
+ rc = 0
vresult = 0
- ! '+' reductions
+ !$acc parallel num_gangs(ng) copy(rg)
+ !$acc loop reduction(+:rg) gang
+ do i = 1, n
+ rg = rg + array(i)
+ end do
+ !$acc end parallel
- !$acc parallel vector_length(vl) num_gangs(1) copy(result)
- !$acc loop reduction(+:result)
+ !$acc parallel num_workers(nw) copy(rw)
+ !$acc loop reduction(+:rw) worker
do i = 1, n
- result = result + array(i)
+ rw = rw + array(i)
+ end do
+ !$acc end parallel
+
+ !$acc parallel vector_length(vl) copy(rv)
+ !$acc loop reduction(+:rv) vector
+ do i = 1, n
+ rv = rv + array(i)
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(rc)
+ !$acc loop reduction(+:rc) gang worker vector
+ do i = 1, n
+ rc = rc + array(i)
end do
!$acc end parallel
@@ -31,17 +58,46 @@ program reduction_1
vresult = vresult + array(i)
end do
- if (result.ne.vresult) call abort
-
- result = 0
- vresult = 0
+ if (rg .ne. vresult) call abort
+ if (rw .ne. vresult) call abort
+ if (rv .ne. vresult) call abort
+ if (rc .ne. vresult) call abort
+ !
! '*' reductions
+ !
- !$acc parallel vector_length(vl) num_gangs(1) copy(result)
- !$acc loop reduction(*:result)
+ rg = 1
+ rw = 1
+ rv = 1
+ rc = 1
+ vresult = 1
+
+ !$acc parallel num_gangs(ng) copy(rg)
+ !$acc loop reduction(*:rg) gang
do i = 1, n
- result = result * array(i)
+ rg = rg * array(i)
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_workers(nw) copy(rw)
+ !$acc loop reduction(*:rw) worker
+ do i = 1, n
+ rw = rw * array(i)
+ end do
+ !$acc end parallel
+
+ !$acc parallel vector_length(vl) copy(rv)
+ !$acc loop reduction(*:rv) vector
+ do i = 1, n
+ rv = rv * array(i)
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(rc)
+ !$acc loop reduction(*:rc) gang worker vector
+ do i = 1, n
+ rc = rc * array(i)
end do
!$acc end parallel
@@ -50,17 +106,46 @@ program reduction_1
vresult = vresult * array(i)
end do
- if (result.ne.vresult) call abort
+ if (rg .ne. vresult) call abort
+ if (rw .ne. vresult) call abort
+ if (rv .ne. vresult) call abort
+ if (rc .ne. vresult) call abort
+
+ !
+ ! 'max' reductions
+ !
- result = 0
+ rg = 0
+ rw = 0
+ rv = 0
+ rc = 0
vresult = 0
- ! 'max' reductions
+ !$acc parallel num_gangs(ng) copy(rg)
+ !$acc loop reduction(max:rg) gang
+ do i = 1, n
+ rg = max (rg, array(i))
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_workers(nw) copy(rw)
+ !$acc loop reduction(max:rw) worker
+ do i = 1, n
+ rw = max (rw, array(i))
+ end do
+ !$acc end parallel
+
+ !$acc parallel vector_length(vl) copy(rv)
+ !$acc loop reduction(max:rv) vector
+ do i = 1, n
+ rv = max (rv, array(i))
+ end do
+ !$acc end parallel
- !$acc parallel vector_length(vl) num_gangs(1) copy(result)
- !$acc loop reduction(max:result)
+ !$acc parallel num_gangs(ng) Num_workers(nw) vector_length(vl) copy(rc)
+ !$acc loop reduction(max:rc) gang worker vector
do i = 1, n
- result = max (result, array(i))
+ rc = max (rc, array(i))
end do
!$acc end parallel
@@ -69,17 +154,46 @@ program reduction_1
vresult = max (vresult, array(i))
end do
- if (result.ne.vresult) call abort
-
- result = 1
- vresult = 1
+ if (rg .ne. vresult) call abort
+ if (rw .ne. vresult) call abort
+ if (rv .ne. vresult) call abort
+ if (rc .ne. vresult) call abort
+ !
! 'min' reductions
+ !
+
+ rg = 0
+ rw = 0
+ rv = 0
+ rc = 0
+ vresult = 0
+
+ !$acc parallel num_gangs(ng) copy(rg)
+ !$acc loop reduction(min:rg) gang
+ do i = 1, n
+ rg = min (rg, array(i))
+ end do
+ !$acc end parallel
- !$acc parallel vector_length(vl) num_gangs(1) copy(result)
- !$acc loop reduction(min:result)
+ !$acc parallel num_workers(nw) copy(rw)
+ !$acc loop reduction(min:rw) worker
do i = 1, n
- result = min (result, array(i))
+ rw = min (rw, array(i))
+ end do
+ !$acc end parallel
+
+ !$acc parallel vector_length(vl) copy(rv)
+ !$acc loop reduction(min:rv) vector
+ do i = 1, n
+ rv = min (rv, array(i))
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(rc)
+ !$acc loop reduction(min:rc) gang worker vector
+ do i = 1, n
+ rc = min (rc, array(i))
end do
!$acc end parallel
@@ -88,17 +202,46 @@ program reduction_1
vresult = min (vresult, array(i))
end do
- if (result.ne.vresult) call abort
+ if (rg .ne. vresult) call abort
+ if (rw .ne. vresult) call abort
+ if (rv .ne. vresult) call abort
+ if (rc .ne. vresult) call abort
+
+ !
+ ! 'iand' reductions
+ !
- result = 1
+ rg = 1
+ rw = 1
+ rv = 1
+ rc = 1
vresult = 1
- ! 'iand' reductions
+ !$acc parallel num_gangs(ng) copy(rg)
+ !$acc loop reduction(iand:rg) gang
+ do i = 1, n
+ rg = iand (rg, array(i))
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_workers(nw) copy(rw)
+ !$acc loop reduction(iand:rw) worker
+ do i = 1, n
+ rw = iand (rw, array(i))
+ end do
+ !$acc end parallel
+
+ !$acc parallel vector_length(vl) copy(rv)
+ !$acc loop reduction(iand:rv) vector
+ do i = 1, n
+ rv = iand (rv, array(i))
+ end do
+ !$acc end parallel
- !$acc parallel vector_length(vl) num_gangs(1) copy(result)
- !$acc loop reduction(iand:result)
+ !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(rc)
+ !$acc loop reduction(iand:rc) gang worker vector
do i = 1, n
- result = iand (result, array(i))
+ rc = iand (rc, array(i))
end do
!$acc end parallel
@@ -107,17 +250,46 @@ program reduction_1
vresult = iand (vresult, array(i))
end do
- if (result.ne.vresult) call abort
-
- result = 1
- vresult = 1
+ if (rg .ne. vresult) call abort
+ if (rw .ne. vresult) call abort
+ if (rv .ne. vresult) call abort
+ if (rc .ne. vresult) call abort
+ !
! 'ior' reductions
+ !
+
+ rg = 0
+ rw = 0
+ rv = 0
+ rc = 0
+ vresult = 0
+
+ !$acc parallel num_gangs(ng) copy(rg)
+ !$acc loop reduction(ior:rg) gang
+ do i = 1, n
+ rg = ior (rg, array(i))
+ end do
+ !$acc end parallel
- !$acc parallel vector_length(vl) num_gangs(1) copy(result)
- !$acc loop reduction(ior:result)
+ !$acc parallel num_workers(nw) copy(rw)
+ !$acc loop reduction(ior:rw) worker
do i = 1, n
- result = ior (result, array(i))
+ rw = ior (rw, array(i))
+ end do
+ !$acc end parallel
+
+ !$acc parallel vector_length(vl) copy(rv)
+ !$acc loop reduction(ior:rv) gang
+ do i = 1, n
+ rv = ior (rv, array(i))
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(rc)
+ !$acc loop reduction(ior:rc) gang worker vector
+ do i = 1, n
+ rc = ior (rc, array(i))
end do
!$acc end parallel
@@ -126,17 +298,46 @@ program reduction_1
vresult = ior (vresult, array(i))
end do
- if (result.ne.vresult) call abort
+ if (rg .ne. vresult) call abort
+ if (rw .ne. vresult) call abort
+ if (rv .ne. vresult) call abort
+ if (rc .ne. vresult) call abort
- result = 0
+ !
+ ! 'ieor' reductions
+ !
+
+ rg = 0
+ rw = 0
+ rv = 0
+ rc = 0
vresult = 0
- ! 'ieor' reductions
+ !$acc parallel num_gangs(ng) copy(rg)
+ !$acc loop reduction(ieor:rg) gang
+ do i = 1, n
+ rg = ieor (rg, array(i))
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_workers(nw) copy(rw)
+ !$acc loop reduction(ieor:rw) worker
+ do i = 1, n
+ rw = ieor (rw, array(i))
+ end do
+ !$acc end parallel
- !$acc parallel vector_length(vl) num_gangs(1) copy(result)
- !$acc loop reduction(ieor:result)
+ !$acc parallel vector_length(vl) copy(rv)
+ !$acc loop reduction(ieor:rv) vector
do i = 1, n
- result = ieor (result, array(i))
+ rv = ieor (rv, array(i))
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(rc)
+ !$acc loop reduction(ieor:rc) gang worker vector
+ do i = 1, n
+ rc = ieor (rc, array(i))
end do
!$acc end parallel
@@ -145,17 +346,46 @@ program reduction_1
vresult = ieor (vresult, array(i))
end do
- if (result.ne.vresult) call abort
-
- lresult = .false.
- lvresult = .false.
+ if (rg .ne. vresult) call abort
+ if (rw .ne. vresult) call abort
+ if (rv .ne. vresult) call abort
+ if (rc .ne. vresult) call abort
+ !
! '.and.' reductions
+ !
+
+ lrg = .true.
+ lrw = .true.
+ lrv = .true.
+ lrc = .true.
+ lvresult = .true.
+
+ !$acc parallel num_gangs(ng) copy(lrg)
+ !$acc loop reduction(.and.:lrg) gang
+ do i = 1, n
+ lrg = lrg .and. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_workers(nw) copy(lrw)
+ !$acc loop reduction(.and.:lrw) worker
+ do i = 1, n
+ lrw = lrw .and. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
+
+ !$acc parallel vector_length(vl) copy(lrv)
+ !$acc loop reduction(.and.:lrv) vector
+ do i = 1, n
+ lrv = lrv .and. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
- !$acc parallel vector_length(vl) num_gangs(1) copy(lresult)
- !$acc loop reduction(.and.:lresult)
+ !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(lrc)
+ !$acc loop reduction(.and.:lrc) gang worker vector
do i = 1, n
- lresult = lresult .and. (array(i) .ge. 5)
+ lrc = lrc .and. (array(i) .ge. 5)
end do
!$acc end parallel
@@ -164,17 +394,46 @@ program reduction_1
lvresult = lvresult .and. (array(i) .ge. 5)
end do
- if (result.ne.vresult) call abort
+ if (lrg .neqv. lvresult) call abort
+ if (lrw .neqv. lvresult) call abort
+ if (lrv .neqv. lvresult) call abort
+ if (lrc .neqv. lvresult) call abort
+
+ !
+ ! '.or.' reductions
+ !
- lresult = .false.
+ lrg = .true.
+ lrw = .true.
+ lrv = .true.
+ lrc = .true.
lvresult = .false.
- ! '.or.' reductions
+ !$acc parallel num_gangs(ng) copy(lrg)
+ !$acc loop reduction(.or.:lrg) gang
+ do i = 1, n
+ lrg = lrg .or. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_workers(nw) copy(lrw)
+ !$acc loop reduction(.or.:lrw) worker
+ do i = 1, n
+ lrw = lrw .or. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
+
+ !$acc parallel vector_length(vl) copy(lrv)
+ !$acc loop reduction(.or.:lrv) vector
+ do i = 1, n
+ lrv = lrv .or. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
- !$acc parallel vector_length(vl) num_gangs(1) copy(lresult)
- !$acc loop reduction(.or.:lresult)
+ !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(lrc)
+ !$acc loop reduction(.or.:lrc) gang worker vector
do i = 1, n
- lresult = lresult .or. (array(i) .ge. 5)
+ lrc = lrc .or. (array(i) .ge. 5)
end do
!$acc end parallel
@@ -183,17 +442,46 @@ program reduction_1
lvresult = lvresult .or. (array(i) .ge. 5)
end do
- if (result.ne.vresult) call abort
-
- lresult = .false.
- lvresult = .false.
+ if (lrg .neqv. lvresult) call abort
+ if (lrw .neqv. lvresult) call abort
+ if (lrv .neqv. lvresult) call abort
+ if (lrc .neqv. lvresult) call abort
+ !
! '.eqv.' reductions
+ !
+
+ lrg = .true.
+ lrw = .true.
+ lrv = .true.
+ lrc = .true.
+ lvresult = .true.
+
+ !$acc parallel num_gangs(ng) copy(lrg)
+ !$acc loop reduction(.eqv.:lrg) gang
+ do i = 1, n
+ lrg = lrg .eqv. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_workers(nw) copy(lrw)
+ !$acc loop reduction(.eqv.:lrw) worker
+ do i = 1, n
+ lrw = lrw .eqv. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
+
+ !$acc parallel vector_length(vl) copy(lrv)
+ !$acc loop reduction(.eqv.:lrv) vector
+ do i = 1, n
+ lrv = lrv .eqv. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
- !$acc parallel vector_length(vl) num_gangs(1) copy(lresult)
- !$acc loop reduction(.eqv.:lresult)
+ !$acc parallel num_workers(nw) vector_length(vl) copy(lrc)
+ !$acc loop reduction(.eqv.:lrc) gang worker vector
do i = 1, n
- lresult = lresult .eqv. (array(i) .ge. 5)
+ lrc = lrc .eqv. (array(i) .ge. 5)
end do
!$acc end parallel
@@ -202,17 +490,46 @@ program reduction_1
lvresult = lvresult .eqv. (array(i) .ge. 5)
end do
- if (result.ne.vresult) call abort
-
- lresult = .false.
- lvresult = .false.
+ if (lrg .neqv. lvresult) call abort
+ if (lrw .neqv. lvresult) call abort
+ if (lrv .neqv. lvresult) call abort
+ if (lrc .neqv. lvresult) call abort
+ !
! '.neqv.' reductions
+ !
+
+ lrg = .true.
+ lrw = .true.
+ lrv = .true.
+ lrc = .true.
+ lvresult = .true.
+
+ !$acc parallel num_gangs(ng) copy(lrg)
+ !$acc loop reduction(.neqv.:lrg) gang
+ do i = 1, n
+ lrg = lrg .neqv. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_workers(nw) copy(lrw)
+ !$acc loop reduction(.neqv.:lrw) worker
+ do i = 1, n
+ lrw = lrw .neqv. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
+
+ !$acc parallel vector_length(vl) copy(lrv)
+ !$acc loop reduction(.neqv.:lrv) vector
+ do i = 1, n
+ lrv = lrv .neqv. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
- !$acc parallel vector_length(vl) num_gangs(1) copy(lresult)
- !$acc loop reduction(.neqv.:lresult)
+ !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(lrc)
+ !$acc loop reduction(.neqv.:lrc) gang worker vector
do i = 1, n
- lresult = lresult .neqv. (array(i) .ge. 5)
+ lrc = lrc .neqv. (array(i) .ge. 5)
end do
!$acc end parallel
@@ -221,5 +538,8 @@ program reduction_1
lvresult = lvresult .neqv. (array(i) .ge. 5)
end do
- if (result.ne.vresult) call abort
+ if (lrg .neqv. lvresult) call abort
+ if (lrw .neqv. lvresult) call abort
+ if (lrv .neqv. lvresult) call abort
+ if (lrc .neqv. lvresult) call abort
end program reduction_1
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/reduction-2.f90 b/libgomp/testsuite/libgomp.oacc-fortran/reduction-2.f90
index 3d99668..b828feb 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/reduction-2.f90
+++ b/libgomp/testsuite/libgomp.oacc-fortran/reduction-2.f90
@@ -5,26 +5,52 @@
program reduction_2
implicit none
- integer, parameter :: n = 10, vl = 32
+ integer, parameter :: n = 10, ng = 8, nw = 4, vl = 32
integer :: i
- real, parameter :: e = .001
- real :: vresult, result
- logical :: lresult, lvresult
- real, dimension (n) :: array
+ real :: vresult, rg, rw, rv, rc
+ real, parameter :: e = 0.001
+ logical :: lrg, lrw, lrv, lrc, lvresult
+ real, dimension (n) :: array
do i = 1, n
array(i) = i
end do
- result = 0
+ !
+ ! '+' reductions
+ !
+
+ rg = 0
+ rw = 0
+ rv = 0
+ rc = 0
vresult = 0
- ! '+' reductions
+ !$acc parallel num_gangs(ng) copy(rg)
+ !$acc loop reduction(+:rg) gang
+ do i = 1, n
+ rg = rg + array(i)
+ end do
+ !$acc end parallel
- !$acc parallel vector_length(vl) num_gangs(1) copy(result)
- !$acc loop reduction(+:result)
+ !$acc parallel num_workers(nw) copy(rw)
+ !$acc loop reduction(+:rw) worker
do i = 1, n
- result = result + array(i)
+ rw = rw + array(i)
+ end do
+ !$acc end parallel
+
+ !$acc parallel vector_length(vl) copy(rv)
+ !$acc loop reduction(+:rv) vector
+ do i = 1, n
+ rv = rv + array(i)
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(rc)
+ !$acc loop reduction(+:rc) gang worker vector
+ do i = 1, n
+ rc = rc + array(i)
end do
!$acc end parallel
@@ -33,17 +59,46 @@ program reduction_2
vresult = vresult + array(i)
end do
- if (abs (result - vresult) .ge. e) call abort
+ if (rg .ne. vresult) call abort
+ if (rw .ne. vresult) call abort
+ if (rv .ne. vresult) call abort
+ if (rc .ne. vresult) call abort
+
+ !
+ ! '*' reductions
+ !
- result = 1
+ rg = 1
+ rw = 1
+ rv = 1
+ rc = 1
vresult = 1
- ! '*' reductions
+ !$acc parallel num_gangs(ng) copy(rg)
+ !$acc loop reduction(*:rg) gang
+ do i = 1, n
+ rg = rg * array(i)
+ end do
+ !$acc end parallel
- !$acc parallel vector_length(vl) num_gangs(1) copy(result)
- !$acc loop reduction(*:result)
+ !$acc parallel num_workers(nw) copy(rw)
+ !$acc loop reduction(*:rw) worker
do i = 1, n
- result = result * array(i)
+ rw = rw * array(i)
+ end do
+ !$acc end parallel
+
+ !$acc parallel vector_length(vl) copy(rv)
+ !$acc loop reduction(*:rv) vector
+ do i = 1, n
+ rv = rv * array(i)
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(rc)
+ !$acc loop reduction(*:rc) gang worker vector
+ do i = 1, n
+ rc = rc * array(i)
end do
!$acc end parallel
@@ -52,17 +107,46 @@ program reduction_2
vresult = vresult * array(i)
end do
- if (result.ne.vresult) call abort
+ if (abs (rg - vresult) .ge. e) call abort
+ if (abs (rw - vresult) .ge. e) call abort
+ if (abs (rv - vresult) .ge. e) call abort
+ if (abs (rc - vresult) .ge. e) call abort
+
+ !
+ ! 'max' reductions
+ !
- result = 0
+ rg = 0
+ rw = 0
+ rg = 0
+ rc = 0
vresult = 0
- ! 'max' reductions
+ !$acc parallel num_gangs(ng) copy(rg)
+ !$acc loop reduction(max:rg) gang
+ do i = 1, n
+ rg = max (rg, array(i))
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_workers(nw) copy(rw)
+ !$acc loop reduction(max:rw) worker
+ do i = 1, n
+ rw = max (rw, array(i))
+ end do
+ !$acc end parallel
- !$acc parallel vector_length(vl) num_gangs(1) copy(result)
- !$acc loop reduction(max:result)
+ !$acc parallel vector_length(vl) copy(rv)
+ !$acc loop reduction(max:rv) vector
do i = 1, n
- result = max (result, array(i))
+ rv = max (rv, array(i))
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(rc)
+ !$acc loop reduction(max:rc) gang worker vector
+ do i = 1, n
+ rc = max (rc, array(i))
end do
!$acc end parallel
@@ -71,17 +155,46 @@ program reduction_2
vresult = max (vresult, array(i))
end do
- if (result.ne.vresult) call abort
-
- result = 1
- vresult = 1
+ if (abs (rg - vresult) .ge. e) call abort
+ if (abs (rw - vresult) .ge. e) call abort
+ if (abs (rg - vresult) .ge. e) call abort
+ if (abs (rc - vresult) .ge. e) call abort
+ !
! 'min' reductions
+ !
- !$acc parallel vector_length(vl) num_gangs(1) copy(result)
- !$acc loop reduction(min:result)
+ rg = 0
+ rw = 0
+ rv = 0
+ rc = 0
+ vresult = 0
+
+ !$acc parallel num_gangs(ng) copy(rg)
+ !$acc loop reduction(min:rg) gang
+ do i = 1, n
+ rg = min (rg, array(i))
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_workers(nw) copy(rw)
+ !$acc loop reduction(min:rw) worker
+ do i = 1, n
+ rw = min (rw, array(i))
+ end do
+ !$acc end parallel
+
+ !$acc parallel vector_length(vl) copy(rv)
+ !$acc loop reduction(min:rv) vector
do i = 1, n
- result = min (result, array(i))
+ rv = min (rv, array(i))
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(rc)
+ !$acc loop reduction(min:rc) gang worker vector
+ do i = 1, n
+ rc = min (rc, array(i))
end do
!$acc end parallel
@@ -90,17 +203,46 @@ program reduction_2
vresult = min (vresult, array(i))
end do
- if (result.ne.vresult) call abort
-
- result = 1
- vresult = 1
+ if (rg .ne. vresult) call abort
+ if (rv .ne. vresult) call abort
+ if (rw .ne. vresult) call abort
+ if (rc .ne. vresult) call abort
+ !
! '.and.' reductions
+ !
+
+ lrg = .true.
+ lrw = .true.
+ lrv = .true.
+ lrc = .true.
+ lvresult = .true.
+
+ !$acc parallel num_gangs(ng) copy(lrg)
+ !$acc loop reduction(.and.:lrg) gang
+ do i = 1, n
+ lrg = lrg .and. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
- !$acc parallel vector_length(vl) num_gangs(1) copy(lresult)
- !$acc loop reduction(.and.:lresult)
+ !$acc parallel num_workers(nw) copy(lrw)
+ !$acc loop reduction(.and.:lrw) worker
do i = 1, n
- lresult = lresult .and. (array(i) .ge. 5)
+ lrw = lrw .and. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
+
+ !$acc parallel vector_length(vl) copy(lrv)
+ !$acc loop reduction(.and.:lrv) vector
+ do i = 1, n
+ lrv = lrv .and. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(lrc)
+ !$acc loop reduction(.and.:lrc) gang worker vector
+ do i = 1, n
+ lrc = lrc .and. (array(i) .ge. 5)
end do
!$acc end parallel
@@ -109,17 +251,46 @@ program reduction_2
lvresult = lvresult .and. (array(i) .ge. 5)
end do
- if (result.ne.vresult) call abort
+ if (lrg .neqv. lvresult) call abort
+ if (lrw .neqv. lvresult) call abort
+ if (lrv .neqv. lvresult) call abort
+ if (lrc .neqv. lvresult) call abort
- lresult = .false.
+ !
+ ! '.or.' reductions
+ !
+
+ lrg = .false.
+ lrw = .false.
+ lrv = .false.
+ lrc = .false.
lvresult = .false.
- ! '.or.' reductions
+ !$acc parallel num_gangs(ng) copy(lrg)
+ !$acc loop reduction(.or.:lrg) gang
+ do i = 1, n
+ lrg = lrg .or. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_workers(nw) copy(lrw)
+ !$acc loop reduction(.or.:lrw) worker
+ do i = 1, n
+ lrw = lrw .or. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
- !$acc parallel vector_length(vl) num_gangs(1) copy(lresult)
- !$acc loop reduction(.or.:lresult)
+ !$acc parallel vector_length(vl) copy(lrv)
+ !$acc loop reduction(.or.:lrv) vector
do i = 1, n
- lresult = lresult .or. (array(i) .ge. 5)
+ lrv = lrv .or. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(lrc)
+ !$acc loop reduction(.or.:lrc) gang worker vector
+ do i = 1, n
+ lrc = lrc .or. (array(i) .ge. 5)
end do
!$acc end parallel
@@ -128,17 +299,46 @@ program reduction_2
lvresult = lvresult .or. (array(i) .ge. 5)
end do
- if (result.ne.vresult) call abort
-
- lresult = .false.
- lvresult = .false.
+ if (lrg .neqv. lvresult) call abort
+ if (lrw .neqv. lvresult) call abort
+ if (lrv .neqv. lvresult) call abort
+ if (lrc .neqv. lvresult) call abort
+ !
! '.eqv.' reductions
+ !
+
+ lrg = .true.
+ lrw = .true.
+ lrv = .true.
+ lrc = .true.
+ lvresult = .true.
+
+ !$acc parallel num_gangs(ng) copy(lrg)
+ !$acc loop reduction(.eqv.:lrg) gang
+ do i = 1, n
+ lrg = lrg .eqv. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
- !$acc parallel vector_length(vl) num_gangs(1) copy(lresult)
- !$acc loop reduction(.eqv.:lresult)
+ !$acc parallel num_workers(nw) copy(lrw)
+ !$acc loop reduction(.eqv.:lrw) worker
do i = 1, n
- lresult = lresult .eqv. (array(i) .ge. 5)
+ lrw = lrw .eqv. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
+
+ !$acc parallel vector_length(vl) copy(lrv)
+ !$acc loop reduction(.eqv.:lrv) vector
+ do i = 1, n
+ lrv = lrv .eqv. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(lrc)
+ !$acc loop reduction(.eqv.:lrc) gang worker vector
+ do i = 1, n
+ lrc = lrc .eqv. (array(i) .ge. 5)
end do
!$acc end parallel
@@ -147,17 +347,46 @@ program reduction_2
lvresult = lvresult .eqv. (array(i) .ge. 5)
end do
- if (result.ne.vresult) call abort
-
- lresult = .false.
- lvresult = .false.
+ if (lrg .neqv. lvresult) call abort
+ if (lrw .neqv. lvresult) call abort
+ if (lrv .neqv. lvresult) call abort
+ if (lrc .neqv. lvresult) call abort
+ !
! '.neqv.' reductions
+ !
+
+ lrg = .true.
+ lrw = .true.
+ lrv = .true.
+ lrc = .true.
+ lvresult = .true.
+
+ !$acc parallel num_gangs(ng) copy(lrg)
+ !$acc loop reduction(.neqv.:lrg) gang
+ do i = 1, n
+ lrg = lrg .neqv. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_workers(nw) copy(lrw)
+ !$acc loop reduction(.neqv.:lrw) worker
+ do i = 1, n
+ lrw = lrw .neqv. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
+
+ !$acc parallel vector_length(vl) copy(lrv)
+ !$acc loop reduction(.neqv.:lrv) vector
+ do i = 1, n
+ lrv = lrv .neqv. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
- !$acc parallel vector_length(vl) num_gangs(1) copy(lresult)
- !$acc loop reduction(.neqv.:lresult)
+ !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(lrc)
+ !$acc loop reduction(.neqv.:lrc) gang worker vector
do i = 1, n
- lresult = lresult .neqv. (array(i) .ge. 5)
+ lrc = lrc .neqv. (array(i) .ge. 5)
end do
!$acc end parallel
@@ -166,5 +395,8 @@ program reduction_2
lvresult = lvresult .neqv. (array(i) .ge. 5)
end do
- if (result.ne.vresult) call abort
+ if (lrg .neqv. lvresult) call abort
+ if (lrw .neqv. lvresult) call abort
+ if (lrv .neqv. lvresult) call abort
+ if (lrc .neqv. lvresult) call abort
end program reduction_2
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/reduction-3.f90 b/libgomp/testsuite/libgomp.oacc-fortran/reduction-3.f90
index d0b590e..3d8d753 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/reduction-3.f90
+++ b/libgomp/testsuite/libgomp.oacc-fortran/reduction-3.f90
@@ -5,26 +5,52 @@
program reduction_3
implicit none
- integer, parameter :: n = 10, vl = 32
+ integer, parameter :: n = 10, ng = 8, nw = 4, vl = 32
integer :: i
- double precision, parameter :: e = .001
- double precision :: vresult, result
- logical :: lresult, lvresult
+ double precision :: vresult, rg, rw, rv, rc
+ double precision, parameter :: e = 0.001
+ logical :: lrg, lrw, lrv, lrc, lvresult
double precision, dimension (n) :: array
do i = 1, n
array(i) = i
end do
- result = 0
+ !
+ ! '+' reductions
+ !
+
+ rg = 0
+ rw = 0
+ rv = 0
+ rc = 0
vresult = 0
- ! '+' reductions
+ !$acc parallel num_gangs(ng) copy(rg)
+ !$acc loop reduction(+:rg) gang
+ do i = 1, n
+ rg = rg + array(i)
+ end do
+ !$acc end parallel
- !$acc parallel vector_length(vl) num_gangs(1) copy(result)
- !$acc loop reduction(+:result)
+ !$acc parallel num_workers(nw) copy(rw)
+ !$acc loop reduction(+:rw) worker
do i = 1, n
- result = result + array(i)
+ rw = rw + array(i)
+ end do
+ !$acc end parallel
+
+ !$acc parallel vector_length(vl) copy(rv)
+ !$acc loop reduction(+:rv) vector
+ do i = 1, n
+ rv = rv + array(i)
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(rc)
+ !$acc loop reduction(+:rc) gang worker vector
+ do i = 1, n
+ rc = rc + array(i)
end do
!$acc end parallel
@@ -33,17 +59,46 @@ program reduction_3
vresult = vresult + array(i)
end do
- if (abs (result - vresult) .ge. e) call abort
+ if (abs (rg - vresult) .ge. e) call abort
+ if (abs (rw - vresult) .ge. e) call abort
+ if (abs (rv - vresult) .ge. e) call abort
+ if (abs (rc - vresult) .ge. e) call abort
+
+ !
+ ! '*' reductions
+ !
- result = 1
+ rg = 1
+ rw = 1
+ rv = 1
+ rc = 1
vresult = 1
- ! '*' reductions
+ !$acc parallel num_gangs(ng) copy(rg)
+ !$acc loop reduction(*:rg) gang
+ do i = 1, n
+ rg = rg * array(i)
+ end do
+ !$acc end parallel
- !$acc parallel vector_length(vl) num_gangs(1) copy(result)
- !$acc loop reduction(*:result)
+ !$acc parallel num_workers(nw) copy(rw)
+ !$acc loop reduction(*:rw) worker
do i = 1, n
- result = result * array(i)
+ rw = rw * array(i)
+ end do
+ !$acc end parallel
+
+ !$acc parallel vector_length(vl) copy(rv)
+ !$acc loop reduction(*:rv) vector
+ do i = 1, n
+ rv = rv * array(i)
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(rc)
+ !$acc loop reduction(*:rc) gang worker vector
+ do i = 1, n
+ rc = rc * array(i)
end do
!$acc end parallel
@@ -52,17 +107,46 @@ program reduction_3
vresult = vresult * array(i)
end do
- if (result.ne.vresult) call abort
+ if (abs (rg - vresult) .ge. e) call abort
+ if (abs (rw - vresult) .ge. e) call abort
+ if (abs (rv - vresult) .ge. e) call abort
+ if (abs (rc - vresult) .ge. e) call abort
+
+ !
+ ! 'max' reductions
+ !
- result = 0
+ rg = 0
+ rw = 0
+ rv = 0
+ rc = 0
vresult = 0
- ! 'max' reductions
+ !$acc parallel num_gangs(ng) copy(rg)
+ !$acc loop reduction(max:rg) gang
+ do i = 1, n
+ rg = max (rg, array(i))
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_workers(nw) copy(rw)
+ !$acc loop reduction(max:rw) worker
+ do i = 1, n
+ rw = max (rw, array(i))
+ end do
+ !$acc end parallel
- !$acc parallel vector_length(vl) num_gangs(1) copy(result)
- !$acc loop reduction(max:result)
+ !$acc parallel vector_length(vl) copy(rv)
+ !$acc loop reduction(max:rv) vector
do i = 1, n
- result = max (result, array(i))
+ rv = max (rv, array(i))
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(rc)
+ !$acc loop reduction(max:rc) gang worker vector
+ do i = 1, n
+ rc = max (rc, array(i))
end do
!$acc end parallel
@@ -71,17 +155,46 @@ program reduction_3
vresult = max (vresult, array(i))
end do
- if (result.ne.vresult) call abort
-
- result = 1
- vresult = 1
+ if (abs (rg - vresult) .ge. e) call abort
+ if (abs (rw - vresult) .ge. e) call abort
+ if (abs (rv - vresult) .ge. e) call abort
+ if (abs (rc - vresult) .ge. e) call abort
+ !
! 'min' reductions
+ !
- !$acc parallel vector_length(vl) num_gangs(1) copy(result)
- !$acc loop reduction(min:result)
+ rg = 0
+ rw = 0
+ rv = 0
+ rc = 0
+ vresult = 0
+
+ !$acc parallel num_gangs(ng) copy(rg)
+ !$acc loop reduction(min:rg) gang
+ do i = 1, n
+ rg = min (rg, array(i))
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_workers(nw) copy(rw)
+ !$acc loop reduction(min:rw) worker
+ do i = 1, n
+ rw = min (rw, array(i))
+ end do
+ !$acc end parallel
+
+ !$acc parallel vector_length(vl) copy(rv)
+ !$acc loop reduction(min:rv) vector
do i = 1, n
- result = min (result, array(i))
+ rv = min (rv, array(i))
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(rc)
+ !$acc loop reduction(min:rc) gang worker vector
+ do i = 1, n
+ rc = min (rc, array(i))
end do
!$acc end parallel
@@ -90,17 +203,46 @@ program reduction_3
vresult = min (vresult, array(i))
end do
- if (result.ne.vresult) call abort
-
- result = 1
- vresult = 1
+ if (rg .ne. vresult) call abort
+ if (rw .ne. vresult) call abort
+ if (rv .ne. vresult) call abort
+ if (rc .ne. vresult) call abort
+ !
! '.and.' reductions
+ !
+
+ lrg = .true.
+ lrw = .true.
+ lrv = .true.
+ lrc = .true.
+ lvresult = .true.
+
+ !$acc parallel num_gangs(ng) copy(lrg)
+ !$acc loop reduction(.and.:lrg) gang
+ do i = 1, n
+ lrg = lrg .and. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
- !$acc parallel vector_length(vl) num_gangs(1) copy(lresult)
- !$acc loop reduction(.and.:lresult)
+ !$acc parallel num_workers(nw) copy(lrw)
+ !$acc loop reduction(.and.:lrw) worker
do i = 1, n
- lresult = lresult .and. (array(i) .ge. 5)
+ lrw = lrw .and. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
+
+ !$acc parallel vector_length(vl) copy(lrv)
+ !$acc loop reduction(.and.:lrv) vector
+ do i = 1, n
+ lrv = lrv .and. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(lrc)
+ !$acc loop reduction(.and.:lrc) gang worker vector
+ do i = 1, n
+ lrc = lrc .and. (array(i) .ge. 5)
end do
!$acc end parallel
@@ -109,17 +251,46 @@ program reduction_3
lvresult = lvresult .and. (array(i) .ge. 5)
end do
- if (result.ne.vresult) call abort
+ if (lrg .neqv. lvresult) call abort
+ if (lrw .neqv. lvresult) call abort
+ if (lrv .neqv. lvresult) call abort
+ if (lrc .neqv. lvresult) call abort
- lresult = .false.
+ !
+ ! '.or.' reductions
+ !
+
+ lrg = .false.
+ lrw = .false.
+ lrv = .false.
+ lrc = .false.
lvresult = .false.
- ! '.or.' reductions
+ !$acc parallel num_gangs(ng) copy(lrg)
+ !$acc loop reduction(.or.:lrg) gang
+ do i = 1, n
+ lrg = lrg .or. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_workers(nw) copy(lrw)
+ !$acc loop reduction(.or.:lrw) worker
+ do i = 1, n
+ lrw = lrw .or. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
- !$acc parallel vector_length(vl) num_gangs(1) copy(lresult)
- !$acc loop reduction(.or.:lresult)
+ !$acc parallel vector_length(vl) copy(lrv)
+ !$acc loop reduction(.or.:lrv) vector
do i = 1, n
- lresult = lresult .or. (array(i) .ge. 5)
+ lrv = lrv .or. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(lrc)
+ !$acc loop reduction(.or.:lrc) gang worker vector
+ do i = 1, n
+ lrc = lrc .or. (array(i) .ge. 5)
end do
!$acc end parallel
@@ -128,17 +299,46 @@ program reduction_3
lvresult = lvresult .or. (array(i) .ge. 5)
end do
- if (result.ne.vresult) call abort
-
- lresult = .false.
- lvresult = .false.
+ if (lrg .neqv. lvresult) call abort
+ if (lrw .neqv. lvresult) call abort
+ if (lrv .neqv. lvresult) call abort
+ if (lrc .neqv. lvresult) call abort
+ !
! '.eqv.' reductions
+ !
+
+ lrg = .true.
+ lrw = .true.
+ lrv = .true.
+ lrc = .true.
+ lvresult = .true.
+
+ !$acc parallel num_gangs(ng) copy(lrg)
+ !$acc loop reduction(.eqv.:lrg) gang
+ do i = 1, n
+ lrg = lrg .eqv. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
- !$acc parallel vector_length(vl) num_gangs(1) copy(lresult)
- !$acc loop reduction(.eqv.:lresult)
+ !$acc parallel num_workers(nw) copy(lrw)
+ !$acc loop reduction(.eqv.:lrw) worker
do i = 1, n
- lresult = lresult .eqv. (array(i) .ge. 5)
+ lrw = lrw .eqv. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
+
+ !$acc parallel vector_length(vl) copy(lrv)
+ !$acc loop reduction(.eqv.:lrv) vector
+ do i = 1, n
+ lrv = lrv .eqv. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(lrc)
+ !$acc loop reduction(.eqv.:lrc) gang worker vector
+ do i = 1, n
+ lrc = lrc .eqv. (array(i) .ge. 5)
end do
!$acc end parallel
@@ -147,17 +347,46 @@ program reduction_3
lvresult = lvresult .eqv. (array(i) .ge. 5)
end do
- if (result.ne.vresult) call abort
-
- lresult = .false.
- lvresult = .false.
+ if (lrg .neqv. lvresult) call abort
+ if (lrw .neqv. lvresult) call abort
+ if (lrv .neqv. lvresult) call abort
+ if (lrc .neqv. lvresult) call abort
+ !
! '.neqv.' reductions
+ !
+
+ lrg = .true.
+ lrw = .true.
+ lrv = .true.
+ lrc = .true.
+ lvresult = .true.
+
+ !$acc parallel num_gangs(ng) copy(lrg)
+ !$acc loop reduction(.neqv.:lrg) gang
+ do i = 1, n
+ lrg = lrg .neqv. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_workers(nw) copy(lrw)
+ !$acc loop reduction(.neqv.:lrw) worker
+ do i = 1, n
+ lrw = lrw .neqv. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
+
+ !$acc parallel vector_length(vl) copy(lrv)
+ !$acc loop reduction(.neqv.:lrv) vector
+ do i = 1, n
+ lrv = lrv .neqv. (array(i) .ge. 5)
+ end do
+ !$acc end parallel
- !$acc parallel vector_length(vl) num_gangs(1) copy(lresult)
- !$acc loop reduction(.neqv.:lresult)
+ !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(lrc)
+ !$acc loop reduction(.neqv.:lrc) gang worker vector
do i = 1, n
- lresult = lresult .neqv. (array(i) .ge. 5)
+ lrc = lrc .neqv. (array(i) .ge. 5)
end do
!$acc end parallel
@@ -166,5 +395,8 @@ program reduction_3
lvresult = lvresult .neqv. (array(i) .ge. 5)
end do
- if (result.ne.vresult) call abort
+ if (lrg .neqv. lvresult) call abort
+ if (lrw .neqv. lvresult) call abort
+ if (lrv .neqv. lvresult) call abort
+ if (lrc .neqv. lvresult) call abort
end program reduction_3
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/reduction-4.f90 b/libgomp/testsuite/libgomp.oacc-fortran/reduction-4.f90
index 8c99fdb..c3bdaf6 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/reduction-4.f90
+++ b/libgomp/testsuite/libgomp.oacc-fortran/reduction-4.f90
@@ -5,50 +5,108 @@
program reduction_4
implicit none
- integer, parameter :: n = 10, vl = 32
+ integer, parameter :: n = 10, ng = 8, nw = 4, vl = 32
integer :: i
- complex :: vresult, result
+ real :: vresult, rg, rw, rv, rc
complex, dimension (n) :: array
do i = 1, n
array(i) = i
end do
- result = 0
+ !
+ ! '+' reductions
+ !
+
+ rg = 0
+ rw = 0
+ rv = 0
+ rc = 0
vresult = 0
- ! '+' reductions
+ !$acc parallel num_gangs(ng) copy(rg)
+ !$acc loop reduction(+:rg) gang
+ do i = 1, n
+ rg = rg + REAL(array(i))
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_workers(nw) copy(rw)
+ !$acc loop reduction(+:rw) worker
+ do i = 1, n
+ rw = rw + REAL(array(i))
+ end do
+ !$acc end parallel
+
+ !$acc parallel vector_length(vl) copy(rv)
+ !$acc loop reduction(+:rv) vector
+ do i = 1, n
+ rv = rv + REAL(array(i))
+ end do
+ !$acc end parallel
- !$acc parallel vector_length(vl) num_gangs(1) copy(result)
- !$acc loop reduction(+:result)
+ !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(rc)
+ !$acc loop reduction(+:rc) gang worker vector
do i = 1, n
- result = result + array(i)
+ rc = rc + REAL(array(i))
end do
!$acc end parallel
! Verify the results
do i = 1, n
- vresult = vresult + array(i)
+ vresult = vresult + REAL(array(i))
end do
- if (result .ne. vresult) call abort
+ if (rg .ne. vresult) call abort
+ if (rw .ne. vresult) call abort
+ if (rv .ne. vresult) call abort
+ if (rc .ne. vresult) call abort
- result = 1
+ !
+ ! '*' reductions
+ !
+
+ rg = 1
+ rw = 1
+ rv = 1
+ rc = 1
vresult = 1
-! ! '*' reductions
-!
-! !$acc parallel vector_length(vl)
-! !$acc loop reduction(*:result)
-! do i = 1, n
-! result = result * array(i)
-! end do
-! !$acc end parallel
-!
-! ! Verify the results
-! do i = 1, n
-! vresult = vresult * array(i)
-! end do
-!
-! if (result.ne.vresult) call abort
+ !$acc parallel num_gangs(ng) copy(rg)
+ !$acc loop reduction(*:rg) gang
+ do i = 1, n
+ rg = rg * REAL(array(i))
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_workers(nw) copy(rw)
+ !$acc loop reduction(*:rw) worker
+ do i = 1, n
+ rw = rw * REAL(array(i))
+ end do
+ !$acc end parallel
+
+ !$acc parallel vector_length(vl) copy(rv)
+ !$acc loop reduction(*:rv) vector
+ do i = 1, n
+ rv = rv * REAL(array(i))
+ end do
+ !$acc end parallel
+
+ !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(rc)
+ !$acc loop reduction(*:rc) gang worker vector
+ do i = 1, n
+ rc = rc * REAL(array(i))
+ end do
+ !$acc end parallel
+
+ ! Verify the results
+ do i = 1, n
+ vresult = vresult * REAL(array(i))
+ end do
+
+ if (rg .ne. vresult) call abort
+ if (rw .ne. vresult) call abort
+ if (rv .ne. vresult) call abort
+ if (rc .ne. vresult) call abort
end program reduction_4
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/reduction-5.f90 b/libgomp/testsuite/libgomp.oacc-fortran/reduction-5.f90
index ec13e4e..4210648 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/reduction-5.f90
+++ b/libgomp/testsuite/libgomp.oacc-fortran/reduction-5.f90
@@ -1,12 +1,17 @@
! { dg-do run }
+! { dg-additional-options "-w" }
! subroutine reduction
program reduction
integer, parameter :: n = 40, c = 10
- integer :: i, vsum, sum
+ integer :: i, vsum, gs, ws, vs, cs, ns
- call redsub (sum, n, c)
+ call redsub_gang (gs, n, c)
+ call redsub_worker (ws, n, c)
+ call redsub_vector (vs, n, c)
+ call redsub_combined (cs, n, c)
+ call redsub_nested (ns, n, c)
vsum = 0
@@ -15,21 +20,80 @@ program reduction
vsum = vsum + c
end do
- if (sum.ne.vsum) call abort ()
+ if (gs .ne. vsum) call abort ()
+ if (ws .ne. vsum) call abort ()
+ if (vs .ne. vsum) call abort ()
+ if (cs .ne. vsum) call abort ()
+ if (ns .ne. vsum) call abort ()
end program reduction
-subroutine redsub(sum, n, c)
+subroutine redsub_gang(sum, n, c)
integer :: sum, n, c
- integer :: s
- s = 0
+ sum = 0
- !$acc parallel vector_length(32) copyin (n, c) copy (s) num_gangs(1)
- !$acc loop reduction(+:s)
+ !$acc parallel copyin (n, c) num_gangs(n) copy(sum)
+ !$acc loop reduction(+:sum) gang
do i = 1, n
- s = s + c
+ sum = sum + c
end do
!$acc end parallel
+end subroutine redsub_gang
- sum = s
-end subroutine redsub
+subroutine redsub_worker(sum, n, c)
+ integer :: sum, n, c
+
+ sum = 0
+
+ !$acc parallel copyin (n, c) num_workers(4) vector_length (32) copy(sum)
+ !$acc loop reduction(+:sum) worker
+ do i = 1, n
+ sum = sum + c
+ end do
+ !$acc end parallel
+end subroutine redsub_worker
+
+subroutine redsub_vector(sum, n, c)
+ integer :: sum, n, c
+
+ sum = 0
+
+ !$acc parallel copyin (n, c) vector_length(32) copy(sum)
+ !$acc loop reduction(+:sum) vector
+ do i = 1, n
+ sum = sum + c
+ end do
+ !$acc end parallel
+end subroutine redsub_vector
+
+subroutine redsub_combined(sum, n, c)
+ integer :: sum, n, c
+
+ sum = 0
+
+ !$acc parallel num_gangs (8) num_workers (4) vector_length(32) copy(sum)
+ !$acc loop reduction(+:sum) gang worker vector
+ do i = 1, n
+ sum = sum + c
+ end do
+ !$acc end parallel
+end subroutine redsub_combined
+
+subroutine redsub_nested(sum, n, c)
+ integer :: sum, n, c
+ integer :: ii, jj
+
+ ii = n / 10;
+ jj = 10;
+ sum = 0
+
+ !$acc parallel num_gangs (8) copy(sum)
+ !$acc loop reduction(+:sum) gang
+ do i = 1, ii
+ !$acc loop reduction(+:sum) vector
+ do j = 1, jj
+ sum = sum + c
+ end do
+ end do
+ !$acc end parallel
+end subroutine redsub_nested
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/reduction-6.f90 b/libgomp/testsuite/libgomp.oacc-fortran/reduction-6.f90
index 2ff6f5f..f3ed275 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/reduction-6.f90
+++ b/libgomp/testsuite/libgomp.oacc-fortran/reduction-6.f90
@@ -1,30 +1,94 @@
! { dg-do run }
+! { dg-additional-options "-cpp -w" }
program reduction
implicit none
- integer, parameter :: n = 100
- integer :: i, s1, s2, vs1, vs2
+ integer, parameter :: n = 100, n2 = 1000, chunksize = 10
+ integer :: i, gs1, gs2, ws1, ws2, vs1, vs2, cs1, cs2, hs1, hs2
+ integer :: j, red, vred
- s1 = 0
- s2 = 0
+ gs1 = 0
+ gs2 = 0
+ ws1 = 0
+ ws2 = 0
vs1 = 0
vs2 = 0
+ cs1 = 0
+ cs2 = 0
+ hs1 = 0
+ hs2 = 0
- !$acc parallel vector_length (32) copy(s1, s2)
- !$acc loop reduction(+:s1, s2)
+ !$acc parallel num_gangs (1000) copy(gs1, gs2)
+ !$acc loop reduction(+:gs1, gs2) gang
do i = 1, n
- s1 = s1 + 1
- s2 = s2 + 2
+ gs1 = gs1 + 1
+ gs2 = gs2 + 2
end do
!$acc end parallel
- ! Verify the results
+ !$acc parallel num_workers (4) vector_length (32) copy(ws1, ws2)
+ !$acc loop reduction(+:ws1, ws2) worker
+ do i = 1, n
+ ws1 = ws1 + 1
+ ws2 = ws2 + 2
+ end do
+ !$acc end parallel
+
+ !$acc parallel vector_length (32) copy(vs1, vs2)
+ !$acc loop reduction(+:vs1, vs2) vector
do i = 1, n
vs1 = vs1 + 1
vs2 = vs2 + 2
end do
+ !$acc end parallel
+
+ !$acc parallel num_gangs(8) num_workers(4) vector_length(32) copy(cs1, cs2)
+ !$acc loop reduction(+:cs1, cs2) gang worker vector
+ do i = 1, n
+ cs1 = cs1 + 1
+ cs2 = cs2 + 2
+ end do
+ !$acc end parallel
+
+ ! Verify the results on the host
+ do i = 1, n
+ hs1 = hs1 + 1
+ hs2 = hs2 + 2
+ end do
+
+ if (gs1 .ne. hs1) call abort ()
+ if (gs2 .ne. hs2) call abort ()
+
+ if (ws1 .ne. hs1) call abort ()
+ if (ws2 .ne. hs2) call abort ()
+
+ if (vs1 .ne. hs1) call abort ()
+ if (vs2 .ne. hs2) call abort ()
+
+ if (cs1 .ne. hs1) call abort ()
+ if (cs2 .ne. hs2) call abort ()
+
+ ! Nested reductions.
+
+ red = 0
+ vred = 0
+
+ !$acc parallel num_gangs(10) vector_length(32) copy(red)
+ !$acc loop reduction(+:red) gang
+ do i = 1, n/chunksize
+ !$acc loop reduction(+:red) vector
+ do j = 1, chunksize
+ red = red + chunksize
+ end do
+ end do
+ !$acc end parallel
+
+ do i = 1, n/chunksize
+ do j = 1, chunksize
+ vred = vred + chunksize
+ end do
+ end do
- if (s1.ne.vs1) call abort ()
- if (s2.ne.vs2) call abort ()
+ if (red .ne. vred) call abort ()
end program reduction
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/reduction-7.f90 b/libgomp/testsuite/libgomp.oacc-fortran/reduction-7.f90
new file mode 100644
index 0000000..8ec36ad
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/reduction-7.f90
@@ -0,0 +1,88 @@
+! { dg-do run }
+! { dg-additional-options "-w" }
+
+! subroutine reduction with private and firstprivate variables
+
+program reduction
+ integer, parameter :: n = 100
+ integer :: i, j, vsum, cs, arr(n)
+
+ call redsub_private (cs, n, arr)
+ call redsub_bogus (cs, n)
+ call redsub_combined (cs, n, arr)
+
+ vsum = 0
+
+ ! Verify the results
+ do i = 1, n
+ vsum = i
+ do j = 1, n
+ vsum = vsum + 1;
+ end do
+ if (vsum .ne. arr(i)) call abort ()
+ end do
+end program reduction
+
+! This subroutine tests a reduction with an explicit private variable.
+
+subroutine redsub_private(sum, n, arr)
+ integer :: sum, n, arr(n)
+ integer :: i, j, v
+
+ !$acc parallel copyout (arr)
+ !$acc loop gang private (v)
+ do j = 1, n
+ v = j
+
+ !$acc loop vector reduction (+:v)
+ do i = 1, 100
+ v = v + 1
+ end do
+
+ arr(j) = v
+ end do
+ !$acc end parallel
+
+ ! verify the results
+ do i = 1, 10
+ if (arr(i) .ne. 100+i) call abort ()
+ end do
+end subroutine redsub_private
+
+
+! Bogus reduction on an impliclitly firstprivate variable. The results do
+! survive the parallel region. The goal here is to ensure that gfortran
+! doesn't ICE.
+
+subroutine redsub_bogus(sum, n)
+ integer :: sum, n, arr(n)
+ integer :: i
+
+ !$acc parallel
+ !$acc loop gang worker vector reduction (+:sum)
+ do i = 1, n
+ sum = sum + 1
+ end do
+ !$acc end parallel
+end subroutine redsub_bogus
+
+! This reduction involving a firstprivate variable yields legitimate results.
+
+subroutine redsub_combined(sum, n, arr)
+ integer :: sum, n, arr(n)
+ integer :: i, j
+
+ !$acc parallel copy (arr)
+ !$acc loop gang
+ do i = 1, n
+ sum = i;
+
+ !$acc loop reduction(+:sum)
+ do j = 1, n
+ sum = sum + 1
+ end do
+
+ arr(i) = sum
+ end do
+ !$acc end parallel
+end subroutine redsub_combined
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/update-1.f90 b/libgomp/testsuite/libgomp.oacc-fortran/update-1.f90
new file mode 100644
index 0000000..4e1d2c0
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/update-1.f90
@@ -0,0 +1,242 @@
+! { dg-do run }
+! { dg-skip-if "" { *-*-* } { "*" } { "-DACC_MEM_SHARED=0" } }
+
+program update
+ use openacc
+ implicit none
+ integer, parameter :: N = 8
+ integer, parameter :: NDIV2 = N / 2
+ real :: a(N), b(N)
+ integer i
+
+ do i = 1, N
+ a(i) = 3.0
+ b(i) = 0.0
+ end do
+
+ !$acc enter data copyin (a, b)
+
+ !$acc parallel present (a, b)
+ do i = 1, N
+ b(i) = a(i)
+ end do
+ !$acc end parallel
+
+ !$acc update host (a, b)
+
+ do i = 1, N
+ if (a(i) .ne. 3.0) call abort
+ if (b(i) .ne. 3.0) call abort
+ end do
+
+ if (acc_is_present (a) .neqv. .TRUE.) call abort
+ if (acc_is_present (b) .neqv. .TRUE.) call abort
+
+ do i = 1, N
+ a(i) = 5.0
+ b(i) = 1.0
+ end do
+
+ !$acc update device (a, b)
+
+ !$acc parallel present (a, b)
+ do i = 1, N
+ b(i) = a(i)
+ end do
+ !$acc end parallel
+
+ !$acc update host (a, b)
+
+ do i = 1, N
+ if (a(i) .ne. 5.0) call abort
+ if (b(i) .ne. 5.0) call abort
+ end do
+
+ if (acc_is_present (a) .neqv. .TRUE.) call abort
+ if (acc_is_present (b) .neqv. .TRUE.) call abort
+
+ !$acc parallel present (a, b)
+ do i = 1, N
+ b(i) = a(i)
+ end do
+ !$acc end parallel
+
+ !$acc update host (a, b)
+
+ do i = 1, N
+ if (a(i) .ne. 5.0) call abort
+ if (b(i) .ne. 5.0) call abort
+ end do
+
+ if (acc_is_present (a) .neqv. .TRUE.) call abort
+ if (acc_is_present (b) .neqv. .TRUE.) call abort
+
+ do i = 1, N
+ a(i) = 6.0
+ b(i) = 0.0
+ end do
+
+ !$acc update device (a, b)
+
+ do i = 1, N
+ a(i) = 9.0
+ end do
+
+ !$acc parallel present (a, b)
+ do i = 1, N
+ b(i) = a(i)
+ end do
+ !$acc end parallel
+
+ !$acc update host (a, b)
+
+ do i = 1, N
+ if (a(i) .ne. 6.0) call abort
+ if (b(i) .ne. 6.0) call abort
+ end do
+
+ if (acc_is_present (a) .neqv. .TRUE.) call abort
+ if (acc_is_present (b) .neqv. .TRUE.) call abort
+
+ do i = 1, N
+ a(i) = 7.0
+ b(i) = 2.0
+ end do
+
+ !$acc update device (a, b)
+
+ do i = 1, N
+ a(i) = 9.0
+ end do
+
+ !$acc parallel present (a, b)
+ do i = 1, N
+ b(i) = a(i)
+ end do
+ !$acc end parallel
+
+ !$acc update host (a, b)
+
+ do i = 1, N
+ if (a(i) .ne. 7.0) call abort
+ if (b(i) .ne. 7.0) call abort
+ end do
+
+ do i = 1, N
+ a(i) = 9.0
+ end do
+
+ !$acc update device (a)
+
+ !$acc parallel present (a, b)
+ do i = 1, N
+ b(i) = a(i)
+ end do
+ !$acc end parallel
+
+ !$acc update host (a, b)
+
+ do i = 1, N
+ if (a(i) .ne. 9.0) call abort
+ if (b(i) .ne. 9.0) call abort
+ end do
+
+ if (acc_is_present (a) .neqv. .TRUE.) call abort
+ if (acc_is_present (b) .neqv. .TRUE.) call abort
+
+ do i = 1, N
+ a(i) = 5.0
+ end do
+
+ !$acc update device (a)
+
+ do i = 1, N
+ a(i) = 6.0
+ end do
+
+ !$acc update device (a(1:NDIV2))
+
+ !$acc parallel present (a, b)
+ do i = 1, N
+ b(i) = a(i)
+ end do
+ !$acc end parallel
+
+ !$acc update host (a, b)
+
+ do i = 1, NDIV2
+ if (a(i) .ne. 6.0) call abort
+ if (b(i) .ne. 6.0) call abort
+ end do
+
+ do i = NDIV2 + 1, N
+ if (a(i) .ne. 5.0) call abort
+ if (b(i) .ne. 5.0) call abort
+ end do
+
+ if (acc_is_present (a) .neqv. .TRUE.) call abort
+ if (acc_is_present (b) .neqv. .TRUE.) call abort
+
+ do i = 1, N
+ a(i) = 0.0
+ end do
+
+ !$acc update device (a(1:4))
+
+ !$acc parallel present (a)
+ do i = 1, N
+ a(i) = a(i) + 1.0
+ end do
+ !$acc end parallel
+
+ !$acc update host (a(5:N))
+
+ do i = 1, NDIV2
+ if (a(i) .ne. 0.0) call abort
+ end do
+
+ do i = NDIV2 + 1, N
+ if (a(i) .ne. 6.0) call abort
+ end do
+
+ !$acc update host (a(1:4))
+
+ do i = 1, NDIV2
+ if (a(i) .ne. 1.0) call abort
+ end do
+
+ do i = NDIV2 + 1, N
+ if (a(i) .ne. 6.0) call abort
+ end do
+
+ a(3) = 9
+ a(4) = 9
+ a(5) = 9
+ a(6) = 9
+
+ !$acc update device (a(3:6))
+
+ !$acc parallel present (a(1:N))
+ do i = 1, N
+ a(i) = a(i) + 1.0
+ end do
+ !$acc end parallel
+
+ !$acc update host (a(3:6))
+
+ do i = 1, 2
+ if (a(i) .ne. 1.0) call abort
+ end do
+
+ do i = 3, 6
+ if (a(i) .ne. 10.0) call abort
+ end do
+
+ do i = 7, N
+ if (a(i) .ne. 6.0) call abort
+ end do
+
+ !$acc exit data delete (a, b)
+
+end program
+
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index d11f4ce..fb3f1f7 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,3 +1,25 @@
+2016-04-08 Marcel Böhme <boehme.marcel@gmail.com>
+
+ PR c++/69687
+ * cplus-dem.c: Include <limits.h> if available.
+ (INT_MAX): Define if necessary.
+ (remember_type, remember_Ktype, register_Btype, string_need):
+ Abort if we detect cases where we the size of the allocation would
+ overflow.
+
+ PR c++/70492
+ * cplus-dem.c (gnu_special): Handle case where consume_count returns
+ -1.
+
+2016-03-31 Mikhail Maltsev <maltsevm@gmail.com>
+ Marcel Bohme boehme.marcel@gmail.com
+
+ PR c++/67394
+ PR c++/70481
+ * cplus-dem.c (squangle_mop_up): Zero bsize/ksize after freeing
+ btypevec/ktypevec.
+ * testsuite/demangle-expected: Add coverage tests.
+
2016-01-27 Iain Buclaw <ibuclaw@gdcproject.org>
* d-demangle.c (dlang_call_convention): Handle extern Objective-C
diff --git a/libiberty/cplus-dem.c b/libiberty/cplus-dem.c
index c68b981..7514e57 100644
--- a/libiberty/cplus-dem.c
+++ b/libiberty/cplus-dem.c
@@ -56,6 +56,13 @@ void * malloc ();
void * realloc ();
#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#ifndef INT_MAX
+# define INT_MAX (int)(((unsigned int) ~0) >> 1) /* 0x7FFFFFFF */
+#endif
+
#include <demangle.h>
#undef CURRENT_DEMANGLING_STYLE
#define CURRENT_DEMANGLING_STYLE work->options
@@ -1237,11 +1244,13 @@ squangle_mop_up (struct work_stuff *work)
{
free ((char *) work -> btypevec);
work->btypevec = NULL;
+ work->bsize = 0;
}
if (work -> ktypevec != NULL)
{
free ((char *) work -> ktypevec);
work->ktypevec = NULL;
+ work->ksize = 0;
}
}
@@ -2999,6 +3008,11 @@ gnu_special (struct work_stuff *work, const char **mangled, string *declp)
success = 1;
break;
}
+ else if (n == -1)
+ {
+ success = 0;
+ break;
+ }
}
else
{
@@ -4254,6 +4268,8 @@ remember_type (struct work_stuff *work, const char *start, int len)
}
else
{
+ if (work -> typevec_size > INT_MAX / 2)
+ xmalloc_failed (INT_MAX);
work -> typevec_size *= 2;
work -> typevec
= XRESIZEVEC (char *, work->typevec, work->typevec_size);
@@ -4281,6 +4297,8 @@ remember_Ktype (struct work_stuff *work, const char *start, int len)
}
else
{
+ if (work -> ksize > INT_MAX / 2)
+ xmalloc_failed (INT_MAX);
work -> ksize *= 2;
work -> ktypevec
= XRESIZEVEC (char *, work->ktypevec, work->ksize);
@@ -4310,6 +4328,8 @@ register_Btype (struct work_stuff *work)
}
else
{
+ if (work -> bsize > INT_MAX / 2)
+ xmalloc_failed (INT_MAX);
work -> bsize *= 2;
work -> btypevec
= XRESIZEVEC (char *, work->btypevec, work->bsize);
@@ -4764,6 +4784,8 @@ string_need (string *s, int n)
else if (s->e - s->p < n)
{
tem = s->p - s->b;
+ if (n > INT_MAX / 2 - tem)
+ xmalloc_failed (INT_MAX);
n += tem;
n *= 2;
s->b = XRESIZEVEC (char, s->b, n);
diff --git a/libiberty/testsuite/demangle-expected b/libiberty/testsuite/demangle-expected
index aebf01b..e214ee5 100644
--- a/libiberty/testsuite/demangle-expected
+++ b/libiberty/testsuite/demangle-expected
@@ -4421,3 +4421,13 @@ void baz<int>(A<sizeof (foo((int)(), (floatcomplex )00000000_00000000))>*)
--format=gnu-v3
_Z3fooI1FEN1XIXszdtcl1PclcvT__EEE5arrayEE4TypeEv
X<sizeof ((P(((F)())())).array)>::Type foo<F>()
+#
+# Tests a use-after-free problem
+
+_Q.__0
+::Q.(void)
+#
+# Tests a use-after-free problem
+
+_Q10-__9cafebabe.
+cafebabe.::-(void)
diff --git a/libitm/ChangeLog b/libitm/ChangeLog
index 2a3554f..42b4776 100644
--- a/libitm/ChangeLog
+++ b/libitm/ChangeLog
@@ -1,3 +1,11 @@
+2016-03-03 Dominik Vogt <vogt@linux.vnet.ibm.com>
+
+ * config/s390/target.h (TARGET_BEGIN_TRANSACTION_ATTRIBUTE): Define
+ function attribute to disable floating point in begin_transaction() on
+ S/390.
+ * beginend.cc (begin_transaction): Use
+ TARGET_BEGIN_TRANSACTION_ATTRIBUTE.
+
2016-01-22 Torvald Riegel <triegel@redhat.com>
* beginend.cc (GTM::gtm_thread::serial_lock): Put on cacheline
diff --git a/libitm/beginend.cc b/libitm/beginend.cc
index 1a258ad..20b5547 100644
--- a/libitm/beginend.cc
+++ b/libitm/beginend.cc
@@ -149,6 +149,12 @@ choose_code_path(uint32_t prop, abi_dispatch *disp)
return a_runInstrumentedCode;
}
+#ifdef TARGET_BEGIN_TRANSACTION_ATTRIBUTE
+/* This macro can be used to define target specific attributes for this
+ function. For example, S/390 requires floating point to be disabled in
+ begin_transaction. */
+TARGET_BEGIN_TRANSACTION_ATTRIBUTE
+#endif
uint32_t
GTM::gtm_thread::begin_transaction (uint32_t prop, const gtm_jmpbuf *jb)
{
diff --git a/libitm/config/s390/target.h b/libitm/config/s390/target.h
index 44819a4..c9d5203 100644
--- a/libitm/config/s390/target.h
+++ b/libitm/config/s390/target.h
@@ -69,6 +69,9 @@ cpu_relax (void)
/* Number of retries for transient failures. */
#define _HTM_ITM_RETRIES 10
#define USE_HTM_FASTPATH
+#define TARGET_BEGIN_TRANSACTION_ATTRIBUTE \
+ __attribute__ ((target("soft-float")))
+
static inline bool
htm_available ()
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index be4e95c..4fb711b 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,87 @@
+2016-04-12 Edward Smith-Rowland <3dw4rd@verizon.net>
+
+ Document C++17/TR29124 C++ Special Math Functions.
+ * include/bits/specfun.h: Add Doxygen markup.
+
+2016-04-07 Jonathan Wakely <jwakely@redhat.com>
+
+ * testsuite/30_threads/thread/70503.cc: Adjust from xfail to pass.
+
+2016-04-06 Eric Botcazou <ebotcazou@adacore.com>
+
+ * src/Makefile.am (libstdc++-symbols.ver): Remove useless /dev/null.
+ * src/Makefile.in: Regenerate.
+
+2016-04-05 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/70554
+ * acinclude.m4 (GLIBCXX_ENABLE_ATOMIC_BUILTINS): Don't test
+ __atomic_fetch_add for bool.
+ * configure: Regenerate.
+
+ * testsuite/30_threads/thread/70503.cc: Require -static to work.
+
+ PR libstdc++/70503
+ * src/c++11/thread.cc (execute_native_thread_routine,
+ execute_native_thread_routine_compat): Give internal linkage.
+ * testsuite/30_threads/thread/70503.cc: New test.
+
+2016-04-05 Ville Voutilainen <ville.voutilainen@gmail.com>
+
+ PR libstdc++/70437
+ * include/bits/stl_pair.h (_ConstructiblePair,
+ _ImplicitlyConvertiblePair, _MoveConstructiblePair,
+ _ImplicitlyMoveConvertiblePair): Add shortcut conditions
+ for same-type cases.
+ * testsuite/20_util/pair/70437.cc: New.
+
+2016-03-24 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/69945
+ * config/abi/pre/gnu.ver: Add new symbol.
+ * libsupc++/eh_alloc.cc (__gnu_cxx::__freeres): Define.
+ * testsuite/18_support/free_eh_pool.cc: New test.
+
+2016-03-23 Bernd Edlinger <bernd.edlinger@hotmail.de>
+
+ * include/Makefile.am (install-freestanding-headers): Add
+ concept_check.h and move.h to the installed headers.
+ * include/Makefile.in: Regenerated.
+ * include/bits/concept_check.h: Ignore _GLIBCXX_CONCEPT_CHECKS for
+ freestanding implementations.
+ * doc/xml/manual/using.xml (_GLIBCXX_CONCEPT_CHECKS): Mention
+ that this macro has no effect for freestanding implementations.
+ * doc/html/manual/using_macros.html: Likewise.
+
+2016-02-24 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/69939
+ * include/experimental/tuple (__apply_impl): Qualify get and forward.
+
+2016-02-23 Jonathan Wakely <jwakely@redhat.com>
+
+ * doc/xml/manual/using.xml: Document __STDCPP_WANT_MATH_SPEC_FUNCS__.
+ * doc/html/*: Regenerate.
+
+ PR libstdc++/69893
+ * include/tr1/cmath (acosh, asinh, atanh, cbrt, copysign, erf, erfc,
+ exp2, expm1, fdim, fma, fmax, fmin, hypot, ilogb, lgamma, llrint,
+ llround, log1p, log2, logb, lrint, lround, nan, nearbyint, nextafter,
+ nexttoward, remainder, remquo, rint, round, scalbln, scalbn, tgamma,
+ trunc) [__cplusplus >= 201103L]: Import from namespace std.
+ (fabs) [__cplusplus < 201103L]: Import from namespace std.
+ * include/tr1/complex (acosh, asinh, atanh) [__cplusplus >= 201103L]:
+ Likewise.
+ * testsuite/tr1/headers/c++200x/complex.cc: Add std::fabs to global
+ namespace before including TR1 headers.
+ * testsuite/tr1/headers/c++200x/math.cc: New test.
+
+2016-02-23 Bernd Edlinger <bernd.edlinger@hotmail.de>
+
+ PR libstdc++/69881
+ * include/c_global/cstdarg: Undefine __need___va_list.
+ * include/c_global/cstddef: Undefine all kinds of __need_*.
+
2016-02-16 Tim Shen <timshen@google.com>
PR libstdc++/69794
diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4
index 95df24a..b0f88cb 100644
--- a/libstdc++-v3/acinclude.m4
+++ b/libstdc++-v3/acinclude.m4
@@ -3290,7 +3290,7 @@ AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS], [
atomic_type c1;
atomic_type c2;
atomic_type c3(0);
- __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
+ // N.B. __atomic_fetch_add is not supported for bool.
__atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
__ATOMIC_RELAXED);
__atomic_test_and_set(&c1, __ATOMIC_RELAXED);
@@ -3375,7 +3375,7 @@ int main()
atomic_type c1;
atomic_type c2;
atomic_type c3(0);
- __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
+ // N.B. __atomic_fetch_add is not supported for bool.
__atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
__ATOMIC_RELAXED);
__atomic_test_and_set(&c1, __ATOMIC_RELAXED);
diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver
index 41069d1..5c6b0fe 100644
--- a/libstdc++-v3/config/abi/pre/gnu.ver
+++ b/libstdc++-v3/config/abi/pre/gnu.ver
@@ -2148,6 +2148,8 @@ CXXABI_1.3.10 {
_ZGTtNKSt13bad_exceptionD1Ev;
_ZGTtNKSt13bad_exception4whatEv;
+ _ZN9__gnu_cxx9__freeresEv;
+
} CXXABI_1.3.9;
# Symbols in the support library (libsupc++) supporting transactional memory.
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index acbc6a6..41797a9 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -15229,7 +15229,7 @@ typedef bool atomic_type;
atomic_type c1;
atomic_type c2;
atomic_type c3(0);
- __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
+ // N.B. __atomic_fetch_add is not supported for bool.
__atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
__ATOMIC_RELAXED);
__atomic_test_and_set(&c1, __ATOMIC_RELAXED);
@@ -15395,7 +15395,7 @@ int main()
atomic_type c1;
atomic_type c2;
atomic_type c3(0);
- __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
+ // N.B. __atomic_fetch_add is not supported for bool.
__atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
__ATOMIC_RELAXED);
__atomic_test_and_set(&c1, __ATOMIC_RELAXED);
diff --git a/libstdc++-v3/doc/html/manual/using_macros.html b/libstdc++-v3/doc/html/manual/using_macros.html
index 6b1fc1e..0998b38 100644
--- a/libstdc++-v3/doc/html/manual/using_macros.html
+++ b/libstdc++-v3/doc/html/manual/using_macros.html
@@ -66,7 +66,8 @@
<code class="code">--enable-concept-checks</code>. When defined, performs
compile-time checking on certain template instantiations to
detect violations of the requirements of the standard. This
- is described in more detail in
+ macro has no effect for freestanding implementations.
+ This is described in more detail in
<a class="link" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks">Compile Time Checks</a>.
</p></dd><dt><span class="term"><code class="code">_GLIBCXX_ASSERTIONS</code></span></dt><dd><p>
Undefined by default. When defined, enables extra error checking in
@@ -89,4 +90,6 @@
</p></dd><dt><span class="term"><code class="code">_GLIBCXX_PROFILE</code></span></dt><dd><p>Undefined by default. When defined, compiles user code
using the <a class="link" href="profile_mode.html" title="Chapter 19. Profile Mode">profile
mode</a>.
+ </p></dd><dt><span class="term"><code class="code">__STDCPP_WANT_MATH_SPEC_FUNCS__</code></span></dt><dd><p>Undefined by default. When defined to a non-zero integer constant,
+ enables support for ISO/IEC 29124 Special Math Functions.
</p></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_headers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_dual_abi.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Headers </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Dual ABI</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/libstdc++-v3/doc/xml/manual/using.xml b/libstdc++-v3/doc/xml/manual/using.xml
index 96ae686..231028e 100644
--- a/libstdc++-v3/doc/xml/manual/using.xml
+++ b/libstdc++-v3/doc/xml/manual/using.xml
@@ -908,7 +908,8 @@ g++ -Winvalid-pch -I. -include stdc++.h -H -g -O2 hello.cc -o test.exe
<code>--enable-concept-checks</code>. When defined, performs
compile-time checking on certain template instantiations to
detect violations of the requirements of the standard. This
- is described in more detail in
+ macro has no effect for freestanding implementations.
+ This is described in more detail in
<link linkend="manual.ext.compile_checks">Compile Time Checks</link>.
</para>
</listitem></varlistentry>
@@ -955,6 +956,13 @@ g++ -Winvalid-pch -I. -include stdc++.h -H -g -O2 hello.cc -o test.exe
mode</link>.
</para>
</listitem></varlistentry>
+
+ <varlistentry><term><code>__STDCPP_WANT_MATH_SPEC_FUNCS__</code></term>
+ <listitem>
+ <para>Undefined by default. When defined to a non-zero integer constant,
+ enables support for ISO/IEC 29124 Special Math Functions.
+ </para>
+ </listitem></varlistentry>
</variablelist>
</section>
diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am
index 0b34c3c..9cd6a85 100644
--- a/libstdc++-v3/include/Makefile.am
+++ b/libstdc++-v3/include/Makefile.am
@@ -1331,7 +1331,7 @@ endif
# libsupc++, so only the others and the sub-includes are copied here.
install-freestanding-headers:
$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/bits
- for file in c++0x_warning.h atomic_base.h; do \
+ for file in c++0x_warning.h atomic_base.h concept_check.h move.h; do \
$(INSTALL_DATA) ${glibcxx_srcdir}/include/bits/$${file} $(DESTDIR)${gxx_include_dir}/bits; done
$(mkinstalldirs) $(DESTDIR)${host_installdir}
for file in ${host_srcdir}/os_defines.h ${host_builddir}/c++config.h \
diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in
index 3bbd3d7..43735f9 100644
--- a/libstdc++-v3/include/Makefile.in
+++ b/libstdc++-v3/include/Makefile.in
@@ -1753,7 +1753,7 @@ ${pch3_output}: ${pch3_source} ${pch2_output}
# libsupc++, so only the others and the sub-includes are copied here.
install-freestanding-headers:
$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/bits
- for file in c++0x_warning.h atomic_base.h; do \
+ for file in c++0x_warning.h atomic_base.h concept_check.h move.h; do \
$(INSTALL_DATA) ${glibcxx_srcdir}/include/bits/$${file} $(DESTDIR)${gxx_include_dir}/bits; done
$(mkinstalldirs) $(DESTDIR)${host_installdir}
for file in ${host_srcdir}/os_defines.h ${host_builddir}/c++config.h \
diff --git a/libstdc++-v3/include/bits/concept_check.h b/libstdc++-v3/include/bits/concept_check.h
index 5c4fb4c..11092c0 100644
--- a/libstdc++-v3/include/bits/concept_check.h
+++ b/libstdc++-v3/include/bits/concept_check.h
@@ -41,8 +41,9 @@
// Concept-checking code is off by default unless users turn it on via
// configure options or editing c++config.h.
+// It is not supported for freestanding implementations.
-#ifndef _GLIBCXX_CONCEPT_CHECKS
+#if !defined(_GLIBCXX_CONCEPT_CHECKS) || !_GLIBCXX_HOSTED
#define __glibcxx_function_requires(...)
#define __glibcxx_class_requires(_a,_b)
diff --git a/libstdc++-v3/include/bits/specfun.h b/libstdc++-v3/include/bits/specfun.h
index 28c9d30..77bbda3 100644
--- a/libstdc++-v3/include/bits/specfun.h
+++ b/libstdc++-v3/include/bits/specfun.h
@@ -1,6 +1,6 @@
// Mathematical Special Functions for -*- C++ -*-
-// Copyright (C) 2006-2015 Free Software Foundation, Inc.
+// Copyright (C) 2006-2016 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -34,12 +34,14 @@
#include <bits/c++config.h>
+#define __STDCPP_MATH_SPEC_FUNCS__ 201003L
+
+#define __cpp_lib_math_special_functions 201603L
+
#if __STDCPP_WANT_MATH_SPEC_FUNCS__ == 0
# error include <cmath> and define __STDCPP_WANT_MATH_SPEC_FUNCS__
#endif
-#define __STDCPP_MATH_SPEC_FUNCS__ 201003L
-
#include <bits/stl_algobase.h>
#include <limits>
#include <type_traits>
@@ -69,16 +71,182 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @{
*/
+ /**
+ * @mainpage Mathematical Special Functions
+ *
+ * @section intro Introduction and History
+ * The first significant library upgrade on the road to C++2011,
+ * <a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1836.pdf">
+ * TR1</a>, included a set of 23 mathematical functions that significantly
+ * extended the standard transcendental functions inherited from C and declared
+ * in @<cmath@>.
+ *
+ * Although most components from TR1 were eventually adopted for C++11 these
+ * math functions were left behind out of concern for implementability.
+ * The math functions were published as a separate international standard
+ * <a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2010/n3060.pdf">
+ * IS 29124 - Extensions to the C++ Library to Support Mathematical Special
+ * Functions</a>.
+ *
+ * For C++17 these functions were incorporated into the main standard.
+ *
+ * @section contents Contents
+ * The following functions are implemented in namespace @c std:
+ * - @ref assoc_laguerre "assoc_laguerre - Associated Laguerre functions"
+ * - @ref assoc_legendre "assoc_legendre - Associated Legendre functions"
+ * - @ref beta "beta - Beta functions"
+ * - @ref comp_ellint_1 "comp_ellint_1 - Complete elliptic functions of the first kind"
+ * - @ref comp_ellint_2 "comp_ellint_2 - Complete elliptic functions of the second kind"
+ * - @ref comp_ellint_3 "comp_ellint_3 - Complete elliptic functions of the third kind"
+ * - @ref cyl_bessel_i "cyl_bessel_i - Regular modified cylindrical Bessel functions"
+ * - @ref cyl_bessel_j "cyl_bessel_j - Cylindrical Bessel functions of the first kind"
+ * - @ref cyl_bessel_k "cyl_bessel_k - Irregular modified cylindrical Bessel functions"
+ * - @ref cyl_neumann "cyl_neumann - Cylindrical Neumann functions or Cylindrical Bessel functions of the second kind"
+ * - @ref ellint_1 "ellint_1 - Incomplete elliptic functions of the first kind"
+ * - @ref ellint_2 "ellint_2 - Incomplete elliptic functions of the second kind"
+ * - @ref ellint_3 "ellint_3 - Incomplete elliptic functions of the third kind"
+ * - @ref expint "expint - The exponential integral"
+ * - @ref hermite "hermite - Hermite polynomials"
+ * - @ref laguerre "laguerre - Laguerre functions"
+ * - @ref legendre "legendre - Legendre polynomials"
+ * - @ref riemann_zeta "riemann_zeta - The Riemann zeta function"
+ * - @ref sph_bessel "sph_bessel - Spherical Bessel functions"
+ * - @ref sph_legendre "sph_legendre - Spherical Legendre functions"
+ * - @ref sph_neumann "sph_neumann - Spherical Neumann functions"
+ *
+ * The hypergeometric functions were stricken from the TR29124 and C++17
+ * versions of this math library because of implementation concerns.
+ * However, since they were in the TR1 version and since they are popular
+ * we kept them as an extension in namespace @c __gnu_cxx:
+ * - @ref conf_hyperg "conf_hyperg - Confluent hypergeometric functions"
+ * - @ref hyperg "hyperg - Hypergeometric functions"
+ *
+ * @section general General Features
+ *
+ * @subsection promotion Argument Promotion
+ * The arguments suppled to the non-suffixed functions will be promoted
+ * according to the following rules:
+ * 1. If any argument intended to be floating opint is given an integral value
+ * That integral value is promoted to double.
+ * 2. All floating point arguments are promoted up to the largest floating
+ * point precision among them.
+ *
+ * @subsection NaN NaN Arguments
+ * If any of the floating point arguments supplied to these functions is
+ * invalid or NaN (std::numeric_limits<Tp>::quiet_NaN),
+ * the value NaN is returned.
+ *
+ * @section impl Implementation
+ *
+ * We strive to implement the underlying math with type generic algorithms
+ * to the greatest extent possible. In practice, the functions are thin
+ * wrappers that dispatch to function templates. Type dependence is
+ * controlled with std::numeric_limits and functions thereof.
+ *
+ * We don't promote @c float to @c double or @c double to <tt>long double</tt>
+ * reflexively. The goal is for @c float functions to operate more quickly,
+ * at the cost of @c float accuracy and possibly a smaller domain of validity.
+ * Similaryly, <tt>long double</tt> should give you more dynamic range
+ * and slightly more pecision than @c double on many systems.
+ *
+ * @section testing Testing
+ *
+ * These functions have been tested against equivalent implementations
+ * from the <a href="http://www.gnu.org/software/gsl">
+ * Gnu Scientific Library, GSL</a> and
+ * <a href="http://www.boost.org/doc/libs/1_60_0/libs/math/doc/html/index.html>Boost</a>
+ * and the ratio
+ * @f[
+ * \frac{|f - f_{test}|}{|f_{test}|}
+ * @f]
+ * is generally found to be within 10^-15 for 64-bit double on linux-x86_64 systems
+ * over most of the ranges of validity.
+ *
+ * @todo Provide accuracy comparisons on a per-function basis for a small
+ * number of targets.
+ *
+ * @section bibliography General Bibliography
+ *
+ * @see Abramowitz and Stegun: Handbook of Mathematical Functions,
+ * with Formulas, Graphs, and Mathematical Tables
+ * Edited by Milton Abramowitz and Irene A. Stegun,
+ * National Bureau of Standards Applied Mathematics Series - 55
+ * Issued June 1964, Tenth Printing, December 1972, with corrections
+ * Electronic versions of A&S abound including both pdf and navigable html.
+ * @see for example http://people.math.sfu.ca/~cbm/aands/
+ *
+ * @see The old A&S has been redone as the
+ * NIST Digital Library of Mathematical Functions: http://dlmf.nist.gov/
+ * This version is far more navigable and includes more recent work.
+ *
+ * @see An Atlas of Functions: with Equator, the Atlas Function Calculator
+ * 2nd Edition, by Oldham, Keith B., Myland, Jan, Spanier, Jerome
+ *
+ * @see Asymptotics and Special Functions by Frank W. J. Olver,
+ * Academic Press, 1974
+ *
+ * @see Numerical Recipes in C, The Art of Scientific Computing,
+ * by William H. Press, Second Ed., Saul A. Teukolsky,
+ * William T. Vetterling, and Brian P. Flannery,
+ * Cambridge University Press, 1992
+ *
+ * @see The Special Functions and Their Approximations: Volumes 1 and 2,
+ * by Yudell L. Luke, Academic Press, 1969
+ */
+
// Associated Laguerre polynomials
+ /**
+ * Return the associated Laguerre polynomial of order @c n,
+ * degree @c m: @f$ L_n^m(x) @f$ for @c float argument.
+ *
+ * @see assoc_laguerre for more details.
+ */
inline float
assoc_laguerref(unsigned int __n, unsigned int __m, float __x)
{ return __detail::__assoc_laguerre<float>(__n, __m, __x); }
+ /**
+ * Return the associated Laguerre polynomial of order @c n,
+ * degree @c m: @f$ L_n^m(x) @f$.
+ *
+ * @see assoc_laguerre for more details.
+ */
inline long double
assoc_laguerrel(unsigned int __n, unsigned int __m, long double __x)
{ return __detail::__assoc_laguerre<long double>(__n, __m, __x); }
+ /**
+ * Return the associated Laguerre polynomial of nonnegative order @c n,
+ * nonnegative degree @c m and real argument @c x: @f$ L_n^m(x) @f$.
+ *
+ * The associated Laguerre function of real degree @f$ \alpha @f$,
+ * @f$ L_n^\alpha(x) @f$, is defined by
+ * @f[
+ * 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
+ * @f$ {}_1F_1(a; c; x) @f$ is the confluent hypergeometric function.
+ *
+ * The associated Laguerre polynomial is defined for integral
+ * degree @f$ \alpha = m @f$ by:
+ * @f[
+ * L_n^m(x) = (-1)^m \frac{d^m}{dx^m} L_{n + m}(x)
+ * @f]
+ * where the Laguerre polynomial is defined by:
+ * @f[
+ * L_n(x) = \frac{e^x}{n!} \frac{d^n}{dx^n} (x^ne^{-x})
+ * @f]
+ * and @f$ x >= 0 @f$.
+ * @see laguerre for details of the Laguerre function of degree @c n
+ *
+ * @tparam _Tp The floating-point type of the argument @c __x.
+ * @param __n The order of the Laguerre function, <tt>__n >= 0</tt>.
+ * @param __m The degree of the Laguerre function, <tt>__m >= 0</tt>.
+ * @param __x The argument of the Laguerre function, <tt>__x >= 0</tt>.
+ * @throw std::domain_error if <tt>__x < 0</tt>.
+ */
template<typename _Tp>
inline typename __gnu_cxx::__promote<_Tp>::__type
assoc_laguerre(unsigned int __n, unsigned int __m, _Tp __x)
@@ -89,14 +257,42 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Associated Legendre functions
+ /**
+ * Return the associated Legendre function of degree @c l and order @c m
+ * for @c float argument.
+ *
+ * @see assoc_legendre for more details.
+ */
inline float
assoc_legendref(unsigned int __l, unsigned int __m, float __x)
{ return __detail::__assoc_legendre_p<float>(__l, __m, __x); }
+ /**
+ * Return the associated Legendre function of degree @c l and order @c m.
+ *
+ * @see assoc_legendre for more details.
+ */
inline long double
assoc_legendrel(unsigned int __l, unsigned int __m, long double __x)
{ return __detail::__assoc_legendre_p<long double>(__l, __m, __x); }
+
+ /**
+ * Return the associated Legendre function of degree @c l and order @c 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]
+ * @see legendre for details of the Legendre function of degree @c l
+ *
+ * @tparam _Tp The floating-point type of the argument @c __x.
+ * @param __l The degree <tt>__l >= 0</tt>.
+ * @param __m The order <tt>__m <= l</tt>.
+ * @param __x The argument, <tt>abs(__x) <= 1</tt>.
+ * @throw std::domain_error if <tt>abs(__x) > 1</tt>.
+ */
template<typename _Tp>
inline typename __gnu_cxx::__promote<_Tp>::__type
assoc_legendre(unsigned int __l, unsigned int __m, _Tp __x)
@@ -107,32 +303,89 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Beta functions
+ /**
+ * Return the beta function, @f$ B(a,b) @f$, for @c float parameters @c a, @c b.
+ *
+ * @see beta for more details.
+ */
inline float
- betaf(float __x, float __y)
- { return __detail::__beta<float>(__x, __y); }
+ betaf(float __a, float __b)
+ { return __detail::__beta<float>(__a, __b); }
+ /**
+ * Return the beta function, @f$B(a,b)@f$, for long double
+ * parameters @c a, @c b.
+ *
+ * @see beta for more details.
+ */
inline long double
- betal(long double __x, long double __y)
- { return __detail::__beta<long double>(__x, __y); }
+ betal(long double __a, long double __b)
+ { return __detail::__beta<long double>(__a, __b); }
- template<typename _Tpx, typename _Tpy>
- inline typename __gnu_cxx::__promote_2<_Tpx, _Tpy>::__type
- beta(_Tpx __x, _Tpy __y)
+ /**
+ * Return the beta function, @f$B(a,b)@f$, for real parameters @c a, @c b.
+ *
+ * The beta function is defined by
+ * @f[
+ * B(a,b) = \int_0^1 t^{a - 1} (1 - t)^{b - 1} dt
+ * = \frac{\Gamma(a)\Gamma(b)}{\Gamma(a+b)}
+ * @f]
+ * where @f$ a > 0 @f$ and @f$ b > 0 @f$
+ *
+ * @tparam _Tpa The floating-point type of the parameter @c __a.
+ * @tparam _Tpb The floating-point type of the parameter @c __b.
+ * @param __a The first argument of the beta function, <tt> __a > 0 </tt>.
+ * @param __b The second argument of the beta function, <tt> __b > 0 </tt>.
+ * @throw std::domain_error if <tt> __a < 0 </tt> or <tt> __b < 0 </tt>.
+ */
+ template<typename _Tpa, typename _Tpb>
+ inline typename __gnu_cxx::__promote_2<_Tpa, _Tpb>::__type
+ beta(_Tpa __a, _Tpb __b)
{
- typedef typename __gnu_cxx::__promote_2<_Tpx, _Tpy>::__type __type;
- return __detail::__beta<__type>(__x, __y);
+ typedef typename __gnu_cxx::__promote_2<_Tpa, _Tpb>::__type __type;
+ return __detail::__beta<__type>(__a, __b);
}
// Complete elliptic integrals of the first kind
+ /**
+ * Return the complete elliptic integral of the first kind @f$ E(k) @f$
+ * for @c float modulus @c k.
+ *
+ * @see comp_ellint_1 for details.
+ */
inline float
comp_ellint_1f(float __k)
{ return __detail::__comp_ellint_1<float>(__k); }
+ /**
+ * Return the complete elliptic integral of the first kind @f$ E(k) @f$
+ * for long double modulus @c k.
+ *
+ * @see comp_ellint_1 for details.
+ */
inline long double
comp_ellint_1l(long double __k)
{ return __detail::__comp_ellint_1<long double>(__k); }
+ /**
+ * Return the complete elliptic integral of the first kind
+ * @f$ K(k) @f$ for real modulus @c k.
+ *
+ * The complete elliptic integral of the first kind is defined as
+ * @f[
+ * K(k) = F(k,\pi/2) = \int_0^{\pi/2}\frac{d\theta}
+ * {\sqrt{1 - k^2 sin^2\theta}}
+ * @f]
+ * where @f$ F(k,\phi) @f$ is the incomplete elliptic integral of the
+ * first kind and the modulus @f$ |k| <= 1 @f$.
+ * @see ellint_1 for details of the incomplete elliptic function
+ * of the first kind.
+ *
+ * @tparam _Tp The floating-point type of the modulus @c __k.
+ * @param __k The modulus, <tt> abs(__k) <= 1 </tt>
+ * @throw std::domain_error if <tt> abs(__k) > 1 </tt>.
+ */
template<typename _Tp>
inline typename __gnu_cxx::__promote<_Tp>::__type
comp_ellint_1(_Tp __k)
@@ -143,14 +396,43 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Complete elliptic integrals of the second kind
+ /**
+ * Return the complete elliptic integral of the second kind @f$ E(k) @f$
+ * for @c float modulus @c k.
+ *
+ * @see comp_ellint_2 for details.
+ */
inline float
comp_ellint_2f(float __k)
{ return __detail::__comp_ellint_2<float>(__k); }
+ /**
+ * Return the complete elliptic integral of the second kind @f$ E(k) @f$
+ * for long double modulus @c k.
+ *
+ * @see comp_ellint_2 for details.
+ */
inline long double
comp_ellint_2l(long double __k)
{ return __detail::__comp_ellint_2<long double>(__k); }
+ /**
+ * Return the complete elliptic integral of the second kind @f$ E(k) @f$
+ * for real modulus @c k.
+ *
+ * The complete elliptic integral of the second kind is defined as
+ * @f[
+ * E(k) = E(k,\pi/2) = \int_0^{\pi/2}\sqrt{1 - k^2 sin^2\theta}
+ * @f]
+ * where @f$ E(k,\phi) @f$ is the incomplete elliptic integral of the
+ * second kind and the modulus @f$ |k| <= 1 @f$.
+ * @see ellint_2 for details of the incomplete elliptic function
+ * of the second kind.
+ *
+ * @tparam _Tp The floating-point type of the modulus @c __k.
+ * @param __k The modulus, @c abs(__k) <= 1
+ * @throw std::domain_error if @c abs(__k) > 1.
+ */
template<typename _Tp>
inline typename __gnu_cxx::__promote<_Tp>::__type
comp_ellint_2(_Tp __k)
@@ -161,14 +443,47 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Complete elliptic integrals of the third kind
+ /**
+ * @brief Return the complete elliptic integral of the third kind
+ * @f$ \Pi(k,\nu) @f$ for @c float modulus @c k.
+ *
+ * @see comp_ellint_3 for details.
+ */
inline float
comp_ellint_3f(float __k, float __nu)
{ return __detail::__comp_ellint_3<float>(__k, __nu); }
+ /**
+ * @brief Return the complete elliptic integral of the third kind
+ * @f$ \Pi(k,\nu) @f$ for <tt>long double</tt> modulus @c k.
+ *
+ * @see comp_ellint_3 for details.
+ */
inline long double
comp_ellint_3l(long double __k, long double __nu)
{ return __detail::__comp_ellint_3<long double>(__k, __nu); }
+ /**
+ * Return the complete elliptic integral of the third kind
+ * @f$ \Pi(k,\nu) = \Pi(k,\nu,\pi/2) @f$ for real modulus @c k.
+ *
+ * The complete elliptic integral of the third kind is defined as
+ * @f[
+ * \Pi(k,\nu) = \Pi(k,\nu,\pi/2) = \int_0^{\pi/2}
+ * \frac{d\theta}
+ * {(1 - \nu \sin^2\theta)\sqrt{1 - k^2 \sin^2\theta}}
+ * @f]
+ * where @f$ \Pi(k,\nu,\phi) @f$ is the incomplete elliptic integral of the
+ * second kind and the modulus @f$ |k| <= 1 @f$.
+ * @see ellint_3 for details of the incomplete elliptic function
+ * of the third kind.
+ *
+ * @tparam _Tp The floating-point type of the modulus @c __k.
+ * @tparam _Tpn The floating-point type of the argument @c __nu.
+ * @param __k The modulus, @c abs(__k) <= 1
+ * @param __nu The argument
+ * @throw std::domain_error if @c abs(__k) > 1.
+ */
template<typename _Tp, typename _Tpn>
inline typename __gnu_cxx::__promote_2<_Tp, _Tpn>::__type
comp_ellint_3(_Tp __k, _Tpn __nu)
@@ -179,14 +494,42 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Regular modified cylindrical Bessel functions
+ /**
+ * Return the regular modified Bessel function @f$ I_{\nu}(x) @f$
+ * for @c float order @f$ \nu @f$ and argument @f$ x >= 0 @f$.
+ *
+ * @see cyl_bessel_i for setails.
+ */
inline float
cyl_bessel_if(float __nu, float __x)
{ return __detail::__cyl_bessel_i<float>(__nu, __x); }
+ /**
+ * Return the regular modified Bessel function @f$ I_{\nu}(x) @f$
+ * for <tt>long double</tt> order @f$ \nu @f$ and argument @f$ x >= 0 @f$.
+ *
+ * @see cyl_bessel_i for setails.
+ */
inline long double
cyl_bessel_il(long double __nu, long double __x)
{ return __detail::__cyl_bessel_i<long double>(__nu, __x); }
+ /**
+ * Return the regular modified Bessel function @f$ I_{\nu}(x) @f$
+ * for real order @f$ \nu @f$ and argument @f$ x >= 0 @f$.
+ *
+ * The regular modified cylindrical Bessel function is:
+ * @f[
+ * I_{\nu}(x) = i^{-\nu}J_\nu(ix) = \sum_{k=0}^{\infty}
+ * \frac{(x/2)^{\nu + 2k}}{k!\Gamma(\nu+k+1)}
+ * @f]
+ *
+ * @tparam _Tpnu The floating-point type of the order @c __nu.
+ * @tparam _Tp The floating-point type of the argument @c __x.
+ * @param __nu The order
+ * @param __x The argument, <tt> __x >= 0 </tt>
+ * @throw std::domain_error if <tt> __x < 0 </tt>.
+ */
template<typename _Tpnu, typename _Tp>
inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type
cyl_bessel_i(_Tpnu __nu, _Tp __x)
@@ -197,14 +540,42 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Cylindrical Bessel functions (of the first kind)
+ /**
+ * Return the Bessel function of the first kind @f$ J_{\nu}(x) @f$
+ * for @c float order @f$ \nu @f$ and argument @f$ x >= 0 @f$.
+ *
+ * @see cyl_bessel_j for setails.
+ */
inline float
cyl_bessel_jf(float __nu, float __x)
{ return __detail::__cyl_bessel_j<float>(__nu, __x); }
+ /**
+ * Return the Bessel function of the first kind @f$ J_{\nu}(x) @f$
+ * for <tt>long double</tt> order @f$ \nu @f$ and argument @f$ x >= 0 @f$.
+ *
+ * @see cyl_bessel_j for setails.
+ */
inline long double
cyl_bessel_jl(long double __nu, long double __x)
{ return __detail::__cyl_bessel_j<long double>(__nu, __x); }
+ /**
+ * Return the Bessel function @f$ J_{\nu}(x) @f$ of real order @f$ \nu @f$
+ * and argument @f$ x >= 0 @f$.
+ *
+ * The cylindrical Bessel function is:
+ * @f[
+ * J_{\nu}(x) = \sum_{k=0}^{\infty}
+ * \frac{(-1)^k (x/2)^{\nu + 2k}}{k!\Gamma(\nu+k+1)}
+ * @f]
+ *
+ * @tparam _Tpnu The floating-point type of the order @c __nu.
+ * @tparam _Tp The floating-point type of the argument @c __x.
+ * @param __nu The order
+ * @param __x The argument, <tt> __x >= 0 </tt>
+ * @throw std::domain_error if <tt> __x < 0 </tt>.
+ */
template<typename _Tpnu, typename _Tp>
inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type
cyl_bessel_j(_Tpnu __nu, _Tp __x)
@@ -215,14 +586,48 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Irregular modified cylindrical Bessel functions
+ /**
+ * Return the irregular modified Bessel function @f$ K_{\nu}(x) @f$
+ * for @c float order @f$ \nu @f$ and argument @f$ x >= 0 @f$.
+ *
+ * @see cyl_bessel_k for setails.
+ */
inline float
cyl_bessel_kf(float __nu, float __x)
{ return __detail::__cyl_bessel_k<float>(__nu, __x); }
+ /**
+ * Return the irregular modified Bessel function @f$ K_{\nu}(x) @f$
+ * for <tt>long double</tt> order @f$ \nu @f$ and argument @f$ x >= 0 @f$.
+ *
+ * @see cyl_bessel_k for setails.
+ */
inline long double
cyl_bessel_kl(long double __nu, long double __x)
{ return __detail::__cyl_bessel_k<long double>(__nu, __x); }
+ /**
+ * Return the irregular modified Bessel function @f$ K_{\nu}(x) @f$
+ * of real order @f$ \nu @f$ and argument @f$ x @f$.
+ *
+ * The irregular modified Bessel function is defined by:
+ * @f[
+ * K_{\nu}(x) = \frac{\pi}{2}
+ * \frac{I_{-\nu}(x) - I_{\nu}(x)}{\sin \nu\pi}
+ * @f]
+ * where for integral @f$ \nu = n @f$ a limit is taken:
+ * @f$ lim_{\nu \to n} @f$.
+ * For negative argument we have simply:
+ * @f[
+ * K_{-\nu}(x) = K_{\nu}(x)
+ * @f]
+ *
+ * @tparam _Tpnu The floating-point type of the order @c __nu.
+ * @tparam _Tp The floating-point type of the argument @c __x.
+ * @param __nu The order
+ * @param __x The argument, <tt> __x >= 0 </tt>
+ * @throw std::domain_error if <tt> __x < 0 </tt>.
+ */
template<typename _Tpnu, typename _Tp>
inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type
cyl_bessel_k(_Tpnu __nu, _Tp __x)
@@ -233,14 +638,44 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Cylindrical Neumann functions
+ /**
+ * Return the Neumann function @f$ N_{\nu}(x) @f$
+ * of @c float order @f$ \nu @f$ and argument @f$ x @f$.
+ *
+ * @see cyl_neumann for setails.
+ */
inline float
cyl_neumannf(float __nu, float __x)
{ return __detail::__cyl_neumann_n<float>(__nu, __x); }
+ /**
+ * Return the Neumann function @f$ N_{\nu}(x) @f$
+ * of <tt>long double</tt> order @f$ \nu @f$ and argument @f$ x @f$.
+ *
+ * @see cyl_neumann for setails.
+ */
inline long double
cyl_neumannl(long double __nu, long double __x)
{ return __detail::__cyl_neumann_n<long double>(__nu, __x); }
+ /**
+ * Return the Neumann function @f$ N_{\nu}(x) @f$
+ * of real order @f$ \nu @f$ and argument @f$ x >= 0 @f$.
+ *
+ * The Neumann function is defined by:
+ * @f[
+ * N_{\nu}(x) = \frac{J_{\nu}(x) \cos \nu\pi - J_{-\nu}(x)}
+ * {\sin \nu\pi}
+ * @f]
+ * where @f$ x >= 0 @f$ and for integral order @f$ \nu = n @f$
+ * a limit is taken: @f$ lim_{\nu \to n} @f$.
+ *
+ * @tparam _Tpnu The floating-point type of the order @c __nu.
+ * @tparam _Tp The floating-point type of the argument @c __x.
+ * @param __nu The order
+ * @param __x The argument, <tt> __x >= 0 </tt>
+ * @throw std::domain_error if <tt> __x < 0 </tt>.
+ */
template<typename _Tpnu, typename _Tp>
inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type
cyl_neumann(_Tpnu __nu, _Tp __x)
@@ -251,14 +686,44 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Incomplete elliptic integrals of the first kind
+ /**
+ * Return the incomplete elliptic integral of the first kind @f$ E(k,\phi) @f$
+ * for @c float modulus @f$ k @f$ and angle @f$ \phi @f$.
+ *
+ * @see ellint_1 for details.
+ */
inline float
ellint_1f(float __k, float __phi)
{ return __detail::__ellint_1<float>(__k, __phi); }
+ /**
+ * Return the incomplete elliptic integral of the first kind @f$ E(k,\phi) @f$
+ * for <tt>long double</tt> modulus @f$ k @f$ and angle @f$ \phi @f$.
+ *
+ * @see ellint_1 for details.
+ */
inline long double
ellint_1l(long double __k, long double __phi)
{ return __detail::__ellint_1<long double>(__k, __phi); }
+ /**
+ * Return the incomplete elliptic integral of the first kind @f$ F(k,\phi) @f$
+ * for @c real modulus @f$ k @f$ and angle @f$ \phi @f$.
+ *
+ * The incomplete elliptic integral of the first kind is defined as
+ * @f[
+ * F(k,\phi) = \int_0^{\phi}\frac{d\theta}
+ * {\sqrt{1 - k^2 sin^2\theta}}
+ * @f]
+ * For @f$ \phi= \pi/2 @f$ this becomes the complete elliptic integral of
+ * the first kind, @f$ K(k) @f$. @see comp_ellint_1.
+ *
+ * @tparam _Tp The floating-point type of the modulus @c __k.
+ * @tparam _Tpp The floating-point type of the angle @c __phi.
+ * @param __k The modulus, <tt> abs(__k) <= 1 </tt>
+ * @param __phi The integral limit argument in radians
+ * @throw std::domain_error if <tt> abs(__k) > 1 </tt>.
+ */
template<typename _Tp, typename _Tpp>
inline typename __gnu_cxx::__promote_2<_Tp, _Tpp>::__type
ellint_1(_Tp __k, _Tpp __phi)
@@ -269,14 +734,44 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Incomplete elliptic integrals of the second kind
+ /**
+ * @brief Return the incomplete elliptic integral of the second kind
+ * @f$ E(k,\phi) @f$ for @c float argument.
+ *
+ * @see ellint_2 for details.
+ */
inline float
ellint_2f(float __k, float __phi)
{ return __detail::__ellint_2<float>(__k, __phi); }
+ /**
+ * @brief Return the incomplete elliptic integral of the second kind
+ * @f$ E(k,\phi) @f$.
+ *
+ * @see ellint_2 for details.
+ */
inline long double
ellint_2l(long double __k, long double __phi)
{ return __detail::__ellint_2<long double>(__k, __phi); }
+ /**
+ * Return the incomplete elliptic integral of the second kind
+ * @f$ E(k,\phi) @f$.
+ *
+ * The incomplete elliptic integral of the second kind is defined as
+ * @f[
+ * E(k,\phi) = \int_0^{\phi} \sqrt{1 - k^2 sin^2\theta}
+ * @f]
+ * For @f$ \phi= \pi/2 @f$ this becomes the complete elliptic integral of
+ * the second kind, @f$ E(k) @f$. @see comp_ellint_2.
+ *
+ * @tparam _Tp The floating-point type of the modulus @c __k.
+ * @tparam _Tpp The floating-point type of the angle @c __phi.
+ * @param __k The modulus, <tt> abs(__k) <= 1 </tt>
+ * @param __phi The integral limit argument in radians
+ * @return The elliptic function of the second kind.
+ * @throw std::domain_error if <tt> abs(__k) > 1 </tt>.
+ */
template<typename _Tp, typename _Tpp>
inline typename __gnu_cxx::__promote_2<_Tp, _Tpp>::__type
ellint_2(_Tp __k, _Tpp __phi)
@@ -287,14 +782,49 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Incomplete elliptic integrals of the third kind
+ /**
+ * @brief Return the incomplete elliptic integral of the third kind
+ * @f$ \Pi(k,\nu,\phi) @f$ for @c float argument.
+ *
+ * @see ellint_3 for details.
+ */
inline float
ellint_3f(float __k, float __nu, float __phi)
{ return __detail::__ellint_3<float>(__k, __nu, __phi); }
+ /**
+ * @brief Return the incomplete elliptic integral of the third kind
+ * @f$ \Pi(k,\nu,\phi) @f$.
+ *
+ * @see ellint_3 for details.
+ */
inline long double
ellint_3l(long double __k, long double __nu, long double __phi)
{ return __detail::__ellint_3<long double>(__k, __nu, __phi); }
+ /**
+ * @brief Return the incomplete elliptic integral of the third kind
+ * @f$ \Pi(k,\nu,\phi) @f$.
+ *
+ * The incomplete elliptic integral of the third kind is defined by:
+ * @f[
+ * \Pi(k,\nu,\phi) = \int_0^{\phi}
+ * \frac{d\theta}
+ * {(1 - \nu \sin^2\theta)
+ * \sqrt{1 - k^2 \sin^2\theta}}
+ * @f]
+ * For @f$ \phi= \pi/2 @f$ this becomes the complete elliptic integral of
+ * the third kind, @f$ \Pi(k,\nu) @f$. @see comp_ellint_3.
+ *
+ * @tparam _Tp The floating-point type of the modulus @c __k.
+ * @tparam _Tpn The floating-point type of the argument @c __nu.
+ * @tparam _Tpp The floating-point type of the angle @c __phi.
+ * @param __k The modulus, <tt> abs(__k) <= 1 </tt>
+ * @param __nu The second argument
+ * @param __phi The integral limit argument in radians
+ * @return The elliptic function of the third kind.
+ * @throw std::domain_error if <tt> abs(__k) > 1 </tt>.
+ */
template<typename _Tp, typename _Tpn, typename _Tpp>
inline typename __gnu_cxx::__promote_3<_Tp, _Tpn, _Tpp>::__type
ellint_3(_Tp __k, _Tpn __nu, _Tpp __phi)
@@ -305,14 +835,36 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Exponential integrals
+ /**
+ * Return the exponential integral @f$ Ei(x) @f$ for @c float argument @c x.
+ *
+ * @see expint for details.
+ */
inline float
expintf(float __x)
{ return __detail::__expint<float>(__x); }
+ /**
+ * Return the exponential integral @f$ Ei(x) @f$
+ * for <tt>long double</tt> argument @c x.
+ *
+ * @see expint for details.
+ */
inline long double
expintl(long double __x)
{ return __detail::__expint<long double>(__x); }
+ /**
+ * Return the exponential integral @f$ Ei(x) @f$ for @c real argument @c x.
+ *
+ * The exponential integral is given by
+ * \f[
+ * Ei(x) = -\int_{-x}^\infty \frac{e^t}{t} dt
+ * \f]
+ *
+ * @tparam _Tp The floating-point type of the argument @c __x.
+ * @param __x The argument of the exponential integral function.
+ */
template<typename _Tp>
inline typename __gnu_cxx::__promote<_Tp>::__type
expint(_Tp __x)
@@ -323,14 +875,44 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Hermite polynomials
+ /**
+ * Return the Hermite polynomial @f$ H_n(x) @f$ of nonnegative order n
+ * and float argument @c x.
+ *
+ * @see hermite for details.
+ */
inline float
hermitef(unsigned int __n, float __x)
{ return __detail::__poly_hermite<float>(__n, __x); }
+ /**
+ * Return the Hermite polynomial @f$ H_n(x) @f$ of nonnegative order n
+ * and <tt>long double</tt> argument @c x.
+ *
+ * @see hermite for details.
+ */
inline long double
hermitel(unsigned int __n, long double __x)
{ return __detail::__poly_hermite<long double>(__n, __x); }
+ /**
+ * Return the Hermite polynomial @f$ H_n(x) @f$ of order n
+ * and @c real argument @c x.
+ *
+ * The Hermite polynomial is defined by:
+ * @f[
+ * H_n(x) = (-1)^n e^{x^2} \frac{d^n}{dx^n} e^{-x^2}
+ * @f]
+ *
+ * The Hermite polynomial obeys a reflection formula:
+ * @f[
+ * H_n(-x) = (-1)^n H_n(x)
+ * @f]
+ *
+ * @tparam _Tp The floating-point type of the argument @c __x.
+ * @param __n The order
+ * @param __x The argument
+ */
template<typename _Tp>
inline typename __gnu_cxx::__promote<_Tp>::__type
hermite(unsigned int __n, _Tp __x)
@@ -341,14 +923,40 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Laguerre polynomials
+ /**
+ * Returns the Laguerre polynomial @f$ L_n(x) @f$ of nonnegative degree @c n
+ * and @c float argument @f$ x >= 0 @f$.
+ *
+ * @see laguerre for more details.
+ */
inline float
laguerref(unsigned int __n, float __x)
{ return __detail::__laguerre<float>(__n, __x); }
+ /**
+ * Returns the Laguerre polynomial @f$ L_n(x) @f$ of nonnegative degree @c n
+ * and <tt>long double</tt> argument @f$ x >= 0 @f$.
+ *
+ * @see laguerre for more details.
+ */
inline long double
laguerrel(unsigned int __n, long double __x)
{ return __detail::__laguerre<long double>(__n, __x); }
+ /**
+ * Returns the Laguerre polynomial @f$ L_n(x) @f$
+ * of nonnegative degree @c n and real argument @f$ x >= 0 @f$.
+ *
+ * The Laguerre polynomial is defined by:
+ * @f[
+ * L_n(x) = \frac{e^x}{n!} \frac{d^n}{dx^n} (x^ne^{-x})
+ * @f]
+ *
+ * @tparam _Tp The floating-point type of the argument @c __x.
+ * @param __n The nonnegative order
+ * @param __x The argument <tt> __x >= 0 </tt>
+ * @throw std::domain_error if <tt> __x < 0 </tt>.
+ */
template<typename _Tp>
inline typename __gnu_cxx::__promote<_Tp>::__type
laguerre(unsigned int __n, _Tp __x)
@@ -359,32 +967,92 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Legendre polynomials
+ /**
+ * Return the Legendre polynomial @f$ P_l(x) @f$ of nonnegative
+ * degree @f$ l @f$ and @c float argument @f$ |x| <= 0 @f$.
+ *
+ * @see legendre for more details.
+ */
inline float
- legendref(unsigned int __n, float __x)
- { return __detail::__poly_legendre_p<float>(__n, __x); }
+ legendref(unsigned int __l, float __x)
+ { return __detail::__poly_legendre_p<float>(__l, __x); }
+ /**
+ * Return the Legendre polynomial @f$ P_l(x) @f$ of nonnegative
+ * degree @f$ l @f$ and <tt>long double</tt> argument @f$ |x| <= 0 @f$.
+ *
+ * @see legendre for more details.
+ */
inline long double
- legendrel(unsigned int __n, long double __x)
- { return __detail::__poly_legendre_p<long double>(__n, __x); }
+ legendrel(unsigned int __l, long double __x)
+ { return __detail::__poly_legendre_p<long double>(__l, __x); }
+ /**
+ * Return the Legendre polynomial @f$ P_l(x) @f$ of nonnegative
+ * degree @f$ l @f$ and real argument @f$ |x| <= 0 @f$.
+ *
+ * The Legendre function of order @f$ l @f$ and argument @f$ x @f$,
+ * @f$ P_l(x) @f$, is defined by:
+ * @f[
+ * P_l(x) = \frac{1}{2^l l!}\frac{d^l}{dx^l}(x^2 - 1)^{l}
+ * @f]
+ *
+ * @tparam _Tp The floating-point type of the argument @c __x.
+ * @param __l The degree @f$ l >= 0 @f$
+ * @param __x The argument @c abs(__x) <= 1
+ * @throw std::domain_error if @c abs(__x) > 1
+ */
template<typename _Tp>
inline typename __gnu_cxx::__promote<_Tp>::__type
- legendre(unsigned int __n, _Tp __x)
+ legendre(unsigned int __l, _Tp __x)
{
typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return __detail::__poly_legendre_p<__type>(__n, __x);
+ return __detail::__poly_legendre_p<__type>(__l, __x);
}
// Riemann zeta functions
+ /**
+ * Return the Riemann zeta function @f$ \zeta(s) @f$
+ * for @c float argument @f$ s @f$.
+ *
+ * @see riemann_zeta for more details.
+ */
inline float
riemann_zetaf(float __s)
{ return __detail::__riemann_zeta<float>(__s); }
+ /**
+ * Return the Riemann zeta function @f$ \zeta(s) @f$
+ * for <tt>long double</tt> argument @f$ s @f$.
+ *
+ * @see riemann_zeta for more details.
+ */
inline long double
riemann_zetal(long double __s)
{ return __detail::__riemann_zeta<long double>(__s); }
+ /**
+ * Return the Riemann zeta function @f$ \zeta(s) @f$
+ * for real argument @f$ s @f$.
+ *
+ * The Riemann zeta function is defined by:
+ * @f[
+ * \zeta(s) = \sum_{k=1}^{\infty} k^{-s} \hbox{ for } s > 1
+ * @f]
+ * and
+ * @f[
+ * \zeta(s) = \frac{1}{1-2^{1-s}}\sum_{k=1}^{\infty}(-1)^{k-1}k^{-s}
+ * \hbox{ for } 0 <= s <= 1
+ * @f]
+ * For s < 1 use the reflection formula:
+ * @f[
+ * \zeta(s) = 2^s \pi^{s-1} \sin(\frac{\pi s}{2}) \Gamma(1-s) \zeta(1-s)
+ * @f]
+ *
+ * @tparam _Tp The floating-point type of the argument @c __s.
+ * @param __s The argument <tt> s != 1 </tt>
+ */
template<typename _Tp>
inline typename __gnu_cxx::__promote<_Tp>::__type
riemann_zeta(_Tp __s)
@@ -395,14 +1063,40 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Spherical Bessel functions
+ /**
+ * Return the spherical Bessel function @f$ j_n(x) @f$ of nonnegative order n
+ * and @c float argument @f$ x >= 0 @f$.
+ *
+ * @see sph_bessel for more details.
+ */
inline float
sph_besself(unsigned int __n, float __x)
{ return __detail::__sph_bessel<float>(__n, __x); }
+ /**
+ * Return the spherical Bessel function @f$ j_n(x) @f$ of nonnegative order n
+ * and <tt>long double</tt> argument @f$ x >= 0 @f$.
+ *
+ * @see sph_bessel for more details.
+ */
inline long double
sph_bessell(unsigned int __n, long double __x)
{ return __detail::__sph_bessel<long double>(__n, __x); }
+ /**
+ * Return the spherical Bessel function @f$ j_n(x) @f$ of nonnegative order n
+ * and real argument @f$ x >= 0 @f$.
+ *
+ * The spherical Bessel function is defined by:
+ * @f[
+ * j_n(x) = \left(\frac{\pi}{2x} \right) ^{1/2} J_{n+1/2}(x)
+ * @f]
+ *
+ * @tparam _Tp The floating-point type of the argument @c __x.
+ * @param __n The integral order <tt> n >= 0 </tt>
+ * @param __x The real argument <tt> x >= 0 </tt>
+ * @throw std::domain_error if <tt> __x < 0 </tt>.
+ */
template<typename _Tp>
inline typename __gnu_cxx::__promote<_Tp>::__type
sph_bessel(unsigned int __n, _Tp __x)
@@ -413,14 +1107,43 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Spherical associated Legendre functions
+ /**
+ * Return the spherical Legendre function of nonnegative integral
+ * degree @c l and order @c m and float angle @f$ \theta @f$ in radians.
+ *
+ * @see sph_legendre for details.
+ */
inline float
sph_legendref(unsigned int __l, unsigned int __m, float __theta)
{ return __detail::__sph_legendre<float>(__l, __m, __theta); }
+ /**
+ * Return the spherical Legendre function of nonnegative integral
+ * degree @c l and order @c m and <tt>long double</tt> angle @f$ \theta @f$
+ * in radians.
+ *
+ * @see sph_legendre for details.
+ */
inline long double
sph_legendrel(unsigned int __l, unsigned int __m, long double __theta)
{ return __detail::__sph_legendre<long double>(__l, __m, __theta); }
+ /**
+ * Return the spherical Legendre function of nonnegative integral
+ * degree @c l and order @c m and real angle @f$ \theta @f$ in radians.
+ *
+ * The spherical Legendre function 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]
+ *
+ * @tparam _Tp The floating-point type of the angle @c __theta.
+ * @param __l The order <tt> __l >= 0 </tt>
+ * @param __m The degree <tt> __m >= 0 </tt> and <tt> __m <= __l </tt>
+ * @param __theta The radian polar angle argument
+ */
template<typename _Tp>
inline typename __gnu_cxx::__promote<_Tp>::__type
sph_legendre(unsigned int __l, unsigned int __m, _Tp __theta)
@@ -431,14 +1154,40 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Spherical Neumann functions
+ /**
+ * Return the spherical Neumann function of integral order @f$ n >= 0 @f$
+ * and @c float argument @f$ x >= 0 @f$.
+ *
+ * @see sph_neumann for details.
+ */
inline float
sph_neumannf(unsigned int __n, float __x)
{ return __detail::__sph_neumann<float>(__n, __x); }
+ /**
+ * Return the spherical Neumann function of integral order @f$ n >= 0 @f$
+ * and <tt>long double</tt> @f$ x >= 0 @f$.
+ *
+ * @see sph_neumann for details.
+ */
inline long double
sph_neumannl(unsigned int __n, long double __x)
{ return __detail::__sph_neumann<long double>(__n, __x); }
+ /**
+ * Return the spherical Neumann function of integral order @f$ n >= 0 @f$
+ * and real argument @f$ x >= 0 @f$.
+ *
+ * The spherical Neumann function is defined by
+ * @f[
+ * n_n(x) = \left(\frac{\pi}{2x} \right) ^{1/2} N_{n+1/2}(x)
+ * @f]
+ *
+ * @tparam _Tp The floating-point type of the argument @c __x.
+ * @param __n The integral order <tt> n >= 0 </tt>
+ * @param __x The real argument <tt> __x >= 0 </tt>
+ * @throw std::domain_error if <tt> __x < 0 </tt>.
+ */
template<typename _Tp>
inline typename __gnu_cxx::__promote<_Tp>::__type
sph_neumann(unsigned int __n, _Tp __x)
@@ -457,14 +1206,44 @@ namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
// Confluent hypergeometric functions
+ /**
+ * Return the confluent hypergeometric function @f$ {}_1F_1(a;c;x) @f$
+ * of @c float numeratorial parameter @c a, denominatorial parameter @c c,
+ * and argument @c x.
+ *
+ * @see conf_hyperg for details.
+ */
inline float
conf_hypergf(float __a, float __c, float __x)
{ return std::__detail::__conf_hyperg<float>(__a, __c, __x); }
+ /**
+ * Return the confluent hypergeometric function @f$ {}_1F_1(a;c;x) @f$
+ * of <tt>long double</tt> numeratorial parameter @c a,
+ * denominatorial parameter @c c, and argument @c x.
+ *
+ * @see conf_hyperg for details.
+ */
inline long double
conf_hypergl(long double __a, long double __c, long double __x)
{ return std::__detail::__conf_hyperg<long double>(__a, __c, __x); }
+ /**
+ * Return the confluent hypergeometric function @f$ {}_1F_1(a;c;x) @f$
+ * of real numeratorial parameter @c a, denominatorial parameter @c c,
+ * and argument @c x.
+ *
+ * The confluent hypergeometric function is defined by
+ * @f[
+ * {}_1F_1(a;c;x) = \sum_{n=0}^{\infty} \frac{(a)_n x^n}{(c)_n n!}
+ * @f]
+ * where the Pochhammer symbol is @f$ (x)_k = (x)(x+1)...(x+k-1) @f$,
+ * @f$ (x)_0 = 1 @f$
+ *
+ * @param __a The numeratorial parameter
+ * @param __c The denominatorial parameter
+ * @param __x The argument
+ */
template<typename _Tpa, typename _Tpc, typename _Tp>
inline typename __gnu_cxx::__promote_3<_Tpa, _Tpc, _Tp>::__type
conf_hyperg(_Tpa __a, _Tpc __c, _Tp __x)
@@ -475,14 +1254,45 @@ namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
// Hypergeometric functions
+ /**
+ * Return the hypergeometric function @f$ {}_2F_1(a,b;c;x) @f$
+ * of @ float numeratorial parameters @c a and @c b,
+ * denominatorial parameter @c c, and argument @c x.
+ *
+ * @see hyperg for details.
+ */
inline float
hypergf(float __a, float __b, float __c, float __x)
{ return std::__detail::__hyperg<float>(__a, __b, __c, __x); }
+ /**
+ * Return the hypergeometric function @f$ {}_2F_1(a,b;c;x) @f$
+ * of <tt>long double</tt> numeratorial parameters @c a and @c b,
+ * denominatorial parameter @c c, and argument @c x.
+ *
+ * @see hyperg for details.
+ */
inline long double
hypergl(long double __a, long double __b, long double __c, long double __x)
{ return std::__detail::__hyperg<long double>(__a, __b, __c, __x); }
+ /**
+ * Return the hypergeometric function @f$ {}_2F_1(a,b;c;x) @f$
+ * of real numeratorial parameters @c a and @c b,
+ * denominatorial parameter @c c, and argument @c x.
+ *
+ * The hypergeometric function is defined by
+ * @f[
+ * {}_2F_1(a;c;x) = \sum_{n=0}^{\infty} \frac{(a)_n (b)_n x^n}{(c)_n n!}
+ * @f]
+ * where the Pochhammer symbol is @f$ (x)_k = (x)(x+1)...(x+k-1) @f$,
+ * @f$ (x)_0 = 1 @f$
+ *
+ * @param __a The first numeratorial parameter
+ * @param __b The second numeratorial parameter
+ * @param __c The denominatorial parameter
+ * @param __x The argument
+ */
template<typename _Tpa, typename _Tpb, typename _Tpc, typename _Tp>
inline typename __gnu_cxx::__promote_4<_Tpa, _Tpb, _Tpc, _Tp>::__type
hyperg(_Tpa __a, _Tpb __b, _Tpc __c, _Tp __x)
diff --git a/libstdc++-v3/include/bits/stl_pair.h b/libstdc++-v3/include/bits/stl_pair.h
index 7057030..37ee5cc 100644
--- a/libstdc++-v3/include/bits/stl_pair.h
+++ b/libstdc++-v3/include/bits/stl_pair.h
@@ -87,32 +87,51 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Concept utility functions, reused in conditionally-explicit
// constructors.
+ // See PR 70437, don't look at is_constructible or
+ // is_convertible if the decayed types are the same to
+ // avoid querying those properties for incomplete types.
template <typename _T1, typename _T2, typename _U1, typename _U2>
constexpr bool _ConstructiblePair()
{
- return __and_<is_constructible<_T1, const _U1&>,
- is_constructible<_T2, const _U2&>>::value;
+ return __and_<__or_<is_same<typename decay<_T1>::type,
+ typename decay<_U1>::type>,
+ is_constructible<_T1, const _U1&>>,
+ __or_<is_same<typename decay<_T2>::type,
+ typename decay<_U2>::type>,
+ is_constructible<_T2, const _U2&>>>::value;
}
template <typename _T1, typename _T2, typename _U1, typename _U2>
constexpr bool _ImplicitlyConvertiblePair()
{
- return __and_<is_convertible<const _U1&, _T1>,
- is_convertible<const _U2&, _T2>>::value;
+ return __and_<__or_<is_same<typename decay<_T1>::type,
+ typename decay<_U1>::type>,
+ is_convertible<const _U1&, _T1>>,
+ __or_<is_same<typename decay<_T2>::type,
+ typename decay<_U2>::type>,
+ is_convertible<const _U2&, _T2>>>::value;
}
template <typename _T1, typename _T2, typename _U1, typename _U2>
constexpr bool _MoveConstructiblePair()
{
- return __and_<is_constructible<_T1, _U1&&>,
- is_constructible<_T2, _U2&&>>::value;
+ return __and_<__or_<is_same<typename decay<_T1>::type,
+ typename decay<_U1>::type>,
+ is_constructible<_T1, _U1&&>>,
+ __or_<is_same<typename decay<_T2>::type,
+ typename decay<_U2>::type>,
+ is_constructible<_T2, _U2&&>>>::value;
}
template <typename _T1, typename _T2, typename _U1, typename _U2>
constexpr bool _ImplicitlyMoveConvertiblePair()
{
- return __and_<is_convertible<_U1&&, _T1>,
- is_convertible<_U2&&, _T2>>::value;
+ return __and_<__or_<is_same<typename decay<_T1>::type,
+ typename decay<_U1>::type>,
+ is_convertible<_U1&&, _T1>>,
+ __or_<is_same<typename decay<_T2>::type,
+ typename decay<_U2>::type>,
+ is_convertible<_U2&&, _T2>>>::value;
}
diff --git a/libstdc++-v3/include/c_global/cstdarg b/libstdc++-v3/include/c_global/cstdarg
index 390e1a2..46cf5a2 100644
--- a/libstdc++-v3/include/c_global/cstdarg
+++ b/libstdc++-v3/include/c_global/cstdarg
@@ -38,6 +38,7 @@
#pragma GCC system_header
+#undef __need___va_list
#include <bits/c++config.h>
#include <stdarg.h>
diff --git a/libstdc++-v3/include/c_global/cstddef b/libstdc++-v3/include/c_global/cstddef
index e55bc82..1739121 100644
--- a/libstdc++-v3/include/c_global/cstddef
+++ b/libstdc++-v3/include/c_global/cstddef
@@ -41,6 +41,11 @@
#pragma GCC system_header
+#undef __need_wchar_t
+#undef __need_ptrdiff_t
+#undef __need_size_t
+#undef __need_NULL
+#undef __need_wint_t
#include <bits/c++config.h>
#include <stddef.h>
diff --git a/libstdc++-v3/include/experimental/tuple b/libstdc++-v3/include/experimental/tuple
index e3896e4..81e91bd 100644
--- a/libstdc++-v3/include/experimental/tuple
+++ b/libstdc++-v3/include/experimental/tuple
@@ -58,7 +58,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
using _Wrap = _Maybe_wrap_member_pointer<decay_t<_Fn>>;
return _Wrap::__do_wrap(std::forward<_Fn>(f))(
- get<_Idx>(forward<_Tuple>(t))...);
+ std::get<_Idx>(std::forward<_Tuple>(t))...);
}
template <typename _Fn, typename _Tuple>
diff --git a/libstdc++-v3/include/tr1/cmath b/libstdc++-v3/include/tr1/cmath
index 14737e3..48466a0 100644
--- a/libstdc++-v3/include/tr1/cmath
+++ b/libstdc++-v3/include/tr1/cmath
@@ -151,6 +151,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#if _GLIBCXX_USE_C99_MATH_TR1
+ // Using declarations to bring names from libc's <math.h> into std::tr1.
+
// types
using ::double_t;
using ::float_t;
@@ -416,8 +418,77 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#if _GLIBCXX_USE_C99_MATH_TR1
- /// Additional overloads [8.16.4].
+ /** Additional overloads [8.16.4].
+ * @{
+ */
+
+ // For functions defined in C++03 the additional overloads are already
+ // declared in <cmath> so we can just re-declare them in std::tr1.
+
using std::acos;
+ using std::asin;
+ using std::atan;
+ using std::atan2;
+ using std::ceil;
+ using std::cos;
+ using std::cosh;
+ using std::exp;
+ using std::floor;
+ using std::fmod;
+ using std::frexp;
+ using std::ldexp;
+ using std::log;
+ using std::log10;
+ using std::sin;
+ using std::sinh;
+ using std::sqrt;
+ using std::tan;
+ using std::tanh;
+
+#if __cplusplus >= 201103L
+
+ // Since C++11, <cmath> defines additional overloads for these functions
+ // in namespace std.
+
+ using std::acosh;
+ using std::asinh;
+ using std::atanh;
+ using std::cbrt;
+ using std::copysign;
+ using std::erf;
+ using std::erfc;
+ using std::exp2;
+ using std::expm1;
+ using std::fdim;
+ using std::fma;
+ using std::fmax;
+ using std::fmin;
+ using std::hypot;
+ using std::ilogb;
+ using std::lgamma;
+ using std::llrint;
+ using std::llround;
+ using std::log1p;
+ using std::log2;
+ using std::logb;
+ using std::lrint;
+ using std::lround;
+ using std::nan;
+ using std::nearbyint;
+ using std::nextafter;
+ using std::nexttoward;
+ using std::remainder;
+ using std::remquo;
+ using std::rint;
+ using std::round;
+ using std::scalbln;
+ using std::scalbn;
+ using std::tgamma;
+ using std::trunc;
+
+#else // __cplusplus < 201103L
+
+ // In C++03 we need to provide the additional overloads.
#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
inline float
@@ -435,8 +506,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
acosh(_Tp __x)
{ return __builtin_acosh(__x); }
- using std::asin;
-
#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
inline float
asinh(float __x)
@@ -453,9 +522,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
asinh(_Tp __x)
{ return __builtin_asinh(__x); }
- using std::atan;
- using std::atan2;
-
#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
inline float
atanh(float __x)
@@ -488,8 +554,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
cbrt(_Tp __x)
{ return __builtin_cbrt(__x); }
- using std::ceil;
-
#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
inline float
copysign(float __x, float __y)
@@ -508,9 +572,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return copysign(__type(__x), __type(__y));
}
- using std::cos;
- using std::cosh;
-
#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
inline float
erf(float __x)
@@ -543,8 +604,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
erfc(_Tp __x)
{ return __builtin_erfc(__x); }
- using std::exp;
-
#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
inline float
exp2(float __x)
@@ -577,32 +636,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
expm1(_Tp __x)
{ return __builtin_expm1(__x); }
- // Note: we deal with fabs in a special way, because an using std::fabs
- // would bring in also the overloads for complex types, which in C++0x
- // mode have a different return type.
- // With __CORRECT_ISO_CPP_MATH_H_PROTO, math.h imports std::fabs in the
- // global namespace after the declarations of the float / double / long
- // double overloads but before the std::complex overloads.
- using ::fabs;
-
-#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
-#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
- inline float
- fabs(float __x)
- { return __builtin_fabsf(__x); }
-
- inline long double
- fabs(long double __x)
- { return __builtin_fabsl(__x); }
-#endif
-
- template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- fabs(_Tp __x)
- { return __builtin_fabs(__x); }
-#endif
-
#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
inline float
fdim(float __x, float __y)
@@ -621,8 +654,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return fdim(__type(__x), __type(__y));
}
- using std::floor;
-
#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
inline float
fma(float __x, float __y, float __z)
@@ -677,9 +708,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return fmin(__type(__x), __type(__y));
}
- using std::fmod;
- using std::frexp;
-
#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
inline float
hypot(float __x, float __y)
@@ -714,8 +742,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
ilogb(_Tp __x)
{ return __builtin_ilogb(__x); }
- using std::ldexp;
-
#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
inline float
lgamma(float __x)
@@ -764,9 +790,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
llround(_Tp __x)
{ return __builtin_llround(__x); }
- using std::log;
- using std::log10;
-
#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
inline float
log1p(float __x)
@@ -1000,12 +1023,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
scalbn(_Tp __x, int __ex)
{ return __builtin_scalbn(__x, __ex); }
- using std::sin;
- using std::sinh;
- using std::sqrt;
- using std::tan;
- using std::tanh;
-
#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
inline float
tgamma(float __x)
@@ -1038,6 +1055,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
trunc(_Tp __x)
{ return __builtin_trunc(__x); }
+#endif // __cplusplus < 201103L
+
+ // @}
+
#endif
_GLIBCXX_END_NAMESPACE_VERSION
}
@@ -1050,17 +1071,16 @@ namespace tr1
_GLIBCXX_BEGIN_NAMESPACE_VERSION
// DR 550. What should the return type of pow(float,int) be?
- // NB: C++0x and TR1 != C++03.
-
- // The std::tr1::pow(double, double) overload cannot be provided
- // here, because it would clash with ::pow(double,double) declared
- // in <math.h>, if <tr1/math.h> is included at the same time (raised
- // by the fix of PR c++/54537). It is not possible either to use the
- // using-declaration 'using ::pow;' here, because if the user code
- // has a 'using std::pow;', it would bring the pow(*,int) averloads
- // in the tr1 namespace, which is undesirable. Consequently, the
- // solution is to forward std::tr1::pow(double,double) to
- // std::pow(double,double) via the templatized version below. See
+ // NB: C++11 and TR1 != C++03.
+
+ // We cannot do "using std::pow;" because that would bring in unwanted
+ // pow(*, int) overloads in C++03, with the wrong return type. Instead we
+ // define all the necessary overloads, but the std::tr1::pow(double, double)
+ // overload cannot be provided here, because <tr1/math.h> would add it to
+ // the global namespace where it would clash with ::pow(double,double) from
+ // libc (revealed by the fix of PR c++/54537).
+ // The solution is to forward std::tr1::pow(double,double) to
+ // std::pow(double,double) via the function template below. See
// the discussion about this issue here:
// http://gcc.gnu.org/ml/gcc-patches/2012-09/msg01278.html
@@ -1082,6 +1102,41 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return std::pow(__type(__x), __type(__y));
}
+#if __cplusplus >= 201103L
+ // We also deal with fabs in a special way, because "using std::fabs;"
+ // could bring in C++11's std::fabs<T>(const std::complex<T>&) with a
+ // different return type from std::tr1::fabs<T>(const std::complex<T>&).
+ // We define the necessary overloads, except std::tr1::fabs(double) which
+ // could clash with ::fabs(double) from libc.
+ // The function template handles double as well as integers, forwarding
+ // to std::fabs.
+
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
+#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+ inline float
+ fabs(float __x)
+ { return __builtin_fabsf(__x); }
+
+ inline long double
+ fabs(long double __x)
+ { return __builtin_fabsl(__x); }
+#endif
+#endif
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__promote<_Tp>::__type
+ fabs(_Tp __x)
+ { return std::fabs(__x); }
+
+#else // ! C++11
+
+ // For C++03 just use std::fabs as there is no overload for std::complex<>.
+ using std::fabs;
+
+#endif // C++11
+
+
+
_GLIBCXX_END_NAMESPACE_VERSION
}
}
diff --git a/libstdc++-v3/include/tr1/complex b/libstdc++-v3/include/tr1/complex
index 281bce0..9d2de1a 100644
--- a/libstdc++-v3/include/tr1/complex
+++ b/libstdc++-v3/include/tr1/complex
@@ -48,17 +48,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
using std::acos;
using std::asin;
using std::atan;
+ using std::acosh;
+ using std::asinh;
+ using std::atanh;
#else
template<typename _Tp> std::complex<_Tp> acos(const std::complex<_Tp>&);
template<typename _Tp> std::complex<_Tp> asin(const std::complex<_Tp>&);
template<typename _Tp> std::complex<_Tp> atan(const std::complex<_Tp>&);
-#endif
-
template<typename _Tp> std::complex<_Tp> acosh(const std::complex<_Tp>&);
template<typename _Tp> std::complex<_Tp> asinh(const std::complex<_Tp>&);
template<typename _Tp> std::complex<_Tp> atanh(const std::complex<_Tp>&);
+#endif
- // The std::fabs return type in C++0x mode is different (just _Tp).
+ // The std::fabs return type in C++11 mode is different (just _Tp).
template<typename _Tp> std::complex<_Tp> fabs(const std::complex<_Tp>&);
#if __cplusplus < 201103L
@@ -178,8 +180,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __complex_atan(__z); }
#endif
-#endif // C++11
-
template<typename _Tp>
std::complex<_Tp>
__complex_acosh(const std::complex<_Tp>& __z)
@@ -299,6 +299,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __complex_atanh(__z); }
#endif
+#endif // C++11
+
template<typename _Tp>
inline std::complex<_Tp>
/// fabs(__z) [8.1.8].
diff --git a/libstdc++-v3/libsupc++/eh_alloc.cc b/libstdc++-v3/libsupc++/eh_alloc.cc
index 6973af3..d362e40 100644
--- a/libstdc++-v3/libsupc++/eh_alloc.cc
+++ b/libstdc++-v3/libsupc++/eh_alloc.cc
@@ -73,6 +73,10 @@ using namespace __cxxabiv1;
# define EMERGENCY_OBJ_COUNT 4
#endif
+namespace __gnu_cxx
+{
+ void __freeres();
+}
namespace
{
@@ -106,6 +110,8 @@ namespace
// to implement in_pool.
char *arena;
std::size_t arena_size;
+
+ friend void __gnu_cxx::__freeres();
};
pool::pool()
@@ -244,6 +250,19 @@ namespace
pool emergency_pool;
}
+namespace __gnu_cxx
+{
+ void
+ __freeres()
+ {
+ if (emergency_pool.arena)
+ {
+ ::free(emergency_pool.arena);
+ emergency_pool.arena = 0;
+ }
+ }
+}
+
extern "C" void *
__cxxabiv1::__cxa_allocate_exception(std::size_t thrown_size) _GLIBCXX_NOTHROW
{
diff --git a/libstdc++-v3/src/Makefile.am b/libstdc++-v3/src/Makefile.am
index 7b510ab..dce25a6 100644
--- a/libstdc++-v3/src/Makefile.am
+++ b/libstdc++-v3/src/Makefile.am
@@ -228,7 +228,7 @@ libstdc++-symbols.ver: ${glibcxx_srcdir}/$(SYMVER_FILE) \
chmod +w $@.tmp
if test "x$(port_specific_symbol_files)" != x; then \
if grep '^# Appended to version file.' \
- $(port_specific_symbol_files) /dev/null > /dev/null 2>&1; then \
+ $(port_specific_symbol_files) > /dev/null 2>&1; then \
cat $(port_specific_symbol_files) >> $@.tmp; \
else \
sed -n '1,/DO NOT DELETE/p' $@.tmp > tmp.top; \
diff --git a/libstdc++-v3/src/Makefile.in b/libstdc++-v3/src/Makefile.in
index 0776dcc..75a207a 100644
--- a/libstdc++-v3/src/Makefile.in
+++ b/libstdc++-v3/src/Makefile.in
@@ -939,7 +939,7 @@ compatibility-condvar.o: compatibility-condvar.cc
@ENABLE_SYMVERS_TRUE@ chmod +w $@.tmp
@ENABLE_SYMVERS_TRUE@ if test "x$(port_specific_symbol_files)" != x; then \
@ENABLE_SYMVERS_TRUE@ if grep '^# Appended to version file.' \
-@ENABLE_SYMVERS_TRUE@ $(port_specific_symbol_files) /dev/null > /dev/null 2>&1; then \
+@ENABLE_SYMVERS_TRUE@ $(port_specific_symbol_files) > /dev/null 2>&1; then \
@ENABLE_SYMVERS_TRUE@ cat $(port_specific_symbol_files) >> $@.tmp; \
@ENABLE_SYMVERS_TRUE@ else \
@ENABLE_SYMVERS_TRUE@ sed -n '1,/DO NOT DELETE/p' $@.tmp > tmp.top; \
diff --git a/libstdc++-v3/src/c++11/thread.cc b/libstdc++-v3/src/c++11/thread.cc
index d2a7dc3..a027fcf 100644
--- a/libstdc++-v3/src/c++11/thread.cc
+++ b/libstdc++-v3/src/c++11/thread.cc
@@ -71,9 +71,9 @@ static inline int get_nprocs()
namespace std _GLIBCXX_VISIBILITY(default)
{
- namespace
+ extern "C"
{
- extern "C" void*
+ static void*
execute_native_thread_routine(void* __p)
{
thread::_State_ptr __t{ static_cast<thread::_State*>(__p) };
@@ -95,7 +95,7 @@ namespace std _GLIBCXX_VISIBILITY(default)
}
#if _GLIBCXX_THREAD_ABI_COMPAT
- extern "C" void*
+ static void*
execute_native_thread_routine_compat(void* __p)
{
thread::_Impl_base* __t = static_cast<thread::_Impl_base*>(__p);
@@ -121,7 +121,7 @@ namespace std _GLIBCXX_VISIBILITY(default)
return nullptr;
}
#endif
- }
+ } // extern "C"
_GLIBCXX_BEGIN_NAMESPACE_VERSION
diff --git a/libstdc++-v3/testsuite/18_support/free_eh_pool.cc b/libstdc++-v3/testsuite/18_support/free_eh_pool.cc
new file mode 100644
index 0000000..9712d3d
--- /dev/null
+++ b/libstdc++-v3/testsuite/18_support/free_eh_pool.cc
@@ -0,0 +1,35 @@
+// Copyright (C) 2016 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-do run }
+
+namespace __gnu_cxx {
+ void __freeres();
+}
+
+struct X {
+ ~X() {
+ __gnu_cxx::__freeres();
+ }
+};
+
+X x;
+
+int
+main()
+{
+}
diff --git a/libstdc++-v3/testsuite/20_util/pair/70437.cc b/libstdc++-v3/testsuite/20_util/pair/70437.cc
new file mode 100644
index 0000000..37e6fb7
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/pair/70437.cc
@@ -0,0 +1,37 @@
+// { dg-options "-std=gnu++11" }
+// { dg-do compile }
+
+// Copyright (C) 2016 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <utility>
+
+template <class T> struct B;
+
+template <class T> struct A
+{
+ A(A&&) = default;
+ A(const B<T> &);
+};
+
+template <class T> struct B
+{
+ std::pair<A<T>,int> a;
+ B(B&&) = default;
+};
+
+bool b = std::is_move_constructible<A<int> >::value;
diff --git a/libstdc++-v3/testsuite/30_threads/thread/70503.cc b/libstdc++-v3/testsuite/30_threads/thread/70503.cc
new file mode 100644
index 0000000..3b64ef8
--- /dev/null
+++ b/libstdc++-v3/testsuite/30_threads/thread/70503.cc
@@ -0,0 +1,38 @@
+// Copyright (C) 2016 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-do link }
+// { dg-options "-std=gnu++11 -static" { target *-*-*gnu* } }
+// { dg-require-cstdint "" }
+// { dg-require-gthreads "" }
+// { dg-require-effective-target static }
+
+#include <thread>
+
+extern "C" {
+ // Should not get multiple definition errors from libstdc++.a(thread.o)
+ void execute_native_thread_routine(void) { }
+ void execute_native_thread_routine_compat(void) { }
+}
+
+int main()
+{
+ execute_native_thread_routine();
+ execute_native_thread_routine_compat();
+
+ std::thread{}.detach(); // ensure libstdc++.a(thread.o) is linked in
+}
diff --git a/libstdc++-v3/testsuite/tr1/headers/c++200x/complex.cc b/libstdc++-v3/testsuite/tr1/headers/c++200x/complex.cc
index 4c442bb..dbf01f5 100644
--- a/libstdc++-v3/testsuite/tr1/headers/c++200x/complex.cc
+++ b/libstdc++-v3/testsuite/tr1/headers/c++200x/complex.cc
@@ -21,6 +21,8 @@
// check for duplicates of complex overloads of acos, asin, atan and fabs
#include <complex>
+using std::fabs;
#include <tr1/cmath>
#include <tr1/complex>
+auto c = std::tr1::fabs(std::complex<double>{});
diff --git a/libstdc++-v3/testsuite/tr1/headers/c++200x/math.cc b/libstdc++-v3/testsuite/tr1/headers/c++200x/math.cc
new file mode 100644
index 0000000..29b89a4
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/headers/c++200x/math.cc
@@ -0,0 +1,25 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++11" }
+
+// Copyright (C) 2016 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// PR libstdc++/69893
+// check for duplicate overloads of acosh, asinh, etc.
+
+#include <math.h>
+#include <tr1/cmath>
diff --git a/lto-plugin/ChangeLog b/lto-plugin/ChangeLog
index 4ebccb7..d2cd986 100644
--- a/lto-plugin/ChangeLog
+++ b/lto-plugin/ChangeLog
@@ -1,3 +1,17 @@
+2016-02-25 Ilya Verbin <ilya.verbin@intel.com>
+
+ PR driver/68463
+ * lto-plugin.c (struct plugin_offload_file): New.
+ (offload_files): Change type.
+ (offload_files_last, offload_files_last_obj): New.
+ (offload_files_last_lto): New.
+ (free_2): Adjust accordingly.
+ (all_symbols_read_handler): Don't add offload files to lto_arg_ptr.
+ Don't call free_1 for offload_files. Write names of object files with
+ offloading to the temporary file. Add new option to lto_arg_ptr.
+ (claim_file_handler): Don't claim file if it contains offload sections
+ without LTO sections. If it contains offload sections, add to the list.
+
2016-01-15 Martin Liska <mliska@suse.cz>
* lto-plugin.c (all_symbols_read_handler): Assign default
diff --git a/lto-plugin/lto-plugin.c b/lto-plugin/lto-plugin.c
index 1ed0f08..51afc52 100644
--- a/lto-plugin/lto-plugin.c
+++ b/lto-plugin/lto-plugin.c
@@ -129,6 +129,14 @@ struct plugin_file_info
struct plugin_symtab conflicts;
};
+/* List item with name of the file with offloading. */
+
+struct plugin_offload_file
+{
+ char *name;
+ struct plugin_offload_file *next;
+};
+
/* Until ASM_OUTPUT_LABELREF can be hookized and decoupled from
stdio file streams, we do simple label translation here. */
@@ -152,8 +160,16 @@ static ld_plugin_add_symbols add_symbols;
static struct plugin_file_info *claimed_files = NULL;
static unsigned int num_claimed_files = 0;
-static struct plugin_file_info *offload_files = NULL;
-static unsigned int num_offload_files = 0;
+/* List of files with offloading. */
+static struct plugin_offload_file *offload_files;
+/* Last file in the list. */
+static struct plugin_offload_file *offload_files_last;
+/* Last non-archive file in the list. */
+static struct plugin_offload_file *offload_files_last_obj;
+/* Last LTO file in the list. */
+static struct plugin_offload_file *offload_files_last_lto;
+/* Total number of files with offloading. */
+static unsigned num_offload_files;
static char **output_files = NULL;
static unsigned int num_output_files = 0;
@@ -351,14 +367,6 @@ free_2 (void)
free (info->name);
}
- for (i = 0; i < num_offload_files; i++)
- {
- struct plugin_file_info *info = &offload_files[i];
- struct plugin_symtab *symtab = &info->symtab;
- free (symtab->aux);
- free (info->name);
- }
-
for (i = 0; i < num_output_files; i++)
free (output_files[i]);
free (output_files);
@@ -367,8 +375,12 @@ free_2 (void)
claimed_files = NULL;
num_claimed_files = 0;
- free (offload_files);
- offload_files = NULL;
+ while (offload_files)
+ {
+ struct plugin_offload_file *ofld = offload_files;
+ offload_files = offload_files->next;
+ free (ofld);
+ }
num_offload_files = 0;
free (arguments_file_name);
@@ -625,8 +637,7 @@ static enum ld_plugin_status
all_symbols_read_handler (void)
{
unsigned i;
- unsigned num_lto_args
- = num_claimed_files + num_offload_files + lto_wrapper_num_args + 2;
+ unsigned num_lto_args = num_claimed_files + lto_wrapper_num_args + 3;
char **lto_argv;
const char *linker_output_str = NULL;
const char **lto_arg_ptr;
@@ -646,7 +657,6 @@ all_symbols_read_handler (void)
write_resolution ();
free_1 (claimed_files, num_claimed_files);
- free_1 (offload_files, num_offload_files);
for (i = 0; i < lto_wrapper_num_args; i++)
*lto_arg_ptr++ = lto_wrapper_argv[i];
@@ -671,16 +681,38 @@ all_symbols_read_handler (void)
break;
}
*lto_arg_ptr++ = xstrdup (linker_output_str);
- for (i = 0; i < num_claimed_files; i++)
+
+ if (num_offload_files > 0)
{
- struct plugin_file_info *info = &claimed_files[i];
+ FILE *f;
+ char *arg;
+ char *offload_objects_file_name;
+ struct plugin_offload_file *ofld;
+
+ offload_objects_file_name = make_temp_file (".ofldlist");
+ check (offload_objects_file_name, LDPL_FATAL,
+ "Failed to generate a temporary file name");
+ f = fopen (offload_objects_file_name, "w");
+ check (f, LDPL_FATAL, "could not open file with offload objects");
+ fprintf (f, "%u\n", num_offload_files);
+
+ /* Skip the dummy item at the start of the list. */
+ ofld = offload_files->next;
+ while (ofld)
+ {
+ fprintf (f, "%s\n", ofld->name);
+ ofld = ofld->next;
+ }
+ fclose (f);
- *lto_arg_ptr++ = info->name;
+ arg = concat ("-foffload-objects=", offload_objects_file_name, NULL);
+ check (arg, LDPL_FATAL, "could not allocate");
+ *lto_arg_ptr++ = arg;
}
- for (i = 0; i < num_offload_files; i++)
+ for (i = 0; i < num_claimed_files; i++)
{
- struct plugin_file_info *info = &offload_files[i];
+ struct plugin_file_info *info = &claimed_files[i];
*lto_arg_ptr++ = info->name;
}
@@ -1007,18 +1039,72 @@ claim_file_handler (const struct ld_plugin_input_file *file, int *claimed)
xrealloc (claimed_files,
num_claimed_files * sizeof (struct plugin_file_info));
claimed_files[num_claimed_files - 1] = lto_file;
+
+ *claimed = 1;
}
- if (obj.found == 0 && obj.offload == 1)
+ if (offload_files == NULL)
{
- num_offload_files++;
- offload_files =
- xrealloc (offload_files,
- num_offload_files * sizeof (struct plugin_file_info));
- offload_files[num_offload_files - 1] = lto_file;
+ /* Add dummy item to the start of the list. */
+ offload_files = xmalloc (sizeof (struct plugin_offload_file));
+ offload_files->name = NULL;
+ offload_files->next = NULL;
+ offload_files_last = offload_files;
}
- *claimed = 1;
+ /* If this is an LTO file without offload, and it is the first LTO file, save
+ the pointer to the last offload file in the list. Further offload LTO
+ files will be inserted after it, if any. */
+ if (*claimed && obj.offload == 0 && offload_files_last_lto == NULL)
+ offload_files_last_lto = offload_files_last;
+
+ if (obj.offload == 1)
+ {
+ /* Add file to the list. The order must be exactly the same as the final
+ order after recompilation and linking, otherwise host and target tables
+ with addresses wouldn't match. If a static library contains both LTO
+ and non-LTO objects, ld and gold link them in a different order. */
+ struct plugin_offload_file *ofld
+ = xmalloc (sizeof (struct plugin_offload_file));
+ ofld->name = lto_file.name;
+ ofld->next = NULL;
+
+ if (*claimed && offload_files_last_lto == NULL && file->offset != 0
+ && gold_version == -1)
+ {
+ /* ld only: insert first LTO file from the archive after the last real
+ object file immediately preceding the archive, or at the begin of
+ the list if there was no real objects before archives. */
+ if (offload_files_last_obj != NULL)
+ {
+ ofld->next = offload_files_last_obj->next;
+ offload_files_last_obj->next = ofld;
+ }
+ else
+ {
+ ofld->next = offload_files->next;
+ offload_files->next = ofld;
+ }
+ }
+ else if (*claimed && offload_files_last_lto != NULL)
+ {
+ /* Insert LTO file after the last LTO file in the list. */
+ ofld->next = offload_files_last_lto->next;
+ offload_files_last_lto->next = ofld;
+ }
+ else
+ /* Add non-LTO file or first non-archive LTO file to the end of the
+ list. */
+ offload_files_last->next = ofld;
+
+ if (ofld->next == NULL)
+ offload_files_last = ofld;
+ if (file->offset == 0)
+ offload_files_last_obj = ofld;
+ if (*claimed)
+ offload_files_last_lto = ofld;
+ num_offload_files++;
+ }
goto cleanup;