Imported Upstream version 4.9.1 upstream/4.9.1
authorChanho Park <chanho61.park@samsung.com>
Mon, 21 Jul 2014 03:01:04 +0000 (12:01 +0900)
committerChanho Park <chanho61.park@samsung.com>
Mon, 21 Jul 2014 03:01:04 +0000 (12:01 +0900)
733 files changed:
ChangeLog
INSTALL/binaries.html
INSTALL/build.html
INSTALL/specific.html
LAST_UPDATED
MD5SUMS
NEWS
boehm-gc/ChangeLog
config/ChangeLog
contrib/ChangeLog
contrib/gennews
contrib/reghunt/ChangeLog
contrib/regression/ChangeLog
fixincludes/ChangeLog
gcc/BASE-VER
gcc/ChangeLog
gcc/DATESTAMP
gcc/ada/ChangeLog
gcc/ada/comperr.adb
gcc/ada/comperr.ads
gcc/ada/exp_cg.adb
gcc/ada/exp_dbug.adb
gcc/ada/exp_dbug.ads
gcc/ada/exp_disp.adb
gcc/ada/fe.h
gcc/ada/gcc-interface/Makefile.in
gcc/ada/gcc-interface/decl.c
gcc/ada/gcc-interface/misc.c
gcc/ada/gcc-interface/trans.c
gcc/ada/gcc-interface/utils.c
gcc/ada/init.c
gcc/ada/types.h
gcc/asan.c
gcc/c-family/ChangeLog
gcc/c-family/c-common.c
gcc/c-family/c-common.h
gcc/c-family/c-omp.c
gcc/c-family/c-opts.c
gcc/c-family/c-pragma.c
gcc/c/ChangeLog
gcc/c/c-array-notation.c
gcc/c/c-decl.c
gcc/c/c-parser.c
gcc/c/c-typeck.c
gcc/cfgexpand.c
gcc/cgraph.c
gcc/cgraph.h
gcc/cgraphclones.c
gcc/cgraphunit.c
gcc/combine.c
gcc/common/config/msp430/msp430-common.c [new file with mode: 0644]
gcc/config.gcc
gcc/config.in
gcc/config/aarch64/aarch64-modes.def
gcc/config/aarch64/aarch64-simd.md
gcc/config/aarch64/aarch64.c
gcc/config/aarch64/aarch64.h
gcc/config/aarch64/aarch64.md
gcc/config/aarch64/arm_neon.h
gcc/config/aarch64/iterators.md
gcc/config/alpha/alpha.c
gcc/config/arm/aout.h
gcc/config/arm/arm-cores.def
gcc/config/arm/arm-opts.h
gcc/config/arm/arm.c
gcc/config/arm/arm.h
gcc/config/arm/arm.md
gcc/config/arm/arm_neon.h
gcc/config/arm/bpabi.h
gcc/config/arm/elf.h
gcc/config/arm/linux-elf.h
gcc/config/arm/linux-gas.h
gcc/config/arm/neon-docgen.ml [deleted file]
gcc/config/arm/neon-gen.ml [deleted file]
gcc/config/arm/netbsd-elf.h
gcc/config/arm/uclinux-eabi.h
gcc/config/arm/uclinux-elf.h
gcc/config/arm/vxworks.h
gcc/config/avr/avr-fixed.md
gcc/config/avr/avr-mcus.def
gcc/config/avr/avr.c
gcc/config/avr/avr.h
gcc/config/avr/avr.md
gcc/config/dbx.h
gcc/config/i386/cygwin.h
gcc/config/i386/driver-i386.c
gcc/config/i386/i386.c
gcc/config/i386/i386.md
gcc/config/i386/mingw32.h
gcc/config/initfini-array.h
gcc/config/msp430/msp430-opts.h [new file with mode: 0644]
gcc/config/msp430/msp430-protos.h
gcc/config/msp430/msp430.c
gcc/config/msp430/msp430.h
gcc/config/msp430/msp430.md
gcc/config/msp430/msp430.opt
gcc/config/msp430/predicates.md
gcc/config/newlib-stdint.h
gcc/config/rs6000/altivec.md
gcc/config/rs6000/dfp.md
gcc/config/rs6000/htm.md
gcc/config/rs6000/htmxlintrin.h
gcc/config/rs6000/predicates.md
gcc/config/rs6000/rs6000-builtin.def
gcc/config/rs6000/rs6000-protos.h
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/rs6000.h
gcc/config/rs6000/rs6000.md
gcc/config/rs6000/sync.md
gcc/config/rs6000/vsx.md
gcc/config/rtems.h
gcc/config/sh/sh.c
gcc/config/sol2-clearcap.map [new file with mode: 0644]
gcc/config/sol2-clearcapv2.map [new file with mode: 0644]
gcc/config/sol2.h
gcc/config/sol2.opt
gcc/config/sparc/sparc-protos.h
gcc/config/sparc/sparc.c
gcc/config/sparc/sparc.md
gcc/config/sparc/sparc.opt
gcc/config/sparc/sync.md
gcc/config/t-sol2
gcc/config/v850/rtems.h
gcc/config/v850/v850-opts.h
gcc/config/v850/v850.h
gcc/configure
gcc/configure.ac
gcc/cp/ChangeLog
gcc/cp/call.c
gcc/cp/class.c
gcc/cp/cp-array-notation.c
gcc/cp/cp-gimplify.c
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/cp/error.c
gcc/cp/init.c
gcc/cp/lambda.c
gcc/cp/mangle.c
gcc/cp/parser.c
gcc/cp/pt.c
gcc/cp/semantics.c
gcc/cp/tree.c
gcc/cp/typeck2.c
gcc/doc/aot-compile.1
gcc/doc/arm-acle-intrinsics.texi
gcc/doc/arm-neon-intrinsics.texi
gcc/doc/cpp.1
gcc/doc/extend.texi
gcc/doc/fsf-funding.7
gcc/doc/g++.1
gcc/doc/gc-analyze.1
gcc/doc/gcc.1
gcc/doc/gcc.info
gcc/doc/gccinstall.info
gcc/doc/gccint.info
gcc/doc/gcj-dbtool.1
gcc/doc/gcj.1
gcc/doc/gcov.1
gcc/doc/gfortran.1
gcc/doc/gij.1
gcc/doc/gpl.7
gcc/doc/grmic.1
gcc/doc/install.texi
gcc/doc/invoke.texi
gcc/doc/jcf-dump.1
gcc/doc/jv-convert.1
gcc/doc/rebuild-gcj-db.1
gcc/doc/sourcebuild.texi
gcc/doc/tm.texi
gcc/doc/tm.texi.in
gcc/double-int.c
gcc/dwarf2out.c
gcc/expmed.c
gcc/fold-const.c
gcc/fortran/ChangeLog
gcc/fortran/cpp.c
gcc/fortran/decl.c
gcc/fortran/dump-parse-tree.c
gcc/fortran/f95-lang.c
gcc/fortran/frontend-passes.c
gcc/fortran/gfortran.h
gcc/fortran/gfortran.info
gcc/fortran/gfortran.texi
gcc/fortran/gfortranspec.c
gcc/fortran/intrinsic.texi
gcc/fortran/match.c
gcc/fortran/match.h
gcc/fortran/module.c
gcc/fortran/openmp.c
gcc/fortran/parse.c
gcc/fortran/resolve.c
gcc/fortran/scanner.c
gcc/fortran/st.c
gcc/fortran/symbol.c
gcc/fortran/trans-array.c
gcc/fortran/trans-array.h
gcc/fortran/trans-common.c
gcc/fortran/trans-decl.c
gcc/fortran/trans-expr.c
gcc/fortran/trans-openmp.c
gcc/fortran/trans-stmt.c
gcc/fortran/trans-stmt.h
gcc/fortran/trans-types.c
gcc/fortran/trans.c
gcc/fortran/trans.h
gcc/function.c
gcc/gengtype-lex.c
gcc/gimple-low.c
gcc/gimple-ssa-strength-reduction.c
gcc/gimplify.c
gcc/gimplify.h
gcc/go/ChangeLog
gcc/go/gofrontend/import-archive.cc
gcc/go/gofrontend/lex.cc
gcc/go/gofrontend/types.cc
gcc/go/gofrontend/types.h
gcc/graphite-scop-detection.c
gcc/ipa-cp.c
gcc/ipa-devirt.c
gcc/ipa-inline-transform.c
gcc/ipa-inline.c
gcc/ipa-inline.h
gcc/ipa-prop.c
gcc/ipa-prop.h
gcc/ipa.c
gcc/ira-costs.c
gcc/java/ChangeLog
gcc/langhooks-def.h
gcc/langhooks.c
gcc/langhooks.h
gcc/loop-init.c
gcc/lra-constraints.c
gcc/lra-eliminations.c
gcc/lto-streamer-out.c
gcc/lto/ChangeLog
gcc/lto/lto-symtab.c
gcc/objc/ChangeLog
gcc/objcp/ChangeLog
gcc/omp-low.c
gcc/opts.c
gcc/passes.c
gcc/po/ChangeLog
gcc/po/sv.gmo
gcc/po/sv.po
gcc/po/zh_CN.gmo
gcc/po/zh_CN.po
gcc/ree.c
gcc/sel-sched-ir.c
gcc/symtab.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/cilk-plus/AN/pr57541-2.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/cilk-plus/AN/pr57541.c
gcc/testsuite/c-c++-common/cilk-plus/AN/pr58942.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/cilk-plus/AN/pr61191.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/cilk-plus/CK/invalid_sync.cc [new file with mode: 0644]
gcc/testsuite/c-c++-common/gomp/atomic-16.c
gcc/testsuite/c-c++-common/gomp/pr59073.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/gomp/pr60823-1.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/gomp/pr60823-2.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/gomp/pr60823-3.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/gomp/pr61486-1.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/gomp/pr61486-2.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/torture/pr60971.c [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/constexpr-aggr1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/constexpr-template7.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/defaulted49.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/initlist-array4.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/initlist84.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/initlist86.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template13.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this18.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/nsdmi-template10.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/nsdmi-template11.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/nsdmi-template12.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/nsdmi-template13.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/nsdmi-template9.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/pr58155.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/pr58781.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/pr60249.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/ref-qual15.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/sfinae50.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/variadic158.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/variadic159.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/variadic160.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1y/pr59867.C [new file with mode: 0644]
gcc/testsuite/g++.dg/debug/dwarf2/imported-decl-2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/debug/dwarf2/pr61433.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/complit14.C [new file with mode: 0644]
gcc/testsuite/g++.dg/init/copy7.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ipa/devirt-11.C
gcc/testsuite/g++.dg/ipa/devirt-25.C
gcc/testsuite/g++.dg/ipa/devirt-27.C
gcc/testsuite/g++.dg/ipa/devirt-31.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ipa/pr60600.C
gcc/testsuite/g++.dg/ipa/pr61085.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ipa/pr61160-1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ipa/pr61160-2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ipa/pr61160-3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ipa/pr61540.C [new file with mode: 0644]
gcc/testsuite/g++.dg/opt/pr60849.C [new file with mode: 0644]
gcc/testsuite/g++.dg/opt/pr60912.C [new file with mode: 0644]
gcc/testsuite/g++.dg/opt/pr61456.C [new file with mode: 0644]
gcc/testsuite/g++.dg/opt/pr61654.C [new file with mode: 0644]
gcc/testsuite/g++.dg/opt/typeinfo1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/pr60969.C [new file with mode: 0644]
gcc/testsuite/g++.dg/pr61094.C [new file with mode: 0644]
gcc/testsuite/g++.dg/pr61289-2.c [new file with mode: 0644]
gcc/testsuite/g++.dg/pr61289.C [new file with mode: 0644]
gcc/testsuite/g++.dg/template/conv14.C [new file with mode: 0644]
gcc/testsuite/g++.dg/template/local-fn1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/template/pr61537.C [new file with mode: 0644]
gcc/testsuite/g++.dg/template/ptrmem27.C [new file with mode: 0644]
gcc/testsuite/g++.dg/template/ptrmem28.C [new file with mode: 0644]
gcc/testsuite/g++.dg/tls/thread_local9.C [new file with mode: 0644]
gcc/testsuite/g++.dg/torture/pr60854.C [new file with mode: 0644]
gcc/testsuite/g++.dg/torture/pr60895.C [new file with mode: 0644]
gcc/testsuite/g++.dg/tree-ssa/pr61009.C [new file with mode: 0644]
gcc/testsuite/g++.dg/vect/pr60836.cc [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/compile/pr61684.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/20140425-1.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/pr60960.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/pr61306-1.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/pr61306-2.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/pr61306-3.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/pr61673.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/pr61725.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/graphite/pr55022.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/graphite/pr59817-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/graphite/pr59817-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/graphite/pr60979.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/lto/pr60720_0.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/lto/pr60720_1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/lto/pr60911_0.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/lto/pr61526_0.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/lto/pr61526_1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr57233.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr60844.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr60866.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr61045.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr61053.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr61060.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr61158.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr61583.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/torture/pr57864.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/torture/pr60891.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/torture/pr60903.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/torture/pr60930.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/torture/pr61010.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/torture/pr61383-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/torture/pr61452.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/torture/pr61681.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/tree-ssa/alias-30.c
gcc/testsuite/gcc.dg/tree-ssa/vrp93.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/typeof-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/unused-8b.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/pr60505.c
gcc/testsuite/gcc.dg/vect/pr60841.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/pr61680.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-singleton_1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect.exp
gcc/testsuite/gcc.dg/vmx/merge-vsx-be-order.c
gcc/testsuite/gcc.dg/vmx/merge-vsx.c
gcc/testsuite/gcc.target/aarch64/aapcs64/type-def.h
gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-13.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-14.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-15.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/pr61325.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c
gcc/testsuite/gcc.target/aarch64/vector_intrinsics.c
gcc/testsuite/gcc.target/aarch64/vqdmlal_high_lane_s16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmlal_high_lane_s32.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmlal_high_laneq_s16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmlal_high_laneq_s32.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmlal_lane_s16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmlal_lane_s32.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmlal_laneq_s16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmlal_laneq_s32.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmlalh_lane_s16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmlals_lane_s32.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_lane_s16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_lane_s32.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_laneq_s16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_laneq_s32.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmlsl_lane_s16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmlsl_lane_s32.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmlsl_laneq_s32.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmlslh_lane_s16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmlsls_lane_s32.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmulh_laneq_s16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmulh_laneq_s32.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmulhh_lane_s16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmulhq_laneq_s16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmulhq_laneq_s32.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmulhs_lane_s32.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmull_high_lane_s16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmull_high_lane_s32.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmull_high_laneq_s16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmull_high_laneq_s32.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmull_lane_s16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmull_lane_s32.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmull_laneq_s16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmull_laneq_s32.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmullh_lane_s16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqdmulls_lane_s32.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqrdmulh_laneq_s16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqrdmulh_laneq_s32.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqrdmulhh_lane_s16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqrdmulhq_laneq_s16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqrdmulhq_laneq_s32.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/vqrdmulhs_lane_s32.c [new file with mode: 0644]
gcc/testsuite/gcc.target/alpha/pr61586.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arm/pr48252.c
gcc/testsuite/gcc.target/avr/pr60991.c [new file with mode: 0644]
gcc/testsuite/gcc.target/avr/torture/pr61055.c [new file with mode: 0644]
gcc/testsuite/gcc.target/avr/torture/pr61443.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/avx-pr57233.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/avx2-pr57233.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/avx512f-pr57233.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/clearcap.map [deleted file]
gcc/testsuite/gcc.target/i386/clearcapv2.map [deleted file]
gcc/testsuite/gcc.target/i386/i386.exp
gcc/testsuite/gcc.target/i386/pr57233.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr60868.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr60901.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr60902.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr60909-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr60909-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr61423.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr61446.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/sse2-pr57233.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/vec-may_alias.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/xop-pr57233.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/bcd-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/bcd-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/bcd-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/dfp-builtin-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/dfp-builtin-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/extend-divide-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/extend-divide-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/htm-ttest.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/pack01.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/pack02.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/pack03.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/pr60735.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/tfmode_off.c
gcc/testsuite/gcc.target/powerpc/ti_math1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/ti_math2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/x86_64/abi/avx/abi-avx.exp
gcc/testsuite/gcc.target/x86_64/abi/avx512f/abi-avx512f.exp
gcc/testsuite/gfortran.dg/allocatable_function_8.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/arrayio_14.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/arrayio_15.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/arrayio_16.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/associate_16.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/associate_17.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/class_array_15.f03
gcc/testsuite/gfortran.dg/cray_pointers_10.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/default_format_denormal_2.f90
gcc/testsuite/gfortran.dg/finalize_25.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/affinity-1.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/allocatable_components_1.f90
gcc/testsuite/gfortran.dg/gomp/appendix-a/a.31.3.f90
gcc/testsuite/gfortran.dg/gomp/associate1.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/declare-simd-1.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/depend-1.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/intentin1.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/omp_do_concurrent.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/openmp-simd-1.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/openmp-simd-2.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/openmp-simd-3.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/proc_ptr_2.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/reduction1.f90
gcc/testsuite/gfortran.dg/gomp/reduction3.f90
gcc/testsuite/gfortran.dg/gomp/target1.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/target2.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/target3.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/udr1.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/udr2.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/udr3.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/udr4.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/udr5.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/udr6.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/udr7.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/udr8.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/graphite/pr59817.f [new file with mode: 0644]
gcc/testsuite/gfortran.dg/list_read_13.f [new file with mode: 0644]
gcc/testsuite/gfortran.dg/nint_2.f90
gcc/testsuite/gfortran.dg/oldstyle_5.f [new file with mode: 0644]
gcc/testsuite/gfortran.dg/openmp-define-3.f90
gcc/testsuite/gfortran.dg/round_4.f90
gcc/testsuite/gnat.dg/aliasing1.adb
gcc/testsuite/gnat.dg/enum3.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/opt38.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/opt38_pkg.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/opt38_pkg.ads [new file with mode: 0644]
gcc/testsuite/gnat.dg/opt39.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/overflow_fixed.adb [new file with mode: 0644]
gcc/testsuite/lib/clearcap.exp [new file with mode: 0644]
gcc/testsuite/lib/target-supports.exp
gcc/tree-core.h
gcc/tree-dfa.c
gcc/tree-inline.c
gcc/tree-nested.c
gcc/tree-pretty-print.c
gcc/tree-ssa-alias.c
gcc/tree-ssa-ifcombine.c
gcc/tree-ssa-loop-im.c
gcc/tree-ssa-math-opts.c
gcc/tree-ssa-propagate.c
gcc/tree-ssa-reassoc.c
gcc/tree-ssa-sccvn.c
gcc/tree-ssa-structalias.c
gcc/tree-ssa-tail-merge.c
gcc/tree-ssa-threadedge.c
gcc/tree-streamer-in.c
gcc/tree-tailcall.c
gcc/tree-vect-data-refs.c
gcc/tree-vect-generic.c
gcc/tree-vect-loop.c
gcc/tree-vect-slp.c
gcc/tree-vectorizer.h
gcc/tree-vrp.c
gcc/tree.c
gcc/tree.h
gcc/varpool.c
gnattools/ChangeLog
include/ChangeLog
intl/ChangeLog
libada/ChangeLog
libatomic/ChangeLog
libbacktrace/ChangeLog
libbacktrace/mmap.c
libcilkrts/ChangeLog
libcpp/ChangeLog
libcpp/lex.c
libcpp/po/ChangeLog
libdecnumber/ChangeLog
libffi/ChangeLog
libgcc/ChangeLog
libgcc/config/arm/bpabi-lib.h
libgcc/config/arm/sfp-machine.h
libgcc/config/i386/cygming-crtbegin.c
libgcc/config/libbid/ChangeLog
libgcc/config/msp430/t-msp430
libgcc/config/t-slibgcc-sld
libgfortran/ChangeLog
libgfortran/intrinsics/ctime.c
libgfortran/io/list_read.c
libgfortran/io/unix.c
libgo/config.h.in
libgo/configure
libgo/configure.ac
libgo/mksysinfo.sh
libgo/runtime/mheap.c
libgo/runtime/proc.c
libgomp/ChangeLog
libgomp/libgomp.info
libgomp/libgomp.texi
libgomp/omp_lib.f90.in
libgomp/omp_lib.h.in
libgomp/testsuite/libgomp.c++/atomic-14.C
libgomp/testsuite/libgomp.c++/atomic-15.C
libgomp/testsuite/libgomp.c++/for-10.C
libgomp/testsuite/libgomp.c++/simd-9.C [new file with mode: 0644]
libgomp/testsuite/libgomp.c++/simd10.C [new file with mode: 0644]
libgomp/testsuite/libgomp.c++/simd11.C [new file with mode: 0644]
libgomp/testsuite/libgomp.c++/simd12.C [new file with mode: 0644]
libgomp/testsuite/libgomp.c++/simd13.C [new file with mode: 0644]
libgomp/testsuite/libgomp.c/atomic-17.c
libgomp/testsuite/libgomp.c/for-2.c
libgomp/testsuite/libgomp.c/for-2.h
libgomp/testsuite/libgomp.c/loop-16.c [new file with mode: 0644]
libgomp/testsuite/libgomp.c/simd-10.c [new file with mode: 0644]
libgomp/testsuite/libgomp.c/simd-11.c [new file with mode: 0644]
libgomp/testsuite/libgomp.c/simd-12.c [new file with mode: 0644]
libgomp/testsuite/libgomp.c/simd-13.c [new file with mode: 0644]
libgomp/testsuite/libgomp.c/simd-14.c [new file with mode: 0644]
libgomp/testsuite/libgomp.c/simd-15.c [new file with mode: 0644]
libgomp/testsuite/libgomp.c/simd-16.c [new file with mode: 0644]
libgomp/testsuite/libgomp.c/simd-17.c [new file with mode: 0644]
libgomp/testsuite/libgomp.c/simd-7.c [new file with mode: 0644]
libgomp/testsuite/libgomp.c/simd-8.c [new file with mode: 0644]
libgomp/testsuite/libgomp.c/simd-9.c [new file with mode: 0644]
libgomp/testsuite/libgomp.c/target-8.c [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/aligned1.f03 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/alloc-comp-1.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/alloc-comp-2.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/alloc-comp-3.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/allocatable10.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/allocatable11.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/allocatable12.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/allocatable9.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/associate1.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/associate2.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/cancel-do-1.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/cancel-do-2.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/cancel-parallel-1.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/cancel-parallel-3.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/cancel-sections-1.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/cancel-taskgroup-2.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/declare-simd-1.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/declare-simd-2.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/declare-simd-3.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/depend-1.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/depend-2.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/depend-3.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/nestedfn5.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/omp_atomic5.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/openmp_version-1.f
libgomp/testsuite/libgomp.fortran/openmp_version-2.f90
libgomp/testsuite/libgomp.fortran/procptr1.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/simd1.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/simd2.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/simd3.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/simd4.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/simd5.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/simd6.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/simd7.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/target1.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/target2.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/target3.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/target4.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/target5.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/target6.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/target7.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/target8.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/taskgroup1.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/udr1.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/udr10.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/udr11.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/udr12.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/udr13.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/udr14.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/udr15.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/udr2.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/udr3.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/udr4.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/udr5.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/udr6.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/udr7.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/udr8.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/udr9.f90 [new file with mode: 0644]
libiberty/ChangeLog
libitm/ChangeLog
libitm/acinclude.m4
libitm/clearcap.map [deleted file]
libitm/configure
libjava/ChangeLog
libjava/classpath/ChangeLog
libjava/classpath/doc/gappletviewer.1
libjava/classpath/doc/gjar.1
libjava/classpath/doc/gjarsigner.1
libjava/classpath/doc/gjavah.1
libjava/classpath/doc/gjdoc.1
libjava/classpath/doc/gkeytool.1
libjava/classpath/doc/gnative2ascii.1
libjava/classpath/doc/gorbd.1
libjava/classpath/doc/grmid.1
libjava/classpath/doc/grmiregistry.1
libjava/classpath/doc/gserialver.1
libjava/classpath/doc/gtnameserv.1
libjava/libltdl/ChangeLog
libobjc/ChangeLog
libquadmath/ChangeLog
libsanitizer/ChangeLog
libssp/ChangeLog
libstdc++-v3/ChangeLog
libstdc++-v3/doc/html/faq.html
libstdc++-v3/doc/xml/faq.xml
libstdc++-v3/include/bits/hashtable.h
libstdc++-v3/include/bits/regex_automaton.tcc
libstdc++-v3/include/bits/regex_compiler.h
libstdc++-v3/include/bits/regex_compiler.tcc
libstdc++-v3/include/bits/regex_executor.tcc
libstdc++-v3/include/bits/shared_ptr_base.h
libstdc++-v3/include/bits/stl_iterator.h
libstdc++-v3/include/bits/stl_tree.h
libstdc++-v3/include/bits/stl_vector.h
libstdc++-v3/include/bits/vector.tcc
libstdc++-v3/include/debug/vector
libstdc++-v3/include/experimental/optional
libstdc++-v3/include/std/functional
libstdc++-v3/include/std/future
libstdc++-v3/include/std/iomanip
libstdc++-v3/include/std/iostream
libstdc++-v3/include/std/tuple
libstdc++-v3/include/std/type_traits
libstdc++-v3/include/tr2/bool_set
libstdc++-v3/python/libstdcxx/v6/printers.py
libstdc++-v3/scripts/run_doxygen
libstdc++-v3/src/c++98/ios_init.cc
libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc
libstdc++-v3/testsuite/20_util/function/60594.cc [new file with mode: 0644]
libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-1.cc
libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-2.cc
libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-4.cc [new file with mode: 0644]
libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc
libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-1.cc
libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-2.cc
libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc
libstdc++-v3/testsuite/20_util/shared_ptr/cons/61036.cc [new file with mode: 0644]
libstdc++-v3/testsuite/20_util/tuple/60497.cc [new file with mode: 0644]
libstdc++-v3/testsuite/20_util/tuple/element_access/get_by_type.cc
libstdc++-v3/testsuite/20_util/tuple/tuple_element.cc
libstdc++-v3/testsuite/20_util/tuple/tuple_element_t.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/set/cons/61023.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/unordered_set/61143.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/swap.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc
libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc
libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc
libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc
libstdc++-v3/testsuite/27_io/manipulators/standard/char/dr2344.cc [new file with mode: 0644]
libstdc++-v3/testsuite/27_io/manipulators/standard/wchar_t/dr2344.cc [new file with mode: 0644]
libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/quoted_char.cc
libstdc++-v3/testsuite/28_regex/basic_regex/multiple_quantifiers.cc
libstdc++-v3/testsuite/30_threads/promise/60966.cc [new file with mode: 0644]
libstdc++-v3/testsuite/experimental/optional/relops/1.cc
libstdc++-v3/testsuite/experimental/optional/relops/2.cc
libstdc++-v3/testsuite/experimental/optional/relops/3.cc
libstdc++-v3/testsuite/experimental/optional/relops/4.cc
libstdc++-v3/testsuite/experimental/optional/relops/5.cc
libstdc++-v3/testsuite/experimental/optional/relops/6.cc
libstdc++-v3/testsuite/libstdc++-prettyprinters/simple.cc
libstdc++-v3/testsuite/libstdc++-prettyprinters/simple11.cc [new file with mode: 0644]
libvtv/ChangeLog
lto-plugin/ChangeLog
lto-plugin/configure
lto-plugin/configure.ac
maintainer-scripts/ChangeLog
zlib/ChangeLog

index 95931df..38c20fd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index b02bdf8..653652c 100644 (file)
@@ -125,11 +125,7 @@ OpenServer/Unixware</a>.
 
 </li><li> Solaris 2 (SPARC, Intel):
 <ul>
-<li> <a href="http://www.sunfreeware.com/">Sunfreeware</a>
-
-</li><li> <a href="http://www.blastwave.org/">Blastwave</a>
-
-</li><li> <a href="http://www.opencsw.org/">OpenCSW</a>
+<li> <a href="http://www.opencsw.org/">OpenCSW</a>
 
 </li><li> <a href="http://jupiterrise.com/tgcware/">TGCware</a>
 </li></ul>
index a4fdbda..9cbe1e8 100644 (file)
@@ -437,8 +437,7 @@ Finally a <code>stagefeedback</code> compiler is built using the information col
 </p>
 <p>Unlike standard bootstrap, several additional restrictions apply.  The
 compiler used to build <code>stage1</code> needs to support a 64-bit integral type.
-It is recommended to only use GCC for this.  Also parallel make is currently
-not supported since collisions in profile collecting may occur.
+It is recommended to only use GCC for this.
 </p>
 <hr />
 <p><p><a href="./index.html">Return to the GCC Installation page</a>
index dc47a69..6329f00 100644 (file)
@@ -616,9 +616,9 @@ removed and the system libunwind library will always be used.
 </p>
 <hr /><a name="aarch64_002dx_002dx"></a><a name="aarch64_002a_002d_002a_002d_002a"></a>
 <h3 class="heading">aarch64*-*-*</h3>
-<p>Pre 2.24 binutils does not have support for selecting -mabi and does not
-support ILP32.  If GCC 4.9 or later is built with pre 2.24, GCC will not
-support option -mabi=ilp32.
+<p>Binutils pre 2.24 does not have support for selecting <samp>-mabi</samp> and
+does not support ILP32.  If it is used to build GCC 4.9 or later, GCC will
+not support option <samp>-mabi=ilp32</samp>.
 </p>
 <hr />
 <!-- rs6000-ibm-aix*, powerpc-ibm-aix* --><a name="x_002dibm_002daix"></a><a name="g_t_002a_002dibm_002daix_002a"></a>
index a290d11..4f1d427 100644 (file)
@@ -1 +1 @@
-Obtained from SVN: tags/gcc_4_9_0_release revision 209612
+Obtained from SVN: tags/gcc_4_9_1_release revision 212636
diff --git a/MD5SUMS b/MD5SUMS
index 334123a..4df3968 100644 (file)
--- a/MD5SUMS
+++ b/MD5SUMS
@@ -1,5 +1,5 @@
 # This file contains the MD5 checksums of the files in the 
-# gcc-4.9.0.tar.bz2 tarball.
+# gcc-4.9.1.tar.bz2 tarball.
 #
 # Besides verifying that all files in the tarball were correctly expanded,
 # it also can be used to determine if any files have changed since the
@@ -16,11 +16,11 @@ bda40697a9e2e23c4a52125fc1cc713d  .dir-locals.el
 fe60d87048567d4fe8c8a0ed2448bcc8  COPYING.RUNTIME
 d32239bcb673463ab874e80d47fae504  COPYING3
 6a6a8e020838b23406c81b19c1d46df6  COPYING3.LIB
-8d6d05e379c4a8df790fbc678299a8a3  ChangeLog
+29e14d389b1c0e65e6ae681fe06c7857  ChangeLog
 09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
 79ef16e405f5873970e04cee49091ff8  INSTALL/README
-2ac324e177e1068e2c7e9c2ad3aa779d  INSTALL/binaries.html
-f2594062b115667717f768157a776465  INSTALL/build.html
+8fd5b9bf92cf218220799a40e8148fd1  INSTALL/binaries.html
+ddc94339e7cc49fddbf73d22ba6bc9d2  INSTALL/build.html
 a75a16d0b16482ab73219c31f90f1265  INSTALL/configure.html
 a09a2c134251cbc03a4d8c47881c96bf  INSTALL/download.html
 f71e8877b0791a16025b2bd2663f0865  INSTALL/finalinstall.html
@@ -28,18 +28,18 @@ d365b39a74c405586955c87e540531ac  INSTALL/gfdl.html
 4e742a49a16683b5759b0763fb109e84  INSTALL/index.html
 37c24a83ee5d2059fce28b7e56527bf8  INSTALL/old.html
 bca4120af0b2247e337e0b6991ed3702  INSTALL/prerequisites.html
-f060c2181d42f672076f86141966e64d  INSTALL/specific.html
+1217d89de9b6c4a463ac85ecf755e1cf  INSTALL/specific.html
 86dd39fb0df38e33811ae7942add5854  INSTALL/test.html
-80f106aa8640529921d7dfcb42e401ee  LAST_UPDATED
+5dfe8d6f44a964ca04e0c4da1a3f0e80  LAST_UPDATED
 5df43eb77ba93510a6adee7bd06bd774  MAINTAINERS
 e6078d46d3729f3f514954081bfd9480  Makefile.def
 356452c2d3677e10f0047801465f2ea7  Makefile.in
 f3a76b2dae23759df8f4bf5f1088f950  Makefile.tpl
-b5c55edd6d5a6fa42f76d5c01460a014  NEWS
+74d32ab573d398ae610c31f1efbb006f  NEWS
 80d26bc3b1ad4f6969a96a24c9181bf5  README
 b510a5285eb05298b5f3d9f5ae920588  boehm-gc/AmigaOS.c
 2caafacabf758bb76a9dfce1fc544b97  boehm-gc/BCC_MAKEFILE
-a800b05eea93a3656166cbb96dbe6432  boehm-gc/ChangeLog
+6c6cf7f4bd69abdad0091e39c3cb2f0a  boehm-gc/ChangeLog
 c18075e3729cd116028480307a8e845d  boehm-gc/EMX_MAKEFILE
 3b7cc3be9ed3c2135bbda990e8a69303  boehm-gc/MacOS.c
 5cf7764626b7dd7272b2fe11403d1b6a  boehm-gc/MacProjects.sit.hqx
@@ -218,7 +218,7 @@ b04a1232318128ebd7c630fca10d02e5  boehm-gc/threads.mk.in
 eea34cf893bb060ee20189e256a8065a  config.guess
 040359150cf11493f973a46d8a25b06b  config.rpath
 9e38dc3cc2b4e471ea192c8984fb0cd1  config.sub
-1c536859092822f48876e093c0c2728e  config/ChangeLog
+002024109027edb448563ba4e17df987  config/ChangeLog
 0fcd4badfe2a2191778bdf5ab94aa40c  config/acinclude.m4
 9238d23c68259d195b332db71892d242  config/acx.m4
 6b030f5cf640bdd401ea739f54a667f8  config/asmcfi.m4
@@ -301,7 +301,7 @@ b6afa5c33fb98edfaf591dd38d198b0d  config/warnings.m4
 e249d18c447a8372fd1ed5f084284d6b  config/zlib.m4
 2aee2a912a0f3cadd86b0ab07d01c110  configure
 0a1b5029c2e53271ca6339f01757cc34  configure.ac
-aaccaa28104c9d5dde05a003d2ec5226  contrib/ChangeLog
+5eea86cbadf6888fca1d5cb97ea71df3  contrib/ChangeLog
 7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
 e0ea80d7094bf66610f2f60db444f9a1  contrib/analyze_brprob
 998f0112578f801ac84646f060e18f89  contrib/check_GNU_style.sh
@@ -324,7 +324,7 @@ db03e57377f9eb202b7b783eb81fe40d  contrib/filter_knr2ansi.pl
 480dbaa133b74e68d41762d6596bd034  contrib/gcc.doxy
 55236e85d8087042189b701cd05d84be  contrib/gcc_build
 2a5f30b12e8aab5e135e7f4dfd7d6519  contrib/gcc_update
-41804fd84ba2402d1b8a2d7979dedbd5  contrib/gennews
+7a9f4e8f88e74e4e83fa3ccb960b442b  contrib/gennews
 59304fc08afa489baa6b920cc76dc625  contrib/gthr_supp_vxw_5x.c
 fa945bac89ee68b410027dcfe1312f4b  contrib/index-prop
 43e3d77ae19b5c6304d6d6846792c173  contrib/make-obstacks-texi.pl
@@ -333,7 +333,7 @@ fa945bac89ee68b410027dcfe1312f4b  contrib/index-prop
 0fb5c8c3cd465d8bd57b55b2548c683a  contrib/paranoia.cc
 9083c56c1c89c5bec355a27f78e49807  contrib/patch_tester.sh
 87a19b40fbd220938cf6c23c42c255e2  contrib/prepare_patch.sh
-02992e52bfd0c60e25a3970249b90e02  contrib/reghunt/ChangeLog
+b09237f96cc90e605875486d065ffbbf  contrib/reghunt/ChangeLog
 cf247a580e49d212518de409793db0a8  contrib/reghunt/bin/gcc-build-full
 724e70ea3e80f87f2a201bbe2f1eef37  contrib/reghunt/bin/gcc-build-simple
 3f2318bae7562a4ad1639e686916a545  contrib/reghunt/bin/gcc-cleanup
@@ -392,7 +392,7 @@ f251d49dd87647250fcd74dd50b7835f  contrib/reghunt/examples/common.config
 e2829fc4af4f433a6a328a62d5ce8066  contrib/reghunt/examples/reg-watch
 afd863c2ec84c906e20f9b9787b1f0fe  contrib/reghunt/examples/reg-watch.awk
 8955535523d4b5f48006bcb851ba9b4b  contrib/reghunt/examples/testall
-eee9e8a09a9d2e921d33eab3f94f72a4  contrib/regression/ChangeLog
+5b76e18edfd2f7e11820243112e1ef67  contrib/regression/ChangeLog
 30553bfced1b2b46bf7ca01ef6ba69d1  contrib/regression/GCC_Regression_Tester.wdgt/Default.png
 ad38ddd771df222eb9d413e3c7f6a751  contrib/regression/GCC_Regression_Tester.wdgt/Icon.png
 777bd286c147cc02861811f66b9a4440  contrib/regression/GCC_Regression_Tester.wdgt/Info.plist
@@ -416,7 +416,7 @@ e00fa8f7dd72b80ca5a64130e85fe4f4  contrib/uninclude
 6ed51d5edccbae74c6500732f8a40540  contrib/update-copyright.py
 7cb42cbdf8becd280d1e16191416fb62  contrib/warn_summary
 21504de31981a67b5b93b265029d1865  depcomp
-a38690f84bc8c30e2f9ee3434766ecc8  fixincludes/ChangeLog
+61aae72ab9e62647bad5bd0ba1b90c33  fixincludes/ChangeLog
 c23ba4c4f4ca4dfcdd9b4155e4626da7  fixincludes/Makefile.in
 4eb8fdda3b3e303c7aa822d341495822  fixincludes/README
 455903ad4ff71fa5c5340ef7ae41a0e6  fixincludes/README-fixinc
@@ -550,12 +550,12 @@ a5e817d35ded04a0fb03999b50c0e89e  fixincludes/tests/base/tgmath.h
 955462b555900ecd3934223c64e21fa7  fixincludes/tests/base/types/vxTypesBase.h
 c78e762f2c91f2af991feda7d3d7f4b2  fixincludes/tests/base/unistd.h
 f9abccf4b8b7eac82a99bb1f9ef6832f  gcc/ABOUT-GCC-NLS
-12c685a5239eb2421fb99d6211a31d2c  gcc/BASE-VER
+b73567b635a03772e7a52b29fa7a12ee  gcc/BASE-VER
 59530bdf33659b29e73d4adb9f9f6552  gcc/COPYING
 a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
 d32239bcb673463ab874e80d47fae504  gcc/COPYING3
 6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
-abe43b4eec0f7a36b8fff4884ea829a4  gcc/ChangeLog
+1a17ac233399b10a193fe4343c14e764  gcc/ChangeLog
 a3b63c675afa7a655cc2bfa8a907af79  gcc/ChangeLog-1997
 d9a88529352a010253c2e8fb1ed6023b  gcc/ChangeLog-1998
 240f08f81cb4699e8b49347db38233db  gcc/ChangeLog-1999
@@ -579,7 +579,7 @@ fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/ChangeLog.graphite
 3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
 e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
 739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
-766c23d7fd70339aa367112c80a90a13  gcc/DATESTAMP
+3814e94fd45d6453d6951a69af800953  gcc/DATESTAMP
 d41d8cd98f00b204e9800998ecf8427e  gcc/DEV-PHASE
 eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
 30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
@@ -591,7 +591,7 @@ ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
 65b0958f3e11d2f408011ac52955b811  gcc/acinclude.m4
 8dcfee0fc9b019ed7810de9926841795  gcc/aclocal.m4
 30995d78221b41ce62c92b2f601b4ebb  gcc/ada/9drpc.adb
-8023dbbd6cf13249e3c703346e047f0a  gcc/ada/ChangeLog
+2eaa1b634c73ed0dab2f1330e32a2af8  gcc/ada/ChangeLog
 683be0b07dc4f64f118fd5e8ae9cb30d  gcc/ada/ChangeLog-2001
 7aff25efb203be4136b8776cdc812956  gcc/ada/ChangeLog-2002
 cd2379152000f40157d349018fb9364d  gcc/ada/ChangeLog-2003
@@ -1226,8 +1226,8 @@ d210cc29f95f5e604759f93402708276  gcc/ada/checks.ads
 9493e0e9238e73f4ebdbaef95b89989a  gcc/ada/cio.c
 ada2f539221a75ff168031eff7815c0f  gcc/ada/clean.adb
 9a36d574098d976ee0279592d026b972  gcc/ada/clean.ads
-20f62cdc28eaef50f89b843b3b9c7cc2  gcc/ada/comperr.adb
-e46cbbab0c251b90c32553f7cd454455  gcc/ada/comperr.ads
+4aef9db9727ddb63adc4a92e757c5436  gcc/ada/comperr.adb
+1ad3f00ba3288ec56abed700e8fe5eff  gcc/ada/comperr.ads
 fbd23958a6d5c4207e39317e708436ac  gcc/ada/config-lang.in
 6e05548d8d2fbb2b63a0f07476437fb3  gcc/ada/csets.adb
 4e4a23a69754d2ec7a8951a8570fe5b0  gcc/ada/csets.ads
@@ -1266,7 +1266,7 @@ ecedcb5ea2f415e4cb95a20610fac247  gcc/ada/errutil.ads
 f768c6b870ebc746874cc73fcdbdf7ab  gcc/ada/exp_atag.ads
 13e8a8feb8fa7a1bfb1990c1b25c879d  gcc/ada/exp_attr.adb
 5702351fe63e0743b3814a1800c30ed2  gcc/ada/exp_attr.ads
-b48d9a5c86e8364287d5edfa50b78fa7  gcc/ada/exp_cg.adb
+47f473b5c4602ac1bb03108dba91a1d3  gcc/ada/exp_cg.adb
 4eabed8d6501ce1ad40758d4710a9831  gcc/ada/exp_cg.ads
 5ccfa8aff821d4ddb7a383357ddb3724  gcc/ada/exp_ch10.ads
 ab12a2bd11ed3ade8004fe061fd0f523  gcc/ada/exp_ch11.adb
@@ -1293,9 +1293,9 @@ cf555c5918a73c14828608b56e779484  gcc/ada/exp_ch6.ads
 5c78630af699c2c8866d59d8f8abffe8  gcc/ada/exp_ch9.ads
 d839fc69ad7fb176e706739beaa91e63  gcc/ada/exp_code.adb
 d2e1249b6b65db4c78621b52c7dc14fc  gcc/ada/exp_code.ads
-313bb90ebc481c1617f766e248ad7105  gcc/ada/exp_dbug.adb
-2fa6fd1cad24e36376b4e0780aae3a52  gcc/ada/exp_dbug.ads
-773db59e5debdf769b8e642b7037afad  gcc/ada/exp_disp.adb
+a0e02892c3f365ba1c2fb5e7b5407e06  gcc/ada/exp_dbug.adb
+0d7c0581afa280425de092cd0b33a32b  gcc/ada/exp_dbug.ads
+fb4d06c9e6bf3a22adf5396afb6ad7f6  gcc/ada/exp_disp.adb
 c192de81f13f3cdf2a0ca3f633d956e8  gcc/ada/exp_disp.ads
 f96cc62086b3fe7b9a72604a429c8c8a  gcc/ada/exp_dist.adb
 d692d8d0a9890eca6c46d32547c20c29  gcc/ada/exp_dist.ads
@@ -1326,7 +1326,7 @@ a199309c4e98c096c259c05ff02b86db  gcc/ada/exp_vfpt.adb
 cfd69fe81b466d6645a6f64a92e243ed  gcc/ada/expander.adb
 856cf1514fa6e098c62b2213757c16bd  gcc/ada/expander.ads
 7d93fd1e41c9e1089f5354141c2a45b8  gcc/ada/expect.c
-a2f56a8f24b7e2571aa376b073f108bf  gcc/ada/fe.h
+9a406035019bea08a3c724f6033a711b  gcc/ada/fe.h
 875d98b79093e1d2a6626a408d638d00  gcc/ada/final.c
 e8be99a2722456562ee665aec5b92580  gcc/ada/fmap.adb
 c1521c6e3b4d7465c7d7c52c05cba906  gcc/ada/fmap.ads
@@ -1558,21 +1558,21 @@ d7eca93022b3adc8f4a61dbe910e95d2  gcc/ada/g-zspche.adb
 b45654446bc74bb68ae4adef78906e9b  gcc/ada/g-zspche.ads
 698b837b776abdf33504479af8506a50  gcc/ada/g-zstspl.ads
 ec9434db1d60180addfe46d2744f6380  gcc/ada/gcc-interface/Make-lang.in
-fc6e59fdc9ea9329c0d8cec36f6dd0f6  gcc/ada/gcc-interface/Makefile.in
+c7513fa4215e55ec6302debfeb9d2964  gcc/ada/gcc-interface/Makefile.in
 d47cdfac076a7e474979da4139393b39  gcc/ada/gcc-interface/ada-tree.def
 a283b124426371820055dc3a8082b6a8  gcc/ada/gcc-interface/ada-tree.h
 51c95420b5900990141d2e5705582197  gcc/ada/gcc-interface/ada.h
 4cbfd794461da0feb1b8661ec623b6c6  gcc/ada/gcc-interface/config-lang.in
 cf89e8e38d01ca91bfed6c342ee1c569  gcc/ada/gcc-interface/cuintp.c
-102923abb29b03f41695246cfdc82516  gcc/ada/gcc-interface/decl.c
+31eef307443e6a2eff2dae2574fb077c  gcc/ada/gcc-interface/decl.c
 c413d4d50e9563859f4d751a4404b705  gcc/ada/gcc-interface/gadaint.h
 b18231cb03f2f97b42fb46387ca5d9be  gcc/ada/gcc-interface/gigi.h
 551c6c4d04e4f9c63340554e826c7bed  gcc/ada/gcc-interface/lang-specs.h
 f4ffb206fe0e51f054ea66a5daaa32ff  gcc/ada/gcc-interface/lang.opt
-1718f4d0012556901214e4eafc4c49a7  gcc/ada/gcc-interface/misc.c
+c34631d0635fe85f8015d681e1a9f5da  gcc/ada/gcc-interface/misc.c
 4ce109758af9fd09626d5277a2507764  gcc/ada/gcc-interface/targtyps.c
-61a9064b795a1391858ed057bc136de9  gcc/ada/gcc-interface/trans.c
-31f221fe81d7fee9ed5bfd540ea0dde4  gcc/ada/gcc-interface/utils.c
+c1e11cf924f59cc38344d4300a1d5ea5  gcc/ada/gcc-interface/trans.c
+671bbb5c023f9271e36e25a93de01aba  gcc/ada/gcc-interface/utils.c
 7b11749f4e6d3dd14546d219cb372cb0  gcc/ada/gcc-interface/utils2.c
 78e1564fc6e18145efeeea01940a4cb4  gcc/ada/get_scos.adb
 baa8fdaf8d693eb6c5a7e42944887584  gcc/ada/get_scos.ads
@@ -1645,7 +1645,7 @@ c40aa5991541ff9c1916c95c822ae607  gcc/ada/indepsw-darwin.adb
 d7687cbf6b1c440a90c770b40742ab35  gcc/ada/indepsw-mingw.adb
 fa914ddcd147d8430f947dc903d68021  gcc/ada/indepsw.adb
 5b85c73b60202d26b3cccad29575fd6a  gcc/ada/indepsw.ads
-59f1b9334085641476c51a4efa2f1f19  gcc/ada/init.c
+acfdbff5c5b19f4dcebb1d35e93fb745  gcc/ada/init.c
 f27041d879873bad257544aba837b673  gcc/ada/initialize.c
 172b35fc27ac645ebd334bef3f9dbf82  gcc/ada/inline.adb
 190c3fbbc0e399688e01b2150271dacc  gcc/ada/inline.ads
@@ -2666,7 +2666,7 @@ b1a12d53199396f327ddecc980e710d1  gcc/ada/treeprs.adt
 4521682baf658427c38e7e4194c86ab9  gcc/ada/ttypes.ads
 373e654bed9f76ed6875cee226d0dcbc  gcc/ada/types.adb
 be7ee8bf42f632905fd0e265732c810d  gcc/ada/types.ads
-72311200c3e0a1c92b46efc3a971d2d2  gcc/ada/types.h
+f6b6a35037bb773569ed43b3125aaf18  gcc/ada/types.h
 441db1972464d6fa9f7e955634586561  gcc/ada/ug_words
 54a60157722eefc861657338313fefea  gcc/ada/uintp.adb
 f49db1f5ff371d16dc0543a76ba05d6b  gcc/ada/uintp.ads
@@ -2710,7 +2710,7 @@ ea19de2a367c59c3e9ca2ffb169870f9  gcc/alias.c
 f806ef31303c8073c9399221837a0cca  gcc/alias.h
 62460fd310b0c679995a9f3e7a5dd196  gcc/alloc-pool.c
 381b28a1bdd5698b2aa6b37bbe7bd591  gcc/alloc-pool.h
-f2703a2c5283028811b9314f55a3f876  gcc/asan.c
+01f9205a58ab703ad269012b0f203bba  gcc/asan.c
 3e1fa4c99f53f52f13177fbdc594c191  gcc/asan.h
 cfd590b0822ba24a9383ebb7ce10a076  gcc/attribs.c
 a53a9ce9c944413119fc0a25fb06a976  gcc/attribs.h
@@ -2726,14 +2726,14 @@ af0e8c840fa48a6200875c0df80dd7f7  gcc/builtin-attrs.def
 435c31f0e374dedc231c9bfea1ee4de0  gcc/builtins.c
 709447be4b984f09869436e1af94d606  gcc/builtins.def
 4b25cb43c45b2775bf3398cad0b2f997  gcc/builtins.h
-429fcb29f67015be15355b2e9669d103  gcc/c-family/ChangeLog
+838b89ea6956c366627adb2126adab64  gcc/c-family/ChangeLog
 73540d5b0f49564e0c08e24b6feeb126  gcc/c-family/array-notation-common.c
 522dd88f1775b9c27c88bdec1b215f33  gcc/c-family/c-ada-spec.c
 10157e4802b298ec57f6bbe626694034  gcc/c-family/c-ada-spec.h
 005a6e6078a443f37358315735999e75  gcc/c-family/c-cilkplus.c
-fe4405afc690b12573dd77c70f79a145  gcc/c-family/c-common.c
+9adbf544851a929b93b59f8f294623a8  gcc/c-family/c-common.c
 3ce0acd449868895cda4785a578266e2  gcc/c-family/c-common.def
-5d7444bae9d31d85d704048f1092625e  gcc/c-family/c-common.h
+2f64edf02605a36ddcb4643da27c6200  gcc/c-family/c-common.h
 3b67756246e8ee78f5476f7d6e1e5a26  gcc/c-family/c-cppbuiltin.c
 dbc45b842496652a81ddf71534f085cb  gcc/c-family/c-dump.c
 d903f037f15d1a4333bff696b8b4951a  gcc/c-family/c-format.c
@@ -2741,11 +2741,11 @@ d903f037f15d1a4333bff696b8b4951a  gcc/c-family/c-format.c
 69e2a115308d9b72ce2c53b23ca14cdb  gcc/c-family/c-gimplify.c
 a3c101e11d8d2321151be53333283c58  gcc/c-family/c-lex.c
 5c6cd6a62c649574128a4651f621a0b0  gcc/c-family/c-objc.h
-1dc164b29bfc4608e65bc1dbbf3075f3  gcc/c-family/c-omp.c
-cb6a908fe3e325518d31541c95382ebd  gcc/c-family/c-opts.c
+6fcd9cdd64b600cd292be161b04ea969  gcc/c-family/c-omp.c
+9dadf710ab87357edd7ac40326f605d2  gcc/c-family/c-opts.c
 6f8ef838c68a594024f4c12c021f38be  gcc/c-family/c-pch.c
 a764fac4f453e4c326786cf0400015da  gcc/c-family/c-ppoutput.c
-b657c501deaf141499da23ce44944859  gcc/c-family/c-pragma.c
+dce0ba09fb1c4c409b75ef665ff94efc  gcc/c-family/c-pragma.c
 61e3aeb23503e1772d1c2c1fdbcea56f  gcc/c-family/c-pragma.h
 7958151ac6795655d68812f5a45303f9  gcc/c-family/c-pretty-print.c
 822314f9921231408f230b215ee5b6d1  gcc/c-family/c-pretty-print.h
@@ -2759,20 +2759,20 @@ b657c501deaf141499da23ce44944859  gcc/c-family/c-pragma.c
 8041b1cda8919775362c4465096c609b  gcc/c-family/cilk.c
 85b441a3f28a2bd4e2ca99f03490e65e  gcc/c-family/cppspec.c
 00be2969ca302d49f76b65173590c942  gcc/c-family/stub-objc.c
-2dff10b90e21925148128f0ea3ca20f0  gcc/c/ChangeLog
+1d6e9f4ede8900c62fcd5a689271133e  gcc/c/ChangeLog
 5d46413a194e3bb9b8b12f6e49e911c3  gcc/c/Make-lang.in
-9ec984df7cf8a2836f79a2162e03b3b6  gcc/c/c-array-notation.c
+d7a3c457ca29e4251a7b5d56221cd69e  gcc/c/c-array-notation.c
 f8a2e7536c39b4d1e3f4b1d5ee6d62c5  gcc/c/c-aux-info.c
 3bda18438dfe79a5fcacb0ec192cf602  gcc/c/c-convert.c
-4604723e8e99cf3ff16e8d68f6feb581  gcc/c/c-decl.c
+3cc1c7d292032aaf8d66085b8dc20ce3  gcc/c/c-decl.c
 80705e9d8c52ab1b2501574d0dc8ab67  gcc/c/c-errors.c
 12ec429c86710adfcfe5eed23174aead  gcc/c/c-lang.c
 8b01b74da83bfb4d6dc1127114c72f94  gcc/c/c-lang.h
 e8fa0ec0164ceb8a90d6ae74f9c7fd1b  gcc/c/c-objc-common.c
 941499386ac0a23999c942a8986f8e61  gcc/c/c-objc-common.h
-1307f7b7625b59fe133120362328b6da  gcc/c/c-parser.c
+fc253e1619b9a8a5fc616ce97c6b09f1  gcc/c/c-parser.c
 66a995603b2cd1394afbfb29b90fe209  gcc/c/c-tree.h
-b3b78f574305a73e4d51b5fc69bf9dda  gcc/c/c-typeck.c
+cb28b4a54311cba22def99ce6e89cfda  gcc/c/c-typeck.c
 62032db4c55340bd16e7f80d99c0b016  gcc/c/config-lang.in
 597ddbe49d6b3528aa5670f785ed61e8  gcc/c/gccspec.c
 e972cc617a462165838c95421a29ca5e  gcc/caller-save.c
@@ -2783,7 +2783,7 @@ e136a667dd62eb56a89111c4fcb045eb  gcc/cfg.c
 02943835098f2e8538a6df30ad37cf85  gcc/cfganal.c
 4d8cc1876560628dabb57cefce453d9d  gcc/cfgbuild.c
 373997b7234f5abbda49e47e5cd973ca  gcc/cfgcleanup.c
-520104bc5700831e918532f501fa7010  gcc/cfgexpand.c
+567226e4328d5bfff1f1b9746e1e8c2e  gcc/cfgexpand.c
 b3c947b28531afadb81599f4a0d73783  gcc/cfgexpand.h
 a6a0c9ebc641dfa71f1f2e5188b0da21  gcc/cfghooks.c
 17095bd67a8350591e1bd47ec9355698  gcc/cfghooks.h
@@ -2792,11 +2792,11 @@ a6a0c9ebc641dfa71f1f2e5188b0da21  gcc/cfghooks.c
 4465b1eb3d111a823235d7e5458b8889  gcc/cfgloopanal.c
 a7a8e23de07e7514d4e470f630ee8e1e  gcc/cfgloopmanip.c
 0dec1bf60fb09e18cda16146df5e275d  gcc/cfgrtl.c
-52f46e8841f01be23f4b2c95639280ae  gcc/cgraph.c
-7674cf940b4d786f88075268cadb3e8a  gcc/cgraph.h
+444bde39f32fb5b9671d26f44171421f  gcc/cgraph.c
+7cc4dd8df507eb56aadd2311f739e311  gcc/cgraph.h
 fcb9af5cf8a6d1c7a195ca1c007c9e3f  gcc/cgraphbuild.c
-db61dc560eb7b548aaf9a52a603cbcbb  gcc/cgraphclones.c
-6929849b51d262f226099cb75f6cfade  gcc/cgraphunit.c
+d62467388a9a6820a3f988a536433852  gcc/cgraphclones.c
+3997d6631c4d50c3403b5b7b45b3a390  gcc/cgraphunit.c
 554526d022cd2d03e42412e6886c1338  gcc/cif-code.def
 f264c8d0b8b475e306ad180dadec1a98  gcc/cilk-builtins.def
 05497e8da0a9b1c9dfb1957920b812c7  gcc/cilk-common.c
@@ -2807,7 +2807,7 @@ f0fff0035c48bf460268a3e13ee6af37  gcc/collect2-aix.h
 56efb0c450fd51a9713a2dde395871bd  gcc/collect2.c
 f925b9d3bc0775367c24b644d8e35002  gcc/collect2.h
 d37c34609a296ebc9dd4d677348419ea  gcc/combine-stack-adj.c
-49346b3ce7ce5180f0fe84291406bcd4  gcc/combine.c
+7477ad9438742a77e965dd5bb722f35c  gcc/combine.c
 bc34d644ab9d1299c59daeb7a59e1087  gcc/common.opt
 a0c9b1ade89a8b10502b808eda27512d  gcc/common/common-target-def.h
 82f688c1c764b568b712d183e502bc24  gcc/common/common-target.def
@@ -2840,6 +2840,7 @@ d34f05fd6320395d42378fe449c6f95b  gcc/common/config/m68k/m68k-common.c
 c89c903fdaeebf0937c539fe077d79bc  gcc/common/config/mips/mips-common.c
 fc30a9a41b3f761ba5fff6f2c1581944  gcc/common/config/mmix/mmix-common.c
 e3c6c57c2590f0a3610edb36b66dfc03  gcc/common/config/mn10300/mn10300-common.c
+a5289d44a7568876d6b8474ce02597f1  gcc/common/config/msp430/msp430-common.c
 ef89260dc33590c40c56cc99fedc1511  gcc/common/config/nds32/nds32-common.c
 598e0913f0667a262988f8a38927b2c6  gcc/common/config/nios2/nios2-common.c
 5cd6f4c52d593fe8262f4f38668e7bf0  gcc/common/config/pa/pa-common.c
@@ -2861,9 +2862,9 @@ ef0ef64208ca9035f93ed6d6e9606df6  gcc/common/config/xstormy16/xstormy16-common.c
 2ebc5e4eccb7d2c52897dd83a4be28a7  gcc/compare-elim.c
 e82a81c423eccb73f4e9f04c09a5cae1  gcc/conditions.h
 a40ac599c845be41c961d15dfd9559b3  gcc/config.build
-7ec66ee3b384f4fc04b63987c11b3e21  gcc/config.gcc
+0ed6c6819c194b5fc2f037ec312d30ed  gcc/config.gcc
 9eba81e694fe412bcfa8aafa6743a568  gcc/config.host
-0d9065d0b9bc757911399a1b4127aa6d  gcc/config.in
+844939897f9a01558ce5f9f36bf0e344  gcc/config.in
 8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
 21a150941d104bd2b16b4b064132b82b  gcc/config/aarch64/aarch64-arches.def
 526b5bd7fea44716301891aad5581e68  gcc/config/aarch64/aarch64-builtins.c
@@ -2871,30 +2872,30 @@ fa8ac6bece011754d6e9cd8fa724af78  gcc/config/aarch64/aarch64-cores.def
 79287aa831c8692a259b3fc99493fc1f  gcc/config/aarch64/aarch64-elf-raw.h
 0da8426685ba7860c8cacd8f15a98f78  gcc/config/aarch64/aarch64-elf.h
 1f97cd7b50aac2382f0009c8933516a8  gcc/config/aarch64/aarch64-linux.h
-51bc0a1ddf9bda2e6a7c597b8e7a6782  gcc/config/aarch64/aarch64-modes.def
+19acc0c5b8eaf2ec35cb01753657f65d  gcc/config/aarch64/aarch64-modes.def
 719c650d0bf63bbe2a04c38aad30d8ca  gcc/config/aarch64/aarch64-option-extensions.def
 a3008f913374a88b9de4022df0b84d4c  gcc/config/aarch64/aarch64-opts.h
 e786c44f23ac42a3b66f08e8865d0b0a  gcc/config/aarch64/aarch64-protos.h
 0a8a4231dd82bedb83a9d89591dfd07f  gcc/config/aarch64/aarch64-simd-builtins.def
-e0f8f1d76d1dae334cf39aaf5a922533  gcc/config/aarch64/aarch64-simd.md
+e92c68894aa2124bdd3fde807ebe5a28  gcc/config/aarch64/aarch64-simd.md
 d0075eefdaf65db63dacef89ea39e1ea  gcc/config/aarch64/aarch64-tune.md
-b8d56e96679088e423ae1431579ee273  gcc/config/aarch64/aarch64.c
-0d33e7e507dd97cbe7bf272379fa8dab  gcc/config/aarch64/aarch64.h
-f63fe28acb626e46d41cba25d7ddbdce  gcc/config/aarch64/aarch64.md
+d179820d7b55a2585bfe2aed5196f0be  gcc/config/aarch64/aarch64.c
+52f8eb234212c8c48c3468fd5318f1e9  gcc/config/aarch64/aarch64.h
+1b2d799df61cb7053044749de1a94364  gcc/config/aarch64/aarch64.md
 5f65f38fa897daabd9e7f57dd1a9e90a  gcc/config/aarch64/aarch64.opt
-d744a2fc495a74654c2bc56f58b45274  gcc/config/aarch64/arm_neon.h
+04a9a881cdda356dc9397436e1175cd8  gcc/config/aarch64/arm_neon.h
 563bb636b7b9dfcfc4fb5fd31576726b  gcc/config/aarch64/atomics.md
 e1792eef6442fd7efd11eb48c3c9a450  gcc/config/aarch64/biarchilp32.h
 c206feb1f06af29cb310e7af1a86d8ee  gcc/config/aarch64/biarchlp64.h
 b01df6d05d957e306ba5c14f633d2320  gcc/config/aarch64/constraints.md
 61def47e552d5a0279fbbe8a7a5fc8ad  gcc/config/aarch64/gentune.sh
-d8521aa09888da5924979d87c18a69f4  gcc/config/aarch64/iterators.md
+f4b897b3be3c77cd2b507ea94363a21e  gcc/config/aarch64/iterators.md
 0d943cb735d61d6bb3c8b3260e47805c  gcc/config/aarch64/predicates.md
 a381f4f44bffba3068dea2bcf86b1c37  gcc/config/aarch64/t-aarch64
 c5163265d2d83b8fe360d25202a8b342  gcc/config/aarch64/t-aarch64-linux
 9d0a5d95304a9bd6b70b0e316bd30832  gcc/config/alpha/alpha-modes.def
 b1dbf3309f3744b073c14d10174ad350  gcc/config/alpha/alpha-protos.h
-34f1fc8f7bc037838e036d6819487b42  gcc/config/alpha/alpha.c
+718370bc105011b843caf56c9aca49f1  gcc/config/alpha/alpha.c
 26d7e3357f7c361c8e6343bd33837415  gcc/config/alpha/alpha.h
 b88e1217fbf0f3dae5b18f17063bf733  gcc/config/alpha/alpha.md
 0112499d08da07e950408270a411f17b  gcc/config/alpha/alpha.opt
@@ -2936,31 +2937,31 @@ e35b1e71205f3168b496715bc00cfbec  gcc/config/arc/fpx.md
 592330b7b4a8a7b6708c760c980be7e9  gcc/config/arm/aarch-common-protos.h
 6f5f08370088230ff90314f46f9f7d7a  gcc/config/arm/aarch-common.c
 9321b0cdefad344e9a1f5562d699dd1c  gcc/config/arm/aarch-cost-tables.h
-22ba327bc30b4f5e7a072f727c46d89b  gcc/config/arm/aout.h
+ea8d6fd4a3a9ed6dc6e6fe9518fdd574  gcc/config/arm/aout.h
 2a5e85335df5916cba0b8ad0a995b677  gcc/config/arm/arm-arches.def
 fd7fbd9763af884894e66aca6091cd11  gcc/config/arm/arm-c.c
-990ac7296d4b4bcac097d093565c4727  gcc/config/arm/arm-cores.def
+ec1ec936dedafc71f84328103593f58c  gcc/config/arm/arm-cores.def
 717f132978455853fdebde9cd08f2ce3  gcc/config/arm/arm-fixed.md
 cc77f434f0e62473275484fc733f9e2f  gcc/config/arm/arm-fpus.def
 b8712fbb401b24fa48945dac9bfe367c  gcc/config/arm/arm-generic.md
 a10288b2cb1af625b28612f6454a8386  gcc/config/arm/arm-ldmstm.ml
 cf094505e37b191ba07edb74fbac88b1  gcc/config/arm/arm-modes.def
-e78af379056e6bf4060a0d2552d420a5  gcc/config/arm/arm-opts.h
+050d4ca3b04fd3fc1406a0dcbebfe6d9  gcc/config/arm/arm-opts.h
 985bd0307db7a7dcdad194d599f5c624  gcc/config/arm/arm-protos.h
 d4141d32e48618aa5ba56b67b3b6f221  gcc/config/arm/arm-tables.opt
 d5d7db112e25b2d92afea2a696a57ff9  gcc/config/arm/arm-tune.md
-904a02287a0b495a86a23e9dce8cdac9  gcc/config/arm/arm.c
-ed8bea5ab7eab5b3ce8cafb6d1e0df6d  gcc/config/arm/arm.h
-bc4b012b05f7c982e378994e229c8359  gcc/config/arm/arm.md
+84548cbc1ffc6a16eb12eece72917cc9  gcc/config/arm/arm.c
+4c8130737c990b8939f9a33c1f6314d5  gcc/config/arm/arm.h
+9e01454206781ded996aff1835119141  gcc/config/arm/arm.md
 7ec80248e2019885ec3fa78e3d2df3b7  gcc/config/arm/arm.opt
 55a87c11458722539f3821c53f4b8c5f  gcc/config/arm/arm1020e.md
 7c28931b2e524e1b44678ca8334d5d54  gcc/config/arm/arm1026ejs.md
 dfdf8a4aee915224ee2bc49fae27c588  gcc/config/arm/arm1136jfs.md
 45ac9277861b1a3d206e924adc48e8ba  gcc/config/arm/arm926ejs.md
 88a5b7809812aa7a05f031af0da0e964  gcc/config/arm/arm_acle.h
-d6139d5f8fe594d8bfeef9696109ad2c  gcc/config/arm/arm_neon.h
+7757b942b9956d106f93c0bec956896c  gcc/config/arm/arm_neon.h
 57ea068bd966895991477ffd6e51d2f2  gcc/config/arm/arm_neon_builtins.def
-bc8ca7f0793af390c643b7fc7cf661f2  gcc/config/arm/bpabi.h
+ebcb1b558c456101c18d856467a5ffe4  gcc/config/arm/bpabi.h
 1d36ffaf951df98052e3f212624f4570  gcc/config/arm/coff.h
 014379a6df6bf446bf48de1cdb795218  gcc/config/arm/constraints.md
 0cb3e2e12b3a38d03abbdeda5baf61cc  gcc/config/arm/cortex-a15-neon.md
@@ -2979,7 +2980,7 @@ f1c35fe36074aeb6b86bf3df9b9809cb  gcc/config/arm/cortex-r4f.md
 1d56e0ea31042b3affc03861cb6a14a2  gcc/config/arm/crypto.def
 d5c5c3524695653b76c4f2c0f4962135  gcc/config/arm/crypto.md
 6eee2b8989e806a15ddf1164190ae779  gcc/config/arm/driver-arm.c
-c21dcae115511871aabca10a1284c0e6  gcc/config/arm/elf.h
+8aa2af0f9cf690414116130a59f6ead0  gcc/config/arm/elf.h
 68cb8271ca3a2efc000d490e96066dfe  gcc/config/arm/fa526.md
 091065d093420ecc514c25df889f23fb  gcc/config/arm/fa606te.md
 504b87c80c9fc45168f5d95a3111845d  gcc/config/arm/fa626te.md
@@ -2993,17 +2994,15 @@ baac023f963fbf3f3056d327e5a7f0c2  gcc/config/arm/gentune.sh
 0a29e3add3cde2528f46f0ea3e4a9d16  gcc/config/arm/ldmstm.md
 15a62603ee5291a6e33533c06353786e  gcc/config/arm/ldrdstrd.md
 11a002db4ff19e479f0d124cdafb860a  gcc/config/arm/linux-eabi.h
-749a26b5388fa3f5575f3ba347ca5b8a  gcc/config/arm/linux-elf.h
-e5707fd0263e93cfd7e4f294d88db7a5  gcc/config/arm/linux-gas.h
+1659d9b210406f8ab375e650ec9524b4  gcc/config/arm/linux-elf.h
+c0316bad2e142d642f4edea6c49a1661  gcc/config/arm/linux-gas.h
 b7897a497d5fe972d6d7d42299cf7334  gcc/config/arm/marvell-f-iwmmxt.md
 b1c28c557bd726126ce8dc1cca03d981  gcc/config/arm/marvell-pj4.md
 771faa70c2051051996ec38873011acc  gcc/config/arm/mmintrin.h
-1ee25c02568a36d527c0f8ebd7af594f  gcc/config/arm/neon-docgen.ml
-575e419fc8cdf990cc4ff317aac599b4  gcc/config/arm/neon-gen.ml
 7a5eba056883c332ad3a5fe1725cc6c2  gcc/config/arm/neon-testgen.ml
 a5bcc027bcaf911067121805327b6407  gcc/config/arm/neon.md
 d16795d6009d62f44e69fece0b527660  gcc/config/arm/neon.ml
-795ef8ff5bb19feeb771758cf2384c31  gcc/config/arm/netbsd-elf.h
+a24042b796d08a2cd687392b38423454  gcc/config/arm/netbsd-elf.h
 24a26d6ba1e6ebf3a9676ee91cd6efb4  gcc/config/arm/predicates.md
 e062772cc17dc38f590c49d66b7495e5  gcc/config/arm/rtems-eabi.h
 f1380539ece11e800120f6dd294810c0  gcc/config/arm/semi.h
@@ -3020,30 +3019,30 @@ cda57f2e60bf2b2516287537752ed00e  gcc/config/arm/t-rtems-eabi
 6a2754e02840c8bafdf59d8df84f5c35  gcc/config/arm/t-vxworks
 bcd5d34153856d124d957f7232436d2c  gcc/config/arm/thumb2.md
 aff5361a35cf3b67875219f0cf3033e8  gcc/config/arm/types.md
-a5012a589602d48db53fabb9dc9109cd  gcc/config/arm/uclinux-eabi.h
-7ef376804eee1de2ab012b3b7091e541  gcc/config/arm/uclinux-elf.h
+1e08e1c9ef0b4ef9afbd7098ed370a30  gcc/config/arm/uclinux-eabi.h
+9a1e2a69825c4161470dc22b2622e678  gcc/config/arm/uclinux-elf.h
 75e200f7915fb565020d3cb835874ace  gcc/config/arm/unknown-elf.h
 c136d87590d20ac3cfb14cbfae13ffea  gcc/config/arm/unspecs.md
 3d0b0d6a1ba842743ec73559bd4deff8  gcc/config/arm/vec-common.md
 6602aa41ff91da4bf98cb2adf2f43c7b  gcc/config/arm/vfp.md
 81b24c3d99f42aaf80b43d705f3f7ea3  gcc/config/arm/vfp11.md
-0cc82c8ffc973f91ed1c3859c23e186e  gcc/config/arm/vxworks.h
+892885b7d4dc935afdd8917fc2d277e6  gcc/config/arm/vxworks.h
 7ea704769204d420cbcbb2f114349312  gcc/config/arm/vxworks.opt
 a17a638dc98f3f18b0e13448c69e1e65  gcc/config/arm/x-arm
 b5a2b09861de6689113db05b64719022  gcc/config/avr/avr-arch.h
 2643f8b817df1b5cb3b39737fdb810ad  gcc/config/avr/avr-c.c
 8b8a7041f9af051e650a9caa8a73e3f7  gcc/config/avr/avr-devices.c
 5b18e57e6b772fc6eff612a345599f23  gcc/config/avr/avr-dimode.md
-964d39554ea32300f4353e8bf87c115a  gcc/config/avr/avr-fixed.md
+6360195f2f3c5789d2f40cea7408f84f  gcc/config/avr/avr-fixed.md
 0ea9e1292fa63ad32d73b8c1ea6175e9  gcc/config/avr/avr-log.c
-12514ae1006cd842cff739c9680f69e2  gcc/config/avr/avr-mcus.def
+48400c902cb5f518f34efe8178f569b4  gcc/config/avr/avr-mcus.def
 f2654233df6eb02ba173ff479c08e9a5  gcc/config/avr/avr-modes.def
 f18b33ac6648ea748c8b996ee866aa3a  gcc/config/avr/avr-protos.h
 5ebe500ff3ac2700f5b1bc9c761a0c87  gcc/config/avr/avr-stdint.h
 7344d18acafd2951ffbf2c0a9f014f08  gcc/config/avr/avr-tables.opt
-c4c13b493b766197778c55301a2613e3  gcc/config/avr/avr.c
-14d8b02e8292c150bb47704e7442bc82  gcc/config/avr/avr.h
-1cc6502c3e804c18ea0d4e157317d782  gcc/config/avr/avr.md
+039808b0d14099c7c5d41b144f7db0f0  gcc/config/avr/avr.c
+9f36e271302a29de37eae1f2ce2b1b0c  gcc/config/avr/avr.h
+e11cb18f03e4fbe2cd763d60120d2f50  gcc/config/avr/avr.md
 421709cbe0735ad8406c0430cf5087d8  gcc/config/avr/avr.opt
 d661391f9cbec6e8f6a68663a2f1eef7  gcc/config/avr/avrlibc.h
 df7d2059ef5d7a0c8b8680202c92f0c8  gcc/config/avr/builtins.def
@@ -3137,7 +3136,7 @@ cab1f31b62c7e70b908f7e965a6986bf  gcc/config/darwin.h
 08dc860eb57f4234525d5a7c354e6531  gcc/config/darwin.opt
 a58fdc493363dfcf3d26a22cbacc78d7  gcc/config/darwin10.h
 8f2cdbd6cce4cf6cc3b6312c89ab384a  gcc/config/darwin9.h
-3936580e0711aeda2dc1e0b4b6ad2eb7  gcc/config/dbx.h
+d52e26808053c62149da62094c2d53f2  gcc/config/dbx.h
 6992e29d69610bac1fc942b933479a3c  gcc/config/dbxcoff.h
 799a2e144a506e2b4880dfe40e4e3241  gcc/config/dbxelf.h
 c79e4c5a8e729a0c1c7b6f3a5723ff97  gcc/config/default-c.c
@@ -3239,13 +3238,13 @@ a9e1cde30a6ecf9d70e7db1d49a3a8f6  gcc/config/i386/crtdll.h
 24c5f3a19dc3f8efde748b4e1fb28aa1  gcc/config/i386/cygming.opt
 e21436b3decf985d45fcb3570935958f  gcc/config/i386/cygwin-stdint.h
 b8c56841226d00f3611e76df81bc1c32  gcc/config/i386/cygwin-w64.h
-a4281656c7c96108f69b4d49b64346bc  gcc/config/i386/cygwin.h
+04d0e764f6744c7e9b76a39d0381d053  gcc/config/i386/cygwin.h
 21dcaf77cc8fb36ae705ee603ce101e7  gcc/config/i386/darwin.h
 f662aa7a9eab8bad5800512a3187b0c8  gcc/config/i386/darwin64.h
 e7c8adf4ccaf394835acedd1e77b0be5  gcc/config/i386/djgpp-stdint.h
 ed2a20210c9db85baa32cfae1070d72a  gcc/config/i386/djgpp.h
 b5c747e37b508b664a1ff09f6e55f235  gcc/config/i386/djgpp.opt
-8d3102a8b712400dbd808d9910635dba  gcc/config/i386/driver-i386.c
+4a6351b62d521bfcc95294ec2e18673f  gcc/config/i386/driver-i386.c
 8ee7873e94be2782003bd626af507dea  gcc/config/i386/emmintrin.h
 c10561ee6fc509ac4572687dc0f67e76  gcc/config/i386/f16cintrin.h
 301045a5d299805e520b98e6c019c4eb  gcc/config/i386/fma4intrin.h
@@ -3271,9 +3270,9 @@ a206f895a51dca0acbbd5c40439f43ac  gcc/config/i386/i386-c.c
 fbc0e51208d80f573c53d5b2172b2750  gcc/config/i386/i386-modes.def
 1fc953e4fa5bc7c93802f7952b7dafbc  gcc/config/i386/i386-opts.h
 b2009cc823c7348862f1dd5b62268874  gcc/config/i386/i386-protos.h
-5a3d6e3603783530ff8af3cd36274b56  gcc/config/i386/i386.c
+e9f3a07488290b60468d00cb4d4565a2  gcc/config/i386/i386.c
 cc283b2c0490928dcd63471d19148858  gcc/config/i386/i386.h
-f6762ecc5776c962f05fbd3d189a99b4  gcc/config/i386/i386.md
+9a8b89ee2e0d7dd72af72a78b1ccf641  gcc/config/i386/i386.md
 8ae240f9350420a2a75307b02b20422a  gcc/config/i386/i386.opt
 ddbc3d63f2446262d897ba8f20043c58  gcc/config/i386/i386elf.h
 c238f4d065449a93da6bce13121a2c3d  gcc/config/i386/ia32intrin.h
@@ -3295,7 +3294,7 @@ b1b30be7ff3a4fd669a9f6b11c2c8195  gcc/config/i386/lzcntintrin.h
 02bfe0ac147bcb4c9f26f542a3ea1c3a  gcc/config/i386/mingw-w64.h
 666ec7e2e9890486e50762bfe1ca7c25  gcc/config/i386/mingw-w64.opt
 d17b901c2f628cb44f5a234eb3572a92  gcc/config/i386/mingw.opt
-8d288d09714f4e79aae5458ef6848407  gcc/config/i386/mingw32.h
+17134943d15d722dccd7c33d27496b58  gcc/config/i386/mingw32.h
 97f47580518fbe15e82cf9bd4741669f  gcc/config/i386/mm3dnow.h
 e4e116de997ab92599e67a55612e8c65  gcc/config/i386/mmintrin.h
 6417b98a54d4b0b7a5161245196159f4  gcc/config/i386/mmx.md
@@ -3403,7 +3402,7 @@ be67d053ecca105537aeb8e554b4cfa1  gcc/config/ia64/predicates.md
 208c523338e87e92859a61537a861ee0  gcc/config/ia64/vect.md
 bc324d80212cb61b474b747b25885f92  gcc/config/ia64/vms.h
 f81371dd35397ed28d2a17f175979e8f  gcc/config/ia64/vms.opt
-71188f9c44228efe9db53d6fa9b491b4  gcc/config/initfini-array.h
+5e1cb7f2cd29907f552aec0922372fc4  gcc/config/initfini-array.h
 74314035e956f32870e446464a93df0f  gcc/config/iq2000/abi
 3a99cc3eedb9706a5a0f28a23617656f  gcc/config/iq2000/constraints.md
 35560233ecd22b772348ed6390e163d6  gcc/config/iq2000/iq2000-opts.h
@@ -3670,12 +3669,13 @@ f276505b774e975b88b6c90362783e73  gcc/config/msp430/README.txt
 4772463c3b1ea64d84fc459630245dc6  gcc/config/msp430/constraints.md
 81c5efbfbbf0226a94fec244522f0086  gcc/config/msp430/msp430-c.c
 45e698ba893f440905885dced318b218  gcc/config/msp430/msp430-modes.def
-2725dd8935cc0b1fe508a73747bfee2e  gcc/config/msp430/msp430-protos.h
-9cd05a6d3ab08982dab0bf70da241111  gcc/config/msp430/msp430.c
-b2e61ed52e0d72055c1528a3de95164a  gcc/config/msp430/msp430.h
-4955a52bd8647e7a5ed0a596c1558c55  gcc/config/msp430/msp430.md
-b73015e7d728b07e82f86543b578c7cf  gcc/config/msp430/msp430.opt
-271e888963ee26b4096af0f70230db1b  gcc/config/msp430/predicates.md
+e343f3539654f52b3b9a63601843a705  gcc/config/msp430/msp430-opts.h
+da9601ef9725a1ac04f31f9dd8d88b8e  gcc/config/msp430/msp430-protos.h
+aadcd4b51cd4514cb6acdc4ca347eaff  gcc/config/msp430/msp430.c
+0463c9d12d75be3d5afb9d8da1286fb5  gcc/config/msp430/msp430.h
+8f40265829d17cd8fdbd4ec9094e3493  gcc/config/msp430/msp430.md
+8a2e57378fa5d5962cae3a7e95498eec  gcc/config/msp430/msp430.opt
+1cfe9d75789557869da70353b1cafcab  gcc/config/msp430/predicates.md
 dc8043434cd35a5508738f23cced8f6a  gcc/config/msp430/t-msp430
 bef2e0bb04dc995149b8679834ba792e  gcc/config/nds32/constants.md
 d01826784eb6ec8ca848e65ac5584da8  gcc/config/nds32/constraints.md
@@ -3699,7 +3699,7 @@ afcbf06d28dc939fe7f0fe1f80a1e5ba  gcc/config/netbsd-elf.h
 c75989e8ba956b93961234f81b1b3e58  gcc/config/netbsd-elf.opt
 439770d83eb126178684932270b50d52  gcc/config/netbsd.h
 ec624b498a34279e8f982b29f9a338af  gcc/config/netbsd.opt
-96fd04552b2b9c6a425b19257d11f244  gcc/config/newlib-stdint.h
+5c96f94f067df4c4104960c5000a2fce  gcc/config/newlib-stdint.h
 b7d976992060b59d0ef7031a94475df5  gcc/config/nios2/constraints.md
 ef734234c709297b1fb7f68b54c6d3de  gcc/config/nios2/elf.h
 ddc88bf2b6aa464fe12463a0467299d5  gcc/config/nios2/elf.opt
@@ -3808,7 +3808,7 @@ e6ce7b8fd7aaeddaa95722dd2257db20  gcc/config/rs6000/aix53.h
 a126c516a8ecc213c4eae1949e1a2e15  gcc/config/rs6000/aix61.h
 7ba56f31fe475125fb79489a951e14c5  gcc/config/rs6000/aix64.opt
 f99b25eefb9db62d51f310e5b787ff5a  gcc/config/rs6000/altivec.h
-c500bcd8daa1df5dd882d5357386ea5c  gcc/config/rs6000/altivec.md
+87ac343d66c31032b41c494d38ffb0d9  gcc/config/rs6000/altivec.md
 87ecd670e3f1a8e2186f29d0b3ee3720  gcc/config/rs6000/biarch64.h
 07348cec6e9bf39592be4fad5e165f02  gcc/config/rs6000/cell.md
 f3ab2b31f64194613298ea7a70a5e4ce  gcc/config/rs6000/constraints.md
@@ -3820,7 +3820,7 @@ d99ffcd0ce9424a55a2fea384bb1686e  gcc/config/rs6000/darwin.opt
 02ca5caa36de5edf56fe24dbbda6b294  gcc/config/rs6000/darwin7.h
 5cbd6ff218133094f33d29711429a7bf  gcc/config/rs6000/darwin8.h
 1d8de40ad03abb984184f2bd449a4029  gcc/config/rs6000/default64.h
-7a1401c61271d7d7ad136bbb68b29ea1  gcc/config/rs6000/dfp.md
+e0c3e640aac757ec2f33aee03cea2181  gcc/config/rs6000/dfp.md
 2441ed646ceea5331ee440418bd26204  gcc/config/rs6000/driver-rs6000.c
 c8949ac54fd92b36837415b4558f7448  gcc/config/rs6000/e300c2c3.md
 1f15aab6bf2c740614cb66d636c01a19  gcc/config/rs6000/e500.h
@@ -3837,9 +3837,9 @@ b88b3f163ef0f693776ccfcdb5ee5947  gcc/config/rs6000/freebsd64.h
 f993244bbc210c86997e1f962ce62a05  gcc/config/rs6000/genopt.sh
 46cf29a42c9dea21b80a0d2adaf86045  gcc/config/rs6000/host-darwin.c
 49e9ca19e3ce57f746c48f645ddb6629  gcc/config/rs6000/host-ppc64-darwin.c
-cc22d9575e94320c4263739101254d07  gcc/config/rs6000/htm.md
+608b42e39abfee0956b074f3b05d898c  gcc/config/rs6000/htm.md
 fc49e7468c18e626771f399690584b01  gcc/config/rs6000/htmintrin.h
-6db289dd98c70ade92bc5ce741966238  gcc/config/rs6000/htmxlintrin.h
+ce27605188d04634347cddbe29359656  gcc/config/rs6000/htmxlintrin.h
 94b9c339bd047a988fc31eeb870b056b  gcc/config/rs6000/linux.h
 a53d69dc8707272a24e28a74b326df66  gcc/config/rs6000/linux64.h
 e8976be8a2c554ec952fa2578c39aba7  gcc/config/rs6000/linux64.opt
@@ -3859,18 +3859,18 @@ fa3263af675169a19805527633e55a4c  gcc/config/rs6000/power5.md
 ecc63691ee399be45afbeb50ef539bb7  gcc/config/rs6000/power8.md
 0eca30e0219caa2c3b9107b8a8934167  gcc/config/rs6000/ppc-asm.h
 a399e486f9d1ec320a662bd4afffd037  gcc/config/rs6000/ppu_intrinsics.h
-034b4482bb5c43d49fe72d5ee86f5755  gcc/config/rs6000/predicates.md
-1e67b012ea1a2a9bc17967d0176399b6  gcc/config/rs6000/rs6000-builtin.def
+7b4965895e3de2671c0d4baec4bac25c  gcc/config/rs6000/predicates.md
+a727574906ad78e966f6cf33cd1b9fbe  gcc/config/rs6000/rs6000-builtin.def
 e03a012414e4363cc0297e7022d3d17c  gcc/config/rs6000/rs6000-c.c
 b8e72be81712f25cfaede9887cc18d63  gcc/config/rs6000/rs6000-cpus.def
 2b7ac7ddb1e383347e8684708991a45c  gcc/config/rs6000/rs6000-linux.c
 7d06c2b54e7e78a9a57c2f9719e0d468  gcc/config/rs6000/rs6000-modes.def
 09c1fbf640b3bad5ae3bb2300301eaa8  gcc/config/rs6000/rs6000-opts.h
-1e962a6fe5044ba2cf188d320875649b  gcc/config/rs6000/rs6000-protos.h
+cd5c5823d74d91e89b5cde321fa0a0b5  gcc/config/rs6000/rs6000-protos.h
 91c3c0b251bd8b64407d2c54008592a3  gcc/config/rs6000/rs6000-tables.opt
-8e99fce650a2d7c4802477b619849298  gcc/config/rs6000/rs6000.c
-a3ad0b92d8a977d3b7d0cef20546c521  gcc/config/rs6000/rs6000.h
-7e0dd7ce95a25e8ce508d8f1d07e91a5  gcc/config/rs6000/rs6000.md
+846d98a534311ea7e86f0de8b3226f9e  gcc/config/rs6000/rs6000.c
+9ec9d392b57323b58611dcbb490a1646  gcc/config/rs6000/rs6000.h
+d792d34d555de1d81a1d5c74fcacadf6  gcc/config/rs6000/rs6000.md
 7343b7045580eba4411121ec1934ecad  gcc/config/rs6000/rs6000.opt
 4449f37807aeb14832c50529169a3ffe  gcc/config/rs6000/rs64.md
 f33e13ba9553f9dffed8aa05d8df34d1  gcc/config/rs6000/rtems.h
@@ -3880,7 +3880,7 @@ aeae742b02e4f6ac96fa1a3d18fad193  gcc/config/rs6000/si2vmx.h
 a9da2a60ceb8a34d28fd44dfb88da7f7  gcc/config/rs6000/spe.h
 d8d983e9d6d999fdf563dfe20ed78474  gcc/config/rs6000/spe.md
 1bd465f61447745c22afbe27e0f381ec  gcc/config/rs6000/spu2vmx.h
-10a887e10132e9413706333244ff91d4  gcc/config/rs6000/sync.md
+a9f8e6036f73260991227c777d01a371  gcc/config/rs6000/sync.md
 8a041c83cc607c42aa7ae7046df74070  gcc/config/rs6000/sysv4.h
 7a548d9a782e0a42d0e7ff42a1f331b7  gcc/config/rs6000/sysv4.opt
 3b9a0af37461971b0c7698f018bd13af  gcc/config/rs6000/sysv4le.h
@@ -3910,7 +3910,7 @@ d23864248497f7f5544c2e1916dc402d  gcc/config/rs6000/t-xilinx
 b1f48ff99abc14b3f61842bd2ad8cb9f  gcc/config/rs6000/titan.md
 0ac3e3c82b12030f8797bf598d14a7df  gcc/config/rs6000/vec_types.h
 afa1b08d7889dfa24025d27c5ebcf9d2  gcc/config/rs6000/vector.md
-619057d84062c67d970112fcf127b91f  gcc/config/rs6000/vsx.md
+66ec4591374a2a54342c80bb63250479  gcc/config/rs6000/vsx.md
 0c2404e4c53d11d18595ce802fcd85df  gcc/config/rs6000/vxworks.h
 5c2f724024335c015d76fe32d3da6de9  gcc/config/rs6000/x-aix
 af875b9bcb1ec1da1f33d5e34df8ca7b  gcc/config/rs6000/x-darwin
@@ -3922,7 +3922,7 @@ e96a736663df72a44ca98273b81a32c5  gcc/config/rs6000/xcoff.h
 e921244f996542b710957fd7ab4e7c8f  gcc/config/rs6000/xfpu.md
 1efdbc0666cd2a766427ef67bbb15773  gcc/config/rs6000/xilinx.h
 e7a35ee01feee949866704b0d05f7375  gcc/config/rs6000/xilinx.opt
-69d954922c9feecc81aa2cbc28850fec  gcc/config/rtems.h
+4ef07d56945965286be56fe634c74660  gcc/config/rtems.h
 4a81983fc5767ef847178b1c398fa112  gcc/config/rtems.opt
 b883ac69b1a233fdf81421da26748b82  gcc/config/rx/constraints.md
 e32f17005427bb0f246f390e31202982  gcc/config/rx/predicates.md
@@ -3987,7 +3987,7 @@ fd503e66901381fd4a42832d0d3a26d0  gcc/config/sh/rtemself.h
 815bc614203e150615c85713d1aa605a  gcc/config/sh/sh-mem.cc
 ee56adc86b26db0a967855a075947e96  gcc/config/sh/sh-modes.def
 e0d982724069321bc7bdc47869642298  gcc/config/sh/sh-protos.h
-ef9ef4706de1da43d91e1037839b9a2d  gcc/config/sh/sh.c
+ca269f7f50036a7abfe4c200bef3b526  gcc/config/sh/sh.c
 c4e8a30076baf764ee83c7a1427cad1c  gcc/config/sh/sh.h
 56bc2118729eb86840eaa403473be07a  gcc/config/sh/sh.md
 738c29389fcea942f96d0f3ef40b61f8  gcc/config/sh/sh.opt
@@ -4015,12 +4015,14 @@ c44bf50c0ddeb5e7812797cba1198b04  gcc/config/sh/t-sh64
 ee1c8551d20bb54f9fdc06c861fc7855  gcc/config/sol2-10.h
 b158f432118f2f65990ae38e82cfa8b7  gcc/config/sol2-bi.h
 3d12d4d612066683f2ac724e1208053d  gcc/config/sol2-c.c
+5c26c2321d68d4724b0d0076803c6b89  gcc/config/sol2-clearcap.map
+73dd11dea23019ab25cbbd70968694e7  gcc/config/sol2-clearcapv2.map
 44524ef1851c8536902a3c853a673893  gcc/config/sol2-cxx.c
 57069fdd8de13deb38e01e37cc05c6e9  gcc/config/sol2-protos.h
 9d646f447e0e9cea13634ba6247c718c  gcc/config/sol2-stubs.c
 ec1cee3f01093189b897e121867d295e  gcc/config/sol2.c
-eb380a1bc26c24f3ad116ebc0a888b6b  gcc/config/sol2.h
-98c7dbec52fde3172cca4e3dacdc725b  gcc/config/sol2.opt
+ee49a8b66dfe04b0950ae00082080a2e  gcc/config/sol2.h
+64a06bd4f2ca96a9e838f41d637a809b  gcc/config/sol2.opt
 d376961bc8fba1465e216bf051d953a3  gcc/config/sparc/biarch64.h
 62b3b82c1d92b5afde36be050abfcd4f  gcc/config/sparc/constraints.md
 ad6e28a5a103aa7f72a933222bffb3ea  gcc/config/sparc/cypress.md
@@ -4046,14 +4048,14 @@ a7f11fb79691ee2c896b0cf2880ed295  gcc/config/sparc/predicates.md
 4c9272c156a54169682c4d78519e0574  gcc/config/sparc/sparc-c.c
 fe11466ca359c98303d1d5a77efc7277  gcc/config/sparc/sparc-modes.def
 b3a2f800b64aa009f99321dfb6a0f3b6  gcc/config/sparc/sparc-opts.h
-d293d1f15e3d50817d45094addc03686  gcc/config/sparc/sparc-protos.h
-cc83181bf17b40dacf1b54d35a524561  gcc/config/sparc/sparc.c
+10784bdb9b36f0c0d8072f1299f9fa9c  gcc/config/sparc/sparc-protos.h
+80cf8d1da0e7beece46d81df37a27494  gcc/config/sparc/sparc.c
 056e9cce1df0c82fbbf3df07ca8247c8  gcc/config/sparc/sparc.h
-1bc8e3f63a355025962c17184c8abf24  gcc/config/sparc/sparc.md
-1ecc43f754c828db35372a102bd69702  gcc/config/sparc/sparc.opt
+809a67243ab306f705824adc49250783  gcc/config/sparc/sparc.md
+0fc21233cd7245bdd222051524ce0840  gcc/config/sparc/sparc.opt
 a4e9378ba096bbe768f431e5efe542fe  gcc/config/sparc/sparclet.md
 23633c532af69df48b8945cd85fa8e89  gcc/config/sparc/supersparc.md
-02061225bf4b9a7f1d10b8074a261c5b  gcc/config/sparc/sync.md
+9a1ba094e19de6682a05f2e661b89991  gcc/config/sparc/sync.md
 06afb5edf97e75d9c98bd0c7feee7ce8  gcc/config/sparc/sysv4.h
 a833a63e73fa8b2cd6d957a7dba46b80  gcc/config/sparc/t-elf
 c220a70c033b2f3839f5da1eaf86bd51  gcc/config/sparc/t-leon
@@ -4108,7 +4110,7 @@ c2ad6aa93a742ce1813e887d69981b2d  gcc/config/t-linux
 fa90d7365d19dbaf3cae61e13de2e767  gcc/config/t-pnt16-warn
 501751f2be56698ed1c9cf18358b67ac  gcc/config/t-rtems
 51d3678acb41d4448cc332f7a8e8cb2e  gcc/config/t-slibgcc
-4f7c6ccc905067d90494d4d1bb45d388  gcc/config/t-sol2
+e6a92484ed674b3c3213e4cfca07314a  gcc/config/t-sol2
 e05234e1ab29a8bd1212092f1bcd5a74  gcc/config/t-sysroot-suffix
 d5bba4910d9cc9e902bff4cc8feff8e0  gcc/config/t-vxworks
 20ed94baac64f4265b79ab4e13487e16  gcc/config/t-winnt
@@ -4152,15 +4154,15 @@ c8984bb3fa0a7d9271f578b4d0a07d13  gcc/config/tilepro/tilepro-protos.h
 a6ae71a556271cc116214b3e9e87d867  gcc/config/usegld.h
 aa217ffcab0f4b76c0459717934d5bda  gcc/config/v850/constraints.md
 3cb04126d779bc8a345b096d09d757da  gcc/config/v850/predicates.md
-19e23482aaf4ca61eece1fea5a23c518  gcc/config/v850/rtems.h
+386aa2cbf18ef45000390ccf1bfb5867  gcc/config/v850/rtems.h
 41b5d5e91cc905b1e3ba5de47db5f9c6  gcc/config/v850/t-rtems
 66ab7b7fe2255c165f979e2b216bd8f7  gcc/config/v850/t-v850
 b44b30ed33b02ca0176533d90957b282  gcc/config/v850/v850-c.c
 11a7e98cb745eec186b8a9471f8c55e3  gcc/config/v850/v850-modes.def
-4883b298bdc79ea42637897927fed567  gcc/config/v850/v850-opts.h
+595422e67863727481fd0af4e07d6017  gcc/config/v850/v850-opts.h
 bb76cf6465c78874169453c0c1814c1f  gcc/config/v850/v850-protos.h
 3bd8de8345980d16a3939ac539aee1a4  gcc/config/v850/v850.c
-2cc37b2d1b50b3aeeca4f76a6febaaee  gcc/config/v850/v850.h
+d2a472a98b954b3eb4d5e6ccf30f985c  gcc/config/v850/v850.h
 a738c0152bc53c7ee18acf62857c95c0  gcc/config/v850/v850.md
 0178572afbc1cc677bf4ca8fea8a70d8  gcc/config/v850/v850.opt
 4851493966cb69d11eca715575900ccb  gcc/config/vax/builtins.md
@@ -4218,8 +4220,8 @@ a4953dec370aeb83aa4c300580989aca  gcc/config/xtensa/xtensa.c
 3403522b62b3afbdee0c6ba1c08dd9b5  gcc/config/xtensa/xtensa.h
 d0f70581147ddc12bdd0b9b2002099f9  gcc/config/xtensa/xtensa.md
 3626e5875265724499b1e0889df223f8  gcc/config/xtensa/xtensa.opt
-8100621be2c42a551591323bb0dec425  gcc/configure
-8ff785664c06b5945215ea6ed1108f6c  gcc/configure.ac
+df9f37510364953e4b1a74fddafd5b0a  gcc/configure
+0d863d1fe6d29c2d394c25cce860c6db  gcc/configure.ac
 3f8600d94fa18c9df14202629b15c30a  gcc/context.c
 a105f73fec5a545a02b66e02a5fc9cd1  gcc/context.h
 ad2e5674b80419b7901057a9553438d4  gcc/convert.c
@@ -4227,7 +4229,7 @@ ad2e5674b80419b7901057a9553438d4  gcc/convert.c
 7f281fac897d0a12b476c90692737329  gcc/coretypes.h
 77f22f105dfdc4a9829de4737400fdc3  gcc/coverage.c
 fc0ea61bb4cd0e88fcb974874b454f63  gcc/coverage.h
-96599999d0dbcb083641d0fbe78a27d6  gcc/cp/ChangeLog
+90620d6f2e242e28c716bcbcf0182a93  gcc/cp/ChangeLog
 d271e3663538ba1f3281cab3838e92cd  gcc/cp/ChangeLog-1993
 f5a44adbc05521162350ca409d1d95ce  gcc/cp/ChangeLog-1994
 ac55db48d964cb5469ff03c1cd3ee04d  gcc/cp/ChangeLog-1995
@@ -4253,53 +4255,53 @@ c1c7801b9b0f379e702a4f6cb83972e7  gcc/cp/ChangeLog.ptr
 9aa3cd9f75c785de9f51446e3f295515  gcc/cp/ChangeLog.tree-ssa
 455a052c3ba589ded45beac207aae43f  gcc/cp/Make-lang.in
 2a39a12cc0dff2b94a44e84e818ded9e  gcc/cp/NEWS
-1ed220fc9a91b1e2d8055ed57c933c8c  gcc/cp/call.c
+795a3e86d150ac6ff6ed2e3258814e1d  gcc/cp/call.c
 e184e53ef1c7ccede7b4257052006bd7  gcc/cp/cfns.gperf
 66d1092c8be3fffdb7372b46a158ebf6  gcc/cp/cfns.h
-910d44b3e4d1a6bf0e9a3c7dc0598bf9  gcc/cp/class.c
+466bc9f5ef4f8ea3fa10ef2564ea741d  gcc/cp/class.c
 47867890c0979e43203ac3b48152e806  gcc/cp/config-lang.in
-cc75be02c3d6f7f9c65125374c0b0401  gcc/cp/cp-array-notation.c
+6720d2dc0ff79c80bfee1d4a8e7fa99d  gcc/cp/cp-array-notation.c
 65ca14f2797c64f59cf5c6eab039cb48  gcc/cp/cp-cilkplus.c
-5c48807910c8c81287605f0dbe305ef0  gcc/cp/cp-gimplify.c
+fc4f4b0510305904f62be76691665660  gcc/cp/cp-gimplify.c
 c0aa2580eac480bebef90fd178f23fce  gcc/cp/cp-lang.c
 ef87c1a033a26e7711907c6b178131b1  gcc/cp/cp-objcp-common.c
 9eada522ec909990ce7386714e3c0afa  gcc/cp/cp-objcp-common.h
 d0d99db987a2bd8f0058a1faa5e408e5  gcc/cp/cp-tree.def
-a3688644c5783e84d0837702adf6d30a  gcc/cp/cp-tree.h
+b0c697bcecdbc809a26b1fb7e2fff828  gcc/cp/cp-tree.h
 2d310182ce712621a1c231f8d3450154  gcc/cp/cvt.c
 72aec02508b7947aa57a3fdc7907592e  gcc/cp/cxx-pretty-print.c
 80ee86746b2127c64ef5c25f24ceb14b  gcc/cp/cxx-pretty-print.h
-dd6792a8e6b84dd56b7ac60b97f97e9f  gcc/cp/decl.c
+31f4146c017a869e65caf3540a83dee2  gcc/cp/decl.c
 42cc7ee1282351aee587814acc597508  gcc/cp/decl.h
 dbc65ed107b0f033dbc47a1901d3c6be  gcc/cp/decl2.c
 3f6c50620d2953d5b412ff4e390eb7ae  gcc/cp/dump.c
-58e4348d50182a6fa678f3d6112d86f4  gcc/cp/error.c
+4f563217e305eef8adde18a3b3d0c547  gcc/cp/error.c
 615a63805536eb9ffe1b46dd1881582c  gcc/cp/except.c
 eb58e03f4b2c41c5e089789e2a83f27e  gcc/cp/expr.c
 f825a4855a4c9f2390afb1302bb4d8d6  gcc/cp/friend.c
 4e1f37f96a3d7f70ba70e24cba59dc3a  gcc/cp/g++spec.c
-a5dabcb829765fe2506fdfe679534cb1  gcc/cp/init.c
-0bb50f920201a7665c66a8b34c1dbbad  gcc/cp/lambda.c
+a1474fb450653b16df8e80f1bb84d9b6  gcc/cp/init.c
+be78b35f070bd7382c2233ae8aada26b  gcc/cp/lambda.c
 d505a249800c51140eb8d126b620394f  gcc/cp/lang-specs.h
 a9d9b7c8443dcc78573259632806eb39  gcc/cp/lex.c
-2c850a80db903247f001008baf357822  gcc/cp/mangle.c
+a4fd8479abffd3cacada620714d9306b  gcc/cp/mangle.c
 a331b4a15818458a23cced154db41740  gcc/cp/method.c
 88641563e2d3f64a95da6434ecf8de00  gcc/cp/name-lookup.c
 2fe9fc47b363db0eb4eb053c2b3b5109  gcc/cp/name-lookup.h
 a4c4160079301223008ae949e923ae09  gcc/cp/operators.def
 cab3f4d3911d5d98b499168510c420bf  gcc/cp/optimize.c
-2da908e5f3db5d3a3aa0afe175078c9b  gcc/cp/parser.c
+15fa1ea9b2ad4a1adfb7603af94a593c  gcc/cp/parser.c
 7dad8f7951a41247d36a1491c5ed3333  gcc/cp/parser.h
-74b0261982aec2eeb078b2eb670ffb00  gcc/cp/pt.c
+5d73a0128142b13861f975e7d63a9e59  gcc/cp/pt.c
 1fb212eac0559ba1dcb95d7a26602e06  gcc/cp/ptree.c
 da1e4054f89a7112f63ce85825932ca5  gcc/cp/repo.c
 42e298dd7b029109771b91c2ed2adaec  gcc/cp/rtti.c
 6fb2431ec9910cb53f58bdbe3bff5f70  gcc/cp/search.c
-fd23ab9c86b9d7c857c0440da98be254  gcc/cp/semantics.c
-b1bc4d92bafd656e405c2a58d608378f  gcc/cp/tree.c
+868801964bdaf1d008e2998cf969f64f  gcc/cp/semantics.c
+1110b6600e0b29cc8cc3b9a534f3a4c0  gcc/cp/tree.c
 1adee27afd0240132800372d13882a94  gcc/cp/type-utils.h
 03213757a1dd8df87d0616f27d88863d  gcc/cp/typeck.c
-eb3af5ebc8aeeffe9beaffbdef78ca84  gcc/cp/typeck2.c
+60b85f3b47168c08433dbcdaaf8ccfe9  gcc/cp/typeck2.c
 74dbaaf0e744d50ebddff66290b3dfd4  gcc/cp/vtable-class-hierarchy.c
 c69f7cfa3152c54d30a4413e74a55584  gcc/cppbuiltin.c
 3ec7183b5a34a0f3e00a2f1e80b9b1d4  gcc/cppbuiltin.h
@@ -4338,9 +4340,9 @@ dfa2f3caa589d990913f898317c3ba04  gcc/diagnostic-core.h
 ea862db8f1c974282768561f5c6fd263  gcc/diagnostic.c
 a82f4c29248edc233f641579ab6e772a  gcc/diagnostic.def
 439f0d28ab1a85692b11ba394cc4e6f6  gcc/diagnostic.h
-4fbbb71db1722ae5342765a0b1fbc441  gcc/doc/aot-compile.1
-a4f5d332dae4a0fd204d8bb28855e9b0  gcc/doc/arm-acle-intrinsics.texi
-8eddcd81550867f0cb449d6d2643e9e8  gcc/doc/arm-neon-intrinsics.texi
+2072ae7c6f8a0f7b3d208c76341f52d1  gcc/doc/aot-compile.1
+2931c39155bdab807e1af465d937350c  gcc/doc/arm-acle-intrinsics.texi
+35b6982c7c5b95341a6e28476e4d1daf  gcc/doc/arm-neon-intrinsics.texi
 9afccee176594b00a1b7a15878bebcd0  gcc/doc/avr-mmcu.texi
 e1ac881d48757e37668ade03bed6f6d5  gcc/doc/bugreport.texi
 b57b0997377249aff11e6fcfa9c47200  gcc/doc/cfg.texi
@@ -4350,38 +4352,38 @@ f2623c6aeaa1ad4a6474141b9dd5f995  gcc/doc/configfiles.texi
 429106f28aff7ad80a86d1442fb5003d  gcc/doc/configterms.texi
 3c64bdb237b5fc38837b9b9bc2fda853  gcc/doc/contrib.texi
 6436407c42cecb738124becb9079d978  gcc/doc/contribute.texi
-34436461cdc0c7ecfb7a40b5e686e422  gcc/doc/cpp.1
+d437ef65bb5ccd3d76933938e4e08c3b  gcc/doc/cpp.1
 b466d87d5a11bb0e1bea3a60a6645b7b  gcc/doc/cpp.info
 7787bf2f2843f9e075dcabc3ef549147  gcc/doc/cpp.texi
 4aa9560d9a516a5df4f7429c00ba1fb2  gcc/doc/cppenv.texi
 d1619b326f23a607e6cb3a044afcc4df  gcc/doc/cppinternals.info
 ffb92a322644e39300d1398a048cb9a8  gcc/doc/cppinternals.texi
 249506473d9c4b6f20554997a9c8946f  gcc/doc/cppopts.texi
-9e34dec3b954fa18067e8949ca9a910d  gcc/doc/extend.texi
+735f272973eb624ca2b27256784794b1  gcc/doc/extend.texi
 5ee3105f6fb685feb1259931acfbf79e  gcc/doc/fragments.texi
 de203f1fc34a4d519c489d06bf46b2bf  gcc/doc/frontends.texi
-556f499f2c221eff6a35c3b745af786c  gcc/doc/fsf-funding.7
-952529ddc42e4badf57f5480f1a7ea68  gcc/doc/g++.1
-9effbde8fcf02bcea835284372237e5c  gcc/doc/gc-analyze.1
-952529ddc42e4badf57f5480f1a7ea68  gcc/doc/gcc.1
-9628abd90c18f277c0312630a7400a77  gcc/doc/gcc.info
+a4cb11efeaf4bf15da2f1eed8f9e0fd0  gcc/doc/fsf-funding.7
+6d5daadcb08541e624f682345a1ff88e  gcc/doc/g++.1
+a16b8f53d26e7577a736a15b6c072667  gcc/doc/gc-analyze.1
+6d5daadcb08541e624f682345a1ff88e  gcc/doc/gcc.1
+4c8beb4866137f568bdefc6c862e00d4  gcc/doc/gcc.info
 8daacd29f48167f6b49255b6c181b9bc  gcc/doc/gcc.texi
-b821f76036a460788a4f67a985b06c72  gcc/doc/gccinstall.info
-c0218512e3fc985d93bf9beacdeec227  gcc/doc/gccint.info
+06c87b043578cf2fd323918518aa0053  gcc/doc/gccinstall.info
+4ac01439178dd157273447b66868dc7a  gcc/doc/gccint.info
 7911949acb880ae16515d7ca0ede3d9a  gcc/doc/gccint.texi
-27a20c84ea29cb25e1f558e3c2b0fdc2  gcc/doc/gcj-dbtool.1
-558701264335d20a6dafb6f544251958  gcc/doc/gcj.1
+fd5d56a283c84be92c4e1d183d7cba73  gcc/doc/gcj-dbtool.1
+886766bf5b708c772ddaf91fcc346354  gcc/doc/gcj.1
 aab4d3dcd1960876e4dd2744c0595107  gcc/doc/gcj.info
-a2aaacd8a4504c1eee42040c6d62d982  gcc/doc/gcov.1
+a34f1de7370f9812f9d7f4020fec0ffc  gcc/doc/gcov.1
 7a35df8cd0480abb695958df18ea6134  gcc/doc/gcov.texi
 5587ca6c5976c7dffb318cf45f5b7f13  gcc/doc/generic.texi
 1ded054093de910d9786c62bc4fe8cc6  gcc/doc/gfdl.7
-8867d9d5f00d2c3424fcc1ec15d11b36  gcc/doc/gfortran.1
-0b52eeba46e08a404b1efdeb0b73b3d7  gcc/doc/gij.1
+6bb57be9521f2b036ed5d2233cef7068  gcc/doc/gfortran.1
+efde45760f6dd331477c8fa3939c8c65  gcc/doc/gij.1
 ac25ba9af042d4f99e0ab97a4f46517a  gcc/doc/gimple.texi
 290370669f02bef1502ada9273e5261f  gcc/doc/gnu.texi
-0066e0767ad465789161865c43ff33b5  gcc/doc/gpl.7
-ef92b0edb983e1c4330f56fabd877997  gcc/doc/grmic.1
+35bdf87669d3e58fabb135fdd83a6704  gcc/doc/gpl.7
+147ed9750a2dff72fc62d4e6f78cbe17  gcc/doc/grmic.1
 f2dd6df88ca65026d154f628ffbc8f13  gcc/doc/gty.texi
 34a1955f331ff1028e09083a178c0418  gcc/doc/headerdirs.texi
 a56cc8baf1b35fa5c4c43bbfdb35b74b  gcc/doc/hostconfig.texi
@@ -4393,12 +4395,12 @@ fd6c359ffd07e895e9b60c12c1bc76c8  gcc/doc/include/gcc-common.texi
 5f5adc2c6c4ebdcf03cc0125250f5995  gcc/doc/include/gpl_v3.texi
 73819b3930a3d4be5d6234070d02386a  gcc/doc/include/texinfo.tex
 ca81bf9d3358342ef978866b6895f4ca  gcc/doc/install-old.texi
-36a705ad4747c9ba42a38ddc6b48480a  gcc/doc/install.texi
+c53e675d2246709e75ea2f39f3a85b1a  gcc/doc/install.texi
 8851ed69b0a7490fa673efa763d090c7  gcc/doc/install.texi2html
 f1aaec9eb4571d731a4089d5d5ef97fa  gcc/doc/interface.texi
-1ca8071afee5c71cd6b887cc9411c03d  gcc/doc/invoke.texi
-b5321deb87587779b8fa0e631185b29b  gcc/doc/jcf-dump.1
-dcda92a48788754d1c476e86dc371535  gcc/doc/jv-convert.1
+308f00964d73903162d4703cf5802c1f  gcc/doc/invoke.texi
+8b4286efc56335723d2be45a2ea1a3ef  gcc/doc/jcf-dump.1
+d12c19c779a2a6a75c8329b054f080ef  gcc/doc/jv-convert.1
 c36b6709dd343cbcd4b54f0417bcc780  gcc/doc/languages.texi
 2ae9a3e90fef1d92ab8196ae773a7673  gcc/doc/libgcc.texi
 8b58315c921fc046e0ab6f949ebd5990  gcc/doc/loop.texi
@@ -4411,20 +4413,20 @@ ee0a1b01a1a27eee100cc172673b9fe2  gcc/doc/lto.texi
 f9f577785f8eae98a97b29568343be95  gcc/doc/passes.texi
 6997cbfce5b82226e56271f7498697f5  gcc/doc/plugins.texi
 914a3d181f9c38ac74e424d667026b61  gcc/doc/portability.texi
-d56bb820227b6cddf5dbc9f246f8df6a  gcc/doc/rebuild-gcj-db.1
+a8566a07a637ea1a56bb0bfd084caf94  gcc/doc/rebuild-gcj-db.1
 fa0276a6b5d315ae4e036add235d9b26  gcc/doc/rtl.texi
 3f5d8a76a7ddd984603fb2f35ee46632  gcc/doc/service.texi
-5c68a874833d75649dad867b1c5db296  gcc/doc/sourcebuild.texi
+affb8b02a41ee94557fabcdce8048ce2  gcc/doc/sourcebuild.texi
 80f74ac416390bd73b75ae93f1f2f8f8  gcc/doc/standards.texi
-95089e28a67d22186f3190775ec30f42  gcc/doc/tm.texi
-bd168a92c3471828c75208e25c6c6ab9  gcc/doc/tm.texi.in
+24a01a8bb1b86882ac27a90fbb507fe9  gcc/doc/tm.texi
+eed8aa101de465a7cd9c6aaa39f3f325  gcc/doc/tm.texi.in
 2a0f462c8ac98826cc19fc71f6f09014  gcc/doc/tree-ssa.texi
 f173054a88e0b97206d03f926b8bd696  gcc/doc/trouble.texi
 b40aba636e9d9d23b966bc47f50ca0ad  gcc/dojump.c
 1c73909bd45b22ed2b016ad5fe3afca4  gcc/dominance.c
 060582ff73194daaccc8cbe92add257a  gcc/domwalk.c
 297c055c19cbb073b385bb9443fec98c  gcc/domwalk.h
-f79339a7902d370cae0f3c87986c844c  gcc/double-int.c
+2e57c82dbd0e91dc5b2e7f8b275f7eaa  gcc/double-int.c
 9d7f6889e84a85a6aea3abb7201f6f04  gcc/double-int.h
 70c3e303b842357f48e72c0b9bfb1d9a  gcc/dse.c
 1a746ea442089d7bdcdbf56af69a5b3e  gcc/dumpfile.c
@@ -4432,7 +4434,7 @@ eca799a5ac72d21ac26c0993a7fe198d  gcc/dumpfile.h
 7aca1d34836c11d9a7af3c4f2e2899e3  gcc/dwarf2asm.c
 81e5a5988d94ef1528027be5136860e3  gcc/dwarf2asm.h
 42be1d7e96240ac3e4821237d124400c  gcc/dwarf2cfi.c
-1a7c6bee2883034efe9eecbe42fb84a1  gcc/dwarf2out.c
+07c67d8b1760bd9bcd577d65397c530c  gcc/dwarf2out.c
 140d11658ba70cd9c582828aec6fb9d2  gcc/dwarf2out.h
 e175f4e3ae8843610ba83ab88ac7c7d2  gcc/emit-rtl.c
 c6455a67ada52042bea5f8bb117dcdb4  gcc/emit-rtl.h
@@ -4444,7 +4446,7 @@ b0556e2034dd821307551d6d74e745d6  gcc/errors.h
 24bbd090dbec005ad3793cae5f7e4e19  gcc/except.h
 589e62819b3e668ae01defc5f5fb9ad5  gcc/exec-tool.in
 a38616b15259ffd2171e03ecb4249502  gcc/explow.c
-ba1da1bfbb3288c8e6b89aff8c9a60dc  gcc/expmed.c
+6459d443bd65bb4141a7d815b3d249ab  gcc/expmed.c
 71dcf205388e1d671c2d94a0d4a3c735  gcc/expmed.h
 debe880cf639de262487698963b83b80  gcc/expr.c
 d6416980df886e494b49961d4b3a9984  gcc/expr.h
@@ -4455,9 +4457,9 @@ f21b58f2ee4076afbfccecb6f0b20813  gcc/file-find.h
 e273344d3f81a5d94a7296a6f73d4599  gcc/fixed-value.h
 84141e938faf8046cbecad04e080660d  gcc/flag-types.h
 927cde0489c22a941e547faf5ec11e50  gcc/flags.h
-bfa3c33b1a9c0b95a8b41227093171ef  gcc/fold-const.c
+1b57a0120edfc1608920462a921aaf23  gcc/fold-const.c
 926e7b21d0de960d055e2f98520491fc  gcc/fold-const.h
-e3feb37017ce740135780b8149ebd3f7  gcc/fortran/ChangeLog
+f131cabe354c5669ae64aff678aa170b  gcc/fortran/ChangeLog
 3330102ad3a0217cba963be6b5eefd58  gcc/fortran/ChangeLog-2002
 d000ab985b1eeb1ad5749f98b8fef99f  gcc/fortran/ChangeLog-2003
 bf42f94f0c51dcc7d8051cc7fda1efdc  gcc/fortran/ChangeLog-2004
@@ -4482,27 +4484,27 @@ ccfa4b65ac8982708cce72fc504e63c9  gcc/fortran/array.c
 36047e58fcc2b326025fbf4851f809d4  gcc/fortran/constructor.c
 ed4dd7bfb8f8c9f4cedd1f0d2943c8ee  gcc/fortran/constructor.h
 cdaada96cc92b73b8913f00cc371b353  gcc/fortran/convert.c
-359a334754a0cfbcc6d62e7fe9e242e5  gcc/fortran/cpp.c
+6a25f41ae4ec5f67345432aeacf0f43a  gcc/fortran/cpp.c
 87a07a13f25c3ba29526f7ff92badbda  gcc/fortran/cpp.h
 102934decfedea4b5a61c7e853023a49  gcc/fortran/data.c
 b94dc1f5d1792f2e58b16f6fbdc3a709  gcc/fortran/data.h
-5f3d1f6ed0f06404fa0f04e3a077518a  gcc/fortran/decl.c
+48ddd8ff961f12e5aefabf1470db4d8d  gcc/fortran/decl.c
 a13d3780d602ec99bac64635a2472427  gcc/fortran/dependency.c
 c868d6d4a72cb319fabcfc59e4613fe7  gcc/fortran/dependency.h
-46c026bdf88def19657fa0fae2a1e2f8  gcc/fortran/dump-parse-tree.c
+17fd0657b5dd0ca2bb20d1ba3db84cdf  gcc/fortran/dump-parse-tree.c
 9499ec386ee632269bb460fc37b41279  gcc/fortran/error.c
 d321ca0b46df45c3fbc073dd163d4647  gcc/fortran/expr.c
-ce6133a52a0fa6aec2a32bbadf2584bf  gcc/fortran/f95-lang.c
-35359335a2a4611a4bd39850e837d3fd  gcc/fortran/frontend-passes.c
+dd44a696cb95e5fca9e2493dd2b52a88  gcc/fortran/f95-lang.c
+d8fa3c5a71b9f5796eb606142df801c6  gcc/fortran/frontend-passes.c
 0a038b837897c57a2b48cc83a3475346  gcc/fortran/gfc-internals.texi
-c19efada195a0808eff058dffb8dcdc8  gcc/fortran/gfortran.h
-b3c9192114aa576c4b1e37059b7ddc4c  gcc/fortran/gfortran.info
-01b74d2257b39a5e878d0d02c961bc24  gcc/fortran/gfortran.texi
-1f64ebcbca965051ff328411c4a95624  gcc/fortran/gfortranspec.c
+8c1807f6710f9637de8d7c8da006d0be  gcc/fortran/gfortran.h
+7a0fa8aa41d8ba8c9eea6e8f3ec87c26  gcc/fortran/gfortran.info
+938a524e09245e10fbef5b331f81fc45  gcc/fortran/gfortran.texi
+61383efc0d8e4f11fde1c9811c151797  gcc/fortran/gfortranspec.c
 afbe567cd3204e53be6fbcc32e82e7c1  gcc/fortran/interface.c
 aeb5696e9535c471d020d3c251c2d89d  gcc/fortran/intrinsic.c
 b32d2f0f3daa0209977368544f5278ef  gcc/fortran/intrinsic.h
-f45dec0fb53c4fe3372cea348cbf7c20  gcc/fortran/intrinsic.texi
+9733ca3ef7f8ba540f3d5bb8f18f8f28  gcc/fortran/intrinsic.texi
 ff09ef92d4e445cac44eee1e2a4a5191  gcc/fortran/invoke.texi
 d3a2af66f4e1d3472664c1d0ec0bfea9  gcc/fortran/io.c
 aaa0bd487c1196f96642d9c0d89f1960  gcc/fortran/ioparm.def
@@ -4512,44 +4514,44 @@ aaa0bd487c1196f96642d9c0d89f1960  gcc/fortran/ioparm.def
 d10f92a8dc76d707df09ce50fc002ab8  gcc/fortran/lang-specs.h
 bfedddb0e2a4e4d591242403a998177b  gcc/fortran/lang.opt
 f6dbfc92520c8224ad6af651606bf645  gcc/fortran/libgfortran.h
-dabfcac403e2f9a3635d051a434f4b67  gcc/fortran/match.c
-87c5e85360d47d9a3e9c44e689cc164b  gcc/fortran/match.h
+5e48ec3fb934d950d9d4b474e998763e  gcc/fortran/match.c
+a778602b7553d8c2a08d457710752041  gcc/fortran/match.h
 a3d130b650f04e28104a3180689841ae  gcc/fortran/matchexp.c
 34817057427c24c69e4e7146fe26f75e  gcc/fortran/mathbuiltins.def
 e0fb4a1ffcb0343a20358ac7e9e3c259  gcc/fortran/misc.c
-ec92e27fc479d48e62b2685f31590d47  gcc/fortran/module.c
-dac352ff9fcc0629ce1b395753c19cf9  gcc/fortran/openmp.c
+ffd8bfce5f606751b4c433c9dd3e6cd2  gcc/fortran/module.c
+199d16240d064bb53966d66f2a542e12  gcc/fortran/openmp.c
 f51d0e2eedb4abe7296518a55e09ca88  gcc/fortran/options.c
-9ddf6b1c7e1f71ab06663ea220fce3bf  gcc/fortran/parse.c
+fc32c460b6cd9b3d248899bc6b084896  gcc/fortran/parse.c
 6d0ad629aed04bdd74a9574a8bf4846e  gcc/fortran/parse.h
 fd7c4ac7c689b6a4fb90173f4133229d  gcc/fortran/primary.c
-2894d407b715abd8941c0bc2e50afda8  gcc/fortran/resolve.c
-1034f94bfb9742bd1a794e92c5a75ba0  gcc/fortran/scanner.c
+ad6b0d5e1f473cf51dfb2ccebbba787c  gcc/fortran/resolve.c
+9adf6905ca4673ba2fbf9cbbce54892d  gcc/fortran/scanner.c
 72c90bd863614df8517636fc47ccfc94  gcc/fortran/scanner.h
 efa59c20588f8cbfa50de0c93a7eef20  gcc/fortran/simplify.c
-71985d0e3c14a6c71342913878c5a10b  gcc/fortran/st.c
-4e0587f6c37c4220f168f8e854b6a5fb  gcc/fortran/symbol.c
+e45fb97ea95ff4c3d74a0fbead1f06f9  gcc/fortran/st.c
+3871370aa0e7f7c7501c633d4e561739  gcc/fortran/symbol.c
 18b66b03bc5d661f80bb81b03f388eb9  gcc/fortran/target-memory.c
 2b15769f79ab3546bef45df0d6815e2c  gcc/fortran/target-memory.h
-a7eb491b89c92e23b122f0cc6f162d49  gcc/fortran/trans-array.c
-420d334293cbc543a1986e5160791e87  gcc/fortran/trans-array.h
-42d8eb5427146efe747093a654b07ae3  gcc/fortran/trans-common.c
+9c3c626677d3cea17fbe4425bb18990e  gcc/fortran/trans-array.c
+fb993a92547683640f7a49d6dd5d0cfe  gcc/fortran/trans-array.h
+6f0a3ffc5ef85f6a9f67c1deaed718de  gcc/fortran/trans-common.c
 ad554dd79e97690c9fe5ce1779a7309c  gcc/fortran/trans-const.c
 a3ccaa77809b6dcc6aa42f435c57e3f9  gcc/fortran/trans-const.h
-68e62222bd1bfcd19a15dd8a8ca89e63  gcc/fortran/trans-decl.c
-8f2eac3cc158380deeb06b26ab692dc9  gcc/fortran/trans-expr.c
+f2e437a45f5c0d06e691752db2c1435f  gcc/fortran/trans-decl.c
+6499eb348141916fa43d136bd292ca8c  gcc/fortran/trans-expr.c
 6ea2f877821771858978645b10ea08fd  gcc/fortran/trans-intrinsic.c
 b47cd6ce04818d16aea2c2442ca82278  gcc/fortran/trans-io.c
-082a60082cecb215d1b7533ce216e3df  gcc/fortran/trans-openmp.c
-b7c2b183ea4cfd09ce04a4730c28ddfd  gcc/fortran/trans-stmt.c
-c1f84f4dfcfc80070abd0502517f639a  gcc/fortran/trans-stmt.h
-4a39b718d97e5fcd9d95a339c9debbff  gcc/fortran/trans-types.c
+e8d1e2d01ed7c8c15dd07675a0897f7b  gcc/fortran/trans-openmp.c
+6374bfca10befeb53e5ca4d22322b56c  gcc/fortran/trans-stmt.c
+716b10c08519c671b98c6434e2214353  gcc/fortran/trans-stmt.h
+5147544dd813385df26d0ac0f51948fa  gcc/fortran/trans-types.c
 24e41f2179047fd847c46da3cd1c024c  gcc/fortran/trans-types.h
-b4b84e3d822e739b0fed290ee12e2300  gcc/fortran/trans.c
-2e65b0f18a310ea59273cd8843959d66  gcc/fortran/trans.h
+51ee928eabf49de99a0d7e6578e236a2  gcc/fortran/trans.c
+3123832e121f344eec0a93415ec4c20d  gcc/fortran/trans.h
 95c41d60adaf583210f110d0984098f7  gcc/fortran/types.def
 97b3f764fb651e1611194a18dbcbe3d3  gcc/fp-test.c
-bddd0259c8e15cb6bdcf23eb23190940  gcc/function.c
+4ea4072a16caab2b6332ebaadaee2f38  gcc/function.c
 fff264db5393a59b9a99c486322b73f7  gcc/function.h
 cd8ce281b668e13a32e83cf20a1634c9  gcc/fwprop.c
 818a31d5b690a29005322b5357c9f908  gcc/gcc-ar.c
@@ -4583,7 +4585,7 @@ f494127078ee11832d689cde6cc3659b  gcc/genconstants.c
 433eb66f3d010864a76c754d81db24cb  gcc/genextract.c
 fe4697f2b98c57d9478b6bb7a7ae2e88  gcc/genflags.c
 e041d627ebfb410e6ac9821a3ebb3d42  gcc/gengenrtl.c
-9b8f0d2f17c80f6ff5fd6319f7369382  gcc/gengtype-lex.c
+e029143273161cfc842f402872ede845  gcc/gengtype-lex.c
 689319748dcd572b0d864e2f427c5ffa  gcc/gengtype-lex.l
 cbbcd3bf3726ae98ca84780142a68208  gcc/gengtype-parse.c
 4eaf2d492394ef805a5d5ae40b3405b1  gcc/gengtype-state.c
@@ -4614,12 +4616,12 @@ fd959eed75ba50c9ce0144de59c6453d  gcc/gimple-expr.h
 b2116458d45929978ab35d0063286333  gcc/gimple-fold.h
 0fe61c47348d45f1c4d1c2f982b1e449  gcc/gimple-iterator.c
 17559f5a410f8d50a42723d5e5e0bc71  gcc/gimple-iterator.h
-d5b3c841aa21c9571759196e5299b4bc  gcc/gimple-low.c
+5003f659d2dabc1078b9b1f733dea592  gcc/gimple-low.c
 7acad740b79bb8d5813ca5adaed51ea9  gcc/gimple-low.h
 bce8302c35666fa97812af572784ddb4  gcc/gimple-pretty-print.c
 fd36993cffdf23f8818cd5ab8119f9ef  gcc/gimple-pretty-print.h
 a55e2dba541a5690618f749ab8209b06  gcc/gimple-ssa-isolate-paths.c
-3c7181d1dd3aba8a2e25d2612ba3cc9f  gcc/gimple-ssa-strength-reduction.c
+ddfcd12ffaa58e2c4343f8868d646bcc  gcc/gimple-ssa-strength-reduction.c
 65c5fd48c73569d5d8c6cb61fa000a0f  gcc/gimple-ssa.h
 05ea5f1994babea73ca748acd5ef37c6  gcc/gimple-streamer-in.c
 d27ff703db577eb6b990d1d617cfe155  gcc/gimple-streamer-out.c
@@ -4631,8 +4633,8 @@ c5289edd7df36bab34b0a7146643c60a  gcc/gimple.def
 e59654c510717f38e5835473b88512f8  gcc/gimple.h
 79b09968dccc8cd8a7a3bd3b2449b1b7  gcc/gimplify-me.c
 0fe03cac0c9e29cc1e32425f09eb2c17  gcc/gimplify-me.h
-b70a6f4bd27f94701ed6a838e70ce584  gcc/gimplify.c
-37ff4336f0f0ec290f8652bccd3ba720  gcc/gimplify.h
+a9d1a518623d40e08ef02e39d4ebdaa2  gcc/gimplify.c
+331c48030a046b27a704925015fd1649  gcc/gimplify.h
 2ac6b57e8aad060fa48b9a8a039a708a  gcc/ginclude/float.h
 a610d6820fa8bbb9030d13a1dcd4ee52  gcc/ginclude/iso646.h
 6433efea489e00fb72b79d0db6179e90  gcc/ginclude/stdalign.h
@@ -4648,7 +4650,7 @@ b20d2dc1cb683fcd184dd5581c236ba8  gcc/ginclude/tgmath.h
 d699488411097f968823f9f7e77d33fa  gcc/ginclude/unwind-arm-common.h
 8d9ecf0d6ef93c79623ce1d27a32a2cb  gcc/ginclude/varargs.h
 d0018c8b069fef23a59561ff2f8dc915  gcc/glimits.h
-84a3c830762454edd2d7436084b3fa90  gcc/go/ChangeLog
+a277a575bf893dc8df4230bc554357b1  gcc/go/ChangeLog
 84d2ef4a6fee7df8a45a370a6b605aae  gcc/go/Make-lang.in
 60ea054548c83c7f66170073f9f3e74c  gcc/go/README.gcc
 e6bece4f0caf0458c84d9b29ca0de83e  gcc/go/config-lang.in
@@ -4681,10 +4683,10 @@ a9976cefc0150a7132d127b093292abb  gcc/go/gofrontend/go-optimize.cc
 2a2578ae2b3378d37d61324c02656e27  gcc/go/gofrontend/gogo-tree.cc
 fbd5ef95dfe6c1db3cd54ba4bc33109b  gcc/go/gofrontend/gogo.cc
 e33b0b4c9d13b6266a694e094d738133  gcc/go/gofrontend/gogo.h
-a54db7e2c0bee63493b5e156afd1e29c  gcc/go/gofrontend/import-archive.cc
+19530349ffce8b937ed080715e7442d8  gcc/go/gofrontend/import-archive.cc
 499fe8bccdd0651f0566d8c145b8d5f7  gcc/go/gofrontend/import.cc
 46ea027bf693486499d4396551ed674d  gcc/go/gofrontend/import.h
-33c61fb692bc083f4b5774ea4325871f  gcc/go/gofrontend/lex.cc
+0d90ebaff0c2a2d319c12a150479e5ce  gcc/go/gofrontend/lex.cc
 50f7fe6bed67437bd8cdedbdadbfd777  gcc/go/gofrontend/lex.h
 98235b1a736055cd6a130337a9ee8e8e  gcc/go/gofrontend/operator.h
 fa42c777e5714a649057baddfa33ca30  gcc/go/gofrontend/parse.cc
@@ -4695,8 +4697,8 @@ df0b2e89a7ce7d87c1816e63cdecbf48  gcc/go/gofrontend/runtime.h
 30dd3449497113e8536805ec47db0d63  gcc/go/gofrontend/statements.cc
 26fa4c1f2268d3e5180280310918ed0b  gcc/go/gofrontend/statements.h
 0ba1a11b029f92c6795e4c940c966f48  gcc/go/gofrontend/string-dump.h
-a4b994f44698b8a89e8c75119144265f  gcc/go/gofrontend/types.cc
-f2cb4f81684d611386905f2fff829bd4  gcc/go/gofrontend/types.h
+807127e169b2ac5e8222bd4c8f66f1f8  gcc/go/gofrontend/types.cc
+2edc37f5e0fd28a18b5988791482cf60  gcc/go/gofrontend/types.h
 14f99064d66c4b9bc9ab92b14d4e7afe  gcc/go/gofrontend/unsafe.cc
 dd84ec7483eb88b19ce6722e47c1a1f2  gcc/go/gospec.c
 4d471970b23da7e4147258ef9373b38e  gcc/go/lang-specs.h
@@ -4715,7 +4717,7 @@ fa16dedaafdb2228849f12a7ffd2e158  gcc/graphite-clast-to-gimple.h
 1400b8e99d3520aa60a29717280777e2  gcc/graphite-optimize-isl.c
 7acfa753917c853e000017c393da3fc3  gcc/graphite-poly.c
 f9c785410cfde9d61c3ffb670dced572  gcc/graphite-poly.h
-ab1e6698efdaf3110847f7d273bdbc78  gcc/graphite-scop-detection.c
+89fcadefa8e3b6c09169e1c840d54860  gcc/graphite-scop-detection.c
 2c30c8f2568b1d728f9ba0e3929140d6  gcc/graphite-scop-detection.h
 3d283157b1a0b1afd2a76a27ce09465c  gcc/graphite-sese-to-poly.c
 49ddf476aa0ab3084a087850dbf32c8b  gcc/graphite-sese-to-poly.h
@@ -4752,15 +4754,15 @@ bf8ea69460dc53e98b80abbf629386bc  gcc/internal-fn.c
 00fcd665255c519c1dffc8cce3472d98  gcc/internal-fn.h
 d9360459f2f4e913687597f9589da5da  gcc/intl.c
 828d71668221b7c1bd27436bf9a019bc  gcc/intl.h
-c1423c98892b40ef08f44d0701ddf8e0  gcc/ipa-cp.c
-fc02b557228552e7d857db952632c4b0  gcc/ipa-devirt.c
+0006560fc2f706fce1ac466939c40369  gcc/ipa-cp.c
+f36213d901d1d1bd81b45ac95eaf53ee  gcc/ipa-devirt.c
 1b8d3fb6c67dd0e13f67b75b924c3a3d  gcc/ipa-inline-analysis.c
-ae7311c23f026fe0be71fd216e23d50e  gcc/ipa-inline-transform.c
-45752dfeb17ec8efd11c9e60b0b01c7c  gcc/ipa-inline.c
-e3d2f4bfa7033d1b8fbd2134612adaf4  gcc/ipa-inline.h
+86e89dfc4cd8b878835b47d24fb38ef7  gcc/ipa-inline-transform.c
+07b45af4191a711dea059475f57c1a15  gcc/ipa-inline.c
+ef5aed192294b1ea841838ffe38b6ad0  gcc/ipa-inline.h
 bc1b3139cd7a986ee918134a0530cff0  gcc/ipa-profile.c
-e99b183d28cc3fd85de7ad3aa4a19c8d  gcc/ipa-prop.c
-4a9fb2a454b41089783929875d644ede  gcc/ipa-prop.h
+44fe8a05d2644cd22ac19740a96f22c1  gcc/ipa-prop.c
+4cfe52b86527ded18edfae21b3a945cf  gcc/ipa-prop.h
 5d7c7c3998bd7526105c1e995c55b1a4  gcc/ipa-pure-const.c
 4d91788577e596f236457cd265942705  gcc/ipa-ref-inline.h
 1855589dcb6587a046dcb728192ee425  gcc/ipa-ref.c
@@ -4770,18 +4772,18 @@ e99b183d28cc3fd85de7ad3aa4a19c8d  gcc/ipa-prop.c
 6b64a43c2c779189270aa17b12713e99  gcc/ipa-split.c
 446a574aba27a93de95b2b0c4b4cecbe  gcc/ipa-utils.c
 f1a401a90912552f632b32c77c399c6c  gcc/ipa-utils.h
-579652fdce69538790449c49dc8145f8  gcc/ipa.c
+da8f2c35f7821cbc3822da57cfdccf9d  gcc/ipa.c
 dd7ab034904148f42c51b046d7f0b572  gcc/ira-build.c
 43905ebf4d26681958db7403ec946ebc  gcc/ira-color.c
 70bab789c6dafc2ab624cc7af66b192e  gcc/ira-conflicts.c
-41e9c50f013de42327bb4af6a3bb6395  gcc/ira-costs.c
+860fc86150488ec9dc71e5fa1468c1f2  gcc/ira-costs.c
 2bd26b2844144d614e2af6f5617f0c46  gcc/ira-emit.c
 6488cfc31e614d186769d37bd27cb054  gcc/ira-int.h
 9c77805567ace1d43ebfaadc852c23c5  gcc/ira-lives.c
 09d12eb5ca58b3a053aceb771c071238  gcc/ira.c
 a143bddc3bc8d88afb0b31089aefe816  gcc/ira.h
 843275b56a150408da64a72a1e86fd31  gcc/is-a.h
-69d277ee47c79b208afe37ec68dae66f  gcc/java/ChangeLog
+aa42185fde7647b4f50fe0755cbc9810  gcc/java/ChangeLog
 3becfaac793f49e1f52cd74e78172b48  gcc/java/ChangeLog.ptr
 1c698a5c434720749e71a0ea3eb5a0ea  gcc/java/ChangeLog.tree-ssa
 3e907c2321d94f9d70c9bfcc63d251c3  gcc/java/Make-lang.in
@@ -4825,9 +4827,9 @@ d03d50952e0b5598e011458b4c4a2b7f  gcc/java/mangle.c
 ba23c462cffc03660fd11fb0c4392c4c  gcc/java/zextract.c
 9c0b0201efef1378fbce54f5bd65c98e  gcc/java/zipfile.h
 03b9495809742f845dbb701be808117d  gcc/jump.c
-7838c4f8587c371ecd31b9e52b498200  gcc/langhooks-def.h
-c54aaeebda7b472c47d94d80c8be3d57  gcc/langhooks.c
-ed206298e22a303c30ef36e0bbd20a48  gcc/langhooks.h
+1ec3b83a546f9030158a6466675214f6  gcc/langhooks-def.h
+db9b7dec34f0a81ec5a37dbb74f862a9  gcc/langhooks.c
+40cb75b6a10a6d71bc4d62aeaef5cc97  gcc/langhooks.h
 7b2bf12099bae7074b15d1964c8821c0  gcc/lcm.c
 8693ecbe418eceacb540aed3603d8766  gcc/libfuncs.h
 5314cfbffeb18b917515c40fdbc36540  gcc/limitx.h
@@ -4835,7 +4837,7 @@ ed206298e22a303c30ef36e0bbd20a48  gcc/langhooks.h
 bcd8945e5414cda5e3ad03542a2d011d  gcc/lists.c
 16086d64468975aa4ba54f78d2a7b542  gcc/lock-and-run.sh
 208b088d7ccccc8e6c543e63fdea06fa  gcc/loop-doloop.c
-b2e8b3596aa6202b3a28b571d7ab31ce  gcc/loop-init.c
+2d37d0b843b816b1c6dd9aad0304fca4  gcc/loop-init.c
 961aa1aafb4d7f6633b1296cae0f3adf  gcc/loop-invariant.c
 ec482357a36adb888741b89a43153c39  gcc/loop-iv.c
 64a1aad9486a60d822da0c2f90e3d74d  gcc/loop-unroll.c
@@ -4844,8 +4846,8 @@ b8ec1125f50fd732ec79e25188b65195  gcc/lower-subreg.c
 ea528889eab563f14e1de595d2accbea  gcc/lower-subreg.h
 c5d6f1be07de4f413bcade24de1eb227  gcc/lra-assigns.c
 dc1627ac98262eabf9f97f3174ae4d9b  gcc/lra-coalesce.c
-c70a27b61278483ebab628a2533c55f5  gcc/lra-constraints.c
-91aa820c388b2095bf8b1956e6bb1079  gcc/lra-eliminations.c
+633b3d9192a422c6138881cab3e3abf6  gcc/lra-constraints.c
+13d0b61525b9064a61d09f25fd0ad388  gcc/lra-eliminations.c
 e3cc33f3adfbde793a360b287c829ccb  gcc/lra-int.h
 b739e070bd2225a3a9caa382b77fe577  gcc/lra-lives.c
 ca992aec926a40acb7ddb9ca411175f9  gcc/lra-spills.c
@@ -4858,11 +4860,11 @@ f6df3e8bdd1544526a9063ecaa5262a2  gcc/lto-opts.c
 1ad7c612bb12a8205345f45c9902dbff  gcc/lto-section-in.c
 4ef9318ae61cbd95ceba4d21ac1dc3bc  gcc/lto-section-out.c
 9d90309ed38ceafd2737c415ab3b73b7  gcc/lto-streamer-in.c
-5b1dc7a9d599c8a7d5fb86745620eda6  gcc/lto-streamer-out.c
+6363140d711d0e7a7105c3c997df1ef3  gcc/lto-streamer-out.c
 81d24bca19f31cd5f0e863be0155267b  gcc/lto-streamer.c
 b6667b25d54cd3d347edba40e635a6f8  gcc/lto-streamer.h
 b22d02e83c5f71264232ba966fa80333  gcc/lto-wrapper.c
-7a77723cb569c38f04c6d2c1c575c814  gcc/lto/ChangeLog
+8936d922009af7d728c70ab3886be78e  gcc/lto/ChangeLog
 bd46eeecd1e05c40c9228f70c479cb8b  gcc/lto/Make-lang.in
 02974c5a3053c08f1c7046c3c00f237e  gcc/lto/common.c
 d2a23372f33fc6333deb5309623e859d  gcc/lto/common.h
@@ -4873,7 +4875,7 @@ ef39413097ebe13a67bb11ebb1b6a3a9  gcc/lto/lto-lang.c
 825fbe769aa70a26c698b09302310552  gcc/lto/lto-object.c
 5ce936a1f06cbe68ffb6f15bfeb6fc88  gcc/lto/lto-partition.c
 8977b46ede8ac142c4b6cef5cd202c65  gcc/lto/lto-partition.h
-e9f8090d5f38cfe55dfa4bd772a25dbb  gcc/lto/lto-symtab.c
+a9663f2ad1ef207f00d8e9fbdece6519  gcc/lto/lto-symtab.c
 cdfee539cfd3256004050bc33902c8f1  gcc/lto/lto-tree.h
 535b0080fabf084d8709a1d179f82c53  gcc/lto/lto.c
 53d38a820f2ac6511c4a3f1184674822  gcc/lto/lto.h
@@ -4885,7 +4887,7 @@ fcc2286edf21da424cd748f78bab8beb  gcc/main.c
 c105259690227bdba523ebbdb6785a23  gcc/mode-classes.def
 5990f0f03ab20c63f205f98103605d90  gcc/mode-switching.c
 ea3034ca83cb71b140bd50490e453acb  gcc/modulo-sched.c
-cea0753f59b148c97a9230af18260dfe  gcc/objc/ChangeLog
+78f49ff1378cc3a8aaaa089e78571d21  gcc/objc/ChangeLog
 f7d80205bd69247c50937b75822d6bd9  gcc/objc/Make-lang.in
 9e4f3a7afe892a3c94dacd501fa3b35f  gcc/objc/config-lang.in
 f4d88f51dbafbe757f45be85d78212b3  gcc/objc/lang-specs.h
@@ -4904,7 +4906,7 @@ c122edc5c6b17b4d321a60351edeafed  gcc/objc/objc-runtime-hooks.h
 ef6e827e622bc98f856c61b276dc8c64  gcc/objc/objc-runtime-shared-support.c
 dab6095a59a77d76a9ffdf45011ed784  gcc/objc/objc-runtime-shared-support.h
 a20e652c78591a316ce03a188632848f  gcc/objc/objc-tree.def
-99f035685dd2d8035a3d8121840f65ee  gcc/objcp/ChangeLog
+fb8e95f0185879ad9781fc10df395939  gcc/objcp/ChangeLog
 79e09c916d955993dc8964962930f661  gcc/objcp/Make-lang.in
 e75a1a94a911654e611dc33cc33ed861  gcc/objcp/config-lang.in
 d551c7316da761fc633ce118cc2b5e8e  gcc/objcp/lang-specs.h
@@ -4914,7 +4916,7 @@ f1fe0e2522617705fd8c3550c0e11716  gcc/objcp/objcp-decl.h
 b287f66d35995315cca62a202c60bb74  gcc/omega.c
 010649dbdbf5e49817e4ea9f867a7bff  gcc/omega.h
 21429c2e0fbb11feafa4b0713ffd0458  gcc/omp-builtins.def
-f26a560e5c6f914b54f634408d144c07  gcc/omp-low.c
+0e7d90d8255b0ebdcdce7bd859483943  gcc/omp-low.c
 768117c1b005da4325bccda2b1aafbf8  gcc/omp-low.h
 f1316591a0b9cca13acbe19ecbc3bbc2  gcc/opt-functions.awk
 dea8fbe4f187428f3ca66daeae92f165  gcc/opt-gather.awk
@@ -4929,19 +4931,19 @@ ea7ba995cdc17d9cc64b18b75e660dc1  gcc/opth-gen.awk
 1ddfeafac813cf8a92d2c3e589959754  gcc/opts-common.c
 f8af27e8d310fb07ee954b9d51720a44  gcc/opts-diagnostic.h
 8d0e45b60b7e191de6268565d8f7be68  gcc/opts-global.c
-f0d81e40a553c25127f2ba08b8d59d94  gcc/opts.c
+a2552b89daebdcf868040ae6a98e6d41  gcc/opts.c
 a8111e6b093d3a2ffb9761954116196f  gcc/opts.h
 aed504b0320caa1fe29201ae90d7696b  gcc/output.h
 1a435aeba364655d22922ca5ce6d6a57  gcc/params.c
 ccfd047721d6ef8fbf1de21f9ce3d72c  gcc/params.def
 bd4f289f412d22ec498d4945cb7892b6  gcc/params.h
 b61dc6bbf55ac62d93ddeaa57e1034d7  gcc/pass_manager.h
-881287af7fb13d7da6651d92e7936bfe  gcc/passes.c
+9072ae9400752c4738ce43bc338e2f54  gcc/passes.c
 05e2c2f175685b9549570e51b3dd799a  gcc/passes.def
 1e36a92344845ad1cb58222eea33d560  gcc/plugin.c
 e68ff8352334b5b009a28b53fb9284ca  gcc/plugin.def
 c26393f8f5ea723bfcc15bf50ee1cc7d  gcc/plugin.h
-706a43669ae00ed9fa3d772d5b6459c7  gcc/po/ChangeLog
+5c2f41ff65d94fed018df2830326783e  gcc/po/ChangeLog
 75ba3ed7c2ea3070333b11ced79b1cc8  gcc/po/EXCLUDES
 1da2375d1cb67532f3330921d29cd450  gcc/po/be.gmo
 ef9de679afafaa38517caa5a594e771a  gcc/po/be.po
@@ -4971,14 +4973,14 @@ fd7ece5b815ea48c4860ed2fc449ade0  gcc/po/nl.po
 28ab66c54e1279b684f5240a46adc7a7  gcc/po/ru.po
 56c8cc4daf3693852ab6e11be298083a  gcc/po/sr.gmo
 edc2c082d66ed31ad2c5897a23f09b8d  gcc/po/sr.po
-d1f020c9a99ddcffda08d5f1f112901f  gcc/po/sv.gmo
-f0e0da51bf7ee2ca2aa08bd2954c8968  gcc/po/sv.po
+ce615528bd4a3a1885147e51b029dcc6  gcc/po/sv.gmo
+7b50cd91f6dbfff3c10c3f39cccbc939  gcc/po/sv.po
 50c9101bba2810cbc8f32fdf0154b842  gcc/po/tr.gmo
 70f05386117166e45871362f9bed6288  gcc/po/tr.po
 70add2819182fb77e30058d218746ad2  gcc/po/vi.gmo
 6b8be71c236a0ffdb8beabb1e48c9714  gcc/po/vi.po
-4bcbbee8cefeef73ad8921889e8769f3  gcc/po/zh_CN.gmo
-da7cf7070e0b6d7b860bd2504261ae6e  gcc/po/zh_CN.po
+5246a6782003fa351975b52b29769147  gcc/po/zh_CN.gmo
+6c55f69a1f24f470653cb44d3dd3fe73  gcc/po/zh_CN.po
 c0a6da01a1a90e55a45d23532046d414  gcc/po/zh_TW.gmo
 3c222a095eadff06aa61b52919603ca2  gcc/po/zh_TW.po
 f6726e62db99c4bd4123f60cde728904  gcc/pointer-set.c
@@ -5007,7 +5009,7 @@ d869921e527aaf5b3eaad357e63dcb90  gcc/real.h
 0862d16c511514fc4b9419fe8d2249fb  gcc/realmpfr.h
 5b9b5b3852225006cfc895ff9315681f  gcc/recog.c
 f8e8e735b5e2da8b23f855f10cf967d9  gcc/recog.h
-f72c7af647eb1b9bbf7430ece8542199  gcc/ree.c
+24eb88f29672c729eeb9c8cd44b47709  gcc/ree.c
 705e5e05416b08906b765349ad349138  gcc/reg-notes.def
 72ea708b4dc70ce4438d69d2319a2fde  gcc/reg-stack.c
 592552d455fba1ac9581479157402123  gcc/regcprop.c
@@ -5043,7 +5045,7 @@ a2bfa6c5434e12ef7fa5bb01467e9d04  gcc/sched-rgn.c
 36e2f10716593b481f8fb4e2836311ff  gcc/sdbout.h
 7d34229f0dd766db5d88ad4d07e7ac7f  gcc/sel-sched-dump.c
 ce9747499f85453b18cc17486a613be1  gcc/sel-sched-dump.h
-750e946a821c0b64a9537ac1eb5026f3  gcc/sel-sched-ir.c
+11a4d53aa01f91bf8d1e0b742058385f  gcc/sel-sched-ir.c
 20d66daf1a82ba97d0c7d7408435ef3c  gcc/sel-sched-ir.h
 cf60677a76338769fb2db05176673243  gcc/sel-sched.c
 e7143a8fa4f763d1920eae298c76e3d6  gcc/sel-sched.h
@@ -5068,7 +5070,7 @@ c0cd2e2c2904476803fb2df9600d2865  gcc/streamer-hooks.c
 373962dfad4478b106fdeaac9d95cdf9  gcc/streamer-hooks.h
 1fe7e856e0066010e5281b160ab86b16  gcc/stringpool.c
 aeb9c7847a29ddd73aaba4fe6916c482  gcc/stringpool.h
-5ee8172bf47d0223df6fe75c280e8b70  gcc/symtab.c
+4442eb1dcb11e9e35122e80ccfadd6c2  gcc/symtab.c
 fb2c182d3b4fe1a83d730402d2dd93f1  gcc/sync-builtins.def
 39bafcedb9b2dcef106d2a0338d4f027  gcc/system.h
 6f7212d96dbe608531046cd09ce61d7c  gcc/target-def.h
@@ -5079,7 +5081,7 @@ dd5e75577e30df65977e84f24fbfa8f2  gcc/target-globals.c
 5096a6cda7c1340a6843c4eee249eb97  gcc/target.h
 be5e3bfa678dd16872775c30f8c43ce4  gcc/targhooks.c
 8e6bbb74d18a1c0dc21dee6ba057882f  gcc/targhooks.h
-00e103354f56c5ed082d7bfa518b4ba4  gcc/testsuite/ChangeLog
+a4bb28b328e913c4c86847ad2d1fdc93  gcc/testsuite/ChangeLog
 862f04afbd87da2cc6bc432c3f28430f  gcc/testsuite/ChangeLog-1993-2007
 029a5d8dacd25eb5d4711452ac448e5b  gcc/testsuite/ChangeLog-2008
 13ac28c41d51b66b4ec40dba6bd50f39  gcc/testsuite/ChangeLog-2009
@@ -7790,8 +7792,11 @@ f09fabcd0e90cac8285146d1d11a50da  gcc/testsuite/c-c++-common/cilk-plus/AN/parser
 2c088e019fefc928fe277ef1f4fb7d33  gcc/testsuite/c-c++-common/cilk-plus/AN/pr57457-2.c
 bba6114b4cfe4a3376c77f125d594f06  gcc/testsuite/c-c++-common/cilk-plus/AN/pr57457.c
 953c3a0fd51c86c993a221c31e5211ec  gcc/testsuite/c-c++-common/cilk-plus/AN/pr57490.c
-caec5195ca9756829fab7d458899c693  gcc/testsuite/c-c++-common/cilk-plus/AN/pr57541.c
+43824703e1a03545ac36b780d6e1942a  gcc/testsuite/c-c++-common/cilk-plus/AN/pr57541-2.c
+a3f5fc8ddb22402540a7884bec069d00  gcc/testsuite/c-c++-common/cilk-plus/AN/pr57541.c
 a36b3974157c0833a64435f6ab921c63  gcc/testsuite/c-c++-common/cilk-plus/AN/pr57577.c
+18b9ecb01f318e46e1b1618d51b65ecf  gcc/testsuite/c-c++-common/cilk-plus/AN/pr58942.c
+b642b955aa866b79df8b35740b79d712  gcc/testsuite/c-c++-common/cilk-plus/AN/pr61191.c
 48e29ba8dcd43d0483eaa269c8168397  gcc/testsuite/c-c++-common/cilk-plus/AN/rank_mismatch.c
 4dfe5bd9bbbf2b8f4fd4e8f2929b2810  gcc/testsuite/c-c++-common/cilk-plus/AN/rank_mismatch2.c
 4cbb8c454d5869ef6fd39d428da765a0  gcc/testsuite/c-c++-common/cilk-plus/AN/rank_mismatch3.c
@@ -7813,6 +7818,7 @@ ef0d0c971bad41a313b87776cadd1f1c  gcc/testsuite/c-c++-common/cilk-plus/AN/vla.c
 b5bfde6a9dd678a448b8474f39ba919b  gcc/testsuite/c-c++-common/cilk-plus/CK/fib_no_return.c
 b8b1cd4b185e786ec2db1f3a6cdfdc64  gcc/testsuite/c-c++-common/cilk-plus/CK/fib_no_sync.c
 3c1aba27f563b43e7496044a67a04215  gcc/testsuite/c-c++-common/cilk-plus/CK/invalid_spawns.c
+e30e70e0f3ee94bd63ee8448c326b114  gcc/testsuite/c-c++-common/cilk-plus/CK/invalid_sync.cc
 4973d12eddd618d656dec825d9f862ca  gcc/testsuite/c-c++-common/cilk-plus/CK/no_args_error.c
 baaa8dcaf89f3b8cd67c3c385d275b85  gcc/testsuite/c-c++-common/cilk-plus/CK/pr59631.c
 0fdcd72893b4a82aea59579baa2dfba1  gcc/testsuite/c-c++-common/cilk-plus/CK/pr60197-2.c
@@ -7963,7 +7969,7 @@ c0e0d2f46bf19ec2b6f3291f97a1ac27  gcc/testsuite/c-c++-common/dfp/usual-arith-con
 c2e14df2c3c1f90d28c611400c8d66df  gcc/testsuite/c-c++-common/gomp/atomic-13.c
 7e932cfe67a56047f2793f8f073026d8  gcc/testsuite/c-c++-common/gomp/atomic-14.c
 ea35c8898a66194ddfd4052e95c9b78c  gcc/testsuite/c-c++-common/gomp/atomic-15.c
-041021ef9972945e372ef740ba657791  gcc/testsuite/c-c++-common/gomp/atomic-16.c
+0129f6c1e124f845d12d0e1105a1272a  gcc/testsuite/c-c++-common/gomp/atomic-16.c
 02a1665574401bc7491c754880894569  gcc/testsuite/c-c++-common/gomp/atomic-2.c
 36961f7538f3a387eb44b9dd71182644  gcc/testsuite/c-c++-common/gomp/atomic-3.c
 b2ce89f1ba635f8d6701308583cd4759  gcc/testsuite/c-c++-common/gomp/atomic-4.c
@@ -7984,10 +7990,16 @@ a7d789b5091f59130b63c3467560e1e1  gcc/testsuite/c-c++-common/gomp/pr58257.c
 fe151bac678698a31d909bd16fae419b  gcc/testsuite/c-c++-common/gomp/pr58551.c
 6d1dc12c879ee866b842cec98b946a0d  gcc/testsuite/c-c++-common/gomp/pr58703.c
 8bae1133175c7b4a752ebdc6baba26e4  gcc/testsuite/c-c++-common/gomp/pr58809.c
+63108e4eb634574549c4c4c319dc6ae0  gcc/testsuite/c-c++-common/gomp/pr59073.c
 5d8f96921e9524db1e999bab7eac1116  gcc/testsuite/c-c++-common/gomp/pr59152.c
 05e6a38172b7bfc26de83040dfc8c364  gcc/testsuite/c-c++-common/gomp/pr59467.c
 c282b9ecbe7c1cafd42ab3e0184003b2  gcc/testsuite/c-c++-common/gomp/pr59917-1.c
 aae6611cdfa9d295d22870f8c9222f69  gcc/testsuite/c-c++-common/gomp/pr59917-2.c
+648e6282c96355072c109ed1a82ea4d7  gcc/testsuite/c-c++-common/gomp/pr60823-1.c
+5724f24c4f1988cd1539ef0c5e147b98  gcc/testsuite/c-c++-common/gomp/pr60823-2.c
+defbe62797ed1363de67a60914b29aa7  gcc/testsuite/c-c++-common/gomp/pr60823-3.c
+33408e801b735ed22ebf0d36f8fd7554  gcc/testsuite/c-c++-common/gomp/pr61486-1.c
+8e7463bc9420fce6b1a1443c77ad841e  gcc/testsuite/c-c++-common/gomp/pr61486-2.c
 328147f679f9eac26be960bf85acb2e8  gcc/testsuite/c-c++-common/gomp/sections1.c
 c7cb982e272572b3d42948b23c3c6229  gcc/testsuite/c-c++-common/gomp/simd1.c
 3ffb158d7db65691583ca6ff7330457a  gcc/testsuite/c-c++-common/gomp/simd2.c
@@ -8127,6 +8139,7 @@ dad442c09041500a2c414da240f49b82  gcc/testsuite/c-c++-common/torture/pr53505.c
 baa15b278da5bb4b2b348d4043f1c97e  gcc/testsuite/c-c++-common/torture/pr58794-1.c
 c816e733ed428f32e49d50b564aaef54  gcc/testsuite/c-c++-common/torture/pr58794-2.c
 51789b713733d1d6693238c2ca4e9b85  gcc/testsuite/c-c++-common/torture/pr60026.c
+233a29474162885f1e2509bbf25e078f  gcc/testsuite/c-c++-common/torture/pr60971.c
 fdeec1e5ecb339bf68961fab033b606e  gcc/testsuite/c-c++-common/torture/vector-compare-1.c
 e098360b3686787abea6589b13d9e806  gcc/testsuite/c-c++-common/torture/vector-compare-2.c
 26c13a49130d1f2d291bea112073585f  gcc/testsuite/c-c++-common/torture/vector-shift.c
@@ -8872,6 +8885,7 @@ de3d6255780c29f63df3f8d96932bd39  gcc/testsuite/g++.dg/cpp0x/constexpr-98.C
 1bc1c995533b047ed8df6f6f24905cd1  gcc/testsuite/g++.dg/cpp0x/constexpr-99.C
 785343af0b3355420f795309fbe121fb  gcc/testsuite/g++.dg/cpp0x/constexpr-abi1.C
 7d8afd8896f969ba303cb470f166dc1a  gcc/testsuite/g++.dg/cpp0x/constexpr-access.C
+b2677ed5d88c259b9b0fac3db40c4180  gcc/testsuite/g++.dg/cpp0x/constexpr-aggr1.C
 3f271472f05de1e297d6ea28097b47d1  gcc/testsuite/g++.dg/cpp0x/constexpr-and.C
 d184daf58a1efefa9b5d9f2675332595  gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr.C
 8fd033f4e6b69599a1e293c45d0814cb  gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr2.C
@@ -9012,6 +9026,7 @@ b0f3e3a129a29b94607b7667c179da90  gcc/testsuite/g++.dg/cpp0x/constexpr-overflow.
 71bf544adf239f884a43b6d72e78604e  gcc/testsuite/g++.dg/cpp0x/constexpr-pos1.C
 e29b90d7c0ad7662446a6055addb6315  gcc/testsuite/g++.dg/cpp0x/constexpr-potential1.C
 fa7ac28bbeb7f5a520d7f5c5847dedff  gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem.C
+02a38a7d530d4818a0d8dbbb4225efd9  gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem2.C
 2e9d0ef04a28487562d30ab99afa37a2  gcc/testsuite/g++.dg/cpp0x/constexpr-ptrsub.C
 c893e2388f9acef593b874b1e6b02071  gcc/testsuite/g++.dg/cpp0x/constexpr-pure.C
 3d462eb6b34feb0c1cf9349c9e6e976c  gcc/testsuite/g++.dg/cpp0x/constexpr-recursion.C
@@ -9047,6 +9062,7 @@ f98c98ebe90dfc39170c4a4f40861306  gcc/testsuite/g++.dg/cpp0x/constexpr-template2
 a05dfbf634e5313455c47b794057b288  gcc/testsuite/g++.dg/cpp0x/constexpr-template4.C
 fa38f028820b71aa1be6862fa8eb6f7c  gcc/testsuite/g++.dg/cpp0x/constexpr-template5.C
 7af69efd7e063989a419444f87d1e491  gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C
+fac54481719d52997e799f9f5944ce10  gcc/testsuite/g++.dg/cpp0x/constexpr-template7.C
 53ba7c64d852ccf921166074b871f796  gcc/testsuite/g++.dg/cpp0x/constexpr-throw.C
 77e5599180280cec4988ec1ddb372b25  gcc/testsuite/g++.dg/cpp0x/constexpr-tuple.C
 e4e296b91d878f03ac7d69d384efc1f4  gcc/testsuite/g++.dg/cpp0x/constexpr-typedef1.C
@@ -9188,6 +9204,7 @@ bf3070d396c7bb7e08191019deb59497  gcc/testsuite/g++.dg/cpp0x/defaulted45.C
 acc6bd6fd744bdc18ca97d53d2b93372  gcc/testsuite/g++.dg/cpp0x/defaulted46.C
 9c11c2857ec4e4034b1d9d143b50000f  gcc/testsuite/g++.dg/cpp0x/defaulted47.C
 c7e6cc6230f1d5b6c871906050eb4a8e  gcc/testsuite/g++.dg/cpp0x/defaulted48.C
+f43c03a4784f2f2c60f5f1a33fb05baa  gcc/testsuite/g++.dg/cpp0x/defaulted49.C
 f850ce13cb38dd65e14979303082c6cf  gcc/testsuite/g++.dg/cpp0x/defaulted5.C
 1983e4823fae7dc43730a329ff221148  gcc/testsuite/g++.dg/cpp0x/defaulted6.C
 bbb1e584edf09356b8623f522ff03019  gcc/testsuite/g++.dg/cpp0x/defaulted7.C
@@ -9373,6 +9390,7 @@ fda4f7d4f4b57c79d7734d634ae9041f  gcc/testsuite/g++.dg/cpp0x/inh-ctor5.C
 ec9b8f74c4220a07771e91a84c8311aa  gcc/testsuite/g++.dg/cpp0x/inh-ctor9.C
 09f09079c354ad93c3844a14549e0854  gcc/testsuite/g++.dg/cpp0x/initlist-array2.C
 2689261b6dbe2bf5875e915ce8a31a53  gcc/testsuite/g++.dg/cpp0x/initlist-array3.C
+6c1907913d332611dd16d03002d759f9  gcc/testsuite/g++.dg/cpp0x/initlist-array4.C
 75dbdd73972da9a369980925ff477d9d  gcc/testsuite/g++.dg/cpp0x/initlist-arrray1.C
 994605127bf908d7a5b9745b9991101e  gcc/testsuite/g++.dg/cpp0x/initlist-ctor1.C
 8642aa67406b008384f59447a05a884c  gcc/testsuite/g++.dg/cpp0x/initlist-deduce.C
@@ -9466,6 +9484,8 @@ d5b016047cf8f1ab79bc52ea41141d4c  gcc/testsuite/g++.dg/cpp0x/initlist77.C
 f4e51372ebce70d4e70fe4c30c9c5df3  gcc/testsuite/g++.dg/cpp0x/initlist80.C
 02ef88866a33af3b82367f920d4380ba  gcc/testsuite/g++.dg/cpp0x/initlist81.C
 3df81dd8acdfbccf6fba7648b64b32c5  gcc/testsuite/g++.dg/cpp0x/initlist82.C
+e19590cab587582486b601d5b4135a2e  gcc/testsuite/g++.dg/cpp0x/initlist84.C
+ce1c3896ddd664d6cbfa86d425a7cf39  gcc/testsuite/g++.dg/cpp0x/initlist86.C
 de6fe33f85a45970df99586b8f8f48c8  gcc/testsuite/g++.dg/cpp0x/initlist9.C
 2bd94659e18571416ec707555f61b80d  gcc/testsuite/g++.dg/cpp0x/inline-ns1.C
 3e2f011d130eb1b8b8c5b45e6f650dfb  gcc/testsuite/g++.dg/cpp0x/inline-ns2.C
@@ -9488,6 +9508,7 @@ b8f5e644f92e53096f2cac6fa2abc634  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-captu
 22fc25fa709265abbae77ff5d72e72f8  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const-neg.C
 1d85414b94d2d104004fc7341b90a896  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const.C
 64bc761abc3783521fdfb26f930f3410  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const2.C
+e513b4dcc45e6063745c03c7c99151fa  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const3.C
 25265bcafc26c3a0ab3727a9ff348916  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv.C
 299fbfde279f22ba6cf7e79d7e17f49b  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv2.C
 13859d1112ce3900c792dcdc2e8ae085  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv3.C
@@ -9583,6 +9604,7 @@ adb1d2fb2d918c692d644ded0dc5f428  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-std-f
 06d36011a13482624806d2ac0b6cc62c  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template10.C
 0480ccf1db57a209026d61f347f2558b  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template11.C
 5a2e25e55c03b3d576cbd41cd3919157  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template12.C
+5eb96d2cc00390806e540f86524b3658  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template13.C
 ba1b33731a2a8e72850872d9f2918923  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template2.C
 94cfc36278ab817fd2df7010aa3c83ba  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template3.C
 e099bfa2ff82527ea9b86eaaab9acb43  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template4.C
@@ -9600,6 +9622,7 @@ bde8c4c4c753e9d6da1e9bf4d5eeb363  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this1
 cb3b2650a080bd9c7acfa0a46c317afe  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this15.C
 1552f0ad6ccfb863bbdcf5b710f3b84d  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this16.C
 0d9d1df756c17ed3794931d85361bea9  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this17.C
+4140ff305c161e7f2fe64321a7e90846  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this18.C
 53707c7f73c56183ff77914e6f7417b9  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this2.C
 4d206d41378a3a22959ec8c2c1439014  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this3.C
 63fdeead97cb6030e039c864293a278b  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this4.C
@@ -9667,6 +9690,10 @@ ef20e3e0e53b4fb3163e5066efb89b64  gcc/testsuite/g++.dg/cpp0x/nsdmi-list3.C
 bb52d0707dea46cd2224e8f36c397c29  gcc/testsuite/g++.dg/cpp0x/nsdmi-local.C
 532b3e2c733c1b03dfa22d18667650fb  gcc/testsuite/g++.dg/cpp0x/nsdmi-sizeof.C
 6a97f223fff723db9f950c32a7828e35  gcc/testsuite/g++.dg/cpp0x/nsdmi-template1.C
+4826317ec7401f0dceb7076d880beac7  gcc/testsuite/g++.dg/cpp0x/nsdmi-template10.C
+c56f71db72e83d4f4135a61f033eddbb  gcc/testsuite/g++.dg/cpp0x/nsdmi-template11.C
+6a7ab71ba1c7fa9cc3345da8f9afe903  gcc/testsuite/g++.dg/cpp0x/nsdmi-template12.C
+b10aa26824c27a87b56ae1ff32b2a84b  gcc/testsuite/g++.dg/cpp0x/nsdmi-template13.C
 d83133afa9fe5d533ed8b6cecc90cc44  gcc/testsuite/g++.dg/cpp0x/nsdmi-template2.C
 a4838f227c782d1dc8cc894a19deb0d1  gcc/testsuite/g++.dg/cpp0x/nsdmi-template3.C
 ecc55c2acf604366d5eab66ebf6a29dd  gcc/testsuite/g++.dg/cpp0x/nsdmi-template4.C
@@ -9674,6 +9701,7 @@ bbce95e97ae41e0f3fe3ba83781deb99  gcc/testsuite/g++.dg/cpp0x/nsdmi-template5.C
 3a5b1755ff3b8f25bdc5d3343ec58d7e  gcc/testsuite/g++.dg/cpp0x/nsdmi-template6.C
 bca364bb7be51173c515446b467d101b  gcc/testsuite/g++.dg/cpp0x/nsdmi-template7.C
 8228a8cc4123378699db41bb692816a8  gcc/testsuite/g++.dg/cpp0x/nsdmi-template8.C
+10d5192bc22fb982a714dabcc1321c84  gcc/testsuite/g++.dg/cpp0x/nsdmi-template9.C
 d1503365b6615b562965b9d47e9327c5  gcc/testsuite/g++.dg/cpp0x/nsdmi-union1.C
 97244e2bdff262e5f89cc9d5717cbeee  gcc/testsuite/g++.dg/cpp0x/nsdmi-union2.C
 24d435bfe180c503be113a8efa76cca0  gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C
@@ -9796,15 +9824,18 @@ c5f3717677f94f92f6a25afd1b3fafa2  gcc/testsuite/g++.dg/cpp0x/pr54318.C
 e9cd0db7db25af8829963f7122d2ed31  gcc/testsuite/g++.dg/cpp0x/pr57981.C
 016ebcf6c9d25c8f22cd01c52f674b94  gcc/testsuite/g++.dg/cpp0x/pr58072.C
 66a132ab0a4f16eb332c03fd38067a1c  gcc/testsuite/g++.dg/cpp0x/pr58080.C
+10115e7416304bd9586633e7a175c150  gcc/testsuite/g++.dg/cpp0x/pr58155.C
 fde4df725e337b433baf1bd5c4490563  gcc/testsuite/g++.dg/cpp0x/pr58510.C
 99345be72ff580dd3de1858994530c51  gcc/testsuite/g++.dg/cpp0x/pr58563.C
 b2c6b8e617bc163eb317b7668652e006  gcc/testsuite/g++.dg/cpp0x/pr58674.C
 135956a1794cb24e32c252e833402edb  gcc/testsuite/g++.dg/cpp0x/pr58707.C
+c2caeb92016de47392b35fa937c864f8  gcc/testsuite/g++.dg/cpp0x/pr58781.C
 0015dc46694c26453738cf6d0f1ff9f1  gcc/testsuite/g++.dg/cpp0x/pr58871.C
 91fd57600ae1f1e9e0fb675962816f3e  gcc/testsuite/g++.dg/cpp0x/pr59111.C
 97725be33d84460ca43942d2adc95953  gcc/testsuite/g++.dg/cpp0x/pr59641.C
 3d0500d1d666af43dc6c0f875f02c205  gcc/testsuite/g++.dg/cpp0x/pr60047.C
 b183a4e80609d3b7c1a96a71d68c8355  gcc/testsuite/g++.dg/cpp0x/pr60215.C
+0ec463c125bf90b0bc2b4ce4298afcc7  gcc/testsuite/g++.dg/cpp0x/pr60249.C
 53428f69a6d0153074c9b06ee9fbe9e7  gcc/testsuite/g++.dg/cpp0x/ptrmem-cst-arg1.C
 6e8e648c26d9bf237cc152180e88c2c2  gcc/testsuite/g++.dg/cpp0x/range-for1.C
 5c7a98d8ca2f0f427c081bf6902aa831  gcc/testsuite/g++.dg/cpp0x/range-for10.C
@@ -9842,6 +9873,7 @@ e25aa6f18faad387b7f1ade3529476a6  gcc/testsuite/g++.dg/cpp0x/ref-qual11.C
 0a0c7a2db84d28ba649ea53e136a1d9c  gcc/testsuite/g++.dg/cpp0x/ref-qual12.C
 759a26dd15a061d3f5a982b5eb65098b  gcc/testsuite/g++.dg/cpp0x/ref-qual13.C
 bf679e1b75877f28dc4d57155f61bcb1  gcc/testsuite/g++.dg/cpp0x/ref-qual14.C
+baf0dc0526b9c7116fa5e5cbccbe2286  gcc/testsuite/g++.dg/cpp0x/ref-qual15.C
 17d77d3ef6cc0e1cfd53228f15a40017  gcc/testsuite/g++.dg/cpp0x/ref-qual2.C
 68b27ec15231994ad0330625660d2720  gcc/testsuite/g++.dg/cpp0x/ref-qual3.C
 1bb06529f586a3e77263290dd006534e  gcc/testsuite/g++.dg/cpp0x/ref-qual4.C
@@ -9940,6 +9972,7 @@ c271006c8055b6ab792c26bdb8a60c51  gcc/testsuite/g++.dg/cpp0x/sfinae46.C
 7f9ec6f23b495a9ffdc2eb43224e4e97  gcc/testsuite/g++.dg/cpp0x/sfinae48.C
 07a6e388376959abb699902ddf79cfaa  gcc/testsuite/g++.dg/cpp0x/sfinae49.C
 d5e6c1bb41ba570249eba838c6885b91  gcc/testsuite/g++.dg/cpp0x/sfinae5.C
+e658abe19e3f9090108ecdee6c7ff751  gcc/testsuite/g++.dg/cpp0x/sfinae50.C
 7d2a515d9dca41b0e82b2e6ea54bd2d3  gcc/testsuite/g++.dg/cpp0x/sfinae6.C
 ec1a51ea3fd41e6e61c8f425bde1fd0b  gcc/testsuite/g++.dg/cpp0x/sfinae7.C
 547894832b1452d5f513938e0cb8a166  gcc/testsuite/g++.dg/cpp0x/sfinae8.C
@@ -10132,7 +10165,10 @@ dcf2e8b00c5683679b9562aeaff1d2f2  gcc/testsuite/g++.dg/cpp0x/variadic153.C
 081a4bedbab268a6ae607a361a5687db  gcc/testsuite/g++.dg/cpp0x/variadic154.C
 bbeb66e2a1c3ff1e5215a3de0291398a  gcc/testsuite/g++.dg/cpp0x/variadic155.C
 0e3dc026b07c4ba87c8c89d690eccc97  gcc/testsuite/g++.dg/cpp0x/variadic156.C
+a516c60e45bf1eecdf3636277e7f49cb  gcc/testsuite/g++.dg/cpp0x/variadic158.C
+bf231bc932b6dcd397fde94abd58295c  gcc/testsuite/g++.dg/cpp0x/variadic159.C
 ef6cd86993fd9e98b5c841e854f1e291  gcc/testsuite/g++.dg/cpp0x/variadic16.C
+5348f57a43bc1324c15c9e5945ba3ebe  gcc/testsuite/g++.dg/cpp0x/variadic160.C
 3bff3422f4558e688cb85c201d29da39  gcc/testsuite/g++.dg/cpp0x/variadic17.C
 e7b3b347202f88043f677ea7ce8e4e18  gcc/testsuite/g++.dg/cpp0x/variadic18.C
 b6eb5a5a2dea08c17e47320efabe05df  gcc/testsuite/g++.dg/cpp0x/variadic19.C
@@ -10333,6 +10369,7 @@ af92f508689d2ab734f15be4a34a21a8  gcc/testsuite/g++.dg/cpp1y/pr58548.C
 119423feeda4a9e445a82989e694bc55  gcc/testsuite/g++.dg/cpp1y/pr59635.C
 f653995a9fc3c07c5f78cb893a5d0f36  gcc/testsuite/g++.dg/cpp1y/pr59636.C
 89674d408dfbc12f05e3c06cd0c72ada  gcc/testsuite/g++.dg/cpp1y/pr59638.C
+761afa9b3e6b38bb9e9836c267285705  gcc/testsuite/g++.dg/cpp1y/pr59867.C
 4f72056a5c0a9c06897a661b1a5ccf00  gcc/testsuite/g++.dg/cpp1y/pr60033.C
 ae8b2c75d98bcfd540cfa668c012d7e1  gcc/testsuite/g++.dg/cpp1y/pr60052.C
 8fcfe639eb392754703259ddfa944fb2  gcc/testsuite/g++.dg/cpp1y/pr60053.C
@@ -10417,6 +10454,7 @@ a26a24dcac8fa1d56d36002c9551d274  gcc/testsuite/g++.dg/debug/dwarf2/fesd-baseonl
 09b1f81116f03c2c68f057d9f2799605  gcc/testsuite/g++.dg/debug/dwarf2/global-used-types-1.C
 5f527b1d5db3338320735cddde309293  gcc/testsuite/g++.dg/debug/dwarf2/icf.C
 94ab24c4c92e0025c8c21c00e7088ab9  gcc/testsuite/g++.dg/debug/dwarf2/imported-decl-1.C
+aeaf229ff1bb7dd4ac9bc56468134190  gcc/testsuite/g++.dg/debug/dwarf2/imported-decl-2.C
 cd2f8eb018e0f3274a839788f6516dbd  gcc/testsuite/g++.dg/debug/dwarf2/imported-module-2.C
 00073dddfb84caf2285834b264334fb6  gcc/testsuite/g++.dg/debug/dwarf2/imported-module-3.C
 f328f5fd374ff3e1abef9c5c385bb657  gcc/testsuite/g++.dg/debug/dwarf2/imported-module-4.C
@@ -10445,6 +10483,7 @@ b3cbbd79d5ff077a6732280d76b2284e  gcc/testsuite/g++.dg/debug/dwarf2/omp-fesdr.C
 83e103e0e6e4fc3fb74441438b2c7288  gcc/testsuite/g++.dg/debug/dwarf2/pr46527.C
 77d7e1ad341ac6addc71df4dbb8ec2e2  gcc/testsuite/g++.dg/debug/dwarf2/pr52260.C
 ba3a14694481b03351ebef6174059c0f  gcc/testsuite/g++.dg/debug/dwarf2/pr54508.C
+97f5ea2ec0d8ed4da158c8c51e4f395d  gcc/testsuite/g++.dg/debug/dwarf2/pr61433.C
 6a221e4796f80705722794e4cb854118  gcc/testsuite/g++.dg/debug/dwarf2/pubnames-1.C
 61c15278662fb88f21f9d3f56b288d93  gcc/testsuite/g++.dg/debug/dwarf2/pubnames-2.C
 1c216c5d6dbf7b013153d4ca504eeebc  gcc/testsuite/g++.dg/debug/dwarf2/pubnames-3.C
@@ -10960,6 +10999,7 @@ a2e70aa0695a209f89997a3a585cda4e  gcc/testsuite/g++.dg/ext/complex7.C
 ad9b04984e82c2e0e1fb2025de8f9a23  gcc/testsuite/g++.dg/ext/complit11.C
 ab6acb4a7c8c1d0b3e7717da4ac42983  gcc/testsuite/g++.dg/ext/complit12.C
 1ef2d5904216cc610d5c5dde143f79ac  gcc/testsuite/g++.dg/ext/complit13.C
+07cb245f4432f072b7263e83c675d2de  gcc/testsuite/g++.dg/ext/complit14.C
 7350965e2763a3a6e1d4346deaa1e94e  gcc/testsuite/g++.dg/ext/complit2.C
 7c0cfd2335d61954c46222aa7517e055  gcc/testsuite/g++.dg/ext/complit3.C
 f2a3354acae823d1855d3f7820f78229  gcc/testsuite/g++.dg/ext/complit4.C
@@ -11785,6 +11825,7 @@ c268699333b239c371d1bdc906ea54ad  gcc/testsuite/g++.dg/init/copy2.C
 28ced8869a7baac26a49e3084bf7d851  gcc/testsuite/g++.dg/init/copy4.C
 02c689a173b02b7312d282add8f14591  gcc/testsuite/g++.dg/init/copy5.C
 5d48182e8fa2907f420bf1ef3d67dba3  gcc/testsuite/g++.dg/init/copy6.C
+401730d1bb87c3edf85010755fe8a2ff  gcc/testsuite/g++.dg/init/copy7.C
 77ceed5edeb6a109374c44ef23679bef  gcc/testsuite/g++.dg/init/ctor1.C
 a7fab26ec8d16e90cb47357e7759a768  gcc/testsuite/g++.dg/init/ctor10.C
 6ee4f7840a21e5a764e2facf94d7e71d  gcc/testsuite/g++.dg/init/ctor11.C
@@ -11967,7 +12008,7 @@ f98e7ab2646951eca57b37b0ade8c12a  gcc/testsuite/g++.dg/init/volatile2.C
 181d03bf17027cab97eb47736f11ff30  gcc/testsuite/g++.dg/ipa/20090113-1.C
 7522727dcb8122398374b49264575c77  gcc/testsuite/g++.dg/ipa/devirt-1.C
 a38c209b4fc2c2a0b36cf4c89adcf9d8  gcc/testsuite/g++.dg/ipa/devirt-10.C
-30cb11288b1bdcca3c2f20d03e0033cf  gcc/testsuite/g++.dg/ipa/devirt-11.C
+cfcb8d283cbb4cafcbcdc9e7065786fd  gcc/testsuite/g++.dg/ipa/devirt-11.C
 af8781bfa434602bbdd203a9b683acca  gcc/testsuite/g++.dg/ipa/devirt-12.C
 95efb847fd00d08421ccc099b6b62a1d  gcc/testsuite/g++.dg/ipa/devirt-13.C
 26800570b776735a7c4b46e635a55d01  gcc/testsuite/g++.dg/ipa/devirt-14.C
@@ -11982,13 +12023,14 @@ d138438781d7fea6fe1c65338c286afb  gcc/testsuite/g++.dg/ipa/devirt-19.C
 6d87b18d1fbfc853e7a4dedb581b38ac  gcc/testsuite/g++.dg/ipa/devirt-22.C
 dfb26a875a3981e85385d162fbc8fb72  gcc/testsuite/g++.dg/ipa/devirt-23.C
 540360b373bf580206ab7238bc7a9976  gcc/testsuite/g++.dg/ipa/devirt-24.C
-0ea3d64f37ec0034e0cdf3da393fe2c8  gcc/testsuite/g++.dg/ipa/devirt-25.C
+ecabc1a11f2927b0222d65a9d86c4c38  gcc/testsuite/g++.dg/ipa/devirt-25.C
 a955053ff50f32fdd98345068ff798fa  gcc/testsuite/g++.dg/ipa/devirt-26.C
-8a2c5cc0f1c6187bc864f03efc389fae  gcc/testsuite/g++.dg/ipa/devirt-27.C
+83c12ee028b9711638166b6f6aa4120c  gcc/testsuite/g++.dg/ipa/devirt-27.C
 4e8c06e1e1145b9d11bc125669054764  gcc/testsuite/g++.dg/ipa/devirt-28.C
 31f84d40ad557791781d8a441ce8fb42  gcc/testsuite/g++.dg/ipa/devirt-29.C
 48c9df6f6e861f2448fa74314b9affb3  gcc/testsuite/g++.dg/ipa/devirt-3.C
 7cd06fb87d4e922414924f6395c7441b  gcc/testsuite/g++.dg/ipa/devirt-30.C
+46c20441c2f9bdc827ed732c9e41f089  gcc/testsuite/g++.dg/ipa/devirt-31.C
 d2da990ad34e9459150b3aa94be920a9  gcc/testsuite/g++.dg/ipa/devirt-4.C
 bef829571c10195d63a0c4ff07d958ef  gcc/testsuite/g++.dg/ipa/devirt-5.C
 8c636e7513618b1b3735a28c660923df  gcc/testsuite/g++.dg/ipa/devirt-6.C
@@ -12045,11 +12087,16 @@ bd532642c33364f27cc5cdac3622c29b  gcc/testsuite/g++.dg/ipa/pr59176.C
 e5598a6623b0d9d17b639bb9715c0aa1  gcc/testsuite/g++.dg/ipa/pr59737.C
 cc7882632634230561bec7316fae94c5  gcc/testsuite/g++.dg/ipa/pr60419.C
 19fe8d73bee48bb2e91c928907e2a11c  gcc/testsuite/g++.dg/ipa/pr60457.C
-944191e3103ec99ba3e88de3e71f26c7  gcc/testsuite/g++.dg/ipa/pr60600.C
+d48ba9dd79036705896a57df5c510757  gcc/testsuite/g++.dg/ipa/pr60600.C
 190bb52be2caa70fd51cc2a735d45f1e  gcc/testsuite/g++.dg/ipa/pr60640-1.C
 b4277c2887fdb910bdca2a8dbf0de117  gcc/testsuite/g++.dg/ipa/pr60640-2.C
 2b5d243c5137f370d06b3628cfde2864  gcc/testsuite/g++.dg/ipa/pr60640-3.C
 41bda91df204bac278fc60acb7c02356  gcc/testsuite/g++.dg/ipa/pr60640-4.C
+231677eaca7afc4bb98a3094c618e3f3  gcc/testsuite/g++.dg/ipa/pr61085.C
+2c3b07fe4ee36fc9baf0391eed8b9d2d  gcc/testsuite/g++.dg/ipa/pr61160-1.C
+185fd53b287f35aa00dc354318e7b17f  gcc/testsuite/g++.dg/ipa/pr61160-2.C
+a4862cb5f3f58316adc6e36c7d8eb036  gcc/testsuite/g++.dg/ipa/pr61160-3.C
+daceb1b2f3cf167fb6e78fc2d34f2778  gcc/testsuite/g++.dg/ipa/pr61540.C
 65b30ac9d2b3a2244e49849aaad7dd78  gcc/testsuite/g++.dg/ipa/remref-1.C
 d26e3f0899c708e0f4b2ec8427502236  gcc/testsuite/g++.dg/ipa/remref-2.C
 8a469d09a1c8b835acf9b3b8f7d8078d  gcc/testsuite/g++.dg/ipa/type-inheritance-1.C
@@ -12686,6 +12733,10 @@ a7e9290a66164d70cf71a687dc002b1d  gcc/testsuite/g++.dg/opt/pr59622.C
 bc581baefa9c2cdf340c7afe5ec42620  gcc/testsuite/g++.dg/opt/pr59947.C
 fcc0cbf12c3c1ff2231451798c2c5d37  gcc/testsuite/g++.dg/opt/pr60002.C
 e676633b5d90b99891eacfad5d4d65cc  gcc/testsuite/g++.dg/opt/pr60597.C
+cd9ce81573f1dd55ed9926ad0afbe423  gcc/testsuite/g++.dg/opt/pr60849.C
+2ca5ee004fc73e412a39de0dd38e1b4c  gcc/testsuite/g++.dg/opt/pr60912.C
+b1b3a2b530cb188994df8ef142ab9234  gcc/testsuite/g++.dg/opt/pr61456.C
+6cfd7f0d8649e554551af4ecdbfa227e  gcc/testsuite/g++.dg/opt/pr61654.C
 ac2356162f00cd5e8804482480f1795a  gcc/testsuite/g++.dg/opt/pr6713.C
 90bdbfd9313461944756a9e9f01ce788  gcc/testsuite/g++.dg/opt/pr7503-1.C
 1451eba24eea82cbd0c1ab87885c0f77  gcc/testsuite/g++.dg/opt/preinc1.C
@@ -12730,6 +12781,7 @@ b9c612d3d4289676abda6ba55bb98ae9  gcc/testsuite/g++.dg/opt/temp1.C
 f869a43935cc3631852fcb3f8e68ecfd  gcc/testsuite/g++.dg/opt/thunk3.C
 2abee99752ddcdc2d689d23397d7046e  gcc/testsuite/g++.dg/opt/thunk4.C
 240c5e869a8b5ad0a8bf6049a8d00862  gcc/testsuite/g++.dg/opt/tmp1.C
+88cb064325abdff24b813c432e193161  gcc/testsuite/g++.dg/opt/typeinfo1.C
 5a0d1f452801f903b71f360e2af9dab9  gcc/testsuite/g++.dg/opt/unroll1.C
 b3a23f133e24d6239172db5b22fe6824  gcc/testsuite/g++.dg/opt/unroll2.C
 c0e183747d99b3a1525638800b213d82  gcc/testsuite/g++.dg/opt/value-init1.C
@@ -13652,6 +13704,10 @@ f30a79885e763e341eec192a87cfd3ff  gcc/testsuite/g++.dg/pr59477.C
 c48f8e06d0c4fb011bdd97b2641d239a  gcc/testsuite/g++.dg/pr59510.C
 6ef903a30658765c574e6f3aa8592058  gcc/testsuite/g++.dg/pr59695.C
 423a4225250186b2746ca0c376b8124a  gcc/testsuite/g++.dg/pr60518.C
+11692c0a1d9e603f30a38169f72d42aa  gcc/testsuite/g++.dg/pr60969.C
+a11ecfc0510623f70458e31e48d431fb  gcc/testsuite/g++.dg/pr61094.C
+fa5e79b3c98a745c039b5e34186024a2  gcc/testsuite/g++.dg/pr61289-2.c
+1ec6b4df7e034d65d4befa4778662d11  gcc/testsuite/g++.dg/pr61289.C
 ae8863cdd596655bd9501c7a7e546fc7  gcc/testsuite/g++.dg/predict-loop-exit-1.C
 112161f9cc2e99ed1a64b608b234d230  gcc/testsuite/g++.dg/predict-loop-exit-2.C
 9fdf45388f73e8c9a46342cf4ec52cb6  gcc/testsuite/g++.dg/predict-loop-exit-3.C
@@ -13883,6 +13939,7 @@ d75b945d8bfffb304a8d55dc4a97d457  gcc/testsuite/g++.dg/template/const5.C
 142422aea9a677fb32502402e895a96d  gcc/testsuite/g++.dg/template/conv11.C
 6652f3b06cb1bfcdf341802d7b0a8a9a  gcc/testsuite/g++.dg/template/conv12.C
 c31c403acbaa655ae0413e1d4350ae4b  gcc/testsuite/g++.dg/template/conv13.C
+c28b6679b01f4bbe8403c045289d2aef  gcc/testsuite/g++.dg/template/conv14.C
 383f6618c1ccaddea23b36ff23d6d35e  gcc/testsuite/g++.dg/template/conv2.C
 be5017725e9889a47d07ba0d3a3464ff  gcc/testsuite/g++.dg/template/conv3.C
 8e48e2a0d63cdb353b4a07380c4cf577  gcc/testsuite/g++.dg/template/conv4.C
@@ -14272,6 +14329,7 @@ d7b45350c258784a47a153c1dedc979d  gcc/testsuite/g++.dg/template/koenig6.C
 331e9bd8d23757608f4687c51ab1c460  gcc/testsuite/g++.dg/template/koenig8.C
 0e217ccc45d6ea239c0b368c1909c623  gcc/testsuite/g++.dg/template/koenig9.C
 9eed8ce0831bf0313cab105488a8b9f3  gcc/testsuite/g++.dg/template/linkage1.C
+29182ba864d966fb7660afbfb5b53867  gcc/testsuite/g++.dg/template/local-fn1.C
 b7860e67547fa0e658cae5b27a73d61b  gcc/testsuite/g++.dg/template/local1.C
 d32b0f4cfabbf7cf6a3f55db155096d2  gcc/testsuite/g++.dg/template/local2.C
 e254df20b082728d0e04a8e1b3b18557  gcc/testsuite/g++.dg/template/local3.C
@@ -14455,6 +14513,7 @@ ddd54fa2d302cf8f37c4512b75025445  gcc/testsuite/g++.dg/template/pr29633.C
 698fef868c92929bbef3fe847bfc6295  gcc/testsuite/g++.dg/template/pr4926-1.C
 6465acc359cf71ed791739a364127805  gcc/testsuite/g++.dg/template/pr54858.C
 bf2a6b6f0f8991958562eeb56f4d4738  gcc/testsuite/g++.dg/template/pr58878.C
+ae27fcfe45fb638bb620109e3d14cecf  gcc/testsuite/g++.dg/template/pr61537.C
 04907f98f8eab7c64ced6646f5140346  gcc/testsuite/g++.dg/template/pretty1.C
 b1805d4b386b8dcd432f41c68e255100  gcc/testsuite/g++.dg/template/pseudodtor1.C
 5bbbdc0bd84a1cf86dd283b16e7aa6ba  gcc/testsuite/g++.dg/template/pseudodtor2.C
@@ -14481,6 +14540,8 @@ d789c4b198aaf983e81643a1d995a8da  gcc/testsuite/g++.dg/template/ptrmem21.C
 8694ad15b71a480035424c4134c7c412  gcc/testsuite/g++.dg/template/ptrmem24.C
 486102b52761663d2915ac7d52f96b42  gcc/testsuite/g++.dg/template/ptrmem25.C
 0d524ba59ac7aba767ec6a00d1495501  gcc/testsuite/g++.dg/template/ptrmem26.C
+5825625a5ba7d28fd8a1fdd113dde9c2  gcc/testsuite/g++.dg/template/ptrmem27.C
+d7e997028da5485d49789a1ed367286f  gcc/testsuite/g++.dg/template/ptrmem28.C
 171d82f45a76129388539c01e3212ec9  gcc/testsuite/g++.dg/template/ptrmem3.C
 9a4a21b8504db815b1c727663eff64ff  gcc/testsuite/g++.dg/template/ptrmem4.C
 c1d71028a4f69f5c3fcfd2fd8a35f919  gcc/testsuite/g++.dg/template/ptrmem5.C
@@ -14876,6 +14937,7 @@ bfa076f6c872b1975947b8413d453899  gcc/testsuite/g++.dg/tls/thread_local6g.C
 276b21ff0a55339a3b1af911f5514ec8  gcc/testsuite/g++.dg/tls/thread_local7.C
 5cc77d589814bde9b85c3b12c619eb3c  gcc/testsuite/g++.dg/tls/thread_local7g.C
 9399e18da7889fb7fc5333e641e339e4  gcc/testsuite/g++.dg/tls/thread_local8.C
+46eb3382c1226c7ec68020221453058a  gcc/testsuite/g++.dg/tls/thread_local9.C
 5c58bf38e3547535a343718f69db04f0  gcc/testsuite/g++.dg/tls/tls.exp
 7212556766805451a098e554a8ab648e  gcc/testsuite/g++.dg/tls/trivial.C
 debf53c602437e43da099fa943834a84  gcc/testsuite/g++.dg/tm/20100429.C
@@ -15187,6 +15249,8 @@ ce5bd74dda85ecae08b1e79c21fc231c  gcc/testsuite/g++.dg/torture/pr60609.C
 8c2dc2c3e3d744280501f821dd5cfb10  gcc/testsuite/g++.dg/torture/pr60659.C
 59b64e493342855b4d4f60c5c5b2e866  gcc/testsuite/g++.dg/torture/pr60746.C
 5f42e568cc105049d43016ffc65ea36f  gcc/testsuite/g++.dg/torture/pr60750.C
+2cd5e243f12b5ca6cf66ca1966b24a84  gcc/testsuite/g++.dg/torture/pr60854.C
+ea51728c5e2ae154940893c6ccb374f8  gcc/testsuite/g++.dg/torture/pr60895.C
 389892c1f2e87d69449479d1b053c70c  gcc/testsuite/g++.dg/torture/predcom-1.C
 d28910105d9c9253d94d70eacd5e19d4  gcc/testsuite/g++.dg/torture/pushpop_macro.C
 a1b47b9c3e69d79d1895ebc4fd11032b  gcc/testsuite/g++.dg/torture/stackalign/check.h
@@ -15378,6 +15442,7 @@ ffa63568656b6e8f88c2e04bcfb82d6f  gcc/testsuite/g++.dg/tree-ssa/pr53844.C
 a82ef6cbe78155176eca6d640870c3a5  gcc/testsuite/g++.dg/tree-ssa/pr54515.C
 0302793462643aeaccabd5c387ce8c93  gcc/testsuite/g++.dg/tree-ssa/pr57380.C
 bb17cbedcbb5bcabb9ee8299f30c3ae9  gcc/testsuite/g++.dg/tree-ssa/pr58404.C
+22dc7006f5ec66c9a231712242810915  gcc/testsuite/g++.dg/tree-ssa/pr61009.C
 d56e4fc904579446fb892941249b3b4a  gcc/testsuite/g++.dg/tree-ssa/pr8781.C
 1774a3db4e8c1c639d06cfd8ba95990d  gcc/testsuite/g++.dg/tree-ssa/ptrmemfield.C
 fe0c4f92b4591334dd40df6bbeb06f32  gcc/testsuite/g++.dg/tree-ssa/restrict1.C
@@ -15454,6 +15519,7 @@ add1cfbf96f3e44641caf48f126f9c38  gcc/testsuite/g++.dg/vect/pr45470-b.cc
 7341ca0a00bff9809481068f2f734d5a  gcc/testsuite/g++.dg/vect/pr60023.cc
 43a78626ccd2affbd7d45540f8fc64d9  gcc/testsuite/g++.dg/vect/pr60559.cc
 3bff2af6c3bfd7ad46d2d49817f2f165  gcc/testsuite/g++.dg/vect/pr60729.cc
+6fedf5fcd346e8a54e1ea882011da7e0  gcc/testsuite/g++.dg/vect/pr60836.cc
 2319b033c4be551a98e6e2be4cfa22df  gcc/testsuite/g++.dg/vect/slp-pr50413.cc
 8d1334dabd32a7cd566077fb76b6ef3f  gcc/testsuite/g++.dg/vect/slp-pr50819.cc
 df93e1203b366a6199944cfb11b3ada2  gcc/testsuite/g++.dg/vect/slp-pr56812.cc
@@ -20395,6 +20461,7 @@ c81d14b770f15026bfe61a7d372c3d0c  gcc/testsuite/gcc.c-torture/compile/pr60502.c
 e700f43c9f64656f7363a44babf1d9f6  gcc/testsuite/gcc.c-torture/compile/pr60556.c
 d49dbb297cb14ffa50798367f47b01d6  gcc/testsuite/gcc.c-torture/compile/pr60655-1.c
 ecd86b2ec3c6e99f8c9357249b8569eb  gcc/testsuite/gcc.c-torture/compile/pr60655-2.c
+eb9a44bf10d9af818d3d8df7abc434ba  gcc/testsuite/gcc.c-torture/compile/pr61684.c
 b9e6ce52b90320c1c3803c25113844c5  gcc/testsuite/gcc.c-torture/compile/pta-1.c
 ed716c1d1727fc2c748162e0cbc4ee47  gcc/testsuite/gcc.c-torture/compile/ptr-conv-1.c
 8d869e3426345f0cf8837c5eaafd43b5  gcc/testsuite/gcc.c-torture/compile/simd-1.c
@@ -20898,6 +20965,7 @@ e930646e7dc4ae306668360758733d33  gcc/testsuite/gcc.c-torture/execute/20121108-1
 91f48b05bc9d42c398d7b5856e001a8d  gcc/testsuite/gcc.c-torture/execute/20131127-1.c
 00319451004c266ad1b8c6aeb089eb51  gcc/testsuite/gcc.c-torture/execute/20140212-1.c
 4ad9d497fc6da5c1d93322b91642142c  gcc/testsuite/gcc.c-torture/execute/20140326-1.c
+a5f4cdd2313a084c86b42c022d5711d7  gcc/testsuite/gcc.c-torture/execute/20140425-1.c
 65f01ac7346bd4d47ed9c1ca94ab74ff  gcc/testsuite/gcc.c-torture/execute/900409-1.c
 5aefab4daab0bd29ecf2a389f3c44f40  gcc/testsuite/gcc.c-torture/execute/920202-1.c
 655936aaf9a63e991a555cbc16738485  gcc/testsuite/gcc.c-torture/execute/920302-1.c
@@ -21916,6 +21984,12 @@ f121fd0f8e286e507377c1095024e72f  gcc/testsuite/gcc.c-torture/execute/pr59643.c
 c9a0c78ab7e5e97f8d9f79003415e3c1  gcc/testsuite/gcc.c-torture/execute/pr60062.c
 525a1e55ab5e4b58132522416d2abb4a  gcc/testsuite/gcc.c-torture/execute/pr60072.c
 2d9ffe4c8d2f9f03fc51460365e7419e  gcc/testsuite/gcc.c-torture/execute/pr60454.c
+1313e26f31dd7d7fb997709384d78e64  gcc/testsuite/gcc.c-torture/execute/pr60960.c
+0dd9a258a9aa977acb1fcfe61739ec9b  gcc/testsuite/gcc.c-torture/execute/pr61306-1.c
+85315cbee1fd6adfa2a8d6182171fa12  gcc/testsuite/gcc.c-torture/execute/pr61306-2.c
+7fe7c6627598916a61238a0e4bf50f86  gcc/testsuite/gcc.c-torture/execute/pr61306-3.c
+d8403e0ce437d1323b68336029446357  gcc/testsuite/gcc.c-torture/execute/pr61673.c
+8b656e3edd75c4787214dc55255d9100  gcc/testsuite/gcc.c-torture/execute/pr61725.c
 ecfc31f12ce09d6ccbcced04ff04deba  gcc/testsuite/gcc.c-torture/execute/pr7284-1.c
 89f3c7ee990221eeb33cb08a0772e024  gcc/testsuite/gcc.c-torture/execute/pr7284-1.x
 f4610e3bba97324f7005c428fe41e597  gcc/testsuite/gcc.c-torture/execute/printf-1.c
@@ -25145,8 +25219,12 @@ f9442fdd2416c6261814045723c89f0e  gcc/testsuite/gcc.dg/graphite/pr46966.c
 6ac2201f5ceaf1d669d875abfffae276  gcc/testsuite/gcc.dg/graphite/pr46970.c
 78520b60a1ee3851ffd28abd9cd2e62d  gcc/testsuite/gcc.dg/graphite/pr50561.c
 c09c7286c8fcd9cc08b18719c098cc60  gcc/testsuite/gcc.dg/graphite/pr54094.c
+fb5a862ce6ffbade0ae64b3575de6664  gcc/testsuite/gcc.dg/graphite/pr55022.c
+16b9ffb71e6313c09e32f8d47736f438  gcc/testsuite/gcc.dg/graphite/pr59817-1.c
+3ef979f48d76e0fd94ea3b71fc3510af  gcc/testsuite/gcc.dg/graphite/pr59817-2.c
 60c6684ae0f8c1d5b794c4d512a928be  gcc/testsuite/gcc.dg/graphite/pr60740.c
 ad18eaa8675b607e46c69dadd60f3046  gcc/testsuite/gcc.dg/graphite/pr60785.c
+1fdc11dc63213a067b8ee7e1279b9614  gcc/testsuite/gcc.dg/graphite/pr60979.c
 16574d3df752f79e2361bed11b712e31  gcc/testsuite/gcc.dg/graphite/run-id-1.c
 69c11dc302a921c92977db519167bec1  gcc/testsuite/gcc.dg/graphite/run-id-2.c
 84a75a861553ce658d85018a3ced0a6b  gcc/testsuite/gcc.dg/graphite/run-id-3.c
@@ -25692,6 +25770,11 @@ d5a8d86104befcf27df8a5080dbe66ce  gcc/testsuite/gcc.dg/lto/pr60404_0.c
 10073f0592215c1f150902dbd5bea335  gcc/testsuite/gcc.dg/lto/pr60404_1.c
 57b84f9f4fb097f80fb864bc81c70abb  gcc/testsuite/gcc.dg/lto/pr60404_2.c
 729e7df711f59da5edc3a02fe050b9eb  gcc/testsuite/gcc.dg/lto/pr60461_0.c
+fb92fea16dbb92181a81b79e2e378036  gcc/testsuite/gcc.dg/lto/pr60720_0.c
+06c25fe0c80b8959051a62f8f034710a  gcc/testsuite/gcc.dg/lto/pr60720_1.c
+3ce380dc49e4f5afb926994881824b04  gcc/testsuite/gcc.dg/lto/pr60911_0.c
+ed72338ed55138cf037314e45f0f7818  gcc/testsuite/gcc.dg/lto/pr61526_0.c
+962b3087915e41e8111b94acdd55b56e  gcc/testsuite/gcc.dg/lto/pr61526_1.c
 e36db27b1e4084d326181d15570bf8d4  gcc/testsuite/gcc.dg/lto/resolutions_0.c
 1084184a9b11a84eee39ef130211f70b  gcc/testsuite/gcc.dg/lto/save-temps_0.c
 69ff2353992f738ce7ea3cb89e9db1e4  gcc/testsuite/gcc.dg/lto/trans-mem-3_0.c
@@ -26907,6 +26990,7 @@ f6f3bb5c15b24fa2eea3282ce7841295  gcc/testsuite/gcc.dg/pr57104.c
 605598c67818ee5aed3cb1f08d3c11f5  gcc/testsuite/gcc.dg/pr57149.c
 6c6b53f24a88f01056d8f7861eb857b7  gcc/testsuite/gcc.dg/pr57154.c
 a7df18a8bb63d3ca237dbd1011053c66  gcc/testsuite/gcc.dg/pr57184.c
+7bcd989620a2a6b05c3e229f5137b250  gcc/testsuite/gcc.dg/pr57233.c
 e39c9c23ce048b3d87fe811194ae9d86  gcc/testsuite/gcc.dg/pr57286.c
 e9a2eae4a192d8e2e6dafa7ecc6cf398  gcc/testsuite/gcc.dg/pr57287-2.c
 07aacbb657b227fe9d393af35c6bfb45  gcc/testsuite/gcc.dg/pr57287.c
@@ -26967,6 +27051,13 @@ b867a773709f523e8f1a27664cb184b2  gcc/testsuite/gcc.dg/pr60647-1.c
 32abf2686c9d3296f9fa19df9002094d  gcc/testsuite/gcc.dg/pr60647-2.c
 c124a95a6e3650b96ef3058205b5ac36  gcc/testsuite/gcc.dg/pr60704.c
 2fcb562c88ced77b7ac0bce42b64f443  gcc/testsuite/gcc.dg/pr60797.c
+5559e398e075ca7f9141308579b0fac6  gcc/testsuite/gcc.dg/pr60844.c
+0f7df7fa948acd5723878ae4d5ebceb6  gcc/testsuite/gcc.dg/pr60866.c
+d2c91f0601aece029dd3340da8167e6d  gcc/testsuite/gcc.dg/pr61045.c
+fd6f50979e00ca24a8dde2933369bb11  gcc/testsuite/gcc.dg/pr61053.c
+e2d94f81ab73335d50800841dbd4b12c  gcc/testsuite/gcc.dg/pr61060.c
+cd63a4b9a9b728f357c9ed6bc626c585  gcc/testsuite/gcc.dg/pr61158.c
+cea828a43f670db18b27e331441da562  gcc/testsuite/gcc.dg/pr61583.c
 8b7d73da2d5d78000716492365a85d5a  gcc/testsuite/gcc.dg/pr8715.c
 3d08410b2dd57259aa63f0e1c64b376e  gcc/testsuite/gcc.dg/pr8788-1.c
 be04382a35ebb1cfae1b2168f1693a94  gcc/testsuite/gcc.dg/pr8835-1.c
@@ -27861,6 +27952,7 @@ f2dddb213748ccb1b2e30ff1ff7f59e4  gcc/testsuite/gcc.dg/torture/pr57748-1.c
 5564f74a800596aaf87f8e8cb5453803  gcc/testsuite/gcc.dg/torture/pr57748-2.c
 76796ab921180653905caef9c792720e  gcc/testsuite/gcc.dg/torture/pr57748-3.c
 85d58426bedaf1d6a74d38d55833e66d  gcc/testsuite/gcc.dg/torture/pr57748-4.c
+5bfa303899e64bffcddb82847e6a434f  gcc/testsuite/gcc.dg/torture/pr57864.c
 6593178a39cf24816cba3dab5b42f172  gcc/testsuite/gcc.dg/torture/pr57993-2.cpp
 8f27084dca98134d7f524112d900a2d1  gcc/testsuite/gcc.dg/torture/pr57993.c
 95154523d1488e9fe16d67474343c8d5  gcc/testsuite/gcc.dg/torture/pr58018.c
@@ -27914,6 +28006,13 @@ cd4b15fda1ef44742db263de30216d1b  gcc/testsuite/gcc.dg/torture/pr59993.c
 3e0dd582d51f218aa9dbe4841686c12a  gcc/testsuite/gcc.dg/torture/pr60183.c
 128cefe94a9f05e84df676feb8e099af  gcc/testsuite/gcc.dg/torture/pr60733.c
 bc7d88b95c8be08a1a73b15283ed1f06  gcc/testsuite/gcc.dg/torture/pr60766.c
+d6d4353931f1be7031525660bdb72067  gcc/testsuite/gcc.dg/torture/pr60891.c
+b7419f520b851243b27be91c272be4ec  gcc/testsuite/gcc.dg/torture/pr60903.c
+cd6896f9999dc19951f9e8e74e12f5f8  gcc/testsuite/gcc.dg/torture/pr60930.c
+dde8b20bde292ea6876f078bf22cadef  gcc/testsuite/gcc.dg/torture/pr61010.c
+aa3d4a99808d1f2c872d909445ade1a8  gcc/testsuite/gcc.dg/torture/pr61383-1.c
+1aae51ae4d0d0a6f4039b24e664b4b9e  gcc/testsuite/gcc.dg/torture/pr61452.c
+025a7e9b280231e992477ec24bb46a30  gcc/testsuite/gcc.dg/torture/pr61681.c
 c99c3745eca0ddc81822cc070070a4d3  gcc/testsuite/gcc.dg/torture/pr8081.c
 b3a9e4f2af6462183da8d6c5cb13bf1f  gcc/testsuite/gcc.dg/torture/pta-callused-1.c
 98fde0e59e55c1ed923ee9d9f034d7f2  gcc/testsuite/gcc.dg/torture/pta-escape-1.c
@@ -28193,7 +28292,7 @@ abd4ca43bb4b377619c41f454ad2e646  gcc/testsuite/gcc.dg/tree-ssa/alias-27.c
 82856885ede689411173996a10bc876e  gcc/testsuite/gcc.dg/tree-ssa/alias-28.c
 0636ce20d822dd25b9d5ce792a2c3820  gcc/testsuite/gcc.dg/tree-ssa/alias-29.c
 bb1c37124577d61c99b7e5ebd9d72713  gcc/testsuite/gcc.dg/tree-ssa/alias-3.c
-52fc06fea0d8944a3c7c7cf58329c649  gcc/testsuite/gcc.dg/tree-ssa/alias-30.c
+79dfb5b1039d2883100bde8c195d39c4  gcc/testsuite/gcc.dg/tree-ssa/alias-30.c
 8cfc15afdd6d383287dda63878fc6083  gcc/testsuite/gcc.dg/tree-ssa/alias-31.c
 104c2bb3b44866aa1a413bc286888421  gcc/testsuite/gcc.dg/tree-ssa/alias-4.c
 02459b5c01776fac9cbf076da37d3770  gcc/testsuite/gcc.dg/tree-ssa/alias-5.c
@@ -29099,6 +29198,7 @@ f86c57c84246acb027204d4004479c87  gcc/testsuite/gcc.dg/tree-ssa/vrp83.c
 9118470b664eadf52ee002874f4f83c4  gcc/testsuite/gcc.dg/tree-ssa/vrp88.c
 35eaff882f33c5b61e50dd87a512ef72  gcc/testsuite/gcc.dg/tree-ssa/vrp89.c
 5a6aee859816e05547591897194aa650  gcc/testsuite/gcc.dg/tree-ssa/vrp90.c
+d81d6e7cd77843ad59286339d261f89c  gcc/testsuite/gcc.dg/tree-ssa/vrp93.c
 63176004cb8d9a996e6fed7812d7df94  gcc/testsuite/gcc.dg/tree-ssa/wholeprogram-1.c
 22cecfb6e50e9a0bfcb8417c616ecff4  gcc/testsuite/gcc.dg/tree-ssa/wholeprogram-2.c
 22eb0b8eeae794a6956326b2c9383fb2  gcc/testsuite/gcc.dg/trunc-1.c
@@ -29118,6 +29218,7 @@ f63ff5680f9ddf2bc63277d0a4c08517  gcc/testsuite/gcc.dg/two-types-4.c
 7b938b0cb614b822c40b1d1cd3386863  gcc/testsuite/gcc.dg/typedef-redecl.h
 44e859486a96c5bde24ac67ae73472fe  gcc/testsuite/gcc.dg/typename-vla-1.c
 0347a7dc32b8dfb279bdfe3b50e84008  gcc/testsuite/gcc.dg/typeof-1.c
+a083e6af94dd22dcc82f08d47dc1c665  gcc/testsuite/gcc.dg/typeof-2.c
 38f4467be27d0432adea9abcaf9cc366  gcc/testsuite/gcc.dg/typespec-1.c
 7740693c7bb19d8fc6ab727a6ffbb65c  gcc/testsuite/gcc.dg/ubsan/c-shift-1.c
 2dbfddf9f012a91eb07b3c83841941a1  gcc/testsuite/gcc.dg/ubsan/c99-shift-1.c
@@ -29241,6 +29342,7 @@ d057a4907971998a1473fdea2ead40cc  gcc/testsuite/gcc.dg/unused-6-WallWextra.c
 43d1bfb1c3e82e590c699df9328c86ff  gcc/testsuite/gcc.dg/unused-6-no.c
 e3db8ed02ca0ecad28455ac3f0b93696  gcc/testsuite/gcc.dg/unused-6.c
 b9094e47fb1bcf5228d5a172f181d34c  gcc/testsuite/gcc.dg/unused-7.c
+615e1e240a379f560bb499664764aa19  gcc/testsuite/gcc.dg/unused-8b.c
 3026c7972826035f46319fe0338270d0  gcc/testsuite/gcc.dg/unwind-1.c
 82e97901e9d95cb7baff3da146a5c919  gcc/testsuite/gcc.dg/utf-array-short-wchar.c
 58bb3d290d515392b37ec7e27a115e8e  gcc/testsuite/gcc.dg/utf-array.c
@@ -29620,8 +29722,10 @@ d29f4943bad625aa38224c822f9da622  gcc/testsuite/gcc.dg/vect/pr60012.c
 a866350e19555393d6961e8b412e9124  gcc/testsuite/gcc.dg/vect/pr60276.c
 b107b5d9d8332504cce7d4f98d0296f7  gcc/testsuite/gcc.dg/vect/pr60382.c
 170c5596ccb511f48df93f8649f3aba7  gcc/testsuite/gcc.dg/vect/pr60482.c
-6238a8b7620ccb76249b00f14ace3ada  gcc/testsuite/gcc.dg/vect/pr60505.c
+97f0138cf5bdb9cb11d8e107c00bc27c  gcc/testsuite/gcc.dg/vect/pr60505.c
 410bc9651b5f4b0552af7cad596832e8  gcc/testsuite/gcc.dg/vect/pr60656.c
+72142e96ba1e228790f86e7f25a6c1a5  gcc/testsuite/gcc.dg/vect/pr60841.c
+785dfb8a3638e3ded94e5cc79249383c  gcc/testsuite/gcc.dg/vect/pr61680.c
 0706a6b1e589668022cd055b960dd18d  gcc/testsuite/gcc.dg/vect/section-anchors-pr27770.c
 260e2f31b30dda89387f41e7bfe71e1e  gcc/testsuite/gcc.dg/vect/section-anchors-vect-69.c
 4d2e98feff81733536fba7cd2d0ca053  gcc/testsuite/gcc.dg/vect/slp-1.c
@@ -30061,6 +30165,7 @@ b5656051aa3112bdcc09d26568b22e20  gcc/testsuite/gcc.dg/vect/vect-simd-clone-5.c
 2ea572faabfe8ccd2ffe73544be74ef0  gcc/testsuite/gcc.dg/vect/vect-simd-clone-7.c
 1b4a10a7ec4c46b91adfa18c3ce75e34  gcc/testsuite/gcc.dg/vect/vect-simd-clone-8.c
 a4edce28556de1d94f24aa4e027ca78b  gcc/testsuite/gcc.dg/vect/vect-simd-clone-9.c
+4f938eaebf48217ae438f73dece6a598  gcc/testsuite/gcc.dg/vect/vect-singleton_1.c
 a5494bfefae827ff7fb0c991ea9b9905  gcc/testsuite/gcc.dg/vect/vect-strided-a-mult.c
 12b7de6813a00befbee70dae6f9aed0d  gcc/testsuite/gcc.dg/vect/vect-strided-a-u16-i2.c
 d82347f60e7f2f61b695aca0b0162789  gcc/testsuite/gcc.dg/vect/vect-strided-a-u16-i4.c
@@ -30112,7 +30217,7 @@ dd6e0341654a630b56a221e642a1cbb1  gcc/testsuite/gcc.dg/vect/vect-widen-mult-sum.
 18d22f4befcbe16f0fa91b011350e636  gcc/testsuite/gcc.dg/vect/vect-widen-shift-s8.c
 b53fd5a38e5c7fb23c4d7cdddd35a122  gcc/testsuite/gcc.dg/vect/vect-widen-shift-u16.c
 7cf39e0b990d4134843cf0934748018d  gcc/testsuite/gcc.dg/vect/vect-widen-shift-u8.c
-4f87272d5e98bcddb685a783562b6553  gcc/testsuite/gcc.dg/vect/vect.exp
+51cf30fb13a2f5b1cab0c930e14801fe  gcc/testsuite/gcc.dg/vect/vect.exp
 70f5bfe5c3206bb27ef00df04395f1b4  gcc/testsuite/gcc.dg/vect/wrapv-vect-7.c
 c1a258213052c3dfbc9b6a8c1c0d6d6c  gcc/testsuite/gcc.dg/vect/wrapv-vect-reduc-2char.c
 1e23759ae2d20580a48c9849cfca511f  gcc/testsuite/gcc.dg/vect/wrapv-vect-reduc-2short.c
@@ -30280,8 +30385,8 @@ b22e613ba2712c4e8f7204eed0adc88a  gcc/testsuite/gcc.dg/vmx/ldl-vsx.c
 c3039576bdd2e286778c9c26319c1266  gcc/testsuite/gcc.dg/vmx/ldl.c
 02e4a282249f914f0c14a216ba9d4cfc  gcc/testsuite/gcc.dg/vmx/mem.c
 6aae24591b76899daf226454ac9b1991  gcc/testsuite/gcc.dg/vmx/merge-be-order.c
-eee9871ed36b20241187f151e4501a99  gcc/testsuite/gcc.dg/vmx/merge-vsx-be-order.c
-25b17ce14463feddc218415eb2a5416b  gcc/testsuite/gcc.dg/vmx/merge-vsx.c
+201b16426a5ac5b3987ba0dccc6f5a71  gcc/testsuite/gcc.dg/vmx/merge-vsx-be-order.c
+2e6a5aaa5824f852ad0030af451aeb08  gcc/testsuite/gcc.dg/vmx/merge-vsx.c
 eb7dd9debe1674f5d04a9841461e4954  gcc/testsuite/gcc.dg/vmx/merge.c
 1bf3417266f1541ffcf1dd896b544b2e  gcc/testsuite/gcc.dg/vmx/mult-even-odd-be-order.c
 69b4a248b11c1f8cdf318024cf68f3f6  gcc/testsuite/gcc.dg/vmx/mult-even-odd.c
@@ -30509,11 +30614,14 @@ a136f7907f14dd778d3f767da4b71219  gcc/testsuite/gcc.target/aarch64/aapcs64/test_
 5c50cda62bd8e028126d50524394cdcb  gcc/testsuite/gcc.target/aarch64/aapcs64/test_complex.c
 610639db1ddaee1b632bcaa03ae9e6d0  gcc/testsuite/gcc.target/aarch64/aapcs64/test_int128.c
 6fda7511aca063408b079c2bb62031f8  gcc/testsuite/gcc.target/aarch64/aapcs64/test_quad_double.c
-2e77e4f91eafedcc40bca64ef88e8b3b  gcc/testsuite/gcc.target/aarch64/aapcs64/type-def.h
+d9b74395ab6c4b86397ebb8c4882b21d  gcc/testsuite/gcc.target/aarch64/aapcs64/type-def.h
 8105c81103c5a63620a7b427d2c63471  gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-1.c
 596c2fbda9662178d39bdc8ca38a7b1e  gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-10.c
 00b5c9f8a1a7953292a641277343cd80  gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-11.c
 d58c21aeac15c87b49b1a0cd83c5562a  gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-12.c
+5e80c8e2752a7c20800c170ed731fe83  gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-13.c
+7277fa58dadb57113bc4495170498ae7  gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-14.c
+d6d753fee2cc939c6e58cf69a3d84ce4  gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-15.c
 c4a5214c8570b2f0d809b0b52d72ec6d  gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-2.c
 698de05abc498110e864a6e761b3aafb  gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-3.c
 09b5b23890423c4c38ce2ed600d2f778  gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-4.c
@@ -30639,6 +30747,7 @@ e668fb9e0d32efadd671247467dc90db  gcc/testsuite/gcc.target/aarch64/pr58460.c
 2ace503de1ebaa7ecee3cea5bdce43de  gcc/testsuite/gcc.target/aarch64/pr60580_1.c
 e3c168f45423111f89f16b75f8973c92  gcc/testsuite/gcc.target/aarch64/pr60675.C
 ed3b25503ac7374fb7c47e079eb1318a  gcc/testsuite/gcc.target/aarch64/pr60697.c
+2cd11476b07e206416f5d88420120ea5  gcc/testsuite/gcc.target/aarch64/pr61325.c
 1f95766b4ed5bfb5f2cf1f168a607a8d  gcc/testsuite/gcc.target/aarch64/predefine_large.c
 d38e476730748c653068e7cb2d8d6ca6  gcc/testsuite/gcc.target/aarch64/predefine_small.c
 29e7dbfba15c0f945488b33400b908b4  gcc/testsuite/gcc.target/aarch64/predefine_tiny.c
@@ -30647,7 +30756,7 @@ a55b339bec69ea2b13fb1d52bcfab8c8  gcc/testsuite/gcc.target/aarch64/ror.c
 c5df9016ed51439c58173bf78280bc69  gcc/testsuite/gcc.target/aarch64/sbc.c
 3b9354b9a15c8705b143711e5a0eb3cd  gcc/testsuite/gcc.target/aarch64/scalar-mov.c
 cf90801aa8927a70a5207b4cac2643b6  gcc/testsuite/gcc.target/aarch64/scalar-vca.c
-6cff277ed03444b13a1a7fea53b2a71d  gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c
+56d1246ba8fe7a1c8c69a5ef49e39c01  gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c
 d1af130615ebe55d6b2860145acf25fd  gcc/testsuite/gcc.target/aarch64/scalar_shift_1.c
 884050a96b25562ba73e9f6cd428f9ee  gcc/testsuite/gcc.target/aarch64/sha1_1.c
 fad4b886793516ea2f18ca518bf21e4c  gcc/testsuite/gcc.target/aarch64/sha256_1.c
@@ -30725,7 +30834,7 @@ a3498c06407b0da7dbf55389f7d64ee4  gcc/testsuite/gcc.target/aarch64/vect-vca.c
 35df028f9c45bc9929182bb919a59563  gcc/testsuite/gcc.target/aarch64/vect.x
 13829a5e264dfff8be4651d236a5da67  gcc/testsuite/gcc.target/aarch64/vect_saddl_1.c
 3ebb64e885f488f353df6f1a07e997f1  gcc/testsuite/gcc.target/aarch64/vect_smlal_1.c
-5dca5816500cf4784a43933915a3fdb8  gcc/testsuite/gcc.target/aarch64/vector_intrinsics.c
+91822962d5a71129a8f94a0f50f2c42b  gcc/testsuite/gcc.target/aarch64/vector_intrinsics.c
 7e66886d01e17a3d5f4d365e18f11743  gcc/testsuite/gcc.target/aarch64/vfp-1.c
 73ca66c42633ffbd35e499d89601c37a  gcc/testsuite/gcc.target/aarch64/vld1-vst1_1.c
 bdf9d08039684c459d9bd2f4906dba34  gcc/testsuite/gcc.target/aarch64/vmlsq_laneq.c
@@ -30735,6 +30844,47 @@ ff93f7dc5d088eb0d2d55f41d9605da9  gcc/testsuite/gcc.target/aarch64/vneg_s.c
 2655ac4297efd263942058c5d2f07f09  gcc/testsuite/gcc.target/aarch64/volatile-bitfields-1.c
 8c5d2f2ef90312aaf1f0ada7c6b329b2  gcc/testsuite/gcc.target/aarch64/volatile-bitfields-2.c
 db870a58bd047a3aea6a980e79d5f714  gcc/testsuite/gcc.target/aarch64/volatile-bitfields-3.c
+4880f29a3f855267072d6713a36969fb  gcc/testsuite/gcc.target/aarch64/vqdmlal_high_lane_s16.c
+16dbe1aa44f454b09e980c7ad06eb278  gcc/testsuite/gcc.target/aarch64/vqdmlal_high_lane_s32.c
+55ef09719ca2f0ecea8218e071ac1246  gcc/testsuite/gcc.target/aarch64/vqdmlal_high_laneq_s16.c
+994fe4c63942b47dea509de593933512  gcc/testsuite/gcc.target/aarch64/vqdmlal_high_laneq_s32.c
+c6bc4fe7173b43fecb1b589646f1c198  gcc/testsuite/gcc.target/aarch64/vqdmlal_lane_s16.c
+a36e6cd2b3e52a4451f4864f20b7bdf5  gcc/testsuite/gcc.target/aarch64/vqdmlal_lane_s32.c
+82aaa586748c7bdcd0525bb1c3b57521  gcc/testsuite/gcc.target/aarch64/vqdmlal_laneq_s16.c
+e1ab7dc0ed83021115757cceb8111f18  gcc/testsuite/gcc.target/aarch64/vqdmlal_laneq_s32.c
+4fce87a86d51e4f66b9e342f66691dd9  gcc/testsuite/gcc.target/aarch64/vqdmlalh_lane_s16.c
+88d50cd2ba32778ba86aa966ccd451bd  gcc/testsuite/gcc.target/aarch64/vqdmlals_lane_s32.c
+4d4b80bf2fe2d60827fdccb395deef0e  gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_lane_s16.c
+001a3277d06cc27a92070399fac1b2f6  gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_lane_s32.c
+5e2ff8ce7f9e2099ca2180b84e6ce735  gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_laneq_s16.c
+0b5a5e1fec4fd47d767b00883155e2db  gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_laneq_s32.c
+e846b77f02543314b1300023b0b20886  gcc/testsuite/gcc.target/aarch64/vqdmlsl_lane_s16.c
+7e94044d77773057ce614ba332db4c6c  gcc/testsuite/gcc.target/aarch64/vqdmlsl_lane_s32.c
+32fc41cef895166fc1858057d8b40ade  gcc/testsuite/gcc.target/aarch64/vqdmlsl_laneq_s32.c
+9338c9acb58e94014bef883c1a69cb19  gcc/testsuite/gcc.target/aarch64/vqdmlslh_lane_s16.c
+d5985f9d81afdb5d83ad5045d90e73c1  gcc/testsuite/gcc.target/aarch64/vqdmlsls_lane_s32.c
+0441469dd7f151cc6c5731908a0e2290  gcc/testsuite/gcc.target/aarch64/vqdmulh_laneq_s16.c
+ef977c11a066a47886fbc566d87b8266  gcc/testsuite/gcc.target/aarch64/vqdmulh_laneq_s32.c
+a812fdfe34a76fc538357652347138d6  gcc/testsuite/gcc.target/aarch64/vqdmulhh_lane_s16.c
+e6ae3f3cd8a16f1878dfe66ecac225c5  gcc/testsuite/gcc.target/aarch64/vqdmulhq_laneq_s16.c
+c0143267913c582d11a900fb22512cc5  gcc/testsuite/gcc.target/aarch64/vqdmulhq_laneq_s32.c
+115b31e912529a41935f4e844e876c4e  gcc/testsuite/gcc.target/aarch64/vqdmulhs_lane_s32.c
+a3478ab1544de7f28c956bf030956380  gcc/testsuite/gcc.target/aarch64/vqdmull_high_lane_s16.c
+9b068e636142b0e6f8545b14bb01182c  gcc/testsuite/gcc.target/aarch64/vqdmull_high_lane_s32.c
+a2a2bc1805727ecf2ce28596ff256fd8  gcc/testsuite/gcc.target/aarch64/vqdmull_high_laneq_s16.c
+5051bef6fcb95f2efdda615f8656d28c  gcc/testsuite/gcc.target/aarch64/vqdmull_high_laneq_s32.c
+cf0806833b64e1195163f938859c2746  gcc/testsuite/gcc.target/aarch64/vqdmull_lane_s16.c
+acedc8b153776b4c42a579f48c279def  gcc/testsuite/gcc.target/aarch64/vqdmull_lane_s32.c
+c662c11ea6a4cbbb56370052be7a33d0  gcc/testsuite/gcc.target/aarch64/vqdmull_laneq_s16.c
+f23677232fded6eda2bf48c5365709ea  gcc/testsuite/gcc.target/aarch64/vqdmull_laneq_s32.c
+32975050892de47266a0e7e7d7749ba7  gcc/testsuite/gcc.target/aarch64/vqdmullh_lane_s16.c
+5f5f50626865012ae817cdc53d304530  gcc/testsuite/gcc.target/aarch64/vqdmulls_lane_s32.c
+c4dd8458d2d0d59f11c4ca346f5d72d4  gcc/testsuite/gcc.target/aarch64/vqrdmulh_laneq_s16.c
+4bafd8c78bcdf37b8dc4e363f70bf419  gcc/testsuite/gcc.target/aarch64/vqrdmulh_laneq_s32.c
+6ed6331d4a8ff6811a7ff9b0db24e816  gcc/testsuite/gcc.target/aarch64/vqrdmulhh_lane_s16.c
+d3da33c25fd27944e08a0e313a6ce076  gcc/testsuite/gcc.target/aarch64/vqrdmulhq_laneq_s16.c
+2f708ea62e1d637ade19885393e84c8c  gcc/testsuite/gcc.target/aarch64/vqrdmulhq_laneq_s32.c
+2b9269bfb1a01995a26b521e3573feae  gcc/testsuite/gcc.target/aarch64/vqrdmulhs_lane_s32.c
 58dd6a3e44637fe97e1b64ad80330e95  gcc/testsuite/gcc.target/aarch64/vrecps.c
 907c5d0330b8ae449375937f25cb5507  gcc/testsuite/gcc.target/aarch64/vrecpx.c
 93fc6cd2c39a0e44d5a8f0087756fdd1  gcc/testsuite/gcc.target/aarch64/vsqrt.c
@@ -30759,6 +30909,7 @@ b36471f8edbf2a11ce23359823ecc10b  gcc/testsuite/gcc.target/alpha/pr24178.c
 463af7840e4a680c4f850f8d5dfafd3f  gcc/testsuite/gcc.target/alpha/pr42448-1.c
 0539ee2bde042196f5382b5c738d4f43  gcc/testsuite/gcc.target/alpha/pr42448-2.c
 5f0298d225684c28c36ad42548aeccbd  gcc/testsuite/gcc.target/alpha/pr42774.c
+4b2dcff48566cef7a104bfadab9354cc  gcc/testsuite/gcc.target/alpha/pr61586.c
 fb02079e819ba875a046565cb325ff01  gcc/testsuite/gcc.target/arc/arc.exp
 423fbfcb77e8a6141ca45a6a918e7d06  gcc/testsuite/gcc.target/arc/barrel-shifter-1.c
 bad20bd941c5cc11536e8d6b5713cdee  gcc/testsuite/gcc.target/arc/barrel-shifter-2.c
@@ -33124,7 +33275,7 @@ af020e627d5f93cc2c57a41e3bc37e28  gcc/testsuite/gcc.target/arm/pr46631.c
 8b33facd3d82cfd7450f01caa40b46f5  gcc/testsuite/gcc.target/arm/pr46975-2.c
 12462c8de0d3b9414c8dad41ea05d880  gcc/testsuite/gcc.target/arm/pr46975.c
 ed98495500264d289525aebfd2fbd62f  gcc/testsuite/gcc.target/arm/pr48183.c
-5d7de550ff9a13f490729c73dc59f1c5  gcc/testsuite/gcc.target/arm/pr48252.c
+d744fbeefa1a3fbcff67f43fc4dddd53  gcc/testsuite/gcc.target/arm/pr48252.c
 ec5b96b8283a62c791f40ad2c7334d85  gcc/testsuite/gcc.target/arm/pr49641.c
 1b0c11d109e5c1c7dd206ab3c72d6e20  gcc/testsuite/gcc.target/arm/pr50099.c
 09333e2679d051041e8e33c603eb8b26  gcc/testsuite/gcc.target/arm/pr50305.c
@@ -33303,6 +33454,7 @@ a6701935d18c8ed062555c8a48454bc9  gcc/testsuite/gcc.target/avr/dev-specific-rmw.
 2931177f4aeff49d531d5474224448f6  gcc/testsuite/gcc.target/avr/pr46779-1.c
 572dc228e08385a1db0fcbab66dbaa4e  gcc/testsuite/gcc.target/avr/pr46779-2.c
 421d2b9b36fa2496dce05d129d2c352b  gcc/testsuite/gcc.target/avr/pr58545.c
+9e82df166e8b559cb56d2c4f48cbaf30  gcc/testsuite/gcc.target/avr/pr60991.c
 881cb1836ddfc3105e0aacacc481aa09  gcc/testsuite/gcc.target/avr/progmem-error-1.c
 2eb3f167ae58b534e25afc1b94617746  gcc/testsuite/gcc.target/avr/progmem-error-1.cpp
 56de611fd29076ce9da389a853476819  gcc/testsuite/gcc.target/avr/progmem-warning-1.c
@@ -33333,6 +33485,8 @@ c458c2462e23a4c58a7e4d05b6200907  gcc/testsuite/gcc.target/avr/torture/fix-types
 70b849f57ecf42299230b99b7734dd2d  gcc/testsuite/gcc.target/avr/torture/pr51374-1.c
 640699ff4839c2a7798488c85177d381  gcc/testsuite/gcc.target/avr/torture/pr51782-1.c
 006a6c5a86a749ba6291dfb65e0376e0  gcc/testsuite/gcc.target/avr/torture/pr57631.c
+fea352b16ae79edc9965b1f39680a709  gcc/testsuite/gcc.target/avr/torture/pr61055.c
+2531c68fb11c95a62490386167ef9148  gcc/testsuite/gcc.target/avr/torture/pr61443.c
 21a45d34960ba9567b9f2483d22c843f  gcc/testsuite/gcc.target/avr/torture/progmem-1.c
 564c71a894aff68e98d5c4a6db2b47ae  gcc/testsuite/gcc.target/avr/torture/progmem-1.cpp
 e3e1c41865f5287c9ff7e200745758fd  gcc/testsuite/gcc.target/avr/torture/sat-hr-plus-minus.c
@@ -33824,6 +33978,7 @@ b4097136b326678c552cf24792f79fe8  gcc/testsuite/gcc.target/i386/avx-mul-1.c
 46322bf9b32fe645dd973a6bc8e8b128  gcc/testsuite/gcc.target/i386/avx-os-support.h
 62aa13560c827f799be1941a2e6da500  gcc/testsuite/gcc.target/i386/avx-pr51581-1.c
 c437ae63e2540199d8c765547fc407d6  gcc/testsuite/gcc.target/i386/avx-pr51581-2.c
+2f44e29670d30f0c444f2637c627c838  gcc/testsuite/gcc.target/i386/avx-pr57233.c
 4e3d37bb04b99394790fa9e8caddf790  gcc/testsuite/gcc.target/i386/avx-recip-vec.c
 02ae18a66bd7b76f7a651b896f066b70  gcc/testsuite/gcc.target/i386/avx-reduc-1.c
 772f703b19bb27d5947d136a2f72221e  gcc/testsuite/gcc.target/i386/avx-rint-sfix-2-vec.c
@@ -34394,6 +34549,7 @@ e082c71a709eff3367dacdb623737c6e  gcc/testsuite/gcc.target/i386/avx2-i64gatherq2
 fe43a9deff46d9922603adbeeafc1bca  gcc/testsuite/gcc.target/i386/avx2-mul-1.c
 a544282846ec57648b2f38abf14119f0  gcc/testsuite/gcc.target/i386/avx2-pr51581-1.c
 46ffedd4e5e66cd46ad561ee8562eb7b  gcc/testsuite/gcc.target/i386/avx2-pr51581-2.c
+bbb7100a6167d19314d56f1bcc1d4b22  gcc/testsuite/gcc.target/i386/avx2-pr57233.c
 2b83554762241a146df7ccc1617e1bfa  gcc/testsuite/gcc.target/i386/avx2-vbroadcastsd_pd-1.c
 193f0a7d029b84ce4e3b2e58eac8240a  gcc/testsuite/gcc.target/i386/avx2-vbroadcastsd_pd-2.c
 84a46e7f4338347591f1c8fe0aaceda5  gcc/testsuite/gcc.target/i386/avx2-vbroadcastsi128-1.c
@@ -34825,6 +34981,7 @@ b04f7a12d10f851b8395faea1f5ab501  gcc/testsuite/gcc.target/i386/avx512f-kxnorw-1
 8313d814dd34953aeb41fdd1137e6236  gcc/testsuite/gcc.target/i386/avx512f-kxorw-1.c
 88679aecb941ef98e4955fd53f24d648  gcc/testsuite/gcc.target/i386/avx512f-mask-type.h
 20d7791d447e454dc99dd9e328d38933  gcc/testsuite/gcc.target/i386/avx512f-os-support.h
+b41e564451920ed5e6e2cc790be57646  gcc/testsuite/gcc.target/i386/avx512f-pr57233.c
 5158ac78802e368957a44c0f68b3b5d8  gcc/testsuite/gcc.target/i386/avx512f-rounding.c
 c5975a79a4ea5a75acc7b38b9e6c0c44  gcc/testsuite/gcc.target/i386/avx512f-set-v16sf-1.c
 bea9dbd9114c8bb3fcd47ad0281ff5c2  gcc/testsuite/gcc.target/i386/avx512f-set-v16sf-2.c
@@ -35557,8 +35714,6 @@ a10441579d2b177bca2939688f1d171f  gcc/testsuite/gcc.target/i386/cadd.c
 371f18813dae88e704517a2270da2fa7  gcc/testsuite/gcc.target/i386/call-1.c
 e7febacbd793814a1bdb3f04d9d9fc7f  gcc/testsuite/gcc.target/i386/cleanup-1.c
 4b6997eef25c42383324aa984b9b8791  gcc/testsuite/gcc.target/i386/cleanup-2.c
-e0242c2120b4d7e26149885baf8fd877  gcc/testsuite/gcc.target/i386/clearcap.map
-49b2c5d20796b3d7cb793898b4398535  gcc/testsuite/gcc.target/i386/clearcapv2.map
 d4153e1bcf8bc5c311eaf09c93c16d08  gcc/testsuite/gcc.target/i386/clobbers.c
 538ab6e8a06c514c724312c46aa4c439  gcc/testsuite/gcc.target/i386/cmov1.c
 86cfb515b99e6eea4c48ca1ca4343c48  gcc/testsuite/gcc.target/i386/cmov2.c
@@ -35733,7 +35888,7 @@ ebc315087303e52034dda4e281f500fd  gcc/testsuite/gcc.target/i386/hle-xchg-acq-1.c
 d95f56a3f95ba78c3fdb5f418f8d953a  gcc/testsuite/gcc.target/i386/hle-xchg-rel-1.c
 c937938a0a49e70d699ee5ef70d33cb0  gcc/testsuite/gcc.target/i386/hle-xor-acq-1.c
 7aef940035776cbf7ecabc540f63e33e  gcc/testsuite/gcc.target/i386/hle-xor-rel-1.c
-1eddd48bb50f37a551309ded89196b6a  gcc/testsuite/gcc.target/i386/i386.exp
+9e81adfeacb71e7e4e47ef1578ca849d  gcc/testsuite/gcc.target/i386/i386.exp
 2f691e14b36dfbcafcb11e2029b39ccc  gcc/testsuite/gcc.target/i386/ifcvt-onecmpl-abs-1.c
 05bb360a025eed6dd019b28ad5032c23  gcc/testsuite/gcc.target/i386/incoming-1.c
 4770d945ceafa0ce8aaebccfb7094734  gcc/testsuite/gcc.target/i386/incoming-10.c
@@ -36343,6 +36498,7 @@ c7f426034d9df3b9350c1df80138c8dc  gcc/testsuite/gcc.target/i386/pr57097.c
 4be3438b496af45547bcaa622d04847f  gcc/testsuite/gcc.target/i386/pr57098.c
 a995edc07e467f878e75e842897b1cfd  gcc/testsuite/gcc.target/i386/pr57106.c
 24a8a0f263659238a672eac710e62c30  gcc/testsuite/gcc.target/i386/pr57189.c
+bb5074395957224a22a9703b2d5a55a9  gcc/testsuite/gcc.target/i386/pr57233.c
 1be3cad52880bd204c5668a12dc63bc1  gcc/testsuite/gcc.target/i386/pr57264.c
 14e07824556dcc3c9478b054976196a3  gcc/testsuite/gcc.target/i386/pr57275.c
 6af7e4a1f6e542e19ce56a5b5cd909ab  gcc/testsuite/gcc.target/i386/pr57293.c
@@ -36418,6 +36574,13 @@ ef6b97efa08c7174694a3f12619b3adc  gcc/testsuite/gcc.target/i386/pr60508.c
 697da7d0cc19b38fd886149eb3d4af13  gcc/testsuite/gcc.target/i386/pr60516.c
 3c94cee0c51e457793c9d3861c12d06d  gcc/testsuite/gcc.target/i386/pr60693.c
 aa9afa3fae8ccdc655d286ee8211123a  gcc/testsuite/gcc.target/i386/pr60700.c
+8166dccdf85e516834c35488dbde09e2  gcc/testsuite/gcc.target/i386/pr60868.c
+34cfaa1a2bf79cc8b3e8376802fd83e9  gcc/testsuite/gcc.target/i386/pr60901.c
+dd8e17a0fafdd705a4f0de3d73c4d9c0  gcc/testsuite/gcc.target/i386/pr60902.c
+90c5be2a3f80aff7d7204eaa36133881  gcc/testsuite/gcc.target/i386/pr60909-1.c
+65d3cafc066a01d0520d7d9137813522  gcc/testsuite/gcc.target/i386/pr60909-2.c
+c2ad80ced67848aa724c64790fae16e7  gcc/testsuite/gcc.target/i386/pr61423.c
+2e681bb97b6870c8edb1514a2edad73a  gcc/testsuite/gcc.target/i386/pr61446.c
 849234c7a569c1e86023244bc5561263  gcc/testsuite/gcc.target/i386/pr9771-1.c
 24ceb6d5f3f5cde4b9d852839bdb98ae  gcc/testsuite/gcc.target/i386/prefetchw-1.c
 f11f4731c396f099373c033ab016a64f  gcc/testsuite/gcc.target/i386/prefetchwt1-1.c
@@ -36677,6 +36840,7 @@ b4038cdeb4eee7cf1074de1cead1d1b5  gcc/testsuite/gcc.target/i386/sse2-pmulhw-1.c
 d1e0ff73b10eb61ca8fa06128a453ef9  gcc/testsuite/gcc.target/i386/sse2-pmullw-1.c
 308fe64b1fe9bf78b6b4ed03b89a6c2f  gcc/testsuite/gcc.target/i386/sse2-pmuludq-1.c
 5a4b1b55ad120b0697aa2b141f831dcc  gcc/testsuite/gcc.target/i386/sse2-por-1.c
+75bdc67a274c371dd4d0c3ceef63beb2  gcc/testsuite/gcc.target/i386/sse2-pr57233.c
 306e316bf36fd1022168fa5560198f41  gcc/testsuite/gcc.target/i386/sse2-psadbw-1.c
 31949c673c69db630bfaf04449d2677f  gcc/testsuite/gcc.target/i386/sse2-pshufd-1.c
 2890c692e114956ac819984c965d389e  gcc/testsuite/gcc.target/i386/sse2-pshufhw-1.c
@@ -36986,6 +37150,7 @@ a4fe926ed930e3d04f3d214919607450  gcc/testsuite/gcc.target/i386/vararg-4.c
 80fc45c82401c81c8e327977d855adfe  gcc/testsuite/gcc.target/i386/vcvtps2ph-1.c
 62f75fee089e9d7544817acc173d5b9e  gcc/testsuite/gcc.target/i386/vcvtps2ph-2.c
 7bfd4b219fe89df5db7d39dd83f07267  gcc/testsuite/gcc.target/i386/vcvtps2ph-3.c
+c3845076ba5898729c1d858ed48d8182  gcc/testsuite/gcc.target/i386/vec-may_alias.c
 6c6b35f324ed291cf10b22e9a8f246a4  gcc/testsuite/gcc.target/i386/vecinit-1.c
 8c76c9fbb837c00a866f4323808181a0  gcc/testsuite/gcc.target/i386/vecinit-2.c
 5c31804a1a01677fce626685b7d3670c  gcc/testsuite/gcc.target/i386/vecinit-3.c
@@ -37052,6 +37217,7 @@ db9b34ec865040058a6d0689af9b65ef  gcc/testsuite/gcc.target/i386/xop-imul64-vecto
 a390d40d8a1affb5cd5f9f3db7a982e8  gcc/testsuite/gcc.target/i386/xop-mul-1.c
 27be770a892c0916dde5fc60ad029da4  gcc/testsuite/gcc.target/i386/xop-pcmov.c
 e5032ce4f2014410ac00439c345542c0  gcc/testsuite/gcc.target/i386/xop-pcmov2.c
+ddea8eaf8adf3f52c33c08d0906add75  gcc/testsuite/gcc.target/i386/xop-pr57233.c
 2ab60c120001ef1c9c38bbff7a7468e7  gcc/testsuite/gcc.target/i386/xop-rotate1-int.c
 746d986b57318d368f4af996e78bcbc0  gcc/testsuite/gcc.target/i386/xop-rotate1-vector.c
 cb282467b4bd7e59d4a2c3df01f5daa1  gcc/testsuite/gcc.target/i386/xop-rotate2-int.c
@@ -37834,6 +38000,9 @@ f1f6a9ec080c7f1554b538d5701c21e2  gcc/testsuite/gcc.target/powerpc/asm-y.c
 e476471a7edb5f299042583dac1e4886  gcc/testsuite/gcc.target/powerpc/atomic-p8.c
 1bb3c02dda5fc71d0e39b0833c955824  gcc/testsuite/gcc.target/powerpc/atomic_load_store-p8.c
 f7e7c3525d555350473e6eaeb20a763c  gcc/testsuite/gcc.target/powerpc/avoid-indexed-addresses.c
+68a98ba6065eb1bd5a5a38ffaebe3628  gcc/testsuite/gcc.target/powerpc/bcd-1.c
+4c4454e8a943ac537214d0651d7689fc  gcc/testsuite/gcc.target/powerpc/bcd-2.c
+130b8d095a504ba76a81116d57667e8a  gcc/testsuite/gcc.target/powerpc/bcd-3.c
 d71e4fffd67fe9a02068065c31f40a8c  gcc/testsuite/gcc.target/powerpc/block-move-1.c
 acce3a59dc7d4ef94160abede8f06c07  gcc/testsuite/gcc.target/powerpc/block-move-2.c
 8b94a94a7dff0052358065a48eaa4f9f  gcc/testsuite/gcc.target/powerpc/bool.c
@@ -37887,6 +38056,8 @@ bab9d2b9475b292a01a50c6972b9f682  gcc/testsuite/gcc.target/powerpc/darwin-longlo
 a034d7a8bf265623a75800f01113e836  gcc/testsuite/gcc.target/powerpc/darwin-split-ld-stret.c
 548fc585bcbf766f23bef7319f0b0a18  gcc/testsuite/gcc.target/powerpc/darwin64-abi.c
 b4bba5410c6e6f914897ce86ffaca508  gcc/testsuite/gcc.target/powerpc/dfmode_off.c
+57ea0173da68940a58564009a30679b4  gcc/testsuite/gcc.target/powerpc/dfp-builtin-1.c
+a5f66daa4a8160a6e06231f0c816da83  gcc/testsuite/gcc.target/powerpc/dfp-builtin-2.c
 c25b0e4bf35d335bbde9c753c70ff289  gcc/testsuite/gcc.target/powerpc/dfp-dd-2.c
 1957dd277fc1f9a9eef7275766fcea8e  gcc/testsuite/gcc.target/powerpc/dfp-dd.c
 b2bd0e99cbcd0dff49c3d07bafb4ad8c  gcc/testsuite/gcc.target/powerpc/dfp-td-2.c
@@ -37909,9 +38080,12 @@ b04fe8cd314a3a748a73aeec923a8f87  gcc/testsuite/gcc.target/powerpc/e500-ord-2.c
 008e68ecfc8e883b43cb8fcc43f0e792  gcc/testsuite/gcc.target/powerpc/e500-unord-1.c
 47822d8b2aed4011af4831b9d6950e63  gcc/testsuite/gcc.target/powerpc/e500-unord-2.c
 52468a71868e251587d1c07bc7e2b10f  gcc/testsuite/gcc.target/powerpc/ehreturn.c
+9a3782b86e33933301343450411ef697  gcc/testsuite/gcc.target/powerpc/extend-divide-1.c
+391b21c9192f7bcd5ab0a0179c012e29  gcc/testsuite/gcc.target/powerpc/extend-divide-2.c
 fbe44e0943c31011fa30a479b0856bc9  gcc/testsuite/gcc.target/powerpc/fusion.c
 4109709d89c976bec9d1d05e94004ff2  gcc/testsuite/gcc.target/powerpc/gcse-1.c
 f5543e6f996fc00e4ca43418e125fb66  gcc/testsuite/gcc.target/powerpc/htm-builtin-1.c
+238571a7588bf04ee725a409029ddaf1  gcc/testsuite/gcc.target/powerpc/htm-ttest.c
 bd2f03394b7690c22ce1aab465adb75f  gcc/testsuite/gcc.target/powerpc/htm-xl-intrin-1.c
 8d634b2a7d443f1e5b4b69716e57ac00  gcc/testsuite/gcc.target/powerpc/indexed-addr.c
 a06c80b6841f0e175447fb154db9d45d  gcc/testsuite/gcc.target/powerpc/le-altivec-consts.c
@@ -37949,6 +38123,9 @@ c5e75e8af9c592b80468829ced525050  gcc/testsuite/gcc.target/powerpc/p8vector-vect
 cf9235cec69f4eadb301d29838226a26  gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-3.c
 6708bd01f1d343f54ae84933d94773c6  gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-4.c
 d34c3ce9f5f4b9ff4e17af15a2345cab  gcc/testsuite/gcc.target/powerpc/p8vector-vectorize-5.c
+5fd09506461138827bcc1a6e8e116021  gcc/testsuite/gcc.target/powerpc/pack01.c
+c9ce448310ccdac5da6fa5b69ec461fa  gcc/testsuite/gcc.target/powerpc/pack02.c
+fa72c1f9512bac14ea57ebf20c94c152  gcc/testsuite/gcc.target/powerpc/pack03.c
 d0bd3df7fee3d73a0acc876ce20691e2  gcc/testsuite/gcc.target/powerpc/paired-1.c
 0d7e5847184bc01c42a40dda9b07bda3  gcc/testsuite/gcc.target/powerpc/paired-10.c
 2bdeefd1d55b55e6e9b8ace714c9b100  gcc/testsuite/gcc.target/powerpc/paired-2.c
@@ -38091,6 +38268,7 @@ e2be005a17035d4d4c6269830259fd72  gcc/testsuite/gcc.target/powerpc/pr60032.c
 70e395f580930213d5cbd9e97ec91f7f  gcc/testsuite/gcc.target/powerpc/pr60137.c
 18d594301e79cf9932c8ad49c33828ac  gcc/testsuite/gcc.target/powerpc/pr60203.c
 f128ae78c8eb899c06243379c091ac5a  gcc/testsuite/gcc.target/powerpc/pr60676.c
+73ae1ef8995476aa6b62eea67f6f58dd  gcc/testsuite/gcc.target/powerpc/pr60735.c
 06c624c2b437fc5b9f805dc2231a75b6  gcc/testsuite/gcc.target/powerpc/quad-atomic.c
 6e15a41526f5cb59817b7a5541452615  gcc/testsuite/gcc.target/powerpc/recip-1.c
 6f035f512a3f0d6917409f569174ccea  gcc/testsuite/gcc.target/powerpc/recip-2.c
@@ -38118,7 +38296,9 @@ caf83f2b272138041945d99cf818ff06  gcc/testsuite/gcc.target/powerpc/spe-vector-me
 aefbc9c117b311a9394883e9c890efb9  gcc/testsuite/gcc.target/powerpc/spe-vector-memset.c
 32bb5e201dd78c548aed0cdf044779ec  gcc/testsuite/gcc.target/powerpc/spe1.c
 c9be7e0cc9ba390460928b1de506fa70  gcc/testsuite/gcc.target/powerpc/stabs-attrib-vect-darwin.c
-d032ed8cc3859ce1a17c9d90fc292f26  gcc/testsuite/gcc.target/powerpc/tfmode_off.c
+18366289600f6f5c0ed1255bd8c267db  gcc/testsuite/gcc.target/powerpc/tfmode_off.c
+c2edbb1afba546ea3ac8a5efcaca9c38  gcc/testsuite/gcc.target/powerpc/ti_math1.c
+c3d0d51284479d220a6166a0f362536c  gcc/testsuite/gcc.target/powerpc/ti_math2.c
 e8cdd476c18884428cf136ed2c4548b2  gcc/testsuite/gcc.target/powerpc/timode_off.c
 2d7ba7687ab5e578e54145507a734e92  gcc/testsuite/gcc.target/powerpc/vsx-builtin-1.c
 0126618c8adf18da2ca783d2a0e48645  gcc/testsuite/gcc.target/powerpc/vsx-builtin-2.c
@@ -38560,7 +38740,7 @@ f75bb721e18362030639e313b0d650f3  gcc/testsuite/gcc.target/x86_64/abi/abi-x86_64
 4599244d74ba4aabbd69240d86d2fe79  gcc/testsuite/gcc.target/x86_64/abi/args.h
 00a7756c300412476dc7df5636d760dd  gcc/testsuite/gcc.target/x86_64/abi/asm-support-darwin.s
 3003646df75711be87357346568aa8b2  gcc/testsuite/gcc.target/x86_64/abi/asm-support.S
-2f42b0a9460f5b6c8971e482a15a8b94  gcc/testsuite/gcc.target/x86_64/abi/avx/abi-avx.exp
+0a783dcc2deac06feabcad9b7d059a45  gcc/testsuite/gcc.target/x86_64/abi/avx/abi-avx.exp
 f559d61e72669fec3c7c3bb1345a001f  gcc/testsuite/gcc.target/x86_64/abi/avx/args.h
 2ab990bb306a8a9c1f146095795ed0bb  gcc/testsuite/gcc.target/x86_64/abi/avx/asm-support.S
 4061363418adffdceb4cff80966eaf32  gcc/testsuite/gcc.target/x86_64/abi/avx/avx-check.h
@@ -38568,7 +38748,7 @@ d3c71d269c1b4265e86c5ace1089e848  gcc/testsuite/gcc.target/x86_64/abi/avx/test_m
 b43e5e8d171dcdbec5cac42b0b9a298c  gcc/testsuite/gcc.target/x86_64/abi/avx/test_passing_m256.c
 ff732b27c9bb0c5b99ccccb31d12d3ea  gcc/testsuite/gcc.target/x86_64/abi/avx/test_passing_structs.c
 d02989c16f0d1cd0951fe435483c550e  gcc/testsuite/gcc.target/x86_64/abi/avx/test_passing_unions.c
-c923c773d058813933b5dcda1968332c  gcc/testsuite/gcc.target/x86_64/abi/avx512f/abi-avx512f.exp
+28f88eec378ae21b3480cc98af33b7f4  gcc/testsuite/gcc.target/x86_64/abi/avx512f/abi-avx512f.exp
 2cf03d73572ce81dab43dcceeeacf5c4  gcc/testsuite/gcc.target/x86_64/abi/avx512f/args.h
 341c91bf54efad299e2f11e9329738fa  gcc/testsuite/gcc.target/x86_64/abi/avx512f/asm-support.S
 1c4dc628c680a1d3ad4767c3a1455499  gcc/testsuite/gcc.target/x86_64/abi/avx512f/avx512f-check.h
@@ -38989,6 +39169,7 @@ f92a29f768758ce8f239cb4b188de5f1  gcc/testsuite/gfortran.dg/allocatable_function
 f49b54ba1324c9645d5ab321e82b6873  gcc/testsuite/gfortran.dg/allocatable_function_5.f90
 a1252b99fdac49d6a298e94e77bea067  gcc/testsuite/gfortran.dg/allocatable_function_6.f90
 5204edb24b79e494174f82a33f3de0ac  gcc/testsuite/gfortran.dg/allocatable_function_7.f90
+ac3181e47fe7f2ff87e5297ee5638865  gcc/testsuite/gfortran.dg/allocatable_function_8.f90
 0eaf05114b7069214e95edca38338c8d  gcc/testsuite/gfortran.dg/allocatable_module_1.f90
 118b37f650281121c6f7a6e4cf4aa38b  gcc/testsuite/gfortran.dg/allocatable_scalar_1.f90
 02dd67e4175ac48686f16220da9b9eeb  gcc/testsuite/gfortran.dg/allocatable_scalar_10.f90
@@ -39195,6 +39376,9 @@ bab9a93e2fbce2377987fb7f67e82a7a  gcc/testsuite/gfortran.dg/arrayio_10.f90
 4d48a42bc964040c164c122d032b8664  gcc/testsuite/gfortran.dg/arrayio_11.f90
 e101afd93c6605938c295b10be41823a  gcc/testsuite/gfortran.dg/arrayio_12.f90
 8eeabeddf3eeabedb9644e95525e98f3  gcc/testsuite/gfortran.dg/arrayio_13.f90
+c59bae6f311e172f040e939b3bcf1fa4  gcc/testsuite/gfortran.dg/arrayio_14.f90
+3a163eca93a1b5da0cb1aa1265c1fc34  gcc/testsuite/gfortran.dg/arrayio_15.f90
+3b626835faa28accd28b7b44c1aa2964  gcc/testsuite/gfortran.dg/arrayio_16.f90
 46396e4a37a64cec9c047113bad6eadc  gcc/testsuite/gfortran.dg/arrayio_2.f90
 464fdf5b0f515ce504fe0f8e2ee07c6b  gcc/testsuite/gfortran.dg/arrayio_3.f90
 4042242806976787cc2719282ff81591  gcc/testsuite/gfortran.dg/arrayio_4.f90
@@ -39229,6 +39413,8 @@ cf4d952c77026c12dcef405f6e7f2e49  gcc/testsuite/gfortran.dg/associate_12.f90
 984ec0158ef522fe661e4163a5708f35  gcc/testsuite/gfortran.dg/associate_13.f90
 7ad97bcf7457ca3c0309724df0caad5e  gcc/testsuite/gfortran.dg/associate_14.f90
 229584e99cd0fefd1f1309fe2cfe60db  gcc/testsuite/gfortran.dg/associate_15.f90
+0ed1ec5c859d3837356536ddd0e6f9ac  gcc/testsuite/gfortran.dg/associate_16.f90
+d8912284402d7f10695694e5d787c65c  gcc/testsuite/gfortran.dg/associate_17.f90
 c066328da870ad9b313bf9491c5b72d6  gcc/testsuite/gfortran.dg/associate_2.f95
 ada9a3758cef9c8c02a55f1139c4f13b  gcc/testsuite/gfortran.dg/associate_3.f03
 a1f5f0d8423367d45fe9382b407ce7e9  gcc/testsuite/gfortran.dg/associate_4.f08
@@ -39807,7 +39993,7 @@ af62f8e63487374ab7f55bf98ba22f9f  gcc/testsuite/gfortran.dg/class_array_11.f03
 211e434394ea8ce43ce8f5c2e671416d  gcc/testsuite/gfortran.dg/class_array_12.f03
 7d1b70fed6324f2dae86399e70c60cb7  gcc/testsuite/gfortran.dg/class_array_13.f90
 2880265b32eb89ea2a2339848e096186  gcc/testsuite/gfortran.dg/class_array_14.f90
-204f439f174315c159d07cb138c73159  gcc/testsuite/gfortran.dg/class_array_15.f03
+716eead744817cb2a71e4d66c7b93e29  gcc/testsuite/gfortran.dg/class_array_15.f03
 5790c36b47ecec9e1e086133517074b9  gcc/testsuite/gfortran.dg/class_array_16.f90
 2dcfa225532d68c04bcb2b83adabb1f0  gcc/testsuite/gfortran.dg/class_array_17.f90
 c51442df4b78a56b7cd5dc0dacc16f6b  gcc/testsuite/gfortran.dg/class_array_18.f90
@@ -40003,6 +40189,7 @@ aa9b2006005e6ab72526a2495276d14d  gcc/testsuite/gfortran.dg/count_init_expr.f03
 f8a4ca21ccf302214564ec0d59e8fd51  gcc/testsuite/gfortran.dg/count_mask_1.f90
 0f69fed692c7480664d7891f27db0443  gcc/testsuite/gfortran.dg/cr_lf.f90
 33604a92da75a7b5ee0f958ab81b1328  gcc/testsuite/gfortran.dg/cray_pointers_1.f90
+1d44af9bd997323c65ffc1ac7e394957  gcc/testsuite/gfortran.dg/cray_pointers_10.f90
 9b498b2d4cff83ed58620c1998f47f87  gcc/testsuite/gfortran.dg/cray_pointers_2.f90
 49ea5999b0fbbd860fa0b8b1e6a01397  gcc/testsuite/gfortran.dg/cray_pointers_3.f90
 c00f3a9d2f365b0dab03e2415fabbc16  gcc/testsuite/gfortran.dg/cray_pointers_4.f90
@@ -40068,7 +40255,7 @@ f12fc8f8c675ad90dacda21c47b123cf  gcc/testsuite/gfortran.dg/debug_2.f
 35efa4236e3136b5b5d89215e9c671a0  gcc/testsuite/gfortran.dg/default_format_2.f90
 c286b196507e9ffee9aad5b53cf42fd7  gcc/testsuite/gfortran.dg/default_format_2.inc
 c767d7f22474c8ad0d004a14d5e33668  gcc/testsuite/gfortran.dg/default_format_denormal_1.f90
-12e97e8bf807fa0fafbbf6bfb04a2f14  gcc/testsuite/gfortran.dg/default_format_denormal_2.f90
+a8fdda0b2ff88e8a64875e9f9417f37a  gcc/testsuite/gfortran.dg/default_format_denormal_2.f90
 42b3bc794999b325dd25fadf49212667  gcc/testsuite/gfortran.dg/default_initialization_1.f90
 ba730e52e3b48dd9a54bf3a8e2b06575  gcc/testsuite/gfortran.dg/default_initialization_2.f90
 82fe74ac8e598a41632b7047330d6d36  gcc/testsuite/gfortran.dg/default_initialization_3.f90
@@ -40473,6 +40660,7 @@ d274474e388646c24096790888b5a1eb  gcc/testsuite/gfortran.dg/finalize_21.f90
 d88c4f69c4e8abbcf539c35db1c38c47  gcc/testsuite/gfortran.dg/finalize_22.f90
 694cfd8a3b55175c1a6e16f7d7f60038  gcc/testsuite/gfortran.dg/finalize_23.f90
 7777e7da27f0f204cb380c5791769371  gcc/testsuite/gfortran.dg/finalize_24.f90
+9d8695ba5d9b84a617601b19fbc15f3e  gcc/testsuite/gfortran.dg/finalize_25.f90
 fd6f56591cff43978fb9e37af994eec0  gcc/testsuite/gfortran.dg/finalize_3.f03
 92b4ca27645d88cb11543d720382b004  gcc/testsuite/gfortran.dg/finalize_4.f03
 ce817f495edb0ac306d6ae1052014e67  gcc/testsuite/gfortran.dg/finalize_5.f03
@@ -40789,7 +40977,8 @@ f09b279084dd78c867deb4c29a351c13  gcc/testsuite/gfortran.dg/global_vars_f90_init
 1e220f6220b76cc8c3a456baadfdbc39  gcc/testsuite/gfortran.dg/global_vars_f90_init_driver.c
 55e7857d1dafac193e2cd5a0a381424f  gcc/testsuite/gfortran.dg/gnu_logical_1.F
 fcddec2c8be6f5c85fd4943091dc86d1  gcc/testsuite/gfortran.dg/gnu_logical_2.f90
-33c63b25f6446aeb7fb749d92c0162dd  gcc/testsuite/gfortran.dg/gomp/allocatable_components_1.f90
+fe34d9d42d37b9776459e695b904bc39  gcc/testsuite/gfortran.dg/gomp/affinity-1.f90
+5633756a662441452bd869456e985808  gcc/testsuite/gfortran.dg/gomp/allocatable_components_1.f90
 a2a78b9dfd24cc5b801a51ebf7713787  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.1.1.f90
 a939ad660a97fdd3a36058fbbed08e4e  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.11.1.f90
 be2dfd843076b56ef43acf3c66d28133  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.11.2.f90
@@ -40822,7 +41011,7 @@ e892480f878db9fb2d75388365b0d38f  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.23
 53059af4b001b877b193a648ed0c69f4  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.30.1.f90
 87d438d380fe4278f5240b8d1fd0d3db  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.31.1.f90
 0467067c8e8499996af77b64afbb8c31  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.31.2.f90
-20a6f46dda017b3c095be51b91da5df6  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.31.3.f90
+291e78adbe93a2f84d2a41707864c4d2  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.31.3.f90
 182731c8064c6ef83beb1d10cd03700b  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.32.1.f90
 157bb81ef8b8706d56531116aacc2653  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.33.1.f90
 4ab99a44c0b5a623c5d27396d9bd8a6b  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.33.2.f90
@@ -40844,6 +41033,7 @@ e2405fcffa82b9acf1b1076f87c4061a  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.7.
 953bdf3d3c109936d52b7448c0cf914f  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.7.2.f90
 990da4894eee5b8e82d214eabde8634d  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.8.1.f90
 fc76de5411a6ea3d2ef0e979cd24294f  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.9.1.f90
+552f0c0302bb6592f6a2fb291b4586a6  gcc/testsuite/gfortran.dg/gomp/associate1.f90
 bab96c8ce5beeb0e7d9e4dae2fd0ea5f  gcc/testsuite/gfortran.dg/gomp/block-1.f90
 c8bcf6337f95b605de3d54a7f8e5ab84  gcc/testsuite/gfortran.dg/gomp/collapse1.f90
 5889f294d23bf018b629ca16a28a09c2  gcc/testsuite/gfortran.dg/gomp/crayptr1.f90
@@ -40851,19 +41041,26 @@ c8bcf6337f95b605de3d54a7f8e5ab84  gcc/testsuite/gfortran.dg/gomp/collapse1.f90
 0f6bba7fdd496b28f7b45fd8ee73a58f  gcc/testsuite/gfortran.dg/gomp/crayptr3.f90
 1c6644a88dc4bee98beb52bb4342fee9  gcc/testsuite/gfortran.dg/gomp/crayptr4.f90
 5752af36ad97d8ba0a6600c514a1eb76  gcc/testsuite/gfortran.dg/gomp/crayptr5.f90
+3637ee280cfe64316f44286f354db90d  gcc/testsuite/gfortran.dg/gomp/declare-simd-1.f90
+fa41d6dd0ec4bc45beb3cbce04bf821d  gcc/testsuite/gfortran.dg/gomp/depend-1.f90
 db187bc842cfaea8dd9eab3344c97e93  gcc/testsuite/gfortran.dg/gomp/do-1.f90
 a467591fa5a7397d62aff928d63eb0ad  gcc/testsuite/gfortran.dg/gomp/fixed-1.f
 14ab6dfa2149c533128a3f201531e525  gcc/testsuite/gfortran.dg/gomp/free-1.f90
 b7bb651884d39c2e5dce7d57d46f40a5  gcc/testsuite/gfortran.dg/gomp/free-2.f90
 833c786734216c6ed1ad406a53f3af9a  gcc/testsuite/gfortran.dg/gomp/gomp.exp
+0cfd422be152bb21744cc7cfe5baf808  gcc/testsuite/gfortran.dg/gomp/intentin1.f90
 52223211c34f4dbace5e033f8243ae1f  gcc/testsuite/gfortran.dg/gomp/omp_atomic1.f90
 0e5454ac80bc199d6cf3e96e9750c33f  gcc/testsuite/gfortran.dg/gomp/omp_atomic2.f90
 5d43e477ab60e438b8824d612b24022d  gcc/testsuite/gfortran.dg/gomp/omp_clauses1.f90
 e7227cd823c352d8bcc8b82aeb57d316  gcc/testsuite/gfortran.dg/gomp/omp_do1.f90
+818c401459cd690f09b6456c6af28b9a  gcc/testsuite/gfortran.dg/gomp/omp_do_concurrent.f90
 04280f9a588c35300001e54082831f2f  gcc/testsuite/gfortran.dg/gomp/omp_parse1.f90
 748f336859d6338cc5d7146cd8a4b14b  gcc/testsuite/gfortran.dg/gomp/omp_parse2.f
 421900bf9ea5cfcbf2d2146fb3d77407  gcc/testsuite/gfortran.dg/gomp/omp_threadprivate1.f90
 bdca03c79b16b5f9c19e5c92941f5888  gcc/testsuite/gfortran.dg/gomp/omp_threadprivate2.f90
+c97c8ff2f56cab022d1406778fde6e41  gcc/testsuite/gfortran.dg/gomp/openmp-simd-1.f90
+59468044bce741ee29e2c3362ce85e1d  gcc/testsuite/gfortran.dg/gomp/openmp-simd-2.f90
+9ec7d78c19b910fb2fc4700d941d4a25  gcc/testsuite/gfortran.dg/gomp/openmp-simd-3.f90
 9a6817790a272cd8153d4303d324c00f  gcc/testsuite/gfortran.dg/gomp/pr26224.f
 d2c74a71f2bea0005d853821e6f0142c  gcc/testsuite/gfortran.dg/gomp/pr27573.f90
 7905e149c2a2dbed5b9dd43384d712f4  gcc/testsuite/gfortran.dg/gomp/pr29759.f90
@@ -40898,12 +41095,24 @@ e321ec3eb6a878488b42bdb5e70a1821  gcc/testsuite/gfortran.dg/gomp/pr56052.f90
 6954124ff522f1d30670dc093d886d8b  gcc/testsuite/gfortran.dg/gomp/pr57089.f90
 bcd9a8c5acf05494271659304f0f0a60  gcc/testsuite/gfortran.dg/gomp/pr59467.f90
 b4be3f9de7631846875a711ae9b67293  gcc/testsuite/gfortran.dg/gomp/proc_ptr_1.f90
-4a9d10a348ccf5012c673f2637785ba6  gcc/testsuite/gfortran.dg/gomp/reduction1.f90
+87885556568e657ef4c936c53e1c7305  gcc/testsuite/gfortran.dg/gomp/proc_ptr_2.f90
+59e444df8ec8f5ea9859b5aef4d75865  gcc/testsuite/gfortran.dg/gomp/reduction1.f90
 02484261b0434dbaf2709c34db58cd4d  gcc/testsuite/gfortran.dg/gomp/reduction2.f90
-8d18e99707613f2d648e3240f0ba1d76  gcc/testsuite/gfortran.dg/gomp/reduction3.f90
+a2addf1a691db784ba87841fe1cf8f23  gcc/testsuite/gfortran.dg/gomp/reduction3.f90
 4abf31477ed1e2174ce1a15dea5e1970  gcc/testsuite/gfortran.dg/gomp/sharing-1.f90
 0225b461902c034537f77db022b17f11  gcc/testsuite/gfortran.dg/gomp/sharing-2.f90
 338202088032a1453c1b11e7f193b475  gcc/testsuite/gfortran.dg/gomp/sharing-3.f90
+354de1f16113f3936aaf4a03d2f49a7d  gcc/testsuite/gfortran.dg/gomp/target1.f90
+211df959d7353087bec284fb1e43ceec  gcc/testsuite/gfortran.dg/gomp/target2.f90
+86c0623e8799ecab72ed886c759cde03  gcc/testsuite/gfortran.dg/gomp/target3.f90
+86f899863718848e682593290355e6c1  gcc/testsuite/gfortran.dg/gomp/udr1.f90
+2aa1076458fe27767e8682a018266e21  gcc/testsuite/gfortran.dg/gomp/udr2.f90
+6ddb9641f92715d3a3298771fab84b43  gcc/testsuite/gfortran.dg/gomp/udr3.f90
+69722424503f758e5d5b5fb26c82af7b  gcc/testsuite/gfortran.dg/gomp/udr4.f90
+4c958e4e2ed3b058d16744bf6f4dc133  gcc/testsuite/gfortran.dg/gomp/udr5.f90
+4be69272338362c6a969ab47082c5fcc  gcc/testsuite/gfortran.dg/gomp/udr6.f90
+d601b4dee96fb1e6923bf1f70930e930  gcc/testsuite/gfortran.dg/gomp/udr7.f90
+2f369bc0187e2b8a78573295b630c96f  gcc/testsuite/gfortran.dg/gomp/udr8.f90
 41759f5578782a6f4ae3601bff797650  gcc/testsuite/gfortran.dg/gomp/workshare1.f90
 74f7a0197763c365cb7511562e6e77bf  gcc/testsuite/gfortran.dg/gomp/workshare2.f90
 50b2c95c698e63006e5f0e8cbcea5a66  gcc/testsuite/gfortran.dg/gomp/workshare3.f90
@@ -40987,6 +41196,7 @@ b3194ceb811f07a263b4b3018c8b7155  gcc/testsuite/gfortran.dg/graphite/pr42732.f
 14ef0b0fb7468bddc8da80d525db505d  gcc/testsuite/gfortran.dg/graphite/pr43349.f
 cf66c78971cc0a0ccbbe06e8285499fb  gcc/testsuite/gfortran.dg/graphite/pr45758.f90
 c35834551693365c4a94cd2ef2b4bd6d  gcc/testsuite/gfortran.dg/graphite/pr47019.f
+f993bc6aecd63bdc6b9e8b64e54b0800  gcc/testsuite/gfortran.dg/graphite/pr59817.f
 daa53e999b30e1103a7ea6f3e62ecd91  gcc/testsuite/gfortran.dg/graphite/run-id-1.f
 f284b8f4f2a5b32dc60a00731241ca8e  gcc/testsuite/gfortran.dg/graphite/run-id-2.f90
 a9d76d71bfd312f4638121eef4a5b755  gcc/testsuite/gfortran.dg/graphite/scop-1.f
@@ -41407,6 +41617,7 @@ fc437ac99c80ded40e13df8066e49a91  gcc/testsuite/gfortran.dg/linked_list_1.f90
 16b03bca05a6acc43f24be44e1f2ff05  gcc/testsuite/gfortran.dg/list_read_10.f90
 e76e21ee6abb6a701aa6c131c97d9312  gcc/testsuite/gfortran.dg/list_read_11.f90
 20aebdb97e7740e2d38992e6981de05a  gcc/testsuite/gfortran.dg/list_read_12.f90
+a9116f1431f2fcd98ac937aaf225727c  gcc/testsuite/gfortran.dg/list_read_13.f
 67997f845ffceb239257b26970956c2d  gcc/testsuite/gfortran.dg/list_read_2.f90
 799ffeafd700d24bd3e365a8addcfa10  gcc/testsuite/gfortran.dg/list_read_3.f90
 36e928b3a5b9a5d89ecebae1c130be22  gcc/testsuite/gfortran.dg/list_read_4.f90
@@ -41740,7 +41951,7 @@ b90601c72fd006ff2aa77fcdb00aa6ce  gcc/testsuite/gfortran.dg/nested_modules_4.f90
 98b3add6564d9cb2c9fce79f49339208  gcc/testsuite/gfortran.dg/newunit_2.f90
 6aa623107a603714b8177f7ed1641e4d  gcc/testsuite/gfortran.dg/newunit_3.f90
 cf1aadbb18d5e6f8399c252ebc5de0bf  gcc/testsuite/gfortran.dg/nint_1.f90
-2a9b4addb34839a8caf5cb64192f4a35  gcc/testsuite/gfortran.dg/nint_2.f90
+42421c2b20fbb6d12877435f629d9adb  gcc/testsuite/gfortran.dg/nint_2.f90
 03b84fc5eca43cc5d1a0b1a93937da73  gcc/testsuite/gfortran.dg/no_arg_check_1.f90
 e7bc0cb6b865f58b021aad8f7c5ad646  gcc/testsuite/gfortran.dg/no_arg_check_2.f90
 b5459269634c18de84d59f7e3bfb7c5c  gcc/testsuite/gfortran.dg/no_arg_check_3.f90
@@ -41775,6 +41986,7 @@ f202e3843710f9492560538fa53c3847  gcc/testsuite/gfortran.dg/nullify_2.f90
 a6de0d0b913df7bf4f7e924d87693c5e  gcc/testsuite/gfortran.dg/oldstyle_2.f90
 22eb37df11114e6c809b504360ee7009  gcc/testsuite/gfortran.dg/oldstyle_3.f90
 3dd41260093d8cf9e7bbb41939229a8c  gcc/testsuite/gfortran.dg/oldstyle_4.f90
+782cced02660ac0a383a889e8e5324a5  gcc/testsuite/gfortran.dg/oldstyle_5.f
 adbcc21a5778904b9a3a281e08e68479  gcc/testsuite/gfortran.dg/only_clause_main.c
 2ec0da16b8d33ec015c6c20f193ee162  gcc/testsuite/gfortran.dg/open-options-blanks.f
 941113644c9b039dadaf2ea8f8b4331d  gcc/testsuite/gfortran.dg/open_access_1.f90
@@ -41790,7 +42002,7 @@ ef1a09bc092a9a36cc34b1e31d30a244  gcc/testsuite/gfortran.dg/open_nounit.f90
 e548fbe30e98c9d7ac1106482dbc7e3e  gcc/testsuite/gfortran.dg/open_status_3.f90
 13b9efd2d6877e1ce4634b24aac8b5fc  gcc/testsuite/gfortran.dg/openmp-define-1.f90
 7c3311ed70efe122c0482f92398333c9  gcc/testsuite/gfortran.dg/openmp-define-2.f90
-a3a6d581b221bc307171485a58450895  gcc/testsuite/gfortran.dg/openmp-define-3.f90
+92c557030c984c498211d1b210bcdc7f  gcc/testsuite/gfortran.dg/openmp-define-3.f90
 343d2117bb7c6e6b90b647727aa8bad0  gcc/testsuite/gfortran.dg/operator_1.f90
 b17cec21502c8794736dc737cec00cef  gcc/testsuite/gfortran.dg/operator_2.f90
 0dd70087c9deb3c1435a846982d5b717  gcc/testsuite/gfortran.dg/operator_3.f90
@@ -42469,7 +42681,7 @@ ba4309199b6de8e3f6569168576b672d  gcc/testsuite/gfortran.dg/ret_pointer_1.f90
 7bdbcf6bda9a84f72f0ce9ff5baa35b3  gcc/testsuite/gfortran.dg/round_1.f03
 8c6826e188281f4ba61e0e09942cb319  gcc/testsuite/gfortran.dg/round_2.f03
 1e6dca49810e611218d8671ef4acade6  gcc/testsuite/gfortran.dg/round_3.f08
-50d8e1af10610e462e7210d91db177e0  gcc/testsuite/gfortran.dg/round_4.f90
+d14f6788781c04d3f31703e85d091e08  gcc/testsuite/gfortran.dg/round_4.f90
 795c3a5486634878e59848252e62aa82  gcc/testsuite/gfortran.dg/rrspacing_1.f90
 54535416585a8a8a084e4b2896243778  gcc/testsuite/gfortran.dg/runtime_warning_1.f90
 cf312106ea57ecf768f6b24b13308511  gcc/testsuite/gfortran.dg/same_name_1.f90
@@ -43571,7 +43783,7 @@ d7604b4d2f401c17008d23ef48c7da56  gcc/testsuite/gnat.dg/aggr9.adb
 32af85ba2b22e3a45be1db299d0fc3a0  gcc/testsuite/gnat.dg/aggr9_pkg.ads
 35031b3b1cfbf9db80dbdb131ad67e3e  gcc/testsuite/gnat.dg/aliased1.adb
 fc20c665ce493e3af920ca3b8b338e2e  gcc/testsuite/gnat.dg/aliased_prefix_accessibility.adb
-a7739809a555fb662a89827d82bc3233  gcc/testsuite/gnat.dg/aliasing1.adb
+9e0da223f4688dd4c3482ce7c4390a98  gcc/testsuite/gnat.dg/aliasing1.adb
 a4902656656cf1933e27aa840c492aae  gcc/testsuite/gnat.dg/aliasing1.ads
 54f6aed3ad979289cd3a9b9fca61c9d7  gcc/testsuite/gnat.dg/aliasing2.adb
 fcc69d2d6784a35c97662eebdee16779  gcc/testsuite/gnat.dg/aliasing2.ads
@@ -43887,6 +44099,7 @@ a22dac614adec7200ac46b985a9973bc  gcc/testsuite/gnat.dg/enclosing_record_referen
 4655c082e4d28f9145dcbe265465a866  gcc/testsuite/gnat.dg/enum1_pkg.ads
 7fa9081040c1b11170ec87a324a3ebc0  gcc/testsuite/gnat.dg/enum2.adb
 8512bce6ebb7b1c767b2f9d14a48a71e  gcc/testsuite/gnat.dg/enum2_pkg.ads
+a4f52bfabfe2bc7e231d6ecd5aeefaf6  gcc/testsuite/gnat.dg/enum3.adb
 6c032f23ef785bfe07a7d1b1a540adfc  gcc/testsuite/gnat.dg/env_compile_capacity.adb
 5f85dec3853c4180660d191365838fb2  gcc/testsuite/gnat.dg/env_compile_capacity.ads
 797286d8d53abdbd5ade8214dca9db11  gcc/testsuite/gnat.dg/equal1.ads
@@ -44193,6 +44406,10 @@ f34c1ccc4215e16c24735299c32e5af3  gcc/testsuite/gnat.dg/opt28.ads
 ff63882d64d1bc7bf40b07c0ee842ed3  gcc/testsuite/gnat.dg/opt31.adb
 20ad547be814ce4a0fc7d07e373934bf  gcc/testsuite/gnat.dg/opt32.adb
 ece02966a92b2ea240da4ed9c82963d9  gcc/testsuite/gnat.dg/opt33.adb
+cd1cd547ffd6a15fd43fea30ececc910  gcc/testsuite/gnat.dg/opt38.adb
+c7cef5a4232a339afa288abd7cb369dc  gcc/testsuite/gnat.dg/opt38_pkg.adb
+ba03504b0b64d5f70065d0214412516e  gcc/testsuite/gnat.dg/opt38_pkg.ads
+fe287ca30d00bf022eed63003e7799b0  gcc/testsuite/gnat.dg/opt39.adb
 65e20f998d483941d92a34b07b482d10  gcc/testsuite/gnat.dg/opt3_pkg.ads
 e98c04ac385dbd0581c1f5fa108caf6b  gcc/testsuite/gnat.dg/opt4.adb
 3d44b5cac38d62a85266069665682f5d  gcc/testsuite/gnat.dg/opt5.adb
@@ -44207,6 +44424,7 @@ a441d166cc0d4b34342468308b350060  gcc/testsuite/gnat.dg/opt7.adb
 ba51f2b4ff3e6536d2d6f2acd9443799  gcc/testsuite/gnat.dg/opt9.adb
 feb376d91f5514b647b1ad61b025d828  gcc/testsuite/gnat.dg/opt9_pkg.ads
 fec5c039983cc172fd81dc506725f69c  gcc/testsuite/gnat.dg/outer_agg_bitfield_constructor.adb
+4d9b7573a99095e98a73ab165f18724d  gcc/testsuite/gnat.dg/overflow_fixed.adb
 a2d243fe1c9cc4acb1eab0db0f587b81  gcc/testsuite/gnat.dg/overflow_sum.adb
 94d7b3cc1345f58f5547ed8c8973d6c0  gcc/testsuite/gnat.dg/overflow_sum2.adb
 562961be442c02c3c6c5b534016f3fc1  gcc/testsuite/gnat.dg/overriding_ops.adb
@@ -45835,6 +46053,7 @@ fb4505f7d03948961a1b43f3c3735177  gcc/testsuite/lib/atomic-dg.exp
 5ca9c51dae3c7625f396c0d24cf84814  gcc/testsuite/lib/c-compat.exp
 71855d0a661e3936c137f1d4ae29f9d1  gcc/testsuite/lib/c-torture.exp
 c62b99e026ed42b6e82f8480fb487837  gcc/testsuite/lib/cilk-plus-dg.exp
+0fd78d8ca5862167f2d986f8aa365429  gcc/testsuite/lib/clearcap.exp
 a119592eb7fd6f217ae6b95df83d2b66  gcc/testsuite/lib/compat.exp
 13aeaf85fd6afdf8e6afaef752ae087b  gcc/testsuite/lib/copy-file.exp
 959e1855b178d7db49dd62f2a19c2b95  gcc/testsuite/lib/dejapatches.exp
@@ -45876,7 +46095,7 @@ f3784967f82fd982a7b13a211872bdd7  gcc/testsuite/lib/scanipa.exp
 bd515d57aa30aa3fb51f62e9fc698abc  gcc/testsuite/lib/scantree.exp
 d44c50538cc6d39a3eb1aa063b392626  gcc/testsuite/lib/target-libpath.exp
 d6e6500432d65180387c39287b536b8a  gcc/testsuite/lib/target-supports-dg.exp
-d3d7377c7613aed518b295f4e436f2b9  gcc/testsuite/lib/target-supports.exp
+12cbb51fb1389b3dbd47c6985af487f4  gcc/testsuite/lib/target-supports.exp
 11de8489fa53e77ff9be279e855090eb  gcc/testsuite/lib/timeout-dg.exp
 038a7798c766b7a7466b09f89b875129  gcc/testsuite/lib/timeout.exp
 9aba7d93506cf79e6241eb0b27cdbce3  gcc/testsuite/lib/torture-options.exp
@@ -46826,10 +47045,10 @@ f7eea62b481e8b0a731b6272b9cc74bc  gcc/tree-cfg.c
 503ee4098f6eb3e1f6232141559346bc  gcc/tree-chrec.c
 7bc54df23602d375b2db5b7c4c4d5c6a  gcc/tree-chrec.h
 30a64a3df6bc881833526501f66db580  gcc/tree-complex.c
-4f70760d40ea5faeaf2fc2a7b235f14e  gcc/tree-core.h
+914d12bc4c885a84e08969baf18e0d85  gcc/tree-core.h
 68d17debfd1dc9aa375d8c5cfa5d6346  gcc/tree-data-ref.c
 eb5d27926043e6b574073a68ae7a6bbd  gcc/tree-data-ref.h
-3dd5a3692ceb0c94441ce1fa308fbead  gcc/tree-dfa.c
+e76e8e1efc24553629d2002ee50fe15d  gcc/tree-dfa.c
 188948b90ecddaf70eef9d404c377bba  gcc/tree-dfa.h
 13373f758dbb8bec16c7f6bfc183483f  gcc/tree-diagnostic.c
 308dd14e2238ac39da0eada1c384605c  gcc/tree-diagnostic.h
@@ -46840,14 +47059,14 @@ c1de5be4d7c816691e462f98ebbfb35e  gcc/tree-dump.c
 18f1ee32b871b8e6a91c092dc86652b2  gcc/tree-emutls.c
 392b556d7ee2d1f57ef2b4cc6b7566ce  gcc/tree-hasher.h
 09eb6bde07e86a671ea0c0af5a54dcd2  gcc/tree-if-conv.c
-bc4d003e0876de5cac79fbbfbe1397f6  gcc/tree-inline.c
+54c9584f7b2133d8f97ee05f49ce5957  gcc/tree-inline.c
 38c9fe3122537a015ee2e63c38dcdb4d  gcc/tree-inline.h
 9e237b35b42a8d96e2582a9a4b2e17cf  gcc/tree-into-ssa.c
 391b426d3a83206f44b13a9784fdc4f4  gcc/tree-into-ssa.h
 a50e871a6391b650cd6682d5c01811e2  gcc/tree-iterator.c
 f930e7c2f6a3ed536883d847d3b2ccbb  gcc/tree-iterator.h
 a15cc75a41e7bf2ccfc380cf1eba2caa  gcc/tree-loop-distribution.c
-dd3474665f077379bc17e67c77962e53  gcc/tree-nested.c
+f233be2ac4a0dd55322b4744dbfc6c86  gcc/tree-nested.c
 fd0be797829a72cc8aa7075c4f014071  gcc/tree-nested.h
 f0a4e6c679c97265f09801be43d3a14c  gcc/tree-nrv.c
 20b5b1a12f858b7354b153c8ffc9772f  gcc/tree-object-size.c
@@ -46860,7 +47079,7 @@ cd92eadd61507922e22a7777cdd2af65  gcc/tree-object-size.h
 16ba28fd00b4db08b0a5d81b347083d5  gcc/tree-phinodes.c
 8df39df261e9cfd73e097d2b8eb56618  gcc/tree-phinodes.h
 a83a11aa58d5f244ef2615874775079d  gcc/tree-predcom.c
-b5625e795fa95d9aab6fe82577573610  gcc/tree-pretty-print.c
+fcf562b10629ef610b52399780252ceb  gcc/tree-pretty-print.c
 455851cb801e9923d5e78bda86574697  gcc/tree-pretty-print.h
 99eb64b4f611fa70c0be1172d2490e61  gcc/tree-profile.c
 f05617fb6ae3aebf72fe8b08dc2c43cd  gcc/tree-scalar-evolution.c
@@ -46868,7 +47087,7 @@ f05617fb6ae3aebf72fe8b08dc2c43cd  gcc/tree-scalar-evolution.c
 c01a6c1b8f3498c4297ae5486d8218e0  gcc/tree-sra.c
 42d4f284771214b78fdc24ed8b8b2aab  gcc/tree-ssa-address.c
 1b77258ce233f1010fc549f8bc5dc234  gcc/tree-ssa-address.h
-309c5aee027224923b0b81018aa07fb7  gcc/tree-ssa-alias.c
+3583fb23bee7cd856dd838440b26a19d  gcc/tree-ssa-alias.c
 1ed0e9e14e828eebcbd12670911f57b3  gcc/tree-ssa-alias.h
 908fae5b3e2e651511a1f59fed4310e4  gcc/tree-ssa-ccp.c
 8854db1b9cfdaaeb605c67ebe35d6889  gcc/tree-ssa-coalesce.c
@@ -46880,11 +47099,11 @@ ade4acc3cdcdc401a8c6b9b07c09a3f2  gcc/tree-ssa-dce.c
 ab41801eb8e661b97721f2fdfe0af9a4  gcc/tree-ssa-dom.h
 287491fa0cac5371bf21b51fa2f9883e  gcc/tree-ssa-dse.c
 eeb18249f19630551d81760b4bf8543c  gcc/tree-ssa-forwprop.c
-09132742bdd50c906f5135b6160acd3e  gcc/tree-ssa-ifcombine.c
+40873618b7b68316d2968048ff8cb66e  gcc/tree-ssa-ifcombine.c
 4316577d7bfe850e5701f66f50da950d  gcc/tree-ssa-live.c
 73c40cd97a78b00562f807d65b537704  gcc/tree-ssa-live.h
 44623445e0a3c3ef90cbdeca15dc7898  gcc/tree-ssa-loop-ch.c
-d079a8d937eb558ee76ca68a6d35ee9b  gcc/tree-ssa-loop-im.c
+d70235f13b67d1cd315cad0b61a93821  gcc/tree-ssa-loop-im.c
 de0b463530ea41456521090168225afe  gcc/tree-ssa-loop-ivcanon.c
 917bdac433d10a17378ef2a0abb40878  gcc/tree-ssa-loop-ivopts.c
 02338563356306fac3c2016a7cbb7e18  gcc/tree-ssa-loop-ivopts.h
@@ -46896,24 +47115,24 @@ a528b0b164e374835b757aa586261d7a  gcc/tree-ssa-loop-prefetch.c
 437c9aea9639196d89592ec3141fffda  gcc/tree-ssa-loop-unswitch.c
 9ee9e10357d8d79a29baa53d34f769bd  gcc/tree-ssa-loop.c
 10c5655c0beaa92cd03aebe537042e27  gcc/tree-ssa-loop.h
-61528af55e47456e638ec793d61a2bb2  gcc/tree-ssa-math-opts.c
+31f06ae9e9d3aab469cb81ac503c34b7  gcc/tree-ssa-math-opts.c
 f1ab905b3a864de6c06760872d285039  gcc/tree-ssa-operands.c
 18da3215ee1eb3bc5e01eba7c52e4760  gcc/tree-ssa-operands.h
 863288b76e2e726b542bbbf75b4993a0  gcc/tree-ssa-phiopt.c
 8fb9d0b352dbc5a750557b79d39ecb7b  gcc/tree-ssa-phiprop.c
 f3b38ebf82330446d5ba11dc1c4f9999  gcc/tree-ssa-pre.c
-6a218f3964aafb0ad32c2c4c24656f22  gcc/tree-ssa-propagate.c
+9083eec79d74033bf086e4bb48337a5e  gcc/tree-ssa-propagate.c
 7815765bde42cd1f14f758d5728ff1b8  gcc/tree-ssa-propagate.h
-a105a8fff9d7fc96ff8a5807dec618ca  gcc/tree-ssa-reassoc.c
-cec79090f8302ce24c3124ac80ae49d2  gcc/tree-ssa-sccvn.c
+49f3a282983a44d50b2be6d4223a2cc0  gcc/tree-ssa-reassoc.c
+3b4617ab5995aa30b2f8310cc7840329  gcc/tree-ssa-sccvn.c
 2b653bc55e7496a67ed55e853541ad46  gcc/tree-ssa-sccvn.h
 7e7a1a092345df08ee409928b3982dfe  gcc/tree-ssa-sink.c
 544ace7a165f16f1c9762df3a847246f  gcc/tree-ssa-strlen.c
-a5f65a2627768e5489628080335c6b35  gcc/tree-ssa-structalias.c
-90f6f3b5d2fb378039024c5358db286f  gcc/tree-ssa-tail-merge.c
+33a13266aadbcb7114132539a3b14dd7  gcc/tree-ssa-structalias.c
+26759ddea3c2091a2d428dcad711b886  gcc/tree-ssa-tail-merge.c
 062609c7341f33356980b58413052721  gcc/tree-ssa-ter.c
 b58c1f79a5493a196cfa2fe3743f0f1b  gcc/tree-ssa-ter.h
-51c9c3be8d80f3944fdb6c4600335fb1  gcc/tree-ssa-threadedge.c
+6b6af3f5b123f1e218c8a404feab5135  gcc/tree-ssa-threadedge.c
 516be19b8699fd0711b27443d9c35780  gcc/tree-ssa-threadedge.h
 5da1def2ada611ef35889f5f82435404  gcc/tree-ssa-threadupdate.c
 51f65d2aae4b00e4f980342a6f3e8f0d  gcc/tree-ssa-threadupdate.h
@@ -46925,25 +47144,25 @@ a79b6c80ddc8a564c5cd261cb9b3fdd1  gcc/tree-ssa.h
 7eac066b68b6b48d3af680244530782d  gcc/tree-ssanames.h
 53a6aac3efa8ad1efa3c8d85fe729b05  gcc/tree-stdarg.c
 69d3270536f329aba1520dbf6de5c133  gcc/tree-stdarg.h
-a40cfa29f8fda80e38f78cf32f7f38c9  gcc/tree-streamer-in.c
+368b75e67d682575accb291afacae7e0  gcc/tree-streamer-in.c
 1a84a7f62cf8907cb2ea05b556c05a97  gcc/tree-streamer-out.c
 df287b486f934620deb088f2ee0ce7d6  gcc/tree-streamer.c
 66df870f3a2e434206f12dfca5530651  gcc/tree-streamer.h
 59772b6a0b414642ac5a2a048d0f3f3d  gcc/tree-switch-conversion.c
-b31ae3316201ce279149fe5e7b06de4b  gcc/tree-tailcall.c
-edc269fee754426fbefc306d4ad1abad  gcc/tree-vect-data-refs.c
-0e27064ef9d087f1f89864c3e014fa18  gcc/tree-vect-generic.c
+ba49073bb43840db9e9ff429362ab8b2  gcc/tree-tailcall.c
+40ab70ef76279b925be56e4990f39935  gcc/tree-vect-data-refs.c
+2ebebe422bba1deae3219b1f8989ec26  gcc/tree-vect-generic.c
 c4830553b5647a24557575bac1731b99  gcc/tree-vect-loop-manip.c
-4f794f59f5123dbe288b54e7f5f2217c  gcc/tree-vect-loop.c
+75b561d43c4bab24c3cab19b15ed57f8  gcc/tree-vect-loop.c
 20abc700ab1045ac316418ded7857b1d  gcc/tree-vect-patterns.c
-570bb562cea9f896cf6d277a778eb509  gcc/tree-vect-slp.c
+77fd4e9dc7fd733a55875224826fccdd  gcc/tree-vect-slp.c
 9c3f0571fc30c94ce244049843fe875f  gcc/tree-vect-stmts.c
 4a58096af76df477534bbb3ab779b591  gcc/tree-vectorizer.c
-00577adc4ec453db88a9e940444ffd6b  gcc/tree-vectorizer.h
-ddf25802321fbbbf5b2dbc7dd3c34257  gcc/tree-vrp.c
-cdcff8975ef1bf46b4d958ed3dab4420  gcc/tree.c
+b23aeb290e610825e695bf1897f28c7d  gcc/tree-vectorizer.h
+b07eb837f5d883ab7e95b62882281e0f  gcc/tree-vrp.c
+e63a58d04d50a799998b1cc7d23609f7  gcc/tree.c
 3b971f9d72f052ea9a5fb6c32f6f9e34  gcc/tree.def
-0a5666325f0cd0535278735908559c65  gcc/tree.h
+9f533ff7502e6b3c8ea114b31a7e9309  gcc/tree.h
 c1549110ae4675e04b97bd68b4d59a32  gcc/treestruct.def
 f8da8bc6127f943f29fc1237e2806e29  gcc/tsan.c
 de06e1e7c04c8221fb7bb5b03eee0230  gcc/tsan.h
@@ -46958,7 +47177,7 @@ a0a93692959fceb6a4b63e535406bce6  gcc/value-prof.c
 be46f6bce22394dbb40a2ccd3e1d418e  gcc/var-tracking.c
 ff896ccaa225789c402604a012a30c32  gcc/varasm.c
 f43ce19a1d9f849b6753808ae1b964bf  gcc/varasm.h
-e7fd151858e94cde21b44463abecf853  gcc/varpool.c
+e468a68466ed0873d8b5bb1a9777ff24  gcc/varpool.c
 06d4f9a4e63450e5e1c9506b8616c387  gcc/vec.c
 03ef3ad6f5ef2d3d1ea3e6b8ae490d1e  gcc/vec.h
 b9595435606442955f515535078caa52  gcc/version.c
@@ -46971,13 +47190,13 @@ bbeefce8f25a073319ef53f9a55e2583  gcc/web.c
 4dcd1437e2deaaef2853f093217fc063  gcc/xcoff.h
 28db814d54aae5436666bc9547b4cf0c  gcc/xcoffout.c
 95e7984ae2ae01abd915f524df765a2b  gcc/xcoffout.h
-c8be2196710d4694717387826fd1850b  gnattools/ChangeLog
+c0722c0f0f883a7971f1f20be6097f09  gnattools/ChangeLog
 692322cbac4dbf19144764e4486b9f54  gnattools/Makefile.in
 41b96b7921d11e52b1d8465ea57136ad  gnattools/configure
 a73c18d8f44ab8bc3e71c3d530fa603e  gnattools/configure.ac
 59530bdf33659b29e73d4adb9f9f6552  include/COPYING
 d32239bcb673463ab874e80d47fae504  include/COPYING3
-de508de3a6aec02d0e04a0ce87355f5c  include/ChangeLog
+89bacb33918388be072c8d2b23c53442  include/ChangeLog
 4263432a72ff47ed8bf420208ee7eea5  include/ChangeLog-9103
 20f67b536f003da196c4e0e36c829fcf  include/ansidecl.h
 8c1a1603cbd7447bde95d9ae8723f232  include/demangle.h
@@ -47012,7 +47231,7 @@ e34d525d7faceda0dd5cb3eae49c1548  include/timeval-utils.h
 0294cecbb1f66d640ccba3a5d862d05b  include/xregex2.h
 f648a66ed08e079e26a24c4346a3ba03  include/xtensa-config.h
 0afce91a3daa1fdc32ee36370c1129dd  install-sh
-f7609bb103efb231f6aee59ed7c638b2  intl/ChangeLog
+c340a6027b5bb839e7fd81f2672e95f3  intl/ChangeLog
 cad1d6fab2274517783de7433c0faa74  intl/Makefile.in
 6ec998bb4716c744bf8185e607f69301  intl/README
 76ca170a525d5b84d90f0478fe788931  intl/VERSION
@@ -47054,12 +47273,12 @@ d50a8c6c5b41089930accbdce767d3c0  intl/plural.y
 b4758a0194e3e41362b939911472ce62  intl/relocatable.c
 bedade7bcfc3bc5eb09a2c6844f637f3  intl/relocatable.h
 43f287d082528203fc85c1d2d81bf30d  intl/textdomain.c
-f6502cd1f6a829d202c2305b928665aa  libada/ChangeLog
+95a74939a99a60c0068877fb5c65fe01  libada/ChangeLog
 205ed97dd66c9e8078c99311e25b584d  libada/Makefile.in
 8efb9115b70b2aa70c7db10862f7b2f5  libada/configure
 6433b3fb1e942dd2597541b21eb8be0f  libada/configure.ac
 46d3fe6da7a771cc2d5420c4137a6861  libatomic/.gitignore
-9dd61f097c671a04b0edfedd77f8cfad  libatomic/ChangeLog
+7770dc2abf69beac14080f078cb2339f  libatomic/ChangeLog
 bf2b737497af89020096e79749ced1a6  libatomic/Makefile.am
 46bea738c735828c2e94c7f71122785e  libatomic/Makefile.in
 f7853b06953072a9987a45a5b00782d6  libatomic/acinclude.m4
@@ -47137,7 +47356,7 @@ c03a072efac9b30f8f8429ac52fd246b  libatomic/testsuite/libatomic.c/atomic-store-3
 8a7308fda7ed1543cb9e3be0f8e47bce  libatomic/testsuite/libatomic.c/atomic-store-5.c
 cce610fe1b2413dc6f097cb40816e9e8  libatomic/testsuite/libatomic.c/c.exp
 97b0c9cdfcb733664bdf4efe0f5dc449  libatomic/testsuite/libatomic.c/generic-2.c
-a1f6c36fefc619da897ac9060b272016  libbacktrace/ChangeLog
+875f7c031ff8f59682ac6c6b4c7c2dd3  libbacktrace/ChangeLog
 6af6c9838d1737a87529f290a49f863a  libbacktrace/Makefile.am
 10502b510e3bb652e63f65eab6326c9d  libbacktrace/Makefile.in
 1987c0495aeee1bc47709f399772173b  libbacktrace/README
@@ -47156,7 +47375,7 @@ aa0d3848ac3020cb6562c1c923da293c  libbacktrace/dwarf.c
 5badd67d5362a883d02092d992e2c605  libbacktrace/fileline.c
 4c73c8c2d1aba3b0c421e8b8e163b7ed  libbacktrace/filetype.awk
 16977003b6cf9fba62ceb490ea19f074  libbacktrace/internal.h
-41d56b65744d5a34a78cf347f1f93225  libbacktrace/mmap.c
+6940c5afbd9fa8c0932aa32f75836141  libbacktrace/mmap.c
 b0a8eab539202706059b1cbb305d132e  libbacktrace/mmapio.c
 86e7417bbd63c38c6f30058e4d2f7bd8  libbacktrace/nounwind.c
 915162e3a8fae0ff20d7e9232030a49a  libbacktrace/posix.c
@@ -47167,7 +47386,7 @@ d15ef1908e6651517fa16aca5927444f  libbacktrace/simple.c
 1c31e53190ed9e49127ac9a1b8c9dec9  libbacktrace/state.c
 7150f898c2b02b634d0f176a1d322385  libbacktrace/stest.c
 41b3b24b264c530417d7b6970d7af429  libbacktrace/unknown.c
-6a9b484426d5c40e4fb851c591bf42eb  libcilkrts/ChangeLog
+744f4e563ce155edded27dc0df7a8579  libcilkrts/ChangeLog
 44e8fbbf5f5fdcf45b8dc268c303f4cc  libcilkrts/Makefile.am
 9e82ac68701a059f6122da2b42d5be43  libcilkrts/Makefile.in
 4a307b1474cad63768b2ae0c183b6259  libcilkrts/README
@@ -47275,7 +47494,7 @@ d4a2c447aba3e1afe4e9522d132a2e62  libcilkrts/runtime/symbol_test.c
 94c538f9a3100a27649a9dc4d63d1677  libcilkrts/runtime/sysdep.h
 ffd8820979e88b4845e4b6ae604d2fdf  libcilkrts/runtime/worker_mutex.c
 9af2df6acad19a2001c2b1f68f5f59be  libcilkrts/runtime/worker_mutex.h
-0b6c3d6e8e0d7fe2e36c3a5fce04b44f  libcpp/ChangeLog
+b61fb01fc9d8c8c8d75012c2fcdf8a63  libcpp/ChangeLog
 07c1fdaef120cbf7edafa33ab3e0a20f  libcpp/Makefile.in
 7307c791a8de641ef6dada9a179ece57  libcpp/aclocal.m4
 d19e8274ac720426c1d890feaa695d2b  libcpp/charset.c
@@ -47295,13 +47514,13 @@ b38b6724cd6b6f363a6a43aaf16f31d7  libcpp/include/mkdeps.h
 14697b3989b853bc975d8031495a37ff  libcpp/include/symtab.h
 ab1504e880a258c78a15e3a6de24f9a0  libcpp/init.c
 e4beb80693183cdc4c98bef23dea2fc9  libcpp/internal.h
-360ef2ee5dad5d6b40c8d48cdc923d8f  libcpp/lex.c
+91737a79365ff906cad63f5c1d681190  libcpp/lex.c
 ae8eb46c3ad0c5e352fd21eed18adb3e  libcpp/line-map.c
 a3b42e84107cbc10045e964837492e97  libcpp/macro.c
 e5e6e60c02d9485ec697dd4f781e5444  libcpp/makeucnid.c
 2b26a65df760b88805e260d6da1b8586  libcpp/mkdeps.c
 eced0388fb8c787f6ddc4e261432d411  libcpp/pch.c
-76f3706394bf44814a3cdbc90019ec94  libcpp/po/ChangeLog
+24a8966c2132466c5125561150511455  libcpp/po/ChangeLog
 54906a88ab7fcfdf317421cf7c4303bc  libcpp/po/be.gmo
 ecad891effc5c3a27a61d3faa8aee068  libcpp/po/be.po
 5df92306df1918b63b8969719b670bf7  libcpp/po/ca.gmo
@@ -47351,7 +47570,7 @@ bdd5c54bb19a0a1bb3f4b91b4eec3e15  libcpp/traditional.c
 0852e16675aa93396c6b42956dff1af3  libcpp/ucnid.h
 c8500dcd582950cb6ed628ffc84e2c09  libcpp/ucnid.tab
 a6c2b3de06c7424706b16f4c206396a1  libdecnumber/.gitignore
-5d5f20deda36cc7c29ce1b85c661257e  libdecnumber/ChangeLog
+5dc6fbe6979ae9ce83b1fa3aac2ebb9b  libdecnumber/ChangeLog
 3b84e93d037a889256842da6a8b66418  libdecnumber/Makefile.in
 2746a1155d319a2cda823ee5b58921ce  libdecnumber/aclocal.m4
 3ee16b60b2f53df578443d0a2e076824  libdecnumber/bid/bid-dpd.h
@@ -47413,7 +47632,7 @@ a97c47969dfc92a7666dfe3c2e1e1448  libdecnumber/dpd/decimal32Symbols.h
 1d6434525d5b6fae13c2e8a996121a5e  libdecnumber/dpd/decimal64.c
 6b20f17b6f453b9ee65b87eb01d119d7  libdecnumber/dpd/decimal64.h
 0f6db29710e7075c2fd62bc4478b3b8d  libdecnumber/dpd/decimal64Symbols.h
-97b2cad4bc8d301d14fc1926d6026f75  libffi/ChangeLog
+39b2737f5a0ee5458284da5922301af4  libffi/ChangeLog
 ba66fc19311348d373ec271be939a659  libffi/ChangeLog.libffi
 fbbc216bc25d759a72ea3e6d734af56b  libffi/ChangeLog.libgcj
 d946d2b97454ad50a1dbfbf48923c5be  libffi/ChangeLog.v1
@@ -47690,7 +47909,7 @@ d47c79b281339983862a8e52d8c73f0f  libffi/testsuite/libffi.special/ffitestcxx.h
 291be426192f460f6a07dfe1c96ab094  libffi/testsuite/libffi.special/special.exp
 93fc3ea311b79f64004992807ce75d1e  libffi/testsuite/libffi.special/unwindtest.cc
 185d0795017fbbe253a13db8e34085f9  libffi/testsuite/libffi.special/unwindtest_ffi_call.cc
-1235a9bc441affc877d2c91c634ce0b1  libgcc/ChangeLog
+36ff3e7f2290d495372417ef770bfd1f  libgcc/ChangeLog
 7f58014cfac96f94d81457205c18c223  libgcc/Makefile.in
 4575e60db0c36a906ae99acf805a0550  libgcc/config.host
 25a291c353009228fc85e36e91e64c08  libgcc/config.in
@@ -47777,7 +47996,7 @@ b61fd5dd5e7cbd99ee040cacd3055ec6  libgcc/config/arc/ieee-754/truncdfsf2.S
 27de1ebbc2f12b5b9a8e6e0460fb3d9c  libgcc/config/arc/t-arc
 1c6498366e09d27eef3cc5443272b299  libgcc/config/arc/t-arc-newlib
 0e6e6e67c1465c6e8f00f3f1d0dd213f  libgcc/config/arc/t-arc700-uClibc
-f05865a040b0a8d835ff6c71e964a360  libgcc/config/arm/bpabi-lib.h
+69d95f104130cbb3227704dfd4ea75dd  libgcc/config/arm/bpabi-lib.h
 a69ec893b0e4432944938ba962a122cf  libgcc/config/arm/bpabi-v6m.S
 9c293f92f2c8aa994c222af1c87179e0  libgcc/config/arm/bpabi.S
 39cd0b4384ba52c9517c6548457950e5  libgcc/config/arm/bpabi.c
@@ -47792,7 +48011,7 @@ fb587bfcbf0c13179a375bf6d3b7b661  libgcc/config/arm/ieee754-sf.S
 22d94e88e335f7671d36a7cd9912ce14  libgcc/config/arm/linux-atomic-64bit.c
 c00d8958faf55dcb0b1e5eacbe7f1d5f  libgcc/config/arm/linux-atomic.c
 df5b9082304d460b3f9c51c48122b5b3  libgcc/config/arm/pr-support.c
-0b424e73df344bd79e7ed7753abff90f  libgcc/config/arm/sfp-machine.h
+131990bf9b0a8ab71c7abf0c49d4fbfa  libgcc/config/arm/sfp-machine.h
 f47aea1fef6da35621bca9a9b47656d4  libgcc/config/arm/symbian-lib.h
 6f46bbbd9e7334a061e6dae05c1319b2  libgcc/config/arm/t-arm
 95ccb8d9807e7229274f546d4664a038  libgcc/config/arm/t-bpabi
@@ -47946,7 +48165,7 @@ d1337b28acd8dbde9817492f9027dbc3  libgcc/config/i386/64/sfp-machine.h
 1ad8379325b99afa4e196e92cf5a5aba  libgcc/config/i386/crti.S
 a57fb755601c047971e04689034ff273  libgcc/config/i386/crtn.S
 c2535975d467d390b827e21ee7f9a2d3  libgcc/config/i386/crtprec.c
-678c48b2cd8358306d0c6998bc9e6c06  libgcc/config/i386/cygming-crtbegin.c
+381536838c868685bd0f2abfa9f81af2  libgcc/config/i386/cygming-crtbegin.c
 e7b956200c902115a507718a103cf015  libgcc/config/i386/cygming-crtend.c
 cbd36f1edf69f15bf49d0044d38663b5  libgcc/config/i386/cygwin.S
 8e657583537e83d8cc15822e9ade5eae  libgcc/config/i386/darwin-lib.h
@@ -48026,7 +48245,7 @@ cc6abfc50842e2a704659fc8ca890750  libgcc/config/ia64/unwind-ia64.h
 983913088848c37426464c44ed30f389  libgcc/config/ia64/vms-unwind.h
 7a56469ad10b7c48767dcf3b22434e61  libgcc/config/iq2000/lib2funcs.c
 102f7dad8ad6b54434a1b8313d1e42c4  libgcc/config/iq2000/t-iq2000
-70ba4bfcb9368d51ca67e556d79a8abe  libgcc/config/libbid/ChangeLog
+88069328225f4c5b784f281ff87face6  libgcc/config/libbid/ChangeLog
 bd427e604ec5104368c49c5babee0027  libgcc/config/libbid/_addsub_dd.c
 e60ac20c51a4ad903984450529a1f0e9  libgcc/config/libbid/_addsub_sd.c
 9ce300999fc3b8a8a9a5d57b1d1deb0c  libgcc/config/libbid/_addsub_td.c
@@ -48282,7 +48501,7 @@ f35464ee3fe73ceda8fe19215986cb83  libgcc/config/msp430/lib2divSI.c
 47f595c301c0de6db734c8f30450e180  libgcc/config/msp430/slli.S
 76a5c501498c92789a5019b5dbfd4b2d  libgcc/config/msp430/srai.S
 67eb4bb44496978c58eeecca36f78971  libgcc/config/msp430/srli.S
-71f9923a59ce99387110cf16cdc70375  libgcc/config/msp430/t-msp430
+ebdf0bda076e781cccd9503b489f6ffe  libgcc/config/msp430/t-msp430
 24223486f1047780652dad7c2b11113b  libgcc/config/nds32/crtzero.S
 25766e41a9f7032fb9877f6a8f85d785  libgcc/config/nds32/initfini.c
 3309bb3bd0d0a83f2e308d032c9803a7  libgcc/config/nds32/isr-library/adj_intr_lvl.inc
@@ -48785,7 +49004,7 @@ eb3161bf886026cdcf8a78cea885fdd2  libgcc/config/t-openbsd-thread
 429659ae1ff2531e3ba2fd0c676a320d  libgcc/config/t-slibgcc-hpux
 229ab2f70a4aaaf97e2261ec00dc4497  libgcc/config/t-slibgcc-libgcc
 b5d3fe85dff400a82befa6b901b438ec  libgcc/config/t-slibgcc-nolc-override
-98c72042b97ae21a42e646d80bd3a4fb  libgcc/config/t-slibgcc-sld
+7324b7b2d5416a7ab9bd659184c79194  libgcc/config/t-slibgcc-sld
 39082f76e7ff28af867afdb6b93b1891  libgcc/config/t-slibgcc-vms
 db7f1ee69a9d522e5199b4474c5ff1cb  libgcc/config/t-softfp
 72f41afb67b3c3c67809819763244452  libgcc/config/t-softfp-excl
@@ -48982,7 +49201,7 @@ e32c5653df9e5c5b602b2a6e6ddeaaf1  libgcc/unwind.inc
 7e5de74bf98e12bb4afb927d0c5d69c3  libgcc/vtv_end_preinit.c
 1c9bb66910761539ddc5ff002e70c272  libgcc/vtv_start.c
 868ca421eb9feaef7af922f89533ec54  libgcc/vtv_start_preinit.c
-22dc2014a415529e7d8004ae8c1b91b1  libgfortran/ChangeLog
+aa381e68a48b616462e4e99160c07012  libgfortran/ChangeLog
 9aca36338382e5b4b730e7779170b24d  libgfortran/ChangeLog-2002
 80d3edc880c2da0b7a2beec2e2c4f774  libgfortran/ChangeLog-2003
 9f0239429993a5e64ed793eb6c55a5c1  libgfortran/ChangeLog-2004
@@ -49538,7 +49757,7 @@ a108bc5517294552e22dc2e360f1198d  libgfortran/intrinsics/chmod.c
 9de0a8e2d1cade6367a4d31644c10a7b  libgfortran/intrinsics/clock.c
 d71a656fcde539b83446162276d1bb62  libgfortran/intrinsics/cpu_time.c
 ae946dafd409ca379c0855f90fa53cf8  libgfortran/intrinsics/cshift0.c
-d6b4eb6cb1c8a35729e47daffda35f74  libgfortran/intrinsics/ctime.c
+6fa5e66ac6ba5d6a81527a077490a25e  libgfortran/intrinsics/ctime.c
 b827d4f4acd4f0a9c746d9551a430d57  libgfortran/intrinsics/date_and_time.c
 268b7f00782746fd5de7860c0fcc09c8  libgfortran/intrinsics/dprod_r8.f90
 67a5fb3f13f0817c80390d84fc7b8c4b  libgfortran/intrinsics/dtime.c
@@ -49603,7 +49822,7 @@ c287df298776a437b3a48419c86b4645  libgfortran/io/format.h
 3265147203606b7bad62e5d2908f9869  libgfortran/io/inquire.c
 040686ca709c2eb8e86ffe443d3fd8d6  libgfortran/io/intrinsics.c
 c35833ba6b9b23bdef8de6e70635aea9  libgfortran/io/io.h
-fc91f07e504c9261c0d49f9d39a14a4c  libgfortran/io/list_read.c
+0d3ffd29f6646e412bc51a6f195371f3  libgfortran/io/list_read.c
 f0b41e3bb3904d863aec0780e95d876c  libgfortran/io/lock.c
 d7d4ed433bf1c8a869ae50ddb62b42f9  libgfortran/io/open.c
 7f0a9a12949149a87ba70a272df7d9db  libgfortran/io/read.c
@@ -49611,7 +49830,7 @@ d7d4ed433bf1c8a869ae50ddb62b42f9  libgfortran/io/open.c
 0cec0394c4855ce26165f498b52379bc  libgfortran/io/transfer.c
 f936c3b00e7e8e0a02a6295e7b0f27c2  libgfortran/io/transfer128.c
 cde532cf9943fbd5c2aee09a9e745fb1  libgfortran/io/unit.c
-511039c57c0fad796caac8498d2477e1  libgfortran/io/unix.c
+0bf46fbcca9ef7c6659d267dffbb6406  libgfortran/io/unix.c
 77d75641d66ddd858c2323836d22c224  libgfortran/io/unix.h
 c1bcf58817c5f55c9e7bd75ac50bc712  libgfortran/io/write.c
 f6c291d3d0197f2bd00b964dada60450  libgfortran/io/write_float.def
@@ -49694,7 +49913,7 @@ b2ad6bfcfd1503c2084c749a616619d5  libgo/Makefile.in
 0e3a2fb357762bdec163fe51ccb1e951  libgo/README
 d46376034c1fd6df47c8ba2cd5de9d0a  libgo/README.gcc
 7281cb4b7a426e299beb22a3191d79c3  libgo/aclocal.m4
-2006458cea7d8eb986fc19fb9ceafac4  libgo/config.h.in
+636bde47828341ba6e598a0f281167cc  libgo/config.h.in
 ad1ce707d70b18d5d14bdbcfef82a9bb  libgo/config/README
 9a6e33ac95f7d5857d34f53bde4cb610  libgo/config/go.m4
 0dbf51539b4d117324c49e2410a7868e  libgo/config/libtool.m4
@@ -49703,8 +49922,8 @@ dee72a6a60e99528b0d17bf3ff9a1e15  libgo/config/ltoptions.m4
 bc2f6032c98896249eadb56177c7d357  libgo/config/ltsugar.m4
 c30cd33c496505f13d9fbdb6970c7c33  libgo/config/ltversion.m4
 293853a13b7e218e3a4342cf85fbbf25  libgo/config/lt~obsolete.m4
-1abd9bf3e0611da88226a02318dfba20  libgo/configure
-fe865d95bef24266c89e3d2724ebbd6a  libgo/configure.ac
+292416f1fc0ab677291a1094cac27c28  libgo/configure
+56d57ca3e961e4f201130d371bdd3274  libgo/configure.ac
 1ef809eec8a49a2eca44b613eaf9847d  libgo/go/archive/tar/common.go
 45655d3df8e304b659bb098fc9006e94  libgo/go/archive/tar/reader.go
 e432f7705cc613af1419f6c711089511  libgo/go/archive/tar/reader_test.go
@@ -51025,7 +51244,7 @@ bd8fc56eab9b633e58128083caf5df5f  libgo/go/unicode/utf16/utf16_test.go
 d2c0f0166aa2cc63cec3270b5fa1d3e2  libgo/go/unicode/utf8/utf8_test.go
 8e700e99e52bad7f8289006b7bd149d4  libgo/godeps.sh
 8bc70efd6d9c1c8ba1e6df79a2241516  libgo/merge.sh
-b3f8c2f9a46ec559581ca9e007ca3c4e  libgo/mksysinfo.sh
+27ae1fdf2b91e9664d6b1e923a866af4  libgo/mksysinfo.sh
 06b0ddfbd036dbdfdf8c4c7efb8b746f  libgo/runtime/arch.h
 0d727dcfb3816731f56f174e8cbd29eb  libgo/runtime/array.h
 d539a7523f322c7b10a6e934c5fa16e6  libgo/runtime/chan.c
@@ -51129,7 +51348,7 @@ e89e0219aa4c38b5be8fcfe859855033  libgo/runtime/mfinal.c
 ec646d3074384118062135dba38d8e0c  libgo/runtime/mfixalloc.c
 66424704bf902fadede61a48abf430c1  libgo/runtime/mgc0.c
 8814b7062f80a4c061b106b2c9c7c1bd  libgo/runtime/mgc0.h
-25280d2578cb621c0a1a4808f3f0e792  libgo/runtime/mheap.c
+e66170fdb4388b7e18851ec4e3dd0b29  libgo/runtime/mheap.c
 b97eeb7e3b957b7fb4f671642734023a  libgo/runtime/mprof.goc
 d15b2c21437b787c0d0e98b9a9740108  libgo/runtime/msize.c
 c4ce56193babb313ea7bb80c882173e0  libgo/runtime/netpoll.goc
@@ -51140,7 +51359,7 @@ dfa78a02a5d317855831a363c6f6b82c  libgo/runtime/netpoll_select.c
 1b99484119160ad9d9cb5cc381d5b7ae  libgo/runtime/panic.c
 01541a76054b816f6c8c5558143ef68e  libgo/runtime/parfor.c
 3eafca6e0006b08920b178c1ca9ee121  libgo/runtime/print.c
-be088933873b3586b23b5492859ccabf  libgo/runtime/proc.c
+a79bd15b7ad910aef1bfe2ebfdf97c64  libgo/runtime/proc.c
 f8a80dccc77238f938943b1e8191e2b1  libgo/runtime/race.h
 f3043edb6d3f3dec7c3d18064c9a2f46  libgo/runtime/reflect.goc
 88236bd9baaae0e22c2fe3c097d9cfbf  libgo/runtime/rtems-task-variable-add.c
@@ -51163,7 +51382,7 @@ c95a6cc35511a2183eb5b480fa8ae836  libgo/testsuite/Makefile.in
 207f334413c982763e10e994230fefbf  libgo/testsuite/gotest
 578a4705035f5cbb8425f2e2eb75a433  libgo/testsuite/lib/libgo.exp
 6df485581d2f02246f41b5ca46f5bb5d  libgo/testsuite/libgo.testmain/testmain.exp
-050c8bb88f970bea2fa92a4c08d9fa17  libgomp/ChangeLog
+7763044a5f66fe9f9c25c52d0f70e98c  libgomp/ChangeLog
 0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
 0b707c40cd3236f294bcd8a5bcead00f  libgomp/Makefile.am
 d538a08bffc033de3bd6ab6000ee2091  libgomp/Makefile.in
@@ -51222,17 +51441,17 @@ cd992e3cb72acf469ea9463e733d19fc  libgomp/hashtab.h
 033ba0d8f9cd68151cebebf17bf33589  libgomp/iter.c
 5f2f63229277fb78ee8308c045d7b476  libgomp/iter_ull.c
 1f693ed86e1282c2307d65c71055023e  libgomp/libgomp.h
-576982b551550b2fd60e8132ca5891e5  libgomp/libgomp.info
+cb364fb5e2911a114c03ff5088059936  libgomp/libgomp.info
 6cbe48d155b1725f5e32de30d5daedb4  libgomp/libgomp.map
 8b2aa50aecad82171348a6918309afd6  libgomp/libgomp.spec.in
-dce36ef18f99dd59489caa7388103c55  libgomp/libgomp.texi
+57242f2ada25ede0584dba75bcb07620  libgomp/libgomp.texi
 19cd0ff067db126556be252f2c754934  libgomp/libgomp_f.h.in
 23a87a355a8dd0b8bd4c15174738b461  libgomp/libgomp_g.h
 ddd43eaec8e3214ed28a1fb346758714  libgomp/loop.c
 aa0f0b8c12c665d06664bf1efc315be1  libgomp/loop_ull.c
 b41bce1b1aadda6779b912891eba1906  libgomp/omp.h.in
-7c977650212bd2f23070bdffc0eda075  libgomp/omp_lib.f90.in
-7443cac321c74f24354ce00172e01ec3  libgomp/omp_lib.h.in
+1205ac703dbb7f8c65a0d9cc655afe4e  libgomp/omp_lib.f90.in
+9a991ce228c7ab6290f86b0b3265629e  libgomp/omp_lib.h.in
 30ceb3811741e12322b00026bbfdf1e5  libgomp/ordered.c
 47c08ff69d5d9d3b173bd58c96f13a21  libgomp/parallel.c
 368e6e721ed45c2c90d7396d4ed21bad  libgomp/sections.c
@@ -51251,8 +51470,8 @@ ba5ed16a48b3a78511b4913cdd4d7617  libgomp/testsuite/libgomp.c++/atomic-1.C
 5562ceebc0054102930e3944e3d8cea0  libgomp/testsuite/libgomp.c++/atomic-11.C
 60fb93a6f619d4375a1224303e0884ea  libgomp/testsuite/libgomp.c++/atomic-12.C
 a56e4a1dad7c21fecfbf5dd26cb1f86a  libgomp/testsuite/libgomp.c++/atomic-13.C
-63da250a39155cc5c2679f50bafe413a  libgomp/testsuite/libgomp.c++/atomic-14.C
-998d78d48199bf9a944cf00743b4f08e  libgomp/testsuite/libgomp.c++/atomic-15.C
+f5aa3b6a543d3042289d53904701574b  libgomp/testsuite/libgomp.c++/atomic-14.C
+156c6a231b71803eea67391fb8826eab  libgomp/testsuite/libgomp.c++/atomic-15.C
 11dca764f708d500baba4ceaa6de9b54  libgomp/testsuite/libgomp.c++/atomic-2.C
 ed304e6a8199d4a60a7bb4acd1a4f4fc  libgomp/testsuite/libgomp.c++/atomic-3.C
 f944acede3f9beeaf281ef9282c0ff44  libgomp/testsuite/libgomp.c++/atomic-4.C
@@ -51289,7 +51508,7 @@ e4c259ceb3f0850ee4a9c2d8db93fa19  libgomp/testsuite/libgomp.c++/ctor-6.C
 cf8630c02b905d98e08a439066bb9815  libgomp/testsuite/libgomp.c++/ctor-8.C
 0bd7fe39119bfc0574561c1e381edc5b  libgomp/testsuite/libgomp.c++/ctor-9.C
 e1ee4867ce68141a641f925070e14fdc  libgomp/testsuite/libgomp.c++/for-1.C
-a669a7a87be033fa10ce5831ba56bd7b  libgomp/testsuite/libgomp.c++/for-10.C
+325a8a87e18b89a296100f50ff483415  libgomp/testsuite/libgomp.c++/for-10.C
 dfe85033dffc4c50dfe322315583cac7  libgomp/testsuite/libgomp.c++/for-11.C
 b64542faf55a399e300d1e45dd199dea  libgomp/testsuite/libgomp.c++/for-2.C
 ea264f143b0032900269cff3dd21e0cc  libgomp/testsuite/libgomp.c++/for-3.C
@@ -51346,6 +51565,11 @@ a1833069552b16c28ced3f3d98d919bd  libgomp/testsuite/libgomp.c++/reduction-4.C
 4c94d5cac60e507291540a0f2e3436c1  libgomp/testsuite/libgomp.c++/simd-6.C
 56e5a5def81a4763b39f8f8ea0468a5e  libgomp/testsuite/libgomp.c++/simd-7.C
 5e39603f7135e44a8a4eddc2486914e0  libgomp/testsuite/libgomp.c++/simd-8.C
+e7079692a564dbf5ba9a4e6b88667164  libgomp/testsuite/libgomp.c++/simd-9.C
+efbd2e4864876ba2f991a788cf935827  libgomp/testsuite/libgomp.c++/simd10.C
+25dbd1440a09a94fee9305462af883ac  libgomp/testsuite/libgomp.c++/simd11.C
+4943afa1e0250f27fcf341e04af0c9cb  libgomp/testsuite/libgomp.c++/simd12.C
+96c3fedeca45853d33c4b89a99b13bf7  libgomp/testsuite/libgomp.c++/simd13.C
 989f18f6eb61c820627dc227d206e00d  libgomp/testsuite/libgomp.c++/single-1.C
 fa90d4613f21c2fc2203f662585b40a3  libgomp/testsuite/libgomp.c++/single-2.C
 7d0f24f8edab30e9e5aa2d3f5133e9f4  libgomp/testsuite/libgomp.c++/single-3.C
@@ -51405,7 +51629,7 @@ b5f7bab4126564eb440b88c3b697d94b  libgomp/testsuite/libgomp.c/atomic-13.c
 85ee71c5eb239b17bb9095c68fbcb661  libgomp/testsuite/libgomp.c/atomic-14.c
 33127ad11444516f01f50d3c91a2f1d6  libgomp/testsuite/libgomp.c/atomic-15.c
 6f72ee0577bc6156aa5c8df3b6419bbb  libgomp/testsuite/libgomp.c/atomic-16.c
-0ad9f2e3d666958d47ff539a07b4b3e4  libgomp/testsuite/libgomp.c/atomic-17.c
+0ab38a97361e81570c040a605673de79  libgomp/testsuite/libgomp.c/atomic-17.c
 b2cad381aa4dd3db0ef4c2a7e632baf1  libgomp/testsuite/libgomp.c/atomic-2.c
 b0fbce555e04a1378026d70e19942300  libgomp/testsuite/libgomp.c/atomic-3.c
 55ed566464c81304a5007804570816ec  libgomp/testsuite/libgomp.c/atomic-4.c
@@ -51437,8 +51661,8 @@ de1b3aba7d6f4f22f41698059f92139b  libgomp/testsuite/libgomp.c/depend-3.c
 eee3a5f96082366f174ca0d6447da3d9  libgomp/testsuite/libgomp.c/depend-4.c
 6658653ddd5ca0b2b531abd1158e9371  libgomp/testsuite/libgomp.c/for-1.c
 c8a38164050e9ce322ff7c77a9f0f96c  libgomp/testsuite/libgomp.c/for-1.h
-4ba00234487347368a6840b472021871  libgomp/testsuite/libgomp.c/for-2.c
-afbaf65a5d3f8a65a3bd27fe69af97b7  libgomp/testsuite/libgomp.c/for-2.h
+41fae244753e1767688f062024db0e24  libgomp/testsuite/libgomp.c/for-2.c
+2cf8aa5f45f0ddc2da9d951ba4897c71  libgomp/testsuite/libgomp.c/for-2.h
 a2c7676fd46d069ce39b4d8a7c16ba5d  libgomp/testsuite/libgomp.c/for-3.c
 00d45ed4a463f0629d2d21a38fe0073a  libgomp/testsuite/libgomp.c/icv-1.c
 6619bda92e7a29f372b1a0bc19ef2c79  libgomp/testsuite/libgomp.c/icv-2.c
@@ -51454,6 +51678,7 @@ eedf4ded48f258d9de2bce91fae39374  libgomp/testsuite/libgomp.c/loop-12.c
 683302cd2c348c750020ecdfcfa8c7de  libgomp/testsuite/libgomp.c/loop-13.c
 81cd8a77c25ea49d08f07250f984f35d  libgomp/testsuite/libgomp.c/loop-14.c
 dffc3aabaa5b2461aa560fc66c80c0fe  libgomp/testsuite/libgomp.c/loop-15.c
+8257d204f0bf53b53ae5433dcee92216  libgomp/testsuite/libgomp.c/loop-16.c
 fcf0b70da92fc55e6cdd5d1a77923dc3  libgomp/testsuite/libgomp.c/loop-2.c
 2d311b74a086fbde01cc1251018f8c89  libgomp/testsuite/libgomp.c/loop-3.c
 3e1854d7c928c20929261995df919755  libgomp/testsuite/libgomp.c/loop-4.c
@@ -51546,11 +51771,22 @@ aed7e36c7c93e3badbbf11beaf753207  libgomp/testsuite/libgomp.c/sections-2.c
 6059443919441f3c8acfe62439b65044  libgomp/testsuite/libgomp.c/shared-2.c
 7b472060fcdfa5aa072be093a71d8d41  libgomp/testsuite/libgomp.c/shared-3.c
 d687c7ee2b97ca318eb2cbe2d9e32923  libgomp/testsuite/libgomp.c/simd-1.c
+d584069147624aaa771a8fbe26a34b92  libgomp/testsuite/libgomp.c/simd-10.c
+4b97c8d0be63a89338a88d29f5f0fbad  libgomp/testsuite/libgomp.c/simd-11.c
+e2fb02a03879cc3eefcf136169a6aa04  libgomp/testsuite/libgomp.c/simd-12.c
+6d5662514cdcb1fa1445426457b8795a  libgomp/testsuite/libgomp.c/simd-13.c
+b6e3d868c2031082285e4d860a3d50a2  libgomp/testsuite/libgomp.c/simd-14.c
+873b738f8e15236955d11bfcb97f6032  libgomp/testsuite/libgomp.c/simd-15.c
+027b30720640c006221c9b4acfb8c976  libgomp/testsuite/libgomp.c/simd-16.c
+91a244fceb3e523fe73360a1817b9d6d  libgomp/testsuite/libgomp.c/simd-17.c
 d825417b8e2624e2972edaefb1333efd  libgomp/testsuite/libgomp.c/simd-2.c
 92361ad7427a9ea00af35e9e86485641  libgomp/testsuite/libgomp.c/simd-3.c
 8d5767814fdf98dacd112725c1647994  libgomp/testsuite/libgomp.c/simd-4.c
 91b5ed7d04f7567188bdb6f72bf88c56  libgomp/testsuite/libgomp.c/simd-5.c
 da6350b2bde6abd3e194167a5b3eb74f  libgomp/testsuite/libgomp.c/simd-6.c
+f7ffd498a19cadfe20b0cbe2bd4e62f1  libgomp/testsuite/libgomp.c/simd-7.c
+9bb4ef88871b44e41ac2f641b409f04a  libgomp/testsuite/libgomp.c/simd-8.c
+b898403c47aaf9326713abfd2c7ed020  libgomp/testsuite/libgomp.c/simd-9.c
 21b382f164a90f3510cb97d72b5288b0  libgomp/testsuite/libgomp.c/single-1.c
 f96d46491425528d3d7b30c80c64952a  libgomp/testsuite/libgomp.c/single-2.c
 a3d6465fcc15265d1c049a81027ae8db  libgomp/testsuite/libgomp.c/sort-1.c
@@ -51561,6 +51797,7 @@ b7efacf79d1aeccedabb2bb25be9f758  libgomp/testsuite/libgomp.c/target-3.c
 4ebf32f910116d66ca9d291de6853ff9  libgomp/testsuite/libgomp.c/target-5.c
 478dec9f49fcb1b67e9fe82cbb95d254  libgomp/testsuite/libgomp.c/target-6.c
 6e8611e391b050b0df3fb173cfc1fc67  libgomp/testsuite/libgomp.c/target-7.c
+daf22b86ee42ffc308b6a344aea724e9  libgomp/testsuite/libgomp.c/target-8.c
 05e0040fe890c467b6069b850ae3a252  libgomp/testsuite/libgomp.c/task-1.c
 b07f3ce8ad8f8edece7624d18f5d154d  libgomp/testsuite/libgomp.c/task-2.c
 f7ff00e5f2a30832f7f427c91fa1f61b  libgomp/testsuite/libgomp.c/task-3.c
@@ -51574,7 +51811,14 @@ b467375fe1cd3ce78d417aeb33f9f364  libgomp/testsuite/libgomp.c/thread-limit-2.c
 4e04bd947e2e4aa6b0d33535232575a6  libgomp/testsuite/libgomp.c/udr-2.c
 26a632a90e3b65f74ab6b734c3fd0d94  libgomp/testsuite/libgomp.c/udr-3.c
 35c4904668124586d73a652acb4ed703  libgomp/testsuite/libgomp.c/vla-1.c
+72f799d6a28401fdff759786ae76ed6e  libgomp/testsuite/libgomp.fortran/aligned1.f03
+71944b8bef7f0e4b6f81cf656e8b99d8  libgomp/testsuite/libgomp.fortran/alloc-comp-1.f90
+b8dd09f53416d6c63bc6648223c60f11  libgomp/testsuite/libgomp.fortran/alloc-comp-2.f90
+71f9dfa4865a762564750c9cb7de2ca7  libgomp/testsuite/libgomp.fortran/alloc-comp-3.f90
 56a24835fa9d124fad3d523ffafe3b21  libgomp/testsuite/libgomp.fortran/allocatable1.f90
+956fa22db4361f8a28a17d9ee348259a  libgomp/testsuite/libgomp.fortran/allocatable10.f90
+d21f2d58b9ffe5ef1aaf580180dfdad4  libgomp/testsuite/libgomp.fortran/allocatable11.f90
+4cc63c460b69cefd0cf2a165978338c6  libgomp/testsuite/libgomp.fortran/allocatable12.f90
 927bc460f431a751bec399f6f3f1eae7  libgomp/testsuite/libgomp.fortran/allocatable2.f90
 1746499596b2e82f512b2f7679eba1b1  libgomp/testsuite/libgomp.fortran/allocatable3.f90
 f32aba254f0d07b32bb09a6665fa5d11  libgomp/testsuite/libgomp.fortran/allocatable4.f90
@@ -51582,6 +51826,7 @@ f32aba254f0d07b32bb09a6665fa5d11  libgomp/testsuite/libgomp.fortran/allocatable4
 6bd96bc59a02f0cff14cedaa535e2b87  libgomp/testsuite/libgomp.fortran/allocatable6.f90
 71d5213bf85633a62cd15b3c8d85606b  libgomp/testsuite/libgomp.fortran/allocatable7.f90
 a5c3b87debe112259e6655553f327b36  libgomp/testsuite/libgomp.fortran/allocatable8.f90
+ba13b71662af2e95ad0d09be9e3aa86a  libgomp/testsuite/libgomp.fortran/allocatable9.f90
 d69ebafdf43e748e354c0c05228cdd0c  libgomp/testsuite/libgomp.fortran/appendix-a/a.15.1.f90
 3f53f7b5eb9ab9c8cb9eb0edfeedad91  libgomp/testsuite/libgomp.fortran/appendix-a/a.16.1.f90
 519d7f01f054c7eb7495ba49409d2c51  libgomp/testsuite/libgomp.fortran/appendix-a/a.18.1.f90
@@ -51606,6 +51851,14 @@ c41b35e438ba2e9b553b7a8b4ab48ae1  libgomp/testsuite/libgomp.fortran/appendix-a/a
 f34e0c37442a4a7019dadca0b34ac11d  libgomp/testsuite/libgomp.fortran/appendix-a/a.40.1.f90
 04f8ab2d7e7bf368add9b8d8c9a8c1bf  libgomp/testsuite/libgomp.fortran/appendix-a/a.5.1.f90
 6116086a89b906c26bd9afe26e57a07a  libgomp/testsuite/libgomp.fortran/appendix-a/a10.1.f90
+ba05d0e1b584ec6c750d14a486ac83b2  libgomp/testsuite/libgomp.fortran/associate1.f90
+41cd3ed9183e6bc7b20ef8836663fbdd  libgomp/testsuite/libgomp.fortran/associate2.f90
+cb0b79f7bddc47118981784eb7ba6f75  libgomp/testsuite/libgomp.fortran/cancel-do-1.f90
+2a5fe3d97ff9f23e08df5e015a45e3bc  libgomp/testsuite/libgomp.fortran/cancel-do-2.f90
+a110324b7cb72dc5755c1ad39c5230fd  libgomp/testsuite/libgomp.fortran/cancel-parallel-1.f90
+e804e30e2adbfe3b45724f1d27673f8a  libgomp/testsuite/libgomp.fortran/cancel-parallel-3.f90
+b9afb6ff66c727dc1eae6ec7017f6d44  libgomp/testsuite/libgomp.fortran/cancel-sections-1.f90
+11bef914844f26ca1de29fda6df378cb  libgomp/testsuite/libgomp.fortran/cancel-taskgroup-2.f90
 d647e114a637a61f5170b3f577ebeb09  libgomp/testsuite/libgomp.fortran/character1.f90
 527829a886591ba771eaaa6b79d07ad6  libgomp/testsuite/libgomp.fortran/character2.f90
 98f9782da53de2e437f3670c305d4ea2  libgomp/testsuite/libgomp.fortran/collapse1.f90
@@ -51620,6 +51873,12 @@ c4ac0f05c4dc83a45fe9be076ad84959  libgomp/testsuite/libgomp.fortran/condinc3.f90
 4935884f21e6712b4f39b275079f0979  libgomp/testsuite/libgomp.fortran/crayptr1.f90
 2fd37c1401303ca48058d885c14bbc9f  libgomp/testsuite/libgomp.fortran/crayptr2.f90
 a80ce4249b45880d8fb3896d2804747e  libgomp/testsuite/libgomp.fortran/crayptr3.f90
+f5efb536310d1e6326052b063becef4e  libgomp/testsuite/libgomp.fortran/declare-simd-1.f90
+c0ebd55529e9baf82532c7b2f51f3fe4  libgomp/testsuite/libgomp.fortran/declare-simd-2.f90
+0ffd85be0cdc2738928b8085de5bcffc  libgomp/testsuite/libgomp.fortran/declare-simd-3.f90
+6e835db912fa2be675117b66187801c7  libgomp/testsuite/libgomp.fortran/depend-1.f90
+501e003d6de5432f0ae9aabf28a1785b  libgomp/testsuite/libgomp.fortran/depend-2.f90
+a569a86614b3eb780060b03cae7470a1  libgomp/testsuite/libgomp.fortran/depend-3.f90
 ed11df4baf7b08723fe3d9e881036bed  libgomp/testsuite/libgomp.fortran/do1.f90
 3e9f4c16fbcd55d7ad1c66acde8a2a71  libgomp/testsuite/libgomp.fortran/do2.f90
 45f840dcecbdacf158c18a01710c8763  libgomp/testsuite/libgomp.fortran/fortran.exp
@@ -51637,10 +51896,12 @@ b8337eeb8f903e8cba864798369482ad  libgomp/testsuite/libgomp.fortran/nestedfn1.f9
 8934ee3a053a4179545b9e79fd5cb2bb  libgomp/testsuite/libgomp.fortran/nestedfn2.f90
 a9ae54e23bafe9142ed3fee717823360  libgomp/testsuite/libgomp.fortran/nestedfn3.f90
 61d44d5f6efe0553ec613e3f73ba1ed5  libgomp/testsuite/libgomp.fortran/nestedfn4.f90
+5c2e73626905053c6cadd12f341036c4  libgomp/testsuite/libgomp.fortran/nestedfn5.f90
 e863b24ed37278eaafc48570498cbbda  libgomp/testsuite/libgomp.fortran/omp_atomic1.f90
 2453d7412313367c31ca23e641719185  libgomp/testsuite/libgomp.fortran/omp_atomic2.f90
 3245438b8d6d4d38923518299c0fcfe7  libgomp/testsuite/libgomp.fortran/omp_atomic3.f90
 b7ae32017adcedabb18b40d236b2c2ff  libgomp/testsuite/libgomp.fortran/omp_atomic4.f90
+a4dba85fc89bafd4bfeaca52301b1532  libgomp/testsuite/libgomp.fortran/omp_atomic5.f90
 571baa2c0ffb5f61a61d1ee7e4744599  libgomp/testsuite/libgomp.fortran/omp_cond1.f
 47ef1f5906cca9cb33adf59409c8422d  libgomp/testsuite/libgomp.fortran/omp_cond2.f
 3f611530c87478c4eefc94de263b2ad6  libgomp/testsuite/libgomp.fortran/omp_cond3.F90
@@ -51654,8 +51915,8 @@ e98c9ef094189dadf79f0fa02389aca2  libgomp/testsuite/libgomp.fortran/omp_parse1.f
 c910dfe57b9f53b8992d397c3571fd09  libgomp/testsuite/libgomp.fortran/omp_reduction.f
 77c80068c3418c0e379971a5e4ac91f1  libgomp/testsuite/libgomp.fortran/omp_workshare1.f
 4c7b256074253b51c44fe0f469b4512e  libgomp/testsuite/libgomp.fortran/omp_workshare2.f
-4ffb1064fa1cc39ffc18b17145647612  libgomp/testsuite/libgomp.fortran/openmp_version-1.f
-2f266c96aefe7956c1b41718afd9f2d8  libgomp/testsuite/libgomp.fortran/openmp_version-2.f90
+2831b1f46df2aa1dec0adf81da0a77e1  libgomp/testsuite/libgomp.fortran/openmp_version-1.f
+2c343f6f113766adffe1de8547e1bdf9  libgomp/testsuite/libgomp.fortran/openmp_version-2.f90
 bd4f1fc88afdef5e17260c0d1f276b1b  libgomp/testsuite/libgomp.fortran/pointer1.f90
 68926972a15f091338fdd2c4911d21c2  libgomp/testsuite/libgomp.fortran/pointer2.f90
 6c679ff49d6363b86f77ad4d1ea6ee34  libgomp/testsuite/libgomp.fortran/pr25162.f
@@ -51677,6 +51938,7 @@ ddd13da7e261528309013b3a49c05bca  libgomp/testsuite/libgomp.fortran/pr35130.f90
 59e84625ad4e7a9efce95deaae9a6074  libgomp/testsuite/libgomp.fortran/pr48894.f90
 40b8d47a0d185d1cd5afdf5de857c4db  libgomp/testsuite/libgomp.fortran/pr49792-1.f90
 d40bb4d01cb9e310f1f5f2f8112947c3  libgomp/testsuite/libgomp.fortran/pr49792-2.f90
+ed38be90cae92afacea925b0c0c3c356  libgomp/testsuite/libgomp.fortran/procptr1.f90
 4af6e9394ddc7a6c89dca2968cac162e  libgomp/testsuite/libgomp.fortran/recursion1.f90
 f7a52f7caa9a62d15b0f1270dc461c08  libgomp/testsuite/libgomp.fortran/reduction1.f90
 0afa716c312eb72430b0e7e942b66c76  libgomp/testsuite/libgomp.fortran/reduction2.f90
@@ -51690,18 +51952,49 @@ d1aa9a0d9140de4ed5479375127bba4b  libgomp/testsuite/libgomp.fortran/reference2.f
 1f82243a8f0a7760c615332b7656be74  libgomp/testsuite/libgomp.fortran/retval2.f90
 411e72fddee46be87cb1f3a53f2488e4  libgomp/testsuite/libgomp.fortran/sharing1.f90
 3b56e022c6f666bfa9c89a3c28f0a500  libgomp/testsuite/libgomp.fortran/sharing2.f90
+dbb326b55c871713fdc1de45c38a7c23  libgomp/testsuite/libgomp.fortran/simd1.f90
+8ceea2a4b33050312931a78e4f46bd6f  libgomp/testsuite/libgomp.fortran/simd2.f90
+034f4c3fa611a401281064988a3e228f  libgomp/testsuite/libgomp.fortran/simd3.f90
+462b4c390c030e55cc9db21a19137006  libgomp/testsuite/libgomp.fortran/simd4.f90
+5861fe58475761f0cb54c8755c49499a  libgomp/testsuite/libgomp.fortran/simd5.f90
+d86df9609cefa51152b9350aacb817e1  libgomp/testsuite/libgomp.fortran/simd6.f90
+870b23ab9545da157e901683ff994ce3  libgomp/testsuite/libgomp.fortran/simd7.f90
 166b5da3db2f62a2df7c6d3b58af4eaf  libgomp/testsuite/libgomp.fortran/stack.f90
 ddb20b7f8cb9aa13372d922fad1ddb95  libgomp/testsuite/libgomp.fortran/strassen.f90
 be4a9506a28165677f79dbf7eea9dc39  libgomp/testsuite/libgomp.fortran/tabs1.f90
 a8af85b9fb1ec1aac107848d192f6c66  libgomp/testsuite/libgomp.fortran/tabs2.f
+510eea5efdbce62755f50df6244acebe  libgomp/testsuite/libgomp.fortran/target1.f90
+e7b2e7644f4981570bf4e4d8123aa095  libgomp/testsuite/libgomp.fortran/target2.f90
+11a77b021164127357401380e5d1d2da  libgomp/testsuite/libgomp.fortran/target3.f90
+30f9fbc9bb3d35ad4e9ac77e3fa1c4f2  libgomp/testsuite/libgomp.fortran/target4.f90
+da080fe37da01c114e251fc67e64287c  libgomp/testsuite/libgomp.fortran/target5.f90
+f66a5081bf7730dffebdba49894d2c54  libgomp/testsuite/libgomp.fortran/target6.f90
+881ca68a517e287bc011679bb19d953a  libgomp/testsuite/libgomp.fortran/target7.f90
+a75ebee6d4c3f7b5a041b1208b48d7e3  libgomp/testsuite/libgomp.fortran/target8.f90
 3a4bc67e69df5eb5726956f8c0f6b0c7  libgomp/testsuite/libgomp.fortran/task1.f90
 58b7d380f359d6a326f0fc046f014c2d  libgomp/testsuite/libgomp.fortran/task2.f90
 190771ec6fc8070c1b15d6bc4103cc9e  libgomp/testsuite/libgomp.fortran/task3.f90
 99b0461034cab757c5038bc87a6a547a  libgomp/testsuite/libgomp.fortran/task4.f90
+6fff773e2d31ef51153c030c719d62e5  libgomp/testsuite/libgomp.fortran/taskgroup1.f90
 1d32702e4b540eb31abac9a94083a959  libgomp/testsuite/libgomp.fortran/threadprivate1.f90
 789a1579a73a9912a2800d6c6717ad42  libgomp/testsuite/libgomp.fortran/threadprivate2.f90
 0825abd8dca38d283771f7bb2d385fb8  libgomp/testsuite/libgomp.fortran/threadprivate3.f90
 59c99788fd51984ac1ed8ab7c5df4d35  libgomp/testsuite/libgomp.fortran/threadprivate4.f90
+211a08e0c9797a94e5c0c7220f19a139  libgomp/testsuite/libgomp.fortran/udr1.f90
+4782493aba8c54c49e57d5c798e1781d  libgomp/testsuite/libgomp.fortran/udr10.f90
+5e2c1bcf663ecf040fe096a5dce80be6  libgomp/testsuite/libgomp.fortran/udr11.f90
+f293f1be6e5cfc8c8b98dd542706cbce  libgomp/testsuite/libgomp.fortran/udr12.f90
+a4dd971f4d8eda45b0dd2611b3eed443  libgomp/testsuite/libgomp.fortran/udr13.f90
+f93bcd7e7f316e54a12fff301c8bb8e1  libgomp/testsuite/libgomp.fortran/udr14.f90
+90e626816b064f1555d5fbf68caf5d43  libgomp/testsuite/libgomp.fortran/udr15.f90
+a05850a4a0bd9a2361ebfc916b7a9d00  libgomp/testsuite/libgomp.fortran/udr2.f90
+84da432f1f34fe8f451cd8b9d8bce9fa  libgomp/testsuite/libgomp.fortran/udr3.f90
+850b2de5fa999416ac7aa4cfd2676570  libgomp/testsuite/libgomp.fortran/udr4.f90
+b656a37206639af2edd615193df33ceb  libgomp/testsuite/libgomp.fortran/udr5.f90
+7724c54f6ab053faed6ef4b726537a65  libgomp/testsuite/libgomp.fortran/udr6.f90
+5373e3f88be1334dc28ffb71eadcf3f8  libgomp/testsuite/libgomp.fortran/udr7.f90
+24dc784a193aeda044549291e21a0ad7  libgomp/testsuite/libgomp.fortran/udr8.f90
+b468dfcb8761e4a8f3e2caabdf9b2a62  libgomp/testsuite/libgomp.fortran/udr9.f90
 fd6becb20369d6ac5a1bacfc014b31a3  libgomp/testsuite/libgomp.fortran/use_intrinsic_1.f90
 41d6cd26c0dd69586ce6eb144daf2093  libgomp/testsuite/libgomp.fortran/vla1.f90
 4263959ee016933e58197580eb07520d  libgomp/testsuite/libgomp.fortran/vla2.f90
@@ -51728,7 +52021,7 @@ adeb43ecb87dafa9913dd663bab2ffce  libgomp/testsuite/libgomp.graphite/graphite.ex
 54f9ab06f446afe0bc8a6e6f07a83d6c  libgomp/work.c
 99c2e5e712b990ee07be10f53e41f3fb  libiberty/.gitignore
 a916467b91076e631dd8edb7424769c7  libiberty/COPYING.LIB
-780259c74c81d8f8e9301f098331ac53  libiberty/ChangeLog
+7c43f6f1245efc0f716b479592ca91f5  libiberty/ChangeLog
 a5d547789d7db4375ced07d9103d520e  libiberty/Makefile.in
 c68dbf7834af4281ebd84caa3fd54680  libiberty/README
 a23c6974fb1adf6977b5f5454c430bf0  libiberty/_doprnt.c
@@ -51879,19 +52172,18 @@ cdc140ce93944c5bb2ac62cd3dfd86d6  libiberty/xmalloc.c
 4746095b1b67693ab6e78ed72ead1235  libiberty/xstrdup.c
 6f774a92661ca4a067f1691a7925524b  libiberty/xstrerror.c
 c6e7ef53b4ff115a136d917511222656  libiberty/xstrndup.c
-37fe63edbb6d024fa4103fdb8239c407  libitm/ChangeLog
+5def6bc3ce74ccef8d3b4191094a1785  libitm/ChangeLog
 800745ad84882bc445410a58c2fddd51  libitm/Makefile.am
 232e2b039eaa7ea7006437397392ae64  libitm/Makefile.in
 1529a197c135a0629228fc9d31998589  libitm/aatree.cc
 7b1b43184a6209c1b1a137a5fc6065e7  libitm/aatree.h
-3674449b8cac55a89286179cd0b23809  libitm/acinclude.m4
+60c5bf0d4f3941ae12577c319ae67baa  libitm/acinclude.m4
 94efa0c0176ffe7ccddefedbc7bf422c  libitm/aclocal.m4
 c83d7c56996a8da20b9c4e3fc130ad41  libitm/alloc.cc
 80400bb5e438158aca8dc4d4e0682477  libitm/alloc_c.cc
 a1afed4e585fa3a1b7bcf7bd24e3cca2  libitm/alloc_cpp.cc
 22a3b0e50cae33b93cc9092ca4fa4473  libitm/barrier.cc
 4a2bae53331d4d3a34927fae2463d106  libitm/beginend.cc
-13c1205a3cbd2d6cd8d6531983c3b639  libitm/clearcap.map
 7cd1b6956902226fa26938c62fed3134  libitm/clone.cc
 083df06b45dfb981ffb97547251e2bb6  libitm/common.h
 05ea82fd12c7b4a030b6310b862ff47d  libitm/config.h.in
@@ -51934,7 +52226,7 @@ c932e770e61c41823c34c8bc35bf1826  libitm/config/x86/sjlj.S
 7aa2e131698a512bed54804e17ceb065  libitm/config/x86/target.h
 d2dbbbb75cd9c5edfde395ad53e62153  libitm/config/x86/x86_avx.cc
 b9557cfa4f6c06b54f305a5b85fd1015  libitm/config/x86/x86_sse.cc
-0045541ad9f5ae3f0fac08bd0e31c7ce  libitm/configure
+acc6a26688cae0fd1d43ca2d36a0e0b4  libitm/configure
 923e894a4f47f976d8e49af5afc13105  libitm/configure.ac
 147a47d0c4814b75a3825c0bca693d99  libitm/configure.tgt
 95fda76bdc2a5bcbcfb720b1f3bb1600  libitm/containers.h
@@ -51981,7 +52273,7 @@ ef24198422c19f99b0c41be6a16f7081  libitm/testsuite/libitm.c/txrelease.c
 d482ef5219faa907ff83393d6628de60  libitm/useraction.cc
 b18e667b8febff13520856a6c985a788  libitm/util.cc
 94d55d512a9ba36caa9b7df079bae19f  libjava/COPYING
-5e2c838b69c613f1b94fdbd679819755  libjava/ChangeLog
+b96200f06646d43a62c6048a4e2e2485  libjava/ChangeLog
 03e1f38b916604fdf1470238201325f3  libjava/ChangeLog-1998
 691acb61fbd6a2235826ff55db5578be  libjava/ChangeLog-1999
 b58c6701706771a02bf00a77666941ef  libjava/ChangeLog-2000
@@ -52022,7 +52314,7 @@ de54f80484e640306e109e785e4611c8  libjava/classpath/.settings/org.eclipse.jdt.co
 880a25226e4e4e4c241663041d24f8dd  libjava/classpath/AUTHORS
 efd97e0bb913655e0c8b16fa78bdded4  libjava/classpath/BUGS
 af0004801732bc4b20d90f351cf80510  libjava/classpath/COPYING
-4f28e8ff207bafea344f2d3918cd861f  libjava/classpath/ChangeLog
+42ed4bd3309333bcbbaf241f30327c71  libjava/classpath/ChangeLog
 3418fae58de967afe26d915a4b18d82c  libjava/classpath/ChangeLog-2003
 a5b72adb94a3c362738b0f52e57a82af  libjava/classpath/ChangeLog-2004
 61159c6e0802d0d2a92b3051003db5c5  libjava/classpath/ChangeLog-2005
@@ -52063,18 +52355,18 @@ b343eec566430e85d1f95c21438aa4ee  libjava/classpath/doc/api/Makefile.am
 8e47b82e10c52c7434946f7552f1b333  libjava/classpath/doc/cp-tools.info
 0349e5c38c548584225423ef4bafd20b  libjava/classpath/doc/cp-tools.texinfo
 3155d9bd9a7bf4aff2ff0dfe4a2cb878  libjava/classpath/doc/cp-vmintegration.texinfo
-c0c0e81b77952682626c07d8f3bf48b7  libjava/classpath/doc/gappletviewer.1
-8d4c248122d8d8b5aeb543425eb485a0  libjava/classpath/doc/gjar.1
-93cac536c263d4c94f75fe011d219f27  libjava/classpath/doc/gjarsigner.1
-8a418a99010f0cc7adda21f618d62433  libjava/classpath/doc/gjavah.1
-41f9cbbf7a0329e9e58f7531b6e6d58e  libjava/classpath/doc/gjdoc.1
-25dfd043e4ad42a70874ca7eaa7c7576  libjava/classpath/doc/gkeytool.1
-384916dc8f8e2f999ce3a92fc8b620f8  libjava/classpath/doc/gnative2ascii.1
-9f05869a4f2ee199e364dead4bbc2186  libjava/classpath/doc/gorbd.1
-5a7e049f52bdb1a55390424b51bda8c3  libjava/classpath/doc/grmid.1
-077fa87e7b56a0d2d205afb29e7b88e9  libjava/classpath/doc/grmiregistry.1
-3bbda322d57e9d53953d3b7d82dcebc1  libjava/classpath/doc/gserialver.1
-5a0bcf97da9224b9f415d48d095431b5  libjava/classpath/doc/gtnameserv.1
+3b53b8c2b69159094d75733cf63abc48  libjava/classpath/doc/gappletviewer.1
+115cb92b0ffc5a51119f488a13ce566e  libjava/classpath/doc/gjar.1
+9e39f569a94ac6ba3fa0155a87350708  libjava/classpath/doc/gjarsigner.1
+d9b29e442a6f0f3fbff7312d391b5b15  libjava/classpath/doc/gjavah.1
+ed73d4a0b361a6f75d37214b4e1473d0  libjava/classpath/doc/gjdoc.1
+9cd43593d014d62c583507bf674ec9f7  libjava/classpath/doc/gkeytool.1
+efd3c4eafb5daffd5570901d687f9366  libjava/classpath/doc/gnative2ascii.1
+c9f9abfad9b9e879f347121011b27481  libjava/classpath/doc/gorbd.1
+d6ec26206a8b4e6f959ae1ca2dc384e1  libjava/classpath/doc/grmid.1
+a7746f2831d24822c3f518c2f44c4989  libjava/classpath/doc/grmiregistry.1
+e90c5489749cf9eec13252c3322472d9  libjava/classpath/doc/gserialver.1
+52cc4c619dc3de17d05718b2c92732ae  libjava/classpath/doc/gtnameserv.1
 7e4e31659df1c7e815f9151958dceef2  libjava/classpath/doc/texi2pod.pl
 01b23c87dcf82048a5958c8224653305  libjava/classpath/doc/texinfo.tex
 b1e0c0c30547d57d7a09b04d47c70b06  libjava/classpath/examples/.cvsignore
@@ -74291,7 +74583,7 @@ a40a8f1527e2703fe2f08bf7276d8591  libjava/libgcj.spec.in
 697ca1de35069bd86456a5a19b9c4f11  libjava/libgcj.ver
 184718636f014ef2ca46d62ba8d6c3bf  libjava/libgcj_bc.c
 e3eda01d9815f8d24aae2dbd89b68b06  libjava/libltdl/COPYING.LIB
-280ac83707eb05cd59d920b5e7af6a6e  libjava/libltdl/ChangeLog
+3cde4e147c854a7505649f0c24fcbb14  libjava/libltdl/ChangeLog
 349267319e3d55dcf180a20f85394144  libjava/libltdl/Makefile.am
 930c6383a37e6cc8e0625c9a281eda95  libjava/libltdl/Makefile.in
 36da24f9facf00b349ea10dba3789d92  libjava/libltdl/README
@@ -75989,7 +76281,7 @@ d41d8cd98f00b204e9800998ecf8427e  libjava/testsuite/libjava.special/pr21115.out
 434ac04eb066f5075299583492846410  libjava/verify.cc
 355440a0c2fb5e16259d7ae381b37ed5  libjava/win32-threads.cc
 434d5e5e91727dec004f0d1d1fab47ec  libjava/win32.cc
-13927143527f024eaa30c0c5b9a6b6ad  libobjc/ChangeLog
+03a1b5f3b4fd735e510d24f1bee46af0  libobjc/ChangeLog
 5b7fbdee280ee8842f0d92c076996a91  libobjc/Makefile.in
 e4893352ae160018db798e6ecf5e5378  libobjc/NXConstStr.m
 3989d86c4963b58cd68b2584b937e20a  libobjc/Object.m
@@ -76047,7 +76339,7 @@ bf68b180d5f82fed7851e900d9c2e00e  libobjc/selector.c
 8824087a6da69f8b39bb0b25a8097646  libobjc/sendmsg.c
 e6a04cd604bd9234cf63edd367b0d90c  libobjc/thr.c
 a916467b91076e631dd8edb7424769c7  libquadmath/COPYING.LIB
-2b2c0ccadbb525a55c204dc7f1f1561f  libquadmath/ChangeLog
+aabf04a57ae6c00023e007e726360064  libquadmath/ChangeLog
 76ca0ca0f1d83d1c11535e45e1044572  libquadmath/Makefile.am
 e786ca4a729f6b1b34b37c7d15a02ae5  libquadmath/Makefile.in
 4c8b4478a1031d129e7cc6b341876b99  libquadmath/acinclude.m4
@@ -76178,7 +76470,7 @@ e766022f8615b72cbc38335d262e9d3d  libquadmath/strtod/grouping.h
 a81cc82679e80c86cfbd5575867450d0  libquadmath/strtod/strtod_l.c
 da808e110fc09ebd41ebd405790a70df  libquadmath/strtod/strtoflt128.c
 d15a18f7c46ba2add6148edc5b7563c0  libquadmath/strtod/tens_in_limb.c
-f43703fb95087ae5f6a8ab8a0793339f  libsanitizer/ChangeLog
+c02cb224eaa3a464e5510b840b966448  libsanitizer/ChangeLog
 0249c37748936faf5b1efd5789587909  libsanitizer/LICENSE.TXT
 5c6a385040bdd0ebb0bc0a3498a6f538  libsanitizer/MERGE
 8a92cfa8e4db49510b1a78b9b175583d  libsanitizer/Makefile.am
@@ -76401,7 +76693,7 @@ b5ce42595a9ea1f02cd73595c9bd9366  libsanitizer/ubsan/ubsan_type_hash.cc
 2219f17a5c8740755ef8e9831cbaa8fe  libsanitizer/ubsan/ubsan_type_hash.h
 e3dd09193c7915da7b4966ed821529c1  libsanitizer/ubsan/ubsan_value.cc
 b223f4ad4acdcad3f796a2d39e6ff81e  libsanitizer/ubsan/ubsan_value.h
-c4385c8d28ba876e17f6242c3e904267  libssp/ChangeLog
+53db63ea57cf4b324d38c8e9f41682a3  libssp/ChangeLog
 01d9954c400db04da1b8705029e6d9d9  libssp/Makefile.am
 6f9651cc4e77f9e7629b0142b05a90e0  libssp/Makefile.in
 8b0dd0c2a8b446bf5577a8562ad19885  libssp/aclocal.m4
@@ -76430,7 +76722,7 @@ aeb2f84c5e8ba3215469d507bd2efe57  libssp/ssp/string.h
 e9ab923d2562bf5f5be6883dfb9f0184  libssp/strncpy-chk.c
 5e0d8b8a766c31b12354baec1b7a159c  libssp/vsnprintf-chk.c
 f56ab1f8922a16f7e9e4f5270ae1e34e  libssp/vsprintf-chk.c
-1a8f6e700007b6a608009660de48ebc7  libstdc++-v3/ChangeLog
+6b86d49ce89be74236bb5539c0bf3e9a  libstdc++-v3/ChangeLog
 7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
 7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
 a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
@@ -76643,7 +76935,7 @@ e24504647642dbafa49db140acc95c21  libstdc++-v3/doc/html/bk02.html
 1d3eb837e8c17cf0d0ad6d151e8d1777  libstdc++-v3/doc/html/ext/lwg-active.html
 68372fa89a0decb4aa5f941df5484129  libstdc++-v3/doc/html/ext/lwg-closed.html
 2defa75c6dc8ce9a6f6b775439df3b7c  libstdc++-v3/doc/html/ext/lwg-defects.html
-a14649ebd9755de4404f37ba6732487d  libstdc++-v3/doc/html/faq.html
+c69ec11cafce0d5c44cae4cd87842360  libstdc++-v3/doc/html/faq.html
 1ae70f0bf94464b036515d333fff8ab2  libstdc++-v3/doc/html/images/confdeps.png
 d7f63b43e9f4c39cf71de7585de522ee  libstdc++-v3/doc/html/images/pbds_balls_and_bins.png
 22eedc841676a98f8ae8b95131ac4d7e  libstdc++-v3/doc/html/images/pbds_binary_priority_queue_int_push.png
@@ -76831,7 +77123,7 @@ e1f4e8c45aef131bced71b1a7fcae8d6  libstdc++-v3/doc/html/manual/utilities.html
 f5a41d4f7585b850b3182fc5f4888f93  libstdc++-v3/doc/xml/book.txml
 95d1335e76860d53246f3e400231ec38  libstdc++-v3/doc/xml/chapter.txml
 7f8c520dc83013026c671c5c342f73e2  libstdc++-v3/doc/xml/class.txml
-ee2a1b703e1eb8fc3aaac1c05aec6e41  libstdc++-v3/doc/xml/faq.xml
+a017272ecd74d4bd4949fd4ce69b337e  libstdc++-v3/doc/xml/faq.xml
 0408e04957d20fcb2a1048c482230ec0  libstdc++-v3/doc/xml/gnu/fdl-1.3.xml
 df4574d04d7f029398ab0183832017b6  libstdc++-v3/doc/xml/gnu/gpl-3.0.xml
 18a6390297702ec8fd75cbcc525d2005  libstdc++-v3/doc/xml/images/confdeps.dot
@@ -77100,7 +77392,7 @@ c636510c157da389af5eec411942cfa6  libstdc++-v3/include/bits/functexcept.h
 91203e2a620dcff7176bced04d474d2e  libstdc++-v3/include/bits/functional_hash.h
 3a5c3b695bc6a8715b2d70e8c2f9f2ff  libstdc++-v3/include/bits/gslice.h
 b6807699296278224532f23ba4838e6c  libstdc++-v3/include/bits/gslice_array.h
-d498eec3bc5ba12914e4497bf436cb00  libstdc++-v3/include/bits/hashtable.h
+a85e548377ccf42ef83ed339308093b9  libstdc++-v3/include/bits/hashtable.h
 9700c22307c69c419f5ce1653aa56128  libstdc++-v3/include/bits/hashtable_policy.h
 e4a2fdc54d33a55caaa4b27be128f84a  libstdc++-v3/include/bits/indirect_array.h
 2d1e6e437cad5c97116088dded5da482  libstdc++-v3/include/bits/ios_base.h
@@ -77128,17 +77420,17 @@ fa4fc451d4d980056e5bb42f077d30d1  libstdc++-v3/include/bits/ptr_traits.h
 ad4740e59e8cbd9ac6b9be2d488a3ff8  libstdc++-v3/include/bits/regex.h
 649cb03167606d553e53cbe051581c71  libstdc++-v3/include/bits/regex.tcc
 373a94fd87da4362c71ba2d3ac8076ce  libstdc++-v3/include/bits/regex_automaton.h
-bd70946861bab70b4d2960a772a42568  libstdc++-v3/include/bits/regex_automaton.tcc
-b5c7637da9dc934e6b3361189c540bc3  libstdc++-v3/include/bits/regex_compiler.h
-6e87e732acdc9f133eedde3cad7fc3f2  libstdc++-v3/include/bits/regex_compiler.tcc
+0e859039cfef2b8e10086955d682f645  libstdc++-v3/include/bits/regex_automaton.tcc
+c9c0486da3c81cb40ea3367cdd91f8c0  libstdc++-v3/include/bits/regex_compiler.h
+4987af0d9f1776172a13cf84b43f55a2  libstdc++-v3/include/bits/regex_compiler.tcc
 fcf411de1eb0b855de59fa82d47ed503  libstdc++-v3/include/bits/regex_constants.h
 267e61d65dd573a232e4794b8a41c090  libstdc++-v3/include/bits/regex_error.h
 87657e7a2c416958809f7ddbeb0340c0  libstdc++-v3/include/bits/regex_executor.h
-4f14def11f42509666af99f46fb8eea0  libstdc++-v3/include/bits/regex_executor.tcc
+d999eb2188ec36f75633f184618ea95f  libstdc++-v3/include/bits/regex_executor.tcc
 40d92d78e2e4d68bd737a1c39f1e8c9a  libstdc++-v3/include/bits/regex_scanner.h
 cb07487a8c867ffe44908705172d1d83  libstdc++-v3/include/bits/regex_scanner.tcc
 ebd42997721b883b0c545520f6e1923d  libstdc++-v3/include/bits/shared_ptr.h
-2c73a21b63642d56430e02d019b9a72c  libstdc++-v3/include/bits/shared_ptr_base.h
+73934af07bbc86b6572b24058ba7f506  libstdc++-v3/include/bits/shared_ptr_base.h
 6a86488bbca653f3a59bb8fa94b4e8a2  libstdc++-v3/include/bits/slice_array.h
 6571ee6b9bcceaf19c56c7480d662850  libstdc++-v3/include/bits/sstream.tcc
 6612703d15fae484dd38041011614cd2  libstdc++-v3/include/bits/stl_algo.h
@@ -77148,7 +77440,7 @@ ebd42997721b883b0c545520f6e1923d  libstdc++-v3/include/bits/shared_ptr.h
 31b2e6563922b13c61f34302db1e0895  libstdc++-v3/include/bits/stl_deque.h
 564c232f6a3984a902168c5ed63dee3d  libstdc++-v3/include/bits/stl_function.h
 e94510088da5bc4e0335075b0964b5a3  libstdc++-v3/include/bits/stl_heap.h
-ef1aefd927cd362719132b6701a0527e  libstdc++-v3/include/bits/stl_iterator.h
+18667479413ea2ec58c9d8dd1f83bcfc  libstdc++-v3/include/bits/stl_iterator.h
 430ba07bbc7a44cc10ce3890ca06a940  libstdc++-v3/include/bits/stl_iterator_base_funcs.h
 032892ca6b0d5c74ee60b73ef2a30cf1  libstdc++-v3/include/bits/stl_iterator_base_types.h
 a26666e5ba01046b83884d262adef1ca  libstdc++-v3/include/bits/stl_list.h
@@ -77163,9 +77455,9 @@ c7775476ce9b7afb9233ef7bdf872cd4  libstdc++-v3/include/bits/stl_pair.h
 a0088f41806a01bec922402b3eca201c  libstdc++-v3/include/bits/stl_set.h
 7d7a50c1bcb46613e4ec87b9c376df26  libstdc++-v3/include/bits/stl_stack.h
 ba1d780f102f7ce8ebfcb87dd4a48d7b  libstdc++-v3/include/bits/stl_tempbuf.h
-a8129e4da6ba88dd94051aa5f64667ed  libstdc++-v3/include/bits/stl_tree.h
+cc79503887a370ccd44ef029cca3e47f  libstdc++-v3/include/bits/stl_tree.h
 8f773b6de66ac394bddf286331b71818  libstdc++-v3/include/bits/stl_uninitialized.h
-5d5c1e9bbf937f39841caaecbd05757f  libstdc++-v3/include/bits/stl_vector.h
+647b57eaafb7ef6fa20b9974a21cd063  libstdc++-v3/include/bits/stl_vector.h
 4a227ea0bd121a073811a974d1d3f9b9  libstdc++-v3/include/bits/stream_iterator.h
 122883005110d85812da6f01829e96e9  libstdc++-v3/include/bits/streambuf.tcc
 1c437562e43cf8a7a1f4ba02bb308f04  libstdc++-v3/include/bits/streambuf_iterator.h
@@ -77178,7 +77470,7 @@ ffe4b2ce633d829846436fb65cfa1510  libstdc++-v3/include/bits/unordered_map.h
 918fb95f55f1fe8f78197411d268b5c1  libstdc++-v3/include/bits/valarray_array.h
 4a627b9075252068afa8da4696a387fc  libstdc++-v3/include/bits/valarray_array.tcc
 485a0086425b2772da4e15fd41433c43  libstdc++-v3/include/bits/valarray_before.h
-d7147c7c297fdc86dcf25ab4ef8b0985  libstdc++-v3/include/bits/vector.tcc
+6034ae6655f7418322c7bc1cd98eba08  libstdc++-v3/include/bits/vector.tcc
 c2ea3321ad369e72704e3afde6828ecb  libstdc++-v3/include/c/cassert
 ae6a534cd39eaec2a78f42fcf9df0039  libstdc++-v3/include/c/cctype
 a4c5d9b471b21331d7351b5999bb5710  libstdc++-v3/include/c/cerrno
@@ -77292,10 +77584,10 @@ ab1016486b6656005c913345e073abcf  libstdc++-v3/include/debug/set.h
 37dcb5505d644050637f490189f58833  libstdc++-v3/include/debug/string
 56f3ad660e8300705b324a3f985b90c1  libstdc++-v3/include/debug/unordered_map
 5e4e3827840ba1320c7dddbd85f56ebd  libstdc++-v3/include/debug/unordered_set
-7c7720a25327cff231296154af94ae1a  libstdc++-v3/include/debug/vector
+d9f9a801dbe5afcecb48a69ab8d93f32  libstdc++-v3/include/debug/vector
 7e2551d2c2dd7bb997d42a690593b3fa  libstdc++-v3/include/decimal/decimal
 ac52c8af39627ef083a226df42fc31fb  libstdc++-v3/include/decimal/decimal.h
-ef11306e00bcc0f4f269855252b1aeaa  libstdc++-v3/include/experimental/optional
+9f57830b191f4bf2721cef3ccf82a697  libstdc++-v3/include/experimental/optional
 5c356e2454335ced2476f7f9fdf04cb9  libstdc++-v3/include/experimental/string_view
 25ac6a5e2e4bb3f2cc6cc5879b90ca32  libstdc++-v3/include/experimental/string_view.tcc
 246337397419fba205fe59ea330ef425  libstdc++-v3/include/ext/algorithm
@@ -77669,12 +77961,12 @@ b405e08a37e04a980f1d9aa24cd89cdd  libstdc++-v3/include/std/condition_variable
 bdd91fa0453fe14cc18653b7dc6927f2  libstdc++-v3/include/std/deque
 99ccf219bea076709ff5aa261b1e2d48  libstdc++-v3/include/std/forward_list
 597cc52c077c63f1fdddbfa95c4bdf1f  libstdc++-v3/include/std/fstream
-65b7a77990429e2e268f5b68eef98716  libstdc++-v3/include/std/functional
-d2b9b6f47bf0ff9c65becaac4c387c47  libstdc++-v3/include/std/future
-5b5ed5e588d574370e630aa6f1a21944  libstdc++-v3/include/std/iomanip
+7f133f2fc0f513033e8103e64ffbd5c3  libstdc++-v3/include/std/functional
+434b825e2b9a95e812434660bc1b494a  libstdc++-v3/include/std/future
+a38fecdc41069d0441185ed2f61289d3  libstdc++-v3/include/std/iomanip
 0c0f52522245aad5244a12ae2e638253  libstdc++-v3/include/std/ios
 565afcfbf5ba12b6327e4de4d1fd0d2a  libstdc++-v3/include/std/iosfwd
-1f149f33d005cdc244261d6cc211a73b  libstdc++-v3/include/std/iostream
+50f28b6730969a973497fa9c1985ce0b  libstdc++-v3/include/std/iostream
 d86206727695677690dd9b76890a4336  libstdc++-v3/include/std/istream
 ad8f7a1244f2cf5ed21c08d23c62637a  libstdc++-v3/include/std/iterator
 cdf2ed2088596d3b05077f5394156082  libstdc++-v3/include/std/limits
@@ -77699,8 +77991,8 @@ fb28860f413b071d148f791cc4d8b916  libstdc++-v3/include/std/stack
 d3b6f528148b5a63ee727c016366da87  libstdc++-v3/include/std/string
 cb7aa094ede5e41f12cda9a35a0cfb13  libstdc++-v3/include/std/system_error
 d72a138145b8c940cb7f3df7af9cb1b1  libstdc++-v3/include/std/thread
-64697bcbc4f5426ee6ea2c644858dc8f  libstdc++-v3/include/std/tuple
-ad757c964d01ac611f5409e023630869  libstdc++-v3/include/std/type_traits
+309ae19457bcc8f8a4a30c85e59f5545  libstdc++-v3/include/std/tuple
+b3a20eeb9b198ec90ea8465b308a1af7  libstdc++-v3/include/std/type_traits
 c4e55f5325a735f9af1b712745d9ef83  libstdc++-v3/include/std/typeindex
 fc58abad3b04bfec654e4e41b8f83040  libstdc++-v3/include/std/unordered_map
 388660882b22dab09ead9c3d8311524c  libstdc++-v3/include/std/unordered_set
@@ -77769,7 +78061,7 @@ fb7c485aae5cefe5088421705eb30696  libstdc++-v3/include/tr1/unordered_set
 c0aa2ceab1b70d2d95ca2126121c204b  libstdc++-v3/include/tr1/utility
 c813375cf6045e5a015c25ce62d4caed  libstdc++-v3/include/tr1/wchar.h
 5ac198e9b27c943cad3e58af9b6356c5  libstdc++-v3/include/tr1/wctype.h
-409fc18729f44c0bcad2687e7fa61b70  libstdc++-v3/include/tr2/bool_set
+1863a97225679f2488dec3f2506f73b0  libstdc++-v3/include/tr2/bool_set
 826a3b0c14cb3b8a209ac0c4d45c292a  libstdc++-v3/include/tr2/bool_set.tcc
 03c8a563c7bd76f4bbb11938a00b733c  libstdc++-v3/include/tr2/dynamic_bitset
 2dfbc06ac68be638046909b28f216775  libstdc++-v3/include/tr2/dynamic_bitset.tcc
@@ -77855,7 +78147,7 @@ ee6661c4f7afc49cc9f88c7592a47ffe  libstdc++-v3/po/string_literals.cc
 1f0d57eef092baee4784e63a2bd21719  libstdc++-v3/python/hook.in
 68b329da9893e34099c7d8ad5cb9c940  libstdc++-v3/python/libstdcxx/__init__.py
 68b329da9893e34099c7d8ad5cb9c940  libstdc++-v3/python/libstdcxx/v6/__init__.py
-95073c248e1254cc4b7c8b4ef8dceec7  libstdc++-v3/python/libstdcxx/v6/printers.py
+1b83b0b9896053a8206a076826e33de2  libstdc++-v3/python/libstdcxx/v6/printers.py
 b1441422cec6381d9285b7681b666124  libstdc++-v3/scripts/check_compile
 533e594add6e79910b0e557ba690fac6  libstdc++-v3/scripts/check_performance
 f480e111db2d50194a3e1f7014c9f422  libstdc++-v3/scripts/create_testsuite_files
@@ -77866,7 +78158,7 @@ c3cb4399fe91e6cb0484984d02d4b4f0  libstdc++-v3/scripts/extract_symvers.in
 f1a84a17158780aaa37927191db4463a  libstdc++-v3/scripts/gen_includers2.pl
 12339b6ead78d7ddd0044dfd0f9f4f92  libstdc++-v3/scripts/make_exports.pl
 80b6ff44b325c6b6d113435d8eea4b76  libstdc++-v3/scripts/make_graph.py
-ccbed1ea82cba0214ede86aa0eeeccef  libstdc++-v3/scripts/run_doxygen
+93834810d190d1876fdb446dc5857f2f  libstdc++-v3/scripts/run_doxygen
 884bb3241e8e27e818855184b2f4737f  libstdc++-v3/scripts/testsuite_flags.in
 90d7fef889bdbbc920e1e38d886660ca  libstdc++-v3/src/Makefile.am
 b8f8c4f7127e3c67ca5118cc17870b43  libstdc++-v3/src/Makefile.in
@@ -77917,7 +78209,7 @@ c4cd8bac205ed47583ff3f1ecd35676b  libstdc++-v3/src/c++98/hashtable_tr1.cc
 ba8260aee97ff53f868d21a956ace200  libstdc++-v3/src/c++98/ios-inst.cc
 f4cc74d469720509875160f74fff3aeb  libstdc++-v3/src/c++98/ios.cc
 33865b886a4fa91608c14b40d0e74673  libstdc++-v3/src/c++98/ios_failure.cc
-566a4281292275362923b6277ad4e566  libstdc++-v3/src/c++98/ios_init.cc
+1edbe2182283a26697c86fbe00cab5f2  libstdc++-v3/src/c++98/ios_init.cc
 bf46baae6c5f1da47c22b2c072419379  libstdc++-v3/src/c++98/ios_locale.cc
 ac80c7ec5c0a615662b28990e1094eeb  libstdc++-v3/src/c++98/iostream-inst.cc
 e057f7cce50ac3eba93348a0a06364fe  libstdc++-v3/src/c++98/istream-inst.cc
@@ -78195,7 +78487,7 @@ be0089c7c851866f53bec0fddbd0dc7f  libstdc++-v3/testsuite/20_util/decay/requireme
 da58a1733a65d67b0138286442f488ce  libstdc++-v3/testsuite/20_util/decay/requirements/typedefs-2.cc
 1c461b2c7969a95c1981fe59a3c396d7  libstdc++-v3/testsuite/20_util/decay/requirements/typedefs.cc
 67675b70d7a9436cad86d77a166c6743  libstdc++-v3/testsuite/20_util/declval/requirements/1.cc
-014f87188021138d3fca7da91195f25b  libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc
+4e8590e176037588c370a2ae3125de83  libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc
 fad094d30df0973bbae4de357b71339f  libstdc++-v3/testsuite/20_util/default_delete/48631_neg.cc
 7595192fc239be876d23e6853d014bc6  libstdc++-v3/testsuite/20_util/default_delete/cons/constexpr.cc
 88702bac0b1a9d40044560c70fcb3d64  libstdc++-v3/testsuite/20_util/default_delete/void_neg.cc
@@ -78255,6 +78547,7 @@ cbe0b5843c9880cc627cabcfd14ad8b8  libstdc++-v3/testsuite/20_util/function/43397.
 d9ab7a7f1b9b6b6acfc774735e8ae71d  libstdc++-v3/testsuite/20_util/function/5.cc
 5ff95a9327494e5fd5a7bb9548a8f4ed  libstdc++-v3/testsuite/20_util/function/58569.cc
 9e3c0cf22572df7b8cfad07710c111c9  libstdc++-v3/testsuite/20_util/function/6.cc
+fabfe76dc30b13e696bbaf0d3da99caf  libstdc++-v3/testsuite/20_util/function/60594.cc
 0366f931515bb0f27522d8f32613581b  libstdc++-v3/testsuite/20_util/function/7.cc
 9ace4aecb05784929a870023e72fa190  libstdc++-v3/testsuite/20_util/function/8.cc
 9a4341f79b42e1f66f3258b878bc6cd5  libstdc++-v3/testsuite/20_util/function/9.cc
@@ -78489,15 +78782,16 @@ a1833cdedf2e994ad5497051d4d99c1c  libstdc++-v3/testsuite/20_util/is_volatile/req
 93f64ae5b11e2ef81b90d83ad6fa599d  libstdc++-v3/testsuite/20_util/is_volatile/requirements/typedefs.cc
 74dedb0d3fe0b7f74a64bcbb6c27687c  libstdc++-v3/testsuite/20_util/is_volatile/value.cc
 1a5b84229d8b958ab58228ec8aed383f  libstdc++-v3/testsuite/20_util/make_signed/requirements/explicit_instantiation.cc
-67ad8c96d3340164fa61a11e3525d32a  libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-1.cc
-47ea48d675533175f5dd90261459f687  libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-2.cc
+93a28511ca80a4ab934ab1ee75e8da26  libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-1.cc
+453060e5a140ac4d00d0778f5563384d  libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-2.cc
 7c9fee49549fbd106a03c68f6bc2f535  libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-3.cc
-a4e5ca35f5d43b19cb9a556fe7d75858  libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc
+858096e31333568b2fb89852b8d0548f  libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-4.cc
+12b329b0322d1a9a94cbb89dc2ee4a91  libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc
 101ce647b6cbe6cdb1e2470e3f2df996  libstdc++-v3/testsuite/20_util/make_unsigned/requirements/explicit_instantiation.cc
-552824da455eaf0fec634cb58888b9a8  libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-1.cc
-3b59b2758f4c2c3e1f0415810f1921dd  libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-2.cc
+67019f2db5c8b8f0c0da6e6f1a21cc9d  libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-1.cc
+642a17c6cf8993d24dfbc054f50724ec  libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-2.cc
 c9ec1269f88911267709a4b143fb0cb9  libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-3.cc
-56378cf510e8f72ec07c806ce1d4705c  libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc
+b61109ad287ad3c78df29934e9941e02  libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc
 d37a7bb283bf94ade6ce11e3e7f3efc2  libstdc++-v3/testsuite/20_util/move/1.cc
 94459598aa0d15ed5349e0514011cbf4  libstdc++-v3/testsuite/20_util/move/requirements/explicit_instantiation.cc
 8b6cc534bce6a36ed392ffa4bc840f2f  libstdc++-v3/testsuite/20_util/move_if_noexcept/1.cc
@@ -78612,6 +78906,7 @@ ad00ade7e7b678c031a00a6371c5120d  libstdc++-v3/testsuite/20_util/shared_ptr/cons
 5d0781c37d398f45d346557df8346d0a  libstdc++-v3/testsuite/20_util/shared_ptr/cons/55123.cc
 72be9b573ae9730908ba49362a208f32  libstdc++-v3/testsuite/20_util/shared_ptr/cons/58659.cc
 e47350c38a5a123564392ac3d8070833  libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc
+18099d5eb630735b727ff66874b6b79a  libstdc++-v3/testsuite/20_util/shared_ptr/cons/61036.cc
 56294d2ef9d9d9fd6f7c992ac3c7abff  libstdc++-v3/testsuite/20_util/shared_ptr/cons/alias.cc
 a07139730396a79913c3fc0485af03cc  libstdc++-v3/testsuite/20_util/shared_ptr/cons/alloc.cc
 9ae93bfe04caf93a462c94cca031dfb6  libstdc++-v3/testsuite/20_util/shared_ptr/cons/alloc_min.cc
@@ -78687,6 +78982,7 @@ ea8970008dcfc507b732a77b6b6274e5  libstdc++-v3/testsuite/20_util/time_point_cast
 27943d64279528f9141bfe71482464d4  libstdc++-v3/testsuite/20_util/tuple/48476.cc
 04b82209ed6c0210db27506ad3187c7e  libstdc++-v3/testsuite/20_util/tuple/51365.cc
 c54af389d65573764200bfb0b3597473  libstdc++-v3/testsuite/20_util/tuple/53648.cc
+073f9c2ec2806d897dd09a059663bb00  libstdc++-v3/testsuite/20_util/tuple/60497.cc
 ee9b755981731038f237341ae8a7dc3f  libstdc++-v3/testsuite/20_util/tuple/comparison_operators/35480_neg.cc
 87df08a010e0029b0c82f3c2bac6d87e  libstdc++-v3/testsuite/20_util/tuple/comparison_operators/comparisons.cc
 9a077a11db7228f699befe4f0726869a  libstdc++-v3/testsuite/20_util/tuple/comparison_operators/constexpr.cc
@@ -78717,7 +79013,7 @@ ea83f02105f67cd2e534cf606978fa70  libstdc++-v3/testsuite/20_util/tuple/cv_tuple_
 2f22ce23afcfa03f328a20dc01644cef  libstdc++-v3/testsuite/20_util/tuple/element_access/get.cc
 85e7acd70fe1e294191b94bf834edc71  libstdc++-v3/testsuite/20_util/tuple/element_access/get2.cc
 c546df3b4ba74ac64a0cb4ea57c630d6  libstdc++-v3/testsuite/20_util/tuple/element_access/get2_by_type.cc
-47d52c21660355a1a72bdd9469f1a6e7  libstdc++-v3/testsuite/20_util/tuple/element_access/get_by_type.cc
+3a1e22c8198a01dfad8bda84c438db27  libstdc++-v3/testsuite/20_util/tuple/element_access/get_by_type.cc
 fad4ad5ad40bf44ea48788d9a6dab764  libstdc++-v3/testsuite/20_util/tuple/moveable.cc
 6eaa1af34a5882c3de54ba11243799e0  libstdc++-v3/testsuite/20_util/tuple/moveable2.cc
 6d5abe1c79608785a6a722e8fdc802c5  libstdc++-v3/testsuite/20_util/tuple/noexcept_move_assign.cc
@@ -78725,7 +79021,8 @@ fad4ad5ad40bf44ea48788d9a6dab764  libstdc++-v3/testsuite/20_util/tuple/moveable.
 e1eea1c271af0bdfa12cc94693ef107b  libstdc++-v3/testsuite/20_util/tuple/requirements/dr801.cc
 3f8ef4dac6a2e28913a495f5c2823e5f  libstdc++-v3/testsuite/20_util/tuple/requirements/explicit_instantiation.cc
 0fbf39466f47e927efc63b5fe8acf2d6  libstdc++-v3/testsuite/20_util/tuple/swap.cc
-9b6ff386dab421e6c403a91cfcbcf2fc  libstdc++-v3/testsuite/20_util/tuple/tuple_element.cc
+2ddb2960845b7e1c69f2282968ca53aa  libstdc++-v3/testsuite/20_util/tuple/tuple_element.cc
+8d5defa9ea9654930802511fbb97e9f1  libstdc++-v3/testsuite/20_util/tuple/tuple_element_t.cc
 f0e73cece5252f9d8ced5f133fe2f45a  libstdc++-v3/testsuite/20_util/tuple/tuple_size.cc
 04d1024415682274ef59af1d5ba80f8f  libstdc++-v3/testsuite/20_util/typeindex/comparison_operators.cc
 9b7c3ebe2b60022fc39b43722bfc2e27  libstdc++-v3/testsuite/20_util/typeindex/hash.cc
@@ -80119,6 +80416,7 @@ bf5368a7b5646d5a76293b3e5092c1c1  libstdc++-v3/testsuite/23_containers/set/23781
 eac021f82238b0e7f88b2f6f300962ca  libstdc++-v3/testsuite/23_containers/set/allocator/swap.cc
 44177aa990428b2a07f4cad36608b16b  libstdc++-v3/testsuite/23_containers/set/capacity/29134.cc
 cdc1c5cbfb547b78c021908f817445fe  libstdc++-v3/testsuite/23_containers/set/check_construct_destroy.cc
+479cc77c5e25439c4361e2f6436d46c2  libstdc++-v3/testsuite/23_containers/set/cons/61023.cc
 2c40c028cc84603b5d0823e47d5d0fa6  libstdc++-v3/testsuite/23_containers/set/cons/moveable.cc
 8140074ed960ac4091fb63b0076ebc32  libstdc++-v3/testsuite/23_containers/set/cons/noexcept_move_construct.cc
 a95e300c8c185b4d18f769fa8ffe8fdb  libstdc++-v3/testsuite/23_containers/set/debug/60499.cc
@@ -80389,6 +80687,7 @@ f4a98dc075a673b463e843fd23afccf6  libstdc++-v3/testsuite/23_containers/unordered
 f355739fd5282b5e4cff2b750cc2b3f6  libstdc++-v3/testsuite/23_containers/unordered_set/56267-2.cc
 751a41d0c6826ff745486c3f3f0114b1  libstdc++-v3/testsuite/23_containers/unordered_set/56267.cc
 0c97f4ca00fc977c8df9f9f5e83a8425  libstdc++-v3/testsuite/23_containers/unordered_set/56278.cc
+f3eebd181caa96b0b79cab436f550bc5  libstdc++-v3/testsuite/23_containers/unordered_set/61143.cc
 b3b8ace808ed88c6a64ae34b1c650a84  libstdc++-v3/testsuite/23_containers/unordered_set/allocator/copy.cc
 b0386447adbcdf3090a1b90341ef1d92  libstdc++-v3/testsuite/23_containers/unordered_set/allocator/copy_assign.cc
 10ede91f68fad662234a9b53b1c3d111  libstdc++-v3/testsuite/23_containers/unordered_set/allocator/ext_ptr.cc
@@ -80443,6 +80742,7 @@ f01cfa50f964ec5ff452d529d2b30362  libstdc++-v3/testsuite/23_containers/unordered
 fff6e388e4734b3c3d9dcf019bbacdf6  libstdc++-v3/testsuite/23_containers/unordered_set/max_load_factor/robustness.cc
 5377ed3668c63ebeb73c3ec8b1349715  libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/emplace.cc
 4686a793393ae777cc39a9aa59354e50  libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/reserve.cc
+d5b8c10b8ae6dc5045ac01bb72b91e8e  libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/swap.cc
 c0796bb1da03355f73b0328094814cef  libstdc++-v3/testsuite/23_containers/unordered_set/observers.cc
 471ddaa70ea98740aba436165883a83d  libstdc++-v3/testsuite/23_containers/unordered_set/operations/count.cc
 17a65bbd19b5fe478cf223e5b535da2a  libstdc++-v3/testsuite/23_containers/unordered_set/operators/1.cc
@@ -80597,11 +80897,11 @@ baf8b8fba1e021512d18674c803a5b85  libstdc++-v3/testsuite/23_containers/vector/mo
 4f335d323864b5be5299555c2912e8ac  libstdc++-v3/testsuite/23_containers/vector/range_access.cc
 9174c8b0a88b51a0557c382440e6823d  libstdc++-v3/testsuite/23_containers/vector/requirements/citerators.cc
 8606495410696a122546bcc697746c3c  libstdc++-v3/testsuite/23_containers/vector/requirements/do_the_right_thing.cc
-167bb655cddee4f8d02062168dd75224  libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc
+bb8b1982b6ef069f872670de22921d72  libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc
 97df37bb365cecef0333fd25b4e35c5c  libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor.cc
-4f34ac09baa2df97864f0e72bee2849c  libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc
-5742effad2a53f90eef6f9d5d5217265  libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc
-729c67193e8e356623b22cc821fec6da  libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc
+b6b83ff4d8d1a5673351a5b066713cc2  libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc
+15dac0a181dd7f47fb11cfaf934e3a30  libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc
+0009af600ea619b6d63bffcc4d8f9748  libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc
 7b0f44a8fc2116e762a4e07fd3133016  libstdc++-v3/testsuite/23_containers/vector/requirements/exception/basic.cc
 941bc15e59f223786bada67caf743f9b  libstdc++-v3/testsuite/23_containers/vector/requirements/exception/generation_prohibited.cc
 39fe176070e9aa0d1fd59dfdb0878d89  libstdc++-v3/testsuite/23_containers/vector/requirements/exception/propagation_consistent.cc
@@ -82250,9 +82550,11 @@ a53cb989ccb2e946d384a88ea4d63638  libstdc++-v3/testsuite/27_io/manipulators/exte
 6ab7a2d201c7d619833ab350ce113bb1  libstdc++-v3/testsuite/27_io/manipulators/standard/char/1.cc
 0726e30b174aa3a887475a63dbe3df35  libstdc++-v3/testsuite/27_io/manipulators/standard/char/2.cc
 21fcc9ddfe2fe463b9b484d87a7e225d  libstdc++-v3/testsuite/27_io/manipulators/standard/char/60270.cc
+d594f3a267d4ac9ab043350e29831e75  libstdc++-v3/testsuite/27_io/manipulators/standard/char/dr2344.cc
 8a9646bfe28fe9f78cd3787e9d650bc2  libstdc++-v3/testsuite/27_io/manipulators/standard/char/quoted.cc
 f643bb61586dbb7c5cc216ebc29fbf64  libstdc++-v3/testsuite/27_io/manipulators/standard/wchar_t/1.cc
 b0ecb2cec0bcf82632ae8330788d5b61  libstdc++-v3/testsuite/27_io/manipulators/standard/wchar_t/2.cc
+f55dd343fe2fba114349521a12652ac1  libstdc++-v3/testsuite/27_io/manipulators/standard/wchar_t/dr2344.cc
 be4b141e6cdea93542fd9e4372e26f8f  libstdc++-v3/testsuite/27_io/manipulators/standard/wchar_t/quoted.cc
 a2cf3b8be9bd7b5c38092c26e2d1e876  libstdc++-v3/testsuite/27_io/objects/char/1.cc
 fa16fa378e7cffe247d469d655fbb5b1  libstdc++-v3/testsuite/27_io/objects/char/10.cc
@@ -82358,7 +82660,7 @@ a61eee397025bf99c815aef958edce6b  libstdc++-v3/testsuite/28_regex/algorithms/reg
 a8df08852135acfce31d7a69db7f20b3  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/empty_range.cc
 3934c0e8f097df26fe8421823b2952f0  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/emptygroup.cc
 f5caf57c85d0af0655b9e9c34cdd23bc  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/hex.cc
-5b401195d44d55aebac71bf80adc082f  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/quoted_char.cc
+cdd7e0324974a5d0d5116da659ed800b  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/quoted_char.cc
 8a668015379b5d9e9c1374a53cbccaac  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/ungreedy.cc
 34e54e012d1d79924b40cdb315a32794  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/anymatcher.cc
 c1ae504cc9233e3c0daa81baf286585e  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/cjk_match.cc
@@ -82417,7 +82719,7 @@ e8cae9d8577e784f1798f7f21e13ff11  libstdc++-v3/testsuite/28_regex/basic_regex/ct
 01685e9c20e2ae406bafcdeeeefc5719  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/wchar_t/cstring.cc
 d824e53ce1939f8587cebbca54759720  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/wchar_t/default.cc
 85f564a600e93544299a72e6944e3177  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/wchar_t/range.cc
-464ecdda18418ae9b8eaf4f79127738b  libstdc++-v3/testsuite/28_regex/basic_regex/multiple_quantifiers.cc
+7bcf78193be501772a8c1c55956d6ca6  libstdc++-v3/testsuite/28_regex/basic_regex/multiple_quantifiers.cc
 5548ee8b630713e272673e09354fd60b  libstdc++-v3/testsuite/28_regex/basic_regex/requirements/constexpr_data.cc
 f3879155319951e3adcbdfa05a6982c7  libstdc++-v3/testsuite/28_regex/constants/error_type.cc
 bcfe26ae804ab98295dcc5a24fda7d24  libstdc++-v3/testsuite/28_regex/constants/match_flag_type.cc
@@ -82621,6 +82923,7 @@ f8ed195967716cef39fba79a5f5d0aae  libstdc++-v3/testsuite/30_threads/packaged_tas
 c3336e722be06e779e372392b0ef468f  libstdc++-v3/testsuite/30_threads/packaged_task/members/valid.cc
 01c9012beb48a8b5c0cc3a8928d9f3a2  libstdc++-v3/testsuite/30_threads/packaged_task/requirements/explicit_instantiation.cc
 e95eb39d1d21934965a32f7de5b94c7c  libstdc++-v3/testsuite/30_threads/packaged_task/uses_allocator.cc
+223c704e5a1c2639ce17491cb9b88ae7  libstdc++-v3/testsuite/30_threads/promise/60966.cc
 43042e64d6224c1400056bc87ef51eb3  libstdc++-v3/testsuite/30_threads/promise/cons/1.cc
 5a723b6e74dc2bc01255b69e36bea825  libstdc++-v3/testsuite/30_threads/promise/cons/alloc.cc
 bf9566d4d69598700ae44d1f0c1e0a15  libstdc++-v3/testsuite/30_threads/promise/cons/alloc2.cc
@@ -82967,12 +83270,12 @@ d4b43bda26dae604d284388b6730c29b  libstdc++-v3/testsuite/experimental/optional/i
 bc6f0c361b3eb9651d818c2e0e645499  libstdc++-v3/testsuite/experimental/optional/observers/3.cc
 51b90f804430db44b2dda8253d9b7692  libstdc++-v3/testsuite/experimental/optional/observers/4.cc
 a59061cab533dab4faf31c5c7ab1d6ad  libstdc++-v3/testsuite/experimental/optional/observers/5.cc
-c5f9c364199476e9fa303488156af366  libstdc++-v3/testsuite/experimental/optional/relops/1.cc
-4aacc81f47fb92960fb5faf60141e2e0  libstdc++-v3/testsuite/experimental/optional/relops/2.cc
-ceeeeac7654c3e1a806227ab531e3ee4  libstdc++-v3/testsuite/experimental/optional/relops/3.cc
-0046058c67bcf8a3898a782d86c898ea  libstdc++-v3/testsuite/experimental/optional/relops/4.cc
-5ab41e00c91ba3b5f2983d83e072c294  libstdc++-v3/testsuite/experimental/optional/relops/5.cc
-e173488a7d91c6b92176cbe138566d23  libstdc++-v3/testsuite/experimental/optional/relops/6.cc
+7607163a58c7bf235533be7ce1f017b4  libstdc++-v3/testsuite/experimental/optional/relops/1.cc
+af8d68158b6bfe925afefc615fb0930a  libstdc++-v3/testsuite/experimental/optional/relops/2.cc
+868ada806d159763660651740db597dd  libstdc++-v3/testsuite/experimental/optional/relops/3.cc
+dc55fb894f1c03adba1041a6f273b249  libstdc++-v3/testsuite/experimental/optional/relops/4.cc
+090cba6677d1fea9a9f85fe0893724f3  libstdc++-v3/testsuite/experimental/optional/relops/5.cc
+8e69c348f95d204b190c6b1e1073912d  libstdc++-v3/testsuite/experimental/optional/relops/6.cc
 ffca06999dc2f2773d1d0ba023ea0eb2  libstdc++-v3/testsuite/experimental/optional/requirements.cc
 665098ee916ad79f901d0b111d04524b  libstdc++-v3/testsuite/experimental/optional/swap/1.cc
 c5dc3eec5ce8007b0241cdcf55577dd5  libstdc++-v3/testsuite/experimental/string_view/capacity/1.cc
@@ -83365,7 +83668,8 @@ a1dd9b857b40f69ff465fbb5d457440d  libstdc++-v3/testsuite/libstdc++-prettyprinter
 16ad995556bb1fb21842b84da10bc99c  libstdc++-v3/testsuite/libstdc++-prettyprinters/debug.cc
 b446ff0e9a95b28827a74d7cf33c1a2a  libstdc++-v3/testsuite/libstdc++-prettyprinters/prettyprinters.exp
 e5420a74cf55910e3f538d2b656fea8d  libstdc++-v3/testsuite/libstdc++-prettyprinters/shared_ptr.cc
-13a710151699b2217a16079a0543a1e4  libstdc++-v3/testsuite/libstdc++-prettyprinters/simple.cc
+256a25db337bc4a096a88295c99baaae  libstdc++-v3/testsuite/libstdc++-prettyprinters/simple.cc
+544702e55c214c943e924806b911f7b9  libstdc++-v3/testsuite/libstdc++-prettyprinters/simple11.cc
 8914aa851af0c6a50497c3ba1a6a450e  libstdc++-v3/testsuite/libstdc++-prettyprinters/tr1.cc
 b7a630188c64c6cddbac76f48ceb3935  libstdc++-v3/testsuite/libstdc++-prettyprinters/whatis.cc
 ef0d22637757cfcc1ca687b6d57d9a29  libstdc++-v3/testsuite/performance/21_strings/append-1.cc
@@ -84161,7 +84465,7 @@ c030349908fc0eb9b0c4612bb49a409f  libstdc++-v3/testsuite/util/testsuite_io.h
 e10d3cdddd0f53096227a5beb8dcd757  libstdc++-v3/testsuite/util/thread/all.h
 18097d974d6f6a830c12c42592f0006d  libtool-ldflags
 3bb1de19ee64b1073f3d23d9a410b743  libtool.m4
-a81b8ec28f72325f391d24fa0122837b  libvtv/ChangeLog
+0f8b7f26c46d05ed2b5f38d9fcd120c1  libvtv/ChangeLog
 eef62b8fb153928c0a2c4a0578c942c0  libvtv/Makefile.am
 6450c2f34e817a27b51c21ac0bd1cb6f  libvtv/Makefile.in
 4ce86f8604e6c86211a4cb2025ffc53e  libvtv/acinclude.m4
@@ -84244,20 +84548,20 @@ add56677aeac69caba72b699b2b43f07  libvtv/vtv_set.h
 5ddbd6d7662cb8cab972934da6561160  libvtv/vtv_utils.h
 247597a3fcc5b5aa8bd923351c59d853  ltgcc.m4
 4e65f2f6a05f5eca82ba79c6363aa3db  ltmain.sh
-1270d93c3036a8d13b29e645e3112cfa  lto-plugin/ChangeLog
+480a1e32fdbf26c9a90a8c5c24762161  lto-plugin/ChangeLog
 4c40915b9f88608e518913005264f8fa  lto-plugin/Makefile.am
 e4afd16e3532d984448f0ca8ba8c3833  lto-plugin/Makefile.in
 e0b6c77fa2326a08aa2d7a69e87e0f8c  lto-plugin/aclocal.m4
 e8d8e3dc8d2e134b03f22c7c567d030c  lto-plugin/config.h.in
-b3f728672dbcbbf1207e6726769c9e55  lto-plugin/configure
-4b2d94ee477bdeb4963f60145713eb8a  lto-plugin/configure.ac
+8a06a8b8a4ff79121337ebc6a7436458  lto-plugin/configure
+3e586084a6038d0f1df6d9ed4f2c4ee2  lto-plugin/configure.ac
 5c23239009f0c6a206ed13799bd5f284  lto-plugin/lto-plugin.c
 139179f8500d6f092a4f53d8f4da7f5c  lto-plugin/lto-symtab.c
 dee72a6a60e99528b0d17bf3ff9a1e15  ltoptions.m4
 bc2f6032c98896249eadb56177c7d357  ltsugar.m4
 c30cd33c496505f13d9fbdb6970c7c33  ltversion.m4
 293853a13b7e218e3a4342cf85fbbf25  lt~obsolete.m4
-310996e85318ea77013088b4bd1ab21e  maintainer-scripts/ChangeLog
+d84ab836d266bd10145007e79ed5e6f8  maintainer-scripts/ChangeLog
 33c7bc2d2c55956dfac85a05d8a80eff  maintainer-scripts/README
 a3cc7e22d2016063d76bfc42361ab230  maintainer-scripts/crontab
 6facef54b1f26f6ee5d58aef536e7c82  maintainer-scripts/gcc_release
@@ -84272,7 +84576,7 @@ f1fff2ea196cbf6fe4634bc3edc5af4d  move-if-change
 cf2baa0854f564a7785307e79f155efc  symlink-tree
 69678e72941d681665c3731bfb3044ab  ylwrap
 ed77bd1cb8611c7e07d54332abbbb44a  zlib/CMakeLists.txt
-00f7b875e62076d360ee8c76df3a143a  zlib/ChangeLog
+9c4a0d1e3929379aaf51f841e669a980  zlib/ChangeLog
 e7a1201f311d2ce7a5fc5e7eb763fe07  zlib/ChangeLog.gcj
 b7a1991f01daea3efe108a215c5514a5  zlib/FAQ
 3b6b6f9e88f2319b75e6ccb8c2823b13  zlib/INDEX
diff --git a/NEWS b/NEWS
index f2a9c12..1103135 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -8,18 +8,21 @@ see ONEWS.
 http://gcc.gnu.org/gcc-4.9/index.html
                              GCC 4.9 Release Series
 
-   April 22, 2014
+   July 16, 2014
 
    The [1]GNU project and the GCC developers are pleased to announce the
-   release of GCC 4.9.0.
+   release of GCC 4.9.1.
 
-   This release is a major release, containing new features (as well as
-   many other improvements) relative to GCC 4.8.x.
+   This release is a bug-fix release, containing fixes for regressions in
+   GCC 4.9.0 relative to previous releases of GCC.
 
 Release History
 
+   GCC 4.9.1
+          July 16, 2014 ([2]changes, [3]documentation)
+
    GCC 4.9.0
-          April 22, 2014 ([2]changes, [3]documentation)
+          April 22, 2014 ([4]changes, [5]documentation)
 
 References and Acknowledgements
 
@@ -27,52 +30,54 @@ References and Acknowledgements
    supports several other languages aside from C, it now stands for the
    GNU Compiler Collection.
 
-   A list of [4]successful builds is updated as new information becomes
+   A list of [6]successful builds is updated as new information becomes
    available.
 
    The GCC developers would like to thank the numerous people that have
    contributed new features, improvements, bug fixes, and other changes as
-   well as test results to GCC. This [5]amazing group of volunteers is
+   well as test results to GCC. This [7]amazing group of volunteers is
    what makes GCC successful.
 
-   For additional information about GCC please refer to the [6]GCC project
-   web site or contact the [7]GCC development mailing list.
+   For additional information about GCC please refer to the [8]GCC project
+   web site or contact the [9]GCC development mailing list.
 
-   To obtain GCC please use [8]our mirror sites or [9]our SVN server.
+   To obtain GCC please use [10]our mirror sites or [11]our SVN server.
 
 
     For questions related to the use of GCC, please consult these web
-    pages and the [10]GCC manuals. If that fails, the
-    [11]gcc-help@gcc.gnu.org mailing list might help. Comments on these
+    pages and the [12]GCC manuals. If that fails, the
+    [13]gcc-help@gcc.gnu.org mailing list might help. Comments on these
     web pages and the development of GCC are welcome on our developer
-    list at [12]gcc@gcc.gnu.org. All of [13]our lists have public
+    list at [14]gcc@gcc.gnu.org. All of [15]our lists have public
     archives.
 
-   Copyright (C) [14]Free Software Foundation, Inc. Verbatim copying and
+   Copyright (C) [16]Free Software Foundation, Inc. Verbatim copying and
    distribution of this entire article is permitted in any medium,
    provided this notice is preserved.
 
-   These pages are [15]maintained by the GCC team. Last modified
-   2014-04-22[16].
+   These pages are [17]maintained by the GCC team. Last modified
+   2014-07-16[18].
 
 References
 
    1. http://www.gnu.org/
    2. http://gcc.gnu.org/gcc-4.9/changes.html
-   3. http://gcc.gnu.org/onlinedocs/4.9.0/
-   4. http://gcc.gnu.org/gcc-4.9/buildstat.html
-   5. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
-   6. http://gcc.gnu.org/index.html
-   7. mailto:gcc@gcc.gnu.org
-   8. http://gcc.gnu.org/mirrors.html
-   9. http://gcc.gnu.org/svn.html
-  10. http://gcc.gnu.org/onlinedocs/
-  11. mailto:gcc-help@gcc.gnu.org
-  12. mailto:gcc@gcc.gnu.org
-  13. http://gcc.gnu.org/lists.html
-  14. http://www.fsf.org/
-  15. http://gcc.gnu.org/about.html
-  16. http://validator.w3.org/check/referer
+   3. http://gcc.gnu.org/onlinedocs/4.9.1/
+   4. http://gcc.gnu.org/gcc-4.9/changes.html
+   5. https://gcc.gnu.org/onlinedocs/4.9.0/
+   6. http://gcc.gnu.org/gcc-4.9/buildstat.html
+   7. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
+   8. http://gcc.gnu.org/index.html
+   9. mailto:gcc@gcc.gnu.org
+  10. http://gcc.gnu.org/mirrors.html
+  11. http://gcc.gnu.org/svn.html
+  12. https://gcc.gnu.org/onlinedocs/
+  13. mailto:gcc-help@gcc.gnu.org
+  14. mailto:gcc@gcc.gnu.org
+  15. https://gcc.gnu.org/lists.html
+  16. http://www.fsf.org/
+  17. https://gcc.gnu.org/about.html
+  18. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-4.9/changes.html
                              GCC 4.9 Release Series
@@ -90,9 +95,20 @@ Caveats
        architectures have been obsoleted:
           + Solaris 9 (*-*-solaris2.9). Details can be found in the
             [1]announcement.
+     * On AArch64, the singleton vector types int64x1_t, uint64x1_t and
+       float64x1_t exported by arm_neon.h are defined to be the same as
+       their base types. This results in incorrect application of
+       parameter passing rules to arguments of types int64x1_t and
+       uint64x1_t, with respect to the AAPCS64 ABI specification. In
+       addition, names of C++ functions with parameters of these types
+       (including float64x1_t) are not mangled correctly. The current
+       typedef declarations also unintentionally allow implicit casting
+       between singleton vector types and their base types. These issues
+       will be resolved in a near future release. See [2]PR60825 for more
+       information.
 
    More information on porting to GCC 4.9 from previous versions of GCC
-   can be found in the [2]porting guide for this release.
+   can be found in the [3]porting guide for this release.
 
 General Optimizer Improvements
 
@@ -114,13 +130,13 @@ General Optimizer Improvements
             improving overall memory usage at link time.
           + C++ hidden keyed methods can now be optimized out.
           + When using a linker plugin, compiling with the -flto option
-            now generates slim objects files (.o) which only contain
+            now generates slim object files (.o) which only contain
             intermediate language representation for LTO. Use
             -ffat-lto-objects to create files which contain additionally
             the object code. To generate static libraries suitable for LTO
             processing, use gcc-ar and gcc-ranlib; to list symbols from a
-            slim object file use gcc-nm. (Requires that ar, ranlib and nm
-            have been compiled with plugin support.)
+            slim object file use gcc-nm. (This requires that ar, ranlib
+            and nm have been compiled with plugin support.)
        Memory usage building Firefox with debug enabled was reduced from
        15GB to 3.5GB; link time from 1700 seconds to 350 seconds.
      * Inter-procedural optimization improvements:
@@ -149,10 +165,11 @@ General Optimizer Improvements
 
 New Languages and Language specific improvements
 
-     * Version 4.0 of the [3]OpenMP specification is now supported for the
-       C and C++ compilers. The new -fopenmp-simd option can be used to
+     * Version 4.0 of the [4]OpenMP specification is now supported in the
+       C and C++ compilers and starting with the 4.9.1 release also in the
+       Fortran compiler. The new -fopenmp-simd option can be used to
        enable OpenMP's SIMD directives, while ignoring other OpenMP
-       directives. The new [4]-fsimd-cost-model= option permits to tune
+       directives. The new [5]-fsimd-cost-model= option permits to tune
        the vectorization cost model for loops annotated with OpenMP and
        Cilk Plus simd directives; -Wopenmp-simd warns when the current
        costmodel overrides simd directives set by the user.
@@ -168,7 +185,7 @@ New Languages and Language specific improvements
   C family
 
      * Support for colorizing diagnostics emitted by GCC has been added.
-       The [5]-fdiagnostics-color=auto will enable it when outputting to
+       The [6]-fdiagnostics-color=auto will enable it when outputting to
        terminals, -fdiagnostics-color=always unconditionally. The
        GCC_COLORS environment variable can be used to customize the colors
        or disable coloring. If GCC_COLORS variable is present in the
@@ -192,11 +209,11 @@ late struct X<1000>;
 
     test.C:2:46: error: incomplete type `X<100>' used in nested name specifier
 
-     * With the new [6]#pragma GCC ivdep, the user can assert that there
+     * With the new [7]#pragma GCC ivdep, the user can assert that there
        are no loop-carried dependencies which would prevent concurrent
        execution of consecutive iterations using SIMD (single instruction
        multiple data) instructions.
-     * Support for [7]Cilk Plus has been added and can be enabled with the
+     * Support for [8]Cilk Plus has been added and can be enabled with the
        -fcilkplus option. Cilk Plus is an extension to the C and C++
        languages to support data and task parallelism. The present
        implementation follows ABI version 1.2; all features but _Cilk_for
@@ -221,8 +238,8 @@ late struct X<1000>;
 
   C++
 
-     * The G++ implementation of [8]C++1y return type deduction for normal
-       functions has been updated to conform to [9]N3638, the proposal
+     * The G++ implementation of [9]C++1y return type deduction for normal
+       functions has been updated to conform to [10]N3638, the proposal
        accepted into the working paper. Most notably, it adds
        decltype(auto) for getting decltype semantics rather than the
        template argument deduction semantics of plain auto:
@@ -231,14 +248,14 @@ int& f();
          auto  i1 = f(); // int
 decltype(auto) i2 = f(); // int&
 
-     * G++ supports [10]C++1y lambda capture initializers:
+     * G++ supports [11]C++1y lambda capture initializers:
 
 [x = 42]{ ... };
 
        Actually, they have been accepted since GCC 4.5, but now the
        compiler doesn't warn about them with -std=c++1y, and supports
        parenthesized and brace-enclosed initializers as well.
-     * G++ supports [11]C++1y variable length arrays. G++ has supported
+     * G++ supports [12]C++1y variable length arrays. G++ has supported
        GNU/C99-style VLAs for a long time, but now additionally supports
        initializers and lambda capture by reference. In C++1y mode G++
        will complain about VLA uses that are not permitted by the draft
@@ -253,7 +270,7 @@ void f(int n) {
   &a; // error, taking address of VLA
 }
 
-     * G++ supports the [12]C++1y [[deprecated]] attribute modulo bugs in
+     * G++ supports the [13]C++1y [[deprecated]] attribute modulo bugs in
        the underlying [[gnu::deprecated]] attribute. Classes and functions
        can be marked deprecated and a diagnostic message added:
 
@@ -271,7 +288,7 @@ A aa; // warning: 'A' is deprecated : A is deprecated in C++14; Use B instead
 int j = bar(2); // warning: 'int bar(int)' is deprecated : bar is unsafe; use fo
 o() instead
 
-     * G++ supports [13]C++1y digit separators. Long numeric literals can
+     * G++ supports [14]C++1y digit separators. Long numeric literals can
        be subdivided with a single quote ' to enhance readability:
 
 int i = 1048576;
@@ -283,20 +300,38 @@ int n = 0b0001'0000'0000'0000'0000'0000;
 double x = 1.602'176'565e-19;
 double y = 1.602'176'565e-1'9;
 
-     * G++ supports [14]C++1y polymorphic lambdas.
+     * G++ supports [15]C++1y generic (polymorphic) lambdas.
 
 // a functional object that will increment any type
 auto incr = [](auto x) { return x++; };
 
+     * As a GNU extension, G++ supports explicit template parameter syntax
+       for generic lambdas. This can be combined in the expected way with
+       the standard auto syntax.
+
+// a functional object that will add two like-type objects
+auto add = [] <typename T> (T a, T b) { return a + b; };
+
+     * G++ supports unconstrained generic functions as specified by
+       S:4.1.2 and S:5.1.1 of [16]N3889: Concepts Lite Specification.
+       Briefly, auto may be used as a type-specifier in a parameter
+       declaration of any function declarator in order to introduce an
+       implicit function template parameter, akin to generic lambdas.
+
+// the following two function declarations are equivalent
+auto incr(auto x) { return x++; }
+template <typename T>
+auto incr(T x) { return x++; }
+
     Runtime Library (libstdc++)
 
-     * [15]Improved support for C++11, including:
+     * [17]Improved support for C++11, including:
           + support for <regex>;
           + The associative containers in <map> and <set> and the
             unordered associative containers in <unordered_map> and
             <unordered_set> meet the allocator-aware container
             requirements;
-     * [16]Improved experimental support for the upcoming ISO C++
+     * [18]Improved experimental support for the upcoming ISO C++
        standard, C++14, including:
           + fixing constexpr member functions without const;
           + implementation of the std::exchange() utility function;
@@ -328,25 +363,23 @@ auto incr = [](auto x) { return x++; };
           + Module files: The version of the module files (.mod) has been
             incremented; additionally, module files are now compressed.
             Fortran MODULEs compiled by earlier GCC versions have to be
-            recompiled, when they are USEd by files compiled with GCC 4.9,
-            because GCC 4.9 is not able to read .mod files of earlier GCC
+            recompiled, when they are USEd by files compiled with GCC 4.9.
+            GCC 4.9 is not able to read .mod files of earlier GCC
             versions; attempting to do so gives an error message. Note:
             The ABI of the produced assembler data itself has not changed:
-            object files and libraries are fully compatible to older
-            versions. (Except for the next items.)
+            object files and libraries are fully compatible with older
+            versions (except as stated below).
           + ABI changes:
-               o Note that the [17]argument passing ABI has changed for
-                 scalar dummy arguments of type INTEGER, REAL, COMPLEX and
-                 LOGICAL, which have both the VALUE and the OPTIONAL
-                 attribute.
-               o Due to the support of finalization, the virtual table
-                 associated with polymorphic variables has changed.
-                 Therefore, code containing CLASS should be recompiled,
-                 including all files which define derived types involved
-                 in the type definition used by polymorphic variables.
-                 (Note: Due to the incremented module version, trying to
-                 mix old code with new code will usually give an error
-                 message.)
+               o The [19]argument passing ABI has changed for scalar dummy
+                 arguments of type INTEGER, REAL, COMPLEX and LOGICAL,
+                 which have both the VALUE and the OPTIONAL attributes.
+               o To support finalization the virtual table associated with
+                 polymorphic variables has changed. Code containing CLASS
+                 should be recompiled, including all files which define
+                 derived types involved in the type definition used by
+                 polymorphic variables. (Note: Due to the incremented
+                 module version, trying to mix old code with new code will
+                 usually give an error message.)
           + GNU Fortran no longer deallocates allocatable variables or
             allocatable components of variables declared in the main
             program. Since Fortran 2008, the standard explicitly states
@@ -365,7 +398,7 @@ auto incr = [](auto x) { return x++; };
      * The compiler no longer unconditionally warns about DO loops with
        zero iterations. This warning is now controlled by the -Wzerotrips
        option, which is implied by -Wall.
-     * The new NO_ARG_CHECK attribute of the [18]!GCC$ directive can be
+     * The new NO_ARG_CHECK attribute of the [20]!GCC$ directive can be
        used to disable the type-kind-rank (TKR) argument check for a dummy
        argument. The feature is similar to ISO/IEC TS 29133:2012's
        TYPE(*), except that it additionally also disables the rank check.
@@ -381,20 +414,20 @@ auto incr = [](auto x) { return x++; };
        contrary to NO_ARG_CHECK assumed-rank arguments pass an array
        descriptor which contains the array shape and stride of the
        argument.
-     * [19]Fortran 2003:
-          + Finalization is now supported. Note that finalization is
-            currently only done for a subset of the situations in which it
-            should occur.
+     * [21]Fortran 2003:
+          + Finalization is now supported. It is currently only done for a
+            subset of those situations in which it should occur.
           + Experimental support for scalar character components with
             deferred length (i.e. allocatable string length) in derived
             types has been added. (Deferred-length character variables are
             supported since GCC 4.6.)
-     * [20]Fortran 2008:
-          + When STOP or ERROR STOP is used to terminate the execution and
-            any exception (but inexact) is signaling, a warning is printed
-            to ERROR_UNIT, indicating which exceptions are signaling. The
-            [21]-ffpe-summary= command-line option can be used to
-            fine-tune for which exception the warning should be shown.
+     * [22]Fortran 2008:
+          + When STOP or ERROR STOP are used to terminate the execution
+            and any exception (but inexact) is signaling, a warning is
+            printed to ERROR_UNIT, indicating which exceptions are
+            signaling. The [23]-ffpe-summary= command-line option can be
+            used to fine-tune for which exceptions the warning should be
+            shown.
           + Rounding on input (READ) is now handled on systems where
             strtod honours the rounding mode. (For output, rounding is
             supported since GCC 4.5.) Note that for input, the compatible
@@ -415,7 +448,7 @@ New Targets and Target Specific Improvements
        and are available through the -march=armv8-a+crc and
        -march=armv8-a+crypto options.
      * Initial support for ILP32 has now been added to the compiler. This
-       is now available through the command line option -mabi=ilp32.
+       is now available through the command-line option -mabi=ilp32.
        Support for ILP32 is considered experimental as the ABI
        specification is still beta.
      * Coverage of more of the ISA including the SIMD extensions has been
@@ -431,6 +464,11 @@ New Targets and Target Specific Improvements
      * A number of structural changes have been made to both the ARM and
        AArch64 backends to facilitate improved code-generation.
 
+  ARC
+
+     * A port for Synopsys Designware ARC has been contributed by Embecosm
+       and Synopsys Inc.
+
   ARM
 
      * Use of Advanced SIMD (Neon) for 64-bit scalar computations has been
@@ -449,8 +487,8 @@ New Targets and Target Specific Improvements
        intrinsics and are available through the -march=armv8-a+crc and
        mfpu=crypto-neon-fp-armv8 options.
      * LRA is now on by default for the ARM target. This can be turned off
-       using the -mno-lra option. This option is purely transitionary
-       command line option and will be removed in a future release. We are
+       using the -mno-lra option. This option is purely transitionary
+       command-line option and will be removed in a future release. We are
        interested in any bug reports regarding functional and performance
        regressions with LRA.
      * A new option -mslow-flash-data to improve performance of programs
@@ -490,7 +528,7 @@ New Targets and Target Specific Improvements
        a file that are tagged with the corresponding target attribute
        without having to compile the entire file with the -mxxx option.
        This improves the usability of x86 intrinsics and is particularly
-       useful when doing [22]Function Multiversioning.
+       useful when doing [24]Function Multiversioning.
      * GCC now supports the new Intel microarchitecture named Silvermont
        through -march=silvermont.
      * GCC now supports the new Intel microarchitecture named Broadwell
@@ -563,8 +601,8 @@ New Targets and Target Specific Improvements
        A certain amount of bytes is reserved before the function entry
        label plus a NOP is inserted at its very beginning to implement a
        backward jump when applying a patch. The feature can either be
-       enabled via command line option -mhotpatch for a compilation unit
-       or can be enabled per function using the hotpatch attribute.
+       enabled per compilation unit via the command-line option -mhotpatch
+       or per function using the hotpatch attribute.
      * The shrink wrap optimization is now supported on S/390 and enabled
        by default.
      * A major rework of the routines to determine which registers need to
@@ -576,7 +614,7 @@ New Targets and Target Specific Improvements
   RX
 
      * The port now allows to specify the RX100, RX200, and RX600
-       processors with the command line options -mcpu=rx100, -mcpu=rx200
+       processors with the command-line options -mcpu=rx100, -mcpu=rx200
        and -mcpu=rx600.
 
   SH
@@ -596,74 +634,91 @@ New Targets and Target Specific Improvements
      * The option -mcmpeqdi has been deprecated. Specifying it will result
        in a warning and will not influence code generation.
 
+GCC 4.9.1
+
+   This is the [25]list of problem reports (PRs) from GCC's bug tracking
+   system that are known to be fixed in the 4.9.1 release. This list might
+   not be complete (that is, it is possible that some PRs that have been
+   fixed are not listed here).
+
+   Version 4.0 of the [26]OpenMP specification is supported even in
+   Fortran, not just C and C++.
+
 
     For questions related to the use of GCC, please consult these web
-    pages and the [23]GCC manuals. If that fails, the
-    [24]gcc-help@gcc.gnu.org mailing list might help. Comments on these
+    pages and the [27]GCC manuals. If that fails, the
+    [28]gcc-help@gcc.gnu.org mailing list might help. Comments on these
     web pages and the development of GCC are welcome on our developer
-    list at [25]gcc@gcc.gnu.org. All of [26]our lists have public
+    list at [29]gcc@gcc.gnu.org. All of [30]our lists have public
     archives.
 
-   Copyright (C) [27]Free Software Foundation, Inc. Verbatim copying and
+   Copyright (C) [31]Free Software Foundation, Inc. Verbatim copying and
    distribution of this entire article is permitted in any medium,
    provided this notice is preserved.
 
-   These pages are [28]maintained by the GCC team. Last modified
-   2014-04-20[29].
+   These pages are [32]maintained by the GCC team. Last modified
+   2014-07-16[33].
 
 References
 
-   1. http://gcc.gnu.org/ml/gcc-patches/2013-05/msg00728.html
-   2. http://gcc.gnu.org/gcc-4.9/porting_to.html
-   3. http://openmp.org/wp/openmp-specifications/
-   4. http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fsimd-cost-model-908
-   5. http://gcc.gnu.org/onlinedocs/gcc/Language-Independent-Options.html#index-fdiagnostics-color-246
-   6. http://gcc.gnu.org/onlinedocs/gcc/Loop-Specific-Pragmas.html
-   7. https://www.cilkplus.org/
-   8. http://gcc.gnu.org/projects/cxx1y.html
-   9. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3638.html
-  10. http://gcc.gnu.org/projects/cxx1y.html
+   1. https://gcc.gnu.org/ml/gcc-patches/2013-05/msg00728.html
+   2. https://gcc.gnu.org/PR60825
+   3. https://gcc.gnu.org/gcc-4.9/porting_to.html
+   4. http://openmp.org/wp/openmp-specifications/
+   5. https://gcc.gnu.org/onlinedocs/gcc-4.9.0/gcc/Optimize-Options.html#index-fsimd-cost-model-908
+   6. https://gcc.gnu.org/onlinedocs/gcc-4.9.0/gcc/Language-Independent-Options.html#index-fdiagnostics-color-252
+   7. https://gcc.gnu.org/onlinedocs/gcc-4.9.0/gcc/Loop-Specific-Pragmas.html
+   8. https://www.cilkplus.org/
+   9. http://gcc.gnu.org/projects/cxx1y.html
+  10. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3638.html
   11. http://gcc.gnu.org/projects/cxx1y.html
   12. http://gcc.gnu.org/projects/cxx1y.html
   13. http://gcc.gnu.org/projects/cxx1y.html
   14. http://gcc.gnu.org/projects/cxx1y.html
-  15. http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011
-  16. http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2014
-  17. http://gcc.gnu.org/onlinedocs/gfortran/Argument-passing-conventions.html
-  18. http://gcc.gnu.org/onlinedocs/gfortran/GNU-Fortran-Compiler-Directives.html
-  19. http://gcc.gnu.org/wiki/Fortran2003Status
-  20. http://gcc.gnu.org/wiki/Fortran2008Status
-  21. http://gcc.gnu.org/onlinedocs/gfortran/Debugging-Options.html
-  22. http://gcc.gnu.org/onlinedocs/gcc/Function-Multiversioning.html
-  23. http://gcc.gnu.org/onlinedocs/
-  24. mailto:gcc-help@gcc.gnu.org
-  25. mailto:gcc@gcc.gnu.org
-  26. http://gcc.gnu.org/lists.html
-  27. http://www.fsf.org/
-  28. http://gcc.gnu.org/about.html
-  29. http://validator.w3.org/check/referer
+  15. http://gcc.gnu.org/projects/cxx1y.html
+  16. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3889.pdf
+  17. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011
+  18. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2014
+  19. https://gcc.gnu.org/onlinedocs/gcc-4.9.0/gfortran/Argument-passing-conventions.html
+  20. https://gcc.gnu.org/onlinedocs/gcc-4.9.0/gfortran/GNU-Fortran-Compiler-Directives.html
+  21. https://gcc.gnu.org/wiki/Fortran2003Status
+  22. https://gcc.gnu.org/wiki/Fortran2008Status
+  23. https://gcc.gnu.org/onlinedocs/gcc-4.9.0/gfortran/Debugging-Options.html
+  24. https://gcc.gnu.org/onlinedocs/gcc-4.9.0/gcc/Function-Multiversioning.html
+  25. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.1
+  26. http://openmp.org/wp/openmp-specifications/
+  27. https://gcc.gnu.org/onlinedocs/
+  28. mailto:gcc-help@gcc.gnu.org
+  29. mailto:gcc@gcc.gnu.org
+  30. https://gcc.gnu.org/lists.html
+  31. http://www.fsf.org/
+  32. https://gcc.gnu.org/about.html
+  33. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-4.8/index.html
                              GCC 4.8 Release Series
 
-   October 16, 2013
+   May 22, 2014
 
    The [1]GNU project and the GCC developers are pleased to announce the
-   release of GCC 4.8.2.
+   release of GCC 4.8.3.
 
    This release is a bug-fix release, containing fixes for regressions in
-   GCC 4.8.1 relative to previous releases of GCC.
+   GCC 4.8.2 relative to previous releases of GCC.
 
 Release History
 
+   GCC 4.8.3
+          May 22, 2014 ([2]changes, [3]documentation)
+
    GCC 4.8.2
-          October 16, 2013 ([2]changes, [3]documentation)
+          October 16, 2013 ([4]changes, [5]documentation)
 
    GCC 4.8.1
-          May 31, 2013 ([4]changes, [5]documentation)
+          May 31, 2013 ([6]changes, [7]documentation)
 
    GCC 4.8.0
-          March 22, 2013 ([6]changes, [7]documentation)
+          March 22, 2013 ([8]changes, [9]documentation)
 
 References and Acknowledgements
 
@@ -671,56 +726,58 @@ References and Acknowledgements
    supports several other languages aside from C, it now stands for the
    GNU Compiler Collection.
 
-   A list of [8]successful builds is updated as new information becomes
+   A list of [10]successful builds is updated as new information becomes
    available.
 
    The GCC developers would like to thank the numerous people that have
    contributed new features, improvements, bug fixes, and other changes as
-   well as test results to GCC. This [9]amazing group of volunteers is
+   well as test results to GCC. This [11]amazing group of volunteers is
    what makes GCC successful.
 
-   For additional information about GCC please refer to the [10]GCC
-   project web site or contact the [11]GCC development mailing list.
+   For additional information about GCC please refer to the [12]GCC
+   project web site or contact the [13]GCC development mailing list.
 
-   To obtain GCC please use [12]our mirror sites or [13]our SVN server.
+   To obtain GCC please use [14]our mirror sites or [15]our SVN server.
 
 
     For questions related to the use of GCC, please consult these web
-    pages and the [14]GCC manuals. If that fails, the
-    [15]gcc-help@gcc.gnu.org mailing list might help. Comments on these
+    pages and the [16]GCC manuals. If that fails, the
+    [17]gcc-help@gcc.gnu.org mailing list might help. Comments on these
     web pages and the development of GCC are welcome on our developer
-    list at [16]gcc@gcc.gnu.org. All of [17]our lists have public
+    list at [18]gcc@gcc.gnu.org. All of [19]our lists have public
     archives.
 
-   Copyright (C) [18]Free Software Foundation, Inc. Verbatim copying and
+   Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and
    distribution of this entire article is permitted in any medium,
    provided this notice is preserved.
 
-   These pages are [19]maintained by the GCC team. Last modified
-   2013-10-16[20].
+   These pages are [21]maintained by the GCC team. Last modified
+   2014-06-11[22].
 
 References
 
    1. http://www.gnu.org/
    2. http://gcc.gnu.org/gcc-4.8/changes.html
-   3. http://gcc.gnu.org/onlinedocs/4.8.2/
+   3. https://gcc.gnu.org/onlinedocs/4.8.3/
    4. http://gcc.gnu.org/gcc-4.8/changes.html
-   5. http://gcc.gnu.org/onlinedocs/4.8.1/
+   5. https://gcc.gnu.org/onlinedocs/4.8.2/
    6. http://gcc.gnu.org/gcc-4.8/changes.html
-   7. http://gcc.gnu.org/onlinedocs/4.8.0/
-   8. http://gcc.gnu.org/gcc-4.8/buildstat.html
-   9. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
-  10. http://gcc.gnu.org/index.html
-  11. mailto:gcc@gcc.gnu.org
-  12. http://gcc.gnu.org/mirrors.html
-  13. http://gcc.gnu.org/svn.html
-  14. http://gcc.gnu.org/onlinedocs/
-  15. mailto:gcc-help@gcc.gnu.org
-  16. mailto:gcc@gcc.gnu.org
-  17. http://gcc.gnu.org/lists.html
-  18. http://www.fsf.org/
-  19. http://gcc.gnu.org/about.html
-  20. http://validator.w3.org/check/referer
+   7. https://gcc.gnu.org/onlinedocs/4.8.1/
+   8. http://gcc.gnu.org/gcc-4.8/changes.html
+   9. https://gcc.gnu.org/onlinedocs/4.8.0/
+  10. http://gcc.gnu.org/gcc-4.8/buildstat.html
+  11. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
+  12. http://gcc.gnu.org/index.html
+  13. mailto:gcc@gcc.gnu.org
+  14. http://gcc.gnu.org/mirrors.html
+  15. http://gcc.gnu.org/svn.html
+  16. https://gcc.gnu.org/onlinedocs/
+  17. mailto:gcc-help@gcc.gnu.org
+  18. mailto:gcc@gcc.gnu.org
+  19. https://gcc.gnu.org/lists.html
+  20. http://www.fsf.org/
+  21. https://gcc.gnu.org/about.html
+  22. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-4.8/changes.html
                              GCC 4.8 Release Series
@@ -1399,28 +1456,38 @@ GCC 4.8.2
    not be complete (that is, it is possible that some PRs that have been
    fixed are not listed here).
 
+GCC 4.8.3
+
+   This is the [35]list of problem reports (PRs) from GCC's bug tracking
+   system that are known to be fixed in the 4.8.3 release. This list might
+   not be complete (that is, it is possible that some PRs that have been
+   fixed are not listed here).
+
+   Support for the new powerpc64le-linux platform has been added. It
+   defaults to generating code that conforms to the ELFV2 ABI.
+
 
     For questions related to the use of GCC, please consult these web
-    pages and the [35]GCC manuals. If that fails, the
-    [36]gcc-help@gcc.gnu.org mailing list might help. Comments on these
+    pages and the [36]GCC manuals. If that fails, the
+    [37]gcc-help@gcc.gnu.org mailing list might help. Comments on these
     web pages and the development of GCC are welcome on our developer
-    list at [37]gcc@gcc.gnu.org. All of [38]our lists have public
+    list at [38]gcc@gcc.gnu.org. All of [39]our lists have public
     archives.
 
-   Copyright (C) [39]Free Software Foundation, Inc. Verbatim copying and
+   Copyright (C) [40]Free Software Foundation, Inc. Verbatim copying and
    distribution of this entire article is permitted in any medium,
    provided this notice is preserved.
 
-   These pages are [40]maintained by the GCC team. Last modified
-   2013-11-26[41].
+   These pages are [41]maintained by the GCC team. Last modified
+   2014-06-11[42].
 
 References
 
-   1. http://gcc.gnu.org/wiki/cxx-conversion
+   1. https://gcc.gnu.org/wiki/cxx-conversion
    2. ftp://gcc.gnu.org/pub/gcc/infrastructure/
    3. http://www.nongnu.org/avr-libc/
-   4. http://gcc.gnu.org/PR54461
-   5. http://gcc.gnu.org/gcc-4.8/porting_to.html
+   4. https://gcc.gnu.org/PR54461
+   5. https://gcc.gnu.org/gcc-4.8/porting_to.html
    6. https://code.google.com/p/address-sanitizer/
    7. https://code.google.com/p/data-race-test/wiki/ThreadSanitizer
    8. https://lkml.org/lkml/2006/11/28/239
@@ -1431,57 +1498,61 @@ References
   13. http://gcc.gnu.org/gcc-4.8/cxx0x_status.html
   14. http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2012/n3386.html
   15. http://gcc.gnu.org/projects/cxx1y.html
-  16. http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011
-  17. http://gcc.gnu.org/onlinedocs/gfortran/BACKTRACE.html
-  18. http://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
-  19. http://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
-  20. http://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html
-  21. http://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
-  22. http://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
-  23. http://gcc.gnu.org/onlinedocs/gfortran/TMPDIR.html
-  24. http://gcc.gnu.org/wiki/Fortran2003Status
-  25. http://gcc.gnu.org/wiki/TS29113Status
-  26. http://gcc.gnu.org/viewcvs/trunk/libgfortran/libgfortran.h?content-type=text%2Fplain&view=co
+  16. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011
+  17. https://gcc.gnu.org/onlinedocs/gfortran/BACKTRACE.html
+  18. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
+  19. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
+  20. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html
+  21. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
+  22. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
+  23. https://gcc.gnu.org/onlinedocs/gfortran/TMPDIR.html
+  24. https://gcc.gnu.org/wiki/Fortran2003Status
+  25. https://gcc.gnu.org/wiki/TS29113Status
+  26. https://gcc.gnu.org/viewcvs/trunk/libgfortran/libgfortran.h?content-type=text%2Fplain&view=co
   27. http://chasm-interop.sourceforge.net/
-  28. http://gcc.gnu.org/wiki/avr-gcc#Fixed-Point_Support
-  29. http://gcc.gnu.org/onlinedocs/gcc/Fixed-Point.html
-  30. http://gcc.gnu.org/onlinedocs/gcc/X86-Built-in-Functions.html#X86-Built-in-Functions
-  31. http://gcc.gnu.org/onlinedocs/gcc/X86-Built-in-Functions.html#X86-Built-in-Functions
-  32. http://gcc.gnu.org/wiki/FunctionMultiVersioning
-  33. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.1
-  34. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.2
-  35. http://gcc.gnu.org/onlinedocs/
-  36. mailto:gcc-help@gcc.gnu.org
-  37. mailto:gcc@gcc.gnu.org
-  38. http://gcc.gnu.org/lists.html
-  39. http://www.fsf.org/
-  40. http://gcc.gnu.org/about.html
-  41. http://validator.w3.org/check/referer
+  28. https://gcc.gnu.org/wiki/avr-gcc#Fixed-Point_Support
+  29. https://gcc.gnu.org/onlinedocs/gcc/Fixed-Point.html
+  30. https://gcc.gnu.org/onlinedocs/gcc/X86-Built-in-Functions.html#X86-Built-in-Functions
+  31. https://gcc.gnu.org/onlinedocs/gcc/X86-Built-in-Functions.html#X86-Built-in-Functions
+  32. https://gcc.gnu.org/wiki/FunctionMultiVersioning
+  33. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.1
+  34. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.2
+  35. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.3
+  36. https://gcc.gnu.org/onlinedocs/
+  37. mailto:gcc-help@gcc.gnu.org
+  38. mailto:gcc@gcc.gnu.org
+  39. https://gcc.gnu.org/lists.html
+  40. http://www.fsf.org/
+  41. https://gcc.gnu.org/about.html
+  42. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-4.7/index.html
                              GCC 4.7 Release Series
 
-   April 11, 2013
+   June 12, 2014
 
    The [1]GNU project and the GCC developers are pleased to announce the
-   release of GCC 4.7.3.
+   release of GCC 4.7.4.
 
    This release is a bug-fix release, containing fixes for regressions in
-   GCC 4.7.2 relative to previous releases of GCC.
+   GCC 4.7.3 relative to previous releases of GCC.
 
 Release History
 
+   GCC 4.7.4
+          June 12, 2014 ([2]changes, [3]documentation)
+
    GCC 4.7.3
-          April 11, 2013 ([2]changes, [3]documentation)
+          April 11, 2013 ([4]changes, [5]documentation)
 
    GCC 4.7.2
-          September 20, 2012 ([4]changes, [5]documentation)
+          September 20, 2012 ([6]changes, [7]documentation)
 
    GCC 4.7.1
-          June 14, 2012 ([6]changes, [7]documentation)
+          June 14, 2012 ([8]changes, [9]documentation)
 
    GCC 4.7.0
-          March 22, 2012 ([8]changes, [9]documentation)
+          March 22, 2012 ([10]changes, [11]documentation)
 
 References and Acknowledgements
 
@@ -1489,58 +1560,60 @@ References and Acknowledgements
    supports several other languages aside from C, it now stands for the
    GNU Compiler Collection.
 
-   A list of [10]successful builds is updated as new information becomes
+   A list of [12]successful builds is updated as new information becomes
    available.
 
    The GCC developers would like to thank the numerous people that have
    contributed new features, improvements, bug fixes, and other changes as
-   well as test results to GCC. This [11]amazing group of volunteers is
+   well as test results to GCC. This [13]amazing group of volunteers is
    what makes GCC successful.
 
-   For additional information about GCC please refer to the [12]GCC
-   project web site or contact the [13]GCC development mailing list.
+   For additional information about GCC please refer to the [14]GCC
+   project web site or contact the [15]GCC development mailing list.
 
-   To obtain GCC please use [14]our mirror sites or [15]our SVN server.
+   To obtain GCC please use [16]our mirror sites or [17]our SVN server.
 
 
     For questions related to the use of GCC, please consult these web
-    pages and the [16]GCC manuals. If that fails, the
-    [17]gcc-help@gcc.gnu.org mailing list might help. Comments on these
+    pages and the [18]GCC manuals. If that fails, the
+    [19]gcc-help@gcc.gnu.org mailing list might help. Comments on these
     web pages and the development of GCC are welcome on our developer
-    list at [18]gcc@gcc.gnu.org. All of [19]our lists have public
+    list at [20]gcc@gcc.gnu.org. All of [21]our lists have public
     archives.
 
-   Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and
+   Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
    distribution of this entire article is permitted in any medium,
    provided this notice is preserved.
 
-   These pages are [21]maintained by the GCC team. Last modified
-   2013-04-11[22].
+   These pages are [23]maintained by the GCC team. Last modified
+   2014-06-12[24].
 
 References
 
    1. http://www.gnu.org/
    2. http://gcc.gnu.org/gcc-4.7/changes.html
-   3. http://gcc.gnu.org/onlinedocs/4.7.3/
+   3. https://gcc.gnu.org/onlinedocs/4.7.4/
    4. http://gcc.gnu.org/gcc-4.7/changes.html
-   5. http://gcc.gnu.org/onlinedocs/4.7.2/
+   5. https://gcc.gnu.org/onlinedocs/4.7.3/
    6. http://gcc.gnu.org/gcc-4.7/changes.html
-   7. http://gcc.gnu.org/onlinedocs/4.7.1/
+   7. https://gcc.gnu.org/onlinedocs/4.7.2/
    8. http://gcc.gnu.org/gcc-4.7/changes.html
-   9. http://gcc.gnu.org/onlinedocs/4.7.0/
-  10. http://gcc.gnu.org/gcc-4.7/buildstat.html
-  11. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
-  12. http://gcc.gnu.org/index.html
-  13. mailto:gcc@gcc.gnu.org
-  14. http://gcc.gnu.org/mirrors.html
-  15. http://gcc.gnu.org/svn.html
-  16. http://gcc.gnu.org/onlinedocs/
-  17. mailto:gcc-help@gcc.gnu.org
-  18. mailto:gcc@gcc.gnu.org
-  19. http://gcc.gnu.org/lists.html
-  20. http://www.fsf.org/
-  21. http://gcc.gnu.org/about.html
-  22. http://validator.w3.org/check/referer
+   9. https://gcc.gnu.org/onlinedocs/4.7.1/
+  10. http://gcc.gnu.org/gcc-4.7/changes.html
+  11. https://gcc.gnu.org/onlinedocs/4.7.0/
+  12. http://gcc.gnu.org/gcc-4.7/buildstat.html
+  13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
+  14. http://gcc.gnu.org/index.html
+  15. mailto:gcc@gcc.gnu.org
+  16. http://gcc.gnu.org/mirrors.html
+  17. http://gcc.gnu.org/svn.html
+  18. https://gcc.gnu.org/onlinedocs/
+  19. mailto:gcc-help@gcc.gnu.org
+  20. mailto:gcc@gcc.gnu.org
+  21. https://gcc.gnu.org/lists.html
+  22. http://www.fsf.org/
+  23. https://gcc.gnu.org/about.html
+  24. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-4.7/changes.html
                              GCC 4.7 Release Series
@@ -2314,78 +2387,86 @@ GCC 4.7.3
    not be complete (that is, it is possible that some PRs that have been
    fixed are not listed here).
 
+GCC 4.7.4
+
+   This is the [49]list of problem reports (PRs) from GCC's bug tracking
+   system that are known to be fixed in the 4.7.4 release. This list might
+   not be complete (that is, it is possible that some PRs that have been
+   fixed are not listed here).
+
 
     For questions related to the use of GCC, please consult these web
-    pages and the [49]GCC manuals. If that fails, the
-    [50]gcc-help@gcc.gnu.org mailing list might help. Comments on these
+    pages and the [50]GCC manuals. If that fails, the
+    [51]gcc-help@gcc.gnu.org mailing list might help. Comments on these
     web pages and the development of GCC are welcome on our developer
-    list at [51]gcc@gcc.gnu.org. All of [52]our lists have public
+    list at [52]gcc@gcc.gnu.org. All of [53]our lists have public
     archives.
 
-   Copyright (C) [53]Free Software Foundation, Inc. Verbatim copying and
+   Copyright (C) [54]Free Software Foundation, Inc. Verbatim copying and
    distribution of this entire article is permitted in any medium,
    provided this notice is preserved.
 
-   These pages are [54]maintained by the GCC team. Last modified
-   2013-04-11[55].
+   These pages are [55]maintained by the GCC team. Last modified
+   2014-06-12[56].
 
 References
 
-   1. http://gcc.gnu.org/ml/gcc-patches/2011-03/msg01263.html
+   1. https://gcc.gnu.org/ml/gcc-patches/2011-03/msg01263.html
    2. http://savannah.nongnu.org/bugs/?35407
-   3. http://gcc.gnu.org/PR18145
-   4. http://gcc.gnu.org/gcc-4.7/porting_to.html
+   3. https://gcc.gnu.org/PR18145
+   4. https://gcc.gnu.org/gcc-4.7/porting_to.html
    5. http://openmp.org/wp/openmp-specifications/
-   6. http://gcc.gnu.org/wiki/TransactionalMemory
-   7. http://gcc.gnu.org/wiki/Atomic/GCCMM
+   6. https://gcc.gnu.org/wiki/TransactionalMemory
+   7. https://gcc.gnu.org/wiki/Atomic/GCCMM
    8. http://gcc.gnu.org/gcc-4.7/cxx0x_status.html
    9. http://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   10. http://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   11. http://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   12. http://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   13. http://gcc.gnu.org/gcc-4.7/cxx0x_status.html
-  14. http://gcc.gnu.org/PR14258
-  15. http://gcc.gnu.org/PR35688
-  16. http://gcc.gnu.org/onlinedocs/gcc-4.7.1/libstdc++/manual/manual/status.html#status.iso.2011
-  17. http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfstack-arrays_007d-254
-  18. http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Optimize-Options.html#index-Ofast-689
-  19. http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfno-protect-parens_007d-270
-  20. http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfstack-arrays_007d-254
-  21. http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfrontend-optimize_007d-275
-  22. http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWfunction-elimination_007d-170
-  23. http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfaggressive-function-elimination_007d-270
-  24. http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWreal-q-constant_007d-149
-  25. http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/SELECTED_005fREAL_005fKIND.html
+  14. https://gcc.gnu.org/PR14258
+  15. https://gcc.gnu.org/PR35688
+  16. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/libstdc++/manual/manual/status.html#status.iso.2011
+  17. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfstack-arrays_007d-254
+  18. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Optimize-Options.html#index-Ofast-689
+  19. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfno-protect-parens_007d-270
+  20. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfstack-arrays_007d-254
+  21. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfrontend-optimize_007d-275
+  22. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWfunction-elimination_007d-170
+  23. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfaggressive-function-elimination_007d-270
+  24. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWreal-q-constant_007d-149
+  25. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/SELECTED_005fREAL_005fKIND.html
   26. http://msdn.microsoft.com/en-us/library/bb787181%28v=vs.85%29.aspx
-  27. http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Debugging-Options.html#index-g_t_0040code_007bfno-backtrace_007d-183
-  28. http://gcc.gnu.org/wiki/Fortran2003Status
-  29. http://gcc.gnu.org/wiki/OOP
-  30. http://gcc.gnu.org/wiki/Fortran2008Status
-  31. http://gcc.gnu.org/wiki/Coarray
-  32. http://gcc.gnu.org/wiki/CoarrayLib
-  33. http://gcc.gnu.org/wiki/TS29113Status
-  34. http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bstd_003d_007d_0040var_007bstd_007d-option-53
+  27. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Debugging-Options.html#index-g_t_0040code_007bfno-backtrace_007d-183
+  28. https://gcc.gnu.org/wiki/Fortran2003Status
+  29. https://gcc.gnu.org/wiki/OOP
+  30. https://gcc.gnu.org/wiki/Fortran2008Status
+  31. https://gcc.gnu.org/wiki/Coarray
+  32. https://gcc.gnu.org/wiki/CoarrayLib
+  33. https://gcc.gnu.org/wiki/TS29113Status
+  34. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bstd_003d_007d_0040var_007bstd_007d-option-53
   35. http://weekly.golang.org/doc/go1.html
-  36. http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Named-Address-Spaces.html
+  36. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Named-Address-Spaces.html
   37. http://nongnu.org/avr-libc/
-  38. http://gcc.gnu.org/PR54461
-  39. http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/AVR-Built%5f002din-Functions.html
+  38. https://gcc.gnu.org/PR54461
+  39. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/AVR-Built%5f002din-Functions.html
   40. https://sites.google.com/site/x32abi/
   41. http://www.dwarfstd.org/ShowIssue.php?issue=100909.1
   42. http://www.dwarfstd.org/ShowIssue.php?issue=100909.2
   43. http://www.dwarfstd.org/doc/040408.1.html
   44. http://www.dwarfstd.org/ShowIssue.php?issue=110722.1
-  45. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.1
+  45. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.1
   46. http://weekly.golang.org/doc/go1.html
-  47. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.2
-  48. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.3
-  49. http://gcc.gnu.org/onlinedocs/
-  50. mailto:gcc-help@gcc.gnu.org
-  51. mailto:gcc@gcc.gnu.org
-  52. http://gcc.gnu.org/lists.html
-  53. http://www.fsf.org/
-  54. http://gcc.gnu.org/about.html
-  55. http://validator.w3.org/check/referer
+  47. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.2
+  48. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.3
+  49. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.4
+  50. https://gcc.gnu.org/onlinedocs/
+  51. mailto:gcc-help@gcc.gnu.org
+  52. mailto:gcc@gcc.gnu.org
+  53. https://gcc.gnu.org/lists.html
+  54. http://www.fsf.org/
+  55. https://gcc.gnu.org/about.html
+  56. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-4.6/index.html
                              GCC 4.6 Release Series
@@ -2447,33 +2528,33 @@ References and Acknowledgements
    provided this notice is preserved.
 
    These pages are [23]maintained by the GCC team. Last modified
-   2013-04-12[24].
+   2014-06-28[24].
 
 References
 
    1. http://www.gnu.org/
    2. http://gcc.gnu.org/gcc-4.6/changes.html
-   3. http://gcc.gnu.org/onlinedocs/4.6.4/
+   3. https://gcc.gnu.org/onlinedocs/4.6.4/
    4. http://gcc.gnu.org/gcc-4.6/changes.html
-   5. http://gcc.gnu.org/onlinedocs/4.6.3/
+   5. https://gcc.gnu.org/onlinedocs/4.6.3/
    6. http://gcc.gnu.org/gcc-4.6/changes.html
-   7. http://gcc.gnu.org/onlinedocs/4.6.2/
+   7. https://gcc.gnu.org/onlinedocs/4.6.2/
    8. http://gcc.gnu.org/gcc-4.6/changes.html
-   9. http://gcc.gnu.org/onlinedocs/4.6.1/
+   9. https://gcc.gnu.org/onlinedocs/4.6.1/
   10. http://gcc.gnu.org/gcc-4.6/changes.html
-  11. http://gcc.gnu.org/onlinedocs/4.6.0/
+  11. https://gcc.gnu.org/onlinedocs/4.6.0/
   12. http://gcc.gnu.org/gcc-4.6/buildstat.html
-  13. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
+  13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   14. http://gcc.gnu.org/index.html
   15. mailto:gcc@gcc.gnu.org
   16. http://gcc.gnu.org/mirrors.html
   17. http://gcc.gnu.org/svn.html
-  18. http://gcc.gnu.org/onlinedocs/
+  18. https://gcc.gnu.org/onlinedocs/
   19. mailto:gcc-help@gcc.gnu.org
   20. mailto:gcc@gcc.gnu.org
-  21. http://gcc.gnu.org/lists.html
+  21. https://gcc.gnu.org/lists.html
   22. http://www.fsf.org/
-  23. http://gcc.gnu.org/about.html
+  23. https://gcc.gnu.org/about.html
   24. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-4.6/changes.html
@@ -3371,7 +3452,7 @@ GCC 4.6.4
    provided this notice is preserved.
 
    These pages are [29]maintained by the GCC team. Last modified
-   2013-04-12[30].
+   2014-06-28[30].
 
 References
 
@@ -3380,30 +3461,30 @@ References
    3. http://gcc.gnu.org/gcc-4.5/changes.html#obsoleted
    4. http://gcc.gnu.org/gcc-4.6/porting_to.html
    5. http://gcc.gnu.org/projects/lto/whopr.pdf
-   6. http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options
+   6. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options
    7. http://gcc.gnu.org/gcc-4.6/cxx0x_status.html
-   8. http://gcc.gnu.org/PR43145
-   9. http://gcc.gnu.org/PR43680
-  10. http://gcc.gnu.org/PR33558
+   8. https://gcc.gnu.org/PR43145
+   9. https://gcc.gnu.org/PR43680
+  10. https://gcc.gnu.org/PR33558
   11. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#253
-  12. http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.200x
-  13. http://gcc.gnu.org/onlinedocs/libstdc++/manual/debug_mode.html
-  14. http://gcc.gnu.org/onlinedocs/libstdc++/manual/debug.html#debug.races
-  15. http://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html
-  16. http://gcc.gnu.org/wiki/OOP
-  17. http://gcc.gnu.org/wiki/Coarray
-  18. http://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcoarray_007d-233
+  12. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.200x
+  13. https://gcc.gnu.org/onlinedocs/libstdc++/manual/debug_mode.html
+  14. https://gcc.gnu.org/onlinedocs/libstdc++/manual/debug.html#debug.races
+  15. https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html
+  16. https://gcc.gnu.org/wiki/OOP
+  17. https://gcc.gnu.org/wiki/Coarray
+  18. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcoarray_007d-233
   19. http://golang.org/
-  20. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.1
-  21. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.2
-  22. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.3
-  23. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.4
-  24. http://gcc.gnu.org/onlinedocs/
+  20. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.1
+  21. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.2
+  22. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.3
+  23. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.4
+  24. https://gcc.gnu.org/onlinedocs/
   25. mailto:gcc-help@gcc.gnu.org
   26. mailto:gcc@gcc.gnu.org
-  27. http://gcc.gnu.org/lists.html
+  27. https://gcc.gnu.org/lists.html
   28. http://www.fsf.org/
-  29. http://gcc.gnu.org/about.html
+  29. https://gcc.gnu.org/about.html
   30. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-4.5/index.html
@@ -3466,7 +3547,7 @@ References and Acknowledgements
    provided this notice is preserved.
 
    These pages are [18]maintained by the GCC team. Last modified
-   2012-11-02[19].
+   2014-06-28[19].
 
 References
 
@@ -3477,17 +3558,17 @@ References
    5. http://gcc.gnu.org/gcc-4.5/changes.html
    6. http://gcc.gnu.org/gcc-4.5/changes.html
    7. http://gcc.gnu.org/gcc-4.5/buildstat.html
-   8. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
+   8. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
    9. http://gcc.gnu.org/index.html
   10. mailto:gcc@gcc.gnu.org
   11. http://gcc.gnu.org/mirrors.html
   12. http://gcc.gnu.org/svn.html
-  13. http://gcc.gnu.org/onlinedocs/
+  13. https://gcc.gnu.org/onlinedocs/
   14. mailto:gcc-help@gcc.gnu.org
   15. mailto:gcc@gcc.gnu.org
-  16. http://gcc.gnu.org/lists.html
+  16. https://gcc.gnu.org/lists.html
   17. http://www.fsf.org/
-  18. http://gcc.gnu.org/about.html
+  18. https://gcc.gnu.org/about.html
   19. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-4.5/changes.html
@@ -4137,44 +4218,44 @@ GCC 4.5.4
    provided this notice is preserved.
 
    These pages are [34]maintained by the GCC team. Last modified
-   2012-11-02[35].
+   2014-06-28[35].
 
 References
 
    1. http://www.multiprecision.org/
-   2. http://gcc.gnu.org/install/prerequisites.html
-   3. http://gcc.gnu.org/ml/gcc/2010-01/msg00510.html
+   2. https://gcc.gnu.org/install/prerequisites.html
+   3. https://gcc.gnu.org/ml/gcc/2010-01/msg00510.html
    4. http://gcc.gnu.org/gcc-4.4/changes.html#obsoleted
    5. http://gcc.gnu.org/gcc-4.5/changes.html#x86
    6. http://www.multiprecision.org/
-   7. http://gcc.gnu.org/PR30789
-   8. http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-flto-801
-   9. http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fwhopr-802
-  10. http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fwhole-program-800
-  11. http://gcc.gnu.org/onlinedocs/gcc/Restricted-Pointers.html
+   7. https://gcc.gnu.org/PR30789
+   8. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-flto-801
+   9. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fwhopr-802
+  10. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fwhole-program-800
+  11. https://gcc.gnu.org/onlinedocs/gcc/Restricted-Pointers.html
   12. http://gcc.gnu.org/gcc-4.5/cxx0x_status.html
   13. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#757
   14. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#176
-  15. http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.200x
-  16. http://gcc.gnu.org/onlinedocs/libstdc++/manual/profile_mode.html
-  17. http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.tr24733
+  15. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.200x
+  16. https://gcc.gnu.org/onlinedocs/libstdc++/manual/profile_mode.html
+  17. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.tr24733
   18. http://sourceware.org/gdb/wiki/STLSupport
   19. http://gcc.gnu.org/gcc-4.4/changes.html
-  20. http://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html
-  21. http://gcc.gnu.org/onlinedocs/gfortran/Mixed-Language-Programming.html
-  22. http://gcc.gnu.org/onlinedocs/gfortran/GNU-Fortran-Compiler-Directives.html
-  23. http://gcc.gnu.org/wiki/OOP
-  24. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.1
-  25. http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-flto-801
-  26. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.2
-  27. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.3
-  28. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.4
-  29. http://gcc.gnu.org/onlinedocs/
+  20. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html
+  21. https://gcc.gnu.org/onlinedocs/gfortran/Mixed-Language-Programming.html
+  22. https://gcc.gnu.org/onlinedocs/gfortran/GNU-Fortran-Compiler-Directives.html
+  23. https://gcc.gnu.org/wiki/OOP
+  24. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.1
+  25. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-flto-801
+  26. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.2
+  27. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.3
+  28. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.4
+  29. https://gcc.gnu.org/onlinedocs/
   30. mailto:gcc-help@gcc.gnu.org
   31. mailto:gcc@gcc.gnu.org
-  32. http://gcc.gnu.org/lists.html
+  32. https://gcc.gnu.org/lists.html
   33. http://www.fsf.org/
-  34. http://gcc.gnu.org/about.html
+  34. https://gcc.gnu.org/about.html
   35. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-4.4/index.html
@@ -4246,7 +4327,7 @@ References and Acknowledgements
    provided this notice is preserved.
 
    These pages are [21]maintained by the GCC team. Last modified
-   2012-11-02[22].
+   2014-06-28[22].
 
 References
 
@@ -4260,17 +4341,17 @@ References
    8. http://gcc.gnu.org/gcc-4.4/changes.html
    9. http://gcc.gnu.org/gcc-4.4/changes.html
   10. http://gcc.gnu.org/gcc-4.4/buildstat.html
-  11. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
+  11. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   12. http://gcc.gnu.org/index.html
   13. mailto:gcc@gcc.gnu.org
   14. http://gcc.gnu.org/mirrors.html
   15. http://gcc.gnu.org/svn.html
-  16. http://gcc.gnu.org/onlinedocs/
+  16. https://gcc.gnu.org/onlinedocs/
   17. mailto:gcc-help@gcc.gnu.org
   18. mailto:gcc@gcc.gnu.org
-  19. http://gcc.gnu.org/lists.html
+  19. https://gcc.gnu.org/lists.html
   20. http://www.fsf.org/
-  21. http://gcc.gnu.org/about.html
+  21. https://gcc.gnu.org/about.html
   22. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-4.4/changes.html
@@ -4876,35 +4957,35 @@ GCC 4.4.7
    provided this notice is preserved.
 
    These pages are [25]maintained by the GCC team. Last modified
-   2012-11-02[26].
+   2014-06-28[26].
 
 References
 
    1. http://gcc.gnu.org/gcc-4.4/changes.html#4.4.7
    2. http://gcc.gnu.org/gcc-4.3/changes.html#obsoleted
    3. http://gcc.gnu.org/gcc-4.4/porting_to.html
-   4. http://gcc.gnu.org/wiki/Graphite
+   4. https://gcc.gnu.org/wiki/Graphite
    5. http://openmp.org/wp/openmp-specifications/
    6. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1040.pdf
    7. http://gcc.gnu.org/gcc-4.4/cxx0x_status.html
-   8. http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#id476343
-   9. http://gcc.gnu.org/onlinedocs/gfortran/Preprocessing-Options.html
-  10. http://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWarray-temporaries_007d-125
-  11. http://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcheck-array-temporaries_007d-221
-  12. http://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bbackslash_007d-34
-  13. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.1
-  14. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.2
-  15. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.3
-  16. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.4
-  17. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.5
-  18. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.6
-  19. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.7
-  20. http://gcc.gnu.org/onlinedocs/
+   8. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#id476343
+   9. https://gcc.gnu.org/onlinedocs/gfortran/Preprocessing-Options.html
+  10. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWarray-temporaries_007d-125
+  11. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcheck-array-temporaries_007d-221
+  12. https://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bbackslash_007d-34
+  13. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.1
+  14. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.2
+  15. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.3
+  16. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.4
+  17. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.5
+  18. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.6
+  19. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.7
+  20. https://gcc.gnu.org/onlinedocs/
   21. mailto:gcc-help@gcc.gnu.org
   22. mailto:gcc@gcc.gnu.org
-  23. http://gcc.gnu.org/lists.html
+  23. https://gcc.gnu.org/lists.html
   24. http://www.fsf.org/
-  25. http://gcc.gnu.org/about.html
+  25. https://gcc.gnu.org/about.html
   26. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-4.3/index.html
@@ -4973,7 +5054,7 @@ References and Acknowledgements
    provided this notice is preserved.
 
    These pages are [20]maintained by the GCC team. Last modified
-   2012-11-02[21].
+   2014-06-28[21].
 
 References
 
@@ -4986,17 +5067,17 @@ References
    7. http://gcc.gnu.org/gcc-4.3/changes.html
    8. http://gcc.gnu.org/gcc-4.3/changes.html
    9. http://gcc.gnu.org/gcc-4.3/buildstat.html
-  10. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
+  10. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   11. http://gcc.gnu.org/index.html
   12. mailto:gcc@gcc.gnu.org
   13. http://gcc.gnu.org/mirrors.html
   14. http://gcc.gnu.org/svn.html
-  15. http://gcc.gnu.org/onlinedocs/
+  15. https://gcc.gnu.org/onlinedocs/
   16. mailto:gcc-help@gcc.gnu.org
   17. mailto:gcc@gcc.gnu.org
-  18. http://gcc.gnu.org/lists.html
+  18. https://gcc.gnu.org/lists.html
   19. http://www.fsf.org/
-  20. http://gcc.gnu.org/about.html
+  20. https://gcc.gnu.org/about.html
   21. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-4.3/changes.html
@@ -5778,46 +5859,46 @@ GCC 4.3.6
    provided this notice is preserved.
 
    These pages are [36]maintained by the GCC team. Last modified
-   2012-11-02[37].
+   2014-06-28[37].
 
 References
 
    1. http://gcc.gnu.org/gcc-4.3/changes.html#4.3.5
    2. http://gmplib.org/
    3. http://www.mpfr.org/
-   4. http://gcc.gnu.org/install/prerequisites.html
-   5. http://gcc.gnu.org/ml/gcc-announce/2001/msg00000.html
-   6. http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options
+   4. https://gcc.gnu.org/install/prerequisites.html
+   5. https://gcc.gnu.org/ml/gcc-announce/2001/msg00000.html
+   6. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options
    7. http://gcc.gnu.org/gcc-4.3/porting_to.html
    8. http://www.mpfr.org/
    9. http://www.mpfr.org/
   10. http://www.mpfr.org/
-  11. http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
+  11. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
   12. http://gcc.gnu.org/gcc-4.3/cxx0x_status.html
   13. http://gcc.gnu.org/gcc-4.3/cxx0x_status.html
-  14. http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt01ch01.html#m anual.intro.status.standard.tr1
-  15. http://gcc.gnu.org/onlinedocs/libstdc++/manual/parallel_mode.html
+  14. https://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt01ch01.html#m anual.intro.status.standard.tr1
+  15. https://gcc.gnu.org/onlinedocs/libstdc++/manual/parallel_mode.html
   16. http://gmplib.org/
   17. http://www.mpfr.org/
-  18. http://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#Code-Gen-Options
-  19. http://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfinit-local-zero_007d-167
-  20. http://gcc.gnu.org/onlinedocs/gcc-4.3.0/gfortran/GAMMA.html
-  21. http://gcc.gnu.org/onlinedocs/gcc-4.3.0/gfortran/LGAMMA.html
-  22. http://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html
-  23. http://gcc.gnu.org/onlinedocs/gfortran/BOZ-literal-constants.html
-  24. http://gcc.gnu.org/onlinedocs/libstdc++/
-  25. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.1
-  26. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.2
-  27. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.3
-  28. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.4
-  29. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.5
-  30. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.6
-  31. http://gcc.gnu.org/onlinedocs/
+  18. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#Code-Gen-Options
+  19. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfinit-local-zero_007d-167
+  20. https://gcc.gnu.org/onlinedocs/gcc-4.3.0/gfortran/GAMMA.html
+  21. https://gcc.gnu.org/onlinedocs/gcc-4.3.0/gfortran/LGAMMA.html
+  22. https://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html
+  23. https://gcc.gnu.org/onlinedocs/gfortran/BOZ-literal-constants.html
+  24. https://gcc.gnu.org/onlinedocs/libstdc++/
+  25. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.1
+  26. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.2
+  27. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.3
+  28. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.4
+  29. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.5
+  30. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.6
+  31. https://gcc.gnu.org/onlinedocs/
   32. mailto:gcc-help@gcc.gnu.org
   33. mailto:gcc@gcc.gnu.org
-  34. http://gcc.gnu.org/lists.html
+  34. https://gcc.gnu.org/lists.html
   35. http://www.fsf.org/
-  36. http://gcc.gnu.org/about.html
+  36. https://gcc.gnu.org/about.html
   37. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-4.2/index.html
@@ -5880,7 +5961,7 @@ References and Acknowledgements
    provided this notice is preserved.
 
    These pages are [18]maintained by the GCC team. Last modified
-   2012-11-02[19].
+   2014-06-28[19].
 
 References
 
@@ -5891,17 +5972,17 @@ References
    5. http://gcc.gnu.org/gcc-4.2/changes.html
    6. http://gcc.gnu.org/gcc-4.2/changes.html
    7. http://gcc.gnu.org/gcc-4.2/buildstat.html
-   8. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
+   8. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
    9. http://gcc.gnu.org/index.html
   10. mailto:gcc@gcc.gnu.org
   11. http://gcc.gnu.org/mirrors.html
   12. http://gcc.gnu.org/svn.html
-  13. http://gcc.gnu.org/onlinedocs/
+  13. https://gcc.gnu.org/onlinedocs/
   14. mailto:gcc-help@gcc.gnu.org
   15. mailto:gcc@gcc.gnu.org
-  16. http://gcc.gnu.org/lists.html
+  16. https://gcc.gnu.org/lists.html
   17. http://www.fsf.org/
-  18. http://gcc.gnu.org/about.html
+  18. https://gcc.gnu.org/about.html
   19. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-4.2/changes.html
@@ -6092,7 +6173,7 @@ New Languages and Language specific improvements
        memory than if the shared version of libgcj were used. However
        caution should be used as it can also cause essential parts of the
        library to be omitted. Some of these issues are discussed in:
-       [6]http://gcc.gnu.org/wiki/Statically_linking_libgcj
+       [6]https://gcc.gnu.org/wiki/Statically_linking_libgcj
      * fastjar is no longer bundled with GCC. To build libgcj, you will
        need either InfoZIP (both zip and unzip) or an external jar
        program. In the former case, the GCC build will install a jar shell
@@ -6209,22 +6290,22 @@ Other significant improvements
    provided this notice is preserved.
 
    These pages are [12]maintained by the GCC team. Last modified
-   2012-11-02[13].
+   2014-06-28[13].
 
 References
 
    1. http://gcc.gnu.org/projects/gomp/
-   2. http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
-   3. http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt01ch01.html#manual.intro.status.standard.tr1
-   4. http://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/index.html
-   5. http://gcc.gnu.org/onlinedocs/gfortran/Runtime-Options.html
-   6. http://gcc.gnu.org/wiki/Statically_linking_libgcj
-   7. http://gcc.gnu.org/onlinedocs/
+   2. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
+   3. https://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt01ch01.html#manual.intro.status.standard.tr1
+   4. https://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/index.html
+   5. https://gcc.gnu.org/onlinedocs/gfortran/Runtime-Options.html
+   6. https://gcc.gnu.org/wiki/Statically_linking_libgcj
+   7. https://gcc.gnu.org/onlinedocs/
    8. mailto:gcc-help@gcc.gnu.org
    9. mailto:gcc@gcc.gnu.org
-  10. http://gcc.gnu.org/lists.html
+  10. https://gcc.gnu.org/lists.html
   11. http://www.fsf.org/
-  12. http://gcc.gnu.org/about.html
+  12. https://gcc.gnu.org/about.html
   13. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-4.1/index.html
@@ -6281,7 +6362,7 @@ References and Acknowledgements
    provided this notice is preserved.
 
    These pages are [16]maintained by the GCC team. Last modified
-   2012-11-02[17].
+   2014-06-28[17].
 
 References
 
@@ -6290,17 +6371,17 @@ References
    3. http://gcc.gnu.org/gcc-4.1/changes.html
    4. http://gcc.gnu.org/gcc-4.1/changes.html
    5. http://gcc.gnu.org/gcc-4.1/buildstat.html
-   6. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
+   6. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
    7. http://gcc.gnu.org/index.html
    8. mailto:gcc@gcc.gnu.org
    9. http://gcc.gnu.org/mirrors.html
   10. http://gcc.gnu.org/svn.html
-  11. http://gcc.gnu.org/onlinedocs/
+  11. https://gcc.gnu.org/onlinedocs/
   12. mailto:gcc-help@gcc.gnu.org
   13. mailto:gcc@gcc.gnu.org
-  14. http://gcc.gnu.org/lists.html
+  14. https://gcc.gnu.org/lists.html
   15. http://www.fsf.org/
-  16. http://gcc.gnu.org/about.html
+  16. https://gcc.gnu.org/about.html
   17. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-4.1/changes.html
@@ -6693,7 +6774,7 @@ New Languages and Language specific improvements
                  most of the work is currently being done around gcj/gij
                  we want this framework to be as VM neutral as possible.
                  Early design is described in:
-                 [3]http://gcc.gnu.org/ml/java/2005-05/msg00260.html
+                 [3]https://gcc.gnu.org/ml/java/2005-05/msg00260.html
                o QT4 AWT peers, enable by giving configure
                  --enable-qt-peer. Included, but not ready for production
                  yet. They are explicitly disabled and not supported. But
@@ -6844,22 +6925,22 @@ GCC 4.1.2
    provided this notice is preserved.
 
    These pages are [12]maintained by the GCC team. Last modified
-   2012-11-02[13].
+   2014-06-28[13].
 
 References
 
    1. http://gcc.gnu.org/gcc-4.1/changes.html#4.1.2
    2. http://developer.classpath.org/mediation/ClasspathGraphicsImagesText
-   3. http://gcc.gnu.org/ml/java/2005-05/msg00260.html
+   3. https://gcc.gnu.org/ml/java/2005-05/msg00260.html
    4. http://developer.classpath.org/doc/
-   5. http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html
-   6. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.1.2
-   7. http://gcc.gnu.org/onlinedocs/
+   5. https://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html
+   6. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.1.2
+   7. https://gcc.gnu.org/onlinedocs/
    8. mailto:gcc-help@gcc.gnu.org
    9. mailto:gcc@gcc.gnu.org
-  10. http://gcc.gnu.org/lists.html
+  10. https://gcc.gnu.org/lists.html
   11. http://www.fsf.org/
-  12. http://gcc.gnu.org/about.html
+  12. https://gcc.gnu.org/about.html
   13. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-4.0/index.html
@@ -6922,7 +7003,7 @@ References and Acknowledgements
    provided this notice is preserved.
 
    These pages are [18]maintained by the GCC team. Last modified
-   2012-11-02[19].
+   2014-06-28[19].
 
 References
 
@@ -6933,17 +7014,17 @@ References
    5. http://gcc.gnu.org/gcc-4.0/changes.html#4.0.1
    6. http://gcc.gnu.org/gcc-4.0/changes.html
    7. http://gcc.gnu.org/gcc-4.0/buildstat.html
-   8. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
+   8. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
    9. http://gcc.gnu.org/index.html
   10. mailto:gcc@gcc.gnu.org
   11. http://gcc.gnu.org/mirrors.html
   12. http://gcc.gnu.org/svn.html
-  13. http://gcc.gnu.org/onlinedocs/
+  13. https://gcc.gnu.org/onlinedocs/
   14. mailto:gcc-help@gcc.gnu.org
   15. mailto:gcc@gcc.gnu.org
-  16. http://gcc.gnu.org/lists.html
+  16. https://gcc.gnu.org/lists.html
   17. http://www.fsf.org/
-  18. http://gcc.gnu.org/about.html
+  18. https://gcc.gnu.org/about.html
   19. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-4.0/changes.html
@@ -7391,7 +7472,7 @@ Other significant improvements
        solving problems many projects such as python were forced to use
        RTLD_LOCAL for (with its resulting issues for C++ correctness). You
        can find more information about using these options at
-       [11]http://gcc.gnu.org/wiki/Visibility.
+       [11]https://gcc.gnu.org/wiki/Visibility.
      __________________________________________________________________
 
 GCC 4.0.1
@@ -7448,7 +7529,7 @@ GCC 4.0.4
    provided this notice is preserved.
 
    These pages are [21]maintained by the GCC team. Last modified
-   2012-11-02[22].
+   2014-06-28[22].
 
 References
 
@@ -7461,18 +7542,18 @@ References
    7. http://gcc.gnu.org/gcc-4.0/changes.html#visibility
    8. http://mentorembedded.github.com/cxx-abi/
    9. http://gcc.gnu.org/fortran/
-  10. http://gcc.gnu.org/install/
-  11. http://gcc.gnu.org/wiki/Visibility
-  12. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.1
-  13. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.2
-  14. http://gcc.gnu.org/ml/gcc-cvs/2005-09/msg00984.html
-  15. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.4
-  16. http://gcc.gnu.org/onlinedocs/
+  10. https://gcc.gnu.org/install/
+  11. https://gcc.gnu.org/wiki/Visibility
+  12. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.1
+  13. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.2
+  14. https://gcc.gnu.org/ml/gcc-cvs/2005-09/msg00984.html
+  15. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.4
+  16. https://gcc.gnu.org/onlinedocs/
   17. mailto:gcc-help@gcc.gnu.org
   18. mailto:gcc@gcc.gnu.org
-  19. http://gcc.gnu.org/lists.html
+  19. https://gcc.gnu.org/lists.html
   20. http://www.fsf.org/
-  21. http://gcc.gnu.org/about.html
+  21. https://gcc.gnu.org/about.html
   22. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-3.4/index.html
@@ -7546,13 +7627,13 @@ References and Acknowledgements
    provided this notice is preserved.
 
    These pages are [22]maintained by the GCC team. Last modified
-   2012-11-02[23].
+   2014-06-28[23].
 
 References
 
    1. http://www.gnu.org/
    2. http://gcc.gnu.org/gcc-3.4/changes.html
-   3. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
+   3. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
    4. http://gcc.gnu.org/gcc-3.4/changes.html#3.4.6
    5. http://gcc.gnu.org/gcc-3.4/changes.html#3.4.5
    6. http://gcc.gnu.org/gcc-3.4/changes.html#3.4.4
@@ -7561,17 +7642,17 @@ References
    9. http://gcc.gnu.org/gcc-3.4/changes.html#3.4.1
   10. http://gcc.gnu.org/gcc-3.4/changes.html
   11. http://gcc.gnu.org/gcc-3.4/buildstat.html
-  12. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
+  12. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   13. http://gcc.gnu.org/index.html
   14. mailto:gcc@gcc.gnu.org
   15. http://gcc.gnu.org/mirrors.html
   16. http://gcc.gnu.org/svn.html
-  17. http://gcc.gnu.org/onlinedocs/
+  17. https://gcc.gnu.org/onlinedocs/
   18. mailto:gcc-help@gcc.gnu.org
   19. mailto:gcc@gcc.gnu.org
-  20. http://gcc.gnu.org/lists.html
+  20. https://gcc.gnu.org/lists.html
   21. http://www.fsf.org/
-  22. http://gcc.gnu.org/about.html
+  22. https://gcc.gnu.org/about.html
   23. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-3.4/changes.html
@@ -9334,7 +9415,7 @@ GCC 3.4.6
    provided this notice is preserved.
 
    These pages are [417]maintained by the GCC team. Last modified
-   2012-11-02[418].
+   2014-06-28[418].
 
 References
 
@@ -9345,416 +9426,416 @@ References
    5. http://gcc.gnu.org/gcc-3.4/mips-abi.html
    6. http://gcc.gnu.org/gcc-3.4/sparc-abi.html
    7. http://www.boost.org/
-   8. http://gcc.gnu.org/PR11953
-   9. http://gcc.gnu.org/PR8361
-  10. http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Other-Builtins.html#Other%20Builtins
+   8. https://gcc.gnu.org/PR11953
+   9. https://gcc.gnu.org/PR8361
+  10. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Other-Builtins.html#Other%20Builtins
   11. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#209
   12. http://gcc.gnu.org/bugs/#cxx_rvalbind
-  13. http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
-  14. http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
-  15. http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
+  13. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
+  14. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
+  15. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
   16. http://www.gnu.org/software/classpath/
   17. http://www.eclipse.org/
-  18. http://gcc.gnu.org/onlinedocs/gcc-3.4.3/g77/News.html
-  19. http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Alpha-Built-in-Functions.html
+  18. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/g77/News.html
+  19. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Alpha-Built-in-Functions.html
   20. http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51A_HTML/ARH9MBTE/DTMNPLTN.HTM#normal-argument-list-structure
-  21. http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Processor-pipeline-description.html
-  22. http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Comparison-of-the-two-descriptions.html
-  23. http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Processor-pipeline-description.html
+  21. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Processor-pipeline-description.html
+  22. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Comparison-of-the-two-descriptions.html
+  23. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Processor-pipeline-description.html
   24. http://gcc.gnu.org/gcc-3.4/mips-abi.html
   25. http://gcc.gnu.org/gcc-3.4/powerpc-abi.html
   26. http://gcc.gnu.org/gcc-3.4/sparc-abi.html
-  27. http://gcc.gnu.org/bugzilla/buglist.cgi?short_desc_type=notregexp&short_desc=%5C%5B3%5C.4.*%5BRr%5Degression&target_milestone=3.4.0&bug_status=RESOLVED&resolution=FIXED
-  28. http://gcc.gnu.org/PR10129
-  29. http://gcc.gnu.org/PR14576
-  30. http://gcc.gnu.org/PR14760
-  31. http://gcc.gnu.org/PR14671
-  32. http://gcc.gnu.org/PR15093
-  33. http://gcc.gnu.org/PR15178
-  34. http://gcc.gnu.org/PR12753
-  35. http://gcc.gnu.org/PR13985
-  36. http://gcc.gnu.org/PR14810
-  37. http://gcc.gnu.org/PR14883
-  38. http://gcc.gnu.org/PR15044
-  39. http://gcc.gnu.org/PR15057
-  40. http://gcc.gnu.org/PR15064
-  41. http://gcc.gnu.org/PR15142
-  42. http://gcc.gnu.org/PR15159
-  43. http://gcc.gnu.org/PR15165
-  44. http://gcc.gnu.org/PR15193
-  45. http://gcc.gnu.org/PR15209
-  46. http://gcc.gnu.org/PR15227
-  47. http://gcc.gnu.org/PR15285
-  48. http://gcc.gnu.org/PR15299
-  49. http://gcc.gnu.org/PR15329
-  50. http://gcc.gnu.org/PR15550
-  51. http://gcc.gnu.org/PR15554
-  52. http://gcc.gnu.org/PR15640
-  53. http://gcc.gnu.org/PR15666
-  54. http://gcc.gnu.org/PR15696
-  55. http://gcc.gnu.org/PR15701
-  56. http://gcc.gnu.org/PR15761
-  57. http://gcc.gnu.org/PR15829
-  58. http://gcc.gnu.org/PR14538
-  59. http://gcc.gnu.org/PR12391
-  60. http://gcc.gnu.org/PR14649
-  61. http://gcc.gnu.org/PR15004
-  62. http://gcc.gnu.org/PR15749
-  63. http://gcc.gnu.org/PR10646
-  64. http://gcc.gnu.org/PR12077
-  65. http://gcc.gnu.org/PR13598
-  66. http://gcc.gnu.org/PR14211
-  67. http://gcc.gnu.org/PR14220
-  68. http://gcc.gnu.org/PR14245
-  69. http://gcc.gnu.org/PR14340
-  70. http://gcc.gnu.org/PR14600
-  71. http://gcc.gnu.org/PR14668
-  72. http://gcc.gnu.org/PR14775
-  73. http://gcc.gnu.org/PR14821
-  74. http://gcc.gnu.org/PR14930
-  75. http://gcc.gnu.org/PR14932
-  76. http://gcc.gnu.org/PR14950
-  77. http://gcc.gnu.org/PR14962
-  78. http://gcc.gnu.org/PR14975
-  79. http://gcc.gnu.org/PR15002
-  80. http://gcc.gnu.org/PR15025
-  81. http://gcc.gnu.org/PR15046
-  82. http://gcc.gnu.org/PR15069
-  83. http://gcc.gnu.org/PR15074
-  84. http://gcc.gnu.org/PR15083
-  85. http://gcc.gnu.org/PR15096
-  86. http://gcc.gnu.org/PR15287
-  87. http://gcc.gnu.org/PR15317
-  88. http://gcc.gnu.org/PR15337
-  89. http://gcc.gnu.org/PR15361
-  90. http://gcc.gnu.org/PR15412
-  91. http://gcc.gnu.org/PR15427
-  92. http://gcc.gnu.org/PR15471
-  93. http://gcc.gnu.org/PR15503
-  94. http://gcc.gnu.org/PR15507
-  95. http://gcc.gnu.org/PR15542
-  96. http://gcc.gnu.org/PR15565
-  97. http://gcc.gnu.org/PR15625
-  98. http://gcc.gnu.org/PR15629
-  99. http://gcc.gnu.org/PR15742
- 100. http://gcc.gnu.org/PR15775
- 101. http://gcc.gnu.org/PR15821
- 102. http://gcc.gnu.org/PR15862
- 103. http://gcc.gnu.org/PR15875
- 104. http://gcc.gnu.org/PR15877
- 105. http://gcc.gnu.org/PR15947
- 106. http://gcc.gnu.org/PR16020
- 107. http://gcc.gnu.org/PR16154
- 108. http://gcc.gnu.org/PR16174
- 109. http://gcc.gnu.org/PR14315
- 110. http://gcc.gnu.org/PR15151
- 111. http://gcc.gnu.org/PR7993
- 112. http://gcc.gnu.org/PR15228
- 113. http://gcc.gnu.org/PR15345
- 114. http://gcc.gnu.org/PR15945
- 115. http://gcc.gnu.org/PR15526
- 116. http://gcc.gnu.org/PR14690
- 117. http://gcc.gnu.org/PR15112
- 118. http://gcc.gnu.org/PR15067
- 119. http://gcc.gnu.org/PR1963
- 120. http://gcc.gnu.org/PR15717
- 121. http://gcc.gnu.org/PR14782
- 122. http://gcc.gnu.org/PR14828
- 123. http://gcc.gnu.org/PR15202
- 124. http://gcc.gnu.org/PR14610
- 125. http://gcc.gnu.org/PR14813
- 126. http://gcc.gnu.org/PR14857
- 127. http://gcc.gnu.org/PR15598
- 128. http://gcc.gnu.org/PR15653
- 129. http://gcc.gnu.org/PR15189
- 130. http://gcc.gnu.org/PR15331
- 131. http://gcc.gnu.org/PR16144
- 132. http://gcc.gnu.org/PR16176
- 133. http://gcc.gnu.org/PR11591
- 134. http://gcc.gnu.org/PR12028
- 135. http://gcc.gnu.org/PR14478
- 136. http://gcc.gnu.org/PR14567
- 137. http://gcc.gnu.org/PR14715
- 138. http://gcc.gnu.org/PR14902
- 139. http://gcc.gnu.org/PR14924
- 140. http://gcc.gnu.org/PR14960
- 141. http://gcc.gnu.org/PR15106
- 142. http://gcc.gnu.org/PR16026
- 143. http://gcc.gnu.org/PR15191
- 144. http://gcc.gnu.org/PR15662
- 145. http://gcc.gnu.org/PR15054
- 146. http://gcc.gnu.org/PR15783
- 147. http://gcc.gnu.org/PR15626
- 148. http://gcc.gnu.org/PR14326
- 149. http://gcc.gnu.org/PR14723
- 150. http://gcc.gnu.org/PR15290
- 151. http://gcc.gnu.org/PR15250
- 152. http://gcc.gnu.org/PR15551
- 153. http://gcc.gnu.org/PR8309
- 154. http://gcc.gnu.org/PR13250
- 155. http://gcc.gnu.org/PR13803
- 156. http://gcc.gnu.org/PR14093
- 157. http://gcc.gnu.org/PR14457
- 158. http://gcc.gnu.org/PR14542
- 159. http://gcc.gnu.org/PR15100
- 160. http://gcc.gnu.org/PR15296
- 161. http://gcc.gnu.org/PR15396
- 162. http://gcc.gnu.org/PR15782
- 163. http://gcc.gnu.org/PR11610
- 164. http://gcc.gnu.org/PR15488
- 165. http://gcc.gnu.org/PR15489
- 166. http://gcc.gnu.org/PR13928
- 167. http://gcc.gnu.org/PR14150
- 168. http://gcc.gnu.org/PR14949
- 169. http://gcc.gnu.org/PR15123
- 170. http://gcc.gnu.org/PR16469
- 171. http://gcc.gnu.org/PR16344
- 172. http://gcc.gnu.org/PR16842
- 173. http://gcc.gnu.org/PR12608
- 174. http://gcc.gnu.org/PR14492
- 175. http://gcc.gnu.org/PR15461
- 176. http://gcc.gnu.org/PR15890
- 177. http://gcc.gnu.org/PR16180
- 178. http://gcc.gnu.org/PR16224
- 179. http://gcc.gnu.org/PR16408
- 180. http://gcc.gnu.org/PR16529
- 181. http://gcc.gnu.org/PR16698
- 182. http://gcc.gnu.org/PR16706
- 183. http://gcc.gnu.org/PR16810
- 184. http://gcc.gnu.org/PR16851
- 185. http://gcc.gnu.org/PR16870
- 186. http://gcc.gnu.org/PR16904
- 187. http://gcc.gnu.org/PR16905
- 188. http://gcc.gnu.org/PR16964
- 189. http://gcc.gnu.org/PR17068
- 190. http://gcc.gnu.org/PR16366
- 191. http://gcc.gnu.org/PR15345
- 192. http://gcc.gnu.org/PR16590
- 193. http://gcc.gnu.org/PR16693
- 194. http://gcc.gnu.org/PR17078
- 195. http://gcc.gnu.org/PR13956
- 196. http://gcc.gnu.org/PR16684
- 197. http://gcc.gnu.org/PR12658
- 198. http://gcc.gnu.org/PR13092
- 199. http://gcc.gnu.org/PR15320
- 200. http://gcc.gnu.org/PR16246
- 201. http://gcc.gnu.org/PR16273
- 202. http://gcc.gnu.org/PR16401
- 203. http://gcc.gnu.org/PR16411
- 204. http://gcc.gnu.org/PR16489
- 205. http://gcc.gnu.org/PR16618
- 206. http://gcc.gnu.org/PR16637
- 207. http://gcc.gnu.org/PR16717
- 208. http://gcc.gnu.org/PR16813
- 209. http://gcc.gnu.org/PR16853
- 210. http://gcc.gnu.org/PR16889
- 211. http://gcc.gnu.org/PR16959
- 212. http://gcc.gnu.org/PR7587
- 213. http://gcc.gnu.org/PR16473
- 214. http://gcc.gnu.org/PR16478
- 215. http://gcc.gnu.org/PR10695
- 216. http://gcc.gnu.org/PR16974
- 217. http://gcc.gnu.org/PR16298
- 218. http://gcc.gnu.org/PR17113
- 219. http://gcc.gnu.org/PR14697
- 220. http://gcc.gnu.org/PR15869
- 221. http://gcc.gnu.org/PR16325
- 222. http://gcc.gnu.org/PR16357
- 223. http://gcc.gnu.org/PR16380
- 224. http://gcc.gnu.org/PR16407
- 225. http://gcc.gnu.org/PR16643
- 226. http://gcc.gnu.org/PR15927
- 227. http://gcc.gnu.org/PR15948
- 228. http://gcc.gnu.org/PR17019
- 229. http://gcc.gnu.org/PR16130
- 230. http://gcc.gnu.org/PR16142
- 231. http://gcc.gnu.org/PR16278
- 232. http://gcc.gnu.org/PR16414
- 233. http://gcc.gnu.org/PR16445
- 234. http://gcc.gnu.org/PR16490
- 235. http://gcc.gnu.org/PR16683
- 236. http://gcc.gnu.org/PR16195
- 237. http://gcc.gnu.org/PR16239
- 238. http://gcc.gnu.org/PR16199
- 239. http://gcc.gnu.org/PR16416
- 240. http://gcc.gnu.org/PR16430
- 241. http://gcc.gnu.org/PR16379
- 242. http://gcc.gnu.org/PR17093
- 243. http://gcc.gnu.org/PR17119
- 244. http://gcc.gnu.org/PR15928
- 245. http://gcc.gnu.org/PR16210
- 246. http://gcc.gnu.org/PR15488
- 247. http://gcc.gnu.org/PR16250
- 248. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.3
- 249. http://gcc.gnu.org/PR17369
- 250. http://gcc.gnu.org/PR17850
- 251. http://gcc.gnu.org/PR13948
- 252. http://gcc.gnu.org/PR14492
- 253. http://gcc.gnu.org/PR16301
- 254. http://gcc.gnu.org/PR16566
- 255. http://gcc.gnu.org/PR17023
- 256. http://gcc.gnu.org/PR17027
- 257. http://gcc.gnu.org/PR17524
- 258. http://gcc.gnu.org/PR17826
- 259. http://gcc.gnu.org/PR15526
- 260. http://gcc.gnu.org/PR16999
- 261. http://gcc.gnu.org/PR17503
- 262. http://gcc.gnu.org/PR17581
- 263. http://gcc.gnu.org/PR18129
- 264. http://gcc.gnu.org/PR10975
- 265. http://gcc.gnu.org/PR11722
- 266. http://gcc.gnu.org/PR14534
- 267. http://gcc.gnu.org/PR15172
- 268. http://gcc.gnu.org/PR15786
- 269. http://gcc.gnu.org/PR16162
- 270. http://gcc.gnu.org/PR16612
- 271. http://gcc.gnu.org/PR16715
- 272. http://gcc.gnu.org/PR16848
- 273. http://gcc.gnu.org/PR17132
- 274. http://gcc.gnu.org/PR17259
- 275. http://gcc.gnu.org/PR17327
- 276. http://gcc.gnu.org/PR17393
- 277. http://gcc.gnu.org/PR17501
- 278. http://gcc.gnu.org/PR17537
- 279. http://gcc.gnu.org/PR17585
- 280. http://gcc.gnu.org/PR17821
- 281. http://gcc.gnu.org/PR17829
- 282. http://gcc.gnu.org/PR17851
- 283. http://gcc.gnu.org/PR17976
- 284. http://gcc.gnu.org/PR18020
- 285. http://gcc.gnu.org/PR18093
- 286. http://gcc.gnu.org/PR18140
- 287. http://gcc.gnu.org/PR17541
- 288. http://gcc.gnu.org/PR17853
- 289. http://gcc.gnu.org/PR17245
- 290. http://gcc.gnu.org/PR17167
- 291. http://gcc.gnu.org/PR17277
- 292. http://gcc.gnu.org/PR17505
- 293. http://gcc.gnu.org/PR17684
- 294. http://gcc.gnu.org/PR17384
- 295. http://gcc.gnu.org/PR17770
- 296. http://gcc.gnu.org/PR11476
- 297. http://gcc.gnu.org/PR14064
- 298. http://gcc.gnu.org/PR14678
- 299. http://gcc.gnu.org/PR15583
- 300. http://gcc.gnu.org/PR15790
- 301. http://gcc.gnu.org/PR15886
- 302. http://gcc.gnu.org/PR16884
- 303. http://gcc.gnu.org/PR13841
- 304. http://gcc.gnu.org/PR15860
- 305. http://gcc.gnu.org/PR17465
- 306. http://gcc.gnu.org/PR17469
- 307. http://gcc.gnu.org/PR18138
- 308. http://gcc.gnu.org/PR15498
- 309. http://gcc.gnu.org/PR15747
- 310. http://gcc.gnu.org/PR16406
- 311. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.4
- 312. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.5
- 313. http://gcc.gnu.org/PR24688
- 314. http://gcc.gnu.org/PR17188
- 315. http://gcc.gnu.org/PR20187
- 316. http://gcc.gnu.org/PR21873
- 317. http://gcc.gnu.org/PR21899
- 318. http://gcc.gnu.org/PR22061
- 319. http://gcc.gnu.org/PR22208
- 320. http://gcc.gnu.org/PR22458
- 321. http://gcc.gnu.org/PR22589
- 322. http://gcc.gnu.org/PR24101
- 323. http://gcc.gnu.org/PR10611
- 324. http://gcc.gnu.org/PR13377
- 325. http://gcc.gnu.org/PR16002
- 326. http://gcc.gnu.org/PR17413
- 327. http://gcc.gnu.org/PR17609
- 328. http://gcc.gnu.org/PR17618
- 329. http://gcc.gnu.org/PR18124
- 330. http://gcc.gnu.org/PR18155
- 331. http://gcc.gnu.org/PR18177
- 332. http://gcc.gnu.org/PR18368
- 333. http://gcc.gnu.org/PR18378
- 334. http://gcc.gnu.org/PR18466
- 335. http://gcc.gnu.org/PR18512
- 336. http://gcc.gnu.org/PR18545
- 337. http://gcc.gnu.org/PR18738
- 338. http://gcc.gnu.org/PR18803
- 339. http://gcc.gnu.org/PR19004
- 340. http://gcc.gnu.org/PR19208
- 341. http://gcc.gnu.org/PR19253
- 342. http://gcc.gnu.org/PR19608
- 343. http://gcc.gnu.org/PR19884
- 344. http://gcc.gnu.org/PR20153
- 345. http://gcc.gnu.org/PR20563
- 346. http://gcc.gnu.org/PR20789
- 347. http://gcc.gnu.org/PR21336
- 348. http://gcc.gnu.org/PR21768
- 349. http://gcc.gnu.org/PR21853
- 350. http://gcc.gnu.org/PR21903
- 351. http://gcc.gnu.org/PR21983
- 352. http://gcc.gnu.org/PR21987
- 353. http://gcc.gnu.org/PR22153
- 354. http://gcc.gnu.org/PR22172
- 355. http://gcc.gnu.org/PR21286
- 356. http://gcc.gnu.org/PR22233
- 357. http://gcc.gnu.org/PR22508
- 358. http://gcc.gnu.org/PR22545
- 359. http://gcc.gnu.org/PR23528
- 360. http://gcc.gnu.org/PR23550
- 361. http://gcc.gnu.org/PR23586
- 362. http://gcc.gnu.org/PR23624
- 363. http://gcc.gnu.org/PR23639
- 364. http://gcc.gnu.org/PR23797
- 365. http://gcc.gnu.org/PR23965
- 366. http://gcc.gnu.org/PR24052
- 367. http://gcc.gnu.org/PR24580
- 368. http://gcc.gnu.org/PR24267
- 369. http://gcc.gnu.org/PR17810
- 370. http://gcc.gnu.org/PR17860
- 371. http://gcc/gnu.org/PR21709
- 372. http://gcc.gnu.org/PR21964
- 373. http://gcc.gnu.org/PR22167
- 374. http://gcc.gnu.org/PR22619
- 375. http://gcc.gnu.org/PR23241
- 376. http://gcc.gnu.org/PR23478
- 377. http://gcc.gnu.org/PR24470
- 378. http://gcc.gnu.org/PR24950
- 379. http://gcc.gnu.org/PR14400
- 380. http://gcc.gnu.org/PR14940
- 381. http://gcc.gnu.org/PR20239
- 382. http://gcc.gnu.org/PR15220
- 383. http://gcc.gnu.org/PR19275
- 384. http://gcc.gnu.org/PR21888
- 385. http://gcc.gnu.org/PR15342
- 386. http://gcc.gnu.org/PR23985
- 387. http://gcc.gnu.org/PR16719
- 388. http://gcc.gnu.org/PR21723
- 389. http://gcc.gnu.org/PR21841
- 390. http://gcc.gnu.org/PR23644
- 391. http://gcc.gnu.org/PR24718
- 392. http://gcc.gnu.org/PR18421
- 393. http://gcc.gnu.org/PR20621
- 394. http://gcc.gnu.org/PR18583
- 395. http://gcc.gnu.org/PR20191
- 396. http://gcc.gnu.org/PR22083
- 397. http://gcc.gnu.org/PR23070
- 398. http://gcc.gnu.org/PR23404
- 399. http://gcc.gnu.org/PR23539
- 400. http://gcc.gnu.org/PR24102
- 401. http://gcc.gnu.org/PR24465
- 402. http://gcc.gnu.org/PR19933
- 403. http://gcc.gnu.org/PR21889
- 404. http://gcc.gnu.org/PR19300
- 405. http://gcc.gnu.org/PR20301
- 406. http://gcc.gnu.org/PR20673
- 407. http://gcc.gnu.org/PR18582
- 408. http://gcc.gnu.org/PR19340
- 409. http://gcc.gnu.org/PR21716
- 410. http://gcc.gnu.org/PR24315
- 411. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.6
- 412. http://gcc.gnu.org/onlinedocs/
+  27. https://gcc.gnu.org/bugzilla/buglist.cgi?short_desc_type=notregexp&short_desc=%5C%5B3%5C.4.*%5BRr%5Degression&target_milestone=3.4.0&bug_status=RESOLVED&resolution=FIXED
+  28. https://gcc.gnu.org/PR10129
+  29. https://gcc.gnu.org/PR14576
+  30. https://gcc.gnu.org/PR14760
+  31. https://gcc.gnu.org/PR14671
+  32. https://gcc.gnu.org/PR15093
+  33. https://gcc.gnu.org/PR15178
+  34. https://gcc.gnu.org/PR12753
+  35. https://gcc.gnu.org/PR13985
+  36. https://gcc.gnu.org/PR14810
+  37. https://gcc.gnu.org/PR14883
+  38. https://gcc.gnu.org/PR15044
+  39. https://gcc.gnu.org/PR15057
+  40. https://gcc.gnu.org/PR15064
+  41. https://gcc.gnu.org/PR15142
+  42. https://gcc.gnu.org/PR15159
+  43. https://gcc.gnu.org/PR15165
+  44. https://gcc.gnu.org/PR15193
+  45. https://gcc.gnu.org/PR15209
+  46. https://gcc.gnu.org/PR15227
+  47. https://gcc.gnu.org/PR15285
+  48. https://gcc.gnu.org/PR15299
+  49. https://gcc.gnu.org/PR15329
+  50. https://gcc.gnu.org/PR15550
+  51. https://gcc.gnu.org/PR15554
+  52. https://gcc.gnu.org/PR15640
+  53. https://gcc.gnu.org/PR15666
+  54. https://gcc.gnu.org/PR15696
+  55. https://gcc.gnu.org/PR15701
+  56. https://gcc.gnu.org/PR15761
+  57. https://gcc.gnu.org/PR15829
+  58. https://gcc.gnu.org/PR14538
+  59. https://gcc.gnu.org/PR12391
+  60. https://gcc.gnu.org/PR14649
+  61. https://gcc.gnu.org/PR15004
+  62. https://gcc.gnu.org/PR15749
+  63. https://gcc.gnu.org/PR10646
+  64. https://gcc.gnu.org/PR12077
+  65. https://gcc.gnu.org/PR13598
+  66. https://gcc.gnu.org/PR14211
+  67. https://gcc.gnu.org/PR14220
+  68. https://gcc.gnu.org/PR14245
+  69. https://gcc.gnu.org/PR14340
+  70. https://gcc.gnu.org/PR14600
+  71. https://gcc.gnu.org/PR14668
+  72. https://gcc.gnu.org/PR14775
+  73. https://gcc.gnu.org/PR14821
+  74. https://gcc.gnu.org/PR14930
+  75. https://gcc.gnu.org/PR14932
+  76. https://gcc.gnu.org/PR14950
+  77. https://gcc.gnu.org/PR14962
+  78. https://gcc.gnu.org/PR14975
+  79. https://gcc.gnu.org/PR15002
+  80. https://gcc.gnu.org/PR15025
+  81. https://gcc.gnu.org/PR15046
+  82. https://gcc.gnu.org/PR15069
+  83. https://gcc.gnu.org/PR15074
+  84. https://gcc.gnu.org/PR15083
+  85. https://gcc.gnu.org/PR15096
+  86. https://gcc.gnu.org/PR15287
+  87. https://gcc.gnu.org/PR15317
+  88. https://gcc.gnu.org/PR15337
+  89. https://gcc.gnu.org/PR15361
+  90. https://gcc.gnu.org/PR15412
+  91. https://gcc.gnu.org/PR15427
+  92. https://gcc.gnu.org/PR15471
+  93. https://gcc.gnu.org/PR15503
+  94. https://gcc.gnu.org/PR15507
+  95. https://gcc.gnu.org/PR15542
+  96. https://gcc.gnu.org/PR15565
+  97. https://gcc.gnu.org/PR15625
+  98. https://gcc.gnu.org/PR15629
+  99. https://gcc.gnu.org/PR15742
+ 100. https://gcc.gnu.org/PR15775
+ 101. https://gcc.gnu.org/PR15821
+ 102. https://gcc.gnu.org/PR15862
+ 103. https://gcc.gnu.org/PR15875
+ 104. https://gcc.gnu.org/PR15877
+ 105. https://gcc.gnu.org/PR15947
+ 106. https://gcc.gnu.org/PR16020
+ 107. https://gcc.gnu.org/PR16154
+ 108. https://gcc.gnu.org/PR16174
+ 109. https://gcc.gnu.org/PR14315
+ 110. https://gcc.gnu.org/PR15151
+ 111. https://gcc.gnu.org/PR7993
+ 112. https://gcc.gnu.org/PR15228
+ 113. https://gcc.gnu.org/PR15345
+ 114. https://gcc.gnu.org/PR15945
+ 115. https://gcc.gnu.org/PR15526
+ 116. https://gcc.gnu.org/PR14690
+ 117. https://gcc.gnu.org/PR15112
+ 118. https://gcc.gnu.org/PR15067
+ 119. https://gcc.gnu.org/PR1963
+ 120. https://gcc.gnu.org/PR15717
+ 121. https://gcc.gnu.org/PR14782
+ 122. https://gcc.gnu.org/PR14828
+ 123. https://gcc.gnu.org/PR15202
+ 124. https://gcc.gnu.org/PR14610
+ 125. https://gcc.gnu.org/PR14813
+ 126. https://gcc.gnu.org/PR14857
+ 127. https://gcc.gnu.org/PR15598
+ 128. https://gcc.gnu.org/PR15653
+ 129. https://gcc.gnu.org/PR15189
+ 130. https://gcc.gnu.org/PR15331
+ 131. https://gcc.gnu.org/PR16144
+ 132. https://gcc.gnu.org/PR16176
+ 133. https://gcc.gnu.org/PR11591
+ 134. https://gcc.gnu.org/PR12028
+ 135. https://gcc.gnu.org/PR14478
+ 136. https://gcc.gnu.org/PR14567
+ 137. https://gcc.gnu.org/PR14715
+ 138. https://gcc.gnu.org/PR14902
+ 139. https://gcc.gnu.org/PR14924
+ 140. https://gcc.gnu.org/PR14960
+ 141. https://gcc.gnu.org/PR15106
+ 142. https://gcc.gnu.org/PR16026
+ 143. https://gcc.gnu.org/PR15191
+ 144. https://gcc.gnu.org/PR15662
+ 145. https://gcc.gnu.org/PR15054
+ 146. https://gcc.gnu.org/PR15783
+ 147. https://gcc.gnu.org/PR15626
+ 148. https://gcc.gnu.org/PR14326
+ 149. https://gcc.gnu.org/PR14723
+ 150. https://gcc.gnu.org/PR15290
+ 151. https://gcc.gnu.org/PR15250
+ 152. https://gcc.gnu.org/PR15551
+ 153. https://gcc.gnu.org/PR8309
+ 154. https://gcc.gnu.org/PR13250
+ 155. https://gcc.gnu.org/PR13803
+ 156. https://gcc.gnu.org/PR14093
+ 157. https://gcc.gnu.org/PR14457
+ 158. https://gcc.gnu.org/PR14542
+ 159. https://gcc.gnu.org/PR15100
+ 160. https://gcc.gnu.org/PR15296
+ 161. https://gcc.gnu.org/PR15396
+ 162. https://gcc.gnu.org/PR15782
+ 163. https://gcc.gnu.org/PR11610
+ 164. https://gcc.gnu.org/PR15488
+ 165. https://gcc.gnu.org/PR15489
+ 166. https://gcc.gnu.org/PR13928
+ 167. https://gcc.gnu.org/PR14150
+ 168. https://gcc.gnu.org/PR14949
+ 169. https://gcc.gnu.org/PR15123
+ 170. https://gcc.gnu.org/PR16469
+ 171. https://gcc.gnu.org/PR16344
+ 172. https://gcc.gnu.org/PR16842
+ 173. https://gcc.gnu.org/PR12608
+ 174. https://gcc.gnu.org/PR14492
+ 175. https://gcc.gnu.org/PR15461
+ 176. https://gcc.gnu.org/PR15890
+ 177. https://gcc.gnu.org/PR16180
+ 178. https://gcc.gnu.org/PR16224
+ 179. https://gcc.gnu.org/PR16408
+ 180. https://gcc.gnu.org/PR16529
+ 181. https://gcc.gnu.org/PR16698
+ 182. https://gcc.gnu.org/PR16706
+ 183. https://gcc.gnu.org/PR16810
+ 184. https://gcc.gnu.org/PR16851
+ 185. https://gcc.gnu.org/PR16870
+ 186. https://gcc.gnu.org/PR16904
+ 187. https://gcc.gnu.org/PR16905
+ 188. https://gcc.gnu.org/PR16964
+ 189. https://gcc.gnu.org/PR17068
+ 190. https://gcc.gnu.org/PR16366
+ 191. https://gcc.gnu.org/PR15345
+ 192. https://gcc.gnu.org/PR16590
+ 193. https://gcc.gnu.org/PR16693
+ 194. https://gcc.gnu.org/PR17078
+ 195. https://gcc.gnu.org/PR13956
+ 196. https://gcc.gnu.org/PR16684
+ 197. https://gcc.gnu.org/PR12658
+ 198. https://gcc.gnu.org/PR13092
+ 199. https://gcc.gnu.org/PR15320
+ 200. https://gcc.gnu.org/PR16246
+ 201. https://gcc.gnu.org/PR16273
+ 202. https://gcc.gnu.org/PR16401
+ 203. https://gcc.gnu.org/PR16411
+ 204. https://gcc.gnu.org/PR16489
+ 205. https://gcc.gnu.org/PR16618
+ 206. https://gcc.gnu.org/PR16637
+ 207. https://gcc.gnu.org/PR16717
+ 208. https://gcc.gnu.org/PR16813
+ 209. https://gcc.gnu.org/PR16853
+ 210. https://gcc.gnu.org/PR16889
+ 211. https://gcc.gnu.org/PR16959
+ 212. https://gcc.gnu.org/PR7587
+ 213. https://gcc.gnu.org/PR16473
+ 214. https://gcc.gnu.org/PR16478
+ 215. https://gcc.gnu.org/PR10695
+ 216. https://gcc.gnu.org/PR16974
+ 217. https://gcc.gnu.org/PR16298
+ 218. https://gcc.gnu.org/PR17113
+ 219. https://gcc.gnu.org/PR14697
+ 220. https://gcc.gnu.org/PR15869
+ 221. https://gcc.gnu.org/PR16325
+ 222. https://gcc.gnu.org/PR16357
+ 223. https://gcc.gnu.org/PR16380
+ 224. https://gcc.gnu.org/PR16407
+ 225. https://gcc.gnu.org/PR16643
+ 226. https://gcc.gnu.org/PR15927
+ 227. https://gcc.gnu.org/PR15948
+ 228. https://gcc.gnu.org/PR17019
+ 229. https://gcc.gnu.org/PR16130
+ 230. https://gcc.gnu.org/PR16142
+ 231. https://gcc.gnu.org/PR16278
+ 232. https://gcc.gnu.org/PR16414
+ 233. https://gcc.gnu.org/PR16445
+ 234. https://gcc.gnu.org/PR16490
+ 235. https://gcc.gnu.org/PR16683
+ 236. https://gcc.gnu.org/PR16195
+ 237. https://gcc.gnu.org/PR16239
+ 238. https://gcc.gnu.org/PR16199
+ 239. https://gcc.gnu.org/PR16416
+ 240. https://gcc.gnu.org/PR16430
+ 241. https://gcc.gnu.org/PR16379
+ 242. https://gcc.gnu.org/PR17093
+ 243. https://gcc.gnu.org/PR17119
+ 244. https://gcc.gnu.org/PR15928
+ 245. https://gcc.gnu.org/PR16210
+ 246. https://gcc.gnu.org/PR15488
+ 247. https://gcc.gnu.org/PR16250
+ 248. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.3
+ 249. https://gcc.gnu.org/PR17369
+ 250. https://gcc.gnu.org/PR17850
+ 251. https://gcc.gnu.org/PR13948
+ 252. https://gcc.gnu.org/PR14492
+ 253. https://gcc.gnu.org/PR16301
+ 254. https://gcc.gnu.org/PR16566
+ 255. https://gcc.gnu.org/PR17023
+ 256. https://gcc.gnu.org/PR17027
+ 257. https://gcc.gnu.org/PR17524
+ 258. https://gcc.gnu.org/PR17826
+ 259. https://gcc.gnu.org/PR15526
+ 260. https://gcc.gnu.org/PR16999
+ 261. https://gcc.gnu.org/PR17503
+ 262. https://gcc.gnu.org/PR17581
+ 263. https://gcc.gnu.org/PR18129
+ 264. https://gcc.gnu.org/PR10975
+ 265. https://gcc.gnu.org/PR11722
+ 266. https://gcc.gnu.org/PR14534
+ 267. https://gcc.gnu.org/PR15172
+ 268. https://gcc.gnu.org/PR15786
+ 269. https://gcc.gnu.org/PR16162
+ 270. https://gcc.gnu.org/PR16612
+ 271. https://gcc.gnu.org/PR16715
+ 272. https://gcc.gnu.org/PR16848
+ 273. https://gcc.gnu.org/PR17132
+ 274. https://gcc.gnu.org/PR17259
+ 275. https://gcc.gnu.org/PR17327
+ 276. https://gcc.gnu.org/PR17393
+ 277. https://gcc.gnu.org/PR17501
+ 278. https://gcc.gnu.org/PR17537
+ 279. https://gcc.gnu.org/PR17585
+ 280. https://gcc.gnu.org/PR17821
+ 281. https://gcc.gnu.org/PR17829
+ 282. https://gcc.gnu.org/PR17851
+ 283. https://gcc.gnu.org/PR17976
+ 284. https://gcc.gnu.org/PR18020
+ 285. https://gcc.gnu.org/PR18093
+ 286. https://gcc.gnu.org/PR18140
+ 287. https://gcc.gnu.org/PR17541
+ 288. https://gcc.gnu.org/PR17853
+ 289. https://gcc.gnu.org/PR17245
+ 290. https://gcc.gnu.org/PR17167
+ 291. https://gcc.gnu.org/PR17277
+ 292. https://gcc.gnu.org/PR17505
+ 293. https://gcc.gnu.org/PR17684
+ 294. https://gcc.gnu.org/PR17384
+ 295. https://gcc.gnu.org/PR17770
+ 296. https://gcc.gnu.org/PR11476
+ 297. https://gcc.gnu.org/PR14064
+ 298. https://gcc.gnu.org/PR14678
+ 299. https://gcc.gnu.org/PR15583
+ 300. https://gcc.gnu.org/PR15790
+ 301. https://gcc.gnu.org/PR15886
+ 302. https://gcc.gnu.org/PR16884
+ 303. https://gcc.gnu.org/PR13841
+ 304. https://gcc.gnu.org/PR15860
+ 305. https://gcc.gnu.org/PR17465
+ 306. https://gcc.gnu.org/PR17469
+ 307. https://gcc.gnu.org/PR18138
+ 308. https://gcc.gnu.org/PR15498
+ 309. https://gcc.gnu.org/PR15747
+ 310. https://gcc.gnu.org/PR16406
+ 311. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.4
+ 312. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.5
+ 313. https://gcc.gnu.org/PR24688
+ 314. https://gcc.gnu.org/PR17188
+ 315. https://gcc.gnu.org/PR20187
+ 316. https://gcc.gnu.org/PR21873
+ 317. https://gcc.gnu.org/PR21899
+ 318. https://gcc.gnu.org/PR22061
+ 319. https://gcc.gnu.org/PR22208
+ 320. https://gcc.gnu.org/PR22458
+ 321. https://gcc.gnu.org/PR22589
+ 322. https://gcc.gnu.org/PR24101
+ 323. https://gcc.gnu.org/PR10611
+ 324. https://gcc.gnu.org/PR13377
+ 325. https://gcc.gnu.org/PR16002
+ 326. https://gcc.gnu.org/PR17413
+ 327. https://gcc.gnu.org/PR17609
+ 328. https://gcc.gnu.org/PR17618
+ 329. https://gcc.gnu.org/PR18124
+ 330. https://gcc.gnu.org/PR18155
+ 331. https://gcc.gnu.org/PR18177
+ 332. https://gcc.gnu.org/PR18368
+ 333. https://gcc.gnu.org/PR18378
+ 334. https://gcc.gnu.org/PR18466
+ 335. https://gcc.gnu.org/PR18512
+ 336. https://gcc.gnu.org/PR18545
+ 337. https://gcc.gnu.org/PR18738
+ 338. https://gcc.gnu.org/PR18803
+ 339. https://gcc.gnu.org/PR19004
+ 340. https://gcc.gnu.org/PR19208
+ 341. https://gcc.gnu.org/PR19253
+ 342. https://gcc.gnu.org/PR19608
+ 343. https://gcc.gnu.org/PR19884
+ 344. https://gcc.gnu.org/PR20153
+ 345. https://gcc.gnu.org/PR20563
+ 346. https://gcc.gnu.org/PR20789
+ 347. https://gcc.gnu.org/PR21336
+ 348. https://gcc.gnu.org/PR21768
+ 349. https://gcc.gnu.org/PR21853
+ 350. https://gcc.gnu.org/PR21903
+ 351. https://gcc.gnu.org/PR21983
+ 352. https://gcc.gnu.org/PR21987
+ 353. https://gcc.gnu.org/PR22153
+ 354. https://gcc.gnu.org/PR22172
+ 355. https://gcc.gnu.org/PR21286
+ 356. https://gcc.gnu.org/PR22233
+ 357. https://gcc.gnu.org/PR22508
+ 358. https://gcc.gnu.org/PR22545
+ 359. https://gcc.gnu.org/PR23528
+ 360. https://gcc.gnu.org/PR23550
+ 361. https://gcc.gnu.org/PR23586
+ 362. https://gcc.gnu.org/PR23624
+ 363. https://gcc.gnu.org/PR23639
+ 364. https://gcc.gnu.org/PR23797
+ 365. https://gcc.gnu.org/PR23965
+ 366. https://gcc.gnu.org/PR24052
+ 367. https://gcc.gnu.org/PR24580
+ 368. https://gcc.gnu.org/PR24267
+ 369. https://gcc.gnu.org/PR17810
+ 370. https://gcc.gnu.org/PR17860
+ 371. https://gcc.gnu.org/PR21709
+ 372. https://gcc.gnu.org/PR21964
+ 373. https://gcc.gnu.org/PR22167
+ 374. https://gcc.gnu.org/PR22619
+ 375. https://gcc.gnu.org/PR23241
+ 376. https://gcc.gnu.org/PR23478
+ 377. https://gcc.gnu.org/PR24470
+ 378. https://gcc.gnu.org/PR24950
+ 379. https://gcc.gnu.org/PR14400
+ 380. https://gcc.gnu.org/PR14940
+ 381. https://gcc.gnu.org/PR20239
+ 382. https://gcc.gnu.org/PR15220
+ 383. https://gcc.gnu.org/PR19275
+ 384. https://gcc.gnu.org/PR21888
+ 385. https://gcc.gnu.org/PR15342
+ 386. https://gcc.gnu.org/PR23985
+ 387. https://gcc.gnu.org/PR16719
+ 388. https://gcc.gnu.org/PR21723
+ 389. https://gcc.gnu.org/PR21841
+ 390. https://gcc.gnu.org/PR23644
+ 391. https://gcc.gnu.org/PR24718
+ 392. https://gcc.gnu.org/PR18421
+ 393. https://gcc.gnu.org/PR20621
+ 394. https://gcc.gnu.org/PR18583
+ 395. https://gcc.gnu.org/PR20191
+ 396. https://gcc.gnu.org/PR22083
+ 397. https://gcc.gnu.org/PR23070
+ 398. https://gcc.gnu.org/PR23404
+ 399. https://gcc.gnu.org/PR23539
+ 400. https://gcc.gnu.org/PR24102
+ 401. https://gcc.gnu.org/PR24465
+ 402. https://gcc.gnu.org/PR19933
+ 403. https://gcc.gnu.org/PR21889
+ 404. https://gcc.gnu.org/PR19300
+ 405. https://gcc.gnu.org/PR20301
+ 406. https://gcc.gnu.org/PR20673
+ 407. https://gcc.gnu.org/PR18582
+ 408. https://gcc.gnu.org/PR19340
+ 409. https://gcc.gnu.org/PR21716
+ 410. https://gcc.gnu.org/PR24315
+ 411. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.6
+ 412. https://gcc.gnu.org/onlinedocs/
  413. mailto:gcc-help@gcc.gnu.org
  414. mailto:gcc@gcc.gnu.org
- 415. http://gcc.gnu.org/lists.html
+ 415. https://gcc.gnu.org/lists.html
  416. http://www.fsf.org/
- 417. http://gcc.gnu.org/about.html
+ 417. https://gcc.gnu.org/about.html
  418. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-3.3/index.html
@@ -9829,13 +9910,13 @@ References and Acknowledgements
    provided this notice is preserved.
 
    These pages are [21]maintained by the GCC team. Last modified
-   2012-11-02[22].
+   2014-06-28[22].
 
 References
 
    1. http://www.gnu.org/
    2. http://gcc.gnu.org/gcc-3.3/changes.html
-   3. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
+   3. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
    4. http://gcc.gnu.org/gcc-3.3/changes.html#3.3.6
    5. http://gcc.gnu.org/gcc-3.3/changes.html#3.3.5
    6. http://gcc.gnu.org/gcc-3.3/changes.html#3.3.4
@@ -9844,16 +9925,16 @@ References
    9. http://gcc.gnu.org/gcc-3.3/changes.html#3.3.1
   10. http://gcc.gnu.org/gcc-3.3/changes.html
   11. http://gcc.gnu.org/gcc-3.3/buildstat.html
-  12. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
+  12. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   13. http://gcc.gnu.org/index.html
   14. mailto:gcc@gcc.gnu.org
   15. http://gcc.gnu.org/mirrors.html
-  16. http://gcc.gnu.org/onlinedocs/
+  16. https://gcc.gnu.org/onlinedocs/
   17. mailto:gcc-help@gcc.gnu.org
   18. mailto:gcc@gcc.gnu.org
-  19. http://gcc.gnu.org/lists.html
+  19. https://gcc.gnu.org/lists.html
   20. http://www.fsf.org/
-  21. http://gcc.gnu.org/about.html
+  21. https://gcc.gnu.org/about.html
   22. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-3.3/changes.html
@@ -10746,158 +10827,158 @@ GCC 3.3.2
 
   Bug Fixes
 
-   This section lists the problem reports (PRs) from [335]GCC's bug
-   tracking system that are known to be fixed in the 3.3.2 release. This
-   list might not be complete (that is, it is possible that some PRs that
-   have been fixed are not listed here).
+   This section lists the problem reports (PRs) from GCC's bug tracker
+   that are known to be fixed in the 3.3.2 release. This list might not be
+   complete (that is, it is possible that some PRs that have been fixed
+   are not listed here).
 
     Bootstrap failures and problems
 
-     * [336]8336 [SCO5] bootstrap config still tries to use COFF options
-     * [337]9330 [alpha-osf] Bootstrap failure on Compaq Tru64 with
+     * [335]8336 [SCO5] bootstrap config still tries to use COFF options
+     * [336]9330 [alpha-osf] Bootstrap failure on Compaq Tru64 with
        --enable-threads=posix
-     * [338]9631 [hppa64-linux] gcc-3.3 fails to bootstrap
-     * [339]9877 fixincludes makes a bad sys/byteorder.h on svr5 (UnixWare
+     * [337]9631 [hppa64-linux] gcc-3.3 fails to bootstrap
+     * [338]9877 fixincludes makes a bad sys/byteorder.h on svr5 (UnixWare
        7.1.1)
-     * [340]11687 xstormy16-elf build fails in libf2c
-     * [341]12263 [SGI IRIX] bootstrap fails during compile of
+     * [339]11687 xstormy16-elf build fails in libf2c
+     * [340]12263 [SGI IRIX] bootstrap fails during compile of
        libf2c/libI77/backspace.c
-     * [342]12490 buffer overflow in scan-decls.c (during Solaris 9
+     * [341]12490 buffer overflow in scan-decls.c (during Solaris 9
        fix-header processing)
 
     Internal compiler errors (multi-platform)
 
-     * [343]7277 Casting integers to vector types causes ICE
-     * [344]7939 (c++) ICE on invalid function template specialization
-     * [345]11063 (c++) ICE on parsing initialization list of const array
+     * [342]7277 Casting integers to vector types causes ICE
+     * [343]7939 (c++) ICE on invalid function template specialization
+     * [344]11063 (c++) ICE on parsing initialization list of const array
        member
-     * [346]11207 ICE with negative index in array element designator
-     * [347]11522 (fortran) g77 dwarf-2 ICE in
+     * [345]11207 ICE with negative index in array element designator
+     * [346]11522 (fortran) g77 dwarf-2 ICE in
        add_abstract_origin_attribute
-     * [348]11595 (c++) ICE on duplicate label definition
-     * [349]11646 (c++) ICE in commit_one_edge_insertion with
+     * [347]11595 (c++) ICE on duplicate label definition
+     * [348]11646 (c++) ICE in commit_one_edge_insertion with
        -fnon-call-exceptions -fgcse -O
-     * [350]11665 ICE in struct initializer when taking address
-     * [351]11852 (c++) ICE with bad struct initializer.
-     * [352]11878 (c++) ICE in cp_expr_size
-     * [353]11883 ICE with any -O on mercury-generated C code
-     * [354]11991 (c++) ICE in cxx_incomplete_type_diagnostic, in
+     * [349]11665 ICE in struct initializer when taking address
+     * [350]11852 (c++) ICE with bad struct initializer.
+     * [351]11878 (c++) ICE in cp_expr_size
+     * [352]11883 ICE with any -O on mercury-generated C code
+     * [353]11991 (c++) ICE in cxx_incomplete_type_diagnostic, in
        cp/typeck2.c when applying typeid operator to template template
        parameter
-     * [355]12146 ICE in lookup_template_function, in cp/pt.c
-     * [356]12215 ICE in make_label_edge with -fnon-call-exceptions
+     * [354]12146 ICE in lookup_template_function, in cp/pt.c
+     * [355]12215 ICE in make_label_edge with -fnon-call-exceptions
        -fno-gcse -O2
-     * [357]12369 (c++) ICE with templates and friends
-     * [358]12446 ICE in emit_move_insn on complicated array reference
-     * [359]12510 ICE in final_scan_insn
-     * [360]12544 ICE with large parameters used in nested functions
+     * [356]12369 (c++) ICE with templates and friends
+     * [357]12446 ICE in emit_move_insn on complicated array reference
+     * [358]12510 ICE in final_scan_insn
+     * [359]12544 ICE with large parameters used in nested functions
 
     C and optimization bugs
 
-     * [361]9862 spurious warnings with -W -finline-functions
-     * [362]10962 lookup_field is a linear search on a linked list (can be
+     * [360]9862 spurious warnings with -W -finline-functions
+     * [361]10962 lookup_field is a linear search on a linked list (can be
        slow if large struct)
-     * [363]11370 -Wunreachable-code gives false complaints
-     * [364]11637 invalid assembly with -fnon-call-exceptions
-     * [365]11885 Problem with bitfields in packed structs
-     * [366]12082 Inappropriate unreachable code warnings
-     * [367]12180 Inline optimization fails for variadic function
-     * [368]12340 loop unroller + gcse produces wrong code
+     * [362]11370 -Wunreachable-code gives false complaints
+     * [363]11637 invalid assembly with -fnon-call-exceptions
+     * [364]11885 Problem with bitfields in packed structs
+     * [365]12082 Inappropriate unreachable code warnings
+     * [366]12180 Inline optimization fails for variadic function
+     * [367]12340 loop unroller + gcse produces wrong code
 
     C++ compiler and library
 
-     * [369]3907 nested template parameter collides with member name
-     * [370]5293 confusing message when binding a temporary to a reference
-     * [371]5296 [DR115] Pointers to functions and to template functions
+     * [368]3907 nested template parameter collides with member name
+     * [369]5293 confusing message when binding a temporary to a reference
+     * [370]5296 [DR115] Pointers to functions and to template functions
        behave differently in deduction
-     * [372]7939 ICE on function template specialization
-     * [373]8656 Unable to assign function with __attribute__ and pointer
+     * [371]7939 ICE on function template specialization
+     * [372]8656 Unable to assign function with __attribute__ and pointer
        return type to an appropriate variable
-     * [374]10147 Confusing error message for invalid template function
+     * [373]10147 Confusing error message for invalid template function
        argument
-     * [375]11400 std::search_n() makes assumptions about Size parameter
-     * [376]11409 issues with using declarations, overloading, and
+     * [374]11400 std::search_n() makes assumptions about Size parameter
+     * [375]11409 issues with using declarations, overloading, and
        built-in functions
-     * [377]11740 ctype<wchar_t>::do_is(mask, wchar_t) doesn't handle
+     * [376]11740 ctype<wchar_t>::do_is(mask, wchar_t) doesn't handle
        multiple bits in mask
-     * [378]11786 operator() call on variable in other namespace not
+     * [377]11786 operator() call on variable in other namespace not
        recognized
-     * [379]11867 static_cast ignores ambiguity
-     * [380]11928 bug with conversion operators that are typedefs
-     * [381]12114 Uninitialized memory accessed in dtor
-     * [382]12163 static_cast + explicit constructor regression
-     * [383]12181 Wrong code with comma operator and c++
-     * [384]12236 regparm and fastcall messes up parameters
-     * [385]12266 incorrect instantiation of unneeded template during
+     * [378]11867 static_cast ignores ambiguity
+     * [379]11928 bug with conversion operators that are typedefs
+     * [380]12114 Uninitialized memory accessed in dtor
+     * [381]12163 static_cast + explicit constructor regression
+     * [382]12181 Wrong code with comma operator and c++
+     * [383]12236 regparm and fastcall messes up parameters
+     * [384]12266 incorrect instantiation of unneeded template during
        overload resolution
-     * [386]12296 istream::peek() doesn't set eofbit
-     * [387]12298 [sjlj exceptions] Stack unwind destroys
+     * [385]12296 istream::peek() doesn't set eofbit
+     * [386]12298 [sjlj exceptions] Stack unwind destroys
        not-yet-constructed object
-     * [388]12369 ICE with templates and friends
-     * [389]12337 apparently infinite loop in g++
-     * [390]12344 stdcall attribute ignored if function returns a pointer
-     * [391]12451 missing(late) class forward declaration in cxxabi.h
-     * [392]12486 g++ accepts invalid use of a qualified name
+     * [387]12369 ICE with templates and friends
+     * [388]12337 apparently infinite loop in g++
+     * [389]12344 stdcall attribute ignored if function returns a pointer
+     * [390]12451 missing(late) class forward declaration in cxxabi.h
+     * [391]12486 g++ accepts invalid use of a qualified name
 
     x86 specific (Intel/AMD)
 
-     * [393]8869 [x86 MMX] ICE with const variable optimization and MMX
+     * [392]8869 [x86 MMX] ICE with const variable optimization and MMX
        builtins
-     * [394]9786 ICE in fixup_abnormal_edges with -fnon-call-exceptions
+     * [393]9786 ICE in fixup_abnormal_edges with -fnon-call-exceptions
        -O2
-     * [395]11689 g++3.3 emits un-assembleable code for k6 architecture
-     * [396]12116 [k6] Invalid assembly output values with X-MAME code
-     * [397]12070 ICE converting between double and long double with
+     * [394]11689 g++3.3 emits un-assembleable code for k6 architecture
+     * [395]12116 [k6] Invalid assembly output values with X-MAME code
+     * [396]12070 ICE converting between double and long double with
        -msoft-float
 
     ia64-specific
 
-     * [398]11184 [ia64 hpux] ICE on __builtin_apply building libobjc
-     * [399]11535 __builtin_return_address may not work on ia64
-     * [400]11693 [ia64] ICE in gen_nop_type
-     * [401]12224 [ia64] Thread-local storage doesn't work
+     * [397]11184 [ia64 hpux] ICE on __builtin_apply building libobjc
+     * [398]11535 __builtin_return_address may not work on ia64
+     * [399]11693 [ia64] ICE in gen_nop_type
+     * [400]12224 [ia64] Thread-local storage doesn't work
 
     PowerPC-specific
 
-     * [402]11087 [powerpc64-linux] GCC miscompiles raid1.c from linux
+     * [401]11087 [powerpc64-linux] GCC miscompiles raid1.c from linux
        kernel
-     * [403]11319 loop miscompiled on ppc32
-     * [404]11949 ICE Compiler segfault with ffmpeg -maltivec code
+     * [402]11319 loop miscompiled on ppc32
+     * [403]11949 ICE Compiler segfault with ffmpeg -maltivec code
 
     SPARC-specific
 
-     * [405]11662 wrong code for expr. with cast to long long and
+     * [404]11662 wrong code for expr. with cast to long long and
        exclusive or
-     * [406]11965 invalid assembler code for a shift < 32 operation
-     * [407]12301 (c++) stack corruption when a returned expression throws
+     * [405]11965 invalid assembler code for a shift < 32 operation
+     * [406]12301 (c++) stack corruption when a returned expression throws
        an exception
 
     Alpha-specific
 
-     * [408]11717 [alpha-linux] unrecognizable insn compiling for.c of
+     * [407]11717 [alpha-linux] unrecognizable insn compiling for.c of
        kernel 2.4.22-pre8
 
     HPUX-specific
 
-     * [409]11313 problem with #pragma weak and static inline functions
-     * [410]11712 __STDC_EXT__ not defined for C++ by default anymore?
+     * [408]11313 problem with #pragma weak and static inline functions
+     * [409]11712 __STDC_EXT__ not defined for C++ by default anymore?
 
     Solaris specific
 
-     * [411]12166 Profiled programs crash if PROFDIR is set
+     * [410]12166 Profiled programs crash if PROFDIR is set
 
     Solaris-x86 specific
 
-     * [412]12101 i386 Solaris no longer works with GNU as?
+     * [411]12101 i386 Solaris no longer works with GNU as?
 
     Miscellaneous embedded target-specific bugs
 
-     * [413]10988 [m32r-elf] wrong blockmove code with -O3
-     * [414]11805 [h8300-unknown-coff] [H8300] ICE for simple code with
+     * [412]10988 [m32r-elf] wrong blockmove code with -O3
+     * [413]11805 [h8300-unknown-coff] [H8300] ICE for simple code with
        -O2
-     * [415]11902 [sh4] spec file improperly inserts rpath even when none
+     * [414]11902 [sh4] spec file improperly inserts rpath even when none
        needed
-     * [416]11903 [sh4] -pthread fails to link due to error in spec file
+     * [415]11903 [sh4] -pthread fails to link due to error in spec file
        on sh4
      __________________________________________________________________
 
@@ -10914,66 +10995,66 @@ GCC 3.3.3
 
   Bug Fixes
 
-   This section lists the problem reports (PRs) from [417]GCC's bug
-   tracking system that are known to be fixed in the 3.3.3 release. This
-   list might not be complete (that is, it is possible that some PRs that
-   have been fixed are not listed here).
+   This section lists the problem reports (PRs) from GCC's bug tracker
+   that are known to be fixed in the 3.3.3 release. This list might not be
+   complete (that is, it is possible that some PRs that have been fixed
+   are not listed here).
 
     Bootstrap failures and issues
 
-     * [418]11890 Building cross gcc-3.3.1 for sparc-sun-solaris2.6 fails
-     * [419]12399 boehm-gc fails (when building a cross compiler): libtool
+     * [416]11890 Building cross gcc-3.3.1 for sparc-sun-solaris2.6 fails
+     * [417]12399 boehm-gc fails (when building a cross compiler): libtool
        unable to infer tagged configuration
-     * [420]13068 mklibgcc.in doesn't handle multi-level multilib
+     * [418]13068 mklibgcc.in doesn't handle multi-level multilib
        subdirectories properly
 
     Internal compiler errors (multi-platform)
 
-     * [421]10060 ICE (stack overflow) on huge file (300k lines) due to
+     * [419]10060 ICE (stack overflow) on huge file (300k lines) due to
        recursive behaviour of copy_rtx_if_shared, in emit_rtl.c
-     * [422]10555 (c++) ICE on undefined template argument
-     * [423]10706 (c++) ICE in mangle_class_name_for_template
-     * [424]11496 (fortran) error in flow_loops_find when -funroll-loops
+     * [420]10555 (c++) ICE on undefined template argument
+     * [421]10706 (c++) ICE in mangle_class_name_for_template
+     * [422]11496 (fortran) error in flow_loops_find when -funroll-loops
        active
-     * [425]11741 ICE in pre_insert_copy_insn, in gcse.c
-     * [426]12440 GCC crashes during compilation of quicktime4linux 2.0.0
-     * [427]12632 (fortran) -fbounds-check ICE
-     * [428]12712 (c++) ICE on short legit C++ code fragment with gcc
+     * [423]11741 ICE in pre_insert_copy_insn, in gcse.c
+     * [424]12440 GCC crashes during compilation of quicktime4linux 2.0.0
+     * [425]12632 (fortran) -fbounds-check ICE
+     * [426]12712 (c++) ICE on short legit C++ code fragment with gcc
        3.3.2
-     * [429]12726 (c++) ICE (segfault) on trivial code
-     * [430]12890 (c++) ICE on compilation of class with throwing method
-     * [431]12900 (c++) ICE in rtl_verify_flow_info_1
-     * [432]13060 (fortran) ICE in fixup_var_refs_1, in function.c on
+     * [427]12726 (c++) ICE (segfault) on trivial code
+     * [428]12890 (c++) ICE on compilation of class with throwing method
+     * [429]12900 (c++) ICE in rtl_verify_flow_info_1
+     * [430]13060 (fortran) ICE in fixup_var_refs_1, in function.c on
        correct code with -O2 -fno-force-mem
-     * [433]13289 (c++) ICE in regenerate_decl_from_template on recursive
+     * [431]13289 (c++) ICE in regenerate_decl_from_template on recursive
        template
-     * [434]13318 ICE: floating point exception in the loop optimizer
-     * [435]13392 (c++) ICE in convert_from_eh_region_ranges_1, in
+     * [432]13318 ICE: floating point exception in the loop optimizer
+     * [433]13392 (c++) ICE in convert_from_eh_region_ranges_1, in
        except.c
-     * [436]13574 (c++) invalid array default initializer in class lets
+     * [434]13574 (c++) invalid array default initializer in class lets
        gcc consume all memory and die
-     * [437]13475 ICE on SIMD variables with partial value initialization
-     * [438]13797 (c++) ICE on invalid template parameter
-     * [439]13824 (java) gcj SEGV with simple .java program
+     * [435]13475 ICE on SIMD variables with partial value initialization
+     * [436]13797 (c++) ICE on invalid template parameter
+     * [437]13824 (java) gcj SEGV with simple .java program
 
     C and optimization bugs
 
-     * [440]8776 loop invariants are not removed (most likely)
-     * [441]10339 [sparc,ppc,ppc64] Invalid optimization: replacing
+     * [438]8776 loop invariants are not removed (most likely)
+     * [439]10339 [sparc,ppc,ppc64] Invalid optimization: replacing
        strncmp by memcmp
-     * [442]11350 undefined labels with -Os -fPIC
-     * [443]12826 Optimizer removes reference through volatile pointer
-     * [444]12500 stabs debug info: void no longer a predefined / builtin
+     * [440]11350 undefined labels with -Os -fPIC
+     * [441]12826 Optimizer removes reference through volatile pointer
+     * [442]12500 stabs debug info: void no longer a predefined / builtin
        type
-     * [445]12941 builtin-bitops-1.c miscompilation (latent bug)
-     * [446]12953 tree inliner bug (in inline_forbidden_p) and fix
-     * [447]13041 linux-2.6/sound/core/oss/rate.c miscompiled
-     * [448]13507 spurious printf format warning
-     * [449]13382 Type information for const pointer disappears during
+     * [443]12941 builtin-bitops-1.c miscompilation (latent bug)
+     * [444]12953 tree inliner bug (in inline_forbidden_p) and fix
+     * [445]13041 linux-2.6/sound/core/oss/rate.c miscompiled
+     * [446]13507 spurious printf format warning
+     * [447]13382 Type information for const pointer disappears during
        optimization.
-     * [450]13394 noreturn attribute ignored on recursive invokation
-     * [451]13400 Compiled code crashes storing to read-only location
-     * [452]13521 Endless loop in calculate_global_regs_live
+     * [448]13394 noreturn attribute ignored on recursive invokation
+     * [449]13400 Compiled code crashes storing to read-only location
+     * [450]13521 Endless loop in calculate_global_regs_live
 
     C++ compiler and library
 
@@ -10981,196 +11062,196 @@ GCC 3.3.3
    that the ISO C++ standards committee has made concerning several defect
    reports (DRs). Links in the list below point to detailed discussion of
    the relevant defect report.
-     * [453]2094 unimplemented: use of `ptrmem_cst' in template type
+     * [451]2094 unimplemented: use of `ptrmem_cst' in template type
        unification
-     * [454]2294 using declaration confusion
-     * [455]5050 template instantiation depth exceeds limit: recursion
+     * [452]2294 using declaration confusion
+     * [453]5050 template instantiation depth exceeds limit: recursion
        problem?
-     * [456]9371 Bad exception handling in
+     * [454]9371 Bad exception handling in
        i/ostream::operator>>/<<(streambuf*)
-     * [457]9546 bad exception handling in ostream members
-     * [458]10081 basic_ios::_M_cache_locale leaves NULL members in the
+     * [455]9546 bad exception handling in ostream members
+     * [456]10081 basic_ios::_M_cache_locale leaves NULL members in the
        face of unknown locales
-     * [459]10093 [460][DR 61] Setting failbit in exceptions doesn't work
-     * [461]10095 istream::operator>>(int&) sets ios::badbit when
+     * [457]10093 [458][DR 61] Setting failbit in exceptions doesn't work
+     * [459]10095 istream::operator>>(int&) sets ios::badbit when
        ios::failbit is set.
-     * [462]11554 Warning about reordering of initializers doesn't mention
+     * [460]11554 Warning about reordering of initializers doesn't mention
        location of constructor
-     * [463]12297 istream::sentry::sentry() handles eof() incorrectly.
-     * [464]12352 Exception safety problems in src/localename.cc
-     * [465]12438 Memory leak in locale::combine()
-     * [466]12540 Memory leak in locale::locale(const char*)
-     * [467]12594 DRs [468]60 [TC] and [469]63 [TC] not implemented
-     * [470]12657 Resolution of [471]DR 292 (WP) still unimplemented
-     * [472]12696 memory eating infinite loop in diagnostics (error
+     * [461]12297 istream::sentry::sentry() handles eof() incorrectly.
+     * [462]12352 Exception safety problems in src/localename.cc
+     * [463]12438 Memory leak in locale::combine()
+     * [464]12540 Memory leak in locale::locale(const char*)
+     * [465]12594 DRs [466]60 [TC] and [467]63 [TC] not implemented
+     * [468]12657 Resolution of [469]DR 292 (WP) still unimplemented
+     * [470]12696 memory eating infinite loop in diagnostics (error
        recovery problem)
-     * [473]12815 Code compiled with optimization behaves unexpectedly
-     * [474]12862 Conflicts between typedefs/enums and namespace member
+     * [471]12815 Code compiled with optimization behaves unexpectedly
+     * [472]12862 Conflicts between typedefs/enums and namespace member
        declarations
-     * [475]12926 Wrong value after assignment in initialize list using
+     * [473]12926 Wrong value after assignment in initialize list using
        bit-fields
-     * [476]12967 Resolution of [477]DR 300 [WP] still unimplemented
-     * [478]12971 Resolution of [479]DR 328 [WP] still unimplemented
-     * [480]13007 basic_streambuf::pubimbue, imbue wrong
-     * [481]13009 Implicitly-defined assignment operator writes to wrong
+     * [474]12967 Resolution of [475]DR 300 [WP] still unimplemented
+     * [476]12971 Resolution of [477]DR 328 [WP] still unimplemented
+     * [478]13007 basic_streambuf::pubimbue, imbue wrong
+     * [479]13009 Implicitly-defined assignment operator writes to wrong
        memory
-     * [482]13057 regparm attribute not applied to destructor
-     * [483]13070 -Wformat option ignored in g++
-     * [484]13081 forward template declarations in <complex> let inlining
+     * [480]13057 regparm attribute not applied to destructor
+     * [481]13070 -Wformat option ignored in g++
+     * [482]13081 forward template declarations in <complex> let inlining
        fail
-     * [485]13239 Assertion does not seem to work correctly anymore
-     * [486]13262 "xxx is private within this context" when initializing a
+     * [483]13239 Assertion does not seem to work correctly anymore
+     * [484]13262 "xxx is private within this context" when initializing a
        self-contained template class
-     * [487]13290 simple typo in concept checking for std::generate_n
-     * [488]13323 Template code does not compile in presence of typedef
-     * [489]13369 __verify_grouping (and __add_grouping?) not correct
-     * [490]13371 infinite loop with packed struct and inlining
-     * [491]13445 Template argument replacement "dereferences" a typedef
-     * [492]13461 Fails to access protected-ctor from public constant
-     * [493]13462 Non-standard-conforming type set::pointer
-     * [494]13478 gcc uses wrong constructor to initialize a const
+     * [485]13290 simple typo in concept checking for std::generate_n
+     * [486]13323 Template code does not compile in presence of typedef
+     * [487]13369 __verify_grouping (and __add_grouping?) not correct
+     * [488]13371 infinite loop with packed struct and inlining
+     * [489]13445 Template argument replacement "dereferences" a typedef
+     * [490]13461 Fails to access protected-ctor from public constant
+     * [491]13462 Non-standard-conforming type set::pointer
+     * [492]13478 gcc uses wrong constructor to initialize a const
        reference
-     * [495]13544 "conflicting types" for enums in different scopes
-     * [496]13650 string::compare should not (always) use
+     * [493]13544 "conflicting types" for enums in different scopes
+     * [494]13650 string::compare should not (always) use
        traits_type::length()
-     * [497]13683 bogus warning about passing non-PODs through ellipsis
-     * [498]13688 Derived class is denied access to protected base class
+     * [495]13683 bogus warning about passing non-PODs through ellipsis
+     * [496]13688 Derived class is denied access to protected base class
        member class
-     * [499]13774 Member variable cleared in virtual multiple inheritance
+     * [497]13774 Member variable cleared in virtual multiple inheritance
        class
-     * [500]13884 Protect sstream.tcc from extern template use
+     * [498]13884 Protect sstream.tcc from extern template use
 
     Java compiler and library
 
-     * [501]10746 [win32] garbage collection crash in GCJ
+     * [499]10746 [win32] garbage collection crash in GCJ
 
     Objective-C compiler and library
 
-     * [502]11433 Crash due to dereferencing null pointer when querying
+     * [500]11433 Crash due to dereferencing null pointer when querying
        protocol
 
     Fortran compiler and library
 
-     * [503]12633 logical expression gives incorrect result with
+     * [501]12633 logical expression gives incorrect result with
        -fugly-logint option
-     * [504]13037 [gcse-lm] g77 generates incorrect code
-     * [505]13213 Hex constant problem when compiling with -fugly-logint
+     * [502]13037 [gcse-lm] g77 generates incorrect code
+     * [503]13213 Hex constant problem when compiling with -fugly-logint
        and -ftypeless-boz
 
     x86-specific (Intel/AMD)
 
-     * [506]4490 ICE with -m128bit-long-double
-     * [507]12292 [x86_64] ICE: RTL check: expected code `const_int', have
+     * [504]4490 ICE with -m128bit-long-double
+     * [505]12292 [x86_64] ICE: RTL check: expected code `const_int', have
        `reg' in make_field_assignment, in combine.c
-     * [508]12441 ICE: can't find a register to spill
-     * [509]12943 array static-init failure under -fpic, -fPIC
-     * [510]13608 Incorrect code with -O3 -ffast-math
+     * [506]12441 ICE: can't find a register to spill
+     * [507]12943 array static-init failure under -fpic, -fPIC
+     * [508]13608 Incorrect code with -O3 -ffast-math
 
     PowerPC-specific
 
-     * [511]11598 testcase gcc.dg/20020118-1.c fails runtime check of
+     * [509]11598 testcase gcc.dg/20020118-1.c fails runtime check of
        __attribute__((aligned(16)))
-     * [512]11793 ICE in extract_insn, in recog.c (const_vector's)
-     * [513]12467 vmsumubm emitted when vmsummbm appropriate (typo in
+     * [510]11793 ICE in extract_insn, in recog.c (const_vector's)
+     * [511]12467 vmsumubm emitted when vmsummbm appropriate (typo in
        altivec.md)
-     * [514]12537 g++ generates writeable text sections
+     * [512]12537 g++ generates writeable text sections
 
     SPARC-specific
 
-     * [515]12496 wrong result for __atomic_add(&value, -1) when using -O0
+     * [513]12496 wrong result for __atomic_add(&value, -1) when using -O0
        -m64
-     * [516]12865 mprotect call to make trampoline executable may fail
-     * [517]13354 ICE in sparc_emit_set_const32
+     * [514]12865 mprotect call to make trampoline executable may fail
+     * [515]13354 ICE in sparc_emit_set_const32
 
     ARM-specific
 
-     * [518]10467 [arm] ICE in pre_insert_copy_insn,
+     * [516]10467 [arm] ICE in pre_insert_copy_insn,
 
     ia64-specific
 
-     * [519]11226 ICE passing struct arg with two floats
-     * [520]11227 ICE for _Complex float, _Complex long double args
-     * [521]12644 GCC 3.3.2 fails to compile glibc on ia64
-     * [522]13149 build gcc-3.3.2 1305 error:unrecognizable insn
+     * [517]11226 ICE passing struct arg with two floats
+     * [518]11227 ICE for _Complex float, _Complex long double args
+     * [519]12644 GCC 3.3.2 fails to compile glibc on ia64
+     * [520]13149 build gcc-3.3.2 1305 error:unrecognizable insn
      * Various fixes for libunwind
 
     Alpha-specific
 
-     * [523]12654 Incorrect comparison code generated for Alpha
-     * [524]12965 SEGV+ICE in cc1plus on alpha-linux with -O2
-     * [525]13031 ICE (unrecognizable insn) when building gnome-libs-1.4.2
+     * [521]12654 Incorrect comparison code generated for Alpha
+     * [522]12965 SEGV+ICE in cc1plus on alpha-linux with -O2
+     * [523]13031 ICE (unrecognizable insn) when building gnome-libs-1.4.2
 
     HPPA-specific
 
-     * [526]11634 [hppa] ICE in verify_local_live_at_start, in flow.c
-     * [527]12158 [hppa] compilation does not terminate at -O1
+     * [524]11634 [hppa] ICE in verify_local_live_at_start, in flow.c
+     * [525]12158 [hppa] compilation does not terminate at -O1
 
     S390-specific
 
-     * [528]11992 Wrong built-in code for memcmp with length 1<<24: only
+     * [526]11992 Wrong built-in code for memcmp with length 1<<24: only
        (1<<24)-1 possible for CLCL-Instruction
 
     SH-specific
 
-     * [529]9365 segfault in gen_far_branch (config/sh/sh.c)
-     * [530]10392 optimizer generates faulty array indexing
-     * [531]11322 SH profiler outputs multiple definitions of symbol
-     * [532]13069 gcc/config/sh/rtems.h broken
-     * [533]13302 Putting a va_list in a struct causes seg fault
-     * [534]13585 Incorrect optimization of call to sfunc
+     * [527]9365 segfault in gen_far_branch (config/sh/sh.c)
+     * [528]10392 optimizer generates faulty array indexing
+     * [529]11322 SH profiler outputs multiple definitions of symbol
+     * [530]13069 gcc/config/sh/rtems.h broken
+     * [531]13302 Putting a va_list in a struct causes seg fault
+     * [532]13585 Incorrect optimization of call to sfunc
      * Fix inappropriately exported libgcc functions from the shared
        library
 
     Other embedded target specific
 
-     * [535]8916 [mcore] unsigned char assign gets hosed.
-     * [536]11576 [h8300] ICE in change_address_1, in emit-rtl.c
-     * [537]13122 [h8300] local variable gets corrupted by function call
+     * [533]8916 [mcore] unsigned char assign gets hosed.
+     * [534]11576 [h8300] ICE in change_address_1, in emit-rtl.c
+     * [535]13122 [h8300] local variable gets corrupted by function call
        when -fomit-frame-pointer is given
-     * [538]13256 [cris] strict_low_part mistreated in delay slots
-     * [539]13373 [mcore] optimization with -frerun-cse-after-loop
+     * [536]13256 [cris] strict_low_part mistreated in delay slots
+     * [537]13373 [mcore] optimization with -frerun-cse-after-loop
        -fexpensive-optimizations produces wrong code on mcore
 
     GNU HURD-specific
 
-     * [540]12561 gcc/config/t-gnu needs updating to work with
+     * [538]12561 gcc/config/t-gnu needs updating to work with
        --with-sysroot
 
     Tru64 Unix specific
 
-     * [541]6243 testsuite fails almost all tests due to no libintl in
+     * [539]6243 testsuite fails almost all tests due to no libintl in
        LD_LIBRARY_PATH during test.
-     * [542]11397 weak aliases broken on Tru64 UNIX
+     * [540]11397 weak aliases broken on Tru64 UNIX
 
     AIX-specific
 
-     * [543]12505 build failure due to defines of uchar in cpphash.h and
+     * [541]12505 build failure due to defines of uchar in cpphash.h and
        sys/types.h
-     * [544]13150 WEAK symbols not exported by collect2
+     * [542]13150 WEAK symbols not exported by collect2
 
     IRIX-specific
 
-     * [545]12666 fixincludes problem on IRIX 6.5.19m
+     * [543]12666 fixincludes problem on IRIX 6.5.19m
 
     Solaris-specific
 
-     * [546]12969 Including sys/byteorder.h breaks configure checks
+     * [544]12969 Including sys/byteorder.h breaks configure checks
 
     Testsuite problems (compiler is not affected)
 
-     * [547]10819 testsuite creates CR+LF on compiler version lines in
+     * [545]10819 testsuite creates CR+LF on compiler version lines in
        test summary files
-     * [548]11612 abi_check not finding correct libgcc_s.so.1
+     * [546]11612 abi_check not finding correct libgcc_s.so.1
 
     Miscellaneous
 
-     * [549]13211 using -###, incorrect warnings about unused linker file
+     * [547]13211 using -###, incorrect warnings about unused linker file
        are produced
      __________________________________________________________________
 
 GCC 3.3.4
 
-   This is the [550]list of problem reports (PRs) from GCC's bug tracking
+   This is the [548]list of problem reports (PRs) from GCC's bug tracking
    system that are known to be fixed in the 3.3.4 release. This list might
    not be complete (that is, it is possible that some PRs that have been
    fixed are not listed here).
@@ -11178,7 +11259,7 @@ GCC 3.3.4
 
 GCC 3.3.5
 
-   This is the [551]list of problem reports (PRs) from GCC's bug tracking
+   This is the [549]list of problem reports (PRs) from GCC's bug tracking
    system that are known to be fixed in the 3.3.5 release. This list might
    not be complete (that is, it is possible that some PRs that have been
    fixed are not listed here).
@@ -11186,25 +11267,25 @@ GCC 3.3.5
 
 GCC 3.3.6
 
-   This is the [552]list of problem reports (PRs) from GCC's bug tracking
+   This is the [550]list of problem reports (PRs) from GCC's bug tracking
    system that are known to be fixed in the 3.3.6 release. This list might
    not be complete (that is, it is possible that some PRs that have been
    fixed are not listed here).
 
 
     For questions related to the use of GCC, please consult these web
-    pages and the [553]GCC manuals. If that fails, the
-    [554]gcc-help@gcc.gnu.org mailing list might help. Comments on these
+    pages and the [551]GCC manuals. If that fails, the
+    [552]gcc-help@gcc.gnu.org mailing list might help. Comments on these
     web pages and the development of GCC are welcome on our developer
-    list at [555]gcc@gcc.gnu.org. All of [556]our lists have public
+    list at [553]gcc@gcc.gnu.org. All of [554]our lists have public
     archives.
 
-   Copyright (C) [557]Free Software Foundation, Inc. Verbatim copying and
+   Copyright (C) [555]Free Software Foundation, Inc. Verbatim copying and
    distribution of this entire article is permitted in any medium,
    provided this notice is preserved.
 
-   These pages are [558]maintained by the GCC team. Last modified
-   2013-10-31[559].
+   These pages are [556]maintained by the GCC team. Last modified
+   2014-06-28[557].
 
 References
 
@@ -11214,559 +11295,557 @@ References
    4. http://gcc.gnu.org/gcc-3.3/changes.html#nonnull_attribute
    5. http://gcc.gnu.org/news/dfa.html
    6. http://gcc.gnu.org/c99status.html
-   7. http://gcc.gnu.org/onlinedocs/gcc-3.3.6/g77/News.html
-   8. http://gcc.gnu.org/PR10140
-   9. http://gcc.gnu.org/PR10198
-  10. http://gcc.gnu.org/PR10338
-  11. http://gcc.gnu.org/PR3581
-  12. http://gcc.gnu.org/PR4382
-  13. http://gcc.gnu.org/PR5533
-  14. http://gcc.gnu.org/PR6387
-  15. http://gcc.gnu.org/PR6412
-  16. http://gcc.gnu.org/PR6620
-  17. http://gcc.gnu.org/PR6663
-  18. http://gcc.gnu.org/PR7068
-  19. http://gcc.gnu.org/PR7083
-  20. http://gcc.gnu.org/PR7647
-  21. http://gcc.gnu.org/PR7675
-  22. http://gcc.gnu.org/PR7718
-  23. http://gcc.gnu.org/PR8116
-  24. http://gcc.gnu.org/PR8358
-  25. http://gcc.gnu.org/PR8511
-  26. http://gcc.gnu.org/PR8564
-  27. http://gcc.gnu.org/PR8660
-  28. http://gcc.gnu.org/PR8766
-  29. http://gcc.gnu.org/PR8803
-  30. http://gcc.gnu.org/PR8846
-  31. http://gcc.gnu.org/PR8906
-  32. http://gcc.gnu.org/PR9216
-  33. http://gcc.gnu.org/PR9261
-  34. http://gcc.gnu.org/PR9263
-  35. http://gcc.gnu.org/PR9429
-  36. http://gcc.gnu.org/PR9516
-  37. http://gcc.gnu.org/PR9600
-  38. http://gcc.gnu.org/PR9629
-  39. http://gcc.gnu.org/PR9672
-  40. http://gcc.gnu.org/PR9749
-  41. http://gcc.gnu.org/PR9794
-  42. http://gcc.gnu.org/PR9829
-  43. http://gcc.gnu.org/PR9916
-  44. http://gcc.gnu.org/PR9936
-  45. http://gcc.gnu.org/PR10262
-  46. http://gcc.gnu.org/PR10278
-  47. http://gcc.gnu.org/PR10446
-  48. http://gcc.gnu.org/PR10451
-  49. http://gcc.gnu.org/PR10506
-  50. http://gcc.gnu.org/PR10549
-  51. http://gcc.gnu.org/PR2001
-  52. http://gcc.gnu.org/PR2391
-  53. http://gcc.gnu.org/PR2960
-  54. http://gcc.gnu.org/PR4046
-  55. http://gcc.gnu.org/PR6405
-  56. http://gcc.gnu.org/PR6798
-  57. http://gcc.gnu.org/PR6871
-  58. http://gcc.gnu.org/PR6909
-  59. http://gcc.gnu.org/PR7189
-  60. http://gcc.gnu.org/PR7642
-  61. http://gcc.gnu.org/PR8634
-  62. http://gcc.gnu.org/PR8750
-  63. http://gcc.gnu.org/PR2161
-  64. http://gcc.gnu.org/PR4319
-  65. http://gcc.gnu.org/PR8602
-  66. http://gcc.gnu.org/PR9177
-  67. http://gcc.gnu.org/PR9853
-  68. http://gcc.gnu.org/PR45
-  69. http://gcc.gnu.org/PR3784
-  70. http://gcc.gnu.org/PR764
-  71. http://gcc.gnu.org/PR5116
-  72. http://gcc.gnu.org/PR2862
-  73. http://gcc.gnu.org/PR3663
-  74. http://gcc.gnu.org/PR3797
-  75. http://gcc.gnu.org/PR3948
-  76. http://gcc.gnu.org/PR4137
-  77. http://gcc.gnu.org/PR4361
-  78. http://gcc.gnu.org/PR4802
-  79. http://gcc.gnu.org/PR5837
-  80. http://gcc.gnu.org/PR4803
-  81. http://gcc.gnu.org/PR5094
-  82. http://gcc.gnu.org/PR5730
-  83. http://gcc.gnu.org/PR6713
-  84. http://gcc.gnu.org/PR7015
-  85. http://gcc.gnu.org/PR7086
-  86. http://gcc.gnu.org/PR7099
-  87. http://gcc.gnu.org/PR7247
-  88. http://gcc.gnu.org/PR7441
-  89. http://gcc.gnu.org/PR7768
-  90. http://gcc.gnu.org/PR7804
-  91. http://gcc.gnu.org/PR8099
-  92. http://gcc.gnu.org/PR8117
-  93. http://gcc.gnu.org/PR8205
-  94. http://gcc.gnu.org/PR8645
-  95. http://gcc.gnu.org/PR8724
-  96. http://gcc.gnu.org/PR8805
-  97. http://gcc.gnu.org/PR8691
-  98. http://gcc.gnu.org/PR8700
-  99. http://gcc.gnu.org/PR8724
- 100. http://gcc.gnu.org/PR8949
- 101. http://gcc.gnu.org/PR9016
- 102. http://gcc.gnu.org/PR9053
- 103. http://gcc.gnu.org/PR9152
- 104. http://gcc.gnu.org/PR9182
- 105. http://gcc.gnu.org/PR9297
- 106. http://gcc.gnu.org/PR9318
- 107. http://gcc.gnu.org/PR9320
- 108. http://gcc.gnu.org/PR9400
- 109. http://gcc.gnu.org/PR9424
- 110. http://gcc.gnu.org/PR9425
- 111. http://gcc.gnu.org/PR9439
- 112. http://gcc.gnu.org/PR9474
- 113. http://gcc.gnu.org/PR9548
+   7. https://gcc.gnu.org/onlinedocs/gcc-3.3.6/g77/News.html
+   8. https://gcc.gnu.org/PR10140
+   9. https://gcc.gnu.org/PR10198
+  10. https://gcc.gnu.org/PR10338
+  11. https://gcc.gnu.org/PR3581
+  12. https://gcc.gnu.org/PR4382
+  13. https://gcc.gnu.org/PR5533
+  14. https://gcc.gnu.org/PR6387
+  15. https://gcc.gnu.org/PR6412
+  16. https://gcc.gnu.org/PR6620
+  17. https://gcc.gnu.org/PR6663
+  18. https://gcc.gnu.org/PR7068
+  19. https://gcc.gnu.org/PR7083
+  20. https://gcc.gnu.org/PR7647
+  21. https://gcc.gnu.org/PR7675
+  22. https://gcc.gnu.org/PR7718
+  23. https://gcc.gnu.org/PR8116
+  24. https://gcc.gnu.org/PR8358
+  25. https://gcc.gnu.org/PR8511
+  26. https://gcc.gnu.org/PR8564
+  27. https://gcc.gnu.org/PR8660
+  28. https://gcc.gnu.org/PR8766
+  29. https://gcc.gnu.org/PR8803
+  30. https://gcc.gnu.org/PR8846
+  31. https://gcc.gnu.org/PR8906
+  32. https://gcc.gnu.org/PR9216
+  33. https://gcc.gnu.org/PR9261
+  34. https://gcc.gnu.org/PR9263
+  35. https://gcc.gnu.org/PR9429
+  36. https://gcc.gnu.org/PR9516
+  37. https://gcc.gnu.org/PR9600
+  38. https://gcc.gnu.org/PR9629
+  39. https://gcc.gnu.org/PR9672
+  40. https://gcc.gnu.org/PR9749
+  41. https://gcc.gnu.org/PR9794
+  42. https://gcc.gnu.org/PR9829
+  43. https://gcc.gnu.org/PR9916
+  44. https://gcc.gnu.org/PR9936
+  45. https://gcc.gnu.org/PR10262
+  46. https://gcc.gnu.org/PR10278
+  47. https://gcc.gnu.org/PR10446
+  48. https://gcc.gnu.org/PR10451
+  49. https://gcc.gnu.org/PR10506
+  50. https://gcc.gnu.org/PR10549
+  51. https://gcc.gnu.org/PR2001
+  52. https://gcc.gnu.org/PR2391
+  53. https://gcc.gnu.org/PR2960
+  54. https://gcc.gnu.org/PR4046
+  55. https://gcc.gnu.org/PR6405
+  56. https://gcc.gnu.org/PR6798
+  57. https://gcc.gnu.org/PR6871
+  58. https://gcc.gnu.org/PR6909
+  59. https://gcc.gnu.org/PR7189
+  60. https://gcc.gnu.org/PR7642
+  61. https://gcc.gnu.org/PR8634
+  62. https://gcc.gnu.org/PR8750
+  63. https://gcc.gnu.org/PR2161
+  64. https://gcc.gnu.org/PR4319
+  65. https://gcc.gnu.org/PR8602
+  66. https://gcc.gnu.org/PR9177
+  67. https://gcc.gnu.org/PR9853
+  68. https://gcc.gnu.org/PR45
+  69. https://gcc.gnu.org/PR3784
+  70. https://gcc.gnu.org/PR764
+  71. https://gcc.gnu.org/PR5116
+  72. https://gcc.gnu.org/PR2862
+  73. https://gcc.gnu.org/PR3663
+  74. https://gcc.gnu.org/PR3797
+  75. https://gcc.gnu.org/PR3948
+  76. https://gcc.gnu.org/PR4137
+  77. https://gcc.gnu.org/PR4361
+  78. https://gcc.gnu.org/PR4802
+  79. https://gcc.gnu.org/PR5837
+  80. https://gcc.gnu.org/PR4803
+  81. https://gcc.gnu.org/PR5094
+  82. https://gcc.gnu.org/PR5730
+  83. https://gcc.gnu.org/PR6713
+  84. https://gcc.gnu.org/PR7015
+  85. https://gcc.gnu.org/PR7086
+  86. https://gcc.gnu.org/PR7099
+  87. https://gcc.gnu.org/PR7247
+  88. https://gcc.gnu.org/PR7441
+  89. https://gcc.gnu.org/PR7768
+  90. https://gcc.gnu.org/PR7804
+  91. https://gcc.gnu.org/PR8099
+  92. https://gcc.gnu.org/PR8117
+  93. https://gcc.gnu.org/PR8205
+  94. https://gcc.gnu.org/PR8645
+  95. https://gcc.gnu.org/PR8724
+  96. https://gcc.gnu.org/PR8805
+  97. https://gcc.gnu.org/PR8691
+  98. https://gcc.gnu.org/PR8700
+  99. https://gcc.gnu.org/PR8724
+ 100. https://gcc.gnu.org/PR8949
+ 101. https://gcc.gnu.org/PR9016
+ 102. https://gcc.gnu.org/PR9053
+ 103. https://gcc.gnu.org/PR9152
+ 104. https://gcc.gnu.org/PR9182
+ 105. https://gcc.gnu.org/PR9297
+ 106. https://gcc.gnu.org/PR9318
+ 107. https://gcc.gnu.org/PR9320
+ 108. https://gcc.gnu.org/PR9400
+ 109. https://gcc.gnu.org/PR9424
+ 110. https://gcc.gnu.org/PR9425
+ 111. https://gcc.gnu.org/PR9439
+ 112. https://gcc.gnu.org/PR9474
+ 113. https://gcc.gnu.org/PR9548
  114. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#231
- 115. http://gcc.gnu.org/PR9555
- 116. http://gcc.gnu.org/PR9561
- 117. http://gcc.gnu.org/PR9563
- 118. http://gcc.gnu.org/PR9582
- 119. http://gcc.gnu.org/PR9622
- 120. http://gcc.gnu.org/PR9683
- 121. http://gcc.gnu.org/PR9791
- 122. http://gcc.gnu.org/PR9817
- 123. http://gcc.gnu.org/PR9825
- 124. http://gcc.gnu.org/PR9826
- 125. http://gcc.gnu.org/PR9924
- 126. http://gcc.gnu.org/PR9946
- 127. http://gcc.gnu.org/PR9964
- 128. http://gcc.gnu.org/PR9988
- 129. http://gcc.gnu.org/PR10033
- 130. http://gcc.gnu.org/PR10097
- 131. http://gcc.gnu.org/PR10132
- 132. http://gcc.gnu.org/PR10180
- 133. http://gcc.gnu.org/PR10199
- 134. http://gcc.gnu.org/PR10300
- 135. http://gcc.gnu.org/PR10427
- 136. http://gcc.gnu.org/PR10503
- 137. http://gcc.gnu.org/PR5956
- 138. http://gcc.gnu.org/PR1832
- 139. http://gcc.gnu.org/PR3924
- 140. http://gcc.gnu.org/PR5634
- 141. http://gcc.gnu.org/PR6367
- 142. http://gcc.gnu.org/PR6491
- 143. http://gcc.gnu.org/PR6742
- 144. http://gcc.gnu.org/PR7113
- 145. http://gcc.gnu.org/PR7236
- 146. http://gcc.gnu.org/PR7278
- 147. http://gcc.gnu.org/PR7384
- 148. http://gcc.gnu.org/PR7388
- 149. http://gcc.gnu.org/PR8587
- 150. http://gcc.gnu.org/PR9038
- 151. http://gcc.gnu.org/PR10197
- 152. http://gcc.gnu.org/PR6005
- 153. http://gcc.gnu.org/PR6389
- 154. http://gcc.gnu.org/PR6576
- 155. http://gcc.gnu.org/PR6652
- 156. http://gcc.gnu.org/PR7060
- 157. http://gcc.gnu.org/PR7073
- 158. http://gcc.gnu.org/PR7180
- 159. http://gcc.gnu.org/PR7416
- 160. http://gcc.gnu.org/PR7570
- 161. http://gcc.gnu.org/PR7578
- 162. http://gcc.gnu.org/PR7611
- 163. http://gcc.gnu.org/PR7709
- 164. http://gcc.gnu.org/PR7766
- 165. http://gcc.gnu.org/PR7785
- 166. http://gcc.gnu.org/PR7786
- 167. http://gcc.gnu.org/PR8142
- 168. http://gcc.gnu.org/PR8234
- 169. http://gcc.gnu.org/PR8415
- 170. http://gcc.gnu.org/PR8481
- 171. http://gcc.gnu.org/PR8593
- 172. http://gcc.gnu.org/PR8759
- 173. http://gcc.gnu.org/PR8997
- 174. http://gcc.gnu.org/PR9253
- 175. http://gcc.gnu.org/PR9254
- 176. http://gcc.gnu.org/PR9271
- 177. http://gcc.gnu.org/PR6767
- 178. http://gcc.gnu.org/PR9911
- 179. http://gcc.gnu.org/PR10020
- 180. http://gcc.gnu.org/PR10546
- 181. http://gcc.gnu.org/PR7029
- 182. http://gcc.gnu.org/PR2903
- 183. http://gcc.gnu.org/PR7873
- 184. http://gcc.gnu.org/PR7680
- 185. http://gcc.gnu.org/PR8705
- 186. http://gcc.gnu.org/PR9986
- 187. http://gcc.gnu.org/PR10056
- 188. http://gcc.gnu.org/PR6744
- 189. http://gcc.gnu.org/PR7361
- 190. http://gcc.gnu.org/PR9496
- 191. http://gcc.gnu.org/PR7067
- 192. http://gcc.gnu.org/PR8480
- 193. http://gcc.gnu.org/PR8784
- 194. http://gcc.gnu.org/PR10315
- 195. http://gcc.gnu.org/PR10267
- 196. http://gcc.gnu.org/PR7916
- 197. http://gcc.gnu.org/PR7926
- 198. http://gcc.gnu.org/PR8555
- 199. http://gcc.gnu.org/PR8994
- 200. http://gcc.gnu.org/PR9426
- 201. http://gcc.gnu.org/PR9806
- 202. http://gcc.gnu.org/PR10077
- 203. http://gcc.gnu.org/PR10233
- 204. http://gcc.gnu.org/PR10286
- 205. http://gcc.gnu.org/PR10308
- 206. http://gcc.gnu.org/PR11272
- 207. http://gcc.gnu.org/PR5754
- 208. http://gcc.gnu.org/PR6597
- 209. http://gcc.gnu.org/PR6949
- 210. http://gcc.gnu.org/PR7053
- 211. http://gcc.gnu.org/PR8164
- 212. http://gcc.gnu.org/PR8384
- 213. http://gcc.gnu.org/PR9559
- 214. http://gcc.gnu.org/PR9649
- 215. http://gcc.gnu.org/PR9864
- 216. http://gcc.gnu.org/PR10432
- 217. http://gcc.gnu.org/PR10475
- 218. http://gcc.gnu.org/PR10635
- 219. http://gcc.gnu.org/PR10661
- 220. http://gcc.gnu.org/PR10700
- 221. http://gcc.gnu.org/PR10712
- 222. http://gcc.gnu.org/PR10796
- 223. http://gcc.gnu.org/PR10890
- 224. http://gcc.gnu.org/PR10939
- 225. http://gcc.gnu.org/PR10956
- 226. http://gcc.gnu.org/PR11041
- 227. http://gcc.gnu.org/PR11059
- 228. http://gcc.gnu.org/PR11083
- 229. http://gcc.gnu.org/PR11105
- 230. http://gcc.gnu.org/PR11149
- 231. http://gcc.gnu.org/PR11228
- 232. http://gcc.gnu.org/PR11282
- 233. http://gcc.gnu.org/PR11301
- 234. http://gcc.gnu.org/PR11308
- 235. http://gcc.gnu.org/PR11473
- 236. http://gcc.gnu.org/PR11503
- 237. http://gcc.gnu.org/PR11513
- 238. http://gcc.gnu.org/PR11198
- 239. http://gcc.gnu.org/PR11304
- 240. http://gcc.gnu.org/PR11381
- 241. http://gcc.gnu.org/PR11536
- 242. http://gcc.gnu.org/PR11557
- 243. http://gcc.gnu.org/PR5897
- 244. http://gcc.gnu.org/PR11279
- 245. http://gcc.gnu.org/PR11022
- 246. http://gcc.gnu.org/PR2330
- 247. http://gcc.gnu.org/PR5388
- 248. http://gcc.gnu.org/PR5390
- 249. http://gcc.gnu.org/PR7877
- 250. http://gcc.gnu.org/PR9393
- 251. http://gcc.gnu.org/PR10032
- 252. http://gcc.gnu.org/PR10468
- 253. http://gcc.gnu.org/PR10527
- 254. http://gcc.gnu.org/PR10679
- 255. http://gcc.gnu.org/PR10682
- 256. http://gcc.gnu.org/PR10689
- 257. http://gcc.gnu.org/PR10845
- 258. http://gcc.gnu.org/PR10849
- 259. http://gcc.gnu.org/PR10888
- 260. http://gcc.gnu.org/PR10929
- 261. http://gcc.gnu.org/PR10931
- 262. http://gcc.gnu.org/PR10940
- 263. http://gcc.gnu.org/PR10968
- 264. http://gcc.gnu.org/PR10990
- 265. http://gcc.gnu.org/PR11039
- 266. http://gcc.gnu.org/PR11062
- 267. http://gcc.gnu.org/PR11095
- 268. http://gcc.gnu.org/PR11098
- 269. http://gcc.gnu.org/PR11137
- 270. http://gcc.gnu.org/PR11154
- 271. http://gcc.gnu.org/PR11329
- 272. http://gcc.gnu.org/PR11332
- 273. http://gcc.gnu.org/PR11431
- 274. http://gcc.gnu.org/PR11528
- 275. http://gcc.gnu.org/PR11546
- 276. http://gcc.gnu.org/PR11567
- 277. http://gcc.gnu.org/PR11645
- 278. http://gcc.gnu.org/PR5179
- 279. http://gcc.gnu.org/PR8204
- 280. http://gcc.gnu.org/PR10838
- 281. http://gcc.gnu.org/PR10886
- 282. http://gcc.gnu.org/PR11349
- 283. http://gcc.gnu.org/PR4823
- 284. http://gcc.gnu.org/PR8878
- 285. http://gcc.gnu.org/PR9815
- 286. http://gcc.gnu.org/PR10402
- 287. http://gcc.gnu.org/PR10504
- 288. http://gcc.gnu.org/PR10673
- 289. http://gcc.gnu.org/PR11044
- 290. http://gcc.gnu.org/PR11089
- 291. http://gcc.gnu.org/PR11420
- 292. http://gcc.gnu.org/PR9362
- 293. http://gcc.gnu.org/PR10142
- 294. http://gcc.gnu.org/PR10663
- 295. http://gcc.gnu.org/PR10835
- 296. http://gcc.gnu.org/PR10876
- 297. http://gcc.gnu.org/PR10955
- 298. http://gcc.gnu.org/PR11018
- 299. http://gcc.gnu.org/PR11556
- 300. http://gcc.gnu.org/PR10907
- 301. http://gcc.gnu.org/PR11320
- 302. http://gcc.gnu.org/PR11599
- 303. http://gcc.gnu.org/PR9745
- 304. http://gcc.gnu.org/PR10871
- 305. http://gcc.gnu.org/PR11440
- 306. http://gcc.gnu.org/PR7594
- 307. http://gcc.gnu.org/PR10557
- 308. http://gcc.gnu.org/PR11054
- 309. http://gcc.gnu.org/PR10834
- 310. http://gcc.gnu.org/PR10842
- 311. http://gcc.gnu.org/PR11052
- 312. http://gcc.gnu.org/PR11183
- 313. http://gcc.gnu.org/PR11084
- 314. http://gcc.gnu.org/PR10331
- 315. http://gcc.gnu.org/PR10413
- 316. http://gcc.gnu.org/PR11096
- 317. http://gcc.gnu.org/PR2873
- 318. http://gcc.gnu.org/PR3163
- 319. http://gcc.gnu.org/PR5287
- 320. http://gcc.gnu.org/PR10148
- 321. http://gcc.gnu.org/PR8787
- 322. http://gcc.gnu.org/PR10900
- 323. http://gcc.gnu.org/PR1607
- 324. http://gcc.gnu.org/PR4252
- 325. http://gcc.gnu.org/PR4490
- 326. http://gcc.gnu.org/PR10355
- 327. http://gcc.gnu.org/PR10726
- 328. http://gcc.gnu.org/PR10805
- 329. http://gcc.gnu.org/PR10815
- 330. http://gcc.gnu.org/PR10877
- 331. http://gcc.gnu.org/PR11280
- 332. http://gcc.gnu.org/PR11466
- 333. http://gcc.gnu.org/PR10737
- 334. http://gcc.gnu.org/PR10810
- 335. http://gcc.gnu.org/bugzilla/
- 336. http://gcc.gnu.org/PR8336
- 337. http://gcc.gnu.org/PR9330
- 338. http://gcc.gnu.org/PR9631
- 339. http://gcc.gnu.org/PR9877
- 340. http://gcc.gnu.org/PR11687
- 341. http://gcc.gnu.org/PR12263
- 342. http://gcc.gnu.org/PR12490
- 343. http://gcc.gnu.org/PR7277
- 344. http://gcc.gnu.org/PR7939
- 345. http://gcc.gnu.org/PR11063
- 346. http://gcc.gnu.org/PR11207
- 347. http://gcc.gnu.org/PR11522
- 348. http://gcc.gnu.org/PR11595
- 349. http://gcc.gnu.org/PR11646
- 350. http://gcc.gnu.org/PR11665
- 351. http://gcc.gnu.org/PR11852
- 352. http://gcc.gnu.org/PR11878
- 353. http://gcc.gnu.org/PR11883
- 354. http://gcc.gnu.org/PR11991
- 355. http://gcc.gnu.org/PR12146
- 356. http://gcc.gnu.org/PR12215
- 357. http://gcc.gnu.org/PR12369
- 358. http://gcc.gnu.org/PR12446
- 359. http://gcc.gnu.org/PR12510
- 360. http://gcc.gnu.org/PR12544
- 361. http://gcc.gnu.org/PR9862
- 362. http://gcc.gnu.org/PR10962
- 363. http://gcc.gnu.org/PR11370
- 364. http://gcc.gnu.org/PR11637
- 365. http://gcc.gnu.org/PR11885
- 366. http://gcc.gnu.org/PR12082
- 367. http://gcc.gnu.org/PR12180
- 368. http://gcc.gnu.org/PR12340
- 369. http://gcc.gnu.org/PR3907
- 370. http://gcc.gnu.org/PR5293
- 371. http://gcc.gnu.org/PR5296
- 372. http://gcc.gnu.org/PR7939
- 373. http://gcc.gnu.org/PR8656
- 374. http://gcc.gnu.org/PR10147
- 375. http://gcc.gnu.org/PR11400
- 376. http://gcc.gnu.org/PR11409
- 377. http://gcc.gnu.org/PR11740
- 378. http://gcc.gnu.org/PR11786
- 379. http://gcc.gnu.org/PR11867
- 380. http://gcc.gnu.org/PR11928
- 381. http://gcc.gnu.org/PR12114
- 382. http://gcc.gnu.org/PR12163
- 383. http://gcc.gnu.org/PR12181
- 384. http://gcc.gnu.org/PR12236
- 385. http://gcc.gnu.org/PR12266
- 386. http://gcc.gnu.org/PR12296
- 387. http://gcc.gnu.org/PR12298
- 388. http://gcc.gnu.org/PR12369
- 389. http://gcc.gnu.org/PR12337
- 390. http://gcc.gnu.org/PR12344
- 391. http://gcc.gnu.org/PR12451
- 392. http://gcc.gnu.org/PR12486
- 393. http://gcc.gnu.org/PR8869
- 394. http://gcc.gnu.org/PR9786
- 395. http://gcc.gnu.org/PR11689
- 396. http://gcc.gnu.org/PR12116
- 397. http://gcc.gnu.org/PR12070
- 398. http://gcc.gnu.org/PR11184
- 399. http://gcc.gnu.org/PR11535
- 400. http://gcc.gnu.org/PR11693
- 401. http://gcc.gnu.org/PR12224
- 402. http://gcc.gnu.org/PR11087
- 403. http://gcc.gnu.org/PR11319
- 404. http://gcc.gnu.org/PR11949
- 405. http://gcc.gnu.org/PR11662
- 406. http://gcc.gnu.org/PR11965
- 407. http://gcc.gnu.org/PR12301
- 408. http://gcc.gnu.org/PR11717
- 409. http://gcc.gnu.org/PR11313
- 410. http://gcc.gnu.org/PR11712
- 411. http://gcc.gnu.org/PR12166
- 412. http://gcc.gnu.org/PR12101
- 413. http://gcc.gnu.org/PR10988
- 414. http://gcc.gnu.org/PR11805
- 415. http://gcc.gnu.org/PR11902
- 416. http://gcc.gnu.org/PR11903
- 417. http://gcc.gnu.org/bugzilla/
- 418. http://gcc.gnu.org/PR11890
- 419. http://gcc.gnu.org/PR12399
- 420. http://gcc.gnu.org/PR13068
- 421. http://gcc.gnu.org/PR10060
- 422. http://gcc.gnu.org/PR10555
- 423. http://gcc.gnu.org/PR10706
- 424. http://gcc.gnu.org/PR11496
- 425. http://gcc.gnu.org/PR11741
- 426. http://gcc.gnu.org/PR12440
- 427. http://gcc.gnu.org/PR12632
- 428. http://gcc.gnu.org/PR12712
- 429. http://gcc.gnu.org/PR12726
- 430. http://gcc.gnu.org/PR12890
- 431. http://gcc.gnu.org/PR12900
- 432. http://gcc.gnu.org/PR13060
- 433. http://gcc.gnu.org/PR13289
- 434. http://gcc.gnu.org/PR13318
- 435. http://gcc.gnu.org/PR13392
- 436. http://gcc.gnu.org/PR13574
- 437. http://gcc.gnu.org/PR13475
- 438. http://gcc.gnu.org/PR13797
- 439. http://gcc.gnu.org/PR13824
- 440. http://gcc.gnu.org/PR8776
- 441. http://gcc.gnu.org/PR10339
- 442. http://gcc.gnu.org/PR11350
- 443. http://gcc.gnu.org/PR12826
- 444. http://gcc.gnu.org/PR12500
- 445. http://gcc.gnu.org/PR12941
- 446. http://gcc.gnu.org/PR12953
- 447. http://gcc.gnu.org/PR13041
- 448. http://gcc.gnu.org/PR13507
- 449. http://gcc.gnu.org/PR13382
- 450. http://gcc.gnu.org/PR13394
- 451. http://gcc.gnu.org/PR13400
- 452. http://gcc.gnu.org/PR13521
- 453. http://gcc.gnu.org/PR2094
- 454. http://gcc.gnu.org/PR2294
- 455. http://gcc.gnu.org/PR5050
- 456. http://gcc.gnu.org/PR9371
- 457. http://gcc.gnu.org/PR9546
- 458. http://gcc.gnu.org/PR10081
- 459. http://gcc.gnu.org/PR10093
- 460. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#61
- 461. http://gcc.gnu.org/PR10095
- 462. http://gcc.gnu.org/PR11554
- 463. http://gcc.gnu.org/PR12297
- 464. http://gcc.gnu.org/PR12352
- 465. http://gcc.gnu.org/PR12438
- 466. http://gcc.gnu.org/PR12540
- 467. http://gcc.gnu.org/PR12594
- 468. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#60
- 469. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#63
- 470. http://gcc.gnu.org/PR12657
- 471. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#292
- 472. http://gcc.gnu.org/PR12696
- 473. http://gcc.gnu.org/PR12815
- 474. http://gcc.gnu.org/PR12862
- 475. http://gcc.gnu.org/PR12926
- 476. http://gcc.gnu.org/PR12967
- 477. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html
- 478. http://gcc.gnu.org/PR12971
- 479. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#328
- 480. http://gcc.gnu.org/PR13007
- 481. http://gcc.gnu.org/PR13009
- 482. http://gcc.gnu.org/PR13057
- 483. http://gcc.gnu.org/PR13070
- 484. http://gcc.gnu.org/PR13081
- 485. http://gcc.gnu.org/PR13239
- 486. http://gcc.gnu.org/PR13262
- 487. http://gcc.gnu.org/PR13290
- 488. http://gcc.gnu.org/PR13323
- 489. http://gcc.gnu.org/PR13369
- 490. http://gcc.gnu.org/PR13371
- 491. http://gcc.gnu.org/PR13445
- 492. http://gcc.gnu.org/PR13461
- 493. http://gcc.gnu.org/PR13462
- 494. http://gcc.gnu.org/PR13478
- 495. http://gcc.gnu.org/PR13544
- 496. http://gcc.gnu.org/PR13650
- 497. http://gcc.gnu.org/PR13683
- 498. http://gcc.gnu.org/PR13688
- 499. http://gcc.gnu.org/PR13774
- 500. http://gcc.gnu.org/PR13884
- 501. http://gcc.gnu.org/PR10746
- 502. http://gcc.gnu.org/PR11433
- 503. http://gcc.gnu.org/PR12633
- 504. http://gcc.gnu.org/PR13037
- 505. http://gcc.gnu.org/PR13213
- 506. http://gcc.gnu.org/PR4490
- 507. http://gcc.gnu.org/PR12292
- 508. http://gcc.gnu.org/PR12441
- 509. http://gcc.gnu.org/PR12943
- 510. http://gcc.gnu.org/PR13608
- 511. http://gcc.gnu.org/PR11598
- 512. http://gcc.gnu.org/PR11793
- 513. http://gcc.gnu.org/PR12467
- 514. http://gcc.gnu.org/PR12537
- 515. http://gcc.gnu.org/PR12496
- 516. http://gcc.gnu.org/PR12865
- 517. http://gcc.gnu.org/PR13354
- 518. http://gcc.gnu.org/PR10467
- 519. http://gcc.gnu.org/PR11226
- 520. http://gcc.gnu.org/PR11227
- 521. http://gcc.gnu.org/PR12644
- 522. http://gcc.gnu.org/PR13149
- 523. http://gcc.gnu.org/PR12654
- 524. http://gcc.gnu.org/PR12965
- 525. http://gcc.gnu.org/PR13031
- 526. http://gcc.gnu.org/PR11634
- 527. http://gcc.gnu.org/PR12158
- 528. http://gcc.gnu.org/PR11992
- 529. http://gcc.gnu.org/PR9365
- 530. http://gcc.gnu.org/PR10392
- 531. http://gcc.gnu.org/PR11322
- 532. http://gcc.gnu.org/PR13069
- 533. http://gcc.gnu.org/PR13302
- 534. http://gcc.gnu.org/PR13585
- 535. http://gcc.gnu.org/PR8916
- 536. http://gcc.gnu.org/PR11576
- 537. http://gcc.gnu.org/PR13122
- 538. http://gcc.gnu.org/PR13256
- 539. http://gcc.gnu.org/PR13373
- 540. http://gcc.gnu.org/PR12561
- 541. http://gcc.gnu.org/PR6243
- 542. http://gcc.gnu.org/PR11397
- 543. http://gcc.gnu.org/PR12505
- 544. http://gcc.gnu.org/PR13150
- 545. http://gcc.gnu.org/PR12666
- 546. http://gcc.gnu.org/PR12969
- 547. http://gcc.gnu.org/PR10819
- 548. http://gcc.gnu.org/PR11612
- 549. http://gcc.gnu.org/PR13211
- 550. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.4
- 551. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.5
- 552. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.6
- 553. http://gcc.gnu.org/onlinedocs/
- 554. mailto:gcc-help@gcc.gnu.org
- 555. mailto:gcc@gcc.gnu.org
- 556. http://gcc.gnu.org/lists.html
- 557. http://www.fsf.org/
- 558. http://gcc.gnu.org/about.html
- 559. http://validator.w3.org/check/referer
+ 115. https://gcc.gnu.org/PR9555
+ 116. https://gcc.gnu.org/PR9561
+ 117. https://gcc.gnu.org/PR9563
+ 118. https://gcc.gnu.org/PR9582
+ 119. https://gcc.gnu.org/PR9622
+ 120. https://gcc.gnu.org/PR9683
+ 121. https://gcc.gnu.org/PR9791
+ 122. https://gcc.gnu.org/PR9817
+ 123. https://gcc.gnu.org/PR9825
+ 124. https://gcc.gnu.org/PR9826
+ 125. https://gcc.gnu.org/PR9924
+ 126. https://gcc.gnu.org/PR9946
+ 127. https://gcc.gnu.org/PR9964
+ 128. https://gcc.gnu.org/PR9988
+ 129. https://gcc.gnu.org/PR10033
+ 130. https://gcc.gnu.org/PR10097
+ 131. https://gcc.gnu.org/PR10132
+ 132. https://gcc.gnu.org/PR10180
+ 133. https://gcc.gnu.org/PR10199
+ 134. https://gcc.gnu.org/PR10300
+ 135. https://gcc.gnu.org/PR10427
+ 136. https://gcc.gnu.org/PR10503
+ 137. https://gcc.gnu.org/PR5956
+ 138. https://gcc.gnu.org/PR1832
+ 139. https://gcc.gnu.org/PR3924
+ 140. https://gcc.gnu.org/PR5634
+ 141. https://gcc.gnu.org/PR6367
+ 142. https://gcc.gnu.org/PR6491
+ 143. https://gcc.gnu.org/PR6742
+ 144. https://gcc.gnu.org/PR7113
+ 145. https://gcc.gnu.org/PR7236
+ 146. https://gcc.gnu.org/PR7278
+ 147. https://gcc.gnu.org/PR7384
+ 148. https://gcc.gnu.org/PR7388
+ 149. https://gcc.gnu.org/PR8587
+ 150. https://gcc.gnu.org/PR9038
+ 151. https://gcc.gnu.org/PR10197
+ 152. https://gcc.gnu.org/PR6005
+ 153. https://gcc.gnu.org/PR6389
+ 154. https://gcc.gnu.org/PR6576
+ 155. https://gcc.gnu.org/PR6652
+ 156. https://gcc.gnu.org/PR7060
+ 157. https://gcc.gnu.org/PR7073
+ 158. https://gcc.gnu.org/PR7180
+ 159. https://gcc.gnu.org/PR7416
+ 160. https://gcc.gnu.org/PR7570
+ 161. https://gcc.gnu.org/PR7578
+ 162. https://gcc.gnu.org/PR7611
+ 163. https://gcc.gnu.org/PR7709
+ 164. https://gcc.gnu.org/PR7766
+ 165. https://gcc.gnu.org/PR7785
+ 166. https://gcc.gnu.org/PR7786
+ 167. https://gcc.gnu.org/PR8142
+ 168. https://gcc.gnu.org/PR8234
+ 169. https://gcc.gnu.org/PR8415
+ 170. https://gcc.gnu.org/PR8481
+ 171. https://gcc.gnu.org/PR8593
+ 172. https://gcc.gnu.org/PR8759
+ 173. https://gcc.gnu.org/PR8997
+ 174. https://gcc.gnu.org/PR9253
+ 175. https://gcc.gnu.org/PR9254
+ 176. https://gcc.gnu.org/PR9271
+ 177. https://gcc.gnu.org/PR6767
+ 178. https://gcc.gnu.org/PR9911
+ 179. https://gcc.gnu.org/PR10020
+ 180. https://gcc.gnu.org/PR10546
+ 181. https://gcc.gnu.org/PR7029
+ 182. https://gcc.gnu.org/PR2903
+ 183. https://gcc.gnu.org/PR7873
+ 184. https://gcc.gnu.org/PR7680
+ 185. https://gcc.gnu.org/PR8705
+ 186. https://gcc.gnu.org/PR9986
+ 187. https://gcc.gnu.org/PR10056
+ 188. https://gcc.gnu.org/PR6744
+ 189. https://gcc.gnu.org/PR7361
+ 190. https://gcc.gnu.org/PR9496
+ 191. https://gcc.gnu.org/PR7067
+ 192. https://gcc.gnu.org/PR8480
+ 193. https://gcc.gnu.org/PR8784
+ 194. https://gcc.gnu.org/PR10315
+ 195. https://gcc.gnu.org/PR10267
+ 196. https://gcc.gnu.org/PR7916
+ 197. https://gcc.gnu.org/PR7926
+ 198. https://gcc.gnu.org/PR8555
+ 199. https://gcc.gnu.org/PR8994
+ 200. https://gcc.gnu.org/PR9426
+ 201. https://gcc.gnu.org/PR9806
+ 202. https://gcc.gnu.org/PR10077
+ 203. https://gcc.gnu.org/PR10233
+ 204. https://gcc.gnu.org/PR10286
+ 205. https://gcc.gnu.org/PR10308
+ 206. https://gcc.gnu.org/PR11272
+ 207. https://gcc.gnu.org/PR5754
+ 208. https://gcc.gnu.org/PR6597
+ 209. https://gcc.gnu.org/PR6949
+ 210. https://gcc.gnu.org/PR7053
+ 211. https://gcc.gnu.org/PR8164
+ 212. https://gcc.gnu.org/PR8384
+ 213. https://gcc.gnu.org/PR9559
+ 214. https://gcc.gnu.org/PR9649
+ 215. https://gcc.gnu.org/PR9864
+ 216. https://gcc.gnu.org/PR10432
+ 217. https://gcc.gnu.org/PR10475
+ 218. https://gcc.gnu.org/PR10635
+ 219. https://gcc.gnu.org/PR10661
+ 220. https://gcc.gnu.org/PR10700
+ 221. https://gcc.gnu.org/PR10712
+ 222. https://gcc.gnu.org/PR10796
+ 223. https://gcc.gnu.org/PR10890
+ 224. https://gcc.gnu.org/PR10939
+ 225. https://gcc.gnu.org/PR10956
+ 226. https://gcc.gnu.org/PR11041
+ 227. https://gcc.gnu.org/PR11059
+ 228. https://gcc.gnu.org/PR11083
+ 229. https://gcc.gnu.org/PR11105
+ 230. https://gcc.gnu.org/PR11149
+ 231. https://gcc.gnu.org/PR11228
+ 232. https://gcc.gnu.org/PR11282
+ 233. https://gcc.gnu.org/PR11301
+ 234. https://gcc.gnu.org/PR11308
+ 235. https://gcc.gnu.org/PR11473
+ 236. https://gcc.gnu.org/PR11503
+ 237. https://gcc.gnu.org/PR11513
+ 238. https://gcc.gnu.org/PR11198
+ 239. https://gcc.gnu.org/PR11304
+ 240. https://gcc.gnu.org/PR11381
+ 241. https://gcc.gnu.org/PR11536
+ 242. https://gcc.gnu.org/PR11557
+ 243. https://gcc.gnu.org/PR5897
+ 244. https://gcc.gnu.org/PR11279
+ 245. https://gcc.gnu.org/PR11022
+ 246. https://gcc.gnu.org/PR2330
+ 247. https://gcc.gnu.org/PR5388
+ 248. https://gcc.gnu.org/PR5390
+ 249. https://gcc.gnu.org/PR7877
+ 250. https://gcc.gnu.org/PR9393
+ 251. https://gcc.gnu.org/PR10032
+ 252. https://gcc.gnu.org/PR10468
+ 253. https://gcc.gnu.org/PR10527
+ 254. https://gcc.gnu.org/PR10679
+ 255. https://gcc.gnu.org/PR10682
+ 256. https://gcc.gnu.org/PR10689
+ 257. https://gcc.gnu.org/PR10845
+ 258. https://gcc.gnu.org/PR10849
+ 259. https://gcc.gnu.org/PR10888
+ 260. https://gcc.gnu.org/PR10929
+ 261. https://gcc.gnu.org/PR10931
+ 262. https://gcc.gnu.org/PR10940
+ 263. https://gcc.gnu.org/PR10968
+ 264. https://gcc.gnu.org/PR10990
+ 265. https://gcc.gnu.org/PR11039
+ 266. https://gcc.gnu.org/PR11062
+ 267. https://gcc.gnu.org/PR11095
+ 268. https://gcc.gnu.org/PR11098
+ 269. https://gcc.gnu.org/PR11137
+ 270. https://gcc.gnu.org/PR11154
+ 271. https://gcc.gnu.org/PR11329
+ 272. https://gcc.gnu.org/PR11332
+ 273. https://gcc.gnu.org/PR11431
+ 274. https://gcc.gnu.org/PR11528
+ 275. https://gcc.gnu.org/PR11546
+ 276. https://gcc.gnu.org/PR11567
+ 277. https://gcc.gnu.org/PR11645
+ 278. https://gcc.gnu.org/PR5179
+ 279. https://gcc.gnu.org/PR8204
+ 280. https://gcc.gnu.org/PR10838
+ 281. https://gcc.gnu.org/PR10886
+ 282. https://gcc.gnu.org/PR11349
+ 283. https://gcc.gnu.org/PR4823
+ 284. https://gcc.gnu.org/PR8878
+ 285. https://gcc.gnu.org/PR9815
+ 286. https://gcc.gnu.org/PR10402
+ 287. https://gcc.gnu.org/PR10504
+ 288. https://gcc.gnu.org/PR10673
+ 289. https://gcc.gnu.org/PR11044
+ 290. https://gcc.gnu.org/PR11089
+ 291. https://gcc.gnu.org/PR11420
+ 292. https://gcc.gnu.org/PR9362
+ 293. https://gcc.gnu.org/PR10142
+ 294. https://gcc.gnu.org/PR10663
+ 295. https://gcc.gnu.org/PR10835
+ 296. https://gcc.gnu.org/PR10876
+ 297. https://gcc.gnu.org/PR10955
+ 298. https://gcc.gnu.org/PR11018
+ 299. https://gcc.gnu.org/PR11556
+ 300. https://gcc.gnu.org/PR10907
+ 301. https://gcc.gnu.org/PR11320
+ 302. https://gcc.gnu.org/PR11599
+ 303. https://gcc.gnu.org/PR9745
+ 304. https://gcc.gnu.org/PR10871
+ 305. https://gcc.gnu.org/PR11440
+ 306. https://gcc.gnu.org/PR7594
+ 307. https://gcc.gnu.org/PR10557
+ 308. https://gcc.gnu.org/PR11054
+ 309. https://gcc.gnu.org/PR10834
+ 310. https://gcc.gnu.org/PR10842
+ 311. https://gcc.gnu.org/PR11052
+ 312. https://gcc.gnu.org/PR11183
+ 313. https://gcc.gnu.org/PR11084
+ 314. https://gcc.gnu.org/PR10331
+ 315. https://gcc.gnu.org/PR10413
+ 316. https://gcc.gnu.org/PR11096
+ 317. https://gcc.gnu.org/PR2873
+ 318. https://gcc.gnu.org/PR3163
+ 319. https://gcc.gnu.org/PR5287
+ 320. https://gcc.gnu.org/PR10148
+ 321. https://gcc.gnu.org/PR8787
+ 322. https://gcc.gnu.org/PR10900
+ 323. https://gcc.gnu.org/PR1607
+ 324. https://gcc.gnu.org/PR4252
+ 325. https://gcc.gnu.org/PR4490
+ 326. https://gcc.gnu.org/PR10355
+ 327. https://gcc.gnu.org/PR10726
+ 328. https://gcc.gnu.org/PR10805
+ 329. https://gcc.gnu.org/PR10815
+ 330. https://gcc.gnu.org/PR10877
+ 331. https://gcc.gnu.org/PR11280
+ 332. https://gcc.gnu.org/PR11466
+ 333. https://gcc.gnu.org/PR10737
+ 334. https://gcc.gnu.org/PR10810
+ 335. https://gcc.gnu.org/PR8336
+ 336. https://gcc.gnu.org/PR9330
+ 337. https://gcc.gnu.org/PR9631
+ 338. https://gcc.gnu.org/PR9877
+ 339. https://gcc.gnu.org/PR11687
+ 340. https://gcc.gnu.org/PR12263
+ 341. https://gcc.gnu.org/PR12490
+ 342. https://gcc.gnu.org/PR7277
+ 343. https://gcc.gnu.org/PR7939
+ 344. https://gcc.gnu.org/PR11063
+ 345. https://gcc.gnu.org/PR11207
+ 346. https://gcc.gnu.org/PR11522
+ 347. https://gcc.gnu.org/PR11595
+ 348. https://gcc.gnu.org/PR11646
+ 349. https://gcc.gnu.org/PR11665
+ 350. https://gcc.gnu.org/PR11852
+ 351. https://gcc.gnu.org/PR11878
+ 352. https://gcc.gnu.org/PR11883
+ 353. https://gcc.gnu.org/PR11991
+ 354. https://gcc.gnu.org/PR12146
+ 355. https://gcc.gnu.org/PR12215
+ 356. https://gcc.gnu.org/PR12369
+ 357. https://gcc.gnu.org/PR12446
+ 358. https://gcc.gnu.org/PR12510
+ 359. https://gcc.gnu.org/PR12544
+ 360. https://gcc.gnu.org/PR9862
+ 361. https://gcc.gnu.org/PR10962
+ 362. https://gcc.gnu.org/PR11370
+ 363. https://gcc.gnu.org/PR11637
+ 364. https://gcc.gnu.org/PR11885
+ 365. https://gcc.gnu.org/PR12082
+ 366. https://gcc.gnu.org/PR12180
+ 367. https://gcc.gnu.org/PR12340
+ 368. https://gcc.gnu.org/PR3907
+ 369. https://gcc.gnu.org/PR5293
+ 370. https://gcc.gnu.org/PR5296
+ 371. https://gcc.gnu.org/PR7939
+ 372. https://gcc.gnu.org/PR8656
+ 373. https://gcc.gnu.org/PR10147
+ 374. https://gcc.gnu.org/PR11400
+ 375. https://gcc.gnu.org/PR11409
+ 376. https://gcc.gnu.org/PR11740
+ 377. https://gcc.gnu.org/PR11786
+ 378. https://gcc.gnu.org/PR11867
+ 379. https://gcc.gnu.org/PR11928
+ 380. https://gcc.gnu.org/PR12114
+ 381. https://gcc.gnu.org/PR12163
+ 382. https://gcc.gnu.org/PR12181
+ 383. https://gcc.gnu.org/PR12236
+ 384. https://gcc.gnu.org/PR12266
+ 385. https://gcc.gnu.org/PR12296
+ 386. https://gcc.gnu.org/PR12298
+ 387. https://gcc.gnu.org/PR12369
+ 388. https://gcc.gnu.org/PR12337
+ 389. https://gcc.gnu.org/PR12344
+ 390. https://gcc.gnu.org/PR12451
+ 391. https://gcc.gnu.org/PR12486
+ 392. https://gcc.gnu.org/PR8869
+ 393. https://gcc.gnu.org/PR9786
+ 394. https://gcc.gnu.org/PR11689
+ 395. https://gcc.gnu.org/PR12116
+ 396. https://gcc.gnu.org/PR12070
+ 397. https://gcc.gnu.org/PR11184
+ 398. https://gcc.gnu.org/PR11535
+ 399. https://gcc.gnu.org/PR11693
+ 400. https://gcc.gnu.org/PR12224
+ 401. https://gcc.gnu.org/PR11087
+ 402. https://gcc.gnu.org/PR11319
+ 403. https://gcc.gnu.org/PR11949
+ 404. https://gcc.gnu.org/PR11662
+ 405. https://gcc.gnu.org/PR11965
+ 406. https://gcc.gnu.org/PR12301
+ 407. https://gcc.gnu.org/PR11717
+ 408. https://gcc.gnu.org/PR11313
+ 409. https://gcc.gnu.org/PR11712
+ 410. https://gcc.gnu.org/PR12166
+ 411. https://gcc.gnu.org/PR12101
+ 412. https://gcc.gnu.org/PR10988
+ 413. https://gcc.gnu.org/PR11805
+ 414. https://gcc.gnu.org/PR11902
+ 415. https://gcc.gnu.org/PR11903
+ 416. https://gcc.gnu.org/PR11890
+ 417. https://gcc.gnu.org/PR12399
+ 418. https://gcc.gnu.org/PR13068
+ 419. https://gcc.gnu.org/PR10060
+ 420. https://gcc.gnu.org/PR10555
+ 421. https://gcc.gnu.org/PR10706
+ 422. https://gcc.gnu.org/PR11496
+ 423. https://gcc.gnu.org/PR11741
+ 424. https://gcc.gnu.org/PR12440
+ 425. https://gcc.gnu.org/PR12632
+ 426. https://gcc.gnu.org/PR12712
+ 427. https://gcc.gnu.org/PR12726
+ 428. https://gcc.gnu.org/PR12890
+ 429. https://gcc.gnu.org/PR12900
+ 430. https://gcc.gnu.org/PR13060
+ 431. https://gcc.gnu.org/PR13289
+ 432. https://gcc.gnu.org/PR13318
+ 433. https://gcc.gnu.org/PR13392
+ 434. https://gcc.gnu.org/PR13574
+ 435. https://gcc.gnu.org/PR13475
+ 436. https://gcc.gnu.org/PR13797
+ 437. https://gcc.gnu.org/PR13824
+ 438. https://gcc.gnu.org/PR8776
+ 439. https://gcc.gnu.org/PR10339
+ 440. https://gcc.gnu.org/PR11350
+ 441. https://gcc.gnu.org/PR12826
+ 442. https://gcc.gnu.org/PR12500
+ 443. https://gcc.gnu.org/PR12941
+ 444. https://gcc.gnu.org/PR12953
+ 445. https://gcc.gnu.org/PR13041
+ 446. https://gcc.gnu.org/PR13507
+ 447. https://gcc.gnu.org/PR13382
+ 448. https://gcc.gnu.org/PR13394
+ 449. https://gcc.gnu.org/PR13400
+ 450. https://gcc.gnu.org/PR13521
+ 451. https://gcc.gnu.org/PR2094
+ 452. https://gcc.gnu.org/PR2294
+ 453. https://gcc.gnu.org/PR5050
+ 454. https://gcc.gnu.org/PR9371
+ 455. https://gcc.gnu.org/PR9546
+ 456. https://gcc.gnu.org/PR10081
+ 457. https://gcc.gnu.org/PR10093
+ 458. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#61
+ 459. https://gcc.gnu.org/PR10095
+ 460. https://gcc.gnu.org/PR11554
+ 461. https://gcc.gnu.org/PR12297
+ 462. https://gcc.gnu.org/PR12352
+ 463. https://gcc.gnu.org/PR12438
+ 464. https://gcc.gnu.org/PR12540
+ 465. https://gcc.gnu.org/PR12594
+ 466. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#60
+ 467. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#63
+ 468. https://gcc.gnu.org/PR12657
+ 469. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#292
+ 470. https://gcc.gnu.org/PR12696
+ 471. https://gcc.gnu.org/PR12815
+ 472. https://gcc.gnu.org/PR12862
+ 473. https://gcc.gnu.org/PR12926
+ 474. https://gcc.gnu.org/PR12967
+ 475. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html
+ 476. https://gcc.gnu.org/PR12971
+ 477. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#328
+ 478. https://gcc.gnu.org/PR13007
+ 479. https://gcc.gnu.org/PR13009
+ 480. https://gcc.gnu.org/PR13057
+ 481. https://gcc.gnu.org/PR13070
+ 482. https://gcc.gnu.org/PR13081
+ 483. https://gcc.gnu.org/PR13239
+ 484. https://gcc.gnu.org/PR13262
+ 485. https://gcc.gnu.org/PR13290
+ 486. https://gcc.gnu.org/PR13323
+ 487. https://gcc.gnu.org/PR13369
+ 488. https://gcc.gnu.org/PR13371
+ 489. https://gcc.gnu.org/PR13445
+ 490. https://gcc.gnu.org/PR13461
+ 491. https://gcc.gnu.org/PR13462
+ 492. https://gcc.gnu.org/PR13478
+ 493. https://gcc.gnu.org/PR13544
+ 494. https://gcc.gnu.org/PR13650
+ 495. https://gcc.gnu.org/PR13683
+ 496. https://gcc.gnu.org/PR13688
+ 497. https://gcc.gnu.org/PR13774
+ 498. https://gcc.gnu.org/PR13884
+ 499. https://gcc.gnu.org/PR10746
+ 500. https://gcc.gnu.org/PR11433
+ 501. https://gcc.gnu.org/PR12633
+ 502. https://gcc.gnu.org/PR13037
+ 503. https://gcc.gnu.org/PR13213
+ 504. https://gcc.gnu.org/PR4490
+ 505. https://gcc.gnu.org/PR12292
+ 506. https://gcc.gnu.org/PR12441
+ 507. https://gcc.gnu.org/PR12943
+ 508. https://gcc.gnu.org/PR13608
+ 509. https://gcc.gnu.org/PR11598
+ 510. https://gcc.gnu.org/PR11793
+ 511. https://gcc.gnu.org/PR12467
+ 512. https://gcc.gnu.org/PR12537
+ 513. https://gcc.gnu.org/PR12496
+ 514. https://gcc.gnu.org/PR12865
+ 515. https://gcc.gnu.org/PR13354
+ 516. https://gcc.gnu.org/PR10467
+ 517. https://gcc.gnu.org/PR11226
+ 518. https://gcc.gnu.org/PR11227
+ 519. https://gcc.gnu.org/PR12644
+ 520. https://gcc.gnu.org/PR13149
+ 521. https://gcc.gnu.org/PR12654
+ 522. https://gcc.gnu.org/PR12965
+ 523. https://gcc.gnu.org/PR13031
+ 524. https://gcc.gnu.org/PR11634
+ 525. https://gcc.gnu.org/PR12158
+ 526. https://gcc.gnu.org/PR11992
+ 527. https://gcc.gnu.org/PR9365
+ 528. https://gcc.gnu.org/PR10392
+ 529. https://gcc.gnu.org/PR11322
+ 530. https://gcc.gnu.org/PR13069
+ 531. https://gcc.gnu.org/PR13302
+ 532. https://gcc.gnu.org/PR13585
+ 533. https://gcc.gnu.org/PR8916
+ 534. https://gcc.gnu.org/PR11576
+ 535. https://gcc.gnu.org/PR13122
+ 536. https://gcc.gnu.org/PR13256
+ 537. https://gcc.gnu.org/PR13373
+ 538. https://gcc.gnu.org/PR12561
+ 539. https://gcc.gnu.org/PR6243
+ 540. https://gcc.gnu.org/PR11397
+ 541. https://gcc.gnu.org/PR12505
+ 542. https://gcc.gnu.org/PR13150
+ 543. https://gcc.gnu.org/PR12666
+ 544. https://gcc.gnu.org/PR12969
+ 545. https://gcc.gnu.org/PR10819
+ 546. https://gcc.gnu.org/PR11612
+ 547. https://gcc.gnu.org/PR13211
+ 548. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.4
+ 549. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.5
+ 550. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.6
+ 551. https://gcc.gnu.org/onlinedocs/
+ 552. mailto:gcc-help@gcc.gnu.org
+ 553. mailto:gcc@gcc.gnu.org
+ 554. https://gcc.gnu.org/lists.html
+ 555. http://www.fsf.org/
+ 556. https://gcc.gnu.org/about.html
+ 557. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-3.2/index.html
                              GCC 3.2 Release Series
@@ -11834,7 +11913,7 @@ References and Acknowledgements
    provided this notice is preserved.
 
    These pages are [17]maintained by the GCC team. Last modified
-   2012-11-02[18].
+   2014-06-28[18].
 
 References
 
@@ -11845,16 +11924,16 @@ References
    5. http://gcc.gnu.org/gcc-3.2/changes.html#3.2.1
    6. http://gcc.gnu.org/gcc-3.2/changes.html#3.2
    7. http://gcc.gnu.org/gcc-3.2/buildstat.html
-   8. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
+   8. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
    9. http://gcc.gnu.org/index.html
   10. mailto:gcc@gcc.gnu.org
   11. http://gcc.gnu.org/mirrors.html
-  12. http://gcc.gnu.org/onlinedocs/
+  12. https://gcc.gnu.org/onlinedocs/
   13. mailto:gcc-help@gcc.gnu.org
   14. mailto:gcc@gcc.gnu.org
-  15. http://gcc.gnu.org/lists.html
+  15. https://gcc.gnu.org/lists.html
   16. http://www.fsf.org/
-  17. http://gcc.gnu.org/about.html
+  17. https://gcc.gnu.org/about.html
   18. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-3.2/changes.html
@@ -12457,261 +12536,261 @@ GCC 3.2
    provided this notice is preserved.
 
    These pages are [251]maintained by the GCC team. Last modified
-   2012-11-02[252].
+   2014-06-27[252].
 
 References
 
    1. http://gcc.gnu.org/gcc-3.2/changes.html#3.2.3
    2. http://gcc.gnu.org/gcc-3.1/changes.html
    3. http://gcc.gnu.org/gcc-3.2/c++-abi.html
-   4. http://gcc.gnu.org/PR3782
-   5. http://gcc.gnu.org/PR6440
-   6. http://gcc.gnu.org/PR7050
-   7. http://gcc.gnu.org/PR7741
-   8. http://gcc.gnu.org/PR7982
-   9. http://gcc.gnu.org/PR8068
-  10. http://gcc.gnu.org/PR8178
-  11. http://gcc.gnu.org/PR8396
-  12. http://gcc.gnu.org/PR8674
-  13. http://gcc.gnu.org/PR9768
-  14. http://gcc.gnu.org/PR9798
-  15. http://gcc.gnu.org/PR9799
-  16. http://gcc.gnu.org/PR9928
-  17. http://gcc.gnu.org/PR10114
-  18. http://gcc.gnu.org/PR10352
-  19. http://gcc.gnu.org/PR10336
-  20. http://gcc.gnu.org/PR8224
-  21. http://gcc.gnu.org/PR8613
-  22. http://gcc.gnu.org/PR8828
-  23. http://gcc.gnu.org/PR9226
-  24. http://gcc.gnu.org/PR9853
-  25. http://gcc.gnu.org/PR9797
-  26. http://gcc.gnu.org/PR9967
-  27. http://gcc.gnu.org/PR10116
-  28. http://gcc.gnu.org/PR10171
-  29. http://gcc.gnu.org/PR10175
-  30. http://gcc.gnu.org/PR8316
-  31. http://gcc.gnu.org/PR9169
-  32. http://gcc.gnu.org/PR9420
-  33. http://gcc.gnu.org/PR9459
-  34. http://gcc.gnu.org/PR9507
-  35. http://gcc.gnu.org/PR9538
-  36. http://gcc.gnu.org/PR9602
-  37. http://gcc.gnu.org/PR9993
-  38. http://gcc.gnu.org/PR10167
-  39. http://gcc.gnu.org/PR9652
-  40. http://gcc.gnu.org/PR10144
-  41. http://gcc.gnu.org/PR8746
-  42. http://gcc.gnu.org/PR9888
-  43. http://gcc.gnu.org/PR9638
-  44. http://gcc.gnu.org/PR9954
-  45. http://gcc.gnu.org/PR7784
-  46. http://gcc.gnu.org/PR7796
-  47. http://gcc.gnu.org/PR8281
-  48. http://gcc.gnu.org/PR8366
-  49. http://gcc.gnu.org/PR8726
-  50. http://gcc.gnu.org/PR9414
-  51. http://gcc.gnu.org/PR10067
-  52. http://gcc.gnu.org/PR7248
-  53. http://gcc.gnu.org/PR8343
-  54. http://gcc.gnu.org/PR9732
-  55. http://gcc.gnu.org/PR10073
-  56. http://gcc.gnu.org/PR7702
-  57. http://gcc.gnu.org/PR9671
-  58. http://gcc.gnu.org/PR8694
-  59. http://gcc.gnu.org/PR9953
-  60. http://gcc.gnu.org/PR10271
-  61. http://gcc.gnu.org/PR6362
-  62. http://gcc.gnu.org/PR10377
-  63. http://gcc.gnu.org/PR6955
-  64. http://gcc.gnu.org/PR5919
-  65. http://gcc.gnu.org/PR7129
-  66. http://gcc.gnu.org/PR7507
-  67. http://gcc.gnu.org/PR7622
-  68. http://gcc.gnu.org/PR7681
-  69. http://gcc.gnu.org/PR9528
-  70. http://gcc.gnu.org/PR8031
-  71. http://gcc.gnu.org/PR8275
-  72. http://gcc.gnu.org/PR8332
-  73. http://gcc.gnu.org/PR8372
-  74. http://gcc.gnu.org/PR8439
-  75. http://gcc.gnu.org/PR8442
-  76. http://gcc.gnu.org/PR8518
-  77. http://gcc.gnu.org/PR8615
-  78. http://gcc.gnu.org/PR8663
-  79. http://gcc.gnu.org/PR8799
-  80. http://gcc.gnu.org/PR9328
-  81. http://gcc.gnu.org/PR9465
-  82. http://gcc.gnu.org/PR47
-  83. http://gcc.gnu.org/PR6745
-  84. http://gcc.gnu.org/PR8214
-  85. http://gcc.gnu.org/PR8493
-  86. http://gcc.gnu.org/PR8332
-  87. http://gcc.gnu.org/PR8503
-  88. http://gcc.gnu.org/PR8727
-  89. http://gcc.gnu.org/PR7445
-  90. http://gcc.gnu.org/PR8230
-  91. http://gcc.gnu.org/PR8399
-  92. http://gcc.gnu.org/PR8662
-  93. http://gcc.gnu.org/PR8707
-  94. http://gcc.gnu.org/PR8708
-  95. http://gcc.gnu.org/PR8790
-  96. http://gcc.gnu.org/PR8887
-  97. http://gcc.gnu.org/PR9076
-  98. http://gcc.gnu.org/PR9151
-  99. http://gcc.gnu.org/PR9168
- 100. http://gcc.gnu.org/PR9269
- 101. http://gcc.gnu.org/PR9322
- 102. http://gcc.gnu.org/PR9433
- 103. http://gcc.gnu.org/PR8032
- 104. http://gcc.gnu.org/PR8639
- 105. http://gcc.gnu.org/PR8794
- 106. http://gcc.gnu.org/PR8832
- 107. http://gcc.gnu.org/PR8988
- 108. http://gcc.gnu.org/PR9492
- 109. http://gcc.gnu.org/PR9267
- 110. http://gcc.gnu.org/PR8344
- 111. http://gcc.gnu.org/PR8524
- 112. http://gcc.gnu.org/PR8880
- 113. http://gcc.gnu.org/PR9090
- 114. http://gcc.gnu.org/PR8588
- 115. http://gcc.gnu.org/PR8599
- 116. http://gcc.gnu.org/PR9506
- 117. http://gcc.gnu.org/PR9484
- 118. http://gcc.gnu.org/PR9292
- 119. http://gcc.gnu.org/PR9293
- 120. http://gcc.gnu.org/PR9295
- 121. http://gcc.gnu.org/PR9296
- 122. http://gcc.gnu.org/PR9316
- 123. http://gcc.gnu.org/PR9493
- 124. http://gcc.gnu.org/PR7341
- 125. http://gcc.gnu.org/PR8947
- 126. http://gcc.gnu.org/PR7448
- 127. http://gcc.gnu.org/PR8882
- 128. http://gcc.gnu.org/PR7445
- 129. http://gcc.gnu.org/PR2521
- 130. http://gcc.gnu.org/PR5661
- 131. http://gcc.gnu.org/PR6419
- 132. http://gcc.gnu.org/PR6994
- 133. http://gcc.gnu.org/PR7150
- 134. http://gcc.gnu.org/PR7160
- 135. http://gcc.gnu.org/PR7228
- 136. http://gcc.gnu.org/PR7266
- 137. http://gcc.gnu.org/PR7353
- 138. http://gcc.gnu.org/PR7411
- 139. http://gcc.gnu.org/PR7478
- 140. http://gcc.gnu.org/PR7526
- 141. http://gcc.gnu.org/PR7721
- 142. http://gcc.gnu.org/PR7803
- 143. http://gcc.gnu.org/PR7754
- 144. http://gcc.gnu.org/PR7788
- 145. http://gcc.gnu.org/PR8031
- 146. http://gcc.gnu.org/PR8055
- 147. http://gcc.gnu.org/PR8067
- 148. http://gcc.gnu.org/PR8134
- 149. http://gcc.gnu.org/PR8149
- 150. http://gcc.gnu.org/PR8160
- 151. http://gcc.gnu.org/PR5607
- 152. http://gcc.gnu.org/PR6579
- 153. http://gcc.gnu.org/PR6803
- 154. http://gcc.gnu.org/PR7176
- 155. http://gcc.gnu.org/PR7188
- 156. http://gcc.gnu.org/PR7306
- 157. http://gcc.gnu.org/PR7461
- 158. http://gcc.gnu.org/PR7524
- 159. http://gcc.gnu.org/PR7584
- 160. http://gcc.gnu.org/PR7676
- 161. http://gcc.gnu.org/PR7679
- 162. http://gcc.gnu.org/PR7811
- 163. http://gcc.gnu.org/PR7961
- 164. http://gcc.gnu.org/PR8071
- 165. http://gcc.gnu.org/PR8127
- 166. http://gcc.gnu.org/PR6745
- 167. http://gcc.gnu.org/PR8096
- 168. http://gcc.gnu.org/PR8127
- 169. http://gcc.gnu.org/PR8218
- 170. http://gcc.gnu.org/PR8287
- 171. http://gcc.gnu.org/PR8347
- 172. http://gcc.gnu.org/PR8348
- 173. http://gcc.gnu.org/PR8391
- 174. http://gcc.gnu.org/PR6627
- 175. http://gcc.gnu.org/PR6631
- 176. http://gcc.gnu.org/PR7102
- 177. http://gcc.gnu.org/PR7120
- 178. http://gcc.gnu.org/PR7209
- 179. http://gcc.gnu.org/PR7515
- 180. http://gcc.gnu.org/PR7814
- 181. http://gcc.gnu.org/PR8467
- 182. http://gcc.gnu.org/PR4890
- 183. http://gcc.gnu.org/PR7357
- 184. http://gcc.gnu.org/PR7358
- 185. http://gcc.gnu.org/PR7602
- 186. http://gcc.gnu.org/PR7862
- 187. http://gcc.gnu.org/PR8190
- 188. http://gcc.gnu.org/PR8524
- 189. http://gcc.gnu.org/PR5351
- 190. http://gcc.gnu.org/PR7591
- 191. http://gcc.gnu.org/PR6845
- 192. http://gcc.gnu.org/PR7034
- 193. http://gcc.gnu.org/PR7124
- 194. http://gcc.gnu.org/PR7174
- 195. http://gcc.gnu.org/PR7134
- 196. http://gcc.gnu.org/PR7375
- 197. http://gcc.gnu.org/PR7390
- 198. http://gcc.gnu.org/PR6890
- 199. http://gcc.gnu.org/PR6981
- 200. http://gcc.gnu.org/PR7242
- 201. http://gcc.gnu.org/PR7396
- 202. http://gcc.gnu.org/PR7630
- 203. http://gcc.gnu.org/PR7693
- 204. http://gcc.gnu.org/PR7723
- 205. http://gcc.gnu.org/PR7951
- 206. http://gcc.gnu.org/PR8146
- 207. http://gcc.gnu.org/PR5967
- 208. http://gcc.gnu.org/PR6984
- 209. http://gcc.gnu.org/PR7114
- 210. http://gcc.gnu.org/PR7130
- 211. http://gcc.gnu.org/PR7133
- 212. http://gcc.gnu.org/PR7380
- 213. http://gcc.gnu.org/PR8252
- 214. http://gcc.gnu.org/PR8451
- 215. http://gcc.gnu.org/PR7250
- 216. http://gcc.gnu.org/PR6668
- 217. http://gcc.gnu.org/PR7151
- 218. http://gcc.gnu.org/PR7335
- 219. http://gcc.gnu.org/PR7842
- 220. http://gcc.gnu.org/PR7856
- 221. http://gcc.gnu.org/PR7967
- 222. http://gcc.gnu.org/PR7374
- 223. http://gcc.gnu.org/PR7370
- 224. http://gcc.gnu.org/PR7409
- 225. http://gcc.gnu.org/PR8232
- 226. http://gcc.gnu.org/PR7623
- 227. http://gcc.gnu.org/PR8314
- 228. http://gcc.gnu.org/PR761
- 229. http://gcc.gnu.org/PR5610
- 230. http://gcc.gnu.org/PR7484
- 231. http://gcc.gnu.org/PR7531
- 232. http://gcc.gnu.org/PR8120
- 233. http://gcc.gnu.org/PR7320
- 234. http://gcc.gnu.org/PR7470
- 235. http://gcc.gnu.org/PR6410
- 236. http://gcc.gnu.org/PR6503
- 237. http://gcc.gnu.org/PR6642
- 238. http://gcc.gnu.org/PR7186
- 239. http://gcc.gnu.org/PR7216
- 240. http://gcc.gnu.org/PR7220
- 241. http://gcc.gnu.org/PR7222
- 242. http://gcc.gnu.org/PR7286
- 243. http://gcc.gnu.org/PR7442
- 244. http://gcc.gnu.org/PR7445
- 245. http://gcc.gnu.org/PR7291
- 246. http://gcc.gnu.org/onlinedocs/
+   4. https://gcc.gnu.org/PR3782
+   5. https://gcc.gnu.org/PR6440
+   6. https://gcc.gnu.org/PR7050
+   7. https://gcc.gnu.org/PR7741
+   8. https://gcc.gnu.org/PR7982
+   9. https://gcc.gnu.org/PR8068
+  10. https://gcc.gnu.org/PR8178
+  11. https://gcc.gnu.org/PR8396
+  12. https://gcc.gnu.org/PR8674
+  13. https://gcc.gnu.org/PR9768
+  14. https://gcc.gnu.org/PR9798
+  15. https://gcc.gnu.org/PR9799
+  16. https://gcc.gnu.org/PR9928
+  17. https://gcc.gnu.org/PR10114
+  18. https://gcc.gnu.org/PR10352
+  19. https://gcc.gnu.org/PR10336
+  20. https://gcc.gnu.org/PR8224
+  21. https://gcc.gnu.org/PR8613
+  22. https://gcc.gnu.org/PR8828
+  23. https://gcc.gnu.org/PR9226
+  24. https://gcc.gnu.org/PR9853
+  25. https://gcc.gnu.org/PR9797
+  26. https://gcc.gnu.org/PR9967
+  27. https://gcc.gnu.org/PR10116
+  28. https://gcc.gnu.org/PR10171
+  29. https://gcc.gnu.org/PR10175
+  30. https://gcc.gnu.org/PR8316
+  31. https://gcc.gnu.org/PR9169
+  32. https://gcc.gnu.org/PR9420
+  33. https://gcc.gnu.org/PR9459
+  34. https://gcc.gnu.org/PR9507
+  35. https://gcc.gnu.org/PR9538
+  36. https://gcc.gnu.org/PR9602
+  37. https://gcc.gnu.org/PR9993
+  38. https://gcc.gnu.org/PR10167
+  39. https://gcc.gnu.org/PR9652
+  40. https://gcc.gnu.org/PR10144
+  41. https://gcc.gnu.org/PR8746
+  42. https://gcc.gnu.org/PR9888
+  43. https://gcc.gnu.org/PR9638
+  44. https://gcc.gnu.org/PR9954
+  45. https://gcc.gnu.org/PR7784
+  46. https://gcc.gnu.org/PR7796
+  47. https://gcc.gnu.org/PR8281
+  48. https://gcc.gnu.org/PR8366
+  49. https://gcc.gnu.org/PR8726
+  50. https://gcc.gnu.org/PR9414
+  51. https://gcc.gnu.org/PR10067
+  52. https://gcc.gnu.org/PR7248
+  53. https://gcc.gnu.org/PR8343
+  54. https://gcc.gnu.org/PR9732
+  55. https://gcc.gnu.org/PR10073
+  56. https://gcc.gnu.org/PR7702
+  57. https://gcc.gnu.org/PR9671
+  58. https://gcc.gnu.org/PR8694
+  59. https://gcc.gnu.org/PR9953
+  60. https://gcc.gnu.org/PR10271
+  61. https://gcc.gnu.org/PR6362
+  62. https://gcc.gnu.org/PR10377
+  63. https://gcc.gnu.org/PR6955
+  64. https://gcc.gnu.org/PR5919
+  65. https://gcc.gnu.org/PR7129
+  66. https://gcc.gnu.org/PR7507
+  67. https://gcc.gnu.org/PR7622
+  68. https://gcc.gnu.org/PR7681
+  69. https://gcc.gnu.org/PR9528
+  70. https://gcc.gnu.org/PR8031
+  71. https://gcc.gnu.org/PR8275
+  72. https://gcc.gnu.org/PR8332
+  73. https://gcc.gnu.org/PR8372
+  74. https://gcc.gnu.org/PR8439
+  75. https://gcc.gnu.org/PR8442
+  76. https://gcc.gnu.org/PR8518
+  77. https://gcc.gnu.org/PR8615
+  78. https://gcc.gnu.org/PR8663
+  79. https://gcc.gnu.org/PR8799
+  80. https://gcc.gnu.org/PR9328
+  81. https://gcc.gnu.org/PR9465
+  82. https://gcc.gnu.org/PR47
+  83. https://gcc.gnu.org/PR6745
+  84. https://gcc.gnu.org/PR8214
+  85. https://gcc.gnu.org/PR8493
+  86. https://gcc.gnu.org/PR8332
+  87. https://gcc.gnu.org/PR8503
+  88. https://gcc.gnu.org/PR8727
+  89. https://gcc.gnu.org/PR7445
+  90. https://gcc.gnu.org/PR8230
+  91. https://gcc.gnu.org/PR8399
+  92. https://gcc.gnu.org/PR8662
+  93. https://gcc.gnu.org/PR8707
+  94. https://gcc.gnu.org/PR8708
+  95. https://gcc.gnu.org/PR8790
+  96. https://gcc.gnu.org/PR8887
+  97. https://gcc.gnu.org/PR9076
+  98. https://gcc.gnu.org/PR9151
+  99. https://gcc.gnu.org/PR9168
+ 100. https://gcc.gnu.org/PR9269
+ 101. https://gcc.gnu.org/PR9322
+ 102. https://gcc.gnu.org/PR9433
+ 103. https://gcc.gnu.org/PR8032
+ 104. https://gcc.gnu.org/PR8639
+ 105. https://gcc.gnu.org/PR8794
+ 106. https://gcc.gnu.org/PR8832
+ 107. https://gcc.gnu.org/PR8988
+ 108. https://gcc.gnu.org/PR9492
+ 109. https://gcc.gnu.org/PR9267
+ 110. https://gcc.gnu.org/PR8344
+ 111. https://gcc.gnu.org/PR8524
+ 112. https://gcc.gnu.org/PR8880
+ 113. https://gcc.gnu.org/PR9090
+ 114. https://gcc.gnu.org/PR8588
+ 115. https://gcc.gnu.org/PR8599
+ 116. https://gcc.gnu.org/PR9506
+ 117. https://gcc.gnu.org/PR9484
+ 118. https://gcc.gnu.org/PR9292
+ 119. https://gcc.gnu.org/PR9293
+ 120. https://gcc.gnu.org/PR9295
+ 121. https://gcc.gnu.org/PR9296
+ 122. https://gcc.gnu.org/PR9316
+ 123. https://gcc.gnu.org/PR9493
+ 124. https://gcc.gnu.org/PR7341
+ 125. https://gcc.gnu.org/PR8947
+ 126. https://gcc.gnu.org/PR7448
+ 127. https://gcc.gnu.org/PR8882
+ 128. https://gcc.gnu.org/PR7445
+ 129. https://gcc.gnu.org/PR2521
+ 130. https://gcc.gnu.org/PR5661
+ 131. https://gcc.gnu.org/PR6419
+ 132. https://gcc.gnu.org/PR6994
+ 133. https://gcc.gnu.org/PR7150
+ 134. https://gcc.gnu.org/PR7160
+ 135. https://gcc.gnu.org/PR7228
+ 136. https://gcc.gnu.org/PR7266
+ 137. https://gcc.gnu.org/PR7353
+ 138. https://gcc.gnu.org/PR7411
+ 139. https://gcc.gnu.org/PR7478
+ 140. https://gcc.gnu.org/PR7526
+ 141. https://gcc.gnu.org/PR7721
+ 142. https://gcc.gnu.org/PR7803
+ 143. https://gcc.gnu.org/PR7754
+ 144. https://gcc.gnu.org/PR7788
+ 145. https://gcc.gnu.org/PR8031
+ 146. https://gcc.gnu.org/PR8055
+ 147. https://gcc.gnu.org/PR8067
+ 148. https://gcc.gnu.org/PR8134
+ 149. https://gcc.gnu.org/PR8149
+ 150. https://gcc.gnu.org/PR8160
+ 151. https://gcc.gnu.org/PR5607
+ 152. https://gcc.gnu.org/PR6579
+ 153. https://gcc.gnu.org/PR6803
+ 154. https://gcc.gnu.org/PR7176
+ 155. https://gcc.gnu.org/PR7188
+ 156. https://gcc.gnu.org/PR7306
+ 157. https://gcc.gnu.org/PR7461
+ 158. https://gcc.gnu.org/PR7524
+ 159. https://gcc.gnu.org/PR7584
+ 160. https://gcc.gnu.org/PR7676
+ 161. https://gcc.gnu.org/PR7679
+ 162. https://gcc.gnu.org/PR7811
+ 163. https://gcc.gnu.org/PR7961
+ 164. https://gcc.gnu.org/PR8071
+ 165. https://gcc.gnu.org/PR8127
+ 166. https://gcc.gnu.org/PR6745
+ 167. https://gcc.gnu.org/PR8096
+ 168. https://gcc.gnu.org/PR8127
+ 169. https://gcc.gnu.org/PR8218
+ 170. https://gcc.gnu.org/PR8287
+ 171. https://gcc.gnu.org/PR8347
+ 172. https://gcc.gnu.org/PR8348
+ 173. https://gcc.gnu.org/PR8391
+ 174. https://gcc.gnu.org/PR6627
+ 175. https://gcc.gnu.org/PR6631
+ 176. https://gcc.gnu.org/PR7102
+ 177. https://gcc.gnu.org/PR7120
+ 178. https://gcc.gnu.org/PR7209
+ 179. https://gcc.gnu.org/PR7515
+ 180. https://gcc.gnu.org/PR7814
+ 181. https://gcc.gnu.org/PR8467
+ 182. https://gcc.gnu.org/PR4890
+ 183. https://gcc.gnu.org/PR7357
+ 184. https://gcc.gnu.org/PR7358
+ 185. https://gcc.gnu.org/PR7602
+ 186. https://gcc.gnu.org/PR7862
+ 187. https://gcc.gnu.org/PR8190
+ 188. https://gcc.gnu.org/PR8524
+ 189. https://gcc.gnu.org/PR5351
+ 190. https://gcc.gnu.org/PR7591
+ 191. https://gcc.gnu.org/PR6845
+ 192. https://gcc.gnu.org/PR7034
+ 193. https://gcc.gnu.org/PR7124
+ 194. https://gcc.gnu.org/PR7174
+ 195. https://gcc.gnu.org/PR7134
+ 196. https://gcc.gnu.org/PR7375
+ 197. https://gcc.gnu.org/PR7390
+ 198. https://gcc.gnu.org/PR6890
+ 199. https://gcc.gnu.org/PR6981
+ 200. https://gcc.gnu.org/PR7242
+ 201. https://gcc.gnu.org/PR7396
+ 202. https://gcc.gnu.org/PR7630
+ 203. https://gcc.gnu.org/PR7693
+ 204. https://gcc.gnu.org/PR7723
+ 205. https://gcc.gnu.org/PR7951
+ 206. https://gcc.gnu.org/PR8146
+ 207. https://gcc.gnu.org/PR5967
+ 208. https://gcc.gnu.org/PR6984
+ 209. https://gcc.gnu.org/PR7114
+ 210. https://gcc.gnu.org/PR7130
+ 211. https://gcc.gnu.org/PR7133
+ 212. https://gcc.gnu.org/PR7380
+ 213. https://gcc.gnu.org/PR8252
+ 214. https://gcc.gnu.org/PR8451
+ 215. https://gcc.gnu.org/PR7250
+ 216. https://gcc.gnu.org/PR6668
+ 217. https://gcc.gnu.org/PR7151
+ 218. https://gcc.gnu.org/PR7335
+ 219. https://gcc.gnu.org/PR7842
+ 220. https://gcc.gnu.org/PR7856
+ 221. https://gcc.gnu.org/PR7967
+ 222. https://gcc.gnu.org/PR7374
+ 223. https://gcc.gnu.org/PR7370
+ 224. https://gcc.gnu.org/PR7409
+ 225. https://gcc.gnu.org/PR8232
+ 226. https://gcc.gnu.org/PR7623
+ 227. https://gcc.gnu.org/PR8314
+ 228. https://gcc.gnu.org/PR761
+ 229. https://gcc.gnu.org/PR5610
+ 230. https://gcc.gnu.org/PR7484
+ 231. https://gcc.gnu.org/PR7531
+ 232. https://gcc.gnu.org/PR8120
+ 233. https://gcc.gnu.org/PR7320
+ 234. https://gcc.gnu.org/PR7470
+ 235. https://gcc.gnu.org/PR6410
+ 236. https://gcc.gnu.org/PR6503
+ 237. https://gcc.gnu.org/PR6642
+ 238. https://gcc.gnu.org/PR7186
+ 239. https://gcc.gnu.org/PR7216
+ 240. https://gcc.gnu.org/PR7220
+ 241. https://gcc.gnu.org/PR7222
+ 242. https://gcc.gnu.org/PR7286
+ 243. https://gcc.gnu.org/PR7442
+ 244. https://gcc.gnu.org/PR7445
+ 245. https://gcc.gnu.org/PR7291
+ 246. https://gcc.gnu.org/onlinedocs/
  247. mailto:gcc-help@gcc.gnu.org
  248. mailto:gcc@gcc.gnu.org
- 249. http://gcc.gnu.org/lists.html
+ 249. https://gcc.gnu.org/lists.html
  250. http://www.fsf.org/
- 251. http://gcc.gnu.org/about.html
+ 251. https://gcc.gnu.org/about.html
  252. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-3.1/index.html
@@ -12760,7 +12839,7 @@ http://gcc.gnu.org/gcc-3.1/index.html
    provided this notice is preserved.
 
    These pages are [14]maintained by the GCC team. Last modified
-   2012-11-02[15].
+   2014-06-28[15].
 
 References
 
@@ -12768,16 +12847,16 @@ References
    2. http://www.gnu.org/
    3. http://gcc.gnu.org/gcc-3.1/buildstat.html
    4. http://gcc.gnu.org/gcc-3.1/changes.html
-   5. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
+   5. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
    6. http://gcc.gnu.org/index.html
    7. mailto:gcc@gcc.gnu.org
    8. http://gcc.gnu.org/mirrors.html
-   9. http://gcc.gnu.org/onlinedocs/
+   9. https://gcc.gnu.org/onlinedocs/
   10. mailto:gcc-help@gcc.gnu.org
   11. mailto:gcc@gcc.gnu.org
-  12. http://gcc.gnu.org/lists.html
+  12. https://gcc.gnu.org/lists.html
   13. http://www.fsf.org/
-  14. http://gcc.gnu.org/about.html
+  14. https://gcc.gnu.org/about.html
   15. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-3.1/changes.html
@@ -13115,31 +13194,31 @@ Documentation improvements
    provided this notice is preserved.
 
    These pages are [18]maintained by the GCC team. Last modified
-   2013-10-31[19].
+   2014-06-28[19].
 
 References
 
-   1. http://gcc.gnu.org/ml/gcc/2002-07/msg01208.html
+   1. https://gcc.gnu.org/ml/gcc/2002-07/msg01208.html
    2. http://gcc.gnu.org/news/profiledriven.html
    3. http://gcc.gnu.org/benchmarks/
    4. http://gcc.gnu.org/c99status.html
-   5. http://gcc.gnu.org/onlinedocs/libstdc++/faq.html
-   6. http://gcc.gnu.org/onlinedocs/gcc-3.1.1/g77/News.html
+   5. https://gcc.gnu.org/onlinedocs/libstdc++/faq.html
+   6. https://gcc.gnu.org/onlinedocs/gcc-3.1.1/g77/News.html
    7. http://www.adacore.com/
    8. http://www-cs-faculty.stanford.edu/~knuth/mmix.html
    9. http://www.axis.com/
   10. http://developer.axis.com/
   11. http://www.superh.com/
   12. http://www.x86-64.org/
-  13. http://gcc.gnu.org/onlinedocs/
+  13. https://gcc.gnu.org/onlinedocs/
   14. mailto:gcc-help@gcc.gnu.org
   15. mailto:gcc@gcc.gnu.org
-  16. http://gcc.gnu.org/lists.html
+  16. https://gcc.gnu.org/lists.html
   17. http://www.fsf.org/
-  18. http://gcc.gnu.org/about.html
+  18. https://gcc.gnu.org/about.html
   19. http://validator.w3.org/check/referer
 ======================================================================
-http://gcc.gnu.org/gcc-3.0/gcc-3.0.html
+http://gcc.gnu.org/gcc-3.0/index.html
                                    GCC 3.0.4
 
    February 20, 2002
@@ -13192,24 +13271,24 @@ Previous 3.0.x Releases
    provided this notice is preserved.
 
    These pages are [14]maintained by the GCC team. Last modified
-   2012-11-02[15].
+   2014-06-28[15].
 
 References
 
    1. http://www.gnu.org/
    2. http://gcc.gnu.org/gcc-3.0/features.html
    3. http://gcc.gnu.org/gcc-3.0/buildstat.html
-   4. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
+   4. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
    5. http://gcc.gnu.org/gcc-3.0/caveats.html
    6. http://gcc.gnu.org/index.html
    7. mailto:gcc@gcc.gnu.org
    8. http://gcc.gnu.org/mirrors.html
-   9. http://gcc.gnu.org/onlinedocs/
+   9. https://gcc.gnu.org/onlinedocs/
   10. mailto:gcc-help@gcc.gnu.org
   11. mailto:gcc@gcc.gnu.org
-  12. http://gcc.gnu.org/lists.html
+  12. https://gcc.gnu.org/lists.html
   13. http://www.fsf.org/
-  14. http://gcc.gnu.org/about.html
+  14. https://gcc.gnu.org/about.html
   15. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-3.0/features.html
@@ -13383,7 +13462,7 @@ Other significant improvements
    provided this notice is preserved.
 
    These pages are [19]maintained by the GCC team. Last modified
-   2013-12-03[20].
+   2014-06-28[20].
 
 References
 
@@ -13397,15 +13476,15 @@ References
    8. http://gcc.gnu.org/news/inlining.html
    9. http://gcc.gnu.org/news/dependencies.html
   10. http://gcc.gnu.org/c99status.html
-  11. http://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/News.html
+  11. https://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/News.html
   12. http://gcc.gnu.org/gcc-3.0/libgcc.html
   13. http://gcc.gnu.org/gcc-2.95/features.html
-  14. http://gcc.gnu.org/onlinedocs/
+  14. https://gcc.gnu.org/onlinedocs/
   15. mailto:gcc-help@gcc.gnu.org
   16. mailto:gcc@gcc.gnu.org
-  17. http://gcc.gnu.org/lists.html
+  17. https://gcc.gnu.org/lists.html
   18. http://www.fsf.org/
-  19. http://gcc.gnu.org/about.html
+  19. https://gcc.gnu.org/about.html
   20. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-3.0/caveats.html
@@ -13441,7 +13520,7 @@ http://gcc.gnu.org/gcc-3.0/caveats.html
        earlier versions. There is a problem setting breakpoints by line
        number, and other related issues that have been fixed in GCC 3.0
        but not yet handled in GDB:
-       [1]http://gcc.gnu.org/ml/gcc-bugs/2001-06/msg00421.html
+       [1]https://gcc.gnu.org/ml/gcc-bugs/2001-06/msg00421.html
 
 
     For questions related to the use of GCC, please consult these web
@@ -13455,17 +13534,17 @@ http://gcc.gnu.org/gcc-3.0/caveats.html
    provided this notice is preserved.
 
    These pages are [7]maintained by the GCC team. Last modified
-   2012-11-02[8].
+   2014-06-27[8].
 
 References
 
-   1. http://gcc.gnu.org/ml/gcc-bugs/2001-06/msg00421.html
-   2. http://gcc.gnu.org/onlinedocs/
+   1. https://gcc.gnu.org/ml/gcc-bugs/2001-06/msg00421.html
+   2. https://gcc.gnu.org/onlinedocs/
    3. mailto:gcc-help@gcc.gnu.org
    4. mailto:gcc@gcc.gnu.org
-   5. http://gcc.gnu.org/lists.html
+   5. https://gcc.gnu.org/lists.html
    6. http://www.fsf.org/
-   7. http://gcc.gnu.org/about.html
+   7. https://gcc.gnu.org/about.html
    8. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-2.95/index.html
@@ -13506,56 +13585,55 @@ References and Acknowledgements
 
    The sources include installation instructions in both HTML and
    plaintext forms in the install directory in the distribution. However,
-   the most up to date [4]installation instructions and [5]build/test
-   status are on the web pages. We will update those pages as new
-   information becomes available.
+   the most up to date installation instructions and [4]build/test status
+   are on the web pages. We will update those pages as new information
+   becomes available.
 
    The GCC developers would like to thank the numerous people that have
    contributed new features, test results, bugfixes, etc to GCC. This
-   [6]amazing group of volunteers is what makes GCC successful.
+   [5]amazing group of volunteers is what makes GCC successful.
 
    And finally, we can't in good conscience fail to mention some
-   [7]caveats to using GCC 2.95.
+   [6]caveats to using GCC 2.95.
 
-   Download GCC 2.95 from one of our many [8]mirror sites.
+   Download GCC 2.95 from one of our many [7]mirror sites.
 
-   For additional information about GCC please see the [9]GCC project web
-   server or contact the [10]GCC development mailing list.
+   For additional information about GCC please see the [8]GCC project web
+   server or contact the [9]GCC development mailing list.
 
 
     For questions related to the use of GCC, please consult these web
-    pages and the [11]GCC manuals. If that fails, the
-    [12]gcc-help@gcc.gnu.org mailing list might help. Comments on these
+    pages and the [10]GCC manuals. If that fails, the
+    [11]gcc-help@gcc.gnu.org mailing list might help. Comments on these
     web pages and the development of GCC are welcome on our developer
-    list at [13]gcc@gcc.gnu.org. All of [14]our lists have public
+    list at [12]gcc@gcc.gnu.org. All of [13]our lists have public
     archives.
 
-   Copyright (C) [15]Free Software Foundation, Inc. Verbatim copying and
+   Copyright (C) [14]Free Software Foundation, Inc. Verbatim copying and
    distribution of this entire article is permitted in any medium,
    provided this notice is preserved.
 
-   These pages are [16]maintained by the GCC team. Last modified
-   2012-11-02[17].
+   These pages are [15]maintained by the GCC team. Last modified
+   2014-06-28[16].
 
 References
 
    1. http://gcc.gnu.org/gcc-2.95/regress.html
    2. http://gcc.gnu.org/gcc-2.95/othertest.html
    3. http://gcc.gnu.org/gcc-2.95/features.html
-   4. http://gcc.gnu.org/install/
-   5. http://gcc.gnu.org/gcc-2.95/buildstat.html
-   6. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
-   7. http://gcc.gnu.org/gcc-2.95/caveats.html
-   8. http://gcc.gnu.org/mirrors.html
-   9. http://gcc.gnu.org/index.html
-  10. mailto:gcc@gcc.gnu.org
-  11. http://gcc.gnu.org/onlinedocs/
-  12. mailto:gcc-help@gcc.gnu.org
-  13. mailto:gcc@gcc.gnu.org
-  14. http://gcc.gnu.org/lists.html
-  15. http://www.fsf.org/
-  16. http://gcc.gnu.org/about.html
-  17. http://validator.w3.org/check/referer
+   4. http://gcc.gnu.org/gcc-2.95/buildstat.html
+   5. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
+   6. http://gcc.gnu.org/gcc-2.95/caveats.html
+   7. http://gcc.gnu.org/mirrors.html
+   8. http://gcc.gnu.org/index.html
+   9. mailto:gcc@gcc.gnu.org
+  10. https://gcc.gnu.org/onlinedocs/
+  11. mailto:gcc-help@gcc.gnu.org
+  12. mailto:gcc@gcc.gnu.org
+  13. https://gcc.gnu.org/lists.html
+  14. http://www.fsf.org/
+  15. https://gcc.gnu.org/about.html
+  16. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-2.95/features.html
                              GCC 2.95 New Features
@@ -13801,7 +13879,7 @@ Additional Changes in GCC 2.95.3
    provided this notice is preserved.
 
    These pages are [22]maintained by the GCC team. Last modified
-   2012-11-02[23].
+   2014-06-28[23].
 
 References
 
@@ -13813,7 +13891,7 @@ References
    6. http://gcc.gnu.org/news/hoist.html
    7. http://gcc.gnu.org/news/alias.html
    8. http://gcc.gnu.org/gcc-2.95/c++features.html
-   9. http://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/News.html
+   9. https://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/News.html
   10. http://gcc.gnu.org/java/gcj-announce.txt
   11. http://gcc.gnu.org/news/javaannounce.html
   12. http://gcc.gnu.org/c99status.html
@@ -13821,12 +13899,12 @@ References
   14. http://gcc.gnu.org/news/sparc.html
   15. http://gcc.gnu.org/news/egcs-vcg.html
   16. http://gcc.gnu.org/egcs-1.0/features-2.8.html
-  17. http://gcc.gnu.org/onlinedocs/
+  17. https://gcc.gnu.org/onlinedocs/
   18. mailto:gcc-help@gcc.gnu.org
   19. mailto:gcc@gcc.gnu.org
-  20. http://gcc.gnu.org/lists.html
+  20. https://gcc.gnu.org/lists.html
   21. http://www.fsf.org/
-  22. http://gcc.gnu.org/about.html
+  22. https://gcc.gnu.org/about.html
   23. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-2.95/caveats.html
@@ -13884,17 +13962,17 @@ http://gcc.gnu.org/gcc-2.95/caveats.html
    provided this notice is preserved.
 
    These pages are [7]maintained by the GCC team. Last modified
-   2012-11-02[8].
+   2014-06-12[8].
 
 References
 
    1. ftp://gcc.gnu.org/pub/gcc/infrastructure/libg++-2.8.1.3.tar.gz
-   2. http://gcc.gnu.org/onlinedocs/
+   2. https://gcc.gnu.org/onlinedocs/
    3. mailto:gcc-help@gcc.gnu.org
    4. mailto:gcc@gcc.gnu.org
-   5. http://gcc.gnu.org/lists.html
+   5. https://gcc.gnu.org/lists.html
    6. http://www.fsf.org/
-   7. http://gcc.gnu.org/about.html
+   7. https://gcc.gnu.org/about.html
    8. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/egcs-1.1/index.html
@@ -14077,35 +14155,35 @@ http://gcc.gnu.org/egcs-1.1/index.html
    Each release includes installation instructions in both HTML and
    plaintext forms (see the INSTALL directory in the toplevel directory of
    the distribution). However, we also keep the most up to date
-   [6]installation instructions and [7]build/test status on our web page.
-   We will update those pages as new information becomes available.
+   installation instructions and [6]build/test status on our web page. We
+   will update those pages as new information becomes available.
 
    The EGCS project would like to thank the numerous people that have
-   contributed new features, test results, bugfixes, etc. This [8]amazing
+   contributed new features, test results, bugfixes, etc. This [7]amazing
    group of volunteers is what makes EGCS successful.
 
    And finally, we can't in good conscience fail to mention some
-   [9]caveats to using EGCS 1.1.
+   [8]caveats to using EGCS 1.1.
 
    Download EGCS from egcs.cygnus.com (USA California).
 
    The EGCS 1.1 release is also available on many mirror sites.
-   [10]Goto mirror list to find a closer site.
+   [9]Goto mirror list to find a closer site.
 
 
     For questions related to the use of GCC, please consult these web
-    pages and the [11]GCC manuals. If that fails, the
-    [12]gcc-help@gcc.gnu.org mailing list might help. Comments on these
+    pages and the [10]GCC manuals. If that fails, the
+    [11]gcc-help@gcc.gnu.org mailing list might help. Comments on these
     web pages and the development of GCC are welcome on our developer
-    list at [13]gcc@gcc.gnu.org. All of [14]our lists have public
+    list at [12]gcc@gcc.gnu.org. All of [13]our lists have public
     archives.
 
-   Copyright (C) [15]Free Software Foundation, Inc. Verbatim copying and
+   Copyright (C) [14]Free Software Foundation, Inc. Verbatim copying and
    distribution of this entire article is permitted in any medium,
    provided this notice is preserved.
 
-   These pages are [16]maintained by the GCC team. Last modified
-   2012-11-02[17].
+   These pages are [15]maintained by the GCC team. Last modified
+   2014-06-28[16].
 
 References
 
@@ -14114,18 +14192,17 @@ References
    3. http://gcc.gnu.org/news/alias.html
    4. http://gcc.gnu.org/egcs-1.1/c++features.html
    5. http://gcc.gnu.org/egcs-1.1/features.html
-   6. http://gcc.gnu.org/install/
-   7. http://gcc.gnu.org/egcs-1.1/buildstat.html
-   8. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
-   9. http://gcc.gnu.org/egcs-1.1/caveats.html
-  10. http://gcc.gnu.org/mirrors.html
-  11. http://gcc.gnu.org/onlinedocs/
-  12. mailto:gcc-help@gcc.gnu.org
-  13. mailto:gcc@gcc.gnu.org
-  14. http://gcc.gnu.org/lists.html
-  15. http://www.fsf.org/
-  16. http://gcc.gnu.org/about.html
-  17. http://validator.w3.org/check/referer
+   6. http://gcc.gnu.org/egcs-1.1/buildstat.html
+   7. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
+   8. http://gcc.gnu.org/egcs-1.1/caveats.html
+   9. http://gcc.gnu.org/mirrors.html
+  10. https://gcc.gnu.org/onlinedocs/
+  11. mailto:gcc-help@gcc.gnu.org
+  12. mailto:gcc@gcc.gnu.org
+  13. https://gcc.gnu.org/lists.html
+  14. http://www.fsf.org/
+  15. https://gcc.gnu.org/about.html
+  16. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/egcs-1.1/features.html
                              EGCS 1.1 new features
@@ -14205,7 +14282,7 @@ http://gcc.gnu.org/egcs-1.1/features.html
    provided this notice is preserved.
 
    These pages are [10]maintained by the GCC team. Last modified
-   2012-11-02[11].
+   2014-06-12[11].
 
 References
 
@@ -14213,12 +14290,12 @@ References
    2. http://gcc.gnu.org/news/gcse.html
    3. http://gcc.gnu.org/news/alias.html
    4. http://gcc.gnu.org/egcs-1.0/features-2.8.html
-   5. http://gcc.gnu.org/onlinedocs/
+   5. https://gcc.gnu.org/onlinedocs/
    6. mailto:gcc-help@gcc.gnu.org
    7. mailto:gcc@gcc.gnu.org
-   8. http://gcc.gnu.org/lists.html
+   8. https://gcc.gnu.org/lists.html
    9. http://www.fsf.org/
-  10. http://gcc.gnu.org/about.html
+  10. https://gcc.gnu.org/about.html
   11. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/egcs-1.1/caveats.html
@@ -14259,16 +14336,16 @@ http://gcc.gnu.org/egcs-1.1/caveats.html
    provided this notice is preserved.
 
    These pages are [6]maintained by the GCC team. Last modified
-   2012-11-02[7].
+   2014-06-12[7].
 
 References
 
-   1. http://gcc.gnu.org/onlinedocs/
+   1. https://gcc.gnu.org/onlinedocs/
    2. mailto:gcc-help@gcc.gnu.org
    3. mailto:gcc@gcc.gnu.org
-   4. http://gcc.gnu.org/lists.html
+   4. https://gcc.gnu.org/lists.html
    5. http://www.fsf.org/
-   6. http://gcc.gnu.org/about.html
+   6. https://gcc.gnu.org/about.html
    7. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/egcs-1.0/index.html
@@ -14424,10 +14501,10 @@ http://gcc.gnu.org/egcs-1.0/index.html
    The EGCS 1.0 releases include installation instructions in both HTML
    and plaintext forms (see the INSTALL directory in the toplevel
    directory of the distribution). However, we also keep the most up to
-   date [2]installation instructions and [3]build/test status on our web
+   date installation instructions and [2]build/test status on our web
    page. We will update those pages as new information becomes available.
 
-   And, we can't in good conscience fail to mention some [4]caveats to
+   And, we can't in good conscience fail to mention some [3]caveats to
    using EGCS.
 
    Update: Big thanks to Stanford for providing a high speed link for
@@ -14437,7 +14514,7 @@ http://gcc.gnu.org/egcs-1.0/index.html
    (USA California -- High speed link provided by Stanford).
 
    The EGCS 1.0 release is also available many mirror sites.
-   [5]Goto mirror list to find a closer site
+   [4]Goto mirror list to find a closer site
 
    We'd like to thank the numerous people that have contributed new
    features, test results, bugfixes, etc. Unfortunately, they're far too
@@ -14445,32 +14522,31 @@ http://gcc.gnu.org/egcs-1.0/index.html
 
 
     For questions related to the use of GCC, please consult these web
-    pages and the [6]GCC manuals. If that fails, the
-    [7]gcc-help@gcc.gnu.org mailing list might help. Comments on these
+    pages and the [5]GCC manuals. If that fails, the
+    [6]gcc-help@gcc.gnu.org mailing list might help. Comments on these
     web pages and the development of GCC are welcome on our developer
-    list at [8]gcc@gcc.gnu.org. All of [9]our lists have public archives.
+    list at [7]gcc@gcc.gnu.org. All of [8]our lists have public archives.
 
-   Copyright (C) [10]Free Software Foundation, Inc. Verbatim copying and
+   Copyright (C) [9]Free Software Foundation, Inc. Verbatim copying and
    distribution of this entire article is permitted in any medium,
    provided this notice is preserved.
 
-   These pages are [11]maintained by the GCC team. Last modified
-   2013-12-03[12].
+   These pages are [10]maintained by the GCC team. Last modified
+   2014-06-28[11].
 
 References
 
    1. http://gcc.gnu.org/egcs-1.0/features.html
-   2. http://gcc.gnu.org/install/
-   3. http://gcc.gnu.org/egcs-1.0/buildstat.html
-   4. http://gcc.gnu.org/egcs-1.0/caveats.html
-   5. http://gcc.gnu.org/mirrors.html
-   6. http://gcc.gnu.org/onlinedocs/
-   7. mailto:gcc-help@gcc.gnu.org
-   8. mailto:gcc@gcc.gnu.org
-   9. http://gcc.gnu.org/lists.html
-  10. http://www.fsf.org/
-  11. http://gcc.gnu.org/about.html
-  12. http://validator.w3.org/check/referer
+   2. http://gcc.gnu.org/egcs-1.0/buildstat.html
+   3. http://gcc.gnu.org/egcs-1.0/caveats.html
+   4. http://gcc.gnu.org/mirrors.html
+   5. https://gcc.gnu.org/onlinedocs/
+   6. mailto:gcc-help@gcc.gnu.org
+   7. mailto:gcc@gcc.gnu.org
+   8. https://gcc.gnu.org/lists.html
+   9. http://www.fsf.org/
+  10. https://gcc.gnu.org/about.html
+  11. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/egcs-1.0/features.html
                                EGCS 1.0 features
@@ -14522,18 +14598,18 @@ http://gcc.gnu.org/egcs-1.0/features.html
    provided this notice is preserved.
 
    These pages are [8]maintained by the GCC team. Last modified
-   2012-11-02[9].
+   2014-06-12[9].
 
 References
 
    1. http://gcc.gnu.org/egcs-1.0/features-2.8.html
    2. http://gcc.gnu.org/egcs-1.0/c++features.html
-   3. http://gcc.gnu.org/onlinedocs/
+   3. https://gcc.gnu.org/onlinedocs/
    4. mailto:gcc-help@gcc.gnu.org
    5. mailto:gcc@gcc.gnu.org
-   6. http://gcc.gnu.org/lists.html
+   6. https://gcc.gnu.org/lists.html
    7. http://www.fsf.org/
-   8. http://gcc.gnu.org/about.html
+   8. https://gcc.gnu.org/about.html
    9. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/egcs-1.0/caveats.html
@@ -14575,15 +14651,15 @@ http://gcc.gnu.org/egcs-1.0/caveats.html
    provided this notice is preserved.
 
    These pages are [6]maintained by the GCC team. Last modified
-   2012-11-02[7].
+   2014-06-12[7].
 
 References
 
-   1. http://gcc.gnu.org/onlinedocs/
+   1. https://gcc.gnu.org/onlinedocs/
    2. mailto:gcc-help@gcc.gnu.org
    3. mailto:gcc@gcc.gnu.org
-   4. http://gcc.gnu.org/lists.html
+   4. https://gcc.gnu.org/lists.html
    5. http://www.fsf.org/
-   6. http://gcc.gnu.org/about.html
+   6. https://gcc.gnu.org/about.html
    7. http://validator.w3.org/check/referer
 ======================================================================
index b6ef629..2dbc61f 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index a8877a1..df19ebf 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 4899541..9853898 100644 (file)
@@ -1,3 +1,11 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
+2014-06-29  Richard Biener  <rguenther@suse.de>
+
+       * gennews: Use gcc-3.0/index.html.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 3f79b2f..7d69fd3 100755 (executable)
@@ -37,7 +37,7 @@ files="
     gcc-3.3/index.html gcc-3.3/changes.html
     gcc-3.2/index.html gcc-3.2/changes.html
     gcc-3.1/index.html gcc-3.1/changes.html
-    gcc-3.0/gcc-3.0.html gcc-3.0/features.html gcc-3.0/caveats.html
+    gcc-3.0/index.html gcc-3.0/features.html gcc-3.0/caveats.html
     gcc-2.95/index.html gcc-2.95/features.html gcc-2.95/caveats.html
     egcs-1.1/index.html egcs-1.1/features.html egcs-1.1/caveats.html
     egcs-1.0/index.html egcs-1.0/features.html egcs-1.0/caveats.html"
index 8e36f54..ccb88eb 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 1528193..de91385 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index d4738d0..cef5385 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 6ed7776..5b341fd 100644 (file)
@@ -1 +1 @@
-4.9.0
+4.9.1
index c0f56a1..ffa472f 100644 (file)
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
+2014-07-10  Cary Coutant  <ccoutant@google.com>
+
+        Backport from trunk at r212211.
+
+       * dwarf2out.c (remove_addr_table_entry): Remove unnecessary hash table
+        lookup.
+       (resolve_addr_in_expr): When replacing the rtx in a location list
+        entry, get a new address table entry.
+       (dwarf2out_finish): Call index_location_lists even if there are no
+        addr_index_table entries yet.
+
+2014-07-10  Tom G. Christensen  <tgc@jupiterrise.com>
+
+       * doc/install.texi: Remove links to defunct package providers for
+       Solaris.
+
+2014-07-10  Eric Botcazou  <ebotcazou@adacore.com>
+
+       PR middle-end/53590
+       * function.c (allocate_struct_function): Revert r188667 change.
+
+       * gimple-low.c (lower_builtin_setjmp): Use properly-typed constant.
+
+2014-07-09  Alan Lawrence  <alan.lawrence@arm.com>
+
+       Backport r211369 from trunk.
+       2014-06-09  Alan Lawrence  <alan.lawrence@arm.com>
+
+       PR target/61062
+       * config/arm/arm_neon.h (vtrn_s8, vtrn_s16, vtrn_u8, vtrn_u16, vtrn_p8,
+       vtrn_p16, vtrn_s32, vtrn_f32, vtrn_u32, vtrnq_s8, vtrnq_s16, vtrnq_s32,
+       vtrnq_f32, vtrnq_u8, vtrnq_u16, vtrnq_u32, vtrnq_p8, vtrnq_p16, vzip_s8,
+       vzip_s16, vzip_u8, vzip_u16, vzip_p8, vzip_p16, vzip_s32, vzip_f32,
+       vzip_u32, vzipq_s8, vzipq_s16, vzipq_s32, vzipq_f32, vzipq_u8,
+       vzipq_u16, vzipq_u32, vzipq_p8, vzipq_p16, vuzp_s8, vuzp_s16, vuzp_s32,
+       vuzp_f32, vuzp_u8, vuzp_u16, vuzp_u32, vuzp_p8, vuzp_p16, vuzpq_s8,
+       vuzpq_s16, vuzpq_s32, vuzpq_f32, vuzpq_u8, vuzpq_u16, vuzpq_u32,
+       vuzpq_p8, vuzpq_p16): Correct mask for bigendian.
+
+
+2014-07-09  Alan Lawrence  <alan.lawrence@arm.com>
+
+       Backport r210219 from trunk.
+       2014-05-08  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
+
+       * config/arm/arm_neon.h: Update comment.
+       * config/arm/neon-docgen.ml: Delete.
+       * config/arm/neon-gen.ml: Delete.
+       * doc/arm-neon-intrinsics.texi: Update comment.
+
+2014-07-09  Zhenqiang Chen  <zhenqiang.chen@linaro.org>
+
+       Backport r211775 from trunk.
+       2014-06-18  Terry Guo  <terry.guo@arm.com>
+
+       PR target/61544
+       * config/arm/arm.c (thumb1_reorg): Move to next basic block if we
+       reach the head.
+
+2014-07-08  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/61673
+       * combine.c (simplify_comparison): Test just mode's sign bit
+       in tmode rather than the sign bit and any bits above it.
+
+2014-07-08  James Greenhalgh  <james.greenhalgh@arm.com>
+
+       Backport r212298 from trunk.
+       2014-07-04  James Greenhalgh  <james.greenhalgh@arm.com>
+
+       * config/aarch64/aarch64-simd.md (move_lo_quad_internal_<mode>): New.
+       (move_lo_quad_internal_be_<mode>): Likewise.
+       (move_lo_quad_<mode>): Convert to define_expand.
+       (aarch64_simd_move_hi_quad_<mode>): Gate on BYTES_BIG_ENDIAN.
+       (aarch64_simd_move_hi_quad_be_<mode>): New.
+       (move_hi_quad_<mode>): Use appropriate insn for BYTES_BIG_ENDIAN.
+       (aarch64_combinez<mode>): Gate on BYTES_BIG_ENDIAN.
+       (aarch64_combinez_be<mode>): New.
+       (aarch64_combine<mode>): Convert to define_expand.
+       (aarch64_combine_internal<mode>): New.
+       (aarch64_simd_combine<mode>): Remove bogus RTL description.
+
+2014-07-08  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/61680
+       * tree-vect-data-refs.c (vect_analyze_data_ref_dependence):
+       Handle properly all read-write dependences with group accesses.
+
+       PR tree-optimization/61681
+       * tree-ssa-structalias.c (find_what_var_points_to): Expand
+       NONLOCAL inside ESCAPED.
+
+2014-07-08  Alan Lawrence  <alan.lawrence@arm.com>
+
+       Backport r211502 from mainline.
+       2014-06-10  Alan Lawrence  <alan.lawrence@arm.com>
+
+       PR target/59843
+       * config/aarch64/aarch64-modes.def: Add V1DFmode.
+       * config/aarch64/aarch64.c (aarch64_vector_mode_supported_p):
+       Support V1DFmode.
+
+2014-07-08  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/61725
+       * tree-vrp.c (extract_range_basic): Don't assume vr0 is unsigned
+       range, use range_includes_zerop_p instead of integer_zerop on
+       vr0->min, only use log2 of max if min is not negative.
+
+2014-07-06  Gerald Pfeifer  <gerald@pfeifer.com>
+
+       * doc/install.texi (Specific, aarch64*-*-*): Fix markup.  Reword a bit.
+
+2014-07-04  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/61654
+       * cgraphunit.c (expand_thunk): Call free_dominance_info.
+
+       PR tree-optimization/61684
+       * tree-ssa-ifcombine.c (recognize_single_bit_test): Make sure
+       rhs1 of conversion is a SSA_NAME before using SSA_NAME_DEF_STMT on it.
+
+2014-06-30  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2014-06-27  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/57233
+       PR tree-optimization/61299
+       * tree-vect-generic.c (get_compute_type, count_type_subparts): New
+       functions.
+       (expand_vector_operations_1): Use them.  If {L,R}ROTATE_EXPR
+       would be lowered to scalar shifts, check if corresponding
+       shifts and vector BIT_IOR_EXPR are supported and don't lower
+       or lower just to narrower vector type in that case.
+       * expmed.c (expand_shift_1): Fix up handling of vector
+       shifts and rotates.
+
+       2014-06-25  Jakub Jelinek  <jakub@redhat.com>
+
+       * langhooks-def.h (LANG_HOOKS_OMP_CLAUSE_LINEAR_CTOR): Define.
+       (LANG_HOOKS_DECLS): Add it.
+       * gimplify.c (gimplify_omp_for): Make sure OMP_CLAUSE_LINEAR_STEP
+       has correct type.
+       * tree.h (OMP_CLAUSE_LINEAR_ARRAY): Define.
+       * langhooks.h (struct lang_hooks_for_decls): Add
+       omp_clause_linear_ctor hook.
+       * omp-low.c (lower_rec_input_clauses): Set max_vf even if
+       OMP_CLAUSE_LINEAR_ARRAY is set.  Don't fold_convert
+       OMP_CLAUSE_LINEAR_STEP.  For OMP_CLAUSE_LINEAR_ARRAY in
+       combined simd loop use omp_clause_linear_ctor hook.
+
+       2014-06-24  Jakub Jelinek  <jakub@redhat.com>
+
+       * gimplify.c (gimplify_scan_omp_clauses) <case OMP_CLAUSE_MAP,
+       OMP_CLAUSE_TO, OMP_CLAUSE_FROM): Make sure OMP_CLAUSE_SIZE is
+       non-NULL.
+       <case OMP_CLAUSE_ALIGNED>: Gimplify OMP_CLAUSE_ALIGNED_ALIGNMENT.
+       (gimplify_adjust_omp_clauses_1): Make sure OMP_CLAUSE_SIZE is
+       non-NULL.
+       (gimplify_adjust_omp_clauses): Likewise.
+       * omp-low.c (lower_rec_simd_input_clauses,
+       lower_rec_input_clauses, expand_omp_simd): Handle non-constant
+       safelen the same as safelen(1).
+       * tree-nested.c (convert_nonlocal_omp_clauses,
+       convert_local_omp_clauses): Handle OMP_CLAUSE_ALIGNED.  For
+       OMP_CLAUSE_{MAP,TO,FROM} if not decl use walk_tree.
+       (convert_nonlocal_reference_stmt, convert_local_reference_stmt):
+       Fixup handling of GIMPLE_OMP_TARGET.
+       (convert_tramp_reference_stmt, convert_gimple_call): Handle
+       GIMPLE_OMP_TARGET.
+
+       2014-06-18  Jakub Jelinek  <jakub@redhat.com>
+
+       * gimplify.c (omp_notice_variable): If n is non-NULL
+       and no flags change in ORT_TARGET region, don't jump to
+       do_outer.
+       (struct gimplify_adjust_omp_clauses_data): New type.
+       (gimplify_adjust_omp_clauses_1): Adjust for data being
+       a struct gimplify_adjust_omp_clauses_data pointer instead
+       of tree *.  Pass pre_p as a new argument to
+       lang_hooks.decls.omp_finish_clause hook.
+       (gimplify_adjust_omp_clauses): Add pre_p argument, adjust
+       splay_tree_foreach to pass both list_p and pre_p.
+       (gimplify_omp_parallel, gimplify_omp_task, gimplify_omp_for,
+       gimplify_omp_workshare, gimplify_omp_target_update): Adjust
+       gimplify_adjust_omp_clauses callers.
+       * langhooks.c (lhd_omp_finish_clause): New function.
+       * langhooks-def.h (lhd_omp_finish_clause): New prototype.
+       (LANG_HOOKS_OMP_FINISH_CLAUSE): Define to lhd_omp_finish_clause.
+       * langhooks.h (struct lang_hooks_for_decls): Add a new
+       gimple_seq * argument to omp_finish_clause hook.
+       * omp-low.c (scan_sharing_clauses): Call scan_omp_op on
+       non-DECL_P OMP_CLAUSE_DECL if ctx->outer.
+       (scan_omp_parallel, lower_omp_for): When adding
+       _LOOPTEMP_ clause var, add it to outer ctx's decl_map
+       as identity.
+       * tree-core.h (OMP_CLAUSE_MAP_TO_PSET): New map kind.
+       * tree-nested.c (convert_nonlocal_omp_clauses,
+       convert_local_omp_clauses): Handle various OpenMP 4.0 clauses.
+       * tree-pretty-print.c (dump_omp_clause): Handle
+       OMP_CLAUSE_MAP_TO_PSET.
+
+       2014-06-10  Jakub Jelinek  <jakub@redhat.com>
+
+       PR fortran/60928
+       * omp-low.c (lower_rec_input_clauses) <case OMP_CLAUSE_LASTPRIVATE>:
+       Set lastprivate_firstprivate even if omp_private_outer_ref
+       langhook returns true.
+       <case OMP_CLAUSE_REDUCTION>: When calling omp_clause_default_ctor
+       langhook, call unshare_expr on new_var and call
+       build_outer_var_ref to get the last argument.
+
+       2014-05-11  Jakub Jelinek  <jakub@redhat.com>
+
+       * tree.h (OMP_CLAUSE_LINEAR_STMT): Define.
+       * tree.c (omp_clause_num_ops): Increase OMP_CLAUSE_LINEAR
+       number of operands to 3.
+       (walk_tree_1): Walk all operands of OMP_CLAUSE_LINEAR.
+       * tree-nested.c (convert_nonlocal_omp_clauses,
+       convert_local_omp_clauses): Handle OMP_CLAUSE_DEPEND.
+       * gimplify.c (gimplify_scan_omp_clauses): Handle
+       OMP_CLAUSE_LINEAR_STMT.
+       * omp-low.c (lower_rec_input_clauses): Fix typo.
+       (maybe_add_implicit_barrier_cancel, lower_omp_1): Add
+       cast between Fortran boolean_type_node and C _Bool if
+       needed.
+
+2014-06-30  Jason Merrill  <jason@redhat.com>
+
+       PR c++/51253
+       PR c++/61382
+       * gimplify.c (gimplify_arg): Non-static.
+       * gimplify.h: Declare it.
+
+2014-06-30  Marcus Shawcroft  <marcus.shawcroft@arm.com>
+
+       Backport from Mainline
+       2014-06-30  Marcus Shawcroft  <marcus.shawcroft@arm.com>
+
+       PR target/61633
+       * config/aarch64/aarch64.md (*aarch64_ashr_sisd_or_int_<mode>3):
+       Add alternative; make early clobber.  Adjust both split patterns
+       to use operand 0 as the working register.
+
+2014-06-30  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       * config/aarch64/iterators.md (VCOND): Handle SI and HI modes.
+       Update comments.
+       (VCONQ): Make comment more helpful.
+       (VCON): Delete.
+       * config/aarch64/aarch64-simd.md
+       (aarch64_sqdmulh_lane<mode>):
+       Use VCOND for operands 2.  Update lane checking and flipping logic.
+       (aarch64_sqrdmulh_lane<mode>): Likewise.
+       (aarch64_sq<r>dmulh_lane<mode>_internal): Likewise.
+       (aarch64_sqdmull2<mode>): Remove VCON, use VQ_HSI mode iterator.
+       (aarch64_sqdml<SBINQOPS:as>l_lane<mode>_internal, VD_HSI): Change mode
+       attribute of operand 3 to VCOND.
+       (aarch64_sqdml<SBINQOPS:as>l_lane<mode>_internal, SD_HSI): Likewise.
+       (aarch64_sqdml<SBINQOPS:as>l2_lane<mode>_internal): Likewise.
+       (aarch64_sqdmull_lane<mode>_internal, VD_HSI): Likewise.
+       (aarch64_sqdmull_lane<mode>_internal, SD_HSI): Likewise.
+       (aarch64_sqdmull2_lane<mode>_internal): Likewise.
+       (aarch64_sqdml<SBINQOPS:as>l_laneq<mode>_internal, VD_HSI: New
+       define_insn.
+       (aarch64_sqdml<SBINQOPS:as>l_laneq<mode>_internal, SD_HSI): Likewise.
+       (aarch64_sqdml<SBINQOPS:as>l2_laneq<mode>_internal): Likewise.
+       (aarch64_sqdmull_laneq<mode>_internal, VD_HSI): Likewise.
+       (aarch64_sqdmull_laneq<mode>_internal, SD_HSI): Likewise.
+       (aarch64_sqdmull2_laneq<mode>_internal): Likewise.
+       (aarch64_sqdmlal_lane<mode>): Change mode attribute of penultimate
+       operand to VCOND.  Update lane flipping and bounds checking logic.
+       (aarch64_sqdmlal2_lane<mode>): Likewise.
+       (aarch64_sqdmlsl_lane<mode>): Likewise.
+       (aarch64_sqdmull_lane<mode>): Likewise.
+       (aarch64_sqdmull2_lane<mode>): Likewise.
+       (aarch64_sqdmlal_laneq<mode>):
+       Replace VCON usage with VCONQ.
+       Emit aarch64_sqdmlal_laneq<mode>_internal insn.
+       (aarch64_sqdmlal2_laneq<mode>): Emit
+       aarch64_sqdmlal2_laneq<mode>_internal insn.
+       Replace VCON with VCONQ.
+       (aarch64_sqdmlsl2_lane<mode>): Replace VCON with VCONQ.
+       (aarch64_sqdmlsl2_laneq<mode>): Likewise.
+       (aarch64_sqdmull_laneq<mode>): Emit
+       aarch64_sqdmull_laneq<mode>_internal insn.
+       Replace VCON with VCONQ.
+       (aarch64_sqdmull2_laneq<mode>): Emit
+       aarch64_sqdmull2_laneq<mode>_internal insn.
+       (aarch64_sqdmlsl_laneq<mode>): Replace VCON usage with VCONQ.
+       * config/aarch64/arm_neon.h (vqdmlal_high_lane_s16): Change type
+       of 3rd argument to int16x4_t.
+       (vqdmlalh_lane_s16): Likewise.
+       (vqdmlslh_lane_s16): Likewise.
+       (vqdmull_high_lane_s16): Likewise.
+       (vqdmullh_lane_s16): Change type of 2nd argument to int16x4_t.
+       (vqdmlal_lane_s16): Don't create temporary int16x8_t value.
+       (vqdmlsl_lane_s16): Likewise.
+       (vqdmull_lane_s16): Don't create temporary int16x8_t value.
+       (vqdmlal_high_lane_s32): Change type 3rd argument to int32x2_t.
+       (vqdmlals_lane_s32): Likewise.
+       (vqdmlsls_lane_s32): Likewise.
+       (vqdmull_high_lane_s32): Change type 2nd argument to int32x2_t.
+       (vqdmulls_lane_s32): Likewise.
+       (vqdmlal_lane_s32): Don't create temporary int32x4_t value.
+       (vqdmlsl_lane_s32): Likewise.
+       (vqdmull_lane_s32): Don't create temporary int32x4_t value.
+       (vqdmulhh_lane_s16): Change type of second argument to int16x4_t.
+       (vqrdmulhh_lane_s16): Likewise.
+       (vqdmlsl_high_lane_s16): Likewise.
+       (vqdmulhs_lane_s32): Change type of second argument to int32x2_t.
+       (vqdmlsl_high_lane_s32): Likewise.
+       (vqrdmulhs_lane_s32): Likewise.
+
+2014-06-30  Thomas Preud'homme  <thomas.preudhomme@arm.com>
+
+       Backport from Mainline
+       2014-06-20  Jakub Jelinek  <jakub@redhat.com>
+       2014-06-11  Thomas Preud'homme  <thomas.preudhomme@arm.com>
+
+       PR tree-optimization/61306
+       * tree-ssa-math-opts.c (struct symbolic_number): Store type of
+       expression instead of its size.
+       (do_shift_rotate): Adapt to change in struct symbolic_number. Return
+       false to prevent optimization when the result is unpredictable due to
+       arithmetic right shift of signed type with highest byte is set.
+       (verify_symbolic_number_p): Adapt to change in struct symbolic_number.
+       (find_bswap_1): Likewise. Return NULL to prevent optimization when the
+       result is unpredictable due to sign extension.
+       (find_bswap): Adapt to change in struct symbolic_number.
+
+2014-06-27  Martin Jambor  <mjambor@suse.cz>
+
+       PR ipa/61160
+       * cgraphclones.c (duplicate_thunk_for_node): Removed parameter
+       args_to_skip, use those from node instead.  Copy args_to_skip and
+       combined_args_to_skip from node to the new thunk.
+       (redirect_edge_duplicating_thunks): Removed parameter args_to_skip.
+       (cgraph_create_virtual_clone): Moved computation of
+       combined_args_to_skip...
+       (cgraph_clone_node): ...here, simplify it to bitmap_ior..
+
+2014-06-27  Uros Bizjak  <ubizjak@gmail.com>
+
+       Backport from mainline
+       2014-06-26  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/61586
+       * config/alpha/alpha.c (alpha_handle_trap_shadows): Handle BARRIER RTX.
+
+2014-06-26  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       PR target/61542
+       * config/rs6000/vsx.md (vsx_extract_v4sf): Fix bug with element
+       extraction other than index 3.
+
+2014-06-26  Marc Glisse  <marc.glisse@inria.fr>
+
+       PR target/61503
+       * config/i386/i386.md (x86_64_shrd, x86_shrd,
+       ix86_rotr<dwi>3_doubleword): Replace ashiftrt with lshiftrt.
+
+2014-06-26  Martin Jambor  <mjambor@suse.cz>
+
+       Backport from mainline
+       * ipa-prop.c (ipa_impossible_devirt_target): No longer static,
+       renamed to ipa_impossible_devirt_target.  Fix typo.
+       * ipa-prop.h (ipa_impossible_devirt_target): Declare.
+       * ipa-cp.c (ipa_get_indirect_edge_target_1): Use
+       ipa_impossible_devirt_target.
+
+2014-06-24  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/61570
+       * config/i386/driver-i386.c (host_detect_local_cpu): For unknown
+       model family 6 CPU with has_longmode never use a CPU without
+       64-bit support.
+
+       * gimplify.c (gimplify_omp_for): For #pragma omp for simd iterator
+       not mentioned in clauses use private clause if the iterator is
+       declared in #pragma omp for simd, and when adding lastprivate
+       instead, add it to the outer #pragma omp for too.  Diagnose
+       if the variable is private in outer context.  For simd collapse > 1
+       loops, replace all iterators with temporaries.
+       * omp-low.c (lower_rec_input_clauses): Handle LINEAR clause the
+       same even in collapse > 1 loops.
+
+2014-06-23  Alan Modra  <amodra@gmail.com>
+
+       PR bootstrap/61583
+       * tree-vrp.c (remove_range_assertions): Do not set is_unreachable
+       to zero on debug statements.
+
+2014-06-10  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       * config/aarch64/aarch64-simd.md (aarch64_sqdmulh_lane<mode>):
+       New expander.
+       (aarch64_sqrdmulh_lane<mode>): Likewise.
+       (aarch64_sq<r>dmulh_lane<mode>): Rename to...
+       (aarch64_sq<r>dmulh_lane<mode>_interna): ...this.
+       (aarch64_sqdmulh_laneq<mode>): New expander.
+       (aarch64_sqrdmulh_laneq<mode>): Likewise.
+       (aarch64_sq<r>dmulh_laneq<mode>): Rename to...
+       (aarch64_sq<r>dmulh_laneq<mode>_internal): ...this.
+       (aarch64_sqdmulh_lane<mode>): New expander.
+       (aarch64_sqrdmulh_lane<mode>): Likewise.
+       (aarch64_sq<r>dmulh_lane<mode>): Rename to...
+       (aarch64_sq<r>dmulh_lane<mode>_internal): ...this.
+       (aarch64_sqdmlal_lane<mode>): Add lane flip for big-endian.
+       (aarch64_sqdmlal_laneq<mode>): Likewise.
+       (aarch64_sqdmlsl_lane<mode>): Likewise.
+       (aarch64_sqdmlsl_laneq<mode>): Likewise.
+       (aarch64_sqdmlal2_lane<mode>): Likewise.
+       (aarch64_sqdmlal2_laneq<mode>): Likewise.
+       (aarch64_sqdmlsl2_lane<mode>): Likewise.
+       (aarch64_sqdmlsl2_laneq<mode>): Likewise.
+       (aarch64_sqdmull_lane<mode>): Likewise.
+       (aarch64_sqdmull_laneq<mode>): Likewise.
+       (aarch64_sqdmull2_lane<mode>): Likewise.
+       (aarch64_sqdmull2_laneq<mode>): Likewise.
+
+2014-06-20  Martin Jambor  <mjambor@suse.cz>
+
+       PR ipa/61540
+       * ipa-prop.c (impossible_devirt_target): New function.
+       (try_make_edge_direct_virtual_call): Use it, also instead of
+       asserting.
+
+2014-06-20  Martin Jambor  <mjambor@suse.cz>
+
+       PR ipa/61211
+       * cgraph.c (clone_of_p): Allow skipped_branch to deal with
+       expanded clones.
+
+2014-06-20  Chung-Lin Tang  <cltang@codesourcery.com>
+
+       Backport from mainline
+
+       2014-06-20  Julian Brown  <julian@codesourcery.com>
+                   Chung-Lin Tang  <cltang@codesourcery.com>
+
+       * config/arm/arm.c (arm_output_mi_thunk): Fix offset for
+       TARGET_THUMB1_ONLY. Add comments.
+
+2014-06-18  Uros Bizjak  <ubizjak@gmail.com>
+
+       Backport from mainline
+       2014-06-16  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/i386.c (decide_alg): Correctly handle
+       maximum size of stringop algorithm.
+
+2014-06-18  Richard Henderson  <rth@redhat.com>
+
+       PR target/61545
+       * config/aarch64/aarch64.md (tlsdesc_small): Clobber CC_REGNUM.
+
+2014-06-17  Yufeng Zhang  <yufeng.zhang@arm.com>
+
+       PR target/61483
+       * config/aarch64/aarch64.c (aarch64_layout_arg): Add new local
+       variable 'size'; calculate 'size' right in the front; use
+       'size' to compute 'nregs' (when 'allocate_ncrn != 0') and
+       pcum->aapcs_stack_words.
+
+2014-06-17  Nick Clifton  <nickc@redhat.com>
+
+       * config/msp430/msp430.md (mulhisi3): Add a NOP after the DINT.
+       (umulhi3, mulsidi3, umulsidi3): Likewise.
+
+2014-06-17  Uros Bizjak  <ubizjak@gmail.com>
+
+       Backport from mainline
+       2014-06-06  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/61423
+       * config/i386/i386.md (*floatunssi<mode>2_i387_with_xmm): New
+       define_insn_and_split pattern, merged from *floatunssi<mode>2_1
+       and corresponding splitters.  Zero extend general register
+       or memory input operand to XMM temporary.  Enable for
+       TARGET_SSE2 and TARGET_INTER_UNIT_MOVES_TO_VEC only.
+       (floatunssi<mode>2): Update expander predicate.
+
+2014-06-16  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR rtl-optimization/61325
+       * lra-constraints.c (valid_address_p): Add forward declaration.
+       (simplify_operand_subreg): Check address validity before and after
+       alter_reg of memory subreg.
+
+2014-06-18  Jakub Jelinek  <jakub@redhat.com>
+
+       PR plugins/45078
+       * config.gcc (arm*-*-linux-*): Include vxworks-dummy.h in tm_file.
+
+2014-06-13  Peter Bergner  <bergner@vnet.ibm.com>
+
+       Backport from mainline
+
+       2014-06-13  Peter Bergner  <bergner@vnet.ibm.com>
+       PR target/61415
+       * config/rs6000/rs6000-builtin.def (BU_MISC_1): Delete.
+       (BU_MISC_2): Rename to ...
+       (BU_LDBL128_2): ... this.
+       * config/rs6000/rs6000.h (RS6000_BTM_LDBL128): New define.
+       (RS6000_BTM_COMMON): Add RS6000_BTM_LDBL128.
+       * config/rs6000/rs6000.c (rs6000_builtin_mask_calculate): Handle
+       RS6000_BTM_LDBL128.
+       (rs6000_invalid_builtin): Add long double 128-bit builtin support.
+       (rs6000_builtin_mask_names): Add RS6000_BTM_LDBL128.
+       * config/rs6000/rs6000.md (unpacktf_0): Remove define)expand.
+       (unpacktf_1): Likewise.
+       * doc/extend.texi (__builtin_longdouble_dw0): Remove documentation.
+       (__builtin_longdouble_dw1): Likewise.
+       * doc/sourcebuild.texi (longdouble128): Document.
+
+2014-06-13  Jeff Law  <law@redhat.com>
+
+       Backports from mainline:
+       2014-06-13  Jeff Law  <law@redhat.com>
+
+       PR rtl-optimization/61094
+       PR rtl-optimization/61446
+       * ree.c (combine_reaching_defs): Get the mode for the copy from
+       the extension insn rather than the defining insn.
+
+       2014-06-02  Jeff Law  <law@redhat.com>
+
+       PR rtl-optimization/61094
+       * ree.c (combine_reaching_defs): Do not reextend an insn if it
+       was marked as do_no_reextend.  If a copy is needed to eliminate
+       an extension, then mark it as do_not_reextend.
+
+2014-06-13  Martin Jambor  <mjambor@suse.cz>
+
+       PR ipa/61186
+       * ipa-devirt.c (possible_polymorphic_call_targets): Store NULL to
+       cache_token if returning early.
+
+2014-06-12  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/61486
+       * gimplify.c (struct gimplify_omp_ctx): Add distribute field.
+       (gimplify_adjust_omp_clauses): Don't or in GOVD_LASTPRIVATE
+       if outer combined construct is distribute.
+       (gimplify_omp_for): For OMP_DISTRIBUTE set
+       gimplify_omp_ctxp->distribute.
+       * omp-low.c (scan_sharing_clauses) <case OMP_CLAUSE_SHARED>: For
+       GIMPLE_OMP_TEAMS, if decl isn't global in outer context, record
+       mapping into decl map.
+
+2014-06-12  Jeff Law  <law@redhat.com>
+
+       Backports from mainline:
+
+       2014-06-12  Jeff Law  <law@redhat.com>
+
+       PR tree-optimization/61009
+       * tree-ssa-threadedge.c (thread_through_normal_block): Correct return
+       value when we stop processing a block due to problematic PHIs.
+
+       2014-06-05  Jeff Law  <law@redhat.com>
+
+       PR tree-optimization/61289
+       * tree-ssa-threadedge.c (invalidate_equivalences): Remove SRC_MAP and
+       DST_MAP parameters.   Invalidate by walking all the SSA_NAME_VALUES
+       looking for those which match LHS.  All callers changed.
+       (record_temporary_equivalences_from_phis): Remove SRC_MAP and DST_MAP
+       parameters and code which manipulated them.  All callers changed.
+       (record_temporary_equivalences_from_stmts_at_dest): Remove SRC_MAP
+       and DST_MAP parameters.  Simplify invalidation code by just calling
+       invalidate_equivalences.  All callers changed.
+       (thread_across_edge): Simplify now that we don't need to maintain
+       the map of equivalences to invalidate.
+
+2014-06-12  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * tree-core.h (DECL_NONALIASED): Use proper spelling in comment.
+
+2014-06-12  Georg-Johann Lay  <avr@gjlay.de>
+
+       Backport from 2014-05-14 trunk r210418
+       * config/avr/avr.h (REG_CLASS_CONTENTS): Use unsigned suffix for
+       shifted values to avoid build warning.
+
+2014-06-12  Georg-Johann Lay  <avr@gjlay.de>
+
+       Backport from 2014-05-09 trunk r210272
+
+       * config/avr/avr-fixed.md (round<mode>3): Use -1U instead of -1 in
+       unsigned int initializers for regno_in, regno_out.
+
+       Backport from 2014-06-12 trunk r211491
+
+       PR target/61443
+       * config/avr/avr.md (push<mode>1): Avoid (subreg(mem)) when
+       loading from address spaces.
+
+2014-06-12  Alan Modra  <amodra@gmail.com>
+
+       PR target/61300
+       * doc/tm.texi.in (INCOMING_REG_PARM_STACK_SPACE): Document.
+       * doc/tm.texi: Regenerate.
+       * function.c (INCOMING_REG_PARM_STACK_SPACE): Provide default.
+       Use throughout in place of REG_PARM_STACK_SPACE.
+       * config/rs6000/rs6000.c (rs6000_reg_parm_stack_space): Add
+       "incoming" param.  Pass to rs6000_function_parms_need_stack.
+       (rs6000_function_parms_need_stack): Add "incoming" param, ignore
+       prototype_p when incoming.  Use function decl when incoming
+       to handle K&R style functions.
+       * config/rs6000/rs6000.h (REG_PARM_STACK_SPACE): Adjust.
+       (INCOMING_REG_PARM_STACK_SPACE): Define.
+
+2014-06-11  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/61452
+       * tree-ssa-sccvn.c (visit_phi): Remove pointless setting of
+       expr and has_constants in case we found a leader.
+       (simplify_binary_expression): Always valueize operands first.
+       (simplify_unary_expression): Likewise.
+
+2014-06-11  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/61456
+       * tree-ssa-alias.c (nonoverlapping_component_refs_of_decl_p):
+       Do not use the main variant for the type comparison.
+
+2014-06-10  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       * doc/arm-acle-intrinsics.texi: Specify when CRC32 intrinsics are
+       available.
+       Simplify description of __crc32d and __crc32cd intrinsics.
+       * doc/extend.texi (ARM ACLE Intrinsics): Remove comment about CRC32
+       availability.
+
+2014-06-07  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * tree-ssa-tail-merge.c (same_succ_hash): Hash the static chain of a
+       call statement, if any.
+       (gimple_equal_p) <GIMPLE_CALL>: Compare the static chain of the call
+       statements, if any.  Tidy up.
+
+2014-06-06  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       Back port from trunk
+       2014-06-06  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       PR target/61431
+       * config/rs6000/vsx.md (VSX_LE): Split VSX_D into 2 separate
+       iterators, VSX_D that handles 64-bit types, and VSX_LE that
+       handles swapping the two 64-bit double words on little endian
+       systems.  Include V1TImode and optionally TImode in VSX_LE so that
+       these types are properly swapped.  Change all of the insns and
+       splits that do the 64-bit swaps to use VSX_LE.
+       (vsx_le_perm_load_<mode>): Likewise.
+       (vsx_le_perm_store_<mode>): Likewise.
+       (splitters for little endian memory operations): Likewise.
+       (vsx_xxpermdi2_le_<mode>): Likewise.
+       (vsx_lxvd2x2_le_<mode>): Likewise.
+       (vsx_stxvd2x2_le_<mode>): Likewise.
+
+2014-06-06  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR rtl-optimization/61325
+       * lra-constraints.c (process_address_1): Check scale equal to one
+       to prevent transformation: base + scale * index => base + new_reg.
+
+2014-06-05  Martin Jambor  <mjambor@suse.cz>
+
+       PR ipa/61393
+       * ipa-cp.c (determine_versionability): Pretend that tm_clones are
+       not versionable.
+
+2014-06-04  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/61383
+       * tree-ssa-ifcombine.c (bb_no_side_effects_p): Make sure
+       stmts can't trap.
+
+2014-06-02  Jason Merrill  <jason@redhat.com>
+
+       PR c++/61020
+       * varpool.c (ctor_for_folding): Handle uninitialized vtables.
+
+2014-06-03  Martin Jambor  <mjambor@suse.cz>
+
+       PR ipa/61160
+       * ipa-cp.c (cgraph_edge_brings_value_p): Handle edges leading to
+       thunks.
+
+2014-06-03  Andrey Belevantsev  <abel@ispras.ru>
+
+       Backport from mainline
+       2014-05-14  Andrey Belevantsev  <abel@ispras.ru>
+
+       PR rtl-optimization/60866
+       * sel-sched-ir (sel_init_new_insn): New parameter old_seqno.
+       Default it to -1.  Pass it down to init_simplejump_data.
+       (init_simplejump_data): New parameter old_seqno.  Pass it down
+       to get_seqno_for_a_jump.
+       (get_seqno_for_a_jump): New parameter old_seqno.  Use it for
+       initializing new jump seqno as a last resort.  Add comment.
+       (sel_redirect_edge_and_branch): Save old seqno of the conditional
+       jump and pass it down to sel_init_new_insn.
+       (sel_redirect_edge_and_branch_force): Likewise.
+
+2014-06-03  Andrey Belevantsev  <abel@ispras.ru>
+
+       Backport from mainline
+       2014-05-14  Andrey Belevantsev  <abel@ispras.ru>
+
+       PR rtl-optimization/60901
+       * config/i386/i386.c (ix86_dependencies_evaluation_hook): Check that
+       bb predecessor belongs to the same scheduling region.  Adjust comment.
+
+2014-06-03  Uros Bizjak  <ubizjak@gmail.com>
+
+       Backport from mainline
+       2014-06-02  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/61239
+       * config/i386/i386.c (ix86_expand_vec_perm) [case V32QImode]: Use
+       GEN_INT (-128) instead of GEN_INT (128) to set MSB of QImode constant.
+
+2014-05-29  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR rtl-optimization/61325
+       * lra-constraints.c (process_address): Rename to
+       process_address_1.
+       (process_address): New function.
+
+2014-05-29  Uros Bizjak  <ubizjak@gmail.com>
+
+       Backport from mainline
+       2014-05-26  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/61271
+       * config/i386/i386.c (ix86_rtx_costs)
+       <case CONST_INT, case CONST, case LABEL_REF, case SYMBOL_REF>:
+       Fix condition.
+
+2014-05-28  Eric Botcazou  <ebotcazou@adacore.com>
+
+       Backport from mainline
+       2014-05-27  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * double-int.c (div_and_round_double) <ROUND_DIV_EXPR>: Use the proper
+       predicate to detect a negative quotient.
+
+2014-05-28  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2014-05-28  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/61045
+       * fold-const.c (fold_comparison): When folding
+       X +- C1 CMP Y +- C2 to X CMP Y +- C2 +- C1 also ensure
+       the sign of the remaining constant operand stays the same.
+
+       2014-05-05  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/61010
+       * fold-const.c (fold_binary_loc): Consistently avoid
+       canonicalizing X & CST away from a CST that is the mask
+       of a mode.
+
+       2014-04-28  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/60979
+       * graphite-scop-detection.c (scopdet_basic_block_info): Reject
+       SCOPs that end in a block with a successor with abnormal
+       predecessors.
+
+2014-05-28  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       * configure.ac ($gcc_cv_ld_clearcap): New test.
+       * configure: Regenerate.
+       * config.in: Regenerate.
+       * config/sol2.opt (mclear-hwcap): New option.
+       * config/sol2.h (LINK_CLEARCAP_SPEC): Define.
+       * config/sol2-clearcap.map: Moved here from
+       testsuite/gcc.target/i386/clearcap.map.
+       * config/sol2-clearcapv2.map: Move here from
+       gcc.target/i386/clearcapv2.map.
+       * config/t-sol2 (install): Depend on install-clearcap-map.
+       (install-clearcap-map): New target.
+       * doc/invoke.texi (Option Summary, Solaris 2 Options): Document
+       -mclear-hwcap.
+
+2014-05-28  Georg-Johann Lay  <avr@gjlay.de>
+
+       PR libgcc/61152
+       * config/dbx.h (License): Add Runtime Library Exception.
+       * config/newlib-stdint.h (License): Same.
+       * config/rtems.h (License): Same
+       * config/initfini-array.h (License): Same
+       * config/v850/v850.h (License): Same.
+       * config/v850/v850-opts.h (License): Same
+       * config/v850/rtems.h (License): Same.
+
+2014-05-28  Georg-Johann Lay  <avr@gjlay.de>
+
+       PR target/61044
+       * doc/extend.texi (Local Labels): Note that label differences are
+       not supported for AVR.
+
+2014-05-27  Georg-Johann Lay  <avr@gjlay.de>
+
+       Backport from 2014-05-12 mainline r210322.
+       Backport from 2014-05-27 mainline r210959, r210969.
+
+       PR libgcc/61152
+       * config/arm/arm.h (License): Add GCC Runtime Library Exception.
+       * config/arm/arm-cores.def (License): Same.
+       * config/arm/arm-opts.h (License): Same.
+       * config/arm/aout.h (License): Same.
+       * config/arm/bpabi.h (License): Same.
+       * config/arm/elf.h (License): Same.
+       * config/arm/linux-elf.h (License): Same.
+       * config/arm/linux-gas.h (License): Same.
+       * config/arm/netbsd-elf.h (License): Same.
+       * config/arm/uclinux-eabi.h (License): Same.
+       * config/arm/uclinux-elf.h (License): Same.
+       * config/arm/vxworks.h (License): Same.
+
+2014-05-26  Michael Tautschnig  <mt@debian.org>
+
+       PR target/61249
+       * doc/extend.texi (X86 Built-in Functions): Fix parameter lists of
+       __builtin_ia32_vfrczs[sd] and __builtin_ia32_mpsadbw256.
+
+2014-05-22  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR rtl-optimization/61215
+       * lra-elelimination.c (lra_eliminate_regs_1): Don't use
+       simplify_gen_subreg until final substitution.
+
+2014-05-23  Alan Modra  <amodra@gmail.com>
+
+       PR target/61231
+       * config/rs6000/rs6000.c (mem_operand_gpr): Handle SImode.
+       * config/rs6000/rs6000.md (extendsidi2_lfiwax, extendsidi2_nocell):
+       Use "Y" constraint rather than "m".
+
+2014-05-22  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR rtl-optimization/60969
+       * ira-costs.c (record_reg_classes): Process NO_REGS for matching
+       constraints.  Set up mem cost for NO_REGS case.
+
+2014-05-22  Peter Bergner  <bergner@vnet.ibm.com>
+
+       * config/rs6000/htm.md (ttest): Use correct shift value to get CR0.
+
+2014-05-22  Richard Earnshaw  <rearnsha@arm.com>
+
+       PR target/61208
+       * arm.md (arm_cmpdi_unsigned): Fix length calculation for Thumb2.
+
+2014-05-22  Nick Clifton  <nickc@redhat.com>
+
+       * config/msp430/msp430.h (ASM_SPEC): Add spaces after inserted options.
+
+2014-05-22  Jakub Jelinek  <jakub@redhat.com>
+
+       * tree-streamer-in.c (unpack_ts_real_cst_value_fields): Make sure
+       all padding bits in REAL_VALUE_TYPE are cleared.
+
+2014-05-21  Guozhi Wei  <carrot@google.com>
+
+       PR target/61202
+       * config/aarch64/arm_neon.h (vqdmulh_n_s16): Change the last operand's
+       constraint.
+       (vqdmulhq_n_s16): Likewise.
+
+2014-05-21  Martin Jambor  <mjambor@suse.cz>
+
+       * doc/invoke.texi (Optimize Options): Document parameters
+       ipa-cp-eval-threshold, ipa-max-agg-items, ipa-cp-loop-hint-bonus and
+       ipa-cp-array-index-hint-bonus.
+
+2014-05-21  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/61252
+       * omp-low.c (handle_simd_reference): New function.
+       (lower_rec_input_clauses): Use it.  Defer adding reference
+       initialization even for reduction without placeholder if in simd,
+       handle it properly later on.
+
+2014-05-20  Jan Hubicka  <hubicka@ucw.cz>
+
+       PR bootstrap/60984
+       * ipa-inline-transform.c (inline_call): Use add CALLEE_REMOVED
+       parameter.
+       * ipa-inline.c (inline_to_all_callers): If callee was removed; return.
+       (ipa_inline): Loop inline_to_all_callers until no more aliases
+       are removed.
+
+2014-05-20  Jan Hubicka  <hubicka@ucw.cz>
+
+       PR lto/60820
+       * varpool.c (varpool_remove_node): Do not alter decls when streaming.
+
+2014-05-20  DJ Delorie  <dj@redhat.com>
+
+       * config/msp430/msp430.md (split): Don't allow subregs when
+       splitting SImode adds.
+       (andneghi): Fix subtraction logic.
+       * config/msp430/predicates.md (msp430_nonsubreg_or_imm_operand): New.
+
+2014-05-20  Nick Clifton  <nickc@redhat.com>
+
+       * config/msp430/msp430.c (TARGET_GIMPLIFY_VA_ARG_EXPR): Define.
+       (msp430_gimplify_va_arg_expr): New function.
+       (msp430_print_operand): Handle (CONST (ZERO_EXTRACT)).
+
+       * config/msp430/msp430.md (zero_extendpsisi2): Use + constraint on
+       operand 0 in order to prevent confusion about the number of
+       registers involved.
+
+2014-05-20  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       * config/arm/arm.md (arith_shiftsi): Do not predicate for
+       arm_restrict_it.
+
+2014-05-19  Richard Earnshaw  <rearnsha@arm.com>
+
+       * arm.c (thumb1_reorg): When scanning backwards skip anything
+       that's not a proper insn.
+
+2014-05-17  Jan Hubicka  <hubicka@ucw.cz>
+
+       * ipa.c (symtab_remove_unreachable_nodes): Remove
+       symbol from comdat group if its body was eliminated.
+       (comdat_can_be_unshared_p_1): Static symbols can always be privatized.
+       * symtab.c (symtab_remove_from_same_comdat_group): Break out from ...
+       (symtab_unregister_node): ... this one.
+       (verify_symtab_base): More strict checking of comdats.
+       * cgraph.h (symtab_remove_from_same_comdat_group): Declare.
+
+2014-05-17  Jan Hubicka  <hubicka@ucw.cz>
+
+       * opts.c (common_handle_option): Disable -fipa-reference coorectly
+       with -fuse-profile.
+
+2014-05-17  Jan Hubicka  <hubicka@ucw.cz>
+
+       PR ipa/60854
+       * ipa.c (symtab_remove_unreachable_nodes): Mark targets of
+       external aliases alive, too.
+
+2014-05-17  Uros Bizjak  <ubizjak@gmail.com>
+
+       * doc/invoke.texi (free): Mention Alpha.  Also enabled at -Os.
+
+2014-05-17  Uros Bizjak  <ubizjak@gmail.com>
+
+       Backport from mainline
+       2014-04-25  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/60969
+       * config/i386/i386.md (*movsf_internal): Set MODE to SI for
+       alternative 12.
+
+2014-05-16  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR rtl-optimization/60969
+       * ira-costs.c (record_reg_classes): Allow only memory for pseudo.
+       Calculate costs for this case.
+
+2014-05-15  Peter Bergner  <bergner@vnet.ibm.com>
+
+       PR target/61193
+       * config/rs6000/htmxlintrin.h (_HTM_TBEGIN_STARTED): New define.
+       (__TM_simple_begin): Use it.
+       (__TM_begin): Likewise.
+
+2014-05-15  Martin Jambor  <mjambor@suse.cz>
+
+       PR ipa/61085
+       * ipa-prop.c (update_indirect_edges_after_inlining): Check
+       type_preserved flag when the indirect edge is polymorphic.
+
+2014-05-15  Martin Jambor  <mjambor@suse.cz>
+
+       PR ipa/60897
+       * ipa-prop.c (ipa_modify_formal_parameters): Reset DECL_LANG_SPECIFIC.
+
+2014-05-15  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/61158
+       * fold-const.c (fold_binary_loc): If X is zero-extended and
+       shiftc >= prec, make sure zerobits is all ones instead of
+       invoking undefined behavior.
+
+2014-05-14  Cary Coutant  <ccoutant@google.com>
+
+       PR debug/61013
+       * opts.c (common_handle_option): Don't special-case "-g".
+       (set_debug_level): Default to at least level 2 with "-g".
+
+2014-05-14  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * config/sparc/sparc-protos.h (sparc_absnegfloat_split_legitimate):
+       Delete.
+       * config/sparc/sparc.c (sparc_absnegfloat_split_legitimate): Likewise.
+       * config/sparc/sparc.md (fptype_ut699): New attribute.
+       (in_branch_delay): Return false if -mfix-ut699 is specified and
+       fptype_ut699 is set to single.
+       (truncdfsf2): Add fptype_ut699 attribute.
+       (fix_truncdfsi2): Likewise.
+       (floatsisf2): Change fptype attribute.
+       (fix_truncsfsi2): Likewise.
+       (negtf2_notv9): Delete.
+       (negtf2_v9): Likewise.
+       (negtf2_hq): New instruction.
+       (negtf2): New instruction and splitter.
+       (negdf2_notv9): Rewrite.
+       (abstf2_notv9): Delete.
+       (abstf2_hq_v9): Likewise.
+       (abstf2_v9): Likewise.
+       (abstf2_hq): New instruction.
+       (abstf2): New instruction and splitter.
+       (absdf2_notv9): Rewrite.
+
+2014-05-14  Matthias Klose  <doko@ubuntu.com>
+
+       Revert:
+       2014-05-08  Manuel López-Ibáñez  <manu@gcc.gnu.org>
+                   Matthias Klose  <doko@ubuntu.com>
+
+       PR driver/61106
+       * optc-gen.awk: Fix option handling for -Wunused-parameter.
+
+2014-05-13  Peter Bergner  <bergner@vnet.ibm.com>
+
+       * doc/sourcebuild.texi: (dfp_hw): Document.
+       (p8vector_hw): Likewise.
+       (powerpc_eabi_ok): Likewise.
+       (powerpc_elfv2): Likewise.
+       (powerpc_htm_ok): Likewise.
+       (ppc_recip_hw): Likewise.
+       (vsx_hw): Likewise.
+
+2014-05-13  Jeff Law  <law@redhat.com>
+
+       Backports fromm mainline:
+
+       2014-05-08  Jeff Law  <law@redhat.com>
+
+       PR tree-optimization/61009
+       * tree-ssa-threadedge.c (thread_through_normal_block): Return a
+       tri-state rather than a boolean.  When a block is too big to
+       thread through, inform caller via negative return value.
+       (thread_across_edge): If a block was too big for normal threading,
+       then it's too big for a joiner too, so remove temporary equivalences
+       and return immediately.
+
+       2014-04-28  Jeff Law  <law@redhat.com>
+
+       PR tree-optimization/60902
+       * tree-ssa-threadedge.c
+       (record_temporary_equivalences_from_stmts_at_dest): Only iterate
+       over real defs when invalidating outputs from statements that do not
+       produce useful outputs for threading.
+
+       2014-04-23  Jeff Law  <law@redhat.com>
+
+       PR tree-optimization/60902
+       * tree-ssa-threadedge.c
+       (record_temporary_equivalences_from_stmts_at_dest): Make sure to
+       invalidate outputs from statements that do not produce useful
+       outputs for threading.
+
+2014-05-13  Richard Biener  <rguenther@suse.de>
+
+       PR ipa/60973
+       * tree-inline.c (remap_gimple_stmt): Clear tail call flag,
+       it needs revisiting whether the call still may be tail-called.
+
+2014-05-13  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/61060
+       * config/i386/i386.c (ix86_expand_set_or_movmem): If count_exp
+       is const0_rtx, return immediately.  Don't test count == 0 when
+       it is always true.
+
+2014-05-12  Senthil Kumar Selvaraj  <senthil_kumar.selvaraj@atmel.com>
+
+       Backport from mainline
+       2014-05-12  Senthil Kumar Selvaraj  <senthil_kumar.selvaraj@atmel.com>
+
+       PR target/60991
+       * config/avr/avr.c (avr_out_store_psi): Use correct constant
+       to restore Y.
+
+2014-05-09  Uros Bizjak  <ubizjak@gmail.com>
+
+       Backport from mainline
+       2014-05-08  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/61092
+       * config/alpha/alpha.c: Include gimple-iterator.h.
+       (alpha_gimple_fold_builtin): New function.  Move
+       ALPHA_BUILTIN_UMULH folding from ...
+       (alpha_fold_builtin): ... here.
+       (TARGET_GIMPLE_FOLD_BUILTIN): New define.
+
+2014-05-09  Pitchumani Sivanupandi  <Pitchumani.S@atmel.com>
+
+       Backport from 2014-04-16 trunk r209446
+       2014-04-16  Pitchumani Sivanupandi  <Pitchumani.S@atmel.com>
+
+       * config/avr/avr-mcus.def: Correct typo for atxmega256a3bu macro.
+
+2014-05-09  Georg-Johann Lay  <avr@gjlay.de>
+
+       Backport from 2014-05-09 trunk r210267
+
+       PR target/61055
+       * config/avr/avr.md (cc): Add new attribute set_vzn.
+       (addqi3, addqq3, adduqq3, subqi3, subqq3, subuqq3, negqi2) [cc]:
+       Set cc insn attribute to set_vzn instead of set_zn for alternatives
+       with INC, DEC or NEG.
+       * config/avr/avr.c (avr_notice_update_cc): Handle SET_VZN.
+       (avr_out_plus_1): ADIW sets cc0 to CC_SET_CZN.
+       INC, DEC and ADD+ADC set cc0 to CC_CLOBBER.
+
+2014-05-08  Manuel López-Ibáñez  <manu@gcc.gnu.org>
+           Matthias Klose  <doko@ubuntu.com>
+
+       PR driver/61106
+       * optc-gen.awk: Fix option handling for -Wunused-parameter.
+
+2014-05-08  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/59952
+       * config/i386/i386.c (PTA_HASWELL): Remove PTA_RTM.
+
+2014-05-05  Marek Polacek  <polacek@redhat.com>
+
+       Back port from mainline
+       2014-05-05  Marek Polacek  <polacek@redhat.com>
+
+       PR driver/61065
+       * opts.c (common_handle_option): Call error_at instead of warning_at.
+
+2014-05-04  Jan Hubicka  <hubicka@ucw.cz>
+
+       PR ipa/60965
+       * ipa-devirt.c (get_class_context): Allow POD to change to non-POD.
+
+2014-05-04  Peter Bergner  <bergner@vnet.ibm.com>
+
+       * config/rs6000/rs6000.h (RS6000_BTM_HARD_FLOAT): New define.
+       (RS6000_BTM_COMMON): Add RS6000_BTM_HARD_FLOAT.
+       (TARGET_EXTRA_BUILTINS): Add TARGET_HARD_FLOAT.
+       * config/rs6000/rs6000-builtin.def (BU_MISC_1):
+       Use RS6000_BTM_HARD_FLOAT.
+       (BU_MISC_2): Likewise.
+       * config/rs6000/rs6000.c (rs6000_builtin_mask_calculate): Handle
+       RS6000_BTM_HARD_FLOAT.
+       (rs6000_option_override_internal): Enforce -mhard-float if -mhard-dfp
+       is explicitly used.
+       (rs6000_invalid_builtin): Add hard floating builtin support.
+       (rs6000_expand_builtin): Relax the gcc_assert to allow the new
+       hard float builtins.
+       (rs6000_builtin_mask_names): Add RS6000_BTM_HARD_FLOAT.
+
+2014-05-03  Joey Ye  <joey.ye@arm.com>
+
+       Backport from mainline r209463
+       2014-04-17  Joey Ye  <joey.ye@arm.com>
+
+       * opts.c (OPT_fif_conversion, OPT_fif_conversion2): Disable for Og.
+
+2014-05-03  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       Back port from mainline
+       PR target/61026
+       * config/sh/sh.c: Include stdlib headers before everything else.
+
+2014-05-02  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       PR tree-optimization/60930
+       * gimple-ssa-strength-reduction.c (create_mul_imm_cand):  Reject
+       creating a multiply candidate by folding two constant
+       multiplicands when the result overflows.
+
+2014-05-02  Jakub Jelinek  <jakub@redhat.com>
+
+       * gimplify.c (gimplify_adjust_omp_clauses_1): Handle
+       GOVD_FIRSTPRIVATE | GOVD_LASTPRIVATE.
+       (gimplify_adjust_omp_clauses): Simd region is never
+       directly nested in combined parallel.  Instead, for linear
+       with copyin/copyout, if in combined for simd loop, make decl
+       firstprivate/lastprivate on OMP_FOR.
+       * omp-low.c (expand_omp_for_generic, expand_omp_for_static_nochunk,
+       expand_omp_for_static_chunk): When setting endvar, also set
+       fd->loop.v to the same value.
+
+2014-05-02  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       Back port from mainline
+       2014-04-24  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       * config/aarch64/aarch64.h (TARGET_CPU_CPP_BUILTINS): Check
+       TARGET_SIMD rather than TARGET_GENERAL_REGS_ONLY.
+       (TARGET_SIMD): Take AARCH64_ISA_SIMD into account.
+       (TARGET_FLOAT): Take AARCH64_ISA_FP into account.
+       (TARGET_CRYPTO): Take TARGET_SIMD into account.
+
+2014-04-30  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       Back port from mainline
+       2014-04-24  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       * doc/extend.texi (PowerPC Built-in Functions): Document new
+       powerpc extended divide, bcd, pack/unpack 128-bit, builtin
+       functions.
+       (PowerPC AltiVec/VSX Built-in Functions): Likewise.
+
+       * config/rs6000/predicates.md (const_0_to_3_operand): New
+       predicate to match 0..3 integer constants.
+
+       * config/rs6000/rs6000-builtin.def (BU_DFP_MISC_1): Add new macros
+       to support adding miscellaneous builtin functions.
+       (BU_DFP_MISC_2): Likewise.
+       (BU_P7_MISC_1): Likewise.
+       (BU_P7_MISC_2): Likewise.
+       (BU_P8V_MISC_3): Likewise.
+       (BU_MISC_1): Likewise.
+       (BU_MISC_2): Likewise.
+       (DIVWE): Add extended divide builtin functions.
+       (DIVWEO): Likewise.
+       (DIVWEU): Likewise.
+       (DIVWEUO): Likewise.
+       (DIVDE): Likewise.
+       (DIVDEO): Likewise.
+       (DIVDEU): Likewise.
+       (DIVDEUO): Likewise.
+       (DXEX): Add decimal floating-point builtin functions.
+       (DXEXQ): Likewise.
+       (DDEDPD): Likewise.
+       (DDEDPDQ): Likewise.
+       (DENBCD): Likewise.
+       (DENBCDQ): Likewise.
+       (DIEX): Likewise.
+       (DIEXQ): Likewise.
+       (DSCLI): Likewise.
+       (DSCLIQ): Likewise.
+       (DSCRI): Likewise.
+       (DSCRIQ): Likewise.
+       (CDTBCD): Add new BCD builtin functions.
+       (CBCDTD): Likewise.
+       (ADDG6S): Likewise.
+       (BCDADD): Likewise.
+       (BCDADD_LT): Likewise.
+       (BCDADD_EQ): Likewise.
+       (BCDADD_GT): Likewise.
+       (BCDADD_OV): Likewise.
+       (BCDSUB): Likewise.
+       (BCDSUB_LT): Likewise.
+       (BCDSUB_EQ): Likewise.
+       (BCDSUB_GT): Likewise.
+       (BCDSUB_OV): Likewise.
+       (PACK_TD): Add new pack/unpack 128-bit type builtin functions.
+       (UNPACK_TD): Likewise.
+       (PACK_TF): Likewise.
+       (UNPACK_TF): Likewise.
+       (UNPACK_TF_0): Likewise.
+       (UNPACK_TF_1): Likewise.
+       (PACK_V1TI): Likewise.
+       (UNPACK_V1TI): Likewise.
+
+       * config/rs6000/rs6000.c (rs6000_builtin_mask_calculate): Add
+       support for decimal floating point builtin functions.
+       (rs6000_expand_ternop_builtin): Add checks for the new builtin
+       functions that take constant arguments.
+       (rs6000_invalid_builtin): Add decimal floating point builtin
+       support.
+       (rs6000_init_builtins): Setup long double, _Decimal64, and
+       _Decimal128 types for new builtin functions.
+       (builtin_function_type): Set the unsigned flags appropriately for
+       the new builtin functions.
+       (rs6000_opt_masks): Add support for decimal floating point builtin
+       functions.
+
+       * config/rs6000/rs6000.h (RS6000_BTM_DFP): Add support for decimal
+       floating point builtin functions.
+       (RS6000_BTM_COMMON): Likewise.
+       (RS6000_BTI_long_double): Likewise.
+       (RS6000_BTI_dfloat64): Likewise.
+       (RS6000_BTI_dfloat128): Likewise.
+       (long_double_type_internal_node): Likewise.
+       (dfloat64_type_internal_node): Likewise.
+       (dfloat128_type_internal_node): Likewise.
+
+       * config/rs6000/altivec.h (UNSPEC_BCDADD): Add support for ISA
+       2.07 bcd arithmetic instructions.
+       (UNSPEC_BCDSUB): Likewise.
+       (UNSPEC_BCD_OVERFLOW): Likewise.
+       (UNSPEC_BCD_ADD_SUB): Likewise.
+       (bcd_add_sub): Likewise.
+       (BCD_TEST): Likewise.
+       (bcd<bcd_add_sub>): Likewise.
+       (bcd<bcd_add_sub>_test): Likewise.
+       (bcd<bcd_add_sub>_test2): Likewise.
+       (bcd<bcd_add_sub>_<code>): Likewise.
+       (peephole2 for combined bcd ops): Likewise.
+
+       * config/rs6000/dfp.md (UNSPEC_DDEDPD): Add support for new
+       decimal floating point builtin functions.
+       (UNSPEC_DENBCD): Likewise.
+       (UNSPEC_DXEX): Likewise.
+       (UNSPEC_DIEX): Likewise.
+       (UNSPEC_DSCLI): Likewise.
+       (UNSPEC_DSCRI): Likewise.
+       (D64_D128): Likewise.
+       (dfp_suffix): Likewise.
+       (dfp_ddedpd_<mode>): Likewise.
+       (dfp_denbcd_<mode>): Likewise.
+       (dfp_dxex_<mode>): Likewise.
+       (dfp_diex_<mode>): Likewise.
+       (dfp_dscli_<mode>): Likewise.
+       (dfp_dscri_<mode>): Likewise.
+
+       * config/rs6000/rs6000.md (UNSPEC_ADDG6S): Add support for new BCD
+       builtin functions.
+       (UNSPEC_CDTBCD): Likewise.
+       (UNSPEC_CBCDTD): Likewise.
+       (UNSPEC_DIVE): Add support for new extended divide builtin
+       functions.
+       (UNSPEC_DIVEO): Likewise.
+       (UNSPEC_DIVEU): Likewise.
+       (UNSPEC_DIVEUO): Likewise.
+       (UNSPEC_UNPACK_128BIT): Add support for new builtin functions to
+       pack/unpack 128-bit types.
+       (UNSPEC_PACK_128BIT): Likewise.
+       (idiv_ldiv): New mode attribute to set the 32/64-bit divide type.
+       (udiv<mode>3): Use idiv_ldiv mode attribute.
+       (div<mode>3): Likewise.
+       (addg6s): Add new BCD builtin functions.
+       (cdtbcd): Likewise.
+       (cbcdtd): Likewise.
+       (UNSPEC_DIV_EXTEND): Add support for new extended divide
+       instructions.
+       (div_extend): Likewise.
+       (div<div_extend>_<mode>"): Likewise.
+       (FP128_64): Add support for new builtin functions to pack/unpack
+       128-bit types.
+       (unpack<mode>): Likewise.
+       (unpacktf_0): Likewise.
+       (unpacktf_1): Likewise.
+       (unpack<mode>_dm): Likewise.
+       (unpack<mode>_nodm): Likewise.
+       (pack<mode>): Likewise.
+       (unpackv1ti): Likewise.
+       (packv1ti): Likewise.
+
+2014-04-29  Pat Haugen  <pthaugen@us.ibm.com>
+
+       Backport from mainline
+       2014-04-17  Pat Haugen  <pthaugen@us.ibm.com>
+
+       * config/rs6000/rs6000.md (addti3, subti3): New.
+
+2014-04-29  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/60971
+       * tree-tailcall.c (process_assignment): Reject conversions which
+       reduce precision.
+
+2014-04-29  Nick Clifton  <nickc@redhat.com>
+
+       * config/msp430/msp430.md (umulsidi): Fix typo.
+       (mulhisi3): Enable even inside interrupt handlers.
+       * config/msp430/msp430.c (msp430_print_operand): %O: Allow for the
+       bigger return address pushed in large mode.
+
+2014-04-28  Pat Haugen  <pthaugen@us.ibm.com>
+
+       * config/rs6000/sync.md (AINT mode_iterator): Move definition.
+       (loadsync_<mode>): Change mode.
+       (load_quadpti, store_quadpti): New.
+       (atomic_load<mode>, atomic_store<mode>): Add support for TI mode.
+       * config/rs6000/rs6000.md (unspec enum): Add UNSPEC_LSQ.
+
+2014-04-28  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * configure.ac: Tweak GAS check for LEON instructions on SPARC.
+       * configure: Regenerate.
+       * config/sparc/sparc.opt (muser-mode): New option.
+       * config/sparc/sync.md (atomic_compare_and_swap<mode>_1): Do not enable
+       for LEON3.
+       (atomic_compare_and_swap_leon3_1): New instruction for LEON3.
+       * doc/invoke.texi (SPARC options): Document -muser-mode.
+
+2014-04-26  Markus Trippelsdorf  <markus@trippelsdorf.de>
+
+       * doc/install.texi (Building with profile feedback): Remove
+       outdated sentence.
+
+2014-04-26  Tom de Vries  <tom@codesourcery.com>
+
+       * config/i386/i386.md (define_expand "ldexpxf3"): Fix out-of-bounds
+       array accesses.
+
+2014-04-25  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/60960
+       * tree-vect-generic.c (expand_vector_operation): Only call
+       expand_vector_divmod if type's mode satisfies VECTOR_MODE_P.
+
+2014-04-25  Eric Botcazou  <ebotcazou@adacore.com>
+
+       PR target/60941
+       * config/sparc/sparc.md (ashlsi3_extend): Delete.
+
+2014-04-25  Richard Biener  <rguenther@suse.de>
+
+       PR ipa/60912
+       * tree-ssa-structalias.c (ipa_pta_execute): Compute direct
+       call stmt use/clobber sets during stmt walk instead of
+       walking the possibly incomplete set of caller edges.
+
+2014-04-25  Richard Biener  <rguenther@suse.de>
+
+       PR ipa/60911
+       * passes.c (apply_ipa_transforms): Inline into only caller ...
+       (execute_one_pass): ... here.  Properly bring in function
+       bodies for nodes we want to apply IPA transforms to.
+
+2014-04-24  Jakub Jelinek  <jakub@redhat.com>
+
+       * tree.h (OMP_CLAUSE_LINEAR_GIMPLE_SEQ): Define.
+       * gimplify.c (omp_is_private): Change last argument's type to int.
+       Only diagnose lastprivate if the simd argument is 1, only diagnose
+       linear if the simd argument is 2.
+       (gimplify_omp_for): Adjust omp_is_private callers.  When adding
+       lastprivate or private, add the clause to OMP_FOR_CLAUSES.  Pass
+       GOVD_EXPLICIT to omp_add_variable.  For simd with collapse == 1
+       create OMP_CLAUSE_LINEAR rather than OMP_CLAUSE_PRIVATE for var.
+       If var != decl and decl is in OMP_CLAUSE_LINEAR, gimplify decl
+       increment to OMP_CLAUSE_LINEAR_GIMPLE_SEQ.
+       * omp-low.c (scan_sharing_clauses, lower_lastprivate_clauses): Handle
+       OMP_CLAUSE_LINEAR_GIMPLE_SEQ.
+       * tree-nested.c (convert_nonlocal_omp_clauses,
+       convert_local_omp_clauses): Handle OMP_CLAUSE_LINEAR.
+
+2014-04-23  Uros Bizjak  <ubizjak@gmail.com>
+
+       Backport from mainline
+       2014-04-21  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/60909
+       * config/i386/i386.c (ix86_expand_builtin)
+       <case IX86_BUILTIN_RDRAND{16,32,64}_STEP>: Use temporary
+       register for target RTX.
+       <case IX86_BUILTIN_RDSEED{16,32,64}_STEP>: Ditto.
+
+2014-04-23  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/60903
+       * tree-ssa-loop-im.c (analyze_memory_references): Remove
+       commented code block.
+       (execute_sm_if_changed): Properly apply IRREDUCIBLE_LOOP
+       loop flags to newly created BBs and edges.
+
+2014-04-23  Nick Clifton  <nickc@redhat.com>
+
+       * config/msp430/msp430.c (msp430_handle_option): Move function
+       to msp430-common.c
+       (msp430_option_override): Simplify mcu and mcpu option handling.
+       (msp430_is_f5_mcu): Rename to msp430_use_f5_series_hwmult.  Add
+       support for -mhwmult command line option.
+       (has_32bit_hwmult): Rename to use_32bit_hwmult.  Add support for
+       -mhwmult command line option.
+       (msp430_hwmult_enabled): Delete.
+       (msp43o_output_labelref): Add support for -mhwmult command line
+       option.
+       * config/msp430/msp430.md (mulhisi3, umulhisi3, mulsidi3)
+       (umulsidi3): Likewise.
+       * config/msp430/msp430.opt (mmcu): Add Report attribute.
+       (mcpu, mlarge, msmall): Likewise.
+       (mhwmult): New option.
+       * config/msp430/msp430-protos.h (msp430_hwmult_enabled): Remove
+       prototype.
+       (msp430_is_f5_mcu): Remove prototype.
+       (msp430_use_f5_series_hwmult): Add prototype.
+       * config/msp430/msp430-opts.h: New file.
+       * common/config/msp430: New directory.
+       * common/config/msp430/msp430-common.c: New file.
+       * config.gcc (msp430): Remove target_has_targetm_common.
+       * doc/invoke.texi: Document -mhwmult command line option.
+
+2014-04-23  Nick Clifton  <nickc@redhat.com>
+
+       * config/i386/cygwin.h (ENDFILE_SPEC): Include
+       default-manifest.o if it can be found in the search path.
+       * config/i386/mingw32.h (ENDFILE_SPEC): Likewise.
+
+2014-04-23  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2014-04-14  Richard Biener  <rguenther@suse.de>
+
+       PR lto/60720
+       * lto-streamer-out.c (wrap_refs): New function.
+       (lto_output): Wrap symbol references in global initializes in
+       type-preserving MEM_REFs.
+
+2014-04-23  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/60895
+       * tree-inline.c (declare_return_variable): Use mark_addressable.
+
+2014-04-23  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/60891
+       * loop-init.c (loop_optimizer_init): Make sure to apply
+       LOOPS_MAY_HAVE_MULTIPLE_LATCHES before fixing up loops.
+
+2014-04-22  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2014-04-21  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       PR target/60735
+       * config/rs6000/rs6000.md (mov<mode>_softfloat32, FMOVE64 case):
+       If mode is DDmode and TARGET_E500_DOUBLE allow move.
+
+       * config/rs6000/rs6000.c (rs6000_debug_reg_global): Print some
+       more debug information for E500 if -mdebug=reg.
+
+2014-04-22  H.J. Lu  <hongjiu.lu@intel.com>
+
+       Backport from mainline
+       2014-04-22  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/60868
+       * config/i386/i386.c (ix86_expand_set_or_movmem): Call counter_mode
+       on count_exp to get mode.
+
+2014-04-22  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * config/rs6000/vsx.md (vsx_xxmrghw_<mode>): Adjust for
+       little-endian.
+       (vsx_xxmrglw_<mode>): Likewise.
+
+2014-04-22  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2014-04-14  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/55022
+       * fold-const.c (negate_expr_p): Don't negate directional rounding
+       division.
+       (fold_negate_expr): Likewise.
+
+2014-04-22  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2014-04-17  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/60849
+       * tree-ssa-propagate.c (valid_gimple_rhs_p): Only allow effective
+       boolean results for comparisons.
+
+2014-04-22   Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2014-04-17   Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/60841
+       * tree-vect-data-refs.c (vect_analyze_data_refs): Count stmts.
+       * tree-vect-loop.c (vect_analyze_loop_2): Pass down number
+       of stmts to SLP build.
+       * tree-vect-slp.c (vect_slp_analyze_bb_1): Likewise.
+       (vect_analyze_slp): Likewise.
+       (vect_analyze_slp_instance): Likewise.
+       (vect_build_slp_tree): Limit overall SLP tree growth.
+       * tree-vectorizer.h (vect_analyze_data_refs,
+       vect_analyze_slp): Adjust prototypes.
+
+2014-04-22  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2014-04-17  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/60836
+       * tree-vect-loop.c (vect_create_epilog_for_reduction): Force
+       initial PHI args to be gimple values.
+
+2014-04-22  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2014-04-14  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/59817
+       PR tree-optimization/60453
+       * graphite-scop-detection.c (graphite_can_represent_scev): Complete
+       recursion to catch all CHRECs in the scalar evolution and restrict
+       the predicate for the remains appropriately.
+
+2014-04-22  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/60823
+       * omp-low.c (ipa_simd_modify_function_body): Go through
+       all SSA_NAMEs and for those refering to vector arguments
+       which are going to be replaced adjust SSA_NAME_VAR and,
+       if it is a default definition, change it into a non-default
+       definition assigned at the beginning of function from new_decl.
+       (ipa_simd_modify_stmt_ops): Rewritten.
+       * tree-dfa.c (set_ssa_default_def): When removing default def,
+       check for NULL loc instead of NULL *loc.
+
+2014-04-22  Lin Zuojian  <manjian2006@gmail.com>
+
+       PR middle-end/60281
+       * asan.c (asan_emit_stack_protection): Force the base to align to
+       appropriate bits if STRICT_ALIGNMENT.  Set shadow_mem align to
+       appropriate bits if STRICT_ALIGNMENT.
+       * cfgexpand.c (expand_stack_vars): Set base_align appropriately
+       when asan is on.
+       (expand_used_vars): Leave a space in the stack frame for alignment
+       if STRICT_ALIGNMENT.
+
+2014-04-22  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2014-04-16  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/60844
+       * tree-ssa-reassoc.c (reassoc_remove_stmt): New function.
+       (propagate_op_to_single_use, remove_visited_stmt_chain,
+       linearize_expr, repropagate_negates, reassociate_bb): Use it
+       instead of gsi_remove.
+
+2014-04-22  Jakub Jelinek  <jakub@redhat.com>
+
+       * BASE-VER: Set to 4.9.1.
+       * DEV-PHASE: Set to prerelease.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
 2014-04-11  Tobias Burnus  <burnus@net-b.de>
 
        PR other/59055
-       * doc/bugreport.texi (Bugs): Remove nodes pointing to the
-       nirvana.
+       * doc/bugreport.texi (Bugs): Remove nodes pointing to the nirvana.
        * doc/gcc.texi (Service): Update description in the @menu
        * doc/invoke.texi (Option Summary): Remove misplaced and
        duplicated @menu.
 2014-04-11  Jakub Jelinek  <jakub@redhat.com>
 
        PR rtl-optimization/60663
-       * cse.c (cse_insn): Set src_volatile on ASM_OPERANDS in
-       PARALLEL.
+       * cse.c (cse_insn): Set src_volatile on ASM_OPERANDS in PARALLEL.
 
 2014-04-10  Jan Hubicka  <hubicka@ucw.cz>
            Jakub Jelinek  <jakub@redhat.com>
 
        PR lto/60567
-       * ipa.c (function_and_variable_visibility): Copy forced_by_abi flag from
-       decl_node to node.
+       * ipa.c (function_and_variable_visibility): Copy forced_by_abi
+       flag from decl_node to node.
 
 2014-04-10  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
 
 
 2014-04-05  Pitchumani Sivanupandi  <Pitchumani.S@atmel.com>
 
-       * config/avr/avr-arch.h (avr_mcu_t): Add dev_attribute field to have device
-       specific ISA/ feature information. Remove short_sp and errata_skip ds.
-       Add avr_device_specific_features enum to have device specific info.
+       * config/avr/avr-arch.h (avr_mcu_t): Add dev_attribute field to have
+       device specific ISA/ feature information. Remove short_sp and
+       errata_skip ds.  Add avr_device_specific_features enum to have device
+       specific info.
        * config/avr/avr-c.c (avr_cpu_cpp_builtins): use dev_attribute to check
        errata_skip. Add __AVR_ISA_RMW__ builtin macro if RMW ISA available.
        * config/avr/avr-devices.c (avr_mcu_types): Update AVR_MCU macro for
 2014-04-04  Martin Jambor  <mjambor@suse.cz>
 
        PR ipa/60640
-        * cgraph.h (cgraph_clone_node): New parameter added to declaration.
-        Adjust all callers.
+       * cgraph.h (cgraph_clone_node): New parameter added to declaration.
+       Adjust all callers.
        * cgraph.c (clone_of_p): Also return true if thunks match.
        (verify_edge_corresponds_to_fndecl): Removed extraneous call to
        cgraph_function_or_thunk_node and an obsolete comment.
-        * cgraphclones.c (build_function_type_skip_args): Moved upwards in the
-        file.
-        (build_function_decl_skip_args): Likewise.
+       * cgraphclones.c (build_function_type_skip_args): Moved upwards in the
+       file.
+       (build_function_decl_skip_args): Likewise.
        (set_new_clone_decl_and_node_flags): New function.
-        (duplicate_thunk_for_node): Likewise.
-        (redirect_edge_duplicating_thunks): Likewise.
-        (cgraph_clone_node): New parameter args_to_skip, pass it to
-        redirect_edge_duplicating_thunks which is called instead of
-        cgraph_redirect_edge_callee.
-        (cgraph_create_virtual_clone): Pass args_to_skip to cgraph_clone_node,
+       (duplicate_thunk_for_node): Likewise.
+       (redirect_edge_duplicating_thunks): Likewise.
+       (cgraph_clone_node): New parameter args_to_skip, pass it to
+       redirect_edge_duplicating_thunks which is called instead of
+       cgraph_redirect_edge_callee.
+       (cgraph_create_virtual_clone): Pass args_to_skip to cgraph_clone_node,
        moved setting of a lot of flags to set_new_clone_decl_and_node_flags.
 
 2014-04-04  Jeff Law  <law@redhat.com>
 
        PR tree-optimization/60505
        * tree-vectorizer.h (struct _stmt_vec_info): Add th field as the
-       threshold of number of iterations below which no vectorization will be
-       done.
+       threshold of number of iterations below which no vectorization
+       will be done.
        * tree-vect-loop.c (new_loop_vec_info):
        Initialize LOOP_VINFO_COST_MODEL_THRESHOLD.
        * tree-vect-loop.c (vect_analyze_loop_operations):
 
 2014-04-03  Richard Biener  <rguenther@suse.de>
 
-       * tree-streamer.h (struct streamer_tree_cache_d): Add next_idx
-       member.
+       * tree-streamer.h (struct streamer_tree_cache_d): Add next_idx member.
        (streamer_tree_cache_create): Adjust.
        * tree-streamer.c (streamer_tree_cache_add_to_node_array): Adjust
        to allow optional nodes array.
        * lto-streamer-out.c (create_output_block): Avoid maintaining
        the node array in the writer cache.
        (DFS_write_tree): Remove assertion.
-       (produce_asm_for_decls): Free the out decl state hash table
-       early.
+       (produce_asm_for_decls): Free the out decl state hash table early.
        * lto-streamer-in.c (lto_data_in_create): Adjust for
        streamer_tree_cache_create prototype change.
 
        (Weffc++): Remove Scott's numbering, merge lists and reference
        Wnon-virtual-dtor.
 
-       c-family/
-
-       cp/
-       * class.c (accessible_nvdtor_p): New.
-       (check_bases): Don't check base destructor here ...
-       (check_bases_and_members): ... check them here.  Trigger on
-       Wnon-virtual-dtor flag.
-       (finish_struct_1): Use accessible_nvdtor_p.
-
-       testsuite/
-       * g++.dg/warn/Wnvdtor.C: Add non-polymorphic case.
-       * g++.dg/warn/Wnvdtor-2.C: New.
-       * g++.dg/warn/Wnvdtor-3.C: New.
-       * g++.dg/warn/Wnvdtor-4.C: New.
-       * g++.dg/warn/Weff1.C: Delete.
-       * g++.old-deja/g++.benjamin/15309-1.C: Delete.
-       * g++.old-deja/g++.benjamin/15309-2.C: Delete.
-
 2014-04-03  Nick Clifton  <nickc@redhat.com>
 
        * config/rl78/rl78-expand.md (movqi): Handle (SUBREG (SYMBOL_REF))
 2014-04-02  Jan Hubicka  <hubicka@ucw.cz>
 
        PR ipa/60659
-       * ipa-devirt.c (get_polymorphic_call_info): Do not ICE on type inconsistent
-       code and instead mark the context inconsistent.
+       * ipa-devirt.c (get_polymorphic_call_info): Do not ICE on type
+       inconsistent code and instead mark the context inconsistent.
        (possible_polymorphic_call_targets): For inconsistent contexts
        return empty complete list.
 
 
 2014-04-01  Richard Biener  <rguenther@suse.de>
 
-       * gimple.h (struct gimple_statement_base): Align subcode to
-       16 bits.
+       * gimple.h (struct gimple_statement_base): Align subcode to 16 bits.
 
 2014-04-01  Sebastian Huber  <sebastian.huber@embedded-brains.de>
 
 
        PR tree-optimization/60577
        * tree-core.h (struct tree_base): Document nothrow_flag use
-       in VAR_DECL_NONALIASED.
-       * tree.h (VAR_DECL_NONALIASED): New.
+       in DECL_NONALIASED.
+       * tree.h (DECL_NONALIASED): New.
        (may_be_aliased): Adjust.
-       * coverage.c (build_var): Set VAR_DECL_NONALIASED.
+       * coverage.c (build_var): Set DECL_NONALIASED.
 
 2014-03-20  Eric Botcazou  <ebotcazou@adacore.com>
 
index 50894d1..518bca4 100644 (file)
@@ -1 +1 @@
-20140422
+20140716
index b4d3e77..27d4ad7 100644 (file)
@@ -1,3 +1,63 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
+2014-05-19  Eric Botcazou  <ebotcazou@adacore.com>
+
+       Backport from mainline
+       2014-04-22  Richard Henderson  <rth@redhat.com>
+
+       * init.c [__linux__] (HAVE_GNAT_ALTERNATE_STACK): New define.
+       (__gnat_alternate_stack): Enable for all linux except ia64.
+
+2014-05-18  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * utils.c (gnat_write_global_declarations): Adjust the flags put on
+       dummy_global.
+
+2014-05-18  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Subtype>: Do not
+       consider that regular packed arrays can never be superflat.
+
+2014-05-17  Eric Botcazou  <ebotcazou@adacore.com>
+
+       Backport from mainline
+       2014-04-28  Richard Henderson  <rth@redhat.com>
+
+       * gcc-interface/Makefile.in: Support aarch64-linux.
+
+       2014-04-28  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * exp_dbug.ads (Get_External_Name): Add 'False' default to Has_Suffix,
+       add 'Suffix' parameter and adjust comment.
+       (Get_External_Name_With_Suffix): Delete.
+       * exp_dbug.adb (Get_External_Name_With_Suffix): Merge into...
+       (Get_External_Name): ...here.  Add 'False' default to Has_Suffix, add
+       'Suffix' parameter.
+       (Get_Encoded_Name): Remove 2nd argument in call to Get_External_Name.
+       Call Get_External_Name instead of Get_External_Name_With_Suffix.
+       (Get_Secondary_DT_External_Name): Likewise.
+       * exp_cg.adb (Write_Call_Info): Likewise.
+       * exp_disp.adb (Export_DT): Likewise.
+       (Import_DT): Likewise.
+       * comperr.ads (Compiler_Abort): Remove Code parameter and add From_GCC
+       parameter with False default.
+       * comperr.adb (Compiler_Abort): Likewise.  Adjust accordingly.
+       * types.h (Fat_Pointer): Rename into...
+       (String_Pointer): ...this.  Add comment on interfacing rules.
+       * fe.h (Compiler_Abort): Adjust for above renaming.
+       (Error_Msg_N): Likewise.
+       (Error_Msg_NE): Likewise.
+       (Get_External_Name): Likewise.  Add third parameter.
+       (Get_External_Name_With_Suffix): Delete.
+       * gcc-interface/decl.c (STDCALL_PREFIX): Define.
+       (create_concat_name): Adjust call to Get_External_Name, remove call to
+       Get_External_Name_With_Suffix, use STDCALL_PREFIX, adjust for renaming.
+       * gcc-interface/trans.c (post_error): Likewise.
+       (post_error_ne): Likewise.
+       * gcc-interface/misc.c (internal_error_function): Likewise.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 13646a5..7a9d707 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2013, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2014, 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- --
@@ -74,8 +74,8 @@ package body Comperr is
 
    procedure Compiler_Abort
      (X            : String;
-      Code         : Integer := 0;
-      Fallback_Loc : String := "")
+      Fallback_Loc : String  := "";
+      From_GCC     : Boolean := False)
    is
       --  The procedures below output a "bug box" with information about
       --  the cause of the compiler abort and about the preferred method
@@ -206,7 +206,7 @@ package body Comperr is
          Write_Str (") ");
 
          if X'Length + Column > 76 then
-            if Code < 0 then
+            if From_GCC then
                Write_Str ("GCC error:");
             end if;
 
@@ -235,11 +235,7 @@ package body Comperr is
             Write_Str (X);
          end if;
 
-         if Code > 0 then
-            Write_Str (", Code=");
-            Write_Int (Int (Code));
-
-         elsif Code = 0 then
+         if not From_GCC then
 
             --  For exception case, get exception message from the TSD. Note
             --  that it would be neater and cleaner to pass the exception
index ba3cb6b..dccd8ef 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2013, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2014, 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- --
@@ -31,8 +31,8 @@ package Comperr is
 
    procedure Compiler_Abort
      (X            : String;
-      Code         : Integer := 0;
-      Fallback_Loc : String := "");
+      Fallback_Loc : String  := "";
+      From_GCC     : Boolean := False);
    pragma No_Return (Compiler_Abort);
    --  Signals an internal compiler error. Never returns control. Depending on
    --  processing may end up raising Unrecoverable_Error, or exiting directly.
@@ -46,10 +46,9 @@ package Comperr is
    --  Note that this is only used at the outer level (to handle constraint
    --  errors or assert errors etc.) In the normal logic of the compiler we
    --  always use pragma Assert to check for errors, and if necessary an
-   --  explicit abort is achieved by pragma Assert (False). Code is positive
-   --  for a gigi abort (giving the gigi abort code), zero for a front
-   --  end exception (with possible message stored in TSD.Current_Excep,
-   --  and negative (an unused value) for a GCC abort.
+   --  explicit abort is achieved by pragma Assert (False). From_GCC is true
+   --  for a GCC abort and false for a front end exception (with a possible
+   --  message stored in TSD.Current_Excep).
 
    procedure Delete_SCIL_Files;
    --  Delete SCIL files associated with the main unit
index d8a7022..483f174 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 2010-2013, Free Software Foundation, Inc.         --
+--          Copyright (C) 2010-2014, 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- --
@@ -437,10 +437,10 @@ package body Exp_CG is
       if Nkind (P) = N_Subprogram_Body
         and then not Acts_As_Spec (P)
       then
-         Get_External_Name (Corresponding_Spec (P), Has_Suffix => False);
+         Get_External_Name (Corresponding_Spec (P));
 
       else
-         Get_External_Name (Defining_Entity (P), Has_Suffix => False);
+         Get_External_Name (Defining_Entity (P));
       end if;
 
       Write_Str (Name_Buffer (1 .. Name_Len));
index 7dc4264..1362029 100644 (file)
@@ -507,8 +507,8 @@ package body Exp_Dbug is
    begin
       --  If not generating code, there is no need to create encoded names, and
       --  problems when the back-end is called to annotate types without full
-      --  code generation. See comments in Get_External_Name_With_Suffix for
-      --  additional details.
+      --  code generation. See comments in Get_External_Name for additional
+      --  details.
 
       --  However we do create encoded names if the back end is active, even
       --  if Operating_Mode got reset. Otherwise any serious error reported
@@ -556,7 +556,7 @@ package body Exp_Dbug is
       --  Fixed-point case
 
       if Is_Fixed_Point_Type (E) then
-         Get_External_Name_With_Suffix (E, "XF_");
+         Get_External_Name (E, True, "XF_");
          Add_Real_To_Buffer (Delta_Value (E));
 
          if Small_Value (E) /= Delta_Value (E) then
@@ -568,14 +568,14 @@ package body Exp_Dbug is
 
       elsif Vax_Float (E) then
          if Digits_Value (Base_Type (E)) = 6 then
-            Get_External_Name_With_Suffix (E, "XFF");
+            Get_External_Name (E, True, "XFF");
 
          elsif Digits_Value (Base_Type (E)) = 9 then
-            Get_External_Name_With_Suffix (E, "XFF");
+            Get_External_Name (E, True, "XFF");
 
          else
             pragma Assert (Digits_Value (Base_Type (E)) = 15);
-            Get_External_Name_With_Suffix (E, "XFG");
+            Get_External_Name (E, True, "XFG");
          end if;
 
       --  Discrete case where bounds do not match size
@@ -607,9 +607,9 @@ package body Exp_Dbug is
 
          begin
             if Biased then
-               Get_External_Name_With_Suffix (E, "XB");
+               Get_External_Name (E, True, "XB");
             else
-               Get_External_Name_With_Suffix (E, "XD");
+               Get_External_Name (E, True, "XD");
             end if;
 
             if Lo_Encode or Hi_Encode then
@@ -649,7 +649,7 @@ package body Exp_Dbug is
 
       else
          Has_Suffix := False;
-         Get_External_Name (E, Has_Suffix);
+         Get_External_Name (E);
       end if;
 
       if Debug_Flag_B and then Has_Suffix then
@@ -667,7 +667,11 @@ package body Exp_Dbug is
    -- Get_External_Name --
    -----------------------
 
-   procedure Get_External_Name (Entity : Entity_Id; Has_Suffix : Boolean) is
+   procedure Get_External_Name
+     (Entity     : Entity_Id;
+      Has_Suffix : Boolean := False;
+      Suffix     : String := "")
+   is
       E    : Entity_Id := Entity;
       Kind : Entity_Kind;
 
@@ -704,6 +708,20 @@ package body Exp_Dbug is
    --  Start of processing for Get_External_Name
 
    begin
+      --  If we are not in code generation mode, this procedure may still be
+      --  called from Back_End (more specifically - from gigi for doing type
+      --  representation annotation or some representation-specific checks).
+      --  But in this mode there is no need to mess with external names.
+
+      --  Furthermore, the call causes difficulties in this case because the
+      --  string representing the homonym number is not correctly reset as a
+      --  part of the call to Output_Homonym_Numbers_Suffix (which is not
+      --  called in gigi).
+
+      if Operating_Mode /= Generate_Code then
+         return;
+      end if;
+
       Reset_Buffers;
 
       --  If this is a child unit, we want the child
@@ -762,42 +780,13 @@ package body Exp_Dbug is
          Get_Qualified_Name_And_Append (E);
       end if;
 
-      Name_Buffer (Name_Len + 1) := ASCII.NUL;
-   end Get_External_Name;
-
-   -----------------------------------
-   -- Get_External_Name_With_Suffix --
-   -----------------------------------
-
-   procedure Get_External_Name_With_Suffix
-     (Entity : Entity_Id;
-      Suffix : String)
-   is
-      Has_Suffix : constant Boolean := (Suffix /= "");
-
-   begin
-      --  If we are not in code generation mode, this procedure may still be
-      --  called from Back_End (more specifically - from gigi for doing type
-      --  representation annotation or some representation-specific checks).
-      --  But in this mode there is no need to mess with external names.
-
-      --  Furthermore, the call causes difficulties in this case because the
-      --  string representing the homonym number is not correctly reset as a
-      --  part of the call to Output_Homonym_Numbers_Suffix (which is not
-      --  called in gigi).
-
-      if Operating_Mode /= Generate_Code then
-         return;
-      end if;
-
-      Get_External_Name (Entity, Has_Suffix);
-
       if Has_Suffix then
          Add_Str_To_Name_Buffer ("___");
          Add_Str_To_Name_Buffer (Suffix);
-         Name_Buffer (Name_Len + 1) := ASCII.NUL;
       end if;
-   end Get_External_Name_With_Suffix;
+
+      Name_Buffer (Name_Len + 1) := ASCII.NUL;
+   end Get_External_Name;
 
    --------------------------
    -- Get_Variant_Encoding --
@@ -944,7 +933,7 @@ package body Exp_Dbug is
       Suffix_Index : Int)
    is
    begin
-      Get_External_Name (Typ, Has_Suffix => False);
+      Get_External_Name (Typ);
 
       if Ancestor_Typ /= Typ then
          declare
@@ -952,7 +941,7 @@ package body Exp_Dbug is
             Save_Str : constant String (1 .. Name_Len)
                          := Name_Buffer (1 .. Name_Len);
          begin
-            Get_External_Name (Ancestor_Typ, Has_Suffix => False);
+            Get_External_Name (Ancestor_Typ);
 
             --  Append the extended name of the ancestor to the
             --  extended name of Typ
index 86099f6..6f27bfe 100644 (file)
@@ -413,10 +413,11 @@ package Exp_Dbug is
 
    procedure Get_External_Name
      (Entity     : Entity_Id;
-      Has_Suffix : Boolean);
-   --  Set Name_Buffer and Name_Len to the external name of entity E. The
+      Has_Suffix : Boolean := False;
+      Suffix     : String := "");
+   --  Set Name_Buffer and Name_Len to the external name of the entity. The
    --  external name is the Interface_Name, if specified, unless the entity
-   --  has an address clause or a suffix.
+   --  has an address clause or Has_Suffix is true.
    --
    --  If the Interface is not present, or not used, the external name is the
    --  concatenation of:
@@ -428,26 +429,11 @@ package Exp_Dbug is
    --    - the string "$" (or "__" if target does not allow "$"), followed
    --        by homonym suffix, if the entity is an overloaded subprogram
    --        or is defined within an overloaded subprogram.
-
-   procedure Get_External_Name_With_Suffix
-     (Entity : Entity_Id;
-      Suffix : String);
-   --  Set Name_Buffer and Name_Len to the external name of entity E. If
-   --  Suffix is the empty string the external name is as above, otherwise
-   --  the external name is the concatenation of:
-   --
-   --    - the string "_ada_", if the entity is a library subprogram,
-   --    - the names of any enclosing scopes, each followed by "__",
-   --        or "X_" if the next entity is a subunit)
-   --    - the name of the entity
-   --    - the string "$" (or "__" if target does not allow "$"), followed
-   --        by homonym suffix, if the entity is an overloaded subprogram
-   --        or is defined within an overloaded subprogram.
-   --    - the string "___" followed by Suffix
+   --    - the string "___" followed by Suffix if Has_Suffix is true.
    --
    --  Note that a call to this procedure has no effect if we are not
    --  generating code, since the necessary information for computing the
-   --  proper encoded name is not available in this case.
+   --  proper external name is not available in this case.
 
    --------------------------------------------
    -- Subprograms for Handling Qualification --
index 8ed3b39..da2b55d 100644 (file)
@@ -3913,10 +3913,7 @@ package body Exp_Disp is
 
          pragma Assert (Related_Type (Node (Elmt)) = Typ);
 
-         Get_External_Name
-           (Entity     => Node (Elmt),
-            Has_Suffix => True);
-
+         Get_External_Name (Node (Elmt));
          Set_Interface_Name (DT,
            Make_String_Literal (Loc,
              Strval => String_From_Name_Buffer));
@@ -7088,7 +7085,7 @@ package body Exp_Disp is
 
          Set_Scope (DT, Current_Scope);
 
-         Get_External_Name (DT, True);
+         Get_External_Name (DT);
          Set_Interface_Name (DT,
            Make_String_Literal (Loc, Strval => String_From_Name_Buffer));
 
index 9b38903..e02067c 100644 (file)
  *                                                                          *
  ****************************************************************************/
 
-/* This file contains definitions to access front-end functions and
-   variables used by gigi.  */
+/* This file contains declarations to access front-end functions and variables
+   used by gigi.
+
+   WARNING: functions taking String_Pointer parameters must abide by the rule
+   documented alongside the definition of String_Pointer in types.h.  */
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-/* comperr:  */
+/* comperr: */
 
 #define Compiler_Abort comperr__compiler_abort
-extern int Compiler_Abort (Fat_Pointer, int, Fat_Pointer) ATTRIBUTE_NORETURN;
+extern int Compiler_Abort (String_Pointer, String_Pointer, Boolean) ATTRIBUTE_NORETURN;
 
 /* csets: */
 
@@ -72,8 +75,6 @@ extern void Set_Mechanism             (Entity_Id, Mechanism_Type);
 extern void Set_RM_Size                        (Entity_Id, Uint);
 extern void Set_Present_Expr           (Node_Id, Uint);
 
-/* Test if the node N is the name of an entity (i.e. is an identifier,
-   expanded name, or an attribute reference that returns an entity).  */
 #define Is_Entity_Name einfo__is_entity_name
 extern Boolean Is_Entity_Name          (Node_Id);
 
@@ -90,8 +91,8 @@ extern Node_Id Get_Attribute_Definition_Clause (Entity_Id, char);
 #define Error_Msg_NE              errout__error_msg_ne
 #define Set_Identifier_Casing     errout__set_identifier_casing
 
-extern void Error_Msg_N                  (Fat_Pointer, Node_Id);
-extern void Error_Msg_NE          (Fat_Pointer, Node_Id, Entity_Id);
+extern void Error_Msg_N                  (String_Pointer, Node_Id);
+extern void Error_Msg_NE          (String_Pointer, Node_Id, Entity_Id);
 extern void Set_Identifier_Casing (Char *, const Char *);
 
 /* err_vars: */
@@ -147,11 +148,9 @@ extern void Setup_Asm_Outputs              (Node_Id);
 
 #define Get_Encoded_Name exp_dbug__get_encoded_name
 #define Get_External_Name exp_dbug__get_external_name
-#define Get_External_Name_With_Suffix exp_dbug__get_external_name_with_suffix
 
-extern void Get_Encoded_Name                   (Entity_Id);
-extern void Get_External_Name                  (Entity_Id, Boolean);
-extern void Get_External_Name_With_Suffix      (Entity_Id, Fat_Pointer);
+extern void Get_Encoded_Name   (Entity_Id);
+extern void Get_External_Name  (Entity_Id, Boolean, String_Pointer);
 
 /* exp_util: */
 
index 9af1967..5c36962 100644 (file)
@@ -1988,6 +1988,44 @@ ifeq ($(strip $(filter-out arm% linux-gnueabi%,$(target_cpu) $(target_os))),)
   LIBRARY_VERSION := $(LIB_VERSION)
 endif
 
+# AArch64 Linux
+ifeq ($(strip $(filter-out aarch64% linux%,$(target_cpu) $(target_os))),)
+  LIBGNAT_TARGET_PAIRS = \
+  a-exetim.adb<a-exetim-posix.adb \
+  a-exetim.ads<a-exetim-default.ads \
+  a-intnam.ads<a-intnam-linux.ads \
+  a-synbar.adb<a-synbar-posix.adb \
+  a-synbar.ads<a-synbar-posix.ads \
+  s-inmaop.adb<s-inmaop-posix.adb \
+  s-intman.adb<s-intman-posix.adb \
+  s-linux.ads<s-linux.ads \
+  s-mudido.adb<s-mudido-affinity.adb \
+  s-osinte.ads<s-osinte-linux.ads \
+  s-osinte.adb<s-osinte-posix.adb \
+  s-osprim.adb<s-osprim-posix.adb \
+  s-taprop.adb<s-taprop-linux.adb \
+  s-tasinf.ads<s-tasinf-linux.ads \
+  s-tasinf.adb<s-tasinf-linux.adb \
+  s-tpopsp.adb<s-tpopsp-tls.adb \
+  s-taspri.ads<s-taspri-posix.ads \
+  g-sercom.adb<g-sercom-linux.adb \
+  $(ATOMICS_TARGET_PAIRS) \
+  $(ATOMICS_BUILTINS_TARGET_PAIRS) \
+  system.ads<system-linux-x86_64.ads
+  ## ^^ Note the above is a pretty-close placeholder.
+
+  TOOLS_TARGET_PAIRS =  \
+    mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
+    indepsw.adb<indepsw-gnu.adb
+
+  EXTRA_GNATRTL_TASKING_OBJS=s-linux.o a-exetim.o
+  EH_MECHANISM=-gcc
+  THREADSLIB=-lpthread -lrt
+  GNATLIB_SHARED=gnatlib-shared-dual
+  GMEM_LIB = gmemlib
+  LIBRARY_VERSION := $(LIB_VERSION)
+endif
+
 # Sparc Linux
 ifeq ($(strip $(filter-out sparc% linux%,$(target_cpu) $(target_os))),)
   LIBGNAT_TARGET_PAIRS_COMMON = \
index 4180e59..52452ce 100644 (file)
@@ -72,6 +72,8 @@
 #define Has_Thiscall_Convention(E) 0
 #endif
 
+#define STDCALL_PREFIX "_imp__"
+
 /* Stack realignment is necessary for functions with foreign conventions when
    the ABI doesn't mandate as much as what the compiler assumes - that is, up
    to PREFERRED_STACK_BOUNDARY.
@@ -2433,8 +2435,10 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
                 we can just use the high bound of the index type.  */
              else if ((Nkind (gnat_index) == N_Range
                        && cannot_be_superflat_p (gnat_index))
-                      /* Packed Array Types are never superflat.  */
-                      || Is_Packed_Array_Type (gnat_entity))
+                      /* Bit-Packed Array Types are never superflat.  */
+                      || (Is_Packed_Array_Type (gnat_entity)
+                          && Is_Bit_Packed_Array
+                             (Original_Array_Type (gnat_entity))))
                gnu_high = gnu_max;
 
              /* Otherwise, if the high bound is constant but the low bound is
@@ -8879,16 +8883,12 @@ get_entity_name (Entity_Id gnat_entity)
 tree
 create_concat_name (Entity_Id gnat_entity, const char *suffix)
 {
-  Entity_Kind kind = Ekind (gnat_entity);
+  const Entity_Kind kind = Ekind (gnat_entity);
+  const bool has_suffix = (suffix != NULL);
+  String_Template temp = {1, has_suffix ? strlen (suffix) : 0};
+  String_Pointer sp = {suffix, &temp};
 
-  if (suffix)
-    {
-      String_Template temp = {1, (int) strlen (suffix)};
-      Fat_Pointer fp = {suffix, &temp};
-      Get_External_Name_With_Suffix (gnat_entity, fp);
-    }
-  else
-    Get_External_Name (gnat_entity, 0);
+  Get_External_Name (gnat_entity, has_suffix, sp);
 
   /* A variable using the Stdcall convention lives in a DLL.  We adjust
      its name to use the jump table, the _imp__NAME contains the address
@@ -8896,9 +8896,9 @@ create_concat_name (Entity_Id gnat_entity, const char *suffix)
   if ((kind == E_Variable || kind == E_Constant)
       && Has_Stdcall_Convention (gnat_entity))
     {
-      const int len = 6 + Name_Len;
+      const int len = strlen (STDCALL_PREFIX) + Name_Len;
       char *new_name = (char *) alloca (len + 1);
-      strcpy (new_name, "_imp__");
+      strcpy (new_name, STDCALL_PREFIX);
       strcat (new_name, Name_Buffer);
       return get_identifier_with_length (new_name, len);
     }
index a5f2881..fe44c6d 100644 (file)
@@ -283,8 +283,8 @@ internal_error_function (diagnostic_context *context,
   text_info tinfo;
   char *buffer, *p, *loc;
   String_Template temp, temp_loc;
-  Fat_Pointer fp, fp_loc;
-  expanded_location s;
+  String_Pointer sp, sp_loc;
+  expanded_location xloc;
 
   /* Warn if plugins present.  */
   warn_if_plugins ();
@@ -311,21 +311,21 @@ internal_error_function (diagnostic_context *context,
 
   temp.Low_Bound = 1;
   temp.High_Bound = p - buffer;
-  fp.Bounds = &temp;
-  fp.Array = buffer;
+  sp.Bounds = &temp;
+  sp.Array = buffer;
 
-  s = expand_location (input_location);
-  if (context->show_column && s.column != 0)
-    asprintf (&loc, "%s:%d:%d", s.file, s.line, s.column);
+  xloc = expand_location (input_location);
+  if (context->show_column && xloc.column != 0)
+    asprintf (&loc, "%s:%d:%d", xloc.file, xloc.line, xloc.column);
   else
-    asprintf (&loc, "%s:%d", s.file, s.line);
+    asprintf (&loc, "%s:%d", xloc.file, xloc.line);
   temp_loc.Low_Bound = 1;
   temp_loc.High_Bound = strlen (loc);
-  fp_loc.Bounds = &temp_loc;
-  fp_loc.Array = loc;
+  sp_loc.Bounds = &temp_loc;
+  sp_loc.Array = loc;
 
   Current_Error_Node = error_gnat_node;
-  Compiler_Abort (fp, -1, fp_loc);
+  Compiler_Abort (sp, sp_loc, true);
 }
 
 /* Perform all the initialization steps that are language-specific.  */
index 4a4d0fa..03bf098 100644 (file)
@@ -9262,16 +9262,16 @@ void
 post_error (const char *msg, Node_Id node)
 {
   String_Template temp;
-  Fat_Pointer fp;
+  String_Pointer sp;
 
   if (No (node))
     return;
 
   temp.Low_Bound = 1;
   temp.High_Bound = strlen (msg);
-  fp.Bounds = &temp;
-  fp.Array = msg;
-  Error_Msg_N (fp, node);
+  sp.Bounds = &temp;
+  sp.Array = msg;
+  Error_Msg_N (sp, node);
 }
 
 /* Similar to post_error, but NODE is the node at which to post the error and
@@ -9281,16 +9281,16 @@ void
 post_error_ne (const char *msg, Node_Id node, Entity_Id ent)
 {
   String_Template temp;
-  Fat_Pointer fp;
+  String_Pointer sp;
 
   if (No (node))
     return;
 
   temp.Low_Bound = 1;
   temp.High_Bound = strlen (msg);
-  fp.Bounds = &temp;
-  fp.Array = msg;
-  Error_Msg_NE (fp, node, ent);
+  sp.Bounds = &temp;
+  sp.Array = msg;
+  Error_Msg_NE (sp, node, ent);
 }
 
 /* Similar to post_error_ne, but NUM is the number to use for the '^'.  */
index 014fe36..15b7236 100644 (file)
@@ -5662,9 +5662,10 @@ gnat_write_global_declarations (void)
       dummy_global
        = build_decl (BUILTINS_LOCATION, VAR_DECL, get_identifier (label),
                      void_type_node);
+      DECL_HARD_REGISTER (dummy_global) = 1;
       TREE_STATIC (dummy_global) = 1;
-      TREE_ASM_WRITTEN (dummy_global) = 1;
       node = varpool_node_for_decl (dummy_global);
+      node->definition = 1;
       node->force_output = 1;
 
       while (!types_used_by_cur_var_decl->is_empty ())
index c3824ab..48319d6 100644 (file)
@@ -556,9 +556,14 @@ __gnat_error_handler (int sig, siginfo_t *si ATTRIBUTE_UNUSED, void *ucontext)
   Raise_From_Signal_Handler (exception, msg);
 }
 
-#if defined (i386) || defined (__x86_64__) || defined (__powerpc__)
-/* This must be in keeping with System.OS_Interface.Alternate_Stack_Size.  */
-char __gnat_alternate_stack[16 * 1024]; /* 2 * SIGSTKSZ */
+#ifndef __ia64__
+#define HAVE_GNAT_ALTERNATE_STACK 1
+/* This must be in keeping with System.OS_Interface.Alternate_Stack_Size.
+   It must be larger than MINSIGSTKSZ and hopefully near 2 * SIGSTKSZ.  */
+# if 16 * 1024 < MINSIGSTKSZ
+#  error "__gnat_alternate_stack too small"
+# endif
+char __gnat_alternate_stack[16 * 1024];
 #endif
 
 #ifdef __XENO__
@@ -612,7 +617,7 @@ __gnat_install_handler (void)
     sigaction (SIGBUS,  &act, NULL);
   if (__gnat_get_interrupt_state (SIGSEGV) != 's')
     {
-#if defined (i386) || defined (__x86_64__) || defined (__powerpc__)
+#ifdef HAVE_GNAT_ALTERNATE_STACK
       /* Setup an alternate stack region for the handler execution so that
         stack overflows can be handled properly, avoiding a SEGV generation
         from stack usage by the handler itself.  */
index 7d1e696..5e19e8f 100644 (file)
@@ -76,11 +76,19 @@ typedef Char *Str;
 /* Pointer to string of Chars */
 typedef Char *Str_Ptr;
 
-/* Types for the fat pointer used for strings and the template it
-   points to.  */
-typedef struct {int Low_Bound, High_Bound; } String_Template;
-typedef struct {const char *Array; String_Template *Bounds; }
-       __attribute ((aligned (sizeof (char *) * 2))) Fat_Pointer;
+/* Types for the fat pointer used for strings and the template it points to.
+   The fat pointer is conceptually a couple of pointers, but it is wrapped
+   up in a special record type.  On the Ada side, the record is naturally
+   aligned (i.e. given pointer alignment) on regular platforms, but it is
+   given twice this alignment on strict-alignment platforms for performance
+   reasons.  On the C side, for the sake of portability and simplicity, we
+   overalign it on all platforms (so the machine mode is always the same as
+   on the Ada side) but arrange to pass it in an even scalar position as a
+   parameter to functions (so the scalar parameter alignment is always the
+   same as on the Ada side).  */
+typedef struct { int Low_Bound, High_Bound; } String_Template;
+typedef struct { const char *Array; String_Template *Bounds; }
+       __attribute ((aligned (sizeof (char *) * 2))) String_Pointer;
 
 /* Types for Node/Entity Kinds:  */
 
index 53992a8..28a476f 100644 (file)
@@ -1017,8 +1017,17 @@ asan_emit_stack_protection (rtx base, rtx pbase, unsigned int alignb,
        base_align_bias = ((asan_frame_size + alignb - 1)
                           & ~(alignb - HOST_WIDE_INT_1)) - asan_frame_size;
     }
+  /* Align base if target is STRICT_ALIGNMENT.  */
+  if (STRICT_ALIGNMENT)
+    base = expand_binop (Pmode, and_optab, base,
+                        gen_int_mode (-((GET_MODE_ALIGNMENT (SImode)
+                                         << ASAN_SHADOW_SHIFT)
+                                        / BITS_PER_UNIT), Pmode), NULL_RTX,
+                        1, OPTAB_DIRECT);
+
   if (use_after_return_class == -1 && pbase)
     emit_move_insn (pbase, base);
+
   base = expand_binop (Pmode, add_optab, base,
                       gen_int_mode (base_offset - base_align_bias, Pmode),
                       NULL_RTX, 1, OPTAB_DIRECT);
@@ -1097,6 +1106,8 @@ asan_emit_stack_protection (rtx base, rtx pbase, unsigned int alignb,
              && (ASAN_RED_ZONE_SIZE >> ASAN_SHADOW_SHIFT) == 4);
   shadow_mem = gen_rtx_MEM (SImode, shadow_base);
   set_mem_alias_set (shadow_mem, asan_shadow_set);
+  if (STRICT_ALIGNMENT)
+    set_mem_align (shadow_mem, (GET_MODE_ALIGNMENT (SImode)));
   prev_offset = base_offset;
   for (l = length; l; l -= 2)
     {
@@ -1186,6 +1197,10 @@ asan_emit_stack_protection (rtx base, rtx pbase, unsigned int alignb,
 
   shadow_mem = gen_rtx_MEM (BLKmode, shadow_base);
   set_mem_alias_set (shadow_mem, asan_shadow_set);
+
+  if (STRICT_ALIGNMENT)
+    set_mem_align (shadow_mem, (GET_MODE_ALIGNMENT (SImode)));
+
   prev_offset = base_offset;
   last_offset = base_offset;
   last_size = 0;
index 805ba9c..8e7fa2f 100644 (file)
@@ -1,3 +1,49 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
+2014-06-30  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2014-06-10  Jakub Jelinek  <jakub@redhat.com>
+
+       PR fortran/60928
+       * c-pragma.c (omp_pragmas_simd): Move PRAGMA_OMP_TASK...
+       (omp_pragmas): ... back here.
+
+2014-06-12  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/61486
+       * c-omp.c (c_omp_split_clauses): Don't crash on firstprivate in
+       #pragma omp target teams or
+       #pragma omp {,target }teams distribute simd.
+
+2014-06-04  Marek Polacek  <polacek@redhat.com>
+
+       Backport from mainline
+       2014-05-08  Marek Polacek  <polacek@redhat.com>
+
+       PR c/61053
+       * c-common.c (min_align_of_type): New function factored out from...
+       (c_sizeof_or_alignof_type): ...here.
+       * c-common.h (min_align_of_type): Declare.
+
+2014-05-06  Richard Biener  <rguenther@suse.de>
+
+       * c-opts.c (c_common_post_options): For -freestanding,
+       -fno-hosted and -fno-builtin disable pattern recognition
+       if not enabled explicitely.
+
+2014-04-22  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2014-04-14  Richard Biener  <rguenther@suse.de>
+               Marc Glisse  <marc.glisse@inria.fr>
+
+       PR c/60819
+       * c-common.c (convert_vector_to_pointer_for_subscript): Properly
+       apply may-alias the scalar pointer type when applicable.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 03731b4..f3c0dea 100644 (file)
@@ -4927,6 +4927,26 @@ c_common_get_alias_set (tree t)
   return -1;
 }
 \f
+/* Return the least alignment required for type TYPE.  */
+
+unsigned int
+min_align_of_type (tree type)
+{
+  unsigned int align = TYPE_ALIGN (type);
+  align = MIN (align, BIGGEST_ALIGNMENT);
+#ifdef BIGGEST_FIELD_ALIGNMENT
+  align = MIN (align, BIGGEST_FIELD_ALIGNMENT);
+#endif
+  unsigned int field_align = align;
+#ifdef ADJUST_FIELD_ALIGN
+  tree field = build_decl (UNKNOWN_LOCATION, FIELD_DECL, NULL_TREE,
+                          type);
+  field_align = ADJUST_FIELD_ALIGN (field, field_align);
+#endif
+  align = MIN (align, field_align);
+  return align / BITS_PER_UNIT;
+}
+
 /* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where
    the IS_SIZEOF parameter indicates which operator is being applied.
    The COMPLAIN flag controls whether we should diagnose possibly
@@ -5005,21 +5025,7 @@ c_sizeof_or_alignof_type (location_t loc,
                                size_int (TYPE_PRECISION (char_type_node)
                                          / BITS_PER_UNIT));
       else if (min_alignof)
-       {
-         unsigned int align = TYPE_ALIGN (type);
-         align = MIN (align, BIGGEST_ALIGNMENT);
-#ifdef BIGGEST_FIELD_ALIGNMENT
-         align = MIN (align, BIGGEST_FIELD_ALIGNMENT);
-#endif
-         unsigned int field_align = align;
-#ifdef ADJUST_FIELD_ALIGN
-         tree field = build_decl (UNKNOWN_LOCATION, FIELD_DECL, NULL_TREE,
-                                  type);
-         field_align = ADJUST_FIELD_ALIGN (field, field_align);
-#endif
-         align = MIN (align, field_align);
-         value = size_int (align / BITS_PER_UNIT);
-       }
+       value = size_int (min_align_of_type (type));
       else
        value = size_int (TYPE_ALIGN_UNIT (type));
     }
@@ -11770,8 +11776,21 @@ convert_vector_to_pointer_for_subscript (location_t loc,
 
       c_common_mark_addressable_vec (*vecp);
       type = build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
-      type = build_pointer_type (type);
       type1 = build_pointer_type (TREE_TYPE (*vecp));
+      bool ref_all = TYPE_REF_CAN_ALIAS_ALL (type1);
+      if (!ref_all
+         && !DECL_P (*vecp))
+       {
+         /* If the original vector isn't declared may_alias and it
+            isn't a bare vector look if the subscripting would
+            alias the vector we subscript, and if not, force ref-all.  */
+         alias_set_type vecset = get_alias_set (*vecp);
+         alias_set_type sset = get_alias_set (type);
+         if (!alias_sets_must_conflict_p (sset, vecset)
+             && !alias_set_subset_of (sset, vecset))
+           ref_all = true;
+       }
+      type = build_pointer_type_for_mode (type, ptr_mode, ref_all);
       *vecp = build1 (ADDR_EXPR, type1, *vecp);
       *vecp = convert (type, *vecp);
     }
index 24959d8..06dcb7c 100644 (file)
@@ -758,6 +758,7 @@ extern tree c_wrap_maybe_const (tree, bool);
 extern tree c_save_expr (tree);
 extern tree c_common_truthvalue_conversion (location_t, tree);
 extern void c_apply_type_quals_to_decl (int, tree);
+extern unsigned int min_align_of_type (tree);
 extern tree c_sizeof_or_alignof_type (location_t, tree, bool, bool, int);
 extern tree c_alignof_expr (location_t, tree);
 /* Print an error message for invalid operands to arith operation CODE.
index dd0a45d..6a0e419 100644 (file)
@@ -789,8 +789,13 @@ c_omp_split_clauses (location_t loc, enum tree_code code,
          else if ((mask & (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_NUM_TEAMS))
                   != 0)
            {
-             /* This must be #pragma omp {,target }teams distribute.  */
-             gcc_assert (code == OMP_DISTRIBUTE);
+             /* This must be one of
+                #pragma omp {,target }teams distribute
+                #pragma omp target teams
+                #pragma omp {,target }teams distribute simd.  */
+             gcc_assert (code == OMP_DISTRIBUTE
+                         || code == OMP_TEAMS
+                         || code == OMP_SIMD);
              s = C_OMP_CLAUSE_SPLIT_TEAMS;
            }
          else if ((mask & (OMP_CLAUSE_MASK_1
index e162e49..29e9a35 100644 (file)
@@ -851,6 +851,12 @@ c_common_post_options (const char **pfilename)
   if (flag_objc_exceptions && !flag_objc_sjlj_exceptions)
     flag_exceptions = 1;
 
+  /* If -ffreestanding, -fno-hosted or -fno-builtin then disable
+     pattern recognition.  */
+  if (!global_options_set.x_flag_tree_loop_distribute_patterns
+      && flag_no_builtin)
+    flag_tree_loop_distribute_patterns = 0;
+
   /* -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.  */
index 9e2a00e..ad115e9 100644 (file)
@@ -1188,6 +1188,7 @@ static const struct omp_pragma_def omp_pragmas[] = {
   { "section", PRAGMA_OMP_SECTION },
   { "sections", PRAGMA_OMP_SECTIONS },
   { "single", PRAGMA_OMP_SINGLE },
+  { "task", PRAGMA_OMP_TASK },
   { "taskgroup", PRAGMA_OMP_TASKGROUP },
   { "taskwait", PRAGMA_OMP_TASKWAIT },
   { "taskyield", PRAGMA_OMP_TASKYIELD },
@@ -1200,7 +1201,6 @@ static const struct omp_pragma_def omp_pragmas_simd[] = {
   { "parallel", PRAGMA_OMP_PARALLEL },
   { "simd", PRAGMA_OMP_SIMD },
   { "target", PRAGMA_OMP_TARGET },
-  { "task", PRAGMA_OMP_TASK },
   { "teams", PRAGMA_OMP_TEAMS },
 };
 
index f5e7179..4816d5c 100644 (file)
@@ -1,3 +1,70 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
+2014-06-30  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2014-06-25  Jakub Jelinek  <jakub@redhat.com>
+
+       * c-typeck.c (c_finish_omp_clauses): Make sure
+       OMP_CLAUSE_LINEAR_STEP has correct type.
+
+2014-06-30  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+
+       * c-parser.c (c_parser_declaration_or_fndef): Discard all type
+       qualifiers in __auto_type for atomic types.
+       (c_parser_typeof_specifier): Discard all type qualifiers in
+       __typeof__ for atomic types.
+
+2014-06-30  Igor Zamyatin  <igor.zamyatin@intel.com>
+
+       PR middle-end/57541
+       * c-array-notation.c (fix_builtin_array_notation_fn):
+       Check for 0 arguments in builtin call. Check that bultin argument is
+       correct.
+       * c-parser.c (c_parser_array_notation): Check for incorrect initial
+       index.
+
+2014-06-24  Jakub Jelinek  <jakub@redhat.com>
+
+       * c-parser.c (c_parser_omp_for_loop): For
+       #pragma omp parallel for simd move lastprivate clause from parallel
+       to for rather than simd.
+
+2014-06-04  Igor Zamyatin  <igor.zamyatin@intel.com>
+
+       PR c/58942
+       * c-array-notation.c (fix_builtin_array_notation_fn): Handle the case
+       with a pointer.
+
+2014-06-04  Marek Polacek  <polacek@redhat.com>
+
+       Backport from mainline
+       2014-05-08  Marek Polacek  <polacek@redhat.com>
+
+       PR c/61053
+       * c-decl.c (grokdeclarator): Use min_align_of_type instead of
+       TYPE_ALIGN_UNIT.
+
+2014-05-26  Igor Zamyatin  <igor.zamyatin@intel.com>
+
+       PR c/61191
+       * c-array-notation.c (fix_builtin_array_notation_fn): Check invalid
+       function parameters.
+
+2014-04-24  Jakub Jelinek  <jakub@redhat.com>
+
+       * c-parser.c (c_parser_omp_atomic): Allow seq_cst before
+       atomic-clause, allow comma in between atomic-clause and
+       seq_cst.
+
+2014-04-22  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/59073
+       * c-parser.c (c_parser_omp_parallel): If c_parser_omp_for
+       fails, don't set OM_PARALLEL_COMBINED and return NULL.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 0ac6ba8..2305e1e 100644 (file)
@@ -214,6 +214,13 @@ fix_builtin_array_notation_fn (tree an_builtin_fn, tree *new_var)
   if (an_type == BUILT_IN_NONE)
     return NULL_TREE;
 
+  /* Builtin call should contain at least one argument.  */
+  if (call_expr_nargs (an_builtin_fn) == 0)
+    {
+      error_at (EXPR_LOCATION (an_builtin_fn), "Invalid builtin arguments");
+      return error_mark_node;
+    }
+
   if (an_type == BUILT_IN_CILKPLUS_SEC_REDUCE
       || an_type == BUILT_IN_CILKPLUS_SEC_REDUCE_MUTATING)
     {
@@ -229,6 +236,8 @@ fix_builtin_array_notation_fn (tree an_builtin_fn, tree *new_var)
   /* Fully fold any EXCESSIVE_PRECISION EXPR that can occur in the function
      parameter.  */
   func_parm = c_fully_fold (func_parm, false, NULL);
+  if (func_parm == error_mark_node)
+    return error_mark_node;
   
   location = EXPR_LOCATION (an_builtin_fn);
   
@@ -236,7 +245,10 @@ fix_builtin_array_notation_fn (tree an_builtin_fn, tree *new_var)
     return error_mark_node;
  
   if (rank == 0)
-    return an_builtin_fn;
+    {
+      error_at (location, "Invalid builtin arguments");
+      return error_mark_node;
+    }
   else if (rank > 1 
           && (an_type == BUILT_IN_CILKPLUS_SEC_REDUCE_MAX_IND
               || an_type == BUILT_IN_CILKPLUS_SEC_REDUCE_MIN_IND))
@@ -308,7 +320,9 @@ fix_builtin_array_notation_fn (tree an_builtin_fn, tree *new_var)
       || an_type == BUILT_IN_CILKPLUS_SEC_REDUCE_MIN_IND)
     array_ind_value = build_decl (location, VAR_DECL, NULL_TREE, 
                                  TREE_TYPE (func_parm));
-  array_op0 = (*array_operand)[0];                           
+  array_op0 = (*array_operand)[0];
+  if (TREE_CODE (array_op0) == INDIRECT_REF)
+    array_op0 = TREE_OPERAND (array_op0, 0);
   switch (an_type)
     {
     case BUILT_IN_CILKPLUS_SEC_REDUCE_ADD:
index df84980..47907d5 100644 (file)
@@ -5911,7 +5911,7 @@ grokdeclarator (const struct c_declarator *declarator,
       else if (declspecs->align_log != -1)
        {
          alignas_align = 1U << declspecs->align_log;
-         if (alignas_align < TYPE_ALIGN_UNIT (type))
+         if (alignas_align < min_align_of_type (type))
            {
              if (name)
                error_at (loc, "%<_Alignas%> specifiers cannot reduce "
index 5653e49..a51af2e 100644 (file)
@@ -1707,14 +1707,10 @@ c_parser_declaration_or_fndef (c_parser *parser, bool fndef_ok,
                              " initializer");
                  init = convert_lvalue_to_rvalue (init_loc, init, true, true);
                  tree init_type = TREE_TYPE (init.value);
-                 /* As with typeof, remove _Atomic and const
-                    qualifiers from atomic types.  */
+                 /* As with typeof, remove all qualifiers from atomic types.  */
                  if (init_type != error_mark_node && TYPE_ATOMIC (init_type))
                    init_type
-                     = c_build_qualified_type (init_type,
-                                               (TYPE_QUALS (init_type)
-                                                & ~(TYPE_QUAL_ATOMIC
-                                                    | TYPE_QUAL_CONST)));
+                     = c_build_qualified_type (init_type, TYPE_UNQUALIFIED);
                  bool vm_type = variably_modified_type_p (init_type,
                                                           NULL_TREE);
                  if (vm_type)
@@ -3011,16 +3007,11 @@ c_parser_typeof_specifier (c_parser *parser)
       if (was_vm)
        ret.expr = c_fully_fold (expr.value, false, &ret.expr_const_operands);
       pop_maybe_used (was_vm);
-      /* For use in macros such as those in <stdatomic.h>, remove
-        _Atomic and const qualifiers from atomic types.  (Possibly
-        all qualifiers should be removed; const can be an issue for
-        more macros using typeof than just the <stdatomic.h>
-        ones.)  */
+      /* For use in macros such as those in <stdatomic.h>, remove all
+        qualifiers from atomic types.  (const can be an issue for more macros
+        using typeof than just the <stdatomic.h> ones.)  */
       if (ret.spec != error_mark_node && TYPE_ATOMIC (ret.spec))
-       ret.spec = c_build_qualified_type (ret.spec,
-                                          (TYPE_QUALS (ret.spec)
-                                           & ~(TYPE_QUAL_ATOMIC
-                                               | TYPE_QUAL_CONST)));
+       ret.spec = c_build_qualified_type (ret.spec, TYPE_UNQUALIFIED);
     }
   c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
   return ret;
@@ -11198,6 +11189,18 @@ c_parser_omp_atomic (location_t loc, c_parser *parser)
   if (c_parser_next_token_is (parser, CPP_NAME))
     {
       const char *p = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value);
+      if (!strcmp (p, "seq_cst"))
+       {
+         seq_cst = true;
+         c_parser_consume_token (parser);
+         if (c_parser_next_token_is (parser, CPP_COMMA)
+             && c_parser_peek_2nd_token (parser)->type == CPP_NAME)
+           c_parser_consume_token (parser);
+       }
+    }
+  if (c_parser_next_token_is (parser, CPP_NAME))
+    {
+      const char *p = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value);
 
       if (!strcmp (p, "read"))
        code = OMP_ATOMIC_READ;
@@ -11212,13 +11215,21 @@ c_parser_omp_atomic (location_t loc, c_parser *parser)
       if (p)
        c_parser_consume_token (parser);
     }
-  if (c_parser_next_token_is (parser, CPP_NAME))
+  if (!seq_cst)
     {
-      const char *p = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value);
-      if (!strcmp (p, "seq_cst"))
+      if (c_parser_next_token_is (parser, CPP_COMMA)
+         && c_parser_peek_2nd_token (parser)->type == CPP_NAME)
+       c_parser_consume_token (parser);
+
+      if (c_parser_next_token_is (parser, CPP_NAME))
        {
-         seq_cst = true;
-         c_parser_consume_token (parser);
+         const char *p
+           = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value);
+         if (!strcmp (p, "seq_cst"))
+           {
+             seq_cst = true;
+             c_parser_consume_token (parser);
+           }
        }
     }
   c_parser_skip_to_pragma_eol (parser);
@@ -11861,8 +11872,17 @@ c_parser_omp_for_loop (location_t loc, c_parser *parser, enum tree_code code,
                        tree l = build_omp_clause (OMP_CLAUSE_LOCATION (*c),
                                                   OMP_CLAUSE_LASTPRIVATE);
                        OMP_CLAUSE_DECL (l) = OMP_CLAUSE_DECL (*c);
-                       OMP_CLAUSE_CHAIN (l) = clauses;
-                       clauses = l;
+                       if (code == OMP_SIMD)
+                         {
+                           OMP_CLAUSE_CHAIN (l)
+                             = cclauses[C_OMP_CLAUSE_SPLIT_FOR];
+                           cclauses[C_OMP_CLAUSE_SPLIT_FOR] = l;
+                         }
+                       else
+                         {
+                           OMP_CLAUSE_CHAIN (l) = clauses;
+                           clauses = l;
+                         }
                        OMP_CLAUSE_SET_CODE (*c, OMP_CLAUSE_SHARED);
                      }
                  }
@@ -12208,10 +12228,12 @@ c_parser_omp_parallel (location_t loc, c_parser *parser,
       if (!flag_openmp)  /* flag_openmp_simd  */
        return c_parser_omp_for (loc, parser, p_name, mask, cclauses);
       block = c_begin_omp_parallel ();
-      c_parser_omp_for (loc, parser, p_name, mask, cclauses);
+      tree ret = c_parser_omp_for (loc, parser, p_name, mask, cclauses);
       stmt
        = c_finish_omp_parallel (loc, cclauses[C_OMP_CLAUSE_SPLIT_PARALLEL],
                                 block);
+      if (ret == NULL_TREE)
+       return ret;
       OMP_PARALLEL_COMBINED (stmt) = 1;
       return stmt;
     }
@@ -14042,7 +14064,7 @@ c_parser_array_notation (location_t loc, c_parser *parser, tree initial_index,
   tree value_tree = NULL_TREE, type = NULL_TREE, array_type = NULL_TREE;
   tree array_type_domain = NULL_TREE; 
 
-  if (array_value == error_mark_node)
+  if (array_value == error_mark_node || initial_index == error_mark_node)
     {
       /* No need to continue.  If either of these 2 were true, then an error
         must be emitted already.  Thus, no need to emit them twice.  */
index 65aad45..5838d6a 100644 (file)
@@ -11925,6 +11925,9 @@ c_finish_omp_clauses (tree clauses)
                s = size_one_node;
              OMP_CLAUSE_LINEAR_STEP (c) = s;
            }
+         else
+           OMP_CLAUSE_LINEAR_STEP (c)
+             = fold_convert (TREE_TYPE (t), OMP_CLAUSE_LINEAR_STEP (c));
          goto check_dup_generic;
 
        check_dup_generic:
index b7f6360..14511e1 100644 (file)
@@ -1013,10 +1013,19 @@ expand_stack_vars (bool (*pred) (size_t), struct stack_vars_data *data)
              if (data->asan_base == NULL)
                data->asan_base = gen_reg_rtx (Pmode);
              base = data->asan_base;
+
+             if (!STRICT_ALIGNMENT)
+               base_align = crtl->max_used_stack_slot_alignment;
+             else
+               base_align = MAX (crtl->max_used_stack_slot_alignment,
+                                 GET_MODE_ALIGNMENT (SImode)
+                                 << ASAN_SHADOW_SHIFT);
            }
          else
-           offset = alloc_stack_frame_space (stack_vars[i].size, alignb);
-         base_align = crtl->max_used_stack_slot_alignment;
+           {
+             offset = alloc_stack_frame_space (stack_vars[i].size, alignb);
+             base_align = crtl->max_used_stack_slot_alignment;
+           }
        }
       else
        {
@@ -1845,6 +1854,11 @@ expand_used_vars (void)
            = alloc_stack_frame_space (redzonesz, ASAN_RED_ZONE_SIZE);
          data.asan_vec.safe_push (prev_offset);
          data.asan_vec.safe_push (offset);
+         /* Leave space for alignment if STRICT_ALIGNMENT.  */
+         if (STRICT_ALIGNMENT)
+           alloc_stack_frame_space ((GET_MODE_ALIGNMENT (SImode)
+                                     << ASAN_SHADOW_SHIFT)
+                                    / BITS_PER_UNIT, 1);
 
          var_end_seq
            = asan_emit_stack_protection (virtual_stack_vars_rtx,
index be3661a..ac9b460 100644 (file)
@@ -2566,11 +2566,16 @@ clone_of_p (struct cgraph_node *node, struct cgraph_node *node2)
       skipped_thunk = true;
     }
 
-  if (skipped_thunk
-      && (!node2->clone_of
-         || !node2->clone.args_to_skip
-         || !bitmap_bit_p (node2->clone.args_to_skip, 0)))
-    return false;
+  if (skipped_thunk)
+    {
+      if (!node2->clone.args_to_skip
+         || !bitmap_bit_p (node2->clone.args_to_skip, 0))
+       return false;
+      if (node2->former_clone_of == node->decl)
+       return true;
+      else if (!node2->clone_of)
+       return false;
+    }
 
   while (node != node2 && node2)
     node2 = node2->clone_of;
index 15310d8..6c3be6d 100644 (file)
@@ -723,6 +723,7 @@ enum symbol_partitioning_class
 /* In symtab.c  */
 void symtab_register_node (symtab_node *);
 void symtab_unregister_node (symtab_node *);
+void symtab_remove_from_same_comdat_group (symtab_node *);
 void symtab_remove_node (symtab_node *);
 symtab_node *symtab_get_node (const_tree);
 symtab_node *symtab_node_for_asm (const_tree asmname);
index 257939c..972ca07 100644 (file)
@@ -302,14 +302,13 @@ set_new_clone_decl_and_node_flags (cgraph_node *new_node)
    thunk is this_adjusting but we are removing this parameter.  */
 
 static cgraph_node *
-duplicate_thunk_for_node (cgraph_node *thunk, cgraph_node *node,
-                         bitmap args_to_skip)
+duplicate_thunk_for_node (cgraph_node *thunk, cgraph_node *node)
 {
   cgraph_node *new_thunk, *thunk_of;
   thunk_of = cgraph_function_or_thunk_node (thunk->callees->callee);
 
   if (thunk_of->thunk.thunk_p)
-    node = duplicate_thunk_for_node (thunk_of, node, args_to_skip);
+    node = duplicate_thunk_for_node (thunk_of, node);
 
   struct cgraph_edge *cs;
   for (cs = node->callers; cs; cs = cs->next_caller)
@@ -321,17 +320,18 @@ duplicate_thunk_for_node (cgraph_node *thunk, cgraph_node *node,
       return cs->caller;
 
   tree new_decl;
-  if (!args_to_skip)
+  if (!node->clone.args_to_skip)
     new_decl = copy_node (thunk->decl);
   else
     {
       /* We do not need to duplicate this_adjusting thunks if we have removed
         this.  */
       if (thunk->thunk.this_adjusting
-         && bitmap_bit_p (args_to_skip, 0))
+         && bitmap_bit_p (node->clone.args_to_skip, 0))
        return node;
 
-      new_decl = build_function_decl_skip_args (thunk->decl, args_to_skip,
+      new_decl = build_function_decl_skip_args (thunk->decl,
+                                               node->clone.args_to_skip,
                                                false);
     }
   gcc_checking_assert (!DECL_STRUCT_FUNCTION (new_decl));
@@ -349,6 +349,8 @@ duplicate_thunk_for_node (cgraph_node *thunk, cgraph_node *node,
   new_thunk->thunk = thunk->thunk;
   new_thunk->unique_name = in_lto_p;
   new_thunk->former_clone_of = thunk->decl;
+  new_thunk->clone.args_to_skip = node->clone.args_to_skip;
+  new_thunk->clone.combined_args_to_skip = node->clone.combined_args_to_skip;
 
   struct cgraph_edge *e = cgraph_create_edge (new_thunk, node, NULL, 0,
                                              CGRAPH_FREQ_BASE);
@@ -365,12 +367,11 @@ duplicate_thunk_for_node (cgraph_node *thunk, cgraph_node *node,
    chain.  */
 
 void
-redirect_edge_duplicating_thunks (struct cgraph_edge *e, struct cgraph_node *n,
-                                 bitmap args_to_skip)
+redirect_edge_duplicating_thunks (struct cgraph_edge *e, struct cgraph_node *n)
 {
   cgraph_node *orig_to = cgraph_function_or_thunk_node (e->callee);
   if (orig_to->thunk.thunk_p)
-    n = duplicate_thunk_for_node (orig_to, n, args_to_skip);
+    n = duplicate_thunk_for_node (orig_to, n);
 
   cgraph_redirect_edge_callee (e, n);
 }
@@ -423,9 +424,21 @@ cgraph_clone_node (struct cgraph_node *n, tree decl, gcov_type count, int freq,
   new_node->rtl = n->rtl;
   new_node->count = count;
   new_node->frequency = n->frequency;
-  new_node->clone = n->clone;
-  new_node->clone.tree_map = NULL;
   new_node->tp_first_run = n->tp_first_run;
+
+  new_node->clone.tree_map = NULL;
+  new_node->clone.args_to_skip = args_to_skip;
+  if (!args_to_skip)
+    new_node->clone.combined_args_to_skip = n->clone.combined_args_to_skip;
+  else if (n->clone.combined_args_to_skip)
+    {
+      new_node->clone.combined_args_to_skip = BITMAP_GGC_ALLOC ();
+      bitmap_ior (new_node->clone.combined_args_to_skip,
+                 n->clone.combined_args_to_skip, args_to_skip);
+    }
+  else
+    new_node->clone.combined_args_to_skip = args_to_skip;
+
   if (n->count)
     {
       if (new_node->count > n->count)
@@ -450,10 +463,9 @@ cgraph_clone_node (struct cgraph_node *n, tree decl, gcov_type count, int freq,
       if (!e->callee
          || DECL_BUILT_IN_CLASS (e->callee->decl) != BUILT_IN_NORMAL
          || DECL_FUNCTION_CODE (e->callee->decl) != BUILT_IN_UNREACHABLE)
-        redirect_edge_duplicating_thunks (e, new_node, args_to_skip);
+        redirect_edge_duplicating_thunks (e, new_node);
     }
 
-
   for (e = n->callees;e; e=e->next_callee)
     cgraph_clone_edge (e, new_node, e->call_stmt, e->lto_stmt_uid,
                       count_scale, freq, update_original);
@@ -562,7 +574,6 @@ cgraph_create_virtual_clone (struct cgraph_node *old_node,
     DECL_SECTION_NAME (new_node->decl) = NULL;
   set_new_clone_decl_and_node_flags (new_node);
   new_node->clone.tree_map = tree_map;
-  new_node->clone.args_to_skip = args_to_skip;
 
   /* Clones of global symbols or symbols with unique names are unique.  */
   if ((TREE_PUBLIC (old_decl)
@@ -574,32 +585,6 @@ cgraph_create_virtual_clone (struct cgraph_node *old_node,
   FOR_EACH_VEC_SAFE_ELT (tree_map, i, map)
     ipa_maybe_record_reference (new_node, map->new_tree,
                                IPA_REF_ADDR, NULL);
-  if (!args_to_skip)
-    new_node->clone.combined_args_to_skip = old_node->clone.combined_args_to_skip;
-  else if (old_node->clone.combined_args_to_skip)
-    {
-      int newi = 0, oldi = 0;
-      tree arg;
-      bitmap new_args_to_skip = BITMAP_GGC_ALLOC ();
-      struct cgraph_node *orig_node;
-      for (orig_node = old_node; orig_node->clone_of; orig_node = orig_node->clone_of)
-        ;
-      for (arg = DECL_ARGUMENTS (orig_node->decl);
-          arg; arg = DECL_CHAIN (arg), oldi++)
-       {
-         if (bitmap_bit_p (old_node->clone.combined_args_to_skip, oldi))
-           {
-             bitmap_set_bit (new_args_to_skip, oldi);
-             continue;
-           }
-         if (bitmap_bit_p (args_to_skip, newi))
-           bitmap_set_bit (new_args_to_skip, oldi);
-         newi++;
-       }
-      new_node->clone.combined_args_to_skip = new_args_to_skip;
-    }
-  else
-    new_node->clone.combined_args_to_skip = args_to_skip;
 
   cgraph_call_node_duplication_hooks (old_node, new_node);
 
index 06283fc..04ef6fa 100644 (file)
@@ -1680,6 +1680,7 @@ expand_thunk (struct cgraph_node *node, bool output_asm_thunks)
 #ifdef ENABLE_CHECKING
       verify_flow_info ();
 #endif
+      free_dominance_info (CDI_DOMINATORS);
 
       /* Since we want to emit the thunk, we explicitly mark its name as
         referenced.  */
index f7a279e..7c00452 100644 (file)
@@ -11987,7 +11987,7 @@ simplify_comparison (enum rtx_code code, rtx *pop0, rtx *pop1)
                = (unsigned HOST_WIDE_INT) 1 << (GET_MODE_BITSIZE (mode) - 1);
              op0 = simplify_gen_binary (AND, tmode,
                                         gen_lowpart (tmode, op0),
-                                        gen_int_mode (sign, mode));
+                                        gen_int_mode (sign, tmode));
              code = (code == LT) ? NE : EQ;
              break;
            }
diff --git a/gcc/common/config/msp430/msp430-common.c b/gcc/common/config/msp430/msp430-common.c
new file mode 100644 (file)
index 0000000..fc2c1f2
--- /dev/null
@@ -0,0 +1,91 @@
+/* Common hooks for Texas Instruments MSP430.
+   Copyright (C) 2014 Free Software Foundation, Inc.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   GCC is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "diagnostic-core.h"
+#include "tm.h"
+#include "common/common-target.h"
+#include "common/common-target-def.h"
+#include "opts.h"
+#include "flags.h"
+
+/* Handle -mcpu= and -mmcu= here.  We want to ensure that only one
+   of these two options - the last specified on the command line -
+   is passed on to the msp430 backend.  */
+
+static bool
+msp430_handle_option (struct gcc_options *opts ATTRIBUTE_UNUSED,
+                     struct gcc_options *opts_set ATTRIBUTE_UNUSED,
+                     const struct cl_decoded_option *decoded,
+                     location_t loc ATTRIBUTE_UNUSED)
+{
+  switch (decoded->opt_index)
+    {
+    case OPT_mcpu_:
+      if (strcasecmp (decoded->arg, "msp430x") == 0
+         || strcasecmp (decoded->arg, "msp430xv2") == 0
+         || strcasecmp (decoded->arg, "430x") == 0
+         || strcasecmp (decoded->arg, "430xv2") == 0)
+       {
+         target_cpu = "msp430x";
+         target_mcu = NULL;
+       }
+      else if (strcasecmp (decoded->arg, "msp430") == 0
+              || strcasecmp (decoded->arg, "430") == 0)
+       {
+         target_cpu = "msp430";
+         target_mcu = NULL;
+       }
+      else
+       {
+         error ("unrecognised argument of -mcpu: %s", decoded->arg);
+         return false;
+       }
+      break;
+
+    case OPT_mmcu_:
+      /* For backwards compatibility we recognise two generic MCU
+        430X names.  However we want to be able to generate special C
+        preprocessor defines for them, which is why we set target_mcu
+        to NULL.  */
+      if (strcasecmp (decoded->arg, "msp430") == 0)
+       {
+         target_cpu = "msp430";
+         target_mcu = NULL;
+       }
+      else if (strcasecmp (decoded->arg, "msp430x") == 0
+              || strcasecmp (decoded->arg, "msp430xv2") == 0)
+       {
+         target_cpu = "msp430x";
+         target_mcu = NULL;
+       }
+      else
+       target_cpu = NULL;
+      break;
+    }
+      
+  return true;
+}
+
+#undef  TARGET_HANDLE_OPTION
+#define TARGET_HANDLE_OPTION                   msp430_handle_option
+
+struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER;
index 3c55c88..63e1222 100644 (file)
@@ -1021,7 +1021,7 @@ arm*-*-linux-*)                   # ARM GNU/Linux with ELF
            ;;
        esac
        tmake_file="${tmake_file} arm/t-arm arm/t-arm-elf arm/t-bpabi arm/t-linux-eabi"
-       tm_file="$tm_file arm/bpabi.h arm/linux-eabi.h arm/aout.h arm/arm.h"
+       tm_file="$tm_file arm/bpabi.h arm/linux-eabi.h arm/aout.h vxworks-dummy.h arm/arm.h"
        # Define multilib configuration for arm-linux-androideabi.
        case ${target} in
        *-androideabi)
@@ -2131,7 +2131,6 @@ msp430*-*-*)
        tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file}"
        c_target_objs="msp430-c.o"
        cxx_target_objs="msp430-c.o"
-       target_has_targetm_common=no
        tmake_file="${tmake_file} msp430/t-msp430"
        ;;
 nds32le-*-*)
index af02866..1e85325 100644 (file)
 #endif
 
 
+/* Define if the linker supports clearing hardware capabilities via mapfile.
+   */
+#ifndef USED_FOR_TARGET
+#undef HAVE_LD_CLEARCAP
+#endif
+
+
 /* Define if your linker supports --demangle option. */
 #ifndef USED_FOR_TARGET
 #undef HAVE_LD_DEMANGLE
index 1d2cc76..f9c4369 100644 (file)
@@ -31,6 +31,7 @@ VECTOR_MODES (INT, 8);        /*       V8QI V4HI V2SI.  */
 VECTOR_MODES (INT, 16);       /* V16QI V8HI V4SI V2DI.  */
 VECTOR_MODES (FLOAT, 8);      /*                 V2SF.  */
 VECTOR_MODES (FLOAT, 16);     /*            V4SF V2DF.  */
+VECTOR_MODE (FLOAT, DF, 1);   /*                 V1DF.  */
 
 /* Oct Int: 256-bit integer mode needed for 32-byte vector arguments.  */
 INT_MODE (OI, 32);
index 73aee2c..1f827b5 100644 (file)
   [(set_attr "type" "neon_minmax<q>")]
 )
 
-;; Move into low-half clearing high half to 0.
+;; vec_concat gives a new vector with the low elements from operand 1, and
+;; the high elements from operand 2.  That is to say, given op1 = { a, b }
+;; op2 = { c, d }, vec_concat (op1, op2) = { a, b, c, d }.
+;; What that means, is that the RTL descriptions of the below patterns
+;; need to change depending on endianness.
 
-(define_insn "move_lo_quad_<mode>"
+;; Move to the low architectural bits of the register.
+;; On little-endian this is { operand, zeroes }
+;; On big-endian this is { zeroes, operand }
+
+(define_insn "move_lo_quad_internal_<mode>"
   [(set (match_operand:VQ 0 "register_operand" "=w,w,w")
         (vec_concat:VQ
          (match_operand:<VHALF> 1 "register_operand" "w,r,r")
          (vec_duplicate:<VHALF> (const_int 0))))]
-  "TARGET_SIMD"
+  "TARGET_SIMD && !BYTES_BIG_ENDIAN"
   "@
    dup\\t%d0, %1.d[0]
    fmov\\t%d0, %1
    (set_attr "length" "4")]
 )
 
-;; Move into high-half.
+(define_insn "move_lo_quad_internal_be_<mode>"
+  [(set (match_operand:VQ 0 "register_operand" "=w,w,w")
+        (vec_concat:VQ
+         (vec_duplicate:<VHALF> (const_int 0))
+         (match_operand:<VHALF> 1 "register_operand" "w,r,r")))]
+  "TARGET_SIMD && BYTES_BIG_ENDIAN"
+  "@
+   dup\\t%d0, %1.d[0]
+   fmov\\t%d0, %1
+   dup\\t%d0, %1"
+  [(set_attr "type" "neon_dup<q>,f_mcr,neon_dup<q>")
+   (set_attr "simd" "yes,*,yes")
+   (set_attr "fp" "*,yes,*")
+   (set_attr "length" "4")]
+)
+
+(define_expand "move_lo_quad_<mode>"
+  [(match_operand:VQ 0 "register_operand")
+   (match_operand:VQ 1 "register_operand")]
+  "TARGET_SIMD"
+{
+  if (BYTES_BIG_ENDIAN)
+    emit_insn (gen_move_lo_quad_internal_be_<mode> (operands[0], operands[1]));
+  else
+    emit_insn (gen_move_lo_quad_internal_<mode> (operands[0], operands[1]));
+  DONE;
+}
+)
+
+;; Move operand1 to the high architectural bits of the register, keeping
+;; the low architectural bits of operand2.
+;; For little-endian this is { operand2, operand1 }
+;; For big-endian this is { operand1, operand2 }
 
 (define_insn "aarch64_simd_move_hi_quad_<mode>"
   [(set (match_operand:VQ 0 "register_operand" "+w,w")
                 (match_dup 0)
                 (match_operand:VQ 2 "vect_par_cnst_lo_half" ""))
          (match_operand:<VHALF> 1 "register_operand" "w,r")))]
-  "TARGET_SIMD"
+  "TARGET_SIMD && !BYTES_BIG_ENDIAN"
   "@
    ins\\t%0.d[1], %1.d[0]
    ins\\t%0.d[1], %1"
-  [(set_attr "type" "neon_ins")
-   (set_attr "length" "4")]
+  [(set_attr "type" "neon_ins")]
+)
+
+(define_insn "aarch64_simd_move_hi_quad_be_<mode>"
+  [(set (match_operand:VQ 0 "register_operand" "+w,w")
+        (vec_concat:VQ
+         (match_operand:<VHALF> 1 "register_operand" "w,r")
+          (vec_select:<VHALF>
+                (match_dup 0)
+                (match_operand:VQ 2 "vect_par_cnst_hi_half" ""))))]
+  "TARGET_SIMD && BYTES_BIG_ENDIAN"
+  "@
+   ins\\t%0.d[1], %1.d[0]
+   ins\\t%0.d[1], %1"
+  [(set_attr "type" "neon_ins")]
 )
 
 (define_expand "move_hi_quad_<mode>"
   (match_operand:<VHALF> 1 "register_operand" "")]
  "TARGET_SIMD"
 {
-  rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, false);
-  emit_insn (gen_aarch64_simd_move_hi_quad_<mode> (operands[0],
-                                                  operands[1], p));
+  rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, BYTES_BIG_ENDIAN);
+  if (BYTES_BIG_ENDIAN)
+    emit_insn (gen_aarch64_simd_move_hi_quad_be_<mode> (operands[0],
+                   operands[1], p));
+  else
+    emit_insn (gen_aarch64_simd_move_hi_quad_<mode> (operands[0],
+                   operands[1], p));
   DONE;
 })
 
         (vec_concat:<VDBL>
           (match_operand:VDIC 1 "register_operand" "w")
           (match_operand:VDIC 2 "aarch64_simd_imm_zero" "Dz")))]
-  "TARGET_SIMD"
+  "TARGET_SIMD && !BYTES_BIG_ENDIAN"
   "mov\\t%0.8b, %1.8b"
   [(set_attr "type" "neon_move<q>")]
 )
 
-(define_insn_and_split "aarch64_combine<mode>"
+(define_insn "*aarch64_combinez_be<mode>"
+  [(set (match_operand:<VDBL> 0 "register_operand" "=&w")
+        (vec_concat:<VDBL>
+          (match_operand:VDIC 2 "aarch64_simd_imm_zero" "Dz")
+          (match_operand:VDIC 1 "register_operand" "w")))]
+  "TARGET_SIMD && BYTES_BIG_ENDIAN"
+  "mov\\t%0.8b, %1.8b"
+  [(set_attr "type" "neon_move<q>")]
+)
+
+(define_expand "aarch64_combine<mode>"
+  [(match_operand:<VDBL> 0 "register_operand")
+   (match_operand:VDC 1 "register_operand")
+   (match_operand:VDC 2 "register_operand")]
+  "TARGET_SIMD"
+{
+  rtx op1, op2;
+  if (BYTES_BIG_ENDIAN)
+    {
+      op1 = operands[2];
+      op2 = operands[1];
+    }
+  else
+    {
+      op1 = operands[1];
+      op2 = operands[2];
+    }
+  emit_insn (gen_aarch64_combine_internal<mode> (operands[0], op1, op2));
+  DONE;
+}
+)
+
+(define_insn_and_split "aarch64_combine_internal<mode>"
   [(set (match_operand:<VDBL> 0 "register_operand" "=&w")
         (vec_concat:<VDBL> (match_operand:VDC 1 "register_operand" "w")
                           (match_operand:VDC 2 "register_operand" "w")))]
   "&& reload_completed"
   [(const_int 0)]
 {
-  aarch64_split_simd_combine (operands[0], operands[1], operands[2]);
+  if (BYTES_BIG_ENDIAN)
+    aarch64_split_simd_combine (operands[0], operands[2], operands[1]);
+  else
+    aarch64_split_simd_combine (operands[0], operands[1], operands[2]);
   DONE;
 }
 [(set_attr "type" "multiple")]
 )
 
 (define_expand "aarch64_simd_combine<mode>"
-  [(set (match_operand:<VDBL> 0 "register_operand" "=&w")
-        (vec_concat:<VDBL> (match_operand:VDC 1 "register_operand" "w")
-  (match_operand:VDC 2 "register_operand" "w")))]
+  [(match_operand:<VDBL> 0 "register_operand")
+   (match_operand:VDC 1 "register_operand")
+   (match_operand:VDC 2 "register_operand")]
   "TARGET_SIMD"
   {
     emit_insn (gen_move_lo_quad_<Vdbl> (operands[0], operands[1]));
 
 ;; sq<r>dmulh_lane
 
-(define_insn "aarch64_sq<r>dmulh_lane<mode>"
+(define_expand "aarch64_sqdmulh_lane<mode>"
+  [(match_operand:VDQHS 0 "register_operand" "")
+   (match_operand:VDQHS 1 "register_operand" "")
+   (match_operand:<VCOND> 2 "register_operand" "")
+   (match_operand:SI 3 "immediate_operand" "")]
+  "TARGET_SIMD"
+  {
+     aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCOND>mode));
+     operands[3] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[3])));
+     emit_insn (gen_aarch64_sqdmulh_lane<mode>_internal (operands[0],
+                                                         operands[1],
+                                                         operands[2],
+                                                         operands[3]));
+     DONE;
+  }
+)
+
+(define_expand "aarch64_sqrdmulh_lane<mode>"
+  [(match_operand:VDQHS 0 "register_operand" "")
+   (match_operand:VDQHS 1 "register_operand" "")
+   (match_operand:<VCOND> 2 "register_operand" "")
+   (match_operand:SI 3 "immediate_operand" "")]
+  "TARGET_SIMD"
+  {
+     aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCOND>mode));
+     operands[3] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[3])));
+     emit_insn (gen_aarch64_sqrdmulh_lane<mode>_internal (operands[0],
+                                                          operands[1],
+                                                          operands[2],
+                                                          operands[3]));
+     DONE;
+  }
+)
+
+(define_insn "aarch64_sq<r>dmulh_lane<mode>_internal"
   [(set (match_operand:VDQHS 0 "register_operand" "=w")
         (unspec:VDQHS
          [(match_operand:VDQHS 1 "register_operand" "w")
   [(set_attr "type" "neon_sat_mul_<Vetype>_scalar<q>")]
 )
 
-(define_insn "aarch64_sq<r>dmulh_laneq<mode>"
+(define_expand "aarch64_sqdmulh_laneq<mode>"
+  [(match_operand:VDQHS 0 "register_operand" "")
+   (match_operand:VDQHS 1 "register_operand" "")
+   (match_operand:<VCONQ> 2 "register_operand" "")
+   (match_operand:SI 3 "immediate_operand" "")]
+  "TARGET_SIMD"
+  {
+     aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCONQ>mode));
+     operands[3] = GEN_INT (ENDIAN_LANE_N (<VCONQ>mode, INTVAL (operands[3])));
+     emit_insn (gen_aarch64_sqdmulh_laneq<mode>_internal (operands[0],
+                                                          operands[1],
+                                                          operands[2],
+                                                          operands[3]));
+     DONE;
+   }
+)
+
+(define_expand "aarch64_sqrdmulh_laneq<mode>"
+  [(match_operand:VDQHS 0 "register_operand" "")
+   (match_operand:VDQHS 1 "register_operand" "")
+   (match_operand:<VCONQ> 2 "register_operand" "")
+   (match_operand:SI 3 "immediate_operand" "")]
+  "TARGET_SIMD"
+  {
+     aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCONQ>mode));
+     operands[3] = GEN_INT (ENDIAN_LANE_N (<VCONQ>mode, INTVAL (operands[3])));
+     emit_insn (gen_aarch64_sqrdmulh_laneq<mode>_internal (operands[0],
+                                                           operands[1],
+                                                           operands[2],
+                                                           operands[3]));
+     DONE;
+   }
+)
+
+(define_insn "aarch64_sq<r>dmulh_laneq<mode>_internal"
   [(set (match_operand:VDQHS 0 "register_operand" "=w")
         (unspec:VDQHS
          [(match_operand:VDQHS 1 "register_operand" "w")
         VQDMULH))]
   "TARGET_SIMD"
   "*
-   aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCONQ>mode));
    operands[3] = GEN_INT (ENDIAN_LANE_N (<VCONQ>mode, INTVAL (operands[3])));
    return \"sq<r>dmulh\\t%0.<Vtype>, %1.<Vtype>, %2.<Vetype>[%3]\";"
   [(set_attr "type" "neon_sat_mul_<Vetype>_scalar<q>")]
 )
 
-(define_insn "aarch64_sq<r>dmulh_lane<mode>"
+(define_expand "aarch64_sqdmulh_lane<mode>"
+  [(match_operand:SD_HSI 0 "register_operand" "")
+   (match_operand:SD_HSI 1 "register_operand" "")
+   (match_operand:<VCOND> 2 "register_operand" "")
+   (match_operand:SI 3 "immediate_operand" "")]
+  "TARGET_SIMD"
+  {
+    aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCOND>mode));
+    operands[3] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[3])));
+    emit_insn (gen_aarch64_sqdmulh_lane<mode>_internal (operands[0],
+                                                        operands[1],
+                                                        operands[2],
+                                                        operands[3]));
+    DONE;
+  }
+)
+
+(define_expand "aarch64_sqrdmulh_lane<mode>"
+  [(match_operand:SD_HSI 0 "register_operand" "")
+   (match_operand:SD_HSI 1 "register_operand" "")
+   (match_operand:<VCOND> 2 "register_operand" "")
+   (match_operand:SI 3 "immediate_operand" "")]
+  "TARGET_SIMD"
+  {
+    aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCOND>mode));
+    operands[3] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[3])));
+    emit_insn (gen_aarch64_sqrdmulh_lane<mode>_internal (operands[0],
+                                                         operands[1],
+                                                         operands[2],
+                                                         operands[3]));
+    DONE;
+  }
+)
+
+(define_insn "aarch64_sq<r>dmulh_lane<mode>_internal"
   [(set (match_operand:SD_HSI 0 "register_operand" "=w")
         (unspec:SD_HSI
          [(match_operand:SD_HSI 1 "register_operand" "w")
            (vec_select:<VEL>
-             (match_operand:<VCONQ> 2 "register_operand" "<vwx>")
+             (match_operand:<VCOND> 2 "register_operand" "<vwx>")
              (parallel [(match_operand:SI 3 "immediate_operand" "i")]))]
         VQDMULH))]
   "TARGET_SIMD"
   "*
-   aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCONQ>mode));
-   operands[3] = GEN_INT (ENDIAN_LANE_N (<VCONQ>mode, INTVAL (operands[3])));
+   operands[3] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[3])));
    return \"sq<r>dmulh\\t%<v>0, %<v>1, %2.<v>[%3]\";"
   [(set_attr "type" "neon_sat_mul_<Vetype>_scalar<q>")]
 )
              (sign_extend:<VWIDE>
                (vec_duplicate:VD_HSI
                  (vec_select:<VEL>
-                   (match_operand:<VCON> 3 "register_operand" "<vwx>")
+                   (match_operand:<VCOND> 3 "register_operand" "<vwx>")
+                   (parallel [(match_operand:SI 4 "immediate_operand" "i")])))
+              ))
+           (const_int 1))))]
+  "TARGET_SIMD"
+  {
+    operands[4] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[4])));
+    return
+      "sqdml<SBINQOPS:as>l\\t%<vw2>0<Vmwtype>, %<v>2<Vmtype>, %3.<Vetype>[%4]";
+  }
+  [(set_attr "type" "neon_sat_mla_<Vetype>_scalar_long")]
+)
+
+(define_insn "aarch64_sqdml<SBINQOPS:as>l_laneq<mode>_internal"
+  [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
+        (SBINQOPS:<VWIDE>
+         (match_operand:<VWIDE> 1 "register_operand" "0")
+         (ss_ashift:<VWIDE>
+           (mult:<VWIDE>
+             (sign_extend:<VWIDE>
+               (match_operand:VD_HSI 2 "register_operand" "w"))
+             (sign_extend:<VWIDE>
+               (vec_duplicate:VD_HSI
+                 (vec_select:<VEL>
+                   (match_operand:<VCONQ> 3 "register_operand" "<vwx>")
                    (parallel [(match_operand:SI 4 "immediate_operand" "i")])))
               ))
            (const_int 1))))]
                (match_operand:SD_HSI 2 "register_operand" "w"))
              (sign_extend:<VWIDE>
                (vec_select:<VEL>
-                 (match_operand:<VCON> 3 "register_operand" "<vwx>")
+                 (match_operand:<VCOND> 3 "register_operand" "<vwx>")
+                 (parallel [(match_operand:SI 4 "immediate_operand" "i")])))
+              )
+           (const_int 1))))]
+  "TARGET_SIMD"
+  {
+    operands[4] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[4])));
+    return
+      "sqdml<SBINQOPS:as>l\\t%<vw2>0<Vmwtype>, %<v>2<Vmtype>, %3.<Vetype>[%4]";
+  }
+  [(set_attr "type" "neon_sat_mla_<Vetype>_scalar_long")]
+)
+
+(define_insn "aarch64_sqdml<SBINQOPS:as>l_laneq<mode>_internal"
+  [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
+        (SBINQOPS:<VWIDE>
+         (match_operand:<VWIDE> 1 "register_operand" "0")
+         (ss_ashift:<VWIDE>
+           (mult:<VWIDE>
+             (sign_extend:<VWIDE>
+               (match_operand:SD_HSI 2 "register_operand" "w"))
+             (sign_extend:<VWIDE>
+               (vec_select:<VEL>
+                 (match_operand:<VCONQ> 3 "register_operand" "<vwx>")
                  (parallel [(match_operand:SI 4 "immediate_operand" "i")])))
               )
            (const_int 1))))]
   [(match_operand:<VWIDE> 0 "register_operand" "=w")
    (match_operand:<VWIDE> 1 "register_operand" "0")
    (match_operand:VSD_HSI 2 "register_operand" "w")
-   (match_operand:<VCON> 3 "register_operand" "<vwx>")
+   (match_operand:<VCOND> 3 "register_operand" "<vwx>")
    (match_operand:SI 4 "immediate_operand" "i")]
   "TARGET_SIMD"
 {
-  aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCON>mode) / 2);
+  aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCOND>mode));
+  operands[4] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[4])));
   emit_insn (gen_aarch64_sqdmlal_lane<mode>_internal (operands[0], operands[1],
                                                      operands[2], operands[3],
                                                      operands[4]));
   [(match_operand:<VWIDE> 0 "register_operand" "=w")
    (match_operand:<VWIDE> 1 "register_operand" "0")
    (match_operand:VSD_HSI 2 "register_operand" "w")
-   (match_operand:<VCON> 3 "register_operand" "<vwx>")
+   (match_operand:<VCONQ> 3 "register_operand" "<vwx>")
    (match_operand:SI 4 "immediate_operand" "i")]
   "TARGET_SIMD"
 {
-  aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCON>mode));
-  emit_insn (gen_aarch64_sqdmlal_lane<mode>_internal (operands[0], operands[1],
+  aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCONQ>mode));
+  operands[4] = GEN_INT (ENDIAN_LANE_N (<VCONQ>mode, INTVAL (operands[4])));
+  emit_insn (gen_aarch64_sqdmlal_laneq<mode>_internal (operands[0], operands[1],
                                                      operands[2], operands[3],
                                                      operands[4]));
   DONE;
   [(match_operand:<VWIDE> 0 "register_operand" "=w")
    (match_operand:<VWIDE> 1 "register_operand" "0")
    (match_operand:VSD_HSI 2 "register_operand" "w")
-   (match_operand:<VCON> 3 "register_operand" "<vwx>")
+   (match_operand:<VCOND> 3 "register_operand" "<vwx>")
    (match_operand:SI 4 "immediate_operand" "i")]
   "TARGET_SIMD"
 {
-  aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCON>mode) / 2);
+  aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCOND>mode));
+  operands[4] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[4])));
   emit_insn (gen_aarch64_sqdmlsl_lane<mode>_internal (operands[0], operands[1],
                                                      operands[2], operands[3],
                                                      operands[4]));
   [(match_operand:<VWIDE> 0 "register_operand" "=w")
    (match_operand:<VWIDE> 1 "register_operand" "0")
    (match_operand:VSD_HSI 2 "register_operand" "w")
-   (match_operand:<VCON> 3 "register_operand" "<vwx>")
+   (match_operand:<VCONQ> 3 "register_operand" "<vwx>")
    (match_operand:SI 4 "immediate_operand" "i")]
   "TARGET_SIMD"
 {
-  aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCON>mode));
-  emit_insn (gen_aarch64_sqdmlsl_lane<mode>_internal (operands[0], operands[1],
+  aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCONQ>mode));
+  operands[4] = GEN_INT (ENDIAN_LANE_N (<VCONQ>mode, INTVAL (operands[4])));
+  emit_insn (gen_aarch64_sqdmlsl_laneq<mode>_internal (operands[0], operands[1],
                                                      operands[2], operands[3],
                                                      operands[4]));
   DONE;
                (sign_extend:<VWIDE>
                   (vec_duplicate:<VHALF>
                    (vec_select:<VEL>
-                     (match_operand:<VCON> 3 "register_operand" "<vwx>")
+                     (match_operand:<VCOND> 3 "register_operand" "<vwx>")
+                     (parallel [(match_operand:SI 4 "immediate_operand" "i")])
+                   ))))
+             (const_int 1))))]
+  "TARGET_SIMD"
+  {
+    operands[4] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[4])));
+    return
+     "sqdml<SBINQOPS:as>l2\\t%<vw2>0<Vmwtype>, %<v>2<Vmtype>, %3.<Vetype>[%4]";
+  }
+  [(set_attr "type" "neon_sat_mla_<Vetype>_scalar_long")]
+)
+
+(define_insn "aarch64_sqdml<SBINQOPS:as>l2_laneq<mode>_internal"
+  [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
+        (SBINQOPS:<VWIDE>
+         (match_operand:<VWIDE> 1 "register_operand" "0")
+         (ss_ashift:<VWIDE>
+             (mult:<VWIDE>
+               (sign_extend:<VWIDE>
+                  (vec_select:<VHALF>
+                    (match_operand:VQ_HSI 2 "register_operand" "w")
+                    (match_operand:VQ_HSI 5 "vect_par_cnst_hi_half" "")))
+               (sign_extend:<VWIDE>
+                  (vec_duplicate:<VHALF>
+                   (vec_select:<VEL>
+                     (match_operand:<VCONQ> 3 "register_operand" "<vwx>")
                      (parallel [(match_operand:SI 4 "immediate_operand" "i")])
                    ))))
              (const_int 1))))]
   [(match_operand:<VWIDE> 0 "register_operand" "=w")
    (match_operand:<VWIDE> 1 "register_operand" "w")
    (match_operand:VQ_HSI 2 "register_operand" "w")
-   (match_operand:<VCON> 3 "register_operand" "<vwx>")
+   (match_operand:<VCOND> 3 "register_operand" "<vwx>")
    (match_operand:SI 4 "immediate_operand" "i")]
   "TARGET_SIMD"
 {
   rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-  aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<MODE>mode) / 2);
+  aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCOND>mode));
+  operands[4] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[4])));
   emit_insn (gen_aarch64_sqdmlal2_lane<mode>_internal (operands[0], operands[1],
                                                       operands[2], operands[3],
                                                       operands[4], p));
   [(match_operand:<VWIDE> 0 "register_operand" "=w")
    (match_operand:<VWIDE> 1 "register_operand" "w")
    (match_operand:VQ_HSI 2 "register_operand" "w")
-   (match_operand:<VCON> 3 "register_operand" "<vwx>")
+   (match_operand:<VCONQ> 3 "register_operand" "<vwx>")
    (match_operand:SI 4 "immediate_operand" "i")]
   "TARGET_SIMD"
 {
   rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-  aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<MODE>mode));
-  emit_insn (gen_aarch64_sqdmlal2_lane<mode>_internal (operands[0], operands[1],
+  aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCONQ>mode));
+  operands[4] = GEN_INT (ENDIAN_LANE_N (<VCONQ>mode, INTVAL (operands[4])));
+  emit_insn (gen_aarch64_sqdmlal2_laneq<mode>_internal (operands[0], operands[1],
                                                       operands[2], operands[3],
                                                       operands[4], p));
   DONE;
   [(match_operand:<VWIDE> 0 "register_operand" "=w")
    (match_operand:<VWIDE> 1 "register_operand" "w")
    (match_operand:VQ_HSI 2 "register_operand" "w")
-   (match_operand:<VCON> 3 "register_operand" "<vwx>")
+   (match_operand:<VCOND> 3 "register_operand" "<vwx>")
    (match_operand:SI 4 "immediate_operand" "i")]
   "TARGET_SIMD"
 {
   rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-  aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<MODE>mode) / 2);
+  aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCOND>mode));
+  operands[4] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[4])));
   emit_insn (gen_aarch64_sqdmlsl2_lane<mode>_internal (operands[0], operands[1],
                                                       operands[2], operands[3],
                                                       operands[4], p));
   [(match_operand:<VWIDE> 0 "register_operand" "=w")
    (match_operand:<VWIDE> 1 "register_operand" "w")
    (match_operand:VQ_HSI 2 "register_operand" "w")
-   (match_operand:<VCON> 3 "register_operand" "<vwx>")
+   (match_operand:<VCONQ> 3 "register_operand" "<vwx>")
    (match_operand:SI 4 "immediate_operand" "i")]
   "TARGET_SIMD"
 {
   rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-  aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<MODE>mode));
-  emit_insn (gen_aarch64_sqdmlsl2_lane<mode>_internal (operands[0], operands[1],
+  aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCONQ>mode));
+  operands[4] = GEN_INT (ENDIAN_LANE_N (<VCONQ>mode, INTVAL (operands[4])));
+  emit_insn (gen_aarch64_sqdmlsl2_laneq<mode>_internal (operands[0], operands[1],
                                                       operands[2], operands[3],
                                                       operands[4], p));
   DONE;
               (sign_extend:<VWIDE>
                  (vec_duplicate:VD_HSI
                    (vec_select:<VEL>
-                    (match_operand:<VCON> 2 "register_operand" "<vwx>")
+                    (match_operand:<VCOND> 2 "register_operand" "<vwx>")
+                    (parallel [(match_operand:SI 3 "immediate_operand" "i")])))
+              ))
+            (const_int 1)))]
+  "TARGET_SIMD"
+  {
+    operands[3] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[3])));
+    return "sqdmull\\t%<vw2>0<Vmwtype>, %<v>1<Vmtype>, %2.<Vetype>[%3]";
+  }
+  [(set_attr "type" "neon_sat_mul_<Vetype>_scalar_long")]
+)
+
+(define_insn "aarch64_sqdmull_laneq<mode>_internal"
+  [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
+        (ss_ashift:<VWIDE>
+            (mult:<VWIDE>
+              (sign_extend:<VWIDE>
+                (match_operand:VD_HSI 1 "register_operand" "w"))
+              (sign_extend:<VWIDE>
+                 (vec_duplicate:VD_HSI
+                   (vec_select:<VEL>
+                    (match_operand:<VCONQ> 2 "register_operand" "<vwx>")
                     (parallel [(match_operand:SI 3 "immediate_operand" "i")])))
               ))
             (const_int 1)))]
                 (match_operand:SD_HSI 1 "register_operand" "w"))
               (sign_extend:<VWIDE>
                  (vec_select:<VEL>
-                  (match_operand:<VCON> 2 "register_operand" "<vwx>")
+                  (match_operand:<VCOND> 2 "register_operand" "<vwx>")
+                  (parallel [(match_operand:SI 3 "immediate_operand" "i")]))
+              ))
+            (const_int 1)))]
+  "TARGET_SIMD"
+  {
+    operands[3] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[3])));
+    return "sqdmull\\t%<vw2>0<Vmwtype>, %<v>1<Vmtype>, %2.<Vetype>[%3]";
+  }
+  [(set_attr "type" "neon_sat_mul_<Vetype>_scalar_long")]
+)
+
+(define_insn "aarch64_sqdmull_laneq<mode>_internal"
+  [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
+        (ss_ashift:<VWIDE>
+            (mult:<VWIDE>
+              (sign_extend:<VWIDE>
+                (match_operand:SD_HSI 1 "register_operand" "w"))
+              (sign_extend:<VWIDE>
+                 (vec_select:<VEL>
+                  (match_operand:<VCONQ> 2 "register_operand" "<vwx>")
                   (parallel [(match_operand:SI 3 "immediate_operand" "i")]))
               ))
             (const_int 1)))]
 (define_expand "aarch64_sqdmull_lane<mode>"
   [(match_operand:<VWIDE> 0 "register_operand" "=w")
    (match_operand:VSD_HSI 1 "register_operand" "w")
-   (match_operand:<VCON> 2 "register_operand" "<vwx>")
+   (match_operand:<VCOND> 2 "register_operand" "<vwx>")
    (match_operand:SI 3 "immediate_operand" "i")]
   "TARGET_SIMD"
 {
-  aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCON>mode) / 2);
+  aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCOND>mode));
+  operands[3] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[3])));
   emit_insn (gen_aarch64_sqdmull_lane<mode>_internal (operands[0], operands[1],
                                                      operands[2], operands[3]));
   DONE;
 (define_expand "aarch64_sqdmull_laneq<mode>"
   [(match_operand:<VWIDE> 0 "register_operand" "=w")
    (match_operand:VD_HSI 1 "register_operand" "w")
-   (match_operand:<VCON> 2 "register_operand" "<vwx>")
+   (match_operand:<VCONQ> 2 "register_operand" "<vwx>")
    (match_operand:SI 3 "immediate_operand" "i")]
   "TARGET_SIMD"
 {
-  aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCON>mode));
-  emit_insn (gen_aarch64_sqdmull_lane<mode>_internal
+  aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCONQ>mode));
+  operands[3] = GEN_INT (ENDIAN_LANE_N (<VCONQ>mode, INTVAL (operands[3])));
+  emit_insn (gen_aarch64_sqdmull_laneq<mode>_internal
               (operands[0], operands[1], operands[2], operands[3]));
   DONE;
 })
 (define_expand "aarch64_sqdmull2<mode>"
   [(match_operand:<VWIDE> 0 "register_operand" "=w")
    (match_operand:VQ_HSI 1 "register_operand" "w")
-   (match_operand:<VCON> 2 "register_operand" "w")]
+   (match_operand:VQ_HSI 2 "register_operand" "w")]
   "TARGET_SIMD"
 {
   rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
               (sign_extend:<VWIDE>
                  (vec_duplicate:<VHALF>
                    (vec_select:<VEL>
-                    (match_operand:<VCON> 2 "register_operand" "<vwx>")
+                    (match_operand:<VCOND> 2 "register_operand" "<vwx>")
+                    (parallel [(match_operand:SI 3 "immediate_operand" "i")])))
+              ))
+            (const_int 1)))]
+  "TARGET_SIMD"
+  {
+    operands[3] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[3])));
+    return "sqdmull2\\t%<vw2>0<Vmwtype>, %<v>1<Vmtype>, %2.<Vetype>[%3]";
+  }
+  [(set_attr "type" "neon_sat_mul_<Vetype>_scalar_long")]
+)
+
+(define_insn "aarch64_sqdmull2_laneq<mode>_internal"
+  [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
+        (ss_ashift:<VWIDE>
+            (mult:<VWIDE>
+              (sign_extend:<VWIDE>
+                (vec_select:<VHALF>
+                   (match_operand:VQ_HSI 1 "register_operand" "w")
+                   (match_operand:VQ_HSI 4 "vect_par_cnst_hi_half" "")))
+              (sign_extend:<VWIDE>
+                 (vec_duplicate:<VHALF>
+                   (vec_select:<VEL>
+                    (match_operand:<VCONQ> 2 "register_operand" "<vwx>")
                     (parallel [(match_operand:SI 3 "immediate_operand" "i")])))
               ))
             (const_int 1)))]
 (define_expand "aarch64_sqdmull2_lane<mode>"
   [(match_operand:<VWIDE> 0 "register_operand" "=w")
    (match_operand:VQ_HSI 1 "register_operand" "w")
-   (match_operand:<VCON> 2 "register_operand" "<vwx>")
+   (match_operand:<VCOND> 2 "register_operand" "<vwx>")
    (match_operand:SI 3 "immediate_operand" "i")]
   "TARGET_SIMD"
 {
   rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-  aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<MODE>mode) / 2);
+  aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCOND>mode));
+  operands[3] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[3])));
   emit_insn (gen_aarch64_sqdmull2_lane<mode>_internal (operands[0], operands[1],
                                                       operands[2], operands[3],
                                                       p));
 (define_expand "aarch64_sqdmull2_laneq<mode>"
   [(match_operand:<VWIDE> 0 "register_operand" "=w")
    (match_operand:VQ_HSI 1 "register_operand" "w")
-   (match_operand:<VCON> 2 "register_operand" "<vwx>")
+   (match_operand:<VCONQ> 2 "register_operand" "<vwx>")
    (match_operand:SI 3 "immediate_operand" "i")]
   "TARGET_SIMD"
 {
   rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-  aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<MODE>mode));
-  emit_insn (gen_aarch64_sqdmull2_lane<mode>_internal (operands[0], operands[1],
+  aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCONQ>mode));
+  operands[3] = GEN_INT (ENDIAN_LANE_N (<VCONQ>mode, INTVAL (operands[3])));
+  emit_insn (gen_aarch64_sqdmull2_laneq<mode>_internal (operands[0], operands[1],
                                                       operands[2], operands[3],
                                                       p));
   DONE;
index 7b6c2b3..bf35031 100644 (file)
@@ -1405,6 +1405,7 @@ aarch64_layout_arg (cumulative_args_t pcum_v, enum machine_mode mode,
   CUMULATIVE_ARGS *pcum = get_cumulative_args (pcum_v);
   int ncrn, nvrn, nregs;
   bool allocate_ncrn, allocate_nvrn;
+  HOST_WIDE_INT size;
 
   /* We need to do this once per argument.  */
   if (pcum->aapcs_arg_processed)
@@ -1412,6 +1413,11 @@ aarch64_layout_arg (cumulative_args_t pcum_v, enum machine_mode mode,
 
   pcum->aapcs_arg_processed = true;
 
+  /* Size in bytes, rounded to the nearest multiple of 8 bytes.  */
+  size
+    = AARCH64_ROUND_UP (type ? int_size_in_bytes (type) : GET_MODE_SIZE (mode),
+                       UNITS_PER_WORD);
+
   allocate_ncrn = (type) ? !(FLOAT_TYPE_P (type)) : !FLOAT_MODE_P (mode);
   allocate_nvrn = aarch64_vfp_is_call_candidate (pcum_v,
                                                 mode,
@@ -1462,9 +1468,7 @@ aarch64_layout_arg (cumulative_args_t pcum_v, enum machine_mode mode,
     }
 
   ncrn = pcum->aapcs_ncrn;
-  nregs = ((type ? int_size_in_bytes (type) : GET_MODE_SIZE (mode))
-          + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
-
+  nregs = size / UNITS_PER_WORD;
 
   /* C6 - C9.  though the sign and zero extension semantics are
      handled elsewhere.  This is the case where the argument fits
@@ -1513,13 +1517,12 @@ aarch64_layout_arg (cumulative_args_t pcum_v, enum machine_mode mode,
   pcum->aapcs_nextncrn = NUM_ARG_REGS;
 
   /* The argument is passed on stack; record the needed number of words for
-     this argument (we can re-use NREGS) and align the total size if
-     necessary.  */
+     this argument and align the total size if necessary.  */
 on_stack:
-  pcum->aapcs_stack_words = nregs;
+  pcum->aapcs_stack_words = size / UNITS_PER_WORD;
   if (aarch64_function_arg_alignment (mode, type) == 16 * BITS_PER_UNIT)
     pcum->aapcs_stack_size = AARCH64_ROUND_UP (pcum->aapcs_stack_size,
-                                              16 / UNITS_PER_WORD) + 1;
+                                              16 / UNITS_PER_WORD);
   return;
 }
 
@@ -6304,7 +6307,8 @@ aarch64_vector_mode_supported_p (enum machine_mode mode)
          || mode == V16QImode || mode == V2DImode
          || mode == V2SImode  || mode == V4HImode
          || mode == V8QImode || mode == V2SFmode
-         || mode == V4SFmode || mode == V2DFmode))
+         || mode == V4SFmode || mode == V2DFmode
+         || mode == V1DFmode))
     return true;
 
   return false;
index 7962aa4..2fd6df4 100644 (file)
@@ -32,7 +32,7 @@
       else                                             \
        builtin_define ("__AARCH64EL__");               \
                                                        \
-      if (!TARGET_GENERAL_REGS_ONLY)                   \
+      if (TARGET_SIMD)                                 \
        builtin_define ("__ARM_NEON");                  \
                                                        \
       switch (aarch64_cmodel)                          \
@@ -83,9 +83,9 @@
 #define WORDS_BIG_ENDIAN (BYTES_BIG_ENDIAN)
 
 /* AdvSIMD is supported in the default configuration, unless disabled by
-   -mgeneral-regs-only.  */
-#define TARGET_SIMD !TARGET_GENERAL_REGS_ONLY
-#define TARGET_FLOAT !TARGET_GENERAL_REGS_ONLY
+   -mgeneral-regs-only or by the +nosimd extension.  */
+#define TARGET_SIMD (!TARGET_GENERAL_REGS_ONLY && AARCH64_ISA_SIMD)
+#define TARGET_FLOAT (!TARGET_GENERAL_REGS_ONLY && AARCH64_ISA_FP)
 
 #define UNITS_PER_WORD         8
 
@@ -185,8 +185,8 @@ extern unsigned long aarch64_isa_flags;
 extern unsigned long aarch64_tune_flags;
 #define AARCH64_TUNE_SLOWMUL       (aarch64_tune_flags & AARCH64_FL_SLOWMUL)
 
-/* Crypto is an optional feature.  */
-#define TARGET_CRYPTO AARCH64_ISA_CRYPTO
+/* Crypto is an optional extension to AdvSIMD.  */
+#define TARGET_CRYPTO (TARGET_SIMD && AARCH64_ISA_CRYPTO)
 
 /* Standard register usage.  */
 
index c86a29d..df81045 100644 (file)
 
 ;; Arithmetic right shift using SISD or Integer instruction
 (define_insn "*aarch64_ashr_sisd_or_int_<mode>3"
-  [(set (match_operand:GPI 0 "register_operand" "=w,w,r")
+  [(set (match_operand:GPI 0 "register_operand" "=w,&w,&w,r")
         (ashiftrt:GPI
-          (match_operand:GPI 1 "register_operand" "w,w,r")
-          (match_operand:QI 2 "aarch64_reg_or_shift_imm_di" "Us<cmode>,w,rUs<cmode>")))]
+          (match_operand:GPI 1 "register_operand" "w,w,w,r")
+          (match_operand:QI 2 "aarch64_reg_or_shift_imm_di" "Us<cmode>,w,0,rUs<cmode>")))]
   ""
   "@
    sshr\t%<rtn>0<vas>, %<rtn>1<vas>, %2
    #
+   #
    asr\t%<w>0, %<w>1, %<w>2"
-  [(set_attr "simd" "yes,yes,no")
-   (set_attr "type" "neon_shift_imm<q>,neon_shift_reg<q>,shift_reg")]
+  [(set_attr "simd" "yes,yes,yes,no")
+   (set_attr "type" "neon_shift_imm<q>,neon_shift_reg<q>,neon_shift_reg<q>,shift_reg")]
 )
 
 (define_split
            (match_operand:DI 1 "aarch64_simd_register")
            (match_operand:QI 2 "aarch64_simd_register")))]
   "TARGET_SIMD && reload_completed"
-  [(set (match_dup 2)
+  [(set (match_dup 3)
         (unspec:QI [(match_dup 2)] UNSPEC_SISD_NEG))
    (set (match_dup 0)
-        (unspec:DI [(match_dup 1) (match_dup 2)] UNSPEC_SISD_SSHL))]
-  ""
+        (unspec:DI [(match_dup 1) (match_dup 3)] UNSPEC_SISD_SSHL))]
+{
+  operands[3] = gen_lowpart (QImode, operands[0]);
+}
 )
 
 (define_split
            (match_operand:SI 1 "aarch64_simd_register")
            (match_operand:QI 2 "aarch64_simd_register")))]
   "TARGET_SIMD && reload_completed"
-  [(set (match_dup 2)
+  [(set (match_dup 3)
         (unspec:QI [(match_dup 2)] UNSPEC_SISD_NEG))
    (set (match_dup 0)
-        (unspec:SI [(match_dup 1) (match_dup 2)] UNSPEC_SSHL_2S))]
-  ""
+        (unspec:SI [(match_dup 1) (match_dup 3)] UNSPEC_SSHL_2S))]
+{
+  operands[3] = gen_lowpart (QImode, operands[0]);
+}
 )
 
 (define_insn "*aarch64_sisd_ushl"
         (unspec:DI [(match_operand:DI 0 "aarch64_valid_symref" "S")]
                   UNSPEC_TLSDESC))
    (clobber (reg:DI LR_REGNUM))
+   (clobber (reg:CC CC_REGNUM))
    (clobber (match_scratch:DI 1 "=r"))]
   "TARGET_TLS_DESC"
   "adrp\\tx0, %A0\;ldr\\t%1, [x0, #%L0]\;add\\tx0, x0, %L0\;.tlsdesccall\\t%0\;blr\\t%1"
index 747a292..c01669b 100644 (file)
@@ -10111,7 +10111,7 @@ vqdmulh_n_s16 (int16x4_t a, int16_t b)
   int16x4_t result;
   __asm__ ("sqdmulh %0.4h,%1.4h,%2.h[0]"
            : "=w"(result)
-           : "w"(a), "w"(b)
+           : "w"(a), "x"(b)
            : /* No clobbers */);
   return result;
 }
@@ -10133,7 +10133,7 @@ vqdmulhq_n_s16 (int16x8_t a, int16_t b)
   int16x8_t result;
   __asm__ ("sqdmulh %0.8h,%1.8h,%2.h[0]"
            : "=w"(result)
-           : "w"(a), "w"(b)
+           : "w"(a), "x"(b)
            : /* No clobbers */);
   return result;
 }
@@ -21008,7 +21008,7 @@ vqdmlal_high_s16 (int32x4_t __a, int16x8_t __b, int16x8_t __c)
 }
 
 __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
-vqdmlal_high_lane_s16 (int32x4_t __a, int16x8_t __b, int16x8_t __c,
+vqdmlal_high_lane_s16 (int32x4_t __a, int16x8_t __b, int16x4_t __c,
                       int const __d)
 {
   return __builtin_aarch64_sqdmlal2_lanev8hi (__a, __b, __c, __d);
@@ -21030,8 +21030,7 @@ vqdmlal_high_n_s16 (int32x4_t __a, int16x8_t __b, int16_t __c)
 __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
 vqdmlal_lane_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c, int const __d)
 {
-  int16x8_t __tmp = vcombine_s16 (__c, vcreate_s16 (__AARCH64_INT64_C (0)));
-  return __builtin_aarch64_sqdmlal_lanev4hi (__a, __b, __tmp, __d);
+  return __builtin_aarch64_sqdmlal_lanev4hi (__a, __b, __c, __d);
 }
 
 __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
@@ -21059,7 +21058,7 @@ vqdmlal_high_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c)
 }
 
 __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
-vqdmlal_high_lane_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c,
+vqdmlal_high_lane_s32 (int64x2_t __a, int32x4_t __b, int32x2_t __c,
                       int const __d)
 {
   return __builtin_aarch64_sqdmlal2_lanev4si (__a, __b, __c, __d);
@@ -21081,8 +21080,7 @@ vqdmlal_high_n_s32 (int64x2_t __a, int32x4_t __b, int32_t __c)
 __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
 vqdmlal_lane_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c, int const __d)
 {
-  int32x4_t __tmp = vcombine_s32 (__c, vcreate_s32 (__AARCH64_INT64_C (0)));
-  return __builtin_aarch64_sqdmlal_lanev2si (__a, __b, __tmp, __d);
+  return __builtin_aarch64_sqdmlal_lanev2si (__a, __b, __c, __d);
 }
 
 __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
@@ -21104,7 +21102,7 @@ vqdmlalh_s16 (int32x1_t __a, int16x1_t __b, int16x1_t __c)
 }
 
 __extension__ static __inline int32x1_t __attribute__ ((__always_inline__))
-vqdmlalh_lane_s16 (int32x1_t __a, int16x1_t __b, int16x8_t __c, const int __d)
+vqdmlalh_lane_s16 (int32x1_t __a, int16x1_t __b, int16x4_t __c, const int __d)
 {
   return __builtin_aarch64_sqdmlal_lanehi (__a, __b, __c, __d);
 }
@@ -21116,7 +21114,7 @@ vqdmlals_s32 (int64x1_t __a, int32x1_t __b, int32x1_t __c)
 }
 
 __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
-vqdmlals_lane_s32 (int64x1_t __a, int32x1_t __b, int32x4_t __c, const int __d)
+vqdmlals_lane_s32 (int64x1_t __a, int32x1_t __b, int32x2_t __c, const int __d)
 {
   return __builtin_aarch64_sqdmlal_lanesi (__a, __b, __c, __d);
 }
@@ -21136,7 +21134,7 @@ vqdmlsl_high_s16 (int32x4_t __a, int16x8_t __b, int16x8_t __c)
 }
 
 __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
-vqdmlsl_high_lane_s16 (int32x4_t __a, int16x8_t __b, int16x8_t __c,
+vqdmlsl_high_lane_s16 (int32x4_t __a, int16x8_t __b, int16x4_t __c,
                       int const __d)
 {
   return __builtin_aarch64_sqdmlsl2_lanev8hi (__a, __b, __c, __d);
@@ -21158,8 +21156,7 @@ vqdmlsl_high_n_s16 (int32x4_t __a, int16x8_t __b, int16_t __c)
 __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
 vqdmlsl_lane_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c, int const __d)
 {
-  int16x8_t __tmp = vcombine_s16 (__c, vcreate_s16 (__AARCH64_INT64_C (0)));
-  return __builtin_aarch64_sqdmlsl_lanev4hi (__a, __b, __tmp, __d);
+  return __builtin_aarch64_sqdmlsl_lanev4hi (__a, __b, __c, __d);
 }
 
 __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
@@ -21187,7 +21184,7 @@ vqdmlsl_high_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c)
 }
 
 __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
-vqdmlsl_high_lane_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c,
+vqdmlsl_high_lane_s32 (int64x2_t __a, int32x4_t __b, int32x2_t __c,
                       int const __d)
 {
   return __builtin_aarch64_sqdmlsl2_lanev4si (__a, __b, __c, __d);
@@ -21209,8 +21206,7 @@ vqdmlsl_high_n_s32 (int64x2_t __a, int32x4_t __b, int32_t __c)
 __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
 vqdmlsl_lane_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c, int const __d)
 {
-  int32x4_t __tmp = vcombine_s32 (__c, vcreate_s32 (__AARCH64_INT64_C (0)));
-  return __builtin_aarch64_sqdmlsl_lanev2si (__a, __b, __tmp, __d);
+  return __builtin_aarch64_sqdmlsl_lanev2si (__a, __b, __c, __d);
 }
 
 __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
@@ -21232,7 +21228,7 @@ vqdmlslh_s16 (int32x1_t __a, int16x1_t __b, int16x1_t __c)
 }
 
 __extension__ static __inline int32x1_t __attribute__ ((__always_inline__))
-vqdmlslh_lane_s16 (int32x1_t __a, int16x1_t __b, int16x8_t __c, const int __d)
+vqdmlslh_lane_s16 (int32x1_t __a, int16x1_t __b, int16x4_t __c, const int __d)
 {
   return __builtin_aarch64_sqdmlsl_lanehi (__a, __b, __c, __d);
 }
@@ -21244,7 +21240,7 @@ vqdmlsls_s32 (int64x1_t __a, int32x1_t __b, int32x1_t __c)
 }
 
 __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
-vqdmlsls_lane_s32 (int64x1_t __a, int32x1_t __b, int32x4_t __c, const int __d)
+vqdmlsls_lane_s32 (int64x1_t __a, int32x1_t __b, int32x2_t __c, const int __d)
 {
   return __builtin_aarch64_sqdmlsl_lanesi (__a, __b, __c, __d);
 }
@@ -21282,7 +21278,7 @@ vqdmulhh_s16 (int16x1_t __a, int16x1_t __b)
 }
 
 __extension__ static __inline int16x1_t __attribute__ ((__always_inline__))
-vqdmulhh_lane_s16 (int16x1_t __a, int16x8_t __b, const int __c)
+vqdmulhh_lane_s16 (int16x1_t __a, int16x4_t __b, const int __c)
 {
   return __builtin_aarch64_sqdmulh_lanehi (__a, __b, __c);
 }
@@ -21294,7 +21290,7 @@ vqdmulhs_s32 (int32x1_t __a, int32x1_t __b)
 }
 
 __extension__ static __inline int32x1_t __attribute__ ((__always_inline__))
-vqdmulhs_lane_s32 (int32x1_t __a, int32x4_t __b, const int __c)
+vqdmulhs_lane_s32 (int32x1_t __a, int32x2_t __b, const int __c)
 {
   return __builtin_aarch64_sqdmulh_lanesi (__a, __b, __c);
 }
@@ -21314,7 +21310,7 @@ vqdmull_high_s16 (int16x8_t __a, int16x8_t __b)
 }
 
 __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
-vqdmull_high_lane_s16 (int16x8_t __a, int16x8_t __b, int const __c)
+vqdmull_high_lane_s16 (int16x8_t __a, int16x4_t __b, int const __c)
 {
   return __builtin_aarch64_sqdmull2_lanev8hi (__a, __b,__c);
 }
@@ -21334,8 +21330,7 @@ vqdmull_high_n_s16 (int16x8_t __a, int16_t __b)
 __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
 vqdmull_lane_s16 (int16x4_t __a, int16x4_t __b, int const __c)
 {
-  int16x8_t __tmp = vcombine_s16 (__b, vcreate_s16 (__AARCH64_INT64_C (0)));
-  return __builtin_aarch64_sqdmull_lanev4hi (__a, __tmp, __c);
+  return __builtin_aarch64_sqdmull_lanev4hi (__a, __b, __c);
 }
 
 __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
@@ -21363,7 +21358,7 @@ vqdmull_high_s32 (int32x4_t __a, int32x4_t __b)
 }
 
 __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
-vqdmull_high_lane_s32 (int32x4_t __a, int32x4_t __b, int const __c)
+vqdmull_high_lane_s32 (int32x4_t __a, int32x2_t __b, int const __c)
 {
   return __builtin_aarch64_sqdmull2_lanev4si (__a, __b, __c);
 }
@@ -21383,8 +21378,7 @@ vqdmull_high_n_s32 (int32x4_t __a, int32_t __b)
 __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
 vqdmull_lane_s32 (int32x2_t __a, int32x2_t __b, int const __c)
 {
-  int32x4_t __tmp = vcombine_s32 (__b, vcreate_s32 (__AARCH64_INT64_C (0)));
-  return __builtin_aarch64_sqdmull_lanev2si (__a, __tmp, __c);
+  return __builtin_aarch64_sqdmull_lanev2si (__a, __b, __c);
 }
 
 __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
@@ -21406,7 +21400,7 @@ vqdmullh_s16 (int16x1_t __a, int16x1_t __b)
 }
 
 __extension__ static __inline int32x1_t __attribute__ ((__always_inline__))
-vqdmullh_lane_s16 (int16x1_t __a, int16x8_t __b, const int __c)
+vqdmullh_lane_s16 (int16x1_t __a, int16x4_t __b, const int __c)
 {
   return __builtin_aarch64_sqdmull_lanehi (__a, __b, __c);
 }
@@ -21418,7 +21412,7 @@ vqdmulls_s32 (int32x1_t __a, int32x1_t __b)
 }
 
 __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
-vqdmulls_lane_s32 (int32x1_t __a, int32x4_t __b, const int __c)
+vqdmulls_lane_s32 (int32x1_t __a, int32x2_t __b, const int __c)
 {
   return __builtin_aarch64_sqdmull_lanesi (__a, __b, __c);
 }
@@ -21594,7 +21588,7 @@ vqrdmulhh_s16 (int16x1_t __a, int16x1_t __b)
 }
 
 __extension__ static __inline int16x1_t __attribute__ ((__always_inline__))
-vqrdmulhh_lane_s16 (int16x1_t __a, int16x8_t __b, const int __c)
+vqrdmulhh_lane_s16 (int16x1_t __a, int16x4_t __b, const int __c)
 {
   return __builtin_aarch64_sqrdmulh_lanehi (__a, __b, __c);
 }
@@ -21606,7 +21600,7 @@ vqrdmulhs_s32 (int32x1_t __a, int32x1_t __b)
 }
 
 __extension__ static __inline int32x1_t __attribute__ ((__always_inline__))
-vqrdmulhs_lane_s32 (int32x1_t __a, int32x4_t __b, const int __c)
+vqrdmulhs_lane_s32 (int32x1_t __a, int32x2_t __b, const int __c)
 {
   return __builtin_aarch64_sqrdmulh_lanesi (__a, __b, __c);
 }
index f1339b8..e76e3ef 100644 (file)
                        (SI   "SI") (HI   "HI")
                        (QI   "QI")])
 
-;; Define container mode for lane selection.
-(define_mode_attr VCOND [(V4HI "V4HI") (V8HI "V4HI")
+;; 64-bit container modes the inner or scalar source mode.
+(define_mode_attr VCOND [(HI "V4HI") (SI "V2SI")
+                        (V4HI "V4HI") (V8HI "V4HI")
                         (V2SI "V2SI") (V4SI "V2SI")
                         (DI   "DI") (V2DI "DI")
                         (V2SF "V2SF") (V4SF "V2SF")
                         (V2DF "DF")])
 
-;; Define container mode for lane selection.
+;; 128-bit container modes the inner or scalar source mode.
 (define_mode_attr VCONQ [(V8QI "V16QI") (V16QI "V16QI")
                         (V4HI "V8HI") (V8HI "V8HI")
                         (V2SI "V4SI") (V4SI "V4SI")
                         (V2DF "V2DF") (SI   "V4SI")
                         (HI   "V8HI") (QI   "V16QI")])
 
-;; Define container mode for lane selection.
-(define_mode_attr VCON [(V8QI "V16QI") (V16QI "V16QI")
-                       (V4HI "V8HI") (V8HI "V8HI")
-                       (V2SI "V4SI") (V4SI "V4SI")
-                       (DI   "V2DI") (V2DI "V2DI")
-                       (V2SF "V4SF") (V4SF "V4SF")
-                       (V2DF "V2DF") (SI   "V4SI")
-                       (HI   "V8HI") (QI   "V16QI")])
-
 ;; Half modes of all vector modes.
 (define_mode_attr VHALF [(V8QI "V4QI")  (V16QI "V8QI")
                         (V4HI "V2HI")  (V8HI  "V4HI")
index df4cc1b..d5c7908 100644 (file)
@@ -62,6 +62,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "gimple-expr.h"
 #include "is-a.h"
 #include "gimple.h"
+#include "gimple-iterator.h"
 #include "gimplify.h"
 #include "gimple-ssa.h"
 #include "stringpool.h"
@@ -7042,9 +7043,6 @@ alpha_fold_builtin (tree fndecl, int n_args, tree *op,
     case ALPHA_BUILTIN_MSKQH:
       return alpha_fold_builtin_mskxx (op, opint, op_const, 0xff, true);
 
-    case ALPHA_BUILTIN_UMULH:
-      return fold_build2 (MULT_HIGHPART_EXPR, alpha_dimode_u, op[0], op[1]);
-
     case ALPHA_BUILTIN_ZAP:
       opint[1] ^= 0xff;
       /* FALLTHRU */
@@ -7094,6 +7092,49 @@ alpha_fold_builtin (tree fndecl, int n_args, tree *op,
       return NULL;
     }
 }
+
+bool
+alpha_gimple_fold_builtin (gimple_stmt_iterator *gsi)
+{
+  bool changed = false;
+  gimple stmt = gsi_stmt (*gsi);
+  tree call = gimple_call_fn (stmt);
+  gimple new_stmt = NULL;
+
+  if (call)
+    {
+      tree fndecl = gimple_call_fndecl (stmt);
+
+      if (fndecl)
+       {
+         tree arg0, arg1;
+
+         switch (DECL_FUNCTION_CODE (fndecl))
+           {
+           case ALPHA_BUILTIN_UMULH:
+             arg0 = gimple_call_arg (stmt, 0);
+             arg1 = gimple_call_arg (stmt, 1);
+
+             new_stmt
+               = gimple_build_assign_with_ops (MULT_HIGHPART_EXPR,
+                                               gimple_call_lhs (stmt),
+                                               arg0,
+                                               arg1);
+             break;
+           default:
+             break;
+           }
+       }
+    }
+
+  if (new_stmt)
+    {
+      gsi_replace (gsi, new_stmt, true);
+      changed = true;
+    }
+
+  return changed;
+}
 \f
 /* This page contains routines that are used to determine what the function
    prologue and epilogue code will do and write them out.  */
@@ -8674,6 +8715,11 @@ alpha_handle_trap_shadows (void)
                        }
                      break;
 
+                   case BARRIER:
+                     /* __builtin_unreachable can expand to no code at all,
+                        leaving (barrier) RTXes in the instruction stream.  */
+                     goto close_shadow_notrapb;
+
                    case JUMP_INSN:
                    case CALL_INSN:
                    case CODE_LABEL:
@@ -8689,6 +8735,7 @@ alpha_handle_trap_shadows (void)
                  n = emit_insn_before (gen_trapb (), i);
                  PUT_MODE (n, TImode);
                  PUT_MODE (i, TImode);
+               close_shadow_notrapb:
                  trap_pending = 0;
                  shadow.used.i = 0;
                  shadow.used.fp = 0;
@@ -9790,6 +9837,8 @@ alpha_canonicalize_comparison (int *code, rtx *op0, rtx *op1,
 #define TARGET_EXPAND_BUILTIN alpha_expand_builtin
 #undef  TARGET_FOLD_BUILTIN
 #define TARGET_FOLD_BUILTIN alpha_fold_builtin
+#undef  TARGET_GIMPLE_FOLD_BUILTIN
+#define TARGET_GIMPLE_FOLD_BUILTIN alpha_gimple_fold_builtin
 
 #undef TARGET_FUNCTION_OK_FOR_SIBCALL
 #define TARGET_FUNCTION_OK_FOR_SIBCALL alpha_function_ok_for_sibcall
index 51d32a9..c8f4e45 100644 (file)
    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
    License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with GCC; see the file COPYING3.  If not see
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
 #ifndef ASM_APP_ON
index 42f00b4..56041ec 100644 (file)
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    General Public License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with GCC; see the file COPYING3.  If not see
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
 /* Before using #include to read this file, define a macro:
index a839397..2190294 100644 (file)
    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
    License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with GCC; see the file COPYING3.  If not see
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
 #ifndef ARM_OPTS_H
index e5cf503..c0f1e03 100644 (file)
@@ -16716,11 +16716,12 @@ thumb1_reorg (void)
       rtx prev, insn = BB_END (bb);
       bool insn_clobbered = false;
 
-      while (insn != BB_HEAD (bb) && DEBUG_INSN_P (insn))
+      while (insn != BB_HEAD (bb) && !NONDEBUG_INSN_P (insn))
        insn = PREV_INSN (insn);
 
       /* Find the last cbranchsi4_insn in basic block BB.  */
-      if (INSN_CODE (insn) != CODE_FOR_cbranchsi4_insn)
+      if (insn == BB_HEAD (bb)
+         || INSN_CODE (insn) != CODE_FOR_cbranchsi4_insn)
        continue;
 
       /* Get the register with which we are comparing.  */
@@ -28183,9 +28184,13 @@ arm_output_mi_thunk (FILE *file, tree thunk ATTRIBUTE_UNUSED,
       fputs (":\n", file);
       if (flag_pic)
        {
-         /* Output ".word .LTHUNKn-7-.LTHUNKPCn".  */
+         /* Output ".word .LTHUNKn-[3,7]-.LTHUNKPCn".  */
          rtx tem = XEXP (DECL_RTL (function), 0);
-         tem = plus_constant (GET_MODE (tem), tem, -7);
+         /* For TARGET_THUMB1_ONLY the thunk is in Thumb mode, so the PC
+            pipeline offset is four rather than eight.  Adjust the offset
+            accordingly.  */
+         tem = plus_constant (GET_MODE (tem), tem,
+                              TARGET_THUMB1_ONLY ? -3 : -7);
          tem = gen_rtx_MINUS (GET_MODE (tem),
                               tem,
                               gen_rtx_SYMBOL_REF (Pmode,
index 597e69c..c60d9a4 100644 (file)
    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
    License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with GCC; see the file COPYING3.  If not see
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
 #ifndef GCC_ARM_H
index 4b81ee2..0284f95 100644 (file)
 
 (define_insn_and_split "*arm_cmpdi_unsigned"
   [(set (reg:CC_CZ CC_REGNUM)
-        (compare:CC_CZ (match_operand:DI 0 "s_register_operand" "l,r,r")
-                       (match_operand:DI 1 "arm_di_operand"     "Py,r,rDi")))]
+        (compare:CC_CZ (match_operand:DI 0 "s_register_operand" "l,r,r,r")
+                       (match_operand:DI 1 "arm_di_operand"     "Py,r,Di,rDi")))]
 
   "TARGET_32BIT"
   "#"   ; "cmp\\t%R0, %R1\;it eq\;cmpeq\\t%Q0, %Q1"
     operands[1] = gen_lowpart (SImode, operands[1]);
   }
   [(set_attr "conds" "set")
-   (set_attr "enabled_for_depr_it" "yes,yes,no")
-   (set_attr "arch" "t2,t2,*")
-   (set_attr "length" "6,6,8")
+   (set_attr "enabled_for_depr_it" "yes,yes,no,*")
+   (set_attr "arch" "t2,t2,t2,a")
+   (set_attr "length" "6,6,10,8")
    (set_attr "type" "multiple")]
 )
 
   "TARGET_32BIT"
   "%i1%?\\t%0, %2, %4%S3"
   [(set_attr "predicable" "yes")
+   (set_attr "predicable_short_it" "no")
    (set_attr "shift" "4")
    (set_attr "arch" "a,t2,t2,a")
    ;; Thumb2 doesn't allow the stack pointer to be used for 
index 37a6e61..9573543 100644 (file)
@@ -1,5 +1,4 @@
-/* ARM NEON intrinsics include file. This file is generated automatically
-   using neon-gen.ml.  Please do not edit manually.
+/* ARM NEON intrinsics include file.
 
    Copyright (C) 2006-2014 Free Software Foundation, Inc.
    Contributed by CodeSourcery.
@@ -7707,12 +7706,32 @@ vbslq_p16 (uint16x8_t __a, poly16x8_t __b, poly16x8_t __c)
   return (poly16x8_t)__builtin_neon_vbslv8hi ((int16x8_t) __a, (int16x8_t) __b, (int16x8_t) __c);
 }
 
+/* For big-endian, the shuffle masks for ZIP, UZP and TRN must be changed as
+   follows. (nelt = the number of elements within a vector.)
+
+   Firstly, a value of N within a mask, becomes (N ^ (nelt - 1)), as gcc vector
+   extension's indexing scheme is reversed *within each vector* (relative to the
+   neon intrinsics view), but without changing which of the two vectors.
+
+   Secondly, the elements within each mask are reversed, as the mask is itself a
+   vector, and will itself be loaded in reverse order (again, relative to the
+   neon intrinsics view, i.e. that would result from a "vld1" instruction).  */
+
 __extension__ static __inline int8x8x2_t __attribute__ ((__always_inline__))
 vtrn_s8 (int8x8_t __a, int8x8_t __b)
 {
   int8x8x2_t __rv;
-  __rv.val[0] = (int8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 0, 8, 2, 10, 4, 12, 6, 14 });
-  __rv.val[1] = (int8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 1, 9, 3, 11, 5, 13, 7, 15 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 9, 1, 11, 3, 13, 5, 15, 7 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 8, 0, 10, 2, 12, 4, 14, 6 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 0, 8, 2, 10, 4, 12, 6, 14 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 1, 9, 3, 11, 5, 13, 7, 15 });
+#endif
   return __rv;
 }
 
@@ -7720,8 +7739,13 @@ __extension__ static __inline int16x4x2_t __attribute__ ((__always_inline__))
 vtrn_s16 (int16x4_t __a, int16x4_t __b)
 {
   int16x4x2_t __rv;
-  __rv.val[0] = (int16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 4, 2, 6 });
-  __rv.val[1] = (int16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 1, 5, 3, 7 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 5, 1, 7, 3 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 4, 0, 6, 2 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 4, 2, 6 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 1, 5, 3, 7 });
+#endif
   return __rv;
 }
 
@@ -7729,8 +7753,17 @@ __extension__ static __inline uint8x8x2_t __attribute__ ((__always_inline__))
 vtrn_u8 (uint8x8_t __a, uint8x8_t __b)
 {
   uint8x8x2_t __rv;
-  __rv.val[0] = (uint8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 0, 8, 2, 10, 4, 12, 6, 14 });
-  __rv.val[1] = (uint8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 1, 9, 3, 11, 5, 13, 7, 15 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 9, 1, 11, 3, 13, 5, 15, 7 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 8, 0, 10, 2, 12, 4, 14, 6 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 0, 8, 2, 10, 4, 12, 6, 14 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 1, 9, 3, 11, 5, 13, 7, 15 });
+#endif
   return __rv;
 }
 
@@ -7738,8 +7771,13 @@ __extension__ static __inline uint16x4x2_t __attribute__ ((__always_inline__))
 vtrn_u16 (uint16x4_t __a, uint16x4_t __b)
 {
   uint16x4x2_t __rv;
-  __rv.val[0] = (uint16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 4, 2, 6 });
-  __rv.val[1] = (uint16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 1, 5, 3, 7 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 5, 1, 7, 3 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 4, 0, 6, 2 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 4, 2, 6 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 1, 5, 3, 7 });
+#endif
   return __rv;
 }
 
@@ -7747,8 +7785,17 @@ __extension__ static __inline poly8x8x2_t __attribute__ ((__always_inline__))
 vtrn_p8 (poly8x8_t __a, poly8x8_t __b)
 {
   poly8x8x2_t __rv;
-  __rv.val[0] = (poly8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 0, 8, 2, 10, 4, 12, 6, 14 });
-  __rv.val[1] = (poly8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 1, 9, 3, 11, 5, 13, 7, 15 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 9, 1, 11, 3, 13, 5, 15, 7 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 8, 0, 10, 2, 12, 4, 14, 6 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 0, 8, 2, 10, 4, 12, 6, 14 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 1, 9, 3, 11, 5, 13, 7, 15 });
+#endif
   return __rv;
 }
 
@@ -7756,8 +7803,13 @@ __extension__ static __inline poly16x4x2_t __attribute__ ((__always_inline__))
 vtrn_p16 (poly16x4_t __a, poly16x4_t __b)
 {
   poly16x4x2_t __rv;
-  __rv.val[0] = (poly16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 4, 2, 6 });
-  __rv.val[1] = (poly16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 1, 5, 3, 7 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 5, 1, 7, 3 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 4, 0, 6, 2 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 4, 2, 6 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 1, 5, 3, 7 });
+#endif
   return __rv;
 }
 
@@ -7765,8 +7817,13 @@ __extension__ static __inline int32x2x2_t __attribute__ ((__always_inline__))
 vtrn_s32 (int32x2_t __a, int32x2_t __b)
 {
   int32x2x2_t __rv;
-  __rv.val[0] = (int32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
-  __rv.val[1] = (int32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 3, 1 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 2, 0 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
+#endif
   return __rv;
 }
 
@@ -7774,8 +7831,13 @@ __extension__ static __inline float32x2x2_t __attribute__ ((__always_inline__))
 vtrn_f32 (float32x2_t __a, float32x2_t __b)
 {
   float32x2x2_t __rv;
-  __rv.val[0] = (float32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
-  __rv.val[1] = (float32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 3, 1 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 2, 0 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
+#endif
   return __rv;
 }
 
@@ -7783,8 +7845,13 @@ __extension__ static __inline uint32x2x2_t __attribute__ ((__always_inline__))
 vtrn_u32 (uint32x2_t __a, uint32x2_t __b)
 {
   uint32x2x2_t __rv;
-  __rv.val[0] = (uint32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
-  __rv.val[1] = (uint32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 3, 1 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 2, 0 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
+#endif
   return __rv;
 }
 
@@ -7792,8 +7859,17 @@ __extension__ static __inline int8x16x2_t __attribute__ ((__always_inline__))
 vtrnq_s8 (int8x16_t __a, int8x16_t __b)
 {
   int8x16x2_t __rv;
-  __rv.val[0] = (int8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30 });
-  __rv.val[1] = (int8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 17, 1, 19, 3, 21, 5, 23, 7, 25, 9, 27, 11, 29, 13, 31, 15 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 16, 0, 18, 2, 20, 4, 22, 6, 24, 8, 26, 10, 28, 12, 30, 14 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31 });
+#endif
   return __rv;
 }
 
@@ -7801,8 +7877,17 @@ __extension__ static __inline int16x8x2_t __attribute__ ((__always_inline__))
 vtrnq_s16 (int16x8_t __a, int16x8_t __b)
 {
   int16x8x2_t __rv;
-  __rv.val[0] = (int16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 0, 8, 2, 10, 4, 12, 6, 14 });
-  __rv.val[1] = (int16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 1, 9, 3, 11, 5, 13, 7, 15 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 9, 1, 11, 3, 13, 5, 15, 7 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 8, 0, 10, 2, 12, 4, 14, 6 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 0, 8, 2, 10, 4, 12, 6, 14 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 1, 9, 3, 11, 5, 13, 7, 15 });
+#endif
   return __rv;
 }
 
@@ -7810,8 +7895,13 @@ __extension__ static __inline int32x4x2_t __attribute__ ((__always_inline__))
 vtrnq_s32 (int32x4_t __a, int32x4_t __b)
 {
   int32x4x2_t __rv;
-  __rv.val[0] = (int32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 4, 2, 6 });
-  __rv.val[1] = (int32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 1, 5, 3, 7 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 5, 1, 7, 3 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 4, 0, 6, 2 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 4, 2, 6 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 1, 5, 3, 7 });
+#endif
   return __rv;
 }
 
@@ -7819,8 +7909,13 @@ __extension__ static __inline float32x4x2_t __attribute__ ((__always_inline__))
 vtrnq_f32 (float32x4_t __a, float32x4_t __b)
 {
   float32x4x2_t __rv;
-  __rv.val[0] = (float32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 4, 2, 6 });
-  __rv.val[1] = (float32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 1, 5, 3, 7 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 5, 1, 7, 3 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 4, 0, 6, 2 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 4, 2, 6 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 1, 5, 3, 7 });
+#endif
   return __rv;
 }
 
@@ -7828,8 +7923,17 @@ __extension__ static __inline uint8x16x2_t __attribute__ ((__always_inline__))
 vtrnq_u8 (uint8x16_t __a, uint8x16_t __b)
 {
   uint8x16x2_t __rv;
-  __rv.val[0] = (uint8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30 });
-  __rv.val[1] = (uint8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 17, 1, 19, 3, 21, 5, 23, 7, 25, 9, 27, 11, 29, 13, 31, 15 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 16, 0, 18, 2, 20, 4, 22, 6, 24, 8, 26, 10, 28, 12, 30, 14 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31 });
+#endif
   return __rv;
 }
 
@@ -7837,8 +7941,17 @@ __extension__ static __inline uint16x8x2_t __attribute__ ((__always_inline__))
 vtrnq_u16 (uint16x8_t __a, uint16x8_t __b)
 {
   uint16x8x2_t __rv;
-  __rv.val[0] = (uint16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 0, 8, 2, 10, 4, 12, 6, 14 });
-  __rv.val[1] = (uint16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 1, 9, 3, 11, 5, 13, 7, 15 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 9, 1, 11, 3, 13, 5, 15, 7 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 8, 0, 10, 2, 12, 4, 14, 6 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 0, 8, 2, 10, 4, 12, 6, 14 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 1, 9, 3, 11, 5, 13, 7, 15 });
+#endif
   return __rv;
 }
 
@@ -7846,8 +7959,13 @@ __extension__ static __inline uint32x4x2_t __attribute__ ((__always_inline__))
 vtrnq_u32 (uint32x4_t __a, uint32x4_t __b)
 {
   uint32x4x2_t __rv;
-  __rv.val[0] = (uint32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 4, 2, 6 });
-  __rv.val[1] = (uint32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 1, 5, 3, 7 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 5, 1, 7, 3 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 4, 0, 6, 2 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 4, 2, 6 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 1, 5, 3, 7 });
+#endif
   return __rv;
 }
 
@@ -7855,8 +7973,17 @@ __extension__ static __inline poly8x16x2_t __attribute__ ((__always_inline__))
 vtrnq_p8 (poly8x16_t __a, poly8x16_t __b)
 {
   poly8x16x2_t __rv;
-  __rv.val[0] = (poly8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30 });
-  __rv.val[1] = (poly8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 17, 1, 19, 3, 21, 5, 23, 7, 25, 9, 27, 11, 29, 13, 31, 15 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 16, 0, 18, 2, 20, 4, 22, 6, 24, 8, 26, 10, 28, 12, 30, 14 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31 });
+#endif
   return __rv;
 }
 
@@ -7864,8 +7991,17 @@ __extension__ static __inline poly16x8x2_t __attribute__ ((__always_inline__))
 vtrnq_p16 (poly16x8_t __a, poly16x8_t __b)
 {
   poly16x8x2_t __rv;
-  __rv.val[0] = (poly16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 0, 8, 2, 10, 4, 12, 6, 14 });
-  __rv.val[1] = (poly16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 1, 9, 3, 11, 5, 13, 7, 15 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 9, 1, 11, 3, 13, 5, 15, 7 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 8, 0, 10, 2, 12, 4, 14, 6 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 0, 8, 2, 10, 4, 12, 6, 14 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 1, 9, 3, 11, 5, 13, 7, 15 });
+#endif
   return __rv;
 }
 
@@ -7873,8 +8009,17 @@ __extension__ static __inline int8x8x2_t __attribute__ ((__always_inline__))
 vzip_s8 (int8x8_t __a, int8x8_t __b)
 {
   int8x8x2_t __rv;
-  __rv.val[0] = (int8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 0, 8, 1, 9, 2, 10, 3, 11 });
-  __rv.val[1] = (int8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 4, 12, 5, 13, 6, 14, 7, 15 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 12, 4, 13, 5, 14, 6, 15, 7 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 8, 0, 9, 1, 10, 2, 11, 3 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 0, 8, 1, 9, 2, 10, 3, 11 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 4, 12, 5, 13, 6, 14, 7, 15 });
+#endif
   return __rv;
 }
 
@@ -7882,8 +8027,13 @@ __extension__ static __inline int16x4x2_t __attribute__ ((__always_inline__))
 vzip_s16 (int16x4_t __a, int16x4_t __b)
 {
   int16x4x2_t __rv;
-  __rv.val[0] = (int16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 4, 1, 5 });
-  __rv.val[1] = (int16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 2, 6, 3, 7 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 6, 2, 7, 3 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 4, 0, 5, 1 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 4, 1, 5 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 2, 6, 3, 7 });
+#endif
   return __rv;
 }
 
@@ -7891,8 +8041,17 @@ __extension__ static __inline uint8x8x2_t __attribute__ ((__always_inline__))
 vzip_u8 (uint8x8_t __a, uint8x8_t __b)
 {
   uint8x8x2_t __rv;
-  __rv.val[0] = (uint8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 0, 8, 1, 9, 2, 10, 3, 11 });
-  __rv.val[1] = (uint8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 4, 12, 5, 13, 6, 14, 7, 15 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 12, 4, 13, 5, 14, 6, 15, 7 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 8, 0, 9, 1, 10, 2, 11, 3 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 0, 8, 1, 9, 2, 10, 3, 11 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 4, 12, 5, 13, 6, 14, 7, 15 });
+#endif
   return __rv;
 }
 
@@ -7900,8 +8059,13 @@ __extension__ static __inline uint16x4x2_t __attribute__ ((__always_inline__))
 vzip_u16 (uint16x4_t __a, uint16x4_t __b)
 {
   uint16x4x2_t __rv;
-  __rv.val[0] = (uint16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 4, 1, 5 });
-  __rv.val[1] = (uint16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 2, 6, 3, 7 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 6, 2, 7, 3 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 4, 0, 5, 1 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 4, 1, 5 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 2, 6, 3, 7 });
+#endif
   return __rv;
 }
 
@@ -7909,8 +8073,17 @@ __extension__ static __inline poly8x8x2_t __attribute__ ((__always_inline__))
 vzip_p8 (poly8x8_t __a, poly8x8_t __b)
 {
   poly8x8x2_t __rv;
-  __rv.val[0] = (poly8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 0, 8, 1, 9, 2, 10, 3, 11 });
-  __rv.val[1] = (poly8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 4, 12, 5, 13, 6, 14, 7, 15 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 12, 4, 13, 5, 14, 6, 15, 7 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 8, 0, 9, 1, 10, 2, 11, 3 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 0, 8, 1, 9, 2, 10, 3, 11 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 4, 12, 5, 13, 6, 14, 7, 15 });
+#endif
   return __rv;
 }
 
@@ -7918,8 +8091,13 @@ __extension__ static __inline poly16x4x2_t __attribute__ ((__always_inline__))
 vzip_p16 (poly16x4_t __a, poly16x4_t __b)
 {
   poly16x4x2_t __rv;
-  __rv.val[0] = (poly16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 4, 1, 5 });
-  __rv.val[1] = (poly16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 2, 6, 3, 7 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 6, 2, 7, 3 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 4, 0, 5, 1 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 4, 1, 5 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 2, 6, 3, 7 });
+#endif
   return __rv;
 }
 
@@ -7927,8 +8105,13 @@ __extension__ static __inline int32x2x2_t __attribute__ ((__always_inline__))
 vzip_s32 (int32x2_t __a, int32x2_t __b)
 {
   int32x2x2_t __rv;
-  __rv.val[0] = (int32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
-  __rv.val[1] = (int32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 3, 1 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 2, 0 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
+#endif
   return __rv;
 }
 
@@ -7936,8 +8119,13 @@ __extension__ static __inline float32x2x2_t __attribute__ ((__always_inline__))
 vzip_f32 (float32x2_t __a, float32x2_t __b)
 {
   float32x2x2_t __rv;
-  __rv.val[0] = (float32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
-  __rv.val[1] = (float32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 3, 1 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 2, 0 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
+#endif
   return __rv;
 }
 
@@ -7945,8 +8133,13 @@ __extension__ static __inline uint32x2x2_t __attribute__ ((__always_inline__))
 vzip_u32 (uint32x2_t __a, uint32x2_t __b)
 {
   uint32x2x2_t __rv;
-  __rv.val[0] = (uint32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
-  __rv.val[1] = (uint32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 3, 1 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 2, 0 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
+#endif
   return __rv;
 }
 
@@ -7954,8 +8147,17 @@ __extension__ static __inline int8x16x2_t __attribute__ ((__always_inline__))
 vzipq_s8 (int8x16_t __a, int8x16_t __b)
 {
   int8x16x2_t __rv;
-  __rv.val[0] = (int8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23 });
-  __rv.val[1] = (int8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 24, 8, 25, 9, 26, 10, 27, 11, 28, 12, 29, 13, 30, 14, 31, 15 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 16, 0, 17, 1, 18, 2, 19, 3, 20, 4, 21, 5, 22, 6, 23, 7 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31 });
+#endif
   return __rv;
 }
 
@@ -7963,8 +8165,17 @@ __extension__ static __inline int16x8x2_t __attribute__ ((__always_inline__))
 vzipq_s16 (int16x8_t __a, int16x8_t __b)
 {
   int16x8x2_t __rv;
-  __rv.val[0] = (int16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 0, 8, 1, 9, 2, 10, 3, 11 });
-  __rv.val[1] = (int16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 4, 12, 5, 13, 6, 14, 7, 15 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 12, 4, 13, 5, 14, 6, 15, 7 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 8, 0, 9, 1, 10, 2, 11, 3 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 0, 8, 1, 9, 2, 10, 3, 11 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 4, 12, 5, 13, 6, 14, 7, 15 });
+#endif
   return __rv;
 }
 
@@ -7972,8 +8183,13 @@ __extension__ static __inline int32x4x2_t __attribute__ ((__always_inline__))
 vzipq_s32 (int32x4_t __a, int32x4_t __b)
 {
   int32x4x2_t __rv;
-  __rv.val[0] = (int32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 4, 1, 5 });
-  __rv.val[1] = (int32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 2, 6, 3, 7 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 6, 2, 7, 3 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 4, 0, 5, 1 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 4, 1, 5 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 2, 6, 3, 7 });
+#endif
   return __rv;
 }
 
@@ -7981,8 +8197,13 @@ __extension__ static __inline float32x4x2_t __attribute__ ((__always_inline__))
 vzipq_f32 (float32x4_t __a, float32x4_t __b)
 {
   float32x4x2_t __rv;
-  __rv.val[0] = (float32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 4, 1, 5 });
-  __rv.val[1] = (float32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 2, 6, 3, 7 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 6, 2, 7, 3 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 4, 0, 5, 1 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 4, 1, 5 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 2, 6, 3, 7 });
+#endif
   return __rv;
 }
 
@@ -7990,8 +8211,17 @@ __extension__ static __inline uint8x16x2_t __attribute__ ((__always_inline__))
 vzipq_u8 (uint8x16_t __a, uint8x16_t __b)
 {
   uint8x16x2_t __rv;
-  __rv.val[0] = (uint8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23 });
-  __rv.val[1] = (uint8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 24, 8, 25, 9, 26, 10, 27, 11, 28, 12, 29, 13, 30, 14, 31, 15 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 16, 0, 17, 1, 18, 2, 19, 3, 20, 4, 21, 5, 22, 6, 23, 7 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31 });
+#endif
   return __rv;
 }
 
@@ -7999,8 +8229,17 @@ __extension__ static __inline uint16x8x2_t __attribute__ ((__always_inline__))
 vzipq_u16 (uint16x8_t __a, uint16x8_t __b)
 {
   uint16x8x2_t __rv;
-  __rv.val[0] = (uint16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 0, 8, 1, 9, 2, 10, 3, 11 });
-  __rv.val[1] = (uint16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 4, 12, 5, 13, 6, 14, 7, 15 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 12, 4, 13, 5, 14, 6, 15, 7 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 8, 0, 9, 1, 10, 2, 11, 3 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 0, 8, 1, 9, 2, 10, 3, 11 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 4, 12, 5, 13, 6, 14, 7, 15 });
+#endif
   return __rv;
 }
 
@@ -8008,8 +8247,13 @@ __extension__ static __inline uint32x4x2_t __attribute__ ((__always_inline__))
 vzipq_u32 (uint32x4_t __a, uint32x4_t __b)
 {
   uint32x4x2_t __rv;
-  __rv.val[0] = (uint32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 4, 1, 5 });
-  __rv.val[1] = (uint32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 2, 6, 3, 7 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 6, 2, 7, 3 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 4, 0, 5, 1 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 4, 1, 5 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 2, 6, 3, 7 });
+#endif
   return __rv;
 }
 
@@ -8017,8 +8261,17 @@ __extension__ static __inline poly8x16x2_t __attribute__ ((__always_inline__))
 vzipq_p8 (poly8x16_t __a, poly8x16_t __b)
 {
   poly8x16x2_t __rv;
-  __rv.val[0] = (poly8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23 });
-  __rv.val[1] = (poly8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 24, 8, 25, 9, 26, 10, 27, 11, 28, 12, 29, 13, 30, 14, 31, 15 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 16, 0, 17, 1, 18, 2, 19, 3, 20, 4, 21, 5, 22, 6, 23, 7 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31 });
+#endif
   return __rv;
 }
 
@@ -8026,8 +8279,17 @@ __extension__ static __inline poly16x8x2_t __attribute__ ((__always_inline__))
 vzipq_p16 (poly16x8_t __a, poly16x8_t __b)
 {
   poly16x8x2_t __rv;
-  __rv.val[0] = (poly16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 0, 8, 1, 9, 2, 10, 3, 11 });
-  __rv.val[1] = (poly16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 4, 12, 5, 13, 6, 14, 7, 15 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 12, 4, 13, 5, 14, 6, 15, 7 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 8, 0, 9, 1, 10, 2, 11, 3 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 0, 8, 1, 9, 2, 10, 3, 11 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 4, 12, 5, 13, 6, 14, 7, 15 });
+#endif
   return __rv;
 }
 
@@ -8035,8 +8297,17 @@ __extension__ static __inline int8x8x2_t __attribute__ ((__always_inline__))
 vuzp_s8 (int8x8_t __a, int8x8_t __b)
 {
   int8x8x2_t __rv;
-  __rv.val[0] = (int8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 0, 2, 4, 6, 8, 10, 12, 14 });
-  __rv.val[1] = (int8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 1, 3, 5, 7, 9, 11, 13, 15 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 9, 11, 13, 15, 1, 3, 5, 7 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 8, 10, 12, 14, 0, 2, 4, 6 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 0, 2, 4, 6, 8, 10, 12, 14 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 1, 3, 5, 7, 9, 11, 13, 15 });
+#endif
   return __rv;
 }
 
@@ -8044,8 +8315,13 @@ __extension__ static __inline int16x4x2_t __attribute__ ((__always_inline__))
 vuzp_s16 (int16x4_t __a, int16x4_t __b)
 {
   int16x4x2_t __rv;
-  __rv.val[0] = (int16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 2, 4, 6 });
-  __rv.val[1] = (int16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 1, 3, 5, 7 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 5, 7, 1, 3 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 4, 6, 0, 2 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 2, 4, 6 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 1, 3, 5, 7 });
+#endif
   return __rv;
 }
 
@@ -8053,8 +8329,13 @@ __extension__ static __inline int32x2x2_t __attribute__ ((__always_inline__))
 vuzp_s32 (int32x2_t __a, int32x2_t __b)
 {
   int32x2x2_t __rv;
-  __rv.val[0] = (int32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
-  __rv.val[1] = (int32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 3, 1 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 2, 0 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
+#endif
   return __rv;
 }
 
@@ -8062,8 +8343,13 @@ __extension__ static __inline float32x2x2_t __attribute__ ((__always_inline__))
 vuzp_f32 (float32x2_t __a, float32x2_t __b)
 {
   float32x2x2_t __rv;
-  __rv.val[0] = (float32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
-  __rv.val[1] = (float32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 3, 1 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 2, 0 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
+#endif
   return __rv;
 }
 
@@ -8071,8 +8357,17 @@ __extension__ static __inline uint8x8x2_t __attribute__ ((__always_inline__))
 vuzp_u8 (uint8x8_t __a, uint8x8_t __b)
 {
   uint8x8x2_t __rv;
-  __rv.val[0] = (uint8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 0, 2, 4, 6, 8, 10, 12, 14 });
-  __rv.val[1] = (uint8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 1, 3, 5, 7, 9, 11, 13, 15 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 9, 11, 13, 15, 1, 3, 5, 7 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 8, 10, 12, 14, 0, 2, 4, 6 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 0, 2, 4, 6, 8, 10, 12, 14 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 1, 3, 5, 7, 9, 11, 13, 15 });
+#endif
   return __rv;
 }
 
@@ -8080,8 +8375,13 @@ __extension__ static __inline uint16x4x2_t __attribute__ ((__always_inline__))
 vuzp_u16 (uint16x4_t __a, uint16x4_t __b)
 {
   uint16x4x2_t __rv;
-  __rv.val[0] = (uint16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 2, 4, 6 });
-  __rv.val[1] = (uint16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 1, 3, 5, 7 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 5, 7, 1, 3 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 4, 6, 0, 2 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 2, 4, 6 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 1, 3, 5, 7 });
+#endif
   return __rv;
 }
 
@@ -8089,8 +8389,13 @@ __extension__ static __inline uint32x2x2_t __attribute__ ((__always_inline__))
 vuzp_u32 (uint32x2_t __a, uint32x2_t __b)
 {
   uint32x2x2_t __rv;
-  __rv.val[0] = (uint32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
-  __rv.val[1] = (uint32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 3, 1 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 2, 0 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
+#endif
   return __rv;
 }
 
@@ -8098,8 +8403,17 @@ __extension__ static __inline poly8x8x2_t __attribute__ ((__always_inline__))
 vuzp_p8 (poly8x8_t __a, poly8x8_t __b)
 {
   poly8x8x2_t __rv;
-  __rv.val[0] = (poly8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 0, 2, 4, 6, 8, 10, 12, 14 });
-  __rv.val[1] = (poly8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 1, 3, 5, 7, 9, 11, 13, 15 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 9, 11, 13, 15, 1, 3, 5, 7 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 8, 10, 12, 14, 0, 2, 4, 6 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 0, 2, 4, 6, 8, 10, 12, 14 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
+      { 1, 3, 5, 7, 9, 11, 13, 15 });
+#endif
   return __rv;
 }
 
@@ -8107,8 +8421,13 @@ __extension__ static __inline poly16x4x2_t __attribute__ ((__always_inline__))
 vuzp_p16 (poly16x4_t __a, poly16x4_t __b)
 {
   poly16x4x2_t __rv;
-  __rv.val[0] = (poly16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 2, 4, 6 });
-  __rv.val[1] = (poly16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 1, 3, 5, 7 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 5, 7, 1, 3 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 4, 6, 0, 2 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 2, 4, 6 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 1, 3, 5, 7 });
+#endif
   return __rv;
 }
 
@@ -8116,8 +8435,17 @@ __extension__ static __inline int8x16x2_t __attribute__ ((__always_inline__))
 vuzpq_s8 (int8x16_t __a, int8x16_t __b)
 {
   int8x16x2_t __rv;
-  __rv.val[0] = (int8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30 });
-  __rv.val[1] = (int8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 17, 19, 21, 23, 25, 27, 29, 31, 1, 3, 5, 7, 9, 11, 13, 15 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 16, 18, 20, 22, 24, 26, 28, 30, 0, 2, 4, 6, 8, 10, 12, 14 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31 });
+#endif
   return __rv;
 }
 
@@ -8125,8 +8453,17 @@ __extension__ static __inline int16x8x2_t __attribute__ ((__always_inline__))
 vuzpq_s16 (int16x8_t __a, int16x8_t __b)
 {
   int16x8x2_t __rv;
-  __rv.val[0] = (int16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 0, 2, 4, 6, 8, 10, 12, 14 });
-  __rv.val[1] = (int16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 1, 3, 5, 7, 9, 11, 13, 15 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 9, 11, 13, 15, 1, 3, 5, 7 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 8, 10, 12, 14, 0, 2, 4, 6 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 0, 2, 4, 6, 8, 10, 12, 14 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 1, 3, 5, 7, 9, 11, 13, 15 });
+#endif
   return __rv;
 }
 
@@ -8134,8 +8471,13 @@ __extension__ static __inline int32x4x2_t __attribute__ ((__always_inline__))
 vuzpq_s32 (int32x4_t __a, int32x4_t __b)
 {
   int32x4x2_t __rv;
-  __rv.val[0] = (int32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 2, 4, 6 });
-  __rv.val[1] = (int32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 1, 3, 5, 7 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 5, 7, 1, 3 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 4, 6, 0, 2 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 2, 4, 6 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 1, 3, 5, 7 });
+#endif
   return __rv;
 }
 
@@ -8143,8 +8485,13 @@ __extension__ static __inline float32x4x2_t __attribute__ ((__always_inline__))
 vuzpq_f32 (float32x4_t __a, float32x4_t __b)
 {
   float32x4x2_t __rv;
-  __rv.val[0] = (float32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 2, 4, 6 });
-  __rv.val[1] = (float32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 1, 3, 5, 7 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 5, 7, 1, 3 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 4, 6, 0, 2 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 2, 4, 6 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 1, 3, 5, 7 });
+#endif
   return __rv;
 }
 
@@ -8152,8 +8499,17 @@ __extension__ static __inline uint8x16x2_t __attribute__ ((__always_inline__))
 vuzpq_u8 (uint8x16_t __a, uint8x16_t __b)
 {
   uint8x16x2_t __rv;
-  __rv.val[0] = (uint8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30 });
-  __rv.val[1] = (uint8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 17, 19, 21, 23, 25, 27, 29, 31, 1, 3, 5, 7, 9, 11, 13, 15 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 16, 18, 20, 22, 24, 26, 28, 30, 0, 2, 4, 6, 8, 10, 12, 14 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31 });
+#endif
   return __rv;
 }
 
@@ -8161,8 +8517,17 @@ __extension__ static __inline uint16x8x2_t __attribute__ ((__always_inline__))
 vuzpq_u16 (uint16x8_t __a, uint16x8_t __b)
 {
   uint16x8x2_t __rv;
-  __rv.val[0] = (uint16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 0, 2, 4, 6, 8, 10, 12, 14 });
-  __rv.val[1] = (uint16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 1, 3, 5, 7, 9, 11, 13, 15 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 9, 11, 13, 15, 1, 3, 5, 7 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 8, 10, 12, 14, 0, 2, 4, 6 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 0, 2, 4, 6, 8, 10, 12, 14 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 1, 3, 5, 7, 9, 11, 13, 15 });
+#endif
   return __rv;
 }
 
@@ -8170,8 +8535,13 @@ __extension__ static __inline uint32x4x2_t __attribute__ ((__always_inline__))
 vuzpq_u32 (uint32x4_t __a, uint32x4_t __b)
 {
   uint32x4x2_t __rv;
-  __rv.val[0] = (uint32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 2, 4, 6 });
-  __rv.val[1] = (uint32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 1, 3, 5, 7 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 5, 7, 1, 3 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 4, 6, 0, 2 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 2, 4, 6 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 1, 3, 5, 7 });
+#endif
   return __rv;
 }
 
@@ -8179,8 +8549,17 @@ __extension__ static __inline poly8x16x2_t __attribute__ ((__always_inline__))
 vuzpq_p8 (poly8x16_t __a, poly8x16_t __b)
 {
   poly8x16x2_t __rv;
-  __rv.val[0] = (poly8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30 });
-  __rv.val[1] = (poly8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 17, 19, 21, 23, 25, 27, 29, 31, 1, 3, 5, 7, 9, 11, 13, 15 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 16, 18, 20, 22, 24, 26, 28, 30, 0, 2, 4, 6, 8, 10, 12, 14 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
+      { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31 });
+#endif
   return __rv;
 }
 
@@ -8188,8 +8567,17 @@ __extension__ static __inline poly16x8x2_t __attribute__ ((__always_inline__))
 vuzpq_p16 (poly16x8_t __a, poly16x8_t __b)
 {
   poly16x8x2_t __rv;
-  __rv.val[0] = (poly16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 0, 2, 4, 6, 8, 10, 12, 14 });
-  __rv.val[1] = (poly16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 1, 3, 5, 7, 9, 11, 13, 15 });
+#ifdef __ARM_BIG_ENDIAN
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 9, 11, 13, 15, 1, 3, 5, 7 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 8, 10, 12, 14, 0, 2, 4, 6 });
+#else
+  __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 0, 2, 4, 6, 8, 10, 12, 14 });
+  __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
+      { 1, 3, 5, 7, 9, 11, 13, 15 });
+#endif
   return __rv;
 }
 
index bc223f8..7a576ac 100644 (file)
    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
    License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with GCC; see the file COPYING3.  If not see
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
 /* Use the AAPCS ABI by default.  */
index 2ac8c8d..f14c766 100644 (file)
    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
    License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with GCC; see the file COPYING3.  If not see
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
 #ifndef OBJECT_FORMAT_ELF
index 5dc3328..2bf361a 100644 (file)
    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
    License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with GCC; see the file COPYING3.  If not see
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
 /* elfos.h should have already been included.  Now just override
index 52a739c..1dd0437 100644 (file)
    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
    License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with GCC; see the file COPYING3.  If not see
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
 /* This is how we tell the assembler that a symbol is weak.
diff --git a/gcc/config/arm/neon-docgen.ml b/gcc/config/arm/neon-docgen.ml
deleted file mode 100644 (file)
index 5788a53..0000000
+++ /dev/null
@@ -1,424 +0,0 @@
-(* ARM NEON documentation generator.
-
-   Copyright (C) 2006-2014 Free Software Foundation, Inc.
-   Contributed by CodeSourcery.
-
-   This file is part of GCC.
-
-   GCC is free software; you can redistribute it and/or modify it under
-   the terms of the GNU General Public License as published by the Free
-   Software Foundation; either version 3, or (at your option) any later
-   version.
-
-   GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-   WARRANTY; without even the implied warranty of MERCHANTABILITY or
-   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-   for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with GCC; see the file COPYING3.  If not see
-   <http://www.gnu.org/licenses/>.
-
-   This is an O'Caml program.  The O'Caml compiler is available from:
-
-     http://caml.inria.fr/
-
-   Or from your favourite OS's friendly packaging system. Tested with version
-   3.09.2, though other versions will probably work too.
-
-   Compile with:
-     ocamlc -c neon.ml
-     ocamlc -o neon-docgen neon.cmo neon-docgen.ml
-
-   Run with:
-     /path/to/neon-docgen /path/to/gcc/doc/arm-neon-intrinsics.texi
-*)
-
-open Neon
-
-(* The combined "ops" and "reinterp" table.  *)
-let ops_reinterp = reinterp @ ops
-
-(* Helper functions for extracting things from the "ops" table.  *)
-let single_opcode desired_opcode () =
-  List.fold_left (fun got_so_far ->
-                  fun row ->
-                    match row with
-                      (opcode, _, _, _, _, _) ->
-                        if opcode = desired_opcode then row :: got_so_far
-                                                   else got_so_far
-                 ) [] ops_reinterp
-
-let multiple_opcodes desired_opcodes () =
-  List.fold_left (fun got_so_far ->
-                  fun desired_opcode ->
-                    (single_opcode desired_opcode ()) @ got_so_far)
-                 [] desired_opcodes
-
-let ldx_opcode number () =
-  List.fold_left (fun got_so_far ->
-                  fun row ->
-                    match row with
-                      (opcode, _, _, _, _, _) ->
-                        match opcode with
-                          Vldx n | Vldx_lane n | Vldx_dup n when n = number ->
-                            row :: got_so_far
-                          | _ -> got_so_far
-                 ) [] ops_reinterp
-
-let stx_opcode number () =
-  List.fold_left (fun got_so_far ->
-                  fun row ->
-                    match row with
-                      (opcode, _, _, _, _, _) ->
-                        match opcode with
-                          Vstx n | Vstx_lane n when n = number ->
-                            row :: got_so_far
-                          | _ -> got_so_far
-                 ) [] ops_reinterp
-
-let tbl_opcode () =
-  List.fold_left (fun got_so_far ->
-                  fun row ->
-                    match row with
-                      (opcode, _, _, _, _, _) ->
-                        match opcode with
-                          Vtbl _ -> row :: got_so_far
-                          | _ -> got_so_far
-                 ) [] ops_reinterp
-
-let tbx_opcode () =
-  List.fold_left (fun got_so_far ->
-                  fun row ->
-                    match row with
-                      (opcode, _, _, _, _, _) ->
-                        match opcode with
-                          Vtbx _ -> row :: got_so_far
-                          | _ -> got_so_far
-                 ) [] ops_reinterp
-
-(* The groups of intrinsics.  *)
-let intrinsic_groups =
-  [ "Addition", single_opcode Vadd;
-    "Multiplication", single_opcode Vmul;
-    "Multiply-accumulate", single_opcode Vmla;
-    "Multiply-subtract", single_opcode Vmls;
-    "Fused-multiply-accumulate", single_opcode Vfma;
-    "Fused-multiply-subtract", single_opcode Vfms;
-    "Round to integral (to nearest, ties to even)", single_opcode Vrintn;
-    "Round to integral (to nearest, ties away from zero)", single_opcode Vrinta;
-    "Round to integral (towards +Inf)", single_opcode Vrintp;
-    "Round to integral (towards -Inf)", single_opcode Vrintm;
-    "Round to integral (towards 0)", single_opcode Vrintz;
-    "Subtraction", single_opcode Vsub;
-    "Comparison (equal-to)", single_opcode Vceq;
-    "Comparison (greater-than-or-equal-to)", single_opcode Vcge;
-    "Comparison (less-than-or-equal-to)", single_opcode Vcle;
-    "Comparison (greater-than)", single_opcode Vcgt;
-    "Comparison (less-than)", single_opcode Vclt;
-    "Comparison (absolute greater-than-or-equal-to)", single_opcode Vcage;
-    "Comparison (absolute less-than-or-equal-to)", single_opcode Vcale;
-    "Comparison (absolute greater-than)", single_opcode Vcagt;
-    "Comparison (absolute less-than)", single_opcode Vcalt;
-    "Test bits", single_opcode Vtst;
-    "Absolute difference", single_opcode Vabd;
-    "Absolute difference and accumulate", single_opcode Vaba;
-    "Maximum", single_opcode Vmax;
-    "Minimum", single_opcode Vmin;
-    "Pairwise add", single_opcode Vpadd;
-    "Pairwise add, single_opcode widen and accumulate", single_opcode Vpada;
-    "Folding maximum", single_opcode Vpmax;
-    "Folding minimum", single_opcode Vpmin;
-    "Reciprocal step", multiple_opcodes [Vrecps; Vrsqrts];
-    "Vector shift left", single_opcode Vshl;
-    "Vector shift left by constant", single_opcode Vshl_n;
-    "Vector shift right by constant", single_opcode Vshr_n;
-    "Vector shift right by constant and accumulate", single_opcode Vsra_n;
-    "Vector shift right and insert", single_opcode Vsri;
-    "Vector shift left and insert", single_opcode Vsli;
-    "Absolute value", single_opcode Vabs;
-    "Negation", single_opcode Vneg;
-    "Bitwise not", single_opcode Vmvn;
-    "Count leading sign bits", single_opcode Vcls;
-    "Count leading zeros", single_opcode Vclz;
-    "Count number of set bits", single_opcode Vcnt;
-    "Reciprocal estimate", single_opcode Vrecpe;
-    "Reciprocal square-root estimate", single_opcode Vrsqrte;
-    "Get lanes from a vector", single_opcode Vget_lane;
-    "Set lanes in a vector", single_opcode Vset_lane;
-    "Create vector from literal bit pattern", single_opcode Vcreate;
-    "Set all lanes to the same value",
-      multiple_opcodes [Vdup_n; Vmov_n; Vdup_lane];
-    "Combining vectors", single_opcode Vcombine;
-    "Splitting vectors", multiple_opcodes [Vget_high; Vget_low];
-    "Conversions", multiple_opcodes [Vcvt; Vcvt_n];
-    "Move, single_opcode narrowing", single_opcode Vmovn;
-    "Move, single_opcode long", single_opcode Vmovl;
-    "Table lookup", tbl_opcode;
-    "Extended table lookup", tbx_opcode;
-    "Multiply, lane", single_opcode Vmul_lane;
-    "Long multiply, lane", single_opcode Vmull_lane;
-    "Saturating doubling long multiply, lane", single_opcode Vqdmull_lane;
-    "Saturating doubling multiply high, lane", single_opcode Vqdmulh_lane;
-    "Multiply-accumulate, lane", single_opcode Vmla_lane;
-    "Multiply-subtract, lane", single_opcode Vmls_lane;
-    "Vector multiply by scalar", single_opcode Vmul_n;
-    "Vector long multiply by scalar", single_opcode Vmull_n;
-    "Vector saturating doubling long multiply by scalar",
-      single_opcode Vqdmull_n;
-    "Vector saturating doubling multiply high by scalar",
-      single_opcode Vqdmulh_n;
-    "Vector multiply-accumulate by scalar", single_opcode Vmla_n;
-    "Vector multiply-subtract by scalar", single_opcode Vmls_n;
-    "Vector extract", single_opcode Vext;
-    "Reverse elements", multiple_opcodes [Vrev64; Vrev32; Vrev16];
-    "Bit selection", single_opcode Vbsl;
-    "Transpose elements", single_opcode Vtrn;
-    "Zip elements", single_opcode Vzip;
-    "Unzip elements", single_opcode Vuzp;
-    "Element/structure loads, VLD1 variants", ldx_opcode 1;
-    "Element/structure stores, VST1 variants", stx_opcode 1;
-    "Element/structure loads, VLD2 variants", ldx_opcode 2;
-    "Element/structure stores, VST2 variants", stx_opcode 2;
-    "Element/structure loads, VLD3 variants", ldx_opcode 3;
-    "Element/structure stores, VST3 variants", stx_opcode 3;
-    "Element/structure loads, VLD4 variants", ldx_opcode 4;
-    "Element/structure stores, VST4 variants", stx_opcode 4;
-    "Logical operations (AND)", single_opcode Vand;
-    "Logical operations (OR)", single_opcode Vorr;
-    "Logical operations (exclusive OR)", single_opcode Veor;
-    "Logical operations (AND-NOT)", single_opcode Vbic;
-    "Logical operations (OR-NOT)", single_opcode Vorn;
-    "Reinterpret casts", single_opcode Vreinterp ]
-
-(* Given an intrinsic shape, produce a string to document the corresponding
-   operand shapes.  *)
-let rec analyze_shape shape =
-  let rec n_things n thing =
-    match n with
-      0 -> []
-    | n -> thing :: (n_things (n - 1) thing)
-  in
-  let rec analyze_shape_elt reg_no elt =
-    match elt with
-      Dreg -> "@var{d" ^ (string_of_int reg_no) ^ "}"
-    | Qreg -> "@var{q" ^ (string_of_int reg_no) ^ "}"
-    | Corereg -> "@var{r" ^ (string_of_int reg_no) ^ "}"
-    | Immed -> "#@var{0}"
-    | VecArray (1, elt) ->
-        let elt_regexp = analyze_shape_elt 0 elt in
-          "@{" ^ elt_regexp ^ "@}"
-    | VecArray (n, elt) ->
-      let rec f m =
-        match m with
-          0 -> []
-        | m -> (analyze_shape_elt (m - 1) elt) :: (f (m - 1))
-      in
-      let ops = List.rev (f n) in
-        "@{" ^ (commas (fun x -> x) ops "") ^ "@}"
-    | (PtrTo elt | CstPtrTo elt) ->
-      "[" ^ (analyze_shape_elt reg_no elt) ^ "]"
-    | Element_of_dreg -> (analyze_shape_elt reg_no Dreg) ^ "[@var{0}]"
-    | Element_of_qreg -> (analyze_shape_elt reg_no Qreg) ^ "[@var{0}]"
-    | All_elements_of_dreg -> (analyze_shape_elt reg_no Dreg) ^ "[]"
-    | Alternatives alts -> (analyze_shape_elt reg_no (List.hd alts))
-  in
-    match shape with
-      All (n, elt) -> commas (analyze_shape_elt 0) (n_things n elt) ""
-    | Long -> (analyze_shape_elt 0 Qreg) ^ ", " ^ (analyze_shape_elt 0 Dreg) ^
-              ", " ^ (analyze_shape_elt 0 Dreg)
-    | Long_noreg elt -> (analyze_shape_elt 0 elt) ^ ", " ^
-              (analyze_shape_elt 0 elt)
-    | Wide -> (analyze_shape_elt 0 Qreg) ^ ", " ^ (analyze_shape_elt 0 Qreg) ^
-              ", " ^ (analyze_shape_elt 0 Dreg)
-    | Wide_noreg elt -> analyze_shape (Long_noreg elt)
-    | Narrow -> (analyze_shape_elt 0 Dreg) ^ ", " ^ (analyze_shape_elt 0 Qreg) ^
-                ", " ^ (analyze_shape_elt 0 Qreg)
-    | Use_operands elts -> commas (analyze_shape_elt 0) (Array.to_list elts) ""
-    | By_scalar Dreg ->
-        analyze_shape (Use_operands [| Dreg; Dreg; Element_of_dreg |])
-    | By_scalar Qreg ->
-        analyze_shape (Use_operands [| Qreg; Qreg; Element_of_dreg |])
-    | By_scalar _ -> assert false
-    | Wide_lane ->
-        analyze_shape (Use_operands [| Qreg; Dreg; Element_of_dreg |])
-    | Wide_scalar ->
-        analyze_shape (Use_operands [| Qreg; Dreg; Element_of_dreg |])
-    | Pair_result elt ->
-      let elt_regexp = analyze_shape_elt 0 elt in
-      let elt_regexp' = analyze_shape_elt 1 elt in
-        elt_regexp ^ ", " ^ elt_regexp'
-    | Unary_scalar _ -> "FIXME Unary_scalar"
-    | Binary_imm elt -> analyze_shape (Use_operands [| elt; elt; Immed |])
-    | Narrow_imm -> analyze_shape (Use_operands [| Dreg; Qreg; Immed |])
-    | Long_imm -> analyze_shape (Use_operands [| Qreg; Dreg; Immed |])
-
-(* Document a single intrinsic.  *)
-let describe_intrinsic first chan
-                       (elt_ty, (_, features, shape, name, munge, _)) =
-  let c_arity, new_elt_ty = munge shape elt_ty in
-  let c_types = strings_of_arity c_arity in
-  Printf.fprintf chan "@itemize @bullet\n";
-  let item_code = if first then "@item" else "@itemx" in
-    Printf.fprintf chan "%s %s %s_%s (" item_code (List.hd c_types)
-                   (intrinsic_name name) (string_of_elt elt_ty);
-    Printf.fprintf chan "%s)\n" (commas (fun ty -> ty) (List.tl c_types) "");
-    if not (List.exists (fun feature -> feature = No_op) features) then
-    begin
-      let print_one_insn name =
-        Printf.fprintf chan "@code{";
-        let no_suffix = (new_elt_ty = NoElts) in
-        let name_with_suffix =
-          if no_suffix then name
-          else name ^ "." ^ (string_of_elt_dots new_elt_ty)
-        in
-        let possible_operands = analyze_all_shapes features shape
-                                                   analyze_shape
-        in
-       let rec print_one_possible_operand op =
-         Printf.fprintf chan "%s %s}" name_with_suffix op
-        in
-          (* If the intrinsic expands to multiple instructions, we assume
-             they are all of the same form.  *)
-          print_one_possible_operand (List.hd possible_operands)
-      in
-      let rec print_insns names =
-        match names with
-          [] -> ()
-        | [name] -> print_one_insn name
-        | name::names -> (print_one_insn name;
-                          Printf.fprintf chan " @emph{or} ";
-                          print_insns names)
-      in
-      let insn_names = get_insn_names features name in
-        Printf.fprintf chan "@*@emph{Form of expected instruction(s):} ";
-        print_insns insn_names;
-        Printf.fprintf chan "\n"
-    end;
-    Printf.fprintf chan "@end itemize\n";
-    Printf.fprintf chan "\n\n"
-
-(* Document a group of intrinsics.  *)
-let document_group chan (group_title, group_extractor) =
-  (* Extract the rows in question from the ops table and then turn them
-     into a list of intrinsics.  *)
-  let intrinsics =
-    List.fold_left (fun got_so_far ->
-                    fun row ->
-                      match row with
-                        (_, _, _, _, _, elt_tys) ->
-                          List.fold_left (fun got_so_far' ->
-                                          fun elt_ty ->
-                                            (elt_ty, row) :: got_so_far')
-                                         got_so_far elt_tys
-                   ) [] (group_extractor ())
-  in
-    (* Emit the title for this group.  *)
-    Printf.fprintf chan "@subsubsection %s\n\n" group_title;
-    (* Emit a description of each intrinsic.  *)
-    List.iter (describe_intrinsic true chan) intrinsics;
-    (* Close this group.  *)
-    Printf.fprintf chan "\n\n"
-
-let gnu_header chan =
-  List.iter (fun s -> Printf.fprintf chan "%s\n" s) [
-  "@c Copyright (C) 2006-2014 Free Software Foundation, Inc.";
-  "@c This is part of the GCC manual.";
-  "@c For copying conditions, see the file gcc.texi.";
-  "";
-  "@c This file is generated automatically using gcc/config/arm/neon-docgen.ml";
-  "@c Please do not edit manually."]
-
-let crypto_doc =
-"
-@itemize @bullet
-@item poly128_t vldrq_p128(poly128_t const *)
-@end itemize
-
-@itemize @bullet
-@item void vstrq_p128(poly128_t *, poly128_t)
-@end itemize
-
-@itemize @bullet
-@item uint64x1_t vceq_p64 (poly64x1_t, poly64x1_t)
-@end itemize
-
-@itemize @bullet
-@item uint64x1_t vtst_p64 (poly64x1_t, poly64x1_t)
-@end itemize
-
-@itemize @bullet
-@item uint32_t vsha1h_u32 (uint32_t)
-@*@emph{Form of expected instruction(s):} @code{sha1h.32 @var{q0}, @var{q1}}
-@end itemize
-
-@itemize @bullet
-@item uint32x4_t vsha1cq_u32 (uint32x4_t, uint32_t, uint32x4_t)
-@*@emph{Form of expected instruction(s):} @code{sha1c.32 @var{q0}, @var{q1}, @var{q2}}
-@end itemize
-
-@itemize @bullet
-@item uint32x4_t vsha1pq_u32 (uint32x4_t, uint32_t, uint32x4_t)
-@*@emph{Form of expected instruction(s):} @code{sha1p.32 @var{q0}, @var{q1}, @var{q2}}
-@end itemize
-
-@itemize @bullet
-@item uint32x4_t vsha1mq_u32 (uint32x4_t, uint32_t, uint32x4_t)
-@*@emph{Form of expected instruction(s):} @code{sha1m.32 @var{q0}, @var{q1}, @var{q2}}
-@end itemize
-
-@itemize @bullet
-@item uint32x4_t vsha1su0q_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
-@*@emph{Form of expected instruction(s):} @code{sha1su0.32 @var{q0}, @var{q1}, @var{q2}}
-@end itemize
-
-@itemize @bullet
-@item uint32x4_t vsha1su1q_u32 (uint32x4_t, uint32x4_t)
-@*@emph{Form of expected instruction(s):} @code{sha1su1.32 @var{q0}, @var{q1}, @var{q2}}
-@end itemize
-
-@itemize @bullet
-@item uint32x4_t vsha256hq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
-@*@emph{Form of expected instruction(s):} @code{sha256h.32 @var{q0}, @var{q1}, @var{q2}}
-@end itemize
-@itemize @bullet
-@item uint32x4_t vsha256h2q_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
-@*@emph{Form of expected instruction(s):} @code{sha256h2.32 @var{q0}, @var{q1}, @var{q2}}
-@end itemize
-@itemize @bullet
-@item uint32x4_t vsha256su0q_u32 (uint32x4_t, uint32x4_t)
-@*@emph{Form of expected instruction(s):} @code{sha256su0.32 @var{q0}, @var{q1}}
-@end itemize
-@itemize @bullet
-@item uint32x4_t vsha256su1q_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
-@*@emph{Form of expected instruction(s):} @code{sha256su1.32 @var{q0}, @var{q1}, @var{q2}}
-@end itemize
-
-@itemize @bullet
-@item poly128_t vmull_p64 (poly64_t a, poly64_t b)
-@*@emph{Form of expected instruction(s):} @code{vmull.p64 @var{q0}, @var{d1}, @var{d2}}
-@end itemize
-
-@itemize @bullet
-@item poly128_t vmull_high_p64 (poly64x2_t a, poly64x2_t b)
-@*@emph{Form of expected instruction(s):} @code{vmull.p64 @var{q0}, @var{d1}, @var{d2}}
-@end itemize
-"
-
-(* Program entry point.  *)
-let _ =
-  if Array.length Sys.argv <> 2 then
-    failwith "Usage: neon-docgen <output filename>"
-  else
-  let file = Sys.argv.(1) in
-    try
-      let chan = open_out file in
-        gnu_header chan;
-        List.iter (document_group chan) intrinsic_groups;
-        Printf.fprintf chan "%s\n" crypto_doc;
-        close_out chan
-    with Sys_error sys ->
-      failwith ("Could not create output file " ^ file ^ ": " ^ sys)
diff --git a/gcc/config/arm/neon-gen.ml b/gcc/config/arm/neon-gen.ml
deleted file mode 100644 (file)
index f3dd86b..0000000
+++ /dev/null
@@ -1,520 +0,0 @@
-(* Auto-generate ARM Neon intrinsics header file.
-   Copyright (C) 2006-2014 Free Software Foundation, Inc.
-   Contributed by CodeSourcery.
-
-   This file is part of GCC.
-
-   GCC is free software; you can redistribute it and/or modify it under
-   the terms of the GNU General Public License as published by the Free
-   Software Foundation; either version 3, or (at your option) any later
-   version.
-
-   GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-   WARRANTY; without even the implied warranty of MERCHANTABILITY or
-   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-   for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with GCC; see the file COPYING3.  If not see
-   <http://www.gnu.org/licenses/>.
-
-   This is an O'Caml program.  The O'Caml compiler is available from:
-
-     http://caml.inria.fr/
-
-   Or from your favourite OS's friendly packaging system. Tested with version
-   3.09.2, though other versions will probably work too.
-
-   Compile with:
-     ocamlc -c neon.ml
-     ocamlc -o neon-gen neon.cmo neon-gen.ml
-
-   Run with:
-     ./neon-gen > arm_neon.h
-*)
-
-open Neon
-
-(* The format codes used in the following functions are documented at:
-     http://caml.inria.fr/pub/docs/manual-ocaml/libref/Format.html\
-     #6_printflikefunctionsforprettyprinting
-   (one line, remove the backslash.)
-*)
-
-(* Following functions can be used to approximate GNU indentation style.  *)
-let start_function () =
-  Format.printf "@[<v 0>";
-  ref 0
-
-let end_function nesting =
-  match !nesting with
-    0 -> Format.printf "@;@;@]"
-  | _ -> failwith ("Bad nesting (ending function at level "
-                   ^ (string_of_int !nesting) ^ ")")
-
-let open_braceblock nesting =
-  begin match !nesting with
-    0 -> Format.printf "@,@<0>{@[<v 2>@,"
-  | _ -> Format.printf "@,@[<v 2>  @<0>{@[<v 2>@,"
-  end;
-  incr nesting
-
-let close_braceblock nesting =
-  decr nesting;
-  match !nesting with
-    0 -> Format.printf "@]@,@<0>}"
-  | _ -> Format.printf "@]@,@<0>}@]"
-
-let print_function arity fnname body =
-  let ffmt = start_function () in
-  Format.printf "__extension__ static __inline ";
-  let inl = "__attribute__ ((__always_inline__))" in
-  begin match arity with
-    Arity0 ret ->
-      Format.printf "%s %s@,%s (void)" (string_of_vectype ret) inl fnname
-  | Arity1 (ret, arg0) ->
-      Format.printf "%s %s@,%s (%s __a)" (string_of_vectype ret) inl fnname
-                                        (string_of_vectype arg0)
-  | Arity2 (ret, arg0, arg1) ->
-      Format.printf "%s %s@,%s (%s __a, %s __b)"
-        (string_of_vectype ret) inl fnname (string_of_vectype arg0)
-       (string_of_vectype arg1)
-  | Arity3 (ret, arg0, arg1, arg2) ->
-      Format.printf "%s %s@,%s (%s __a, %s __b, %s __c)"
-        (string_of_vectype ret) inl fnname (string_of_vectype arg0)
-       (string_of_vectype arg1) (string_of_vectype arg2)
-  | Arity4 (ret, arg0, arg1, arg2, arg3) ->
-      Format.printf "%s %s@,%s (%s __a, %s __b, %s __c, %s __d)"
-        (string_of_vectype ret) inl fnname (string_of_vectype arg0)
-       (string_of_vectype arg1) (string_of_vectype arg2)
-        (string_of_vectype arg3)
-  end;
-  open_braceblock ffmt;
-  let rec print_lines = function
-    []       -> ()
-  | "" :: lines -> print_lines lines
-  | [line] -> Format.printf "%s" line
-  | line::lines -> Format.printf "%s@," line ; print_lines lines in
-  print_lines body;
-  close_braceblock ffmt;
-  end_function ffmt
-
-let union_string num elts base =
-  let itype = inttype_for_array num elts in
-  let iname = string_of_inttype itype
-  and sname = string_of_vectype (T_arrayof (num, elts)) in
-  Printf.sprintf "union { %s __i; %s __o; } %s" sname iname base
-
-let rec signed_ctype = function
-    T_uint8x8 | T_poly8x8 -> T_int8x8
-  | T_uint8x16 | T_poly8x16 -> T_int8x16
-  | T_uint16x4 | T_poly16x4 -> T_int16x4
-  | T_uint16x8 | T_poly16x8 -> T_int16x8
-  | T_uint32x2 -> T_int32x2
-  | T_uint32x4 -> T_int32x4
-  | T_uint64x1 -> T_int64x1
-  | T_uint64x2 -> T_int64x2
-  | T_poly64x2 -> T_int64x2
-  (* Cast to types defined by mode in arm.c, not random types pulled in from
-     the <stdint.h> header in use. This fixes incompatible pointer errors when
-     compiling with C++.  *)
-  | T_uint8 | T_int8 -> T_intQI
-  | T_uint16 | T_int16 -> T_intHI
-  | T_uint32 | T_int32 -> T_intSI
-  | T_uint64 | T_int64 -> T_intDI
-  | T_float16 -> T_floatHF
-  | T_float32 -> T_floatSF
-  | T_poly8 -> T_intQI
-  | T_poly16 -> T_intHI
-  | T_poly64 -> T_intDI
-  | T_poly128 -> T_intTI
-  | T_arrayof (n, elt) -> T_arrayof (n, signed_ctype elt)
-  | T_ptrto elt -> T_ptrto (signed_ctype elt)
-  | T_const elt -> T_const (signed_ctype elt)
-  | x -> x
-
-let add_cast ctype cval =
-  let stype = signed_ctype ctype in
-  if ctype <> stype then
-    Printf.sprintf "(%s) %s" (string_of_vectype stype) cval
-  else
-    cval
-
-let cast_for_return to_ty = "(" ^ (string_of_vectype to_ty) ^ ")"
-
-(* Return a tuple of a list of declarations to go at the start of the function,
-   and a list of statements needed to return THING.  *)
-let return arity thing =
-  match arity with
-    Arity0 (ret) | Arity1 (ret, _) | Arity2 (ret, _, _) | Arity3 (ret, _, _, _)
-  | Arity4 (ret, _, _, _, _) ->
-      begin match ret with
-       T_arrayof (num, vec) ->
-          let uname = union_string num vec "__rv" in
-          [uname ^ ";"], ["__rv.__o = " ^ thing ^ ";"; "return __rv.__i;"]
-      | T_void ->
-         [], [thing ^ ";"]
-      | _ ->
-         [], ["return " ^ (cast_for_return ret) ^ thing ^ ";"]
-      end
-
-let mask_shape_for_shuffle = function
-    All (num, reg) -> All (num, reg)
-  | Pair_result reg -> All (2, reg)
-  | _ -> failwith "mask_for_shuffle"
-
-let mask_elems shuffle shape elttype part =
-  let elem_size = elt_width elttype in
-  let num_elems =
-    match regmap shape 0 with
-      Dreg -> 64 / elem_size
-    | Qreg -> 128 / elem_size
-    | _ -> failwith "mask_elems" in
-  shuffle elem_size num_elems part
-
-(* Return a tuple of a list of declarations 0and a list of statements needed
-   to implement an intrinsic using __builtin_shuffle.  SHUFFLE is a function
-   which returns a list of elements suitable for using as a mask.  *)
-
-let shuffle_fn shuffle shape arity elttype =
-  let mshape = mask_shape_for_shuffle shape in
-  let masktype = type_for_elt mshape (unsigned_of_elt elttype) 0 in
-  let masktype_str = string_of_vectype masktype in
-  let shuffle_res = type_for_elt mshape elttype 0 in
-  let shuffle_res_str = string_of_vectype shuffle_res in
-  match arity with
-    Arity0 (ret) | Arity1 (ret, _) | Arity2 (ret, _, _) | Arity3 (ret, _, _, _)
-  | Arity4 (ret, _, _, _, _) ->
-      begin match ret with
-        T_arrayof (num, vec) ->
-         let elems1 = mask_elems shuffle mshape elttype `lo
-         and elems2 = mask_elems shuffle mshape elttype `hi in
-         let mask1 = (String.concat ", " (List.map string_of_int elems1))
-         and mask2 = (String.concat ", " (List.map string_of_int elems2)) in
-         let shuf1 = Printf.sprintf
-           "__rv.val[0] = (%s) __builtin_shuffle (__a, __b, (%s) { %s });"
-           shuffle_res_str masktype_str mask1
-         and shuf2 = Printf.sprintf
-           "__rv.val[1] = (%s) __builtin_shuffle (__a, __b, (%s) { %s });"
-           shuffle_res_str masktype_str mask2 in
-         [Printf.sprintf "%s __rv;" (string_of_vectype ret);],
-         [shuf1; shuf2; "return __rv;"]
-      | _ ->
-          let elems = mask_elems shuffle mshape elttype `lo in
-          let mask =  (String.concat ", " (List.map string_of_int elems)) in
-         let shuf = Printf.sprintf
-           "return (%s) __builtin_shuffle (__a, (%s) { %s });" shuffle_res_str masktype_str mask in
-         [""],
-         [shuf]
-      end
-
-let rec element_type ctype =
-  match ctype with
-    T_arrayof (_, v) -> element_type v
-  | _ -> ctype
-
-let params ps =
-  let pdecls = ref [] in
-  let ptype t p =
-    match t with
-      T_arrayof (num, elts) ->
-        let uname = union_string num elts (p ^ "u") in
-        let decl = Printf.sprintf "%s = { %s };" uname p in
-        pdecls := decl :: !pdecls;
-        p ^ "u.__o"
-    | _ -> add_cast t p in
-  let plist = match ps with
-    Arity0 _ -> []
-  | Arity1 (_, t1) -> [ptype t1 "__a"]
-  | Arity2 (_, t1, t2) -> [ptype t1 "__a"; ptype t2 "__b"]
-  | Arity3 (_, t1, t2, t3) -> [ptype t1 "__a"; ptype t2 "__b"; ptype t3 "__c"]
-  | Arity4 (_, t1, t2, t3, t4) ->
-      [ptype t1 "__a"; ptype t2 "__b"; ptype t3 "__c"; ptype t4 "__d"] in
-  !pdecls, plist
-
-let modify_params features plist =
-  let is_flipped =
-    List.exists (function Flipped _ -> true | _ -> false) features in
-  if is_flipped then
-    match plist with
-      [ a; b ] -> [ b; a ]
-    | _ ->
-      failwith ("Don't know how to flip args " ^ (String.concat ", " plist))
-  else
-    plist
-
-(* !!! Decide whether to add an extra information word based on the shape
-   form.  *)
-let extra_word shape features paramlist bits =
-  let use_word =
-    match shape with
-      All _ | Long | Long_noreg _ | Wide | Wide_noreg _ | Narrow
-    | By_scalar _ | Wide_scalar | Wide_lane | Binary_imm _ | Long_imm
-    | Narrow_imm -> true
-    | _ -> List.mem InfoWord features
-  in
-    if use_word then
-      paramlist @ [string_of_int bits]
-    else
-      paramlist
-
-(* Bit 0 represents signed (1) vs unsigned (0), or float (1) vs poly (0).
-   Bit 1 represents floats & polynomials (1), or ordinary integers (0).
-   Bit 2 represents rounding (1) vs none (0).  *)
-let infoword_value elttype features =
-  let bits01 =
-    match elt_class elttype with
-      Signed | ConvClass (Signed, _) | ConvClass (_, Signed) -> 0b001
-    | Poly -> 0b010
-    | Float -> 0b011
-    | _ -> 0b000
-  and rounding_bit = if List.mem Rounding features then 0b100 else 0b000 in
-  bits01 lor rounding_bit
-
-(* "Cast" type operations will throw an exception in mode_of_elt (actually in
-   elt_width, called from there). Deal with that here, and generate a suffix
-   with multiple modes (<to><from>).  *)
-let rec mode_suffix elttype shape =
-  try
-    let mode = mode_of_elt elttype shape in
-    string_of_mode mode
-  with MixedMode (dst, src) ->
-    let dstmode = mode_of_elt ~argpos:0 dst shape
-    and srcmode = mode_of_elt ~argpos:1 src shape in
-    string_of_mode dstmode ^ string_of_mode srcmode
-
-let get_shuffle features =
-  try
-    match List.find (function Use_shuffle _ -> true | _ -> false) features with
-      Use_shuffle fn -> Some fn
-    | _ -> None
-  with Not_found -> None
-
-let print_feature_test_start features =
-  try
-    match List.find (fun feature ->
-                       match feature with Requires_feature _ -> true
-                                        | Requires_arch _ -> true
-                                        | Requires_FP_bit _ -> true
-                                        | _ -> false)
-                     features with
-      Requires_feature feature ->
-        Format.printf "#ifdef __ARM_FEATURE_%s@\n" feature
-    | Requires_arch arch ->
-        Format.printf "#if __ARM_ARCH >= %d@\n" arch
-    | Requires_FP_bit bit ->
-        Format.printf "#if ((__ARM_FP & 0x%X) != 0)@\n"
-                      (1 lsl bit)
-    | _ -> assert false
-  with Not_found -> assert true
-
-let print_feature_test_end features =
-  let feature =
-    List.exists (function Requires_feature _ -> true
-                          | Requires_arch _ -> true
-                          | Requires_FP_bit _ -> true
-                          |  _ -> false) features in
-  if feature then Format.printf "#endif@\n"
-
-
-let print_variant opcode features shape name (ctype, asmtype, elttype) =
-  let bits = infoword_value elttype features in
-  let modesuf = mode_suffix elttype shape in
-  let pdecls, paramlist = params ctype in
-  let rdecls, stmts =
-    match get_shuffle features with
-      Some shuffle -> shuffle_fn shuffle shape ctype elttype
-    | None ->
-       let paramlist' = modify_params features paramlist in
-       let paramlist'' = extra_word shape features paramlist' bits in
-       let parstr = String.concat ", " paramlist'' in
-       let builtin = Printf.sprintf "__builtin_neon_%s%s (%s)"
-                       (builtin_name features name) modesuf parstr in
-       return ctype builtin in
-  let body = pdecls @ rdecls @ stmts
-  and fnname = (intrinsic_name name) ^ "_" ^ (string_of_elt elttype) in
-  begin
-    print_feature_test_start features;
-    print_function ctype fnname body;
-    print_feature_test_end features;
-  end
-
-(* When this function processes the element types in the ops table, it rewrites
-   them in a list of tuples (a,b,c):
-     a : C type as an "arity", e.g. Arity1 (T_poly8x8, T_poly8x8)
-     b : Asm type : a single, processed element type, e.g. P16. This is the
-         type which should be attached to the asm opcode.
-     c : Variant type : the unprocessed type for this variant (e.g. in add
-         instructions which don't care about the sign, b might be i16 and c
-         might be s16.)
-*)
-
-let print_op (opcode, features, shape, name, munge, types) =
-  let sorted_types = List.sort compare types in
-  let munged_types = List.map
-    (fun elt -> let c, asm = munge shape elt in c, asm, elt) sorted_types in
-  List.iter
-    (fun variant -> print_variant opcode features shape name variant)
-    munged_types
-
-let print_ops ops =
-  List.iter print_op ops
-
-(* Output type definitions. Table entries are:
-     cbase : "C" name for the type.
-     abase : "ARM" base name for the type (i.e. int in int8x8_t).
-     esize : element size.
-     enum : element count.
-     alevel: architecture level at which available.
-*)
-
-type fpulevel = CRYPTO | ALL
-
-let deftypes () =
-  let typeinfo = [
-    (* Doubleword vector types.  *)
-    "__builtin_neon_qi", "int", 8, 8, ALL;
-    "__builtin_neon_hi", "int", 16, 4, ALL;
-    "__builtin_neon_si", "int", 32, 2, ALL;
-    "__builtin_neon_di", "int", 64, 1, ALL;
-    "__builtin_neon_hf", "float", 16, 4, ALL;
-    "__builtin_neon_sf", "float", 32, 2, ALL;
-    "__builtin_neon_poly8", "poly", 8, 8, ALL;
-    "__builtin_neon_poly16", "poly", 16, 4, ALL;
-    "__builtin_neon_poly64", "poly", 64, 1, CRYPTO;
-    "__builtin_neon_uqi", "uint", 8, 8, ALL;
-    "__builtin_neon_uhi", "uint", 16, 4, ALL;
-    "__builtin_neon_usi", "uint", 32, 2, ALL;
-    "__builtin_neon_udi", "uint", 64, 1, ALL;
-
-    (* Quadword vector types.  *)
-    "__builtin_neon_qi", "int", 8, 16, ALL;
-    "__builtin_neon_hi", "int", 16, 8, ALL;
-    "__builtin_neon_si", "int", 32, 4, ALL;
-    "__builtin_neon_di", "int", 64, 2, ALL;
-    "__builtin_neon_sf", "float", 32, 4, ALL;
-    "__builtin_neon_poly8", "poly", 8, 16, ALL;
-    "__builtin_neon_poly16", "poly", 16, 8, ALL;
-    "__builtin_neon_poly64", "poly", 64, 2, CRYPTO;
-    "__builtin_neon_uqi", "uint", 8, 16, ALL;
-    "__builtin_neon_uhi", "uint", 16, 8, ALL;
-    "__builtin_neon_usi", "uint", 32, 4, ALL;
-    "__builtin_neon_udi", "uint", 64, 2, ALL
-  ] in
-  List.iter
-    (fun (cbase, abase, esize, enum, fpulevel) ->
-      let attr =
-        match enum with
-          1 -> ""
-        | _ -> Printf.sprintf "\t__attribute__ ((__vector_size__ (%d)))"
-                              (esize * enum / 8) in
-      if fpulevel == CRYPTO then
-        Format.printf "#ifdef __ARM_FEATURE_CRYPTO\n";
-      Format.printf "typedef %s %s%dx%d_t%s;@\n" cbase abase esize enum attr;
-      if fpulevel == CRYPTO then
-        Format.printf "#endif\n";)
-    typeinfo;
-  Format.print_newline ();
-  (* Extra types not in <stdint.h>.  *)
-  Format.printf "typedef float float32_t;\n";
-  Format.printf "typedef __builtin_neon_poly8 poly8_t;\n";
-  Format.printf "typedef __builtin_neon_poly16 poly16_t;\n";
-  Format.printf "#ifdef __ARM_FEATURE_CRYPTO\n";
-  Format.printf "typedef __builtin_neon_poly64 poly64_t;\n";
-  Format.printf "typedef __builtin_neon_poly128 poly128_t;\n";
-  Format.printf "#endif\n"
-
-(* Output structs containing arrays, for load & store instructions etc.
-   poly128_t is deliberately not included here because it has no array types
-   defined for it.  *)
-
-let arrtypes () =
-  let typeinfo = [
-    "int", 8, ALL;    "int", 16, ALL;
-    "int", 32, ALL;   "int", 64, ALL;
-    "uint", 8, ALL;   "uint", 16, ALL;
-    "uint", 32, ALL;  "uint", 64, ALL;
-    "float", 32, ALL; "poly", 8, ALL;
-    "poly", 16, ALL; "poly", 64, CRYPTO
-  ] in
-  let writestruct elname elsize regsize arrsize fpulevel =
-    let elnum = regsize / elsize in
-    let structname =
-      Printf.sprintf "%s%dx%dx%d_t" elname elsize elnum arrsize in
-    let sfmt = start_function () in
-    Format.printf "%stypedef struct %s"
-      (if fpulevel == CRYPTO then "#ifdef __ARM_FEATURE_CRYPTO\n" else "") structname;
-    open_braceblock sfmt;
-    Format.printf "%s%dx%d_t val[%d];" elname elsize elnum arrsize;
-    close_braceblock sfmt;
-    Format.printf " %s;%s" structname (if fpulevel == CRYPTO then "\n#endif\n" else "");
-    end_function sfmt;
-  in
-    for n = 2 to 4 do
-      List.iter
-        (fun (elname, elsize, alevel) ->
-          writestruct elname elsize 64 n alevel;
-          writestruct elname elsize 128 n alevel)
-        typeinfo
-    done
-
-let print_lines = List.iter (fun s -> Format.printf "%s@\n" s)
-
-(* Do it.  *)
-
-let _ =
-  print_lines [
-"/* ARM NEON intrinsics include file. This file is generated automatically";
-"   using neon-gen.ml.  Please do not edit manually.";
-"";
-"   Copyright (C) 2006-2014 Free Software Foundation, Inc.";
-"   Contributed by CodeSourcery.";
-"";
-"   This file is part of GCC.";
-"";
-"   GCC is free software; you can redistribute it and/or modify it";
-"   under the terms of the GNU General Public License as published";
-"   by the Free Software Foundation; either version 3, or (at your";
-"   option) any later version.";
-"";
-"   GCC is distributed in the hope that it will be useful, but WITHOUT";
-"   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY";
-"   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public";
-"   License for more details.";
-"";
-"   Under Section 7 of GPL version 3, you are granted additional";
-"   permissions described in the GCC Runtime Library Exception, version";
-"   3.1, as published by the Free Software Foundation.";
-"";
-"   You should have received a copy of the GNU General Public License and";
-"   a copy of the GCC Runtime Library Exception along with this program;";
-"   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see";
-"   <http://www.gnu.org/licenses/>.  */";
-"";
-"#ifndef _GCC_ARM_NEON_H";
-"#define _GCC_ARM_NEON_H 1";
-"";
-"#ifndef __ARM_NEON__";
-"#error You must enable NEON instructions (e.g. -mfloat-abi=softfp -mfpu=neon) to use arm_neon.h";
-"#else";
-"";
-"#ifdef __cplusplus";
-"extern \"C\" {";
-"#endif";
-"";
-"#include <stdint.h>";
-""];
-  deftypes ();
-  arrtypes ();
-  Format.print_newline ();
-  print_ops ops;
-  Format.print_newline ();
-  print_ops reinterp;
-  print_ops reinterpq;
-  Format.printf "%s" crypto_intrinsics;
-  print_lines [
-"#ifdef __cplusplus";
-"}";
-"#endif";
-"#endif";
-"#endif"]
index 9deda96..645551f 100644 (file)
    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
    License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with GCC; see the file COPYING3.  If not see
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
 /* Run-time Target Specification.  */
index b5055ce..4d57d13 100644 (file)
    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
    License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with GCC; see the file COPYING3.  If not see
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
 /* Override settings that are different to the uclinux-elf or
index 5cd4fe5..43edba7 100644 (file)
    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
    License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with GCC; see the file COPYING3.  If not see
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
 /* We don't want a PLT.  */
index 8bef16b..faf8472 100644 (file)
@@ -17,8 +17,13 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3.  If not see
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
 
index 1652415..9c8489e 100644 (file)
       }
 
     // Input and output of the libgcc function
-    const unsigned int regno_in[]  = { -1, 22, 22, -1, 18 };
-    const unsigned int regno_out[] = { -1, 24, 24, -1, 22 };
+    const unsigned int regno_in[]  = { -1U, 22, 22, -1U, 18 };
+    const unsigned int regno_out[] = { -1U, 24, 24, -1U, 22 };
 
     operands[3] = gen_rtx_REG (<MODE>mode, regno_out[(size_t) GET_MODE_SIZE (<MODE>mode)]);
     operands[4] = gen_rtx_REG (<MODE>mode,  regno_in[(size_t) GET_MODE_SIZE (<MODE>mode)]);
index 3cf2fcd..483a303 100644 (file)
@@ -291,7 +291,7 @@ AVR_MCU ("atxmega192a3",     ARCH_AVRXMEGA6, AVR_ISA_NONE, "__AVR_ATxmega192A3__
 AVR_MCU ("atxmega192d3",     ARCH_AVRXMEGA6, AVR_ISA_NONE, "__AVR_ATxmega192D3__",     0x2000, 4, "x192d3")
 AVR_MCU ("atxmega256a3",     ARCH_AVRXMEGA6, AVR_ISA_NONE, "__AVR_ATxmega256A3__",     0x2000, 5, "x256a3")
 AVR_MCU ("atxmega256a3b",    ARCH_AVRXMEGA6, AVR_ISA_NONE, "__AVR_ATxmega256A3B__",    0x2000, 5, "x256a3b")
-AVR_MCU ("atxmega256a3bu",   ARCH_AVRXMEGA6, AVR_ISA_NONE, "__AVR_ATxmega258A3BU__",   0x2000, 5, "x256a3bu")
+AVR_MCU ("atxmega256a3bu",   ARCH_AVRXMEGA6, AVR_ISA_NONE, "__AVR_ATxmega256A3BU__",   0x2000, 5, "x256a3bu")
 AVR_MCU ("atxmega256d3",     ARCH_AVRXMEGA6, AVR_ISA_NONE, "__AVR_ATxmega256D3__",     0x2000, 5, "x256d3")
 AVR_MCU ("atxmega128a3u",    ARCH_AVRXMEGA6, AVR_ISA_RMW, "__AVR_ATxmega128A3U__",    0x2000, 3, "x128a3u")
 AVR_MCU ("atxmega128b1",     ARCH_AVRXMEGA6, AVR_ISA_RMW,  "__AVR_ATxmega128B1__",     0x2000, 3, "x128b1")
index 99644ec..fa979df 100644 (file)
@@ -2353,6 +2353,12 @@ avr_notice_update_cc (rtx body ATTRIBUTE_UNUSED, rtx insn)
         }
       break;
 
+    case CC_SET_VZN:
+      /* Insn like INC, DEC, NEG that set Z,N,V.  We currently don't make use
+         of this combination, cf. also PR61055.  */
+      CC_STATUS_INIT;
+      break;
+
     case CC_SET_CZN:
       /* Insn sets the Z,N,C flags of CC to recog_operand[0].
          The V flag may or may not be known but that's ok because
@@ -3987,7 +3993,7 @@ avr_out_store_psi (rtx insn, rtx *op, int *plen)
                                 "std Y+61,%A1"    CR_TAB
                                 "std Y+62,%B1"    CR_TAB
                                 "std Y+63,%C1"    CR_TAB
-                                "sbiw r28,%o0-60", op, plen, -5);
+                                "sbiw r28,%o0-61", op, plen, -5);
 
           return avr_asm_len ("subi r28,lo8(-%o0)" CR_TAB
                               "sbci r29,hi8(-%o0)" CR_TAB
@@ -6284,7 +6290,7 @@ avr_out_plus_1 (rtx *xop, int *plen, enum rtx_code code, int *pcc,
 
   if (REG_P (xop[2]))
     {
-      *pcc = MINUS == code ? (int) CC_SET_CZN : (int) CC_SET_N;
+      *pcc = MINUS == code ? (int) CC_SET_CZN : (int) CC_CLOBBER;
 
       for (i = 0; i < n_bytes; i++)
         {
@@ -6393,7 +6399,7 @@ avr_out_plus_1 (rtx *xop, int *plen, enum rtx_code code, int *pcc,
                                op, plen, 1);
 
                   if (n_bytes == 2 && PLUS == code)
-                    *pcc = CC_SET_ZN;
+                    *pcc = CC_SET_CZN;
                 }
 
               i++;
@@ -6416,6 +6422,7 @@ avr_out_plus_1 (rtx *xop, int *plen, enum rtx_code code, int *pcc,
         {
           avr_asm_len ((code == PLUS) ^ (val8 == 1) ? "dec %0" : "inc %0",
                        op, plen, 1);
+          *pcc = CC_CLOBBER;
           break;
         }
 
index 78434ec..9d34983 100644 (file)
@@ -251,18 +251,18 @@ enum reg_class {
 #define REG_CLASS_CONTENTS {                                           \
   {0x00000000,0x00000000},     /* NO_REGS */                           \
   {0x00000001,0x00000000},     /* R0_REG */                            \
-  {3 << REG_X,0x00000000},      /* POINTER_X_REGS, r26 - r27 */                \
-  {3 << REG_Y,0x00000000},      /* POINTER_Y_REGS, r28 - r29 */                \
-  {3 << REG_Z,0x00000000},      /* POINTER_Z_REGS, r30 - r31 */                \
+  {3u << REG_X,0x00000000},     /* POINTER_X_REGS, r26 - r27 */                \
+  {3u << REG_Y,0x00000000},     /* POINTER_Y_REGS, r28 - r29 */                \
+  {3u << REG_Z,0x00000000},     /* POINTER_Z_REGS, r30 - r31 */                \
   {0x00000000,0x00000003},     /* STACK_REG, STACK */                  \
-  {(3 << REG_Y) | (3 << REG_Z),                                                \
+  {(3u << REG_Y) | (3u << REG_Z),                                      \
      0x00000000},              /* BASE_POINTER_REGS, r28 - r31 */      \
-  {(3 << REG_X) | (3 << REG_Y) | (3 << REG_Z),                         \
+  {(3u << REG_X) | (3u << REG_Y) | (3u << REG_Z),                      \
      0x00000000},              /* POINTER_REGS, r26 - r31 */           \
-  {(3 << REG_X) | (3 << REG_Y) | (3 << REG_Z) | (3 << REG_W),          \
+  {(3u << REG_X) | (3u << REG_Y) | (3u << REG_Z) | (3u << REG_W),      \
      0x00000000},              /* ADDW_REGS, r24 - r31 */              \
   {0x00ff0000,0x00000000},     /* SIMPLE_LD_REGS r16 - r23 */          \
-  {(3 << REG_X)|(3 << REG_Y)|(3 << REG_Z)|(3 << REG_W)|(0xff << 16),   \
+  {(3u << REG_X)|(3u << REG_Y)|(3u << REG_Z)|(3u << REG_W)|(0xffu << 16),\
      0x00000000},      /* LD_REGS, r16 - r31 */                        \
   {0x0000ffff,0x00000000},     /* NO_LD_REGS  r0 - r15 */              \
   {0xffffffff,0x00000000},     /* GENERAL_REGS, r0 - r31 */            \
index d7baa4a..3bb2a91 100644 (file)
@@ -90,7 +90,7 @@
 (include "constraints.md")
 
 ;; Condition code settings.
-(define_attr "cc" "none,set_czn,set_zn,set_n,compare,clobber,
+(define_attr "cc" "none,set_czn,set_zn,set_vzn,set_n,compare,clobber,
                    plus,ldi"
   (const_string "none"))
 
   ""
   {
     int i;
+
+    // Avoid (subreg (mem)) for non-generic address spaces below.  Because
+    // of the poor addressing capabilities of these spaces it's better to
+    // load them in one chunk.  And it avoids PR61443.
+
+    if (MEM_P (operands[0])
+        && !ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (operands[0])))
+      operands[0] = copy_to_mode_reg (<MODE>mode, operands[0]);
+
     for (i = GET_MODE_SIZE (<MODE>mode) - 1; i >= 0; --i)
       {
         rtx part = simplify_gen_subreg (QImode, operands[0], <MODE>mode, i);
        inc %0\;inc %0
        dec %0\;dec %0"
   [(set_attr "length" "1,1,1,1,2,2")
-   (set_attr "cc" "set_czn,set_czn,set_zn,set_zn,set_zn,set_zn")])
+   (set_attr "cc" "set_czn,set_czn,set_vzn,set_vzn,set_vzn,set_vzn")])
 
 ;; "addhi3"
 ;; "addhq3" "adduhq3"
        dec %0\;dec %0
        inc %0\;inc %0"
   [(set_attr "length" "1,1,1,1,2,2")
-   (set_attr "cc" "set_czn,set_czn,set_zn,set_zn,set_zn,set_zn")])
+   (set_attr "cc" "set_czn,set_czn,set_vzn,set_vzn,set_vzn,set_vzn")])
 
 ;; "subhi3"
 ;; "subhq3" "subuhq3"
   ""
   "neg %0"
   [(set_attr "length" "1")
-   (set_attr "cc" "set_zn")])
+   (set_attr "cc" "set_vzn")])
 
 (define_insn "*negqihi2"
   [(set (match_operand:HI 0 "register_operand"                        "=r")
index 1b68bcd..8173bb0 100644 (file)
@@ -13,8 +13,13 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3.  If not see
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
 /* This file causes gcc to prefer using DBX (stabs) debugging
index f7b9a28..165d3aa 100644 (file)
@@ -45,6 +45,7 @@ along with GCC; see the file COPYING3.  If not see
 #undef ENDFILE_SPEC
 #define ENDFILE_SPEC \
   "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s}\
+   %{!shared:%:if-exists(default-manifest.o%s)}\
    crtend.o%s"
 
 /* Normally, -lgcc is not needed since everything in it is in the DLL, but we
index 1f5a11c..80f6a08 100644 (file)
@@ -739,6 +739,11 @@ const char *host_detect_local_cpu (int argc, const char **argv)
                    /* Assume Core 2.  */
                    cpu = "core2";
                }
+             else if (has_longmode)
+               /* Perhaps some emulator?  Assume x86-64, otherwise gcc
+                  -march=native would be unusable for 64-bit compilations,
+                  as all the CPUs below are 32-bit only.  */
+               cpu = "x86-64";
              else if (has_sse3)
                /* It is Core Duo.  */
                cpu = "pentium-m";
index 3eefe4a..6dc6888 100644 (file)
@@ -3128,7 +3128,7 @@ ix86_option_override_internal (bool main_args_p,
   (PTA_SANDYBRIDGE | PTA_FSGSBASE | PTA_RDRND | PTA_F16C)
 #define PTA_HASWELL \
   (PTA_IVYBRIDGE | PTA_AVX2 | PTA_BMI | PTA_BMI2 | PTA_LZCNT \
-   | PTA_FMA | PTA_MOVBE | PTA_RTM | PTA_HLE)
+   | PTA_FMA | PTA_MOVBE | PTA_HLE)
 #define PTA_BROADWELL \
   (PTA_HASWELL | PTA_ADX | PTA_PRFCHW | PTA_RDSEED)
 #define PTA_BONNELL \
@@ -21507,7 +21507,7 @@ ix86_expand_vec_perm (rtx operands[])
          t1 = gen_reg_rtx (V32QImode);
          t2 = gen_reg_rtx (V32QImode);
          t3 = gen_reg_rtx (V32QImode);
-         vt2 = GEN_INT (128);
+         vt2 = GEN_INT (-128);
          for (i = 0; i < 32; i++)
            vec[i] = vt2;
          vt = gen_rtx_CONST_VECTOR (V32QImode, gen_rtvec_v (32, vec));
@@ -23794,7 +23794,7 @@ decide_alg (HOST_WIDE_INT count, HOST_WIDE_INT expected_size,
 {
   const struct stringop_algs * algs;
   bool optimize_for_speed;
-  int max = -1;
+  int max = 0;
   const struct processor_costs *cost;
   int i;
   bool any_alg_usable_p = false;
@@ -23832,7 +23832,7 @@ decide_alg (HOST_WIDE_INT count, HOST_WIDE_INT expected_size,
   /* If expected size is not known but max size is small enough
      so inline version is a win, set expected size into
      the range.  */
-  if (max > 1 && (unsigned HOST_WIDE_INT) max >= max_size
+  if (((max > 1 && (unsigned HOST_WIDE_INT) max >= max_size) || max == -1)
       && expected_size == -1)
     expected_size = min_size / 2 + max_size / 2;
 
@@ -23921,7 +23921,7 @@ decide_alg (HOST_WIDE_INT count, HOST_WIDE_INT expected_size,
             *dynamic_check = 128;
           return loop_1_byte;
         }
-      if (max == -1)
+      if (max <= 0)
        max = 4096;
       alg = decide_alg (count, max / 2, min_size, max_size, memset,
                        zero_memset, dynamic_check, noalign);
@@ -24151,8 +24151,13 @@ ix86_expand_set_or_movmem (rtx dst, rtx src, rtx count_exp, rtx val_exp,
     align = MEM_ALIGN (dst) / BITS_PER_UNIT;
 
   if (CONST_INT_P (count_exp))
-    min_size = max_size = probable_max_size = count = expected_size
-      = INTVAL (count_exp);
+    {
+      min_size = max_size = probable_max_size = count = expected_size
+       = INTVAL (count_exp);
+      /* When COUNT is 0, there is nothing to do.  */
+      if (!count)
+       return true;
+    }
   else
     {
       if (min_size_exp)
@@ -24161,7 +24166,7 @@ ix86_expand_set_or_movmem (rtx dst, rtx src, rtx count_exp, rtx val_exp,
        max_size = INTVAL (max_size_exp);
       if (probable_max_size_exp)
        probable_max_size = INTVAL (probable_max_size_exp);
-      if (CONST_INT_P (expected_size_exp) && count == 0)
+      if (CONST_INT_P (expected_size_exp))
        expected_size = INTVAL (expected_size_exp);
      }
 
@@ -24390,7 +24395,8 @@ ix86_expand_set_or_movmem (rtx dst, rtx src, rtx count_exp, rtx val_exp,
          if (jump_around_label == NULL_RTX)
            jump_around_label = gen_label_rtx ();
          emit_cmp_and_jump_insns (count_exp, GEN_INT (dynamic_check - 1),
-                                  LEU, 0, GET_MODE (count_exp), 1, hot_label);
+                                  LEU, 0, counter_mode (count_exp),
+                                  1, hot_label);
          predict_jump (REG_BR_PROB_BASE * 90 / 100);
          if (issetmem)
            set_storage_via_libcall (dst, count_exp, val_exp, false);
@@ -26232,13 +26238,17 @@ ix86_dependencies_evaluation_hook (rtx head, rtx tail)
              {
                edge e;
                edge_iterator ei;
-               /* Assume that region is SCC, i.e. all immediate predecessors
-                  of non-head block are in the same region.  */
+
+               /* Regions are SCCs with the exception of selective
+                  scheduling with pipelining of outer blocks enabled.
+                  So also check that immediate predecessors of a non-head
+                  block are in the same region.  */
                FOR_EACH_EDGE (e, ei, bb->preds)
                  {
                    /* Avoid creating of loop-carried dependencies through
-                      using topological odering in region.  */
-                   if (BLOCK_TO_BB (bb->index) > BLOCK_TO_BB (e->src->index))
+                      using topological ordering in the region.  */
+                   if (rgn == CONTAINING_RGN (e->src->index)
+                       && BLOCK_TO_BB (bb->index) > BLOCK_TO_BB (e->src->index))
                      add_dependee_for_func_arg (first_arg, e->src); 
                  }
              }
@@ -35406,7 +35416,8 @@ rdrand_step:
       else
        op2 = gen_rtx_SUBREG (SImode, op0, 0);
 
-      if (target == 0)
+      if (target == 0
+         || !register_operand (target, SImode))
        target = gen_reg_rtx (SImode);
 
       pat = gen_rtx_GEU (VOIDmode, gen_rtx_REG (CCCmode, FLAGS_REG),
@@ -35448,7 +35459,8 @@ rdseed_step:
                          const0_rtx);
       emit_insn (gen_rtx_SET (VOIDmode, op2, pat));
 
-      if (target == 0)
+      if (target == 0
+         || !register_operand (target, SImode))
         target = gen_reg_rtx (SImode);
 
       emit_insn (gen_zero_extendqisi2 (target, op2));
@@ -37794,10 +37806,10 @@ ix86_rtx_costs (rtx x, int code_i, int outer_code_i, int opno, int *total,
       else if (TARGET_64BIT && !x86_64_zext_immediate_operand (x, VOIDmode))
        *total = 2;
       else if (flag_pic && SYMBOLIC_CONST (x)
-              && (!TARGET_64BIT
-                  || (!GET_CODE (x) != LABEL_REF
-                      && (GET_CODE (x) != SYMBOL_REF
-                          || !SYMBOL_REF_LOCAL_P (x)))))
+              && !(TARGET_64BIT
+                   && (GET_CODE (x) == LABEL_REF
+                       || (GET_CODE (x) == SYMBOL_REF
+                           && SYMBOL_REF_LOCAL_P (x)))))
        *total = 1;
       else
        *total = 0;
index 25e2e93..f677a7e 100644 (file)
        (const_string "1")
        (const_string "*")))
    (set (attr "mode")
-        (cond [(eq_attr "alternative" "3,4,9,10,13,14,15")
+        (cond [(eq_attr "alternative" "3,4,9,10,12,13,14,15")
                 (const_string "SI")
               (eq_attr "alternative" "11")
                 (const_string "DI")
 
 ;; Avoid store forwarding (partial memory) stall penalty by extending
 ;; SImode value to DImode through XMM register instead of pushing two
-;; SImode values to stack. Note that even !TARGET_INTER_UNIT_MOVES_TO_VEC
-;; targets benefit from this optimization. Also note that fild
-;; loads from memory only.
+;; SImode values to stack. Also note that fild loads from memory only.
 
-(define_insn "*floatunssi<mode>2_1"
-  [(set (match_operand:X87MODEF 0 "register_operand" "=f,f")
+(define_insn_and_split "*floatunssi<mode>2_i387_with_xmm"
+  [(set (match_operand:X87MODEF 0 "register_operand" "=f")
        (unsigned_float:X87MODEF
-         (match_operand:SI 1 "nonimmediate_operand" "x,m")))
-   (clobber (match_operand:DI 2 "memory_operand" "=m,m"))
-   (clobber (match_scratch:SI 3 "=X,x"))]
+         (match_operand:SI 1 "nonimmediate_operand" "rm")))
+   (clobber (match_scratch:DI 3 "=x"))
+   (clobber (match_operand:DI 2 "memory_operand" "=m"))]
   "!TARGET_64BIT
    && TARGET_80387 && X87_ENABLE_FLOAT (<X87MODEF:MODE>mode, DImode)
-   && TARGET_SSE"
+   && TARGET_SSE2 && TARGET_INTER_UNIT_MOVES_TO_VEC"
   "#"
-  [(set_attr "type" "multi")
-   (set_attr "mode" "<MODE>")])
-
-(define_split
-  [(set (match_operand:X87MODEF 0 "register_operand")
-       (unsigned_float:X87MODEF
-         (match_operand:SI 1 "register_operand")))
-   (clobber (match_operand:DI 2 "memory_operand"))
-   (clobber (match_scratch:SI 3))]
-  "!TARGET_64BIT
-   && TARGET_80387 && X87_ENABLE_FLOAT (<X87MODEF:MODE>mode, DImode)
-   && TARGET_SSE
-   && reload_completed"
-  [(set (match_dup 2) (match_dup 1))
-   (set (match_dup 0)
-       (float:X87MODEF (match_dup 2)))]
-  "operands[1] = simplify_gen_subreg (DImode, operands[1], SImode, 0);")
-
-(define_split
-  [(set (match_operand:X87MODEF 0 "register_operand")
-       (unsigned_float:X87MODEF
-         (match_operand:SI 1 "memory_operand")))
-   (clobber (match_operand:DI 2 "memory_operand"))
-   (clobber (match_scratch:SI 3))]
-  "!TARGET_64BIT
-   && TARGET_80387 && X87_ENABLE_FLOAT (<X87MODEF:MODE>mode, DImode)
-   && TARGET_SSE
-   && reload_completed"
-  [(set (match_dup 2) (match_dup 3))
+  "&& reload_completed"
+  [(set (match_dup 3) (zero_extend:DI (match_dup 1)))
+   (set (match_dup 2) (match_dup 3))
    (set (match_dup 0)
        (float:X87MODEF (match_dup 2)))]
-{
-  emit_move_insn (operands[3], operands[1]);
-  operands[3] = simplify_gen_subreg (DImode, operands[3], SImode, 0);
-})
+  ""
+  [(set_attr "type" "multi")
+   (set_attr "mode" "<MODE>")])
 
 (define_expand "floatunssi<mode>2"
   [(parallel
      [(set (match_operand:X87MODEF 0 "register_operand")
           (unsigned_float:X87MODEF
             (match_operand:SI 1 "nonimmediate_operand")))
-      (clobber (match_dup 2))
-      (clobber (match_scratch:SI 3))])]
+      (clobber (match_scratch:DI 3))
+      (clobber (match_dup 2))])]
   "!TARGET_64BIT
    && ((TARGET_80387 && X87_ENABLE_FLOAT (<X87MODEF:MODE>mode, DImode)
-       && TARGET_SSE)
+       && TARGET_SSE2 && TARGET_INTER_UNIT_MOVES_TO_VEC)
        || (SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH))"
 {
   if (SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH)
 
 (define_insn "x86_64_shrd"
   [(set (match_operand:DI 0 "nonimmediate_operand" "+r*m")
-        (ior:DI (ashiftrt:DI (match_dup 0)
+        (ior:DI (lshiftrt:DI (match_dup 0)
                  (match_operand:QI 2 "nonmemory_operand" "Jc"))
                (ashift:DI (match_operand:DI 1 "register_operand" "r")
                  (minus:QI (const_int 64) (match_dup 2)))))
 
 (define_insn "x86_shrd"
   [(set (match_operand:SI 0 "nonimmediate_operand" "+r*m")
-        (ior:SI (ashiftrt:SI (match_dup 0)
+        (ior:SI (lshiftrt:SI (match_dup 0)
                  (match_operand:QI 2 "nonmemory_operand" "Ic"))
                (ashift:SI (match_operand:SI 1 "register_operand" "r")
                  (minus:QI (const_int 32) (match_dup 2)))))
  [(set (match_dup 3) (match_dup 4))
   (parallel
    [(set (match_dup 4)
-        (ior:DWIH (ashiftrt:DWIH (match_dup 4) (match_dup 2))
+        (ior:DWIH (lshiftrt:DWIH (match_dup 4) (match_dup 2))
                   (ashift:DWIH (match_dup 5)
                                (minus:QI (match_dup 6) (match_dup 2)))))
     (clobber (reg:CC FLAGS_REG))])
   (parallel
    [(set (match_dup 5)
-        (ior:DWIH (ashiftrt:DWIH (match_dup 5) (match_dup 2))
+        (ior:DWIH (lshiftrt:DWIH (match_dup 5) (match_dup 2))
                   (ashift:DWIH (match_dup 3)
                                (minus:QI (match_dup 6) (match_dup 2)))))
     (clobber (reg:CC FLAGS_REG))])]
   "TARGET_USE_FANCY_MATH_387
    && flag_unsafe_math_optimizations"
 {
+  rtx tmp1, tmp2;
   if (optimize_insn_for_size_p ())
     FAIL;
 
-  operands[3] = gen_reg_rtx (XFmode);
-  operands[4] = gen_reg_rtx (XFmode);
+  tmp1 = gen_reg_rtx (XFmode);
+  tmp2 = gen_reg_rtx (XFmode);
 
-  emit_insn (gen_floatsixf2 (operands[3], operands[2]));
-  emit_insn (gen_fscalexf4_i387 (operands[0], operands[4],
-                                 operands[1], operands[3]));
+  emit_insn (gen_floatsixf2 (tmp1, operands[2]));
+  emit_insn (gen_fscalexf4_i387 (operands[0], tmp2,
+                                 operands[1], tmp1));
   DONE;
 })
 
index f563820..4cfd5f0 100644 (file)
@@ -148,6 +148,7 @@ along with GCC; see the file COPYING3.  If not see
 #undef ENDFILE_SPEC
 #define ENDFILE_SPEC \
   "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \
+   %{!shared:%:if-exists(default-manifest.o%s)}\
   crtend.o%s"
 
 /* Override startfile prefix defaults.  */
index f7ae836..67e66f6 100644 (file)
    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
    License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with GCC; see the file COPYING3.  If not see
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
 #ifdef HAVE_INITFINI_ARRAY_SUPPORT
diff --git a/gcc/config/msp430/msp430-opts.h b/gcc/config/msp430/msp430-opts.h
new file mode 100644 (file)
index 0000000..119cfcb
--- /dev/null
@@ -0,0 +1,32 @@
+/* GCC option-handling definitions for the TI MSP430
+   Copyright (C) 2014 Free Software Foundation, Inc.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef MSP430_OPTS_H
+#define MSP430_OPTS_H
+
+enum msp430_hwmult_types
+{
+  NONE,
+  AUTO,
+  SMALL,
+  LARGE,
+  F5SERIES
+};
+
+#endif
index 7f999ab..f0b8aea 100644 (file)
@@ -30,11 +30,9 @@ const char * msp430x_extendhisi (rtx *);
 void   msp430_fixup_compare_operands (enum machine_mode, rtx *);
 int    msp430_hard_regno_mode_ok (int, enum machine_mode);
 int    msp430_hard_regno_nregs (int, enum machine_mode);
-bool    msp430_hwmult_enabled (void);
 rtx    msp430_incoming_return_addr_rtx (void);
 void   msp430_init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, tree, int);
 int    msp430_initial_elimination_offset (int, int);
-bool    msp430_is_f5_mcu (void);
 bool    msp430_is_interrupt_func (void);
 const char * msp430x_logical_shift_right (rtx);
 const char * msp430_mcu_name (void);
@@ -45,5 +43,6 @@ rtx   msp430_return_addr_rtx (int);
 void   msp430_split_movsi (rtx *);
 void    msp430_start_function (FILE *, const char *, tree);
 rtx    msp430_subreg (enum machine_mode, rtx, enum machine_mode, int);
+bool    msp430_use_f5_series_hwmult (void);
 
 #endif /* GCC_MSP430_PROTOS_H */
index 80a17a6..9eb1409 100644 (file)
@@ -95,18 +95,6 @@ msp430_init_machine_status (void)
   return m;
 }
 
-#undef  TARGET_HANDLE_OPTION
-#define TARGET_HANDLE_OPTION msp430_handle_option
-
-bool
-msp430_handle_option (struct gcc_options *opts ATTRIBUTE_UNUSED,
-                     struct gcc_options *opts_set ATTRIBUTE_UNUSED,
-                     const struct cl_decoded_option *decoded ATTRIBUTE_UNUSED,
-                     location_t loc ATTRIBUTE_UNUSED)
-{
-  return true;
-}
-
 #undef  TARGET_OPTION_OVERRIDE
 #define TARGET_OPTION_OVERRIDE         msp430_option_override
 
@@ -196,19 +184,14 @@ msp430_option_override (void)
 
   if (target_cpu)
     {
-      if (strcasecmp (target_cpu, "msp430x") == 0
-         || strcasecmp (target_cpu, "msp430xv2") == 0
-         || strcasecmp (target_cpu, "430x") == 0
-         || strcasecmp (target_cpu, "430xv2") == 0)
+      if (strcasecmp (target_cpu, "msp430x") == 0)
        msp430x = true;
-      else if (strcasecmp (target_cpu, "msp430") == 0
-              || strcasecmp (target_cpu, "430") == 0)
+      else /* target_cpu == "msp430" - already handled by the front end.  */
        msp430x = false;
-      else
-       error ("unrecognised argument of -mcpu: %s", target_cpu);
     }
-
-  if (target_mcu)
+  /* Note - the front end has already ensured at most
+     one of target_cpu and target_mcu will be set.  */
+  else if (target_mcu)
     {
       int i;
 
@@ -217,25 +200,12 @@ msp430_option_override (void)
         supports 430.  */
       msp430x = true;
 
-      /* For backwards compatibility we recognise two generic MCU
-        430X names.  However we want to be able to generate special C
-        preprocessor defines for them, which is why we set target_mcu
-        to NULL.  */
-      if (strcasecmp (target_mcu, "msp430") == 0)
-       {
-         msp430x = false;
-         target_mcu = NULL;
-       }
-      else if (strcasecmp (target_mcu, "msp430x") == 0
-              || strcasecmp (target_mcu, "msp430xv2") == 0)
-       target_mcu = NULL;
-      else
-       for (i = ARRAY_SIZE (msp430_mcu_names); i--;)
-         if (strcasecmp (msp430_mcu_names[i], target_mcu) == 0)
-           {
-             msp430x = false;
-             break;
-           }
+      for (i = ARRAY_SIZE (msp430_mcu_names); i--;)
+       if (strcasecmp (msp430_mcu_names[i], target_mcu) == 0)
+         {
+           msp430x = false;
+           break;
+         }
       /* It is not an error if we do not match the MCU name.  There are
         hundreds of them.  */
     }
@@ -760,6 +730,97 @@ msp430_get_raw_result_mode (int regno ATTRIBUTE_UNUSED)
 {
   return Pmode;
 }
+
+#undef  TARGET_GIMPLIFY_VA_ARG_EXPR
+#define TARGET_GIMPLIFY_VA_ARG_EXPR msp430_gimplify_va_arg_expr
+
+#include "gimplify.h"
+#include "gimple-expr.h"
+
+static tree
+msp430_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p,
+                         gimple_seq *post_p)
+{
+  tree addr, t, type_size, rounded_size, valist_tmp;
+  unsigned HOST_WIDE_INT align, boundary;
+  bool indirect;
+
+  indirect = pass_by_reference (NULL, TYPE_MODE (type), type, false);
+  if (indirect)
+    type = build_pointer_type (type);
+
+  align = PARM_BOUNDARY / BITS_PER_UNIT;
+  boundary = targetm.calls.function_arg_boundary (TYPE_MODE (type), type);
+
+  /* When we align parameter on stack for caller, if the parameter
+     alignment is beyond MAX_SUPPORTED_STACK_ALIGNMENT, it will be
+     aligned at MAX_SUPPORTED_STACK_ALIGNMENT.  We will match callee
+     here with caller.  */
+  if (boundary > MAX_SUPPORTED_STACK_ALIGNMENT)
+    boundary = MAX_SUPPORTED_STACK_ALIGNMENT;
+
+  boundary /= BITS_PER_UNIT;
+
+  /* Hoist the valist value into a temporary for the moment.  */
+  valist_tmp = get_initialized_tmp_var (valist, pre_p, NULL);
+
+  /* va_list pointer is aligned to PARM_BOUNDARY.  If argument actually
+     requires greater alignment, we must perform dynamic alignment.  */
+  if (boundary > align
+      && !integer_zerop (TYPE_SIZE (type)))
+    {
+      /* FIXME: This is where this function diverts from targhooks.c:
+        std_gimplify_va_arg_expr().  It works, but I do not know why...  */
+      if (! POINTER_TYPE_P (type))
+       {
+         t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist_tmp,
+                     fold_build_pointer_plus_hwi (valist_tmp, boundary - 1));
+         gimplify_and_add (t, pre_p);
+
+         t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist_tmp,
+                     fold_build2 (BIT_AND_EXPR, TREE_TYPE (valist),
+                                  valist_tmp,
+                                  build_int_cst (TREE_TYPE (valist), -boundary)));
+         gimplify_and_add (t, pre_p);
+       }
+    }
+  else
+    boundary = align;
+
+  /* If the actual alignment is less than the alignment of the type,
+     adjust the type accordingly so that we don't assume strict alignment
+     when dereferencing the pointer.  */
+  boundary *= BITS_PER_UNIT;
+  if (boundary < TYPE_ALIGN (type))
+    {
+      type = build_variant_type_copy (type);
+      TYPE_ALIGN (type) = boundary;
+    }
+
+  /* Compute the rounded size of the type.  */
+  type_size = size_in_bytes (type);
+  rounded_size = round_up (type_size, align);
+
+  /* Reduce rounded_size so it's sharable with the postqueue.  */
+  gimplify_expr (&rounded_size, pre_p, post_p, is_gimple_val, fb_rvalue);
+
+  /* Get AP.  */
+  addr = valist_tmp;
+
+  /* Compute new value for AP.  */
+  t = fold_build_pointer_plus (valist_tmp, rounded_size);
+  t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist, t);
+  gimplify_and_add (t, pre_p);
+
+  addr = fold_convert (build_pointer_type (type), addr);
+
+  if (indirect)
+    addr = build_va_arg_indirect_ref (addr);
+
+  addr = build_va_arg_indirect_ref (addr);
+
+  return addr;
+}
 \f
 /* Addressing Modes */
 
@@ -1847,16 +1908,20 @@ static const struct
 
 /* Returns true if the current MCU is an F5xxx series.  */
 bool
-msp430_is_f5_mcu (void)
+msp430_use_f5_series_hwmult (void)
 {
-  if (target_mcu == NULL)
+  if (msp430_hwmult_type == F5SERIES)
+    return true;
+
+  if (target_mcu == NULL || msp430_hwmult_type != AUTO)
     return false;
+
   return strncasecmp (target_mcu, "msp430f5", 8) == 0;
 }
 
 /* Returns true id the current MCU has a second generation 32-bit hardware multiplier.  */
 static bool
-has_32bit_hw_mult (void)
+use_32bit_hwmult (void)
 {
   static const char * known_32bit_mult_mcus [] =
     {
@@ -1868,7 +1933,11 @@ has_32bit_hw_mult (void)
       "msp430f47177",     "msp430f47187",     "msp430f47197"
     };
   int i;
-  if (target_mcu == NULL)
+
+  if (msp430_hwmult_type == LARGE)
+    return true;
+
+  if (target_mcu == NULL || msp430_hwmult_type != AUTO)
     return false;
 
   for (i = ARRAY_SIZE (known_32bit_mult_mcus); i--;)
@@ -1878,25 +1947,6 @@ has_32bit_hw_mult (void)
   return false;
 }
 
-/* Returns true if hardware multiply is supported by the chosen MCU.  */
-bool
-msp430_hwmult_enabled (void)
-{
-  if (target_mcu == NULL)
-    return false;
-
-  if (!ENABLE_HWMULT)
-    return false;
-
-  if (msp430_is_interrupt_func ())
-    return false;
-
-  if (msp430_is_f5_mcu () || has_32bit_hw_mult ())
-    return true;
-
-  return false;
-}
-
 /* This function does the same as the default, but it will replace GCC
    function names with the MSPABI-specified ones.  */
 void
@@ -1913,20 +1963,20 @@ msp430_output_labelref (FILE *file, const char *name)
 
   /* If we have been given a specific MCU name then we may be
      able to make use of its hardware multiply capabilities.  */
-  if (msp430_hwmult_enabled ())
+  if (msp430_hwmult_type != NONE)
     {
       if (strcmp ("__mspabi_mpyi", name) == 0)
        {
-         if (msp430_is_f5_mcu ())
+         if (msp430_use_f5_series_hwmult ())
            name = "__mulhi2_f5";
          else
            name = "__mulhi2";
        }
       else if (strcmp ("__mspabi_mpyl", name) == 0)
        {
-         if (msp430_is_f5_mcu ())
+         if (msp430_use_f5_series_hwmult ())
            name = "__mulsi2_f5";
-         else if (has_32bit_hw_mult ())
+         else if (use_32bit_hwmult ())
            name = "__mulsi2_hw32";
          else
            name = "__mulsi2";
@@ -2203,7 +2253,7 @@ msp430_print_operand (FILE * file, rtx op, int letter)
         because builtins are expanded before the frame layout is determined.  */
       fprintf (file, "%d",
               msp430_initial_elimination_offset (ARG_POINTER_REGNUM, STACK_POINTER_REGNUM)
-               - 2);
+              - (TARGET_LARGE ? 4 : 2));
       return;
 
     case 'J':
@@ -2226,8 +2276,32 @@ msp430_print_operand (FILE * file, rtx op, int letter)
       msp430_print_operand_addr (file, addr);
       break;
 
-    case CONST_INT:
     case CONST:
+      if (GET_CODE (XEXP (op, 0)) == ZERO_EXTRACT)
+       {
+         op = XEXP (op, 0);
+         switch (INTVAL (XEXP (op, 2)))
+           {
+           case 0:
+             fprintf (file, "#lo (");
+             msp430_print_operand_raw (file, XEXP (op, 0));
+             fprintf (file, ")");
+             break;
+         
+           case 16:
+             fprintf (file, "#hi (");
+             msp430_print_operand_raw (file, XEXP (op, 0));
+             fprintf (file, ")");
+             break;
+
+           default:
+             output_operand_lossage ("invalid zero extract");
+             break;
+           }
+         break;
+       }
+      /* Fall through.  */
+    case CONST_INT:
     case SYMBOL_REF:
     case LABEL_REF:
       if (letter == 0)
index 65d6ad6..044e558 100644 (file)
@@ -55,8 +55,8 @@ extern bool msp430x;
   "%{mcpu=*:-mcpu=%*}%{!mcpu=*:%{mmcu=*:-mmcu=%*}} " /* Pass the CPU type on to the assembler.  */ \
   "%{mrelax=-mQ} " /* Pass the relax option on to the assembler.  */ \
   "%{mlarge:-ml} " /* Tell the assembler if we are building for the LARGE pointer model.  */ \
-  "%{!msim:-md} %{msim:%{mlarge:-md}}" /* Copy data from ROM to RAM if necessary.  */ \
-  "%{ffunction-sections:-gdwarf-sections}" /* If function sections are being created then create DWARF line number sections as well.  */
+  "%{!msim:-md} %{msim:%{mlarge:-md}} " /* Copy data from ROM to RAM if necessary.  */ \
+  "%{ffunction-sections:-gdwarf-sections} " /* If function sections are being created then create DWARF line number sections as well.  */
 
 /* Enable linker section garbage collection by default, unless we
    are creating a relocatable binary (gc does not work) or debugging
index c0c97da..5e890ec 100644 (file)
 ; halves.
 (define_split
   [(set (match_operand:SI          0 "msp430_nonsubreg_operand")
-       (plus:SI (match_operand:SI 1 "nonimmediate_operand")
-                (match_operand:SI 2 "general_operand")))
+       (plus:SI (match_operand:SI 1 "msp430_nonsubreg_operand")
+                (match_operand:SI 2 "msp430_nonsubreg_or_imm_operand")))
    ]
   ""
   [(parallel [(set (match_operand:HI 3 "nonimmediate_operand" "=&rm")
 ; when the PSI value is negative..
 ;
 ; Note: using PUSHM.A #1 is two bytes smaller than using PUSHX.A....
+;
+; Note: We use a + constraint on operand 0 as otherwise GCC gets confused
+; about extending a single PSI mode register into a pair of SImode registers
+; with the same starting register.  It thinks that the upper register of
+; the pair is unused and so it can clobber it.  Try compiling 20050826-2.c
+; at -O2 to see this.
 
 (define_insn "zero_extendpsisi2"
-  [(set (match_operand:SI                  0 "register_operand" "=r")
+  [(set (match_operand:SI                  0 "register_operand" "+r")
        (zero_extend:SI (match_operand:PSI 1 "register_operand" "r")))]
   ""
   "*
   ""
   "*
     if (REGNO (operands[0]) != REGNO (operands[1]))
-      return \"MOV.W\t%1, %0 { SUB.W\t#0, %0 { AND.W\t%2, %0\";
+      return \"MOV.W\t%1, %0 { INV.W\t%0 { INC.W\t%0 { AND.W\t%2, %0\";
     else
-      return \"SUB.W\t#0, %0 { AND.W\t%2, %0\";
+      return \"INV.W\t%0 { INC.W\t%0 { AND.W\t%2, %0\";
   "
   )
 
   [(set (match_operand:SI                          0 "register_operand" "=r")
        (mult:SI (sign_extend:SI (match_operand:HI 1 "register_operand" "%0"))
                 (sign_extend:SI (match_operand:HI 2 "register_operand" "r"))))]
-  "optimize > 2 && msp430_hwmult_enabled ()"
+  "optimize > 2 && msp430_hwmult_type != NONE"
   "*
-    if (msp430_is_f5_mcu ())
-      return \"MOV.W %1, &0x04C2 { MOV.W %2, &0x04C8 { MOV.W &0x04CA, %L0 { MOV.W &0x04CC, %H0\";
+    if (msp430_use_f5_series_hwmult ())
+      return \"PUSH.W sr { DINT { NOP { MOV.W %1, &0x04C2 { MOV.W %2, &0x04C8 { MOV.W &0x04CA, %L0 { MOV.W &0x04CC, %H0 { POP.W sr\";
     else
-      return \"MOV.W %1, &0x0132 { MOV.W %2, &0x0138 { MOV.W &0x013A, %L0 { MOV.W &0x013C, %H0\";
+      return \"PUSH.W sr { DINT { NOP { MOV.W %1, &0x0132 { MOV.W %2, &0x0138 { MOV.W &0x013A, %L0 { MOV.W &0x013C, %H0 { POP.W sr\";
   "
 )
 
   [(set (match_operand:SI                          0 "register_operand" "=r")
        (mult:SI (zero_extend:SI (match_operand:HI 1 "register_operand" "%0"))
                 (zero_extend:SI (match_operand:HI 2 "register_operand" "r"))))]
-  "optimize > 2 && msp430_hwmult_enabled ()"
+  "optimize > 2 && msp430_hwmult_type != NONE"
   "*
-    if (msp430_is_f5_mcu ())
-      return \"MOV.W %1, &0x04C0 { MOV.W %2, &0x04C8 { MOV.W &0x04CA, %L0 { MOV.W &0x04CC, %H0\";
+    if (msp430_use_f5_series_hwmult ())
+      return \"PUSH.W sr { DINT { NOP { MOV.W %1, &0x04C0 { MOV.W %2, &0x04C8 { MOV.W &0x04CA, %L0 { MOV.W &0x04CC, %H0 { POP.W sr\";
     else
-      return \"MOV.W %1, &0x0130 { MOV.W %2, &0x0138 { MOV.W &0x013A, %L0 { MOV.W &0x013C, %H0\";
+      return \"PUSH.W sr { DINT { NOP { MOV.W %1, &0x0130 { MOV.W %2, &0x0138 { MOV.W &0x013A, %L0 { MOV.W &0x013C, %H0 { POP.W sr\";
   "
 )
 
   [(set (match_operand:DI                          0 "register_operand" "=r")
        (mult:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "%0"))
                 (sign_extend:DI (match_operand:SI 2 "register_operand" "r"))))]
-  "optimize > 2 && msp430_hwmult_enabled ()"
+  "optimize > 2 && msp430_hwmult_type != NONE"
   "*
-    if (msp430_is_f5_mcu ())
-      return \"MOV.W %L1, &0x04D4 { MOV.W %H1, &0x04D6 { MOV.W %L2, &0x04E0 { MOV.W %H2, &0x04E2 { MOV.W &0x04E4, %A0 { MOV.W &0x04E6, %B0 { MOV.W &0x04E8, %C0 { MOV.W &0x04EA, %D0\";
+    if (msp430_use_f5_series_hwmult ())
+      return \"PUSH.W sr { DINT { NOP { MOV.W %L1, &0x04D4 { MOV.W %H1, &0x04D6 { MOV.W %L2, &0x04E0 { MOV.W %H2, &0x04E2 { MOV.W &0x04E4, %A0 { MOV.W &0x04E6, %B0 { MOV.W &0x04E8, %C0 { MOV.W &0x04EA, %D0 { POP.W sr\";
     else
-      return \"MOV.W %L1, &0x0144 { MOV.W %H1, &0x0146 { MOV.W %L2, &0x0150 { MOV.W %H2, &0x0152 { MOV.W &0x0154, %A0 { MOV.W &0x0156, %B0 { MOV.W &0x0158, %C0 { MOV.W &0x015A, %D0\";
+      return \"PUSH.W sr { DINT { NOP { MOV.W %L1, &0x0144 { MOV.W %H1, &0x0146 { MOV.W %L2, &0x0150 { MOV.W %H2, &0x0152 { MOV.W &0x0154, %A0 { MOV.W &0x0156, %B0 { MOV.W &0x0158, %C0 { MOV.W &0x015A, %D0 { POP.W sr\";
   "
 )
 
   [(set (match_operand:DI                          0 "register_operand" "=r")
        (mult:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "%0"))
                 (zero_extend:DI (match_operand:SI 2 "register_operand" "r"))))]
-  "optimize > 2 && msp430_hwmult_enabled ()"
+  "optimize > 2 && msp430_hwmult_type != NONE"
   "*
-    if (msp430_is_f5_mcu ())
-      return \"MOV.W %L1, &0x04D0 { MOV.W %H1, &0x04D2 { MOV.W %L2, &0x04E0 { MOV.W %H2, &0x04E2 { MOV.W &0x04E4, %A0 { MOV.W &0x04E6, %B0 { MOV.W &0x04E8, %C0 { MOV.W &0x04EA, %D0\";
+    if (msp430_use_f5_series_hwmult ())
+      return \"PUSH.W sr { DINT { NOP { MOV.W %L1, &0x04D0 { MOV.W %H1, &0x04D2 { MOV.W %L2, &0x04E0 { MOV.W %H2, &0x04E2 { MOV.W &0x04E4, %A0 { MOV.W &0x04E6, %B0 { MOV.W &0x04E8, %C0 { MOV.W &0x04EA, %D0 { POP.W sr\";
     else
-      return \"MOV.W %L1, &0x0140 { MOV.W %H1, &0x0141 { MOV.W %L2, &0x0150 { MOV.W %H2, &0x0152 { MOV.W &0x0154, %A0 { MOV.W &0x0156, %B0 { MOV.W &0x0158, %C0 { MOV.W &0x015A, %D0\";
+      return \"PUSH.W sr { DINT { NOP { MOV.W %L1, &0x0140 { MOV.W %H1, &0x0142 { MOV.W %L2, &0x0150 { MOV.W %H2, &0x0152 { MOV.W &0x0154, %A0 { MOV.W &0x0156, %B0 { MOV.W &0x0158, %C0 { MOV.W &0x015A, %D0 { POP.W sr\";
   "
 )
index 5a447c0..8215013 100644 (file)
@@ -7,19 +7,19 @@ Target Mask(ASM_HEX)
 Force assembly output to always use hex constants
 
 mmcu=
-Target ToLower Joined RejectNegative Var(target_mcu)
+Target Report ToLower Joined RejectNegative Var(target_mcu)
 Specify the MCU to build for.
 
 mcpu=
-Target Joined RejectNegative Var(target_cpu)
+Target Report Joined RejectNegative Var(target_cpu)
 Specify the ISA to build for: msp430, mdsp430x, msp430xv2
 
 mlarge
-Target Mask(LARGE) RejectNegative
+Target Report Mask(LARGE) RejectNegative
 Select large model - 20-bit addresses/pointers
 
 msmall
-Target InverseMask(LARGE) RejectNegative
+Target Report InverseMask(LARGE) RejectNegative
 Select small model - 16-bit addresses/pointers (default)
 
 mrelax
@@ -33,6 +33,27 @@ minrt
 Target Report Mask(MINRT) RejectNegative
 Use a minimum runtime (no static initializers or ctors) for memory-constrained devices.
 
-mhwmult
-Target Report Var(ENABLE_HWMULT, 1) Init(1)
-Enable hardware multiply (except in interrupt routines)
+HeaderInclude
+config/msp430/msp430-opts.h
+
+mhwmult=
+Target Joined RejectNegative Report ToLower Var(msp430_hwmult_type) Enum(msp430_hwmult_types) Init(AUTO)
+Specify the type of hardware multiply to support
+
+Enum
+Name(msp430_hwmult_types) Type(enum msp430_hwmult_types)
+
+EnumValue
+Enum(msp430_hwmult_types) String(none) Value(NONE)
+
+EnumValue
+Enum(msp430_hwmult_types) String(auto) Value(AUTO)
+
+EnumValue
+Enum(msp430_hwmult_types) String(16bit) Value(SMALL)
+
+EnumValue
+Enum(msp430_hwmult_types) String(32bit) Value(LARGE)
+
+EnumValue
+Enum(msp430_hwmult_types) String(f5series) Value(F5SERIES)
index 9a8e2da..94a628c 100644 (file)
 (define_predicate "msp430_nonsubreg_operand"
   (match_code "reg,mem"))
 
+(define_predicate "msp430_nonsubreg_or_imm_operand"
+  (ior (match_operand 0 "msp430_nonsubreg_operand")
+       (match_operand 0 "immediate_operand")))
+
 ; TRUE for constants which are bit positions for zero_extract
 (define_predicate "msp430_bitpos"
   (and (match_code "const_int")
index f4a78a5..47445e4 100644 (file)
@@ -13,8 +13,13 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3.  If not see
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
 /* newlib uses 32-bit long in certain cases for all non-SPU
index 674cb40..a8cfcb7 100644 (file)
    UNSPEC_VSUBEUQM
    UNSPEC_VSUBECUQ
    UNSPEC_VBPERMQ
+   UNSPEC_BCDADD
+   UNSPEC_BCDSUB
+   UNSPEC_BCD_OVERFLOW
 ])
 
 (define_c_enum "unspecv"
   "vbpermq %0,%1,%2"
   [(set_attr "length" "4")
    (set_attr "type" "vecsimple")])
+
+;; Decimal Integer operations
+(define_int_iterator UNSPEC_BCD_ADD_SUB [UNSPEC_BCDADD UNSPEC_BCDSUB])
+
+(define_int_attr bcd_add_sub [(UNSPEC_BCDADD "add")
+                             (UNSPEC_BCDSUB "sub")])
+
+(define_code_iterator BCD_TEST [eq lt gt unordered])
+
+(define_insn "bcd<bcd_add_sub>"
+  [(set (match_operand:V1TI 0 "register_operand" "")
+       (unspec:V1TI [(match_operand:V1TI 1 "register_operand" "")
+                     (match_operand:V1TI 2 "register_operand" "")
+                     (match_operand:QI 3 "const_0_to_1_operand" "")]
+                    UNSPEC_BCD_ADD_SUB))
+   (clobber (reg:CCFP 74))]
+  "TARGET_P8_VECTOR"
+  "bcd<bcd_add_sub>. %0,%1,%2,%3"
+  [(set_attr "length" "4")
+   (set_attr "type" "vecsimple")])
+
+;; Use a floating point type (V2DFmode) for the compare to set CR6 so that we
+;; can use the unordered test for BCD nans and add/subtracts that overflow.  An
+;; UNORDERED test on an integer type (like V1TImode) is not defined.  The type
+;; probably should be one that can go in the VMX (Altivec) registers, so we
+;; can't use DDmode or DFmode.
+(define_insn "*bcd<bcd_add_sub>_test"
+  [(set (reg:CCFP 74)
+       (compare:CCFP
+        (unspec:V2DF [(match_operand:V1TI 1 "register_operand" "v")
+                      (match_operand:V1TI 2 "register_operand" "v")
+                      (match_operand:QI 3 "const_0_to_1_operand" "i")]
+                     UNSPEC_BCD_ADD_SUB)
+        (match_operand:V2DF 4 "zero_constant" "j")))
+   (clobber (match_scratch:V1TI 0 "=v"))]
+  "TARGET_P8_VECTOR"
+  "bcd<bcd_add_sub>. %0,%1,%2,%3"
+  [(set_attr "length" "4")
+   (set_attr "type" "vecsimple")])
+
+(define_insn "*bcd<bcd_add_sub>_test2"
+  [(set (match_operand:V1TI 0 "register_operand" "=v")
+       (unspec:V1TI [(match_operand:V1TI 1 "register_operand" "v")
+                     (match_operand:V1TI 2 "register_operand" "v")
+                     (match_operand:QI 3 "const_0_to_1_operand" "i")]
+                    UNSPEC_BCD_ADD_SUB))
+   (set (reg:CCFP 74)
+       (compare:CCFP
+        (unspec:V2DF [(match_dup 1)
+                      (match_dup 2)
+                      (match_dup 3)]
+                     UNSPEC_BCD_ADD_SUB)
+        (match_operand:V2DF 4 "zero_constant" "j")))]
+  "TARGET_P8_VECTOR"
+  "bcd<bcd_add_sub>. %0,%1,%2,%3"
+  [(set_attr "length" "4")
+   (set_attr "type" "vecsimple")])
+
+(define_expand "bcd<bcd_add_sub>_<code>"
+  [(parallel [(set (reg:CCFP 74)
+                  (compare:CCFP
+                   (unspec:V2DF [(match_operand:V1TI 1 "register_operand" "")
+                                 (match_operand:V1TI 2 "register_operand" "")
+                                 (match_operand:QI 3 "const_0_to_1_operand" "")]
+                                UNSPEC_BCD_ADD_SUB)
+                   (match_dup 4)))
+             (clobber (match_scratch:V1TI 5 ""))])
+   (set (match_operand:SI 0 "register_operand" "")
+       (BCD_TEST:SI (reg:CCFP 74)
+                    (const_int 0)))]
+  "TARGET_P8_VECTOR"
+{
+  operands[4] = CONST0_RTX (V2DFmode);
+})
+
+;; Peephole2 pattern to combine a bcdadd/bcdsub that calculates the value and
+;; the bcdadd/bcdsub that tests the value.  The combiner won't work since
+;; CR6 is a hard coded register.  Unfortunately, all of the Altivec predicate
+;; support is hard coded to use the fixed register CR6 instead of creating
+;; a register class for CR6.
+
+(define_peephole2
+  [(parallel [(set (match_operand:V1TI 0 "register_operand" "")
+                  (unspec:V1TI [(match_operand:V1TI 1 "register_operand" "")
+                                (match_operand:V1TI 2 "register_operand" "")
+                                (match_operand:QI 3 "const_0_to_1_operand" "")]
+                               UNSPEC_BCD_ADD_SUB))
+             (clobber (reg:CCFP 74))])
+   (parallel [(set (reg:CCFP 74)
+                  (compare:CCFP
+                   (unspec:V2DF [(match_dup 1)
+                                 (match_dup 2)
+                                 (match_dup 3)]
+                                UNSPEC_BCD_ADD_SUB)
+                   (match_operand:V2DF 4 "zero_constant" "")))
+             (clobber (match_operand:V1TI 5 "register_operand" ""))])]
+  "TARGET_P8_VECTOR"
+  [(parallel [(set (match_dup 0)
+                  (unspec:V1TI [(match_dup 1)
+                                (match_dup 2)
+                                (match_dup 3)]
+                               UNSPEC_BCD_ADD_SUB))
+             (set (reg:CCFP 74)
+                  (compare:CCFP
+                   (unspec:V2DF [(match_dup 1)
+                                 (match_dup 2)
+                                 (match_dup 3)]
+                                UNSPEC_BCD_ADD_SUB)
+                   (match_dup 4)))])])
index 8e99bc0..40e27e7 100644 (file)
   "TARGET_DFP"
   "dctfixq %0,%1"
   [(set_attr "type" "fp")])
+
+\f
+;; Decimal builtin support
+
+(define_c_enum "unspec"
+  [UNSPEC_DDEDPD
+   UNSPEC_DENBCD
+   UNSPEC_DXEX
+   UNSPEC_DIEX
+   UNSPEC_DSCLI
+   UNSPEC_DSCRI])
+
+(define_mode_iterator D64_D128 [DD TD])
+
+(define_mode_attr dfp_suffix [(DD "")
+                             (TD "q")])
+
+(define_insn "dfp_ddedpd_<mode>"
+  [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
+       (unspec:D64_D128 [(match_operand:QI 1 "const_0_to_3_operand" "i")
+                         (match_operand:D64_D128 2 "gpc_reg_operand" "d")]
+                        UNSPEC_DDEDPD))]
+  "TARGET_DFP"
+  "ddedpd<dfp_suffix> %1,%0,%2"
+  [(set_attr "type" "fp")])
+
+(define_insn "dfp_denbcd_<mode>"
+  [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
+       (unspec:D64_D128 [(match_operand:QI 1 "const_0_to_1_operand" "i")
+                         (match_operand:D64_D128 2 "gpc_reg_operand" "d")]
+                        UNSPEC_DENBCD))]
+  "TARGET_DFP"
+  "denbcd<dfp_suffix> %1,%0,%2"
+  [(set_attr "type" "fp")])
+
+(define_insn "dfp_dxex_<mode>"
+  [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
+       (unspec:D64_D128 [(match_operand:D64_D128 1 "gpc_reg_operand" "d")]
+                        UNSPEC_DXEX))]
+  "TARGET_DFP"
+  "dxex<dfp_suffix> %0,%1"
+  [(set_attr "type" "fp")])
+
+(define_insn "dfp_diex_<mode>"
+  [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
+       (unspec:D64_D128 [(match_operand:D64_D128 1 "gpc_reg_operand" "d")
+                         (match_operand:D64_D128 2 "gpc_reg_operand" "d")]
+                        UNSPEC_DXEX))]
+  "TARGET_DFP"
+  "diex<dfp_suffix> %0,%1,%2"
+  [(set_attr "type" "fp")])
+
+(define_insn "dfp_dscli_<mode>"
+  [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
+       (unspec:D64_D128 [(match_operand:D64_D128 1 "gpc_reg_operand" "d")
+                         (match_operand:QI 2 "immediate_operand" "i")]
+                        UNSPEC_DSCLI))]
+  "TARGET_DFP"
+  "dscli<dfp_suffix> %0,%1,%2"
+  [(set_attr "type" "fp")])
+
+(define_insn "dfp_dscri_<mode>"
+  [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
+       (unspec:D64_D128 [(match_operand:D64_D128 1 "gpc_reg_operand" "d")
+                         (match_operand:QI 2 "immediate_operand" "i")]
+                        UNSPEC_DSCRI))]
+  "TARGET_DFP"
+  "dscri<dfp_suffix> %0,%1,%2"
+  [(set_attr "type" "fp")])
index 9dbb499..ca7f7fd 100644 (file)
                             (const_int 0)]
                            UNSPECV_HTM_TABORTWCI))
    (set (subreg:CC (match_dup 2) 0) (match_dup 1))
-   (set (match_dup 3) (lshiftrt:SI (match_dup 2) (const_int 24)))
+   (set (match_dup 3) (lshiftrt:SI (match_dup 2) (const_int 28)))
    (parallel [(set (match_operand:SI 0 "int_reg_operand" "")
                   (and:SI (match_dup 3) (const_int 15)))
               (clobber (scratch:CC))])]
index 38dc066..bf7fe3a 100644 (file)
@@ -46,12 +46,17 @@ extern "C" {
 
 typedef char TM_buff_type[16];
 
+/* Compatibility macro with s390.  This macro can be used to determine
+   whether a transaction was successfully started from the __TM_begin()
+   and __TM_simple_begin() intrinsic functions below.  */
+#define _HTM_TBEGIN_STARTED     1
+
 extern __inline long
 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
 __TM_simple_begin (void)
 {
   if (__builtin_expect (__builtin_tbegin (0), 1))
-    return 1;
+    return _HTM_TBEGIN_STARTED;
   return 0;
 }
 
@@ -61,7 +66,7 @@ __TM_begin (void* const TM_buff)
 {
   *_TEXASRL_PTR (TM_buff) = 0;
   if (__builtin_expect (__builtin_tbegin (0), 1))
-    return 1;
+    return _HTM_TBEGIN_STARTED;
 #ifdef __powerpc64__
   *_TEXASR_PTR (TM_buff) = __builtin_get_texasr ();
 #else
index 28f4f5d..8c384b3 100644 (file)
   (and (match_code "const_int")
        (match_test "IN_RANGE (INTVAL (op), 0, 1)")))
 
+;; Match op = 0..3.
+(define_predicate "const_0_to_3_operand"
+  (and (match_code "const_int")
+       (match_test "IN_RANGE (INTVAL (op), 0, 3)")))
+
 ;; Match op = 2 or op = 3.
 (define_predicate "const_2_to_3_operand"
   (and (match_code "const_int")
        (match_test "offsettable_nonstrict_memref_p (op)")))
 
 ;; Return 1 if the operand is suitable for load/store quad memory.
-;; This predicate only checks for non-atomic loads/stores.
+;; This predicate only checks for non-atomic loads/stores (not lqarx/stqcx).
 (define_predicate "quad_memory_operand"
   (match_code "mem")
 {
   rtx addr, op0, op1;
   int ret;
 
-  if (!TARGET_QUAD_MEMORY)
+  if (!TARGET_QUAD_MEMORY && !TARGET_SYNC_TI)
     ret = 0;
 
   else if (!memory_operand (op, mode))
index 8335169..220d1e9 100644 (file)
                    MASK,                               /* MASK */      \
                    (ATTR | RS6000_BTC_SPECIAL),        /* ATTR */      \
                    CODE_FOR_nothing)                   /* ICODE */
+
+
+/* Decimal floating point builtins for instructions.  */
+#define BU_DFP_MISC_1(ENUM, NAME, ATTR, ICODE)                         \
+  RS6000_BUILTIN_1 (MISC_BUILTIN_ ## ENUM,             /* ENUM */      \
+                   "__builtin_" NAME,                  /* NAME */      \
+                   RS6000_BTM_DFP,                     /* MASK */      \
+                   (RS6000_BTC_ ## ATTR                /* ATTR */      \
+                    | RS6000_BTC_UNARY),                               \
+                   CODE_FOR_ ## ICODE)                 /* ICODE */
+
+#define BU_DFP_MISC_2(ENUM, NAME, ATTR, ICODE)                         \
+  RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM,             /* ENUM */      \
+                   "__builtin_" NAME,                  /* NAME */      \
+                   RS6000_BTM_DFP,                     /* MASK */      \
+                   (RS6000_BTC_ ## ATTR                /* ATTR */      \
+                    | RS6000_BTC_BINARY),                              \
+                   CODE_FOR_ ## ICODE)                 /* ICODE */
+
+
+/* Miscellaneous builtins for instructions added in ISA 2.06.  These
+   instructions don't require either the DFP or VSX options, just the basic ISA
+   2.06 (popcntd) enablement since they operate on general purpose
+   registers.  */
+#define BU_P7_MISC_1(ENUM, NAME, ATTR, ICODE)                          \
+  RS6000_BUILTIN_1 (MISC_BUILTIN_ ## ENUM,             /* ENUM */      \
+                   "__builtin_" NAME,                  /* NAME */      \
+                   RS6000_BTM_POPCNTD,                 /* MASK */      \
+                   (RS6000_BTC_ ## ATTR                /* ATTR */      \
+                    | RS6000_BTC_UNARY),                               \
+                   CODE_FOR_ ## ICODE)                 /* ICODE */
+
+#define BU_P7_MISC_2(ENUM, NAME, ATTR, ICODE)                          \
+  RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM,             /* ENUM */      \
+                   "__builtin_" NAME,                  /* NAME */      \
+                   RS6000_BTM_POPCNTD,                 /* MASK */      \
+                   (RS6000_BTC_ ## ATTR                /* ATTR */      \
+                    | RS6000_BTC_BINARY),                              \
+                   CODE_FOR_ ## ICODE)                 /* ICODE */
+
+
+/* Miscellaneous builtins for instructions added in ISA 2.07.  These
+   instructions do require the ISA 2.07 vector support, but they aren't vector
+   instructions.  */
+#define BU_P8V_MISC_3(ENUM, NAME, ATTR, ICODE)                         \
+  RS6000_BUILTIN_3 (MISC_BUILTIN_ ## ENUM,             /* ENUM */      \
+                   "__builtin_" NAME,                  /* NAME */      \
+                   RS6000_BTM_P8_VECTOR,               /* MASK */      \
+                   (RS6000_BTC_ ## ATTR                /* ATTR */      \
+                    | RS6000_BTC_TERNARY),                             \
+                   CODE_FOR_ ## ICODE)                 /* ICODE */
+
+/* 128-bit long double floating point builtins.  */
+#define BU_LDBL128_2(ENUM, NAME, ATTR, ICODE)                          \
+  RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM,             /* ENUM */      \
+                   "__builtin_" NAME,                  /* NAME */      \
+                   (RS6000_BTM_HARD_FLOAT              /* MASK */      \
+                    | RS6000_BTM_LDBL128),                             \
+                   (RS6000_BTC_ ## ATTR                /* ATTR */      \
+                    | RS6000_BTC_BINARY),                              \
+                   CODE_FOR_ ## ICODE)                 /* ICODE */
+
 #endif
 
 /* Insure 0 is not a legitimate index.  */
@@ -1412,10 +1474,10 @@ BU_P8V_AV_2 (ORC_V4SF,          "orc_v4sf",     CONST,  orcv4sf3)
 BU_P8V_AV_2 (ORC_V2DF,         "orc_v2df",     CONST,  orcv2df3)
 
 /* 3 argument altivec instructions added in ISA 2.07.  */
-BU_P8V_AV_3 (VADDEUQM,         "vaddeuqm",      CONST, altivec_vaddeuqm)
-BU_P8V_AV_3 (VADDECUQ,         "vaddecuq",      CONST, altivec_vaddecuq)
-BU_P8V_AV_3 (VSUBEUQM,         "vsubeuqm",      CONST, altivec_vsubeuqm)
-BU_P8V_AV_3 (VSUBECUQ,         "vsubecuq",      CONST, altivec_vsubecuq)
+BU_P8V_AV_3 (VADDEUQM,         "vaddeuqm",     CONST,  altivec_vaddeuqm)
+BU_P8V_AV_3 (VADDECUQ,         "vaddecuq",     CONST,  altivec_vaddecuq)
+BU_P8V_AV_3 (VSUBEUQM,         "vsubeuqm",     CONST,  altivec_vsubeuqm)
+BU_P8V_AV_3 (VSUBECUQ,         "vsubecuq",     CONST,  altivec_vsubecuq)
 
 /* Vector comparison instructions added in ISA 2.07.  */
 BU_P8V_AV_2 (VCMPEQUD,         "vcmpequd",     CONST,  vector_eqv2di)
@@ -1475,6 +1537,62 @@ BU_P8V_OVERLOAD_3 (VSUBECUQ,     "vsubecuq")
 BU_P8V_OVERLOAD_3 (VSUBEUQM,   "vsubeuqm")
 
 \f
+/* 2 argument extended divide functions added in ISA 2.06.  */
+BU_P7_MISC_2 (DIVWE,           "divwe",        CONST,  dive_si)
+BU_P7_MISC_2 (DIVWEO,          "divweo",       CONST,  diveo_si)
+BU_P7_MISC_2 (DIVWEU,          "divweu",       CONST,  diveu_si)
+BU_P7_MISC_2 (DIVWEUO,         "divweuo",      CONST,  diveuo_si)
+BU_P7_MISC_2 (DIVDE,           "divde",        CONST,  dive_di)
+BU_P7_MISC_2 (DIVDEO,          "divdeo",       CONST,  diveo_di)
+BU_P7_MISC_2 (DIVDEU,          "divdeu",       CONST,  diveu_di)
+BU_P7_MISC_2 (DIVDEUO,         "divdeuo",      CONST,  diveuo_di)
+
+/* 1 argument DFP (decimal floating point) functions added in ISA 2.05.  */
+BU_DFP_MISC_1 (DXEX,           "dxex",         CONST,  dfp_dxex_dd)
+BU_DFP_MISC_1 (DXEXQ,          "dxexq",        CONST,  dfp_dxex_td)
+
+/* 2 argument DFP (decimal floating point) functions added in ISA 2.05.  */
+BU_DFP_MISC_2 (DDEDPD,         "ddedpd",       CONST,  dfp_ddedpd_dd)
+BU_DFP_MISC_2 (DDEDPDQ,                "ddedpdq",      CONST,  dfp_ddedpd_td)
+BU_DFP_MISC_2 (DENBCD,         "denbcd",       CONST,  dfp_denbcd_dd)
+BU_DFP_MISC_2 (DENBCDQ,                "denbcdq",      CONST,  dfp_denbcd_td)
+BU_DFP_MISC_2 (DIEX,           "diex",         CONST,  dfp_diex_dd)
+BU_DFP_MISC_2 (DIEXQ,          "diexq",        CONST,  dfp_diex_td)
+BU_DFP_MISC_2 (DSCLI,          "dscli",        CONST,  dfp_dscli_dd)
+BU_DFP_MISC_2 (DSCLIQ,         "dscliq",       CONST,  dfp_dscli_td)
+BU_DFP_MISC_2 (DSCRI,          "dscri",        CONST,  dfp_dscri_dd)
+BU_DFP_MISC_2 (DSCRIQ,         "dscriq",       CONST,  dfp_dscri_td)
+
+/* 1 argument BCD functions added in ISA 2.06.  */
+BU_P7_MISC_1 (CDTBCD,          "cdtbcd",       CONST,  cdtbcd)
+BU_P7_MISC_1 (CBCDTD,          "cbcdtd",       CONST,  cbcdtd)
+
+/* 2 argument BCD functions added in ISA 2.06.  */
+BU_P7_MISC_2 (ADDG6S,          "addg6s",       CONST,  addg6s)
+
+/* 3 argument BCD functions added in ISA 2.07.  */
+BU_P8V_MISC_3 (BCDADD,         "bcdadd",       CONST,  bcdadd)
+BU_P8V_MISC_3 (BCDADD_LT,      "bcdadd_lt",    CONST,  bcdadd_lt)
+BU_P8V_MISC_3 (BCDADD_EQ,      "bcdadd_eq",    CONST,  bcdadd_eq)
+BU_P8V_MISC_3 (BCDADD_GT,      "bcdadd_gt",    CONST,  bcdadd_gt)
+BU_P8V_MISC_3 (BCDADD_OV,      "bcdadd_ov",    CONST,  bcdadd_unordered)
+BU_P8V_MISC_3 (BCDSUB,         "bcdsub",       CONST,  bcdsub)
+BU_P8V_MISC_3 (BCDSUB_LT,      "bcdsub_lt",    CONST,  bcdsub_lt)
+BU_P8V_MISC_3 (BCDSUB_EQ,      "bcdsub_eq",    CONST,  bcdsub_eq)
+BU_P8V_MISC_3 (BCDSUB_GT,      "bcdsub_gt",    CONST,  bcdsub_gt)
+BU_P8V_MISC_3 (BCDSUB_OV,      "bcdsub_ov",    CONST,  bcdsub_unordered)
+
+/* 2 argument pack/unpack 128-bit floating point types.  */
+BU_DFP_MISC_2 (PACK_TD,                "pack_dec128",          CONST,  packtd)
+BU_DFP_MISC_2 (UNPACK_TD,      "unpack_dec128",        CONST,  unpacktd)
+
+BU_LDBL128_2 (PACK_TF,         "pack_longdouble",      CONST,  packtf)
+BU_LDBL128_2 (UNPACK_TF,       "unpack_longdouble",    CONST,  unpacktf)
+
+BU_P7_MISC_2 (PACK_V1TI,       "pack_vector_int128",   CONST,  packv1ti)
+BU_P7_MISC_2 (UNPACK_V1TI,     "unpack_vector_int128", CONST,  unpackv1ti)
+
+\f
 /* 1 argument crypto functions.  */
 BU_CRYPTO_1 (VSBOX,            "vsbox",          CONST, crypto_vsbox)
 
index 69bb263..785f6ce 100644 (file)
@@ -163,7 +163,7 @@ extern tree altivec_resolve_overloaded_builtin (location_t, tree, void *);
 extern rtx rs6000_libcall_value (enum machine_mode);
 extern rtx rs6000_va_arg (tree, tree);
 extern int function_ok_for_sibcall (tree);
-extern int rs6000_reg_parm_stack_space (tree);
+extern int rs6000_reg_parm_stack_space (tree, bool);
 extern void rs6000_elf_declare_function_name (FILE *, const char *, tree);
 extern bool rs6000_elf_in_small_data_p (const_tree);
 #ifdef ARGS_SIZE_RTX
index 494efc5..bf67e72 100644 (file)
@@ -2283,6 +2283,24 @@ rs6000_debug_reg_global (void)
   if (rs6000_float_gprs)
     fprintf (stderr, DEBUG_FMT_S, "float_gprs", "true");
 
+  fprintf (stderr, DEBUG_FMT_S, "fprs",
+          (TARGET_FPRS ? "true" : "false"));
+
+  fprintf (stderr, DEBUG_FMT_S, "single_float",
+          (TARGET_SINGLE_FLOAT ? "true" : "false"));
+
+  fprintf (stderr, DEBUG_FMT_S, "double_float",
+          (TARGET_DOUBLE_FLOAT ? "true" : "false"));
+
+  fprintf (stderr, DEBUG_FMT_S, "soft_float",
+          (TARGET_SOFT_FLOAT ? "true" : "false"));
+
+  fprintf (stderr, DEBUG_FMT_S, "e500_single",
+          (TARGET_E500_SINGLE ? "true" : "false"));
+
+  fprintf (stderr, DEBUG_FMT_S, "e500_double",
+          (TARGET_E500_DOUBLE ? "true" : "false"));
+
   if (TARGET_LINK_STACK)
     fprintf (stderr, DEBUG_FMT_S, "link_stack", "true");
 
@@ -3017,7 +3035,10 @@ rs6000_builtin_mask_calculate (void)
          | ((rs6000_cpu == PROCESSOR_CELL) ? RS6000_BTM_CELL      : 0)
          | ((TARGET_P8_VECTOR)             ? RS6000_BTM_P8_VECTOR : 0)
          | ((TARGET_CRYPTO)                ? RS6000_BTM_CRYPTO    : 0)
-         | ((TARGET_HTM)                   ? RS6000_BTM_HTM       : 0));
+         | ((TARGET_HTM)                   ? RS6000_BTM_HTM       : 0)
+         | ((TARGET_DFP)                   ? RS6000_BTM_DFP       : 0)
+         | ((TARGET_HARD_FLOAT)            ? RS6000_BTM_HARD_FLOAT : 0)
+         | ((TARGET_LONG_DOUBLE_128)       ? RS6000_BTM_LDBL128 : 0));
 }
 
 /* Override command line options.  Mostly we process the processor type and
@@ -3374,6 +3395,13 @@ rs6000_option_override_internal (bool global_init_p)
       rs6000_isa_flags &= ~OPTION_MASK_VSX_TIMODE;
     }
 
+  if (TARGET_DFP && !TARGET_HARD_FLOAT)
+    {
+      if (rs6000_isa_flags_explicit & OPTION_MASK_DFP)
+       error ("-mhard-dfp requires -mhard-float");
+      rs6000_isa_flags &= ~OPTION_MASK_DFP;
+    }
+
   /* The quad memory instructions only works in 64-bit mode. In 32-bit mode,
      silently turn off quad memory mode.  */
   if ((TARGET_QUAD_MEMORY || TARGET_QUAD_MEMORY_ATOMIC) && !TARGET_POWERPC64)
@@ -6091,7 +6119,8 @@ mem_operand_gpr (rtx op, enum machine_mode mode)
     return false;
 
   extra = GET_MODE_SIZE (mode) - UNITS_PER_WORD;
-  gcc_assert (extra >= 0);
+  if (extra < 0)
+    extra = 0;
 
   if (GET_CODE (addr) == LO_SUM)
     /* For lo_sum addresses, we must allow any offset except one that
@@ -10450,35 +10479,65 @@ rs6000_parm_needs_stack (cumulative_args_t args_so_far, tree type)
    list, or passes any parameter in memory.  */
 
 static bool
-rs6000_function_parms_need_stack (tree fun)
+rs6000_function_parms_need_stack (tree fun, bool incoming)
 {
-  function_args_iterator args_iter;
-  tree arg_type;
+  tree fntype, result;
   CUMULATIVE_ARGS args_so_far_v;
   cumulative_args_t args_so_far;
 
   if (!fun)
     /* Must be a libcall, all of which only use reg parms.  */
     return false;
+
+  fntype = fun;
   if (!TYPE_P (fun))
-    fun = TREE_TYPE (fun);
+    fntype = TREE_TYPE (fun);
 
   /* Varargs functions need the parameter save area.  */
-  if (!prototype_p (fun) || stdarg_p (fun))
+  if ((!incoming && !prototype_p (fntype)) || stdarg_p (fntype))
     return true;
 
-  INIT_CUMULATIVE_INCOMING_ARGS (args_so_far_v, fun, NULL_RTX);
+  INIT_CUMULATIVE_INCOMING_ARGS (args_so_far_v, fntype, NULL_RTX);
   args_so_far = pack_cumulative_args (&args_so_far_v);
 
-  if (aggregate_value_p (TREE_TYPE (fun), fun))
+  /* When incoming, we will have been passed the function decl.
+     It is necessary to use the decl to handle K&R style functions,
+     where TYPE_ARG_TYPES may not be available.  */
+  if (incoming)
     {
-      tree type = build_pointer_type (TREE_TYPE (fun));
-      rs6000_parm_needs_stack (args_so_far, type);
+      gcc_assert (DECL_P (fun));
+      result = DECL_RESULT (fun);
     }
+  else
+    result = TREE_TYPE (fntype);
 
-  FOREACH_FUNCTION_ARGS (fun, arg_type, args_iter)
-    if (rs6000_parm_needs_stack (args_so_far, arg_type))
-      return true;
+  if (result && aggregate_value_p (result, fntype))
+    {
+      if (!TYPE_P (result))
+       result = TREE_TYPE (result);
+      result = build_pointer_type (result);
+      rs6000_parm_needs_stack (args_so_far, result);
+    }
+
+  if (incoming)
+    {
+      tree parm;
+
+      for (parm = DECL_ARGUMENTS (fun);
+          parm && parm != void_list_node;
+          parm = TREE_CHAIN (parm))
+       if (rs6000_parm_needs_stack (args_so_far, TREE_TYPE (parm)))
+         return true;
+    }
+  else
+    {
+      function_args_iterator args_iter;
+      tree arg_type;
+
+      FOREACH_FUNCTION_ARGS (fntype, arg_type, args_iter)
+       if (rs6000_parm_needs_stack (args_so_far, arg_type))
+         return true;
+    }
 
   return false;
 }
@@ -10490,7 +10549,7 @@ rs6000_function_parms_need_stack (tree fun)
    all parameters in registers.  */
 
 int
-rs6000_reg_parm_stack_space (tree fun)
+rs6000_reg_parm_stack_space (tree fun, bool incoming)
 {
   int reg_parm_stack_space;
 
@@ -10508,7 +10567,7 @@ rs6000_reg_parm_stack_space (tree fun)
     case ABI_ELFv2:
       /* ??? Recomputing this every time is a bit expensive.  Is there
         a place to cache this information?  */
-      if (rs6000_function_parms_need_stack (fun))
+      if (rs6000_function_parms_need_stack (fun, incoming))
        reg_parm_stack_space = TARGET_64BIT ? 64 : 32;
       else
        reg_parm_stack_space = 0;
@@ -12381,7 +12440,15 @@ rs6000_expand_ternop_builtin (enum insn_code icode, tree exp, rtx target)
        }
     }
   else if (icode == CODE_FOR_vsx_set_v2df
-           || icode == CODE_FOR_vsx_set_v2di)
+           || icode == CODE_FOR_vsx_set_v2di
+          || icode == CODE_FOR_bcdadd
+          || icode == CODE_FOR_bcdadd_lt
+          || icode == CODE_FOR_bcdadd_eq
+          || icode == CODE_FOR_bcdadd_gt
+          || icode == CODE_FOR_bcdsub
+          || icode == CODE_FOR_bcdsub_lt
+          || icode == CODE_FOR_bcdsub_eq
+          || icode == CODE_FOR_bcdsub_gt)
     {
       /* Only allow 1-bit unsigned literals.  */
       STRIP_NOPS (arg2);
@@ -12392,6 +12459,44 @@ rs6000_expand_ternop_builtin (enum insn_code icode, tree exp, rtx target)
          return const0_rtx;
        }
     }
+  else if (icode == CODE_FOR_dfp_ddedpd_dd
+           || icode == CODE_FOR_dfp_ddedpd_td)
+    {
+      /* Only allow 2-bit unsigned literals where the value is 0 or 2.  */
+      STRIP_NOPS (arg0);
+      if (TREE_CODE (arg0) != INTEGER_CST
+         || TREE_INT_CST_LOW (arg2) & ~0x3)
+       {
+         error ("argument 1 must be 0 or 2");
+         return const0_rtx;
+       }
+    }
+  else if (icode == CODE_FOR_dfp_denbcd_dd
+          || icode == CODE_FOR_dfp_denbcd_td)
+    {
+      /* Only allow 1-bit unsigned literals.  */
+      STRIP_NOPS (arg0);
+      if (TREE_CODE (arg0) != INTEGER_CST
+         || TREE_INT_CST_LOW (arg0) & ~0x1)
+       {
+         error ("argument 1 must be a 1-bit unsigned literal");
+         return const0_rtx;
+       }
+    }
+  else if (icode == CODE_FOR_dfp_dscli_dd
+           || icode == CODE_FOR_dfp_dscli_td
+          || icode == CODE_FOR_dfp_dscri_dd
+          || icode == CODE_FOR_dfp_dscri_td)
+    {
+      /* Only allow 6-bit unsigned literals.  */
+      STRIP_NOPS (arg1);
+      if (TREE_CODE (arg1) != INTEGER_CST
+         || TREE_INT_CST_LOW (arg1) & ~0x3f)
+       {
+         error ("argument 2 must be a 6-bit unsigned literal");
+         return const0_rtx;
+       }
+    }
   else if (icode == CODE_FOR_crypto_vshasigmaw
           || icode == CODE_FOR_crypto_vshasigmad)
     {
@@ -13483,6 +13588,20 @@ rs6000_invalid_builtin (enum rs6000_builtins fncode)
     error ("Builtin function %s requires the -mpaired option", name);
   else if ((fnmask & RS6000_BTM_SPE) != 0)
     error ("Builtin function %s requires the -mspe option", name);
+  else if ((fnmask & (RS6000_BTM_DFP | RS6000_BTM_P8_VECTOR))
+          == (RS6000_BTM_DFP | RS6000_BTM_P8_VECTOR))
+    error ("Builtin function %s requires the -mhard-dfp and"
+          " -mpower8-vector options", name);
+  else if ((fnmask & RS6000_BTM_DFP) != 0)
+    error ("Builtin function %s requires the -mhard-dfp option", name);
+  else if ((fnmask & RS6000_BTM_P8_VECTOR) != 0)
+    error ("Builtin function %s requires the -mpower8-vector option", name);
+  else if ((fnmask & (RS6000_BTM_HARD_FLOAT | RS6000_BTM_LDBL128))
+          == (RS6000_BTM_HARD_FLOAT | RS6000_BTM_LDBL128))
+    error ("Builtin function %s requires the -mhard-float and"
+          " -mlong-double-128 options", name);
+  else if ((fnmask & RS6000_BTM_HARD_FLOAT) != 0)
+    error ("Builtin function %s requires the -mhard-float option", name);
   else
     error ("Builtin function %s is not supported with the current options",
           name);
@@ -13671,7 +13790,10 @@ rs6000_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
        return ret;
     }  
 
-  gcc_assert (TARGET_ALTIVEC || TARGET_VSX || TARGET_SPE || TARGET_PAIRED_FLOAT);
+  unsigned attr = rs6000_builtin_info[uns_fcode].attr & RS6000_BTC_TYPE_MASK;
+  gcc_assert (attr == RS6000_BTC_UNARY
+             || attr == RS6000_BTC_BINARY
+             || attr == RS6000_BTC_TERNARY);
 
   /* Handle simple unary operations.  */
   d = bdesc_1arg;
@@ -13762,6 +13884,9 @@ rs6000_init_builtins (void)
   uintTI_type_internal_node = unsigned_intTI_type_node;
   float_type_internal_node = float_type_node;
   double_type_internal_node = double_type_node;
+  long_double_type_internal_node = long_double_type_node;
+  dfloat64_type_internal_node = dfloat64_type_node;
+  dfloat128_type_internal_node = dfloat128_type_node;
   void_type_internal_node = void_type_node;
 
   /* Initialize the modes for builtin_function_type, mapping a machine mode to
@@ -13776,6 +13901,9 @@ rs6000_init_builtins (void)
   builtin_mode_to_type[TImode][1] = unsigned_intTI_type_node;
   builtin_mode_to_type[SFmode][0] = float_type_node;
   builtin_mode_to_type[DFmode][0] = double_type_node;
+  builtin_mode_to_type[TFmode][0] = long_double_type_node;
+  builtin_mode_to_type[DDmode][0] = dfloat64_type_node;
+  builtin_mode_to_type[TDmode][0] = dfloat128_type_node;
   builtin_mode_to_type[V1TImode][0] = V1TI_type_node;
   builtin_mode_to_type[V1TImode][1] = unsigned_V1TI_type_node;
   builtin_mode_to_type[V2SImode][0] = V2SI_type_node;
@@ -14868,6 +14996,8 @@ builtin_function_type (enum machine_mode mode_ret, enum machine_mode mode_arg0,
       /* unsigned 1 argument functions.  */
     case CRYPTO_BUILTIN_VSBOX:
     case P8V_BUILTIN_VGBBD:
+    case MISC_BUILTIN_CDTBCD:
+    case MISC_BUILTIN_CBCDTD:
       h.uns_p[0] = 1;
       h.uns_p[1] = 1;
       break;
@@ -14886,6 +15016,11 @@ builtin_function_type (enum machine_mode mode_ret, enum machine_mode mode_arg0,
     case CRYPTO_BUILTIN_VPMSUMW:
     case CRYPTO_BUILTIN_VPMSUMD:
     case CRYPTO_BUILTIN_VPMSUM:
+    case MISC_BUILTIN_ADDG6S:
+    case MISC_BUILTIN_DIVWEU:
+    case MISC_BUILTIN_DIVWEUO:
+    case MISC_BUILTIN_DIVDEU:
+    case MISC_BUILTIN_DIVDEUO:
       h.uns_p[0] = 1;
       h.uns_p[1] = 1;
       h.uns_p[2] = 1;
@@ -14947,9 +15082,18 @@ builtin_function_type (enum machine_mode mode_ret, enum machine_mode mode_arg0,
       /* signed args, unsigned return.  */
     case VSX_BUILTIN_XVCVDPUXDS_UNS:
     case ALTIVEC_BUILTIN_FIXUNS_V4SF_V4SI:
+    case MISC_BUILTIN_UNPACK_TD:
+    case MISC_BUILTIN_UNPACK_V1TI:
       h.uns_p[0] = 1;
       break;
 
+      /* unsigned arguments for 128-bit pack instructions.  */
+    case MISC_BUILTIN_PACK_TD:
+    case MISC_BUILTIN_PACK_V1TI:
+      h.uns_p[1] = 1;
+      h.uns_p[2] = 1;
+      break;
+
     default:
       break;
     }
@@ -31203,6 +31347,9 @@ static struct rs6000_opt_mask const rs6000_builtin_mask_names[] =
   { "power8-vector",    RS6000_BTM_P8_VECTOR,  false, false },
   { "crypto",           RS6000_BTM_CRYPTO,     false, false },
   { "htm",              RS6000_BTM_HTM,        false, false },
+  { "hard-dfp",                 RS6000_BTM_DFP,        false, false },
+  { "hard-float",       RS6000_BTM_HARD_FLOAT, false, false },
+  { "long-double-128",  RS6000_BTM_LDBL128,    false, false },
 };
 
 /* Option variables that we want to support inside attribute((target)) and
index 9ec3647..2b5d033 100644 (file)
@@ -624,7 +624,8 @@ extern int rs6000_vector_align[];
                                      || TARGET_CMPB      /* ISA 2.05 */ \
                                      || TARGET_POPCNTD   /* ISA 2.06 */ \
                                      || TARGET_ALTIVEC                  \
-                                     || TARGET_VSX)))
+                                     || TARGET_VSX                      \
+                                     || TARGET_HARD_FLOAT)))
 
 /* E500 cores only support plain "sync", not lwsync.  */
 #define TARGET_NO_LWSYNC (rs6000_cpu == PROCESSOR_PPC8540 \
@@ -1601,7 +1602,14 @@ extern enum reg_class rs6000_constraints[RS6000_CONSTRAINT_MAX];
 /* Define this if stack space is still allocated for a parameter passed
    in a register.  The value is the number of bytes allocated to this
    area.  */
-#define REG_PARM_STACK_SPACE(FNDECL) rs6000_reg_parm_stack_space((FNDECL))
+#define REG_PARM_STACK_SPACE(FNDECL) \
+  rs6000_reg_parm_stack_space ((FNDECL), false)
+
+/* Define this macro if space guaranteed when compiling a function body
+   is different to space required when making a call, a situation that
+   can arise with K&R style function definitions.  */
+#define INCOMING_REG_PARM_STACK_SPACE(FNDECL) \
+  rs6000_reg_parm_stack_space ((FNDECL), true)
 
 /* Define this if the above stack space is to be considered part of the
    space allocated by the caller.  */
@@ -2500,8 +2508,8 @@ extern int frame_pointer_needed;
 #define RS6000_BTC_SAT         RS6000_BTC_MISC /* saturate sets VSCR.  */
 
 /* Builtin targets.  For now, we reuse the masks for those options that are in
-   target flags, and pick two random bits for SPE and paired which aren't in
-   target_flags.  */
+   target flags, and pick three random bits for SPE, paired and ldbl128 which
+   aren't in target_flags.  */
 #define RS6000_BTM_ALWAYS      0               /* Always enabled.  */
 #define RS6000_BTM_ALTIVEC     MASK_ALTIVEC    /* VMX/altivec vectors.  */
 #define RS6000_BTM_VSX         MASK_VSX        /* VSX (vector/scalar).  */
@@ -2516,6 +2524,9 @@ extern int frame_pointer_needed;
 #define RS6000_BTM_FRSQRTES    MASK_POPCNTB    /* FRSQRTES instruction.  */
 #define RS6000_BTM_POPCNTD     MASK_POPCNTD    /* Target supports ISA 2.06.  */
 #define RS6000_BTM_CELL                MASK_FPRND      /* Target is cell powerpc.  */
+#define RS6000_BTM_DFP         MASK_DFP        /* Decimal floating point.  */
+#define RS6000_BTM_HARD_FLOAT  MASK_SOFT_FLOAT /* Hardware floating point.  */
+#define RS6000_BTM_LDBL128     MASK_MULTIPLE   /* 128-bit long double.  */
 
 #define RS6000_BTM_COMMON      (RS6000_BTM_ALTIVEC                     \
                                 | RS6000_BTM_VSX                       \
@@ -2527,7 +2538,10 @@ extern int frame_pointer_needed;
                                 | RS6000_BTM_FRSQRTES                  \
                                 | RS6000_BTM_HTM                       \
                                 | RS6000_BTM_POPCNTD                   \
-                                | RS6000_BTM_CELL)
+                                | RS6000_BTM_CELL                      \
+                                | RS6000_BTM_DFP                       \
+                                | RS6000_BTM_HARD_FLOAT                \
+                                | RS6000_BTM_LDBL128)
 
 /* Define builtin enum index.  */
 
@@ -2622,6 +2636,9 @@ enum rs6000_builtin_type_index
   RS6000_BTI_UINTTI,            /* unsigned_intTI_type_node */
   RS6000_BTI_float,             /* float_type_node */
   RS6000_BTI_double,            /* double_type_node */
+  RS6000_BTI_long_double,        /* long_double_type_node */
+  RS6000_BTI_dfloat64,          /* dfloat64_type_node */
+  RS6000_BTI_dfloat128,                 /* dfloat128_type_node */
   RS6000_BTI_void,              /* void_type_node */
   RS6000_BTI_MAX
 };
@@ -2673,6 +2690,9 @@ enum rs6000_builtin_type_index
 #define uintTI_type_internal_node       (rs6000_builtin_types[RS6000_BTI_UINTTI])
 #define float_type_internal_node        (rs6000_builtin_types[RS6000_BTI_float])
 #define double_type_internal_node       (rs6000_builtin_types[RS6000_BTI_double])
+#define long_double_type_internal_node  (rs6000_builtin_types[RS6000_BTI_long_double])
+#define dfloat64_type_internal_node     (rs6000_builtin_types[RS6000_BTI_dfloat64])
+#define dfloat128_type_internal_node    (rs6000_builtin_types[RS6000_BTI_dfloat128])
 #define void_type_internal_node                 (rs6000_builtin_types[RS6000_BTI_void])
 
 extern GTY(()) tree rs6000_builtin_types[RS6000_BTI_MAX];
index 64c9e7c..26d0d15 100644 (file)
    UNSPEC_P8V_MTVSRD
    UNSPEC_P8V_XXPERMDI
    UNSPEC_P8V_RELOAD_FROM_VSX
+   UNSPEC_ADDG6S
+   UNSPEC_CDTBCD
+   UNSPEC_CBCDTD
+   UNSPEC_DIVE
+   UNSPEC_DIVEO
+   UNSPEC_DIVEU
+   UNSPEC_DIVEUO
+   UNSPEC_UNPACK_128BIT
+   UNSPEC_PACK_128BIT
+   UNSPEC_LSQ
   ])
 
 ;;
                                         (V2DF  "X,X,X,X,X")
                                         (V1TI  "X,X,X,X,X")])
 
+;; Mode attribute to give the correct type for integer divides
+(define_mode_attr idiv_ldiv [(SI "idiv")
+                            (DI "ldiv")])
+
 \f
 ;; Start with fixed-point load and store insns.  Here we put only the more
 ;; complex forms.  Basic data transfer is done later.
 
 (define_insn "*extendsidi2_lfiwax"
   [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,??wm,!wl,!wu")
-       (sign_extend:DI (match_operand:SI 1 "lwa_operand" "m,r,r,Z,Z")))]
+       (sign_extend:DI (match_operand:SI 1 "lwa_operand" "Y,r,r,Z,Z")))]
   "TARGET_POWERPC64 && TARGET_LFIWAX"
   "@
    lwa%U1%X1 %0,%1
 
 (define_insn "*extendsidi2_nocell"
   [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
-       (sign_extend:DI (match_operand:SI 1 "lwa_operand" "m,r")))]
+       (sign_extend:DI (match_operand:SI 1 "lwa_operand" "Y,r")))]
   "TARGET_POWERPC64 && rs6000_gen_cell_microcode && !TARGET_LFIWAX"
   "@
    lwa%U1%X1 %0,%1
                  (match_operand:GPR 2 "gpc_reg_operand" "r")))]
   ""
   "div<wd>u %0,%1,%2"
-   [(set (attr "type")
-      (cond [(match_operand:SI 0 "" "")
-               (const_string "idiv")]
-       (const_string "ldiv")))])
+   [(set_attr "type" "<idiv_ldiv>")])
 
 
 ;; For powers of two we can do srai/aze for divide and then adjust for
                 (match_operand:GPR 2 "gpc_reg_operand" "r")))]
   ""
   "div<wd> %0,%1,%2"
-  [(set (attr "type")
-     (cond [(match_operand:SI 0 "" "")
-               (const_string "idiv")]
-       (const_string "ldiv")))])
+  [(set_attr "type" "<idiv_ldiv>")])
 
 (define_expand "mod<mode>3"
   [(use (match_operand:GPR 0 "gpc_reg_operand" ""))
   [(set_attr "length" "8")
    (set_attr "type" "fpload")])
 \f
+;; Define the TImode operations that can be done in a small number
+;; of instructions.  The & constraints are to prevent the register
+;; allocator from allocating registers that overlap with the inputs
+;; (for example, having an input in 7,8 and an output in 6,7).  We
+;; also allow for the output being the same as one of the inputs.
+
+(define_insn "addti3"
+  [(set (match_operand:TI 0 "gpc_reg_operand" "=&r,&r,r,r")
+       (plus:TI (match_operand:TI 1 "gpc_reg_operand" "%r,r,0,0")
+                (match_operand:TI 2 "reg_or_short_operand" "r,I,r,I")))]
+  "TARGET_64BIT"
+{
+  if (WORDS_BIG_ENDIAN)
+    return (GET_CODE (operands[2])) != CONST_INT
+           ? \"addc %L0,%L1,%L2\;adde %0,%1,%2\"
+           : \"addic %L0,%L1,%2\;add%G2e %0,%1\";
+  else
+    return (GET_CODE (operands[2])) != CONST_INT
+           ? \"addc %0,%1,%2\;adde %L0,%L1,%L2\"
+           : \"addic %0,%1,%2\;add%G2e %L0,%L1\";
+}
+  [(set_attr "type" "two")
+   (set_attr "length" "8")])
+
+(define_insn "subti3"
+  [(set (match_operand:TI 0 "gpc_reg_operand" "=&r,&r,r,r,r")
+       (minus:TI (match_operand:TI 1 "reg_or_short_operand" "r,I,0,r,I")
+                 (match_operand:TI 2 "gpc_reg_operand" "r,r,r,0,0")))]
+  "TARGET_64BIT"
+{
+  if (WORDS_BIG_ENDIAN)
+    return (GET_CODE (operands[1]) != CONST_INT)
+           ? \"subfc %L0,%L2,%L1\;subfe %0,%2,%1\"
+           : \"subfic %L0,%L2,%1\;subf%G1e %0,%2\";
+  else
+    return (GET_CODE (operands[1]) != CONST_INT)
+           ? \"subfc %0,%2,%1\;subfe %L0,%L2,%L1\"
+           : \"subfic %0,%2,%1\;subf%G1e %L0,%L2\";
+}
+  [(set_attr "type" "two")
+   (set_attr "length" "8")])
+
+
 ;; Define the DImode operations that can be done in a small number
 ;; of instructions.  The & constraints are to prevent the register
 ;; allocator from allocating registers that overlap with the inputs
        (match_operand:FMOVE64 1 "input_operand" "r,Y,r,G,H,F"))]
   "! TARGET_POWERPC64 
    && ((TARGET_FPRS && TARGET_SINGLE_FLOAT) 
-       || TARGET_SOFT_FLOAT || TARGET_E500_SINGLE)
+       || TARGET_SOFT_FLOAT || TARGET_E500_SINGLE
+       || (<MODE>mode == DDmode && TARGET_E500_DOUBLE))
    && (gpc_reg_operand (operands[0], <MODE>mode)
        || gpc_reg_operand (operands[1], <MODE>mode))"
   "#"
 })
 
 \f
+;; Miscellaneous ISA 2.06 (power7) instructions
+(define_insn "addg6s"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (unspec:SI [(match_operand:SI 1 "register_operand" "r")
+                   (match_operand:SI 2 "register_operand" "r")]
+                  UNSPEC_ADDG6S))]
+  "TARGET_POPCNTD"
+  "addg6s %0,%1,%2"
+  [(set_attr "type" "integer")
+   (set_attr "length" "4")])
+
+(define_insn "cdtbcd"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (unspec:SI [(match_operand:SI 1 "register_operand" "r")]
+                  UNSPEC_CDTBCD))]
+  "TARGET_POPCNTD"
+  "cdtbcd %0,%1"
+  [(set_attr "type" "integer")
+   (set_attr "length" "4")])
+
+(define_insn "cbcdtd"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (unspec:SI [(match_operand:SI 1 "register_operand" "r")]
+                  UNSPEC_CBCDTD))]
+  "TARGET_POPCNTD"
+  "cbcdtd %0,%1"
+  [(set_attr "type" "integer")
+   (set_attr "length" "4")])
+
+(define_int_iterator UNSPEC_DIV_EXTEND [UNSPEC_DIVE
+                                       UNSPEC_DIVEO
+                                       UNSPEC_DIVEU
+                                       UNSPEC_DIVEUO])
+
+(define_int_attr div_extend [(UNSPEC_DIVE      "e")
+                            (UNSPEC_DIVEO      "eo")
+                            (UNSPEC_DIVEU      "eu")
+                            (UNSPEC_DIVEUO     "euo")])
+
+(define_insn "div<div_extend>_<mode>"
+  [(set (match_operand:GPR 0 "register_operand" "=r")
+       (unspec:GPR [(match_operand:GPR 1 "register_operand" "r")
+                    (match_operand:GPR 2 "register_operand" "r")]
+                   UNSPEC_DIV_EXTEND))]
+  "TARGET_POPCNTD"
+  "div<wd><div_extend> %0,%1,%2"
+  [(set_attr "type" "<idiv_ldiv>")])
+
+\f
+;; Pack/unpack 128-bit floating point types that take 2 scalar registers
+
+; Type of the 64-bit part when packing/unpacking 128-bit floating point types
+(define_mode_attr FP128_64 [(TF "DF") (TD "DI")])
+
+(define_expand "unpack<mode>"
+  [(set (match_operand:<FP128_64> 0 "nonimmediate_operand" "")
+       (unspec:<FP128_64>
+        [(match_operand:FMOVE128 1 "register_operand" "")
+         (match_operand:QI 2 "const_0_to_1_operand" "")]
+        UNSPEC_UNPACK_128BIT))]
+  ""
+  "")
+
+(define_insn_and_split "unpack<mode>_dm"
+  [(set (match_operand:<FP128_64> 0 "nonimmediate_operand" "=d,m,d,r,m")
+       (unspec:<FP128_64>
+        [(match_operand:FMOVE128 1 "register_operand" "d,d,r,d,r")
+         (match_operand:QI 2 "const_0_to_1_operand" "i,i,i,i,i")]
+        UNSPEC_UNPACK_128BIT))]
+  "TARGET_POWERPC64 && TARGET_DIRECT_MOVE"
+  "#"
+  "&& reload_completed"
+  [(set (match_dup 0) (match_dup 3))]
+{
+  unsigned fp_regno = REGNO (operands[1]) + UINTVAL (operands[2]);
+
+  if (REG_P (operands[0]) && REGNO (operands[0]) == fp_regno)
+    {
+      emit_note (NOTE_INSN_DELETED);
+      DONE;
+    }
+
+  operands[3] = gen_rtx_REG (<FP128_64>mode, fp_regno);
+}
+  [(set_attr "type" "fp,fpstore,mffgpr,mftgpr,store")
+   (set_attr "length" "4")])
+
+(define_insn_and_split "unpack<mode>_nodm"
+  [(set (match_operand:<FP128_64> 0 "nonimmediate_operand" "=d,m")
+       (unspec:<FP128_64>
+        [(match_operand:FMOVE128 1 "register_operand" "d,d")
+         (match_operand:QI 2 "const_0_to_1_operand" "i,i")]
+        UNSPEC_UNPACK_128BIT))]
+  "!TARGET_POWERPC64 || !TARGET_DIRECT_MOVE"
+  "#"
+  "&& reload_completed"
+  [(set (match_dup 0) (match_dup 3))]
+{
+  unsigned fp_regno = REGNO (operands[1]) + UINTVAL (operands[2]);
+
+  if (REG_P (operands[0]) && REGNO (operands[0]) == fp_regno)
+    {
+      emit_note (NOTE_INSN_DELETED);
+      DONE;
+    }
+
+  operands[3] = gen_rtx_REG (<FP128_64>mode, fp_regno);
+}
+  [(set_attr "type" "fp,fpstore")
+   (set_attr "length" "4")])
+
+(define_insn_and_split "pack<mode>"
+  [(set (match_operand:FMOVE128 0 "register_operand" "=d,&d")
+       (unspec:FMOVE128
+        [(match_operand:<FP128_64> 1 "register_operand" "0,d")
+         (match_operand:<FP128_64> 2 "register_operand" "d,d")]
+        UNSPEC_PACK_128BIT))]
+  ""
+  "@
+   fmr %L0,%2
+   #"
+  "&& reload_completed && REGNO (operands[0]) != REGNO (operands[1])"
+  [(set (match_dup 3) (match_dup 1))
+   (set (match_dup 4) (match_dup 2))]
+{
+  unsigned dest_hi = REGNO (operands[0]);
+  unsigned dest_lo = dest_hi + 1;
+
+  gcc_assert (!IN_RANGE (REGNO (operands[1]), dest_hi, dest_lo));
+  gcc_assert (!IN_RANGE (REGNO (operands[2]), dest_hi, dest_lo));
+
+  operands[3] = gen_rtx_REG (<FP128_64>mode, dest_hi);
+  operands[4] = gen_rtx_REG (<FP128_64>mode, dest_lo);
+}
+  [(set_attr "type" "fp,fp")
+   (set_attr "length" "4,8")])
+
+(define_insn "unpackv1ti"
+  [(set (match_operand:DI 0 "register_operand" "=d,d")
+       (unspec:DI [(match_operand:V1TI 1 "register_operand" "0,wa")
+                   (match_operand:QI 2 "const_0_to_1_operand" "O,i")]
+        UNSPEC_UNPACK_128BIT))]
+  "TARGET_VSX"
+{
+  if (REGNO (operands[0]) == REGNO (operands[1]) && INTVAL (operands[2]) == 0)
+    return ASM_COMMENT_START " xxpermdi to same register";
+
+  operands[3] = GEN_INT (INTVAL (operands[2]) == 0 ? 0 : 3);
+  return "xxpermdi %x0,%x1,%x1,%3";
+}
+  [(set_attr "type" "vecperm")
+   (set_attr "length" "4")])
+
+(define_insn "packv1ti"
+  [(set (match_operand:V1TI 0 "register_operand" "=wa")
+       (unspec:V1TI
+        [(match_operand:DI 1 "register_operand" "d")
+         (match_operand:DI 2 "register_operand" "d")]
+        UNSPEC_PACK_128BIT))]
+  "TARGET_VSX"
+  "xxpermdi %x0,%x1,%x2,0"
+  [(set_attr "type" "vecperm")
+   (set_attr "length" "4")])
+
+\f
 
 (include "sync.md")
 (include "vector.md")
index 7db4390..63152ed 100644 (file)
   "isync"
   [(set_attr "type" "isync")])
 
+;; Types that we should provide atomic instructions for.
+(define_mode_iterator AINT [QI
+                           HI
+                           SI
+                           (DI "TARGET_POWERPC64")
+                           (TI "TARGET_SYNC_TI")])
+
 ;; The control dependency used for load dependency described
 ;; in B.2.3 of the Power ISA 2.06B.
 (define_insn "loadsync_<mode>"
-  [(unspec_volatile:BLK [(match_operand:INT1 0 "register_operand" "r")]
+  [(unspec_volatile:BLK [(match_operand:AINT 0 "register_operand" "r")]
                        UNSPECV_ISYNC)
    (clobber (match_scratch:CC 1 "=y"))]
   ""
   [(set_attr "type" "isync")
    (set_attr "length" "12")])
 
+(define_insn "load_quadpti"
+  [(set (match_operand:PTI 0 "quad_int_reg_operand" "=&r")
+       (unspec:PTI
+        [(match_operand:TI 1 "quad_memory_operand" "wQ")] UNSPEC_LSQ))]
+  "TARGET_SYNC_TI
+   && !reg_mentioned_p (operands[0], operands[1])"
+  "lq %0,%1"
+  [(set_attr "type" "load")
+   (set_attr "length" "4")])
+
 (define_expand "atomic_load<mode>"
-  [(set (match_operand:INT1 0 "register_operand" "")           ;; output
-       (match_operand:INT1 1 "memory_operand" ""))             ;; memory
+  [(set (match_operand:AINT 0 "register_operand" "")           ;; output
+       (match_operand:AINT 1 "memory_operand" ""))             ;; memory
    (use (match_operand:SI 2 "const_int_operand" ""))]          ;; model
   ""
 {
+  if (<MODE>mode == TImode && !TARGET_SYNC_TI)
+    FAIL;
+
   enum memmodel model = (enum memmodel) INTVAL (operands[2]);
 
   if (model == MEMMODEL_SEQ_CST)
     emit_insn (gen_hwsync ());
 
-  emit_move_insn (operands[0], operands[1]);
+  if (<MODE>mode != TImode)
+    emit_move_insn (operands[0], operands[1]);
+  else
+    {
+      rtx op0 = operands[0];
+      rtx op1 = operands[1];
+      rtx pti_reg = gen_reg_rtx (PTImode);
+
+      // Can't have indexed address for 'lq'
+      if (indexed_address (XEXP (op1, 0), TImode))
+       {
+         rtx old_addr = XEXP (op1, 0);
+         rtx new_addr = force_reg (Pmode, old_addr);
+         operands[1] = op1 = replace_equiv_address (op1, new_addr);
+       }
+
+      emit_insn (gen_load_quadpti (pti_reg, op1));
+
+      if (WORDS_BIG_ENDIAN)
+       emit_move_insn (op0, gen_lowpart (TImode, pti_reg));
+      else
+       {
+         emit_move_insn (gen_lowpart (DImode, op0), gen_highpart (DImode, pti_reg));
+         emit_move_insn (gen_highpart (DImode, op0), gen_lowpart (DImode, pti_reg));
+       }
+    }
 
   switch (model)
     {
   DONE;
 })
 
+(define_insn "store_quadpti"
+  [(set (match_operand:PTI 0 "quad_memory_operand" "=wQ")
+       (unspec:PTI
+        [(match_operand:PTI 1 "quad_int_reg_operand" "r")] UNSPEC_LSQ))]
+  "TARGET_SYNC_TI"
+  "stq %1,%0"
+  [(set_attr "type" "store")
+   (set_attr "length" "4")])
+
 (define_expand "atomic_store<mode>"
-  [(set (match_operand:INT1 0 "memory_operand" "")             ;; memory
-       (match_operand:INT1 1 "register_operand" ""))           ;; input
+  [(set (match_operand:AINT 0 "memory_operand" "")             ;; memory
+       (match_operand:AINT 1 "register_operand" ""))           ;; input
    (use (match_operand:SI 2 "const_int_operand" ""))]          ;; model
   ""
 {
+  if (<MODE>mode == TImode && !TARGET_SYNC_TI)
+    FAIL;
+
   enum memmodel model = (enum memmodel) INTVAL (operands[2]);
   switch (model)
     {
     default:
       gcc_unreachable ();
     }
-  emit_move_insn (operands[0], operands[1]);
+  if (<MODE>mode != TImode)
+    emit_move_insn (operands[0], operands[1]);
+  else
+    {
+      rtx op0 = operands[0];
+      rtx op1 = operands[1];
+      rtx pti_reg = gen_reg_rtx (PTImode);
+
+      // Can't have indexed address for 'stq'
+      if (indexed_address (XEXP (op0, 0), TImode))
+       {
+         rtx old_addr = XEXP (op0, 0);
+         rtx new_addr = force_reg (Pmode, old_addr);
+         operands[0] = op0 = replace_equiv_address (op0, new_addr);
+       }
+
+      if (WORDS_BIG_ENDIAN)
+       emit_move_insn (pti_reg, gen_lowpart (PTImode, op1));
+      else
+       {
+         emit_move_insn (gen_lowpart (DImode, pti_reg), gen_highpart (DImode, op1));
+         emit_move_insn (gen_highpart (DImode, pti_reg), gen_lowpart (DImode, op1));
+       }
+
+      emit_insn (gen_store_quadpti (gen_lowpart (PTImode, op0), pti_reg));
+    }
+
   DONE;
 })
 
                              SI
                              (DI "TARGET_POWERPC64")])
 
-;; Types that we should provide atomic instructions for.
-
-(define_mode_iterator AINT [QI
-                           HI
-                           SI
-                           (DI "TARGET_POWERPC64")
-                           (TI "TARGET_SYNC_TI")])
-
 (define_insn "load_locked<mode>"
   [(set (match_operand:ATOMIC 0 "int_reg_operand" "=r")
        (unspec_volatile:ATOMIC
index d83cdc3..6d20eab 100644 (file)
 ;; Iterator for the 2 64-bit vector types
 (define_mode_iterator VSX_D [V2DF V2DI])
 
+;; Iterator for the 2 64-bit vector types + 128-bit types that are loaded with
+;; lxvd2x to properly handle swapping words on little endian
+(define_mode_iterator VSX_LE [V2DF
+                             V2DI
+                             V1TI
+                             (TI       "VECTOR_MEM_VSX_P (TImode)")])
+
 ;; Iterator for the 2 32-bit vector types
 (define_mode_iterator VSX_W [V4SF V4SI])
 
 ;; The patterns for LE permuted loads and stores come before the general
 ;; VSX moves so they match first.
 (define_insn_and_split "*vsx_le_perm_load_<mode>"
-  [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa")
-        (match_operand:VSX_D 1 "memory_operand" "Z"))]
+  [(set (match_operand:VSX_LE 0 "vsx_register_operand" "=wa")
+        (match_operand:VSX_LE 1 "memory_operand" "Z"))]
   "!BYTES_BIG_ENDIAN && TARGET_VSX"
   "#"
   "!BYTES_BIG_ENDIAN && TARGET_VSX"
    (set_attr "length" "8")])
 
 (define_insn "*vsx_le_perm_store_<mode>"
-  [(set (match_operand:VSX_D 0 "memory_operand" "=Z")
-        (match_operand:VSX_D 1 "vsx_register_operand" "+wa"))]
+  [(set (match_operand:VSX_LE 0 "memory_operand" "=Z")
+        (match_operand:VSX_LE 1 "vsx_register_operand" "+wa"))]
   "!BYTES_BIG_ENDIAN && TARGET_VSX"
   "#"
   [(set_attr "type" "vecstore")
    (set_attr "length" "12")])
 
 (define_split
-  [(set (match_operand:VSX_D 0 "memory_operand" "")
-        (match_operand:VSX_D 1 "vsx_register_operand" ""))]
+  [(set (match_operand:VSX_LE 0 "memory_operand" "")
+        (match_operand:VSX_LE 1 "vsx_register_operand" ""))]
   "!BYTES_BIG_ENDIAN && TARGET_VSX && !reload_completed"
   [(set (match_dup 2)
         (vec_select:<MODE>
 ;; The post-reload split requires that we re-permute the source
 ;; register in case it is still live.
 (define_split
-  [(set (match_operand:VSX_D 0 "memory_operand" "")
-        (match_operand:VSX_D 1 "vsx_register_operand" ""))]
+  [(set (match_operand:VSX_LE 0 "memory_operand" "")
+        (match_operand:VSX_LE 1 "vsx_register_operand" ""))]
   "!BYTES_BIG_ENDIAN && TARGET_VSX && reload_completed"
   [(set (match_dup 1)
         (vec_select:<MODE>
 ;; xxpermdi for little endian loads and stores.  We need several of
 ;; these since the form of the PARALLEL differs by mode.
 (define_insn "*vsx_xxpermdi2_le_<mode>"
-  [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa")
-        (vec_select:VSX_D
-          (match_operand:VSX_D 1 "vsx_register_operand" "wa")
+  [(set (match_operand:VSX_LE 0 "vsx_register_operand" "=wa")
+        (vec_select:VSX_LE
+          (match_operand:VSX_LE 1 "vsx_register_operand" "wa")
           (parallel [(const_int 1) (const_int 0)])))]
   "!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (<MODE>mode)"
   "xxpermdi %x0,%x1,%x1,2"
 ;; lxvd2x for little endian loads.  We need several of
 ;; these since the form of the PARALLEL differs by mode.
 (define_insn "*vsx_lxvd2x2_le_<mode>"
-  [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa")
-        (vec_select:VSX_D
-          (match_operand:VSX_D 1 "memory_operand" "Z")
+  [(set (match_operand:VSX_LE 0 "vsx_register_operand" "=wa")
+        (vec_select:VSX_LE
+          (match_operand:VSX_LE 1 "memory_operand" "Z")
           (parallel [(const_int 1) (const_int 0)])))]
   "!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (<MODE>mode)"
   "lxvd2x %x0,%y1"
 ;; stxvd2x for little endian stores.  We need several of
 ;; these since the form of the PARALLEL differs by mode.
 (define_insn "*vsx_stxvd2x2_le_<mode>"
-  [(set (match_operand:VSX_D 0 "memory_operand" "=Z")
-        (vec_select:VSX_D
-          (match_operand:VSX_D 1 "vsx_register_operand" "wa")
+  [(set (match_operand:VSX_LE 0 "memory_operand" "=Z")
+        (vec_select:VSX_LE
+          (match_operand:VSX_LE 1 "vsx_register_operand" "wa")
           (parallel [(const_int 1) (const_int 0)])))]
   "!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (<MODE>mode)"
   "stxvd2x %x1,%y0"
     {
       if (GET_CODE (op3) == SCRATCH)
        op3 = gen_reg_rtx (V4SFmode);
-      emit_insn (gen_vsx_xxsldwi_v4sf (op3, op1, op1, op2));
+      emit_insn (gen_vsx_xxsldwi_v4sf (op3, op1, op1, GEN_INT (ele)));
       tmp = op3;
     }
   emit_insn (gen_vsx_xscvspdp_scalar2 (op0, tmp));
          (parallel [(const_int 0) (const_int 4)
                     (const_int 1) (const_int 5)])))]
   "VECTOR_MEM_VSX_P (<MODE>mode)"
-  "xxmrghw %x0,%x1,%x2"
+{
+  if (BYTES_BIG_ENDIAN)
+    return "xxmrghw %x0,%x1,%x2";
+  else
+    return "xxmrglw %x0,%x2,%x1";
+}
   [(set_attr "type" "vecperm")])
 
 (define_insn "vsx_xxmrglw_<mode>"
          (parallel [(const_int 2) (const_int 6)
                     (const_int 3) (const_int 7)])))]
   "VECTOR_MEM_VSX_P (<MODE>mode)"
-  "xxmrglw %x0,%x1,%x2"
+{
+  if (BYTES_BIG_ENDIAN)
+    return "xxmrglw %x0,%x1,%x2";
+  else
+    return "xxmrghw %x0,%x2,%x1";
+}
   [(set_attr "type" "vecperm")])
 
 ;; Shift left double by word immediate
index 3da27c5..f14aed3 100644 (file)
@@ -13,8 +13,13 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3.  If not see
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
 /* The system headers under RTEMS are C++-aware.  */
index 6d909c7..12724a2 100644 (file)
@@ -19,6 +19,10 @@ You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#include <sstream>
+#include <vector>
+#include <algorithm>
+
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
@@ -70,10 +74,6 @@ along with GCC; see the file COPYING3.  If not see
 #include "pass_manager.h"
 #include "context.h"
 
-#include <sstream>
-#include <vector>
-#include <algorithm>
-
 int code_for_indirect_jump_scratch = CODE_FOR_indirect_jump_scratch;
 
 /* These are some macros to abstract register modes.  */
diff --git a/gcc/config/sol2-clearcap.map b/gcc/config/sol2-clearcap.map
new file mode 100644 (file)
index 0000000..2d880c9
--- /dev/null
@@ -0,0 +1,2 @@
+# Clear all hardware capabilities emitted by Sun as.
+hwcap_1 = V0x0 OVERRIDE;
diff --git a/gcc/config/sol2-clearcapv2.map b/gcc/config/sol2-clearcapv2.map
new file mode 100644 (file)
index 0000000..3c0cace
--- /dev/null
@@ -0,0 +1,7 @@
+# Clear all hardware capabilities emitted by Sun as.
+#
+# Uses mapfile v2 syntax which is the only way to clear AT_SUN_CAP_HW2 flags.
+$mapfile_version 2
+CAPABILITY {
+  HW = ;
+};
index 2a657db..cab7e6b 100644 (file)
@@ -183,12 +183,21 @@ along with GCC; see the file COPYING3.  If not see
 #define LINK_LIBGCC_MAPFILE_SPEC ""
 #endif
 
+/* Clear hardware capabilities, either explicitly or with OpenMP:
+   #pragma openmp declare simd creates clones for SSE2, AVX, and AVX2.  */
+#ifdef HAVE_LD_CLEARCAP
+#define LINK_CLEARCAP_SPEC " %{mclear-hwcap|fopenmp*:-M %sclearcap.map}"
+#else
+#define LINK_CLEARCAP_SPEC ""
+#endif
+
 #undef  LINK_SPEC
 #define LINK_SPEC \
   "%{h*} %{v:-V} \
    %{!shared:%{!static:%{rdynamic: " RDYNAMIC_SPEC "}}} \
    %{static:-dn -Bstatic} \
-   %{shared:-G -dy %{!mimpure-text:-z text}} " LINK_LIBGCC_MAPFILE_SPEC " \
+   %{shared:-G -dy %{!mimpure-text:-z text}} " \
+   LINK_LIBGCC_MAPFILE_SPEC LINK_CLEARCAP_SPEC " \
    %{symbolic:-Bsymbolic -G -dy -z text} \
    %(link_arch) \
    %{Qy:} %{!Qn:-Qy}"
index a5ae7c5..16a3e5f 100644 (file)
@@ -27,6 +27,10 @@ Driver Joined
 Ym,
 Driver Joined
 
+mclear-hwcap
+Target Report
+Clear hardware capabilities when linking
+
 mimpure-text
 Target Report
 Pass -z text to linker
index 1d63e46..ee2091b 100644 (file)
@@ -69,7 +69,6 @@ extern bool sparc_expand_move (enum machine_mode, rtx *);
 extern void sparc_emit_set_symbolic_const64 (rtx, rtx, rtx);
 extern int sparc_splitdi_legitimate (rtx, rtx);
 extern int sparc_split_regreg_legitimate (rtx, rtx);
-extern int sparc_absnegfloat_split_legitimate (rtx, rtx);
 extern const char *output_ubranch (rtx, rtx);
 extern const char *output_cbranch (rtx, rtx, int, int, int, rtx);
 extern const char *output_return (rtx);
index f52b976..5b00cca 100644 (file)
@@ -8539,22 +8539,6 @@ sparc_split_regreg_legitimate (rtx reg1, rtx reg2)
   return 0;
 }
 
-/* Return 1 if x and y are some kind of REG and they refer to
-   different hard registers.  This test is guaranteed to be
-   run after reload.  */
-
-int
-sparc_absnegfloat_split_legitimate (rtx x, rtx y)
-{
-  if (GET_CODE (x) != REG)
-    return 0;
-  if (GET_CODE (y) != REG)
-    return 0;
-  if (REGNO (x) == REGNO (y))
-    return 0;
-  return 1;
-}
-
 /* Return 1 if REGNO (reg1) is even and REGNO (reg1) == REGNO (reg2) - 1.
    This makes them candidates for using ldd and std insns.
 
index 8b6c647..76c3315 100644 (file)
 (define_attr "fptype" "single,double"
   (const_string "single"))
 
+;; FP precision specific to the UT699.
+(define_attr "fptype_ut699" "none,single"
+  (const_string "none"))
+
 ;; UltraSPARC-III integer load type.
 (define_attr "us3load_type" "2cycle,3cycle"
   (const_string "2cycle"))
           (const_string "false")
         (and (eq_attr "fix_ut699" "true")
              (and (eq_attr "type" "fpload,fp,fpmove,fpmul,fpdivs,fpsqrts")
-                  (eq_attr "fptype" "single")))
+                  (ior (eq_attr "fptype" "single")
+                       (eq_attr "fptype_ut699" "single"))))
           (const_string "false")
         (eq_attr "length" "1")
           (const_string "true")
   "TARGET_FPU"
   "fdtos\t%1, %0"
   [(set_attr "type" "fp")
-   (set_attr "fptype" "double")])
+   (set_attr "fptype" "double")
+   (set_attr "fptype_ut699" "single")])
 
 (define_expand "trunctfsf2"
   [(set (match_operand:SF 0 "register_operand" "")
   "TARGET_FPU"
   "fitos\t%1, %0"
   [(set_attr "type" "fp")
-   (set_attr "fptype" "double")])
+   (set_attr "fptype" "single")])
 
 (define_insn "floatsidf2"
   [(set (match_operand:DF 0 "register_operand" "=e")
   "TARGET_FPU"
   "fstoi\t%1, %0"
   [(set_attr "type" "fp")
-   (set_attr "fptype" "double")])
+   (set_attr "fptype" "single")])
 
 (define_insn "fix_truncdfsi2"
   [(set (match_operand:SI 0 "register_operand" "=f")
   "TARGET_FPU"
   "fdtoi\t%1, %0"
   [(set_attr "type" "fp")
-   (set_attr "fptype" "double")])
+   (set_attr "fptype" "double")
+   (set_attr "fptype_ut699" "single")])
 
 (define_expand "fix_trunctfsi2"
   [(set (match_operand:SI 0 "register_operand" "")
   [(set_attr "type" "fpdivs")])
 
 (define_expand "negtf2"
-  [(set (match_operand:TF 0 "register_operand" "=e,e")
-       (neg:TF (match_operand:TF 1 "register_operand" "0,e")))]
+  [(set (match_operand:TF 0 "register_operand" "")
+       (neg:TF (match_operand:TF 1 "register_operand" "")))]
   "TARGET_FPU"
   "")
 
-(define_insn_and_split "*negtf2_notv9"
-  [(set (match_operand:TF 0 "register_operand" "=e,e")
-       (neg:TF (match_operand:TF 1 "register_operand" "0,e")))]
-  ; We don't use quad float insns here so we don't need TARGET_HARD_QUAD.
-  "TARGET_FPU
-   && ! TARGET_V9"
-  "@
-  fnegs\t%0, %0
-  #"
-  "&& reload_completed
-   && sparc_absnegfloat_split_legitimate (operands[0], operands[1])"
-  [(set (match_dup 2) (neg:SF (match_dup 3)))
-   (set (match_dup 4) (match_dup 5))
-   (set (match_dup 6) (match_dup 7))]
-  "operands[2] = gen_rtx_raw_REG (SFmode, REGNO (operands[0]));
-   operands[3] = gen_rtx_raw_REG (SFmode, REGNO (operands[1]));
-   operands[4] = gen_rtx_raw_REG (SFmode, REGNO (operands[0]) + 1);
-   operands[5] = gen_rtx_raw_REG (SFmode, REGNO (operands[1]) + 1);
-   operands[6] = gen_rtx_raw_REG (DFmode, REGNO (operands[0]) + 2);
-   operands[7] = gen_rtx_raw_REG (DFmode, REGNO (operands[1]) + 2);"
-  [(set_attr "type" "fpmove,*")
-   (set_attr "length" "*,2")])
-
-(define_insn_and_split "*negtf2_v9"
-  [(set (match_operand:TF 0 "register_operand" "=e,e")
-       (neg:TF (match_operand:TF 1 "register_operand" "0,e")))]
-  ; We don't use quad float insns here so we don't need TARGET_HARD_QUAD.
-  "TARGET_FPU && TARGET_V9"
-  "@
-  fnegd\t%0, %0
-  #"
-  "&& reload_completed
-   && sparc_absnegfloat_split_legitimate (operands[0], operands[1])"
-  [(set (match_dup 2) (neg:DF (match_dup 3)))
-   (set (match_dup 4) (match_dup 5))]
-  "operands[2] = gen_rtx_raw_REG (DFmode, REGNO (operands[0]));
-   operands[3] = gen_rtx_raw_REG (DFmode, REGNO (operands[1]));
-   operands[4] = gen_rtx_raw_REG (DFmode, REGNO (operands[0]) + 2);
-   operands[5] = gen_rtx_raw_REG (DFmode, REGNO (operands[1]) + 2);"
-  [(set_attr "type" "fpmove,*")
-   (set_attr "length" "*,2")
-   (set_attr "fptype" "double")])
+(define_insn "*negtf2_hq"
+  [(set (match_operand:TF 0 "register_operand" "=e")
+       (neg:TF (match_operand:TF 1 "register_operand" "e")))]
+  "TARGET_FPU && TARGET_HARD_QUAD"
+  "fnegq\t%1, %0"
+  [(set_attr "type" "fpmove")])
+
+(define_insn_and_split "*negtf2"
+  [(set (match_operand:TF 0 "register_operand" "=e")
+       (neg:TF (match_operand:TF 1 "register_operand" "e")))]
+  "TARGET_FPU && !TARGET_HARD_QUAD"
+  "#"
+  "&& reload_completed"
+  [(clobber (const_int 0))]
+{
+  rtx set_dest = operands[0];
+  rtx set_src = operands[1];
+  rtx dest1, dest2;
+  rtx src1, src2;
+
+  dest1 = gen_df_reg (set_dest, 0);
+  dest2 = gen_df_reg (set_dest, 1);
+  src1 = gen_df_reg (set_src, 0);
+  src2 = gen_df_reg (set_src, 1);
+
+  /* Now emit using the real source and destination we found, swapping
+     the order if we detect overlap.  */
+  if (reg_overlap_mentioned_p (dest1, src2))
+    {
+      emit_insn (gen_movdf (dest2, src2));
+      emit_insn (gen_negdf2 (dest1, src1));
+    }
+  else
+    {
+      emit_insn (gen_negdf2 (dest1, src1));
+      if (REGNO (dest2) != REGNO (src2))
+       emit_insn (gen_movdf (dest2, src2));
+    }
+  DONE;
+}
+  [(set_attr "length" "2")])
 
 (define_expand "negdf2"
   [(set (match_operand:DF 0 "register_operand" "")
   "")
 
 (define_insn_and_split "*negdf2_notv9"
-  [(set (match_operand:DF 0 "register_operand" "=e,e")
-       (neg:DF (match_operand:DF 1 "register_operand" "0,e")))]
-  "TARGET_FPU && ! TARGET_V9"
-  "@
-  fnegs\t%0, %0
-  #"
-  "&& reload_completed
-   && sparc_absnegfloat_split_legitimate (operands[0], operands[1])"
-  [(set (match_dup 2) (neg:SF (match_dup 3)))
-   (set (match_dup 4) (match_dup 5))]
-  "operands[2] = gen_rtx_raw_REG (SFmode, REGNO (operands[0]));
-   operands[3] = gen_rtx_raw_REG (SFmode, REGNO (operands[1]));
-   operands[4] = gen_rtx_raw_REG (SFmode, REGNO (operands[0]) + 1);
-   operands[5] = gen_rtx_raw_REG (SFmode, REGNO (operands[1]) + 1);"
-  [(set_attr "type" "fpmove,*")
-   (set_attr "length" "*,2")])
+  [(set (match_operand:DF 0 "register_operand" "=e")
+       (neg:DF (match_operand:DF 1 "register_operand" "e")))]
+  "TARGET_FPU && !TARGET_V9"
+  "#"
+  "&& reload_completed"
+  [(clobber (const_int 0))]
+{
+  rtx set_dest = operands[0];
+  rtx set_src = operands[1];
+  rtx dest1, dest2;
+  rtx src1, src2;
+
+  dest1 = gen_highpart (SFmode, set_dest);
+  dest2 = gen_lowpart (SFmode, set_dest);
+  src1 = gen_highpart (SFmode, set_src);
+  src2 = gen_lowpart (SFmode, set_src);
+
+  /* Now emit using the real source and destination we found, swapping
+     the order if we detect overlap.  */
+  if (reg_overlap_mentioned_p (dest1, src2))
+    {
+      emit_insn (gen_movsf (dest2, src2));
+      emit_insn (gen_negsf2 (dest1, src1));
+    }
+  else
+    {
+      emit_insn (gen_negsf2 (dest1, src1));
+      if (REGNO (dest2) != REGNO (src2))
+       emit_insn (gen_movsf (dest2, src2));
+    }
+  DONE;
+}
+  [(set_attr "length" "2")])
 
 (define_insn "*negdf2_v9"
   [(set (match_operand:DF 0 "register_operand" "=e")
   "TARGET_FPU"
   "")
 
-(define_insn_and_split "*abstf2_notv9"
-  [(set (match_operand:TF 0 "register_operand" "=e,e")
-       (abs:TF (match_operand:TF 1 "register_operand" "0,e")))]
-  ; We don't use quad float insns here so we don't need TARGET_HARD_QUAD.
-  "TARGET_FPU && ! TARGET_V9"
-  "@
-  fabss\t%0, %0
-  #"
-  "&& reload_completed
-   && sparc_absnegfloat_split_legitimate (operands[0], operands[1])"
-  [(set (match_dup 2) (abs:SF (match_dup 3)))
-   (set (match_dup 4) (match_dup 5))
-   (set (match_dup 6) (match_dup 7))]
-  "operands[2] = gen_rtx_raw_REG (SFmode, REGNO (operands[0]));
-   operands[3] = gen_rtx_raw_REG (SFmode, REGNO (operands[1]));
-   operands[4] = gen_rtx_raw_REG (SFmode, REGNO (operands[0]) + 1);
-   operands[5] = gen_rtx_raw_REG (SFmode, REGNO (operands[1]) + 1);
-   operands[6] = gen_rtx_raw_REG (DFmode, REGNO (operands[0]) + 2);
-   operands[7] = gen_rtx_raw_REG (DFmode, REGNO (operands[1]) + 2);"
-  [(set_attr "type" "fpmove,*")
-   (set_attr "length" "*,2")])
-
-(define_insn "*abstf2_hq_v9"
-  [(set (match_operand:TF 0 "register_operand" "=e,e")
-       (abs:TF (match_operand:TF 1 "register_operand" "0,e")))]
-  "TARGET_FPU && TARGET_V9 && TARGET_HARD_QUAD"
-  "@
-  fabsd\t%0, %0
-  fabsq\t%1, %0"
-  [(set_attr "type" "fpmove")
-   (set_attr "fptype" "double,*")])
+(define_insn "*abstf2_hq"
+  [(set (match_operand:TF 0 "register_operand" "=e")
+       (abs:TF (match_operand:TF 1 "register_operand" "e")))]
+  "TARGET_FPU && TARGET_HARD_QUAD"
+  "fabsq\t%1, %0"
+  [(set_attr "type" "fpmove")])
 
-(define_insn_and_split "*abstf2_v9"
-  [(set (match_operand:TF 0 "register_operand" "=e,e")
-       (abs:TF (match_operand:TF 1 "register_operand" "0,e")))]
-  "TARGET_FPU && TARGET_V9 && !TARGET_HARD_QUAD"
-  "@
-  fabsd\t%0, %0
-  #"
-  "&& reload_completed
-   && sparc_absnegfloat_split_legitimate (operands[0], operands[1])"
-  [(set (match_dup 2) (abs:DF (match_dup 3)))
-   (set (match_dup 4) (match_dup 5))]
-  "operands[2] = gen_rtx_raw_REG (DFmode, REGNO (operands[0]));
-   operands[3] = gen_rtx_raw_REG (DFmode, REGNO (operands[1]));
-   operands[4] = gen_rtx_raw_REG (DFmode, REGNO (operands[0]) + 2);
-   operands[5] = gen_rtx_raw_REG (DFmode, REGNO (operands[1]) + 2);"
-  [(set_attr "type" "fpmove,*")
-   (set_attr "length" "*,2")
-   (set_attr "fptype" "double,*")])
+(define_insn_and_split "*abstf2"
+  [(set (match_operand:TF 0 "register_operand" "=e")
+       (abs:TF (match_operand:TF 1 "register_operand" "e")))]
+  "TARGET_FPU && !TARGET_HARD_QUAD"
+  "#"
+  "&& reload_completed"
+  [(clobber (const_int 0))]
+{
+  rtx set_dest = operands[0];
+  rtx set_src = operands[1];
+  rtx dest1, dest2;
+  rtx src1, src2;
+
+  dest1 = gen_df_reg (set_dest, 0);
+  dest2 = gen_df_reg (set_dest, 1);
+  src1 = gen_df_reg (set_src, 0);
+  src2 = gen_df_reg (set_src, 1);
+
+  /* Now emit using the real source and destination we found, swapping
+     the order if we detect overlap.  */
+  if (reg_overlap_mentioned_p (dest1, src2))
+    {
+      emit_insn (gen_movdf (dest2, src2));
+      emit_insn (gen_absdf2 (dest1, src1));
+    }
+  else
+    {
+      emit_insn (gen_absdf2 (dest1, src1));
+      if (REGNO (dest2) != REGNO (src2))
+       emit_insn (gen_movdf (dest2, src2));
+    }
+  DONE;
+}
+  [(set_attr "length" "2")])
 
 (define_expand "absdf2"
   [(set (match_operand:DF 0 "register_operand" "")
   "")
 
 (define_insn_and_split "*absdf2_notv9"
-  [(set (match_operand:DF 0 "register_operand" "=e,e")
-       (abs:DF (match_operand:DF 1 "register_operand" "0,e")))]
-  "TARGET_FPU && ! TARGET_V9"
-  "@
-  fabss\t%0, %0
-  #"
-  "&& reload_completed
-   && sparc_absnegfloat_split_legitimate (operands[0], operands[1])"
-  [(set (match_dup 2) (abs:SF (match_dup 3)))
-   (set (match_dup 4) (match_dup 5))]
-  "operands[2] = gen_rtx_raw_REG (SFmode, REGNO (operands[0]));
-   operands[3] = gen_rtx_raw_REG (SFmode, REGNO (operands[1]));
-   operands[4] = gen_rtx_raw_REG (SFmode, REGNO (operands[0]) + 1);
-   operands[5] = gen_rtx_raw_REG (SFmode, REGNO (operands[1]) + 1);"
-  [(set_attr "type" "fpmove,*")
-   (set_attr "length" "*,2")])
+  [(set (match_operand:DF 0 "register_operand" "=e")
+       (abs:DF (match_operand:DF 1 "register_operand" "e")))]
+  "TARGET_FPU && !TARGET_V9"
+  "#"
+  "&& reload_completed"
+  [(clobber (const_int 0))]
+{
+  rtx set_dest = operands[0];
+  rtx set_src = operands[1];
+  rtx dest1, dest2;
+  rtx src1, src2;
+
+  dest1 = gen_highpart (SFmode, set_dest);
+  dest2 = gen_lowpart (SFmode, set_dest);
+  src1 = gen_highpart (SFmode, set_src);
+  src2 = gen_lowpart (SFmode, set_src);
+
+  /* Now emit using the real source and destination we found, swapping
+     the order if we detect overlap.  */
+  if (reg_overlap_mentioned_p (dest1, src2))
+    {
+      emit_insn (gen_movsf (dest2, src2));
+      emit_insn (gen_abssf2 (dest1, src1));
+    }
+  else
+    {
+      emit_insn (gen_abssf2 (dest1, src1));
+      if (REGNO (dest2) != REGNO (src2))
+       emit_insn (gen_movsf (dest2, src2));
+    }
+  DONE;
+}
+  [(set_attr "length" "2")])
 
 (define_insn "*absdf2_v9"
   [(set (match_operand:DF 0 "register_operand" "=e")
 }
   [(set_attr "type" "shift")])
 
-(define_insn "*ashlsi3_extend"
-  [(set (match_operand:DI 0 "register_operand" "=r")
-       (zero_extend:DI
-         (ashift:SI (match_operand:SI 1 "register_operand" "r")
-                    (match_operand:SI 2 "arith_operand" "rI"))))]
-  "TARGET_ARCH64"
-{
-  if (GET_CODE (operands[2]) == CONST_INT)
-    operands[2] = GEN_INT (INTVAL (operands[2]) & 0x1f);
-  return "sll\t%1, %2, %0";
-}
-  [(set_attr "type" "shift")])
-
 (define_expand "ashldi3"
   [(set (match_operand:DI 0 "register_operand" "=r")
        (ashift:DI (match_operand:DI 1 "register_operand" "r")
index c02aec5..64e4095 100644 (file)
@@ -113,6 +113,10 @@ mrelax
 Target
 Optimize tail call instructions in assembler and linker
 
+muser-mode
+Target Report Mask(USER_MODE)
+Do not generate code that can only run in supervisor mode
+
 mcpu=
 Target RejectNegative Joined Var(sparc_cpu_and_features) Enum(sparc_processor_type) Init(PROCESSOR_V7)
 Use features of and schedule code for given CPU
index fd5691f..e6e237f 100644 (file)
          [(match_operand:I48MODE 2 "register_operand" "r")
           (match_operand:I48MODE 3 "register_operand" "0")]
          UNSPECV_CAS))]
-  "(TARGET_V9 || TARGET_LEON3) && (<MODE>mode != DImode || TARGET_ARCH64)"
+  "TARGET_V9 && (<MODE>mode != DImode || TARGET_ARCH64)"
   "cas<modesuffix>\t%1, %2, %0"
   [(set_attr "type" "multi")])
 
+(define_insn "*atomic_compare_and_swap_leon3_1"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (match_operand:SI 1 "mem_noofs_operand" "+w"))
+   (set (match_dup 1)
+       (unspec_volatile:SI
+         [(match_operand:SI 2 "register_operand" "r")
+          (match_operand:SI 3 "register_operand" "0")]
+         UNSPECV_CAS))]
+  "TARGET_LEON3"
+{
+  if (TARGET_USER_MODE)
+    return "casa\t%1 0xa, %2, %0"; /* ASI for user data space.  */
+  else
+    return "casa\t%1 0xb, %2, %0"; /* ASI for supervisor data space.  */
+}
+  [(set_attr "type" "multi")])
+
 (define_insn "*atomic_compare_and_swapdi_v8plus"
   [(set (match_operand:DI 0 "register_operand" "=h")
        (match_operand:DI 1 "mem_noofs_operand" "+w"))
index a4c4af4..25feb04 100644 (file)
@@ -35,3 +35,10 @@ sol2-stubs.o: $(srcdir)/config/sol2-stubs.c
 sol2.o: $(srcdir)/config/sol2.c
        $(COMPILE) $<
        $(POSTCOMPILE)
+
+# Install clearcap.map if present.
+install: install-clearcap-map
+
+# Ignore failures: file only exists if linker supports it.
+install-clearcap-map:
+       -$(INSTALL_DATA) clearcap.map $(DESTDIR)$(libdir)
index 01dff3e..42ebb9f 100644 (file)
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with GCC; see the file COPYING3.  If not see
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
 /* Specify predefined symbols in preprocessor.  */
index a91b1b0..c3d9b7a 100644 (file)
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with GCC; see the file COPYING3.  If not see
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
 #ifndef V850_OPTS_H
index 92db20a..6ccdc5d 100644 (file)
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with GCC; see the file COPYING3.  If not see
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
 #ifndef GCC_V850_H
index 415377a..eae8fc8 100755 (executable)
@@ -24497,7 +24497,7 @@ else
        .align 4
        smac %g2, %g3, %g1
        umac %g2, %g3, %g1
-       cas [%g2], %g3, %g1' > conftest.s
+       casa [%g2] 0xb, %g3, %g1' > conftest.s
     if { ac_try='$gcc_cv_as $gcc_cv_as_flags -Aleon -o conftest.o conftest.s >&5'
   { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
   (eval $ac_try) 2>&5
@@ -27056,6 +27056,34 @@ _ACEOF
 
 fi
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking linker mapfile support for clearing hardware capabilities" >&5
+$as_echo_n "checking linker mapfile support for clearing hardware capabilities... " >&6; }
+saved_LDFLAGS="$LDFLAGS"
+for clearcap_map in sol2-clearcapv2.map sol2-clearcap.map; do
+  LDFLAGS="$saved_LDFLAGS -Wl,-M,${srcdir}/config/$clearcap_map"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int main(void) {return 0;}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gcc_cv_ld_clearcap=yes; break
+else
+  gcc_cv_ld_clearcap=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+done
+LDFLAGS="$saved_LDFLAGS"
+if test "x$gcc_cv_ld_clearcap" = xyes; then
+
+$as_echo "#define HAVE_LD_CLEARCAP 1" >>confdefs.h
+
+  ac_config_links="$ac_config_links clearcap.map:${srcdir}/config/$clearcap_map"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld_clearcap" >&5
+$as_echo "$gcc_cv_ld_clearcap" >&6; }
+
 case "$target:$tm_file" in
   powerpc64-*-freebsd* | powerpc64*-*-linux* | powerpc*-*-linux*rs6000/biarch64.h*)
   case "$target" in
@@ -28585,6 +28613,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 # Files that config.status was made for.
 config_files="$ac_config_files"
 config_headers="$ac_config_headers"
+config_links="$ac_config_links"
 config_commands="$ac_config_commands"
 
 _ACEOF
@@ -28614,6 +28643,9 @@ $config_files
 Configuration headers:
 $config_headers
 
+Configuration links:
+$config_links
+
 Configuration commands:
 $config_commands
 
@@ -28749,6 +28781,7 @@ do
     "as") CONFIG_FILES="$CONFIG_FILES as:exec-tool.in" ;;
     "collect-ld") CONFIG_FILES="$CONFIG_FILES collect-ld:exec-tool.in" ;;
     "nm") CONFIG_FILES="$CONFIG_FILES nm:exec-tool.in" ;;
+    "clearcap.map") CONFIG_LINKS="$CONFIG_LINKS clearcap.map:${srcdir}/config/$clearcap_map" ;;
     "$all_outputs") CONFIG_FILES="$CONFIG_FILES $all_outputs" ;;
     "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
 
@@ -28764,6 +28797,7 @@ done
 if $ac_need_defaults; then
   test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
   test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links
   test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
 fi
 
@@ -29085,7 +29119,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 fi # test -n "$CONFIG_HEADERS"
 
 
-eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
+eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS  :L $CONFIG_LINKS  :C $CONFIG_COMMANDS"
 shift
 for ac_tag
 do
@@ -29321,7 +29355,38 @@ $as_echo "$as_me: $ac_file is unchanged" >&6;}
       || as_fn_error "could not create -" "$LINENO" 5
   fi
  ;;
+  :L)
+  #
+  # CONFIG_LINK
+  #
+
+  if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then
+    :
+  else
+    # Prefer the file from the source tree if names are identical.
+    if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then
+      ac_source=$srcdir/$ac_source
+    fi
 
+    { $as_echo "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5
+$as_echo "$as_me: linking $ac_source to $ac_file" >&6;}
+
+    if test ! -r "$ac_source"; then
+      as_fn_error "$ac_source: file not found" "$LINENO" 5
+    fi
+    rm -f "$ac_file"
+
+    # Try a relative symlink, then a hard link, then a copy.
+    case $srcdir in
+    [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;;
+       *) ac_rel_source=$ac_top_build_prefix$ac_source ;;
+    esac
+    ln -s "$ac_rel_source" "$ac_file" 2>/dev/null ||
+      ln "$ac_source" "$ac_file" 2>/dev/null ||
+      cp -p "$ac_source" "$ac_file" ||
+      as_fn_error "cannot link or copy $ac_source to $ac_file" "$LINENO" 5
+  fi
+ ;;
   :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
 $as_echo "$as_me: executing $ac_file commands" >&6;}
  ;;
index 0336066..87c7d6b 100644 (file)
@@ -3725,7 +3725,7 @@ foo:
        .align 4
        smac %g2, %g3, %g1
        umac %g2, %g3, %g1
-       cas [[%g2]], %g3, %g1],,
+       casa [[%g2]] 0xb, %g3, %g1],,
       [AC_DEFINE(HAVE_AS_LEON, 1,
                 [Define if your assembler supports LEON instructions.])])
     ;;
@@ -4806,6 +4806,21 @@ if test x"$gcc_cv_ld_as_needed" = xyes; then
 [Define to the linker option to keep unused dependencies.])
 fi
 
+AC_MSG_CHECKING(linker mapfile support for clearing hardware capabilities)
+saved_LDFLAGS="$LDFLAGS"
+for clearcap_map in sol2-clearcapv2.map sol2-clearcap.map; do
+  LDFLAGS="$saved_LDFLAGS -Wl,-M,${srcdir}/config/$clearcap_map"
+  AC_LINK_IFELSE([int main(void) {return 0;}],
+    [gcc_cv_ld_clearcap=yes; break], [gcc_cv_ld_clearcap=no])
+done
+LDFLAGS="$saved_LDFLAGS"
+if test "x$gcc_cv_ld_clearcap" = xyes; then
+  AC_DEFINE([HAVE_LD_CLEARCAP], 1,
+[Define if the linker supports clearing hardware capabilities via mapfile.])
+  AC_CONFIG_LINKS([clearcap.map:${srcdir}/config/$clearcap_map])
+fi
+AC_MSG_RESULT($gcc_cv_ld_clearcap)
+
 case "$target:$tm_file" in
   powerpc64-*-freebsd* | powerpc64*-*-linux* | powerpc*-*-linux*rs6000/biarch64.h*)
   case "$target" in
index f95944b..b0a474d 100644 (file)
@@ -1,3 +1,228 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
+2014-07-13  Jason Merrill  <jason@redhat.com>
+
+       PR c++/58636
+       * call.c (build_list_conv): Don't try to build a list of references.
+
+2014-07-10  Jason Merrill  <jason@redhat.com>
+
+       PR c++/61661
+       * semantics.c (reduced_constant_expression_p): Handle CONSTRUCTOR.
+
+2014-07-01  Paul Pluzhnikov  <ppluzhnikov@google.com>
+
+       PR c++/58753
+       PR c++/58930
+       PR c++/58704
+
+       Backported from mainline
+       2014-05-20  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * typeck2.c (digest_nsdmi_init): New.
+       * parser.c (cp_parser_late_parse_one_default_arg): Use it.
+       * init.c (get_nsdmi): Likewise.
+       * cp-tree.h (digest_nsdmi_init): Declare.
+
+2014-06-30  Edward Smith-Rowland  <3dw4rd@verizon.net>
+
+       PR c++/58781
+       PR c++/60249
+       PR c++/59867
+       * parser.c (cp_parser_userdef_string_literal()): Take a tree
+       not a cp_token*. (cp_parser_string_literal(): Don't hack
+       the token stream!
+
+2014-06-30  Jason Merrill  <jason@redhat.com>
+
+       PR c++/61647
+       * pt.c (type_dependent_expression_p): Check BASELINK_OPTYPE.
+
+       PR c++/61566
+       * mangle.c (decl_mangling_context): Look through a TEMPLATE_DECL.
+
+2014-06-30  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2014-06-25  Jakub Jelinek  <jakub@redhat.com>
+
+       * semantics.c (finish_omp_clauses): Make sure
+       OMP_CLAUSE_LINEAR_STEP has correct type.
+
+       2014-06-18  Jakub Jelinek  <jakub@redhat.com>
+
+       * cp-gimplify.c (cxx_omp_finish_clause): Add a gimple_seq *
+       argument.
+       * cp-tree.h (cxx_omp_finish_clause): Adjust prototype.
+
+2014-06-30  Jason Merrill  <jason@redhat.com>
+
+       PR c++/61539
+       * pt.c (unify_one_argument): Type/expression mismatch just causes
+       deduction failure.
+
+       DR 1030
+       PR c++/51253
+       PR c++/61382
+       * cp-tree.h (CALL_EXPR_LIST_INIT_P): New.
+       * call.c (struct z_candidate): Add flags field.
+       (add_candidate): Add flags parm.
+       (add_function_candidate, add_conv_candidate, build_builtin_candidate)
+       (add_template_candidate_real): Pass it.
+       (build_over_call): Set CALL_EXPR_LIST_INIT_P.
+       * tree.c (build_aggr_init_expr): Copy it.
+       * semantics.c (simplify_aggr_init_expr): Copy it.
+       * cp-gimplify.c (cp_gimplify_expr): Handle it.
+
+       PR c++/61488
+       * pt.c (check_valid_ptrmem_cst_expr): Fix for template context.
+
+       PR c++/61500
+       * tree.c (lvalue_kind): Handle MEMBER_REF and DOTSTAR_EXPR.
+
+2014-06-30  Igor Zamyatin  <igor.zamyatin@intel.com>
+
+       PR middle-end/57541
+       * cp-array-notation.c (expand_sec_reduce_builtin):
+       Check that bultin argument is correct.
+       * call.c (build_cxx_call): Check for 0 arguments in builtin call.
+
+2014-06-27  Jason Merrill  <jason@redhat.com>
+
+       PR c++/61433
+       * error.c (dump_template_bindings): Don't tsubst in a clone.
+
+2014-06-27  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/61614
+       * semantics.c (finish_compound_literal): Revert r204228.
+
+2014-06-26  Adam Butcher  <adam@jessamine.co.uk>
+
+       PR c++/61537
+       * parser.c (cp_parser_elaborated_type_specifier): Only consider template
+       parameter lists outside of function parameter scope.
+
+2014-06-25  Jason Merrill  <jason@redhat.com>
+
+       PR c++/61242
+       * call.c (build_aggr_conv): Ignore passed in flags.
+       (build_array_conv, build_complex_conv): Likewise.
+
+2014-06-24  Jakub Jelinek  <jakub@redhat.com>
+
+       * parser.c (cp_parser_omp_for_loop): For
+       #pragma omp parallel for simd move lastprivate clause from parallel
+       to for rather than simd.
+
+2014-06-20  Jason Merrill  <jason@redhat.com>
+
+       PR c++/59296
+       * call.c (add_function_candidate): Avoid special 'this' handling
+       if we have a ref-qualifier.
+
+       PR c++/61556
+       * call.c (build_over_call): Call build_this in template path.
+
+2014-06-19  Jason Merrill  <jason@redhat.com>
+
+       PR c++/59296
+       * call.c (add_function_candidate): Set LOOKUP_NO_RVAL_BIND
+       |LOOKUP_NO_TEMP_BIND for ref-qualifier handling.
+
+       PR c++/61507
+       * pt.c (resolve_overloaded_unification): Preserve
+       ARGUMENT_PACK_EXPLICIT_ARGS.
+
+2014-06-18  Jason Merrill  <jason@redhat.com>
+
+       PR c++/60605
+       * pt.c (check_default_tmpl_args): Check DECL_LOCAL_FUNCTION_P.
+
+2014-06-18  Siva Chandra Reddy  <sivachandra@google.com>
+
+        PR debug/57519
+        * class.c (handle_using_decl): Pass the correct scope to
+        cp_emit_debug_info_for_using.
+
+2014-06-09  Jason Merrill  <jason@redhat.com>
+
+       PR c++/61343
+       * decl.c (check_initializer): Maybe clear
+       DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P.
+
+2014-06-04  Igor Zamyatin  <igor.zamyatin@intel.com>
+
+       PR c/58942
+       * c-c++-common/cilk-plus/AN/pr58942.c: Check for correct handling of
+       the case with a pointer.
+
+2014-06-02  Jason Merrill  <jason@redhat.com>
+
+       PR c++/61134
+       * pt.c (pack_deducible_p): Handle canonicalization.
+
+2014-05-21  Igor Zamyatin  <igor.zamyatin@intel.com>
+
+       PR c/60189
+       * parser.c (cp_parser_postfix_expression): Move handling of cilk_sync
+       from here to...
+       (cp_parser_statement): ...here. Make sure only semicolon can go after
+       Cilk_sync.
+
+2014-05-13  Jason Merrill  <jason@redhat.com>
+
+       PR c++/61151
+       * lambda.c (is_this): Allow capture proxies too.
+
+       DR 5
+       PR c++/60019
+       * call.c (build_user_type_conversion_1): The copy-init temporary
+       is cv-unqualified.
+
+2014-05-07  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/61083
+       * pt.c (convert_nontype_argument): Protect all the error calls
+       with complain & tf_error.
+
+2014-05-06  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/60999
+       * pt.c (maybe_begin_member_template_processing): Use
+       uses_template_parms.
+
+2014-05-02  Jason Merrill  <jason@redhat.com>
+
+       PR c++/60992
+       * lambda.c (lambda_capture_field_type): Wrap anything dependent
+       other than 'this' or a VLA.
+       (is_this): New.
+       * pt.c (tsubst_copy) [VAR_DECL]: Also build a new VAR_DECL if
+       the operand was static or constant.
+
+2014-04-30  Jason Merrill  <jason@redhat.com>
+
+       PR c++/60980
+       * init.c (build_value_init): Don't try to call an array constructor.
+
+       PR c++/60951
+       * typeck2.c (massage_init_elt): Use maybe_constant_init.
+
+2014-04-24  Jakub Jelinek  <jakub@redhat.com>
+
+       * parser.c (cp_parser_omp_atomic): Allow seq_cst before
+       atomic-clause, allow comma in between atomic-clause and
+       seq_cst.
+
+2014-04-22  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/59073
+       * parser.c (cp_parser_omp_parallel): If cp_parser_omp_for
+       fails, don't set OM_PARALLEL_COMBINED and return NULL.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index ae0d4ff..7c11a53 100644 (file)
@@ -206,7 +206,7 @@ static conversion *maybe_handle_ref_bind (conversion **);
 static void maybe_handle_implicit_object (conversion **);
 static struct z_candidate *add_candidate
        (struct z_candidate **, tree, tree, const vec<tree, va_gc> *, size_t,
-        conversion **, tree, tree, int, struct rejection_reason *);
+        conversion **, tree, tree, int, struct rejection_reason *, int);
 static tree source_type (conversion *);
 static void add_warning (struct z_candidate *, struct z_candidate *);
 static bool reference_compatible_p (tree, tree);
@@ -520,7 +520,6 @@ struct z_candidate {
      sequence from the type returned by FN to the desired destination
      type.  */
   conversion *second_conv;
-  int viable;
   struct rejection_reason *reason;
   /* If FN is a member function, the binfo indicating the path used to
      qualify the name of FN at the call site.  This path is used to
@@ -538,6 +537,10 @@ struct z_candidate {
   tree explicit_targs;
   candidate_warning *warnings;
   z_candidate *next;
+  int viable;
+
+  /* The flags active in add_candidate.  */
+  int flags;
 };
 
 /* Returns true iff T is a null pointer constant in the sense of
@@ -802,6 +805,12 @@ build_list_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
   /* But no narrowing conversions.  */
   flags |= LOOKUP_NO_NARROWING;
 
+  /* Can't make an array of these types.  */
+  if (TREE_CODE (elttype) == REFERENCE_TYPE
+      || TREE_CODE (elttype) == FUNCTION_TYPE
+      || VOID_TYPE_P (elttype))
+    return NULL;
+
   FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
     {
       conversion *sub
@@ -886,7 +895,9 @@ build_aggr_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
   if (ctor == error_mark_node)
     return NULL;
 
-  flags |= LOOKUP_NO_NARROWING;
+  /* The conversions within the init-list aren't affected by the enclosing
+     context; they're always simple copy-initialization.  */
+  flags = LOOKUP_IMPLICIT|LOOKUP_NO_NARROWING;
 
   for (; field; field = next_initializable_field (DECL_CHAIN (field)))
     {
@@ -959,6 +970,8 @@ build_array_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
        return NULL;
     }
 
+  flags = LOOKUP_IMPLICIT|LOOKUP_NO_NARROWING;
+
   FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
     {
       conversion *sub
@@ -1003,6 +1016,8 @@ build_complex_conv (tree type, tree ctor, int flags,
   if (len != 2)
     return NULL;
 
+  flags = LOOKUP_IMPLICIT|LOOKUP_NO_NARROWING;
+
   FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
     {
       conversion *sub
@@ -1810,7 +1825,8 @@ add_candidate (struct z_candidate **candidates,
               tree fn, tree first_arg, const vec<tree, va_gc> *args,
               size_t num_convs, conversion **convs,
               tree access_path, tree conversion_path,
-              int viable, struct rejection_reason *reason)
+              int viable, struct rejection_reason *reason,
+              int flags)
 {
   struct z_candidate *cand = (struct z_candidate *)
     conversion_obstack_alloc (sizeof (struct z_candidate));
@@ -1825,6 +1841,7 @@ add_candidate (struct z_candidate **candidates,
   cand->viable = viable;
   cand->reason = reason;
   cand->next = *candidates;
+  cand->flags = flags;
   *candidates = cand;
 
   return cand;
@@ -1994,6 +2011,9 @@ add_function_candidate (struct z_candidate **candidates,
                     object parameter has reference type.  */
                  bool rv = FUNCTION_RVALUE_QUALIFIED (TREE_TYPE (fn));
                  parmtype = cp_build_reference_type (parmtype, rv);
+                 /* The special handling of 'this' conversions in compare_ics
+                    does not apply if there is a ref-qualifier.  */
+                 is_this = false;
                }
              else
                {
@@ -2061,7 +2081,7 @@ add_function_candidate (struct z_candidate **candidates,
 
  out:
   return add_candidate (candidates, fn, orig_first_arg, args, len, convs,
-                       access_path, conversion_path, viable, reason);
+                       access_path, conversion_path, viable, reason, flags);
 }
 
 /* Create an overload candidate for the conversion function FN which will
@@ -2163,7 +2183,7 @@ add_conv_candidate (struct z_candidate **candidates, tree fn, tree obj,
     }
 
   return add_candidate (candidates, totype, first_arg, arglist, len, convs,
-                       access_path, conversion_path, viable, reason);
+                       access_path, conversion_path, viable, reason, flags);
 }
 
 static void
@@ -2238,7 +2258,7 @@ build_builtin_candidate (struct z_candidate **candidates, tree fnname,
                 num_convs, convs,
                 /*access_path=*/NULL_TREE,
                 /*conversion_path=*/NULL_TREE,
-                viable, reason);
+                viable, reason, flags);
 }
 
 static bool
@@ -3056,7 +3076,7 @@ add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
   return cand;
  fail:
   return add_candidate (candidates, tmpl, first_arg, arglist, nargs, NULL,
-                       access_path, conversion_path, 0, reason);
+                       access_path, conversion_path, 0, reason, flags);
 }
 
 
@@ -3677,11 +3697,20 @@ build_user_type_conversion_1 (tree totype, tree expr, int flags,
       return cand;
     }
 
+  tree convtype;
+  if (!DECL_CONSTRUCTOR_P (cand->fn))
+    convtype = non_reference (TREE_TYPE (TREE_TYPE (cand->fn)));
+  else if (cand->second_conv->kind == ck_rvalue)
+    /* DR 5: [in the first step of copy-initialization]...if the function
+       is a constructor, the call initializes a temporary of the
+       cv-unqualified version of the destination type. */
+    convtype = cv_unqualified (totype);
+  else
+    convtype = totype;
   /* Build the user conversion sequence.  */
   conv = build_conv
     (ck_user,
-     (DECL_CONSTRUCTOR_P (cand->fn)
-      ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
+     convtype,
      build_identity_conv (TREE_TYPE (expr), expr));
   conv->cand = cand;
   if (cand->viable == -1)
@@ -6751,7 +6780,7 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
 
          ++nargs;
          alcarray = XALLOCAVEC (tree, nargs);
-         alcarray[0] = first_arg;
+         alcarray[0] = build_this (first_arg);
          FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
            alcarray[ix + 1] = arg;
          argarray = alcarray;
@@ -7219,7 +7248,11 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
        return error_mark_node;
     }
 
-  return build_cxx_call (fn, nargs, argarray, complain|decltype_flag);
+  tree call = build_cxx_call (fn, nargs, argarray, complain|decltype_flag);
+  if (TREE_CODE (call) == CALL_EXPR
+      && (cand->flags & LOOKUP_LIST_INIT_CTOR))
+    CALL_EXPR_LIST_INIT_P (call) = true;
+  return call;
 }
 
 /* Build and return a call to FN, using NARGS arguments in ARGARRAY.
@@ -7261,6 +7294,11 @@ build_cxx_call (tree fn, int nargs, tree *argarray,
          || bif == BUILT_IN_CILKPLUS_SEC_REDUCE
          || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MUTATING)
        { 
+         if (call_expr_nargs (fn) == 0)
+           {
+             error_at (EXPR_LOCATION (fn), "Invalid builtin arguments");
+             return error_mark_node;
+           }
          /* for bif == BUILT_IN_CILKPLUS_SEC_REDUCE_ALL_ZERO or
             BUILT_IN_CILKPLUS_SEC_REDUCE_ANY_ZERO or
             BUILT_IN_CILKPLUS_SEC_REDUCE_ANY_NONZERO or 
@@ -8446,10 +8484,11 @@ compare_ics (conversion *ics1, conversion *ics2)
   /* [over.ics.rank]
 
      --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
-     to an implicit object parameter, and either S1 binds an lvalue reference
-     to an lvalue and S2 binds an rvalue reference or S1 binds an rvalue
-     reference to an rvalue and S2 binds an lvalue reference
-     (C++0x draft standard, 13.3.3.2)
+     to an implicit object parameter of a non-static member function
+     declared without a ref-qualifier, and either S1 binds an lvalue
+     reference to an lvalue and S2 binds an rvalue reference or S1 binds an
+     rvalue reference to an rvalue and S2 binds an lvalue reference (C++0x
+     draft standard, 13.3.3.2)
 
      --S1 and S2 are reference bindings (_dcl.init.ref_), and the
      types to which the references refer are the same type except for
index 334bfd5..f4fb4c9 100644 (file)
@@ -1300,7 +1300,7 @@ handle_using_decl (tree using_decl, tree t)
        old_value = NULL_TREE;
     }
 
-  cp_emit_debug_info_for_using (decl, USING_DECL_SCOPE (using_decl));
+  cp_emit_debug_info_for_using (decl, t);
 
   if (is_overloaded_fn (decl))
     flist = decl;
index 65b8bcb..fed60c9 100644 (file)
@@ -250,7 +250,10 @@ expand_sec_reduce_builtin (tree an_builtin_fn, tree *new_var)
   if (!find_rank (location, an_builtin_fn, an_builtin_fn, true, &rank))
       return error_mark_node;
   if (rank == 0)
-    return an_builtin_fn;
+    {
+      error_at (location, "Invalid builtin arguments");
+      return error_mark_node;
+    }
   else if (rank > 1 
           && (an_type == BUILT_IN_CILKPLUS_SEC_REDUCE_MAX_IND
               || an_type == BUILT_IN_CILKPLUS_SEC_REDUCE_MIN_IND))
@@ -340,6 +343,8 @@ expand_sec_reduce_builtin (tree an_builtin_fn, tree *new_var)
     array_ind_value = get_temp_regvar (TREE_TYPE (func_parm), func_parm);
 
   array_op0 = (*array_operand)[0];
+  if (TREE_CODE (array_op0) == INDIRECT_REF)
+    array_op0 = TREE_OPERAND (array_op0, 0);
   switch (an_type)
     {
     case BUILT_IN_CILKPLUS_SEC_REDUCE_ADD:
index ef4b043..3dc32e6 100644 (file)
@@ -723,6 +723,27 @@ cp_gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p)
          && !seen_error ())
        return (enum gimplify_status) gimplify_cilk_spawn (expr_p);
 
+      /* DR 1030 says that we need to evaluate the elements of an
+        initializer-list in forward order even when it's used as arguments to
+        a constructor.  So if the target wants to evaluate them in reverse
+        order and there's more than one argument other than 'this', gimplify
+        them in order.  */
+      ret = GS_OK;
+      if (PUSH_ARGS_REVERSED && CALL_EXPR_LIST_INIT_P (*expr_p)
+         && call_expr_nargs (*expr_p) > 2)
+       {
+         int nargs = call_expr_nargs (*expr_p);
+         location_t loc = EXPR_LOC_OR_LOC (*expr_p, input_location);
+         for (int i = 1; i < nargs; ++i)
+           {
+             enum gimplify_status t
+               = gimplify_arg (&CALL_EXPR_ARG (*expr_p, i), pre_p, loc);
+             if (t == GS_ERROR)
+               ret = GS_ERROR;
+           }
+       }
+      break;
+
     default:
       ret = (enum gimplify_status) c_gimplify_expr (expr_p, pre_p, post_p);
       break;
@@ -1578,7 +1599,7 @@ cxx_omp_predetermined_sharing (tree decl)
 /* Finalize an implicitly determined clause.  */
 
 void
-cxx_omp_finish_clause (tree c)
+cxx_omp_finish_clause (tree c, gimple_seq *)
 {
   tree decl, inner_type;
   bool make_shared = false;
index e9fe86e..26a63d0 100644 (file)
@@ -101,12 +101,14 @@ c-common.h, not after.
       FNDECL_USED_AUTO (in FUNCTION_DECL)
       DECLTYPE_FOR_LAMBDA_PROXY (in DECLTYPE_TYPE)
       REF_PARENTHESIZED_P (in COMPONENT_REF, SCOPE_REF)
+      AGGR_INIT_ZERO_FIRST (in AGGR_INIT_EXPR)
    3: (TREE_REFERENCE_EXPR) (in NON_LVALUE_EXPR) (commented-out).
       ICS_BAD_FLAG (in _CONV)
       FN_TRY_BLOCK_P (in TRY_BLOCK)
       IDENTIFIER_CTOR_OR_DTOR_P (in IDENTIFIER_NODE)
       BIND_EXPR_BODY_BLOCK (in BIND_EXPR)
       DECL_NON_TRIVIALLY_INITIALIZED_P (in VAR_DECL)
+      CALL_EXPR_LIST_INIT_P (in CALL_EXPR, AGGR_INIT_EXPR)
    4: TREE_HAS_CONSTRUCTOR (in INDIRECT_REF, SAVE_EXPR, CONSTRUCTOR,
          or FIELD_DECL).
       IDENTIFIER_TYPENAME_P (in IDENTIFIER_NODE)
@@ -3026,6 +3028,10 @@ extern void decl_shadowed_for_var_insert (tree, tree);
    should be performed at instantiation time.  */
 #define KOENIG_LOOKUP_P(NODE) TREE_LANG_FLAG_0 (CALL_EXPR_CHECK (NODE))
 
+/* True if CALL_EXPR expresses list-initialization of an object.  */
+#define CALL_EXPR_LIST_INIT_P(NODE) \
+  TREE_LANG_FLAG_3 (TREE_CHECK2 ((NODE),CALL_EXPR,AGGR_INIT_EXPR))
+
 /* Indicates whether a string literal has been parenthesized. Such
    usages are disallowed in certain circumstances.  */
 
@@ -3430,6 +3436,9 @@ more_aggr_init_expr_args_p (const aggr_init_expr_arg_iterator *iter)
    B b{1,2}, not B b({1,2}) or B b = {1,2}.  */
 #define CONSTRUCTOR_IS_DIRECT_INIT(NODE) (TREE_LANG_FLAG_0 (CONSTRUCTOR_CHECK (NODE)))
 
+#define DIRECT_LIST_INIT_P(NODE) \
+   (BRACE_ENCLOSED_INITIALIZER_P (NODE) && CONSTRUCTOR_IS_DIRECT_INIT (NODE))
+
 /* True if NODE represents a conversion for direct-initialization in a
    template.  Set by perform_implicit_conversion_flags.  */
 #define IMPLICIT_CONV_EXPR_DIRECT_INIT(NODE) \
@@ -4347,6 +4356,11 @@ extern int function_depth;
    PARM_DECLs in cp_tree_equal.  */
 extern int comparing_specializations;
 
+/* A type-qualifier, or bitmask therefore, using the TYPE_QUAL
+   constants.  */
+
+typedef int cp_cv_quals;
+
 /* In parser.c.  */
 
 /* Nonzero if we are parsing an unevaluated operand: an operand to
@@ -4356,6 +4370,7 @@ extern int comparing_specializations;
 extern int cp_unevaluated_operand;
 extern tree cp_convert_range_for (tree, tree, tree, bool);
 extern bool parsing_nsdmi (void);
+extern void inject_this_parameter (tree, cp_cv_quals);
 
 /* in pt.c  */
 
@@ -4735,11 +4750,6 @@ extern GTY(()) operator_name_info_t operator_name_info
 extern GTY(()) operator_name_info_t assignment_operator_name_info
   [(int) MAX_TREE_CODES];
 
-/* A type-qualifier, or bitmask therefore, using the TYPE_QUAL
-   constants.  */
-
-typedef int cp_cv_quals;
-
 /* Non-static member functions have an optional virt-specifier-seq.
    There is a VIRT_SPEC value for each virt-specifier.
    They can be combined by bitwise-or to form the complete set of
@@ -5415,6 +5425,7 @@ extern tree get_type_value                        (tree);
 extern tree build_zero_init                    (tree, tree, bool);
 extern tree build_value_init                   (tree, tsubst_flags_t);
 extern tree build_value_init_noctor            (tree, tsubst_flags_t);
+extern tree get_nsdmi                          (tree, bool);
 extern tree build_offset_ref                   (tree, tree, bool,
                                                 tsubst_flags_t);
 extern tree throw_bad_array_new_length         (void);
@@ -6151,6 +6162,7 @@ extern tree store_init_value                      (tree, tree, vec<tree, va_gc>**, int);
 extern void check_narrowing                    (tree, tree);
 extern tree digest_init                                (tree, tree, tsubst_flags_t);
 extern tree digest_init_flags                  (tree, tree, int);
+extern tree digest_nsdmi_init                  (tree, tree);
 extern tree build_scoped_ref                   (tree, tree, tree *);
 extern tree build_x_arrow                      (location_t, tree,
                                                 tsubst_flags_t);
@@ -6201,7 +6213,7 @@ extern tree cxx_omp_clause_default_ctor           (tree, tree, tree);
 extern tree cxx_omp_clause_copy_ctor           (tree, tree, tree);
 extern tree cxx_omp_clause_assign_op           (tree, tree, tree);
 extern tree cxx_omp_clause_dtor                        (tree, tree);
-extern void cxx_omp_finish_clause              (tree);
+extern void cxx_omp_finish_clause              (tree, gimple_seq *);
 extern bool cxx_omp_privatize_by_reference     (const_tree);
 
 /* in name-lookup.c */
index 3400594..19944ab 100644 (file)
@@ -5797,6 +5797,13 @@ check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
   if (init && init != error_mark_node)
     init_code = build2 (INIT_EXPR, type, decl, init);
 
+  if (init_code)
+    {
+      /* We might have set these in cp_finish_decl.  */
+      DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false;
+      TREE_CONSTANT (decl) = false;
+    }
+
   if (init_code && DECL_IN_AGGR_P (decl))
     {
       static int explained = 0;
index 699d545..87ca4e2 100644 (file)
@@ -318,6 +318,11 @@ dump_template_bindings (cxx_pretty_printer *pp, tree parms, tree args,
   if (vec_safe_is_empty (typenames) || uses_template_parms (args))
     return;
 
+  /* Don't try to print typenames when we're processing a clone.  */
+  if (current_function_decl
+      && !DECL_LANG_SPECIFIC (current_function_decl))
+    return;
+
   FOR_EACH_VEC_SAFE_ELT (typenames, i, t)
     {
       if (need_semicolon)
index fdc1011..960c39c 100644 (file)
@@ -339,7 +339,8 @@ build_value_init (tree type, tsubst_flags_t complain)
   gcc_assert (!processing_template_decl
              || (SCALAR_TYPE_P (type) || TREE_CODE (type) == ARRAY_TYPE));
 
-  if (type_build_ctor_call (type))
+  if (CLASS_TYPE_P (type)
+      && type_build_ctor_call (type))
     {
       tree ctor = build_aggr_init_expr
        (type,
@@ -521,6 +522,49 @@ perform_target_ctor (tree init)
     }
 }
 
+/* Return the non-static data initializer for FIELD_DECL MEMBER.  */
+
+tree
+get_nsdmi (tree member, bool in_ctor)
+{
+  tree init;
+  tree save_ccp = current_class_ptr;
+  tree save_ccr = current_class_ref;
+  if (!in_ctor)
+    inject_this_parameter (DECL_CONTEXT (member), TYPE_UNQUALIFIED);
+  if (DECL_LANG_SPECIFIC (member) && DECL_TEMPLATE_INFO (member))
+    {
+      /* Do deferred instantiation of the NSDMI.  */
+      init = (tsubst_copy_and_build
+             (DECL_INITIAL (DECL_TI_TEMPLATE (member)),
+              DECL_TI_ARGS (member),
+              tf_warning_or_error, member, /*function_p=*/false,
+              /*integral_constant_expression_p=*/false));
+
+      init = digest_nsdmi_init (member, init);
+    }
+  else
+    {
+      init = DECL_INITIAL (member);
+      if (init && TREE_CODE (init) == DEFAULT_ARG)
+       {
+         error ("constructor required before non-static data member "
+                "for %qD has been parsed", member);
+         DECL_INITIAL (member) = error_mark_node;
+         init = NULL_TREE;
+       }
+      /* Strip redundant TARGET_EXPR so we don't need to remap it, and
+        so the aggregate init code below will see a CONSTRUCTOR.  */
+      if (init && TREE_CODE (init) == TARGET_EXPR
+         && !VOID_TYPE_P (TREE_TYPE (TARGET_EXPR_INITIAL (init))))
+       init = TARGET_EXPR_INITIAL (init);
+      init = break_out_target_exprs (init);
+    }
+  current_class_ptr = save_ccp;
+  current_class_ref = save_ccr;
+  return init;
+}
+
 /* Initialize MEMBER, a FIELD_DECL, with INIT, a TREE_LIST of
    arguments.  If TREE_LIST is void_type_node, an empty initializer
    list was given; if NULL_TREE no initializer was given.  */
@@ -534,31 +578,7 @@ perform_member_init (tree member, tree init)
   /* Use the non-static data member initializer if there was no
      mem-initializer for this field.  */
   if (init == NULL_TREE)
-    {
-      if (DECL_LANG_SPECIFIC (member) && DECL_TEMPLATE_INFO (member))
-       /* Do deferred instantiation of the NSDMI.  */
-       init = (tsubst_copy_and_build
-               (DECL_INITIAL (DECL_TI_TEMPLATE (member)),
-                DECL_TI_ARGS (member),
-                tf_warning_or_error, member, /*function_p=*/false,
-                /*integral_constant_expression_p=*/false));
-      else
-       {
-         init = DECL_INITIAL (member);
-         if (init && TREE_CODE (init) == DEFAULT_ARG)
-           {
-             error ("constructor required before non-static data member "
-                    "for %qD has been parsed", member);
-             init = NULL_TREE;
-           }
-         /* Strip redundant TARGET_EXPR so we don't need to remap it, and
-            so the aggregate init code below will see a CONSTRUCTOR.  */
-         if (init && TREE_CODE (init) == TARGET_EXPR
-             && !VOID_TYPE_P (TREE_TYPE (TARGET_EXPR_INITIAL (init))))
-           init = TARGET_EXPR_INITIAL (init);
-         init = break_out_target_exprs (init);
-       }
-    }
+    init = get_nsdmi (member, /*ctor*/true);
 
   if (init == error_mark_node)
     return;
index 0b8b46a..7bd0de1 100644 (file)
@@ -201,6 +201,14 @@ lambda_function (tree lambda)
   return lambda;
 }
 
+static inline bool
+is_this (tree t)
+{
+  return ((TREE_CODE (t) == PARM_DECL
+          || TREE_CODE (t) == VAR_DECL)
+         && DECL_NAME (t) == this_identifier);
+}
+
 /* Returns the type to use for the FIELD_DECL corresponding to the
    capture of EXPR.
    The caller should add REFERENCE_TYPE for capture by reference.  */
@@ -216,8 +224,9 @@ lambda_capture_field_type (tree expr, bool explicit_init_p)
     }
   else
     type = non_reference (unlowered_expr_type (expr));
-  if (!type || WILDCARD_TYPE_P (type) || type_uses_auto (type)
-      || DECL_PACK_P (expr))
+  if (type_dependent_expression_p (expr)
+      && !is_this (tree_strip_nop_conversions (expr))
+      && !array_of_runtime_bound_p (type))
     {
       type = cxx_make_type (DECLTYPE_TYPE);
       DECLTYPE_TYPE_EXPR (type) = expr;
index da82dd6..c8f57d3 100644 (file)
@@ -752,6 +752,10 @@ decl_mangling_context (tree decl)
   if (tcontext != NULL_TREE)
     return tcontext;
 
+  if (TREE_CODE (decl) == TEMPLATE_DECL
+      && DECL_TEMPLATE_RESULT (decl))
+    decl = DECL_TEMPLATE_RESULT (decl);
+
   if (TREE_CODE (decl) == TYPE_DECL
       && LAMBDA_TYPE_P (TREE_TYPE (decl)))
     {
index f386eed..054f160 100644 (file)
@@ -1891,7 +1891,7 @@ static tree cp_parser_string_literal
 static tree cp_parser_userdef_char_literal
   (cp_parser *);
 static tree cp_parser_userdef_string_literal
-  (cp_token *);
+  (tree);
 static tree cp_parser_userdef_numeric_literal
   (cp_parser *);
 
@@ -3696,8 +3696,7 @@ cp_parser_string_literal (cp_parser *parser, bool translate, bool wide_ok)
        {
          tree literal = build_userdef_literal (suffix_id, value,
                                                OT_NONE, NULL_TREE);
-         tok->u.value = literal;
-         return cp_parser_userdef_string_literal (tok);
+         value = cp_parser_userdef_string_literal (literal);
        }
     }
   else
@@ -3945,9 +3944,8 @@ cp_parser_userdef_numeric_literal (cp_parser *parser)
    as arguments.  */
 
 static tree
-cp_parser_userdef_string_literal (cp_token *token)
+cp_parser_userdef_string_literal (tree literal)
 {
-  tree literal = token->u.value;
   tree suffix_id = USERDEF_LITERAL_SUFFIX_ID (literal);
   tree name = cp_literal_operator_id (IDENTIFIER_POINTER (suffix_id));
   tree value = USERDEF_LITERAL_VALUE (literal);
@@ -5835,20 +5833,6 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p,
          }
        break;
       }
-      
-    case RID_CILK_SYNC:
-      if (flag_cilkplus)
-       { 
-         tree sync_expr = build_cilk_sync ();
-         SET_EXPR_LOCATION (sync_expr, 
-                            cp_lexer_peek_token (parser->lexer)->location);
-         finish_expr_stmt (sync_expr);
-       }
-      else
-       error_at (token->location, "-fcilkplus must be enabled to use" 
-                 " %<_Cilk_sync%>");
-      cp_lexer_consume_token (parser->lexer);
-      break;
 
     case RID_BUILTIN_SHUFFLE:
       {
@@ -9400,6 +9384,24 @@ cp_parser_statement (cp_parser* parser, tree in_statement_expr,
          statement = cp_parser_jump_statement (parser);
          break;
 
+       case RID_CILK_SYNC:
+         cp_lexer_consume_token (parser->lexer);
+         if (flag_cilkplus)
+           {
+             tree sync_expr = build_cilk_sync ();
+             SET_EXPR_LOCATION (sync_expr,
+                                token->location);
+             statement = finish_expr_stmt (sync_expr);
+           }
+         else
+           {
+             error_at (token->location, "-fcilkplus must be enabled to use"
+                       " %<_Cilk_sync%>");
+             statement = error_mark_node;
+           }
+         cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
+         break;
+
          /* Objective-C++ exception-handling constructs.  */
        case RID_AT_TRY:
        case RID_AT_CATCH:
@@ -15045,6 +15047,18 @@ cp_parser_elaborated_type_specifier (cp_parser* parser,
        return cp_parser_make_typename_type (parser, parser->scope,
                                             identifier,
                                             token->location);
+
+      /* Template parameter lists apply only if we are not within a
+        function parameter list.  */
+      bool template_parm_lists_apply
+         = parser->num_template_parameter_lists;
+      if (template_parm_lists_apply)
+       for (cp_binding_level *s = current_binding_level;
+            s && s->kind != sk_template_parms;
+            s = s->level_chain)
+         if (s->kind == sk_function_parms)
+           template_parm_lists_apply = false;
+
       /* Look up a qualified name in the usual way.  */
       if (parser->scope)
        {
@@ -15087,7 +15101,7 @@ cp_parser_elaborated_type_specifier (cp_parser* parser,
 
          decl = (cp_parser_maybe_treat_template_as_class
                  (decl, /*tag_name_p=*/is_friend
-                        && parser->num_template_parameter_lists));
+                        && template_parm_lists_apply));
 
          if (TREE_CODE (decl) != TYPE_DECL)
            {
@@ -15100,9 +15114,9 @@ cp_parser_elaborated_type_specifier (cp_parser* parser,
 
          if (TREE_CODE (TREE_TYPE (decl)) != TYPENAME_TYPE)
             {
-              bool allow_template = (parser->num_template_parameter_lists
-                                     || DECL_SELF_REFERENCE_P (decl));
-              type = check_elaborated_type_specifier (tag_type, decl, 
+              bool allow_template = (template_parm_lists_apply
+                                    || DECL_SELF_REFERENCE_P (decl));
+              type = check_elaborated_type_specifier (tag_type, decl,
                                                       allow_template);
 
               if (type == error_mark_node)
@@ -15188,15 +15202,16 @@ cp_parser_elaborated_type_specifier (cp_parser* parser,
            ts = ts_global;
 
          template_p =
-           (parser->num_template_parameter_lists
+           (template_parm_lists_apply
             && (cp_parser_next_token_starts_class_definition_p (parser)
                 || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)));
          /* An unqualified name was used to reference this type, so
             there were no qualifying templates.  */
-         if (!cp_parser_check_template_parameters (parser,
-                                                   /*num_templates=*/0,
-                                                   token->location,
-                                                   /*declarator=*/NULL))
+         if (template_parm_lists_apply
+             && !cp_parser_check_template_parameters (parser,
+                                                      /*num_templates=*/0,
+                                                      token->location,
+                                                      /*declarator=*/NULL))
            return error_mark_node;
          type = xref_tag (tag_type, identifier, ts, template_p);
        }
@@ -17837,7 +17852,7 @@ cp_parser_virt_specifier_seq_opt (cp_parser* parser)
 /* Used by handling of trailing-return-types and NSDMI, in which 'this'
    is in scope even though it isn't real.  */
 
-static void
+void
 inject_this_parameter (tree ctype, cp_cv_quals quals)
 {
   tree this_parm;
@@ -23090,10 +23105,17 @@ cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
            ok = false;
        }
       if (!ok)
-       error ("literal operator template %qD has invalid parameter list."
-              "  Expected non-type template argument pack <char...>"
-              " or <typename CharT, CharT...>",
-              decl);
+       {
+         if (cxx_dialect >= cxx1y)
+           error ("literal operator template %qD has invalid parameter list."
+                  "  Expected non-type template argument pack <char...>"
+                  " or <typename CharT, CharT...>",
+                  decl);
+         else
+           error ("literal operator template %qD has invalid parameter list."
+                  "  Expected non-type template argument pack <char...>",
+                  decl);
+       }
     }
   /* Register member declarations.  */
   if (member_p && !friend_p && decl && !DECL_CLASS_TEMPLATE_P (decl))
@@ -23664,16 +23686,7 @@ cp_parser_late_parse_one_default_arg (cp_parser *parser, tree decl,
        parsed_arg = check_default_argument (parmtype, parsed_arg,
                                             tf_warning_or_error);
       else
-       {
-         int flags = LOOKUP_IMPLICIT;
-         if (BRACE_ENCLOSED_INITIALIZER_P (parsed_arg)
-             && CONSTRUCTOR_IS_DIRECT_INIT (parsed_arg))
-           flags = LOOKUP_NORMAL;
-         parsed_arg = digest_init_flags (TREE_TYPE (decl), parsed_arg, flags);
-         if (TREE_CODE (parsed_arg) == TARGET_EXPR)
-           /* This represents the whole initialization.  */
-           TARGET_EXPR_DIRECT_INIT_P (parsed_arg) = true;
-       }
+       parsed_arg = digest_nsdmi_init (decl, parsed_arg);
     }
 
   /* If the token stream has not been completely used up, then
@@ -28530,6 +28543,20 @@ cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok)
       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
       const char *p = IDENTIFIER_POINTER (id);
 
+      if (!strcmp (p, "seq_cst"))
+       {
+         seq_cst = true;
+         cp_lexer_consume_token (parser->lexer);
+         if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA)
+             && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_NAME)
+           cp_lexer_consume_token (parser->lexer);
+       }
+    }
+  if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
+    {
+      tree id = cp_lexer_peek_token (parser->lexer)->u.value;
+      const char *p = IDENTIFIER_POINTER (id);
+
       if (!strcmp (p, "read"))
        code = OMP_ATOMIC_READ;
       else if (!strcmp (p, "write"))
@@ -28543,16 +28570,22 @@ cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok)
       if (p)
        cp_lexer_consume_token (parser->lexer);
     }
-
-  if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
+  if (!seq_cst)
     {
-      tree id = cp_lexer_peek_token (parser->lexer)->u.value;
-      const char *p = IDENTIFIER_POINTER (id);
+      if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA)
+         && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_NAME)
+       cp_lexer_consume_token (parser->lexer);
 
-      if (!strcmp (p, "seq_cst"))
+      if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
        {
-         seq_cst = true;
-         cp_lexer_consume_token (parser->lexer);
+         tree id = cp_lexer_peek_token (parser->lexer)->u.value;
+         const char *p = IDENTIFIER_POINTER (id);
+
+         if (!strcmp (p, "seq_cst"))
+           {
+             seq_cst = true;
+             cp_lexer_consume_token (parser->lexer);
+           }
        }
     }
   cp_parser_require_pragma_eol (parser, pragma_tok);
@@ -29341,9 +29374,17 @@ cp_parser_omp_for_loop (cp_parser *parser, enum tree_code code, tree clauses,
                   change it to shared (decl) in OMP_PARALLEL_CLAUSES.  */
                tree l = build_omp_clause (loc, OMP_CLAUSE_LASTPRIVATE);
                OMP_CLAUSE_DECL (l) = real_decl;
-               OMP_CLAUSE_CHAIN (l) = clauses;
                CP_OMP_CLAUSE_INFO (l) = CP_OMP_CLAUSE_INFO (*c);
-               clauses = l;
+               if (code == OMP_SIMD)
+                 {
+                   OMP_CLAUSE_CHAIN (l) = cclauses[C_OMP_CLAUSE_SPLIT_FOR];
+                   cclauses[C_OMP_CLAUSE_SPLIT_FOR] = l;
+                 }
+               else
+                 {
+                   OMP_CLAUSE_CHAIN (l) = clauses;
+                   clauses = l;
+                 }
                OMP_CLAUSE_SET_CODE (*c, OMP_CLAUSE_SHARED);
                CP_OMP_CLAUSE_INFO (*c) = NULL;
                add_private_clause = false;
@@ -29825,10 +29866,12 @@ cp_parser_omp_parallel (cp_parser *parser, cp_token *pragma_tok,
        return cp_parser_omp_for (parser, pragma_tok, p_name, mask, cclauses);
       block = begin_omp_parallel ();
       save = cp_parser_begin_omp_structured_block (parser);
-      cp_parser_omp_for (parser, pragma_tok, p_name, mask, cclauses);
+      tree ret = cp_parser_omp_for (parser, pragma_tok, p_name, mask, cclauses);
       cp_parser_end_omp_structured_block (parser, save);
       stmt = finish_omp_parallel (cclauses[C_OMP_CLAUSE_SPLIT_PARALLEL],
                                  block);
+      if (ret == NULL_TREE)
+       return ret;
       OMP_PARALLEL_COMBINED (stmt) = 1;
       return stmt;
     }
index 318c325..05ae382 100644 (file)
@@ -462,9 +462,13 @@ maybe_begin_member_template_processing (tree decl)
   bool nsdmi = TREE_CODE (decl) == FIELD_DECL;
 
   if (nsdmi)
-    decl = (CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
-           ? CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (decl))
-           : NULL_TREE);
+    {
+      tree ctx = DECL_CONTEXT (decl);
+      decl = (CLASSTYPE_TEMPLATE_INFO (ctx)
+             /* Disregard full specializations (c++/60999).  */
+             && uses_template_parms (ctx)
+             ? CLASSTYPE_TI_TEMPLATE (ctx) : NULL_TREE);
+    }
 
   if (inline_needs_template_parms (decl, nsdmi))
     {
@@ -4419,7 +4423,8 @@ check_default_tmpl_args (tree decl, tree parms, bool is_primary,
      in the template-parameter-list of the definition of a member of a
      class template.  */
 
-  if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
+  if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL
+      || (TREE_CODE (decl) == FUNCTION_DECL && DECL_LOCAL_FUNCTION_P (decl)))
     /* You can't have a function template declaration in a local
        scope, nor you can you define a member of a class template in a
        local scope.  */
@@ -5341,6 +5346,10 @@ check_valid_ptrmem_cst_expr (tree type, tree expr,
     return true;
   if (cxx_dialect >= cxx11 && null_member_pointer_value_p (expr))
     return true;
+  if (processing_template_decl
+      && TREE_CODE (expr) == ADDR_EXPR
+      && TREE_CODE (TREE_OPERAND (expr, 0)) == OFFSET_REF)
+    return true;
   if (complain & tf_error)
     {
       error ("%qE is not a valid template argument for type %qT",
@@ -5817,17 +5826,18 @@ convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
        {
          if (VAR_P (expr))
            {
-             error ("%qD is not a valid template argument "
-                    "because %qD is a variable, not the address of "
-                    "a variable",
-                    expr, expr);
+             if (complain & tf_error)
+               error ("%qD is not a valid template argument "
+                      "because %qD is a variable, not the address of "
+                      "a variable", expr, expr);
              return NULL_TREE;
            }
          if (POINTER_TYPE_P (expr_type))
            {
-             error ("%qE is not a valid template argument for %qT "
-                    "because it is not the address of a variable",
-                    expr, type);
+             if (complain & tf_error)
+               error ("%qE is not a valid template argument for %qT "
+                      "because it is not the address of a variable",
+                      expr, type);
              return NULL_TREE;
            }
          /* Other values, like integer constants, might be valid
@@ -5842,23 +5852,24 @@ convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
                  ? TREE_OPERAND (expr, 0) : expr);
          if (!VAR_P (decl))
            {
-             error ("%qE is not a valid template argument of type %qT "
-                    "because %qE is not a variable",
-                    expr, type, decl);
+             if (complain & tf_error)
+               error ("%qE is not a valid template argument of type %qT "
+                      "because %qE is not a variable", expr, type, decl);
              return NULL_TREE;
            }
          else if (cxx_dialect < cxx11 && !DECL_EXTERNAL_LINKAGE_P (decl))
            {
-             error ("%qE is not a valid template argument of type %qT "
-                    "because %qD does not have external linkage",
-                    expr, type, decl);
+             if (complain & tf_error)
+               error ("%qE is not a valid template argument of type %qT "
+                      "because %qD does not have external linkage",
+                      expr, type, decl);
              return NULL_TREE;
            }
          else if (cxx_dialect >= cxx11 && decl_linkage (decl) == lk_none)
            {
-             error ("%qE is not a valid template argument of type %qT "
-                    "because %qD has no linkage",
-                    expr, type, decl);
+             if (complain & tf_error)
+               error ("%qE is not a valid template argument of type %qT "
+                      "because %qD has no linkage", expr, type, decl);
              return NULL_TREE;
            }
        }
@@ -5886,15 +5897,17 @@ convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
 
       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
        {
-         error ("%qE is not a valid template argument for type %qT "
-                "because of conflicts in cv-qualification", expr, type);
+         if (complain & tf_error)
+           error ("%qE is not a valid template argument for type %qT "
+                  "because of conflicts in cv-qualification", expr, type);
          return NULL_TREE;
        }
 
       if (!real_lvalue_p (expr))
        {
-         error ("%qE is not a valid template argument for type %qT "
-                "because it is not an lvalue", expr, type);
+         if (complain & tf_error)
+           error ("%qE is not a valid template argument for type %qT "
+                  "because it is not an lvalue", expr, type);
          return NULL_TREE;
        }
 
@@ -5910,26 +5923,29 @@ convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
          expr = TREE_OPERAND (expr, 0);
          if (DECL_P (expr))
            {
-             error ("%q#D is not a valid template argument for type %qT "
-                    "because a reference variable does not have a constant "
-                    "address", expr, type);
+             if (complain & tf_error)
+               error ("%q#D is not a valid template argument for type %qT "
+                      "because a reference variable does not have a constant "
+                      "address", expr, type);
              return NULL_TREE;
            }
        }
 
       if (!DECL_P (expr))
        {
-         error ("%qE is not a valid template argument for type %qT "
-                "because it is not an object with external linkage",
-                expr, type);
+         if (complain & tf_error)
+           error ("%qE is not a valid template argument for type %qT "
+                  "because it is not an object with external linkage",
+                  expr, type);
          return NULL_TREE;
        }
 
       if (!DECL_EXTERNAL_LINKAGE_P (expr))
        {
-         error ("%qE is not a valid template argument for type %qT "
-                "because object %qD has not external linkage",
-                expr, type, expr);
+         if (complain & tf_error)
+           error ("%qE is not a valid template argument for type %qT "
+                  "because object %qD has not external linkage",
+                  expr, type, expr);
          return NULL_TREE;
        }
 
@@ -5971,9 +5987,13 @@ convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
     {
       if (TREE_CODE (expr) == ADDR_EXPR)
        {
-         error ("%qE is not a valid template argument for type %qT "
-                "because it is a pointer", expr, type);
-         inform (input_location, "try using %qE instead", TREE_OPERAND (expr, 0));
+         if (complain & tf_error)
+           {
+             error ("%qE is not a valid template argument for type %qT "
+                    "because it is a pointer", expr, type);
+             inform (input_location, "try using %qE instead",
+                     TREE_OPERAND (expr, 0));
+           }
          return NULL_TREE;
        }
 
@@ -6011,13 +6031,16 @@ convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
         provide a superior diagnostic.  */
       if (!same_type_p (TREE_TYPE (expr), type))
        {
-         error ("%qE is not a valid template argument for type %qT "
-                "because it is of type %qT", expr, type,
-                TREE_TYPE (expr));
-         /* If we are just one standard conversion off, explain.  */
-         if (can_convert_standard (type, TREE_TYPE (expr), complain))
-           inform (input_location,
-                   "standard conversions are not allowed in this context");
+         if (complain & tf_error)
+           {
+             error ("%qE is not a valid template argument for type %qT "
+                    "because it is of type %qT", expr, type,
+                    TREE_TYPE (expr));
+             /* If we are just one standard conversion off, explain.  */
+             if (can_convert_standard (type, TREE_TYPE (expr), complain))
+               inform (input_location,
+                       "standard conversions are not allowed in this context");
+           }
          return NULL_TREE;
        }
     }
@@ -6040,8 +6063,9 @@ convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
     {
       if (expr != nullptr_node)
        {
-         error ("%qE is not a valid template argument for type %qT "
-                "because it is of type %qT", expr, type, TREE_TYPE (expr));
+         if (complain & tf_error)
+           error ("%qE is not a valid template argument for type %qT "
+                  "because it is of type %qT", expr, type, TREE_TYPE (expr));
          return NULL_TREE;
        }
       return expr;
@@ -12638,13 +12662,17 @@ tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
                }
              else
                {
-                 /* This can happen for a variable used in a late-specified
-                    return type of a local lambda.  Just make a dummy decl
-                    since it's only used for its type.  */
-                 if (cp_unevaluated_operand)
-                   return tsubst_decl (t, args, complain);
-                 gcc_assert (errorcount || sorrycount);
-                 return error_mark_node;
+                 /* This can happen for a variable used in a
+                    late-specified return type of a local lambda, or for a
+                    local static or constant.  Building a new VAR_DECL
+                    should be OK in all those cases.  */
+                 r = tsubst_decl (t, args, complain);
+                 if (decl_constant_var_p (r))
+                   /* A use of a local constant must decay to its value.  */
+                   return integral_constant_value (r);
+                 gcc_assert (cp_unevaluated_operand || TREE_STATIC (r)
+                             || errorcount || sorrycount);
+                 return r;
                }
            }
        }
@@ -15613,7 +15641,7 @@ pack_deducible_p (tree parm, tree fn)
        continue;
       for (packs = PACK_EXPANSION_PARAMETER_PACKS (type);
           packs; packs = TREE_CHAIN (packs))
-       if (TREE_VALUE (packs) == parm)
+       if (template_args_equal (TREE_VALUE (packs), parm))
          {
            /* The template parameter pack is used in a function parameter
               pack.  If this is the end of the parameter list, the
@@ -16337,8 +16365,9 @@ unify_one_argument (tree tparms, tree targs, tree parm, tree arg,
        maybe_adjust_types_for_deduction (strict, &parm, &arg, arg_expr);
     }
   else
-    gcc_assert ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
-               == (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL));
+    if ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
+       != (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL))
+      return unify_template_argument_mismatch (explain_p, parm, arg);
 
   /* For deduction from an init-list we need the actual list.  */
   if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
@@ -16674,7 +16703,16 @@ resolve_overloaded_unification (tree tparms,
       int i = TREE_VEC_LENGTH (targs);
       for (; i--; )
        if (TREE_VEC_ELT (tempargs, i))
-         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
+         {
+           tree old = TREE_VEC_ELT (targs, i);
+           tree new_ = TREE_VEC_ELT (tempargs, i);
+           if (new_ && old && ARGUMENT_PACK_P (old)
+               && ARGUMENT_PACK_EXPLICIT_ARGS (old))
+             /* Don't forget explicit template arguments in a pack.  */
+             ARGUMENT_PACK_EXPLICIT_ARGS (new_)
+               = ARGUMENT_PACK_EXPLICIT_ARGS (old);
+           TREE_VEC_ELT (targs, i) = new_;
+         }
     }
   if (good)
     return true;
@@ -20913,7 +20951,12 @@ type_dependent_expression_p (tree expression)
        return true;
 
       if (BASELINK_P (expression))
-       expression = BASELINK_FUNCTIONS (expression);
+       {
+         if (BASELINK_OPTYPE (expression)
+             && dependent_type_p (BASELINK_OPTYPE (expression)))
+           return true;
+         expression = BASELINK_FUNCTIONS (expression);
+       }
 
       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
        {
index 3619e27..d6f3a73 100644 (file)
@@ -2600,7 +2600,6 @@ finish_compound_literal (tree type, tree compound_literal,
   if ((!at_function_scope_p () || CP_TYPE_CONST_P (type))
       && TREE_CODE (type) == ARRAY_TYPE
       && !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
-      && !cp_unevaluated_operand
       && initializer_constant_valid_p (compound_literal, type))
     {
       tree decl = create_temporary_var (type);
@@ -3867,6 +3866,7 @@ simplify_aggr_init_expr (tree *tp)
                                    aggr_init_expr_nargs (aggr_init_expr),
                                    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);
 
   if (style == ctor)
     {
@@ -5283,6 +5283,8 @@ finish_omp_clauses (tree clauses)
                          break;
                        }
                    }
+                 else
+                   t = fold_convert (TREE_TYPE (OMP_CLAUSE_DECL (c)), t);
                }
              OMP_CLAUSE_LINEAR_STEP (c) = t;
            }
@@ -8511,11 +8513,24 @@ cxx_eval_call_expression (const constexpr_call *old_call, tree t,
 bool
 reduced_constant_expression_p (tree t)
 {
-  if (TREE_CODE (t) == PTRMEM_CST)
-    /* Even if we can't lower this yet, it's constant.  */
-    return true;
-  /* FIXME are we calling this too much?  */
-  return initializer_constant_valid_p (t, TREE_TYPE (t)) != NULL_TREE;
+  switch (TREE_CODE (t))
+    {
+    case PTRMEM_CST:
+      /* Even if we can't lower this yet, it's constant.  */
+      return true;
+
+    case CONSTRUCTOR:
+      /* And we need to handle PTRMEM_CST wrapped in a CONSTRUCTOR.  */
+      tree elt; unsigned HOST_WIDE_INT idx;
+      FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (t), idx, elt)
+       if (!reduced_constant_expression_p (elt))
+         return false;
+      return true;
+
+    default:
+      /* FIXME are we calling this too much?  */
+      return initializer_constant_valid_p (t, TREE_TYPE (t)) != NULL_TREE;
+    }
 }
 
 /* Some expressions may have constant operands but are not constant
index 3429d23..622ba99 100644 (file)
@@ -101,6 +101,16 @@ lvalue_kind (const_tree ref)
     case IMAGPART_EXPR:
       return lvalue_kind (TREE_OPERAND (ref, 0));
 
+    case MEMBER_REF:
+    case DOTSTAR_EXPR:
+      if (TREE_CODE (ref) == MEMBER_REF)
+       op1_lvalue_kind = clk_ordinary;
+      else
+       op1_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 0));
+      if (TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (ref, 1))))
+       op1_lvalue_kind = clk_none;
+      return op1_lvalue_kind;
+
     case COMPONENT_REF:
       op1_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 0));
       /* Look at the member designator.  */
@@ -453,6 +463,7 @@ build_aggr_init_expr (tree type, tree init)
       TREE_SIDE_EFFECTS (rval) = 1;
       AGGR_INIT_VIA_CTOR_P (rval) = is_ctor;
       TREE_NOTHROW (rval) = TREE_NOTHROW (init);
+      CALL_EXPR_LIST_INIT_P (rval) = CALL_EXPR_LIST_INIT_P (init);
     }
   else
     rval = init;
index 68e518a..0bdad2a 100644 (file)
@@ -1097,6 +1097,22 @@ digest_init_flags (tree type, tree init, int flags)
 {
   return digest_init_r (type, init, false, flags, tf_warning_or_error);
 }
+
+/* Process the initializer INIT for an NSDMI DECL (a FIELD_DECL).  */
+tree
+digest_nsdmi_init (tree decl, tree init)
+{
+  gcc_assert (TREE_CODE (decl) == FIELD_DECL);
+
+  int flags = LOOKUP_IMPLICIT;
+  if (DIRECT_LIST_INIT_P (init))
+    flags = LOOKUP_NORMAL;
+  init = digest_init_flags (TREE_TYPE (decl), init, flags);
+  if (TREE_CODE (init) == TARGET_EXPR)
+    /* This represents the whole initialization.  */
+    TARGET_EXPR_DIRECT_INIT_P (init) = true;
+  return init;
+}
 \f
 /* Set of flags used within process_init_constructor to describe the
    initializers.  */
@@ -1138,7 +1154,7 @@ massage_init_elt (tree type, tree init, tsubst_flags_t complain)
   /* When we defer constant folding within a statement, we may want to
      defer this folding as well.  */
   tree t = fold_non_dependent_expr_sfinae (init, complain);
-  t = maybe_constant_value (t);
+  t = maybe_constant_init (t);
   if (TREE_CONSTANT (t))
     init = t;
   return init;
index 1afeb58..8188151 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "AOT-COMPILE 1"
-.TH AOT-COMPILE 1 "2014-04-22" "gcc-4.9.0" "GNU"
+.TH AOT-COMPILE 1 "2014-07-16" "gcc-4.9.1" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index e68f4cd..8c5523e 100644 (file)
@@ -4,6 +4,10 @@
 
 @subsubsection CRC32 intrinsics
 
+These intrinsics are available when the CRC32 architecture extension is
+specified, e.g. when the @option{-march=armv8-a+crc} switch is used, or when
+the target processor specified with @option{-mcpu} supports it.
+
 @itemize @bullet
 @item uint32_t __crc32b (uint32_t, uint8_t)
 @*@emph{Form of expected instruction(s):} @code{crc32b @var{r0}, @var{r0}, @var{r0}}
@@ -25,8 +29,7 @@
 @itemize @bullet
 @item uint32_t __crc32d (uint32_t, uint64_t)
 @*@emph{Form of expected instruction(s):} Two @code{crc32w @var{r0}, @var{r0}, @var{r0}}
-instructions for AArch32. One @code{crc32w @var{w0}, @var{w0}, @var{x0}} instruction for
-AArch64.
+instructions.
 @end itemize
 
 @itemize @bullet
@@ -50,6 +53,5 @@ AArch64.
 @itemize @bullet
 @item uint32_t __crc32cd (uint32_t, uint64_t)
 @*@emph{Form of expected instruction(s):} Two @code{crc32cw @var{r0}, @var{r0}, @var{r0}}
-instructions for AArch32. One @code{crc32cw @var{w0}, @var{w0}, @var{x0}} instruction for
-AArch64.
+instructions.
 @end itemize
index 67f84e0..56987e4 100644 (file)
@@ -2,8 +2,6 @@
 @c This is part of the GCC manual.
 @c For copying conditions, see the file gcc.texi.
 
-@c This file is generated automatically using gcc/config/arm/neon-docgen.ml
-@c Please do not edit manually.
 @subsubsection Addition
 
 @itemize @bullet
index 0c34e84..c77a170 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "CPP 1"
-.TH CPP 1 "2014-04-22" "gcc-4.9.0" "GNU"
+.TH CPP 1 "2014-07-16" "gcc-4.9.1" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 347a94a..10ad6e4 100644 (file)
@@ -376,6 +376,8 @@ goto *(&&foo + array[i]);
 This is more friendly to code living in shared libraries, as it reduces
 the number of dynamic relocations that are needed, and by consequence,
 allows the data to be read-only.
+This alternative with label differences is not supported for the AVR target,
+please use the first approach for AVR programs.
 
 The @code{&&foo} expressions for the same label might have different
 values if the containing function is inlined or cloned.  If a program
@@ -9913,9 +9915,6 @@ when the @option{-mfpu=neon} switch is used:
 @node ARM ACLE Intrinsics
 @subsection ARM ACLE Intrinsics
 
-These built-in intrinsics for the ARMv8-A CRC32 extension are available when
-the @option{-march=armv8-a+crc} switch is used:
-
 @include arm-acle-intrinsics.texi
 
 @node AVR Built-in Functions
@@ -11335,7 +11334,7 @@ used. All of them generate the machine instruction that is part of the
 name.
 
 @smallexample
-v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,v32qi,int)
+v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,int)
 v32qi __builtin_ia32_pabsb256 (v32qi)
 v16hi __builtin_ia32_pabsw256 (v16hi)
 v8si __builtin_ia32_pabsd256 (v8si)
@@ -11570,8 +11569,8 @@ The following built-in functions are available when @option{-mxop} is used.
 @smallexample
 v2df __builtin_ia32_vfrczpd (v2df)
 v4sf __builtin_ia32_vfrczps (v4sf)
-v2df __builtin_ia32_vfrczsd (v2df, v2df)
-v4sf __builtin_ia32_vfrczss (v4sf, v4sf)
+v2df __builtin_ia32_vfrczsd (v2df)
+v4sf __builtin_ia32_vfrczss (v4sf)
 v4df __builtin_ia32_vfrczpd256 (v4df)
 v8sf __builtin_ia32_vfrczps256 (v8sf)
 v2di __builtin_ia32_vpcmov (v2di, v2di, v2di)
@@ -12787,9 +12786,10 @@ float __builtin_recipdivf (float, float);
 float __builtin_rsqrtf (float);
 double __builtin_recipdiv (double, double);
 double __builtin_rsqrt (double);
-long __builtin_bpermd (long, long);
 uint64_t __builtin_ppc_get_timebase ();
 unsigned long __builtin_ppc_mftb ();
+double __builtin_unpack_longdouble (long double, int);
+long double __builtin_pack_longdouble (double, double);
 @end smallexample
 
 The @code{vec_rsqrt}, @code{__builtin_rsqrt}, and
@@ -12809,6 +12809,57 @@ The @code{__builtin_ppc_mftb} function always generates one instruction and
 returns the Time Base Register value as an unsigned long, throwing away
 the most significant word on 32-bit environments.
 
+The following built-in functions are available for the PowerPC family
+of processors, starting with ISA 2.06 or later (@option{-mcpu=power7}
+or @option{-mpopcntd}):
+@smallexample
+long __builtin_bpermd (long, long);
+int __builtin_divwe (int, int);
+int __builtin_divweo (int, int);
+unsigned int __builtin_divweu (unsigned int, unsigned int);
+unsigned int __builtin_divweuo (unsigned int, unsigned int);
+long __builtin_divde (long, long);
+long __builtin_divdeo (long, long);
+unsigned long __builtin_divdeu (unsigned long, unsigned long);
+unsigned long __builtin_divdeuo (unsigned long, unsigned long);
+unsigned int cdtbcd (unsigned int);
+unsigned int cbcdtd (unsigned int);
+unsigned int addg6s (unsigned int, unsigned int);
+@end smallexample
+
+The @code{__builtin_divde}, @code{__builtin_divdeo},
+@code{__builitin_divdeu}, @code{__builtin_divdeou} functions require a
+64-bit environment support ISA 2.06 or later.
+
+The following built-in functions are available for the PowerPC family
+of processors when hardware decimal floating point
+(@option{-mhard-dfp}) is available:
+@smallexample
+_Decimal64 __builtin_dxex (_Decimal64);
+_Decimal128 __builtin_dxexq (_Decimal128);
+_Decimal64 __builtin_ddedpd (int, _Decimal64);
+_Decimal128 __builtin_ddedpdq (int, _Decimal128);
+_Decimal64 __builtin_denbcd (int, _Decimal64);
+_Decimal128 __builtin_denbcdq (int, _Decimal128);
+_Decimal64 __builtin_diex (_Decimal64, _Decimal64);
+_Decimal128 _builtin_diexq (_Decimal128, _Decimal128);
+_Decimal64 __builtin_dscli (_Decimal64, int);
+_Decimal128 __builitn_dscliq (_Decimal128, int);
+_Decimal64 __builtin_dscri (_Decimal64, int);
+_Decimal128 __builitn_dscriq (_Decimal128, int);
+unsigned long long __builtin_unpack_dec128 (_Decimal128, int);
+_Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long);
+@end smallexample
+
+The following built-in functions are available for the PowerPC family
+of processors when the Vector Scalar (vsx) instruction set is
+available:
+@smallexample
+unsigned long long __builtin_unpack_vector_int128 (vector __int128_t, int);
+vector __int128_t __builtin_pack_vector_int128 (unsigned long long,
+                                                unsigned long long);
+@end smallexample
+
 @node PowerPC AltiVec/VSX Built-in Functions
 @subsection PowerPC AltiVec Built-in Functions
 
@@ -15220,6 +15271,17 @@ vector __uint128_t vec_vsubcuq (vector __uint128_t, vector __uint128_t);
 
 __int128_t vec_vsubuqm (__int128_t, __int128_t);
 __uint128_t vec_vsubuqm (__uint128_t, __uint128_t);
+
+vector __int128_t __builtin_bcdadd (vector __int128_t, vector__int128_t);
+int __builtin_bcdadd_lt (vector __int128_t, vector__int128_t);
+int __builtin_bcdadd_eq (vector __int128_t, vector__int128_t);
+int __builtin_bcdadd_gt (vector __int128_t, vector__int128_t);
+int __builtin_bcdadd_ov (vector __int128_t, vector__int128_t);
+vector __int128_t bcdsub (vector __int128_t, vector__int128_t);
+int __builtin_bcdsub_lt (vector __int128_t, vector__int128_t);
+int __builtin_bcdsub_eq (vector __int128_t, vector__int128_t);
+int __builtin_bcdsub_gt (vector __int128_t, vector__int128_t);
+int __builtin_bcdsub_ov (vector __int128_t, vector__int128_t);
 @end smallexample
 
 If the cryptographic instructions are enabled (@option{-mcrypto} or
index 9e91dee..d674ebd 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "FSF-FUNDING 7"
-.TH FSF-FUNDING 7 "2014-04-22" "gcc-4.9.0" "GNU"
+.TH FSF-FUNDING 7 "2014-07-16" "gcc-4.9.1" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 1ed57fc..c2d44ea 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "GCC 1"
-.TH GCC 1 "2014-04-22" "gcc-4.9.0" "GNU"
+.TH GCC 1 "2014-07-16" "gcc-4.9.1" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -846,7 +846,8 @@ in the following sections.
 \&\fB\-meb \-mel \-mno\-crt0\fR
 .Sp
 \&\fI\s-1MSP430\s0 Options\fR
-\&\fB\-msim \-masm\-hex \-mmcu= \-mcpu= \-mlarge \-msmall \-mrelax\fR
+\&\fB\-msim \-masm\-hex \-mmcu= \-mcpu= \-mlarge \-msmall \-mrelax 
+\&\-mhwmult=\fR
 .Sp
 \&\fI\s-1NDS32\s0 Options\fR
 \&\fB\-mbig\-endian \-mlittle\-endian 
@@ -998,7 +999,7 @@ See \s-1RS/6000\s0 and PowerPC Options.
 \&\-mpretend\-cmove \-mtas\fR
 .Sp
 \&\fISolaris 2 Options\fR
-\&\fB\-mimpure\-text  \-mno\-impure\-text 
+\&\fB\-mclear\-hwcap \-mno\-clear\-hwcap \-mimpure\-text  \-mno\-impure\-text 
 \&\-pthreads \-pthread\fR
 .Sp
 \&\fI\s-1SPARC\s0 Options\fR
@@ -1012,6 +1013,7 @@ See \s-1RS/6000\s0 and PowerPC Options.
 \&\-mhard\-quad\-float  \-msoft\-quad\-float 
 \&\-mstack\-bias  \-mno\-stack\-bias 
 \&\-munaligned\-doubles  \-mno\-unaligned\-doubles 
+\&\-muser\-mode  \-mno\-user\-mode 
 \&\-mv8plus  \-mno\-v8plus  \-mvis  \-mno\-vis 
 \&\-mvis2  \-mno\-vis2  \-mvis3  \-mno\-vis3 
 \&\-mcbcond \-mno\-cbcond 
@@ -6743,7 +6745,8 @@ Attempt to remove redundant extension instructions.  This is especially
 helpful for the x86\-64 architecture, which implicitly zero-extends in 64\-bit
 registers after writing to their lower 32\-bit half.
 .Sp
-Enabled for AArch64 and x86 at levels \fB\-O2\fR, \fB\-O3\fR.
+Enabled for Alpha, AArch64 and x86 at levels \fB\-O2\fR,
+\&\fB\-O3\fR, \fB\-Os\fR.
 .IP "\fB\-flive\-range\-shrinkage\fR" 4
 .IX Item "-flive-range-shrinkage"
 Attempt to decrease register pressure through register live range
@@ -9255,6 +9258,28 @@ IPA-CP attempts to track all possible values and types passed to a function's
 parameter in order to propagate them and perform devirtualization.
 \&\fBipa-cp-value-list-size\fR is the maximum number of values and types it
 stores per one formal parameter of a function.
+.IP "\fBipa-cp-eval-threshold\fR" 4
+.IX Item "ipa-cp-eval-threshold"
+IPA-CP calculates its own score of cloning profitability heuristics
+and performs those cloning opportunities with scores that exceed
+\&\fBipa-cp-eval-threshold\fR.
+.IP "\fBipa-max-agg-items\fR" 4
+.IX Item "ipa-max-agg-items"
+IPA-CP is also capable to propagate a number of scalar values passed
+in an aggregate. \fBipa-max-agg-items\fR controls the maximum
+number of such values per one parameter.
+.IP "\fBipa-cp-loop-hint-bonus\fR" 4
+.IX Item "ipa-cp-loop-hint-bonus"
+When IPA-CP determines that a cloning candidate would make the number
+of iterations of a loop known, it adds a bonus of
+\&\fBipa-cp-loop-hint-bonus\fR bonus to the profitability score of
+the candidate.
+.IP "\fBipa-cp-array-index-hint-bonus\fR" 4
+.IX Item "ipa-cp-array-index-hint-bonus"
+When IPA-CP determines that a cloning candidate would make the index of
+an array access known, it adds a bonus of
+\&\fBipa-cp-array-index-hint-bonus\fR bonus to the profitability
+score of the candidate.
 .IP "\fBlto-partitions\fR" 4
 .IX Item "lto-partitions"
 Specify desired number of partitions produced during \s-1WHOPR\s0 compilation.
@@ -17176,6 +17201,27 @@ Use small-model addressing (16\-bit pointers, 16\-bit \f(CW\*(C`size_t\*(C'\fR).
 This option is passed to the assembler and linker, and allows the
 linker to perform certain optimizations that cannot be done until
 the final link.
+.IP "\fBmhwmult=\fR" 4
+.IX Item "mhwmult="
+Describes the type of hardware multiply supported by the target.
+Accepted values are \f(CW\*(C`none\*(C'\fR for no hardware multiply, \f(CW\*(C`16bit\*(C'\fR
+for the original 16\-bit\-only multiply supported by early MCUs.
+\&\f(CW\*(C`32bit\*(C'\fR for the 16/32\-bit multiply supported by later MCUs and
+\&\f(CW\*(C`f5series\*(C'\fR for the 16/32\-bit multiply supported by F5\-series MCUs.
+A value of \f(CW\*(C`auto\*(C'\fR can also be given.  This tells \s-1GCC\s0 to deduce
+the hardware multiply support based upon the \s-1MCU\s0 name provided by the
+\&\fB\-mmcu\fR option.  If no \fB\-mmcu\fR option is specified then
+\&\f(CW\*(C`32bit\*(C'\fR hardware multiply support is assumed.  \f(CW\*(C`auto\*(C'\fR is the
+default setting.
+.Sp
+Hardware multiplies are normally performed by calling a library
+routine.  This saves space in the generated code.  When compiling at
+\&\f(CW\*(C`\-O3\*(C'\fR or higher however the hardware multiplier is invoked
+inline.  This makes for bigger, but faster code.
+.Sp
+The hardware multiply routines disable interrupts whilst running and
+restore the previous interrupt state when they finish.  This makes
+them safe to use inside interrupt handlers as well as in normal code.
 .PP
 \fI\s-1NDS32\s0 Options\fR
 .IX Subsection "NDS32 Options"
@@ -19634,6 +19680,12 @@ patterns.  This can result in faster code on the \s-1SH4\s0 processor.
 .IX Subsection "Solaris 2 Options"
 .PP
 These \fB\-m\fR options are supported on Solaris 2:
+.IP "\fB\-mclear\-hwcap\fR" 4
+.IX Item "-mclear-hwcap"
+\&\fB\-mclear\-hwcap\fR tells the compiler to remove the hardware
+capabilities generated by the Solaris assembler.  This is only necessary
+when object files use \s-1ISA\s0 extensions not supported by the current
+machine, but check at runtime whether or not to use them.
 .IP "\fB\-mimpure\-text\fR" 4
 .IX Item "-mimpure-text"
 \&\fB\-mimpure\-text\fR, used in addition to \fB\-shared\fR, tells
@@ -19748,6 +19800,15 @@ absolute address.  Otherwise, it assumes they have 4\-byte alignment.
 Specifying this option avoids some rare compatibility problems with code
 generated by other compilers.  It is not the default because it results
 in a performance loss, especially for floating-point code.
+.IP "\fB\-muser\-mode\fR" 4
+.IX Item "-muser-mode"
+.PD 0
+.IP "\fB\-mno\-user\-mode\fR" 4
+.IX Item "-mno-user-mode"
+.PD
+Do not generate code that can only run in supervisor mode.  This is relevant
+only for the \f(CW\*(C`casa\*(C'\fR instruction emitted for the \s-1LEON3\s0 processor.  The
+default is \fB\-mno\-user\-mode\fR.
 .IP "\fB\-mno\-faster\-structs\fR" 4
 .IX Item "-mno-faster-structs"
 .PD 0
index a446a65..806daba 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "GC-ANALYZE 1"
-.TH GC-ANALYZE 1 "2014-04-22" "gcc-4.9.0" "GNU"
+.TH GC-ANALYZE 1 "2014-07-16" "gcc-4.9.1" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 1ed57fc..c2d44ea 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "GCC 1"
-.TH GCC 1 "2014-04-22" "gcc-4.9.0" "GNU"
+.TH GCC 1 "2014-07-16" "gcc-4.9.1" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -846,7 +846,8 @@ in the following sections.
 \&\fB\-meb \-mel \-mno\-crt0\fR
 .Sp
 \&\fI\s-1MSP430\s0 Options\fR
-\&\fB\-msim \-masm\-hex \-mmcu= \-mcpu= \-mlarge \-msmall \-mrelax\fR
+\&\fB\-msim \-masm\-hex \-mmcu= \-mcpu= \-mlarge \-msmall \-mrelax 
+\&\-mhwmult=\fR
 .Sp
 \&\fI\s-1NDS32\s0 Options\fR
 \&\fB\-mbig\-endian \-mlittle\-endian 
@@ -998,7 +999,7 @@ See \s-1RS/6000\s0 and PowerPC Options.
 \&\-mpretend\-cmove \-mtas\fR
 .Sp
 \&\fISolaris 2 Options\fR
-\&\fB\-mimpure\-text  \-mno\-impure\-text 
+\&\fB\-mclear\-hwcap \-mno\-clear\-hwcap \-mimpure\-text  \-mno\-impure\-text 
 \&\-pthreads \-pthread\fR
 .Sp
 \&\fI\s-1SPARC\s0 Options\fR
@@ -1012,6 +1013,7 @@ See \s-1RS/6000\s0 and PowerPC Options.
 \&\-mhard\-quad\-float  \-msoft\-quad\-float 
 \&\-mstack\-bias  \-mno\-stack\-bias 
 \&\-munaligned\-doubles  \-mno\-unaligned\-doubles 
+\&\-muser\-mode  \-mno\-user\-mode 
 \&\-mv8plus  \-mno\-v8plus  \-mvis  \-mno\-vis 
 \&\-mvis2  \-mno\-vis2  \-mvis3  \-mno\-vis3 
 \&\-mcbcond \-mno\-cbcond 
@@ -6743,7 +6745,8 @@ Attempt to remove redundant extension instructions.  This is especially
 helpful for the x86\-64 architecture, which implicitly zero-extends in 64\-bit
 registers after writing to their lower 32\-bit half.
 .Sp
-Enabled for AArch64 and x86 at levels \fB\-O2\fR, \fB\-O3\fR.
+Enabled for Alpha, AArch64 and x86 at levels \fB\-O2\fR,
+\&\fB\-O3\fR, \fB\-Os\fR.
 .IP "\fB\-flive\-range\-shrinkage\fR" 4
 .IX Item "-flive-range-shrinkage"
 Attempt to decrease register pressure through register live range
@@ -9255,6 +9258,28 @@ IPA-CP attempts to track all possible values and types passed to a function's
 parameter in order to propagate them and perform devirtualization.
 \&\fBipa-cp-value-list-size\fR is the maximum number of values and types it
 stores per one formal parameter of a function.
+.IP "\fBipa-cp-eval-threshold\fR" 4
+.IX Item "ipa-cp-eval-threshold"
+IPA-CP calculates its own score of cloning profitability heuristics
+and performs those cloning opportunities with scores that exceed
+\&\fBipa-cp-eval-threshold\fR.
+.IP "\fBipa-max-agg-items\fR" 4
+.IX Item "ipa-max-agg-items"
+IPA-CP is also capable to propagate a number of scalar values passed
+in an aggregate. \fBipa-max-agg-items\fR controls the maximum
+number of such values per one parameter.
+.IP "\fBipa-cp-loop-hint-bonus\fR" 4
+.IX Item "ipa-cp-loop-hint-bonus"
+When IPA-CP determines that a cloning candidate would make the number
+of iterations of a loop known, it adds a bonus of
+\&\fBipa-cp-loop-hint-bonus\fR bonus to the profitability score of
+the candidate.
+.IP "\fBipa-cp-array-index-hint-bonus\fR" 4
+.IX Item "ipa-cp-array-index-hint-bonus"
+When IPA-CP determines that a cloning candidate would make the index of
+an array access known, it adds a bonus of
+\&\fBipa-cp-array-index-hint-bonus\fR bonus to the profitability
+score of the candidate.
 .IP "\fBlto-partitions\fR" 4
 .IX Item "lto-partitions"
 Specify desired number of partitions produced during \s-1WHOPR\s0 compilation.
@@ -17176,6 +17201,27 @@ Use small-model addressing (16\-bit pointers, 16\-bit \f(CW\*(C`size_t\*(C'\fR).
 This option is passed to the assembler and linker, and allows the
 linker to perform certain optimizations that cannot be done until
 the final link.
+.IP "\fBmhwmult=\fR" 4
+.IX Item "mhwmult="
+Describes the type of hardware multiply supported by the target.
+Accepted values are \f(CW\*(C`none\*(C'\fR for no hardware multiply, \f(CW\*(C`16bit\*(C'\fR
+for the original 16\-bit\-only multiply supported by early MCUs.
+\&\f(CW\*(C`32bit\*(C'\fR for the 16/32\-bit multiply supported by later MCUs and
+\&\f(CW\*(C`f5series\*(C'\fR for the 16/32\-bit multiply supported by F5\-series MCUs.
+A value of \f(CW\*(C`auto\*(C'\fR can also be given.  This tells \s-1GCC\s0 to deduce
+the hardware multiply support based upon the \s-1MCU\s0 name provided by the
+\&\fB\-mmcu\fR option.  If no \fB\-mmcu\fR option is specified then
+\&\f(CW\*(C`32bit\*(C'\fR hardware multiply support is assumed.  \f(CW\*(C`auto\*(C'\fR is the
+default setting.
+.Sp
+Hardware multiplies are normally performed by calling a library
+routine.  This saves space in the generated code.  When compiling at
+\&\f(CW\*(C`\-O3\*(C'\fR or higher however the hardware multiplier is invoked
+inline.  This makes for bigger, but faster code.
+.Sp
+The hardware multiply routines disable interrupts whilst running and
+restore the previous interrupt state when they finish.  This makes
+them safe to use inside interrupt handlers as well as in normal code.
 .PP
 \fI\s-1NDS32\s0 Options\fR
 .IX Subsection "NDS32 Options"
@@ -19634,6 +19680,12 @@ patterns.  This can result in faster code on the \s-1SH4\s0 processor.
 .IX Subsection "Solaris 2 Options"
 .PP
 These \fB\-m\fR options are supported on Solaris 2:
+.IP "\fB\-mclear\-hwcap\fR" 4
+.IX Item "-mclear-hwcap"
+\&\fB\-mclear\-hwcap\fR tells the compiler to remove the hardware
+capabilities generated by the Solaris assembler.  This is only necessary
+when object files use \s-1ISA\s0 extensions not supported by the current
+machine, but check at runtime whether or not to use them.
 .IP "\fB\-mimpure\-text\fR" 4
 .IX Item "-mimpure-text"
 \&\fB\-mimpure\-text\fR, used in addition to \fB\-shared\fR, tells
@@ -19748,6 +19800,15 @@ absolute address.  Otherwise, it assumes they have 4\-byte alignment.
 Specifying this option avoids some rare compatibility problems with code
 generated by other compilers.  It is not the default because it results
 in a performance loss, especially for floating-point code.
+.IP "\fB\-muser\-mode\fR" 4
+.IX Item "-muser-mode"
+.PD 0
+.IP "\fB\-mno\-user\-mode\fR" 4
+.IX Item "-mno-user-mode"
+.PD
+Do not generate code that can only run in supervisor mode.  This is relevant
+only for the \f(CW\*(C`casa\*(C'\fR instruction emitted for the \s-1LEON3\s0 processor.  The
+default is \fB\-mno\-user\-mode\fR.
 .IP "\fB\-mno\-faster\-structs\fR" 4
 .IX Item "-mno-faster-structs"
 .PD 0
index 29f0549..822a82f 100644 (file)
@@ -56,7 +56,7 @@ Introduction
 
 This manual documents how to use the GNU compilers, as well as their
 features and incompatibilities, and how to report bugs.  It corresponds
-to the compilers (GCC) version 4.9.0.  The internals of the GNU
+to the compilers (GCC) version 4.9.1.  The internals of the GNU
 compilers, including how to port them to new targets and some
 information about how to write front ends for new languages, are
 documented in a separate manual.  *Note Introduction: (gccint)Top.
@@ -1121,6 +1121,7 @@ _Machine Dependent Options_
 
      _MSP430 Options_
           -msim -masm-hex -mmcu= -mcpu= -mlarge -msmall -mrelax
+          -mhwmult=
 
      _NDS32 Options_
           -mbig-endian -mlittle-endian
@@ -1271,7 +1272,7 @@ _Machine Dependent Options_
           -mpretend-cmove -mtas
 
      _Solaris 2 Options_
-          -mimpure-text  -mno-impure-text
+          -mclear-hwcap -mno-clear-hwcap -mimpure-text  -mno-impure-text
           -pthreads -pthread
 
      _SPARC Options_
@@ -1285,6 +1286,7 @@ _Machine Dependent Options_
           -mhard-quad-float  -msoft-quad-float
           -mstack-bias  -mno-stack-bias
           -munaligned-doubles  -mno-unaligned-doubles
+          -muser-mode  -mno-user-mode
           -mv8plus  -mno-v8plus  -mvis  -mno-vis
           -mvis2  -mno-vis2  -mvis3  -mno-vis3
           -mcbcond -mno-cbcond
@@ -6722,7 +6724,7 @@ optimizations to be performed is desired.
      zero-extends in 64-bit registers after writing to their lower
      32-bit half.
 
-     Enabled for AArch64 and x86 at levels '-O2', '-O3'.
+     Enabled for Alpha, AArch64 and x86 at levels '-O2', '-O3', '-Os'.
 
 '-flive-range-shrinkage'
      Attempt to decrease register pressure through register live range
@@ -9220,6 +9222,28 @@ includes experimental options that may produce broken code.
           maximum number of values and types it stores per one formal
           parameter of a function.
 
+     'ipa-cp-eval-threshold'
+          IPA-CP calculates its own score of cloning profitability
+          heuristics and performs those cloning opportunities with
+          scores that exceed 'ipa-cp-eval-threshold'.
+
+     'ipa-max-agg-items'
+          IPA-CP is also capable to propagate a number of scalar values
+          passed in an aggregate.  'ipa-max-agg-items' controls the
+          maximum number of such values per one parameter.
+
+     'ipa-cp-loop-hint-bonus'
+          When IPA-CP determines that a cloning candidate would make the
+          number of iterations of a loop known, it adds a bonus of
+          'ipa-cp-loop-hint-bonus' bonus to the profitability score of
+          the candidate.
+
+     'ipa-cp-array-index-hint-bonus'
+          When IPA-CP determines that a cloning candidate would make the
+          index of an array access known, it adds a bonus of
+          'ipa-cp-array-index-hint-bonus' bonus to the profitability
+          score of the candidate.
+
      'lto-partitions'
           Specify desired number of partitions produced during WHOPR
           compilation.  The number of partitions should exceed the
@@ -17037,6 +17061,27 @@ These options are defined for the MSP430:
      linker to perform certain optimizations that cannot be done until
      the final link.
 
+'mhwmult='
+     Describes the type of hardware multiply supported by the target.
+     Accepted values are 'none' for no hardware multiply, '16bit' for
+     the original 16-bit-only multiply supported by early MCUs.  '32bit'
+     for the 16/32-bit multiply supported by later MCUs and 'f5series'
+     for the 16/32-bit multiply supported by F5-series MCUs.  A value of
+     'auto' can also be given.  This tells GCC to deduce the hardware
+     multiply support based upon the MCU name provided by the '-mmcu'
+     option.  If no '-mmcu' option is specified then '32bit' hardware
+     multiply support is assumed.  'auto' is the default setting.
+
+     Hardware multiplies are normally performed by calling a library
+     routine.  This saves space in the generated code.  When compiling
+     at '-O3' or higher however the hardware multiplier is invoked
+     inline.  This makes for bigger, but faster code.
+
+     The hardware multiply routines disable interrupts whilst running
+     and restore the previous interrupt state when they finish.  This
+     makes them safe to use inside interrupt handlers as well as in
+     normal code.
+
 \1f
 File: gcc.info,  Node: NDS32 Options,  Next: Nios II Options,  Prev: MSP430 Options,  Up: Submodel Options
 
@@ -19225,6 +19270,12 @@ File: gcc.info,  Node: Solaris 2 Options,  Next: SPARC Options,  Prev: SH Option
 
 These '-m' options are supported on Solaris 2:
 
+'-mclear-hwcap'
+     '-mclear-hwcap' tells the compiler to remove the hardware
+     capabilities generated by the Solaris assembler.  This is only
+     necessary when object files use ISA extensions not supported by the
+     current machine, but check at runtime whether or not to use them.
+
 '-mimpure-text'
      '-mimpure-text', used in addition to '-shared', tells the compiler
      to not pass '-z text' to the linker when linking a shared object.
@@ -19332,6 +19383,12 @@ These '-m' options are supported on the SPARC:
      default because it results in a performance loss, especially for
      floating-point code.
 
+'-muser-mode'
+'-mno-user-mode'
+     Do not generate code that can only run in supervisor mode.  This is
+     relevant only for the 'casa' instruction emitted for the LEON3
+     processor.  The default is '-mno-user-mode'.
+
 '-mno-faster-structs'
 '-mfaster-structs'
      With '-mfaster-structs', the compiler assumes that structures
@@ -22104,7 +22161,9 @@ never pass it as an argument.
 
 This is more friendly to code living in shared libraries, as it reduces
 the number of dynamic relocations that are needed, and by consequence,
-allows the data to be read-only.
+allows the data to be read-only.  This alternative with label
+differences is not supported for the AVR target, please use the first
+approach for AVR programs.
 
  The '&&foo' expressions for the same label might have different values
 if the containing function is inlined or cloned.  If a program relies on
@@ -38751,12 +38810,13 @@ File: gcc.info,  Node: ARM ACLE Intrinsics,  Next: AVR Built-in Functions,  Prev
 6.57.7 ARM ACLE Intrinsics
 --------------------------
 
-These built-in intrinsics for the ARMv8-A CRC32 extension are available
-when the '-march=armv8-a+crc' switch is used:
-
 6.57.7.1 CRC32 intrinsics
 .........................
 
+These intrinsics are available when the CRC32 architecture extension is
+specified, e.g.  when the '-march=armv8-a+crc' switch is used, or when
+the target processor specified with '-mcpu' supports it.
+
    * uint32_t __crc32b (uint32_t, uint8_t)
      _Form of expected instruction(s):_ 'crc32b R0, R0, R0'
 
@@ -38768,8 +38828,7 @@ when the '-march=armv8-a+crc' switch is used:
 
    * uint32_t __crc32d (uint32_t, uint64_t)
      _Form of expected instruction(s):_ Two 'crc32w R0, R0, R0'
-     instructions for AArch32.  One 'crc32w W0, W0, X0' instruction for
-     AArch64.
+     instructions.
 
    * uint32_t __crc32cb (uint32_t, uint8_t)
      _Form of expected instruction(s):_ 'crc32cb R0, R0, R0'
@@ -38782,8 +38841,7 @@ when the '-march=armv8-a+crc' switch is used:
 
    * uint32_t __crc32cd (uint32_t, uint64_t)
      _Form of expected instruction(s):_ Two 'crc32cw R0, R0, R0'
-     instructions for AArch32.  One 'crc32cw W0, W0, X0' instruction for
-     AArch64.
+     instructions.
 
 \1f
 File: gcc.info,  Node: AVR Built-in Functions,  Next: Blackfin Built-in Functions,  Prev: ARM ACLE Intrinsics,  Up: Target Builtins
@@ -39981,7 +40039,7 @@ All of them generate the machine instruction that is part of the name.
  The following built-in functions are available when '-mavx2' is used.
 All of them generate the machine instruction that is part of the name.
 
-     v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,v32qi,int)
+     v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,int)
      v32qi __builtin_ia32_pabsb256 (v32qi)
      v16hi __builtin_ia32_pabsw256 (v16hi)
      v8si __builtin_ia32_pabsd256 (v8si)
@@ -40200,8 +40258,8 @@ All of them generate the machine instruction that is part of the name.
  The following built-in functions are available when '-mxop' is used.
      v2df __builtin_ia32_vfrczpd (v2df)
      v4sf __builtin_ia32_vfrczps (v4sf)
-     v2df __builtin_ia32_vfrczsd (v2df, v2df)
-     v4sf __builtin_ia32_vfrczss (v4sf, v4sf)
+     v2df __builtin_ia32_vfrczsd (v2df)
+     v4sf __builtin_ia32_vfrczss (v4sf)
      v4df __builtin_ia32_vfrczpd256 (v4df)
      v8sf __builtin_ia32_vfrczps256 (v8sf)
      v2di __builtin_ia32_vpcmov (v2di, v2di, v2di)
@@ -41347,9 +41405,10 @@ processors:
      float __builtin_rsqrtf (float);
      double __builtin_recipdiv (double, double);
      double __builtin_rsqrt (double);
-     long __builtin_bpermd (long, long);
      uint64_t __builtin_ppc_get_timebase ();
      unsigned long __builtin_ppc_mftb ();
+     double __builtin_unpack_longdouble (long double, int);
+     long double __builtin_pack_longdouble (double, double);
 
  The 'vec_rsqrt', '__builtin_rsqrt', and '__builtin_rsqrtf' functions
 generate multiple instructions to implement the reciprocal sqrt
@@ -41367,6 +41426,50 @@ and always returns the 64 bits of the Time Base Register.  The
 returns the Time Base Register value as an unsigned long, throwing away
 the most significant word on 32-bit environments.
 
+ The following built-in functions are available for the PowerPC family
+of processors, starting with ISA 2.06 or later ('-mcpu=power7' or
+'-mpopcntd'):
+     long __builtin_bpermd (long, long);
+     int __builtin_divwe (int, int);
+     int __builtin_divweo (int, int);
+     unsigned int __builtin_divweu (unsigned int, unsigned int);
+     unsigned int __builtin_divweuo (unsigned int, unsigned int);
+     long __builtin_divde (long, long);
+     long __builtin_divdeo (long, long);
+     unsigned long __builtin_divdeu (unsigned long, unsigned long);
+     unsigned long __builtin_divdeuo (unsigned long, unsigned long);
+     unsigned int cdtbcd (unsigned int);
+     unsigned int cbcdtd (unsigned int);
+     unsigned int addg6s (unsigned int, unsigned int);
+
+ The '__builtin_divde', '__builtin_divdeo', '__builitin_divdeu',
+'__builtin_divdeou' functions require a 64-bit environment support ISA
+2.06 or later.
+
+ The following built-in functions are available for the PowerPC family
+of processors when hardware decimal floating point ('-mhard-dfp') is
+available:
+     _Decimal64 __builtin_dxex (_Decimal64);
+     _Decimal128 __builtin_dxexq (_Decimal128);
+     _Decimal64 __builtin_ddedpd (int, _Decimal64);
+     _Decimal128 __builtin_ddedpdq (int, _Decimal128);
+     _Decimal64 __builtin_denbcd (int, _Decimal64);
+     _Decimal128 __builtin_denbcdq (int, _Decimal128);
+     _Decimal64 __builtin_diex (_Decimal64, _Decimal64);
+     _Decimal128 _builtin_diexq (_Decimal128, _Decimal128);
+     _Decimal64 __builtin_dscli (_Decimal64, int);
+     _Decimal128 __builitn_dscliq (_Decimal128, int);
+     _Decimal64 __builtin_dscri (_Decimal64, int);
+     _Decimal128 __builitn_dscriq (_Decimal128, int);
+     unsigned long long __builtin_unpack_dec128 (_Decimal128, int);
+     _Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long);
+
+ The following built-in functions are available for the PowerPC family
+of processors when the Vector Scalar (vsx) instruction set is available:
+     unsigned long long __builtin_unpack_vector_int128 (vector __int128_t, int);
+     vector __int128_t __builtin_pack_vector_int128 (unsigned long long,
+                                                     unsigned long long);
+
 \1f
 File: gcc.info,  Node: PowerPC AltiVec/VSX Built-in Functions,  Next: PowerPC Hardware Transactional Memory Built-in Functions,  Prev: PowerPC Built-in Functions,  Up: Target Builtins
 
@@ -43758,6 +43861,17 @@ and VECTOR __UINT128_T types, but the index value must be 0.
      __int128_t vec_vsubuqm (__int128_t, __int128_t);
      __uint128_t vec_vsubuqm (__uint128_t, __uint128_t);
 
+     vector __int128_t __builtin_bcdadd (vector __int128_t, vector__int128_t);
+     int __builtin_bcdadd_lt (vector __int128_t, vector__int128_t);
+     int __builtin_bcdadd_eq (vector __int128_t, vector__int128_t);
+     int __builtin_bcdadd_gt (vector __int128_t, vector__int128_t);
+     int __builtin_bcdadd_ov (vector __int128_t, vector__int128_t);
+     vector __int128_t bcdsub (vector __int128_t, vector__int128_t);
+     int __builtin_bcdsub_lt (vector __int128_t, vector__int128_t);
+     int __builtin_bcdsub_eq (vector __int128_t, vector__int128_t);
+     int __builtin_bcdsub_gt (vector __int128_t, vector__int128_t);
+     int __builtin_bcdsub_ov (vector __int128_t, vector__int128_t);
+
  If the cryptographic instructions are enabled ('-mcrypto' or
 '-mcpu=power8'), the following builtins are enabled.
 
@@ -52544,7 +52658,7 @@ look up both forms.
                                                              (line  940)
 * m32 <1>:                               RS/6000 and PowerPC Options.
                                                              (line  274)
-* m32 <2>:                               SPARC Options.      (line  250)
+* m32 <2>:                               SPARC Options.      (line  256)
 * m32 <3>:                               TILE-Gx Options.    (line   23)
 * m32 <4>:                               TILEPro Options.    (line   13)
 * m32-bit:                               CRIS Options.       (line   64)
@@ -52579,7 +52693,7 @@ look up both forms.
                                                              (line  274)
 * m64 <2>:                               S/390 and zSeries Options.
                                                              (line   86)
-* m64 <3>:                               SPARC Options.      (line  250)
+* m64 <3>:                               SPARC Options.      (line  256)
 * m64 <4>:                               TILE-Gx Options.    (line   23)
 * m64bit-doubles:                        RX Options.         (line   10)
 * m68000:                                M680x0 Options.     (line   93)
@@ -52788,15 +52902,16 @@ look up both forms.
 * mcaller-super-interworking:            ARM Options.        (line  292)
 * mcallgraph-data:                       MCore Options.      (line   31)
 * mcase-vector-pcrel:                    ARC Options.        (line  206)
-* mcbcond:                               SPARC Options.      (line  217)
+* mcbcond:                               SPARC Options.      (line  223)
 * mcc-init:                              CRIS Options.       (line   42)
 * mcfv4e:                                M680x0 Options.     (line  169)
 * mcheck-zero-division:                  MIPS Options.       (line  503)
 * mcix:                                  DEC Alpha Options.  (line  163)
 * mcld:                                  i386 and x86-64 Options.
                                                              (line  672)
+* mclear-hwcap:                          Solaris 2 Options.  (line    9)
 * mclip:                                 MeP Options.        (line   35)
-* mcmodel:                               SPARC Options.      (line  255)
+* mcmodel:                               SPARC Options.      (line  261)
 * mcmodel=kernel:                        i386 and x86-64 Options.
                                                              (line  971)
 * mcmodel=large:                         AArch64 Options.    (line   44)
@@ -52850,7 +52965,7 @@ look up both forms.
 * mcpu <8>:                              picoChip Options.   (line    9)
 * mcpu <9>:                              RS/6000 and PowerPC Options.
                                                              (line   68)
-* mcpu <10>:                             SPARC Options.      (line   95)
+* mcpu <10>:                             SPARC Options.      (line  101)
 * mcpu <11>:                             TILE-Gx Options.    (line   18)
 * mcpu <12>:                             TILEPro Options.    (line    9)
 * mcpu32:                                M680x0 Options.     (line  135)
@@ -52961,21 +53076,21 @@ look up both forms.
 * mfast-fp:                              Blackfin Options.   (line  132)
 * mfast-indirect-calls:                  HPPA Options.       (line   46)
 * mfast-sw-div:                          Nios II Options.    (line   46)
-* mfaster-structs:                       SPARC Options.      (line   85)
+* mfaster-structs:                       SPARC Options.      (line   91)
 * mfdpic:                                FRV Options.        (line   72)
 * mfentry:                               i386 and x86-64 Options.
                                                              (line  910)
 * mfix:                                  DEC Alpha Options.  (line  163)
 * mfix-24k:                              MIPS Options.       (line  567)
 * mfix-and-continue:                     Darwin Options.     (line  104)
-* mfix-at697f:                           SPARC Options.      (line  237)
+* mfix-at697f:                           SPARC Options.      (line  243)
 * mfix-cortex-m3-ldrd:                   ARM Options.        (line  325)
 * mfix-r10000:                           MIPS Options.       (line  589)
 * mfix-r4000:                            MIPS Options.       (line  573)
 * mfix-r4400:                            MIPS Options.       (line  583)
 * mfix-rm7000:                           MIPS Options.       (line  600)
 * mfix-sb1:                              MIPS Options.       (line  625)
-* mfix-ut699:                            SPARC Options.      (line  242)
+* mfix-ut699:                            SPARC Options.      (line  248)
 * mfix-vr4120:                           MIPS Options.       (line  605)
 * mfix-vr4130:                           MIPS Options.       (line  618)
 * mfixed-cc:                             FRV Options.        (line   35)
@@ -52995,7 +53110,7 @@ look up both forms.
 * mflush-func:                           MIPS Options.       (line  692)
 * mflush-func=NAME:                      M32R/D Options.     (line   93)
 * mflush-trap=NUMBER:                    M32R/D Options.     (line   86)
-* mfmaf:                                 SPARC Options.      (line  231)
+* mfmaf:                                 SPARC Options.      (line  237)
 * mfmovd:                                SH Options.         (line   96)
 * mforbid-fp-as-gp:                      NDS32 Options.      (line   65)
 * mforce-fp-as-gp:                       NDS32 Options.      (line   61)
@@ -53091,6 +53206,7 @@ look up both forms.
 * mhw-div:                               Nios II Options.    (line   55)
 * mhw-mul:                               Nios II Options.    (line   55)
 * mhw-mulx:                              Nios II Options.    (line   55)
+* mhwmult=:                              MSP430 Options.     (line   56)
 * micplb:                                Blackfin Options.   (line  177)
 * mid-shared-library:                    Blackfin Options.   (line   80)
 * mieee:                                 DEC Alpha Options.  (line   39)
@@ -53101,7 +53217,7 @@ look up both forms.
 * mieee-with-inexact:                    DEC Alpha Options.  (line   52)
 * milp32:                                IA-64 Options.      (line  121)
 * mimadd:                                MIPS Options.       (line  543)
-* mimpure-text:                          Solaris 2 Options.  (line    9)
+* mimpure-text:                          Solaris 2 Options.  (line   15)
 * mincoming-stack-boundary:              i386 and x86-64 Options.
                                                              (line  535)
 * mindexed-addressing:                   SH Options.         (line  345)
@@ -53243,7 +53359,7 @@ look up both forms.
 * mmemcpy-strategy=STRATEGY:             i386 and x86-64 Options.
                                                              (line  871)
 * mmemory-latency:                       DEC Alpha Options.  (line  268)
-* mmemory-model:                         SPARC Options.      (line  283)
+* mmemory-model:                         SPARC Options.      (line  289)
 * mmemset-strategy=STRATEGY:             i386 and x86-64 Options.
                                                              (line  883)
 * mmfcrf:                                RS/6000 and PowerPC Options.
@@ -53324,7 +53440,7 @@ look up both forms.
 * mno-bypass-cache:                      Nios II Options.    (line   34)
 * mno-cache-volatile:                    Nios II Options.    (line   40)
 * mno-callgraph-data:                    MCore Options.      (line   31)
-* mno-cbcond:                            SPARC Options.      (line  217)
+* mno-cbcond:                            SPARC Options.      (line  223)
 * mno-check-zero-division:               MIPS Options.       (line  503)
 * mno-cix:                               DEC Alpha Options.  (line  163)
 * mno-clearbss:                          MicroBlaze Options. (line   16)
@@ -53376,7 +53492,7 @@ look up both forms.
 * mno-fancy-math-387:                    i386 and x86-64 Options.
                                                              (line  356)
 * mno-fast-sw-div:                       Nios II Options.    (line   46)
-* mno-faster-structs:                    SPARC Options.      (line   85)
+* mno-faster-structs:                    SPARC Options.      (line   91)
 * mno-fix:                               DEC Alpha Options.  (line  163)
 * mno-fix-24k:                           MIPS Options.       (line  567)
 * mno-fix-r10000:                        MIPS Options.       (line  589)
@@ -53388,7 +53504,7 @@ look up both forms.
 * mno-float64:                           PDP-11 Options.     (line   52)
 * mno-flush-func:                        M32R/D Options.     (line   98)
 * mno-flush-trap:                        M32R/D Options.     (line   90)
-* mno-fmaf:                              SPARC Options.      (line  231)
+* mno-fmaf:                              SPARC Options.      (line  237)
 * mno-fp-in-toc:                         RS/6000 and PowerPC Options.
                                                              (line  285)
 * mno-fp-regs:                           DEC Alpha Options.  (line   25)
@@ -53495,7 +53611,7 @@ look up both forms.
 * mno-pic:                               IA-64 Options.      (line   26)
 * mno-pid:                               RX Options.         (line  117)
 * mno-plt:                               MIPS Options.       (line  189)
-* mno-popc:                              SPARC Options.      (line  224)
+* mno-popc:                              SPARC Options.      (line  230)
 * mno-popcntb:                           RS/6000 and PowerPC Options.
                                                              (line   27)
 * mno-popcntd:                           RS/6000 and PowerPC Options.
@@ -53574,7 +53690,7 @@ look up both forms.
 * mno-sse:                               i386 and x86-64 Options.
                                                              (line  629)
 * mno-stack-align:                       CRIS Options.       (line   55)
-* mno-stack-bias:                        SPARC Options.      (line  307)
+* mno-stack-bias:                        SPARC Options.      (line  313)
 * mno-strict-align:                      M680x0 Options.     (line  283)
 * mno-strict-align <1>:                  RS/6000 and PowerPC Options.
                                                              (line  463)
@@ -53597,14 +53713,15 @@ look up both forms.
 * mno-uninit-const-in-rodata:            MIPS Options.       (line  458)
 * mno-update:                            RS/6000 and PowerPC Options.
                                                              (line  410)
+* mno-user-mode:                         SPARC Options.      (line   85)
 * mno-v3push:                            NDS32 Options.      (line   36)
-* mno-v8plus:                            SPARC Options.      (line  188)
+* mno-v8plus:                            SPARC Options.      (line  194)
 * mno-vect-double:                       Adapteva Epiphany Options.
                                                              (line  115)
 * mno-virt:                              MIPS Options.       (line  367)
-* mno-vis:                               SPARC Options.      (line  195)
-* mno-vis2:                              SPARC Options.      (line  201)
-* mno-vis3:                              SPARC Options.      (line  209)
+* mno-vis:                               SPARC Options.      (line  201)
+* mno-vis2:                              SPARC Options.      (line  207)
+* mno-vis3:                              SPARC Options.      (line  215)
 * mno-vliw-branch:                       FRV Options.        (line  208)
 * mno-volatile-asm-stop:                 IA-64 Options.      (line   32)
 * mno-volatile-cache:                    ARC Options.        (line  188)
@@ -53670,7 +53787,7 @@ look up both forms.
 * mpointers-to-nested-functions:         RS/6000 and PowerPC Options.
                                                              (line  868)
 * mpoke-function-name:                   ARM Options.        (line  244)
-* mpopc:                                 SPARC Options.      (line  224)
+* mpopc:                                 SPARC Options.      (line  230)
 * mpopcntb:                              RS/6000 and PowerPC Options.
                                                              (line   27)
 * mpopcntd:                              RS/6000 and PowerPC Options.
@@ -53896,7 +54013,7 @@ look up both forms.
 * msseregparm:                           i386 and x86-64 Options.
                                                              (line  462)
 * mstack-align:                          CRIS Options.       (line   55)
-* mstack-bias:                           SPARC Options.      (line  307)
+* mstack-bias:                           SPARC Options.      (line  313)
 * mstack-check-l1:                       Blackfin Options.   (line   76)
 * mstack-guard:                          S/390 and zSeries Options.
                                                              (line  154)
@@ -53982,7 +54099,7 @@ look up both forms.
                                                              (line  110)
 * mtune <12>:                            S/390 and zSeries Options.
                                                              (line  122)
-* mtune <13>:                            SPARC Options.      (line  174)
+* mtune <13>:                            SPARC Options.      (line  180)
 * mtune-ctrl=FEATURE-LIST:               i386 and x86-64 Options.
                                                              (line  658)
 * mucb-mcount:                           ARC Options.        (line  179)
@@ -54007,6 +54124,7 @@ look up both forms.
 * mupdate:                               RS/6000 and PowerPC Options.
                                                              (line  410)
 * muser-enabled:                         LM32 Options.       (line   21)
+* muser-mode:                            SPARC Options.      (line   85)
 * musermode:                             SH Options.         (line  228)
 * mv3push:                               NDS32 Options.      (line   33)
 * mv850:                                 V850 Options.       (line   49)
@@ -54017,7 +54135,7 @@ look up both forms.
 * mv850e2v4:                             V850 Options.       (line   57)
 * mv850e3v5:                             V850 Options.       (line   52)
 * mv850es:                               V850 Options.       (line   75)
-* mv8plus:                               SPARC Options.      (line  188)
+* mv8plus:                               SPARC Options.      (line  194)
 * mveclibabi:                            i386 and x86-64 Options.
                                                              (line  776)
 * mveclibabi <1>:                        RS/6000 and PowerPC Options.
@@ -54025,9 +54143,9 @@ look up both forms.
 * mvect8-ret-in-mem:                     i386 and x86-64 Options.
                                                              (line  472)
 * mvirt:                                 MIPS Options.       (line  367)
-* mvis:                                  SPARC Options.      (line  195)
-* mvis2:                                 SPARC Options.      (line  201)
-* mvis3:                                 SPARC Options.      (line  209)
+* mvis:                                  SPARC Options.      (line  201)
+* mvis2:                                 SPARC Options.      (line  207)
+* mvis3:                                 SPARC Options.      (line  215)
 * mvliw-branch:                          FRV Options.        (line  201)
 * mvms-return-codes:                     VMS Options.        (line    9)
 * mvolatile-asm-stop:                    IA-64 Options.      (line   32)
@@ -54157,8 +54275,8 @@ look up both forms.
 * private_bundle:                        Darwin Options.     (line  196)
 * pthread:                               RS/6000 and PowerPC Options.
                                                              (line  792)
-* pthread <1>:                           Solaris 2 Options.  (line   30)
-* pthreads:                              Solaris 2 Options.  (line   24)
+* pthread <1>:                           Solaris 2 Options.  (line   36)
+* pthreads:                              Solaris 2 Options.  (line   30)
 * Q:                                     Debugging Options.  (line  422)
 * Qn:                                    System V Options.   (line   18)
 * Qy:                                    System V Options.   (line   14)
@@ -56595,314 +56713,314 @@ Node: G++ and GCC\7f3629
 Node: Standards\7f5686
 Node: Invoking GCC\7f17845
 Node: Option Summary\7f21590
-Node: Overall Options\7f63276
-Node: Invoking G++\7f77463
-Node: C Dialect Options\7f78986
-Node: C++ Dialect Options\7f95984
-Node: Objective-C and Objective-C++ Dialect Options\7f126529
-Node: Language Independent Options\7f137036
-Node: Warning Options\7f141536
-Node: Debugging Options\7f211575
-Node: Optimize Options\7f271636
-Ref: Type-punning\7f331182
-Node: Preprocessor Options\7f413934
-Ref: Wtrigraphs\7f418717
-Ref: dashMF\7f423467
-Ref: fdollars-in-identifiers\7f434348
-Node: Assembler Options\7f444573
-Node: Link Options\7f445264
-Ref: Link Options-Footnote-1\7f457404
-Node: Directory Options\7f457740
-Node: Spec Files\7f464284
-Node: Target Options\7f486113
-Node: Submodel Options\7f486512
-Node: AArch64 Options\7f488278
-Node: Adapteva Epiphany Options\7f493403
-Node: ARC Options\7f499351
-Node: ARM Options\7f511795
-Node: AVR Options\7f529093
-Node: Blackfin Options\7f549318
-Node: C6X Options\7f557336
-Node: CRIS Options\7f558879
-Node: CR16 Options\7f562618
-Node: Darwin Options\7f563529
-Node: DEC Alpha Options\7f570963
-Node: FR30 Options\7f582579
-Node: FRV Options\7f583143
-Node: GNU/Linux Options\7f589907
-Node: H8/300 Options\7f591167
-Node: HPPA Options\7f592619
-Node: i386 and x86-64 Options\7f601921
-Node: i386 and x86-64 Windows Options\7f643992
-Node: IA-64 Options\7f646845
-Node: LM32 Options\7f654911
-Node: M32C Options\7f655434
-Node: M32R/D Options\7f656707
-Node: M680x0 Options\7f660252
-Node: MCore Options\7f674287
-Node: MeP Options\7f675789
-Node: MicroBlaze Options\7f679749
-Node: MIPS Options\7f682551
-Node: MMIX Options\7f714436
-Node: MN10300 Options\7f716913
-Node: Moxie Options\7f719454
-Node: MSP430 Options\7f719824
-Node: NDS32 Options\7f721913
-Node: Nios II Options\7f723793
-Node: PDP-11 Options\7f732258
-Node: picoChip Options\7f733952
-Node: PowerPC Options\7f736090
-Node: RL78 Options\7f736311
-Node: RS/6000 and PowerPC Options\7f736972
-Node: RX Options\7f775902
-Node: S/390 and zSeries Options\7f783234
-Node: Score Options\7f791781
-Node: SH Options\7f792630
-Node: Solaris 2 Options\7f811301
-Node: SPARC Options\7f812531
-Node: SPU Options\7f825566
-Node: System V Options\7f830505
-Node: TILE-Gx Options\7f831331
-Node: TILEPro Options\7f832349
-Node: V850 Options\7f832853
-Node: VAX Options\7f839561
-Node: VMS Options\7f840096
-Node: VxWorks Options\7f840909
-Node: x86-64 Options\7f842064
-Node: Xstormy16 Options\7f842282
-Node: Xtensa Options\7f842571
-Node: zSeries Options\7f846882
-Node: Code Gen Options\7f847078
-Node: Environment Variables\7f877946
-Node: Precompiled Headers\7f885949
-Node: C Implementation\7f891952
-Node: Translation implementation\7f893642
-Node: Environment implementation\7f894233
-Node: Identifiers implementation\7f894787
-Node: Characters implementation\7f895873
-Node: Integers implementation\7f899523
-Node: Floating point implementation\7f901408
-Node: Arrays and pointers implementation\7f904471
-Ref: Arrays and pointers implementation-Footnote-1\7f905931
-Node: Hints implementation\7f906057
-Node: Structures unions enumerations and bit-fields implementation\7f907542
-Node: Qualifiers implementation\7f909766
-Node: Declarators implementation\7f911546
-Node: Statements implementation\7f911887
-Node: Preprocessing directives implementation\7f912213
-Node: Library functions implementation\7f914534
-Node: Architecture implementation\7f915183
-Node: Locale-specific behavior implementation\7f916828
-Node: C++ Implementation\7f917133
-Node: Conditionally-supported behavior\7f918416
-Node: Exception handling\7f918925
-Node: C Extensions\7f919333
-Node: Statement Exprs\7f924403
-Node: Local Labels\7f928880
-Node: Labels as Values\7f931853
-Ref: Labels as Values-Footnote-1\7f934254
-Node: Nested Functions\7f934439
-Node: Constructing Calls\7f938397
-Node: Typeof\7f943114
-Node: Conditionals\7f947496
-Node: __int128\7f948385
-Node: Long Long\7f948910
-Node: Complex\7f950386
-Node: Floating Types\7f952974
-Node: Half-Precision\7f954102
-Node: Decimal Float\7f956287
-Node: Hex Floats\7f958143
-Node: Fixed-Point\7f959180
-Node: Named Address Spaces\7f962440
-Ref: AVR Named Address Spaces\7f963121
-Node: Zero Length\7f968329
-Node: Empty Structures\7f971616
-Node: Variable Length\7f972022
-Node: Variadic Macros\7f974878
-Node: Escaped Newlines\7f977256
-Node: Subscripting\7f978095
-Node: Pointer Arith\7f978820
-Node: Initializers\7f979388
-Node: Compound Literals\7f979884
-Node: Designated Inits\7f983245
-Node: Case Ranges\7f986983
-Node: Cast to Union\7f987664
-Node: Mixed Declarations\7f988754
-Node: Function Attributes\7f989264
-Node: Attribute Syntax\7f1083847
-Node: Function Prototypes\7f1094237
-Node: C++ Comments\7f1096017
-Node: Dollar Signs\7f1096536
-Node: Character Escapes\7f1097001
-Node: Variable Attributes\7f1097295
-Ref: AVR Variable Attributes\7f1110970
-Ref: MeP Variable Attributes\7f1113632
-Ref: i386 Variable Attributes\7f1115568
-Node: Type Attributes\7f1121229
-Ref: MeP Type Attributes\7f1135117
-Ref: i386 Type Attributes\7f1135391
-Ref: PowerPC Type Attributes\7f1136083
-Ref: SPU Type Attributes\7f1136945
-Node: Alignment\7f1137236
-Node: Inline\7f1138606
-Node: Volatiles\7f1143582
-Node: Extended Asm\7f1146463
-Ref: Example of asm with clobbered asm reg\7f1152367
-Ref: Extended asm with goto\7f1162080
-Node: Constraints\7f1169930
-Node: Simple Constraints\7f1171014
-Node: Multi-Alternative\7f1178324
-Node: Modifiers\7f1180041
-Node: Machine Constraints\7f1183054
-Node: Asm Labels\7f1240008
-Node: Explicit Reg Vars\7f1241684
-Node: Global Reg Vars\7f1243282
-Node: Local Reg Vars\7f1247778
-Node: Alternate Keywords\7f1250194
-Node: Incomplete Enums\7f1251680
-Node: Function Names\7f1252436
-Node: Return Address\7f1254597
-Node: Vector Extensions\7f1258104
-Node: Offsetof\7f1265033
-Node: __sync Builtins\7f1265838
-Node: __atomic Builtins\7f1271307
-Node: x86 specific memory model extensions for transactional memory\7f1282941
-Node: Object Size Checking\7f1284203
-Node: Cilk Plus Builtins\7f1289696
-Node: Other Builtins\7f1290565
-Node: Target Builtins\7f1319872
-Node: Alpha Built-in Functions\7f1321291
-Node: Altera Nios II Built-in Functions\7f1324304
-Node: ARC Built-in Functions\7f1328291
-Node: ARC SIMD Built-in Functions\7f1333503
-Node: ARM iWMMXt Built-in Functions\7f1342399
-Node: ARM NEON Intrinsics\7f1349382
-Node: ARM ACLE Intrinsics\7f1566876
-Node: AVR Built-in Functions\7f1568257
-Node: Blackfin Built-in Functions\7f1571335
-Node: FR-V Built-in Functions\7f1571952
-Node: Argument Types\7f1572815
-Node: Directly-mapped Integer Functions\7f1574569
-Node: Directly-mapped Media Functions\7f1575653
-Node: Raw read/write Functions\7f1583859
-Node: Other Built-in Functions\7f1584767
-Node: X86 Built-in Functions\7f1585953
-Node: X86 transactional memory intrinsics\7f1645162
-Node: MIPS DSP Built-in Functions\7f1647838
-Node: MIPS Paired-Single Support\7f1660347
-Node: MIPS Loongson Built-in Functions\7f1661846
-Node: Paired-Single Arithmetic\7f1668361
-Node: Paired-Single Built-in Functions\7f1669309
-Node: MIPS-3D Built-in Functions\7f1671976
-Node: Other MIPS Built-in Functions\7f1677354
-Node: MSP430 Built-in Functions\7f1678359
-Node: NDS32 Built-in Functions\7f1679263
-Node: picoChip Built-in Functions\7f1680556
-Node: PowerPC Built-in Functions\7f1681899
-Node: PowerPC AltiVec/VSX Built-in Functions\7f1683314
-Node: PowerPC Hardware Transactional Memory Built-in Functions\7f1815519
-Node: RX Built-in Functions\7f1822060
-Node: S/390 System z Built-in Functions\7f1826093
-Node: SH Built-in Functions\7f1831322
-Node: SPARC VIS Built-in Functions\7f1832714
-Node: SPU Built-in Functions\7f1838317
-Node: TI C6X Built-in Functions\7f1840134
-Node: TILE-Gx Built-in Functions\7f1841158
-Node: TILEPro Built-in Functions\7f1842275
-Node: Target Format Checks\7f1843342
-Node: Solaris Format Checks\7f1843774
-Node: Darwin Format Checks\7f1844200
-Node: Pragmas\7f1845018
-Node: ARM Pragmas\7f1845754
-Node: M32C Pragmas\7f1846357
-Node: MeP Pragmas\7f1847429
-Node: RS/6000 and PowerPC Pragmas\7f1849497
-Node: Darwin Pragmas\7f1850238
-Node: Solaris Pragmas\7f1851305
-Node: Symbol-Renaming Pragmas\7f1852469
-Node: Structure-Packing Pragmas\7f1854025
-Node: Weak Pragmas\7f1855670
-Node: Diagnostic Pragmas\7f1856404
-Node: Visibility Pragmas\7f1859513
-Node: Push/Pop Macro Pragmas\7f1860265
-Node: Function Specific Option Pragmas\7f1861238
-Node: Loop-Specific Pragmas\7f1863429
-Node: Unnamed Fields\7f1864528
-Node: Thread-Local\7f1866755
-Node: C99 Thread-Local Edits\7f1868860
-Node: C++98 Thread-Local Edits\7f1870858
-Node: Binary constants\7f1874303
-Node: C++ Extensions\7f1874974
-Node: C++ Volatiles\7f1876685
-Node: Restricted Pointers\7f1879033
-Node: Vague Linkage\7f1880624
-Node: C++ Interface\7f1884247
-Ref: C++ Interface-Footnote-1\7f1888535
-Node: Template Instantiation\7f1888673
-Node: Bound member functions\7f1895259
-Node: C++ Attributes\7f1896791
-Node: Function Multiversioning\7f1900370
-Node: Namespace Association\7f1902187
-Node: Type Traits\7f1903567
-Node: Java Exceptions\7f1910050
-Node: Deprecated Features\7f1911440
-Node: Backwards Compatibility\7f1914407
-Node: Objective-C\7f1915754
-Node: GNU Objective-C runtime API\7f1916361
-Node: Modern GNU Objective-C runtime API\7f1917368
-Node: Traditional GNU Objective-C runtime API\7f1919804
-Node: Executing code before main\7f1920531
-Node: What you can and what you cannot do in +load\7f1923269
-Node: Type encoding\7f1925657
-Node: Legacy type encoding\7f1930684
-Node: @encode\7f1931774
-Node: Method signatures\7f1932315
-Node: Garbage Collection\7f1934307
-Node: Constant string objects\7f1936996
-Node: compatibility_alias\7f1939504
-Node: Exceptions\7f1940225
-Node: Synchronization\7f1942935
-Node: Fast enumeration\7f1944119
-Node: Using fast enumeration\7f1944431
-Node: c99-like fast enumeration syntax\7f1945642
-Node: Fast enumeration details\7f1946345
-Node: Fast enumeration protocol\7f1948685
-Node: Messaging with the GNU Objective-C runtime\7f1951837
-Node: Dynamically registering methods\7f1953209
-Node: Forwarding hook\7f1954900
-Node: Compatibility\7f1957940
-Node: Gcov\7f1964496
-Node: Gcov Intro\7f1965029
-Node: Invoking Gcov\7f1967747
-Node: Gcov and Optimization\7f1981987
-Node: Gcov Data Files\7f1984989
-Node: Cross-profiling\7f1986384
-Node: Trouble\7f1988238
-Node: Actual Bugs\7f1989650
-Node: Interoperation\7f1990097
-Node: Incompatibilities\7f1996988
-Node: Fixed Headers\7f2005140
-Node: Standard Libraries\7f2006798
-Node: Disappointments\7f2008170
-Node: C++ Misunderstandings\7f2012529
-Node: Static Definitions\7f2013340
-Node: Name lookup\7f2014393
-Ref: Name lookup-Footnote-1\7f2019173
-Node: Temporaries\7f2019362
-Node: Copy Assignment\7f2021338
-Node: Non-bugs\7f2023145
-Node: Warnings and Errors\7f2033651
-Node: Bugs\7f2035413
-Node: Bug Criteria\7f2035880
-Node: Bug Reporting\7f2038090
-Node: Service\7f2038311
-Node: Contributing\7f2039130
-Node: Funding\7f2039870
-Node: GNU Project\7f2042360
-Node: Copying\7f2043006
-Node: GNU Free Documentation License\7f2080514
-Node: Contributors\7f2105631
-Node: Option Index\7f2143500
-Node: Keyword Index\7f2353567
+Node: Overall Options\7f63365
+Node: Invoking G++\7f77552
+Node: C Dialect Options\7f79075
+Node: C++ Dialect Options\7f96073
+Node: Objective-C and Objective-C++ Dialect Options\7f126618
+Node: Language Independent Options\7f137125
+Node: Warning Options\7f141625
+Node: Debugging Options\7f211664
+Node: Optimize Options\7f271725
+Ref: Type-punning\7f331285
+Node: Preprocessor Options\7f415022
+Ref: Wtrigraphs\7f419805
+Ref: dashMF\7f424555
+Ref: fdollars-in-identifiers\7f435436
+Node: Assembler Options\7f445661
+Node: Link Options\7f446352
+Ref: Link Options-Footnote-1\7f458492
+Node: Directory Options\7f458828
+Node: Spec Files\7f465372
+Node: Target Options\7f487201
+Node: Submodel Options\7f487600
+Node: AArch64 Options\7f489366
+Node: Adapteva Epiphany Options\7f494491
+Node: ARC Options\7f500439
+Node: ARM Options\7f512883
+Node: AVR Options\7f530181
+Node: Blackfin Options\7f550406
+Node: C6X Options\7f558424
+Node: CRIS Options\7f559967
+Node: CR16 Options\7f563706
+Node: Darwin Options\7f564617
+Node: DEC Alpha Options\7f572051
+Node: FR30 Options\7f583667
+Node: FRV Options\7f584231
+Node: GNU/Linux Options\7f590995
+Node: H8/300 Options\7f592255
+Node: HPPA Options\7f593707
+Node: i386 and x86-64 Options\7f603009
+Node: i386 and x86-64 Windows Options\7f645080
+Node: IA-64 Options\7f647933
+Node: LM32 Options\7f655999
+Node: M32C Options\7f656522
+Node: M32R/D Options\7f657795
+Node: M680x0 Options\7f661340
+Node: MCore Options\7f675375
+Node: MeP Options\7f676877
+Node: MicroBlaze Options\7f680837
+Node: MIPS Options\7f683639
+Node: MMIX Options\7f715524
+Node: MN10300 Options\7f718001
+Node: Moxie Options\7f720542
+Node: MSP430 Options\7f720912
+Node: NDS32 Options\7f724135
+Node: Nios II Options\7f726015
+Node: PDP-11 Options\7f734480
+Node: picoChip Options\7f736174
+Node: PowerPC Options\7f738312
+Node: RL78 Options\7f738533
+Node: RS/6000 and PowerPC Options\7f739194
+Node: RX Options\7f778124
+Node: S/390 and zSeries Options\7f785456
+Node: Score Options\7f794003
+Node: SH Options\7f794852
+Node: Solaris 2 Options\7f813523
+Node: SPARC Options\7f815045
+Node: SPU Options\7f828303
+Node: System V Options\7f833242
+Node: TILE-Gx Options\7f834068
+Node: TILEPro Options\7f835086
+Node: V850 Options\7f835590
+Node: VAX Options\7f842298
+Node: VMS Options\7f842833
+Node: VxWorks Options\7f843646
+Node: x86-64 Options\7f844801
+Node: Xstormy16 Options\7f845019
+Node: Xtensa Options\7f845308
+Node: zSeries Options\7f849619
+Node: Code Gen Options\7f849815
+Node: Environment Variables\7f880683
+Node: Precompiled Headers\7f888686
+Node: C Implementation\7f894689
+Node: Translation implementation\7f896379
+Node: Environment implementation\7f896970
+Node: Identifiers implementation\7f897524
+Node: Characters implementation\7f898610
+Node: Integers implementation\7f902260
+Node: Floating point implementation\7f904145
+Node: Arrays and pointers implementation\7f907208
+Ref: Arrays and pointers implementation-Footnote-1\7f908668
+Node: Hints implementation\7f908794
+Node: Structures unions enumerations and bit-fields implementation\7f910279
+Node: Qualifiers implementation\7f912503
+Node: Declarators implementation\7f914283
+Node: Statements implementation\7f914624
+Node: Preprocessing directives implementation\7f914950
+Node: Library functions implementation\7f917271
+Node: Architecture implementation\7f917920
+Node: Locale-specific behavior implementation\7f919565
+Node: C++ Implementation\7f919870
+Node: Conditionally-supported behavior\7f921153
+Node: Exception handling\7f921662
+Node: C Extensions\7f922070
+Node: Statement Exprs\7f927140
+Node: Local Labels\7f931617
+Node: Labels as Values\7f934590
+Ref: Labels as Values-Footnote-1\7f937117
+Node: Nested Functions\7f937302
+Node: Constructing Calls\7f941260
+Node: Typeof\7f945977
+Node: Conditionals\7f950359
+Node: __int128\7f951248
+Node: Long Long\7f951773
+Node: Complex\7f953249
+Node: Floating Types\7f955837
+Node: Half-Precision\7f956965
+Node: Decimal Float\7f959150
+Node: Hex Floats\7f961006
+Node: Fixed-Point\7f962043
+Node: Named Address Spaces\7f965303
+Ref: AVR Named Address Spaces\7f965984
+Node: Zero Length\7f971192
+Node: Empty Structures\7f974479
+Node: Variable Length\7f974885
+Node: Variadic Macros\7f977741
+Node: Escaped Newlines\7f980119
+Node: Subscripting\7f980958
+Node: Pointer Arith\7f981683
+Node: Initializers\7f982251
+Node: Compound Literals\7f982747
+Node: Designated Inits\7f986108
+Node: Case Ranges\7f989846
+Node: Cast to Union\7f990527
+Node: Mixed Declarations\7f991617
+Node: Function Attributes\7f992127
+Node: Attribute Syntax\7f1086710
+Node: Function Prototypes\7f1097100
+Node: C++ Comments\7f1098880
+Node: Dollar Signs\7f1099399
+Node: Character Escapes\7f1099864
+Node: Variable Attributes\7f1100158
+Ref: AVR Variable Attributes\7f1113833
+Ref: MeP Variable Attributes\7f1116495
+Ref: i386 Variable Attributes\7f1118431
+Node: Type Attributes\7f1124092
+Ref: MeP Type Attributes\7f1137980
+Ref: i386 Type Attributes\7f1138254
+Ref: PowerPC Type Attributes\7f1138946
+Ref: SPU Type Attributes\7f1139808
+Node: Alignment\7f1140099
+Node: Inline\7f1141469
+Node: Volatiles\7f1146445
+Node: Extended Asm\7f1149326
+Ref: Example of asm with clobbered asm reg\7f1155230
+Ref: Extended asm with goto\7f1164943
+Node: Constraints\7f1172793
+Node: Simple Constraints\7f1173877
+Node: Multi-Alternative\7f1181187
+Node: Modifiers\7f1182904
+Node: Machine Constraints\7f1185917
+Node: Asm Labels\7f1242871
+Node: Explicit Reg Vars\7f1244547
+Node: Global Reg Vars\7f1246145
+Node: Local Reg Vars\7f1250641
+Node: Alternate Keywords\7f1253057
+Node: Incomplete Enums\7f1254543
+Node: Function Names\7f1255299
+Node: Return Address\7f1257460
+Node: Vector Extensions\7f1260967
+Node: Offsetof\7f1267896
+Node: __sync Builtins\7f1268701
+Node: __atomic Builtins\7f1274170
+Node: x86 specific memory model extensions for transactional memory\7f1285804
+Node: Object Size Checking\7f1287066
+Node: Cilk Plus Builtins\7f1292559
+Node: Other Builtins\7f1293428
+Node: Target Builtins\7f1322735
+Node: Alpha Built-in Functions\7f1324154
+Node: Altera Nios II Built-in Functions\7f1327167
+Node: ARC Built-in Functions\7f1331154
+Node: ARC SIMD Built-in Functions\7f1336366
+Node: ARM iWMMXt Built-in Functions\7f1345262
+Node: ARM NEON Intrinsics\7f1352245
+Node: ARM ACLE Intrinsics\7f1569739
+Node: AVR Built-in Functions\7f1571067
+Node: Blackfin Built-in Functions\7f1574145
+Node: FR-V Built-in Functions\7f1574762
+Node: Argument Types\7f1575625
+Node: Directly-mapped Integer Functions\7f1577379
+Node: Directly-mapped Media Functions\7f1578463
+Node: Raw read/write Functions\7f1586669
+Node: Other Built-in Functions\7f1587577
+Node: X86 Built-in Functions\7f1588763
+Node: X86 transactional memory intrinsics\7f1647954
+Node: MIPS DSP Built-in Functions\7f1650630
+Node: MIPS Paired-Single Support\7f1663139
+Node: MIPS Loongson Built-in Functions\7f1664638
+Node: Paired-Single Arithmetic\7f1671153
+Node: Paired-Single Built-in Functions\7f1672101
+Node: MIPS-3D Built-in Functions\7f1674768
+Node: Other MIPS Built-in Functions\7f1680146
+Node: MSP430 Built-in Functions\7f1681151
+Node: NDS32 Built-in Functions\7f1682055
+Node: picoChip Built-in Functions\7f1683348
+Node: PowerPC Built-in Functions\7f1684691
+Node: PowerPC AltiVec/VSX Built-in Functions\7f1688400
+Node: PowerPC Hardware Transactional Memory Built-in Functions\7f1821298
+Node: RX Built-in Functions\7f1827839
+Node: S/390 System z Built-in Functions\7f1831872
+Node: SH Built-in Functions\7f1837101
+Node: SPARC VIS Built-in Functions\7f1838493
+Node: SPU Built-in Functions\7f1844096
+Node: TI C6X Built-in Functions\7f1845913
+Node: TILE-Gx Built-in Functions\7f1846937
+Node: TILEPro Built-in Functions\7f1848054
+Node: Target Format Checks\7f1849121
+Node: Solaris Format Checks\7f1849553
+Node: Darwin Format Checks\7f1849979
+Node: Pragmas\7f1850797
+Node: ARM Pragmas\7f1851533
+Node: M32C Pragmas\7f1852136
+Node: MeP Pragmas\7f1853208
+Node: RS/6000 and PowerPC Pragmas\7f1855276
+Node: Darwin Pragmas\7f1856017
+Node: Solaris Pragmas\7f1857084
+Node: Symbol-Renaming Pragmas\7f1858248
+Node: Structure-Packing Pragmas\7f1859804
+Node: Weak Pragmas\7f1861449
+Node: Diagnostic Pragmas\7f1862183
+Node: Visibility Pragmas\7f1865292
+Node: Push/Pop Macro Pragmas\7f1866044
+Node: Function Specific Option Pragmas\7f1867017
+Node: Loop-Specific Pragmas\7f1869208
+Node: Unnamed Fields\7f1870307
+Node: Thread-Local\7f1872534
+Node: C99 Thread-Local Edits\7f1874639
+Node: C++98 Thread-Local Edits\7f1876637
+Node: Binary constants\7f1880082
+Node: C++ Extensions\7f1880753
+Node: C++ Volatiles\7f1882464
+Node: Restricted Pointers\7f1884812
+Node: Vague Linkage\7f1886403
+Node: C++ Interface\7f1890026
+Ref: C++ Interface-Footnote-1\7f1894314
+Node: Template Instantiation\7f1894452
+Node: Bound member functions\7f1901038
+Node: C++ Attributes\7f1902570
+Node: Function Multiversioning\7f1906149
+Node: Namespace Association\7f1907966
+Node: Type Traits\7f1909346
+Node: Java Exceptions\7f1915829
+Node: Deprecated Features\7f1917219
+Node: Backwards Compatibility\7f1920186
+Node: Objective-C\7f1921533
+Node: GNU Objective-C runtime API\7f1922140
+Node: Modern GNU Objective-C runtime API\7f1923147
+Node: Traditional GNU Objective-C runtime API\7f1925583
+Node: Executing code before main\7f1926310
+Node: What you can and what you cannot do in +load\7f1929048
+Node: Type encoding\7f1931436
+Node: Legacy type encoding\7f1936463
+Node: @encode\7f1937553
+Node: Method signatures\7f1938094
+Node: Garbage Collection\7f1940086
+Node: Constant string objects\7f1942775
+Node: compatibility_alias\7f1945283
+Node: Exceptions\7f1946004
+Node: Synchronization\7f1948714
+Node: Fast enumeration\7f1949898
+Node: Using fast enumeration\7f1950210
+Node: c99-like fast enumeration syntax\7f1951421
+Node: Fast enumeration details\7f1952124
+Node: Fast enumeration protocol\7f1954464
+Node: Messaging with the GNU Objective-C runtime\7f1957616
+Node: Dynamically registering methods\7f1958988
+Node: Forwarding hook\7f1960679
+Node: Compatibility\7f1963719
+Node: Gcov\7f1970275
+Node: Gcov Intro\7f1970808
+Node: Invoking Gcov\7f1973526
+Node: Gcov and Optimization\7f1987766
+Node: Gcov Data Files\7f1990768
+Node: Cross-profiling\7f1992163
+Node: Trouble\7f1994017
+Node: Actual Bugs\7f1995429
+Node: Interoperation\7f1995876
+Node: Incompatibilities\7f2002767
+Node: Fixed Headers\7f2010919
+Node: Standard Libraries\7f2012577
+Node: Disappointments\7f2013949
+Node: C++ Misunderstandings\7f2018308
+Node: Static Definitions\7f2019119
+Node: Name lookup\7f2020172
+Ref: Name lookup-Footnote-1\7f2024952
+Node: Temporaries\7f2025141
+Node: Copy Assignment\7f2027117
+Node: Non-bugs\7f2028924
+Node: Warnings and Errors\7f2039430
+Node: Bugs\7f2041192
+Node: Bug Criteria\7f2041659
+Node: Bug Reporting\7f2043869
+Node: Service\7f2044090
+Node: Contributing\7f2044909
+Node: Funding\7f2045649
+Node: GNU Project\7f2048139
+Node: Copying\7f2048785
+Node: GNU Free Documentation License\7f2086293
+Node: Contributors\7f2111410
+Node: Option Index\7f2149279
+Node: Keyword Index\7f2359638
 \1f
 End Tag Table
index 5c8cb8c..3a7a7b4 100644 (file)
@@ -2266,9 +2266,7 @@ information collected.
 
    Unlike standard bootstrap, several additional restrictions apply.
 The compiler used to build 'stage1' needs to support a 64-bit integral
-type.  It is recommended to only use GCC for this.  Also parallel make
-is currently not supported since collisions in profile collecting may
-occur.
+type.  It is recommended to only use GCC for this.
 
 \1f
 File: gccinstall.info,  Node: Testing,  Next: Final install,  Prev: Building,  Up: Installing GCC
@@ -2604,10 +2602,6 @@ makers.
    * SCO OpenServer/Unixware.
 
    * Solaris 2 (SPARC, Intel):
-        * Sunfreeware
-
-        * Blastwave
-
         * OpenCSW
 
         * TGCware
@@ -3085,9 +3079,9 @@ the system libunwind library will always be used.
 aarch64*-*-*
 ============
 
-Pre 2.24 binutils does not have support for selecting -mabi and does not
-support ILP32.  If GCC 4.9 or later is built with pre 2.24, GCC will not
-support option -mabi=ilp32.
+Binutils pre 2.24 does not have support for selecting '-mabi' and does
+not support ILP32.  If it is used to build GCC 4.9 or later, GCC will
+not support option '-mabi=ilp32'.
 
 *-ibm-aix*
 ==========
@@ -4589,91 +4583,91 @@ Ref: with-gnu-as\7f32585
 Ref: with-as\7f33480
 Ref: with-gnu-ld\7f34893
 Node: Building\7f84585
-Node: Testing\7f100052
-Node: Final install\7f107914
-Node: Binaries\7f113225
-Node: Specific\7f114733
-Ref: alpha-x-x\7f115240
-Ref: alpha-dec-osf51\7f115729
-Ref: amd64-x-solaris210\7f116254
-Ref: arc-x-elf32\7f116357
-Ref: arc-linux-uclibc\7f116533
-Ref: arm-x-eabi\7f116674
-Ref: avr\7f116885
-Ref: bfin\7f117524
-Ref: cr16\7f117765
-Ref: cris\7f118181
-Ref: dos\7f118996
-Ref: epiphany-x-elf\7f119319
-Ref: x-x-freebsd\7f119424
-Ref: h8300-hms\7f121260
-Ref: hppa-hp-hpux\7f121612
-Ref: hppa-hp-hpux10\7f123984
-Ref: hppa-hp-hpux11\7f124397
-Ref: x-x-linux-gnu\7f130056
-Ref: ix86-x-linux\7f130249
-Ref: ix86-x-solaris29\7f130562
-Ref: ix86-x-solaris210\7f131341
-Ref: ia64-x-linux\7f132532
-Ref: ia64-x-hpux\7f133302
-Ref: aarch64-x-x\7f133857
-Ref: x-ibm-aix\7f134059
-Ref: iq2000-x-elf\7f140922
-Ref: lm32-x-elf\7f141062
-Ref: lm32-x-uclinux\7f141166
-Ref: m32c-x-elf\7f141294
-Ref: m32r-x-elf\7f141396
-Ref: m68k-x-x\7f141498
-Ref: m68k-x-uclinux\7f142536
-Ref: mep-x-elf\7f142781
-Ref: microblaze-x-elf\7f142891
-Ref: mips-x-x\7f143010
-Ref: mips-sgi-irix5\7f145404
-Ref: mips-sgi-irix6\7f145484
-Ref: moxie-x-elf\7f145671
-Ref: msp430-x-elf\7f145718
-Ref: nds32le-x-elf\7f145821
-Ref: nds32be-x-elf\7f145893
-Ref: powerpc-x-x\7f145962
-Ref: powerpc-x-darwin\7f146167
-Ref: powerpc-x-elf\7f146661
-Ref: powerpc-x-linux-gnu\7f146746
-Ref: powerpc-x-netbsd\7f146841
-Ref: powerpc-x-eabisim\7f146929
-Ref: powerpc-x-eabi\7f147055
-Ref: powerpcle-x-elf\7f147131
-Ref: powerpcle-x-eabisim\7f147223
-Ref: powerpcle-x-eabi\7f147356
-Ref: rl78-x-elf\7f147439
-Ref: rx-x-elf\7f147545
-Ref: s390-x-linux\7f147744
-Ref: s390x-x-linux\7f147816
-Ref: s390x-ibm-tpf\7f147903
-Ref: x-x-solaris2\7f148034
-Ref: sparc-x-x\7f152955
-Ref: sparc-sun-solaris2\7f153457
-Ref: sparc-sun-solaris210\7f156210
-Ref: sparc-x-linux\7f156585
-Ref: sparc64-x-solaris2\7f156810
-Ref: sparcv9-x-solaris2\7f157463
-Ref: c6x-x-x\7f157550
-Ref: tilegx-*-linux\7f157642
-Ref: tilegxbe-*-linux\7f157784
-Ref: tilepro-*-linux\7f157927
-Ref: x-x-vxworks\7f158048
-Ref: x86-64-x-x\7f159571
-Ref: x86-64-x-solaris210\7f159899
-Ref: xtensa-x-elf\7f160561
-Ref: xtensa-x-linux\7f161232
-Ref: windows\7f161573
-Ref: x-x-cygwin\7f163506
-Ref: x-x-interix\7f164059
-Ref: x-x-mingw32\7f164367
-Ref: older\7f164593
-Ref: elf\7f166710
-Node: Old\7f166968
-Node: Configurations\7f170101
-Node: GNU Free Documentation License\7f173639
-Node: Concept Index\7f198766
+Node: Testing\7f99955
+Node: Final install\7f107817
+Node: Binaries\7f113128
+Node: Specific\7f114592
+Ref: alpha-x-x\7f115099
+Ref: alpha-dec-osf51\7f115588
+Ref: amd64-x-solaris210\7f116113
+Ref: arc-x-elf32\7f116216
+Ref: arc-linux-uclibc\7f116392
+Ref: arm-x-eabi\7f116533
+Ref: avr\7f116744
+Ref: bfin\7f117383
+Ref: cr16\7f117624
+Ref: cris\7f118040
+Ref: dos\7f118855
+Ref: epiphany-x-elf\7f119178
+Ref: x-x-freebsd\7f119283
+Ref: h8300-hms\7f121119
+Ref: hppa-hp-hpux\7f121471
+Ref: hppa-hp-hpux10\7f123843
+Ref: hppa-hp-hpux11\7f124256
+Ref: x-x-linux-gnu\7f129915
+Ref: ix86-x-linux\7f130108
+Ref: ix86-x-solaris29\7f130421
+Ref: ix86-x-solaris210\7f131200
+Ref: ia64-x-linux\7f132391
+Ref: ia64-x-hpux\7f133161
+Ref: aarch64-x-x\7f133716
+Ref: x-ibm-aix\7f133919
+Ref: iq2000-x-elf\7f140782
+Ref: lm32-x-elf\7f140922
+Ref: lm32-x-uclinux\7f141026
+Ref: m32c-x-elf\7f141154
+Ref: m32r-x-elf\7f141256
+Ref: m68k-x-x\7f141358
+Ref: m68k-x-uclinux\7f142396
+Ref: mep-x-elf\7f142641
+Ref: microblaze-x-elf\7f142751
+Ref: mips-x-x\7f142870
+Ref: mips-sgi-irix5\7f145264
+Ref: mips-sgi-irix6\7f145344
+Ref: moxie-x-elf\7f145531
+Ref: msp430-x-elf\7f145578
+Ref: nds32le-x-elf\7f145681
+Ref: nds32be-x-elf\7f145753
+Ref: powerpc-x-x\7f145822
+Ref: powerpc-x-darwin\7f146027
+Ref: powerpc-x-elf\7f146521
+Ref: powerpc-x-linux-gnu\7f146606
+Ref: powerpc-x-netbsd\7f146701
+Ref: powerpc-x-eabisim\7f146789
+Ref: powerpc-x-eabi\7f146915
+Ref: powerpcle-x-elf\7f146991
+Ref: powerpcle-x-eabisim\7f147083
+Ref: powerpcle-x-eabi\7f147216
+Ref: rl78-x-elf\7f147299
+Ref: rx-x-elf\7f147405
+Ref: s390-x-linux\7f147604
+Ref: s390x-x-linux\7f147676
+Ref: s390x-ibm-tpf\7f147763
+Ref: x-x-solaris2\7f147894
+Ref: sparc-x-x\7f152815
+Ref: sparc-sun-solaris2\7f153317
+Ref: sparc-sun-solaris210\7f156070
+Ref: sparc-x-linux\7f156445
+Ref: sparc64-x-solaris2\7f156670
+Ref: sparcv9-x-solaris2\7f157323
+Ref: c6x-x-x\7f157410
+Ref: tilegx-*-linux\7f157502
+Ref: tilegxbe-*-linux\7f157644
+Ref: tilepro-*-linux\7f157787
+Ref: x-x-vxworks\7f157908
+Ref: x86-64-x-x\7f159431
+Ref: x86-64-x-solaris210\7f159759
+Ref: xtensa-x-elf\7f160421
+Ref: xtensa-x-linux\7f161092
+Ref: windows\7f161433
+Ref: x-x-cygwin\7f163366
+Ref: x-x-interix\7f163919
+Ref: x-x-mingw32\7f164227
+Ref: older\7f164453
+Ref: elf\7f166570
+Node: Old\7f166828
+Node: Configurations\7f169961
+Node: GNU Free Documentation License\7f173499
+Node: Concept Index\7f198626
 \1f
 End Tag Table
index c4b7319..4183255 100644 (file)
@@ -55,7 +55,7 @@ Introduction
 This manual documents the internals of the GNU compilers, including how
 to port them to new targets and some information about how to write
 front ends for new languages.  It corresponds to the compilers (GCC)
-version 4.9.0.  The use of the GNU compilers is documented in a separate
+version 4.9.1.  The use of the GNU compilers is documented in a separate
 manual.  *Note Introduction: (gcc)Top.
 
  This manual is mainly a reference manual rather than a tutorial.  It
@@ -4539,6 +4539,9 @@ specified for the particular test in an earlier 'dg-options' or
 'double64plus'
      Target has 'double' that is 64 bits or longer.
 
+'longdouble128'
+     Target has 128-bit 'long double'.
+
 'int32plus'
      Target has 'int' that is at 32 bits or longer.
 
@@ -4835,6 +4838,12 @@ specified for the particular test in an earlier 'dg-options' or
 7.2.3.8 PowerPC-specific attributes
 ...................................
 
+'dfp_hw'
+     PowerPC target supports executing hardware DFP instructions.
+
+'p8vector_hw'
+     PowerPC target supports executing VSX instructions (ISA 2.07).
+
 'powerpc64'
      Test system supports executing 64-bit instructions.
 
@@ -4844,12 +4853,24 @@ specified for the particular test in an earlier 'dg-options' or
 'powerpc_altivec_ok'
      PowerPC target supports '-maltivec'.
 
+'powerpc_eabi_ok'
+     PowerPC target supports '-meabi'.
+
+'powerpc_elfv2'
+     PowerPC target supports '-mabi=elfv2'.
+
 'powerpc_fprs'
      PowerPC target supports floating-point registers.
 
 'powerpc_hard_double'
      PowerPC target supports hardware double-precision floating-point.
 
+'powerpc_htm_ok'
+     PowerPC target supports '-mhtm'
+
+'powerpc_p8vector_ok'
+     PowerPC target supports '-mpower8-vector'
+
 'powerpc_ppu_ok'
      PowerPC target supports '-mcpu=cell'.
 
@@ -4863,10 +4884,6 @@ specified for the particular test in an earlier 'dg-options' or
 'powerpc_spu'
      PowerPC target supports PowerPC SPU.
 
-'spu_auto_overlay'
-     SPU target has toolchain that supports automatic overlay
-     generation.
-
 'powerpc_vsx_ok'
      PowerPC target supports '-mvsx'.
 
@@ -4874,9 +4891,19 @@ specified for the particular test in an earlier 'dg-options' or
      Including the options used to compile this particular test, the
      PowerPC target supports PowerPC 405.
 
+'ppc_recip_hw'
+     PowerPC target supports executing reciprocal estimate instructions.
+
+'spu_auto_overlay'
+     SPU target has toolchain that supports automatic overlay
+     generation.
+
 'vmx_hw'
      PowerPC target supports executing AltiVec instructions.
 
+'vsx_hw'
+     PowerPC target supports executing VSX instructions (ISA 2.06).
+
 7.2.3.9 Other hardware attributes
 .................................
 
@@ -30693,6 +30720,12 @@ certain arguments in registers.
      machine-dependent stack frame: 'OUTGOING_REG_PARM_STACK_SPACE' says
      which.
 
+ -- Macro: INCOMING_REG_PARM_STACK_SPACE (FNDECL)
+     Like 'REG_PARM_STACK_SPACE', but for incoming register arguments.
+     Define this macro if space guaranteed when compiling a function
+     body is different to space required when making a call, a situation
+     that can arise with K&R style function definitions.
+
  -- Macro: OUTGOING_REG_PARM_STACK_SPACE (FNTYPE)
      Define this to a nonzero value if it is the responsibility of the
      caller to allocate the area reserved for arguments passed in
@@ -46290,7 +46323,7 @@ Concept Index
 * 'call_insn' and '/v':                  Flags.              (line   44)
 * CALL_INSN_FUNCTION_USAGE:              Insns.              (line  101)
 * 'call_pop' instruction pattern:        Standard Names.     (line 1148)
-* CALL_POPS_ARGS:                        Stack Arguments.    (line  132)
+* CALL_POPS_ARGS:                        Stack Arguments.    (line  138)
 * CALL_REALLY_USED_REGISTERS:            Register Basics.    (line   45)
 * CALL_USED_REGISTERS:                   Register Basics.    (line   34)
 * call_used_regs:                        Register Basics.    (line   59)
@@ -47681,6 +47714,7 @@ Concept Index
 * inclusive-or, bitwise:                 Arithmetic.         (line  164)
 * INCOMING_FRAME_SP_OFFSET:              Frame Layout.       (line  181)
 * INCOMING_REGNO:                        Register Basics.    (line   87)
+* INCOMING_REG_PARM_STACK_SPACE:         Stack Arguments.    (line   73)
 * INCOMING_RETURN_ADDR_RTX:              Frame Layout.       (line  137)
 * INCOMING_STACK_BOUNDARY:               Storage Layout.     (line  154)
 * INDEX_REG_CLASS:                       Register Classes.   (line  140)
@@ -48289,7 +48323,7 @@ Concept Index
 * other register constraints:            Simple Constraints. (line  171)
 * outgoing_args_size:                    Stack Arguments.    (line   48)
 * OUTGOING_REGNO:                        Register Basics.    (line   94)
-* OUTGOING_REG_PARM_STACK_SPACE:         Stack Arguments.    (line   73)
+* OUTGOING_REG_PARM_STACK_SPACE:         Stack Arguments.    (line   79)
 * output of assembler code:              File Framework.     (line    6)
 * output statements:                     Output Statement.   (line    6)
 * output templates:                      Output Template.    (line    6)
@@ -48850,7 +48884,7 @@ Concept Index
 * 'STACK_DYNAMIC_OFFSET' and virtual registers: Regs and Memory.
                                                              (line   83)
 * STACK_GROWS_DOWNWARD:                  Frame Layout.       (line    8)
-* STACK_PARMS_IN_REG_PARM_AREA:          Stack Arguments.    (line   83)
+* STACK_PARMS_IN_REG_PARM_AREA:          Stack Arguments.    (line   89)
 * STACK_POINTER_OFFSET:                  Frame Layout.       (line   57)
 * 'STACK_POINTER_OFFSET' and virtual registers: Regs and Memory.
                                                              (line   93)
@@ -49329,7 +49363,7 @@ Concept Index
 * TARGET_RESOLVE_OVERLOADED_BUILTIN:     Misc.               (line  624)
 * TARGET_RETURN_IN_MEMORY:               Aggregate Return.   (line   15)
 * TARGET_RETURN_IN_MSB:                  Scalar Return.      (line  117)
-* TARGET_RETURN_POPS_ARGS:               Stack Arguments.    (line   92)
+* TARGET_RETURN_POPS_ARGS:               Stack Arguments.    (line   98)
 * TARGET_RTX_COSTS:                      Costs.              (line  269)
 * TARGET_SCALAR_MODE_SUPPORTED_P:        Register Arguments. (line  315)
 * TARGET_SCHED_ADJUST_COST:              Scheduling.         (line   35)
@@ -49967,341 +50001,341 @@ Node: Test Directives\7f204042
 Node: Directives\7f204569
 Node: Selectors\7f214866
 Node: Effective-Target Keywords\7f216222
-Ref: arm_neon_ok\7f223910
-Ref: arm_neonv2_ok\7f224068
-Ref: arm_neon_fp16_ok\7f224240
-Ref: arm_vfp3_ok\7f224680
-Node: Add Options\7f234179
-Node: Require Support\7f235496
-Node: Final Actions\7f238003
-Node: Ada Tests\7f243168
-Node: C Tests\7f244499
-Node: libgcj Tests\7f248894
-Node: LTO Testing\7f250021
-Node: gcov Testing\7f251669
-Node: profopt Testing\7f254659
-Node: compat Testing\7f256374
-Node: Torture Tests\7f260614
-Node: Options\7f262229
-Node: Option file format\7f262670
-Node: Option properties\7f269659
-Node: Passes\7f282686
-Node: Parsing pass\7f283576
-Node: Cilk Plus Transformation\7f287109
-Node: Gimplification pass\7f290491
-Node: Pass manager\7f292336
-Node: Tree SSA passes\7f294182
-Node: RTL passes\7f315249
-Node: Optimization info\7f327613
-Node: Dump setup\7f328432
-Node: Optimization groups\7f329561
-Node: Dump files and streams\7f330450
-Node: Dump output verbosity\7f331648
-Node: Dump types\7f332704
-Node: Dump examples\7f334194
-Node: GENERIC\7f335540
-Node: Deficiencies\7f337416
-Node: Tree overview\7f337657
-Node: Macros and Functions\7f341781
-Node: Identifiers\7f342606
-Node: Containers\7f344215
-Node: Types\7f345372
-Node: Declarations\7f357446
-Node: Working with declarations\7f357941
-Node: Internal structure\7f363545
-Node: Current structure hierarchy\7f363929
-Node: Adding new DECL node types\7f366022
-Node: Attributes\7f370306
-Node: Expression trees\7f371550
-Node: Constant expressions\7f373304
-Node: Storage References\7f377517
-Node: Unary and Binary Expressions\7f381036
-Node: Vectors\7f401184
-Node: Statements\7f405916
-Node: Basic Statements\7f406436
-Node: Blocks\7f410943
-Node: Statement Sequences\7f412347
-Node: Empty Statements\7f412680
-Node: Jumps\7f413254
-Node: Cleanups\7f413907
-Node: OpenMP\7f415674
-Node: Functions\7f421518
-Node: Function Basics\7f421989
-Node: Function Properties\7f425673
-Node: Language-dependent trees\7f428454
-Node: C and C++ Trees\7f429341
-Node: Types for C++\7f432245
-Node: Namespaces\7f437215
-Node: Classes\7f440321
-Node: Functions for C++\7f445398
-Node: Statements for C++\7f451649
-Node: C++ Expressions\7f460422
-Node: Java Trees\7f461927
-Node: GIMPLE\7f462040
-Node: Tuple representation\7f465664
-Node: GIMPLE instruction set\7f473968
-Node: GIMPLE Exception Handling\7f475584
-Node: Temporaries\7f477496
-Ref: Temporaries-Footnote-1\7f478814
-Node: Operands\7f478879
-Node: Compound Expressions\7f479640
-Node: Compound Lvalues\7f479874
-Node: Conditional Expressions\7f480636
-Node: Logical Operators\7f481295
-Node: Manipulating GIMPLE statements\7f488153
-Node: Tuple specific accessors\7f494089
-Node: 'GIMPLE_ASM'\7f494908
-Node: 'GIMPLE_ASSIGN'\7f497425
-Node: 'GIMPLE_BIND'\7f501531
-Node: 'GIMPLE_CALL'\7f503339
-Node: 'GIMPLE_CATCH'\7f507610
-Node: 'GIMPLE_COND'\7f508754
-Node: 'GIMPLE_DEBUG'\7f511542
-Node: 'GIMPLE_EH_FILTER'\7f514920
-Node: 'GIMPLE_LABEL'\7f516408
-Node: 'GIMPLE_NOP'\7f517383
-Node: 'GIMPLE_OMP_ATOMIC_LOAD'\7f517752
-Node: 'GIMPLE_OMP_ATOMIC_STORE'\7f518662
-Node: 'GIMPLE_OMP_CONTINUE'\7f519302
-Node: 'GIMPLE_OMP_CRITICAL'\7f520652
-Node: 'GIMPLE_OMP_FOR'\7f521590
-Node: 'GIMPLE_OMP_MASTER'\7f525105
-Node: 'GIMPLE_OMP_ORDERED'\7f525489
-Node: 'GIMPLE_OMP_PARALLEL'\7f525889
-Node: 'GIMPLE_OMP_RETURN'\7f528522
-Node: 'GIMPLE_OMP_SECTION'\7f529173
-Node: 'GIMPLE_OMP_SECTIONS'\7f529839
-Node: 'GIMPLE_OMP_SINGLE'\7f531446
-Node: 'GIMPLE_PHI'\7f532384
-Node: 'GIMPLE_RESX'\7f533671
-Node: 'GIMPLE_RETURN'\7f534390
-Node: 'GIMPLE_SWITCH'\7f534958
-Node: 'GIMPLE_TRY'\7f536760
-Node: 'GIMPLE_WITH_CLEANUP_EXPR'\7f538551
-Node: GIMPLE sequences\7f539434
-Node: Sequence iterators\7f542640
-Node: Adding a new GIMPLE statement code\7f551095
-Node: Statement and operand traversals\7f552371
-Node: Tree SSA\7f554963
-Node: Annotations\7f556751
-Node: SSA Operands\7f557156
-Node: SSA\7f571230
-Node: Alias analysis\7f582262
-Node: Memory model\7f586036
-Node: RTL\7f587395
-Node: RTL Objects\7f589583
-Node: RTL Classes\7f593457
-Node: Accessors\7f598454
-Node: Special Accessors\7f600848
-Node: Flags\7f606635
-Node: Machine Modes\7f621399
-Node: Constants\7f634687
-Node: Regs and Memory\7f641415
-Node: Arithmetic\7f659303
-Node: Comparisons\7f669385
-Node: Bit-Fields\7f673677
-Node: Vector Operations\7f675229
-Node: Conversions\7f677110
-Node: RTL Declarations\7f681608
-Node: Side Effects\7f682429
-Node: Incdec\7f699439
-Node: Assembler\7f702775
-Node: Debug Information\7f704320
-Node: Insns\7f705517
-Node: Calls\7f731938
-Node: Sharing\7f734531
-Node: Reading RTL\7f737642
-Node: Control Flow\7f738633
-Node: Basic Blocks\7f740402
-Node: Edges\7f745691
-Node: Profile information\7f754320
-Node: Maintaining the CFG\7f759004
-Node: Liveness information\7f764865
-Node: Loop Analysis and Representation\7f766991
-Node: Loop representation\7f768101
-Node: Loop querying\7f775664
-Node: Loop manipulation\7f778480
-Node: LCSSA\7f780841
-Node: Scalar evolutions\7f782910
-Node: loop-iv\7f786154
-Node: Number of iterations\7f788076
-Node: Dependency analysis\7f790882
-Node: Omega\7f797246
-Node: Machine Desc\7f798822
-Node: Overview\7f801385
-Node: Patterns\7f803425
-Node: Example\7f806863
-Node: RTL Template\7f808297
-Node: Output Template\7f818952
-Node: Output Statement\7f822915
-Node: Predicates\7f827254
-Node: Machine-Independent Predicates\7f830172
-Node: Defining Predicates\7f835116
-Node: Constraints\7f841079
-Node: Simple Constraints\7f842561
-Node: Multi-Alternative\7f855401
-Node: Class Preferences\7f858242
-Node: Modifiers\7f859134
-Node: Machine Constraints\7f863380
-Node: Disable Insn Alternatives\7f921548
-Node: Define Constraints\7f924449
-Node: C Constraint Interface\7f931234
-Node: Standard Names\7f934886
-Ref: shift patterns\7f958034
-Ref: prologue instruction pattern\7f1002791
-Ref: window_save instruction pattern\7f1003284
-Ref: epilogue instruction pattern\7f1003561
-Node: Pattern Ordering\7f1021147
-Node: Dependent Patterns\7f1022383
-Node: Jump Patterns\7f1024003
-Ref: Jump Patterns-Footnote-1\7f1026150
-Node: Looping Patterns\7f1026198
-Node: Insn Canonicalizations\7f1030927
-Node: Expander Definitions\7f1035512
-Node: Insn Splitting\7f1043726
-Node: Including Patterns\7f1053327
-Node: Peephole Definitions\7f1055108
-Node: define_peephole\7f1056361
-Node: define_peephole2\7f1062691
-Node: Insn Attributes\7f1065757
-Node: Defining Attributes\7f1066939
-Ref: define_enum_attr\7f1070432
-Node: Expressions\7f1071468
-Node: Tagging Insns\7f1078218
-Node: Attr Example\7f1082571
-Node: Insn Lengths\7f1084944
-Node: Constant Attributes\7f1088003
-Node: Mnemonic Attribute\7f1089179
-Node: Delay Slots\7f1090698
-Node: Processor pipeline description\7f1093921
-Ref: Processor pipeline description-Footnote-1\7f1112739
-Node: Conditional Execution\7f1113063
-Node: Define Subst\7f1116546
-Node: Define Subst Example\7f1118582
-Node: Define Subst Pattern Matching\7f1121576
-Node: Define Subst Output Template\7f1122802
-Node: Constant Definitions\7f1124872
-Ref: define_enum\7f1128654
-Node: Iterators\7f1129142
-Node: Mode Iterators\7f1129720
-Node: Defining Mode Iterators\7f1130698
-Node: Substitutions\7f1132192
-Node: Examples\7f1134434
-Node: Code Iterators\7f1135882
-Node: Int Iterators\7f1138161
-Node: Subst Iterators\7f1140605
-Node: Target Macros\7f1142297
-Node: Target Structure\7f1145385
-Node: Driver\7f1147501
-Node: Run-time Target\7f1166313
-Node: Per-Function Data\7f1176024
-Node: Storage Layout\7f1178788
-Node: Type Layout\7f1205040
-Node: Registers\7f1220363
-Node: Register Basics\7f1221337
-Node: Allocation Order\7f1226845
-Node: Values in Registers\7f1229291
-Node: Leaf Functions\7f1236769
-Node: Stack Registers\7f1239628
-Node: Register Classes\7f1240900
-Node: Old Constraints\7f1271844
-Node: Stack and Calling\7f1278984
-Node: Frame Layout\7f1279518
-Node: Exception Handling\7f1290394
-Node: Stack Checking\7f1296606
-Node: Frame Registers\7f1301420
-Node: Elimination\7f1309679
-Node: Stack Arguments\7f1313909
-Node: Register Arguments\7f1320772
-Node: Scalar Return\7f1341073
-Node: Aggregate Return\7f1347160
-Node: Caller Saves\7f1351371
-Node: Function Entry\7f1352548
-Node: Profiling\7f1363642
-Node: Tail Calls\7f1365341
-Node: Stack Smashing Protection\7f1367244
-Node: Varargs\7f1368872
-Node: Trampolines\7f1375559
-Node: Library Calls\7f1381602
-Node: Addressing Modes\7f1386286
-Node: Anchored Addresses\7f1407254
-Node: Condition Code\7f1409897
-Node: CC0 Condition Codes\7f1412224
-Node: MODE_CC Condition Codes\7f1415470
-Node: Costs\7f1421922
-Node: Scheduling\7f1438384
-Node: Sections\7f1458342
-Node: PIC\7f1474040
-Node: Assembler Format\7f1476099
-Node: File Framework\7f1477237
-Ref: TARGET_HAVE_SWITCHABLE_BSS_SECTIONS\7f1484169
-Node: Data Output\7f1487439
-Node: Uninitialized Data\7f1495208
-Node: Label Output\7f1500219
-Node: Initialization\7f1523175
-Node: Macros for Initialization\7f1529136
-Node: Instruction Output\7f1535855
-Node: Dispatch Tables\7f1546478
-Node: Exception Region Output\7f1550862
-Node: Alignment Output\7f1557540
-Node: Debugging Info\7f1562119
-Node: All Debuggers\7f1562789
-Node: DBX Options\7f1565644
-Node: DBX Hooks\7f1571082
-Node: File Names and DBX\7f1572391
-Node: SDB and DWARF\7f1574503
-Node: VMS Debug\7f1580575
-Node: Floating Point\7f1581162
-Node: Mode Switching\7f1585638
-Node: Target Attributes\7f1589634
-Node: Emulated TLS\7f1598092
-Node: MIPS Coprocessors\7f1601482
-Node: PCH Target\7f1602779
-Node: C++ ABI\7f1604621
-Node: Named Address Spaces\7f1609415
-Node: Misc\7f1614349
-Ref: TARGET_SHIFT_TRUNCATION_MASK\7f1621091
-Node: Host Config\7f1669593
-Node: Host Common\7f1670661
-Node: Filesystem\7f1673035
-Node: Host Misc\7f1677150
-Node: Fragments\7f1679599
-Node: Target Fragment\7f1680794
-Node: Host Fragment\7f1691422
-Node: Collect2\7f1691662
-Node: Header Dirs\7f1694298
-Node: Type Information\7f1695721
-Node: GTY Options\7f1698997
-Node: Inheritance and GTY\7f1713517
-Ref: Inheritance and GTY-Footnote-1\7f1715080
-Node: User GC\7f1715350
-Node: GGC Roots\7f1719089
-Node: Files\7f1719802
-Node: Invoking the garbage collector\7f1722509
-Node: Troubleshooting\7f1724014
-Node: Plugins\7f1725089
-Node: Plugins loading\7f1726207
-Node: Plugin API\7f1727077
-Node: Plugins pass\7f1734740
-Node: Plugins GC\7f1736711
-Node: Plugins description\7f1738376
-Node: Plugins attr\7f1738912
-Node: Plugins recording\7f1741185
-Node: Plugins gate\7f1742035
-Node: Plugins tracking\7f1742626
-Node: Plugins building\7f1743214
-Node: LTO\7f1745004
-Node: LTO Overview\7f1745865
-Node: LTO object file layout\7f1751697
-Node: IPA\7f1756327
-Node: WHOPR\7f1765292
-Node: Internal flags\7f1769981
-Node: Funding\7f1771392
-Node: GNU Project\7f1773876
-Node: Copying\7f1774525
-Node: GNU Free Documentation License\7f1812036
-Node: Contributors\7f1837156
-Node: Option Index\7f1875028
-Node: Concept Index\7f1875905
+Ref: arm_neon_ok\7f223966
+Ref: arm_neonv2_ok\7f224124
+Ref: arm_neon_fp16_ok\7f224296
+Ref: arm_vfp3_ok\7f224736
+Node: Add Options\7f234805
+Node: Require Support\7f236122
+Node: Final Actions\7f238629
+Node: Ada Tests\7f243794
+Node: C Tests\7f245125
+Node: libgcj Tests\7f249520
+Node: LTO Testing\7f250647
+Node: gcov Testing\7f252295
+Node: profopt Testing\7f255285
+Node: compat Testing\7f257000
+Node: Torture Tests\7f261240
+Node: Options\7f262855
+Node: Option file format\7f263296
+Node: Option properties\7f270285
+Node: Passes\7f283312
+Node: Parsing pass\7f284202
+Node: Cilk Plus Transformation\7f287735
+Node: Gimplification pass\7f291117
+Node: Pass manager\7f292962
+Node: Tree SSA passes\7f294808
+Node: RTL passes\7f315875
+Node: Optimization info\7f328239
+Node: Dump setup\7f329058
+Node: Optimization groups\7f330187
+Node: Dump files and streams\7f331076
+Node: Dump output verbosity\7f332274
+Node: Dump types\7f333330
+Node: Dump examples\7f334820
+Node: GENERIC\7f336166
+Node: Deficiencies\7f338042
+Node: Tree overview\7f338283
+Node: Macros and Functions\7f342407
+Node: Identifiers\7f343232
+Node: Containers\7f344841
+Node: Types\7f345998
+Node: Declarations\7f358072
+Node: Working with declarations\7f358567
+Node: Internal structure\7f364171
+Node: Current structure hierarchy\7f364555
+Node: Adding new DECL node types\7f366648
+Node: Attributes\7f370932
+Node: Expression trees\7f372176
+Node: Constant expressions\7f373930
+Node: Storage References\7f378143
+Node: Unary and Binary Expressions\7f381662
+Node: Vectors\7f401810
+Node: Statements\7f406542
+Node: Basic Statements\7f407062
+Node: Blocks\7f411569
+Node: Statement Sequences\7f412973
+Node: Empty Statements\7f413306
+Node: Jumps\7f413880
+Node: Cleanups\7f414533
+Node: OpenMP\7f416300
+Node: Functions\7f422144
+Node: Function Basics\7f422615
+Node: Function Properties\7f426299
+Node: Language-dependent trees\7f429080
+Node: C and C++ Trees\7f429967
+Node: Types for C++\7f432871
+Node: Namespaces\7f437841
+Node: Classes\7f440947
+Node: Functions for C++\7f446024
+Node: Statements for C++\7f452275
+Node: C++ Expressions\7f461048
+Node: Java Trees\7f462553
+Node: GIMPLE\7f462666
+Node: Tuple representation\7f466290
+Node: GIMPLE instruction set\7f474594
+Node: GIMPLE Exception Handling\7f476210
+Node: Temporaries\7f478122
+Ref: Temporaries-Footnote-1\7f479440
+Node: Operands\7f479505
+Node: Compound Expressions\7f480266
+Node: Compound Lvalues\7f480500
+Node: Conditional Expressions\7f481262
+Node: Logical Operators\7f481921
+Node: Manipulating GIMPLE statements\7f488779
+Node: Tuple specific accessors\7f494715
+Node: 'GIMPLE_ASM'\7f495534
+Node: 'GIMPLE_ASSIGN'\7f498051
+Node: 'GIMPLE_BIND'\7f502157
+Node: 'GIMPLE_CALL'\7f503965
+Node: 'GIMPLE_CATCH'\7f508236
+Node: 'GIMPLE_COND'\7f509380
+Node: 'GIMPLE_DEBUG'\7f512168
+Node: 'GIMPLE_EH_FILTER'\7f515546
+Node: 'GIMPLE_LABEL'\7f517034
+Node: 'GIMPLE_NOP'\7f518009
+Node: 'GIMPLE_OMP_ATOMIC_LOAD'\7f518378
+Node: 'GIMPLE_OMP_ATOMIC_STORE'\7f519288
+Node: 'GIMPLE_OMP_CONTINUE'\7f519928
+Node: 'GIMPLE_OMP_CRITICAL'\7f521278
+Node: 'GIMPLE_OMP_FOR'\7f522216
+Node: 'GIMPLE_OMP_MASTER'\7f525731
+Node: 'GIMPLE_OMP_ORDERED'\7f526115
+Node: 'GIMPLE_OMP_PARALLEL'\7f526515
+Node: 'GIMPLE_OMP_RETURN'\7f529148
+Node: 'GIMPLE_OMP_SECTION'\7f529799
+Node: 'GIMPLE_OMP_SECTIONS'\7f530465
+Node: 'GIMPLE_OMP_SINGLE'\7f532072
+Node: 'GIMPLE_PHI'\7f533010
+Node: 'GIMPLE_RESX'\7f534297
+Node: 'GIMPLE_RETURN'\7f535016
+Node: 'GIMPLE_SWITCH'\7f535584
+Node: 'GIMPLE_TRY'\7f537386
+Node: 'GIMPLE_WITH_CLEANUP_EXPR'\7f539177
+Node: GIMPLE sequences\7f540060
+Node: Sequence iterators\7f543266
+Node: Adding a new GIMPLE statement code\7f551721
+Node: Statement and operand traversals\7f552997
+Node: Tree SSA\7f555589
+Node: Annotations\7f557377
+Node: SSA Operands\7f557782
+Node: SSA\7f571856
+Node: Alias analysis\7f582888
+Node: Memory model\7f586662
+Node: RTL\7f588021
+Node: RTL Objects\7f590209
+Node: RTL Classes\7f594083
+Node: Accessors\7f599080
+Node: Special Accessors\7f601474
+Node: Flags\7f607261
+Node: Machine Modes\7f622025
+Node: Constants\7f635313
+Node: Regs and Memory\7f642041
+Node: Arithmetic\7f659929
+Node: Comparisons\7f670011
+Node: Bit-Fields\7f674303
+Node: Vector Operations\7f675855
+Node: Conversions\7f677736
+Node: RTL Declarations\7f682234
+Node: Side Effects\7f683055
+Node: Incdec\7f700065
+Node: Assembler\7f703401
+Node: Debug Information\7f704946
+Node: Insns\7f706143
+Node: Calls\7f732564
+Node: Sharing\7f735157
+Node: Reading RTL\7f738268
+Node: Control Flow\7f739259
+Node: Basic Blocks\7f741028
+Node: Edges\7f746317
+Node: Profile information\7f754946
+Node: Maintaining the CFG\7f759630
+Node: Liveness information\7f765491
+Node: Loop Analysis and Representation\7f767617
+Node: Loop representation\7f768727
+Node: Loop querying\7f776290
+Node: Loop manipulation\7f779106
+Node: LCSSA\7f781467
+Node: Scalar evolutions\7f783536
+Node: loop-iv\7f786780
+Node: Number of iterations\7f788702
+Node: Dependency analysis\7f791508
+Node: Omega\7f797872
+Node: Machine Desc\7f799448
+Node: Overview\7f802011
+Node: Patterns\7f804051
+Node: Example\7f807489
+Node: RTL Template\7f808923
+Node: Output Template\7f819578
+Node: Output Statement\7f823541
+Node: Predicates\7f827880
+Node: Machine-Independent Predicates\7f830798
+Node: Defining Predicates\7f835742
+Node: Constraints\7f841705
+Node: Simple Constraints\7f843187
+Node: Multi-Alternative\7f856027
+Node: Class Preferences\7f858868
+Node: Modifiers\7f859760
+Node: Machine Constraints\7f864006
+Node: Disable Insn Alternatives\7f922174
+Node: Define Constraints\7f925075
+Node: C Constraint Interface\7f931860
+Node: Standard Names\7f935512
+Ref: shift patterns\7f958660
+Ref: prologue instruction pattern\7f1003417
+Ref: window_save instruction pattern\7f1003910
+Ref: epilogue instruction pattern\7f1004187
+Node: Pattern Ordering\7f1021773
+Node: Dependent Patterns\7f1023009
+Node: Jump Patterns\7f1024629
+Ref: Jump Patterns-Footnote-1\7f1026776
+Node: Looping Patterns\7f1026824
+Node: Insn Canonicalizations\7f1031553
+Node: Expander Definitions\7f1036138
+Node: Insn Splitting\7f1044352
+Node: Including Patterns\7f1053953
+Node: Peephole Definitions\7f1055734
+Node: define_peephole\7f1056987
+Node: define_peephole2\7f1063317
+Node: Insn Attributes\7f1066383
+Node: Defining Attributes\7f1067565
+Ref: define_enum_attr\7f1071058
+Node: Expressions\7f1072094
+Node: Tagging Insns\7f1078844
+Node: Attr Example\7f1083197
+Node: Insn Lengths\7f1085570
+Node: Constant Attributes\7f1088629
+Node: Mnemonic Attribute\7f1089805
+Node: Delay Slots\7f1091324
+Node: Processor pipeline description\7f1094547
+Ref: Processor pipeline description-Footnote-1\7f1113365
+Node: Conditional Execution\7f1113689
+Node: Define Subst\7f1117172
+Node: Define Subst Example\7f1119208
+Node: Define Subst Pattern Matching\7f1122202
+Node: Define Subst Output Template\7f1123428
+Node: Constant Definitions\7f1125498
+Ref: define_enum\7f1129280
+Node: Iterators\7f1129768
+Node: Mode Iterators\7f1130346
+Node: Defining Mode Iterators\7f1131324
+Node: Substitutions\7f1132818
+Node: Examples\7f1135060
+Node: Code Iterators\7f1136508
+Node: Int Iterators\7f1138787
+Node: Subst Iterators\7f1141231
+Node: Target Macros\7f1142923
+Node: Target Structure\7f1146011
+Node: Driver\7f1148127
+Node: Run-time Target\7f1166939
+Node: Per-Function Data\7f1176650
+Node: Storage Layout\7f1179414
+Node: Type Layout\7f1205666
+Node: Registers\7f1220989
+Node: Register Basics\7f1221963
+Node: Allocation Order\7f1227471
+Node: Values in Registers\7f1229917
+Node: Leaf Functions\7f1237395
+Node: Stack Registers\7f1240254
+Node: Register Classes\7f1241526
+Node: Old Constraints\7f1272470
+Node: Stack and Calling\7f1279610
+Node: Frame Layout\7f1280144
+Node: Exception Handling\7f1291020
+Node: Stack Checking\7f1297232
+Node: Frame Registers\7f1302046
+Node: Elimination\7f1310305
+Node: Stack Arguments\7f1314535
+Node: Register Arguments\7f1321719
+Node: Scalar Return\7f1342020
+Node: Aggregate Return\7f1348107
+Node: Caller Saves\7f1352318
+Node: Function Entry\7f1353495
+Node: Profiling\7f1364589
+Node: Tail Calls\7f1366288
+Node: Stack Smashing Protection\7f1368191
+Node: Varargs\7f1369819
+Node: Trampolines\7f1376506
+Node: Library Calls\7f1382549
+Node: Addressing Modes\7f1387233
+Node: Anchored Addresses\7f1408201
+Node: Condition Code\7f1410844
+Node: CC0 Condition Codes\7f1413171
+Node: MODE_CC Condition Codes\7f1416417
+Node: Costs\7f1422869
+Node: Scheduling\7f1439331
+Node: Sections\7f1459289
+Node: PIC\7f1474987
+Node: Assembler Format\7f1477046
+Node: File Framework\7f1478184
+Ref: TARGET_HAVE_SWITCHABLE_BSS_SECTIONS\7f1485116
+Node: Data Output\7f1488386
+Node: Uninitialized Data\7f1496155
+Node: Label Output\7f1501166
+Node: Initialization\7f1524122
+Node: Macros for Initialization\7f1530083
+Node: Instruction Output\7f1536802
+Node: Dispatch Tables\7f1547425
+Node: Exception Region Output\7f1551809
+Node: Alignment Output\7f1558487
+Node: Debugging Info\7f1563066
+Node: All Debuggers\7f1563736
+Node: DBX Options\7f1566591
+Node: DBX Hooks\7f1572029
+Node: File Names and DBX\7f1573338
+Node: SDB and DWARF\7f1575450
+Node: VMS Debug\7f1581522
+Node: Floating Point\7f1582109
+Node: Mode Switching\7f1586585
+Node: Target Attributes\7f1590581
+Node: Emulated TLS\7f1599039
+Node: MIPS Coprocessors\7f1602429
+Node: PCH Target\7f1603726
+Node: C++ ABI\7f1605568
+Node: Named Address Spaces\7f1610362
+Node: Misc\7f1615296
+Ref: TARGET_SHIFT_TRUNCATION_MASK\7f1622038
+Node: Host Config\7f1670540
+Node: Host Common\7f1671608
+Node: Filesystem\7f1673982
+Node: Host Misc\7f1678097
+Node: Fragments\7f1680546
+Node: Target Fragment\7f1681741
+Node: Host Fragment\7f1692369
+Node: Collect2\7f1692609
+Node: Header Dirs\7f1695245
+Node: Type Information\7f1696668
+Node: GTY Options\7f1699944
+Node: Inheritance and GTY\7f1714464
+Ref: Inheritance and GTY-Footnote-1\7f1716027
+Node: User GC\7f1716297
+Node: GGC Roots\7f1720036
+Node: Files\7f1720749
+Node: Invoking the garbage collector\7f1723456
+Node: Troubleshooting\7f1724961
+Node: Plugins\7f1726036
+Node: Plugins loading\7f1727154
+Node: Plugin API\7f1728024
+Node: Plugins pass\7f1735687
+Node: Plugins GC\7f1737658
+Node: Plugins description\7f1739323
+Node: Plugins attr\7f1739859
+Node: Plugins recording\7f1742132
+Node: Plugins gate\7f1742982
+Node: Plugins tracking\7f1743573
+Node: Plugins building\7f1744161
+Node: LTO\7f1745951
+Node: LTO Overview\7f1746812
+Node: LTO object file layout\7f1752644
+Node: IPA\7f1757274
+Node: WHOPR\7f1766239
+Node: Internal flags\7f1770928
+Node: Funding\7f1772339
+Node: GNU Project\7f1774823
+Node: Copying\7f1775472
+Node: GNU Free Documentation License\7f1812983
+Node: Contributors\7f1838103
+Node: Option Index\7f1875975
+Node: Concept Index\7f1876852
 \1f
 End Tag Table
index ab96d58..b2d4312 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "GCJ-DBTOOL 1"
-.TH GCJ-DBTOOL 1 "2014-04-22" "gcc-4.9.0" "GNU"
+.TH GCJ-DBTOOL 1 "2014-07-16" "gcc-4.9.1" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 7aedab7..34fedc6 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "GCJ 1"
-.TH GCJ 1 "2014-04-22" "gcc-4.9.0" "GNU"
+.TH GCJ 1 "2014-07-16" "gcc-4.9.1" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 8de32cb..1889f5e 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "GCOV 1"
-.TH GCOV 1 "2014-04-22" "gcc-4.9.0" "GNU"
+.TH GCOV 1 "2014-07-16" "gcc-4.9.1" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 285fdaf..f33f99b 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "GFORTRAN 1"
-.TH GFORTRAN 1 "2014-04-22" "gcc-4.9.0" "GNU"
+.TH GFORTRAN 1 "2014-07-16" "gcc-4.9.1" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 78c1f4c..c3c55a2 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "GIJ 1"
-.TH GIJ 1 "2014-04-22" "gcc-4.9.0" "GNU"
+.TH GIJ 1 "2014-07-16" "gcc-4.9.1" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 82bee23..56df74b 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "GPL 7"
-.TH GPL 7 "2014-04-22" "gcc-4.9.0" "GNU"
+.TH GPL 7 "2014-07-16" "gcc-4.9.1" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 4706a5c..eac8ac7 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "GRMIC 1"
-.TH GRMIC 1 "2014-04-22" "gcc-4.9.0" "GNU"
+.TH GRMIC 1 "2014-07-16" "gcc-4.9.1" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index c32f1f9..5c1703b 100644 (file)
@@ -2544,8 +2544,7 @@ Finally a @code{stagefeedback} compiler is built using the information collected
 
 Unlike standard bootstrap, several additional restrictions apply.  The
 compiler used to build @code{stage1} needs to support a 64-bit integral type.
-It is recommended to only use GCC for this.  Also parallel make is currently
-not supported since collisions in profile collecting may occur.
+It is recommended to only use GCC for this.
 
 @html
 <hr />
@@ -3009,12 +3008,6 @@ OpenServer/Unixware}.
 Solaris 2 (SPARC, Intel):
 @itemize
 @item
-@uref{http://www.sunfreeware.com/,,Sunfreeware}
-
-@item
-@uref{http://www.blastwave.org/,,Blastwave}
-
-@item
 @uref{http://www.opencsw.org/,,OpenCSW}
 
 @item
@@ -3765,9 +3758,9 @@ removed and the system libunwind library will always be used.
 @end html
 @anchor{aarch64-x-x}
 @heading aarch64*-*-*
-Pre 2.24 binutils does not have support for selecting -mabi and does not
-support ILP32.  If GCC 4.9 or later is built with pre 2.24, GCC will not
-support option -mabi=ilp32.
+Binutils pre 2.24 does not have support for selecting @option{-mabi} and
+does not support ILP32.  If it is used to build GCC 4.9 or later, GCC will
+not support option @option{-mabi=ilp32}.
 
 @html
 <hr />
index 2d43457..9d8ffc0 100644 (file)
@@ -825,7 +825,8 @@ Objective-C and Objective-C++ Dialects}.
 @gccoptlist{-meb -mel -mno-crt0}
 
 @emph{MSP430 Options}
-@gccoptlist{-msim -masm-hex -mmcu= -mcpu= -mlarge -msmall -mrelax}
+@gccoptlist{-msim -masm-hex -mmcu= -mcpu= -mlarge -msmall -mrelax @gol
+-mhwmult=}
 
 @emph{NDS32 Options}
 @gccoptlist{-mbig-endian -mlittle-endian @gol
@@ -977,7 +978,7 @@ See RS/6000 and PowerPC Options.
 -mpretend-cmove -mtas}
 
 @emph{Solaris 2 Options}
-@gccoptlist{-mimpure-text  -mno-impure-text @gol
+@gccoptlist{-mclear-hwcap -mno-clear-hwcap -mimpure-text  -mno-impure-text @gol
 -pthreads -pthread}
 
 @emph{SPARC Options}
@@ -991,6 +992,7 @@ See RS/6000 and PowerPC Options.
 -mhard-quad-float  -msoft-quad-float @gol
 -mstack-bias  -mno-stack-bias @gol
 -munaligned-doubles  -mno-unaligned-doubles @gol
+-muser-mode  -mno-user-mode @gol
 -mv8plus  -mno-v8plus  -mvis  -mno-vis @gol
 -mvis2  -mno-vis2  -mvis3  -mno-vis3 @gol
 -mcbcond -mno-cbcond @gol
@@ -7390,7 +7392,8 @@ Attempt to remove redundant extension instructions.  This is especially
 helpful for the x86-64 architecture, which implicitly zero-extends in 64-bit
 registers after writing to their lower 32-bit half.
 
-Enabled for AArch64 and x86 at levels @option{-O2}, @option{-O3}.
+Enabled for Alpha, AArch64 and x86 at levels @option{-O2},
+@option{-O3}, @option{-Os}.
 
 @item -flive-range-shrinkage
 @opindex flive-range-shrinkage
@@ -10001,6 +10004,28 @@ parameter in order to propagate them and perform devirtualization.
 @option{ipa-cp-value-list-size} is the maximum number of values and types it
 stores per one formal parameter of a function.
 
+@item ipa-cp-eval-threshold
+IPA-CP calculates its own score of cloning profitability heuristics
+and performs those cloning opportunities with scores that exceed
+@option{ipa-cp-eval-threshold}.
+
+@item ipa-max-agg-items
+IPA-CP is also capable to propagate a number of scalar values passed
+in an aggregate. @option{ipa-max-agg-items} controls the maximum
+number of such values per one parameter.
+
+@item ipa-cp-loop-hint-bonus
+When IPA-CP determines that a cloning candidate would make the number
+of iterations of a loop known, it adds a bonus of
+@option{ipa-cp-loop-hint-bonus} bonus to the profitability score of
+the candidate.
+
+@item ipa-cp-array-index-hint-bonus
+When IPA-CP determines that a cloning candidate would make the index of
+an array access known, it adds a bonus of
+@option{ipa-cp-array-index-hint-bonus} bonus to the profitability
+score of the candidate.
+
 @item lto-partitions
 Specify desired number of partitions produced during WHOPR compilation.
 The number of partitions should exceed the number of CPUs used for compilation.
@@ -18214,6 +18239,28 @@ This option is passed to the assembler and linker, and allows the
 linker to perform certain optimizations that cannot be done until
 the final link.
 
+@item mhwmult=
+@opindex mhwmult=
+Describes the type of hardware multiply supported by the target.
+Accepted values are @code{none} for no hardware multiply, @code{16bit}
+for the original 16-bit-only multiply supported by early MCUs.
+@code{32bit} for the 16/32-bit multiply supported by later MCUs and
+@code{f5series} for the 16/32-bit multiply supported by F5-series MCUs.
+A value of @code{auto} can also be given.  This tells GCC to deduce
+the hardware multiply support based upon the MCU name provided by the
+@option{-mmcu} option.  If no @option{-mmcu} option is specified then
+@code{32bit} hardware multiply support is assumed.  @code{auto} is the
+default setting.
+
+Hardware multiplies are normally performed by calling a library
+routine.  This saves space in the generated code.  When compiling at
+@code{-O3} or higher however the hardware multiplier is invoked
+inline.  This makes for bigger, but faster code.
+
+The hardware multiply routines disable interrupts whilst running and
+restore the previous interrupt state when they finish.  This makes
+them safe to use inside interrupt handlers as well as in normal code.
+
 @end table
 
 @node NDS32 Options
@@ -20784,6 +20831,13 @@ patterns.  This can result in faster code on the SH4 processor.
 These @samp{-m} options are supported on Solaris 2:
 
 @table @gcctabopt
+@item -mclear-hwcap
+@opindex mclear-hwcap
+@option{-mclear-hwcap} tells the compiler to remove the hardware
+capabilities generated by the Solaris assembler.  This is only necessary
+when object files use ISA extensions not supported by the current
+machine, but check at runtime whether or not to use them.
+
 @item -mimpure-text
 @opindex mimpure-text
 @option{-mimpure-text}, used in addition to @option{-shared}, tells
@@ -20904,6 +20958,14 @@ Specifying this option avoids some rare compatibility problems with code
 generated by other compilers.  It is not the default because it results
 in a performance loss, especially for floating-point code.
 
+@item -muser-mode
+@itemx -mno-user-mode
+@opindex muser-mode
+@opindex mno-user-mode
+Do not generate code that can only run in supervisor mode.  This is relevant
+only for the @code{casa} instruction emitted for the LEON3 processor.  The
+default is @option{-mno-user-mode}.
+
 @item -mno-faster-structs
 @itemx -mfaster-structs
 @opindex mno-faster-structs
index eded144..2cb26c4 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "JCF-DUMP 1"
-.TH JCF-DUMP 1 "2014-04-22" "gcc-4.9.0" "GNU"
+.TH JCF-DUMP 1 "2014-07-16" "gcc-4.9.1" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index a57cc85..024b494 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "JV-CONVERT 1"
-.TH JV-CONVERT 1 "2014-04-22" "gcc-4.9.0" "GNU"
+.TH JV-CONVERT 1 "2014-07-16" "gcc-4.9.1" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index c81d709..006b6cb 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "REBUILD-GCJ-DB 1"
-.TH REBUILD-GCJ-DB 1 "2014-04-22" "gcc-4.9.0" "GNU"
+.TH REBUILD-GCJ-DB 1 "2014-07-16" "gcc-4.9.1" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 9148608..39152df 100644 (file)
@@ -1295,6 +1295,9 @@ Target has 64-bit @code{double}.
 @item double64plus
 Target has @code{double} that is 64 bits or longer.
 
+@item longdouble128
+Target has 128-bit @code{long double}.
+
 @item int32plus
 Target has @code{int} that is at 32 bits or longer.
 
@@ -1601,6 +1604,13 @@ MIPS target supports @code{-mpaired-single}.
 @subsubsection PowerPC-specific attributes
 
 @table @code
+
+@item dfp_hw
+PowerPC target supports executing hardware DFP instructions.
+
+@item p8vector_hw
+PowerPC target supports executing VSX instructions (ISA 2.07).
+
 @item powerpc64
 Test system supports executing 64-bit instructions.
 
@@ -1610,12 +1620,24 @@ PowerPC target supports AltiVec.
 @item powerpc_altivec_ok
 PowerPC target supports @code{-maltivec}.
 
+@item powerpc_eabi_ok
+PowerPC target supports @code{-meabi}.
+
+@item powerpc_elfv2
+PowerPC target supports @code{-mabi=elfv2}.
+
 @item powerpc_fprs
 PowerPC target supports floating-point registers.
 
 @item powerpc_hard_double
 PowerPC target supports hardware double-precision floating-point.
 
+@item powerpc_htm_ok
+PowerPC target supports @code{-mhtm}
+
+@item powerpc_p8vector_ok
+PowerPC target supports @code{-mpower8-vector}
+
 @item powerpc_ppu_ok
 PowerPC target supports @code{-mcpu=cell}.
 
@@ -1629,9 +1651,6 @@ PowerPC target supports PowerPC SPE.
 @item powerpc_spu
 PowerPC target supports PowerPC SPU.
 
-@item spu_auto_overlay
-SPU target has toolchain that supports automatic overlay generation.
-
 @item powerpc_vsx_ok
 PowerPC target supports @code{-mvsx}.
 
@@ -1639,8 +1658,17 @@ PowerPC target supports @code{-mvsx}.
 Including the options used to compile this particular test, the
 PowerPC target supports PowerPC 405.
 
+@item ppc_recip_hw
+PowerPC target supports executing reciprocal estimate instructions.
+
+@item spu_auto_overlay
+SPU target has toolchain that supports automatic overlay generation.
+
 @item vmx_hw
 PowerPC target supports executing AltiVec instructions.
+
+@item vsx_hw
+PowerPC target supports executing VSX instructions (ISA 2.06).
 @end table
 
 @subsubsection Other hardware attributes
index f7024a7..0221870 100644 (file)
@@ -3947,6 +3947,13 @@ which.
 @c above is overfull.  not sure what to do.  --mew 5feb93  did
 @c something, not sure if it looks good.  --mew 10feb93
 
+@defmac INCOMING_REG_PARM_STACK_SPACE (@var{fndecl})
+Like @code{REG_PARM_STACK_SPACE}, but for incoming register arguments.
+Define this macro if space guaranteed when compiling a function body
+is different to space required when making a call, a situation that
+can arise with K&R style function definitions.
+@end defmac
+
 @defmac OUTGOING_REG_PARM_STACK_SPACE (@var{fntype})
 Define this to a nonzero value if it is the responsibility of the
 caller to allocate the area reserved for arguments passed in registers
index 6dcbde4..0c7c9aa 100644 (file)
@@ -3498,6 +3498,13 @@ which.
 @c above is overfull.  not sure what to do.  --mew 5feb93  did
 @c something, not sure if it looks good.  --mew 10feb93
 
+@defmac INCOMING_REG_PARM_STACK_SPACE (@var{fndecl})
+Like @code{REG_PARM_STACK_SPACE}, but for incoming register arguments.
+Define this macro if space guaranteed when compiling a function body
+is different to space required when making a call, a situation that
+can arise with K&R style function definitions.
+@end defmac
+
 @defmac OUTGOING_REG_PARM_STACK_SPACE (@var{fntype})
 Define this to a nonzero value if it is the responsibility of the
 caller to allocate the area reserved for arguments passed in registers
index 454655d..f6e340b 100644 (file)
@@ -588,7 +588,7 @@ div_and_round_double (unsigned code, int uns,
                 == (unsigned HOST_WIDE_INT) htwice)
                && (labs_den <= ltwice)))
          {
-           if (*hquo < 0)
+           if (quo_neg)
              /* quo = quo - 1;  */
              add_double (*lquo, *hquo,
                          (HOST_WIDE_INT) -1, (HOST_WIDE_INT) -1, lquo, hquo);
index 67b37eb..13b2de7 100644 (file)
@@ -4222,13 +4222,10 @@ add_addr_table_entry (void *addr, enum ate_kind kind)
 static void
 remove_addr_table_entry (addr_table_entry *entry)
 {
-  addr_table_entry *node;
-
   gcc_assert (dwarf_split_debug_info && addr_index_table);
-  node = (addr_table_entry *) htab_find (addr_index_table, entry);
   /* After an index is assigned, the table is frozen.  */
-  gcc_assert (node->refcount > 0 && node->index == NO_INDEX_ASSIGNED);
-  node->refcount--;
+  gcc_assert (entry->refcount > 0 && entry->index == NO_INDEX_ASSIGNED);
+  entry->refcount--;
 }
 
 /* Given a location list, remove all addresses it refers to from the
@@ -23099,11 +23096,16 @@ resolve_addr_in_expr (dw_loc_descr_ref loc)
        break;
       case DW_OP_GNU_addr_index:
       case DW_OP_GNU_const_index:
-       if ((loc->dw_loc_opc == DW_OP_GNU_addr_index
-            || (loc->dw_loc_opc == DW_OP_GNU_const_index && loc->dtprel))
-           && resolve_one_addr (&loc->dw_loc_oprnd1.val_entry->addr.rtl,
-                                NULL))
-         return false;
+       if (loc->dw_loc_opc == DW_OP_GNU_addr_index
+            || (loc->dw_loc_opc == DW_OP_GNU_const_index && loc->dtprel))
+          {
+            rtx rtl = loc->dw_loc_oprnd1.val_entry->addr.rtl;
+            if (resolve_one_addr (&rtl, NULL))
+              return false;
+            remove_addr_table_entry (loc->dw_loc_oprnd1.val_entry);
+            loc->dw_loc_oprnd1.val_entry =
+                add_addr_table_entry (rtl, ate_kind_rtx);
+          }
        break;
       case DW_OP_const4u:
       case DW_OP_const8u:
@@ -24195,18 +24197,23 @@ dwarf2out_finish (const char *filename)
                   dwarf_strict ? DW_AT_macro_info : DW_AT_GNU_macros,
                   macinfo_section_label);
 
-  if (dwarf_split_debug_info && addr_index_table != NULL)
+  if (dwarf_split_debug_info)
     {
       /* optimize_location_lists calculates the size of the lists,
          so index them first, and assign indices to the entries.
          Although optimize_location_lists will remove entries from
          the table, it only does so for duplicates, and therefore
          only reduces ref_counts to 1.  */
-      unsigned int index = 0;
       index_location_lists (comp_unit_die ());
-      htab_traverse_noresize (addr_index_table,
-                              index_addr_table_entry, &index);
+
+      if (addr_index_table != NULL)
+        {
+          unsigned int index = 0;
+          htab_traverse_noresize (addr_index_table,
+                                  index_addr_table_entry, &index);
+        }
     }
+
   if (have_location_lists)
     optimize_location_lists (comp_unit_die ());
 
index 7c1c979..6e9975d 100644 (file)
@@ -2141,9 +2141,12 @@ expand_shift_1 (enum tree_code code, enum machine_mode mode, rtx shifted,
   optab lrotate_optab = rotl_optab;
   optab rrotate_optab = rotr_optab;
   enum machine_mode op1_mode;
+  enum machine_mode scalar_mode = mode;
   int attempt;
   bool speed = optimize_insn_for_speed_p ();
 
+  if (VECTOR_MODE_P (mode))
+    scalar_mode = GET_MODE_INNER (mode);
   op1 = amount;
   op1_mode = GET_MODE (op1);
 
@@ -2166,9 +2169,9 @@ expand_shift_1 (enum tree_code code, enum machine_mode mode, rtx shifted,
     {
       if (CONST_INT_P (op1)
          && ((unsigned HOST_WIDE_INT) INTVAL (op1) >=
-             (unsigned HOST_WIDE_INT) GET_MODE_BITSIZE (mode)))
+             (unsigned HOST_WIDE_INT) GET_MODE_BITSIZE (scalar_mode)))
        op1 = GEN_INT ((unsigned HOST_WIDE_INT) INTVAL (op1)
-                      % GET_MODE_BITSIZE (mode));
+                      % GET_MODE_BITSIZE (scalar_mode));
       else if (GET_CODE (op1) == SUBREG
               && subreg_lowpart_p (op1)
               && SCALAR_INT_MODE_P (GET_MODE (SUBREG_REG (op1)))
@@ -2182,10 +2185,10 @@ expand_shift_1 (enum tree_code code, enum machine_mode mode, rtx shifted,
      amount instead.  */
   if (rotate
       && CONST_INT_P (op1)
-      && IN_RANGE (INTVAL (op1), GET_MODE_BITSIZE (mode) / 2 + left,
-                  GET_MODE_BITSIZE (mode) - 1))
+      && IN_RANGE (INTVAL (op1), GET_MODE_BITSIZE (scalar_mode) / 2 + left,
+                  GET_MODE_BITSIZE (scalar_mode) - 1))
     {
-      op1 = GEN_INT (GET_MODE_BITSIZE (mode) - INTVAL (op1));
+      op1 = GEN_INT (GET_MODE_BITSIZE (scalar_mode) - INTVAL (op1));
       left = !left;
       code = left ? LROTATE_EXPR : RROTATE_EXPR;
     }
@@ -2198,7 +2201,7 @@ expand_shift_1 (enum tree_code code, enum machine_mode mode, rtx shifted,
   if (code == LSHIFT_EXPR
       && CONST_INT_P (op1)
       && INTVAL (op1) > 0
-      && INTVAL (op1) < GET_MODE_PRECISION (mode)
+      && INTVAL (op1) < GET_MODE_PRECISION (scalar_mode)
       && INTVAL (op1) < MAX_BITS_PER_WORD
       && (shift_cost (speed, mode, INTVAL (op1))
          > INTVAL (op1) * add_cost (speed, mode))
@@ -2253,14 +2256,14 @@ expand_shift_1 (enum tree_code code, enum machine_mode mode, rtx shifted,
              if (op1 == const0_rtx)
                return shifted;
              else if (CONST_INT_P (op1))
-               other_amount = GEN_INT (GET_MODE_BITSIZE (mode)
+               other_amount = GEN_INT (GET_MODE_BITSIZE (scalar_mode)
                                        - INTVAL (op1));
              else
                {
                  other_amount
                    = simplify_gen_unary (NEG, GET_MODE (op1),
                                          op1, GET_MODE (op1));
-                 HOST_WIDE_INT mask = GET_MODE_PRECISION (mode) - 1;
+                 HOST_WIDE_INT mask = GET_MODE_PRECISION (scalar_mode) - 1;
                  other_amount
                    = simplify_gen_binary (AND, GET_MODE (op1), other_amount,
                                           gen_int_mode (mask, GET_MODE (op1)));
index 891c0d5..802c021 100644 (file)
@@ -484,8 +484,6 @@ negate_expr_p (tree t)
 
     case TRUNC_DIV_EXPR:
     case ROUND_DIV_EXPR:
-    case FLOOR_DIV_EXPR:
-    case CEIL_DIV_EXPR:
     case EXACT_DIV_EXPR:
       /* In general we can't negate A / B, because if A is INT_MIN and
         B is 1, we may turn this into INT_MIN / -1 which is undefined
@@ -682,8 +680,6 @@ fold_negate_expr (location_t loc, tree t)
 
     case TRUNC_DIV_EXPR:
     case ROUND_DIV_EXPR:
-    case FLOOR_DIV_EXPR:
-    case CEIL_DIV_EXPR:
     case EXACT_DIV_EXPR:
       /* In general we can't negate A / B, because if A is INT_MIN and
         B is 1, we may turn this into INT_MIN / -1 which is undefined
@@ -9312,7 +9308,7 @@ fold_comparison (location_t loc, enum tree_code code, tree type,
   /* Transform comparisons of the form X +- C1 CMP Y +- C2 to
      X CMP Y +- C2 +- C1 for signed X, Y.  This is valid if
      the resulting offset is smaller in absolute value than the
-     original one.  */
+     original one and has the same sign.  */
   if (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (arg0))
       && (TREE_CODE (arg0) == PLUS_EXPR || TREE_CODE (arg0) == MINUS_EXPR)
       && (TREE_CODE (TREE_OPERAND (arg0, 1)) == INTEGER_CST
@@ -9331,32 +9327,35 @@ fold_comparison (location_t loc, enum tree_code code, tree type,
                                      "a comparison");
 
       /* Put the constant on the side where it doesn't overflow and is
-        of lower absolute value than before.  */
+        of lower absolute value and of same sign than before.  */
       cst = int_const_binop (TREE_CODE (arg0) == TREE_CODE (arg1)
                             ? MINUS_EXPR : PLUS_EXPR,
                             const2, const1);
       if (!TREE_OVERFLOW (cst)
-         && tree_int_cst_compare (const2, cst) == tree_int_cst_sgn (const2))
+         && tree_int_cst_compare (const2, cst) == tree_int_cst_sgn (const2)
+         && tree_int_cst_sgn (cst) == tree_int_cst_sgn (const2))
        {
          fold_overflow_warning (warnmsg, WARN_STRICT_OVERFLOW_COMPARISON);
          return fold_build2_loc (loc, code, type,
-                             variable1,
-                             fold_build2_loc (loc,
-                                          TREE_CODE (arg1), TREE_TYPE (arg1),
-                                          variable2, cst));
+                                 variable1,
+                                 fold_build2_loc (loc, TREE_CODE (arg1),
+                                                  TREE_TYPE (arg1),
+                                                  variable2, cst));
        }
 
       cst = int_const_binop (TREE_CODE (arg0) == TREE_CODE (arg1)
                             ? MINUS_EXPR : PLUS_EXPR,
                             const1, const2);
       if (!TREE_OVERFLOW (cst)
-         && tree_int_cst_compare (const1, cst) == tree_int_cst_sgn (const1))
+         && tree_int_cst_compare (const1, cst) == tree_int_cst_sgn (const1)
+         && tree_int_cst_sgn (cst) == tree_int_cst_sgn (const1))
        {
          fold_overflow_warning (warnmsg, WARN_STRICT_OVERFLOW_COMPARISON);
          return fold_build2_loc (loc, code, type,
-                             fold_build2_loc (loc, TREE_CODE (arg0), TREE_TYPE (arg0),
-                                          variable1, cst),
-                             variable2);
+                                 fold_build2_loc (loc, TREE_CODE (arg0),
+                                                  TREE_TYPE (arg0),
+                                                  variable1, cst),
+                                 variable2);
        }
     }
 
@@ -11430,7 +11429,6 @@ fold_binary_loc (location_t loc,
        {
          double_int c1, c2, c3, msk;
          int width = TYPE_PRECISION (type), w;
-         bool try_simplify = true;
 
          c1 = tree_to_double_int (TREE_OPERAND (arg0, 1));
          c2 = tree_to_double_int (arg1);
@@ -11467,20 +11465,7 @@ fold_binary_loc (location_t loc,
                }
            }
 
-         /* If X is a tree of the form (Y * K1) & K2, this might conflict
-            with that optimization from the BIT_AND_EXPR optimizations.
-            This could end up in an infinite recursion.  */
-         if (TREE_CODE (TREE_OPERAND (arg0, 0)) == MULT_EXPR
-             && TREE_CODE (TREE_OPERAND (TREE_OPERAND (arg0, 0), 1))
-                           == INTEGER_CST)
-         {
-           tree t = TREE_OPERAND (TREE_OPERAND (arg0, 0), 1);
-           double_int masked = mask_with_tz (type, c3, tree_to_double_int (t));
-
-           try_simplify = (masked != c1);
-         }
-
-         if (try_simplify && c3 != c1)
+         if (c3 != c1)
            return fold_build2_loc (loc, BIT_IOR_EXPR, type,
                                    fold_build2_loc (loc, BIT_AND_EXPR, type,
                                                     TREE_OPERAND (arg0, 0),
@@ -11870,16 +11855,25 @@ fold_binary_loc (location_t loc,
          && TREE_CODE (arg0) == MULT_EXPR
          && TREE_CODE (TREE_OPERAND (arg0, 1)) == INTEGER_CST)
        {
+         double_int darg1 = tree_to_double_int (arg1);
          double_int masked
-           = mask_with_tz (type, tree_to_double_int (arg1),
+           = mask_with_tz (type, darg1,
                            tree_to_double_int (TREE_OPERAND (arg0, 1)));
 
          if (masked.is_zero ())
            return omit_two_operands_loc (loc, type, build_zero_cst (type),
                                          arg0, arg1);
-         else if (masked != tree_to_double_int (arg1))
-           return fold_build2_loc (loc, code, type, op0,
-                                   double_int_to_tree (type, masked));
+         else if (masked != darg1)
+           {
+             /* Avoid the transform if arg1 is a mask of some
+                mode which allows further optimizations.  */
+             int pop = darg1.popcount ();
+             if (!(pop >= BITS_PER_UNIT
+                   && exact_log2 (pop) != -1
+                   && double_int::mask (pop) == darg1))
+               return fold_build2_loc (loc, code, type, op0,
+                                       double_int_to_tree (type, masked));
+           }
        }
 
       /* For constants M and N, if M == (1LL << cst) - 1 && (N & M) == M,
@@ -12092,11 +12086,17 @@ fold_binary_loc (location_t loc,
                      /* See if we can shorten the right shift.  */
                      if (shiftc < prec)
                        shift_type = inner_type;
+                     /* Otherwise X >> C1 is all zeros, so we'll optimize
+                        it into (X, 0) later on by making sure zerobits
+                        is all ones.  */
                    }
                }
              zerobits = ~(unsigned HOST_WIDE_INT) 0;
-             zerobits >>= HOST_BITS_PER_WIDE_INT - shiftc;
-             zerobits <<= prec - shiftc;
+             if (shiftc < prec)
+               {
+                 zerobits >>= HOST_BITS_PER_WIDE_INT - shiftc;
+                 zerobits <<= prec - shiftc;
+               }
              /* For arithmetic shift if sign bit could be set, zerobits
                 can contain actually sign bits, so no transformation is
                 possible, unless MASK masks them all away.  In that
@@ -12114,7 +12114,7 @@ fold_binary_loc (location_t loc,
          /* ((X << 16) & 0xff00) is (X, 0).  */
          if ((mask & zerobits) == mask)
            return omit_one_operand_loc (loc, type,
-                                    build_int_cst (type, 0), arg0);
+                                        build_int_cst (type, 0), arg0);
 
          newmask = mask | zerobits;
          if (newmask != mask && (newmask & (newmask + 1)) == 0)
index eb33cc9..c705bce 100644 (file)
@@ -1,3 +1,621 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
+2014-07-07  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/61459
+       PR fortran/58883
+       * trans-expr.c (fcncall_realloc_result): Use the natural type
+       for the address expression of 'res_desc'.
+
+2014-07-07  Dominique d'Humieres <dominiq@lps.ens.fr>
+           Mikael Morin <mikael@gcc.gnu.org>
+
+       PR fortran/41936
+       * trans-expr.c (gfc_conv_expr_reference): Deallocate array
+       components.
+
+2014-07-02  Jakub Jelinek  <jakub@redhat.com>
+           Fritz Reese  <Reese-Fritz@zai.com>
+
+       * decl.c (variable_decl): Reject old style initialization
+       for derived type components.
+
+2014-06-30  Jakub Jelinek  <jakub@redhat.com>
+
+       * module.c (MOD_VERSION): Revert back to 12.
+       (MOD_VERSION_OMP4): Define.
+       (module_omp4): New variable.
+       (mio_symbol): Call mio_omp_declare_simd only if module_omp4.
+       (read_module): Load omp udrs only if module_omp4.
+       (write_module): Write omp udrs only if module_omp4.
+       (find_omp_declare_simd): New function.
+       (gfc_dump_module): Compute module_omp4.  Use MOD_VERSION_OMP4
+       if module_omp4.
+       (gfc_use_module): Handle MOD_VERSION_OMP4, set module_omp4.
+
+       Backported from mainline
+       2014-06-25  Jakub Jelinek  <jakub@redhat.com>
+
+       * trans.h (gfc_omp_clause_linear_ctor): New prototype.
+       * trans-openmp.c (gfc_omp_linear_clause_add_loop,
+       gfc_omp_clause_linear_ctor): New functions.
+       (gfc_trans_omp_clauses): Make sure OMP_CLAUSE_LINEAR_STEP has
+       correct type.  Set OMP_CLAUSE_LINEAR_ARRAY flag if needed.
+       * f95-lang.c (LANG_HOOKS_OMP_CLAUSE_LINEAR_CTOR): Redefine.
+
+       2014-06-24  Jakub Jelinek  <jakub@redhat.com>
+
+       * dump-parse-tree.c (show_omp_namelist): Use n->udr->udr instead
+       of n->udr.
+       * f95-lang.c (gfc_init_builtin_functions): Initialize
+       BUILT_IN_ASSUME_ALIGNED.
+       * gfortran.h (gfc_omp_namelist): Change udr field type to
+       struct gfc_omp_namelist_udr.
+       (gfc_omp_namelist_udr): New type.
+       (gfc_get_omp_namelist_udr): Define.
+       (gfc_resolve_code): New prototype.
+       * match.c (gfc_free_omp_namelist): Free name->udr.
+       * module.c (intrinsics): Add INTRINSIC_USER.
+       (fix_mio_expr): Likewise.
+       (mio_expr): Handle INSTRINSIC_USER and non-resolved EXPR_FUNCTION.
+       * openmp.c (gfc_match_omp_clauses): Adjust initialization of n->udr.
+       (gfc_match_omp_declare_reduction): Treat len=: the same as len=*.
+       Set attr.flavor on omp_{out,in,priv,orig} artificial variables.
+       (struct resolve_omp_udr_callback_data): New type.
+       (resolve_omp_udr_callback, resolve_omp_udr_callback2,
+       resolve_omp_udr_clause): New functions.
+       (resolve_omp_clauses): Adjust for n->udr changes, resolve UDR clauses
+       here.
+       (omp_udr_callback): Don't check for implicitly declared functions
+       here.
+       (gfc_resolve_omp_udr): Don't call gfc_resolve.  Don't check for
+       implicitly declared subroutines here.
+       * resolve.c (resolve_function): If value.function.isym is non-NULL,
+       consider it already resolved.
+       (resolve_code): Renamed to ...
+       (gfc_resolve_code): ... this.  No longer static.
+       (gfc_resolve_blocks, generate_component_assignments, resolve_codes):
+       Adjust callers.
+       * trans-openmp.c (gfc_omp_privatize_by_reference): Don't privatize
+       by reference type (C_PTR) variables.
+       (gfc_omp_finish_clause): Make sure OMP_CLAUSE_SIZE is non-NULL.
+       (gfc_trans_omp_udr_expr): Remove.
+       (gfc_trans_omp_array_reduction_or_udr): Adjust for n->udr changes.
+       Don't call gfc_trans_omp_udr_expr, even for sym->attr.dimension
+       expand it as assignment or subroutine call.  Don't initialize
+       value.function.isym.
+
+       2014-06-18  Tobias Burnus  <burnus@net-b.de>
+
+       * gfortran.texi (OpenMP): Update refs to OpenMP 4.0.
+       * intrinsic.texi (OpenMP Modules): Ditto.
+
+       2014-06-18  Jakub Jelinek  <jakub@redhat.com>
+
+       * cpp.c (cpp_define_builtins): Change _OPENMP macro to
+       201307.
+       * dump-parse-tree.c (show_omp_namelist): Add list_type
+       argument.  Adjust for rop being u.reduction_op now,
+       handle depend_op or map_op.
+       (show_omp_node): Adjust callers.  Print some new
+       OpenMP 4.0 clauses, adjust for OMP_LIST_DEPEND_{IN,OUT}
+       becoming a single OMP_LIST_DEPEND.
+       * f95-lang.c (gfc_handle_omp_declare_target_attribute): New
+       function.
+       (gfc_attribute_table): New variable.
+       (LANG_HOOKS_OMP_FINISH_CLAUSE, LANG_HOOKS_ATTRIBUTE_TABLE): Redefine.
+       * frontend-passes.c (gfc_code_walker): Handle new OpenMP target
+       EXEC_OMP_* codes and new clauses.
+       * gfortran.h (gfc_statement): Add ST_OMP_TARGET, ST_OMP_END_TARGET,
+       ST_OMP_TARGET_DATA, ST_OMP_END_TARGET_DATA, ST_OMP_TARGET_UPDATE,
+       ST_OMP_DECLARE_TARGET, ST_OMP_TEAMS, ST_OMP_END_TEAMS,
+       ST_OMP_DISTRIBUTE, ST_OMP_END_DISTRIBUTE, ST_OMP_DISTRIBUTE_SIMD,
+       ST_OMP_END_DISTRIBUTE_SIMD, ST_OMP_DISTRIBUTE_PARALLEL_DO,
+       ST_OMP_END_DISTRIBUTE_PARALLEL_DO, ST_OMP_DISTRIBUTE_PARALLEL_DO_SIMD,
+       ST_OMP_END_DISTRIBUTE_PARALLEL_DO_SIMD, ST_OMP_TARGET_TEAMS,
+       ST_OMP_END_TARGET_TEAMS, ST_OMP_TEAMS_DISTRIBUTE,
+       ST_OMP_END_TEAMS_DISTRIBUTE, ST_OMP_TEAMS_DISTRIBUTE_SIMD,
+       ST_OMP_END_TEAMS_DISTRIBUTE_SIMD, ST_OMP_TARGET_TEAMS_DISTRIBUTE,
+       ST_OMP_END_TARGET_TEAMS_DISTRIBUTE,
+       ST_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD,
+       ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_SIMD,
+       ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO,
+       ST_OMP_END_TEAMS_DISTRIBUTE_PARALLEL_DO,
+       ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO,
+       ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO,
+       ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD,
+       ST_OMP_END_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD,
+       ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD and
+       ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD.
+       (symbol_attribute): Add omp_declare_target field.
+       (gfc_omp_depend_op, gfc_omp_map_op): New enums.
+       (gfc_omp_namelist): Replace rop field with union
+       containing reduction_op, depend_op and map_op.
+       (OMP_LIST_DEPEND_IN, OMP_LIST_DEPEND_OUT): Remove.
+       (OMP_LIST_DEPEND, OMP_LIST_MAP, OMP_LIST_TO, OMP_LIST_FROM): New.
+       (gfc_omp_clauses): Add num_teams, device, thread_limit,
+       dist_sched_kind, dist_chunk_size fields.
+       (gfc_common_head): Add omp_declare_target field.
+       (gfc_exec_op): Add EXEC_OMP_TARGET, EXEC_OMP_TARGET_DATA,
+       EXEC_OMP_TEAMS, EXEC_OMP_DISTRIBUTE, EXEC_OMP_DISTRIBUTE_SIMD,
+       EXEC_OMP_DISTRIBUTE_PARALLEL_DO, EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD,
+       EXEC_OMP_TARGET_TEAMS, EXEC_OMP_TEAMS_DISTRIBUTE,
+       EXEC_OMP_TEAMS_DISTRIBUTE_SIMD, EXEC_OMP_TARGET_TEAMS_DISTRIBUTE,
+       EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD,
+       EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO,
+       EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO,
+       EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD,
+       EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD and
+       EXEC_OMP_TARGET_UPDATE.
+       (gfc_add_omp_declare_target): New prototype.
+       * match.h (gfc_match_omp_declare_target, gfc_match_omp_distribute,
+       gfc_match_omp_distribute_parallel_do,
+       gfc_match_omp_distribute_parallel_do_simd,
+       gfc_match_omp_distribute_simd, gfc_match_omp_target,
+       gfc_match_omp_target_data, gfc_match_omp_target_teams,
+       gfc_match_omp_target_teams_distribute,
+       gfc_match_omp_target_teams_distribute_parallel_do,
+       gfc_match_omp_target_teams_distribute_parallel_do_simd,
+       gfc_match_omp_target_teams_distribute_simd,
+       gfc_match_omp_target_update, gfc_match_omp_teams,
+       gfc_match_omp_teams_distribute,
+       gfc_match_omp_teams_distribute_parallel_do,
+       gfc_match_omp_teams_distribute_parallel_do_simd,
+       gfc_match_omp_teams_distribute_simd): New prototypes.
+       * module.c (ab_attribute): Add AB_OMP_DECLARE_TARGET.
+       (attr_bits): Likewise.
+       (mio_symbol_attribute): Handle omp_declare_target attribute.
+       (gfc_free_omp_clauses): Free num_teams, device, thread_limit
+       and dist_chunk_size expressions.
+       (OMP_CLAUSE_PRIVATE, OMP_CLAUSE_FIRSTPRIVATE, OMP_CLAUSE_LASTPRIVATE,
+       OMP_CLAUSE_COPYPRIVATE, OMP_CLAUSE_SHARED, OMP_CLAUSE_COPYIN,
+       OMP_CLAUSE_REDUCTION, OMP_CLAUSE_IF, OMP_CLAUSE_NUM_THREADS,
+       OMP_CLAUSE_SCHEDULE, OMP_CLAUSE_DEFAULT, OMP_CLAUSE_ORDERED,
+       OMP_CLAUSE_COLLAPSE, OMP_CLAUSE_UNTIED, OMP_CLAUSE_FINAL,
+       OMP_CLAUSE_MERGEABLE, OMP_CLAUSE_ALIGNED, OMP_CLAUSE_DEPEND,
+       OMP_CLAUSE_INBRANCH, OMP_CLAUSE_LINEAR, OMP_CLAUSE_NOTINBRANCH,
+       OMP_CLAUSE_PROC_BIND, OMP_CLAUSE_SAFELEN, OMP_CLAUSE_SIMDLEN,
+       OMP_CLAUSE_UNIFORM): Use 1U instead of 1.
+       (OMP_CLAUSE_DEVICE, OMP_CLAUSE_MAP, OMP_CLAUSE_TO, OMP_CLAUSE_FROM,
+       OMP_CLAUSE_NUM_TEAMS, OMP_CLAUSE_THREAD_LIMIT,
+       OMP_CLAUSE_DIST_SCHEDULE): Define.
+       (gfc_match_omp_clauses): Change mask parameter to unsigned int.
+       Adjust for rop becoming u.reduction_op.  Disallow inbranch with
+       notinbranch.  For depend clause, always create OMP_LIST_DEPEND
+       and fill in u.depend_op.  Handle num_teams, device, map,
+       to, from, thread_limit and dist_schedule clauses.
+       (OMP_DECLARE_SIMD_CLAUSES): Or in OMP_CLAUSE_INBRANCH and
+       OMP_CLAUSE_NOTINBRANCH.
+       (OMP_TARGET_CLAUSES, OMP_TARGET_DATA_CLAUSES,
+       OMP_TARGET_UPDATE_CLAUSES, OMP_TEAMS_CLAUSES,
+       OMP_DISTRIBUTE_CLAUSES): Define.
+       (match_omp): New function.
+       (gfc_match_omp_do, gfc_match_omp_do_simd, gfc_match_omp_parallel,
+       gfc_match_omp_parallel_do, gfc_match_omp_parallel_do_simd,
+       gfc_match_omp_parallel_sections, gfc_match_omp_parallel_workshare,
+       gfc_match_omp_sections, gfc_match_omp_simd, gfc_match_omp_single,
+       gfc_match_omp_task): Rewritten using match_omp.
+       (gfc_match_omp_threadprivate, gfc_match_omp_declare_reduction):
+       Diagnose if the directives are followed by unexpected junk.
+       (gfc_match_omp_distribute, gfc_match_omp_distribute_parallel_do,
+       gfc_match_omp_distribute_parallel_do_simd,
+       gfc_match_omp_distrbute_simd, gfc_match_omp_declare_target,
+       gfc_match_omp_target, gfc_match_omp_target_data,
+       gfc_match_omp_target_teams, gfc_match_omp_target_teams_distribute,
+       gfc_match_omp_target_teams_distribute_parallel_do,
+       gfc_match_omp_target_teams_distribute_parallel_do_simd,
+       gfc_match_omp_target_teams_distrbute_simd, gfc_match_omp_target_update,
+       gfc_match_omp_teams, gfc_match_omp_teams_distribute,
+       gfc_match_omp_teams_distribute_parallel_do,
+       gfc_match_omp_teams_distribute_parallel_do_simd,
+       gfc_match_omp_teams_distrbute_simd): New functions.
+       * openmp.c (resolve_omp_clauses): Adjust for
+       OMP_LIST_DEPEND_{IN,OUT} being changed to OMP_LIST_DEPEND.  Handle
+       OMP_LIST_MAP, OMP_LIST_FROM, OMP_LIST_TO, num_teams, device,
+       dist_chunk_size and thread_limit.
+       (gfc_resolve_omp_parallel_blocks): Only put sharing clauses into
+       ctx.sharing_clauses.  Call gfc_resolve_omp_do_blocks for various
+       new EXEC_OMP_* codes.
+       (resolve_omp_do): Handle various new EXEC_OMP_* codes.
+       (gfc_resolve_omp_directive): Likewise.
+       (gfc_resolve_omp_declare_simd): Add missing space to diagnostics.
+       * parse.c (decode_omp_directive): Handle parsing of OpenMP 4.0
+       offloading related directives.
+       (case_executable): Add ST_OMP_TARGET_UPDATE.
+       (case_exec_markers): Add ST_OMP_TARGET*, ST_OMP_TEAMS*,
+       ST_OMP_DISTRIBUTE*.
+       (case_decl): Add ST_OMP_DECLARE_TARGET.
+       (gfc_ascii_statement): Handle new ST_OMP_* codes.
+       (parse_omp_do): Handle various new ST_OMP_* codes.
+       (parse_executable): Likewise.
+       * resolve.c (gfc_resolve_blocks): Handle various new EXEC_OMP_*
+       codes.
+       (resolve_code): Likewise.
+       (resolve_symbol): Change that !$OMP DECLARE TARGET variables
+       are saved.
+       * st.c (gfc_free_statement): Handle various new EXEC_OMP_* codes.
+       * symbol.c (check_conflict): Check omp_declare_target conflicts.
+       (gfc_add_omp_declare_target): New function.
+       (gfc_copy_attr): Copy omp_declare_target.
+       * trans.c (trans_code): Handle various new EXEC_OMP_* codes.
+       * trans-common.c (build_common_decl): Add "omp declare target"
+       attribute if needed.
+       * trans-decl.c (add_attributes_to_decl): Likewise.
+       * trans.h (gfc_omp_finish_clause): New prototype.
+       * trans-openmp.c (gfc_omp_finish_clause): New function.
+       (gfc_trans_omp_reduction_list): Adjust for rop being renamed
+       to u.reduction_op.
+       (gfc_trans_omp_clauses): Adjust for OMP_LIST_DEPEND_{IN,OUT}
+       change to OMP_LIST_DEPEND and fix up depend handling.
+       Handle OMP_LIST_MAP, OMP_LIST_TO, OMP_LIST_FROM, num_teams,
+       thread_limit, device, dist_chunk_size and dist_sched_kind.
+       (gfc_trans_omp_do): Handle EXEC_OMP_DISTRIBUTE.
+       (GFC_OMP_SPLIT_DISTRIBUTE, GFC_OMP_SPLIT_TEAMS,
+       GFC_OMP_SPLIT_TARGET, GFC_OMP_SPLIT_NUM, GFC_OMP_MASK_DISTRIBUTE,
+       GFC_OMP_MASK_TEAMS, GFC_OMP_MASK_TARGET, GFC_OMP_MASK_NUM): New.
+       (gfc_split_omp_clauses): Handle splitting of clauses for new
+       EXEC_OMP_* codes.
+       (gfc_trans_omp_do_simd): Add pblock argument, adjust for being
+       callable for combined constructs.
+       (gfc_trans_omp_parallel_do, gfc_trans_omp_parallel_do_simd): Likewise.
+       (gfc_trans_omp_distribute, gfc_trans_omp_teams,
+       gfc_trans_omp_target, gfc_trans_omp_target_data,
+       gfc_trans_omp_target_update): New functions.
+       (gfc_trans_omp_directive): Adjust gfc_trans_omp_* callers, handle
+       new EXEC_OMP_* codes.
+
+       2014-06-10  Jakub Jelinek  <jakub@redhat.com>
+
+       PR fortran/60928
+       * f95-lang.c (gfc_init_builtin_functions): Handle -fopenmp-simd
+       like -fopenmp.
+       * openmp.c (resolve_omp_clauses): Remove allocatable components
+       diagnostics.  Add associate-name and intent(in) pointer
+       diagnostics for various clauses, diagnose procedure pointers in
+       reduction clause.
+       * parse.c (match_word_omp_simd): New function.
+       (matchs, matcho): New macros.
+       (decode_omp_directive): Change match macros to either matchs
+       or matcho.  Handle -fopenmp-simd.
+       (next_free, next_fixed): Handle -fopenmp-simd like -fopenmp.
+       * scanner.c (skip_free_comments, skip_fixed_comments, include_line):
+       Likewise.
+       * trans-array.c (get_full_array_size): Rename to...
+       (gfc_full_array_size): ... this.  No longer static.
+       (duplicate_allocatable): Adjust caller.  Add NO_MEMCPY argument
+       and handle it.
+       (gfc_duplicate_allocatable, gfc_copy_allocatable_data): Adjust
+       duplicate_allocatable callers.
+       (gfc_duplicate_allocatable_nocopy): New function.
+       (structure_alloc_comps): Adjust g*_full_array_size and
+       duplicate_allocatable caller.
+       * trans-array.h (gfc_full_array_size,
+       gfc_duplicate_allocatable_nocopy): New prototypes.
+       * trans-common.c (create_common): Call gfc_finish_decl_attrs.
+       * trans-decl.c (gfc_finish_decl_attrs): New function.
+       (gfc_finish_var_decl, create_function_arglist,
+       gfc_get_fake_result_decl): Call it.
+       (gfc_allocate_lang_decl): If DECL_LANG_SPECIFIC is already allocated,
+       don't allocate it again.
+       (gfc_get_symbol_decl): Set GFC_DECL_ASSOCIATE_VAR_P on
+       associate-names.
+       * trans.h (gfc_finish_decl_attrs): New prototype.
+       (struct lang_decl): Add scalar_allocatable and scalar_pointer
+       bitfields.
+       (GFC_DECL_SCALAR_ALLOCATABLE, GFC_DECL_SCALAR_POINTER,
+       GFC_DECL_GET_SCALAR_ALLOCATABLE, GFC_DECL_GET_SCALAR_POINTER,
+       GFC_DECL_ASSOCIATE_VAR_P): Define.
+       (GFC_POINTER_TYPE_P): Remove.
+       * trans-openmp.c (gfc_omp_privatize_by_reference): Don't check
+       GFC_POINTER_TYPE_P, instead test GFC_DECL_GET_SCALAR_ALLOCATABLE,
+       GFC_DECL_GET_SCALAR_POINTER or GFC_DECL_CRAY_POINTEE on decl.
+       (gfc_omp_predetermined_sharing): Associate-names are predetermined.
+       (enum walk_alloc_comps): New.
+       (gfc_has_alloc_comps, gfc_omp_unshare_expr_r, gfc_omp_unshare_expr,
+       gfc_walk_alloc_comps): New functions.
+       (gfc_omp_private_outer_ref): Return true for scalar allocatables or
+       decls with allocatable components.
+       (gfc_omp_clause_default_ctor, gfc_omp_clause_copy_ctor,
+       gfc_omp_clause_assign_op, gfc_omp_clause_dtor): Fix up handling of
+       allocatables, handle also OMP_CLAUSE_REDUCTION, handle scalar
+       allocatables and decls with allocatable components.
+       (gfc_trans_omp_array_reduction_or_udr): Don't handle allocatable
+       arrays here.
+       (gfc_trans_omp_reduction_list): Call
+       gfc_trans_omp_array_reduction_or_udr even for allocatable scalars.
+       (gfc_trans_omp_do_simd): If -fno-openmp, just expand it as OMP_SIMD.
+       (gfc_trans_omp_parallel_do_simd): Likewise.
+       * trans-types.c (gfc_sym_type): Don't set GFC_POINTER_TYPE_P.
+       (gfc_get_derived_type): Call gfc_finish_decl_attrs.
+
+       2014-06-06  Jakub Jelinek  <jakub@redhat.com>
+
+       * dump-parse-tree.c (show_omp_namelist): Dump reduction
+       id in each list item.
+       (show_omp_node): Only handle OMP_LIST_REDUCTION, not
+       OMP_LIST_REDUCTION_FIRST .. OMP_LIST_REDUCTION_LAST.  Don't
+       dump reduction id here.
+       * frontend-passes.c (dummy_code_callback): Renamed to...
+       (gfc_dummy_code_callback): ... this.  No longer static.
+       (optimize_reduction): Use gfc_dummy_code_callback instead of
+       dummy_code_callback.
+       * gfortran.h (gfc_statement): Add ST_OMP_DECLARE_REDUCTION.
+       (symbol_attribute): Add omp_udr_artificial_var bitfield.
+       (gfc_omp_reduction_op): New enum.
+       (gfc_omp_namelist): Add rop and udr fields.
+       (OMP_LIST_PLUS, OMP_LIST_REDUCTION_FIRST, OMP_LIST_MULT,
+       OMP_LIST_SUB, OMP_LIST_AND, OMP_LIST_OR, OMP_LIST_EQV,
+       OMP_LIST_NEQV, OMP_LIST_MAX, OMP_LIST_MIN, OMP_LIST_IAND,
+       OMP_LIST_IOR, OMP_LIST_IEOR, OMP_LIST_REDUCTION_LAST): Removed.
+       (OMP_LIST_REDUCTION): New.
+       (gfc_omp_udr): New type.
+       (gfc_get_omp_udr): Define.
+       (gfc_symtree): Add n.omp_udr field.
+       (gfc_namespace): Add omp_udr_root field, add omp_udr_ns bitfield.
+       (gfc_free_omp_udr, gfc_omp_udr_find, gfc_resolve_omp_udrs,
+       gfc_dummy_code_callback): New prototypes.
+       * match.h (gfc_match_omp_declare_reduction): New prototype.
+       * module.c (MOD_VERSION): Increase to 13.
+       (omp_declare_reduction_stmt): New array.
+       (mio_omp_udr_expr, write_omp_udr, write_omp_udrs, load_omp_udrs):
+       New functions.
+       (read_module): Read OpenMP user defined reductions.
+       (write_module): Write OpenMP user defined reductions.
+       * openmp.c: Include arith.h.
+       (gfc_free_omp_udr, gfc_find_omp_udr): New functions.
+       (gfc_match_omp_clauses): Handle user defined reductions.
+       Store reduction kind into gfc_omp_namelist instead of using
+       several OMP_LIST_* entries.
+       (match_udr_expr, gfc_omp_udr_predef, gfc_omp_udr_find,
+       gfc_match_omp_declare_reduction): New functions.
+       (resolve_omp_clauses): Adjust for reduction clauses being only
+       in OMP_LIST_REDUCTION list.  Diagnose missing UDRs.
+       (struct omp_udr_callback_data): New type.
+       (omp_udr_callback, gfc_resolve_omp_udr, gfc_resolve_omp_udrs): New
+       functions.
+       * parse.c (decode_omp_directive): Handle !$omp declare reduction.
+       (case_decl): Add ST_OMP_DECLARE_REDUCTION.
+       (gfc_ascii_statement): Print ST_OMP_DECLARE_REDUCTION.
+       * resolve.c (resolve_fl_variable): Allow len=: or len=* on
+       sym->attr.omp_udr_artificial_var symbols.
+       (resolve_types): Call gfc_resolve_omp_udrs.
+       * symbol.c (gfc_get_uop): If gfc_current_ns->omp_udr_ns,
+       use parent ns instead of gfc_current_ns.
+       (gfc_get_sym_tree): Don't insert symbols into
+       namespaces with omp_udr_ns set.
+       (free_omp_udr_tree): New function.
+       (gfc_free_namespace): Call it.
+       * trans-openmp.c (struct omp_udr_find_orig_data): New type.
+       (omp_udr_find_orig, gfc_trans_omp_udr_expr): New functions.
+       (gfc_trans_omp_array_reduction): Renamed to...
+       (gfc_trans_omp_array_reduction_or_udr): ... this.  Remove SYM
+       argument, instead pass gfc_omp_namelist pointer N.  Handle
+       user defined reductions.
+       (gfc_trans_omp_reduction_list): Remove REDUCTION_CODE argument.
+       Handle user defined reductions and reduction ops in gfc_omp_namelist.
+       (gfc_trans_omp_clauses): Adjust for just a single OMP_LIST_REDUCTION
+       list.
+       (gfc_split_omp_clauses): Likewise.
+
+       2014-05-12  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/60127
+       * openmp.c (resolve_omp_do): Reject do concurrent loops.
+
+       2014-05-11  Jakub Jelinek  <jakub@redhat.com>
+
+       * gfortran.h (gfc_statement): Add ST_OMP_CANCEL,
+       ST_OMP_CANCELLATION_POINT, ST_OMP_TASKGROUP, ST_OMP_END_TASKGROUP,
+       ST_OMP_SIMD, ST_OMP_END_SIMD, ST_OMP_DO_SIMD, ST_OMP_END_DO_SIMD,
+       ST_OMP_PARALLEL_DO_SIMD, ST_OMP_END_PARALLEL_DO_SIMD and
+       ST_OMP_DECLARE_SIMD.
+       (gfc_omp_namelist): New typedef.
+       (gfc_get_omp_namelist): Define.
+       (OMP_LIST_UNIFORM, OMP_LIST_ALIGNED, OMP_LIST_LINEAR,
+       OMP_LIST_DEPEND_IN, OMP_LIST_DEPEND_OUT): New clause list kinds.
+       (gfc_omp_proc_bind_kind, gfc_omp_cancel_kind): New enums.
+       (gfc_omp_clauses): Change type of lists to gfc_omp_namelist *.
+       Add inbranch, notinbranch, cancel, proc_bind, safelen_expr and
+       simdlen_expr fields.
+       (gfc_omp_declare_simd): New typedef.
+       (gfc_get_omp_declare_simd): Define.
+       (gfc_namespace): Add omp_declare_simd field.
+       (gfc_exec_op): Add EXEC_OMP_CANCEL, EXEC_OMP_CANCELLATION_POINT,
+       EXEC_OMP_TASKGROUP, EXEC_OMP_SIMD, EXEC_OMP_DO_SIMD and
+       EXEC_OMP_PARALLEL_DO_SIMD.
+       (gfc_omp_atomic_op): Add GFC_OMP_ATOMIC_MASK, GFC_OMP_ATOMIC_SEQ_CST
+       and GFC_OMP_ATOMIC_SWAP.
+       (gfc_code): Change type of omp_namelist field to gfc_omp_namelist *.
+       (gfc_free_omp_namelist, gfc_free_omp_declare_simd,
+       gfc_free_omp_declare_simd_list, gfc_resolve_omp_declare_simd): New
+       prototypes.
+       * trans-stmt.h (gfc_trans_omp_declare_simd): New prototype.
+       * symbol.c (gfc_free_namespace): Call gfc_free_omp_declare_simd.
+       * openmp.c (gfc_free_omp_clauses): Free safelen_expr and
+       simdlen_expr.  Use gfc_free_omp_namelist instead of
+       gfc_free_namelist.
+       (gfc_free_omp_declare_simd, gfc_free_omp_declare_simd_list): New
+       functions.
+       (gfc_match_omp_variable_list): Add end_colon, headp and
+       allow_sections arguments.  Handle parsing of array sections.
+       Use *omp_namelist* instead of *namelist* data structure and
+       functions/macros.  Allow termination at : character.
+       (OMP_CLAUSE_ALIGNED, OMP_CLAUSE_DEPEND, OMP_CLAUSE_INBRANCH,
+       OMP_CLAUSE_LINEAR, OMP_CLAUSE_NOTINBRANCH, OMP_CLAUSE_PROC_BIND,
+       OMP_CLAUSE_SAFELEN, OMP_CLAUSE_SIMDLEN, OMP_CLAUSE_UNIFORM): Define.
+       (gfc_match_omp_clauses): Change first and needs_space variables
+       into arguments with default values.  Parse inbranch, notinbranch,
+       proc_bind, safelen, simdlen, uniform, linear, aligned and
+       depend clauses.
+       (OMP_PARALLEL_CLAUSES): Add OMP_CLAUSE_PROC_BIND.
+       (OMP_DECLARE_SIMD_CLAUSES, OMP_SIMD_CLAUSES): Define.
+       (OMP_TASK_CLAUSES): Add OMP_CLAUSE_DEPEND.
+       (gfc_match_omp_do_simd): New function.
+       (gfc_match_omp_flush): Use *omp_namelist* instead of *namelist*
+       data structure and functions/macros.
+       (gfc_match_omp_simd, gfc_match_omp_declare_simd,
+       gfc_match_omp_parallel_do_simd): New functions.
+       (gfc_match_omp_atomic): Handle seq_cst clause.  Handle atomic swap.
+       (gfc_match_omp_taskgroup, gfc_match_omp_cancel_kind,
+       gfc_match_omp_cancel, gfc_match_omp_cancellation_point): New
+       functions.
+       (resolve_omp_clauses): Add where, omp_clauses and ns arguments.
+       Use *omp_namelist* instead of *namelist* data structure and
+       functions/macros.  Resolve uniform, aligned, linear, depend,
+       safelen and simdlen clauses.
+       (resolve_omp_atomic): Adjust for GFC_OMP_ATOMIC_{MASK,SEQ_CST,SWAP}
+       addition, recognize atomic swap.
+       (gfc_resolve_omp_parallel_blocks): Use gfc_omp_namelist instead
+       of gfc_namelist.  Handle EXEC_OMP_PARALLEL_DO_SIMD the same as
+       EXEC_OMP_PARALLEL_DO.
+       (gfc_resolve_do_iterator): Use *omp_namelist* instead of *namelist*
+       data structure and functions/macros.
+       (resolve_omp_do): Likewise.  Handle EXEC_OMP_SIMD, EXEC_OMP_DO_SIMD,
+       EXEC_OMP_PARALLEL_DO_SIMD.
+       (gfc_resolve_omp_directive): Handle EXEC_OMP_SIMD, EXEC_OMP_DO_SIMD,
+       EXEC_OMP_PARALLEL_DO_SIMD and EXEC_OMP_CANCEL.  Adjust
+       resolve_omp_clauses caller.
+       (gfc_resolve_omp_declare_simd): New function.
+       * parse.c (decode_omp_directive): Parse cancellation point, cancel,
+       declare simd, end do simd, end simd, end parallel do simd,
+       end taskgroup, parallel do simd, simd and taskgroup directives.
+       (case_executable): Add ST_OMP_CANCEL and ST_OMP_CANCELLATION_POINT.
+       (case_exec_markers): Add ST_OMP_TASKGROUP, case ST_OMP_SIMD,
+       ST_OMP_DO_SIMD and ST_OMP_PARALLEL_DO_SIMD.
+       (case_decl): Add ST_OMP_DECLARE_SIMD.
+       (gfc_ascii_statement): Handle ST_OMP_CANCEL,
+       ST_OMP_CANCELLATION_POINT, ST_OMP_TASKGROUP, ST_OMP_END_TASKGROUP,
+       ST_OMP_SIMD, ST_OMP_END_SIMD, ST_OMP_DO_SIMD, ST_OMP_END_DO_SIMD,
+       ST_OMP_PARALLEL_DO_SIMD, ST_OMP_END_PARALLEL_DO_SIMD and
+       ST_OMP_DECLARE_SIMD.
+       (parse_omp_do): Handle ST_OMP_SIMD, ST_OMP_DO_SIMD and
+       ST_OMP_PARALLEL_DO_SIMD.
+       (parse_omp_atomic): Adjust for GFC_OMP_ATOMIC_* additions.
+       (parse_omp_structured_block): Handle ST_OMP_TASKGROUP and
+       ST_OMP_PARALLEL_DO_SIMD.
+       (parse_executable): Handle ST_OMP_SIMD, ST_OMP_DO_SIMD,
+       ST_OMP_PARALLEL_DO_SIMD and ST_OMP_TASKGROUP.
+       * trans-decl.c (gfc_get_extern_function_decl,
+       gfc_create_function_decl): Call gfc_trans_omp_declare_simd if
+       needed.
+       * frontend-passes.c (gfc_code_walker): Handle EXEC_OMP_SIMD,
+       EXEC_OMP_DO_SIMD and EXEC_OMP_PARALLEL_DO_SIMD.  Walk
+       safelen_expr and simdlen_expr.  Walk expressions in gfc_omp_namelist
+       of depend, aligned and linear clauses.
+       * match.c (match_exit_cycle): Handle EXEC_OMP_SIMD, EXEC_OMP_DO_SIMD
+       and EXEC_OMP_PARALLEL_DO_SIMD.
+       (gfc_free_omp_namelist): New function.
+       * dump-parse-tree.c (show_namelist): Removed.
+       (show_omp_namelist): New function.
+       (show_omp_node): Handle OpenMP 4.0 additions.
+       (show_code_node): Handle EXEC_OMP_CANCEL, EXEC_OMP_CANCELLATION_POINT,
+       EXEC_OMP_DO_SIMD, EXEC_OMP_PARALLEL_DO_SIMD, EXEC_OMP_SIMD and
+       EXEC_OMP_TASKGROUP.
+       * match.h (gfc_match_omp_cancel, gfc_match_omp_cancellation_point,
+       gfc_match_omp_declare_simd, gfc_match_omp_do_simd,
+       gfc_match_omp_parallel_do_simd, gfc_match_omp_simd,
+       gfc_match_omp_taskgroup): New prototypes.
+       * trans-openmp.c (gfc_trans_omp_variable): Add declare_simd
+       argument, handle it.  Allow current_function_decl to be NULL.
+       (gfc_trans_omp_variable_list): Add declare_simd argument, pass
+       it through to gfc_trans_omp_variable and disregard whether
+       sym is referenced if declare_simd is true.  Work on gfc_omp_namelist
+       instead of gfc_namelist.
+       (gfc_trans_omp_reduction_list): Work on gfc_omp_namelist instead of
+       gfc_namelist.  Adjust gfc_trans_omp_variable caller.
+       (gfc_trans_omp_clauses): Add declare_simd argument, pass it through
+       to gfc_trans_omp_variable{,_list} callers.  Work on gfc_omp_namelist
+       instead of gfc_namelist.  Handle inbranch, notinbranch, safelen,
+       simdlen, depend, uniform, linear, proc_bind and aligned clauses.
+       Handle cancel kind.
+       (gfc_trans_omp_atomic): Handle seq_cst clause, handle atomic swap,
+       adjust for GFC_OMP_ATOMIC_* changes.
+       (gfc_trans_omp_cancel, gfc_trans_omp_cancellation_point): New
+       functions.
+       (gfc_trans_omp_do): Add op argument, handle simd translation into
+       generic.
+       (GFC_OMP_SPLIT_SIMD, GFC_OMP_SPLIT_DO, GFC_OMP_SPLIT_PARALLEL,
+       GFC_OMP_SPLIT_NUM, GFC_OMP_MASK_SIMD, GFC_OMP_MASK_DO,
+       GFC_OMP_MASK_PARALLEL): New.
+       (gfc_split_omp_clauses, gfc_trans_omp_do_simd): New functions.
+       (gfc_trans_omp_parallel_do): Rework to use gfc_split_omp_clauses.
+       (gfc_trans_omp_parallel_do_simd, gfc_trans_omp_taskgroup): New
+       functions.
+       (gfc_trans_omp_directive): Handle EXEC_OMP_CANCEL,
+       EXEC_OMP_CANCELLATION_POINT, EXEC_OMP_DO_SIMD,
+       EXEC_OMP_PARALLEL_DO_SIMD, EXEC_OMP_SIMD and EXEC_OMP_TASKGROUP.
+       Adjust gfc_trans_omp_do caller.
+       (gfc_trans_omp_declare_simd): New function.
+       * st.c (gfc_free_statement): Handle EXEC_OMP_CANCEL,
+       EXEC_OMP_CANCELLATION_POINT, EXEC_OMP_DO_SIMD,
+       EXEC_OMP_PARALLEL_DO_SIMD, EXEC_OMP_SIMD and EXEC_OMP_TASKGROUP.
+       For EXEC_OMP_FLUSH call gfc_free_omp_namelist instead of
+       gfc_free_namelist.
+       * module.c (omp_declare_simd_clauses): New variable.
+       (mio_omp_declare_simd): New function.
+       (mio_symbol): Call it.
+       * trans.c (trans_code): Handle EXEC_OMP_CANCEL,
+       EXEC_OMP_CANCELLATION_POINT, EXEC_OMP_DO_SIMD,
+       EXEC_OMP_PARALLEL_DO_SIMD, EXEC_OMP_SIMD and EXEC_OMP_TASKGROUP.
+       * resolve.c (gfc_resolve_blocks): Handle EXEC_OMP_DO_SIMD,
+       EXEC_OMP_PARALLEL_DO_SIMD, EXEC_OMP_SIMD and EXEC_OMP_TASKGROUP.
+       (resolve_code): Handle EXEC_OMP_CANCEL,
+       EXEC_OMP_CANCELLATION_POINT, EXEC_OMP_DO_SIMD,
+       EXEC_OMP_PARALLEL_DO_SIMD, EXEC_OMP_SIMD and EXEC_OMP_TASKGROUP.
+       (resolve_types): Call gfc_resolve_omp_declare_simd.
+
+2014-06-15  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+
+       Backport from trunk.
+       PR fortran/45187
+       * trans-decl.c (gfc_create_module_variable): Don't create
+       Cray-pointee decls twice.
+
+2014-06-09  Paul Thomas  <pault@gcc.gnu.org>
+
+       Backport from trunk.
+       PR fortran/61406
+       * trans-stmt.c (trans_associate_var): Check that array
+       constructors are constant for direct reference.
+
+2014-06-05  Richard Biener  <rguenther@suse.de>
+
+       PR fortran/61418
+       * gfortranspec.c (spec_file): Remove.
+       (find_spec_file): Likewise.
+       (lang_specific_driver): Do not look for specs file in -L
+       or append -specs command line argument.
+       (lang_specific_pre_link): Always %:include libgfortran.spec.
+
+2014-05-29  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/60834
+       Backport from mainline
+       * frontend-passes.c (in_assoc_list):  New variable.
+       (optimize_namespace):  Initialize in_assoc_list
+       (combine_array_constructor): Don't try to combine
+       assoc lists.
+       (gfc_code_walker):  Keep track of in_assoc_list.
+
+2014-05-26  Janne Blomqvist  <jb@gcc.gnu.org>
+
+       Backport from mainline
+       PR libfortran/61310
+       * intrinsics.texi (CTIME): Remove mention of locale-dependent
+       behavior.
+
+2014-04-22  Tobias Burnus  <burnus@net-b.de>
+
+       Backport from mainline
+       2014-04-11  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/58880
+       PR fortran/60495
+       * resolve.c (gfc_resolve_finalizers): Ensure that vtables
+       and finalization wrappers are generated.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 1695990..7fb8d16 100644 (file)
@@ -171,7 +171,7 @@ cpp_define_builtins (cpp_reader *pfile)
   cpp_define (pfile, "_LANGUAGE_FORTRAN=1");
 
   if (gfc_option.gfc_flag_openmp)
-    cpp_define (pfile, "_OPENMP=201107");
+    cpp_define (pfile, "_OPENMP=201307");
 
   /* The defines below are necessary for the TARGET_* macros.
 
index 4048ac9..eebecd5 100644 (file)
@@ -1997,6 +1997,13 @@ variable_decl (int elem)
       if (!gfc_notify_std (GFC_STD_GNU, "Old-style "
                           "initialization at %C"))
        return MATCH_ERROR;
+      else if (gfc_current_state () == COMP_DERIVED)
+       {
+         gfc_error ("Invalid old style initialization for derived type "
+                    "component at %C");
+         m = MATCH_ERROR;
+         goto cleanup;
+       }
 
       return match_old_style_init (name);
     }
index b1343bc..19f83a9 100644 (file)
@@ -1016,11 +1016,60 @@ show_code (int level, gfc_code *c)
 }
 
 static void
-show_namelist (gfc_namelist *n)
+show_omp_namelist (int list_type, gfc_omp_namelist *n)
 {
-  for (; n->next; n = n->next)
-    fprintf (dumpfile, "%s,", n->sym->name);
-  fprintf (dumpfile, "%s", n->sym->name);
+  for (; n; n = n->next)
+    {
+      if (list_type == OMP_LIST_REDUCTION)
+       switch (n->u.reduction_op)
+         {
+         case OMP_REDUCTION_PLUS:
+         case OMP_REDUCTION_TIMES:
+         case OMP_REDUCTION_MINUS:
+         case OMP_REDUCTION_AND:
+         case OMP_REDUCTION_OR:
+         case OMP_REDUCTION_EQV:
+         case OMP_REDUCTION_NEQV:
+           fprintf (dumpfile, "%s:",
+                    gfc_op2string ((gfc_intrinsic_op) n->u.reduction_op));
+           break;
+         case OMP_REDUCTION_MAX: fputs ("max:", dumpfile); break;
+         case OMP_REDUCTION_MIN: fputs ("min:", dumpfile); break;
+         case OMP_REDUCTION_IAND: fputs ("iand:", dumpfile); break;
+         case OMP_REDUCTION_IOR: fputs ("ior:", dumpfile); break;
+         case OMP_REDUCTION_IEOR: fputs ("ieor:", dumpfile); break;
+         case OMP_REDUCTION_USER:
+           if (n->udr)
+             fprintf (dumpfile, "%s:", n->udr->udr->name);
+           break;
+         default: break;
+         }
+      else if (list_type == OMP_LIST_DEPEND)
+       switch (n->u.depend_op)
+         {
+         case OMP_DEPEND_IN: fputs ("in:", dumpfile); break;
+         case OMP_DEPEND_OUT: fputs ("out:", dumpfile); break;
+         case OMP_DEPEND_INOUT: fputs ("inout:", dumpfile); break;
+         default: break;
+         }
+      else if (list_type == OMP_LIST_MAP)
+       switch (n->u.map_op)
+         {
+         case OMP_MAP_ALLOC: fputs ("alloc:", dumpfile); break;
+         case OMP_MAP_TO: fputs ("to:", dumpfile); break;
+         case OMP_MAP_FROM: fputs ("from:", dumpfile); break;
+         case OMP_MAP_TOFROM: fputs ("tofrom:", dumpfile); break;
+         default: break;
+         }
+      fprintf (dumpfile, "%s", n->sym->name);
+      if (n->expr)
+       {
+         fputc (':', dumpfile);
+         show_expr (n->expr);
+       }
+      if (n->next)
+       fputc (',', dumpfile);
+    }
 }
 
 /* Show a single OpenMP directive node and everything underneath it
@@ -1036,18 +1085,24 @@ show_omp_node (int level, gfc_code *c)
     {
     case EXEC_OMP_ATOMIC: name = "ATOMIC"; break;
     case EXEC_OMP_BARRIER: name = "BARRIER"; break;
+    case EXEC_OMP_CANCEL: name = "CANCEL"; break;
+    case EXEC_OMP_CANCELLATION_POINT: name = "CANCELLATION POINT"; break;
     case EXEC_OMP_CRITICAL: name = "CRITICAL"; break;
     case EXEC_OMP_FLUSH: name = "FLUSH"; break;
     case EXEC_OMP_DO: name = "DO"; break;
+    case EXEC_OMP_DO_SIMD: name = "DO SIMD"; break;
     case EXEC_OMP_MASTER: name = "MASTER"; break;
     case EXEC_OMP_ORDERED: name = "ORDERED"; break;
     case EXEC_OMP_PARALLEL: name = "PARALLEL"; break;
     case EXEC_OMP_PARALLEL_DO: name = "PARALLEL DO"; break;
+    case EXEC_OMP_PARALLEL_DO_SIMD: name = "PARALLEL DO SIMD"; break;
     case EXEC_OMP_PARALLEL_SECTIONS: name = "PARALLEL SECTIONS"; break;
     case EXEC_OMP_PARALLEL_WORKSHARE: name = "PARALLEL WORKSHARE"; break;
     case EXEC_OMP_SECTIONS: name = "SECTIONS"; break;
+    case EXEC_OMP_SIMD: name = "SIMD"; break;
     case EXEC_OMP_SINGLE: name = "SINGLE"; break;
     case EXEC_OMP_TASK: name = "TASK"; break;
+    case EXEC_OMP_TASKGROUP: name = "TASKGROUP"; break;
     case EXEC_OMP_TASKWAIT: name = "TASKWAIT"; break;
     case EXEC_OMP_TASKYIELD: name = "TASKYIELD"; break;
     case EXEC_OMP_WORKSHARE: name = "WORKSHARE"; break;
@@ -1057,11 +1112,16 @@ show_omp_node (int level, gfc_code *c)
   fprintf (dumpfile, "!$OMP %s", name);
   switch (c->op)
     {
+    case EXEC_OMP_CANCEL:
+    case EXEC_OMP_CANCELLATION_POINT:
     case EXEC_OMP_DO:
+    case EXEC_OMP_DO_SIMD:
     case EXEC_OMP_PARALLEL:
     case EXEC_OMP_PARALLEL_DO:
+    case EXEC_OMP_PARALLEL_DO_SIMD:
     case EXEC_OMP_PARALLEL_SECTIONS:
     case EXEC_OMP_SECTIONS:
+    case EXEC_OMP_SIMD:
     case EXEC_OMP_SINGLE:
     case EXEC_OMP_WORKSHARE:
     case EXEC_OMP_PARALLEL_WORKSHARE:
@@ -1076,7 +1136,7 @@ show_omp_node (int level, gfc_code *c)
       if (c->ext.omp_namelist)
        {
          fputs (" (", dumpfile);
-         show_namelist (c->ext.omp_namelist);
+         show_omp_namelist (OMP_LIST_NUM, c->ext.omp_namelist);
          fputc (')', dumpfile);
        }
       return;
@@ -1091,6 +1151,23 @@ show_omp_node (int level, gfc_code *c)
     {
       int list_type;
 
+      switch (omp_clauses->cancel)
+       {
+       case OMP_CANCEL_UNKNOWN:
+         break;
+       case OMP_CANCEL_PARALLEL:
+         fputs (" PARALLEL", dumpfile);
+         break;
+       case OMP_CANCEL_SECTIONS:
+         fputs (" SECTIONS", dumpfile);
+         break;
+       case OMP_CANCEL_DO:
+         fputs (" DO", dumpfile);
+         break;
+       case OMP_CANCEL_TASKGROUP:
+         fputs (" TASKGROUP", dumpfile);
+         break;
+       }
       if (omp_clauses->if_expr)
        {
          fputs (" IF(", dumpfile);
@@ -1156,45 +1233,83 @@ show_omp_node (int level, gfc_code *c)
        if (omp_clauses->lists[list_type] != NULL
            && list_type != OMP_LIST_COPYPRIVATE)
          {
-           const char *type;
-           if (list_type >= OMP_LIST_REDUCTION_FIRST)
+           const char *type = NULL;
+           switch (list_type)
              {
-               switch (list_type)
-                 {
-                 case OMP_LIST_PLUS: type = "+"; break;
-                 case OMP_LIST_MULT: type = "*"; break;
-                 case OMP_LIST_SUB: type = "-"; break;
-                 case OMP_LIST_AND: type = ".AND."; break;
-                 case OMP_LIST_OR: type = ".OR."; break;
-                 case OMP_LIST_EQV: type = ".EQV."; break;
-                 case OMP_LIST_NEQV: type = ".NEQV."; break;
-                 case OMP_LIST_MAX: type = "MAX"; break;
-                 case OMP_LIST_MIN: type = "MIN"; break;
-                 case OMP_LIST_IAND: type = "IAND"; break;
-                 case OMP_LIST_IOR: type = "IOR"; break;
-                 case OMP_LIST_IEOR: type = "IEOR"; break;
-                 default:
-                   gcc_unreachable ();
-                 }
-               fprintf (dumpfile, " REDUCTION(%s:", type);
+             case OMP_LIST_PRIVATE: type = "PRIVATE"; break;
+             case OMP_LIST_FIRSTPRIVATE: type = "FIRSTPRIVATE"; break;
+             case OMP_LIST_LASTPRIVATE: type = "LASTPRIVATE"; break;
+             case OMP_LIST_SHARED: type = "SHARED"; break;
+             case OMP_LIST_COPYIN: type = "COPYIN"; break;
+             case OMP_LIST_UNIFORM: type = "UNIFORM"; break;
+             case OMP_LIST_ALIGNED: type = "ALIGNED"; break;
+             case OMP_LIST_LINEAR: type = "LINEAR"; break;
+             case OMP_LIST_REDUCTION: type = "REDUCTION"; break;
+             case OMP_LIST_DEPEND: type = "DEPEND"; break;
+             default:
+               gcc_unreachable ();
              }
-           else
-             {
-               switch (list_type)
-                 {
-                 case OMP_LIST_PRIVATE: type = "PRIVATE"; break;
-                 case OMP_LIST_FIRSTPRIVATE: type = "FIRSTPRIVATE"; break;
-                 case OMP_LIST_LASTPRIVATE: type = "LASTPRIVATE"; break;
-                 case OMP_LIST_SHARED: type = "SHARED"; break;
-                 case OMP_LIST_COPYIN: type = "COPYIN"; break;
-                 default:
-                   gcc_unreachable ();
-                 }
-               fprintf (dumpfile, " %s(", type);
-             }
-           show_namelist (omp_clauses->lists[list_type]);
+           fprintf (dumpfile, " %s(", type);
+           show_omp_namelist (list_type, omp_clauses->lists[list_type]);
            fputc (')', dumpfile);
          }
+      if (omp_clauses->safelen_expr)
+       {
+         fputs (" SAFELEN(", dumpfile);
+         show_expr (omp_clauses->safelen_expr);
+         fputc (')', dumpfile);
+       }
+      if (omp_clauses->simdlen_expr)
+       {
+         fputs (" SIMDLEN(", dumpfile);
+         show_expr (omp_clauses->simdlen_expr);
+         fputc (')', dumpfile);
+       }
+      if (omp_clauses->inbranch)
+       fputs (" INBRANCH", dumpfile);
+      if (omp_clauses->notinbranch)
+       fputs (" NOTINBRANCH", dumpfile);
+      if (omp_clauses->proc_bind != OMP_PROC_BIND_UNKNOWN)
+       {
+         const char *type;
+         switch (omp_clauses->proc_bind)
+           {
+           case OMP_PROC_BIND_MASTER: type = "MASTER"; break;
+           case OMP_PROC_BIND_SPREAD: type = "SPREAD"; break;
+           case OMP_PROC_BIND_CLOSE: type = "CLOSE"; break;
+           default:
+             gcc_unreachable ();
+           }
+         fprintf (dumpfile, " PROC_BIND(%s)", type);
+       }
+      if (omp_clauses->num_teams)
+       {
+         fputs (" NUM_TEAMS(", dumpfile);
+         show_expr (omp_clauses->num_teams);
+         fputc (')', dumpfile);
+       }
+      if (omp_clauses->device)
+       {
+         fputs (" DEVICE(", dumpfile);
+         show_expr (omp_clauses->device);
+         fputc (')', dumpfile);
+       }
+      if (omp_clauses->thread_limit)
+       {
+         fputs (" THREAD_LIMIT(", dumpfile);
+         show_expr (omp_clauses->thread_limit);
+         fputc (')', dumpfile);
+       }
+      if (omp_clauses->dist_sched_kind != OMP_SCHED_NONE)
+       {
+         fprintf (dumpfile, " DIST_SCHEDULE (static");
+         if (omp_clauses->dist_chunk_size)
+           {
+             fputc (',', dumpfile);
+             show_expr (omp_clauses->dist_chunk_size);
+           }
+         fputc (')', dumpfile);
+       }
     }
   fputc ('\n', dumpfile);
   if (c->op == EXEC_OMP_SECTIONS || c->op == EXEC_OMP_PARALLEL_SECTIONS)
@@ -1214,6 +1329,7 @@ show_omp_node (int level, gfc_code *c)
     show_code (level + 1, c->block->next);
   if (c->op == EXEC_OMP_ATOMIC)
     return;
+  fputc ('\n', dumpfile);
   code_indent (level, 0);
   fprintf (dumpfile, "!$OMP END %s", name);
   if (omp_clauses != NULL)
@@ -1221,7 +1337,8 @@ show_omp_node (int level, gfc_code *c)
       if (omp_clauses->lists[OMP_LIST_COPYPRIVATE])
        {
          fputs (" COPYPRIVATE(", dumpfile);
-         show_namelist (omp_clauses->lists[OMP_LIST_COPYPRIVATE]);
+         show_omp_namelist (OMP_LIST_COPYPRIVATE,
+                            omp_clauses->lists[OMP_LIST_COPYPRIVATE]);
          fputc (')', dumpfile);
        }
       else if (omp_clauses->nowait)
@@ -2195,19 +2312,25 @@ show_code_node (int level, gfc_code *c)
       break;
 
     case EXEC_OMP_ATOMIC:
+    case EXEC_OMP_CANCEL:
+    case EXEC_OMP_CANCELLATION_POINT:
     case EXEC_OMP_BARRIER:
     case EXEC_OMP_CRITICAL:
     case EXEC_OMP_FLUSH:
     case EXEC_OMP_DO:
+    case EXEC_OMP_DO_SIMD:
     case EXEC_OMP_MASTER:
     case EXEC_OMP_ORDERED:
     case EXEC_OMP_PARALLEL:
     case EXEC_OMP_PARALLEL_DO:
+    case EXEC_OMP_PARALLEL_DO_SIMD:
     case EXEC_OMP_PARALLEL_SECTIONS:
     case EXEC_OMP_PARALLEL_WORKSHARE:
     case EXEC_OMP_SECTIONS:
+    case EXEC_OMP_SIMD:
     case EXEC_OMP_SINGLE:
     case EXEC_OMP_TASK:
+    case EXEC_OMP_TASKGROUP:
     case EXEC_OMP_TASKWAIT:
     case EXEC_OMP_TASKYIELD:
     case EXEC_OMP_WORKSHARE:
index e25e92a..12d3236 100644 (file)
@@ -87,6 +87,24 @@ static alias_set_type gfc_get_alias_set (tree);
 static void gfc_init_ts (void);
 static tree gfc_builtin_function (tree);
 
+/* Handle an "omp declare target" attribute; arguments as in
+   struct attribute_spec.handler.  */
+static tree
+gfc_handle_omp_declare_target_attribute (tree *, tree, tree, int, bool *)
+{
+  return NULL_TREE;
+}
+
+/* Table of valid Fortran attributes.  */
+static const struct attribute_spec gfc_attribute_table[] =
+{
+  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
+       affects_type_identity } */
+  { "omp declare target", 0, 0, true,  false, false,
+    gfc_handle_omp_declare_target_attribute, false },
+  { NULL,                0, 0, false, false, false, NULL, false }
+};
+
 #undef LANG_HOOKS_NAME
 #undef LANG_HOOKS_INIT
 #undef LANG_HOOKS_FINISH
@@ -108,7 +126,9 @@ static tree gfc_builtin_function (tree);
 #undef LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR
 #undef LANG_HOOKS_OMP_CLAUSE_COPY_CTOR
 #undef LANG_HOOKS_OMP_CLAUSE_ASSIGN_OP
+#undef LANG_HOOKS_OMP_CLAUSE_LINEAR_CTOR
 #undef LANG_HOOKS_OMP_CLAUSE_DTOR
+#undef LANG_HOOKS_OMP_FINISH_CLAUSE
 #undef LANG_HOOKS_OMP_DISREGARD_VALUE_EXPR
 #undef LANG_HOOKS_OMP_PRIVATE_DEBUG_CLAUSE
 #undef LANG_HOOKS_OMP_PRIVATE_OUTER_REF
@@ -116,6 +136,7 @@ static tree gfc_builtin_function (tree);
 #undef LANG_HOOKS_BUILTIN_FUNCTION
 #undef LANG_HOOKS_BUILTIN_FUNCTION
 #undef LANG_HOOKS_GET_ARRAY_DESCR_INFO
+#undef LANG_HOOKS_ATTRIBUTE_TABLE
 
 /* Define lang hooks.  */
 #define LANG_HOOKS_NAME                 "GNU Fortran"
@@ -138,14 +159,17 @@ static tree gfc_builtin_function (tree);
 #define LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR     gfc_omp_clause_default_ctor
 #define LANG_HOOKS_OMP_CLAUSE_COPY_CTOR                gfc_omp_clause_copy_ctor
 #define LANG_HOOKS_OMP_CLAUSE_ASSIGN_OP                gfc_omp_clause_assign_op
+#define LANG_HOOKS_OMP_CLAUSE_LINEAR_CTOR      gfc_omp_clause_linear_ctor
 #define LANG_HOOKS_OMP_CLAUSE_DTOR             gfc_omp_clause_dtor
+#define LANG_HOOKS_OMP_FINISH_CLAUSE           gfc_omp_finish_clause
 #define LANG_HOOKS_OMP_DISREGARD_VALUE_EXPR    gfc_omp_disregard_value_expr
 #define LANG_HOOKS_OMP_PRIVATE_DEBUG_CLAUSE    gfc_omp_private_debug_clause
 #define LANG_HOOKS_OMP_PRIVATE_OUTER_REF       gfc_omp_private_outer_ref
 #define LANG_HOOKS_OMP_FIRSTPRIVATIZE_TYPE_SIZES \
   gfc_omp_firstprivatize_type_sizes
-#define LANG_HOOKS_BUILTIN_FUNCTION          gfc_builtin_function
-#define LANG_HOOKS_GET_ARRAY_DESCR_INFO             gfc_get_array_descr_info
+#define LANG_HOOKS_BUILTIN_FUNCTION    gfc_builtin_function
+#define LANG_HOOKS_GET_ARRAY_DESCR_INFO        gfc_get_array_descr_info
+#define LANG_HOOKS_ATTRIBUTE_TABLE     gfc_attribute_table
 
 struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
 
@@ -1038,7 +1062,9 @@ gfc_init_builtin_functions (void)
 #include "../sync-builtins.def"
 #undef DEF_SYNC_BUILTIN
 
-  if (gfc_option.gfc_flag_openmp || flag_tree_parallelize_loops)
+  if (gfc_option.gfc_flag_openmp
+      || gfc_option.gfc_flag_openmp_simd
+      || flag_tree_parallelize_loops)
     {
 #undef DEF_GOMP_BUILTIN
 #define DEF_GOMP_BUILTIN(code, name, type, attr) \
@@ -1052,6 +1078,13 @@ gfc_init_builtin_functions (void)
                      BUILT_IN_TRAP, NULL, ATTR_NOTHROW_LEAF_LIST);
   TREE_THIS_VOLATILE (builtin_decl_explicit (BUILT_IN_TRAP)) = 1;
 
+  ftype = build_varargs_function_type_list (ptr_type_node, const_ptr_type_node,
+                                           size_type_node, NULL_TREE);
+  gfc_define_builtin ("__builtin_assume_aligned", ftype,
+                     BUILT_IN_ASSUME_ALIGNED,
+                     "__builtin_assume_aligned",
+                     ATTR_CONST_NOTHROW_LEAF_LIST);
+
   gfc_define_builtin ("__emutls_get_address",
                      builtin_types[BT_FN_PTR_PTR],
                      BUILT_IN_EMUTLS_GET_ADDRESS,
index 6c67e66..4646cc3 100644 (file)
@@ -88,6 +88,10 @@ static int doloop_size, doloop_level;
 
 struct my_struct *evec;
 
+/* Keep track of association lists.  */
+
+static bool in_assoc_list;
+
 /* Entry point - run all passes for a namespace. */
 
 void
@@ -672,10 +676,10 @@ dummy_expr_callback (gfc_expr **e ATTRIBUTE_UNUSED, int *walk_subtrees,
 
 /* Dummy function for code callback, for use when we really
    don't want to do anything.  */
-static int
-dummy_code_callback (gfc_code **e ATTRIBUTE_UNUSED,
-                    int *walk_subtrees ATTRIBUTE_UNUSED,
-                    void *data ATTRIBUTE_UNUSED)
+int
+gfc_dummy_code_callback (gfc_code **e ATTRIBUTE_UNUSED,
+                        int *walk_subtrees ATTRIBUTE_UNUSED,
+                        void *data ATTRIBUTE_UNUSED)
 {
   return 0;
 }
@@ -820,6 +824,7 @@ optimize_namespace (gfc_namespace *ns)
   current_ns = ns;
   forall_level = 0;
   iterator_level = 0;
+  in_assoc_list = false;
   in_omp_workshare = false;
 
   gfc_code_walker (&ns->code, convert_do_while, dummy_expr_callback, NULL);
@@ -839,7 +844,8 @@ static void
 optimize_reduction (gfc_namespace *ns)
 {
   current_ns = ns;
-  gfc_code_walker (&ns->code, dummy_code_callback, callback_reduction, NULL);
+  gfc_code_walker (&ns->code, gfc_dummy_code_callback,
+                  callback_reduction, NULL);
 
 /* BLOCKs are handled in the expression walker below.  */
   for (ns = ns->contained; ns; ns = ns->sibling)
@@ -1054,6 +1060,11 @@ combine_array_constructor (gfc_expr *e)
   if (e->rank != 1)
     return false;
 
+  /* Don't try to combine association lists, this makes no sense
+     and leads to an ICE.  */
+  if (in_assoc_list)
+    return false;
+
   op1 = e->value.op.op1;
   op2 = e->value.op.op2;
 
@@ -1940,8 +1951,17 @@ gfc_code_walker (gfc_code **c, walk_code_fn_t codefn, walk_expr_fn_t exprfn,
 
            case EXEC_BLOCK:
              WALK_SUBCODE (co->ext.block.ns->code);
-             for (alist = co->ext.block.assoc; alist; alist = alist->next)
-               WALK_SUBEXPR (alist->target);
+             if (co->ext.block.assoc)
+               {
+                 bool saved_in_assoc_list = in_assoc_list;
+
+                 in_assoc_list = true;
+                 for (alist = co->ext.block.assoc; alist; alist = alist->next)
+                   WALK_SUBEXPR (alist->target);
+
+                 in_assoc_list = saved_in_assoc_list;
+               }
+
              break;
 
            case EXEC_DO:
@@ -2112,6 +2132,7 @@ gfc_code_walker (gfc_code **c, walk_code_fn_t codefn, walk_expr_fn_t exprfn,
 
            case EXEC_OMP_PARALLEL:
            case EXEC_OMP_PARALLEL_DO:
+           case EXEC_OMP_PARALLEL_DO_SIMD:
            case EXEC_OMP_PARALLEL_SECTIONS:
 
              in_omp_workshare = false;
@@ -2126,12 +2147,31 @@ gfc_code_walker (gfc_code **c, walk_code_fn_t codefn, walk_expr_fn_t exprfn,
              in_omp_workshare = true;
 
              /* Fall through  */
-             
+
+           case EXEC_OMP_DISTRIBUTE:
+           case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
+           case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
+           case EXEC_OMP_DISTRIBUTE_SIMD:
            case EXEC_OMP_DO:
+           case EXEC_OMP_DO_SIMD:
            case EXEC_OMP_SECTIONS:
            case EXEC_OMP_SINGLE:
            case EXEC_OMP_END_SINGLE:
+           case EXEC_OMP_SIMD:
+           case EXEC_OMP_TARGET:
+           case EXEC_OMP_TARGET_DATA:
+           case EXEC_OMP_TARGET_TEAMS:
+           case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
+           case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
+           case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+           case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
+           case EXEC_OMP_TARGET_UPDATE:
            case EXEC_OMP_TASK:
+           case EXEC_OMP_TEAMS:
+           case EXEC_OMP_TEAMS_DISTRIBUTE:
+           case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
+           case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+           case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
 
              /* Come to this label only from the
                 EXEC_OMP_PARALLEL_* cases above.  */
@@ -2140,10 +2180,27 @@ gfc_code_walker (gfc_code **c, walk_code_fn_t codefn, walk_expr_fn_t exprfn,
 
              if (co->ext.omp_clauses)
                {
+                 gfc_omp_namelist *n;
+                 static int list_types[]
+                   = { OMP_LIST_ALIGNED, OMP_LIST_LINEAR, OMP_LIST_DEPEND,
+                       OMP_LIST_MAP, OMP_LIST_TO, OMP_LIST_FROM };
+                 size_t idx;
                  WALK_SUBEXPR (co->ext.omp_clauses->if_expr);
                  WALK_SUBEXPR (co->ext.omp_clauses->final_expr);
                  WALK_SUBEXPR (co->ext.omp_clauses->num_threads);
                  WALK_SUBEXPR (co->ext.omp_clauses->chunk_size);
+                 WALK_SUBEXPR (co->ext.omp_clauses->safelen_expr);
+                 WALK_SUBEXPR (co->ext.omp_clauses->simdlen_expr);
+                 WALK_SUBEXPR (co->ext.omp_clauses->num_teams);
+                 WALK_SUBEXPR (co->ext.omp_clauses->device);
+                 WALK_SUBEXPR (co->ext.omp_clauses->thread_limit);
+                 WALK_SUBEXPR (co->ext.omp_clauses->dist_chunk_size);
+                 for (idx = 0;
+                      idx < sizeof (list_types) / sizeof (list_types[0]);
+                      idx++)
+                   for (n = co->ext.omp_clauses->lists[list_types[idx]];
+                        n; n = n->next)
+                     WALK_SUBEXPR (n->expr);
                }
              break;
            default:
index 14c202d..6b88aec 100644 (file)
@@ -211,8 +211,30 @@ typedef enum
   ST_OMP_PARALLEL, ST_OMP_PARALLEL_DO, ST_OMP_PARALLEL_SECTIONS,
   ST_OMP_PARALLEL_WORKSHARE, ST_OMP_SECTIONS, ST_OMP_SECTION, ST_OMP_SINGLE,
   ST_OMP_THREADPRIVATE, ST_OMP_WORKSHARE, ST_OMP_TASK, ST_OMP_END_TASK,
-  ST_OMP_TASKWAIT, ST_OMP_TASKYIELD, ST_PROCEDURE, ST_GENERIC, ST_CRITICAL,
-  ST_END_CRITICAL, ST_GET_FCN_CHARACTERISTICS, ST_LOCK, ST_UNLOCK, ST_NONE
+  ST_OMP_TASKWAIT, ST_OMP_TASKYIELD, ST_OMP_CANCEL, ST_OMP_CANCELLATION_POINT,
+  ST_OMP_TASKGROUP, ST_OMP_END_TASKGROUP, ST_OMP_SIMD, ST_OMP_END_SIMD,
+  ST_OMP_DO_SIMD, ST_OMP_END_DO_SIMD, ST_OMP_PARALLEL_DO_SIMD,
+  ST_OMP_END_PARALLEL_DO_SIMD, ST_OMP_DECLARE_SIMD, ST_OMP_DECLARE_REDUCTION,
+  ST_OMP_TARGET, ST_OMP_END_TARGET, ST_OMP_TARGET_DATA, ST_OMP_END_TARGET_DATA,
+  ST_OMP_TARGET_UPDATE, ST_OMP_DECLARE_TARGET,
+  ST_OMP_TEAMS, ST_OMP_END_TEAMS, ST_OMP_DISTRIBUTE, ST_OMP_END_DISTRIBUTE,
+  ST_OMP_DISTRIBUTE_SIMD, ST_OMP_END_DISTRIBUTE_SIMD,
+  ST_OMP_DISTRIBUTE_PARALLEL_DO, ST_OMP_END_DISTRIBUTE_PARALLEL_DO,
+  ST_OMP_DISTRIBUTE_PARALLEL_DO_SIMD, ST_OMP_END_DISTRIBUTE_PARALLEL_DO_SIMD,
+  ST_OMP_TARGET_TEAMS, ST_OMP_END_TARGET_TEAMS, ST_OMP_TEAMS_DISTRIBUTE,
+  ST_OMP_END_TEAMS_DISTRIBUTE, ST_OMP_TEAMS_DISTRIBUTE_SIMD,
+  ST_OMP_END_TEAMS_DISTRIBUTE_SIMD, ST_OMP_TARGET_TEAMS_DISTRIBUTE,
+  ST_OMP_END_TARGET_TEAMS_DISTRIBUTE, ST_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD,
+  ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_SIMD, ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO,
+  ST_OMP_END_TEAMS_DISTRIBUTE_PARALLEL_DO,
+  ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO,
+  ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO,
+  ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD,
+  ST_OMP_END_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD,
+  ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD,
+  ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD,
+  ST_PROCEDURE, ST_GENERIC, ST_CRITICAL, ST_END_CRITICAL,
+  ST_GET_FCN_CHARACTERISTICS, ST_LOCK, ST_UNLOCK, ST_NONE
 }
 gfc_statement;
 
@@ -808,6 +830,13 @@ typedef struct
      variable for SELECT_TYPE or ASSOCIATE.  */
   unsigned select_type_temporary:1, associate_var:1;
 
+  /* This is omp_{out,in,priv,orig} artificial variable in
+     !$OMP DECLARE REDUCTION.  */
+  unsigned omp_udr_artificial_var:1;
+
+  /* Mentioned in OMP DECLARE TARGET.  */
+  unsigned omp_declare_target:1;
+
   /* Attributes set by compiler extensions (!GCC$ ATTRIBUTES).  */
   unsigned ext_attr:EXT_ATTR_NUM;
 
@@ -1028,6 +1057,62 @@ gfc_namelist;
 
 #define gfc_get_namelist() XCNEW (gfc_namelist)
 
+typedef enum
+{
+  OMP_REDUCTION_NONE = -1,
+  OMP_REDUCTION_PLUS = INTRINSIC_PLUS,
+  OMP_REDUCTION_MINUS = INTRINSIC_MINUS,
+  OMP_REDUCTION_TIMES = INTRINSIC_TIMES,
+  OMP_REDUCTION_AND = INTRINSIC_AND,
+  OMP_REDUCTION_OR = INTRINSIC_OR,
+  OMP_REDUCTION_EQV = INTRINSIC_EQV,
+  OMP_REDUCTION_NEQV = INTRINSIC_NEQV,
+  OMP_REDUCTION_MAX = GFC_INTRINSIC_END,
+  OMP_REDUCTION_MIN,
+  OMP_REDUCTION_IAND,
+  OMP_REDUCTION_IOR,
+  OMP_REDUCTION_IEOR,
+  OMP_REDUCTION_USER
+}
+gfc_omp_reduction_op;
+
+typedef enum
+{
+  OMP_DEPEND_IN,
+  OMP_DEPEND_OUT,
+  OMP_DEPEND_INOUT
+}
+gfc_omp_depend_op;
+
+typedef enum
+{
+  OMP_MAP_ALLOC,
+  OMP_MAP_TO,
+  OMP_MAP_FROM,
+  OMP_MAP_TOFROM
+}
+gfc_omp_map_op;
+
+/* For use in OpenMP clauses in case we need extra information
+   (aligned clause alignment, linear clause step, etc.).  */
+
+typedef struct gfc_omp_namelist
+{
+  struct gfc_symbol *sym;
+  struct gfc_expr *expr;
+  union
+    {
+      gfc_omp_reduction_op reduction_op;
+      gfc_omp_depend_op depend_op;
+      gfc_omp_map_op map_op;
+    } u;
+  struct gfc_omp_namelist_udr *udr;
+  struct gfc_omp_namelist *next;
+}
+gfc_omp_namelist;
+
+#define gfc_get_omp_namelist() XCNEW (gfc_omp_namelist)
+
 enum
 {
   OMP_LIST_PRIVATE,
@@ -1036,20 +1121,14 @@ enum
   OMP_LIST_COPYPRIVATE,
   OMP_LIST_SHARED,
   OMP_LIST_COPYIN,
-  OMP_LIST_PLUS,
-  OMP_LIST_REDUCTION_FIRST = OMP_LIST_PLUS,
-  OMP_LIST_MULT,
-  OMP_LIST_SUB,
-  OMP_LIST_AND,
-  OMP_LIST_OR,
-  OMP_LIST_EQV,
-  OMP_LIST_NEQV,
-  OMP_LIST_MAX,
-  OMP_LIST_MIN,
-  OMP_LIST_IAND,
-  OMP_LIST_IOR,
-  OMP_LIST_IEOR,
-  OMP_LIST_REDUCTION_LAST = OMP_LIST_IEOR,
+  OMP_LIST_UNIFORM,
+  OMP_LIST_ALIGNED,
+  OMP_LIST_LINEAR,
+  OMP_LIST_DEPEND,
+  OMP_LIST_MAP,
+  OMP_LIST_TO,
+  OMP_LIST_FROM,
+  OMP_LIST_REDUCTION,
   OMP_LIST_NUM
 };
 
@@ -1075,23 +1154,93 @@ enum gfc_omp_default_sharing
   OMP_DEFAULT_FIRSTPRIVATE
 };
 
+enum gfc_omp_proc_bind_kind
+{
+  OMP_PROC_BIND_UNKNOWN,
+  OMP_PROC_BIND_MASTER,
+  OMP_PROC_BIND_SPREAD,
+  OMP_PROC_BIND_CLOSE
+};
+
+enum gfc_omp_cancel_kind
+{
+  OMP_CANCEL_UNKNOWN,
+  OMP_CANCEL_PARALLEL,
+  OMP_CANCEL_SECTIONS,
+  OMP_CANCEL_DO,
+  OMP_CANCEL_TASKGROUP
+};
+
 typedef struct gfc_omp_clauses
 {
   struct gfc_expr *if_expr;
   struct gfc_expr *final_expr;
   struct gfc_expr *num_threads;
-  gfc_namelist *lists[OMP_LIST_NUM];
+  gfc_omp_namelist *lists[OMP_LIST_NUM];
   enum gfc_omp_sched_kind sched_kind;
   struct gfc_expr *chunk_size;
   enum gfc_omp_default_sharing default_sharing;
   int collapse;
   bool nowait, ordered, untied, mergeable;
+  bool inbranch, notinbranch;
+  enum gfc_omp_cancel_kind cancel;
+  enum gfc_omp_proc_bind_kind proc_bind;
+  struct gfc_expr *safelen_expr;
+  struct gfc_expr *simdlen_expr;
+  struct gfc_expr *num_teams;
+  struct gfc_expr *device;
+  struct gfc_expr *thread_limit;
+  enum gfc_omp_sched_kind dist_sched_kind;
+  struct gfc_expr *dist_chunk_size;
 }
 gfc_omp_clauses;
 
 #define gfc_get_omp_clauses() XCNEW (gfc_omp_clauses)
 
 
+/* Node in the linked list used for storing !$omp declare simd constructs.  */
+
+typedef struct gfc_omp_declare_simd
+{
+  struct gfc_omp_declare_simd *next;
+  locus where; /* Where the !$omp declare simd construct occurred.  */
+
+  gfc_symbol *proc_name;
+
+  gfc_omp_clauses *clauses;
+}
+gfc_omp_declare_simd;
+#define gfc_get_omp_declare_simd() XCNEW (gfc_omp_declare_simd)
+
+typedef struct gfc_omp_udr
+{
+  struct gfc_omp_udr *next;
+  locus where; /* Where the !$omp declare reduction construct occurred.  */
+
+  const char *name;
+  gfc_typespec ts;
+  gfc_omp_reduction_op rop;
+
+  struct gfc_symbol *omp_out;
+  struct gfc_symbol *omp_in;
+  struct gfc_namespace *combiner_ns;
+
+  struct gfc_symbol *omp_priv;
+  struct gfc_symbol *omp_orig;
+  struct gfc_namespace *initializer_ns;
+}
+gfc_omp_udr;
+#define gfc_get_omp_udr() XCNEW (gfc_omp_udr)
+
+typedef struct gfc_omp_namelist_udr
+{
+  struct gfc_omp_udr *udr;
+  struct gfc_code *combiner;
+  struct gfc_code *initializer;
+}
+gfc_omp_namelist_udr;
+#define gfc_get_omp_namelist_udr() XCNEW (gfc_omp_namelist_udr)
+
 /* The gfc_st_label structure is a BBT attached to a namespace that
    records the usage of statement labels within that space.  */
 
@@ -1292,7 +1441,7 @@ struct gfc_undo_change_set
 typedef struct gfc_common_head
 {
   locus where;
-  char use_assoc, saved, threadprivate;
+  char use_assoc, saved, threadprivate, omp_declare_target;
   char name[GFC_MAX_SYMBOL_LEN + 1];
   struct gfc_symbol *head;
   const char* binding_label;
@@ -1368,6 +1517,7 @@ typedef struct gfc_symtree
     gfc_user_op *uop;
     gfc_common_head *common;
     gfc_typebound_proc *tb;
+    gfc_omp_udr *omp_udr;
   }
   n;
 }
@@ -1398,6 +1548,8 @@ typedef struct gfc_namespace
   gfc_symtree *uop_root;
   /* Tree containing all the common blocks.  */
   gfc_symtree *common_root;
+  /* Tree containing all the OpenMP user defined reductions.  */
+  gfc_symtree *omp_udr_root;
 
   /* Tree containing type-bound procedures.  */
   gfc_symtree *tb_sym_root;
@@ -1464,6 +1616,9 @@ typedef struct gfc_namespace
   /* A list of USE statements in this namespace.  */
   gfc_use_list *use_stmts;
 
+  /* Linked list of !$omp declare simd constructs.  */
+  struct gfc_omp_declare_simd *omp_declare_simd;
+
   /* Set to 1 if namespace is a BLOCK DATA program unit.  */
   unsigned is_block_data:1;
 
@@ -1480,6 +1635,9 @@ typedef struct gfc_namespace
   /* Set to 1 if symbols in this namespace should be 'construct entities',
      i.e. for BLOCK local variables.  */
   unsigned construct_entities:1;
+
+  /* Set to 1 for !$OMP DECLARE REDUCTION namespaces.  */
+  unsigned omp_udr_ns:1;
 }
 gfc_namespace;
 
@@ -2111,16 +2269,31 @@ typedef enum
   EXEC_OMP_SECTIONS, EXEC_OMP_SINGLE, EXEC_OMP_WORKSHARE,
   EXEC_OMP_ATOMIC, EXEC_OMP_BARRIER, EXEC_OMP_END_NOWAIT,
   EXEC_OMP_END_SINGLE, EXEC_OMP_TASK, EXEC_OMP_TASKWAIT,
-  EXEC_OMP_TASKYIELD
+  EXEC_OMP_TASKYIELD, EXEC_OMP_CANCEL, EXEC_OMP_CANCELLATION_POINT,
+  EXEC_OMP_TASKGROUP, EXEC_OMP_SIMD, EXEC_OMP_DO_SIMD,
+  EXEC_OMP_PARALLEL_DO_SIMD, EXEC_OMP_TARGET, EXEC_OMP_TARGET_DATA,
+  EXEC_OMP_TEAMS, EXEC_OMP_DISTRIBUTE, EXEC_OMP_DISTRIBUTE_SIMD,
+  EXEC_OMP_DISTRIBUTE_PARALLEL_DO, EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD,
+  EXEC_OMP_TARGET_TEAMS, EXEC_OMP_TEAMS_DISTRIBUTE,
+  EXEC_OMP_TEAMS_DISTRIBUTE_SIMD, EXEC_OMP_TARGET_TEAMS_DISTRIBUTE,
+  EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD,
+  EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO,
+  EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO,
+  EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD,
+  EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD,
+  EXEC_OMP_TARGET_UPDATE
 }
 gfc_exec_op;
 
 typedef enum
 {
-  GFC_OMP_ATOMIC_UPDATE,
-  GFC_OMP_ATOMIC_READ,
-  GFC_OMP_ATOMIC_WRITE,
-  GFC_OMP_ATOMIC_CAPTURE
+  GFC_OMP_ATOMIC_UPDATE = 0,
+  GFC_OMP_ATOMIC_READ = 1,
+  GFC_OMP_ATOMIC_WRITE = 2,
+  GFC_OMP_ATOMIC_CAPTURE = 3,
+  GFC_OMP_ATOMIC_MASK = 3,
+  GFC_OMP_ATOMIC_SEQ_CST = 4,
+  GFC_OMP_ATOMIC_SWAP = 8
 }
 gfc_omp_atomic_op;
 
@@ -2172,7 +2345,7 @@ typedef struct gfc_code
     gfc_entry_list *entry;
     gfc_omp_clauses *omp_clauses;
     const char *omp_name;
-    gfc_namelist *omp_namelist;
+    gfc_omp_namelist *omp_namelist;
     bool omp_bool;
     gfc_omp_atomic_op omp_atomic;
   }
@@ -2573,6 +2746,7 @@ bool gfc_add_protected (symbol_attribute *, const char *, locus *);
 bool gfc_add_result (symbol_attribute *, const char *, locus *);
 bool gfc_add_save (symbol_attribute *, save_state, const char *, locus *);
 bool gfc_add_threadprivate (symbol_attribute *, const char *, locus *);
+bool gfc_add_omp_declare_target (symbol_attribute *, const char *, locus *);
 bool gfc_add_saved_common (symbol_attribute *, locus *);
 bool gfc_add_target (symbol_attribute *, locus *);
 bool gfc_add_dummy (symbol_attribute *, const char *, locus *);
@@ -2728,6 +2902,7 @@ void gfc_free_iterator (gfc_iterator *, int);
 void gfc_free_forall_iterator (gfc_forall_iterator *);
 void gfc_free_alloc_list (gfc_alloc *);
 void gfc_free_namelist (gfc_namelist *);
+void gfc_free_omp_namelist (gfc_omp_namelist *);
 void gfc_free_equiv (gfc_equiv *);
 void gfc_free_equiv_until (gfc_equiv *, gfc_equiv *);
 void gfc_free_data (gfc_data *);
@@ -2739,10 +2914,16 @@ gfc_expr *gfc_get_parentheses (gfc_expr *);
 /* openmp.c */
 struct gfc_omp_saved_state { void *ptrs[2]; int ints[1]; };
 void gfc_free_omp_clauses (gfc_omp_clauses *);
+void gfc_free_omp_declare_simd (gfc_omp_declare_simd *);
+void gfc_free_omp_declare_simd_list (gfc_omp_declare_simd *);
+void gfc_free_omp_udr (gfc_omp_udr *);
+gfc_omp_udr *gfc_omp_udr_find (gfc_symtree *, gfc_typespec *);
 void gfc_resolve_omp_directive (gfc_code *, gfc_namespace *);
 void gfc_resolve_do_iterator (gfc_code *, gfc_symbol *);
 void gfc_resolve_omp_parallel_blocks (gfc_code *, gfc_namespace *);
 void gfc_resolve_omp_do_blocks (gfc_code *, gfc_namespace *);
+void gfc_resolve_omp_declare_simd (gfc_namespace *);
+void gfc_resolve_omp_udrs (gfc_symtree *);
 void gfc_omp_save_and_clear_state (struct gfc_omp_saved_state *);
 void gfc_omp_restore_state (struct gfc_omp_saved_state *);
 
@@ -2833,6 +3014,7 @@ void gfc_free_association_list (gfc_association_list *);
 /* resolve.c */
 bool gfc_resolve_expr (gfc_expr *);
 void gfc_resolve (gfc_namespace *);
+void gfc_resolve_code (gfc_code *, gfc_namespace *);
 void gfc_resolve_blocks (gfc_code *, gfc_namespace *);
 int gfc_impure_variable (gfc_symbol *);
 int gfc_pure (gfc_symbol *);
@@ -3019,6 +3201,7 @@ void gfc_run_passes (gfc_namespace *);
 typedef int (*walk_code_fn_t) (gfc_code **, int *, void *);
 typedef int (*walk_expr_fn_t) (gfc_expr **, int *, void *);
 
+int gfc_dummy_code_callback (gfc_code **, int *, void *);
 int gfc_expr_walker (gfc_expr **, walk_expr_fn_t, void *);
 int gfc_code_walker (gfc_code **, walk_code_fn_t, walk_expr_fn_t, void *);
 
index b894d0d..bc49ce4 100644 (file)
@@ -344,7 +344,7 @@ in the *note Fortran 2003 status::, *note Fortran 2008 status:: and
 *note TS 29113 status:: sections of the documentation.
 
    Additionally, the GNU Fortran compilers supports the OpenMP
-specification (version 3.1,
+specification (version 4.0,
 <http://openmp.org/wp/openmp-specifications/>).
 
 \1f
@@ -2851,7 +2851,7 @@ directives, library routines, and environment variables that influence
 run-time behavior.
 
    GNU Fortran strives to be compatible to the OpenMP Application
-Program Interface v3.1 (http://www.openmp.org/mp-documents/spec31.pdf).
+Program Interface v4.0 (http://openmp.org/wp/openmp-specifications/).
 
    To enable the processing of the OpenMP directive '!$omp' in free-form
 source code; the 'c$omp', '*$omp' and '!$omp' directives in fixed form;
@@ -6874,10 +6874,8 @@ File: gfortran.info,  Node: CTIME,  Next: DATE_AND_TIME,  Prev: CSHIFT,  Up: Int
 
 _Description_:
      'CTIME' converts a system time value, such as returned by 'TIME8',
-     to a string.  Unless the application has called 'setlocale', the
-     output will be in the default locale, of length 24 and of the form
-     'Sat Aug 19 18:13:14 1995'.  In other locales, a longer string may
-     result.
+     to a string.  The output will be of the form 'Sat Aug 19 18:13:14
+     1995'.
 
      This intrinsic is provided in both subroutine and function forms;
      however, only one form can be used in any given program unit.
@@ -15228,8 +15226,8 @@ constants:
 
    'OMP_LIB' provides the scalar default-integer named constant
 'openmp_version' with a value of the form YYYYMM, where 'yyyy' is the
-year and MM the month of the OpenMP version; for OpenMP v3.1 the value
-is '201107' and for OpenMP v4.0 the value is '201307'.
+year and MM the month of the OpenMP version; for OpenMP v4.0 the value
+is '201307'.
 
    The following scalar integer named constants of the kind
 'omp_sched_kind':
@@ -18148,302 +18146,302 @@ Node: Hollerith constants support\7f114849
 Node: Cray pointers\7f116621
 Node: CONVERT specifier\7f122068
 Node: OpenMP\7f124063
-Node: Argument list functions\7f126314
-Node: Extensions not implemented in GNU Fortran\7f127919
-Node: STRUCTURE and RECORD\7f128868
-Node: ENCODE and DECODE statements\7f131305
-Node: Variable FORMAT expressions\7f132665
-Node: Alternate complex function syntax\7f133770
-Node: Volatile COMMON blocks\7f134320
-Node: Mixed-Language Programming\7f134797
-Node: Interoperability with C\7f135378
-Node: Intrinsic Types\7f136712
-Node: Derived Types and struct\7f137708
-Node: Interoperable Global Variables\7f139066
-Node: Interoperable Subroutines and Functions\7f140341
-Node: Working with Pointers\7f144135
-Node: Further Interoperability of Fortran with C\7f148611
-Node: GNU Fortran Compiler Directives\7f151965
-Node: Non-Fortran Main Program\7f155217
-Node: _gfortran_set_args\7f157405
-Node: _gfortran_set_options\7f158343
-Node: _gfortran_set_convert\7f161743
-Node: _gfortran_set_record_marker\7f162611
-Node: _gfortran_set_fpe\7f163421
-Node: _gfortran_set_max_subrecord_length\7f164619
-Node: Naming and argument-passing conventions\7f165542
-Node: Naming conventions\7f166261
-Node: Argument passing conventions\7f167733
-Node: Intrinsic Procedures\7f172227
-Node: Introduction to Intrinsics\7f187713
-Node: ABORT\7f190063
-Node: ABS\7f190808
-Node: ACCESS\7f192410
-Node: ACHAR\7f194340
-Node: ACOS\7f195544
-Node: ACOSH\7f196798
-Node: ADJUSTL\7f197793
-Node: ADJUSTR\7f198735
-Node: AIMAG\7f199683
-Node: AINT\7f201055
-Node: ALARM\7f202661
-Node: ALL\7f204293
-Node: ALLOCATED\7f206217
-Node: AND\7f207356
-Node: ANINT\7f208655
-Node: ANY\7f210152
-Node: ASIN\7f212078
-Node: ASINH\7f213321
-Node: ASSOCIATED\7f214326
-Node: ATAN\7f217337
-Node: ATAN2\7f218755
-Node: ATANH\7f220547
-Node: ATOMIC_DEFINE\7f221555
-Node: ATOMIC_REF\7f222631
-Node: BACKTRACE\7f223893
-Node: BESSEL_J0\7f224473
-Node: BESSEL_J1\7f225530
-Node: BESSEL_JN\7f226591
-Node: BESSEL_Y0\7f228416
-Node: BESSEL_Y1\7f229426
-Node: BESSEL_YN\7f230436
-Node: BGE\7f232267
-Node: BGT\7f232959
-Node: BIT_SIZE\7f233609
-Node: BLE\7f234431
-Node: BLT\7f235113
-Node: BTEST\7f235751
-Node: C_ASSOCIATED\7f236636
-Node: C_F_POINTER\7f237847
-Node: C_F_PROCPOINTER\7f239282
-Node: C_FUNLOC\7f240789
-Node: C_LOC\7f242160
-Node: C_SIZEOF\7f243439
-Node: CEILING\7f244852
-Node: CHAR\7f245860
-Node: CHDIR\7f247072
-Node: CHMOD\7f248246
-Node: CMPLX\7f250161
-Node: COMMAND_ARGUMENT_COUNT\7f251614
-Node: COMPILER_OPTIONS\7f252530
-Node: COMPILER_VERSION\7f253556
-Node: COMPLEX\7f254520
-Node: CONJG\7f255659
-Node: COS\7f256715
-Node: COSH\7f258139
-Node: COUNT\7f259321
-Node: CPU_TIME\7f261344
-Node: CSHIFT\7f262701
-Node: CTIME\7f264361
-Node: DATE_AND_TIME\7f266007
-Node: DBLE\7f268487
-Node: DCMPLX\7f269282
-Node: DIGITS\7f270464
-Node: DIM\7f271431
-Node: DOT_PRODUCT\7f272712
-Node: DPROD\7f274355
-Node: DREAL\7f275282
-Node: DSHIFTL\7f275948
-Node: DSHIFTR\7f277281
-Node: DTIME\7f278615
-Node: EOSHIFT\7f281430
-Node: EPSILON\7f283503
-Node: ERF\7f284230
-Node: ERFC\7f285011
-Node: ERFC_SCALED\7f285821
-Node: ETIME\7f286514
-Node: EXECUTE_COMMAND_LINE\7f288762
-Node: EXIT\7f291349
-Node: EXP\7f292225
-Node: EXPONENT\7f293476
-Node: EXTENDS_TYPE_OF\7f294238
-Node: FDATE\7f295094
-Node: FGET\7f296567
-Node: FGETC\7f298392
-Node: FLOOR\7f300198
-Node: FLUSH\7f301185
-Node: FNUM\7f303062
-Node: FPUT\7f303785
-Node: FPUTC\7f305417
-Node: FRACTION\7f307196
-Node: FREE\7f308098
-Node: FSEEK\7f308939
-Node: FSTAT\7f311243
-Node: FTELL\7f312328
-Node: GAMMA\7f313308
-Node: GERROR\7f314360
-Node: GETARG\7f315080
-Node: GET_COMMAND\7f316851
-Node: GET_COMMAND_ARGUMENT\7f318223
-Node: GETCWD\7f320271
-Node: GETENV\7f321251
-Node: GET_ENVIRONMENT_VARIABLE\7f322683
-Node: GETGID\7f324846
-Node: GETLOG\7f325383
-Node: GETPID\7f326245
-Node: GETUID\7f326975
-Node: GMTIME\7f327491
-Node: HOSTNM\7f328975
-Node: HUGE\7f329896
-Node: HYPOT\7f330618
-Node: IACHAR\7f331444
-Node: IALL\7f332612
-Node: IAND\7f334097
-Node: IANY\7f335084
-Node: IARGC\7f336578
-Node: IBCLR\7f337599
-Node: IBITS\7f338261
-Node: IBSET\7f339179
-Node: ICHAR\7f339836
-Node: IDATE\7f342006
-Node: IEOR\7f343036
-Node: IERRNO\7f343916
-Node: IMAGE_INDEX\7f344465
-Node: INDEX intrinsic\7f345493
-Node: INT\7f347019
-Node: INT2\7f348747
-Node: INT8\7f349515
-Node: IOR\7f350230
-Node: IPARITY\7f351086
-Node: IRAND\7f352618
-Node: IS_IOSTAT_END\7f353977
-Node: IS_IOSTAT_EOR\7f355076
-Node: ISATTY\7f356205
-Node: ISHFT\7f356988
-Node: ISHFTC\7f357971
-Node: ISNAN\7f359192
-Node: ITIME\7f359959
-Node: KILL\7f360987
-Node: KIND\7f361896
-Node: LBOUND\7f362742
-Node: LCOBOUND\7f364080
-Node: LEADZ\7f365215
-Node: LEN\7f366076
-Node: LEN_TRIM\7f367372
-Node: LGE\7f368360
-Node: LGT\7f369873
-Node: LINK\7f371351
-Node: LLE\7f372390
-Node: LLT\7f373890
-Node: LNBLNK\7f375361
-Node: LOC\7f376139
-Node: LOG\7f376871
-Node: LOG10\7f378219
-Node: LOG_GAMMA\7f379209
-Node: LOGICAL\7f380311
-Node: LONG\7f381123
-Node: LSHIFT\7f381881
-Node: LSTAT\7f382967
-Node: LTIME\7f384167
-Node: MALLOC\7f385573
-Node: MASKL\7f387035
-Node: MASKR\7f387802
-Node: MATMUL\7f388572
-Node: MAX\7f389670
-Node: MAXEXPONENT\7f391205
-Node: MAXLOC\7f392022
-Node: MAXVAL\7f394047
-Node: MCLOCK\7f395687
-Node: MCLOCK8\7f396710
-Node: MERGE\7f397940
-Node: MERGE_BITS\7f398692
-Node: MIN\7f399557
-Node: MINEXPONENT\7f401095
-Node: MINLOC\7f401726
-Node: MINVAL\7f403751
-Node: MOD\7f405404
-Node: MODULO\7f407173
-Node: MOVE_ALLOC\7f408476
-Node: MVBITS\7f409509
-Node: NEAREST\7f410575
-Node: NEW_LINE\7f411675
-Node: NINT\7f412448
-Node: NORM2\7f413869
-Node: NOT\7f415011
-Node: NULL\7f415595
-Node: NUM_IMAGES\7f416503
-Node: OR\7f417319
-Node: PACK\7f418605
-Node: PARITY\7f420613
-Node: PERROR\7f421834
-Node: POPCNT\7f422459
-Node: POPPAR\7f423331
-Node: PRECISION\7f424385
-Node: PRESENT\7f425272
-Node: PRODUCT\7f426384
-Node: RADIX\7f427918
-Node: RAN\7f428730
-Node: RAND\7f429186
-Node: RANDOM_NUMBER\7f430521
-Node: RANDOM_SEED\7f432250
-Node: RANGE\7f436081
-Node: RANK\7f436762
-Node: REAL\7f437543
-Node: RENAME\7f439340
-Node: REPEAT\7f440362
-Node: RESHAPE\7f441090
-Node: RRSPACING\7f442557
-Node: RSHIFT\7f443250
-Node: SAME_TYPE_AS\7f444390
-Node: SCALE\7f445222
-Node: SCAN\7f446003
-Node: SECNDS\7f447561
-Node: SECOND\7f448653
-Node: SELECTED_CHAR_KIND\7f449529
-Node: SELECTED_INT_KIND\7f451124
-Node: SELECTED_REAL_KIND\7f452301
-Node: SET_EXPONENT\7f454978
-Node: SHAPE\7f455975
-Node: SHIFTA\7f457399
-Node: SHIFTL\7f458363
-Node: SHIFTR\7f459200
-Node: SIGN\7f460038
-Node: SIGNAL\7f461264
-Node: SIN\7f462770
-Node: SINH\7f463812
-Node: SIZE\7f464824
-Node: SIZEOF\7f466143
-Node: SLEEP\7f467620
-Node: SPACING\7f468181
-Node: SPREAD\7f469195
-Node: SQRT\7f470346
-Node: SRAND\7f471678
-Node: STAT\7f472848
-Node: STORAGE_SIZE\7f476016
-Node: SUM\7f476895
-Node: SYMLNK\7f478387
-Node: SYSTEM\7f479522
-Node: SYSTEM_CLOCK\7f480777
-Node: TAN\7f483536
-Node: TANH\7f484524
-Node: THIS_IMAGE\7f485698
-Node: TIME\7f487198
-Node: TIME8\7f488323
-Node: TINY\7f489476
-Node: TRAILZ\7f490077
-Node: TRANSFER\7f490895
-Node: TRANSPOSE\7f492931
-Node: TRIM\7f493621
-Node: TTYNAM\7f494479
-Node: UBOUND\7f495397
-Node: UCOBOUND\7f496787
-Node: UMASK\7f497924
-Node: UNLINK\7f498606
-Node: UNPACK\7f499586
-Node: VERIFY\7f500881
-Node: XOR\7f502610
-Node: Intrinsic Modules\7f503983
-Node: ISO_FORTRAN_ENV\7f504226
-Node: ISO_C_BINDING\7f508394
-Node: OpenMP Modules OMP_LIB and OMP_LIB_KINDS\7f512126
-Node: Contributing\7f513671
-Node: Contributors\7f514525
-Node: Projects\7f516156
-Node: Proposed Extensions\7f516962
-Node: Copying\7f518972
-Node: GNU Free Documentation License\7f556517
-Node: Funding\7f581640
-Node: Option Index\7f584166
-Node: Keyword Index\7f599298
+Node: Argument list functions\7f126312
+Node: Extensions not implemented in GNU Fortran\7f127917
+Node: STRUCTURE and RECORD\7f128866
+Node: ENCODE and DECODE statements\7f131303
+Node: Variable FORMAT expressions\7f132663
+Node: Alternate complex function syntax\7f133768
+Node: Volatile COMMON blocks\7f134318
+Node: Mixed-Language Programming\7f134795
+Node: Interoperability with C\7f135376
+Node: Intrinsic Types\7f136710
+Node: Derived Types and struct\7f137706
+Node: Interoperable Global Variables\7f139064
+Node: Interoperable Subroutines and Functions\7f140339
+Node: Working with Pointers\7f144133
+Node: Further Interoperability of Fortran with C\7f148609
+Node: GNU Fortran Compiler Directives\7f151963
+Node: Non-Fortran Main Program\7f155215
+Node: _gfortran_set_args\7f157403
+Node: _gfortran_set_options\7f158341
+Node: _gfortran_set_convert\7f161741
+Node: _gfortran_set_record_marker\7f162609
+Node: _gfortran_set_fpe\7f163419
+Node: _gfortran_set_max_subrecord_length\7f164617
+Node: Naming and argument-passing conventions\7f165540
+Node: Naming conventions\7f166259
+Node: Argument passing conventions\7f167731
+Node: Intrinsic Procedures\7f172225
+Node: Introduction to Intrinsics\7f187711
+Node: ABORT\7f190061
+Node: ABS\7f190806
+Node: ACCESS\7f192408
+Node: ACHAR\7f194338
+Node: ACOS\7f195542
+Node: ACOSH\7f196796
+Node: ADJUSTL\7f197791
+Node: ADJUSTR\7f198733
+Node: AIMAG\7f199681
+Node: AINT\7f201053
+Node: ALARM\7f202659
+Node: ALL\7f204291
+Node: ALLOCATED\7f206215
+Node: AND\7f207354
+Node: ANINT\7f208653
+Node: ANY\7f210150
+Node: ASIN\7f212076
+Node: ASINH\7f213319
+Node: ASSOCIATED\7f214324
+Node: ATAN\7f217335
+Node: ATAN2\7f218753
+Node: ATANH\7f220545
+Node: ATOMIC_DEFINE\7f221553
+Node: ATOMIC_REF\7f222629
+Node: BACKTRACE\7f223891
+Node: BESSEL_J0\7f224471
+Node: BESSEL_J1\7f225528
+Node: BESSEL_JN\7f226589
+Node: BESSEL_Y0\7f228414
+Node: BESSEL_Y1\7f229424
+Node: BESSEL_YN\7f230434
+Node: BGE\7f232265
+Node: BGT\7f232957
+Node: BIT_SIZE\7f233607
+Node: BLE\7f234429
+Node: BLT\7f235111
+Node: BTEST\7f235749
+Node: C_ASSOCIATED\7f236634
+Node: C_F_POINTER\7f237845
+Node: C_F_PROCPOINTER\7f239280
+Node: C_FUNLOC\7f240787
+Node: C_LOC\7f242158
+Node: C_SIZEOF\7f243437
+Node: CEILING\7f244850
+Node: CHAR\7f245858
+Node: CHDIR\7f247070
+Node: CHMOD\7f248244
+Node: CMPLX\7f250159
+Node: COMMAND_ARGUMENT_COUNT\7f251612
+Node: COMPILER_OPTIONS\7f252528
+Node: COMPILER_VERSION\7f253554
+Node: COMPLEX\7f254518
+Node: CONJG\7f255657
+Node: COS\7f256713
+Node: COSH\7f258137
+Node: COUNT\7f259319
+Node: CPU_TIME\7f261342
+Node: CSHIFT\7f262699
+Node: CTIME\7f264359
+Node: DATE_AND_TIME\7f265861
+Node: DBLE\7f268341
+Node: DCMPLX\7f269136
+Node: DIGITS\7f270318
+Node: DIM\7f271285
+Node: DOT_PRODUCT\7f272566
+Node: DPROD\7f274209
+Node: DREAL\7f275136
+Node: DSHIFTL\7f275802
+Node: DSHIFTR\7f277135
+Node: DTIME\7f278469
+Node: EOSHIFT\7f281284
+Node: EPSILON\7f283357
+Node: ERF\7f284084
+Node: ERFC\7f284865
+Node: ERFC_SCALED\7f285675
+Node: ETIME\7f286368
+Node: EXECUTE_COMMAND_LINE\7f288616
+Node: EXIT\7f291203
+Node: EXP\7f292079
+Node: EXPONENT\7f293330
+Node: EXTENDS_TYPE_OF\7f294092
+Node: FDATE\7f294948
+Node: FGET\7f296421
+Node: FGETC\7f298246
+Node: FLOOR\7f300052
+Node: FLUSH\7f301039
+Node: FNUM\7f302916
+Node: FPUT\7f303639
+Node: FPUTC\7f305271
+Node: FRACTION\7f307050
+Node: FREE\7f307952
+Node: FSEEK\7f308793
+Node: FSTAT\7f311097
+Node: FTELL\7f312182
+Node: GAMMA\7f313162
+Node: GERROR\7f314214
+Node: GETARG\7f314934
+Node: GET_COMMAND\7f316705
+Node: GET_COMMAND_ARGUMENT\7f318077
+Node: GETCWD\7f320125
+Node: GETENV\7f321105
+Node: GET_ENVIRONMENT_VARIABLE\7f322537
+Node: GETGID\7f324700
+Node: GETLOG\7f325237
+Node: GETPID\7f326099
+Node: GETUID\7f326829
+Node: GMTIME\7f327345
+Node: HOSTNM\7f328829
+Node: HUGE\7f329750
+Node: HYPOT\7f330472
+Node: IACHAR\7f331298
+Node: IALL\7f332466
+Node: IAND\7f333951
+Node: IANY\7f334938
+Node: IARGC\7f336432
+Node: IBCLR\7f337453
+Node: IBITS\7f338115
+Node: IBSET\7f339033
+Node: ICHAR\7f339690
+Node: IDATE\7f341860
+Node: IEOR\7f342890
+Node: IERRNO\7f343770
+Node: IMAGE_INDEX\7f344319
+Node: INDEX intrinsic\7f345347
+Node: INT\7f346873
+Node: INT2\7f348601
+Node: INT8\7f349369
+Node: IOR\7f350084
+Node: IPARITY\7f350940
+Node: IRAND\7f352472
+Node: IS_IOSTAT_END\7f353831
+Node: IS_IOSTAT_EOR\7f354930
+Node: ISATTY\7f356059
+Node: ISHFT\7f356842
+Node: ISHFTC\7f357825
+Node: ISNAN\7f359046
+Node: ITIME\7f359813
+Node: KILL\7f360841
+Node: KIND\7f361750
+Node: LBOUND\7f362596
+Node: LCOBOUND\7f363934
+Node: LEADZ\7f365069
+Node: LEN\7f365930
+Node: LEN_TRIM\7f367226
+Node: LGE\7f368214
+Node: LGT\7f369727
+Node: LINK\7f371205
+Node: LLE\7f372244
+Node: LLT\7f373744
+Node: LNBLNK\7f375215
+Node: LOC\7f375993
+Node: LOG\7f376725
+Node: LOG10\7f378073
+Node: LOG_GAMMA\7f379063
+Node: LOGICAL\7f380165
+Node: LONG\7f380977
+Node: LSHIFT\7f381735
+Node: LSTAT\7f382821
+Node: LTIME\7f384021
+Node: MALLOC\7f385427
+Node: MASKL\7f386889
+Node: MASKR\7f387656
+Node: MATMUL\7f388426
+Node: MAX\7f389524
+Node: MAXEXPONENT\7f391059
+Node: MAXLOC\7f391876
+Node: MAXVAL\7f393901
+Node: MCLOCK\7f395541
+Node: MCLOCK8\7f396564
+Node: MERGE\7f397794
+Node: MERGE_BITS\7f398546
+Node: MIN\7f399411
+Node: MINEXPONENT\7f400949
+Node: MINLOC\7f401580
+Node: MINVAL\7f403605
+Node: MOD\7f405258
+Node: MODULO\7f407027
+Node: MOVE_ALLOC\7f408330
+Node: MVBITS\7f409363
+Node: NEAREST\7f410429
+Node: NEW_LINE\7f411529
+Node: NINT\7f412302
+Node: NORM2\7f413723
+Node: NOT\7f414865
+Node: NULL\7f415449
+Node: NUM_IMAGES\7f416357
+Node: OR\7f417173
+Node: PACK\7f418459
+Node: PARITY\7f420467
+Node: PERROR\7f421688
+Node: POPCNT\7f422313
+Node: POPPAR\7f423185
+Node: PRECISION\7f424239
+Node: PRESENT\7f425126
+Node: PRODUCT\7f426238
+Node: RADIX\7f427772
+Node: RAN\7f428584
+Node: RAND\7f429040
+Node: RANDOM_NUMBER\7f430375
+Node: RANDOM_SEED\7f432104
+Node: RANGE\7f435935
+Node: RANK\7f436616
+Node: REAL\7f437397
+Node: RENAME\7f439194
+Node: REPEAT\7f440216
+Node: RESHAPE\7f440944
+Node: RRSPACING\7f442411
+Node: RSHIFT\7f443104
+Node: SAME_TYPE_AS\7f444244
+Node: SCALE\7f445076
+Node: SCAN\7f445857
+Node: SECNDS\7f447415
+Node: SECOND\7f448507
+Node: SELECTED_CHAR_KIND\7f449383
+Node: SELECTED_INT_KIND\7f450978
+Node: SELECTED_REAL_KIND\7f452155
+Node: SET_EXPONENT\7f454832
+Node: SHAPE\7f455829
+Node: SHIFTA\7f457253
+Node: SHIFTL\7f458217
+Node: SHIFTR\7f459054
+Node: SIGN\7f459892
+Node: SIGNAL\7f461118
+Node: SIN\7f462624
+Node: SINH\7f463666
+Node: SIZE\7f464678
+Node: SIZEOF\7f465997
+Node: SLEEP\7f467474
+Node: SPACING\7f468035
+Node: SPREAD\7f469049
+Node: SQRT\7f470200
+Node: SRAND\7f471532
+Node: STAT\7f472702
+Node: STORAGE_SIZE\7f475870
+Node: SUM\7f476749
+Node: SYMLNK\7f478241
+Node: SYSTEM\7f479376
+Node: SYSTEM_CLOCK\7f480631
+Node: TAN\7f483390
+Node: TANH\7f484378
+Node: THIS_IMAGE\7f485552
+Node: TIME\7f487052
+Node: TIME8\7f488177
+Node: TINY\7f489330
+Node: TRAILZ\7f489931
+Node: TRANSFER\7f490749
+Node: TRANSPOSE\7f492785
+Node: TRIM\7f493475
+Node: TTYNAM\7f494333
+Node: UBOUND\7f495251
+Node: UCOBOUND\7f496641
+Node: UMASK\7f497778
+Node: UNLINK\7f498460
+Node: UNPACK\7f499440
+Node: VERIFY\7f500735
+Node: XOR\7f502464
+Node: Intrinsic Modules\7f503837
+Node: ISO_FORTRAN_ENV\7f504080
+Node: ISO_C_BINDING\7f508248
+Node: OpenMP Modules OMP_LIB and OMP_LIB_KINDS\7f511980
+Node: Contributing\7f513483
+Node: Contributors\7f514337
+Node: Projects\7f515968
+Node: Proposed Extensions\7f516774
+Node: Copying\7f518784
+Node: GNU Free Documentation License\7f556329
+Node: Funding\7f581452
+Node: Option Index\7f583978
+Node: Keyword Index\7f599110
 \1f
 End Tag Table
index 773ec62..c852b3a 100644 (file)
@@ -531,7 +531,7 @@ The current status of the support is can be found in the
 @ref{TS 29113 status} sections of the documentation.
 
 Additionally, the GNU Fortran compilers supports the OpenMP specification
-(version 3.1, @url{http://openmp.org/@/wp/@/openmp-specifications/}).
+(version 4.0, @url{http://openmp.org/@/wp/@/openmp-specifications/}).
 
 @node Varying Length Character Strings
 @subsection Varying Length Character Strings
@@ -1884,8 +1884,8 @@ It consists of a set of compiler directives, library routines,
 and environment variables that influence run-time behavior.
 
 GNU Fortran strives to be compatible to the 
-@uref{http://www.openmp.org/mp-documents/spec31.pdf,
-OpenMP Application Program Interface v3.1}.
+@uref{http://openmp.org/wp/openmp-specifications/,
+OpenMP Application Program Interface v4.0}.
 
 To enable the processing of the OpenMP directive @code{!$omp} in
 free-form source code; the @code{c$omp}, @code{*$omp} and @code{!$omp}
index a6296ef..cceee6d 100644 (file)
@@ -73,34 +73,11 @@ static void append_arg (const struct cl_decoded_option *);
 static unsigned int g77_newargc;
 static struct cl_decoded_option *g77_new_decoded_options;
 
-/* The path to the spec file.  */
-static char *spec_file = NULL;
-
 /* This will be NULL if we encounter a situation where we should not
    link in the fortran libraries.  */
 static const char *library = NULL;
 
 
-/* Return full path name of spec file if it is in DIR, or NULL if
-   not.  */
-static char *
-find_spec_file (const char *dir)
-{
-  const char dirsep_string[] = { DIR_SEPARATOR, '\0' };
-  char *spec;
-  struct stat sb;
-
-  spec = XNEWVEC (char, strlen (dir) + sizeof (SPEC_FILE) + 4);
-  strcpy (spec, dir);
-  strcat (spec, dirsep_string);
-  strcat (spec, SPEC_FILE);
-  if (!stat (spec, &sb))
-    return spec;
-  free (spec);
-  return NULL;
-}
-
-
 /* Return whether strings S1 and S2 are both NULL or both the same
    string.  */
 
@@ -313,12 +290,6 @@ For more information about these matters, see the file named COPYING\n\n"));
             cool facility for handling --help and --verbose --help.  */
          return;
 
-       case OPT_L:
-         if (!spec_file)
-           spec_file = find_spec_file (decoded_options[i].arg);
-         break;
-
-
        default:
          break;
        }
@@ -449,12 +420,6 @@ For more information about these matters, see the file named COPYING\n\n"));
 
 #endif
 
-  /* Read the specs file corresponding to libgfortran.
-     If we didn't find the spec file on the -L path, we load it
-     via lang_specific_pre_link.  */
-  if (spec_file)
-    append_option (OPT_specs_, spec_file, 1);
-
   if (verbose && g77_new_decoded_options != g77_x_decoded_options)
     {
       fprintf (stderr, _("Driving:"));
@@ -473,8 +438,7 @@ For more information about these matters, see the file named COPYING\n\n"));
 int
 lang_specific_pre_link (void)
 {
-  free (spec_file);
-  if (spec_file == NULL && library)
+  if (library)
     do_spec ("%:include(libgfortran.spec)");
 
   return 0;
index 926ffe9..eb6924c 100644 (file)
@@ -3343,10 +3343,8 @@ end program test_cshift
 @table @asis
 @item @emph{Description}:
 @code{CTIME} converts a system time value, such as returned by
-@code{TIME8}, to a string. Unless the application has called
-@code{setlocale}, the output will be in the default locale, of length
-24 and of the form @samp{Sat Aug 19 18:13:14 1995}. In other locales,
-a longer string may result.
+@code{TIME8}, to a string. The output will be of the form @samp{Sat
+Aug 19 18:13:14 1995}.
 
 This intrinsic is provided in both subroutine and function forms; however,
 only one form can be used in any given program unit.
@@ -13210,8 +13208,7 @@ named constants:
 @code{OMP_LIB} provides the scalar default-integer
 named constant @code{openmp_version} with a value of the form
 @var{yyyymm}, where @code{yyyy} is the year and @var{mm} the month
-of the OpenMP version; for OpenMP v3.1 the value is @code{201107}
-and for OpenMP v4.0 the value is @code{201307}.
+of the OpenMP version; for OpenMP v4.0 the value is @code{201307}.
 
 The following scalar integer named constants of the
 kind @code{omp_sched_kind}:
index 4c46094..b3f47a8 100644 (file)
@@ -2595,7 +2595,10 @@ match_exit_cycle (gfc_statement st, gfc_exec_op op)
       && o != NULL
       && o->state == COMP_OMP_STRUCTURED_BLOCK
       && (o->head->op == EXEC_OMP_DO
-         || o->head->op == EXEC_OMP_PARALLEL_DO))
+         || o->head->op == EXEC_OMP_PARALLEL_DO
+         || o->head->op == EXEC_OMP_SIMD
+         || o->head->op == EXEC_OMP_DO_SIMD
+         || o->head->op == EXEC_OMP_PARALLEL_DO_SIMD))
     {
       int collapse = 1;
       gcc_assert (o->head->next != NULL
@@ -4564,6 +4567,30 @@ gfc_free_namelist (gfc_namelist *name)
 }
 
 
+/* Free an OpenMP namelist structure.  */
+
+void
+gfc_free_omp_namelist (gfc_omp_namelist *name)
+{
+  gfc_omp_namelist *n;
+
+  for (; name; name = n)
+    {
+      gfc_free_expr (name->expr);
+      if (name->udr)
+       {
+         if (name->udr->combiner)
+           gfc_free_statement (name->udr->combiner);
+         if (name->udr->initializer)
+           gfc_free_statement (name->udr->initializer);
+         free (name->udr);
+       }
+      n = name->next;
+      free (name);
+    }
+}
+
+
 /* Match a NAMELIST statement.  */
 
 match
index 385e840..d07db11 100644 (file)
@@ -126,20 +126,46 @@ gfc_common_head *gfc_get_common (const char *, int);
 match gfc_match_omp_eos (void);
 match gfc_match_omp_atomic (void);
 match gfc_match_omp_barrier (void);
+match gfc_match_omp_cancel (void);
+match gfc_match_omp_cancellation_point (void);
 match gfc_match_omp_critical (void);
+match gfc_match_omp_declare_reduction (void);
+match gfc_match_omp_declare_simd (void);
+match gfc_match_omp_declare_target (void);
+match gfc_match_omp_distribute (void);
+match gfc_match_omp_distribute_parallel_do (void);
+match gfc_match_omp_distribute_parallel_do_simd (void);
+match gfc_match_omp_distribute_simd (void);
 match gfc_match_omp_do (void);
+match gfc_match_omp_do_simd (void);
 match gfc_match_omp_flush (void);
 match gfc_match_omp_master (void);
 match gfc_match_omp_ordered (void);
 match gfc_match_omp_parallel (void);
 match gfc_match_omp_parallel_do (void);
+match gfc_match_omp_parallel_do_simd (void);
 match gfc_match_omp_parallel_sections (void);
 match gfc_match_omp_parallel_workshare (void);
 match gfc_match_omp_sections (void);
+match gfc_match_omp_simd (void);
 match gfc_match_omp_single (void);
+match gfc_match_omp_target (void);
+match gfc_match_omp_target_data (void);
+match gfc_match_omp_target_teams (void);
+match gfc_match_omp_target_teams_distribute (void);
+match gfc_match_omp_target_teams_distribute_parallel_do (void);
+match gfc_match_omp_target_teams_distribute_parallel_do_simd (void);
+match gfc_match_omp_target_teams_distribute_simd (void);
+match gfc_match_omp_target_update (void);
 match gfc_match_omp_task (void);
+match gfc_match_omp_taskgroup (void);
 match gfc_match_omp_taskwait (void);
 match gfc_match_omp_taskyield (void);
+match gfc_match_omp_teams (void);
+match gfc_match_omp_teams_distribute (void);
+match gfc_match_omp_teams_distribute_parallel_do (void);
+match gfc_match_omp_teams_distribute_parallel_do_simd (void);
+match gfc_match_omp_teams_distribute_simd (void);
 match gfc_match_omp_threadprivate (void);
 match gfc_match_omp_workshare (void);
 match gfc_match_omp_end_nowait (void);
index 52fdebe..2bfe177 100644 (file)
@@ -83,6 +83,7 @@ along with GCC; see the file COPYING3.  If not see
 /* Don't put any single quote (') in MOD_VERSION, if you want it to be
    recognized.  */
 #define MOD_VERSION "12"
+#define MOD_VERSION_OMP4 "12 OpenMP 4"
 
 
 /* Structure that describes a position within a module file.  */
@@ -196,6 +197,7 @@ static char* module_content;
 static long module_pos;
 static int module_line, module_column, only_flag;
 static int prev_module_line, prev_module_column;
+static bool module_omp4;
 
 static enum
 { IO_INPUT, IO_OUTPUT }
@@ -1877,7 +1879,7 @@ typedef enum
   AB_IS_BIND_C, AB_IS_C_INTEROP, AB_IS_ISO_C, AB_ABSTRACT, AB_ZERO_COMP,
   AB_IS_CLASS, AB_PROCEDURE, AB_PROC_POINTER, AB_ASYNCHRONOUS, AB_CODIMENSION,
   AB_COARRAY_COMP, AB_VTYPE, AB_VTAB, AB_CONTIGUOUS, AB_CLASS_POINTER,
-  AB_IMPLICIT_PURE, AB_ARTIFICIAL, AB_UNLIMITED_POLY
+  AB_IMPLICIT_PURE, AB_ARTIFICIAL, AB_UNLIMITED_POLY, AB_OMP_DECLARE_TARGET
 }
 ab_attribute;
 
@@ -1932,6 +1934,7 @@ static const mstring attr_bits[] =
     minit ("CLASS_POINTER", AB_CLASS_POINTER),
     minit ("IMPLICIT_PURE", AB_IMPLICIT_PURE),
     minit ("UNLIMITED_POLY", AB_UNLIMITED_POLY),
+    minit ("OMP_DECLARE_TARGET", AB_OMP_DECLARE_TARGET),
     minit (NULL, -1)
 };
 
@@ -2110,6 +2113,8 @@ mio_symbol_attribute (symbol_attribute *attr)
        MIO_NAME (ab_attribute) (AB_VTYPE, attr_bits);
       if (attr->vtab)
        MIO_NAME (ab_attribute) (AB_VTAB, attr_bits);
+      if (attr->omp_declare_target)
+       MIO_NAME (ab_attribute) (AB_OMP_DECLARE_TARGET, attr_bits);
 
       mio_rparen ();
 
@@ -2273,6 +2278,9 @@ mio_symbol_attribute (symbol_attribute *attr)
            case AB_VTAB:
              attr->vtab = 1;
              break;
+           case AB_OMP_DECLARE_TARGET:
+             attr->omp_declare_target = 1;
+             break;
            }
        }
     }
@@ -3130,6 +3138,7 @@ static const mstring intrinsics[] =
     minit ("LE", INTRINSIC_LE_OS),
     minit ("NOT", INTRINSIC_NOT),
     minit ("PARENTHESES", INTRINSIC_PARENTHESES),
+    minit ("USER", INTRINSIC_USER),
     minit (NULL, -1)
 };
 
@@ -3166,7 +3175,8 @@ fix_mio_expr (gfc_expr *e)
          && !e->symtree->n.sym->attr.dummy)
        e->symtree = ns_st;
     }
-  else if (e->expr_type == EXPR_FUNCTION && e->value.function.name)
+  else if (e->expr_type == EXPR_FUNCTION
+          && (e->value.function.name || e->value.function.isym))
     {
       gfc_symbol *sym;
 
@@ -3281,6 +3291,32 @@ mio_expr (gfc_expr **ep)
          mio_expr (&e->value.op.op2);
          break;
 
+       case INTRINSIC_USER:
+         /* INTRINSIC_USER should not appear in resolved expressions,
+            though for UDRs we need to stream unresolved ones.  */
+         if (iomode == IO_OUTPUT)
+           write_atom (ATOM_STRING, e->value.op.uop->name);
+         else
+           {
+             char *name = read_string ();
+             const char *uop_name = find_use_name (name, true);
+             if (uop_name == NULL)
+               {
+                 size_t len = strlen (name);
+                 char *name2 = XCNEWVEC (char, len + 2);
+                 memcpy (name2, name, len);
+                 name2[len] = ' ';
+                 name2[len + 1] = '\0';
+                 free (name);
+                 uop_name = name = name2;
+               }
+             e->value.op.uop = gfc_get_uop (uop_name);
+             free (name);
+           }
+         mio_expr (&e->value.op.op1);
+         mio_expr (&e->value.op.op2);
+         break;
+
        default:
          bad_module ("Bad operator");
        }
@@ -3299,6 +3335,8 @@ mio_expr (gfc_expr **ep)
            flag = 1;
          else if (e->ref)
            flag = 2;
+         else if (e->value.function.isym == NULL)
+           flag = 3;
          else
            flag = 0;
          mio_integer (&flag);
@@ -3310,6 +3348,8 @@ mio_expr (gfc_expr **ep)
            case 2:
              mio_ref_list (&e->ref);
              break;
+           case 3:
+             break;
            default:
              write_atom (ATOM_STRING, e->value.function.isym->name);
            }
@@ -3317,7 +3357,10 @@ mio_expr (gfc_expr **ep)
       else
        {
          require_atom (ATOM_STRING);
-         e->value.function.name = gfc_get_string (atom_string);
+         if (atom_string[0] == '\0')
+           e->value.function.name = NULL;
+         else
+           e->value.function.name = gfc_get_string (atom_string);
          free (atom_string);
 
          mio_integer (&flag);
@@ -3329,6 +3372,8 @@ mio_expr (gfc_expr **ep)
            case 2:
              mio_ref_list (&e->ref);
              break;
+           case 3:
+             break;
            default:
              require_atom (ATOM_STRING);
              e->value.function.isym = gfc_find_function (atom_string);
@@ -3790,6 +3835,203 @@ mio_full_f2k_derived (gfc_symbol *sym)
   mio_rparen ();
 }
 
+static const mstring omp_declare_simd_clauses[] =
+{
+    minit ("INBRANCH", 0),
+    minit ("NOTINBRANCH", 1),
+    minit ("SIMDLEN", 2),
+    minit ("UNIFORM", 3),
+    minit ("LINEAR", 4),
+    minit ("ALIGNED", 5),
+    minit (NULL, -1)
+};
+
+/* Handle !$omp declare simd.  */
+
+static void
+mio_omp_declare_simd (gfc_namespace *ns, gfc_omp_declare_simd **odsp)
+{
+  if (iomode == IO_OUTPUT)
+    {
+      if (*odsp == NULL)
+       return;
+    }
+  else if (peek_atom () != ATOM_LPAREN)
+    return;
+
+  gfc_omp_declare_simd *ods = *odsp;
+
+  mio_lparen ();
+  if (iomode == IO_OUTPUT)
+    {
+      write_atom (ATOM_NAME, "OMP_DECLARE_SIMD");
+      if (ods->clauses)
+       {
+         gfc_omp_namelist *n;
+
+         if (ods->clauses->inbranch)
+           mio_name (0, omp_declare_simd_clauses);
+         if (ods->clauses->notinbranch)
+           mio_name (1, omp_declare_simd_clauses);
+         if (ods->clauses->simdlen_expr)
+           {
+             mio_name (2, omp_declare_simd_clauses);
+             mio_expr (&ods->clauses->simdlen_expr);
+           }
+         for (n = ods->clauses->lists[OMP_LIST_UNIFORM]; n; n = n->next)
+           {
+             mio_name (3, omp_declare_simd_clauses);
+             mio_symbol_ref (&n->sym);
+           }
+         for (n = ods->clauses->lists[OMP_LIST_LINEAR]; n; n = n->next)
+           {
+             mio_name (4, omp_declare_simd_clauses);
+             mio_symbol_ref (&n->sym);
+             mio_expr (&n->expr);
+           }
+         for (n = ods->clauses->lists[OMP_LIST_ALIGNED]; n; n = n->next)
+           {
+             mio_name (5, omp_declare_simd_clauses);
+             mio_symbol_ref (&n->sym);
+             mio_expr (&n->expr);
+           }
+       }
+    }
+  else
+    {
+      gfc_omp_namelist **ptrs[3] = { NULL, NULL, NULL };
+
+      require_atom (ATOM_NAME);
+      *odsp = ods = gfc_get_omp_declare_simd ();
+      ods->where = gfc_current_locus;
+      ods->proc_name = ns->proc_name;
+      if (peek_atom () == ATOM_NAME)
+       {
+         ods->clauses = gfc_get_omp_clauses ();
+         ptrs[0] = &ods->clauses->lists[OMP_LIST_UNIFORM];
+         ptrs[1] = &ods->clauses->lists[OMP_LIST_LINEAR];
+         ptrs[2] = &ods->clauses->lists[OMP_LIST_ALIGNED];
+       }
+      while (peek_atom () == ATOM_NAME)
+       {
+         gfc_omp_namelist *n;
+         int t = mio_name (0, omp_declare_simd_clauses);
+
+         switch (t)
+           {
+           case 0: ods->clauses->inbranch = true; break;
+           case 1: ods->clauses->notinbranch = true; break;
+           case 2: mio_expr (&ods->clauses->simdlen_expr); break;
+           case 3:
+           case 4:
+           case 5:
+             *ptrs[t - 3] = n = gfc_get_omp_namelist ();
+             ptrs[t - 3] = &n->next;
+             mio_symbol_ref (&n->sym);
+             if (t != 3)
+               mio_expr (&n->expr);
+             break;
+           }
+       }
+    }
+
+  mio_omp_declare_simd (ns, &ods->next);
+
+  mio_rparen ();
+}
+
+
+static const mstring omp_declare_reduction_stmt[] =
+{
+    minit ("ASSIGN", 0),
+    minit ("CALL", 1),
+    minit (NULL, -1)
+};
+
+
+static void
+mio_omp_udr_expr (gfc_omp_udr *udr, gfc_symbol **sym1, gfc_symbol **sym2,
+                 gfc_namespace *ns, bool is_initializer)
+{
+  if (iomode == IO_OUTPUT)
+    {
+      if ((*sym1)->module == NULL)
+       {
+         (*sym1)->module = module_name;
+         (*sym2)->module = module_name;
+       }
+      mio_symbol_ref (sym1);
+      mio_symbol_ref (sym2);
+      if (ns->code->op == EXEC_ASSIGN)
+       {
+         mio_name (0, omp_declare_reduction_stmt);
+         mio_expr (&ns->code->expr1);
+         mio_expr (&ns->code->expr2);
+       }
+      else
+       {
+         int flag;
+         mio_name (1, omp_declare_reduction_stmt);
+         mio_symtree_ref (&ns->code->symtree);
+         mio_actual_arglist (&ns->code->ext.actual);
+
+         flag = ns->code->resolved_isym != NULL;
+         mio_integer (&flag);
+         if (flag)
+           write_atom (ATOM_STRING, ns->code->resolved_isym->name);
+         else
+           mio_symbol_ref (&ns->code->resolved_sym);
+       }
+    }
+  else
+    {
+      pointer_info *p1 = mio_symbol_ref (sym1);
+      pointer_info *p2 = mio_symbol_ref (sym2);
+      gfc_symbol *sym;
+      gcc_assert (p1->u.rsym.ns == p2->u.rsym.ns);
+      gcc_assert (p1->u.rsym.sym == NULL);
+      /* Add hidden symbols to the symtree.  */
+      pointer_info *q = get_integer (p1->u.rsym.ns);
+      q->u.pointer = (void *) ns;
+      sym = gfc_new_symbol (is_initializer ? "omp_priv" : "omp_out", ns);
+      sym->ts = udr->ts;
+      sym->module = gfc_get_string (p1->u.rsym.module);
+      associate_integer_pointer (p1, sym);
+      sym->attr.omp_udr_artificial_var = 1;
+      gcc_assert (p2->u.rsym.sym == NULL);
+      sym = gfc_new_symbol (is_initializer ? "omp_orig" : "omp_in", ns);
+      sym->ts = udr->ts;
+      sym->module = gfc_get_string (p2->u.rsym.module);
+      associate_integer_pointer (p2, sym);
+      sym->attr.omp_udr_artificial_var = 1;
+      if (mio_name (0, omp_declare_reduction_stmt) == 0)
+       {
+         ns->code = gfc_get_code (EXEC_ASSIGN);
+         mio_expr (&ns->code->expr1);
+         mio_expr (&ns->code->expr2);
+       }
+      else
+       {
+         int flag;
+         ns->code = gfc_get_code (EXEC_CALL);
+         mio_symtree_ref (&ns->code->symtree);
+         mio_actual_arglist (&ns->code->ext.actual);
+
+         mio_integer (&flag);
+         if (flag)
+           {
+             require_atom (ATOM_STRING);
+             ns->code->resolved_isym = gfc_find_subroutine (atom_string);
+             free (atom_string);
+           }
+         else
+           mio_symbol_ref (&ns->code->resolved_sym);
+       }
+      ns->code->loc = gfc_current_locus;
+      ns->omp_udr_ns = 1;
+    }
+}
+
 
 /* Unlike most other routines, the address of the symbol node is already
    fixed on input and the name/module has already been filled in.
@@ -3864,6 +4106,17 @@ mio_symbol (gfc_symbol *sym)
   if (sym->attr.flavor == FL_DERIVED)
     mio_integer (&(sym->hash_value));
 
+  if (sym->formal_ns
+      && sym->formal_ns->proc_name == sym
+      && sym->formal_ns->entries == NULL)
+    {
+      if (module_omp4)
+       mio_omp_declare_simd (sym->formal_ns,
+                             &sym->formal_ns->omp_declare_simd);
+      else if (iomode == IO_OUTPUT)
+       gcc_assert (sym->formal_ns->omp_declare_simd == NULL);
+    }
+
   mio_rparen ();
 }
 
@@ -4343,6 +4596,119 @@ load_derived_extensions (void)
 }
 
 
+/* This function loads OpenMP user defined reductions.  */
+static void
+load_omp_udrs (void)
+{
+  mio_lparen ();
+  while (peek_atom () != ATOM_RPAREN)
+    {
+      const char *name, *newname;
+      char *altname;
+      gfc_typespec ts;
+      gfc_symtree *st;
+      gfc_omp_reduction_op rop = OMP_REDUCTION_USER;
+
+      mio_lparen ();
+      mio_pool_string (&name);
+      mio_typespec (&ts);
+      if (strncmp (name, "operator ", sizeof ("operator ") - 1) == 0)
+       {
+         const char *p = name + sizeof ("operator ") - 1;
+         if (strcmp (p, "+") == 0)
+           rop = OMP_REDUCTION_PLUS;
+         else if (strcmp (p, "*") == 0)
+           rop = OMP_REDUCTION_TIMES;
+         else if (strcmp (p, "-") == 0)
+           rop = OMP_REDUCTION_MINUS;
+         else if (strcmp (p, ".and.") == 0)
+           rop = OMP_REDUCTION_AND;
+         else if (strcmp (p, ".or.") == 0)
+           rop = OMP_REDUCTION_OR;
+         else if (strcmp (p, ".eqv.") == 0)
+           rop = OMP_REDUCTION_EQV;
+         else if (strcmp (p, ".neqv.") == 0)
+           rop = OMP_REDUCTION_NEQV;
+       }
+      altname = NULL;
+      if (rop == OMP_REDUCTION_USER && name[0] == '.')
+       {
+         size_t len = strlen (name + 1);
+         altname = XALLOCAVEC (char, len);
+         gcc_assert (name[len] == '.');
+         memcpy (altname, name + 1, len - 1);
+         altname[len - 1] = '\0';
+       }
+      newname = name;
+      if (rop == OMP_REDUCTION_USER)
+       newname = find_use_name (altname ? altname : name, !!altname);
+      else if (only_flag && find_use_operator ((gfc_intrinsic_op) rop) == NULL)
+       newname = NULL;
+      if (newname == NULL)
+       {
+         skip_list (1);
+         continue;
+       }
+      if (altname && newname != altname)
+       {
+         size_t len = strlen (newname);
+         altname = XALLOCAVEC (char, len + 3);
+         altname[0] = '.';
+         memcpy (altname + 1, newname, len);
+         altname[len + 1] = '.';
+         altname[len + 2] = '\0';
+         name = gfc_get_string (altname);
+       }
+      st = gfc_find_symtree (gfc_current_ns->omp_udr_root, name);
+      gfc_omp_udr *udr = gfc_omp_udr_find (st, &ts);
+      if (udr)
+       {
+         require_atom (ATOM_INTEGER);
+         pointer_info *p = get_integer (atom_int);
+         if (strcmp (p->u.rsym.module, udr->omp_out->module))
+           {
+             gfc_error ("Ambiguous !$OMP DECLARE REDUCTION from "
+                        "module %s at %L",
+                        p->u.rsym.module, &gfc_current_locus);
+             gfc_error ("Previous !$OMP DECLARE REDUCTION from module "
+                        "%s at %L",
+                        udr->omp_out->module, &udr->where);
+           }
+         skip_list (1);
+         continue;
+       }
+      udr = gfc_get_omp_udr ();
+      udr->name = name;
+      udr->rop = rop;
+      udr->ts = ts;
+      udr->where = gfc_current_locus;
+      udr->combiner_ns = gfc_get_namespace (gfc_current_ns, 1);
+      udr->combiner_ns->proc_name = gfc_current_ns->proc_name;
+      mio_omp_udr_expr (udr, &udr->omp_out, &udr->omp_in, udr->combiner_ns,
+                       false);
+      if (peek_atom () != ATOM_RPAREN)
+       {
+         udr->initializer_ns = gfc_get_namespace (gfc_current_ns, 1);
+         udr->initializer_ns->proc_name = gfc_current_ns->proc_name;
+         mio_omp_udr_expr (udr, &udr->omp_priv, &udr->omp_orig,
+                           udr->initializer_ns, true);
+       }
+      if (st)
+       {
+         udr->next = st->n.omp_udr;
+         st->n.omp_udr = udr;
+       }
+      else
+       {
+         st = gfc_new_symtree (&gfc_current_ns->omp_udr_root, name);
+         st->n.omp_udr = udr;
+       }
+      mio_rparen ();
+    }
+  mio_rparen ();
+}
+
+
 /* Recursive function to traverse the pointer_info tree and load a
    needed symbol.  We return nonzero if we load a symbol and stop the
    traversal, because the act of loading can alter the tree.  */
@@ -4530,7 +4896,7 @@ check_for_ambiguous (gfc_symbol *st_sym, pointer_info *info)
 static void
 read_module (void)
 {
-  module_locus operator_interfaces, user_operators, extensions;
+  module_locus operator_interfaces, user_operators, extensions, omp_udrs;
   const char *p;
   char name[GFC_MAX_SYMBOL_LEN + 1];
   int i;
@@ -4554,6 +4920,11 @@ read_module (void)
   get_module_locus (&extensions);
   skip_list ();
 
+  /* Skip OpenMP UDRs.  */
+  get_module_locus (&omp_udrs);
+  if (module_omp4)
+    skip_list ();
+
   mio_lparen ();
 
   /* Create the fixup nodes for all the symbols.  */
@@ -4819,6 +5190,13 @@ read_module (void)
   load_commons ();
   load_equiv ();
 
+  if (module_omp4)
+    {
+      /* Load OpenMP user defined reductions.  */
+      set_module_locus (&omp_udrs);
+      load_omp_udrs ();
+    }
+
   /* At this point, we read those symbols that are needed but haven't
      been loaded yet.  If one symbol requires another, the other gets
      marked as NEEDED if its previous state was UNUSED.  */
@@ -5197,6 +5575,80 @@ write_symbol0 (gfc_symtree *st)
 }
 
 
+static void
+write_omp_udr (gfc_omp_udr *udr)
+{
+  switch (udr->rop)
+    {
+    case OMP_REDUCTION_USER:
+      /* Non-operators can't be used outside of the module.  */
+      if (udr->name[0] != '.')
+       return;
+      else
+       {
+         gfc_symtree *st;
+         size_t len = strlen (udr->name + 1);
+         char *name = XALLOCAVEC (char, len);
+         memcpy (name, udr->name, len - 1);
+         name[len - 1] = '\0';
+         st = gfc_find_symtree (gfc_current_ns->uop_root, name);
+         /* If corresponding user operator is private, don't write
+            the UDR.  */
+         if (st != NULL)
+           {
+             gfc_user_op *uop = st->n.uop;
+             if (!check_access (uop->access, uop->ns->default_access))
+               return;
+           }
+       }
+      break;
+    case OMP_REDUCTION_PLUS:
+    case OMP_REDUCTION_MINUS:
+    case OMP_REDUCTION_TIMES:
+    case OMP_REDUCTION_AND:
+    case OMP_REDUCTION_OR:
+    case OMP_REDUCTION_EQV:
+    case OMP_REDUCTION_NEQV:
+      /* If corresponding operator is private, don't write the UDR.  */
+      if (!check_access (gfc_current_ns->operator_access[udr->rop],
+                        gfc_current_ns->default_access))
+       return;
+      break;
+    default:
+      break;
+    }
+  if (udr->ts.type == BT_DERIVED || udr->ts.type == BT_CLASS)
+    {
+      /* If derived type is private, don't write the UDR.  */
+      if (!gfc_check_symbol_access (udr->ts.u.derived))
+       return;
+    }
+
+  mio_lparen ();
+  mio_pool_string (&udr->name);
+  mio_typespec (&udr->ts);
+  mio_omp_udr_expr (udr, &udr->omp_out, &udr->omp_in, udr->combiner_ns, false);
+  if (udr->initializer_ns)
+    mio_omp_udr_expr (udr, &udr->omp_priv, &udr->omp_orig,
+                     udr->initializer_ns, true);
+  mio_rparen ();
+}
+
+
+static void
+write_omp_udrs (gfc_symtree *st)
+{
+  if (st == NULL)
+    return;
+
+  write_omp_udrs (st->left);
+  gfc_omp_udr *udr;
+  for (udr = st->n.omp_udr; udr; udr = udr->next)
+    write_omp_udr (udr);
+  write_omp_udrs (st->right);
+}
+
+
 /* Type for the temporary tree used when writing secondary symbols.  */
 
 struct sorted_pointer_info
@@ -5445,6 +5897,17 @@ write_module (void)
   write_char ('\n');
   write_char ('\n');
 
+  if (module_omp4)
+    {
+      mio_lparen ();
+      write_omp_udrs (gfc_current_ns->omp_udr_root);
+      mio_rparen ();
+      write_char ('\n');
+      write_char ('\n');
+    }
+  else
+    gcc_assert (gfc_current_ns->omp_udr_root == NULL);
+
   /* Write symbol information.  First we traverse all symbols in the
      primary namespace, writing those that need to be written.
      Sometimes writing one symbol will cause another to need to be
@@ -5513,6 +5976,21 @@ read_crc32_from_module_file (const char* filename, uLong* crc)
 }
 
 
+/* Set module_omp4 if any symbol has !$OMP DECLARE SIMD directives.  */
+
+static void
+find_omp_declare_simd (gfc_symtree *st)
+{
+  gfc_symbol *sym = st->n.sym;
+  if (sym->formal_ns
+      && sym->formal_ns->proc_name == sym
+      && sym->formal_ns->omp_declare_simd)
+    module_omp4 = true;
+  else if (sym->attr.omp_declare_target)
+    module_omp4 = true;
+}
+
+
 /* Given module, dump it to disk.  If there was an error while
    processing the module, dump_flag will be set to zero and we delete
    the module file, even if it was already there.  */
@@ -5555,6 +6033,12 @@ gfc_dump_module (const char *name, int dump_flag)
   if (gfc_cpp_makedep ())
     gfc_cpp_add_target (filename);
 
+  module_omp4 = false;
+  if (gfc_current_ns->omp_udr_root)
+    module_omp4 = true;
+  else
+    gfc_traverse_symtree (gfc_current_ns->sym_root, find_omp_declare_simd);
+
   /* Write the module to the temporary file.  */
   module_fp = gzopen (filename_tmp, "w");
   if (module_fp == NULL)
@@ -5562,7 +6046,7 @@ gfc_dump_module (const char *name, int dump_flag)
                     filename_tmp, xstrerror (errno));
 
   gzprintf (module_fp, "GFORTRAN module version '%s' created from %s\n",
-           MOD_VERSION, gfc_source_file);
+           module_omp4 ? MOD_VERSION_OMP4 : MOD_VERSION, gfc_source_file);
 
   /* Write the module itself.  */
   iomode = IO_OUTPUT;
@@ -6353,6 +6837,8 @@ gfc_use_module (gfc_use_list *module)
   read_module_to_tmpbuf ();
   gzclose (module_fp);
 
+  module_omp4 = false;
+
   /* Skip the first line of the module, after checking that this is
      a gfortran module file.  */
   line = 0;
@@ -6372,11 +6858,15 @@ gfc_use_module (gfc_use_list *module)
          if (strcmp (atom_name, " version") != 0
              || module_char () != ' '
              || parse_atom () != ATOM_STRING
-             || strcmp (atom_string, MOD_VERSION))
+             || (strcmp (atom_string, MOD_VERSION)
+                 && strcmp (atom_string, MOD_VERSION_OMP4)))
            gfc_fatal_error ("Cannot read module file '%s' opened at %C,"
                             " because it was created by a different"
                             " version of GNU Fortran", filename);
 
+         if (strcmp (atom_string, MOD_VERSION_OMP4) == 0)
+           module_omp4 = true;
+
          free (atom_string);
        }
 
index dff3ab1..68ba70f 100644 (file)
@@ -23,6 +23,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "coretypes.h"
 #include "flags.h"
 #include "gfortran.h"
+#include "arith.h"
 #include "match.h"
 #include "parse.h"
 #include "pointer-set.h"
@@ -69,19 +70,111 @@ gfc_free_omp_clauses (gfc_omp_clauses *c)
   gfc_free_expr (c->final_expr);
   gfc_free_expr (c->num_threads);
   gfc_free_expr (c->chunk_size);
+  gfc_free_expr (c->safelen_expr);
+  gfc_free_expr (c->simdlen_expr);
+  gfc_free_expr (c->num_teams);
+  gfc_free_expr (c->device);
+  gfc_free_expr (c->thread_limit);
+  gfc_free_expr (c->dist_chunk_size);
   for (i = 0; i < OMP_LIST_NUM; i++)
-    gfc_free_namelist (c->lists[i]);
+    gfc_free_omp_namelist (c->lists[i]);
   free (c);
 }
 
+/* Free an !$omp declare simd construct list.  */
+
+void
+gfc_free_omp_declare_simd (gfc_omp_declare_simd *ods)
+{
+  if (ods)
+    {
+      gfc_free_omp_clauses (ods->clauses);
+      free (ods);
+    }
+}
+
+void
+gfc_free_omp_declare_simd_list (gfc_omp_declare_simd *list)
+{
+  while (list)
+    {
+      gfc_omp_declare_simd *current = list;
+      list = list->next;
+      gfc_free_omp_declare_simd (current);
+    }
+}
+
+/* Free an !$omp declare reduction.  */
+
+void
+gfc_free_omp_udr (gfc_omp_udr *omp_udr)
+{
+  if (omp_udr)
+    {
+      gfc_free_omp_udr (omp_udr->next);
+      gfc_free_namespace (omp_udr->combiner_ns);
+      if (omp_udr->initializer_ns)
+       gfc_free_namespace (omp_udr->initializer_ns);
+      free (omp_udr);
+    }
+}
+
+
+static gfc_omp_udr *
+gfc_find_omp_udr (gfc_namespace *ns, const char *name, gfc_typespec *ts)
+{
+  gfc_symtree *st;
+
+  if (ns == NULL)
+    ns = gfc_current_ns;
+  do
+    {
+      gfc_omp_udr *omp_udr;
+
+      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;
+               }
+             return omp_udr;
+           }
+
+      /* Don't escape an interface block.  */
+      if (ns && !ns->has_import_set
+         && ns->proc_name && ns->proc_name->attr.if_source == IFSRC_IFBODY)
+       break;
+
+      ns = ns->parent;
+    }
+  while (ns != NULL);
+
+  return NULL;
+}
+
+
 /* Match a variable/common block list and construct a namelist from it.  */
 
 static match
-gfc_match_omp_variable_list (const char *str, gfc_namelist **list,
-                            bool allow_common)
+gfc_match_omp_variable_list (const char *str, gfc_omp_namelist **list,
+                            bool allow_common, bool *end_colon = NULL,
+                            gfc_omp_namelist ***headp = NULL,
+                            bool allow_sections = false)
 {
-  gfc_namelist *head, *tail, *p;
-  locus old_loc;
+  gfc_omp_namelist *head, *tail, *p;
+  locus old_loc, cur_loc;
   char n[GFC_MAX_SYMBOL_LEN+1];
   gfc_symbol *sym;
   match m;
@@ -97,12 +190,29 @@ gfc_match_omp_variable_list (const char *str, gfc_namelist **list,
 
   for (;;)
     {
+      cur_loc = gfc_current_locus;
       m = gfc_match_symbol (&sym, 1);
       switch (m)
        {
        case MATCH_YES:
+         gfc_expr *expr;
+         expr = NULL;
+         if (allow_sections && gfc_peek_ascii_char () == '(')
+           {
+             gfc_current_locus = cur_loc;
+             m = gfc_match_variable (&expr, 0);
+             switch (m)
+               {
+               case MATCH_ERROR:
+                 goto cleanup;
+               case MATCH_NO:
+                 goto syntax;
+               default:
+                 break;
+               }
+           }
          gfc_set_sym_referenced (sym);
-         p = gfc_get_namelist ();
+         p = gfc_get_omp_namelist ();
          if (head == NULL)
            head = tail = p;
          else
@@ -111,6 +221,7 @@ gfc_match_omp_variable_list (const char *str, gfc_namelist **list,
              tail = tail->next;
            }
          tail->sym = sym;
+         tail->expr = expr;
          goto next_item;
        case MATCH_NO:
          break;
@@ -136,7 +247,7 @@ gfc_match_omp_variable_list (const char *str, gfc_namelist **list,
       for (sym = st->n.common->head; sym; sym = sym->common_next)
        {
          gfc_set_sym_referenced (sym);
-         p = gfc_get_namelist ();
+         p = gfc_get_omp_namelist ();
          if (head == NULL)
            head = tail = p;
          else
@@ -148,6 +259,11 @@ gfc_match_omp_variable_list (const char *str, gfc_namelist **list,
        }
 
     next_item:
+      if (end_colon && gfc_match_char (':') == MATCH_YES)
+       {
+         *end_colon = true;
+         break;
+       }
       if (gfc_match_char (')') == MATCH_YES)
        break;
       if (gfc_match_char (',') != MATCH_YES)
@@ -158,43 +274,61 @@ gfc_match_omp_variable_list (const char *str, gfc_namelist **list,
     list = &(*list)->next;
 
   *list = head;
+  if (headp)
+    *headp = list;
   return MATCH_YES;
 
 syntax:
   gfc_error ("Syntax error in OpenMP variable list at %C");
 
 cleanup:
-  gfc_free_namelist (head);
+  gfc_free_omp_namelist (head);
   gfc_current_locus = old_loc;
   return MATCH_ERROR;
 }
 
-#define OMP_CLAUSE_PRIVATE     (1 << 0)
-#define OMP_CLAUSE_FIRSTPRIVATE        (1 << 1)
-#define OMP_CLAUSE_LASTPRIVATE (1 << 2)
-#define OMP_CLAUSE_COPYPRIVATE (1 << 3)
-#define OMP_CLAUSE_SHARED      (1 << 4)
-#define OMP_CLAUSE_COPYIN      (1 << 5)
-#define OMP_CLAUSE_REDUCTION   (1 << 6)
-#define OMP_CLAUSE_IF          (1 << 7)
-#define OMP_CLAUSE_NUM_THREADS (1 << 8)
-#define OMP_CLAUSE_SCHEDULE    (1 << 9)
-#define OMP_CLAUSE_DEFAULT     (1 << 10)
-#define OMP_CLAUSE_ORDERED     (1 << 11)
-#define OMP_CLAUSE_COLLAPSE    (1 << 12)
-#define OMP_CLAUSE_UNTIED      (1 << 13)
-#define OMP_CLAUSE_FINAL       (1 << 14)
-#define OMP_CLAUSE_MERGEABLE   (1 << 15)
+#define OMP_CLAUSE_PRIVATE     (1U << 0)
+#define OMP_CLAUSE_FIRSTPRIVATE        (1U << 1)
+#define OMP_CLAUSE_LASTPRIVATE (1U << 2)
+#define OMP_CLAUSE_COPYPRIVATE (1U << 3)
+#define OMP_CLAUSE_SHARED      (1U << 4)
+#define OMP_CLAUSE_COPYIN      (1U << 5)
+#define OMP_CLAUSE_REDUCTION   (1U << 6)
+#define OMP_CLAUSE_IF          (1U << 7)
+#define OMP_CLAUSE_NUM_THREADS (1U << 8)
+#define OMP_CLAUSE_SCHEDULE    (1U << 9)
+#define OMP_CLAUSE_DEFAULT     (1U << 10)
+#define OMP_CLAUSE_ORDERED     (1U << 11)
+#define OMP_CLAUSE_COLLAPSE    (1U << 12)
+#define OMP_CLAUSE_UNTIED      (1U << 13)
+#define OMP_CLAUSE_FINAL       (1U << 14)
+#define OMP_CLAUSE_MERGEABLE   (1U << 15)
+#define OMP_CLAUSE_ALIGNED     (1U << 16)
+#define OMP_CLAUSE_DEPEND      (1U << 17)
+#define OMP_CLAUSE_INBRANCH    (1U << 18)
+#define OMP_CLAUSE_LINEAR      (1U << 19)
+#define OMP_CLAUSE_NOTINBRANCH (1U << 20)
+#define OMP_CLAUSE_PROC_BIND   (1U << 21)
+#define OMP_CLAUSE_SAFELEN     (1U << 22)
+#define OMP_CLAUSE_SIMDLEN     (1U << 23)
+#define OMP_CLAUSE_UNIFORM     (1U << 24)
+#define OMP_CLAUSE_DEVICE      (1U << 25)
+#define OMP_CLAUSE_MAP         (1U << 26)
+#define OMP_CLAUSE_TO          (1U << 27)
+#define OMP_CLAUSE_FROM                (1U << 28)
+#define OMP_CLAUSE_NUM_TEAMS   (1U << 29)
+#define OMP_CLAUSE_THREAD_LIMIT        (1U << 30)
+#define OMP_CLAUSE_DIST_SCHEDULE       (1U << 31)
 
 /* Match OpenMP directive clauses. MASK is a bitmask of
    clauses that are allowed for a particular directive.  */
 
 static match
-gfc_match_omp_clauses (gfc_omp_clauses **cp, int mask)
+gfc_match_omp_clauses (gfc_omp_clauses **cp, unsigned int mask,
+                      bool first = true, bool needs_space = true)
 {
   gfc_omp_clauses *c = gfc_get_omp_clauses ();
   locus old_loc;
-  bool needs_space = true, first = true;
 
   *cp = NULL;
   while (1)
@@ -251,22 +385,30 @@ gfc_match_omp_clauses (gfc_omp_clauses **cp, int mask)
       if ((mask & OMP_CLAUSE_REDUCTION)
          && gfc_match ("reduction ( ") == MATCH_YES)
        {
-         int reduction = OMP_LIST_NUM;
-         char buffer[GFC_MAX_SYMBOL_LEN + 1];
+         gfc_omp_reduction_op rop = OMP_REDUCTION_NONE;
+         char buffer[GFC_MAX_SYMBOL_LEN + 3];
          if (gfc_match_char ('+') == MATCH_YES)
-           reduction = OMP_LIST_PLUS;
+           rop = OMP_REDUCTION_PLUS;
          else if (gfc_match_char ('*') == MATCH_YES)
-           reduction = OMP_LIST_MULT;
+           rop = OMP_REDUCTION_TIMES;
          else if (gfc_match_char ('-') == MATCH_YES)
-           reduction = OMP_LIST_SUB;
+           rop = OMP_REDUCTION_MINUS;
          else if (gfc_match (".and.") == MATCH_YES)
-           reduction = OMP_LIST_AND;
+           rop = OMP_REDUCTION_AND;
          else if (gfc_match (".or.") == MATCH_YES)
-           reduction = OMP_LIST_OR;
+           rop = OMP_REDUCTION_OR;
          else if (gfc_match (".eqv.") == MATCH_YES)
-           reduction = OMP_LIST_EQV;
+           rop = OMP_REDUCTION_EQV;
          else if (gfc_match (".neqv.") == MATCH_YES)
-           reduction = OMP_LIST_NEQV;
+           rop = OMP_REDUCTION_NEQV;
+         if (rop != OMP_REDUCTION_NONE)
+           snprintf (buffer, sizeof buffer,
+                     "operator %s", gfc_op2string ((gfc_intrinsic_op) rop));
+         else if (gfc_match_defined_op_name (buffer + 1, 1) == MATCH_YES)
+           {
+             buffer[0] = '.';
+             strcat (buffer, ".");
+           }
          else if (gfc_match_name (buffer) == MATCH_YES)
            {
              gfc_symbol *sym;
@@ -294,40 +436,64 @@ gfc_match_omp_clauses (gfc_omp_clauses **cp, int mask)
                           || sym->attr.if_source != IFSRC_UNKNOWN
                           || sym == sym->ns->proc_name)
                    {
-                     gfc_error_now ("%s is not INTRINSIC procedure name "
-                                    "at %C", buffer);
                      sym = NULL;
+                     n = NULL;
                    }
                  else
                    n = sym->name;
                }
-             if (strcmp (n, "max") == 0)
-               reduction = OMP_LIST_MAX;
+             if (n == NULL)
+               rop = OMP_REDUCTION_NONE;
+             else if (strcmp (n, "max") == 0)
+               rop = OMP_REDUCTION_MAX;
              else if (strcmp (n, "min") == 0)
-               reduction = OMP_LIST_MIN;
+               rop = OMP_REDUCTION_MIN;
              else if (strcmp (n, "iand") == 0)
-               reduction = OMP_LIST_IAND;
+               rop = OMP_REDUCTION_IAND;
              else if (strcmp (n, "ior") == 0)
-               reduction = OMP_LIST_IOR;
+               rop = OMP_REDUCTION_IOR;
              else if (strcmp (n, "ieor") == 0)
-               reduction = OMP_LIST_IEOR;
-             if (reduction != OMP_LIST_NUM
+               rop = OMP_REDUCTION_IEOR;
+             if (rop != OMP_REDUCTION_NONE
                  && sym != NULL
                  && ! sym->attr.intrinsic
                  && ! sym->attr.use_assoc
                  && ((sym->attr.flavor == FL_UNKNOWN
-                      && !gfc_add_flavor (&sym->attr, FL_PROCEDURE, sym->name, NULL))
+                      && !gfc_add_flavor (&sym->attr, FL_PROCEDURE,
+                                          sym->name, NULL))
                      || !gfc_add_intrinsic (&sym->attr, NULL)))
+               rop = OMP_REDUCTION_NONE;
+           }
+         gfc_omp_udr *udr = gfc_find_omp_udr (gfc_current_ns, buffer, NULL);
+         gfc_omp_namelist **head = NULL;
+         if (rop == OMP_REDUCTION_NONE && udr)
+           rop = OMP_REDUCTION_USER;
+
+         if (gfc_match_omp_variable_list (" :",
+                                          &c->lists[OMP_LIST_REDUCTION],
+                                          false, NULL, &head) == MATCH_YES)
+           {
+             gfc_omp_namelist *n;
+             if (rop == OMP_REDUCTION_NONE)
                {
-                 gfc_free_omp_clauses (c);
-                 return MATCH_ERROR;
+                 n = *head;
+                 *head = NULL;
+                 gfc_error_now ("!$OMP DECLARE REDUCTION %s not found "
+                                "at %L", buffer, &old_loc);
+                 gfc_free_omp_namelist (n);
                }
+             else
+               for (n = *head; n; n = n->next)
+                 {
+                   n->u.reduction_op = rop;
+                   if (udr)
+                     {
+                       n->udr = gfc_get_omp_namelist_udr ();
+                       n->udr->udr = udr;
+                     }
+                 }
+             continue;
            }
-         if (reduction != OMP_LIST_NUM
-             && gfc_match_omp_variable_list (" :", &c->lists[reduction],
-                                             false)
-                == MATCH_YES)
-           continue;
          else
            gfc_current_locus = old_loc;
        }
@@ -419,6 +585,188 @@ gfc_match_omp_clauses (gfc_omp_clauses **cp, int mask)
              continue;
            }
        }
+      if ((mask & OMP_CLAUSE_INBRANCH) && !c->inbranch && !c->notinbranch
+         && gfc_match ("inbranch") == MATCH_YES)
+       {
+         c->inbranch = needs_space = true;
+         continue;
+       }
+      if ((mask & OMP_CLAUSE_NOTINBRANCH) && !c->notinbranch && !c->inbranch
+         && gfc_match ("notinbranch") == MATCH_YES)
+       {
+         c->notinbranch = needs_space = true;
+         continue;
+       }
+      if ((mask & OMP_CLAUSE_PROC_BIND)
+         && c->proc_bind == OMP_PROC_BIND_UNKNOWN)
+       {
+         if (gfc_match ("proc_bind ( master )") == MATCH_YES)
+           c->proc_bind = OMP_PROC_BIND_MASTER;
+         else if (gfc_match ("proc_bind ( spread )") == MATCH_YES)
+           c->proc_bind = OMP_PROC_BIND_SPREAD;
+         else if (gfc_match ("proc_bind ( close )") == MATCH_YES)
+           c->proc_bind = OMP_PROC_BIND_CLOSE;
+         if (c->proc_bind != OMP_PROC_BIND_UNKNOWN)
+           continue;
+       }
+      if ((mask & OMP_CLAUSE_SAFELEN) && c->safelen_expr == NULL
+         && gfc_match ("safelen ( %e )", &c->safelen_expr) == MATCH_YES)
+       continue;
+      if ((mask & OMP_CLAUSE_SIMDLEN) && c->simdlen_expr == NULL
+         && gfc_match ("simdlen ( %e )", &c->simdlen_expr) == MATCH_YES)
+       continue;
+      if ((mask & OMP_CLAUSE_UNIFORM)
+         && gfc_match_omp_variable_list ("uniform (",
+                                         &c->lists[OMP_LIST_UNIFORM], false)
+            == MATCH_YES)
+       continue;
+      bool end_colon = false;
+      gfc_omp_namelist **head = NULL;
+      old_loc = gfc_current_locus;
+      if ((mask & OMP_CLAUSE_ALIGNED)
+         && gfc_match_omp_variable_list ("aligned (",
+                                         &c->lists[OMP_LIST_ALIGNED], false,
+                                         &end_colon, &head)
+            == MATCH_YES)
+       {
+         gfc_expr *alignment = NULL;
+         gfc_omp_namelist *n;
+
+         if (end_colon
+             && gfc_match (" %e )", &alignment) != MATCH_YES)
+           {
+             gfc_free_omp_namelist (*head);
+             gfc_current_locus = old_loc;
+             *head = NULL;
+             break;
+           }
+         for (n = *head; n; n = n->next)
+           if (n->next && alignment)
+             n->expr = gfc_copy_expr (alignment);
+           else
+             n->expr = alignment;
+         continue;
+       }
+      end_colon = false;
+      head = NULL;
+      old_loc = gfc_current_locus;
+      if ((mask & OMP_CLAUSE_LINEAR)
+         && gfc_match_omp_variable_list ("linear (",
+                                         &c->lists[OMP_LIST_LINEAR], false,
+                                         &end_colon, &head)
+            == MATCH_YES)
+       {
+         gfc_expr *step = NULL;
+
+         if (end_colon
+             && gfc_match (" %e )", &step) != MATCH_YES)
+           {
+             gfc_free_omp_namelist (*head);
+             gfc_current_locus = old_loc;
+             *head = NULL;
+             break;
+           }
+         else if (!end_colon)
+           {
+             step = gfc_get_constant_expr (BT_INTEGER,
+                                           gfc_default_integer_kind,
+                                           &old_loc);
+             mpz_set_si (step->value.integer, 1);
+           }
+         (*head)->expr = step;
+         continue;
+       }
+      if ((mask & OMP_CLAUSE_DEPEND)
+         && gfc_match ("depend ( ") == MATCH_YES)
+       {
+         match m = MATCH_YES;
+         gfc_omp_depend_op depend_op = OMP_DEPEND_OUT;
+         if (gfc_match ("inout") == MATCH_YES)
+           depend_op = OMP_DEPEND_INOUT;
+         else if (gfc_match ("in") == MATCH_YES)
+           depend_op = OMP_DEPEND_IN;
+         else if (gfc_match ("out") == MATCH_YES)
+           depend_op = OMP_DEPEND_OUT;
+         else
+           m = MATCH_NO;
+         head = NULL;
+         if (m == MATCH_YES
+             && gfc_match_omp_variable_list (" : ",
+                                             &c->lists[OMP_LIST_DEPEND],
+                                             false, NULL, &head, true)
+                == MATCH_YES)
+           {
+             gfc_omp_namelist *n;
+             for (n = *head; n; n = n->next)
+               n->u.depend_op = depend_op;
+             continue;
+           }
+         else
+           gfc_current_locus = old_loc;
+       }
+      if ((mask & OMP_CLAUSE_DIST_SCHEDULE)
+         && c->dist_sched_kind == OMP_SCHED_NONE
+         && gfc_match ("dist_schedule ( static") == MATCH_YES)
+       {
+         match m = MATCH_NO;
+         c->dist_sched_kind = OMP_SCHED_STATIC;
+         m = gfc_match (" , %e )", &c->dist_chunk_size);
+         if (m != MATCH_YES)
+           m = gfc_match_char (')');
+         if (m != MATCH_YES)
+           {
+             c->dist_sched_kind = OMP_SCHED_NONE;
+             gfc_current_locus = old_loc;
+           }
+         else
+           continue;
+       }
+      if ((mask & OMP_CLAUSE_NUM_TEAMS) && c->num_teams == NULL
+         && gfc_match ("num_teams ( %e )", &c->num_teams) == MATCH_YES)
+       continue;
+      if ((mask & OMP_CLAUSE_DEVICE) && c->device == NULL
+         && gfc_match ("device ( %e )", &c->device) == MATCH_YES)
+       continue;
+      if ((mask & OMP_CLAUSE_THREAD_LIMIT) && c->thread_limit == NULL
+         && gfc_match ("thread_limit ( %e )", &c->thread_limit) == MATCH_YES)
+       continue;
+      if ((mask & OMP_CLAUSE_MAP)
+         && gfc_match ("map ( ") == MATCH_YES)
+       {
+         gfc_omp_map_op map_op = OMP_MAP_TOFROM;
+         if (gfc_match ("alloc : ") == MATCH_YES)
+           map_op = OMP_MAP_ALLOC;
+         else if (gfc_match ("tofrom : ") == MATCH_YES)
+           map_op = OMP_MAP_TOFROM;
+         else if (gfc_match ("to : ") == MATCH_YES)
+           map_op = OMP_MAP_TO;
+         else if (gfc_match ("from : ") == MATCH_YES)
+           map_op = OMP_MAP_FROM;
+         head = NULL;
+         if (gfc_match_omp_variable_list ("", &c->lists[OMP_LIST_MAP],
+                                          false, NULL, &head, true)
+             == MATCH_YES)
+           {
+             gfc_omp_namelist *n;
+             for (n = *head; n; n = n->next)
+               n->u.map_op = map_op;
+             continue;
+           }
+         else
+           gfc_current_locus = old_loc;
+       }
+      if ((mask & OMP_CLAUSE_TO)
+         && gfc_match_omp_variable_list ("to (",
+                                         &c->lists[OMP_LIST_TO], false,
+                                         NULL, &head, true)
+            == MATCH_YES)
+       continue;
+      if ((mask & OMP_CLAUSE_FROM)
+         && gfc_match_omp_variable_list ("from (",
+                                         &c->lists[OMP_LIST_FROM], false,
+                                         NULL, &head, true)
+            == MATCH_YES)
+       continue;
 
       break;
     }
@@ -436,7 +784,10 @@ gfc_match_omp_clauses (gfc_omp_clauses **cp, int mask)
 #define OMP_PARALLEL_CLAUSES \
   (OMP_CLAUSE_PRIVATE | OMP_CLAUSE_FIRSTPRIVATE | OMP_CLAUSE_SHARED    \
    | OMP_CLAUSE_COPYIN | OMP_CLAUSE_REDUCTION | OMP_CLAUSE_IF          \
-   | OMP_CLAUSE_NUM_THREADS | OMP_CLAUSE_DEFAULT)
+   | OMP_CLAUSE_NUM_THREADS | OMP_CLAUSE_DEFAULT | OMP_CLAUSE_PROC_BIND)
+#define OMP_DECLARE_SIMD_CLAUSES \
+  (OMP_CLAUSE_SIMDLEN | OMP_CLAUSE_LINEAR | OMP_CLAUSE_UNIFORM         \
+   | OMP_CLAUSE_ALIGNED | OMP_CLAUSE_INBRANCH | OMP_CLAUSE_NOTINBRANCH)
 #define OMP_DO_CLAUSES \
   (OMP_CLAUSE_PRIVATE | OMP_CLAUSE_FIRSTPRIVATE                                \
    | OMP_CLAUSE_LASTPRIVATE | OMP_CLAUSE_REDUCTION                     \
@@ -444,102 +795,117 @@ gfc_match_omp_clauses (gfc_omp_clauses **cp, int mask)
 #define OMP_SECTIONS_CLAUSES \
   (OMP_CLAUSE_PRIVATE | OMP_CLAUSE_FIRSTPRIVATE                                \
    | OMP_CLAUSE_LASTPRIVATE | OMP_CLAUSE_REDUCTION)
+#define OMP_SIMD_CLAUSES \
+  (OMP_CLAUSE_PRIVATE | OMP_CLAUSE_LASTPRIVATE | OMP_CLAUSE_REDUCTION  \
+   | OMP_CLAUSE_COLLAPSE | OMP_CLAUSE_SAFELEN | OMP_CLAUSE_LINEAR      \
+   | OMP_CLAUSE_ALIGNED)
 #define OMP_TASK_CLAUSES \
   (OMP_CLAUSE_PRIVATE | OMP_CLAUSE_FIRSTPRIVATE | OMP_CLAUSE_SHARED    \
    | OMP_CLAUSE_IF | OMP_CLAUSE_DEFAULT | OMP_CLAUSE_UNTIED            \
-   | OMP_CLAUSE_FINAL | OMP_CLAUSE_MERGEABLE)
-
-match
-gfc_match_omp_parallel (void)
-{
-  gfc_omp_clauses *c;
-  if (gfc_match_omp_clauses (&c, OMP_PARALLEL_CLAUSES) != MATCH_YES)
-    return MATCH_ERROR;
-  new_st.op = EXEC_OMP_PARALLEL;
-  new_st.ext.omp_clauses = c;
-  return MATCH_YES;
-}
+   | OMP_CLAUSE_FINAL | OMP_CLAUSE_MERGEABLE | OMP_CLAUSE_DEPEND)
+#define OMP_TARGET_CLAUSES \
+  (OMP_CLAUSE_DEVICE | OMP_CLAUSE_MAP | OMP_CLAUSE_IF)
+#define OMP_TARGET_DATA_CLAUSES \
+  (OMP_CLAUSE_DEVICE | OMP_CLAUSE_MAP | OMP_CLAUSE_IF)
+#define OMP_TARGET_UPDATE_CLAUSES \
+  (OMP_CLAUSE_DEVICE | OMP_CLAUSE_IF | OMP_CLAUSE_TO | OMP_CLAUSE_FROM)
+#define OMP_TEAMS_CLAUSES \
+  (OMP_CLAUSE_NUM_TEAMS | OMP_CLAUSE_THREAD_LIMIT | OMP_CLAUSE_DEFAULT \
+   | OMP_CLAUSE_PRIVATE | OMP_CLAUSE_FIRSTPRIVATE | OMP_CLAUSE_SHARED  \
+   | OMP_CLAUSE_REDUCTION)
+#define OMP_DISTRIBUTE_CLAUSES \
+  (OMP_CLAUSE_PRIVATE | OMP_CLAUSE_FIRSTPRIVATE | OMP_CLAUSE_COLLAPSE  \
+   | OMP_CLAUSE_DIST_SCHEDULE)
 
 
-match
-gfc_match_omp_task (void)
+static match
+match_omp (gfc_exec_op op, unsigned int mask)
 {
   gfc_omp_clauses *c;
-  if (gfc_match_omp_clauses (&c, OMP_TASK_CLAUSES) != MATCH_YES)
+  if (gfc_match_omp_clauses (&c, mask) != MATCH_YES)
     return MATCH_ERROR;
-  new_st.op = EXEC_OMP_TASK;
+  new_st.op = op;
   new_st.ext.omp_clauses = c;
   return MATCH_YES;
 }
 
 
 match
-gfc_match_omp_taskwait (void)
+gfc_match_omp_critical (void)
 {
+  char n[GFC_MAX_SYMBOL_LEN+1];
+
+  if (gfc_match (" ( %n )", n) != MATCH_YES)
+    n[0] = '\0';
   if (gfc_match_omp_eos () != MATCH_YES)
     {
-      gfc_error ("Unexpected junk after TASKWAIT clause at %C");
+      gfc_error ("Unexpected junk after $OMP CRITICAL statement at %C");
       return MATCH_ERROR;
     }
-  new_st.op = EXEC_OMP_TASKWAIT;
-  new_st.ext.omp_clauses = NULL;
+  new_st.op = EXEC_OMP_CRITICAL;
+  new_st.ext.omp_name = n[0] ? xstrdup (n) : NULL;
   return MATCH_YES;
 }
 
 
 match
-gfc_match_omp_taskyield (void)
+gfc_match_omp_distribute (void)
 {
-  if (gfc_match_omp_eos () != MATCH_YES)
-    {
-      gfc_error ("Unexpected junk after TASKYIELD clause at %C");
-      return MATCH_ERROR;
-    }
-  new_st.op = EXEC_OMP_TASKYIELD;
-  new_st.ext.omp_clauses = NULL;
-  return MATCH_YES;
+  return match_omp (EXEC_OMP_DISTRIBUTE, OMP_DISTRIBUTE_CLAUSES);
 }
 
 
 match
-gfc_match_omp_critical (void)
+gfc_match_omp_distribute_parallel_do (void)
 {
-  char n[GFC_MAX_SYMBOL_LEN+1];
+  return match_omp (EXEC_OMP_DISTRIBUTE_PARALLEL_DO,
+                   OMP_DISTRIBUTE_CLAUSES | OMP_PARALLEL_CLAUSES
+                   | OMP_DO_CLAUSES);
+}
 
-  if (gfc_match (" ( %n )", n) != MATCH_YES)
-    n[0] = '\0';
-  if (gfc_match_omp_eos () != MATCH_YES)
-    {
-      gfc_error ("Unexpected junk after $OMP CRITICAL statement at %C");
-      return MATCH_ERROR;
-    }
-  new_st.op = EXEC_OMP_CRITICAL;
-  new_st.ext.omp_name = n[0] ? xstrdup (n) : NULL;
-  return MATCH_YES;
+
+match
+gfc_match_omp_distribute_parallel_do_simd (void)
+{
+  return match_omp (EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD,
+                   (OMP_DISTRIBUTE_CLAUSES | OMP_PARALLEL_CLAUSES
+                    | OMP_DO_CLAUSES | OMP_SIMD_CLAUSES)
+                   & ~OMP_CLAUSE_ORDERED);
+}
+
+
+match
+gfc_match_omp_distribute_simd (void)
+{
+  return match_omp (EXEC_OMP_DISTRIBUTE_SIMD,
+                   OMP_DISTRIBUTE_CLAUSES | OMP_SIMD_CLAUSES);
 }
 
 
 match
 gfc_match_omp_do (void)
 {
-  gfc_omp_clauses *c;
-  if (gfc_match_omp_clauses (&c, OMP_DO_CLAUSES) != MATCH_YES)
-    return MATCH_ERROR;
-  new_st.op = EXEC_OMP_DO;
-  new_st.ext.omp_clauses = c;
-  return MATCH_YES;
+  return match_omp (EXEC_OMP_DO, OMP_DO_CLAUSES);
+}
+
+
+match
+gfc_match_omp_do_simd (void)
+{
+  return match_omp (EXEC_OMP_DO_SIMD, ((OMP_DO_CLAUSES | OMP_SIMD_CLAUSES)
+                                      & ~OMP_CLAUSE_ORDERED));
 }
 
 
 match
 gfc_match_omp_flush (void)
 {
-  gfc_namelist *list = NULL;
+  gfc_omp_namelist *list = NULL;
   gfc_match_omp_variable_list (" (", &list, true);
   if (gfc_match_omp_eos () != MATCH_YES)
     {
       gfc_error ("Unexpected junk after $OMP FLUSH statement at %C");
-      gfc_free_namelist (list);
+      gfc_free_omp_namelist (list);
       return MATCH_ERROR;
     }
   new_st.op = EXEC_OMP_FLUSH;
@@ -549,65 +915,582 @@ gfc_match_omp_flush (void)
 
 
 match
-gfc_match_omp_threadprivate (void)
+gfc_match_omp_declare_simd (void)
+{
+  locus where = gfc_current_locus;
+  gfc_symbol *proc_name;
+  gfc_omp_clauses *c;
+  gfc_omp_declare_simd *ods;
+
+  if (gfc_match (" ( %s ) ", &proc_name) != MATCH_YES)
+    return MATCH_ERROR;
+
+  if (gfc_match_omp_clauses (&c, OMP_DECLARE_SIMD_CLAUSES, true,
+                            false) != MATCH_YES)
+    return MATCH_ERROR;
+
+  ods = gfc_get_omp_declare_simd ();
+  ods->where = where;
+  ods->proc_name = proc_name;
+  ods->clauses = c;
+  ods->next = gfc_current_ns->omp_declare_simd;
+  gfc_current_ns->omp_declare_simd = ods;
+  return MATCH_YES;
+}
+
+
+static bool
+match_udr_expr (gfc_symtree *omp_sym1, gfc_symtree *omp_sym2)
 {
-  locus old_loc;
-  char n[GFC_MAX_SYMBOL_LEN+1];
-  gfc_symbol *sym;
   match m;
+  locus old_loc = gfc_current_locus;
+  char sname[GFC_MAX_SYMBOL_LEN + 1];
+  gfc_symbol *sym;
+  gfc_namespace *ns = gfc_current_ns;
+  gfc_expr *lvalue = NULL, *rvalue = NULL;
   gfc_symtree *st;
+  gfc_actual_arglist *arglist;
 
-  old_loc = gfc_current_locus;
-
-  m = gfc_match (" (");
+  m = gfc_match (" %v =", &lvalue);
   if (m != MATCH_YES)
-    return m;
-
-  for (;;)
+    gfc_current_locus = old_loc;
+  else
     {
-      m = gfc_match_symbol (&sym, 0);
-      switch (m)
+      m = gfc_match (" %e )", &rvalue);
+      if (m == MATCH_YES)
        {
-       case MATCH_YES:
-         if (sym->attr.in_common)
-           gfc_error_now ("Threadprivate variable at %C is an element of "
-                          "a COMMON block");
-         else if (!gfc_add_threadprivate (&sym->attr, sym->name, &sym->declared_at))
-           goto cleanup;
-         goto next_item;
-       case MATCH_NO:
-         break;
-       case MATCH_ERROR:
-         goto cleanup;
+         ns->code = gfc_get_code (EXEC_ASSIGN);
+         ns->code->expr1 = lvalue;
+         ns->code->expr2 = rvalue;
+         ns->code->loc = old_loc;
+         return true;
        }
 
-      m = gfc_match (" / %n /", n);
-      if (m == MATCH_ERROR)
-       goto cleanup;
-      if (m == MATCH_NO || n[0] == '\0')
-       goto syntax;
+      gfc_current_locus = old_loc;
+      gfc_free_expr (lvalue);
+    }
 
-      st = gfc_find_symtree (gfc_current_ns->common_root, n);
-      if (st == NULL)
+  m = gfc_match (" %n", sname);
+  if (m != MATCH_YES)
+    return false;
+
+  if (strcmp (sname, omp_sym1->name) == 0
+      || strcmp (sname, omp_sym2->name) == 0)
+    return false;
+
+  gfc_current_ns = ns->parent;
+  if (gfc_get_ha_sym_tree (sname, &st))
+    return false;
+
+  sym = st->n.sym;
+  if (sym->attr.flavor != FL_PROCEDURE
+      && sym->attr.flavor != FL_UNKNOWN)
+    return false;
+
+  if (!sym->attr.generic
+      && !sym->attr.subroutine
+      && !sym->attr.function)
+    {
+      if (!(sym->attr.external && !sym->attr.referenced))
        {
-         gfc_error ("COMMON block /%s/ not found at %C", n);
-         goto cleanup;
+         /* ...create a symbol in this scope...  */
+         if (sym->ns != gfc_current_ns
+             && gfc_get_sym_tree (sname, NULL, &st, false) == 1)
+           return false;
+
+         if (sym != st->n.sym)
+           sym = st->n.sym;
        }
-      st->n.common->threadprivate = 1;
-      for (sym = st->n.common->head; sym; sym = sym->common_next)
-       if (!gfc_add_threadprivate (&sym->attr, sym->name, &sym->declared_at))
-         goto cleanup;
 
-    next_item:
-      if (gfc_match_char (')') == MATCH_YES)
-       break;
-      if (gfc_match_char (',') != MATCH_YES)
-       goto syntax;
+      /* ...and then to try to make the symbol into a subroutine.  */
+      if (!gfc_add_subroutine (&sym->attr, sym->name, NULL))
+       return false;
     }
 
-  return MATCH_YES;
+  gfc_set_sym_referenced (sym);
+  gfc_gobble_whitespace ();
+  if (gfc_peek_ascii_char () != '(')
+    return false;
 
-syntax:
+  gfc_current_ns = ns;
+  m = gfc_match_actual_arglist (1, &arglist);
+  if (m != MATCH_YES)
+    return false;
+
+  if (gfc_match_char (')') != MATCH_YES)
+    return false;
+
+  ns->code = gfc_get_code (EXEC_CALL);
+  ns->code->symtree = st;
+  ns->code->ext.actual = arglist;
+  ns->code->loc = old_loc;
+  return true;
+}
+
+static bool
+gfc_omp_udr_predef (gfc_omp_reduction_op rop, const char *name,
+                   gfc_typespec *ts, const char **n)
+{
+  if (!gfc_numeric_ts (ts) && ts->type != BT_LOGICAL)
+    return false;
+
+  switch (rop)
+    {
+    case OMP_REDUCTION_PLUS:
+    case OMP_REDUCTION_MINUS:
+    case OMP_REDUCTION_TIMES:
+      return ts->type != BT_LOGICAL;
+    case OMP_REDUCTION_AND:
+    case OMP_REDUCTION_OR:
+    case OMP_REDUCTION_EQV:
+    case OMP_REDUCTION_NEQV:
+      return ts->type == BT_LOGICAL;
+    case OMP_REDUCTION_USER:
+      if (name[0] != '.' && (ts->type == BT_INTEGER || ts->type == BT_REAL))
+       {
+         gfc_symbol *sym;
+
+         gfc_find_symbol (name, NULL, 1, &sym);
+         if (sym != NULL)
+           {
+             if (sym->attr.intrinsic)
+               *n = sym->name;
+             else if ((sym->attr.flavor != FL_UNKNOWN
+                       && sym->attr.flavor != FL_PROCEDURE)
+                      || sym->attr.external
+                      || sym->attr.generic
+                      || sym->attr.entry
+                      || sym->attr.result
+                      || sym->attr.dummy
+                      || sym->attr.subroutine
+                      || sym->attr.pointer
+                      || sym->attr.target
+                      || sym->attr.cray_pointer
+                      || sym->attr.cray_pointee
+                      || (sym->attr.proc != PROC_UNKNOWN
+                          && sym->attr.proc != PROC_INTRINSIC)
+                      || sym->attr.if_source != IFSRC_UNKNOWN
+                      || sym == sym->ns->proc_name)
+               *n = NULL;
+             else
+               *n = sym->name;
+           }
+         else
+           *n = name;
+         if (*n
+             && (strcmp (*n, "max") == 0 || strcmp (*n, "min") == 0))
+           return true;
+         else if (*n
+                  && ts->type == BT_INTEGER
+                  && (strcmp (*n, "iand") == 0
+                      || strcmp (*n, "ior") == 0
+                      || strcmp (*n, "ieor") == 0))
+           return true;
+       }
+      break;
+    default:
+      break;
+    }
+  return false;
+}
+
+gfc_omp_udr *
+gfc_omp_udr_find (gfc_symtree *st, gfc_typespec *ts)
+{
+  gfc_omp_udr *omp_udr;
+
+  if (st == NULL)
+    return NULL;
+
+  for (omp_udr = st->n.omp_udr; omp_udr; omp_udr = omp_udr->next)
+    if (omp_udr->ts.type == ts->type
+       || ((omp_udr->ts.type == BT_DERIVED || omp_udr->ts.type == BT_CLASS)
+           && (ts->type == BT_DERIVED && ts->type == BT_CLASS)))
+      {
+       if (omp_udr->ts.type == BT_DERIVED || omp_udr->ts.type == BT_CLASS)
+         {
+           if (strcmp (omp_udr->ts.u.derived->name, ts->u.derived->name) == 0)
+             return omp_udr;
+         }
+       else if (omp_udr->ts.kind == ts->kind)
+         {
+           if (omp_udr->ts.type == BT_CHARACTER)
+             {
+               if (omp_udr->ts.u.cl->length == NULL
+                   || ts->u.cl->length == NULL)
+                 return omp_udr;
+               if (omp_udr->ts.u.cl->length->expr_type != EXPR_CONSTANT)
+                 return omp_udr;
+               if (ts->u.cl->length->expr_type != EXPR_CONSTANT)
+                 return omp_udr;
+               if (omp_udr->ts.u.cl->length->ts.type != BT_INTEGER)
+                 return omp_udr;
+               if (ts->u.cl->length->ts.type != BT_INTEGER)
+                 return omp_udr;
+               if (gfc_compare_expr (omp_udr->ts.u.cl->length,
+                                     ts->u.cl->length, INTRINSIC_EQ) != 0)
+                 continue;
+             }
+           return omp_udr;
+         }
+      }
+  return NULL;
+}
+
+match
+gfc_match_omp_declare_reduction (void)
+{
+  match m;
+  gfc_intrinsic_op op;
+  char name[GFC_MAX_SYMBOL_LEN + 3];
+  auto_vec<gfc_typespec, 5> tss;
+  gfc_typespec ts;
+  unsigned int i;
+  gfc_symtree *st;
+  locus where = gfc_current_locus;
+  locus end_loc = gfc_current_locus;
+  bool end_loc_set = false;
+  gfc_omp_reduction_op rop = OMP_REDUCTION_NONE;
+
+  if (gfc_match_char ('(') != MATCH_YES)
+    return MATCH_ERROR;
+
+  m = gfc_match (" %o : ", &op);
+  if (m == MATCH_ERROR)
+    return MATCH_ERROR;
+  if (m == MATCH_YES)
+    {
+      snprintf (name, sizeof name, "operator %s", gfc_op2string (op));
+      rop = (gfc_omp_reduction_op) op;
+    }
+  else
+    {
+      m = gfc_match_defined_op_name (name + 1, 1);
+      if (m == MATCH_ERROR)
+       return MATCH_ERROR;
+      if (m == MATCH_YES)
+       {
+         name[0] = '.';
+         strcat (name, ".");
+         if (gfc_match (" : ") != MATCH_YES)
+           return MATCH_ERROR;
+       }
+      else
+       {
+         if (gfc_match (" %n : ", name) != MATCH_YES)
+           return MATCH_ERROR;
+       }
+      rop = OMP_REDUCTION_USER;
+    }
+
+  m = gfc_match_type_spec (&ts);
+  if (m != MATCH_YES)
+    return MATCH_ERROR;
+  /* Treat len=: the same as len=*.  */
+  if (ts.type == BT_CHARACTER)
+    ts.deferred = false;
+  tss.safe_push (ts);
+
+  while (gfc_match_char (',') == MATCH_YES)
+    {
+      m = gfc_match_type_spec (&ts);
+      if (m != MATCH_YES)
+       return MATCH_ERROR;
+      tss.safe_push (ts);
+    }
+  if (gfc_match_char (':') != MATCH_YES)
+    return MATCH_ERROR;
+
+  st = gfc_find_symtree (gfc_current_ns->omp_udr_root, name);
+  for (i = 0; i < tss.length (); i++)
+    {
+      gfc_symtree *omp_out, *omp_in;
+      gfc_symtree *omp_priv = NULL, *omp_orig = NULL;
+      gfc_namespace *combiner_ns, *initializer_ns = NULL;
+      gfc_omp_udr *prev_udr, *omp_udr;
+      const char *predef_name = NULL;
+
+      omp_udr = gfc_get_omp_udr ();
+      omp_udr->name = gfc_get_string (name);
+      omp_udr->rop = rop;
+      omp_udr->ts = tss[i];
+      omp_udr->where = where;
+
+      gfc_current_ns = combiner_ns = gfc_get_namespace (gfc_current_ns, 1);
+      combiner_ns->proc_name = combiner_ns->parent->proc_name;
+
+      gfc_get_sym_tree ("omp_out", combiner_ns, &omp_out, false);
+      gfc_get_sym_tree ("omp_in", combiner_ns, &omp_in, false);
+      combiner_ns->omp_udr_ns = 1;
+      omp_out->n.sym->ts = tss[i];
+      omp_in->n.sym->ts = tss[i];
+      omp_out->n.sym->attr.omp_udr_artificial_var = 1;
+      omp_in->n.sym->attr.omp_udr_artificial_var = 1;
+      omp_out->n.sym->attr.flavor = FL_VARIABLE;
+      omp_in->n.sym->attr.flavor = FL_VARIABLE;
+      gfc_commit_symbols ();
+      omp_udr->combiner_ns = combiner_ns;
+      omp_udr->omp_out = omp_out->n.sym;
+      omp_udr->omp_in = omp_in->n.sym;
+
+      locus old_loc = gfc_current_locus;
+
+      if (!match_udr_expr (omp_out, omp_in))
+       {
+        syntax:
+         gfc_current_locus = old_loc;
+         gfc_current_ns = combiner_ns->parent;
+         gfc_free_omp_udr (omp_udr);
+         return MATCH_ERROR;
+       }
+
+      if (gfc_match (" initializer ( ") == MATCH_YES)
+       {
+         gfc_current_ns = combiner_ns->parent;
+         initializer_ns = gfc_get_namespace (gfc_current_ns, 1);
+         gfc_current_ns = initializer_ns;
+         initializer_ns->proc_name = initializer_ns->parent->proc_name;
+
+         gfc_get_sym_tree ("omp_priv", initializer_ns, &omp_priv, false);
+         gfc_get_sym_tree ("omp_orig", initializer_ns, &omp_orig, false);
+         initializer_ns->omp_udr_ns = 1;
+         omp_priv->n.sym->ts = tss[i];
+         omp_orig->n.sym->ts = tss[i];
+         omp_priv->n.sym->attr.omp_udr_artificial_var = 1;
+         omp_orig->n.sym->attr.omp_udr_artificial_var = 1;
+         omp_priv->n.sym->attr.flavor = FL_VARIABLE;
+         omp_orig->n.sym->attr.flavor = FL_VARIABLE;
+         gfc_commit_symbols ();
+         omp_udr->initializer_ns = initializer_ns;
+         omp_udr->omp_priv = omp_priv->n.sym;
+         omp_udr->omp_orig = omp_orig->n.sym;
+
+         if (!match_udr_expr (omp_priv, omp_orig))
+           goto syntax;
+       }
+
+      gfc_current_ns = combiner_ns->parent;
+      if (!end_loc_set)
+       {
+         end_loc_set = true;
+         end_loc = gfc_current_locus;
+       }
+      gfc_current_locus = old_loc;
+
+      prev_udr = gfc_omp_udr_find (st, &tss[i]);
+      if (gfc_omp_udr_predef (rop, name, &tss[i], &predef_name)
+         /* Don't error on !$omp declare reduction (min : integer : ...)
+            just yet, there could be integer :: min afterwards,
+            making it valid.  When the UDR is resolved, we'll get
+            to it again.  */
+         && (rop != OMP_REDUCTION_USER || name[0] == '.'))
+       {
+         if (predef_name)
+           gfc_error_now ("Redefinition of predefined %s "
+                          "!$OMP DECLARE REDUCTION at %L",
+                          predef_name, &where);
+         else
+           gfc_error_now ("Redefinition of predefined "
+                          "!$OMP DECLARE REDUCTION at %L", &where);
+       }
+      else if (prev_udr)
+       {
+         gfc_error_now ("Redefinition of !$OMP DECLARE REDUCTION at %L",
+                        &where);
+         gfc_error_now ("Previous !$OMP DECLARE REDUCTION at %L",
+                        &prev_udr->where);
+       }
+      else if (st)
+       {
+         omp_udr->next = st->n.omp_udr;
+         st->n.omp_udr = omp_udr;
+       }
+      else
+       {
+         st = gfc_new_symtree (&gfc_current_ns->omp_udr_root, name);
+         st->n.omp_udr = omp_udr;
+       }
+    }
+
+  if (end_loc_set)
+    {
+      gfc_current_locus = end_loc;
+      if (gfc_match_omp_eos () != MATCH_YES)
+       {
+         gfc_error ("Unexpected junk after !$OMP DECLARE REDUCTION at %C");
+         gfc_current_locus = where;
+         return MATCH_ERROR;
+       }
+
+      return MATCH_YES;
+    }
+  gfc_clear_error ();
+  return MATCH_ERROR;
+}
+
+
+match
+gfc_match_omp_declare_target (void)
+{
+  locus old_loc;
+  char n[GFC_MAX_SYMBOL_LEN+1];
+  gfc_symbol *sym;
+  match m;
+  gfc_symtree *st;
+
+  old_loc = gfc_current_locus;
+
+  m = gfc_match (" (");
+
+  if (gfc_current_ns->proc_name
+      && gfc_current_ns->proc_name->attr.if_source == IFSRC_IFBODY
+      && m == MATCH_YES)
+    {
+      gfc_error ("Only the !$OMP DECLARE TARGET form without "
+                "list is allowed in interface block at %C");
+      goto cleanup;
+    }
+
+  if (m == MATCH_NO
+      && gfc_current_ns->proc_name
+      && gfc_match_omp_eos () == MATCH_YES)
+    {
+      if (!gfc_add_omp_declare_target (&gfc_current_ns->proc_name->attr,
+                                      gfc_current_ns->proc_name->name,
+                                      &old_loc))
+       goto cleanup;
+      return MATCH_YES;
+    }
+
+  if (m != MATCH_YES)
+    return m;
+
+  for (;;)
+    {
+      m = gfc_match_symbol (&sym, 0);
+      switch (m)
+       {
+       case MATCH_YES:
+         if (sym->attr.in_common)
+           gfc_error_now ("OMP DECLARE TARGET on a variable at %C is an "
+                          "element of a COMMON block");
+         else if (!gfc_add_omp_declare_target (&sym->attr, sym->name,
+                                               &sym->declared_at))
+           goto cleanup;
+         goto next_item;
+       case MATCH_NO:
+         break;
+       case MATCH_ERROR:
+         goto cleanup;
+       }
+
+      m = gfc_match (" / %n /", n);
+      if (m == MATCH_ERROR)
+       goto cleanup;
+      if (m == MATCH_NO || n[0] == '\0')
+       goto syntax;
+
+      st = gfc_find_symtree (gfc_current_ns->common_root, n);
+      if (st == NULL)
+       {
+         gfc_error ("COMMON block /%s/ not found at %C", n);
+         goto cleanup;
+       }
+      st->n.common->omp_declare_target = 1;
+      for (sym = st->n.common->head; sym; sym = sym->common_next)
+       if (!gfc_add_omp_declare_target (&sym->attr, sym->name,
+                                        &sym->declared_at))
+         goto cleanup;
+
+    next_item:
+      if (gfc_match_char (')') == MATCH_YES)
+       break;
+      if (gfc_match_char (',') != MATCH_YES)
+       goto syntax;
+    }
+
+  if (gfc_match_omp_eos () != MATCH_YES)
+    {
+      gfc_error ("Unexpected junk after !$OMP DECLARE TARGET at %C");
+      goto cleanup;
+    }
+  return MATCH_YES;
+
+syntax:
+  gfc_error ("Syntax error in !$OMP DECLARE TARGET list at %C");
+
+cleanup:
+  gfc_current_locus = old_loc;
+  return MATCH_ERROR;
+}
+
+
+match
+gfc_match_omp_threadprivate (void)
+{
+  locus old_loc;
+  char n[GFC_MAX_SYMBOL_LEN+1];
+  gfc_symbol *sym;
+  match m;
+  gfc_symtree *st;
+
+  old_loc = gfc_current_locus;
+
+  m = gfc_match (" (");
+  if (m != MATCH_YES)
+    return m;
+
+  for (;;)
+    {
+      m = gfc_match_symbol (&sym, 0);
+      switch (m)
+       {
+       case MATCH_YES:
+         if (sym->attr.in_common)
+           gfc_error_now ("Threadprivate variable at %C is an element of "
+                          "a COMMON block");
+         else if (!gfc_add_threadprivate (&sym->attr, sym->name, &sym->declared_at))
+           goto cleanup;
+         goto next_item;
+       case MATCH_NO:
+         break;
+       case MATCH_ERROR:
+         goto cleanup;
+       }
+
+      m = gfc_match (" / %n /", n);
+      if (m == MATCH_ERROR)
+       goto cleanup;
+      if (m == MATCH_NO || n[0] == '\0')
+       goto syntax;
+
+      st = gfc_find_symtree (gfc_current_ns->common_root, n);
+      if (st == NULL)
+       {
+         gfc_error ("COMMON block /%s/ not found at %C", n);
+         goto cleanup;
+       }
+      st->n.common->threadprivate = 1;
+      for (sym = st->n.common->head; sym; sym = sym->common_next)
+       if (!gfc_add_threadprivate (&sym->attr, sym->name, &sym->declared_at))
+         goto cleanup;
+
+    next_item:
+      if (gfc_match_char (')') == MATCH_YES)
+       break;
+      if (gfc_match_char (',') != MATCH_YES)
+       goto syntax;
+    }
+
+  if (gfc_match_omp_eos () != MATCH_YES)
+    {
+      gfc_error ("Unexpected junk after OMP THREADPRIVATE at %C");
+      goto cleanup;
+    }
+
+  return MATCH_YES;
+
+syntax:
   gfc_error ("Syntax error in !$OMP THREADPRIVATE list at %C");
 
 cleanup:
@@ -617,65 +1500,209 @@ cleanup:
 
 
 match
+gfc_match_omp_parallel (void)
+{
+  return match_omp (EXEC_OMP_PARALLEL, OMP_PARALLEL_CLAUSES);
+}
+
+
+match
 gfc_match_omp_parallel_do (void)
 {
-  gfc_omp_clauses *c;
-  if (gfc_match_omp_clauses (&c, OMP_PARALLEL_CLAUSES | OMP_DO_CLAUSES)
-      != MATCH_YES)
-    return MATCH_ERROR;
-  new_st.op = EXEC_OMP_PARALLEL_DO;
-  new_st.ext.omp_clauses = c;
-  return MATCH_YES;
+  return match_omp (EXEC_OMP_PARALLEL_DO,
+                   OMP_PARALLEL_CLAUSES | OMP_DO_CLAUSES);
+}
+
+
+match
+gfc_match_omp_parallel_do_simd (void)
+{
+  return match_omp (EXEC_OMP_PARALLEL_DO_SIMD,
+                   (OMP_PARALLEL_CLAUSES | OMP_DO_CLAUSES | OMP_SIMD_CLAUSES)
+                   & ~OMP_CLAUSE_ORDERED);
 }
 
 
 match
 gfc_match_omp_parallel_sections (void)
 {
-  gfc_omp_clauses *c;
-  if (gfc_match_omp_clauses (&c, OMP_PARALLEL_CLAUSES | OMP_SECTIONS_CLAUSES)
-      != MATCH_YES)
-    return MATCH_ERROR;
-  new_st.op = EXEC_OMP_PARALLEL_SECTIONS;
-  new_st.ext.omp_clauses = c;
-  return MATCH_YES;
+  return match_omp (EXEC_OMP_PARALLEL_SECTIONS,
+                   OMP_PARALLEL_CLAUSES | OMP_SECTIONS_CLAUSES);
 }
 
 
 match
 gfc_match_omp_parallel_workshare (void)
 {
-  gfc_omp_clauses *c;
-  if (gfc_match_omp_clauses (&c, OMP_PARALLEL_CLAUSES) != MATCH_YES)
-    return MATCH_ERROR;
-  new_st.op = EXEC_OMP_PARALLEL_WORKSHARE;
-  new_st.ext.omp_clauses = c;
-  return MATCH_YES;
+  return match_omp (EXEC_OMP_PARALLEL_WORKSHARE, OMP_PARALLEL_CLAUSES);
 }
 
 
 match
 gfc_match_omp_sections (void)
 {
-  gfc_omp_clauses *c;
-  if (gfc_match_omp_clauses (&c, OMP_SECTIONS_CLAUSES) != MATCH_YES)
-    return MATCH_ERROR;
-  new_st.op = EXEC_OMP_SECTIONS;
-  new_st.ext.omp_clauses = c;
-  return MATCH_YES;
+  return match_omp (EXEC_OMP_SECTIONS, OMP_SECTIONS_CLAUSES);
+}
+
+
+match
+gfc_match_omp_simd (void)
+{
+  return match_omp (EXEC_OMP_SIMD, OMP_SIMD_CLAUSES);
+}
+
+
+match
+gfc_match_omp_single (void)
+{
+  return match_omp (EXEC_OMP_SINGLE,
+                   OMP_CLAUSE_PRIVATE | OMP_CLAUSE_FIRSTPRIVATE);
+}
+
+
+match
+gfc_match_omp_task (void)
+{
+  return match_omp (EXEC_OMP_TASK, OMP_TASK_CLAUSES);
+}
+
+
+match
+gfc_match_omp_taskwait (void)
+{
+  if (gfc_match_omp_eos () != MATCH_YES)
+    {
+      gfc_error ("Unexpected junk after TASKWAIT clause at %C");
+      return MATCH_ERROR;
+    }
+  new_st.op = EXEC_OMP_TASKWAIT;
+  new_st.ext.omp_clauses = NULL;
+  return MATCH_YES;
+}
+
+
+match
+gfc_match_omp_taskyield (void)
+{
+  if (gfc_match_omp_eos () != MATCH_YES)
+    {
+      gfc_error ("Unexpected junk after TASKYIELD clause at %C");
+      return MATCH_ERROR;
+    }
+  new_st.op = EXEC_OMP_TASKYIELD;
+  new_st.ext.omp_clauses = NULL;
+  return MATCH_YES;
+}
+
+
+match
+gfc_match_omp_target (void)
+{
+  return match_omp (EXEC_OMP_TARGET, OMP_TARGET_CLAUSES);
+}
+
+
+match
+gfc_match_omp_target_data (void)
+{
+  return match_omp (EXEC_OMP_TARGET_DATA, OMP_TARGET_DATA_CLAUSES);
+}
+
+
+match
+gfc_match_omp_target_teams (void)
+{
+  return match_omp (EXEC_OMP_TARGET_TEAMS,
+                   OMP_TARGET_CLAUSES | OMP_TEAMS_CLAUSES);
+}
+
+
+match
+gfc_match_omp_target_teams_distribute (void)
+{
+  return match_omp (EXEC_OMP_TARGET_TEAMS_DISTRIBUTE,
+                   OMP_TARGET_CLAUSES | OMP_TEAMS_CLAUSES
+                   | OMP_DISTRIBUTE_CLAUSES);
+}
+
+
+match
+gfc_match_omp_target_teams_distribute_parallel_do (void)
+{
+  return match_omp (EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO,
+                   OMP_TARGET_CLAUSES | OMP_TEAMS_CLAUSES
+                   | OMP_DISTRIBUTE_CLAUSES | OMP_PARALLEL_CLAUSES
+                   | OMP_DO_CLAUSES);
+}
+
+
+match
+gfc_match_omp_target_teams_distribute_parallel_do_simd (void)
+{
+  return match_omp (EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD,
+                   (OMP_TARGET_CLAUSES | OMP_TEAMS_CLAUSES
+                    | OMP_DISTRIBUTE_CLAUSES | OMP_PARALLEL_CLAUSES
+                    | OMP_DO_CLAUSES | OMP_SIMD_CLAUSES)
+                   & ~OMP_CLAUSE_ORDERED);
+}
+
+
+match
+gfc_match_omp_target_teams_distribute_simd (void)
+{
+  return match_omp (EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD,
+                   OMP_TARGET_CLAUSES | OMP_TEAMS_CLAUSES
+                   | OMP_DISTRIBUTE_CLAUSES | OMP_SIMD_CLAUSES);
+}
+
+
+match
+gfc_match_omp_target_update (void)
+{
+  return match_omp (EXEC_OMP_TARGET_UPDATE, OMP_TARGET_UPDATE_CLAUSES);
+}
+
+
+match
+gfc_match_omp_teams (void)
+{
+  return match_omp (EXEC_OMP_TEAMS, OMP_TEAMS_CLAUSES);
+}
+
+
+match
+gfc_match_omp_teams_distribute (void)
+{
+  return match_omp (EXEC_OMP_TEAMS_DISTRIBUTE,
+                   OMP_TEAMS_CLAUSES | OMP_DISTRIBUTE_CLAUSES);
+}
+
+
+match
+gfc_match_omp_teams_distribute_parallel_do (void)
+{
+  return match_omp (EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO,
+                   OMP_TEAMS_CLAUSES | OMP_DISTRIBUTE_CLAUSES
+                   | OMP_PARALLEL_CLAUSES | OMP_DO_CLAUSES);
+}
+
+
+match
+gfc_match_omp_teams_distribute_parallel_do_simd (void)
+{
+  return match_omp (EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD,
+                   (OMP_TEAMS_CLAUSES | OMP_DISTRIBUTE_CLAUSES
+                    | OMP_PARALLEL_CLAUSES | OMP_DO_CLAUSES
+                    | OMP_SIMD_CLAUSES) & ~OMP_CLAUSE_ORDERED);
 }
 
 
 match
-gfc_match_omp_single (void)
+gfc_match_omp_teams_distribute_simd (void)
 {
-  gfc_omp_clauses *c;
-  if (gfc_match_omp_clauses (&c, OMP_CLAUSE_PRIVATE | OMP_CLAUSE_FIRSTPRIVATE)
-      != MATCH_YES)
-    return MATCH_ERROR;
-  new_st.op = EXEC_OMP_SINGLE;
-  new_st.ext.omp_clauses = c;
-  return MATCH_YES;
+  return match_omp (EXEC_OMP_TEAMS_DISTRIBUTE_SIMD,
+                   OMP_TEAMS_CLAUSES | OMP_DISTRIBUTE_CLAUSES
+                   | OMP_SIMD_CLAUSES);
 }
 
 
@@ -725,20 +1752,44 @@ match
 gfc_match_omp_atomic (void)
 {
   gfc_omp_atomic_op op = GFC_OMP_ATOMIC_UPDATE;
-  if (gfc_match ("% update") == MATCH_YES)
-    op = GFC_OMP_ATOMIC_UPDATE;
-  else if (gfc_match ("% read") == MATCH_YES)
-    op = GFC_OMP_ATOMIC_READ;
-  else if (gfc_match ("% write") == MATCH_YES)
-    op = GFC_OMP_ATOMIC_WRITE;
-  else if (gfc_match ("% capture") == MATCH_YES)
-    op = GFC_OMP_ATOMIC_CAPTURE;
+  int seq_cst = 0;
+  if (gfc_match ("% seq_cst") == MATCH_YES)
+    seq_cst = 1;
+  locus old_loc = gfc_current_locus;
+  if (seq_cst && gfc_match_char (',') == MATCH_YES)
+    seq_cst = 2;
+  if (seq_cst == 2
+      || gfc_match_space () == MATCH_YES)
+    {
+      gfc_gobble_whitespace ();
+      if (gfc_match ("update") == MATCH_YES)
+       op = GFC_OMP_ATOMIC_UPDATE;
+      else if (gfc_match ("read") == MATCH_YES)
+       op = GFC_OMP_ATOMIC_READ;
+      else if (gfc_match ("write") == MATCH_YES)
+       op = GFC_OMP_ATOMIC_WRITE;
+      else if (gfc_match ("capture") == MATCH_YES)
+       op = GFC_OMP_ATOMIC_CAPTURE;
+      else
+       {
+         if (seq_cst == 2)
+           gfc_current_locus = old_loc;
+         goto finish;
+       }
+      if (!seq_cst
+         && (gfc_match (", seq_cst") == MATCH_YES
+             || gfc_match ("% seq_cst") == MATCH_YES))
+       seq_cst = 1;
+    }
+ finish:
   if (gfc_match_omp_eos () != MATCH_YES)
     {
       gfc_error ("Unexpected junk after $OMP ATOMIC statement at %C");
       return MATCH_ERROR;
     }
   new_st.op = EXEC_OMP_ATOMIC;
+  if (seq_cst)
+    op = (gfc_omp_atomic_op) (op | GFC_OMP_ATOMIC_SEQ_CST);
   new_st.ext.omp_atomic = op;
   return MATCH_YES;
 }
@@ -759,6 +1810,73 @@ gfc_match_omp_barrier (void)
 
 
 match
+gfc_match_omp_taskgroup (void)
+{
+  if (gfc_match_omp_eos () != MATCH_YES)
+    {
+      gfc_error ("Unexpected junk after $OMP TASKGROUP statement at %C");
+      return MATCH_ERROR;
+    }
+  new_st.op = EXEC_OMP_TASKGROUP;
+  return MATCH_YES;
+}
+
+
+static enum gfc_omp_cancel_kind
+gfc_match_omp_cancel_kind (void)
+{
+  if (gfc_match_space () != MATCH_YES)
+    return OMP_CANCEL_UNKNOWN;
+  if (gfc_match ("parallel") == MATCH_YES)
+    return OMP_CANCEL_PARALLEL;
+  if (gfc_match ("sections") == MATCH_YES)
+    return OMP_CANCEL_SECTIONS;
+  if (gfc_match ("do") == MATCH_YES)
+    return OMP_CANCEL_DO;
+  if (gfc_match ("taskgroup") == MATCH_YES)
+    return OMP_CANCEL_TASKGROUP;
+  return OMP_CANCEL_UNKNOWN;
+}
+
+
+match
+gfc_match_omp_cancel (void)
+{
+  gfc_omp_clauses *c;
+  enum gfc_omp_cancel_kind kind = gfc_match_omp_cancel_kind ();
+  if (kind == OMP_CANCEL_UNKNOWN)
+    return MATCH_ERROR;
+  if (gfc_match_omp_clauses (&c, OMP_CLAUSE_IF, false) != MATCH_YES)
+    return MATCH_ERROR;
+  c->cancel = kind;
+  new_st.op = EXEC_OMP_CANCEL;
+  new_st.ext.omp_clauses = c;
+  return MATCH_YES;
+}
+
+
+match
+gfc_match_omp_cancellation_point (void)
+{
+  gfc_omp_clauses *c;
+  enum gfc_omp_cancel_kind kind = gfc_match_omp_cancel_kind ();
+  if (kind == OMP_CANCEL_UNKNOWN)
+    return MATCH_ERROR;
+  if (gfc_match_omp_eos () != MATCH_YES)
+    {
+      gfc_error ("Unexpected junk after $OMP CANCELLATION POINT statement "
+                "at %C");
+      return MATCH_ERROR;
+    }
+  c = gfc_get_omp_clauses ();
+  c->cancel = kind;
+  new_st.op = EXEC_OMP_CANCELLATION_POINT;
+  new_st.ext.omp_clauses = c;
+  return MATCH_YES;
+}
+
+
+match
 gfc_match_omp_end_nowait (void)
 {
   bool nowait = false;
@@ -793,17 +1911,116 @@ gfc_match_omp_end_single (void)
 }
 
 
+struct resolve_omp_udr_callback_data
+{
+  gfc_symbol *sym1, *sym2;
+};
+
+
+static int
+resolve_omp_udr_callback (gfc_expr **e, int *, void *data)
+{
+  struct resolve_omp_udr_callback_data *rcd
+    = (struct resolve_omp_udr_callback_data *) data;
+  if ((*e)->expr_type == EXPR_VARIABLE
+      && ((*e)->symtree->n.sym == rcd->sym1
+         || (*e)->symtree->n.sym == rcd->sym2))
+    {
+      gfc_ref *ref = gfc_get_ref ();
+      ref->type = REF_ARRAY;
+      ref->u.ar.where = (*e)->where;
+      ref->u.ar.as = (*e)->symtree->n.sym->as;
+      ref->u.ar.type = AR_FULL;
+      ref->u.ar.dimen = 0;
+      ref->next = (*e)->ref;
+      (*e)->ref = ref;
+    }
+  return 0;
+}
+
+
+static int
+resolve_omp_udr_callback2 (gfc_expr **e, int *, void *)
+{
+  if ((*e)->expr_type == EXPR_FUNCTION
+      && (*e)->value.function.isym == NULL)
+    {
+      gfc_symbol *sym = (*e)->symtree->n.sym;
+      if (!sym->attr.intrinsic
+         && sym->attr.if_source == IFSRC_UNKNOWN)
+       gfc_error ("Implicitly declared function %s used in "
+                  "!$OMP DECLARE REDUCTION at %L ", sym->name, &(*e)->where);
+    }
+  return 0;
+}
+
+
+static gfc_code *
+resolve_omp_udr_clause (gfc_omp_namelist *n, gfc_namespace *ns,
+                       gfc_symbol *sym1, gfc_symbol *sym2)
+{
+  gfc_code *copy;
+  gfc_symbol sym1_copy, sym2_copy;
+
+  if (ns->code->op == EXEC_ASSIGN)
+    {
+      copy = gfc_get_code (EXEC_ASSIGN);
+      copy->expr1 = gfc_copy_expr (ns->code->expr1);
+      copy->expr2 = gfc_copy_expr (ns->code->expr2);
+    }
+  else
+    {
+      copy = gfc_get_code (EXEC_CALL);
+      copy->symtree = ns->code->symtree;
+      copy->ext.actual = gfc_copy_actual_arglist (ns->code->ext.actual);
+    }
+  copy->loc = ns->code->loc;
+  sym1_copy = *sym1;
+  sym2_copy = *sym2;
+  *sym1 = *n->sym;
+  *sym2 = *n->sym;
+  sym1->name = sym1_copy.name;
+  sym2->name = sym2_copy.name;
+  ns->proc_name = ns->parent->proc_name;
+  if (n->sym->attr.dimension)
+    {
+      struct resolve_omp_udr_callback_data rcd;
+      rcd.sym1 = sym1;
+      rcd.sym2 = sym2;
+      gfc_code_walker (&copy, gfc_dummy_code_callback,
+                      resolve_omp_udr_callback, &rcd);
+    }
+  gfc_resolve_code (copy, gfc_current_ns);
+  if (copy->op == EXEC_CALL && copy->resolved_isym == NULL)
+    {
+      gfc_symbol *sym = copy->resolved_sym;
+      if (sym
+         && !sym->attr.intrinsic
+         && sym->attr.if_source == IFSRC_UNKNOWN)
+       gfc_error ("Implicitly declared subroutine %s used in "
+                  "!$OMP DECLARE REDUCTION at %L ", sym->name,
+                  &copy->loc);
+    }
+  gfc_code_walker (&copy, gfc_dummy_code_callback,
+                  resolve_omp_udr_callback2, NULL);
+  *sym1 = sym1_copy;
+  *sym2 = sym2_copy;
+  return copy;
+}
+
+
 /* OpenMP directive resolving routines.  */
 
 static void
-resolve_omp_clauses (gfc_code *code)
+resolve_omp_clauses (gfc_code *code, locus *where,
+                    gfc_omp_clauses *omp_clauses, gfc_namespace *ns)
 {
-  gfc_omp_clauses *omp_clauses = code->ext.omp_clauses;
-  gfc_namelist *n;
+  gfc_omp_namelist *n;
   int list;
   static const char *clause_names[]
     = { "PRIVATE", "FIRSTPRIVATE", "LASTPRIVATE", "COPYPRIVATE", "SHARED",
-       "COPYIN", "REDUCTION" };
+       "COPYIN", "UNIFORM", "ALIGNED", "LINEAR", "DEPEND", "MAP",
+       "TO", "FROM", "REDUCTION" };
 
   if (omp_clauses == NULL)
     return;
@@ -847,8 +2064,15 @@ resolve_omp_clauses (gfc_code *code)
     for (n = omp_clauses->lists[list]; n; n = n->next)
       {
        n->sym->mark = 0;
-       if (n->sym->attr.flavor == FL_VARIABLE || n->sym->attr.proc_pointer)
-         continue;
+       if (n->sym->attr.flavor == FL_VARIABLE
+           || n->sym->attr.proc_pointer
+           || (!code && (!n->sym->attr.dummy || n->sym->ns != ns)))
+         {
+           if (!code && (!n->sym->attr.dummy || n->sym->ns != ns))
+             gfc_error ("Variable '%s' is not a dummy argument at %L",
+                        n->sym->name, where);
+           continue;
+         }
        if (n->sym->attr.flavor == FL_PROCEDURE
            && n->sym->result == n->sym
            && n->sym->attr.function)
@@ -878,16 +2102,22 @@ resolve_omp_clauses (gfc_code *code)
              }
          }
        gfc_error ("Object '%s' is not a variable at %L", n->sym->name,
-                  &code->loc);
+                  where);
       }
 
   for (list = 0; list < OMP_LIST_NUM; list++)
-    if (list != OMP_LIST_FIRSTPRIVATE && list != OMP_LIST_LASTPRIVATE)
+    if (list != OMP_LIST_FIRSTPRIVATE
+       && list != OMP_LIST_LASTPRIVATE
+       && list != OMP_LIST_ALIGNED
+       && list != OMP_LIST_DEPEND
+       && list != OMP_LIST_MAP
+       && list != OMP_LIST_FROM
+       && list != OMP_LIST_TO)
       for (n = omp_clauses->lists[list]; n; n = n->next)
        {
          if (n->sym->mark)
            gfc_error ("Symbol '%s' present on multiple clauses at %L",
-                      n->sym->name, &code->loc);
+                      n->sym->name, where);
          else
            n->sym->mark = 1;
        }
@@ -898,7 +2128,7 @@ resolve_omp_clauses (gfc_code *code)
       if (n->sym->mark)
        {
          gfc_error ("Symbol '%s' present on multiple clauses at %L",
-                    n->sym->name, &code->loc);
+                    n->sym->name, where);
          n->sym->mark = 0;
        }
 
@@ -906,7 +2136,7 @@ resolve_omp_clauses (gfc_code *code)
     {
       if (n->sym->mark)
        gfc_error ("Symbol '%s' present on multiple clauses at %L",
-                  n->sym->name, &code->loc);
+                  n->sym->name, where);
       else
        n->sym->mark = 1;
     }
@@ -917,19 +2147,44 @@ resolve_omp_clauses (gfc_code *code)
     {
       if (n->sym->mark)
        gfc_error ("Symbol '%s' present on multiple clauses at %L",
-                  n->sym->name, &code->loc);
+                  n->sym->name, where);
+      else
+       n->sym->mark = 1;
+    }
+
+  for (n = omp_clauses->lists[OMP_LIST_ALIGNED]; n; n = n->next)
+    n->sym->mark = 0;
+
+  for (n = omp_clauses->lists[OMP_LIST_ALIGNED]; n; n = n->next)
+    {
+      if (n->sym->mark)
+       gfc_error ("Symbol '%s' present on multiple clauses at %L",
+                  n->sym->name, where);
       else
        n->sym->mark = 1;
     }
+
+  for (n = omp_clauses->lists[OMP_LIST_TO]; n; n = n->next)
+    n->sym->mark = 0;
+  for (n = omp_clauses->lists[OMP_LIST_FROM]; n; n = n->next)
+    if (n->expr == NULL)
+      n->sym->mark = 1;
+  for (n = omp_clauses->lists[OMP_LIST_TO]; n; n = n->next)
+    {
+      if (n->expr == NULL && n->sym->mark)
+       gfc_error ("Symbol '%s' present on both FROM and TO clauses at %L",
+                  n->sym->name, where);
+      else
+       n->sym->mark = 1;
+    }
+
   for (list = 0; list < OMP_LIST_NUM; list++)
     if ((n = omp_clauses->lists[list]) != NULL)
       {
        const char *name;
 
-       if (list < OMP_LIST_REDUCTION_FIRST)
+       if (list < OMP_LIST_NUM)
          name = clause_names[list];
-       else if (list <= OMP_LIST_REDUCTION_LAST)
-         name = clause_names[OMP_LIST_REDUCTION_FIRST];
        else
          gcc_unreachable ();
 
@@ -940,10 +2195,7 @@ resolve_omp_clauses (gfc_code *code)
              {
                if (!n->sym->attr.threadprivate)
                  gfc_error ("Non-THREADPRIVATE object '%s' in COPYIN clause"
-                            " at %L", n->sym->name, &code->loc);
-               if (n->sym->ts.type == BT_DERIVED && n->sym->ts.u.derived->attr.alloc_comp)
-                 gfc_error ("COPYIN clause object '%s' at %L has ALLOCATABLE components",
-                            n->sym->name, &code->loc);
+                            " at %L", n->sym->name, where);
              }
            break;
          case OMP_LIST_COPYPRIVATE:
@@ -951,10 +2203,10 @@ resolve_omp_clauses (gfc_code *code)
              {
                if (n->sym->as && n->sym->as->type == AS_ASSUMED_SIZE)
                  gfc_error ("Assumed size array '%s' in COPYPRIVATE clause "
-                            "at %L", n->sym->name, &code->loc);
-               if (n->sym->ts.type == BT_DERIVED && n->sym->ts.u.derived->attr.alloc_comp)
-                 gfc_error ("COPYPRIVATE clause object '%s' at %L has ALLOCATABLE components",
-                            n->sym->name, &code->loc);
+                            "at %L", n->sym->name, where);
+               if (n->sym->attr.pointer && n->sym->attr.intent == INTENT_IN)
+                 gfc_error ("INTENT(IN) POINTER '%s' in COPYPRIVATE clause "
+                            "at %L", n->sym->name, where);
              }
            break;
          case OMP_LIST_SHARED:
@@ -962,96 +2214,286 @@ resolve_omp_clauses (gfc_code *code)
              {
                if (n->sym->attr.threadprivate)
                  gfc_error ("THREADPRIVATE object '%s' in SHARED clause at "
-                            "%L", n->sym->name, &code->loc);
+                            "%L", n->sym->name, where);
                if (n->sym->attr.cray_pointee)
                  gfc_error ("Cray pointee '%s' in SHARED clause at %L",
-                           n->sym->name, &code->loc);
+                           n->sym->name, where);
+               if (n->sym->attr.associate_var)
+                 gfc_error ("ASSOCIATE name '%s' in SHARED clause at %L",
+                            n->sym->name, where);
+             }
+           break;
+         case OMP_LIST_ALIGNED:
+           for (; n != NULL; n = n->next)
+             {
+               if (!n->sym->attr.pointer
+                   && !n->sym->attr.allocatable
+                   && !n->sym->attr.cray_pointer
+                   && (n->sym->ts.type != BT_DERIVED
+                       || (n->sym->ts.u.derived->from_intmod
+                           != INTMOD_ISO_C_BINDING)
+                       || (n->sym->ts.u.derived->intmod_sym_id
+                           != ISOCBINDING_PTR)))
+                 gfc_error ("'%s' in ALIGNED clause must be POINTER, "
+                            "ALLOCATABLE, Cray pointer or C_PTR at %L",
+                            n->sym->name, where);
+               else if (n->expr)
+                 {
+                   gfc_expr *expr = n->expr;
+                   int alignment = 0;
+                   if (!gfc_resolve_expr (expr)
+                       || expr->ts.type != BT_INTEGER
+                       || expr->rank != 0
+                       || gfc_extract_int (expr, &alignment)
+                       || alignment <= 0)
+                     gfc_error ("'%s' in ALIGNED clause at %L requires a scalar "
+                                "positive constant integer alignment "
+                                "expression", n->sym->name, where);
+                 }
              }
            break;
+         case OMP_LIST_DEPEND:
+         case OMP_LIST_MAP:
+         case OMP_LIST_TO:
+         case OMP_LIST_FROM:
+           for (; n != NULL; n = n->next)
+             if (n->expr)
+               {
+                 if (!gfc_resolve_expr (n->expr)
+                     || n->expr->expr_type != EXPR_VARIABLE
+                     || n->expr->ref == NULL
+                     || n->expr->ref->next
+                     || n->expr->ref->type != REF_ARRAY)
+                   gfc_error ("'%s' in %s clause at %L is not a proper "
+                              "array section", n->sym->name, name, where);
+                 else if (n->expr->ref->u.ar.codimen)
+                   gfc_error ("Coarrays not supported in %s clause at %L",
+                              name, where);
+                 else
+                   {
+                     int i;
+                     gfc_array_ref *ar = &n->expr->ref->u.ar;
+                     for (i = 0; i < ar->dimen; i++)
+                       if (ar->stride[i])
+                         {
+                           gfc_error ("Stride should not be specified for "
+                                      "array section in %s clause at %L",
+                                      name, where);
+                           break;
+                         }
+                       else if (ar->dimen_type[i] != DIMEN_ELEMENT
+                                && ar->dimen_type[i] != DIMEN_RANGE)
+                         {
+                           gfc_error ("'%s' in %s clause at %L is not a "
+                                      "proper array section",
+                                      n->sym->name, name, where);
+                           break;
+                         }
+                       else if (list == OMP_LIST_DEPEND
+                                && ar->start[i]
+                                && ar->start[i]->expr_type == EXPR_CONSTANT
+                                && ar->end[i]
+                                && ar->end[i]->expr_type == EXPR_CONSTANT
+                                && mpz_cmp (ar->start[i]->value.integer,
+                                            ar->end[i]->value.integer) > 0)
+                         {
+                           gfc_error ("'%s' in DEPEND clause at %L is a zero "
+                                      "size array section", n->sym->name,
+                                      where);
+                           break;
+                         }
+                   }
+               }
+           if (list != OMP_LIST_DEPEND)
+             for (n = omp_clauses->lists[list]; n != NULL; n = n->next)
+               {
+                 n->sym->attr.referenced = 1;
+                 if (n->sym->attr.threadprivate)
+                   gfc_error ("THREADPRIVATE object '%s' in %s clause at %L",
+                              n->sym->name, name, where);
+                 if (n->sym->attr.cray_pointee)
+                   gfc_error ("Cray pointee '%s' in %s clause at %L",
+                              n->sym->name, name, where);
+               }
+           break;
          default:
            for (; n != NULL; n = n->next)
              {
+               bool bad = false;
                if (n->sym->attr.threadprivate)
                  gfc_error ("THREADPRIVATE object '%s' in %s clause at %L",
-                            n->sym->name, name, &code->loc);
+                            n->sym->name, name, where);
                if (n->sym->attr.cray_pointee)
                  gfc_error ("Cray pointee '%s' in %s clause at %L",
-                           n->sym->name, name, &code->loc);
+                           n->sym->name, name, where);
+               if (n->sym->attr.associate_var)
+                 gfc_error ("ASSOCIATE name '%s' in %s clause at %L",
+                            n->sym->name, name, where);
                if (list != OMP_LIST_PRIVATE)
                  {
-                   if (n->sym->attr.pointer
-                       && list >= OMP_LIST_REDUCTION_FIRST
-                       && list <= OMP_LIST_REDUCTION_LAST)
+                   if (n->sym->attr.proc_pointer && list == OMP_LIST_REDUCTION)
+                     gfc_error ("Procedure pointer '%s' in %s clause at %L",
+                                n->sym->name, name, where);
+                   if (n->sym->attr.pointer && list == OMP_LIST_REDUCTION)
                      gfc_error ("POINTER object '%s' in %s clause at %L",
-                                n->sym->name, name, &code->loc);
-                   /* Variables in REDUCTION-clauses must be of intrinsic type (flagged below).  */
-                   if ((list < OMP_LIST_REDUCTION_FIRST || list > OMP_LIST_REDUCTION_LAST)
-                        && n->sym->ts.type == BT_DERIVED
-                        && n->sym->ts.u.derived->attr.alloc_comp)
-                     gfc_error ("%s clause object '%s' has ALLOCATABLE components at %L",
-                                name, n->sym->name, &code->loc);
-                   if (n->sym->attr.cray_pointer
-                       && list >= OMP_LIST_REDUCTION_FIRST
-                       && list <= OMP_LIST_REDUCTION_LAST)
+                                n->sym->name, name, where);
+                   if (n->sym->attr.cray_pointer && list == OMP_LIST_REDUCTION)
                      gfc_error ("Cray pointer '%s' in %s clause at %L",
-                                n->sym->name, name, &code->loc);
+                                n->sym->name, name, where);
                  }
                if (n->sym->as && n->sym->as->type == AS_ASSUMED_SIZE)
                  gfc_error ("Assumed size array '%s' in %s clause at %L",
-                            n->sym->name, name, &code->loc);
-               if (n->sym->attr.in_namelist
-                   && (list < OMP_LIST_REDUCTION_FIRST
-                       || list > OMP_LIST_REDUCTION_LAST))
+                            n->sym->name, name, where);
+               if (n->sym->attr.in_namelist && list != OMP_LIST_REDUCTION)
                  gfc_error ("Variable '%s' in %s clause is used in "
                             "NAMELIST statement at %L",
-                            n->sym->name, name, &code->loc);
+                            n->sym->name, name, where);
+               if (n->sym->attr.pointer && n->sym->attr.intent == INTENT_IN)
+                 switch (list)
+                   {
+                   case OMP_LIST_PRIVATE:
+                   case OMP_LIST_LASTPRIVATE:
+                   case OMP_LIST_LINEAR:
+                   /* case OMP_LIST_REDUCTION: */
+                     gfc_error ("INTENT(IN) POINTER '%s' in %s clause at %L",
+                                n->sym->name, name, where);
+                     break;
+                   default:
+                     break;
+                   }
                switch (list)
                  {
-                 case OMP_LIST_PLUS:
-                 case OMP_LIST_MULT:
-                 case OMP_LIST_SUB:
-                   if (!gfc_numeric_ts (&n->sym->ts))
-                     gfc_error ("%c REDUCTION variable '%s' at %L must be of numeric type, got %s",
-                                list == OMP_LIST_PLUS ? '+'
-                                : list == OMP_LIST_MULT ? '*' : '-',
-                                n->sym->name, &code->loc,
-                                gfc_typename (&n->sym->ts));
+                 case OMP_LIST_REDUCTION:
+                   switch (n->u.reduction_op)
+                     {
+                     case OMP_REDUCTION_PLUS:
+                     case OMP_REDUCTION_TIMES:
+                     case OMP_REDUCTION_MINUS:
+                       if (!gfc_numeric_ts (&n->sym->ts))
+                         bad = true;
+                       break;
+                     case OMP_REDUCTION_AND:
+                     case OMP_REDUCTION_OR:
+                     case OMP_REDUCTION_EQV:
+                     case OMP_REDUCTION_NEQV:
+                       if (n->sym->ts.type != BT_LOGICAL)
+                         bad = true;
+                       break;
+                     case OMP_REDUCTION_MAX:
+                     case OMP_REDUCTION_MIN:
+                       if (n->sym->ts.type != BT_INTEGER
+                           && n->sym->ts.type != BT_REAL)
+                         bad = true;
+                       break;
+                     case OMP_REDUCTION_IAND:
+                     case OMP_REDUCTION_IOR:
+                     case OMP_REDUCTION_IEOR:
+                       if (n->sym->ts.type != BT_INTEGER)
+                         bad = true;
+                       break;
+                     case OMP_REDUCTION_USER:
+                       bad = true;
+                       break;
+                     default:
+                       break;
+                     }
+                   if (!bad)
+                     n->udr = NULL;
+                   else
+                     {
+                       const char *udr_name = NULL;
+                       if (n->udr)
+                         {
+                           udr_name = n->udr->udr->name;
+                           n->udr->udr
+                             = gfc_find_omp_udr (NULL, udr_name,
+                                                 &n->sym->ts);
+                           if (n->udr->udr == NULL)
+                             {
+                               free (n->udr);
+                               n->udr = NULL;
+                             }
+                         }
+                       if (n->udr == NULL)
+                         {
+                           if (udr_name == NULL)
+                             switch (n->u.reduction_op)
+                               {
+                               case OMP_REDUCTION_PLUS:
+                               case OMP_REDUCTION_TIMES:
+                               case OMP_REDUCTION_MINUS:
+                               case OMP_REDUCTION_AND:
+                               case OMP_REDUCTION_OR:
+                               case OMP_REDUCTION_EQV:
+                               case OMP_REDUCTION_NEQV:
+                                 udr_name = gfc_op2string ((gfc_intrinsic_op)
+                                                           n->u.reduction_op);
+                                 break;
+                               case OMP_REDUCTION_MAX:
+                                 udr_name = "max";
+                                 break;
+                               case OMP_REDUCTION_MIN:
+                                 udr_name = "min";
+                                 break;
+                               case OMP_REDUCTION_IAND:
+                                 udr_name = "iand";
+                                 break;
+                               case OMP_REDUCTION_IOR:
+                                 udr_name = "ior";
+                                 break;
+                               case OMP_REDUCTION_IEOR:
+                                 udr_name = "ieor";
+                                 break;
+                               default:
+                                 gcc_unreachable ();
+                               }
+                           gfc_error ("!$OMP DECLARE REDUCTION %s not found "
+                                      "for type %s at %L", udr_name,
+                                      gfc_typename (&n->sym->ts), where);
+                         }
+                       else
+                         {
+                           gfc_omp_udr *udr = n->udr->udr;
+                           n->u.reduction_op = OMP_REDUCTION_USER;
+                           n->udr->combiner
+                             = resolve_omp_udr_clause (n, udr->combiner_ns,
+                                                       udr->omp_out,
+                                                       udr->omp_in);
+                           if (udr->initializer_ns)
+                             n->udr->initializer
+                               = resolve_omp_udr_clause (n,
+                                                         udr->initializer_ns,
+                                                         udr->omp_priv,
+                                                         udr->omp_orig);
+                         }
+                     }
                    break;
-                 case OMP_LIST_AND:
-                 case OMP_LIST_OR:
-                 case OMP_LIST_EQV:
-                 case OMP_LIST_NEQV:
-                   if (n->sym->ts.type != BT_LOGICAL)
-                     gfc_error ("%s REDUCTION variable '%s' must be LOGICAL "
-                                "at %L",
-                                list == OMP_LIST_AND ? ".AND."
-                                : list == OMP_LIST_OR ? ".OR."
-                                : list == OMP_LIST_EQV ? ".EQV." : ".NEQV.",
-                                n->sym->name, &code->loc);
-                   break;
-                 case OMP_LIST_MAX:
-                 case OMP_LIST_MIN:
-                   if (n->sym->ts.type != BT_INTEGER
-                       && n->sym->ts.type != BT_REAL)
-                     gfc_error ("%s REDUCTION variable '%s' must be "
-                                "INTEGER or REAL at %L",
-                                list == OMP_LIST_MAX ? "MAX" : "MIN",
-                                n->sym->name, &code->loc);
-                   break;
-                 case OMP_LIST_IAND:
-                 case OMP_LIST_IOR:
-                 case OMP_LIST_IEOR:
+                 case OMP_LIST_LINEAR:
                    if (n->sym->ts.type != BT_INTEGER)
-                     gfc_error ("%s REDUCTION variable '%s' must be INTEGER "
-                                "at %L",
-                                list == OMP_LIST_IAND ? "IAND"
-                                : list == OMP_LIST_MULT ? "IOR" : "IEOR",
-                                n->sym->name, &code->loc);
+                     gfc_error ("LINEAR variable '%s' must be INTEGER "
+                                "at %L", n->sym->name, where);
+                   else if (!code && !n->sym->attr.value)
+                     gfc_error ("LINEAR dummy argument '%s' must have VALUE "
+                                "attribute at %L", n->sym->name, where);
+                   else if (n->expr)
+                     {
+                       gfc_expr *expr = n->expr;
+                       if (!gfc_resolve_expr (expr)
+                           || expr->ts.type != BT_INTEGER
+                           || expr->rank != 0)
+                         gfc_error ("'%s' in LINEAR clause at %L requires "
+                                    "a scalar integer linear-step expression",
+                                    n->sym->name, where);
+                       else if (!code && expr->expr_type != EXPR_CONSTANT)
+                         gfc_error ("'%s' in LINEAR clause at %L requires "
+                                    "a constant integer linear-step expression",
+                                    n->sym->name, where);
+                     }
                    break;
                  /* Workaround for PR middle-end/26316, nothing really needs
                     to be done here for OMP_LIST_PRIVATE.  */
                  case OMP_LIST_PRIVATE:
-                   gcc_assert (code->op != EXEC_NOP);
+                   gcc_assert (code && code->op != EXEC_NOP);
                  default:
                    break;
                  }
@@ -1059,6 +2501,54 @@ resolve_omp_clauses (gfc_code *code)
            break;
          }
       }
+  if (omp_clauses->safelen_expr)
+    {
+      gfc_expr *expr = omp_clauses->safelen_expr;
+      if (!gfc_resolve_expr (expr)
+         || expr->ts.type != BT_INTEGER || expr->rank != 0)
+       gfc_error ("SAFELEN clause at %L requires a scalar "
+                  "INTEGER expression", &expr->where);
+    }
+  if (omp_clauses->simdlen_expr)
+    {
+      gfc_expr *expr = omp_clauses->simdlen_expr;
+      if (!gfc_resolve_expr (expr)
+         || expr->ts.type != BT_INTEGER || expr->rank != 0)
+       gfc_error ("SIMDLEN clause at %L requires a scalar "
+                  "INTEGER expression", &expr->where);
+    }
+  if (omp_clauses->num_teams)
+    {
+      gfc_expr *expr = omp_clauses->num_teams;
+      if (!gfc_resolve_expr (expr)
+         || expr->ts.type != BT_INTEGER || expr->rank != 0)
+       gfc_error ("NUM_TEAMS clause at %L requires a scalar "
+                  "INTEGER expression", &expr->where);
+    }
+  if (omp_clauses->device)
+    {
+      gfc_expr *expr = omp_clauses->device;
+      if (!gfc_resolve_expr (expr)
+         || expr->ts.type != BT_INTEGER || expr->rank != 0)
+       gfc_error ("DEVICE clause at %L requires a scalar "
+                  "INTEGER expression", &expr->where);
+    }
+  if (omp_clauses->dist_chunk_size)
+    {
+      gfc_expr *expr = omp_clauses->dist_chunk_size;
+      if (!gfc_resolve_expr (expr)
+         || expr->ts.type != BT_INTEGER || expr->rank != 0)
+       gfc_error ("DIST_SCHEDULE clause's chunk_size at %L requires "
+                  "a scalar INTEGER expression", &expr->where);
+    }
+  if (omp_clauses->thread_limit)
+    {
+      gfc_expr *expr = omp_clauses->thread_limit;
+      if (!gfc_resolve_expr (expr)
+         || expr->ts.type != BT_INTEGER || expr->rank != 0)
+       gfc_error ("THREAD_LIMIT clause at %L requires a scalar "
+                  "INTEGER expression", &expr->where);
+    }
 }
 
 
@@ -1142,12 +2632,13 @@ resolve_omp_atomic (gfc_code *code)
   gfc_code *atomic_code = code;
   gfc_symbol *var;
   gfc_expr *expr2, *expr2_tmp;
+  gfc_omp_atomic_op aop
+    = (gfc_omp_atomic_op) (atomic_code->ext.omp_atomic & GFC_OMP_ATOMIC_MASK);
 
   code = code->block->next;
   gcc_assert (code->op == EXEC_ASSIGN);
-  gcc_assert ((atomic_code->ext.omp_atomic != GFC_OMP_ATOMIC_CAPTURE
-              && code->next == NULL)
-             || (atomic_code->ext.omp_atomic == GFC_OMP_ATOMIC_CAPTURE
+  gcc_assert (((aop != GFC_OMP_ATOMIC_CAPTURE) && code->next == NULL)
+             || ((aop == GFC_OMP_ATOMIC_CAPTURE)
                  && code->next != NULL
                  && code->next->op == EXEC_ASSIGN
                  && code->next->next == NULL));
@@ -1169,14 +2660,13 @@ resolve_omp_atomic (gfc_code *code)
   expr2 = is_conversion (code->expr2, false);
   if (expr2 == NULL)
     {
-      if (atomic_code->ext.omp_atomic == GFC_OMP_ATOMIC_READ
-         || atomic_code->ext.omp_atomic == GFC_OMP_ATOMIC_WRITE)
+      if (aop == GFC_OMP_ATOMIC_READ || aop == GFC_OMP_ATOMIC_WRITE)
        expr2 = is_conversion (code->expr2, true);
       if (expr2 == NULL)
        expr2 = code->expr2;
     }
 
-  switch (atomic_code->ext.omp_atomic)
+  switch (aop)
     {
     case GFC_OMP_ATOMIC_READ:
       if (expr2->expr_type != EXPR_VARIABLE
@@ -1249,7 +2739,21 @@ resolve_omp_atomic (gfc_code *code)
       break;
     }
 
-  if (expr2->expr_type == EXPR_OP)
+  if (var->attr.allocatable)
+    {
+      gfc_error ("!$OMP ATOMIC with ALLOCATABLE variable at %L",
+                &code->loc);
+      return;
+    }
+
+  if (aop == GFC_OMP_ATOMIC_CAPTURE
+      && code->next == NULL
+      && code->expr2->rank == 0
+      && !expr_references_sym (code->expr2, var, NULL))
+    atomic_code->ext.omp_atomic
+      = (gfc_omp_atomic_op) (atomic_code->ext.omp_atomic
+                            | GFC_OMP_ATOMIC_SWAP);
+  else if (expr2->expr_type == EXPR_OP)
     {
       gfc_expr *v = NULL, *e, *c;
       gfc_intrinsic_op op = expr2->value.op.op;
@@ -1420,11 +2924,18 @@ resolve_omp_atomic (gfc_code *code)
              && arg->expr->symtree->n.sym == var)
            var_arg = arg;
          else if (expr_references_sym (arg->expr, var, NULL))
-           gfc_error ("!$OMP ATOMIC intrinsic arguments except one must not "
-                      "reference '%s' at %L", var->name, &arg->expr->where);
+           {
+             gfc_error ("!$OMP ATOMIC intrinsic arguments except one must "
+                        "not reference '%s' at %L",
+                        var->name, &arg->expr->where);
+             return;
+           }
          if (arg->expr->rank != 0)
-           gfc_error ("!$OMP ATOMIC intrinsic arguments must be scalar "
-                      "at %L", &arg->expr->where);
+           {
+             gfc_error ("!$OMP ATOMIC intrinsic arguments must be scalar "
+                        "at %L", &arg->expr->where);
+             return;
+           }
        }
 
       if (var_arg == NULL)
@@ -1447,10 +2958,10 @@ resolve_omp_atomic (gfc_code *code)
        }
     }
   else
-    gfc_error ("!$OMP ATOMIC assignment must have an operator or intrinsic "
-              "on right hand side at %L", &expr2->where);
+    gfc_error ("!$OMP ATOMIC assignment must have an operator or "
+              "intrinsic on right hand side at %L", &expr2->where);
 
-  if (atomic_code->ext.omp_atomic == GFC_OMP_ATOMIC_CAPTURE && code->next)
+  if (aop == GFC_OMP_ATOMIC_CAPTURE && code->next)
     {
       code = code->next;
       if (code->expr1->expr_type != EXPR_VARIABLE
@@ -1542,7 +3053,7 @@ gfc_resolve_omp_parallel_blocks (gfc_code *code, gfc_namespace *ns)
 {
   struct omp_context ctx;
   gfc_omp_clauses *omp_clauses = code->ext.omp_clauses;
-  gfc_namelist *n;
+  gfc_omp_namelist *n;
   int list;
 
   ctx.code = code;
@@ -1552,13 +3063,38 @@ gfc_resolve_omp_parallel_blocks (gfc_code *code, gfc_namespace *ns)
   omp_current_ctx = &ctx;
 
   for (list = 0; list < OMP_LIST_NUM; list++)
-    for (n = omp_clauses->lists[list]; n; n = n->next)
-      pointer_set_insert (ctx.sharing_clauses, n->sym);
+    switch (list)
+      {
+      case OMP_LIST_SHARED:
+      case OMP_LIST_PRIVATE:
+      case OMP_LIST_FIRSTPRIVATE:
+      case OMP_LIST_LASTPRIVATE:
+      case OMP_LIST_REDUCTION:
+      case OMP_LIST_LINEAR:
+       for (n = omp_clauses->lists[list]; n; n = n->next)
+         pointer_set_insert (ctx.sharing_clauses, n->sym);
+       break;
+      default:
+       break;
+      }
 
-  if (code->op == EXEC_OMP_PARALLEL_DO)
-    gfc_resolve_omp_do_blocks (code, ns);
-  else
-    gfc_resolve_blocks (code->block, ns);
+  switch (code->op)
+    {
+    case EXEC_OMP_PARALLEL_DO:
+    case EXEC_OMP_PARALLEL_DO_SIMD:
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
+    case EXEC_OMP_TEAMS_DISTRIBUTE:
+    case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
+    case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+    case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
+      gfc_resolve_omp_do_blocks (code, ns);
+      break;
+    default:
+      gfc_resolve_blocks (code->block, ns);
+    }
 
   omp_current_ctx = ctx.previous;
   pointer_set_destroy (ctx.sharing_clauses);
@@ -1624,9 +3160,9 @@ gfc_resolve_do_iterator (gfc_code *code, gfc_symbol *sym)
   if (! pointer_set_insert (omp_current_ctx->private_iterators, sym))
     {
       gfc_omp_clauses *omp_clauses = omp_current_ctx->code->ext.omp_clauses;
-      gfc_namelist *p;
+      gfc_omp_namelist *p;
 
-      p = gfc_get_namelist ();
+      p = gfc_get_omp_namelist ();
       p->sym = sym;
       p->next = omp_clauses->lists[OMP_LIST_PRIVATE];
       omp_clauses->lists[OMP_LIST_PRIVATE] = p;
@@ -1639,11 +3175,64 @@ resolve_omp_do (gfc_code *code)
 {
   gfc_code *do_code, *c;
   int list, i, collapse;
-  gfc_namelist *n;
+  gfc_omp_namelist *n;
   gfc_symbol *dovar;
+  const char *name;
+  bool is_simd = false;
+
+  switch (code->op)
+    {
+    case EXEC_OMP_DISTRIBUTE: name = "!$OMP DISTRIBUTE"; break;
+    case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
+      name = "!$OMP DISTRIBUTE PARALLEL DO";
+      break;
+    case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
+      name = "!$OMP DISTRIBUTE PARALLEL DO SIMD";
+      is_simd = true;
+      break;
+    case EXEC_OMP_DISTRIBUTE_SIMD:
+      name = "!$OMP DISTRIBUTE SIMD";
+      is_simd = true;
+      break;
+    case EXEC_OMP_DO: name = "!$OMP DO"; break;
+    case EXEC_OMP_DO_SIMD: name = "!$OMP DO SIMD"; is_simd = true; break;
+    case EXEC_OMP_PARALLEL_DO: name = "!$OMP PARALLEL DO"; break;
+    case EXEC_OMP_PARALLEL_DO_SIMD:
+      name = "!$OMP PARALLEL DO SIMD";
+      is_simd = true;
+      break;
+    case EXEC_OMP_SIMD: name = "!$OMP SIMD"; is_simd = true; break;
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
+      name = "!$OMP TARGET TEAMS_DISTRIBUTE";
+      break;
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
+      name = "!$OMP TARGET TEAMS DISTRIBUTE PARALLEL DO";
+      break;
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+      name = "!$OMP TARGET TEAMS DISTRIBUTE PARALLEL DO SIMD";
+      is_simd = true;
+      break;
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
+      name = "!$OMP TARGET TEAMS DISTRIBUTE SIMD";
+      is_simd = true;
+      break;
+    case EXEC_OMP_TEAMS_DISTRIBUTE: name = "!$OMP TEAMS_DISTRIBUTE"; break;
+    case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
+      name = "!$OMP TEAMS DISTRIBUTE PARALLEL DO";
+      break;
+    case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+      name = "!$OMP TEAMS DISTRIBUTE PARALLEL DO SIMD";
+      is_simd = true;
+      break;
+    case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
+      name = "!$OMP TEAMS DISTRIBUTE SIMD";
+      is_simd = true;
+      break;
+    default: gcc_unreachable ();
+    }
 
   if (code->ext.omp_clauses)
-    resolve_omp_clauses (code);
+    resolve_omp_clauses (code, &code->loc, code->ext.omp_clauses, NULL);
 
   do_code = code->block->next;
   collapse = code->ext.omp_clauses->collapse;
@@ -1653,27 +3242,46 @@ resolve_omp_do (gfc_code *code)
     {
       if (do_code->op == EXEC_DO_WHILE)
        {
-         gfc_error ("!$OMP DO cannot be a DO WHILE or DO without loop control "
-                    "at %L", &do_code->loc);
+         gfc_error ("%s cannot be a DO WHILE or DO without loop control "
+                    "at %L", name, &do_code->loc);
+         break;
+       }
+      if (do_code->op == EXEC_DO_CONCURRENT)
+       {
+         gfc_error ("%s cannot be a DO CONCURRENT loop at %L", name,
+                    &do_code->loc);
          break;
        }
       gcc_assert (do_code->op == EXEC_DO);
       if (do_code->ext.iterator->var->ts.type != BT_INTEGER)
-       gfc_error ("!$OMP DO iteration variable must be of type integer at %L",
-                  &do_code->loc);
+       gfc_error ("%s iteration variable must be of type integer at %L",
+                  name, &do_code->loc);
       dovar = do_code->ext.iterator->var->symtree->n.sym;
       if (dovar->attr.threadprivate)
-       gfc_error ("!$OMP DO iteration variable must not be THREADPRIVATE "
-                  "at %L", &do_code->loc);
+       gfc_error ("%s iteration variable must not be THREADPRIVATE "
+                  "at %L", name, &do_code->loc);
       if (code->ext.omp_clauses)
        for (list = 0; list < OMP_LIST_NUM; list++)
-         if (list != OMP_LIST_PRIVATE && list != OMP_LIST_LASTPRIVATE)
+         if (!is_simd
+             ? (list != OMP_LIST_PRIVATE && list != OMP_LIST_LASTPRIVATE)
+             : code->ext.omp_clauses->collapse > 1
+             ? (list != OMP_LIST_LASTPRIVATE)
+             : (list != OMP_LIST_LINEAR))
            for (n = code->ext.omp_clauses->lists[list]; n; n = n->next)
              if (dovar == n->sym)
                {
-                 gfc_error ("!$OMP DO iteration variable present on clause "
-                            "other than PRIVATE or LASTPRIVATE at %L",
-                            &do_code->loc);
+                 if (!is_simd)
+                   gfc_error ("%s iteration variable present on clause "
+                              "other than PRIVATE or LASTPRIVATE at %L",
+                              name, &do_code->loc);
+                 else if (code->ext.omp_clauses->collapse > 1)
+                   gfc_error ("%s iteration variable present on clause "
+                              "other than LASTPRIVATE at %L",
+                              name, &do_code->loc);
+                 else
+                   gfc_error ("%s iteration variable present on clause "
+                              "other than LINEAR at %L",
+                              name, &do_code->loc);
                  break;
                }
       if (i > 1)
@@ -1689,8 +3297,8 @@ resolve_omp_do (gfc_code *code)
                  || gfc_find_sym_in_expr (ivar, do_code->ext.iterator->end)
                  || gfc_find_sym_in_expr (ivar, do_code->ext.iterator->step))
                {
-                 gfc_error ("!$OMP DO collapsed loops don't form rectangular iteration space at %L",
-                            &do_code->loc);
+                 gfc_error ("%s collapsed loops don't form rectangular "
+                            "iteration space at %L", name, &do_code->loc);
                  break;
                }
              if (j < i)
@@ -1703,8 +3311,8 @@ resolve_omp_do (gfc_code *code)
       for (c = do_code->next; c; c = c->next)
        if (c->op != EXEC_NOP && c->op != EXEC_CONTINUE)
          {
-           gfc_error ("collapsed !$OMP DO loops not perfectly nested at %L",
-                      &c->loc);
+           gfc_error ("collapsed %s loops not perfectly nested at %L",
+                      name, &c->loc);
            break;
          }
       if (c)
@@ -1712,16 +3320,16 @@ resolve_omp_do (gfc_code *code)
       do_code = do_code->block;
       if (do_code->op != EXEC_DO && do_code->op != EXEC_DO_WHILE)
        {
-         gfc_error ("not enough DO loops for collapsed !$OMP DO at %L",
-                    &code->loc);
+         gfc_error ("not enough DO loops for collapsed %s at %L",
+                    name, &code->loc);
          break;
        }
       do_code = do_code->next;
       if (do_code == NULL
          || (do_code->op != EXEC_DO && do_code->op != EXEC_DO_WHILE))
        {
-         gfc_error ("not enough DO loops for collapsed !$OMP DO at %L",
-                    &code->loc);
+         gfc_error ("not enough DO loops for collapsed %s at %L",
+                    name, &code->loc);
          break;
        }
     }
@@ -1739,19 +3347,48 @@ gfc_resolve_omp_directive (gfc_code *code, gfc_namespace *ns ATTRIBUTE_UNUSED)
 
   switch (code->op)
     {
+    case EXEC_OMP_DISTRIBUTE:
+    case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
+    case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
+    case EXEC_OMP_DISTRIBUTE_SIMD:
     case EXEC_OMP_DO:
+    case EXEC_OMP_DO_SIMD:
     case EXEC_OMP_PARALLEL_DO:
+    case EXEC_OMP_PARALLEL_DO_SIMD:
+    case EXEC_OMP_SIMD:
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
+    case EXEC_OMP_TEAMS_DISTRIBUTE:
+    case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
+    case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+    case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
       resolve_omp_do (code);
       break;
-    case EXEC_OMP_WORKSHARE:
+    case EXEC_OMP_CANCEL:
     case EXEC_OMP_PARALLEL_WORKSHARE:
     case EXEC_OMP_PARALLEL:
     case EXEC_OMP_PARALLEL_SECTIONS:
     case EXEC_OMP_SECTIONS:
     case EXEC_OMP_SINGLE:
+    case EXEC_OMP_TARGET:
+    case EXEC_OMP_TARGET_DATA:
+    case EXEC_OMP_TARGET_TEAMS:
     case EXEC_OMP_TASK:
+    case EXEC_OMP_TEAMS:
+    case EXEC_OMP_WORKSHARE:
+      if (code->ext.omp_clauses)
+       resolve_omp_clauses (code, &code->loc, code->ext.omp_clauses, NULL);
+      break;
+    case EXEC_OMP_TARGET_UPDATE:
       if (code->ext.omp_clauses)
-       resolve_omp_clauses (code);
+       resolve_omp_clauses (code, &code->loc, code->ext.omp_clauses, NULL);
+      if (code->ext.omp_clauses == NULL
+         || (code->ext.omp_clauses->lists[OMP_LIST_TO] == NULL
+             && code->ext.omp_clauses->lists[OMP_LIST_FROM] == NULL))
+       gfc_error ("OMP TARGET UPDATE at %L requires at least one TO or "
+                  "FROM clause", &code->loc);
       break;
     case EXEC_OMP_ATOMIC:
       resolve_omp_atomic (code);
@@ -1760,3 +3397,165 @@ gfc_resolve_omp_directive (gfc_code *code, gfc_namespace *ns ATTRIBUTE_UNUSED)
       break;
     }
 }
+
+/* Resolve !$omp declare simd constructs in NS.  */
+
+void
+gfc_resolve_omp_declare_simd (gfc_namespace *ns)
+{
+  gfc_omp_declare_simd *ods;
+
+  for (ods = ns->omp_declare_simd; ods; ods = ods->next)
+    {
+      if (ods->proc_name != ns->proc_name)
+       gfc_error ("!$OMP DECLARE SIMD should refer to containing procedure "
+                  "'%s' at %L", ns->proc_name->name, &ods->where);
+      if (ods->clauses)
+       resolve_omp_clauses (NULL, &ods->where, ods->clauses, ns);
+    }
+}
+
+struct omp_udr_callback_data
+{
+  gfc_omp_udr *omp_udr;
+  bool is_initializer;
+};
+
+static int
+omp_udr_callback (gfc_expr **e, int *walk_subtrees ATTRIBUTE_UNUSED,
+                 void *data)
+{
+  struct omp_udr_callback_data *cd = (struct omp_udr_callback_data *) data;
+  if ((*e)->expr_type == EXPR_VARIABLE)
+    {
+      if (cd->is_initializer)
+       {
+         if ((*e)->symtree->n.sym != cd->omp_udr->omp_priv
+             && (*e)->symtree->n.sym != cd->omp_udr->omp_orig)
+           gfc_error ("Variable other than OMP_PRIV or OMP_ORIG used in "
+                      "INITIALIZER clause of !$OMP DECLARE REDUCTION at %L",
+                      &(*e)->where);
+       }
+      else
+       {
+         if ((*e)->symtree->n.sym != cd->omp_udr->omp_out
+             && (*e)->symtree->n.sym != cd->omp_udr->omp_in)
+           gfc_error ("Variable other than OMP_OUT or OMP_IN used in "
+                      "combiner of !$OMP DECLARE REDUCTION at %L",
+                      &(*e)->where);
+       }
+    }
+  return 0;
+}
+
+/* Resolve !$omp declare reduction constructs.  */
+
+static void
+gfc_resolve_omp_udr (gfc_omp_udr *omp_udr)
+{
+  gfc_actual_arglist *a;
+  const char *predef_name = NULL;
+
+  switch (omp_udr->rop)
+    {
+    case OMP_REDUCTION_PLUS:
+    case OMP_REDUCTION_TIMES:
+    case OMP_REDUCTION_MINUS:
+    case OMP_REDUCTION_AND:
+    case OMP_REDUCTION_OR:
+    case OMP_REDUCTION_EQV:
+    case OMP_REDUCTION_NEQV:
+    case OMP_REDUCTION_MAX:
+    case OMP_REDUCTION_USER:
+      break;
+    default:
+      gfc_error ("Invalid operator for !$OMP DECLARE REDUCTION %s at %L",
+                omp_udr->name, &omp_udr->where);
+      return;
+    }
+
+  if (gfc_omp_udr_predef (omp_udr->rop, omp_udr->name,
+                         &omp_udr->ts, &predef_name))
+    {
+      if (predef_name)
+       gfc_error_now ("Redefinition of predefined %s "
+                      "!$OMP DECLARE REDUCTION at %L",
+                      predef_name, &omp_udr->where);
+      else
+       gfc_error_now ("Redefinition of predefined "
+                      "!$OMP DECLARE REDUCTION at %L", &omp_udr->where);
+      return;
+    }
+
+  if (omp_udr->ts.type == BT_CHARACTER
+      && omp_udr->ts.u.cl->length
+      && omp_udr->ts.u.cl->length->expr_type != EXPR_CONSTANT)
+    {
+      gfc_error ("CHARACTER length in !$OMP DECLARE REDUCTION %s not "
+                "constant at %L", omp_udr->name, &omp_udr->where);
+      return;
+    }
+
+  struct omp_udr_callback_data cd;
+  cd.omp_udr = omp_udr;
+  cd.is_initializer = false;
+  gfc_code_walker (&omp_udr->combiner_ns->code, gfc_dummy_code_callback,
+                  omp_udr_callback, &cd);
+  if (omp_udr->combiner_ns->code->op == EXEC_CALL)
+    {
+      for (a = omp_udr->combiner_ns->code->ext.actual; a; a = a->next)
+       if (a->expr == NULL)
+         break;
+      if (a)
+       gfc_error ("Subroutine call with alternate returns in combiner "
+                  "of !$OMP DECLARE REDUCTION at %L",
+                  &omp_udr->combiner_ns->code->loc);
+    }
+  if (omp_udr->initializer_ns)
+    {
+      cd.is_initializer = true;
+      gfc_code_walker (&omp_udr->initializer_ns->code, gfc_dummy_code_callback,
+                      omp_udr_callback, &cd);
+      if (omp_udr->initializer_ns->code->op == EXEC_CALL)
+       {
+         for (a = omp_udr->initializer_ns->code->ext.actual; a; a = a->next)
+           if (a->expr == NULL)
+             break;
+         if (a)
+           gfc_error ("Subroutine call with alternate returns in "
+                      "INITIALIZER clause of !$OMP DECLARE REDUCTION "
+                      "at %L", &omp_udr->initializer_ns->code->loc);
+         for (a = omp_udr->initializer_ns->code->ext.actual; a; a = a->next)
+           if (a->expr
+               && a->expr->expr_type == EXPR_VARIABLE
+               && a->expr->symtree->n.sym == omp_udr->omp_priv
+               && a->expr->ref == NULL)
+             break;
+         if (a == NULL)
+           gfc_error ("One of actual subroutine arguments in INITIALIZER "
+                      "clause of !$OMP DECLARE REDUCTION must be OMP_PRIV "
+                      "at %L", &omp_udr->initializer_ns->code->loc);
+       }
+    }
+  else if (omp_udr->ts.type == BT_DERIVED
+          && !gfc_has_default_initializer (omp_udr->ts.u.derived))
+    {
+      gfc_error ("Missing INITIALIZER clause for !$OMP DECLARE REDUCTION "
+                "of derived type without default initializer at %L",
+                &omp_udr->where);
+      return;
+    }
+}
+
+void
+gfc_resolve_omp_udrs (gfc_symtree *st)
+{
+  gfc_omp_udr *omp_udr;
+
+  if (st == NULL)
+    return;
+  gfc_resolve_omp_udrs (st->left);
+  gfc_resolve_omp_udrs (st->right);
+  for (omp_udr = st->n.omp_udr; omp_udr; omp_udr = omp_udr->next)
+    gfc_resolve_omp_udr (omp_udr);
+}
index 0faf47a..3428b33 100644 (file)
@@ -74,6 +74,34 @@ match_word (const char *str, match (*subr) (void), locus *old_locus)
 }
 
 
+/* Like match_word, but if str is matched, set a flag that it
+   was matched.  */
+static match
+match_word_omp_simd (const char *str, match (*subr) (void), locus *old_locus,
+                    bool *simd_matched)
+{
+  match m;
+
+  if (str != NULL)
+    {
+      m = gfc_match (str);
+      if (m != MATCH_YES)
+       return m;
+      *simd_matched = true;
+    }
+
+  m = (*subr) ();
+
+  if (m != MATCH_YES)
+    {
+      gfc_current_locus = *old_locus;
+      reject_statement ();
+    }
+
+  return m;
+}
+
+
 /* Load symbols from all USE statements encountered in this scoping unit.  */
 
 static void
@@ -103,7 +131,7 @@ use_modules (void)
       if (match_word (keyword, subr, &old_locus) == MATCH_YES) \
        return st;                                              \
       else                                                     \
-       undo_new_statement ();                            \
+       undo_new_statement ();                                  \
     } while (0);
 
 
@@ -531,11 +559,34 @@ decode_statement (void)
   return ST_NONE;
 }
 
+/* Like match, but set a flag simd_matched if keyword matched.  */
+#define matchs(keyword, subr, st)                              \
+    do {                                                       \
+      if (match_word_omp_simd (keyword, subr, &old_locus,      \
+                              &simd_matched) == MATCH_YES)     \
+       return st;                                              \
+      else                                                     \
+       undo_new_statement ();                                  \
+    } while (0);
+
+/* Like match, but don't match anything if not -fopenmp.  */
+#define matcho(keyword, subr, st)                              \
+    do {                                                       \
+      if (!gfc_option.gfc_flag_openmp)                         \
+       ;                                                       \
+      else if (match_word (keyword, subr, &old_locus)          \
+              == MATCH_YES)                                    \
+       return st;                                              \
+      else                                                     \
+       undo_new_statement ();                                  \
+    } while (0);
+
 static gfc_statement
 decode_omp_directive (void)
 {
   locus old_locus;
   char c;
+  bool simd_matched = false;
 
   gfc_enforce_clean_symbol_state ();
 
@@ -560,77 +611,167 @@ decode_omp_directive (void)
 
   c = gfc_peek_ascii_char ();
 
+  /* match is for directives that should be recognized only if
+     -fopenmp, matchs for directives that should be recognized
+     if either -fopenmp or -fopenmp-simd.  */
   switch (c)
     {
     case 'a':
-      match ("atomic", gfc_match_omp_atomic, ST_OMP_ATOMIC);
+      matcho ("atomic", gfc_match_omp_atomic, ST_OMP_ATOMIC);
       break;
     case 'b':
-      match ("barrier", gfc_match_omp_barrier, ST_OMP_BARRIER);
+      matcho ("barrier", gfc_match_omp_barrier, ST_OMP_BARRIER);
       break;
     case 'c':
-      match ("critical", gfc_match_omp_critical, ST_OMP_CRITICAL);
+      matcho ("cancellation% point", gfc_match_omp_cancellation_point,
+             ST_OMP_CANCELLATION_POINT);
+      matcho ("cancel", gfc_match_omp_cancel, ST_OMP_CANCEL);
+      matcho ("critical", gfc_match_omp_critical, ST_OMP_CRITICAL);
       break;
     case 'd':
-      match ("do", gfc_match_omp_do, ST_OMP_DO);
+      matchs ("declare reduction", gfc_match_omp_declare_reduction,
+             ST_OMP_DECLARE_REDUCTION);
+      matchs ("declare simd", gfc_match_omp_declare_simd,
+             ST_OMP_DECLARE_SIMD);
+      matcho ("declare target", gfc_match_omp_declare_target,
+             ST_OMP_DECLARE_TARGET);
+      matchs ("distribute parallel do simd",
+             gfc_match_omp_distribute_parallel_do_simd,
+             ST_OMP_DISTRIBUTE_PARALLEL_DO_SIMD);
+      matcho ("distribute parallel do", gfc_match_omp_distribute_parallel_do,
+             ST_OMP_DISTRIBUTE_PARALLEL_DO);
+      matchs ("distribute simd", gfc_match_omp_distribute_simd,
+             ST_OMP_DISTRIBUTE_SIMD);
+      matcho ("distribute", gfc_match_omp_distribute, ST_OMP_DISTRIBUTE);
+      matchs ("do simd", gfc_match_omp_do_simd, ST_OMP_DO_SIMD);
+      matcho ("do", gfc_match_omp_do, ST_OMP_DO);
       break;
     case 'e':
-      match ("end atomic", gfc_match_omp_eos, ST_OMP_END_ATOMIC);
-      match ("end critical", gfc_match_omp_critical, ST_OMP_END_CRITICAL);
-      match ("end do", gfc_match_omp_end_nowait, ST_OMP_END_DO);
-      match ("end master", gfc_match_omp_eos, ST_OMP_END_MASTER);
-      match ("end ordered", gfc_match_omp_eos, ST_OMP_END_ORDERED);
-      match ("end parallel do", gfc_match_omp_eos, ST_OMP_END_PARALLEL_DO);
-      match ("end parallel sections", gfc_match_omp_eos,
-            ST_OMP_END_PARALLEL_SECTIONS);
-      match ("end parallel workshare", gfc_match_omp_eos,
-            ST_OMP_END_PARALLEL_WORKSHARE);
-      match ("end parallel", gfc_match_omp_eos, ST_OMP_END_PARALLEL);
-      match ("end sections", gfc_match_omp_end_nowait, ST_OMP_END_SECTIONS);
-      match ("end single", gfc_match_omp_end_single, ST_OMP_END_SINGLE);
-      match ("end task", gfc_match_omp_eos, ST_OMP_END_TASK);
-      match ("end workshare", gfc_match_omp_end_nowait,
-            ST_OMP_END_WORKSHARE);
+      matcho ("end atomic", gfc_match_omp_eos, ST_OMP_END_ATOMIC);
+      matcho ("end critical", gfc_match_omp_critical, ST_OMP_END_CRITICAL);
+      matchs ("end distribute parallel do simd", gfc_match_omp_eos,
+             ST_OMP_END_DISTRIBUTE_PARALLEL_DO_SIMD);
+      matcho ("end distribute parallel do", gfc_match_omp_eos,
+             ST_OMP_END_DISTRIBUTE_PARALLEL_DO);
+      matchs ("end distribute simd", gfc_match_omp_eos,
+             ST_OMP_END_DISTRIBUTE_SIMD);
+      matcho ("end distribute", gfc_match_omp_eos, ST_OMP_END_DISTRIBUTE);
+      matchs ("end do simd", gfc_match_omp_end_nowait, ST_OMP_END_DO_SIMD);
+      matcho ("end do", gfc_match_omp_end_nowait, ST_OMP_END_DO);
+      matchs ("end simd", gfc_match_omp_eos, ST_OMP_END_SIMD);
+      matcho ("end master", gfc_match_omp_eos, ST_OMP_END_MASTER);
+      matcho ("end ordered", gfc_match_omp_eos, ST_OMP_END_ORDERED);
+      matchs ("end parallel do simd", gfc_match_omp_eos,
+             ST_OMP_END_PARALLEL_DO_SIMD);
+      matcho ("end parallel do", gfc_match_omp_eos, ST_OMP_END_PARALLEL_DO);
+      matcho ("end parallel sections", gfc_match_omp_eos,
+             ST_OMP_END_PARALLEL_SECTIONS);
+      matcho ("end parallel workshare", gfc_match_omp_eos,
+             ST_OMP_END_PARALLEL_WORKSHARE);
+      matcho ("end parallel", gfc_match_omp_eos, ST_OMP_END_PARALLEL);
+      matcho ("end sections", gfc_match_omp_end_nowait, ST_OMP_END_SECTIONS);
+      matcho ("end single", gfc_match_omp_end_single, ST_OMP_END_SINGLE);
+      matcho ("end target data", gfc_match_omp_eos, ST_OMP_END_TARGET_DATA);
+      matchs ("end target teams distribute parallel do simd",
+             gfc_match_omp_eos,
+             ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD);
+      matcho ("end target teams distribute parallel do", gfc_match_omp_eos,
+             ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO);
+      matchs ("end target teams distribute simd", gfc_match_omp_eos,
+             ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_SIMD);
+      matcho ("end target teams distribute", gfc_match_omp_eos,
+             ST_OMP_END_TARGET_TEAMS_DISTRIBUTE);
+      matcho ("end target teams", gfc_match_omp_eos, ST_OMP_END_TARGET_TEAMS);
+      matcho ("end target", gfc_match_omp_eos, ST_OMP_END_TARGET);
+      matcho ("end taskgroup", gfc_match_omp_eos, ST_OMP_END_TASKGROUP);
+      matcho ("end task", gfc_match_omp_eos, ST_OMP_END_TASK);
+      matchs ("end teams distribute parallel do simd", gfc_match_omp_eos,
+             ST_OMP_END_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD);
+      matcho ("end teams distribute parallel do", gfc_match_omp_eos,
+             ST_OMP_END_TEAMS_DISTRIBUTE_PARALLEL_DO);
+      matchs ("end teams distribute simd", gfc_match_omp_eos,
+             ST_OMP_END_TEAMS_DISTRIBUTE_SIMD);
+      matcho ("end teams distribute", gfc_match_omp_eos,
+             ST_OMP_END_TEAMS_DISTRIBUTE);
+      matcho ("end teams", gfc_match_omp_eos, ST_OMP_END_TEAMS);
+      matcho ("end workshare", gfc_match_omp_end_nowait,
+             ST_OMP_END_WORKSHARE);
       break;
     case 'f':
-      match ("flush", gfc_match_omp_flush, ST_OMP_FLUSH);
+      matcho ("flush", gfc_match_omp_flush, ST_OMP_FLUSH);
       break;
     case 'm':
-      match ("master", gfc_match_omp_master, ST_OMP_MASTER);
+      matcho ("master", gfc_match_omp_master, ST_OMP_MASTER);
       break;
     case 'o':
-      match ("ordered", gfc_match_omp_ordered, ST_OMP_ORDERED);
+      matcho ("ordered", gfc_match_omp_ordered, ST_OMP_ORDERED);
       break;
     case 'p':
-      match ("parallel do", gfc_match_omp_parallel_do, ST_OMP_PARALLEL_DO);
-      match ("parallel sections", gfc_match_omp_parallel_sections,
-            ST_OMP_PARALLEL_SECTIONS);
-      match ("parallel workshare", gfc_match_omp_parallel_workshare,
-            ST_OMP_PARALLEL_WORKSHARE);
-      match ("parallel", gfc_match_omp_parallel, ST_OMP_PARALLEL);
+      matchs ("parallel do simd", gfc_match_omp_parallel_do_simd,
+             ST_OMP_PARALLEL_DO_SIMD);
+      matcho ("parallel do", gfc_match_omp_parallel_do, ST_OMP_PARALLEL_DO);
+      matcho ("parallel sections", gfc_match_omp_parallel_sections,
+             ST_OMP_PARALLEL_SECTIONS);
+      matcho ("parallel workshare", gfc_match_omp_parallel_workshare,
+             ST_OMP_PARALLEL_WORKSHARE);
+      matcho ("parallel", gfc_match_omp_parallel, ST_OMP_PARALLEL);
       break;
     case 's':
-      match ("sections", gfc_match_omp_sections, ST_OMP_SECTIONS);
-      match ("section", gfc_match_omp_eos, ST_OMP_SECTION);
-      match ("single", gfc_match_omp_single, ST_OMP_SINGLE);
+      matcho ("sections", gfc_match_omp_sections, ST_OMP_SECTIONS);
+      matcho ("section", gfc_match_omp_eos, ST_OMP_SECTION);
+      matchs ("simd", gfc_match_omp_simd, ST_OMP_SIMD);
+      matcho ("single", gfc_match_omp_single, ST_OMP_SINGLE);
       break;
     case 't':
-      match ("task", gfc_match_omp_task, ST_OMP_TASK);
-      match ("taskwait", gfc_match_omp_taskwait, ST_OMP_TASKWAIT);
-      match ("taskyield", gfc_match_omp_taskyield, ST_OMP_TASKYIELD);
-      match ("threadprivate", gfc_match_omp_threadprivate,
-            ST_OMP_THREADPRIVATE);
+      matcho ("target data", gfc_match_omp_target_data, ST_OMP_TARGET_DATA);
+      matchs ("target teams distribute parallel do simd",
+             gfc_match_omp_target_teams_distribute_parallel_do_simd,
+             ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD);
+      matcho ("target teams distribute parallel do",
+             gfc_match_omp_target_teams_distribute_parallel_do,
+             ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO);
+      matchs ("target teams distribute simd",
+             gfc_match_omp_target_teams_distribute_simd,
+             ST_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD);
+      matcho ("target teams distribute", gfc_match_omp_target_teams_distribute,
+             ST_OMP_TARGET_TEAMS_DISTRIBUTE);
+      matcho ("target teams", gfc_match_omp_target_teams, ST_OMP_TARGET_TEAMS);
+      matcho ("target update", gfc_match_omp_target_update,
+             ST_OMP_TARGET_UPDATE);
+      matcho ("target", gfc_match_omp_target, ST_OMP_TARGET);
+      matcho ("taskgroup", gfc_match_omp_taskgroup, ST_OMP_TASKGROUP);
+      matcho ("taskwait", gfc_match_omp_taskwait, ST_OMP_TASKWAIT);
+      matcho ("taskyield", gfc_match_omp_taskyield, ST_OMP_TASKYIELD);
+      matcho ("task", gfc_match_omp_task, ST_OMP_TASK);
+      matchs ("teams distribute parallel do simd",
+             gfc_match_omp_teams_distribute_parallel_do_simd,
+             ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD);
+      matcho ("teams distribute parallel do",
+             gfc_match_omp_teams_distribute_parallel_do,
+             ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO);
+      matchs ("teams distribute simd", gfc_match_omp_teams_distribute_simd,
+             ST_OMP_TEAMS_DISTRIBUTE_SIMD);
+      matcho ("teams distribute", gfc_match_omp_teams_distribute,
+             ST_OMP_TEAMS_DISTRIBUTE);
+      matcho ("teams", gfc_match_omp_teams, ST_OMP_TEAMS);
+      matcho ("threadprivate", gfc_match_omp_threadprivate,
+             ST_OMP_THREADPRIVATE);
       break;
     case 'w':
-      match ("workshare", gfc_match_omp_workshare, ST_OMP_WORKSHARE);
+      matcho ("workshare", gfc_match_omp_workshare, ST_OMP_WORKSHARE);
       break;
     }
 
   /* All else has failed, so give up.  See if any of the matchers has
-     stored an error message of some sort.  */
+     stored an error message of some sort.  Don't error out if
+     not -fopenmp and simd_matched is false, i.e. if a directive other
+     than one marked with match has been seen.  */
 
-  if (gfc_error_check () == 0)
-    gfc_error_now ("Unclassifiable OpenMP directive at %C");
+  if (gfc_option.gfc_flag_openmp || simd_matched)
+    {
+      if (gfc_error_check () == 0)
+       gfc_error_now ("Unclassifiable OpenMP directive at %C");
+    }
 
   reject_statement ();
 
@@ -753,7 +894,9 @@ next_free (void)
          return decode_gcc_attribute ();
 
        }
-      else if (c == '$' && gfc_option.gfc_flag_openmp)
+      else if (c == '$'
+              && (gfc_option.gfc_flag_openmp
+                  || gfc_option.gfc_flag_openmp_simd))
        {
          int i;
 
@@ -842,7 +985,9 @@ next_fixed (void)
 
              return decode_gcc_attribute ();
            }
-         else if (c == '$' && gfc_option.gfc_flag_openmp)
+         else if (c == '$'
+                  && (gfc_option.gfc_flag_openmp
+                      || gfc_option.gfc_flag_openmp_simd))
            {
              for (i = 0; i < 4; i++, c = gfc_next_char_literal (NONSTRING))
                gcc_assert ((char) gfc_wide_tolower (c) == "$omp"[i]);
@@ -1013,8 +1158,9 @@ next_statement (void)
   case ST_ASSIGNMENT: case ST_ARITHMETIC_IF: case ST_WHERE: case ST_FORALL: \
   case ST_LABEL_ASSIGNMENT: case ST_FLUSH: case ST_OMP_FLUSH: \
   case ST_OMP_BARRIER: case ST_OMP_TASKWAIT: case ST_OMP_TASKYIELD: \
-  case ST_ERROR_STOP: case ST_SYNC_ALL: case ST_SYNC_IMAGES: \
-  case ST_SYNC_MEMORY: case ST_LOCK: case ST_UNLOCK
+  case ST_OMP_CANCEL: case ST_OMP_CANCELLATION_POINT: \
+  case ST_OMP_TARGET_UPDATE: case ST_ERROR_STOP: case ST_SYNC_ALL: \
+  case ST_SYNC_IMAGES: case ST_SYNC_MEMORY: case ST_LOCK: case ST_UNLOCK
 
 /* Statements that mark other executable statements.  */
 
@@ -1026,14 +1172,28 @@ next_statement (void)
   case ST_OMP_CRITICAL: case ST_OMP_MASTER: case ST_OMP_SINGLE: \
   case ST_OMP_DO: case ST_OMP_PARALLEL_DO: case ST_OMP_ATOMIC: \
   case ST_OMP_WORKSHARE: case ST_OMP_PARALLEL_WORKSHARE: \
-  case ST_OMP_TASK: case ST_CRITICAL
+  case ST_OMP_TASK: case ST_OMP_TASKGROUP: case ST_OMP_SIMD: \
+  case ST_OMP_DO_SIMD: case ST_OMP_PARALLEL_DO_SIMD: case ST_OMP_TARGET: \
+  case ST_OMP_TARGET_DATA: case ST_OMP_TARGET_TEAMS: \
+  case ST_OMP_TARGET_TEAMS_DISTRIBUTE: \
+  case ST_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD: \
+  case ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO: \
+  case ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD: \
+  case ST_OMP_TEAMS: case ST_OMP_TEAMS_DISTRIBUTE: \
+  case ST_OMP_TEAMS_DISTRIBUTE_SIMD: \
+  case ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO: \
+  case ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD: case ST_OMP_DISTRIBUTE: \
+  case ST_OMP_DISTRIBUTE_SIMD: case ST_OMP_DISTRIBUTE_PARALLEL_DO: \
+  case ST_OMP_DISTRIBUTE_PARALLEL_DO_SIMD: \
+  case ST_CRITICAL
 
 /* Declaration statements */
 
 #define case_decl case ST_ATTR_DECL: case ST_COMMON: case ST_DATA_DECL: \
   case ST_EQUIVALENCE: case ST_NAMELIST: case ST_STATEMENT_FUNCTION: \
   case ST_TYPE: case ST_INTERFACE: case ST_OMP_THREADPRIVATE: \
-  case ST_PROCEDURE
+  case ST_PROCEDURE: case ST_OMP_DECLARE_SIMD: case ST_OMP_DECLARE_REDUCTION: \
+  case ST_OMP_DECLARE_TARGET
 
 /* Block end statements.  Errors associated with interchanging these
    are detected in gfc_match_end().  */
@@ -1524,21 +1684,69 @@ gfc_ascii_statement (gfc_statement st)
     case ST_OMP_BARRIER:
       p = "!$OMP BARRIER";
       break;
+    case ST_OMP_CANCEL:
+      p = "!$OMP CANCEL";
+      break;
+    case ST_OMP_CANCELLATION_POINT:
+      p = "!$OMP CANCELLATION POINT";
+      break;
     case ST_OMP_CRITICAL:
       p = "!$OMP CRITICAL";
       break;
+    case ST_OMP_DECLARE_REDUCTION:
+      p = "!$OMP DECLARE REDUCTION";
+      break;
+    case ST_OMP_DECLARE_SIMD:
+      p = "!$OMP DECLARE SIMD";
+      break;
+    case ST_OMP_DECLARE_TARGET:
+      p = "!$OMP DECLARE TARGET";
+      break;
+    case ST_OMP_DISTRIBUTE:
+      p = "!$OMP DISTRIBUTE";
+      break;
+    case ST_OMP_DISTRIBUTE_PARALLEL_DO:
+      p = "!$OMP DISTRIBUTE PARALLEL DO";
+      break;
+    case ST_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
+      p = "!$OMP DISTRIBUTE PARALLEL DO SIMD";
+      break;
+    case ST_OMP_DISTRIBUTE_SIMD:
+      p = "!$OMP DISTRIBUTE SIMD";
+      break;
     case ST_OMP_DO:
       p = "!$OMP DO";
       break;
+    case ST_OMP_DO_SIMD:
+      p = "!$OMP DO SIMD";
+      break;
     case ST_OMP_END_ATOMIC:
       p = "!$OMP END ATOMIC";
       break;
     case ST_OMP_END_CRITICAL:
       p = "!$OMP END CRITICAL";
       break;
+    case ST_OMP_END_DISTRIBUTE:
+      p = "!$OMP END DISTRIBUTE";
+      break;
+    case ST_OMP_END_DISTRIBUTE_PARALLEL_DO:
+      p = "!$OMP END DISTRIBUTE PARALLEL DO";
+      break;
+    case ST_OMP_END_DISTRIBUTE_PARALLEL_DO_SIMD:
+      p = "!$OMP END DISTRIBUTE PARALLEL DO SIMD";
+      break;
+    case ST_OMP_END_DISTRIBUTE_SIMD:
+      p = "!$OMP END DISTRIBUTE SIMD";
+      break;
     case ST_OMP_END_DO:
       p = "!$OMP END DO";
       break;
+    case ST_OMP_END_DO_SIMD:
+      p = "!$OMP END DO SIMD";
+      break;
+    case ST_OMP_END_SIMD:
+      p = "!$OMP END SIMD";
+      break;
     case ST_OMP_END_MASTER:
       p = "!$OMP END MASTER";
       break;
@@ -1551,6 +1759,9 @@ gfc_ascii_statement (gfc_statement st)
     case ST_OMP_END_PARALLEL_DO:
       p = "!$OMP END PARALLEL DO";
       break;
+    case ST_OMP_END_PARALLEL_DO_SIMD:
+      p = "!$OMP END PARALLEL DO SIMD";
+      break;
     case ST_OMP_END_PARALLEL_SECTIONS:
       p = "!$OMP END PARALLEL SECTIONS";
       break;
@@ -1566,6 +1777,45 @@ gfc_ascii_statement (gfc_statement st)
     case ST_OMP_END_TASK:
       p = "!$OMP END TASK";
       break;
+    case ST_OMP_END_TARGET:
+      p = "!$OMP END TARGET";
+      break;
+    case ST_OMP_END_TARGET_DATA:
+      p = "!$OMP END TARGET DATA";
+      break;
+    case ST_OMP_END_TARGET_TEAMS:
+      p = "!$OMP END TARGET TEAMS";
+      break;
+    case ST_OMP_END_TARGET_TEAMS_DISTRIBUTE:
+      p = "!$OMP END TARGET TEAMS DISTRIBUTE";
+      break;
+    case ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
+      p = "!$OMP END TARGET TEAMS DISTRIBUTE PARALLEL DO";
+      break;
+    case ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+      p = "!$OMP END TARGET TEAMS DISTRIBUTE PARALLEL DO SIMD";
+      break;
+    case ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_SIMD:
+      p = "!$OMP END TARGET TEAMS DISTRIBUTE SIMD";
+      break;
+    case ST_OMP_END_TASKGROUP:
+      p = "!$OMP END TASKGROUP";
+      break;
+    case ST_OMP_END_TEAMS:
+      p = "!$OMP END TEAMS";
+      break;
+    case ST_OMP_END_TEAMS_DISTRIBUTE:
+      p = "!$OMP END TEAMS DISTRIBUTE";
+      break;
+    case ST_OMP_END_TEAMS_DISTRIBUTE_PARALLEL_DO:
+      p = "!$OMP END TEAMS DISTRIBUTE PARALLEL DO";
+      break;
+    case ST_OMP_END_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+      p = "!$OMP END TEAMS DISTRIBUTE PARALLEL DO SIMD";
+      break;
+    case ST_OMP_END_TEAMS_DISTRIBUTE_SIMD:
+      p = "!$OMP END TEAMS DISTRIBUTE SIMD";
+      break;
     case ST_OMP_END_WORKSHARE:
       p = "!$OMP END WORKSHARE";
       break;
@@ -1584,6 +1834,9 @@ gfc_ascii_statement (gfc_statement st)
     case ST_OMP_PARALLEL_DO:
       p = "!$OMP PARALLEL DO";
       break;
+    case ST_OMP_PARALLEL_DO_SIMD:
+      p = "!$OMP PARALLEL DO SIMD";
+      break;
     case ST_OMP_PARALLEL_SECTIONS:
       p = "!$OMP PARALLEL SECTIONS";
       break;
@@ -1596,18 +1849,63 @@ gfc_ascii_statement (gfc_statement st)
     case ST_OMP_SECTION:
       p = "!$OMP SECTION";
       break;
+    case ST_OMP_SIMD:
+      p = "!$OMP SIMD";
+      break;
     case ST_OMP_SINGLE:
       p = "!$OMP SINGLE";
       break;
+    case ST_OMP_TARGET:
+      p = "!$OMP TARGET";
+      break;
+    case ST_OMP_TARGET_DATA:
+      p = "!$OMP TARGET DATA";
+      break;
+    case ST_OMP_TARGET_TEAMS:
+      p = "!$OMP TARGET TEAMS";
+      break;
+    case ST_OMP_TARGET_TEAMS_DISTRIBUTE:
+      p = "!$OMP TARGET TEAMS DISTRIBUTE";
+      break;
+    case ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
+      p = "!$OMP TARGET TEAMS DISTRIBUTE PARALLEL DO";
+      break;
+    case ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+      p = "!$OMP TARGET TEAMS DISTRIBUTE PARALLEL DO SIMD";
+      break;
+    case ST_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
+      p = "!$OMP TARGET TEAMS DISTRIBUTE SIMD";
+      break;
+    case ST_OMP_TARGET_UPDATE:
+      p = "!$OMP TARGET UPDATE";
+      break;
     case ST_OMP_TASK:
       p = "!$OMP TASK";
       break;
+    case ST_OMP_TASKGROUP:
+      p = "!$OMP TASKGROUP";
+      break;
     case ST_OMP_TASKWAIT:
       p = "!$OMP TASKWAIT";
       break;
     case ST_OMP_TASKYIELD:
       p = "!$OMP TASKYIELD";
       break;
+    case ST_OMP_TEAMS:
+      p = "!$OMP TEAMS";
+      break;
+    case ST_OMP_TEAMS_DISTRIBUTE:
+      p = "!$OMP TEAMS DISTRIBUTE";
+      break;
+    case ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
+      p = "!$OMP TEAMS DISTRIBUTE PARALLEL DO";
+      break;
+    case ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+      p = "!$OMP TEAMS DISTRIBUTE PARALLEL DO SIMD";
+      break;
+    case ST_OMP_TEAMS_DISTRIBUTE_SIMD:
+      p = "!$OMP TEAMS DISTRIBUTE SIMD";
+      break;
     case ST_OMP_THREADPRIVATE:
       p = "!$OMP THREADPRIVATE";
       break;
@@ -3578,7 +3876,53 @@ parse_omp_do (gfc_statement omp_st)
   pop_state ();
 
   st = next_statement ();
-  if (st == (omp_st == ST_OMP_DO ? ST_OMP_END_DO : ST_OMP_END_PARALLEL_DO))
+  gfc_statement omp_end_st = ST_OMP_END_DO;
+  switch (omp_st)
+    {
+    case ST_OMP_DISTRIBUTE: omp_end_st = ST_OMP_END_DISTRIBUTE; break;
+    case ST_OMP_DISTRIBUTE_PARALLEL_DO:
+      omp_end_st = ST_OMP_END_DISTRIBUTE_PARALLEL_DO;
+      break;
+    case ST_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
+      omp_end_st = ST_OMP_END_DISTRIBUTE_PARALLEL_DO_SIMD;
+      break;
+    case ST_OMP_DISTRIBUTE_SIMD:
+      omp_end_st = ST_OMP_END_DISTRIBUTE_SIMD;
+      break;
+    case ST_OMP_DO: omp_end_st = ST_OMP_END_DO; break;
+    case ST_OMP_DO_SIMD: omp_end_st = ST_OMP_END_DO_SIMD; break;
+    case ST_OMP_PARALLEL_DO: omp_end_st = ST_OMP_END_PARALLEL_DO; break;
+    case ST_OMP_PARALLEL_DO_SIMD:
+      omp_end_st = ST_OMP_END_PARALLEL_DO_SIMD;
+      break;
+    case ST_OMP_SIMD: omp_end_st = ST_OMP_END_SIMD; break;
+    case ST_OMP_TARGET_TEAMS_DISTRIBUTE:
+      omp_end_st = ST_OMP_END_TARGET_TEAMS_DISTRIBUTE;
+      break;
+    case ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
+      omp_end_st = ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO;
+      break;
+    case ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+      omp_end_st = ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD;
+      break;
+    case ST_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
+      omp_end_st = ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_SIMD;
+      break;
+    case ST_OMP_TEAMS_DISTRIBUTE:
+      omp_end_st = ST_OMP_END_TEAMS_DISTRIBUTE;
+      break;
+    case ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
+      omp_end_st = ST_OMP_END_TEAMS_DISTRIBUTE_PARALLEL_DO;
+      break;
+    case ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+      omp_end_st = ST_OMP_END_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD;
+      break;
+    case ST_OMP_TEAMS_DISTRIBUTE_SIMD:
+      omp_end_st = ST_OMP_END_TEAMS_DISTRIBUTE_SIMD;
+      break;
+    default: gcc_unreachable ();
+    }
+  if (st == omp_end_st)
     {
       if (new_st.op == EXEC_OMP_END_NOWAIT)
        cp->ext.omp_clauses->nowait |= new_st.ext.omp_bool;
@@ -3610,7 +3954,8 @@ parse_omp_atomic (void)
   np = new_level (cp);
   np->op = cp->op;
   np->block = NULL;
-  count = 1 + (cp->ext.omp_atomic == GFC_OMP_ATOMIC_CAPTURE);
+  count = 1 + ((cp->ext.omp_atomic & GFC_OMP_ATOMIC_MASK)
+              == GFC_OMP_ATOMIC_CAPTURE);
 
   while (count)
     {
@@ -3636,7 +3981,8 @@ parse_omp_atomic (void)
       gfc_warning_check ();
       st = next_statement ();
     }
-  else if (cp->ext.omp_atomic == GFC_OMP_ATOMIC_CAPTURE)
+  else if ((cp->ext.omp_atomic & GFC_OMP_ATOMIC_MASK)
+          == GFC_OMP_ATOMIC_CAPTURE)
     gfc_error ("Missing !$OMP END ATOMIC after !$OMP ATOMIC CAPTURE at %C");
   return st;
 }
@@ -3682,9 +4028,60 @@ parse_omp_structured_block (gfc_statement omp_st, bool workshare_stmts_only)
     case ST_OMP_SINGLE:
       omp_end_st = ST_OMP_END_SINGLE;
       break;
+    case ST_OMP_TARGET:
+      omp_end_st = ST_OMP_END_TARGET;
+      break;
+    case ST_OMP_TARGET_DATA:
+      omp_end_st = ST_OMP_END_TARGET_DATA;
+      break;
+    case ST_OMP_TARGET_TEAMS:
+      omp_end_st = ST_OMP_END_TARGET_TEAMS;
+      break;
+    case ST_OMP_TARGET_TEAMS_DISTRIBUTE:
+      omp_end_st = ST_OMP_END_TARGET_TEAMS_DISTRIBUTE;
+      break;
+    case ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
+      omp_end_st = ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO;
+      break;
+    case ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+      omp_end_st = ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD;
+      break;
+    case ST_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
+      omp_end_st = ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_SIMD;
+      break;
     case ST_OMP_TASK:
       omp_end_st = ST_OMP_END_TASK;
       break;
+    case ST_OMP_TASKGROUP:
+      omp_end_st = ST_OMP_END_TASKGROUP;
+      break;
+    case ST_OMP_TEAMS:
+      omp_end_st = ST_OMP_END_TEAMS;
+      break;
+    case ST_OMP_TEAMS_DISTRIBUTE:
+      omp_end_st = ST_OMP_END_TEAMS_DISTRIBUTE;
+      break;
+    case ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
+      omp_end_st = ST_OMP_END_TEAMS_DISTRIBUTE_PARALLEL_DO;
+      break;
+    case ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+      omp_end_st = ST_OMP_END_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD;
+      break;
+    case ST_OMP_TEAMS_DISTRIBUTE_SIMD:
+      omp_end_st = ST_OMP_END_TEAMS_DISTRIBUTE_SIMD;
+      break;
+    case ST_OMP_DISTRIBUTE:
+      omp_end_st = ST_OMP_END_DISTRIBUTE;
+      break;
+    case ST_OMP_DISTRIBUTE_PARALLEL_DO:
+      omp_end_st = ST_OMP_END_DISTRIBUTE_PARALLEL_DO;
+      break;
+    case ST_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
+      omp_end_st = ST_OMP_END_DISTRIBUTE_PARALLEL_DO_SIMD;
+      break;
+    case ST_OMP_DISTRIBUTE_SIMD:
+      omp_end_st = ST_OMP_END_DISTRIBUTE_SIMD;
+      break;
     case ST_OMP_WORKSHARE:
       omp_end_st = ST_OMP_END_WORKSHARE;
       break;
@@ -3744,6 +4141,7 @@ parse_omp_structured_block (gfc_statement omp_st, bool workshare_stmts_only)
                  break;
 
                case ST_OMP_PARALLEL_DO:
+               case ST_OMP_PARALLEL_DO_SIMD:
                  st = parse_omp_do (st);
                  continue;
 
@@ -3916,7 +4314,12 @@ parse_executable (gfc_statement st)
        case ST_OMP_CRITICAL:
        case ST_OMP_MASTER:
        case ST_OMP_SINGLE:
+       case ST_OMP_TARGET:
+       case ST_OMP_TARGET_DATA:
+       case ST_OMP_TARGET_TEAMS:
+       case ST_OMP_TEAMS:
        case ST_OMP_TASK:
+       case ST_OMP_TASKGROUP:
          parse_omp_structured_block (st, false);
          break;
 
@@ -3925,8 +4328,23 @@ parse_executable (gfc_statement st)
          parse_omp_structured_block (st, true);
          break;
 
+       case ST_OMP_DISTRIBUTE:
+       case ST_OMP_DISTRIBUTE_PARALLEL_DO:
+       case ST_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
+       case ST_OMP_DISTRIBUTE_SIMD:
        case ST_OMP_DO:
+       case ST_OMP_DO_SIMD:
        case ST_OMP_PARALLEL_DO:
+       case ST_OMP_PARALLEL_DO_SIMD:
+       case ST_OMP_SIMD:
+       case ST_OMP_TARGET_TEAMS_DISTRIBUTE:
+       case ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
+       case ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+       case ST_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
+       case ST_OMP_TEAMS_DISTRIBUTE:
+       case ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
+       case ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+       case ST_OMP_TEAMS_DISTRIBUTE_SIMD:
          st = parse_omp_do (st);
          if (st == ST_IMPLIED_ENDDO)
            return st;
index 6e23e57..c959f5d 100644 (file)
@@ -40,7 +40,7 @@ typedef enum seq_type
 seq_type;
 
 /* Stack to keep track of the nesting of blocks as we move through the
-   code.  See resolve_branch() and resolve_code().  */
+   code.  See resolve_branch() and gfc_resolve_code().  */
 
 typedef struct code_stack
 {
@@ -2887,7 +2887,8 @@ resolve_function (gfc_expr *expr)
 
   /* See if function is already resolved.  */
 
-  if (expr->value.function.name != NULL)
+  if (expr->value.function.name != NULL
+      || expr->value.function.isym != NULL)
     {
       if (expr->ts.type == BT_UNKNOWN)
        expr->ts = sym->ts;
@@ -4884,7 +4885,7 @@ resolve_variable (gfc_expr *e)
   if (check_assumed_size_reference (sym, e))
     return false;
 
-  /* Deal with forward references to entries during resolve_code, to
+  /* Deal with forward references to entries during gfc_resolve_code, to
      satisfy, at least partially, 12.5.2.5.  */
   if (gfc_current_ns->entries
       && current_entry_id == sym->entry_id
@@ -8926,8 +8927,6 @@ resolve_block_construct (gfc_code* code)
 /* Resolve lists of blocks found in IF, SELECT CASE, WHERE, FORALL, GOTO and
    DO code nodes.  */
 
-static void resolve_code (gfc_code *, gfc_namespace *);
-
 void
 gfc_resolve_blocks (gfc_code *b, gfc_namespace *ns)
 {
@@ -8979,18 +8978,39 @@ gfc_resolve_blocks (gfc_code *b, gfc_namespace *ns)
 
        case EXEC_OMP_ATOMIC:
        case EXEC_OMP_CRITICAL:
+       case EXEC_OMP_DISTRIBUTE:
+       case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
+       case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
+       case EXEC_OMP_DISTRIBUTE_SIMD:
        case EXEC_OMP_DO:
+       case EXEC_OMP_DO_SIMD:
        case EXEC_OMP_MASTER:
        case EXEC_OMP_ORDERED:
        case EXEC_OMP_PARALLEL:
        case EXEC_OMP_PARALLEL_DO:
+       case EXEC_OMP_PARALLEL_DO_SIMD:
        case EXEC_OMP_PARALLEL_SECTIONS:
        case EXEC_OMP_PARALLEL_WORKSHARE:
        case EXEC_OMP_SECTIONS:
+       case EXEC_OMP_SIMD:
        case EXEC_OMP_SINGLE:
+       case EXEC_OMP_TARGET:
+       case EXEC_OMP_TARGET_DATA:
+       case EXEC_OMP_TARGET_TEAMS:
+       case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
+       case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
+       case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+       case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
+       case EXEC_OMP_TARGET_UPDATE:
        case EXEC_OMP_TASK:
+       case EXEC_OMP_TASKGROUP:
        case EXEC_OMP_TASKWAIT:
        case EXEC_OMP_TASKYIELD:
+       case EXEC_OMP_TEAMS:
+       case EXEC_OMP_TEAMS_DISTRIBUTE:
+       case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
+       case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+       case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
        case EXEC_OMP_WORKSHARE:
          break;
 
@@ -8998,7 +9018,7 @@ gfc_resolve_blocks (gfc_code *b, gfc_namespace *ns)
          gfc_internal_error ("gfc_resolve_blocks(): Bad block type");
        }
 
-      resolve_code (b->next, ns);
+      gfc_resolve_code (b->next, ns);
     }
 }
 
@@ -9411,7 +9431,7 @@ nonscalar_typebound_assign (gfc_symbol *derived, int depth)
    The pointer assignments are taken care of by the intrinsic
    assignment of the structure itself.  This function recursively adds
    defined assignments where required.  The recursion is accomplished
-   by calling resolve_code.
+   by calling gfc_resolve_code.
 
    When the lhs in a defined assignment has intent INOUT, we need a
    temporary for the lhs.  In pseudo-code:
@@ -9529,9 +9549,9 @@ generate_component_assignments (gfc_code **code, gfc_namespace *ns)
                                    comp1, comp2, (*code)->loc);
 
       /* Convert the assignment if there is a defined assignment for
-        this type.  Otherwise, using the call from resolve_code,
+        this type.  Otherwise, using the call from gfc_resolve_code,
         recurse into its components.  */
-      resolve_code (this_code, ns);
+      gfc_resolve_code (this_code, ns);
 
       if (this_code->op == EXEC_ASSIGN_CALL)
        {
@@ -9695,8 +9715,8 @@ generate_component_assignments (gfc_code **code, gfc_namespace *ns)
 /* Given a block of code, recursively resolve everything pointed to by this
    code block.  */
 
-static void
-resolve_code (gfc_code *code, gfc_namespace *ns)
+void
+gfc_resolve_code (gfc_code *code, gfc_namespace *ns)
 {
   int omp_workshare_save;
   int forall_save, do_concurrent_save;
@@ -9733,13 +9753,28 @@ resolve_code (gfc_code *code, gfc_namespace *ns)
              break;
            case EXEC_OMP_PARALLEL:
            case EXEC_OMP_PARALLEL_DO:
+           case EXEC_OMP_PARALLEL_DO_SIMD:
            case EXEC_OMP_PARALLEL_SECTIONS:
+           case EXEC_OMP_TARGET_TEAMS:
+           case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
+           case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
+           case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+           case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
            case EXEC_OMP_TASK:
+           case EXEC_OMP_TEAMS:
+           case EXEC_OMP_TEAMS_DISTRIBUTE:
+           case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
+           case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+           case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
              omp_workshare_save = omp_workshare_flag;
              omp_workshare_flag = 0;
              gfc_resolve_omp_parallel_blocks (code, ns);
              break;
+           case EXEC_OMP_DISTRIBUTE:
+           case EXEC_OMP_DISTRIBUTE_SIMD:
            case EXEC_OMP_DO:
+           case EXEC_OMP_DO_SIMD:
+           case EXEC_OMP_SIMD:
              gfc_resolve_omp_do_blocks (code, ns);
              break;
            case EXEC_SELECT_TYPE:
@@ -9960,7 +9995,8 @@ resolve_code (gfc_code *code, gfc_namespace *ns)
 
        case EXEC_DO_WHILE:
          if (code->expr1 == NULL)
-           gfc_internal_error ("resolve_code(): No expression on DO WHILE");
+           gfc_internal_error ("gfc_resolve_code(): No expression on "
+                               "DO WHILE");
          if (t
              && (code->expr1->rank != 0
                  || code->expr1->ts.type != BT_LOGICAL))
@@ -10054,24 +10090,47 @@ resolve_code (gfc_code *code, gfc_namespace *ns)
 
        case EXEC_OMP_ATOMIC:
        case EXEC_OMP_BARRIER:
+       case EXEC_OMP_CANCEL:
+       case EXEC_OMP_CANCELLATION_POINT:
        case EXEC_OMP_CRITICAL:
        case EXEC_OMP_FLUSH:
+       case EXEC_OMP_DISTRIBUTE:
+       case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
+       case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
+       case EXEC_OMP_DISTRIBUTE_SIMD:
        case EXEC_OMP_DO:
+       case EXEC_OMP_DO_SIMD:
        case EXEC_OMP_MASTER:
        case EXEC_OMP_ORDERED:
        case EXEC_OMP_SECTIONS:
+       case EXEC_OMP_SIMD:
        case EXEC_OMP_SINGLE:
+       case EXEC_OMP_TARGET:
+       case EXEC_OMP_TARGET_DATA:
+       case EXEC_OMP_TARGET_TEAMS:
+       case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
+       case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
+       case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+       case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
+       case EXEC_OMP_TARGET_UPDATE:
+       case EXEC_OMP_TASK:
+       case EXEC_OMP_TASKGROUP:
        case EXEC_OMP_TASKWAIT:
        case EXEC_OMP_TASKYIELD:
+       case EXEC_OMP_TEAMS:
+       case EXEC_OMP_TEAMS_DISTRIBUTE:
+       case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
+       case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+       case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
        case EXEC_OMP_WORKSHARE:
          gfc_resolve_omp_directive (code, ns);
          break;
 
        case EXEC_OMP_PARALLEL:
        case EXEC_OMP_PARALLEL_DO:
+       case EXEC_OMP_PARALLEL_DO_SIMD:
        case EXEC_OMP_PARALLEL_SECTIONS:
        case EXEC_OMP_PARALLEL_WORKSHARE:
-       case EXEC_OMP_TASK:
          omp_workshare_save = omp_workshare_flag;
          omp_workshare_flag = 0;
          gfc_resolve_omp_directive (code, ns);
@@ -10079,7 +10138,7 @@ resolve_code (gfc_code *code, gfc_namespace *ns)
          break;
 
        default:
-         gfc_internal_error ("resolve_code(): Bad statement code");
+         gfc_internal_error ("gfc_resolve_code(): Bad statement code");
        }
     }
 
@@ -10779,7 +10838,10 @@ resolve_fl_variable (gfc_symbol *sym, int mp_flag)
     }
 
   /* Constraints on deferred type parameter.  */
-  if (sym->ts.deferred && !(sym->attr.pointer || sym->attr.allocatable))
+  if (sym->ts.deferred
+      && !(sym->attr.pointer
+          || sym->attr.allocatable
+          || sym->attr.omp_udr_artificial_var))
     {
       gfc_error ("Entity '%s' at %L has a deferred type parameter and "
                 "requires either the pointer or allocatable attribute",
@@ -10794,7 +10856,8 @@ resolve_fl_variable (gfc_symbol *sym, int mp_flag)
         dummy arguments.  */
       e = sym->ts.u.cl->length;
       if (e == NULL && !sym->attr.dummy && !sym->attr.result
-         && !sym->ts.deferred && !sym->attr.select_type_temporary)
+         && !sym->ts.deferred && !sym->attr.select_type_temporary
+         && !sym->attr.omp_udr_artificial_var)
        {
          gfc_error ("Entity with assumed character length at %L must be a "
                     "dummy argument or a PARAMETER", &sym->declared_at);
@@ -11200,15 +11263,36 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag)
    the requirements of the standard for procedures used as finalizers.  */
 
 static bool
-gfc_resolve_finalizers (gfc_symbol* derived)
+gfc_resolve_finalizers (gfc_symbol* derived, bool *finalizable)
 {
   gfc_finalizer* list;
   gfc_finalizer** prev_link; /* For removing wrong entries from the list.  */
   bool result = true;
   bool seen_scalar = false;
+  gfc_symbol *vtab;
+  gfc_component *c;
 
+  /* Return early when not finalizable. Additionally, ensure that derived-type
+     components have a their finalizables resolved.  */
   if (!derived->f2k_derived || !derived->f2k_derived->finalizers)
-    return true;
+    {
+      bool has_final = false;
+      for (c = derived->components; c; c = c->next)
+       if (c->ts.type == BT_DERIVED
+           && !c->attr.pointer && !c->attr.proc_pointer && !c->attr.allocatable)
+         {
+           bool has_final2 = false;
+           if (!gfc_resolve_finalizers (c->ts.u.derived, &has_final))
+             return false;  /* Error.  */
+           has_final = has_final || has_final2;
+         }
+      if (!has_final)
+       {
+         if (finalizable)
+           *finalizable = false;
+         return true;
+       }
+    }
 
   /* Walk over the list of finalizer-procedures, check them, and if any one
      does not fit in with the standard's definition, print an error and remove
@@ -11330,12 +11414,15 @@ gfc_resolve_finalizers (gfc_symbol* derived)
        /* Remove wrong nodes immediately from the list so we don't risk any
           troubles in the future when they might fail later expectations.  */
 error:
-       result = false;
        i = list;
        *prev_link = list->next;
        gfc_free_finalizer (i);
+       result = false;
     }
 
+  if (result == false)
+    return false;
+
   /* Warn if we haven't seen a scalar finalizer procedure (but we know there
      were nodes in the list, must have been for arrays.  It is surely a good
      idea to have a scalar version there if there's something to finalize.  */
@@ -11344,8 +11431,14 @@ error:
                 " defined at %L, suggest also scalar one",
                 derived->name, &derived->declared_at);
 
-  gfc_find_derived_vtab (derived);
-  return result;
+  vtab = gfc_find_derived_vtab (derived);
+  c = vtab->ts.u.derived->components->next->next->next->next->next;
+  gfc_set_sym_referenced (c->initializer->symtree->n.sym);
+
+  if (finalizable)
+    *finalizable = true;
+
+  return true;
 }
 
 
@@ -12513,7 +12606,7 @@ resolve_fl_derived (gfc_symbol *sym)
     return false;
 
   /* Resolve the finalizer procedures.  */
-  if (!gfc_resolve_finalizers (sym))
+  if (!gfc_resolve_finalizers (sym, NULL))
     return false;
 
   if (sym->attr.is_class && sym->ts.u.derived == NULL)
@@ -13399,6 +13492,18 @@ resolve_symbol (gfc_symbol *sym)
              || sym->ns->proc_name->attr.flavor != FL_MODULE)))
     gfc_error ("Threadprivate at %L isn't SAVEd", &sym->declared_at);
 
+  /* Check omp declare target restrictions.  */
+  if (sym->attr.omp_declare_target
+      && sym->attr.flavor == FL_VARIABLE
+      && !sym->attr.save
+      && !sym->ns->save_all
+      && (!sym->attr.in_common
+         && sym->module == NULL
+         && (sym->ns->proc_name == NULL
+             || sym->ns->proc_name->attr.flavor != FL_MODULE)))
+    gfc_error ("!$OMP DECLARE TARGET variable '%s' at %L isn't SAVEd",
+              sym->name, &sym->declared_at);
+
   /* If we have come this far we can apply default-initializers, as
      described in 14.7.5, to those variables that have not already
      been assigned one.  */
@@ -14496,7 +14601,7 @@ gfc_resolve_uops (gfc_symtree *symtree)
    assign types to all intermediate expressions, make sure that all
    assignments are to compatible types and figure out which names
    refer to which functions or subroutines.  It doesn't check code
-   block, which is handled by resolve_code.  */
+   block, which is handled by gfc_resolve_code.  */
 
 static void
 resolve_types (gfc_namespace *ns)
@@ -14577,11 +14682,15 @@ resolve_types (gfc_namespace *ns)
 
   gfc_resolve_uops (ns->uop_root);
 
+  gfc_resolve_omp_declare_simd (ns);
+
+  gfc_resolve_omp_udrs (ns->omp_udr_root);
+
   gfc_current_ns = old_ns;
 }
 
 
-/* Call resolve_code recursively.  */
+/* Call gfc_resolve_code recursively.  */
 
 static void
 resolve_codes (gfc_namespace *ns)
@@ -14607,7 +14716,7 @@ resolve_codes (gfc_namespace *ns)
   old_obstack = labels_obstack;
   bitmap_obstack_initialize (&labels_obstack);
 
-  resolve_code (ns->code, ns);
+  gfc_resolve_code (ns->code, ns);
 
   bitmap_obstack_release (&labels_obstack);
   labels_obstack = old_obstack;
index 8f51734..8934924 100644 (file)
@@ -752,7 +752,8 @@ skip_free_comments (void)
             2) handle OpenMP conditional compilation, where
                !$ should be treated as 2 spaces (for initial lines
                only if followed by space).  */
-         if (gfc_option.gfc_flag_openmp && at_bol)
+         if ((gfc_option.gfc_flag_openmp
+              || gfc_option.gfc_flag_openmp_simd) && at_bol)
            {
              locus old_loc = gfc_current_locus;
              if (next_char () == '$')
@@ -878,7 +879,7 @@ skip_fixed_comments (void)
              && continue_line < gfc_linebuf_linenum (gfc_current_locus.lb))
            continue_line = gfc_linebuf_linenum (gfc_current_locus.lb);
 
-         if (gfc_option.gfc_flag_openmp)
+         if (gfc_option.gfc_flag_openmp || gfc_option.gfc_flag_openmp_simd)
            {
              if (next_char () == '$')
                {
@@ -1821,7 +1822,7 @@ include_line (gfc_char_t *line)
 
   c = line;
 
-  if (gfc_option.gfc_flag_openmp)
+  if (gfc_option.gfc_flag_openmp || gfc_option.gfc_flag_openmp_simd)
     {
       if (gfc_current_form == FORM_FREE)
        {
index 0e1cc70..0f18f78 100644 (file)
@@ -185,14 +185,36 @@ gfc_free_statement (gfc_code *p)
       gfc_free_forall_iterator (p->ext.forall_iterator);
       break;
 
+    case EXEC_OMP_CANCEL:
+    case EXEC_OMP_CANCELLATION_POINT:
+    case EXEC_OMP_DISTRIBUTE:
+    case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
+    case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
+    case EXEC_OMP_DISTRIBUTE_SIMD:
     case EXEC_OMP_DO:
+    case EXEC_OMP_DO_SIMD:
     case EXEC_OMP_END_SINGLE:
     case EXEC_OMP_PARALLEL:
     case EXEC_OMP_PARALLEL_DO:
+    case EXEC_OMP_PARALLEL_DO_SIMD:
     case EXEC_OMP_PARALLEL_SECTIONS:
     case EXEC_OMP_SECTIONS:
+    case EXEC_OMP_SIMD:
     case EXEC_OMP_SINGLE:
+    case EXEC_OMP_TARGET:
+    case EXEC_OMP_TARGET_DATA:
+    case EXEC_OMP_TARGET_TEAMS:
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
+    case EXEC_OMP_TARGET_UPDATE:
     case EXEC_OMP_TASK:
+    case EXEC_OMP_TEAMS:
+    case EXEC_OMP_TEAMS_DISTRIBUTE:
+    case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
+    case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+    case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
     case EXEC_OMP_WORKSHARE:
     case EXEC_OMP_PARALLEL_WORKSHARE:
       gfc_free_omp_clauses (p->ext.omp_clauses);
@@ -203,7 +225,7 @@ gfc_free_statement (gfc_code *p)
       break;
 
     case EXEC_OMP_FLUSH:
-      gfc_free_namelist (p->ext.omp_namelist);
+      gfc_free_omp_namelist (p->ext.omp_namelist);
       break;
 
     case EXEC_OMP_ATOMIC:
@@ -211,6 +233,7 @@ gfc_free_statement (gfc_code *p)
     case EXEC_OMP_MASTER:
     case EXEC_OMP_ORDERED:
     case EXEC_OMP_END_NOWAIT:
+    case EXEC_OMP_TASKGROUP:
     case EXEC_OMP_TASKWAIT:
     case EXEC_OMP_TASKYIELD:
       break;
index 19d792e..8edd693 100644 (file)
@@ -367,6 +367,7 @@ check_conflict (symbol_attribute *attr, const char *name, locus *where)
     *asynchronous = "ASYNCHRONOUS", *codimension = "CODIMENSION",
     *contiguous = "CONTIGUOUS", *generic = "GENERIC";
   static const char *threadprivate = "THREADPRIVATE";
+  static const char *omp_declare_target = "OMP DECLARE TARGET";
 
   const char *a1, *a2;
   int standard;
@@ -453,6 +454,7 @@ check_conflict (symbol_attribute *attr, const char *name, locus *where)
   conf (dummy, entry);
   conf (dummy, intrinsic);
   conf (dummy, threadprivate);
+  conf (dummy, omp_declare_target);
   conf (pointer, target);
   conf (pointer, intrinsic);
   conf (pointer, elemental);
@@ -495,6 +497,7 @@ check_conflict (symbol_attribute *attr, const char *name, locus *where)
   conf (in_equivalence, entry);
   conf (in_equivalence, allocatable);
   conf (in_equivalence, threadprivate);
+  conf (in_equivalence, omp_declare_target);
 
   conf (dummy, result);
   conf (entry, result);
@@ -543,6 +546,7 @@ check_conflict (symbol_attribute *attr, const char *name, locus *where)
   conf (cray_pointee, in_common);
   conf (cray_pointee, in_equivalence);
   conf (cray_pointee, threadprivate);
+  conf (cray_pointee, omp_declare_target);
 
   conf (data, dummy);
   conf (data, function);
@@ -596,6 +600,8 @@ check_conflict (symbol_attribute *attr, const char *name, locus *where)
 
   conf (proc_pointer, abstract)
 
+  conf (entry, omp_declare_target)
+
   a1 = gfc_code2string (flavors, attr->flavor);
 
   if (attr->in_namelist
@@ -631,6 +637,7 @@ check_conflict (symbol_attribute *attr, const char *name, locus *where)
       conf2 (function);
       conf2 (subroutine);
       conf2 (threadprivate);
+      conf2 (omp_declare_target);
 
       if (attr->access == ACCESS_PUBLIC || attr->access == ACCESS_PRIVATE)
        {
@@ -712,6 +719,7 @@ check_conflict (symbol_attribute *attr, const char *name, locus *where)
       conf2 (subroutine);
       conf2 (threadprivate);
       conf2 (result);
+      conf2 (omp_declare_target);
 
       if (attr->intent != INTENT_UNKNOWN)
        {
@@ -1207,6 +1215,22 @@ gfc_add_threadprivate (symbol_attribute *attr, const char *name, locus *where)
 
 
 bool
+gfc_add_omp_declare_target (symbol_attribute *attr, const char *name,
+                           locus *where)
+{
+
+  if (check_used (attr, name, where))
+    return false;
+
+  if (attr->omp_declare_target)
+    return true;
+
+  attr->omp_declare_target = 1;
+  return check_conflict (attr, name, where);
+}
+
+
+bool
 gfc_add_target (symbol_attribute *attr, locus *where)
 {
 
@@ -1761,6 +1785,9 @@ gfc_copy_attr (symbol_attribute *dest, symbol_attribute *src, locus *where)
   if (src->threadprivate
       && !gfc_add_threadprivate (dest, NULL, where))
     goto fail;
+  if (src->omp_declare_target
+      && !gfc_add_omp_declare_target (dest, NULL, where))
+    goto fail;
   if (src->target && !gfc_add_target (dest, where))
     goto fail;
   if (src->dummy && !gfc_add_dummy (dest, NULL, where))
@@ -2450,17 +2477,20 @@ gfc_get_uop (const char *name)
 {
   gfc_user_op *uop;
   gfc_symtree *st;
+  gfc_namespace *ns = gfc_current_ns;
 
-  st = gfc_find_symtree (gfc_current_ns->uop_root, name);
+  if (ns->omp_udr_ns)
+    ns = ns->parent;
+  st = gfc_find_symtree (ns->uop_root, name);
   if (st != NULL)
     return st->n.uop;
 
-  st = gfc_new_symtree (&gfc_current_ns->uop_root, name);
+  st = gfc_new_symtree (&ns->uop_root, name);
 
   uop = st->n.uop = XCNEW (gfc_user_op);
   uop->name = gfc_get_string (name);
   uop->access = ACCESS_UNKNOWN;
-  uop->ns = gfc_current_ns;
+  uop->ns = ns;
 
   return uop;
 }
@@ -2771,6 +2801,12 @@ gfc_get_sym_tree (const char *name, gfc_namespace *ns, gfc_symtree **result,
   /* Try to find the symbol in ns.  */
   st = gfc_find_symtree (ns->sym_root, name);
 
+  if (st == NULL && ns->omp_udr_ns)
+    {
+      ns = ns->parent;
+      st = gfc_find_symtree (ns->sym_root, name);
+    }
+
   if (st == NULL)
     {
       /* If not there, create a new symbol.  */
@@ -3269,6 +3305,23 @@ free_common_tree (gfc_symtree * common_tree)
 }  
 
 
+/* Recursive function that deletes an entire tree and all the common
+   head structures it points to.  */
+
+static void
+free_omp_udr_tree (gfc_symtree * omp_udr_tree)
+{
+  if (omp_udr_tree == NULL)
+    return;
+
+  free_omp_udr_tree (omp_udr_tree->left);
+  free_omp_udr_tree (omp_udr_tree->right);
+
+  gfc_free_omp_udr (omp_udr_tree->n.omp_udr);
+  free (omp_udr_tree);
+}
+
+
 /* Recursive function that deletes an entire tree and all the user
    operator nodes that it contains.  */
 
@@ -3465,9 +3518,11 @@ gfc_free_namespace (gfc_namespace *ns)
   free_sym_tree (ns->sym_root);
   free_uop_tree (ns->uop_root);
   free_common_tree (ns->common_root);
+  free_omp_udr_tree (ns->omp_udr_root);
   free_tb_tree (ns->tb_sym_root);
   free_tb_tree (ns->tb_uop_root);
   gfc_free_finalizer_list (ns->finalizers);
+  gfc_free_omp_declare_simd_list (ns->omp_declare_simd);
   gfc_free_charlen (ns->cl_list, NULL);
   free_st_labels (ns->st_labels);
 
index 8502777..a36db45 100644 (file)
@@ -7389,8 +7389,8 @@ gfc_trans_dealloc_allocated (tree descriptor, bool coarray, gfc_expr *expr)
 
 /* This helper function calculates the size in words of a full array.  */
 
-static tree
-get_full_array_size (stmtblock_t *block, tree decl, int rank)
+tree
+gfc_full_array_size (stmtblock_t *block, tree decl, int rank)
 {
   tree idx;
   tree nelems;
@@ -7416,7 +7416,7 @@ get_full_array_size (stmtblock_t *block, tree decl, int rank)
 
 static tree
 duplicate_allocatable (tree dest, tree src, tree type, int rank,
-                      bool no_malloc, tree str_sz)
+                      bool no_malloc, bool no_memcpy, tree str_sz)
 {
   tree tmp;
   tree size;
@@ -7450,9 +7450,13 @@ duplicate_allocatable (tree dest, tree src, tree type, int rank,
          gfc_add_expr_to_block (&block, tmp);
        }
 
-      tmp = builtin_decl_explicit (BUILT_IN_MEMCPY);
-      tmp = build_call_expr_loc (input_location, tmp, 3, dest, src,
-                                fold_convert (size_type_node, size));
+      if (!no_memcpy)
+       {
+         tmp = builtin_decl_explicit (BUILT_IN_MEMCPY);
+         tmp = build_call_expr_loc (input_location, tmp, 3, dest, src,
+                                    fold_convert (size_type_node, size));
+         gfc_add_expr_to_block (&block, tmp);
+       }
     }
   else
     {
@@ -7461,7 +7465,7 @@ duplicate_allocatable (tree dest, tree src, tree type, int rank,
 
       gfc_init_block (&block);
       if (rank)
-       nelems = get_full_array_size (&block, src, rank);
+       nelems = gfc_full_array_size (&block, src, rank);
       else
        nelems = gfc_index_one_node;
 
@@ -7481,14 +7485,17 @@ duplicate_allocatable (tree dest, tree src, tree type, int rank,
 
       /* We know the temporary and the value will be the same length,
         so can use memcpy.  */
-      tmp = builtin_decl_explicit (BUILT_IN_MEMCPY);
-      tmp = build_call_expr_loc (input_location,
-                       tmp, 3, gfc_conv_descriptor_data_get (dest),
-                       gfc_conv_descriptor_data_get (src),
-                       fold_convert (size_type_node, size));
+      if (!no_memcpy)
+       {
+         tmp = builtin_decl_explicit (BUILT_IN_MEMCPY);
+         tmp = build_call_expr_loc (input_location, tmp, 3,
+                                    gfc_conv_descriptor_data_get (dest),
+                                    gfc_conv_descriptor_data_get (src),
+                                    fold_convert (size_type_node, size));
+         gfc_add_expr_to_block (&block, tmp);
+       }
     }
 
-  gfc_add_expr_to_block (&block, tmp);
   tmp = gfc_finish_block (&block);
 
   /* Null the destination if the source is null; otherwise do
@@ -7510,7 +7517,8 @@ duplicate_allocatable (tree dest, tree src, tree type, int rank,
 tree
 gfc_duplicate_allocatable (tree dest, tree src, tree type, int rank)
 {
-  return duplicate_allocatable (dest, src, type, rank, false, NULL_TREE);
+  return duplicate_allocatable (dest, src, type, rank, false, false,
+                               NULL_TREE);
 }
 
 
@@ -7519,7 +7527,16 @@ gfc_duplicate_allocatable (tree dest, tree src, tree type, int rank)
 tree
 gfc_copy_allocatable_data (tree dest, tree src, tree type, int rank)
 {
-  return duplicate_allocatable (dest, src, type, rank, true, NULL_TREE);
+  return duplicate_allocatable (dest, src, type, rank, true, false,
+                               NULL_TREE);
+}
+
+/* Allocate dest to the same size as src, but don't copy anything.  */
+
+tree
+gfc_duplicate_allocatable_nocopy (tree dest, tree src, tree type, int rank)
+{
+  return duplicate_allocatable (dest, src, type, rank, false, true, NULL_TREE);
 }
 
 
@@ -7579,7 +7596,7 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl,
          /* Use the descriptor for an allocatable array.  Since this
             is a full array reference, we only need the descriptor
             information from dimension = rank.  */
-         tmp = get_full_array_size (&fnblock, decl, rank);
+         tmp = gfc_full_array_size (&fnblock, decl, rank);
          tmp = fold_build2_loc (input_location, MINUS_EXPR,
                                 gfc_array_index_type, tmp,
                                 gfc_index_one_node);
@@ -7938,7 +7955,7 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl,
              gfc_add_expr_to_block (&fnblock, tmp);
              size = size_of_string_in_bytes (c->ts.kind, len);
              tmp = duplicate_allocatable (dcmp, comp, ctype, rank,
-                                          false, size);
+                                          false, false, size);
              gfc_add_expr_to_block (&fnblock, tmp);
            }
          else if (c->attr.allocatable && !c->attr.proc_pointer
index c4c09c1..e0bb820 100644 (file)
@@ -44,10 +44,14 @@ void gfc_trans_g77_array (gfc_symbol *, gfc_wrapped_block *);
 /* Generate code to deallocate an array, if it is allocated.  */
 tree gfc_trans_dealloc_allocated (tree, bool, gfc_expr *);
 
+tree gfc_full_array_size (stmtblock_t *, tree, int);
+
 tree gfc_duplicate_allocatable (tree dest, tree src, tree type, int rank);
 
 tree gfc_copy_allocatable_data (tree dest, tree src, tree type, int rank);
 
+tree gfc_duplicate_allocatable_nocopy (tree, tree, tree, int);
+
 tree gfc_nullify_alloc_comp (gfc_symbol *, tree, int);
 
 tree gfc_deallocate_alloc_comp (gfc_symbol *, tree, int);
index 19eadda..bb66abc 100644 (file)
@@ -456,6 +456,11 @@ build_common_decl (gfc_common_head *com, tree union_type, bool is_init)
       if (com->threadprivate)
        DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
 
+      if (com->omp_declare_target)
+       DECL_ATTRIBUTES (decl)
+         = tree_cons (get_identifier ("omp declare target"),
+                      NULL_TREE, DECL_ATTRIBUTES (decl));
+
       /* Place the back end declaration for this common block in
          GLOBAL_BINDING_LEVEL.  */
       gfc_map_of_all_commons[identifier] = pushdecl_top_level (decl);
@@ -705,6 +710,7 @@ create_common (gfc_common_head *com, segment_info *head, bool saw_equiv)
        TREE_ADDRESSABLE (var_decl) = 1;
       /* Fake variables are not visible from other translation units. */
       TREE_PUBLIC (var_decl) = 0;
+      gfc_finish_decl_attrs (var_decl, &s->sym->attr);
 
       /* To preserve identifier names in COMMON, chain to procedure
          scope unless at top level in a module definition.  */
index cf7b661..2b06679 100644 (file)
@@ -496,6 +496,29 @@ gfc_finish_decl (tree decl)
 }
 
 
+/* Handle setting of GFC_DECL_SCALAR* on DECL.  */
+
+void
+gfc_finish_decl_attrs (tree decl, symbol_attribute *attr)
+{
+  if (!attr->dimension && !attr->codimension)
+    {
+      /* Handle scalar allocatable variables.  */
+      if (attr->allocatable)
+       {
+         gfc_allocate_lang_decl (decl);
+         GFC_DECL_SCALAR_ALLOCATABLE (decl) = 1;
+       }
+      /* Handle scalar pointer variables.  */
+      if (attr->pointer)
+       {
+         gfc_allocate_lang_decl (decl);
+         GFC_DECL_SCALAR_POINTER (decl) = 1;
+       }
+    }
+}
+
+
 /* Apply symbol attributes to a variable, and add it to the function scope.  */
 
 static void
@@ -607,6 +630,8 @@ gfc_finish_var_decl (tree decl, gfc_symbol * sym)
   if (sym->attr.threadprivate
       && (TREE_STATIC (decl) || DECL_EXTERNAL (decl)))
     DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
+
+  gfc_finish_decl_attrs (decl, &sym->attr);
 }
 
 
@@ -615,8 +640,9 @@ gfc_finish_var_decl (tree decl, gfc_symbol * sym)
 void
 gfc_allocate_lang_decl (tree decl)
 {
-  DECL_LANG_SPECIFIC (decl) = ggc_alloc_cleared_lang_decl(sizeof
-                                                         (struct lang_decl));
+  if (DECL_LANG_SPECIFIC (decl) == NULL)
+    DECL_LANG_SPECIFIC (decl)
+      = ggc_alloc_cleared_lang_decl (sizeof (struct lang_decl));
 }
 
 /* Remember a symbol to generate initialization/cleanup code at function
@@ -1192,6 +1218,10 @@ add_attributes_to_decl (symbol_attribute sym_attr, tree list)
        list = chainon (list, attr);
       }
 
+  if (sym_attr.omp_declare_target)
+    list = tree_cons (get_identifier ("omp declare target"),
+                     NULL_TREE, list);
+
   return list;
 }
 
@@ -1518,6 +1548,9 @@ gfc_get_symbol_decl (gfc_symbol * sym)
       && !sym->attr.select_type_temporary)
     DECL_BY_REFERENCE (decl) = 1;
 
+  if (sym->attr.associate_var)
+    GFC_DECL_ASSOCIATE_VAR_P (decl) = 1;
+
   if (sym->attr.vtab
       || (sym->name[0] == '_' && strncmp ("__def_init", sym->name, 10) == 0))
     TREE_READONLY (decl) = 1;
@@ -1850,6 +1883,11 @@ module_sym:
   if (DECL_CONTEXT (fndecl) == NULL_TREE)
     pushdecl_top_level (fndecl);
 
+  if (sym->formal_ns
+      && sym->formal_ns->proc_name == sym
+      && sym->formal_ns->omp_declare_simd)
+    gfc_trans_omp_declare_simd (sym->formal_ns);
+
   return fndecl;
 }
 
@@ -2232,6 +2270,7 @@ create_function_arglist (gfc_symbol * sym)
        DECL_BY_REFERENCE (parm) = 1;
 
       gfc_finish_decl (parm);
+      gfc_finish_decl_attrs (parm, &f->sym->attr);
 
       f->sym->backend_decl = parm;
 
@@ -2544,6 +2583,9 @@ gfc_create_function_decl (gfc_namespace * ns, bool global)
 
   /* Now create the read argument list.  */
   create_function_arglist (ns->proc_name);
+
+  if (ns->omp_declare_simd)
+    gfc_trans_omp_declare_simd (ns);
 }
 
 /* Return the decl used to hold the function return value.  If
@@ -2672,6 +2714,7 @@ gfc_get_fake_result_decl (gfc_symbol * sym, int parent_flag)
       TREE_ADDRESSABLE (decl) = 1;
 
       layout_decl (decl, 0);
+      gfc_finish_decl_attrs (decl, &sym->attr);
 
       if (parent_flag)
        gfc_add_decl_to_parent_function (decl);
@@ -4237,8 +4280,8 @@ gfc_create_module_variable (gfc_symbol * sym)
     }
 
   /* Don't generate variables from other modules. Variables from
-     COMMONs will already have been generated.  */
-  if (sym->attr.use_assoc || sym->attr.in_common)
+     COMMONs and Cray pointees will already have been generated.  */
+  if (sym->attr.use_assoc || sym->attr.in_common || sym->attr.cray_pointee)
     return;
 
   /* Equivalenced variables arrive here after creation.  */
index 955102b..dbfde1b 100644 (file)
@@ -6472,6 +6472,20 @@ gfc_conv_expr_reference (gfc_se * se, gfc_expr * expr)
 
   /* Take the address of that value.  */
   se->expr = gfc_build_addr_expr (NULL_TREE, var);
+  if (expr->ts.type == BT_DERIVED && expr->rank
+      && !gfc_is_finalizable (expr->ts.u.derived, NULL)
+      && expr->ts.u.derived->attr.alloc_comp
+      && expr->expr_type != EXPR_VARIABLE)
+    {
+      tree tmp;
+
+      tmp = build_fold_indirect_ref_loc (input_location, se->expr);
+      tmp = gfc_deallocate_alloc_comp (expr->ts.u.derived, tmp, expr->rank);
+      
+      /* The components shall be deallocated before
+         their containing entity.  */
+      gfc_prepend_expr_to_block (&se->post, tmp);
+    }
 }
 
 
@@ -7251,7 +7265,7 @@ fcncall_realloc_result (gfc_se *se, int rank)
 
   res_desc = gfc_evaluate_now (desc, &se->pre);
   gfc_conv_descriptor_data_set (&se->pre, res_desc, null_pointer_node);
-  se->expr = gfc_build_addr_expr (TREE_TYPE (se->expr), res_desc);
+  se->expr = gfc_build_addr_expr (NULL_TREE, res_desc);
 
   /* Free the lhs after the function call and copy the result data to
      the lhs descriptor.  */
index 41020a8..da01a90 100644 (file)
@@ -53,9 +53,13 @@ gfc_omp_privatize_by_reference (const_tree decl)
   if (TREE_CODE (type) == POINTER_TYPE)
     {
       /* Array POINTER/ALLOCATABLE have aggregate types, all user variables
-        that have POINTER_TYPE type and don't have GFC_POINTER_TYPE_P
-        set are supposed to be privatized by reference.  */
-      if (GFC_POINTER_TYPE_P (type))
+        that have POINTER_TYPE type and aren't scalar pointers, scalar
+        allocatables, Cray pointees or C pointers are supposed to be
+        privatized by reference.  */
+      if (GFC_DECL_GET_SCALAR_POINTER (decl)
+         || GFC_DECL_GET_SCALAR_ALLOCATABLE (decl)
+         || GFC_DECL_CRAY_POINTEE (decl)
+         || VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl))))
        return false;
 
       if (!DECL_ARTIFICIAL (decl)
@@ -77,6 +81,19 @@ gfc_omp_privatize_by_reference (const_tree decl)
 enum omp_clause_default_kind
 gfc_omp_predetermined_sharing (tree decl)
 {
+  /* Associate names preserve the association established during ASSOCIATE.
+     As they are implemented either as pointers to the selector or array
+     descriptor and shouldn't really change in the ASSOCIATE region,
+     this decl can be either shared or firstprivate.  If it is a pointer,
+     use firstprivate, as it is cheaper that way, otherwise make it shared.  */
+  if (GFC_DECL_ASSOCIATE_VAR_P (decl))
+    {
+      if (TREE_CODE (TREE_TYPE (decl)) == POINTER_TYPE)
+       return OMP_CLAUSE_DEFAULT_FIRSTPRIVATE;
+      else
+       return OMP_CLAUSE_DEFAULT_SHARED;
+    }
+
   if (DECL_ARTIFICIAL (decl)
       && ! GFC_DECL_RESULT (decl)
       && ! (DECL_LANG_SPECIFIC (decl)
@@ -135,6 +152,41 @@ gfc_omp_report_decl (tree decl)
   return decl;
 }
 
+/* Return true if TYPE has any allocatable components.  */
+
+static bool
+gfc_has_alloc_comps (tree type, tree decl)
+{
+  tree field, ftype;
+
+  if (POINTER_TYPE_P (type))
+    {
+      if (GFC_DECL_GET_SCALAR_ALLOCATABLE (decl))
+       type = TREE_TYPE (type);
+      else if (GFC_DECL_GET_SCALAR_POINTER (decl))
+       return false;
+    }
+
+  while (GFC_DESCRIPTOR_TYPE_P (type) || GFC_ARRAY_TYPE_P (type))
+    type = gfc_get_element_type (type);
+
+  if (TREE_CODE (type) != RECORD_TYPE)
+    return false;
+
+  for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
+    {
+      ftype = TREE_TYPE (field);
+      if (GFC_DECL_GET_SCALAR_ALLOCATABLE (field))
+       return true;
+      if (GFC_DESCRIPTOR_TYPE_P (ftype)
+         && GFC_TYPE_ARRAY_AKIND (ftype) == GFC_ARRAY_ALLOCATABLE)
+       return true;
+      if (gfc_has_alloc_comps (ftype, field))
+       return true;
+    }
+  return false;
+}
+
 /* Return true if DECL in private clause needs
    OMP_CLAUSE_PRIVATE_OUTER_REF on the private clause.  */
 bool
@@ -146,68 +198,335 @@ gfc_omp_private_outer_ref (tree decl)
       && GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ALLOCATABLE)
     return true;
 
+  if (GFC_DECL_GET_SCALAR_ALLOCATABLE (decl))
+    return true;
+
+  if (gfc_omp_privatize_by_reference (decl))
+    type = TREE_TYPE (type);
+
+  if (gfc_has_alloc_comps (type, decl))
+    return true;
+
   return false;
 }
 
+/* Callback for gfc_omp_unshare_expr.  */
+
+static tree
+gfc_omp_unshare_expr_r (tree *tp, int *walk_subtrees, void *)
+{
+  tree t = *tp;
+  enum tree_code code = TREE_CODE (t);
+
+  /* Stop at types, decls, constants like copy_tree_r.  */
+  if (TREE_CODE_CLASS (code) == tcc_type
+      || TREE_CODE_CLASS (code) == tcc_declaration
+      || TREE_CODE_CLASS (code) == tcc_constant
+      || code == BLOCK)
+    *walk_subtrees = 0;
+  else if (handled_component_p (t)
+          || TREE_CODE (t) == MEM_REF)
+    {
+      *tp = unshare_expr (t);
+      *walk_subtrees = 0;
+    }
+
+  return NULL_TREE;
+}
+
+/* Unshare in expr anything that the FE which normally doesn't
+   care much about tree sharing (because during gimplification
+   everything is unshared) could cause problems with tree sharing
+   at omp-low.c time.  */
+
+static tree
+gfc_omp_unshare_expr (tree expr)
+{
+  walk_tree (&expr, gfc_omp_unshare_expr_r, NULL, NULL);
+  return expr;
+}
+
+enum walk_alloc_comps
+{
+  WALK_ALLOC_COMPS_DTOR,
+  WALK_ALLOC_COMPS_DEFAULT_CTOR,
+  WALK_ALLOC_COMPS_COPY_CTOR
+};
+
+/* Handle allocatable components in OpenMP clauses.  */
+
+static tree
+gfc_walk_alloc_comps (tree decl, tree dest, tree var,
+                     enum walk_alloc_comps kind)
+{
+  stmtblock_t block, tmpblock;
+  tree type = TREE_TYPE (decl), then_b, tem, field;
+  gfc_init_block (&block);
+
+  if (GFC_ARRAY_TYPE_P (type) || GFC_DESCRIPTOR_TYPE_P (type))
+    {
+      if (GFC_DESCRIPTOR_TYPE_P (type))
+       {
+         gfc_init_block (&tmpblock);
+         tem = gfc_full_array_size (&tmpblock, decl,
+                                    GFC_TYPE_ARRAY_RANK (type));
+         then_b = gfc_finish_block (&tmpblock);
+         gfc_add_expr_to_block (&block, gfc_omp_unshare_expr (then_b));
+         tem = gfc_omp_unshare_expr (tem);
+         tem = fold_build2_loc (input_location, MINUS_EXPR,
+                                gfc_array_index_type, tem,
+                                gfc_index_one_node);
+       }
+      else
+       {
+         if (!TYPE_DOMAIN (type)
+             || TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL_TREE
+             || TYPE_MIN_VALUE (TYPE_DOMAIN (type)) == error_mark_node
+             || TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == error_mark_node)
+           {
+             tem = fold_build2 (EXACT_DIV_EXPR, sizetype,
+                                TYPE_SIZE_UNIT (type),
+                                TYPE_SIZE_UNIT (TREE_TYPE (type)));
+             tem = size_binop (MINUS_EXPR, tem, size_one_node);
+           }
+         else
+           tem = array_type_nelts (type);
+         tem = fold_convert (gfc_array_index_type, tem);
+       }
+
+      tree nelems = gfc_evaluate_now (tem, &block);
+      tree index = gfc_create_var (gfc_array_index_type, "S");
+
+      gfc_init_block (&tmpblock);
+      tem = gfc_conv_array_data (decl);
+      tree declvar = build_fold_indirect_ref_loc (input_location, tem);
+      tree declvref = gfc_build_array_ref (declvar, index, NULL);
+      tree destvar, destvref = NULL_TREE;
+      if (dest)
+       {
+         tem = gfc_conv_array_data (dest);
+         destvar = build_fold_indirect_ref_loc (input_location, tem);
+         destvref = gfc_build_array_ref (destvar, index, NULL);
+       }
+      gfc_add_expr_to_block (&tmpblock,
+                            gfc_walk_alloc_comps (declvref, destvref,
+                                                  var, kind));
+
+      gfc_loopinfo loop;
+      gfc_init_loopinfo (&loop);
+      loop.dimen = 1;
+      loop.from[0] = gfc_index_zero_node;
+      loop.loopvar[0] = index;
+      loop.to[0] = nelems;
+      gfc_trans_scalarizing_loops (&loop, &tmpblock);
+      gfc_add_block_to_block (&block, &loop.pre);
+      return gfc_finish_block (&block);
+    }
+  else if (GFC_DECL_GET_SCALAR_ALLOCATABLE (var))
+    {
+      decl = build_fold_indirect_ref_loc (input_location, decl);
+      if (dest)
+       dest = build_fold_indirect_ref_loc (input_location, dest);
+      type = TREE_TYPE (decl);
+    }
+
+  gcc_assert (TREE_CODE (type) == RECORD_TYPE);
+  for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
+    {
+      tree ftype = TREE_TYPE (field);
+      tree declf, destf = NULL_TREE;
+      bool has_alloc_comps = gfc_has_alloc_comps (ftype, field);
+      if ((!GFC_DESCRIPTOR_TYPE_P (ftype)
+          || GFC_TYPE_ARRAY_AKIND (ftype) != GFC_ARRAY_ALLOCATABLE)
+         && !GFC_DECL_GET_SCALAR_ALLOCATABLE (field)
+         && !has_alloc_comps)
+       continue;
+      declf = fold_build3_loc (input_location, COMPONENT_REF, ftype,
+                              decl, field, NULL_TREE);
+      if (dest)
+       destf = fold_build3_loc (input_location, COMPONENT_REF, ftype,
+                                dest, field, NULL_TREE);
+
+      tem = NULL_TREE;
+      switch (kind)
+       {
+       case WALK_ALLOC_COMPS_DTOR:
+         break;
+       case WALK_ALLOC_COMPS_DEFAULT_CTOR:
+         if (GFC_DESCRIPTOR_TYPE_P (ftype)
+             && GFC_TYPE_ARRAY_AKIND (ftype) == GFC_ARRAY_ALLOCATABLE)
+           {
+             gfc_add_modify (&block, unshare_expr (destf),
+                             unshare_expr (declf));
+             tem = gfc_duplicate_allocatable_nocopy
+                                       (destf, declf, ftype,
+                                        GFC_TYPE_ARRAY_RANK (ftype));
+           }
+         else if (GFC_DECL_GET_SCALAR_ALLOCATABLE (field))
+           tem = gfc_duplicate_allocatable_nocopy (destf, declf, ftype, 0);
+         break;
+       case WALK_ALLOC_COMPS_COPY_CTOR:
+         if (GFC_DESCRIPTOR_TYPE_P (ftype)
+             && GFC_TYPE_ARRAY_AKIND (ftype) == GFC_ARRAY_ALLOCATABLE)
+           tem = gfc_duplicate_allocatable (destf, declf, ftype,
+                                            GFC_TYPE_ARRAY_RANK (ftype));
+         else if (GFC_DECL_GET_SCALAR_ALLOCATABLE (field))
+           tem = gfc_duplicate_allocatable (destf, declf, ftype, 0);
+         break;
+       }
+      if (tem)
+       gfc_add_expr_to_block (&block, gfc_omp_unshare_expr (tem));
+      if (has_alloc_comps)
+       {
+         gfc_init_block (&tmpblock);
+         gfc_add_expr_to_block (&tmpblock,
+                                gfc_walk_alloc_comps (declf, destf,
+                                                      field, kind));
+         then_b = gfc_finish_block (&tmpblock);
+         if (GFC_DESCRIPTOR_TYPE_P (ftype)
+             && GFC_TYPE_ARRAY_AKIND (ftype) == GFC_ARRAY_ALLOCATABLE)
+           tem = gfc_conv_descriptor_data_get (unshare_expr (declf));
+         else if (GFC_DECL_GET_SCALAR_ALLOCATABLE (field))
+           tem = unshare_expr (declf);
+         else
+           tem = NULL_TREE;
+         if (tem)
+           {
+             tem = fold_convert (pvoid_type_node, tem);
+             tem = fold_build2_loc (input_location, NE_EXPR,
+                                    boolean_type_node, tem,
+                                    null_pointer_node);
+             then_b = build3_loc (input_location, COND_EXPR, void_type_node,
+                                  tem, then_b,
+                                  build_empty_stmt (input_location));
+           }
+         gfc_add_expr_to_block (&block, then_b);
+       }
+      if (kind == WALK_ALLOC_COMPS_DTOR)
+       {
+         if (GFC_DESCRIPTOR_TYPE_P (ftype)
+             && GFC_TYPE_ARRAY_AKIND (ftype) == GFC_ARRAY_ALLOCATABLE)
+           {
+             tem = gfc_trans_dealloc_allocated (unshare_expr (declf),
+                                                false, NULL);
+             gfc_add_expr_to_block (&block, gfc_omp_unshare_expr (tem));
+           }
+         else if (GFC_DECL_GET_SCALAR_ALLOCATABLE (field))
+           {
+             tem = gfc_call_free (unshare_expr (declf));
+             gfc_add_expr_to_block (&block, gfc_omp_unshare_expr (tem));
+           }
+       }
+    }
+
+  return gfc_finish_block (&block);
+}
+
 /* Return code to initialize DECL with its default constructor, or
    NULL if there's nothing to do.  */
 
 tree
 gfc_omp_clause_default_ctor (tree clause, tree decl, tree outer)
 {
-  tree type = TREE_TYPE (decl), rank, size, esize, ptr, cond, then_b, else_b;
+  tree type = TREE_TYPE (decl), size, ptr, cond, then_b, else_b;
   stmtblock_t block, cond_block;
 
-  if (! GFC_DESCRIPTOR_TYPE_P (type)
-      || GFC_TYPE_ARRAY_AKIND (type) != GFC_ARRAY_ALLOCATABLE)
-    return NULL;
+  gcc_assert (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_PRIVATE
+             || OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_LASTPRIVATE
+             || OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_LINEAR
+             || OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_REDUCTION);
 
-  if (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_REDUCTION)
-    return NULL;
+  if ((! GFC_DESCRIPTOR_TYPE_P (type)
+       || GFC_TYPE_ARRAY_AKIND (type) != GFC_ARRAY_ALLOCATABLE)
+      && !GFC_DECL_GET_SCALAR_ALLOCATABLE (OMP_CLAUSE_DECL (clause)))
+    {
+      if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause)))
+       {
+         gcc_assert (outer);
+         gfc_start_block (&block);
+         tree tem = gfc_walk_alloc_comps (outer, decl,
+                                          OMP_CLAUSE_DECL (clause),
+                                          WALK_ALLOC_COMPS_DEFAULT_CTOR);
+         gfc_add_expr_to_block (&block, tem);
+         return gfc_finish_block (&block);
+       }
+      return NULL_TREE;
+    }
 
-  gcc_assert (outer != NULL);
-  gcc_assert (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_PRIVATE
-             || OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_LASTPRIVATE);
+  gcc_assert (outer != NULL_TREE);
 
-  /* Allocatable arrays in PRIVATE clauses need to be set to
+  /* Allocatable arrays and scalars in PRIVATE clauses need to be set to
      "not currently allocated" allocation status if outer
      array is "not currently allocated", otherwise should be allocated.  */
   gfc_start_block (&block);
 
   gfc_init_block (&cond_block);
 
-  gfc_add_modify (&cond_block, decl, outer);
-  rank = gfc_rank_cst[GFC_TYPE_ARRAY_RANK (type) - 1];
-  size = gfc_conv_descriptor_ubound_get (decl, rank);
-  size = fold_build2_loc (input_location, MINUS_EXPR, gfc_array_index_type,
-                         size, gfc_conv_descriptor_lbound_get (decl, rank));
-  size = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type,
-                         size, gfc_index_one_node);
-  if (GFC_TYPE_ARRAY_RANK (type) > 1)
-    size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
-                           size, gfc_conv_descriptor_stride_get (decl, rank));
-  esize = fold_convert (gfc_array_index_type,
-                       TYPE_SIZE_UNIT (gfc_get_element_type (type)));
-  size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
-                         size, esize);
-  size = gfc_evaluate_now (fold_convert (size_type_node, size), &cond_block);
-
+  if (GFC_DESCRIPTOR_TYPE_P (type))
+    {
+      gfc_add_modify (&cond_block, decl, outer);
+      tree rank = gfc_rank_cst[GFC_TYPE_ARRAY_RANK (type) - 1];
+      size = gfc_conv_descriptor_ubound_get (decl, rank);
+      size = fold_build2_loc (input_location, MINUS_EXPR, gfc_array_index_type,
+                             size,
+                             gfc_conv_descriptor_lbound_get (decl, rank));
+      size = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type,
+                             size, gfc_index_one_node);
+      if (GFC_TYPE_ARRAY_RANK (type) > 1)
+       size = fold_build2_loc (input_location, MULT_EXPR,
+                               gfc_array_index_type, size,
+                               gfc_conv_descriptor_stride_get (decl, rank));
+      tree esize = fold_convert (gfc_array_index_type,
+                                TYPE_SIZE_UNIT (gfc_get_element_type (type)));
+      size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
+                             size, esize);
+      size = unshare_expr (size);
+      size = gfc_evaluate_now (fold_convert (size_type_node, size),
+                              &cond_block);
+    }
+  else
+    size = fold_convert (size_type_node, TYPE_SIZE_UNIT (TREE_TYPE (type)));
   ptr = gfc_create_var (pvoid_type_node, NULL);
   gfc_allocate_using_malloc (&cond_block, ptr, size, NULL_TREE);
-  gfc_conv_descriptor_data_set (&cond_block, decl, ptr);
-
+  if (GFC_DESCRIPTOR_TYPE_P (type))
+    gfc_conv_descriptor_data_set (&cond_block, unshare_expr (decl), ptr);
+  else
+    gfc_add_modify (&cond_block, unshare_expr (decl),
+                   fold_convert (TREE_TYPE (decl), ptr));
+  if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause)))
+    {
+      tree tem = gfc_walk_alloc_comps (outer, decl,
+                                      OMP_CLAUSE_DECL (clause),
+                                      WALK_ALLOC_COMPS_DEFAULT_CTOR);
+      gfc_add_expr_to_block (&cond_block, tem);
+    }
   then_b = gfc_finish_block (&cond_block);
 
-  gfc_init_block (&cond_block);
-  gfc_conv_descriptor_data_set (&cond_block, decl, null_pointer_node);
-  else_b = gfc_finish_block (&cond_block);
-
-  cond = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
-                         fold_convert (pvoid_type_node,
-                                       gfc_conv_descriptor_data_get (outer)),
-                         null_pointer_node);
-  gfc_add_expr_to_block (&block, build3_loc (input_location, COND_EXPR,
-                        void_type_node, cond, then_b, else_b));
+  /* Reduction clause requires allocated ALLOCATABLE.  */
+  if (OMP_CLAUSE_CODE (clause) != OMP_CLAUSE_REDUCTION)
+    {
+      gfc_init_block (&cond_block);
+      if (GFC_DESCRIPTOR_TYPE_P (type))
+       gfc_conv_descriptor_data_set (&cond_block, unshare_expr (decl),
+                                     null_pointer_node);
+      else
+       gfc_add_modify (&cond_block, unshare_expr (decl),
+                       build_zero_cst (TREE_TYPE (decl)));
+      else_b = gfc_finish_block (&cond_block);
+
+      tree tem = fold_convert (pvoid_type_node,
+                              GFC_DESCRIPTOR_TYPE_P (type)
+                              ? gfc_conv_descriptor_data_get (outer) : outer);
+      tem = unshare_expr (tem);
+      cond = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
+                             tem, null_pointer_node);
+      gfc_add_expr_to_block (&block,
+                            build3_loc (input_location, COND_EXPR,
+                                        void_type_node, cond, then_b,
+                                        else_b));
+    }
+  else
+    gfc_add_expr_to_block (&block, then_b);
 
   return gfc_finish_block (&block);
 }
@@ -217,15 +536,29 @@ gfc_omp_clause_default_ctor (tree clause, tree decl, tree outer)
 tree
 gfc_omp_clause_copy_ctor (tree clause, tree dest, tree src)
 {
-  tree type = TREE_TYPE (dest), ptr, size, esize, rank, call;
+  tree type = TREE_TYPE (dest), ptr, size, call;
   tree cond, then_b, else_b;
   stmtblock_t block, cond_block;
 
-  if (! GFC_DESCRIPTOR_TYPE_P (type)
-      || GFC_TYPE_ARRAY_AKIND (type) != GFC_ARRAY_ALLOCATABLE)
-    return build2_v (MODIFY_EXPR, dest, src);
+  gcc_assert (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_FIRSTPRIVATE
+             || OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_LINEAR);
 
-  gcc_assert (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_FIRSTPRIVATE);
+  if ((! GFC_DESCRIPTOR_TYPE_P (type)
+       || GFC_TYPE_ARRAY_AKIND (type) != GFC_ARRAY_ALLOCATABLE)
+      && !GFC_DECL_GET_SCALAR_ALLOCATABLE (OMP_CLAUSE_DECL (clause)))
+    {
+      if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause)))
+       {
+         gfc_start_block (&block);
+         gfc_add_modify (&block, dest, src);
+         tree tem = gfc_walk_alloc_comps (src, dest, OMP_CLAUSE_DECL (clause),
+                                          WALK_ALLOC_COMPS_COPY_CTOR);
+         gfc_add_expr_to_block (&block, tem);
+         return gfc_finish_block (&block);
+       }
+      else
+       return build2_v (MODIFY_EXPR, dest, src);
+    }
 
   /* Allocatable arrays in FIRSTPRIVATE clauses need to be allocated
      and copied from SRC.  */
@@ -234,86 +567,389 @@ gfc_omp_clause_copy_ctor (tree clause, tree dest, tree src)
   gfc_init_block (&cond_block);
 
   gfc_add_modify (&cond_block, dest, src);
-  rank = gfc_rank_cst[GFC_TYPE_ARRAY_RANK (type) - 1];
-  size = gfc_conv_descriptor_ubound_get (dest, rank);
-  size = fold_build2_loc (input_location, MINUS_EXPR, gfc_array_index_type,
-                         size, gfc_conv_descriptor_lbound_get (dest, rank));
-  size = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type,
-                         size, gfc_index_one_node);
-  if (GFC_TYPE_ARRAY_RANK (type) > 1)
-    size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
-                           size, gfc_conv_descriptor_stride_get (dest, rank));
-  esize = fold_convert (gfc_array_index_type,
-                       TYPE_SIZE_UNIT (gfc_get_element_type (type)));
-  size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
-                         size, esize);
-  size = gfc_evaluate_now (fold_convert (size_type_node, size), &cond_block);
-
+  if (GFC_DESCRIPTOR_TYPE_P (type))
+    {
+      tree rank = gfc_rank_cst[GFC_TYPE_ARRAY_RANK (type) - 1];
+      size = gfc_conv_descriptor_ubound_get (dest, rank);
+      size = fold_build2_loc (input_location, MINUS_EXPR, gfc_array_index_type,
+                             size,
+                             gfc_conv_descriptor_lbound_get (dest, rank));
+      size = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type,
+                             size, gfc_index_one_node);
+      if (GFC_TYPE_ARRAY_RANK (type) > 1)
+       size = fold_build2_loc (input_location, MULT_EXPR,
+                               gfc_array_index_type, size,
+                               gfc_conv_descriptor_stride_get (dest, rank));
+      tree esize = fold_convert (gfc_array_index_type,
+                                TYPE_SIZE_UNIT (gfc_get_element_type (type)));
+      size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
+                             size, esize);
+      size = unshare_expr (size);
+      size = gfc_evaluate_now (fold_convert (size_type_node, size),
+                              &cond_block);
+    }
+  else
+    size = fold_convert (size_type_node, TYPE_SIZE_UNIT (TREE_TYPE (type)));
   ptr = gfc_create_var (pvoid_type_node, NULL);
   gfc_allocate_using_malloc (&cond_block, ptr, size, NULL_TREE);
-  gfc_conv_descriptor_data_set (&cond_block, dest, ptr);
+  if (GFC_DESCRIPTOR_TYPE_P (type))
+    gfc_conv_descriptor_data_set (&cond_block, unshare_expr (dest), ptr);
+  else
+    gfc_add_modify (&cond_block, unshare_expr (dest),
+                   fold_convert (TREE_TYPE (dest), ptr));
 
+  tree srcptr = GFC_DESCRIPTOR_TYPE_P (type)
+               ? gfc_conv_descriptor_data_get (src) : src;
+  srcptr = unshare_expr (srcptr);
+  srcptr = fold_convert (pvoid_type_node, srcptr);
   call = build_call_expr_loc (input_location,
-                         builtin_decl_explicit (BUILT_IN_MEMCPY),
-                         3, ptr,
-                         fold_convert (pvoid_type_node,
-                                       gfc_conv_descriptor_data_get (src)),
-                         size);
+                             builtin_decl_explicit (BUILT_IN_MEMCPY), 3, ptr,
+                             srcptr, size);
   gfc_add_expr_to_block (&cond_block, fold_convert (void_type_node, call));
+  if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause)))
+    {
+      tree tem = gfc_walk_alloc_comps (src, dest,
+                                      OMP_CLAUSE_DECL (clause),
+                                      WALK_ALLOC_COMPS_COPY_CTOR);
+      gfc_add_expr_to_block (&cond_block, tem);
+    }
   then_b = gfc_finish_block (&cond_block);
 
   gfc_init_block (&cond_block);
-  gfc_conv_descriptor_data_set (&cond_block, dest, null_pointer_node);
+  if (GFC_DESCRIPTOR_TYPE_P (type))
+    gfc_conv_descriptor_data_set (&cond_block, unshare_expr (dest),
+                                 null_pointer_node);
+  else
+    gfc_add_modify (&cond_block, unshare_expr (dest),
+                   build_zero_cst (TREE_TYPE (dest)));
   else_b = gfc_finish_block (&cond_block);
 
   cond = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
-                         fold_convert (pvoid_type_node,
-                                       gfc_conv_descriptor_data_get (src)),
-                         null_pointer_node);
-  gfc_add_expr_to_block (&block, build3_loc (input_location, COND_EXPR,
-                        void_type_node, cond, then_b, else_b));
+                         unshare_expr (srcptr), null_pointer_node);
+  gfc_add_expr_to_block (&block,
+                        build3_loc (input_location, COND_EXPR,
+                                    void_type_node, cond, then_b, else_b));
 
   return gfc_finish_block (&block);
 }
 
-/* Similarly, except use an assignment operator instead.  */
+/* Similarly, except use an intrinsic or pointer assignment operator
+   instead.  */
 
 tree
-gfc_omp_clause_assign_op (tree clause ATTRIBUTE_UNUSED, tree dest, tree src)
+gfc_omp_clause_assign_op (tree clause, tree dest, tree src)
 {
-  tree type = TREE_TYPE (dest), rank, size, esize, call;
-  stmtblock_t block;
+  tree type = TREE_TYPE (dest), ptr, size, call, nonalloc;
+  tree cond, then_b, else_b;
+  stmtblock_t block, cond_block, cond_block2, inner_block;
 
-  if (! GFC_DESCRIPTOR_TYPE_P (type)
-      || GFC_TYPE_ARRAY_AKIND (type) != GFC_ARRAY_ALLOCATABLE)
-    return build2_v (MODIFY_EXPR, dest, src);
+  if ((! GFC_DESCRIPTOR_TYPE_P (type)
+       || GFC_TYPE_ARRAY_AKIND (type) != GFC_ARRAY_ALLOCATABLE)
+      && !GFC_DECL_GET_SCALAR_ALLOCATABLE (OMP_CLAUSE_DECL (clause)))
+    {
+      if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause)))
+       {
+         gfc_start_block (&block);
+         /* First dealloc any allocatable components in DEST.  */
+         tree tem = gfc_walk_alloc_comps (dest, NULL_TREE,
+                                          OMP_CLAUSE_DECL (clause),
+                                          WALK_ALLOC_COMPS_DTOR);
+         gfc_add_expr_to_block (&block, tem);
+         /* Then copy over toplevel data.  */
+         gfc_add_modify (&block, dest, src);
+         /* Finally allocate any allocatable components and copy.  */
+         tem = gfc_walk_alloc_comps (src, dest, OMP_CLAUSE_DECL (clause),
+                                          WALK_ALLOC_COMPS_COPY_CTOR);
+         gfc_add_expr_to_block (&block, tem);
+         return gfc_finish_block (&block);
+       }
+      else
+       return build2_v (MODIFY_EXPR, dest, src);
+    }
 
-  /* Handle copying allocatable arrays.  */
   gfc_start_block (&block);
 
-  rank = gfc_rank_cst[GFC_TYPE_ARRAY_RANK (type) - 1];
-  size = gfc_conv_descriptor_ubound_get (dest, rank);
-  size = fold_build2_loc (input_location, MINUS_EXPR, gfc_array_index_type,
-                         size, gfc_conv_descriptor_lbound_get (dest, rank));
-  size = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type,
-                         size, gfc_index_one_node);
-  if (GFC_TYPE_ARRAY_RANK (type) > 1)
-    size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
-                           size, gfc_conv_descriptor_stride_get (dest, rank));
-  esize = fold_convert (gfc_array_index_type,
-                       TYPE_SIZE_UNIT (gfc_get_element_type (type)));
-  size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
-                         size, esize);
-  size = gfc_evaluate_now (fold_convert (size_type_node, size), &block);
+  if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause)))
+    {
+      then_b = gfc_walk_alloc_comps (dest, NULL_TREE, OMP_CLAUSE_DECL (clause),
+                                    WALK_ALLOC_COMPS_DTOR);
+      tree tem = fold_convert (pvoid_type_node,
+                              GFC_DESCRIPTOR_TYPE_P (type)
+                              ? gfc_conv_descriptor_data_get (dest) : dest);
+      tem = unshare_expr (tem);
+      cond = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
+                             tem, null_pointer_node);
+      tem = build3_loc (input_location, COND_EXPR, void_type_node, cond,
+                       then_b, build_empty_stmt (input_location));
+      gfc_add_expr_to_block (&block, tem);
+    }
+
+  gfc_init_block (&cond_block);
+
+  if (GFC_DESCRIPTOR_TYPE_P (type))
+    {
+      tree rank = gfc_rank_cst[GFC_TYPE_ARRAY_RANK (type) - 1];
+      size = gfc_conv_descriptor_ubound_get (src, rank);
+      size = fold_build2_loc (input_location, MINUS_EXPR, gfc_array_index_type,
+                             size,
+                             gfc_conv_descriptor_lbound_get (src, rank));
+      size = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type,
+                             size, gfc_index_one_node);
+      if (GFC_TYPE_ARRAY_RANK (type) > 1)
+       size = fold_build2_loc (input_location, MULT_EXPR,
+                               gfc_array_index_type, size,
+                               gfc_conv_descriptor_stride_get (src, rank));
+      tree esize = fold_convert (gfc_array_index_type,
+                                TYPE_SIZE_UNIT (gfc_get_element_type (type)));
+      size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
+                             size, esize);
+      size = unshare_expr (size);
+      size = gfc_evaluate_now (fold_convert (size_type_node, size),
+                              &cond_block);
+    }
+  else
+    size = fold_convert (size_type_node, TYPE_SIZE_UNIT (TREE_TYPE (type)));
+  ptr = gfc_create_var (pvoid_type_node, NULL);
+
+  tree destptr = GFC_DESCRIPTOR_TYPE_P (type)
+                ? gfc_conv_descriptor_data_get (dest) : dest;
+  destptr = unshare_expr (destptr);
+  destptr = fold_convert (pvoid_type_node, destptr);
+  gfc_add_modify (&cond_block, ptr, destptr);
+
+  nonalloc = fold_build2_loc (input_location, EQ_EXPR, boolean_type_node,
+                             destptr, null_pointer_node);
+  cond = nonalloc;
+  if (GFC_DESCRIPTOR_TYPE_P (type))
+    {
+      int i;
+      for (i = 0; i < GFC_TYPE_ARRAY_RANK (type); i++)
+       {
+         tree rank = gfc_rank_cst[i];
+         tree tem = gfc_conv_descriptor_ubound_get (src, rank);
+         tem = fold_build2_loc (input_location, MINUS_EXPR,
+                                gfc_array_index_type, tem,
+                                gfc_conv_descriptor_lbound_get (src, rank));
+         tem = fold_build2_loc (input_location, PLUS_EXPR,
+                                gfc_array_index_type, tem,
+                                gfc_conv_descriptor_lbound_get (dest, rank));
+         tem = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
+                                tem, gfc_conv_descriptor_ubound_get (dest,
+                                                                     rank));
+         cond = fold_build2_loc (input_location, TRUTH_ORIF_EXPR,
+                                 boolean_type_node, cond, tem);
+       }
+    }
+
+  gfc_init_block (&cond_block2);
+
+  if (GFC_DESCRIPTOR_TYPE_P (type))
+    {
+      gfc_init_block (&inner_block);
+      gfc_allocate_using_malloc (&inner_block, ptr, size, NULL_TREE);
+      then_b = gfc_finish_block (&inner_block);
+
+      gfc_init_block (&inner_block);
+      gfc_add_modify (&inner_block, ptr,
+                     gfc_call_realloc (&inner_block, ptr, size));
+      else_b = gfc_finish_block (&inner_block);
+
+      gfc_add_expr_to_block (&cond_block2,
+                            build3_loc (input_location, COND_EXPR,
+                                        void_type_node,
+                                        unshare_expr (nonalloc),
+                                        then_b, else_b));
+      gfc_add_modify (&cond_block2, dest, src);
+      gfc_conv_descriptor_data_set (&cond_block2, unshare_expr (dest), ptr);
+    }
+  else
+    {
+      gfc_allocate_using_malloc (&cond_block2, ptr, size, NULL_TREE);
+      gfc_add_modify (&cond_block2, unshare_expr (dest),
+                     fold_convert (type, ptr));
+    }
+  then_b = gfc_finish_block (&cond_block2);
+  else_b = build_empty_stmt (input_location);
+
+  gfc_add_expr_to_block (&cond_block,
+                        build3_loc (input_location, COND_EXPR,
+                                    void_type_node, unshare_expr (cond),
+                                    then_b, else_b));
+
+  tree srcptr = GFC_DESCRIPTOR_TYPE_P (type)
+               ? gfc_conv_descriptor_data_get (src) : src;
+  srcptr = unshare_expr (srcptr);
+  srcptr = fold_convert (pvoid_type_node, srcptr);
   call = build_call_expr_loc (input_location,
-                         builtin_decl_explicit (BUILT_IN_MEMCPY), 3,
-                         fold_convert (pvoid_type_node,
-                                       gfc_conv_descriptor_data_get (dest)),
-                         fold_convert (pvoid_type_node,
-                                       gfc_conv_descriptor_data_get (src)),
-                         size);
-  gfc_add_expr_to_block (&block, fold_convert (void_type_node, call));
+                             builtin_decl_explicit (BUILT_IN_MEMCPY), 3, ptr,
+                             srcptr, size);
+  gfc_add_expr_to_block (&cond_block, fold_convert (void_type_node, call));
+  if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause)))
+    {
+      tree tem = gfc_walk_alloc_comps (src, dest,
+                                      OMP_CLAUSE_DECL (clause),
+                                      WALK_ALLOC_COMPS_COPY_CTOR);
+      gfc_add_expr_to_block (&cond_block, tem);
+    }
+  then_b = gfc_finish_block (&cond_block);
+
+  if (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_COPYIN)
+    {
+      gfc_init_block (&cond_block);
+      if (GFC_DESCRIPTOR_TYPE_P (type))
+       gfc_add_expr_to_block (&cond_block,
+                              gfc_trans_dealloc_allocated (unshare_expr (dest),
+                                                           false, NULL));
+      else
+       {
+         destptr = gfc_evaluate_now (destptr, &cond_block);
+         gfc_add_expr_to_block (&cond_block, gfc_call_free (destptr));
+         gfc_add_modify (&cond_block, unshare_expr (dest),
+                         build_zero_cst (TREE_TYPE (dest)));
+       }
+      else_b = gfc_finish_block (&cond_block);
+
+      cond = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
+                             unshare_expr (srcptr), null_pointer_node);
+      gfc_add_expr_to_block (&block,
+                            build3_loc (input_location, COND_EXPR,
+                                        void_type_node, cond,
+                                        then_b, else_b));
+    }
+  else
+    gfc_add_expr_to_block (&block, then_b);
+
+  return gfc_finish_block (&block);
+}
+
+static void
+gfc_omp_linear_clause_add_loop (stmtblock_t *block, tree dest, tree src,
+                               tree add, tree nelems)
+{
+  stmtblock_t tmpblock;
+  tree desta, srca, index = gfc_create_var (gfc_array_index_type, "S");
+  nelems = gfc_evaluate_now (nelems, block);
+
+  gfc_init_block (&tmpblock);
+  if (TREE_CODE (TREE_TYPE (dest)) == ARRAY_TYPE)
+    {
+      desta = gfc_build_array_ref (dest, index, NULL);
+      srca = gfc_build_array_ref (src, index, NULL);
+    }
+  else
+    {
+      gcc_assert (POINTER_TYPE_P (TREE_TYPE (dest)));
+      tree idx = fold_build2 (MULT_EXPR, sizetype,
+                             fold_convert (sizetype, index),
+                             TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (dest))));
+      desta = build_fold_indirect_ref (fold_build2 (POINTER_PLUS_EXPR,
+                                                   TREE_TYPE (dest), dest,
+                                                   idx));
+      srca = build_fold_indirect_ref (fold_build2 (POINTER_PLUS_EXPR,
+                                                  TREE_TYPE (src), src,
+                                                   idx));
+    }
+  gfc_add_modify (&tmpblock, desta,
+                 fold_build2 (PLUS_EXPR, TREE_TYPE (desta),
+                              srca, add));
+
+  gfc_loopinfo loop;
+  gfc_init_loopinfo (&loop);
+  loop.dimen = 1;
+  loop.from[0] = gfc_index_zero_node;
+  loop.loopvar[0] = index;
+  loop.to[0] = nelems;
+  gfc_trans_scalarizing_loops (&loop, &tmpblock);
+  gfc_add_block_to_block (block, &loop.pre);
+}
+
+/* Build and return code for a constructor of DEST that initializes
+   it to SRC plus ADD (ADD is scalar integer).  */
+
+tree
+gfc_omp_clause_linear_ctor (tree clause, tree dest, tree src, tree add)
+{
+  tree type = TREE_TYPE (dest), ptr, size, nelems = NULL_TREE;
+  stmtblock_t block;
+
+  gcc_assert (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_LINEAR);
+
+  gfc_start_block (&block);
+  add = gfc_evaluate_now (add, &block);
+
+  if ((! GFC_DESCRIPTOR_TYPE_P (type)
+       || GFC_TYPE_ARRAY_AKIND (type) != GFC_ARRAY_ALLOCATABLE)
+      && !GFC_DECL_GET_SCALAR_ALLOCATABLE (OMP_CLAUSE_DECL (clause)))
+    {
+      gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
+      if (!TYPE_DOMAIN (type)
+         || TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL_TREE
+         || TYPE_MIN_VALUE (TYPE_DOMAIN (type)) == error_mark_node
+         || TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == error_mark_node)
+       {
+         nelems = fold_build2 (EXACT_DIV_EXPR, sizetype,
+                               TYPE_SIZE_UNIT (type),
+                               TYPE_SIZE_UNIT (TREE_TYPE (type)));
+         nelems = size_binop (MINUS_EXPR, nelems, size_one_node);
+       }
+      else
+       nelems = array_type_nelts (type);
+      nelems = fold_convert (gfc_array_index_type, nelems);
 
+      gfc_omp_linear_clause_add_loop (&block, dest, src, add, nelems);
+      return gfc_finish_block (&block);
+    }
+
+  /* Allocatable arrays in LINEAR clauses need to be allocated
+     and copied from SRC.  */
+  gfc_add_modify (&block, dest, src);
+  if (GFC_DESCRIPTOR_TYPE_P (type))
+    {
+      tree rank = gfc_rank_cst[GFC_TYPE_ARRAY_RANK (type) - 1];
+      size = gfc_conv_descriptor_ubound_get (dest, rank);
+      size = fold_build2_loc (input_location, MINUS_EXPR, gfc_array_index_type,
+                             size,
+                             gfc_conv_descriptor_lbound_get (dest, rank));
+      size = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type,
+                             size, gfc_index_one_node);
+      if (GFC_TYPE_ARRAY_RANK (type) > 1)
+       size = fold_build2_loc (input_location, MULT_EXPR,
+                               gfc_array_index_type, size,
+                               gfc_conv_descriptor_stride_get (dest, rank));
+      tree esize = fold_convert (gfc_array_index_type,
+                                TYPE_SIZE_UNIT (gfc_get_element_type (type)));
+      nelems = gfc_evaluate_now (unshare_expr (size), &block);
+      size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
+                             nelems, unshare_expr (esize));
+      size = gfc_evaluate_now (fold_convert (size_type_node, size),
+                              &block);
+      nelems = fold_build2_loc (input_location, MINUS_EXPR,
+                               gfc_array_index_type, nelems,
+                               gfc_index_one_node);
+    }
+  else
+    size = fold_convert (size_type_node, TYPE_SIZE_UNIT (TREE_TYPE (type)));
+  ptr = gfc_create_var (pvoid_type_node, NULL);
+  gfc_allocate_using_malloc (&block, ptr, size, NULL_TREE);
+  if (GFC_DESCRIPTOR_TYPE_P (type))
+    {
+      gfc_conv_descriptor_data_set (&block, unshare_expr (dest), ptr);
+      tree etype = gfc_get_element_type (type);
+      ptr = fold_convert (build_pointer_type (etype), ptr);
+      tree srcptr = gfc_conv_descriptor_data_get (unshare_expr (src));
+      srcptr = fold_convert (build_pointer_type (etype), srcptr);
+      gfc_omp_linear_clause_add_loop (&block, ptr, srcptr, add, nelems);
+    }
+  else
+    {
+      gfc_add_modify (&block, unshare_expr (dest),
+                     fold_convert (TREE_TYPE (dest), ptr));
+      ptr = fold_convert (TREE_TYPE (dest), ptr);
+      tree dstm = build_fold_indirect_ref (ptr);
+      tree srcm = build_fold_indirect_ref (unshare_expr (src));
+      gfc_add_modify (&block, dstm,
+                     fold_build2 (PLUS_EXPR, TREE_TYPE (add), srcm, add));
+    }
   return gfc_finish_block (&block);
 }
 
@@ -321,20 +957,161 @@ gfc_omp_clause_assign_op (tree clause ATTRIBUTE_UNUSED, tree dest, tree src)
    to be done.  */
 
 tree
-gfc_omp_clause_dtor (tree clause ATTRIBUTE_UNUSED, tree decl)
+gfc_omp_clause_dtor (tree clause, tree decl)
 {
-  tree type = TREE_TYPE (decl);
+  tree type = TREE_TYPE (decl), tem;
+
+  if ((! GFC_DESCRIPTOR_TYPE_P (type)
+       || GFC_TYPE_ARRAY_AKIND (type) != GFC_ARRAY_ALLOCATABLE)
+      && !GFC_DECL_GET_SCALAR_ALLOCATABLE (OMP_CLAUSE_DECL (clause)))
+    {
+      if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause)))
+       return gfc_walk_alloc_comps (decl, NULL_TREE,
+                                    OMP_CLAUSE_DECL (clause),
+                                    WALK_ALLOC_COMPS_DTOR);
+      return NULL_TREE;
+    }
+
+  if (GFC_DESCRIPTOR_TYPE_P (type))
+    /* Allocatable arrays in FIRSTPRIVATE/LASTPRIVATE etc. clauses need
+       to be deallocated if they were allocated.  */
+    tem = gfc_trans_dealloc_allocated (decl, false, NULL);
+  else
+    tem = gfc_call_free (decl);
+  tem = gfc_omp_unshare_expr (tem);
+
+  if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause)))
+    {
+      stmtblock_t block;
+      tree then_b;
+
+      gfc_init_block (&block);
+      gfc_add_expr_to_block (&block,
+                            gfc_walk_alloc_comps (decl, NULL_TREE,
+                                                  OMP_CLAUSE_DECL (clause),
+                                                  WALK_ALLOC_COMPS_DTOR));
+      gfc_add_expr_to_block (&block, tem);
+      then_b = gfc_finish_block (&block);
+
+      tem = fold_convert (pvoid_type_node,
+                         GFC_DESCRIPTOR_TYPE_P (type)
+                         ? gfc_conv_descriptor_data_get (decl) : decl);
+      tem = unshare_expr (tem);
+      tree cond = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
+                                  tem, null_pointer_node);
+      tem = build3_loc (input_location, COND_EXPR, void_type_node, cond,
+                       then_b, build_empty_stmt (input_location));
+    }
+  return tem;
+}
 
-  if (! GFC_DESCRIPTOR_TYPE_P (type)
-      || GFC_TYPE_ARRAY_AKIND (type) != GFC_ARRAY_ALLOCATABLE)
-    return NULL;
 
-  if (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_REDUCTION)
-    return NULL;
+void
+gfc_omp_finish_clause (tree c, gimple_seq *pre_p)
+{
+  if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_MAP)
+    return;
 
-  /* Allocatable arrays in FIRSTPRIVATE/LASTPRIVATE etc. clauses need
-     to be deallocated if they were allocated.  */
-  return gfc_trans_dealloc_allocated (decl, false, NULL);
+  tree decl = OMP_CLAUSE_DECL (c);
+  tree c2 = NULL_TREE, c3 = NULL_TREE, c4 = NULL_TREE;
+  if (POINTER_TYPE_P (TREE_TYPE (decl)))
+    {
+      if (!gfc_omp_privatize_by_reference (decl)
+         && !GFC_DECL_GET_SCALAR_POINTER (decl)
+         && !GFC_DECL_GET_SCALAR_ALLOCATABLE (decl)
+         && !GFC_DECL_CRAY_POINTEE (decl)
+         && !GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (TREE_TYPE (decl))))
+       return;
+      c4 = build_omp_clause (OMP_CLAUSE_LOCATION (c), OMP_CLAUSE_MAP);
+      OMP_CLAUSE_MAP_KIND (c4) = OMP_CLAUSE_MAP_POINTER;
+      OMP_CLAUSE_DECL (c4) = decl;
+      OMP_CLAUSE_SIZE (c4) = size_int (0);
+      decl = build_fold_indirect_ref (decl);
+      OMP_CLAUSE_DECL (c) = decl;
+      OMP_CLAUSE_SIZE (c) = NULL_TREE;
+    }
+  if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl)))
+    {
+      stmtblock_t block;
+      gfc_start_block (&block);
+      tree type = TREE_TYPE (decl);
+      tree ptr = gfc_conv_descriptor_data_get (decl);
+      ptr = fold_convert (build_pointer_type (char_type_node), ptr);
+      ptr = build_fold_indirect_ref (ptr);
+      OMP_CLAUSE_DECL (c) = ptr;
+      c2 = build_omp_clause (input_location, OMP_CLAUSE_MAP);
+      OMP_CLAUSE_MAP_KIND (c2) = OMP_CLAUSE_MAP_TO_PSET;
+      OMP_CLAUSE_DECL (c2) = decl;
+      OMP_CLAUSE_SIZE (c2) = TYPE_SIZE_UNIT (type);
+      c3 = build_omp_clause (OMP_CLAUSE_LOCATION (c), OMP_CLAUSE_MAP);
+      OMP_CLAUSE_MAP_KIND (c3) = OMP_CLAUSE_MAP_POINTER;
+      OMP_CLAUSE_DECL (c3) = gfc_conv_descriptor_data_get (decl);
+      OMP_CLAUSE_SIZE (c3) = size_int (0);
+      tree size = create_tmp_var (gfc_array_index_type, NULL);
+      tree elemsz = TYPE_SIZE_UNIT (gfc_get_element_type (type));
+      elemsz = fold_convert (gfc_array_index_type, elemsz);
+      if (GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_POINTER
+         || GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_POINTER_CONT)
+       {
+         stmtblock_t cond_block;
+         tree tem, then_b, else_b, zero, cond;
+
+         gfc_init_block (&cond_block);
+         tem = gfc_full_array_size (&cond_block, decl,
+                                    GFC_TYPE_ARRAY_RANK (type));
+         gfc_add_modify (&cond_block, size, tem);
+         gfc_add_modify (&cond_block, size,
+                         fold_build2 (MULT_EXPR, gfc_array_index_type,
+                                      size, elemsz));
+         then_b = gfc_finish_block (&cond_block);
+         gfc_init_block (&cond_block);
+         zero = build_int_cst (gfc_array_index_type, 0);
+         gfc_add_modify (&cond_block, size, zero);
+         else_b = gfc_finish_block (&cond_block);
+         tem = gfc_conv_descriptor_data_get (decl);
+         tem = fold_convert (pvoid_type_node, tem);
+         cond = fold_build2_loc (input_location, NE_EXPR,
+                                 boolean_type_node, tem, null_pointer_node);
+         gfc_add_expr_to_block (&block, build3_loc (input_location, COND_EXPR,
+                                                    void_type_node, cond,
+                                                    then_b, else_b));
+       }
+      else
+       {
+         gfc_add_modify (&block, size,
+                         gfc_full_array_size (&block, decl,
+                                              GFC_TYPE_ARRAY_RANK (type)));
+         gfc_add_modify (&block, size,
+                         fold_build2 (MULT_EXPR, gfc_array_index_type,
+                                      size, elemsz));
+       }
+      OMP_CLAUSE_SIZE (c) = size;
+      tree stmt = gfc_finish_block (&block);
+      gimplify_and_add (stmt, pre_p);
+    }
+  tree last = c;
+  if (OMP_CLAUSE_SIZE (c) == NULL_TREE)
+    OMP_CLAUSE_SIZE (c)
+      = DECL_P (decl) ? DECL_SIZE_UNIT (decl)
+                     : TYPE_SIZE_UNIT (TREE_TYPE (decl));
+  if (c2)
+    {
+      OMP_CLAUSE_CHAIN (c2) = OMP_CLAUSE_CHAIN (last);
+      OMP_CLAUSE_CHAIN (last) = c2;
+      last = c2;
+    }
+  if (c3)
+    {
+      OMP_CLAUSE_CHAIN (c3) = OMP_CLAUSE_CHAIN (last);
+      OMP_CLAUSE_CHAIN (last) = c3;
+      last = c3;
+    }
+  if (c4)
+    {
+      OMP_CLAUSE_CHAIN (c4) = OMP_CLAUSE_CHAIN (last);
+      OMP_CLAUSE_CHAIN (last) = c4;
+      last = c4;
+    }
 }
 
 
@@ -427,8 +1204,33 @@ gfc_trans_add_clause (tree node, tree tail)
 }
 
 static tree
-gfc_trans_omp_variable (gfc_symbol *sym)
+gfc_trans_omp_variable (gfc_symbol *sym, bool declare_simd)
 {
+  if (declare_simd)
+    {
+      int cnt = 0;
+      gfc_symbol *proc_sym;
+      gfc_formal_arglist *f;
+
+      gcc_assert (sym->attr.dummy);
+      proc_sym = sym->ns->proc_name;
+      if (proc_sym->attr.entry_master)
+       ++cnt;
+      if (gfc_return_by_reference (proc_sym))
+       {
+         ++cnt;
+         if (proc_sym->ts.type == BT_CHARACTER)
+           ++cnt;
+       }
+      for (f = gfc_sym_get_dummy_args (proc_sym); f; f = f->next)
+       if (f->sym == sym)
+         break;
+       else if (f->sym)
+         ++cnt;
+      gcc_assert (f);
+      return build_int_cst (integer_type_node, cnt);
+    }
+
   tree t = gfc_get_symbol_decl (sym);
   tree parent_decl;
   int parent_flag;
@@ -442,7 +1244,8 @@ gfc_trans_omp_variable (gfc_symbol *sym)
   entry_master = sym->attr.result
                 && sym->ns->proc_name->attr.entry_master
                 && !gfc_return_by_reference (sym->ns->proc_name);
-  parent_decl = DECL_CONTEXT (current_function_decl);
+  parent_decl = current_function_decl
+               ? DECL_CONTEXT (current_function_decl) : NULL_TREE;
 
   if ((t == parent_decl && return_value)
        || (sym->ns && sym->ns->proc_name
@@ -481,13 +1284,14 @@ gfc_trans_omp_variable (gfc_symbol *sym)
 }
 
 static tree
-gfc_trans_omp_variable_list (enum omp_clause_code code, gfc_namelist *namelist,
-                            tree list)
+gfc_trans_omp_variable_list (enum omp_clause_code code,
+                            gfc_omp_namelist *namelist, tree list,
+                            bool declare_simd)
 {
   for (; namelist != NULL; namelist = namelist->next)
-    if (namelist->sym->attr.referenced)
+    if (namelist->sym->attr.referenced || declare_simd)
       {
-       tree t = gfc_trans_omp_variable (namelist->sym);
+       tree t = gfc_trans_omp_variable (namelist->sym, declare_simd);
        if (t != error_mark_node)
          {
            tree node = build_omp_clause (input_location, code);
@@ -498,18 +1302,39 @@ gfc_trans_omp_variable_list (enum omp_clause_code code, gfc_namelist *namelist,
   return list;
 }
 
+struct omp_udr_find_orig_data
+{
+  gfc_omp_udr *omp_udr;
+  bool omp_orig_seen;
+};
+
+static int
+omp_udr_find_orig (gfc_expr **e, int *walk_subtrees ATTRIBUTE_UNUSED,
+                  void *data)
+{
+  struct omp_udr_find_orig_data *cd = (struct omp_udr_find_orig_data *) data;
+  if ((*e)->expr_type == EXPR_VARIABLE
+      && (*e)->symtree->n.sym == cd->omp_udr->omp_orig)
+    cd->omp_orig_seen = true;
+
+  return 0;
+}
+
 static void
-gfc_trans_omp_array_reduction (tree c, gfc_symbol *sym, locus where)
+gfc_trans_omp_array_reduction_or_udr (tree c, gfc_omp_namelist *n, locus where)
 {
+  gfc_symbol *sym = n->sym;
   gfc_symtree *root1 = NULL, *root2 = NULL, *root3 = NULL, *root4 = NULL;
   gfc_symtree *symtree1, *symtree2, *symtree3, *symtree4 = NULL;
   gfc_symbol init_val_sym, outer_sym, intrinsic_sym;
+  gfc_symbol omp_var_copy[4];
   gfc_expr *e1, *e2, *e3, *e4;
   gfc_ref *ref;
   tree decl, backend_decl, stmt, type, outer_decl;
   locus old_loc = gfc_current_locus;
   const char *iname;
   bool t;
+  gfc_omp_udr *udr = n->udr ? n->udr->udr : NULL;
 
   decl = OMP_CLAUSE_DECL (c);
   gfc_current_locus = where;
@@ -532,12 +1357,29 @@ gfc_trans_omp_array_reduction (tree c, gfc_symbol *sym, locus where)
   init_val_sym.attr.referenced = 1;
   init_val_sym.declared_at = where;
   init_val_sym.attr.flavor = FL_VARIABLE;
-  backend_decl = omp_reduction_init (c, gfc_sym_type (&init_val_sym));
+  if (OMP_CLAUSE_REDUCTION_CODE (c) != ERROR_MARK)
+    backend_decl = omp_reduction_init (c, gfc_sym_type (&init_val_sym));
+  else if (udr->initializer_ns)
+    backend_decl = NULL;
+  else
+    switch (sym->ts.type)
+      {
+      case BT_LOGICAL:
+      case BT_INTEGER:
+      case BT_REAL:
+      case BT_COMPLEX:
+       backend_decl = build_zero_cst (gfc_sym_type (&init_val_sym));
+       break;
+      default:
+       backend_decl = NULL_TREE;
+       break;
+      }
   init_val_sym.backend_decl = backend_decl;
 
   /* Create a fake symbol for the outer array reference.  */
   outer_sym = *sym;
-  outer_sym.as = gfc_copy_array_spec (sym->as);
+  if (sym->as)
+    outer_sym.as = gfc_copy_array_spec (sym->as);
   outer_sym.attr.dummy = 0;
   outer_sym.attr.result = 0;
   outer_sym.attr.flavor = FL_VARIABLE;
@@ -558,28 +1400,75 @@ gfc_trans_omp_array_reduction (tree c, gfc_symbol *sym, locus where)
   symtree3->n.sym = &outer_sym;
   gcc_assert (symtree3 == root3);
 
+  memset (omp_var_copy, 0, sizeof omp_var_copy);
+  if (udr)
+    {
+      omp_var_copy[0] = *udr->omp_out;
+      omp_var_copy[1] = *udr->omp_in;
+      *udr->omp_out = outer_sym;
+      *udr->omp_in = *sym;
+      if (udr->initializer_ns)
+       {
+         omp_var_copy[2] = *udr->omp_priv;
+         omp_var_copy[3] = *udr->omp_orig;
+         *udr->omp_priv = *sym;
+         *udr->omp_orig = outer_sym;
+       }
+    }
+
   /* Create expressions.  */
   e1 = gfc_get_expr ();
   e1->expr_type = EXPR_VARIABLE;
   e1->where = where;
   e1->symtree = symtree1;
   e1->ts = sym->ts;
-  e1->ref = ref = gfc_get_ref ();
-  ref->type = REF_ARRAY;
-  ref->u.ar.where = where;
-  ref->u.ar.as = sym->as;
-  ref->u.ar.type = AR_FULL;
-  ref->u.ar.dimen = 0;
+  if (sym->attr.dimension)
+    {
+      e1->ref = ref = gfc_get_ref ();
+      ref->type = REF_ARRAY;
+      ref->u.ar.where = where;
+      ref->u.ar.as = sym->as;
+      ref->u.ar.type = AR_FULL;
+      ref->u.ar.dimen = 0;
+    }
   t = gfc_resolve_expr (e1);
   gcc_assert (t);
 
-  e2 = gfc_get_expr ();
-  e2->expr_type = EXPR_VARIABLE;
-  e2->where = where;
-  e2->symtree = symtree2;
-  e2->ts = sym->ts;
-  t = gfc_resolve_expr (e2);
-  gcc_assert (t);
+  e2 = NULL;
+  if (backend_decl != NULL_TREE)
+    {
+      e2 = gfc_get_expr ();
+      e2->expr_type = EXPR_VARIABLE;
+      e2->where = where;
+      e2->symtree = symtree2;
+      e2->ts = sym->ts;
+      t = gfc_resolve_expr (e2);
+      gcc_assert (t);
+    }
+  else if (udr->initializer_ns == NULL)
+    {
+      gcc_assert (sym->ts.type == BT_DERIVED);
+      e2 = gfc_default_initializer (&sym->ts);
+      gcc_assert (e2);
+      t = gfc_resolve_expr (e2);
+      gcc_assert (t);
+    }
+  else if (n->udr->initializer->op == EXEC_ASSIGN)
+    {
+      e2 = gfc_copy_expr (n->udr->initializer->expr2);
+      t = gfc_resolve_expr (e2);
+      gcc_assert (t);
+    }
+  if (udr && udr->initializer_ns)
+    {
+      struct omp_udr_find_orig_data cd;
+      cd.omp_udr = udr;
+      cd.omp_orig_seen = false;
+      gfc_code_walker (&n->udr->initializer,
+                      gfc_dummy_code_callback, omp_udr_find_orig, &cd);
+      if (cd.omp_orig_seen)
+       OMP_CLAUSE_REDUCTION_OMP_ORIG_REF (c) = 1;
+    }
 
   e3 = gfc_copy_expr (e1);
   e3->symtree = symtree3;
@@ -587,6 +1476,7 @@ gfc_trans_omp_array_reduction (tree c, gfc_symbol *sym, locus where)
   gcc_assert (t);
 
   iname = NULL;
+  e4 = NULL;
   switch (OMP_CLAUSE_REDUCTION_CODE (c))
     {
     case PLUS_EXPR:
@@ -623,6 +1513,18 @@ gfc_trans_omp_array_reduction (tree c, gfc_symbol *sym, locus where)
     case BIT_XOR_EXPR:
       iname = "ieor";
       break;
+    case ERROR_MARK:
+      if (n->udr->combiner->op == EXEC_ASSIGN)
+       {
+         gfc_free_expr (e3);
+         e3 = gfc_copy_expr (n->udr->combiner->expr1);
+         e4 = gfc_copy_expr (n->udr->combiner->expr2);
+         t = gfc_resolve_expr (e3);
+         gcc_assert (t);
+         t = gfc_resolve_expr (e4);
+         gcc_assert (t);
+       }
+      break;
     default:
       gcc_unreachable ();
     }
@@ -646,58 +1548,27 @@ gfc_trans_omp_array_reduction (tree c, gfc_symbol *sym, locus where)
       e4->expr_type = EXPR_FUNCTION;
       e4->where = where;
       e4->symtree = symtree4;
-      e4->value.function.isym = gfc_find_function (iname);
       e4->value.function.actual = gfc_get_actual_arglist ();
       e4->value.function.actual->expr = e3;
       e4->value.function.actual->next = gfc_get_actual_arglist ();
       e4->value.function.actual->next->expr = e1;
     }
-  /* e1 and e3 have been stored as arguments of e4, avoid sharing.  */
-  e1 = gfc_copy_expr (e1);
-  e3 = gfc_copy_expr (e3);
-  t = gfc_resolve_expr (e4);
-  gcc_assert (t);
+  if (OMP_CLAUSE_REDUCTION_CODE (c) != ERROR_MARK)
+    {
+      /* e1 and e3 have been stored as arguments of e4, avoid sharing.  */
+      e1 = gfc_copy_expr (e1);
+      e3 = gfc_copy_expr (e3);
+      t = gfc_resolve_expr (e4);
+      gcc_assert (t);
+    }
 
   /* Create the init statement list.  */
   pushlevel ();
-  if (GFC_DESCRIPTOR_TYPE_P (type)
-      && GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ALLOCATABLE)
-    {
-      /* If decl is an allocatable array, it needs to be allocated
-        with the same bounds as the outer var.  */
-      tree rank, size, esize, ptr;
-      stmtblock_t block;
-
-      gfc_start_block (&block);
-
-      gfc_add_modify (&block, decl, outer_sym.backend_decl);
-      rank = gfc_rank_cst[GFC_TYPE_ARRAY_RANK (type) - 1];
-      size = gfc_conv_descriptor_ubound_get (decl, rank);
-      size = fold_build2_loc (input_location, MINUS_EXPR,
-                             gfc_array_index_type, size,
-                             gfc_conv_descriptor_lbound_get (decl, rank));
-      size = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type,
-                             size, gfc_index_one_node);
-      if (GFC_TYPE_ARRAY_RANK (type) > 1)
-       size = fold_build2_loc (input_location, MULT_EXPR,
-                               gfc_array_index_type, size,
-                               gfc_conv_descriptor_stride_get (decl, rank));
-      esize = fold_convert (gfc_array_index_type,
-                           TYPE_SIZE_UNIT (gfc_get_element_type (type)));
-      size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
-                             size, esize);
-      size = gfc_evaluate_now (fold_convert (size_type_node, size), &block);
-
-      ptr = gfc_create_var (pvoid_type_node, NULL);
-      gfc_allocate_using_malloc (&block, ptr, size, NULL_TREE);
-      gfc_conv_descriptor_data_set (&block, decl, ptr);
-
-      gfc_add_expr_to_block (&block, gfc_trans_assignment (e1, e2, false,
-                            false));
-      stmt = gfc_finish_block (&block);
-    }
-  else
+  if (e2)
     stmt = gfc_trans_assignment (e1, e2, false, false);
+  else
+    stmt = gfc_trans_call (n->udr->initializer, false,
+                          NULL_TREE, NULL_TREE, false);
   if (TREE_CODE (stmt) != BIND_EXPR)
     stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0));
   else
@@ -706,22 +1577,11 @@ gfc_trans_omp_array_reduction (tree c, gfc_symbol *sym, locus where)
 
   /* Create the merge statement list.  */
   pushlevel ();
-  if (GFC_DESCRIPTOR_TYPE_P (type)
-      && GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ALLOCATABLE)
-    {
-      /* If decl is an allocatable array, it needs to be deallocated
-        afterwards.  */
-      stmtblock_t block;
-
-      gfc_start_block (&block);
-      gfc_add_expr_to_block (&block, gfc_trans_assignment (e3, e4, false,
-                            true));
-      gfc_add_expr_to_block (&block, gfc_trans_dealloc_allocated (decl, false,
-                                                                 NULL));
-      stmt = gfc_finish_block (&block);
-    }
-  else
+  if (e4)
     stmt = gfc_trans_assignment (e3, e4, false, true);
+  else
+    stmt = gfc_trans_call (n->udr->combiner, false,
+                          NULL_TREE, NULL_TREE, false);
   if (TREE_CODE (stmt) != BIND_EXPR)
     stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0));
   else
@@ -734,32 +1594,91 @@ gfc_trans_omp_array_reduction (tree c, gfc_symbol *sym, locus where)
   gfc_current_locus = old_loc;
 
   gfc_free_expr (e1);
-  gfc_free_expr (e2);
+  if (e2)
+    gfc_free_expr (e2);
   gfc_free_expr (e3);
-  gfc_free_expr (e4);
+  if (e4)
+    gfc_free_expr (e4);
   free (symtree1);
   free (symtree2);
   free (symtree3);
   free (symtree4);
-  gfc_free_array_spec (outer_sym.as);
+  if (outer_sym.as)
+    gfc_free_array_spec (outer_sym.as);
+
+  if (udr)
+    {
+      *udr->omp_out = omp_var_copy[0];
+      *udr->omp_in = omp_var_copy[1];
+      if (udr->initializer_ns)
+       {
+         *udr->omp_priv = omp_var_copy[2];
+         *udr->omp_orig = omp_var_copy[3];
+       }
+    }
 }
 
 static tree
-gfc_trans_omp_reduction_list (gfc_namelist *namelist, tree list, 
-                             enum tree_code reduction_code, locus where)
+gfc_trans_omp_reduction_list (gfc_omp_namelist *namelist, tree list,
+                             locus where)
 {
   for (; namelist != NULL; namelist = namelist->next)
     if (namelist->sym->attr.referenced)
       {
-       tree t = gfc_trans_omp_variable (namelist->sym);
+       tree t = gfc_trans_omp_variable (namelist->sym, false);
        if (t != error_mark_node)
          {
            tree node = build_omp_clause (where.lb->location,
                                          OMP_CLAUSE_REDUCTION);
            OMP_CLAUSE_DECL (node) = t;
-           OMP_CLAUSE_REDUCTION_CODE (node) = reduction_code;
-           if (namelist->sym->attr.dimension)
-             gfc_trans_omp_array_reduction (node, namelist->sym, where);
+           switch (namelist->u.reduction_op)
+             {
+             case OMP_REDUCTION_PLUS:
+               OMP_CLAUSE_REDUCTION_CODE (node) = PLUS_EXPR;
+               break;
+             case OMP_REDUCTION_MINUS:
+               OMP_CLAUSE_REDUCTION_CODE (node) = MINUS_EXPR;
+               break;
+             case OMP_REDUCTION_TIMES:
+               OMP_CLAUSE_REDUCTION_CODE (node) = MULT_EXPR;
+               break;
+             case OMP_REDUCTION_AND:
+               OMP_CLAUSE_REDUCTION_CODE (node) = TRUTH_ANDIF_EXPR;
+               break;
+             case OMP_REDUCTION_OR:
+               OMP_CLAUSE_REDUCTION_CODE (node) = TRUTH_ORIF_EXPR;
+               break;
+             case OMP_REDUCTION_EQV:
+               OMP_CLAUSE_REDUCTION_CODE (node) = EQ_EXPR;
+               break;
+             case OMP_REDUCTION_NEQV:
+               OMP_CLAUSE_REDUCTION_CODE (node) = NE_EXPR;
+               break;
+             case OMP_REDUCTION_MAX:
+               OMP_CLAUSE_REDUCTION_CODE (node) = MAX_EXPR;
+               break;
+             case OMP_REDUCTION_MIN:
+               OMP_CLAUSE_REDUCTION_CODE (node) = MIN_EXPR;
+               break;
+             case OMP_REDUCTION_IAND:
+               OMP_CLAUSE_REDUCTION_CODE (node) = BIT_AND_EXPR;
+               break;
+             case OMP_REDUCTION_IOR:
+               OMP_CLAUSE_REDUCTION_CODE (node) = BIT_IOR_EXPR;
+               break;
+             case OMP_REDUCTION_IEOR:
+               OMP_CLAUSE_REDUCTION_CODE (node) = BIT_XOR_EXPR;
+               break;
+             case OMP_REDUCTION_USER:
+               OMP_CLAUSE_REDUCTION_CODE (node) = ERROR_MARK;
+               break;
+             default:
+               gcc_unreachable ();
+             }
+           if (namelist->sym->attr.dimension
+               || namelist->u.reduction_op == OMP_REDUCTION_USER
+               || namelist->sym->attr.allocatable)
+             gfc_trans_omp_array_reduction_or_udr (node, namelist, where);
            list = gfc_trans_add_clause (node, list);
          }
       }
@@ -768,7 +1687,7 @@ gfc_trans_omp_reduction_list (gfc_namelist *namelist, tree list,
 
 static tree
 gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses,
-                      locus where)
+                      locus where, bool declare_simd = false)
 {
   tree omp_clauses = NULL_TREE, chunk_size, c;
   int list;
@@ -780,62 +1699,15 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses,
 
   for (list = 0; list < OMP_LIST_NUM; list++)
     {
-      gfc_namelist *n = clauses->lists[list];
+      gfc_omp_namelist *n = clauses->lists[list];
 
       if (n == NULL)
        continue;
-      if (list >= OMP_LIST_REDUCTION_FIRST
-         && list <= OMP_LIST_REDUCTION_LAST)
-       {
-         enum tree_code reduction_code;
-         switch (list)
-           {
-           case OMP_LIST_PLUS:
-             reduction_code = PLUS_EXPR;
-             break;
-           case OMP_LIST_MULT:
-             reduction_code = MULT_EXPR;
-             break;
-           case OMP_LIST_SUB:
-             reduction_code = MINUS_EXPR;
-             break;
-           case OMP_LIST_AND:
-             reduction_code = TRUTH_ANDIF_EXPR;
-             break;
-           case OMP_LIST_OR:
-             reduction_code = TRUTH_ORIF_EXPR;
-             break;
-           case OMP_LIST_EQV:
-             reduction_code = EQ_EXPR;
-             break;
-           case OMP_LIST_NEQV:
-             reduction_code = NE_EXPR;
-             break;
-           case OMP_LIST_MAX:
-             reduction_code = MAX_EXPR;
-             break;
-           case OMP_LIST_MIN:
-             reduction_code = MIN_EXPR;
-             break;
-           case OMP_LIST_IAND:
-             reduction_code = BIT_AND_EXPR;
-             break;
-           case OMP_LIST_IOR:
-             reduction_code = BIT_IOR_EXPR;
-             break;
-           case OMP_LIST_IEOR:
-             reduction_code = BIT_XOR_EXPR;
-             break;
-           default:
-             gcc_unreachable ();
-           }
-         omp_clauses
-           = gfc_trans_omp_reduction_list (n, omp_clauses, reduction_code,
-                                           where);
-         continue;
-       }
       switch (list)
        {
+       case OMP_LIST_REDUCTION:
+         omp_clauses = gfc_trans_omp_reduction_list (n, omp_clauses, where);
+         break;
        case OMP_LIST_PRIVATE:
          clause_code = OMP_CLAUSE_PRIVATE;
          goto add_clause;
@@ -853,10 +1725,411 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses,
          goto add_clause;
        case OMP_LIST_COPYPRIVATE:
          clause_code = OMP_CLAUSE_COPYPRIVATE;
+         goto add_clause;
+       case OMP_LIST_UNIFORM:
+         clause_code = OMP_CLAUSE_UNIFORM;
          /* FALLTHROUGH */
        add_clause:
          omp_clauses
-           = gfc_trans_omp_variable_list (clause_code, n, omp_clauses);
+           = gfc_trans_omp_variable_list (clause_code, n, omp_clauses,
+                                          declare_simd);
+         break;
+       case OMP_LIST_ALIGNED:
+         for (; n != NULL; n = n->next)
+           if (n->sym->attr.referenced || declare_simd)
+             {
+               tree t = gfc_trans_omp_variable (n->sym, declare_simd);
+               if (t != error_mark_node)
+                 {
+                   tree node = build_omp_clause (input_location,
+                                                 OMP_CLAUSE_ALIGNED);
+                   OMP_CLAUSE_DECL (node) = t;
+                   if (n->expr)
+                     {
+                       tree alignment_var;
+
+                       if (block == NULL)
+                         alignment_var = gfc_conv_constant_to_tree (n->expr);
+                       else
+                         {
+                           gfc_init_se (&se, NULL);
+                           gfc_conv_expr (&se, n->expr);
+                           gfc_add_block_to_block (block, &se.pre);
+                           alignment_var = gfc_evaluate_now (se.expr, block);
+                           gfc_add_block_to_block (block, &se.post);
+                         }
+                       OMP_CLAUSE_ALIGNED_ALIGNMENT (node) = alignment_var;
+                     }
+                   omp_clauses = gfc_trans_add_clause (node, omp_clauses);
+                 }
+             }
+         break;
+       case OMP_LIST_LINEAR:
+         {
+           gfc_expr *last_step_expr = NULL;
+           tree last_step = NULL_TREE;
+
+           for (; n != NULL; n = n->next)
+             {
+               if (n->expr)
+                 {
+                   last_step_expr = n->expr;
+                   last_step = NULL_TREE;
+                 }
+               if (n->sym->attr.referenced || declare_simd)
+                 {
+                   tree t = gfc_trans_omp_variable (n->sym, declare_simd);
+                   if (t != error_mark_node)
+                     {
+                       tree node = build_omp_clause (input_location,
+                                                     OMP_CLAUSE_LINEAR);
+                       OMP_CLAUSE_DECL (node) = t;
+                       if (last_step_expr && last_step == NULL_TREE)
+                         {
+                           if (block == NULL)
+                             last_step
+                               = gfc_conv_constant_to_tree (last_step_expr);
+                           else
+                             {
+                               gfc_init_se (&se, NULL);
+                               gfc_conv_expr (&se, last_step_expr);
+                               gfc_add_block_to_block (block, &se.pre);
+                               last_step = gfc_evaluate_now (se.expr, block);
+                               gfc_add_block_to_block (block, &se.post);
+                             }
+                         }
+                       OMP_CLAUSE_LINEAR_STEP (node)
+                         = fold_convert (gfc_typenode_for_spec (&n->sym->ts),
+                                         last_step);
+                       if (n->sym->attr.dimension || n->sym->attr.allocatable)
+                         OMP_CLAUSE_LINEAR_ARRAY (node) = 1;
+                       omp_clauses = gfc_trans_add_clause (node, omp_clauses);
+                     }
+                 }
+             }
+         }
+         break;
+       case OMP_LIST_DEPEND:
+         for (; n != NULL; n = n->next)
+           {
+             if (!n->sym->attr.referenced)
+               continue;
+
+             tree node = build_omp_clause (input_location, OMP_CLAUSE_DEPEND);
+             if (n->expr == NULL || n->expr->ref->u.ar.type == AR_FULL)
+               {
+                 tree decl = gfc_get_symbol_decl (n->sym);
+                 if (gfc_omp_privatize_by_reference (decl))
+                   decl = build_fold_indirect_ref (decl);
+                 if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl)))
+                   {
+                     decl = gfc_conv_descriptor_data_get (decl);
+                     decl = fold_convert (build_pointer_type (char_type_node),
+                                          decl);
+                     decl = build_fold_indirect_ref (decl);
+                   }
+                 else if (DECL_P (decl))
+                   TREE_ADDRESSABLE (decl) = 1;
+                 OMP_CLAUSE_DECL (node) = decl;
+               }
+             else
+               {
+                 tree ptr;
+                 gfc_init_se (&se, NULL);
+                 if (n->expr->ref->u.ar.type == AR_ELEMENT)
+                   {
+                     gfc_conv_expr_reference (&se, n->expr);
+                     ptr = se.expr;
+                   }
+                 else
+                   {
+                     gfc_conv_expr_descriptor (&se, n->expr);
+                     ptr = gfc_conv_array_data (se.expr);
+                   }
+                 gfc_add_block_to_block (block, &se.pre);
+                 gfc_add_block_to_block (block, &se.post);
+                 ptr = fold_convert (build_pointer_type (char_type_node),
+                                     ptr);
+                 OMP_CLAUSE_DECL (node) = build_fold_indirect_ref (ptr);
+               }
+             switch (n->u.depend_op)
+               {
+               case OMP_DEPEND_IN:
+                 OMP_CLAUSE_DEPEND_KIND (node) = OMP_CLAUSE_DEPEND_IN;
+                 break;
+               case OMP_DEPEND_OUT:
+                 OMP_CLAUSE_DEPEND_KIND (node) = OMP_CLAUSE_DEPEND_OUT;
+                 break;
+               case OMP_DEPEND_INOUT:
+                 OMP_CLAUSE_DEPEND_KIND (node) = OMP_CLAUSE_DEPEND_INOUT;
+                 break;
+               default:
+                 gcc_unreachable ();
+               }
+             omp_clauses = gfc_trans_add_clause (node, omp_clauses);
+           }
+         break;
+       case OMP_LIST_MAP:
+         for (; n != NULL; n = n->next)
+           {
+             if (!n->sym->attr.referenced)
+               continue;
+
+             tree node = build_omp_clause (input_location, OMP_CLAUSE_MAP);
+             tree node2 = NULL_TREE;
+             tree node3 = NULL_TREE;
+             tree node4 = NULL_TREE;
+             tree decl = gfc_get_symbol_decl (n->sym);
+             if (DECL_P (decl))
+               TREE_ADDRESSABLE (decl) = 1;
+             if (n->expr == NULL || n->expr->ref->u.ar.type == AR_FULL)
+               {
+                 if (POINTER_TYPE_P (TREE_TYPE (decl)))
+                   {
+                     node4 = build_omp_clause (input_location,
+                                               OMP_CLAUSE_MAP);
+                     OMP_CLAUSE_MAP_KIND (node4) = OMP_CLAUSE_MAP_POINTER;
+                     OMP_CLAUSE_DECL (node4) = decl;
+                     OMP_CLAUSE_SIZE (node4) = size_int (0);
+                     decl = build_fold_indirect_ref (decl);
+                   }
+                 if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl)))
+                   {
+                     tree type = TREE_TYPE (decl);
+                     tree ptr = gfc_conv_descriptor_data_get (decl);
+                     ptr = fold_convert (build_pointer_type (char_type_node),
+                                         ptr);
+                     ptr = build_fold_indirect_ref (ptr);
+                     OMP_CLAUSE_DECL (node) = ptr;
+                     node2 = build_omp_clause (input_location,
+                                               OMP_CLAUSE_MAP);
+                     OMP_CLAUSE_MAP_KIND (node2) = OMP_CLAUSE_MAP_TO_PSET;
+                     OMP_CLAUSE_DECL (node2) = decl;
+                     OMP_CLAUSE_SIZE (node2) = TYPE_SIZE_UNIT (type);
+                     node3 = build_omp_clause (input_location,
+                                               OMP_CLAUSE_MAP);
+                     OMP_CLAUSE_MAP_KIND (node3) = OMP_CLAUSE_MAP_POINTER;
+                     OMP_CLAUSE_DECL (node3)
+                       = gfc_conv_descriptor_data_get (decl);
+                     OMP_CLAUSE_SIZE (node3) = size_int (0);
+                     if (n->sym->attr.pointer)
+                       {
+                         stmtblock_t cond_block;
+                         tree size
+                           = gfc_create_var (gfc_array_index_type, NULL);
+                         tree tem, then_b, else_b, zero, cond;
+
+                         gfc_init_block (&cond_block);
+                         tem
+                           = gfc_full_array_size (&cond_block, decl,
+                                                  GFC_TYPE_ARRAY_RANK (type));
+                         gfc_add_modify (&cond_block, size, tem);
+                         then_b = gfc_finish_block (&cond_block);
+                         gfc_init_block (&cond_block);
+                         zero = build_int_cst (gfc_array_index_type, 0);
+                         gfc_add_modify (&cond_block, size, zero);
+                         else_b = gfc_finish_block (&cond_block);
+                         tem = gfc_conv_descriptor_data_get (decl);
+                         tem = fold_convert (pvoid_type_node, tem);
+                         cond = fold_build2_loc (input_location, NE_EXPR,
+                                                 boolean_type_node,
+                                                 tem, null_pointer_node);
+                         gfc_add_expr_to_block (block,
+                                                build3_loc (input_location,
+                                                            COND_EXPR,
+                                                            void_type_node,
+                                                            cond, then_b,
+                                                            else_b));
+                         OMP_CLAUSE_SIZE (node) = size;
+                       }
+                     else
+                       OMP_CLAUSE_SIZE (node)
+                         = gfc_full_array_size (block, decl,
+                                                GFC_TYPE_ARRAY_RANK (type));
+                     tree elemsz
+                       = TYPE_SIZE_UNIT (gfc_get_element_type (type));
+                     elemsz = fold_convert (gfc_array_index_type, elemsz);
+                     OMP_CLAUSE_SIZE (node)
+                       = fold_build2 (MULT_EXPR, gfc_array_index_type,
+                                      OMP_CLAUSE_SIZE (node), elemsz);
+                   }
+                 else
+                   OMP_CLAUSE_DECL (node) = decl;
+               }
+             else
+               {
+                 tree ptr, ptr2;
+                 gfc_init_se (&se, NULL);
+                 if (n->expr->ref->u.ar.type == AR_ELEMENT)
+                   {
+                     gfc_conv_expr_reference (&se, n->expr);
+                     gfc_add_block_to_block (block, &se.pre);
+                     ptr = se.expr;
+                     OMP_CLAUSE_SIZE (node)
+                       = TYPE_SIZE_UNIT (TREE_TYPE (ptr));
+                   }
+                 else
+                   {
+                     gfc_conv_expr_descriptor (&se, n->expr);
+                     ptr = gfc_conv_array_data (se.expr);
+                     tree type = TREE_TYPE (se.expr);
+                     gfc_add_block_to_block (block, &se.pre);
+                     OMP_CLAUSE_SIZE (node)
+                       = gfc_full_array_size (block, se.expr,
+                                              GFC_TYPE_ARRAY_RANK (type));
+                     tree elemsz
+                       = TYPE_SIZE_UNIT (gfc_get_element_type (type));
+                     elemsz = fold_convert (gfc_array_index_type, elemsz);
+                     OMP_CLAUSE_SIZE (node)
+                       = fold_build2 (MULT_EXPR, gfc_array_index_type,
+                                      OMP_CLAUSE_SIZE (node), elemsz);
+                   }
+                 gfc_add_block_to_block (block, &se.post);
+                 ptr = fold_convert (build_pointer_type (char_type_node),
+                                     ptr);
+                 OMP_CLAUSE_DECL (node) = build_fold_indirect_ref (ptr);
+
+                 if (POINTER_TYPE_P (TREE_TYPE (decl))
+                     && GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (TREE_TYPE (decl))))
+                   {
+                     node4 = build_omp_clause (input_location,
+                                               OMP_CLAUSE_MAP);
+                     OMP_CLAUSE_MAP_KIND (node4) = OMP_CLAUSE_MAP_POINTER;
+                     OMP_CLAUSE_DECL (node4) = decl;
+                     OMP_CLAUSE_SIZE (node4) = size_int (0);
+                     decl = build_fold_indirect_ref (decl);
+                   }
+                 ptr = fold_convert (sizetype, ptr);
+                 if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl)))
+                   {
+                     tree type = TREE_TYPE (decl);
+                     ptr2 = gfc_conv_descriptor_data_get (decl);
+                     node2 = build_omp_clause (input_location,
+                                               OMP_CLAUSE_MAP);
+                     OMP_CLAUSE_MAP_KIND (node2) = OMP_CLAUSE_MAP_TO_PSET;
+                     OMP_CLAUSE_DECL (node2) = decl;
+                     OMP_CLAUSE_SIZE (node2) = TYPE_SIZE_UNIT (type);
+                     node3 = build_omp_clause (input_location,
+                                               OMP_CLAUSE_MAP);
+                     OMP_CLAUSE_MAP_KIND (node3) = OMP_CLAUSE_MAP_POINTER;
+                     OMP_CLAUSE_DECL (node3)
+                       = gfc_conv_descriptor_data_get (decl);
+                   }
+                 else
+                   {
+                     if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
+                       ptr2 = build_fold_addr_expr (decl);
+                     else
+                       {
+                         gcc_assert (POINTER_TYPE_P (TREE_TYPE (decl)));
+                         ptr2 = decl;
+                       }
+                     node3 = build_omp_clause (input_location,
+                                               OMP_CLAUSE_MAP);
+                     OMP_CLAUSE_MAP_KIND (node3) = OMP_CLAUSE_MAP_POINTER;
+                     OMP_CLAUSE_DECL (node3) = decl;
+                   }
+                 ptr2 = fold_convert (sizetype, ptr2);
+                 OMP_CLAUSE_SIZE (node3)
+                   = fold_build2 (MINUS_EXPR, sizetype, ptr, ptr2);
+               }
+             switch (n->u.map_op)
+               {
+               case OMP_MAP_ALLOC:
+                 OMP_CLAUSE_MAP_KIND (node) = OMP_CLAUSE_MAP_ALLOC;
+                 break;
+               case OMP_MAP_TO:
+                 OMP_CLAUSE_MAP_KIND (node) = OMP_CLAUSE_MAP_TO;
+                 break;
+               case OMP_MAP_FROM:
+                 OMP_CLAUSE_MAP_KIND (node) = OMP_CLAUSE_MAP_FROM;
+                 break;
+               case OMP_MAP_TOFROM:
+                 OMP_CLAUSE_MAP_KIND (node) = OMP_CLAUSE_MAP_TOFROM;
+                 break;
+               default:
+                 gcc_unreachable ();
+               }
+             omp_clauses = gfc_trans_add_clause (node, omp_clauses);
+             if (node2)
+               omp_clauses = gfc_trans_add_clause (node2, omp_clauses);
+             if (node3)
+               omp_clauses = gfc_trans_add_clause (node3, omp_clauses);
+             if (node4)
+               omp_clauses = gfc_trans_add_clause (node4, omp_clauses);
+           }
+         break;
+       case OMP_LIST_TO:
+       case OMP_LIST_FROM:
+         for (; n != NULL; n = n->next)
+           {
+             if (!n->sym->attr.referenced)
+               continue;
+
+             tree node = build_omp_clause (input_location,
+                                           list == OMP_LIST_TO
+                                           ? OMP_CLAUSE_TO : OMP_CLAUSE_FROM);
+             if (n->expr == NULL || n->expr->ref->u.ar.type == AR_FULL)
+               {
+                 tree decl = gfc_get_symbol_decl (n->sym);
+                 if (gfc_omp_privatize_by_reference (decl))
+                   decl = build_fold_indirect_ref (decl);
+                 if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl)))
+                   {
+                     tree type = TREE_TYPE (decl);
+                     tree ptr = gfc_conv_descriptor_data_get (decl);
+                     ptr = fold_convert (build_pointer_type (char_type_node),
+                                         ptr);
+                     ptr = build_fold_indirect_ref (ptr);
+                     OMP_CLAUSE_DECL (node) = ptr;
+                     OMP_CLAUSE_SIZE (node)
+                       = gfc_full_array_size (block, decl,
+                                              GFC_TYPE_ARRAY_RANK (type));
+                     tree elemsz
+                       = TYPE_SIZE_UNIT (gfc_get_element_type (type));
+                     elemsz = fold_convert (gfc_array_index_type, elemsz);
+                     OMP_CLAUSE_SIZE (node)
+                       = fold_build2 (MULT_EXPR, gfc_array_index_type,
+                                      OMP_CLAUSE_SIZE (node), elemsz);
+                   }
+                 else
+                   OMP_CLAUSE_DECL (node) = decl;
+               }
+             else
+               {
+                 tree ptr;
+                 gfc_init_se (&se, NULL);
+                 if (n->expr->ref->u.ar.type == AR_ELEMENT)
+                   {
+                     gfc_conv_expr_reference (&se, n->expr);
+                     ptr = se.expr;
+                     gfc_add_block_to_block (block, &se.pre);
+                     OMP_CLAUSE_SIZE (node)
+                       = TYPE_SIZE_UNIT (TREE_TYPE (ptr));
+                   }
+                 else
+                   {
+                     gfc_conv_expr_descriptor (&se, n->expr);
+                     ptr = gfc_conv_array_data (se.expr);
+                     tree type = TREE_TYPE (se.expr);
+                     gfc_add_block_to_block (block, &se.pre);
+                     OMP_CLAUSE_SIZE (node)
+                       = gfc_full_array_size (block, se.expr,
+                                              GFC_TYPE_ARRAY_RANK (type));
+                     tree elemsz
+                       = TYPE_SIZE_UNIT (gfc_get_element_type (type));
+                     elemsz = fold_convert (gfc_array_index_type, elemsz);
+                     OMP_CLAUSE_SIZE (node)
+                       = fold_build2 (MULT_EXPR, gfc_array_index_type,
+                                      OMP_CLAUSE_SIZE (node), elemsz);
+                   }
+                 gfc_add_block_to_block (block, &se.post);
+                 ptr = fold_convert (build_pointer_type (char_type_node),
+                                     ptr);
+                 OMP_CLAUSE_DECL (node) = build_fold_indirect_ref (ptr);
+               }
+             omp_clauses = gfc_trans_add_clause (node, omp_clauses);
+           }
          break;
        default:
          break;
@@ -1000,7 +2273,146 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses,
       omp_clauses = gfc_trans_add_clause (c, omp_clauses);
     }
 
-  return omp_clauses;
+  if (clauses->inbranch)
+    {
+      c = build_omp_clause (where.lb->location, OMP_CLAUSE_INBRANCH);
+      omp_clauses = gfc_trans_add_clause (c, omp_clauses);
+    }
+
+  if (clauses->notinbranch)
+    {
+      c = build_omp_clause (where.lb->location, OMP_CLAUSE_NOTINBRANCH);
+      omp_clauses = gfc_trans_add_clause (c, omp_clauses);
+    }
+
+  switch (clauses->cancel)
+    {
+    case OMP_CANCEL_UNKNOWN:
+      break;
+    case OMP_CANCEL_PARALLEL:
+      c = build_omp_clause (where.lb->location, OMP_CLAUSE_PARALLEL);
+      omp_clauses = gfc_trans_add_clause (c, omp_clauses);
+      break;
+    case OMP_CANCEL_SECTIONS:
+      c = build_omp_clause (where.lb->location, OMP_CLAUSE_SECTIONS);
+      omp_clauses = gfc_trans_add_clause (c, omp_clauses);
+      break;
+    case OMP_CANCEL_DO:
+      c = build_omp_clause (where.lb->location, OMP_CLAUSE_FOR);
+      omp_clauses = gfc_trans_add_clause (c, omp_clauses);
+      break;
+    case OMP_CANCEL_TASKGROUP:
+      c = build_omp_clause (where.lb->location, OMP_CLAUSE_TASKGROUP);
+      omp_clauses = gfc_trans_add_clause (c, omp_clauses);
+      break;
+    }
+
+  if (clauses->proc_bind != OMP_PROC_BIND_UNKNOWN)
+    {
+      c = build_omp_clause (where.lb->location, OMP_CLAUSE_PROC_BIND);
+      switch (clauses->proc_bind)
+       {
+       case OMP_PROC_BIND_MASTER:
+         OMP_CLAUSE_PROC_BIND_KIND (c) = OMP_CLAUSE_PROC_BIND_MASTER;
+         break;
+       case OMP_PROC_BIND_SPREAD:
+         OMP_CLAUSE_PROC_BIND_KIND (c) = OMP_CLAUSE_PROC_BIND_SPREAD;
+         break;
+       case OMP_PROC_BIND_CLOSE:
+         OMP_CLAUSE_PROC_BIND_KIND (c) = OMP_CLAUSE_PROC_BIND_CLOSE;
+         break;
+       default:
+         gcc_unreachable ();
+       }
+      omp_clauses = gfc_trans_add_clause (c, omp_clauses);
+    }
+
+  if (clauses->safelen_expr)
+    {
+      tree safelen_var;
+
+      gfc_init_se (&se, NULL);
+      gfc_conv_expr (&se, clauses->safelen_expr);
+      gfc_add_block_to_block (block, &se.pre);
+      safelen_var = gfc_evaluate_now (se.expr, block);
+      gfc_add_block_to_block (block, &se.post);
+
+      c = build_omp_clause (where.lb->location, OMP_CLAUSE_SAFELEN);
+      OMP_CLAUSE_SAFELEN_EXPR (c) = safelen_var;
+      omp_clauses = gfc_trans_add_clause (c, omp_clauses);
+    }
+
+  if (clauses->simdlen_expr)
+    {
+      c = build_omp_clause (where.lb->location, OMP_CLAUSE_SIMDLEN);
+      OMP_CLAUSE_SIMDLEN_EXPR (c)
+       = gfc_conv_constant_to_tree (clauses->simdlen_expr);
+      omp_clauses = gfc_trans_add_clause (c, omp_clauses);
+    }
+
+  if (clauses->num_teams)
+    {
+      tree num_teams;
+
+      gfc_init_se (&se, NULL);
+      gfc_conv_expr (&se, clauses->num_teams);
+      gfc_add_block_to_block (block, &se.pre);
+      num_teams = gfc_evaluate_now (se.expr, block);
+      gfc_add_block_to_block (block, &se.post);
+
+      c = build_omp_clause (where.lb->location, OMP_CLAUSE_NUM_TEAMS);
+      OMP_CLAUSE_NUM_TEAMS_EXPR (c) = num_teams;
+      omp_clauses = gfc_trans_add_clause (c, omp_clauses);
+    }
+
+  if (clauses->device)
+    {
+      tree device;
+
+      gfc_init_se (&se, NULL);
+      gfc_conv_expr (&se, clauses->device);
+      gfc_add_block_to_block (block, &se.pre);
+      device = gfc_evaluate_now (se.expr, block);
+      gfc_add_block_to_block (block, &se.post);
+
+      c = build_omp_clause (where.lb->location, OMP_CLAUSE_DEVICE);
+      OMP_CLAUSE_DEVICE_ID (c) = device;
+      omp_clauses = gfc_trans_add_clause (c, omp_clauses);
+    }
+
+  if (clauses->thread_limit)
+    {
+      tree thread_limit;
+
+      gfc_init_se (&se, NULL);
+      gfc_conv_expr (&se, clauses->thread_limit);
+      gfc_add_block_to_block (block, &se.pre);
+      thread_limit = gfc_evaluate_now (se.expr, block);
+      gfc_add_block_to_block (block, &se.post);
+
+      c = build_omp_clause (where.lb->location, OMP_CLAUSE_THREAD_LIMIT);
+      OMP_CLAUSE_THREAD_LIMIT_EXPR (c) = thread_limit;
+      omp_clauses = gfc_trans_add_clause (c, omp_clauses);
+    }
+
+  chunk_size = NULL_TREE;
+  if (clauses->dist_chunk_size)
+    {
+      gfc_init_se (&se, NULL);
+      gfc_conv_expr (&se, clauses->dist_chunk_size);
+      gfc_add_block_to_block (block, &se.pre);
+      chunk_size = gfc_evaluate_now (se.expr, block);
+      gfc_add_block_to_block (block, &se.post);
+    }
+
+  if (clauses->dist_sched_kind != OMP_SCHED_NONE)
+    {
+      c = build_omp_clause (where.lb->location, OMP_CLAUSE_DIST_SCHEDULE);
+      OMP_CLAUSE_DIST_SCHEDULE_CHUNK_EXPR (c) = chunk_size;
+      omp_clauses = gfc_trans_add_clause (c, omp_clauses);
+    }
+
+  return nreverse (omp_clauses);
 }
 
 /* Like gfc_trans_code, but force creation of a BIND_EXPR around it.  */
@@ -1045,6 +2457,7 @@ gfc_trans_omp_atomic (gfc_code *code)
   enum tree_code op = ERROR_MARK;
   enum tree_code aop = OMP_ATOMIC;
   bool var_on_left = false;
+  bool seq_cst = (atomic_code->ext.omp_atomic & GFC_OMP_ATOMIC_SEQ_CST) != 0;
 
   code = code->block->next;
   gcc_assert (code->op == EXEC_ASSIGN);
@@ -1060,7 +2473,7 @@ gfc_trans_omp_atomic (gfc_code *code)
       && expr2->value.function.isym->id == GFC_ISYM_CONVERSION)
     expr2 = expr2->value.function.actual->expr;
 
-  switch (atomic_code->ext.omp_atomic)
+  switch (atomic_code->ext.omp_atomic & GFC_OMP_ATOMIC_MASK)
     {
     case GFC_OMP_ATOMIC_READ:
       gfc_conv_expr (&vse, code->expr1);
@@ -1072,6 +2485,7 @@ gfc_trans_omp_atomic (gfc_code *code)
       lhsaddr = gfc_build_addr_expr (NULL, lse.expr);
 
       x = build1 (OMP_ATOMIC_READ, type, lhsaddr);
+      OMP_ATOMIC_SEQ_CST (x) = seq_cst;
       x = convert (TREE_TYPE (vse.expr), x);
       gfc_add_modify (&block, vse.expr, x);
 
@@ -1107,7 +2521,9 @@ gfc_trans_omp_atomic (gfc_code *code)
   type = TREE_TYPE (lse.expr);
   lhsaddr = gfc_build_addr_expr (NULL, lse.expr);
 
-  if (atomic_code->ext.omp_atomic == GFC_OMP_ATOMIC_WRITE)
+  if (((atomic_code->ext.omp_atomic & GFC_OMP_ATOMIC_MASK)
+       == GFC_OMP_ATOMIC_WRITE)
+      || (atomic_code->ext.omp_atomic & GFC_OMP_ATOMIC_SWAP))
     {
       gfc_conv_expr (&rse, expr2);
       gfc_add_block_to_block (&block, &rse.pre);
@@ -1229,7 +2645,9 @@ gfc_trans_omp_atomic (gfc_code *code)
   lhsaddr = save_expr (lhsaddr);
   rhs = gfc_evaluate_now (rse.expr, &block);
 
-  if (atomic_code->ext.omp_atomic == GFC_OMP_ATOMIC_WRITE)
+  if (((atomic_code->ext.omp_atomic & GFC_OMP_ATOMIC_MASK)
+       == GFC_OMP_ATOMIC_WRITE)
+      || (atomic_code->ext.omp_atomic & GFC_OMP_ATOMIC_SWAP))
     x = rhs;
   else
     {
@@ -1252,6 +2670,7 @@ gfc_trans_omp_atomic (gfc_code *code)
   if (aop == OMP_ATOMIC)
     {
       x = build2_v (OMP_ATOMIC, lhsaddr, convert (type, x));
+      OMP_ATOMIC_SEQ_CST (x) = seq_cst;
       gfc_add_expr_to_block (&block, x);
     }
   else
@@ -1273,6 +2692,7 @@ gfc_trans_omp_atomic (gfc_code *code)
          gfc_add_block_to_block (&block, &lse.pre);
        }
       x = build2 (aop, type, lhsaddr, convert (type, x));
+      OMP_ATOMIC_SEQ_CST (x) = seq_cst;
       x = convert (TREE_TYPE (vse.expr), x);
       gfc_add_modify (&block, vse.expr, x);
     }
@@ -1288,6 +2708,63 @@ gfc_trans_omp_barrier (void)
 }
 
 static tree
+gfc_trans_omp_cancel (gfc_code *code)
+{
+  int mask = 0;
+  tree ifc = boolean_true_node;
+  stmtblock_t block;
+  switch (code->ext.omp_clauses->cancel)
+    {
+    case OMP_CANCEL_PARALLEL: mask = 1; break;
+    case OMP_CANCEL_DO: mask = 2; break;
+    case OMP_CANCEL_SECTIONS: mask = 4; break;
+    case OMP_CANCEL_TASKGROUP: mask = 8; break;
+    default: gcc_unreachable ();
+    }
+  gfc_start_block (&block);
+  if (code->ext.omp_clauses->if_expr)
+    {
+      gfc_se se;
+      tree if_var;
+
+      gfc_init_se (&se, NULL);
+      gfc_conv_expr (&se, code->ext.omp_clauses->if_expr);
+      gfc_add_block_to_block (&block, &se.pre);
+      if_var = gfc_evaluate_now (se.expr, &block);
+      gfc_add_block_to_block (&block, &se.post);
+      tree type = TREE_TYPE (if_var);
+      ifc = fold_build2_loc (input_location, NE_EXPR,
+                            boolean_type_node, if_var,
+                            build_zero_cst (type));
+    }
+  tree decl = builtin_decl_explicit (BUILT_IN_GOMP_CANCEL);
+  tree c_bool_type = TREE_TYPE (TREE_TYPE (decl));
+  ifc = fold_convert (c_bool_type, ifc);
+  gfc_add_expr_to_block (&block,
+                        build_call_expr_loc (input_location, decl, 2,
+                                             build_int_cst (integer_type_node,
+                                                            mask), ifc));
+  return gfc_finish_block (&block);
+}
+
+static tree
+gfc_trans_omp_cancellation_point (gfc_code *code)
+{
+  int mask = 0;
+  switch (code->ext.omp_clauses->cancel)
+    {
+    case OMP_CANCEL_PARALLEL: mask = 1; break;
+    case OMP_CANCEL_DO: mask = 2; break;
+    case OMP_CANCEL_SECTIONS: mask = 4; break;
+    case OMP_CANCEL_TASKGROUP: mask = 8; break;
+    default: gcc_unreachable ();
+    }
+  tree decl = builtin_decl_explicit (BUILT_IN_GOMP_CANCELLATION_POINT);
+  return build_call_expr_loc (input_location, decl, 1,
+                             build_int_cst (integer_type_node, mask));
+}
+
+static tree
 gfc_trans_omp_critical (gfc_code *code)
 {
   tree name = NULL_TREE, stmt;
@@ -1304,7 +2781,7 @@ typedef struct dovar_init_d {
 
 
 static tree
-gfc_trans_omp_do (gfc_code *code, stmtblock_t *pblock,
+gfc_trans_omp_do (gfc_code *code, gfc_exec_op op, stmtblock_t *pblock,
                  gfc_omp_clauses *do_clauses, tree par_clauses)
 {
   gfc_se se;
@@ -1344,14 +2821,16 @@ gfc_trans_omp_do (gfc_code *code, stmtblock_t *pblock,
 
       if (clauses)
        {
-         gfc_namelist *n;
-         for (n = clauses->lists[OMP_LIST_LASTPRIVATE]; n != NULL;
-              n = n->next)
-           if (code->ext.iterator->var->symtree->n.sym == n->sym)
-             break;
+         gfc_omp_namelist *n = NULL;
+         if (op != EXEC_OMP_DISTRIBUTE)
+           for (n = clauses->lists[(op == EXEC_OMP_SIMD && collapse == 1)
+                                   ? OMP_LIST_LINEAR : OMP_LIST_LASTPRIVATE];
+                n != NULL; n = n->next)
+             if (code->ext.iterator->var->symtree->n.sym == n->sym)
+               break;
          if (n != NULL)
            dovar_found = 1;
-         else if (n == NULL)
+         else if (n == NULL && op != EXEC_OMP_SIMD)
            for (n = clauses->lists[OMP_LIST_PRIVATE]; n != NULL; n = n->next)
              if (code->ext.iterator->var->symtree->n.sym == n->sym)
                break;
@@ -1393,7 +2872,8 @@ gfc_trans_omp_do (gfc_code *code, stmtblock_t *pblock,
        }
       else
        dovar_decl
-         = gfc_trans_omp_variable (code->ext.iterator->var->symtree->n.sym);
+         = gfc_trans_omp_variable (code->ext.iterator->var->symtree->n.sym,
+                                   false);
 
       /* Loop body.  */
       if (simple)
@@ -1447,11 +2927,24 @@ gfc_trans_omp_do (gfc_code *code, stmtblock_t *pblock,
 
       if (!dovar_found)
        {
-         tmp = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
+         if (op == EXEC_OMP_SIMD)
+           {
+             if (collapse == 1)
+               {
+                 tmp = build_omp_clause (input_location, OMP_CLAUSE_LINEAR);
+                 OMP_CLAUSE_LINEAR_STEP (tmp) = step;
+               }
+             else
+               tmp = build_omp_clause (input_location, OMP_CLAUSE_LASTPRIVATE);
+             if (!simple)
+               dovar_found = 2;
+           }
+         else
+           tmp = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
          OMP_CLAUSE_DECL (tmp) = dovar_decl;
          omp_clauses = gfc_trans_add_clause (tmp, omp_clauses);
        }
-      else if (dovar_found == 2)
+      if (dovar_found == 2)
        {
          tree c = NULL;
 
@@ -1475,8 +2968,14 @@ gfc_trans_omp_do (gfc_code *code, stmtblock_t *pblock,
                    OMP_CLAUSE_LASTPRIVATE_STMT (c) = tmp;
                    break;
                  }
+               else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LINEAR
+                        && OMP_CLAUSE_DECL (c) == dovar_decl)
+                 {
+                   OMP_CLAUSE_LINEAR_STMT (c) = tmp;
+                   break;
+                 }
            }
-         if (c == NULL && par_clauses != NULL)
+         if (c == NULL && op == EXEC_OMP_DO && par_clauses != NULL)
            {
              for (c = par_clauses; c ; c = OMP_CLAUSE_CHAIN (c))
                if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
@@ -1496,7 +2995,17 @@ gfc_trans_omp_do (gfc_code *code, stmtblock_t *pblock,
        }
       if (!simple)
        {
-         tmp = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
+         if (op != EXEC_OMP_SIMD)
+           tmp = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
+         else if (collapse == 1)
+           {
+             tmp = build_omp_clause (input_location, OMP_CLAUSE_LINEAR);
+             OMP_CLAUSE_LINEAR_STEP (tmp) = step;
+             OMP_CLAUSE_LINEAR_NO_COPYIN (tmp) = 1;
+             OMP_CLAUSE_LINEAR_NO_COPYOUT (tmp) = 1;
+           }
+         else
+           tmp = build_omp_clause (input_location, OMP_CLAUSE_LASTPRIVATE);
          OMP_CLAUSE_DECL (tmp) = count;
          omp_clauses = gfc_trans_add_clause (tmp, omp_clauses);
        }
@@ -1538,7 +3047,13 @@ gfc_trans_omp_do (gfc_code *code, stmtblock_t *pblock,
     }
 
   /* End of loop body.  */
-  stmt = make_node (OMP_FOR);
+  switch (op)
+    {
+    case EXEC_OMP_SIMD: stmt = make_node (OMP_SIMD); break;
+    case EXEC_OMP_DO: stmt = make_node (OMP_FOR); break;
+    case EXEC_OMP_DISTRIBUTE: stmt = make_node (OMP_DISTRIBUTE); break;
+    default: gcc_unreachable ();
+    }
 
   TREE_TYPE (stmt) = void_type_node;
   OMP_FOR_BODY (stmt) = gfc_finish_block (&body);
@@ -1589,41 +3104,352 @@ gfc_trans_omp_parallel (gfc_code *code)
   return gfc_finish_block (&block);
 }
 
+enum
+{
+  GFC_OMP_SPLIT_SIMD,
+  GFC_OMP_SPLIT_DO,
+  GFC_OMP_SPLIT_PARALLEL,
+  GFC_OMP_SPLIT_DISTRIBUTE,
+  GFC_OMP_SPLIT_TEAMS,
+  GFC_OMP_SPLIT_TARGET,
+  GFC_OMP_SPLIT_NUM
+};
+
+enum
+{
+  GFC_OMP_MASK_SIMD = (1 << GFC_OMP_SPLIT_SIMD),
+  GFC_OMP_MASK_DO = (1 << GFC_OMP_SPLIT_DO),
+  GFC_OMP_MASK_PARALLEL = (1 << GFC_OMP_SPLIT_PARALLEL),
+  GFC_OMP_MASK_DISTRIBUTE = (1 << GFC_OMP_SPLIT_DISTRIBUTE),
+  GFC_OMP_MASK_TEAMS = (1 << GFC_OMP_SPLIT_TEAMS),
+  GFC_OMP_MASK_TARGET = (1 << GFC_OMP_SPLIT_TARGET)
+};
+
+static void
+gfc_split_omp_clauses (gfc_code *code,
+                      gfc_omp_clauses clausesa[GFC_OMP_SPLIT_NUM])
+{
+  int mask = 0, innermost = 0;
+  memset (clausesa, 0, GFC_OMP_SPLIT_NUM * sizeof (gfc_omp_clauses));
+  switch (code->op)
+    {
+    case EXEC_OMP_DISTRIBUTE:
+      innermost = GFC_OMP_SPLIT_DISTRIBUTE;
+      break;
+    case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
+      mask = GFC_OMP_MASK_DISTRIBUTE | GFC_OMP_MASK_PARALLEL | GFC_OMP_MASK_DO;
+      innermost = GFC_OMP_SPLIT_DO;
+      break;
+    case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
+      mask = GFC_OMP_MASK_DISTRIBUTE | GFC_OMP_MASK_PARALLEL
+            | GFC_OMP_MASK_DO | GFC_OMP_MASK_SIMD;
+      innermost = GFC_OMP_SPLIT_SIMD;
+      break;
+    case EXEC_OMP_DISTRIBUTE_SIMD:
+      mask = GFC_OMP_MASK_DISTRIBUTE | GFC_OMP_MASK_SIMD;
+      innermost = GFC_OMP_SPLIT_SIMD;
+      break;
+    case EXEC_OMP_DO:
+      innermost = GFC_OMP_SPLIT_DO;
+      break;
+    case EXEC_OMP_DO_SIMD:
+      mask = GFC_OMP_MASK_DO | GFC_OMP_MASK_SIMD;
+      innermost = GFC_OMP_SPLIT_SIMD;
+      break;
+    case EXEC_OMP_PARALLEL:
+      innermost = GFC_OMP_SPLIT_PARALLEL;
+      break;
+    case EXEC_OMP_PARALLEL_DO:
+      mask = GFC_OMP_MASK_PARALLEL | GFC_OMP_MASK_DO;
+      innermost = GFC_OMP_SPLIT_DO;
+      break;
+    case EXEC_OMP_PARALLEL_DO_SIMD:
+      mask = GFC_OMP_MASK_PARALLEL | GFC_OMP_MASK_DO | GFC_OMP_MASK_SIMD;
+      innermost = GFC_OMP_SPLIT_SIMD;
+      break;
+    case EXEC_OMP_SIMD:
+      innermost = GFC_OMP_SPLIT_SIMD;
+      break;
+    case EXEC_OMP_TARGET:
+      innermost = GFC_OMP_SPLIT_TARGET;
+      break;
+    case EXEC_OMP_TARGET_TEAMS:
+      mask = GFC_OMP_MASK_TARGET | GFC_OMP_MASK_TEAMS;
+      innermost = GFC_OMP_SPLIT_TEAMS;
+      break;
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
+      mask = GFC_OMP_MASK_TARGET | GFC_OMP_MASK_TEAMS
+            | GFC_OMP_MASK_DISTRIBUTE;
+      innermost = GFC_OMP_SPLIT_DISTRIBUTE;
+      break;
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
+      mask = GFC_OMP_MASK_TARGET | GFC_OMP_MASK_TEAMS | GFC_OMP_MASK_DISTRIBUTE
+            | GFC_OMP_MASK_PARALLEL | GFC_OMP_MASK_DO;
+      innermost = GFC_OMP_SPLIT_DO;
+      break;
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+      mask = GFC_OMP_MASK_TARGET | GFC_OMP_MASK_TEAMS | GFC_OMP_MASK_DISTRIBUTE
+            | GFC_OMP_MASK_PARALLEL | GFC_OMP_MASK_DO | GFC_OMP_MASK_SIMD;
+      innermost = GFC_OMP_SPLIT_SIMD;
+      break;
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
+      mask = GFC_OMP_MASK_TARGET | GFC_OMP_MASK_TEAMS
+            | GFC_OMP_MASK_DISTRIBUTE | GFC_OMP_MASK_SIMD;
+      innermost = GFC_OMP_SPLIT_SIMD;
+      break;
+    case EXEC_OMP_TEAMS:
+      innermost = GFC_OMP_SPLIT_TEAMS;
+      break;
+    case EXEC_OMP_TEAMS_DISTRIBUTE:
+      mask = GFC_OMP_MASK_TEAMS | GFC_OMP_MASK_DISTRIBUTE;
+      innermost = GFC_OMP_SPLIT_DISTRIBUTE;
+      break;
+    case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
+      mask = GFC_OMP_MASK_TEAMS | GFC_OMP_MASK_DISTRIBUTE
+            | GFC_OMP_MASK_PARALLEL | GFC_OMP_MASK_DO;
+      innermost = GFC_OMP_SPLIT_DO;
+      break;
+    case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+      mask = GFC_OMP_MASK_TEAMS | GFC_OMP_MASK_DISTRIBUTE
+            | GFC_OMP_MASK_PARALLEL | GFC_OMP_MASK_DO | GFC_OMP_MASK_SIMD;
+      innermost = GFC_OMP_SPLIT_SIMD;
+      break;
+    case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
+      mask = GFC_OMP_MASK_TEAMS | GFC_OMP_MASK_DISTRIBUTE | GFC_OMP_MASK_SIMD;
+      innermost = GFC_OMP_SPLIT_SIMD;
+      break;
+    default:
+      gcc_unreachable ();
+    }
+  if (mask == 0)
+    {
+      clausesa[innermost] = *code->ext.omp_clauses;
+      return;
+    }
+  if (code->ext.omp_clauses != NULL)
+    {
+      if (mask & GFC_OMP_MASK_TARGET)
+       {
+         /* First the clauses that are unique to some constructs.  */
+         clausesa[GFC_OMP_SPLIT_TARGET].lists[OMP_LIST_MAP]
+           = code->ext.omp_clauses->lists[OMP_LIST_MAP];
+         clausesa[GFC_OMP_SPLIT_TARGET].device
+           = code->ext.omp_clauses->device;
+       }
+      if (mask & GFC_OMP_MASK_TEAMS)
+       {
+         /* First the clauses that are unique to some constructs.  */
+         clausesa[GFC_OMP_SPLIT_TEAMS].num_teams
+           = code->ext.omp_clauses->num_teams;
+         clausesa[GFC_OMP_SPLIT_TEAMS].thread_limit
+           = code->ext.omp_clauses->thread_limit;
+         /* Shared and default clauses are allowed on parallel and teams.  */
+         clausesa[GFC_OMP_SPLIT_TEAMS].lists[OMP_LIST_SHARED]
+           = code->ext.omp_clauses->lists[OMP_LIST_SHARED];
+         clausesa[GFC_OMP_SPLIT_TEAMS].default_sharing
+           = code->ext.omp_clauses->default_sharing;
+       }
+      if (mask & GFC_OMP_MASK_DISTRIBUTE)
+       {
+         /* First the clauses that are unique to some constructs.  */
+         clausesa[GFC_OMP_SPLIT_DISTRIBUTE].dist_sched_kind
+           = code->ext.omp_clauses->dist_sched_kind;
+         clausesa[GFC_OMP_SPLIT_DISTRIBUTE].dist_chunk_size
+           = code->ext.omp_clauses->dist_chunk_size;
+         /* Duplicate collapse.  */
+         clausesa[GFC_OMP_SPLIT_DISTRIBUTE].collapse
+           = code->ext.omp_clauses->collapse;
+       }
+      if (mask & GFC_OMP_MASK_PARALLEL)
+       {
+         /* First the clauses that are unique to some constructs.  */
+         clausesa[GFC_OMP_SPLIT_PARALLEL].lists[OMP_LIST_COPYIN]
+           = code->ext.omp_clauses->lists[OMP_LIST_COPYIN];
+         clausesa[GFC_OMP_SPLIT_PARALLEL].num_threads
+           = code->ext.omp_clauses->num_threads;
+         clausesa[GFC_OMP_SPLIT_PARALLEL].proc_bind
+           = code->ext.omp_clauses->proc_bind;
+         /* Shared and default clauses are allowed on parallel and teams.  */
+         clausesa[GFC_OMP_SPLIT_PARALLEL].lists[OMP_LIST_SHARED]
+           = code->ext.omp_clauses->lists[OMP_LIST_SHARED];
+         clausesa[GFC_OMP_SPLIT_PARALLEL].default_sharing
+           = code->ext.omp_clauses->default_sharing;
+       }
+      if (mask & GFC_OMP_MASK_DO)
+       {
+         /* First the clauses that are unique to some constructs.  */
+         clausesa[GFC_OMP_SPLIT_DO].ordered
+           = code->ext.omp_clauses->ordered;
+         clausesa[GFC_OMP_SPLIT_DO].sched_kind
+           = code->ext.omp_clauses->sched_kind;
+         clausesa[GFC_OMP_SPLIT_DO].chunk_size
+           = code->ext.omp_clauses->chunk_size;
+         clausesa[GFC_OMP_SPLIT_DO].nowait
+           = code->ext.omp_clauses->nowait;
+         /* Duplicate collapse.  */
+         clausesa[GFC_OMP_SPLIT_DO].collapse
+           = code->ext.omp_clauses->collapse;
+       }
+      if (mask & GFC_OMP_MASK_SIMD)
+       {
+         clausesa[GFC_OMP_SPLIT_SIMD].safelen_expr
+           = code->ext.omp_clauses->safelen_expr;
+         clausesa[GFC_OMP_SPLIT_SIMD].lists[OMP_LIST_LINEAR]
+           = code->ext.omp_clauses->lists[OMP_LIST_LINEAR];
+         clausesa[GFC_OMP_SPLIT_SIMD].lists[OMP_LIST_ALIGNED]
+           = code->ext.omp_clauses->lists[OMP_LIST_ALIGNED];
+         /* Duplicate collapse.  */
+         clausesa[GFC_OMP_SPLIT_SIMD].collapse
+           = code->ext.omp_clauses->collapse;
+       }
+      /* Private clause is supported on all constructs but target,
+        it is enough to put it on the innermost one.  For
+        !$ omp do put it on parallel though,
+        as that's what we did for OpenMP 3.1.  */
+      clausesa[innermost == GFC_OMP_SPLIT_DO
+              ? (int) GFC_OMP_SPLIT_PARALLEL
+              : innermost].lists[OMP_LIST_PRIVATE]
+       = code->ext.omp_clauses->lists[OMP_LIST_PRIVATE];
+      /* Firstprivate clause is supported on all constructs but
+        target and simd.  Put it on the outermost of those and
+        duplicate on parallel.  */
+      if (mask & GFC_OMP_MASK_TEAMS)
+       clausesa[GFC_OMP_SPLIT_TEAMS].lists[OMP_LIST_FIRSTPRIVATE]
+         = code->ext.omp_clauses->lists[OMP_LIST_FIRSTPRIVATE];
+      else if (mask & GFC_OMP_MASK_DISTRIBUTE)
+       clausesa[GFC_OMP_SPLIT_DISTRIBUTE].lists[OMP_LIST_FIRSTPRIVATE]
+         = code->ext.omp_clauses->lists[OMP_LIST_FIRSTPRIVATE];
+      if (mask & GFC_OMP_MASK_PARALLEL)
+       clausesa[GFC_OMP_SPLIT_PARALLEL].lists[OMP_LIST_FIRSTPRIVATE]
+         = code->ext.omp_clauses->lists[OMP_LIST_FIRSTPRIVATE];
+      else if (mask & GFC_OMP_MASK_DO)
+       clausesa[GFC_OMP_SPLIT_DO].lists[OMP_LIST_FIRSTPRIVATE]
+         = code->ext.omp_clauses->lists[OMP_LIST_FIRSTPRIVATE];
+      /* Lastprivate is allowed on do and simd.  In
+        parallel do{, simd} we actually want to put it on
+        parallel rather than do.  */
+      if (mask & GFC_OMP_MASK_PARALLEL)
+       clausesa[GFC_OMP_SPLIT_PARALLEL].lists[OMP_LIST_LASTPRIVATE]
+         = code->ext.omp_clauses->lists[OMP_LIST_LASTPRIVATE];
+      else if (mask & GFC_OMP_MASK_DO)
+       clausesa[GFC_OMP_SPLIT_DO].lists[OMP_LIST_LASTPRIVATE]
+         = code->ext.omp_clauses->lists[OMP_LIST_LASTPRIVATE];
+      if (mask & GFC_OMP_MASK_SIMD)
+       clausesa[GFC_OMP_SPLIT_SIMD].lists[OMP_LIST_LASTPRIVATE]
+         = code->ext.omp_clauses->lists[OMP_LIST_LASTPRIVATE];
+      /* Reduction is allowed on simd, do, parallel and teams.
+        Duplicate it on all of them, but omit on do if
+        parallel is present.  */
+      if (mask & GFC_OMP_MASK_TEAMS)
+       clausesa[GFC_OMP_SPLIT_TEAMS].lists[OMP_LIST_REDUCTION]
+         = code->ext.omp_clauses->lists[OMP_LIST_REDUCTION];
+      if (mask & GFC_OMP_MASK_PARALLEL)
+       clausesa[GFC_OMP_SPLIT_PARALLEL].lists[OMP_LIST_REDUCTION]
+         = code->ext.omp_clauses->lists[OMP_LIST_REDUCTION];
+      else if (mask & GFC_OMP_MASK_DO)
+       clausesa[GFC_OMP_SPLIT_DO].lists[OMP_LIST_REDUCTION]
+         = code->ext.omp_clauses->lists[OMP_LIST_REDUCTION];
+      if (mask & GFC_OMP_MASK_SIMD)
+       clausesa[GFC_OMP_SPLIT_SIMD].lists[OMP_LIST_REDUCTION]
+         = code->ext.omp_clauses->lists[OMP_LIST_REDUCTION];
+      /* FIXME: This is currently being discussed.  */
+      if (mask & GFC_OMP_MASK_PARALLEL)
+       clausesa[GFC_OMP_SPLIT_PARALLEL].if_expr
+         = code->ext.omp_clauses->if_expr;
+      else
+       clausesa[GFC_OMP_SPLIT_TARGET].if_expr
+         = code->ext.omp_clauses->if_expr;
+    }
+  if ((mask & (GFC_OMP_MASK_PARALLEL | GFC_OMP_MASK_DO))
+      == (GFC_OMP_MASK_PARALLEL | GFC_OMP_MASK_DO))
+    clausesa[GFC_OMP_SPLIT_DO].nowait = true;
+}
+
 static tree
-gfc_trans_omp_parallel_do (gfc_code *code)
+gfc_trans_omp_do_simd (gfc_code *code, stmtblock_t *pblock,
+                      gfc_omp_clauses *clausesa, tree omp_clauses)
 {
-  stmtblock_t block, *pblock = NULL;
-  gfc_omp_clauses parallel_clauses, do_clauses;
-  tree stmt, omp_clauses = NULL_TREE;
+  stmtblock_t block;
+  gfc_omp_clauses clausesa_buf[GFC_OMP_SPLIT_NUM];
+  tree stmt, body, omp_do_clauses = NULL_TREE;
 
-  gfc_start_block (&block);
+  if (pblock == NULL)
+    gfc_start_block (&block);
+  else
+    gfc_init_block (&block);
 
-  memset (&do_clauses, 0, sizeof (do_clauses));
-  if (code->ext.omp_clauses != NULL)
+  if (clausesa == NULL)
+    {
+      clausesa = clausesa_buf;
+      gfc_split_omp_clauses (code, clausesa);
+    }
+  if (gfc_option.gfc_flag_openmp)
+    omp_do_clauses
+      = gfc_trans_omp_clauses (&block, &clausesa[GFC_OMP_SPLIT_DO], code->loc);
+  body = gfc_trans_omp_do (code, EXEC_OMP_SIMD, pblock ? pblock : &block,
+                          &clausesa[GFC_OMP_SPLIT_SIMD], omp_clauses);
+  if (pblock == NULL)
+    {
+      if (TREE_CODE (body) != BIND_EXPR)
+       body = build3_v (BIND_EXPR, NULL, body, poplevel (1, 0));
+      else
+       poplevel (0, 0);
+    }
+  else if (TREE_CODE (body) != BIND_EXPR)
+    body = build3_v (BIND_EXPR, NULL, body, NULL_TREE);
+  if (gfc_option.gfc_flag_openmp)
     {
-      memcpy (&parallel_clauses, code->ext.omp_clauses,
-             sizeof (parallel_clauses));
-      do_clauses.sched_kind = parallel_clauses.sched_kind;
-      do_clauses.chunk_size = parallel_clauses.chunk_size;
-      do_clauses.ordered = parallel_clauses.ordered;
-      do_clauses.collapse = parallel_clauses.collapse;
-      parallel_clauses.sched_kind = OMP_SCHED_NONE;
-      parallel_clauses.chunk_size = NULL;
-      parallel_clauses.ordered = false;
-      parallel_clauses.collapse = 0;
-      omp_clauses = gfc_trans_omp_clauses (&block, &parallel_clauses,
-                                          code->loc);
-    }
-  do_clauses.nowait = true;
-  if (!do_clauses.ordered && do_clauses.sched_kind != OMP_SCHED_STATIC)
-    pblock = &block;
+      stmt = make_node (OMP_FOR);
+      TREE_TYPE (stmt) = void_type_node;
+      OMP_FOR_BODY (stmt) = body;
+      OMP_FOR_CLAUSES (stmt) = omp_do_clauses;
+    }
   else
-    pushlevel ();
-  stmt = gfc_trans_omp_do (code, pblock, &do_clauses, omp_clauses);
-  if (TREE_CODE (stmt) != BIND_EXPR)
-    stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0));
+    stmt = body;
+  gfc_add_expr_to_block (&block, stmt);
+  return gfc_finish_block (&block);
+}
+
+static tree
+gfc_trans_omp_parallel_do (gfc_code *code, stmtblock_t *pblock,
+                          gfc_omp_clauses *clausesa)
+{
+  stmtblock_t block, *new_pblock = pblock;
+  gfc_omp_clauses clausesa_buf[GFC_OMP_SPLIT_NUM];
+  tree stmt, omp_clauses = NULL_TREE;
+
+  if (pblock == NULL)
+    gfc_start_block (&block);
   else
-    poplevel (0, 0);
+    gfc_init_block (&block);
+
+  if (clausesa == NULL)
+    {
+      clausesa = clausesa_buf;
+      gfc_split_omp_clauses (code, clausesa);
+    }
+  omp_clauses
+    = gfc_trans_omp_clauses (&block, &clausesa[GFC_OMP_SPLIT_PARALLEL],
+                            code->loc);
+  if (pblock == NULL)
+    {
+      if (!clausesa[GFC_OMP_SPLIT_DO].ordered
+         && clausesa[GFC_OMP_SPLIT_DO].sched_kind != OMP_SCHED_STATIC)
+       new_pblock = &block;
+      else
+       pushlevel ();
+    }
+  stmt = gfc_trans_omp_do (code, EXEC_OMP_DO, new_pblock,
+                          &clausesa[GFC_OMP_SPLIT_DO], omp_clauses);
+  if (pblock == NULL)
+    {
+      if (TREE_CODE (stmt) != BIND_EXPR)
+       stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0));
+      else
+       poplevel (0, 0);
+    }
+  else if (TREE_CODE (stmt) != BIND_EXPR)
+    stmt = build3_v (BIND_EXPR, NULL, stmt, NULL_TREE);
   stmt = build2_loc (input_location, OMP_PARALLEL, void_type_node, stmt,
                     omp_clauses);
   OMP_PARALLEL_COMBINED (stmt) = 1;
@@ -1632,6 +3458,50 @@ gfc_trans_omp_parallel_do (gfc_code *code)
 }
 
 static tree
+gfc_trans_omp_parallel_do_simd (gfc_code *code, stmtblock_t *pblock,
+                               gfc_omp_clauses *clausesa)
+{
+  stmtblock_t block;
+  gfc_omp_clauses clausesa_buf[GFC_OMP_SPLIT_NUM];
+  tree stmt, omp_clauses = NULL_TREE;
+
+  if (pblock == NULL)
+    gfc_start_block (&block);
+  else
+    gfc_init_block (&block);
+
+  if (clausesa == NULL)
+    {
+      clausesa = clausesa_buf;
+      gfc_split_omp_clauses (code, clausesa);
+    }
+  if (gfc_option.gfc_flag_openmp)
+    omp_clauses
+      = gfc_trans_omp_clauses (&block, &clausesa[GFC_OMP_SPLIT_PARALLEL],
+                              code->loc);
+  if (pblock == NULL)
+    pushlevel ();
+  stmt = gfc_trans_omp_do_simd (code, pblock, clausesa, omp_clauses);
+  if (pblock == NULL)
+    {
+      if (TREE_CODE (stmt) != BIND_EXPR)
+       stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0));
+      else
+       poplevel (0, 0);
+    }
+  else if (TREE_CODE (stmt) != BIND_EXPR)
+    stmt = build3_v (BIND_EXPR, NULL, stmt, NULL_TREE);
+  if (gfc_option.gfc_flag_openmp)
+    {
+      stmt = build2_loc (input_location, OMP_PARALLEL, void_type_node, stmt,
+                        omp_clauses);
+      OMP_PARALLEL_COMBINED (stmt) = 1;
+    }
+  gfc_add_expr_to_block (&block, stmt);
+  return gfc_finish_block (&block);
+}
+
+static tree
 gfc_trans_omp_parallel_sections (gfc_code *code)
 {
   stmtblock_t block;
@@ -1743,6 +3613,13 @@ gfc_trans_omp_task (gfc_code *code)
 }
 
 static tree
+gfc_trans_omp_taskgroup (gfc_code *code)
+{
+  tree stmt = gfc_trans_code (code->block->next);
+  return build1_loc (input_location, OMP_TASKGROUP, void_type_node, stmt);
+}
+
+static tree
 gfc_trans_omp_taskwait (void)
 {
   tree decl = builtin_decl_explicit (BUILT_IN_GOMP_TASKWAIT);
@@ -1757,6 +3634,170 @@ gfc_trans_omp_taskyield (void)
 }
 
 static tree
+gfc_trans_omp_distribute (gfc_code *code, gfc_omp_clauses *clausesa)
+{
+  stmtblock_t block;
+  gfc_omp_clauses clausesa_buf[GFC_OMP_SPLIT_NUM];
+  tree stmt, omp_clauses = NULL_TREE;
+
+  gfc_start_block (&block);
+  if (clausesa == NULL)
+    {
+      clausesa = clausesa_buf;
+      gfc_split_omp_clauses (code, clausesa);
+    }
+  if (gfc_option.gfc_flag_openmp)
+    omp_clauses
+      = gfc_trans_omp_clauses (&block, &clausesa[GFC_OMP_SPLIT_DISTRIBUTE],
+                              code->loc);
+  switch (code->op)
+    {
+    case EXEC_OMP_DISTRIBUTE:
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
+    case EXEC_OMP_TEAMS_DISTRIBUTE:
+      /* This is handled in gfc_trans_omp_do.  */
+      gcc_unreachable ();
+      break;
+    case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
+    case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
+      stmt = gfc_trans_omp_parallel_do (code, &block, clausesa);
+      if (TREE_CODE (stmt) != BIND_EXPR)
+       stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0));
+      else
+       poplevel (0, 0);
+      break;
+    case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+    case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+      stmt = gfc_trans_omp_parallel_do_simd (code, &block, clausesa);
+      if (TREE_CODE (stmt) != BIND_EXPR)
+       stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0));
+      else
+       poplevel (0, 0);
+      break;
+    case EXEC_OMP_DISTRIBUTE_SIMD:
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
+    case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
+      stmt = gfc_trans_omp_do (code, EXEC_OMP_SIMD, &block,
+                              &clausesa[GFC_OMP_SPLIT_SIMD], NULL_TREE);
+      if (TREE_CODE (stmt) != BIND_EXPR)
+       stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0));
+      else
+       poplevel (0, 0);
+      break;
+    default:
+      gcc_unreachable ();
+    }
+  if (gfc_option.gfc_flag_openmp)
+    {
+      tree distribute = make_node (OMP_DISTRIBUTE);
+      TREE_TYPE (distribute) = void_type_node;
+      OMP_FOR_BODY (distribute) = stmt;
+      OMP_FOR_CLAUSES (distribute) = omp_clauses;
+      stmt = distribute;
+    }
+  gfc_add_expr_to_block (&block, stmt);
+  return gfc_finish_block (&block);
+}
+
+static tree
+gfc_trans_omp_teams (gfc_code *code, gfc_omp_clauses *clausesa)
+{
+  stmtblock_t block;
+  gfc_omp_clauses clausesa_buf[GFC_OMP_SPLIT_NUM];
+  tree stmt, omp_clauses = NULL_TREE;
+
+  gfc_start_block (&block);
+  if (clausesa == NULL)
+    {
+      clausesa = clausesa_buf;
+      gfc_split_omp_clauses (code, clausesa);
+    }
+  if (gfc_option.gfc_flag_openmp)
+    omp_clauses
+      = gfc_trans_omp_clauses (&block, &clausesa[GFC_OMP_SPLIT_TEAMS],
+                              code->loc);
+  switch (code->op)
+    {
+    case EXEC_OMP_TARGET_TEAMS:
+    case EXEC_OMP_TEAMS:
+      stmt = gfc_trans_omp_code (code->block->next, true);
+      break;
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
+    case EXEC_OMP_TEAMS_DISTRIBUTE:
+      stmt = gfc_trans_omp_do (code, EXEC_OMP_DISTRIBUTE, NULL,
+                              &clausesa[GFC_OMP_SPLIT_DISTRIBUTE],
+                              NULL);
+      break;
+    default:
+      stmt = gfc_trans_omp_distribute (code, clausesa);
+      break;
+    }
+  stmt = build2_loc (input_location, OMP_TEAMS, void_type_node, stmt,
+                    omp_clauses);
+  gfc_add_expr_to_block (&block, stmt);
+  return gfc_finish_block (&block);
+}
+
+static tree
+gfc_trans_omp_target (gfc_code *code)
+{
+  stmtblock_t block;
+  gfc_omp_clauses clausesa[GFC_OMP_SPLIT_NUM];
+  tree stmt, omp_clauses = NULL_TREE;
+
+  gfc_start_block (&block);
+  gfc_split_omp_clauses (code, clausesa);
+  if (gfc_option.gfc_flag_openmp)
+    omp_clauses
+      = gfc_trans_omp_clauses (&block, &clausesa[GFC_OMP_SPLIT_TARGET],
+                              code->loc);
+  if (code->op == EXEC_OMP_TARGET)
+    stmt = gfc_trans_omp_code (code->block->next, true);
+  else
+    stmt = gfc_trans_omp_teams (code, clausesa);
+  if (TREE_CODE (stmt) != BIND_EXPR)
+    stmt = build3_v (BIND_EXPR, NULL, stmt, NULL_TREE);
+  if (gfc_option.gfc_flag_openmp)
+    stmt = build2_loc (input_location, OMP_TARGET, void_type_node, stmt,
+                      omp_clauses);
+  gfc_add_expr_to_block (&block, stmt);
+  return gfc_finish_block (&block);
+}
+
+static tree
+gfc_trans_omp_target_data (gfc_code *code)
+{
+  stmtblock_t block;
+  tree stmt, omp_clauses;
+
+  gfc_start_block (&block);
+  omp_clauses = gfc_trans_omp_clauses (&block, code->ext.omp_clauses,
+                                      code->loc);
+  stmt = gfc_trans_omp_code (code->block->next, true);
+  stmt = build2_loc (input_location, OMP_TARGET_DATA, void_type_node, stmt,
+                    omp_clauses);
+  gfc_add_expr_to_block (&block, stmt);
+  return gfc_finish_block (&block);
+}
+
+static tree
+gfc_trans_omp_target_update (gfc_code *code)
+{
+  stmtblock_t block;
+  tree stmt, omp_clauses;
+
+  gfc_start_block (&block);
+  omp_clauses = gfc_trans_omp_clauses (&block, code->ext.omp_clauses,
+                                      code->loc);
+  stmt = build1_loc (input_location, OMP_TARGET_UPDATE, void_type_node,
+                    omp_clauses);
+  gfc_add_expr_to_block (&block, stmt);
+  return gfc_finish_block (&block);
+}
+
+static tree
 gfc_trans_omp_workshare (gfc_code *code, gfc_omp_clauses *clauses)
 {
   tree res, tmp, stmt;
@@ -1923,10 +3964,23 @@ gfc_trans_omp_directive (gfc_code *code)
       return gfc_trans_omp_atomic (code);
     case EXEC_OMP_BARRIER:
       return gfc_trans_omp_barrier ();
+    case EXEC_OMP_CANCEL:
+      return gfc_trans_omp_cancel (code);
+    case EXEC_OMP_CANCELLATION_POINT:
+      return gfc_trans_omp_cancellation_point (code);
     case EXEC_OMP_CRITICAL:
       return gfc_trans_omp_critical (code);
+    case EXEC_OMP_DISTRIBUTE:
     case EXEC_OMP_DO:
-      return gfc_trans_omp_do (code, NULL, code->ext.omp_clauses, NULL);
+    case EXEC_OMP_SIMD:
+      return gfc_trans_omp_do (code, code->op, NULL, code->ext.omp_clauses,
+                              NULL);
+    case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
+    case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
+    case EXEC_OMP_DISTRIBUTE_SIMD:
+      return gfc_trans_omp_distribute (code, NULL);
+    case EXEC_OMP_DO_SIMD:
+      return gfc_trans_omp_do_simd (code, NULL, NULL, NULL_TREE);
     case EXEC_OMP_FLUSH:
       return gfc_trans_omp_flush ();
     case EXEC_OMP_MASTER:
@@ -1936,7 +3990,9 @@ gfc_trans_omp_directive (gfc_code *code)
     case EXEC_OMP_PARALLEL:
       return gfc_trans_omp_parallel (code);
     case EXEC_OMP_PARALLEL_DO:
-      return gfc_trans_omp_parallel_do (code);
+      return gfc_trans_omp_parallel_do (code, NULL, NULL);
+    case EXEC_OMP_PARALLEL_DO_SIMD:
+      return gfc_trans_omp_parallel_do_simd (code, NULL, NULL);
     case EXEC_OMP_PARALLEL_SECTIONS:
       return gfc_trans_omp_parallel_sections (code);
     case EXEC_OMP_PARALLEL_WORKSHARE:
@@ -1945,15 +4001,53 @@ gfc_trans_omp_directive (gfc_code *code)
       return gfc_trans_omp_sections (code, code->ext.omp_clauses);
     case EXEC_OMP_SINGLE:
       return gfc_trans_omp_single (code, code->ext.omp_clauses);
+    case EXEC_OMP_TARGET:
+    case EXEC_OMP_TARGET_TEAMS:
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
+      return gfc_trans_omp_target (code);
+    case EXEC_OMP_TARGET_DATA:
+      return gfc_trans_omp_target_data (code);
+    case EXEC_OMP_TARGET_UPDATE:
+      return gfc_trans_omp_target_update (code);
     case EXEC_OMP_TASK:
       return gfc_trans_omp_task (code);
+    case EXEC_OMP_TASKGROUP:
+      return gfc_trans_omp_taskgroup (code);
     case EXEC_OMP_TASKWAIT:
       return gfc_trans_omp_taskwait ();
     case EXEC_OMP_TASKYIELD:
       return gfc_trans_omp_taskyield ();
+    case EXEC_OMP_TEAMS:
+    case EXEC_OMP_TEAMS_DISTRIBUTE:
+    case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
+    case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+    case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
+      return gfc_trans_omp_teams (code, NULL);
     case EXEC_OMP_WORKSHARE:
       return gfc_trans_omp_workshare (code, code->ext.omp_clauses);
     default:
       gcc_unreachable ();
     }
 }
+
+void
+gfc_trans_omp_declare_simd (gfc_namespace *ns)
+{
+  if (ns->entries)
+    return;
+
+  gfc_omp_declare_simd *ods;
+  for (ods = ns->omp_declare_simd; ods; ods = ods->next)
+    {
+      tree c = gfc_trans_omp_clauses (NULL, ods->clauses, ods->where, true);
+      tree fndecl = ns->proc_name->backend_decl;
+      if (c != NULL_TREE)
+       c = tree_cons (NULL_TREE, c, NULL_TREE);
+      c = build_tree_list (get_identifier ("omp declare simd"), c);
+      TREE_CHAIN (c) = DECL_ATTRIBUTES (fndecl);
+      DECL_ATTRIBUTES (fndecl) = c;
+    }
+}
index 00c99fc..6d2db5e 100644 (file)
@@ -1164,13 +1164,16 @@ trans_associate_var (gfc_symbol *sym, gfc_wrapped_block *block)
     {
       gfc_se se;
       tree desc;
+      bool cst_array_ctor;
 
       desc = sym->backend_decl;
+      cst_array_ctor = e->expr_type == EXPR_ARRAY
+             && gfc_constant_array_constructor_p (e->value.constructor);
 
       /* If association is to an expression, evaluate it and create temporary.
         Otherwise, get descriptor of target for pointer assignment.  */
       gfc_init_se (&se, NULL);
-      if (sym->assoc->variable || e->expr_type == EXPR_ARRAY)
+      if (sym->assoc->variable || cst_array_ctor)
        {
          se.direct_byref = 1;
          se.use_offset = 1;
@@ -1181,7 +1184,7 @@ trans_associate_var (gfc_symbol *sym, gfc_wrapped_block *block)
 
       /* If we didn't already do the pointer assignment, set associate-name
         descriptor to the one generated for the temporary.  */
-      if (!sym->assoc->variable && e->expr_type != EXPR_ARRAY)
+      if (!sym->assoc->variable && !cst_array_ctor)
        {
          int dim;
 
index 8a57be4..087bafe 100644 (file)
@@ -63,6 +63,7 @@ tree gfc_trans_deallocate_array (tree);
 
 /* trans-openmp.c */
 tree gfc_trans_omp_directive (gfc_code *);
+void gfc_trans_omp_declare_simd (gfc_namespace *);
 
 /* trans-io.c */
 tree gfc_trans_open (gfc_code *);
index 59637f2..22f456e 100644 (file)
@@ -2162,9 +2162,6 @@ gfc_sym_type (gfc_symbol * sym)
                                                restricted);
              byref = 0;
            }
-
-         if (sym->attr.cray_pointee)
-           GFC_POINTER_TYPE_P (type) = 1;
         }
       else
        {
@@ -2183,8 +2180,6 @@ gfc_sym_type (gfc_symbol * sym)
       if (sym->attr.allocatable || sym->attr.pointer
          || gfc_is_associate_pointer (sym))
        type = gfc_build_pointer_type (sym, type);
-      if (sym->attr.pointer || sym->attr.cray_pointee)
-       GFC_POINTER_TYPE_P (type) = 1;
     }
 
   /* We currently pass all parameters by reference.
@@ -2554,6 +2549,8 @@ gfc_get_derived_type (gfc_symbol * derived)
       else if (derived->declared_at.lb)
        gfc_set_decl_location (field, &derived->declared_at);
 
+      gfc_finish_decl_attrs (field, &c->attr);
+
       DECL_PACKED (field) |= TYPE_PACKED (typenode);
 
       gcc_assert (field);
index 5961c26..7c73f59 100644 (file)
@@ -1848,20 +1848,43 @@ trans_code (gfc_code * code, tree cond)
 
        case EXEC_OMP_ATOMIC:
        case EXEC_OMP_BARRIER:
+       case EXEC_OMP_CANCEL:
+       case EXEC_OMP_CANCELLATION_POINT:
        case EXEC_OMP_CRITICAL:
+       case EXEC_OMP_DISTRIBUTE:
+       case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
+       case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
+       case EXEC_OMP_DISTRIBUTE_SIMD:
        case EXEC_OMP_DO:
+       case EXEC_OMP_DO_SIMD:
        case EXEC_OMP_FLUSH:
        case EXEC_OMP_MASTER:
        case EXEC_OMP_ORDERED:
        case EXEC_OMP_PARALLEL:
        case EXEC_OMP_PARALLEL_DO:
+       case EXEC_OMP_PARALLEL_DO_SIMD:
        case EXEC_OMP_PARALLEL_SECTIONS:
        case EXEC_OMP_PARALLEL_WORKSHARE:
        case EXEC_OMP_SECTIONS:
+       case EXEC_OMP_SIMD:
        case EXEC_OMP_SINGLE:
+       case EXEC_OMP_TARGET:
+       case EXEC_OMP_TARGET_DATA:
+       case EXEC_OMP_TARGET_TEAMS:
+       case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
+       case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
+       case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+       case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
+       case EXEC_OMP_TARGET_UPDATE:
        case EXEC_OMP_TASK:
+       case EXEC_OMP_TASKGROUP:
        case EXEC_OMP_TASKWAIT:
        case EXEC_OMP_TASKYIELD:
+       case EXEC_OMP_TEAMS:
+       case EXEC_OMP_TEAMS_DISTRIBUTE:
+       case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
+       case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+       case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
        case EXEC_OMP_WORKSHARE:
          res = gfc_trans_omp_directive (code);
          break;
index 7809bb0..b55460f 100644 (file)
@@ -547,6 +547,9 @@ void gfc_set_decl_assembler_name (tree, tree);
 /* Returns true if a variable of specified size should go on the stack.  */
 int gfc_can_put_var_on_stack (tree);
 
+/* Set GFC_DECL_SCALAR_* on decl from sym if needed.  */
+void gfc_finish_decl_attrs (tree, symbol_attribute *);
+
 /* Allocate the lang-specific part of a decl node.  */
 void gfc_allocate_lang_decl (tree);
 
@@ -666,7 +669,9 @@ tree gfc_omp_report_decl (tree);
 tree gfc_omp_clause_default_ctor (tree, tree, tree);
 tree gfc_omp_clause_copy_ctor (tree, tree, tree);
 tree gfc_omp_clause_assign_op (tree, tree, tree);
+tree gfc_omp_clause_linear_ctor (tree, tree, tree, tree);
 tree gfc_omp_clause_dtor (tree, tree);
+void gfc_omp_finish_clause (tree, gimple_seq *);
 bool gfc_omp_disregard_value_expr (tree, bool);
 bool gfc_omp_private_debug_clause (tree, bool);
 bool gfc_omp_private_outer_ref (tree);
@@ -824,6 +829,8 @@ struct GTY((variable_size)) lang_decl {
   tree span;
   /* For assumed-shape coarrays.  */
   tree token, caf_offset;
+  unsigned int scalar_allocatable : 1;
+  unsigned int scalar_pointer : 1;
 };
 
 
@@ -834,6 +841,14 @@ struct GTY((variable_size)) lang_decl {
 #define GFC_DECL_CAF_OFFSET(node) DECL_LANG_SPECIFIC(node)->caf_offset
 #define GFC_DECL_SAVED_DESCRIPTOR(node) \
   (DECL_LANG_SPECIFIC(node)->saved_descriptor)
+#define GFC_DECL_SCALAR_ALLOCATABLE(node) \
+  (DECL_LANG_SPECIFIC (node)->scalar_allocatable)
+#define GFC_DECL_SCALAR_POINTER(node) \
+  (DECL_LANG_SPECIFIC (node)->scalar_pointer)
+#define GFC_DECL_GET_SCALAR_ALLOCATABLE(node) \
+  (DECL_LANG_SPECIFIC (node) ? GFC_DECL_SCALAR_ALLOCATABLE (node) : 0)
+#define GFC_DECL_GET_SCALAR_POINTER(node) \
+  (DECL_LANG_SPECIFIC (node) ? GFC_DECL_SCALAR_POINTER (node) : 0)
 #define GFC_DECL_PACKED_ARRAY(node) DECL_LANG_FLAG_0(node)
 #define GFC_DECL_PARTIAL_PACKED_ARRAY(node) DECL_LANG_FLAG_1(node)
 #define GFC_DECL_ASSIGN(node) DECL_LANG_FLAG_2(node)
@@ -841,14 +856,13 @@ struct GTY((variable_size)) lang_decl {
 #define GFC_DECL_CRAY_POINTEE(node) DECL_LANG_FLAG_4(node)
 #define GFC_DECL_RESULT(node) DECL_LANG_FLAG_5(node)
 #define GFC_DECL_SUBREF_ARRAY_P(node) DECL_LANG_FLAG_6(node)
+#define GFC_DECL_ASSOCIATE_VAR_P(node) DECL_LANG_FLAG_7(node)
 #define GFC_DECL_CLASS(node) DECL_LANG_FLAG_8(node)
 
 /* An array descriptor.  */
 #define GFC_DESCRIPTOR_TYPE_P(node) TYPE_LANG_FLAG_1(node)
 /* An array without a descriptor.  */
 #define GFC_ARRAY_TYPE_P(node) TYPE_LANG_FLAG_2(node)
-/* Fortran POINTER type.  */
-#define GFC_POINTER_TYPE_P(node) TYPE_LANG_FLAG_3(node)
 /* Fortran CLASS type.  */
 #define GFC_CLASS_TYPE_P(node) TYPE_LANG_FLAG_4(node)
 /* The GFC_TYPE_ARRAY_* members are present in both descriptor and
index a61e475..1a8682b 100644 (file)
@@ -1347,9 +1347,13 @@ static int cfa_offset;
 #define STACK_POINTER_OFFSET   0
 #endif
 
+#if defined (REG_PARM_STACK_SPACE) && !defined (INCOMING_REG_PARM_STACK_SPACE)
+#define INCOMING_REG_PARM_STACK_SPACE REG_PARM_STACK_SPACE
+#endif
+
 /* If not defined, pick an appropriate default for the offset of dynamically
    allocated memory depending on the value of ACCUMULATE_OUTGOING_ARGS,
-   REG_PARM_STACK_SPACE, and OUTGOING_REG_PARM_STACK_SPACE.  */
+   INCOMING_REG_PARM_STACK_SPACE, and OUTGOING_REG_PARM_STACK_SPACE.  */
 
 #ifndef STACK_DYNAMIC_OFFSET
 
@@ -1361,12 +1365,12 @@ static int cfa_offset;
    `crtl->outgoing_args_size'.  Nevertheless, we must allow
    for it when allocating stack dynamic objects.  */
 
-#if defined(REG_PARM_STACK_SPACE)
+#ifdef INCOMING_REG_PARM_STACK_SPACE
 #define STACK_DYNAMIC_OFFSET(FNDECL)   \
 ((ACCUMULATE_OUTGOING_ARGS                                                   \
   ? (crtl->outgoing_args_size                                \
      + (OUTGOING_REG_PARM_STACK_SPACE ((!(FNDECL) ? NULL_TREE : TREE_TYPE (FNDECL))) ? 0 \
-                                              : REG_PARM_STACK_SPACE (FNDECL))) \
+                                              : INCOMING_REG_PARM_STACK_SPACE (FNDECL))) \
   : 0) + (STACK_POINTER_OFFSET))
 #else
 #define STACK_DYNAMIC_OFFSET(FNDECL)   \
@@ -2221,8 +2225,9 @@ assign_parms_initialize_all (struct assign_parm_data_all *all)
 #endif
   all->args_so_far = pack_cumulative_args (&all->args_so_far_v);
 
-#ifdef REG_PARM_STACK_SPACE
-  all->reg_parm_stack_space = REG_PARM_STACK_SPACE (current_function_decl);
+#ifdef INCOMING_REG_PARM_STACK_SPACE
+  all->reg_parm_stack_space
+    = INCOMING_REG_PARM_STACK_SPACE (current_function_decl);
 #endif
 }
 
@@ -4536,6 +4541,7 @@ allocate_struct_function (tree fndecl, bool abstract_p)
       /* ??? This could be set on a per-function basis by the front-end
          but is this worth the hassle?  */
       cfun->can_throw_non_call_exceptions = flag_non_call_exceptions;
+      cfun->can_delete_dead_exceptions = flag_delete_dead_exceptions;
     }
 }
 
index 70d4eae..c99067d 100644 (file)
@@ -1174,7 +1174,7 @@ int yy_flex_debug = 0;
 #define YY_MORE_ADJ 0
 #define YY_RESTORE_YY_MORE_OFFSET
 char *yytext;
-#line 1 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 1 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 /* -*- indented-text -*- */
 /* Process source files and output type information.
    Copyright (C) 2002-2014 Free Software Foundation, Inc.
@@ -1195,7 +1195,7 @@ 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 YY_NO_INPUT 1
-#line 24 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 24 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 #ifdef GENERATOR_FILE
 #include "bconfig.h"
 #else
@@ -1410,7 +1410,7 @@ YY_DECL
        register char *yy_cp, *yy_bp;
        register int yy_act;
     
-#line 65 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 65 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 
   /* Do this on entry to yylex():  */
   *yylval = 0;
@@ -1507,7 +1507,7 @@ case 1:
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 76 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 76 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 {
   BEGIN(in_struct);
   return TYPEDEF;
@@ -1519,7 +1519,7 @@ case 2:
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 80 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 80 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 {
   BEGIN(in_struct);
   return STRUCT;
@@ -1531,7 +1531,7 @@ case 3:
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 84 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 84 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 {
   BEGIN(in_struct);
   return UNION;
@@ -1543,7 +1543,7 @@ case 4:
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 88 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 88 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 {
   BEGIN(in_struct);
   return STRUCT;
@@ -1555,7 +1555,7 @@ case 5:
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 92 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 92 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 {
   BEGIN(in_struct);
   return EXTERN;
@@ -1567,7 +1567,7 @@ case 6:
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 96 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 96 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 {
   BEGIN(in_struct);
   return STATIC;
@@ -1578,25 +1578,25 @@ YY_RULE_SETUP
 
 case 7:
 YY_RULE_SETUP
-#line 104 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 104 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 { BEGIN(in_struct_comment); }
        YY_BREAK
 case 8:
 /* rule 8 can match eol */
 YY_RULE_SETUP
-#line 105 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 105 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 { lexer_line.line++; }
        YY_BREAK
 case 9:
 /* rule 9 can match eol */
 YY_RULE_SETUP
-#line 107 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 107 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 { update_lineno (yytext, yyleng); }
        YY_BREAK
 case 10:
 /* rule 10 can match eol */
 YY_RULE_SETUP
-#line 108 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 108 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 { lexer_line.line++; }
        YY_BREAK
 case 11:
@@ -1605,7 +1605,7 @@ case 11:
 (yy_c_buf_p) = yy_cp = yy_bp + 5;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 110 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 110 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 /* don't care */
        YY_BREAK
 case 12:
@@ -1613,14 +1613,14 @@ case 12:
 *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
-#line 112 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 112 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 case 13:
 /* rule 13 can match eol */
-#line 113 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 113 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 case 14:
 /* rule 14 can match eol */
 YY_RULE_SETUP
-#line 113 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 113 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 {
     *yylval = XDUPVAR (const char, yytext, yyleng, yyleng + 1);
     return IGNORABLE_CXX_KEYWORD;
@@ -1632,7 +1632,7 @@ case 15:
 (yy_c_buf_p) = yy_cp = yy_bp + 3;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 117 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 117 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 { return GTY_TOKEN; }
        YY_BREAK
 case 16:
@@ -1641,7 +1641,7 @@ case 16:
 (yy_c_buf_p) = yy_cp = yy_bp + 5;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 118 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 118 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 { return UNION; }
        YY_BREAK
 case 17:
@@ -1650,7 +1650,7 @@ case 17:
 (yy_c_buf_p) = yy_cp = yy_bp + 6;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 119 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 119 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 { return STRUCT; }
        YY_BREAK
 case 18:
@@ -1659,7 +1659,7 @@ case 18:
 (yy_c_buf_p) = yy_cp = yy_bp + 5;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 120 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 120 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 { return STRUCT; }
        YY_BREAK
 case 19:
@@ -1668,7 +1668,7 @@ case 19:
 (yy_c_buf_p) = yy_cp = yy_bp + 7;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 121 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 121 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 { return TYPEDEF; }
        YY_BREAK
 case 20:
@@ -1677,7 +1677,7 @@ case 20:
 (yy_c_buf_p) = yy_cp = yy_bp + 4;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 122 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 122 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 { return ENUM; }
        YY_BREAK
 case 21:
@@ -1686,7 +1686,7 @@ case 21:
 (yy_c_buf_p) = yy_cp = yy_bp + 9;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 123 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 123 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 { return PTR_ALIAS; }
        YY_BREAK
 case 22:
@@ -1695,7 +1695,7 @@ case 22:
 (yy_c_buf_p) = yy_cp = yy_bp + 10;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 124 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 124 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 { return NESTED_PTR; }
        YY_BREAK
 case 23:
@@ -1704,12 +1704,12 @@ case 23:
 (yy_c_buf_p) = yy_cp = yy_bp + 4;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 125 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 125 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 { return USER_GTY; }
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 126 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 126 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 { return NUM; }
        YY_BREAK
 case 25:
@@ -1718,7 +1718,7 @@ case 25:
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 127 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 127 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 {
   *yylval = XDUPVAR (const char, yytext, yyleng, yyleng+1);
   return PARAM_IS;
@@ -1729,11 +1729,11 @@ case 26:
 *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
-#line 133 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 133 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 case 27:
 /* rule 27 can match eol */
 YY_RULE_SETUP
-#line 133 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 133 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 {
   size_t len;
 
@@ -1751,7 +1751,7 @@ case 28:
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 144 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 144 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 {
   *yylval = XDUPVAR (const char, yytext, yyleng, yyleng+1);
   return ID;
@@ -1760,7 +1760,7 @@ YY_RULE_SETUP
 case 29:
 /* rule 29 can match eol */
 YY_RULE_SETUP
-#line 149 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 149 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 {
   *yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng-1);
   return STRING;
@@ -1770,7 +1770,7 @@ YY_RULE_SETUP
 case 30:
 /* rule 30 can match eol */
 YY_RULE_SETUP
-#line 154 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 154 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 {
   *yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng-1);
   return ARRAY;
@@ -1779,7 +1779,7 @@ YY_RULE_SETUP
 case 31:
 /* rule 31 can match eol */
 YY_RULE_SETUP
-#line 158 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 158 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 {
   *yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng);
   return CHAR;
@@ -1787,24 +1787,24 @@ YY_RULE_SETUP
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 163 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 163 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 { return ELLIPSIS; }
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 164 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 164 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 { return yytext[0]; }
        YY_BREAK
 /* ignore pp-directives */
 case 34:
 /* rule 34 can match eol */
 YY_RULE_SETUP
-#line 167 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 167 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 {lexer_line.line++;}
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 169 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 169 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 {
   error_at_line (&lexer_line, "unexpected character `%s'", yytext);
 }
@@ -1812,36 +1812,36 @@ YY_RULE_SETUP
 
 case 36:
 YY_RULE_SETUP
-#line 174 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 174 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 { BEGIN(in_comment); }
        YY_BREAK
 case 37:
 /* rule 37 can match eol */
 YY_RULE_SETUP
-#line 175 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 175 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 { lexer_line.line++; }
        YY_BREAK
 case 38:
 /* rule 38 can match eol */
 YY_RULE_SETUP
-#line 176 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 176 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 { lexer_line.line++; }
        YY_BREAK
 case 39:
-#line 178 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 178 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 case 40:
 /* rule 40 can match eol */
-#line 179 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 179 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 case 41:
 /* rule 41 can match eol */
 YY_RULE_SETUP
-#line 179 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 179 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 /* do nothing */
        YY_BREAK
 case 42:
 /* rule 42 can match eol */
 YY_RULE_SETUP
-#line 180 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 180 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 { update_lineno (yytext, yyleng); }
        YY_BREAK
 case 43:
@@ -1850,21 +1850,21 @@ case 43:
 (yy_c_buf_p) = yy_cp = yy_bp + 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 181 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 181 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 /* do nothing */
        YY_BREAK
 
 case 44:
 /* rule 44 can match eol */
 YY_RULE_SETUP
-#line 184 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 184 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 { lexer_line.line++; }
        YY_BREAK
 case 45:
-#line 186 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 186 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 case 46:
 YY_RULE_SETUP
-#line 186 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 186 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 /* do nothing */
        YY_BREAK
 case 47:
@@ -1873,25 +1873,25 @@ case 47:
 (yy_c_buf_p) = yy_cp = yy_bp + 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 187 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 187 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 /* do nothing */
        YY_BREAK
 
 case 48:
 YY_RULE_SETUP
-#line 190 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 190 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 { BEGIN(INITIAL); } 
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 191 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 191 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 { BEGIN(in_struct); }
        YY_BREAK
 case 50:
-#line 194 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 194 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 case 51:
 YY_RULE_SETUP
-#line 194 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 194 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 {
   error_at_line (&lexer_line, 
                 "unterminated comment or string; unexpected EOF");
@@ -1900,12 +1900,12 @@ YY_RULE_SETUP
 case 52:
 /* rule 52 can match eol */
 YY_RULE_SETUP
-#line 199 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 199 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 /* do nothing */
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 201 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 201 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 YY_FATAL_ERROR( "flex scanner jammed" );
        YY_BREAK
 #line 1911 "gengtype-lex.c"
@@ -2872,7 +2872,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 201 "/d/gcc-4.9.0/gcc-4.9.0/gcc/gengtype-lex.l"
+#line 201 "/d/gcc-4.9.1/gcc-4.9.1/gcc/gengtype-lex.l"
 
 
 
index da3fb9f..6d4dab9 100644 (file)
@@ -722,7 +722,7 @@ lower_builtin_setjmp (gimple_stmt_iterator *gsi)
      these builtins are modelled as non-local label jumps to the label
      that is passed to these two builtins, so pretend we have a non-local
      label during GIMPLE passes too.  See PR60003.  */ 
-  cfun->has_nonlocal_label = true;
+  cfun->has_nonlocal_label = 1;
 
   /* NEXT_LABEL is the label __builtin_longjmp will jump to.  Its address is
      passed to both __builtin_setjmp_setup and __builtin_setjmp_receiver.  */
index 9ad1b4f..cb19399 100644 (file)
@@ -1114,15 +1114,18 @@ create_mul_imm_cand (gimple gs, tree base_in, tree stride_in, bool speed)
             X = Y * c
             ============================
             X = (B + i') * (S * c)  */
-         base = base_cand->base_expr;
-         index = base_cand->index;
          temp = tree_to_double_int (base_cand->stride)
                 * tree_to_double_int (stride_in);
-         stride = double_int_to_tree (TREE_TYPE (stride_in), temp);
-         ctype = base_cand->cand_type;
-         if (has_single_use (base_in))
-           savings = (base_cand->dead_savings 
-                      + stmt_cost (base_cand->cand_stmt, speed));
+         if (double_int_fits_to_tree_p (TREE_TYPE (stride_in), temp))
+           {
+             base = base_cand->base_expr;
+             index = base_cand->index;
+             stride = double_int_to_tree (TREE_TYPE (stride_in), temp);
+             ctype = base_cand->cand_type;
+             if (has_single_use (base_in))
+               savings = (base_cand->dead_savings 
+                          + stmt_cost (base_cand->cand_stmt, speed));
+           }
        }
       else if (base_cand->kind == CAND_ADD && integer_onep (base_cand->stride))
        {
index 7441784..4121bf3 100644 (file)
@@ -138,6 +138,7 @@ struct gimplify_omp_ctx
   enum omp_clause_default_kind default_kind;
   enum omp_region_type region_type;
   bool combined_loop;
+  bool distribute;
 };
 
 static struct gimplify_ctx *gimplify_ctxp;
@@ -2169,7 +2170,7 @@ maybe_with_size_expr (tree *expr_p)
    Store any side-effects in PRE_P.  CALL_LOCATION is the location of
    the CALL_EXPR.  */
 
-static enum gimplify_status
+enum gimplify_status
 gimplify_arg (tree *arg_p, gimple_seq *pre_p, location_t call_location)
 {
   bool (*test) (tree);
@@ -5642,6 +5643,7 @@ omp_notice_variable (struct gimplify_omp_ctx *ctx, tree decl, bool in_code)
   n = splay_tree_lookup (ctx->variables, (splay_tree_key)decl);
   if (ctx->region_type == ORT_TARGET)
     {
+      ret = lang_hooks.decls.omp_disregard_value_expr (decl, true);
       if (n == NULL)
        {
          if (!lang_hooks.types.omp_mappable_type (TREE_TYPE (decl)))
@@ -5654,8 +5656,12 @@ omp_notice_variable (struct gimplify_omp_ctx *ctx, tree decl, bool in_code)
            omp_add_variable (ctx, decl, GOVD_MAP | flags);
        }
       else
-       n->value |= flags;
-      ret = lang_hooks.decls.omp_disregard_value_expr (decl, true);
+       {
+         /* If nothing changed, there's nothing left to do.  */
+         if ((n->value & flags) == flags)
+           return ret;
+         n->value |= flags;
+       }
       goto do_outer;
     }
 
@@ -5793,7 +5799,7 @@ omp_notice_variable (struct gimplify_omp_ctx *ctx, tree decl, bool in_code)
    to the contrary in the innermost scope, generate an error.  */
 
 static bool
-omp_is_private (struct gimplify_omp_ctx *ctx, tree decl, bool simd)
+omp_is_private (struct gimplify_omp_ctx *ctx, tree decl, int simd)
 {
   splay_tree_node n;
 
@@ -5827,13 +5833,13 @@ omp_is_private (struct gimplify_omp_ctx *ctx, tree decl, bool simd)
          else if ((n->value & GOVD_REDUCTION) != 0)
            error ("iteration variable %qE should not be reduction",
                   DECL_NAME (decl));
-         else if (simd && (n->value & GOVD_LASTPRIVATE) != 0)
+         else if (simd == 1 && (n->value & GOVD_LASTPRIVATE) != 0)
            error ("iteration variable %qE should not be lastprivate",
                   DECL_NAME (decl));
          else if (simd && (n->value & GOVD_PRIVATE) != 0)
            error ("iteration variable %qE should not be private",
                   DECL_NAME (decl));
-         else if (simd && (n->value & GOVD_LINEAR) != 0)
+         else if (simd == 2 && (n->value & GOVD_LINEAR) != 0)
            error ("iteration variable %qE is predetermined linear",
                   DECL_NAME (decl));
        }
@@ -5941,14 +5947,21 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p,
          goto do_add;
 
        case OMP_CLAUSE_MAP:
-         if (OMP_CLAUSE_SIZE (c)
-             && gimplify_expr (&OMP_CLAUSE_SIZE (c), pre_p,
-                               NULL, is_gimple_val, fb_rvalue) == GS_ERROR)
+         decl = OMP_CLAUSE_DECL (c);
+         if (error_operand_p (decl))
+           {
+             remove = true;
+             break;
+           }
+         if (OMP_CLAUSE_SIZE (c) == NULL_TREE)
+           OMP_CLAUSE_SIZE (c) = DECL_P (decl) ? DECL_SIZE_UNIT (decl)
+                                 : TYPE_SIZE_UNIT (TREE_TYPE (decl));
+         if (gimplify_expr (&OMP_CLAUSE_SIZE (c), pre_p,
+                            NULL, is_gimple_val, fb_rvalue) == GS_ERROR)
            {
              remove = true;
              break;
            }
-         decl = OMP_CLAUSE_DECL (c);
          if (!DECL_P (decl))
            {
              if (gimplify_expr (&OMP_CLAUSE_DECL (c), pre_p,
@@ -5986,15 +5999,17 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p,
 
        case OMP_CLAUSE_TO:
        case OMP_CLAUSE_FROM:
-         if (OMP_CLAUSE_SIZE (c)
-             && gimplify_expr (&OMP_CLAUSE_SIZE (c), pre_p,
-                               NULL, is_gimple_val, fb_rvalue) == GS_ERROR)
+         decl = OMP_CLAUSE_DECL (c);
+         if (error_operand_p (decl))
            {
              remove = true;
              break;
            }
-         decl = OMP_CLAUSE_DECL (c);
-         if (error_operand_p (decl))
+         if (OMP_CLAUSE_SIZE (c) == NULL_TREE)
+           OMP_CLAUSE_SIZE (c) = DECL_P (decl) ? DECL_SIZE_UNIT (decl)
+                                 : TYPE_SIZE_UNIT (TREE_TYPE (decl));
+         if (gimplify_expr (&OMP_CLAUSE_SIZE (c), pre_p,
+                            NULL, is_gimple_val, fb_rvalue) == GS_ERROR)
            {
              remove = true;
              break;
@@ -6066,6 +6081,27 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p,
 
              gimplify_omp_ctxp = outer_ctx;
            }
+         else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LINEAR
+                  && OMP_CLAUSE_LINEAR_STMT (c))
+           {
+             gimplify_omp_ctxp = ctx;
+             push_gimplify_context ();
+             if (TREE_CODE (OMP_CLAUSE_LINEAR_STMT (c)) != BIND_EXPR)
+               {
+                 tree bind = build3 (BIND_EXPR, void_type_node, NULL,
+                                     NULL, NULL);
+                 TREE_SIDE_EFFECTS (bind) = 1;
+                 BIND_EXPR_BODY (bind) = OMP_CLAUSE_LINEAR_STMT (c);
+                 OMP_CLAUSE_LINEAR_STMT (c) = bind;
+               }
+             gimplify_and_add (OMP_CLAUSE_LINEAR_STMT (c),
+                               &OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c));
+             pop_gimplify_context
+               (gimple_seq_first_stmt (OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c)));
+             OMP_CLAUSE_LINEAR_STMT (c) = NULL_TREE;
+
+             gimplify_omp_ctxp = outer_ctx;
+           }
          if (notice_outer)
            goto do_notice;
          break;
@@ -6148,6 +6184,12 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p,
              remove = true;
              break;
            }
+         if (gimplify_expr (&OMP_CLAUSE_ALIGNED_ALIGNMENT (c), pre_p, NULL,
+                            is_gimple_val, fb_rvalue) == GS_ERROR)
+           {
+             remove = true;
+             break;
+           }
          if (!is_global_var (decl)
              && TREE_CODE (TREE_TYPE (decl)) == POINTER_TYPE)
            omp_add_variable (ctx, decl, GOVD_ALIGNED);
@@ -6170,13 +6212,21 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p,
   gimplify_omp_ctxp = ctx;
 }
 
+struct gimplify_adjust_omp_clauses_data
+{
+  tree *list_p;
+  gimple_seq *pre_p;
+};
+
 /* For all variables that were not actually used within the context,
    remove PRIVATE, SHARED, and FIRSTPRIVATE clauses.  */
 
 static int
 gimplify_adjust_omp_clauses_1 (splay_tree_node n, void *data)
 {
-  tree *list_p = (tree *) data;
+  tree *list_p = ((struct gimplify_adjust_omp_clauses_data *) data)->list_p;
+  gimple_seq *pre_p
+    = ((struct gimplify_adjust_omp_clauses_data *) data)->pre_p;
   tree decl = (tree) n->key;
   unsigned flags = n->value;
   enum omp_clause_code code;
@@ -6269,15 +6319,31 @@ gimplify_adjust_omp_clauses_1 (splay_tree_node n, void *data)
          OMP_CLAUSE_CHAIN (nc) = OMP_CLAUSE_CHAIN (clause);
          OMP_CLAUSE_CHAIN (clause) = nc;
        }
+      else
+       OMP_CLAUSE_SIZE (clause) = DECL_SIZE_UNIT (decl);
+    }
+  if (code == OMP_CLAUSE_FIRSTPRIVATE && (flags & GOVD_LASTPRIVATE) != 0)
+    {
+      tree nc = build_omp_clause (input_location, OMP_CLAUSE_LASTPRIVATE);
+      OMP_CLAUSE_DECL (nc) = decl;
+      OMP_CLAUSE_LASTPRIVATE_FIRSTPRIVATE (nc) = 1;
+      OMP_CLAUSE_CHAIN (nc) = *list_p;
+      OMP_CLAUSE_CHAIN (clause) = nc;
+      struct gimplify_omp_ctx *ctx = gimplify_omp_ctxp;
+      gimplify_omp_ctxp = ctx->outer_context;
+      lang_hooks.decls.omp_finish_clause (nc, pre_p);
+      gimplify_omp_ctxp = ctx;
     }
   *list_p = clause;
-  lang_hooks.decls.omp_finish_clause (clause);
-
+  struct gimplify_omp_ctx *ctx = gimplify_omp_ctxp;
+  gimplify_omp_ctxp = ctx->outer_context;
+  lang_hooks.decls.omp_finish_clause (clause, pre_p);
+  gimplify_omp_ctxp = ctx;
   return 0;
 }
 
 static void
-gimplify_adjust_omp_clauses (tree *list_p)
+gimplify_adjust_omp_clauses (gimple_seq *pre_p, tree *list_p)
 {
   struct gimplify_omp_ctx *ctx = gimplify_omp_ctxp;
   tree c, decl;
@@ -6311,18 +6377,21 @@ gimplify_adjust_omp_clauses (tree *list_p)
              if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LINEAR
                  && ctx->outer_context
                  && !(OMP_CLAUSE_LINEAR_NO_COPYIN (c)
-                      && OMP_CLAUSE_LINEAR_NO_COPYOUT (c))
-                 && !is_global_var (decl))
+                      && OMP_CLAUSE_LINEAR_NO_COPYOUT (c)))
                {
-                 if (ctx->outer_context->region_type == ORT_COMBINED_PARALLEL)
+                 if (ctx->outer_context->combined_loop
+                     && !OMP_CLAUSE_LINEAR_NO_COPYIN (c))
                    {
                      n = splay_tree_lookup (ctx->outer_context->variables,
                                             (splay_tree_key) decl);
                      if (n == NULL
                          || (n->value & GOVD_DATA_SHARE_CLASS) == 0)
                        {
-                         int flags = OMP_CLAUSE_LINEAR_NO_COPYIN (c)
-                                     ? GOVD_LASTPRIVATE : GOVD_SHARED;
+                         int flags = GOVD_FIRSTPRIVATE;
+                         /* #pragma omp distribute does not allow
+                            lastprivate clause.  */
+                         if (!ctx->outer_context->distribute)
+                           flags |= GOVD_LASTPRIVATE;
                          if (n == NULL)
                            omp_add_variable (ctx->outer_context, decl,
                                              flags | GOVD_SEEN);
@@ -6330,7 +6399,7 @@ gimplify_adjust_omp_clauses (tree *list_p)
                            n->value |= flags | GOVD_SEEN;
                        }
                    }
-                 else
+                 else if (!is_global_var (decl))
                    omp_notice_variable (ctx->outer_context, decl, true);
                }
            }
@@ -6420,6 +6489,8 @@ gimplify_adjust_omp_clauses (tree *list_p)
              OMP_CLAUSE_CHAIN (c) = nc;
              c = nc;
            }
+         else if (OMP_CLAUSE_SIZE (c) == NULL_TREE)
+           OMP_CLAUSE_SIZE (c) = DECL_SIZE_UNIT (decl);
          break;
 
        case OMP_CLAUSE_TO:
@@ -6444,6 +6515,8 @@ gimplify_adjust_omp_clauses (tree *list_p)
                                       OMP_CLAUSE_SIZE (c), true);
                }
            }
+         else if (OMP_CLAUSE_SIZE (c) == NULL_TREE)
+           OMP_CLAUSE_SIZE (c) = DECL_SIZE_UNIT (decl);
          break;
 
        case OMP_CLAUSE_REDUCTION:
@@ -6479,7 +6552,10 @@ gimplify_adjust_omp_clauses (tree *list_p)
     }
 
   /* Add in any implicit data sharing.  */
-  splay_tree_foreach (ctx->variables, gimplify_adjust_omp_clauses_1, list_p);
+  struct gimplify_adjust_omp_clauses_data data;
+  data.list_p = list_p;
+  data.pre_p = pre_p;
+  splay_tree_foreach (ctx->variables, gimplify_adjust_omp_clauses_1, &data);
 
   gimplify_omp_ctxp = ctx->outer_context;
   delete_omp_context (ctx);
@@ -6510,7 +6586,7 @@ gimplify_omp_parallel (tree *expr_p, gimple_seq *pre_p)
   else
     pop_gimplify_context (NULL);
 
-  gimplify_adjust_omp_clauses (&OMP_PARALLEL_CLAUSES (expr));
+  gimplify_adjust_omp_clauses (pre_p, &OMP_PARALLEL_CLAUSES (expr));
 
   g = gimple_build_omp_parallel (body,
                                 OMP_PARALLEL_CLAUSES (expr),
@@ -6546,7 +6622,7 @@ gimplify_omp_task (tree *expr_p, gimple_seq *pre_p)
   else
     pop_gimplify_context (NULL);
 
-  gimplify_adjust_omp_clauses (&OMP_TASK_CLAUSES (expr));
+  gimplify_adjust_omp_clauses (pre_p, &OMP_TASK_CLAUSES (expr));
 
   g = gimple_build_omp_task (body,
                             OMP_TASK_CLAUSES (expr),
@@ -6599,10 +6675,12 @@ gimplify_omp_for (tree *expr_p, gimple_seq *pre_p)
 
   orig_for_stmt = for_stmt = *expr_p;
 
-  simd = TREE_CODE (for_stmt) == OMP_SIMD
-    || TREE_CODE (for_stmt) == CILK_SIMD;
+  simd = (TREE_CODE (for_stmt) == OMP_SIMD
+         || TREE_CODE (for_stmt) == CILK_SIMD);
   gimplify_scan_omp_clauses (&OMP_FOR_CLAUSES (for_stmt), pre_p,
                             simd ? ORT_SIMD : ORT_WORKSHARE);
+  if (TREE_CODE (for_stmt) == OMP_DISTRIBUTE)
+    gimplify_omp_ctxp->distribute = true;
 
   /* Handle OMP_FOR_INIT.  */
   for_pre_body = NULL;
@@ -6656,13 +6734,16 @@ gimplify_omp_for (tree *expr_p, gimple_seq *pre_p)
 
       /* Make sure the iteration variable is private.  */
       tree c = NULL_TREE;
+      tree c2 = NULL_TREE;
       if (orig_for_stmt != for_stmt)
        /* Do this only on innermost construct for combined ones.  */;
       else if (simd)
        {
          splay_tree_node n = splay_tree_lookup (gimplify_omp_ctxp->variables,
                                                 (splay_tree_key)decl);
-         omp_is_private (gimplify_omp_ctxp, decl, simd);
+         omp_is_private (gimplify_omp_ctxp, decl,
+                         1 + (TREE_VEC_LENGTH (OMP_FOR_INIT (for_stmt))
+                              != 1));
          if (n != NULL && (n->value & GOVD_DATA_SHARE_CLASS) != 0)
            omp_notice_variable (gimplify_omp_ctxp, decl, true);
          else if (TREE_VEC_LENGTH (OMP_FOR_INIT (for_stmt)) == 1)
@@ -6683,35 +6764,82 @@ gimplify_omp_for (tree *expr_p, gimple_seq *pre_p)
              bool lastprivate
                = (!has_decl_expr
                   || !bitmap_bit_p (has_decl_expr, DECL_UID (decl)));
+             if (lastprivate
+                 && gimplify_omp_ctxp->outer_context
+                 && gimplify_omp_ctxp->outer_context->region_type
+                    == ORT_WORKSHARE
+                 && gimplify_omp_ctxp->outer_context->combined_loop
+                 && !gimplify_omp_ctxp->outer_context->distribute)
+               {
+                 struct gimplify_omp_ctx *outer
+                   = gimplify_omp_ctxp->outer_context;
+                 n = splay_tree_lookup (outer->variables,
+                                        (splay_tree_key) decl);
+                 if (n != NULL
+                     && (n->value & GOVD_DATA_SHARE_CLASS) == GOVD_LOCAL)
+                   lastprivate = false;
+                 else if (omp_check_private (outer, decl, false))
+                   error ("lastprivate variable %qE is private in outer "
+                          "context", DECL_NAME (decl));
+                 else
+                   {
+                     omp_add_variable (outer, decl,
+                                       GOVD_LASTPRIVATE | GOVD_SEEN);
+                     if (outer->outer_context)
+                       omp_notice_variable (outer->outer_context, decl, true);
+                   }
+               }
              c = build_omp_clause (input_location,
                                    lastprivate ? OMP_CLAUSE_LASTPRIVATE
                                                : OMP_CLAUSE_PRIVATE);
              OMP_CLAUSE_DECL (c) = decl;
              OMP_CLAUSE_CHAIN (c) = OMP_FOR_CLAUSES (for_stmt);
+             OMP_FOR_CLAUSES (for_stmt) = c;
              omp_add_variable (gimplify_omp_ctxp, decl,
                                (lastprivate ? GOVD_LASTPRIVATE : GOVD_PRIVATE)
-                               | GOVD_SEEN);
+                               | GOVD_EXPLICIT | GOVD_SEEN);
              c = NULL_TREE;
            }
        }
-      else if (omp_is_private (gimplify_omp_ctxp, decl, simd))
+      else if (omp_is_private (gimplify_omp_ctxp, decl, 0))
        omp_notice_variable (gimplify_omp_ctxp, decl, true);
       else
        omp_add_variable (gimplify_omp_ctxp, decl, GOVD_PRIVATE | GOVD_SEEN);
 
       /* If DECL is not a gimple register, create a temporary variable to act
         as an iteration counter.  This is valid, since DECL cannot be
-        modified in the body of the loop.  */
+        modified in the body of the loop.  Similarly for any iteration vars
+        in simd with collapse > 1 where the iterator vars must be
+        lastprivate.  */
       if (orig_for_stmt != for_stmt)
        var = decl;
-      else if (!is_gimple_reg (decl))
+      else if (!is_gimple_reg (decl)
+              || (simd && TREE_VEC_LENGTH (OMP_FOR_INIT (for_stmt)) > 1))
        {
          var = create_tmp_var (TREE_TYPE (decl), get_name (decl));
          TREE_OPERAND (t, 0) = var;
 
          gimplify_seq_add_stmt (&for_body, gimple_build_assign (decl, var));
 
-         omp_add_variable (gimplify_omp_ctxp, var, GOVD_PRIVATE | GOVD_SEEN);
+         if (simd && TREE_VEC_LENGTH (OMP_FOR_INIT (for_stmt)) == 1)
+           {
+             c2 = build_omp_clause (input_location, OMP_CLAUSE_LINEAR);
+             OMP_CLAUSE_LINEAR_NO_COPYIN (c2) = 1;
+             OMP_CLAUSE_LINEAR_NO_COPYOUT (c2) = 1;
+             OMP_CLAUSE_DECL (c2) = var;
+             OMP_CLAUSE_CHAIN (c2) = OMP_FOR_CLAUSES (for_stmt);
+             OMP_FOR_CLAUSES (for_stmt) = c2;
+             omp_add_variable (gimplify_omp_ctxp, var,
+                               GOVD_LINEAR | GOVD_EXPLICIT | GOVD_SEEN);
+             if (c == NULL_TREE)
+               {
+                 c = c2;
+                 c2 = NULL_TREE;
+               }
+           }
+         else
+           omp_add_variable (gimplify_omp_ctxp, var,
+                             GOVD_PRIVATE | GOVD_SEEN);
        }
       else
        var = decl;
@@ -6739,8 +6867,8 @@ gimplify_omp_for (tree *expr_p, gimple_seq *pre_p)
        case POSTINCREMENT_EXPR:
          {
            tree decl = TREE_OPERAND (t, 0);
-           // c_omp_for_incr_canonicalize_ptr() should have been
-           // called to massage things appropriately.
+           /* c_omp_for_incr_canonicalize_ptr() should have been
+              called to massage things appropriately.  */
            gcc_assert (!POINTER_TYPE_P (TREE_TYPE (decl)));
 
            if (orig_for_stmt != for_stmt)
@@ -6756,6 +6884,9 @@ gimplify_omp_for (tree *expr_p, gimple_seq *pre_p)
 
        case PREDECREMENT_EXPR:
        case POSTDECREMENT_EXPR:
+         /* c_omp_for_incr_canonicalize_ptr() should have been
+            called to massage things appropriately.  */
+         gcc_assert (!POINTER_TYPE_P (TREE_TYPE (decl)));
          if (orig_for_stmt != for_stmt)
            break;
          t = build_int_cst (TREE_TYPE (decl), -1);
@@ -6796,12 +6927,16 @@ gimplify_omp_for (tree *expr_p, gimple_seq *pre_p)
          ret = MIN (ret, tret);
          if (c)
            {
-             OMP_CLAUSE_LINEAR_STEP (c) = TREE_OPERAND (t, 1);
+             tree step = TREE_OPERAND (t, 1);
+             tree stept = TREE_TYPE (decl);
+             if (POINTER_TYPE_P (stept))
+               stept = sizetype;
+             step = fold_convert (stept, step);
              if (TREE_CODE (t) == MINUS_EXPR)
+               step = fold_build1 (NEGATE_EXPR, stept, step);
+             OMP_CLAUSE_LINEAR_STEP (c) = step;
+             if (step != TREE_OPERAND (t, 1))
                {
-                 t = TREE_OPERAND (t, 1);
-                 OMP_CLAUSE_LINEAR_STEP (c)
-                   = fold_build1 (NEGATE_EXPR, TREE_TYPE (t), t);
                  tret = gimplify_expr (&OMP_CLAUSE_LINEAR_STEP (c),
                                        &for_pre_body, NULL,
                                        is_gimple_val, fb_rvalue);
@@ -6814,13 +6949,22 @@ gimplify_omp_for (tree *expr_p, gimple_seq *pre_p)
          gcc_unreachable ();
        }
 
+      if (c2)
+       {
+         gcc_assert (c);
+         OMP_CLAUSE_LINEAR_STEP (c2) = OMP_CLAUSE_LINEAR_STEP (c);
+       }
+
       if ((var != decl || TREE_VEC_LENGTH (OMP_FOR_INIT (for_stmt)) > 1)
          && orig_for_stmt == for_stmt)
        {
          for (c = OMP_FOR_CLAUSES (for_stmt); c ; c = OMP_CLAUSE_CHAIN (c))
-           if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
-               && OMP_CLAUSE_DECL (c) == decl
-               && OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ (c) == NULL)
+           if (((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
+                 && OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ (c) == NULL)
+                || (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LINEAR
+                    && !OMP_CLAUSE_LINEAR_NO_COPYOUT (c)
+                    && OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c) == NULL))
+               && OMP_CLAUSE_DECL (c) == decl)
              {
                t = TREE_VEC_ELT (OMP_FOR_INCR (for_stmt), i);
                gcc_assert (TREE_CODE (t) == MODIFY_EXPR);
@@ -6832,8 +6976,12 @@ gimplify_omp_for (tree *expr_p, gimple_seq *pre_p)
                gcc_assert (TREE_OPERAND (t, 0) == var);
                t = build2 (TREE_CODE (t), TREE_TYPE (decl), decl,
                            TREE_OPERAND (t, 1));
-               gimplify_assign (decl, t,
-                                &OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ (c));
+               gimple_seq *seq;
+               if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
+                 seq = &OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ (c);
+               else
+                 seq = &OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c);
+               gimplify_assign (decl, t, seq);
            }
        }
     }
@@ -6855,7 +7003,7 @@ gimplify_omp_for (tree *expr_p, gimple_seq *pre_p)
        TREE_OPERAND (TREE_OPERAND (t, 1), 0) = var;
       }
 
-  gimplify_adjust_omp_clauses (&OMP_FOR_CLAUSES (orig_for_stmt));
+  gimplify_adjust_omp_clauses (pre_p, &OMP_FOR_CLAUSES (orig_for_stmt));
 
   int kind;
   switch (TREE_CODE (orig_for_stmt))
@@ -6955,7 +7103,7 @@ gimplify_omp_workshare (tree *expr_p, gimple_seq *pre_p)
     }
   else
     gimplify_and_add (OMP_BODY (expr), &body);
-  gimplify_adjust_omp_clauses (&OMP_CLAUSES (expr));
+  gimplify_adjust_omp_clauses (pre_p, &OMP_CLAUSES (expr));
 
   switch (TREE_CODE (expr))
     {
@@ -6994,7 +7142,7 @@ gimplify_omp_target_update (tree *expr_p, gimple_seq *pre_p)
 
   gimplify_scan_omp_clauses (&OMP_TARGET_UPDATE_CLAUSES (expr), pre_p,
                             ORT_WORKSHARE);
-  gimplify_adjust_omp_clauses (&OMP_TARGET_UPDATE_CLAUSES (expr));
+  gimplify_adjust_omp_clauses (pre_p, &OMP_TARGET_UPDATE_CLAUSES (expr));
   stmt = gimple_build_omp_target (NULL, GF_OMP_TARGET_KIND_UPDATE,
                                  OMP_TARGET_UPDATE_CLAUSES (expr));
 
index 47e7213..5085ccf 100644 (file)
@@ -77,6 +77,7 @@ extern enum gimplify_status gimplify_expr (tree *, gimple_seq *, gimple_seq *,
 extern void gimplify_type_sizes (tree, gimple_seq *);
 extern void gimplify_one_sizepos (tree *, gimple_seq *);
 extern gimple gimplify_body (tree, bool);
+extern enum gimplify_status gimplify_arg (tree *, gimple_seq *, location_t);
 extern void gimplify_function_tree (tree);
 extern enum gimplify_status gimplify_va_arg_expr (tree *, gimple_seq *,
                                                  gimple_seq *);
index 1c1505a..1af11e4 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 9a1d5b3..34fb528 100644 (file)
@@ -261,7 +261,7 @@ Archive_file::interpret_header(const Archive_header* hdr, off_t off,
   char size_string[size_string_size + 1];
   memcpy(size_string, hdr->ar_size, size_string_size);
   char* ps = size_string + size_string_size;
-  while (ps[-1] == ' ')
+  while (ps > size_string && ps[-1] == ' ')
     --ps;
   *ps = '\0';
 
index 1616963..3404ced 100644 (file)
@@ -598,7 +598,7 @@ Lex::next_token()
                }
              else if (p[1] == '*')
                {
-                 this->lineoff_ = p - this->linebuf_;
+                 this->lineoff_ = p + 2 - this->linebuf_;
                  Location location = this->location();
                  if (!this->skip_c_comment())
                    return Token::make_invalid_token(location);
index 2148a1a..e79adb3 100644 (file)
@@ -8966,9 +8966,8 @@ Type::finalize_methods(Gogo* gogo, const Type* type, Location location,
                       Methods** all_methods)
 {
   *all_methods = NULL;
-  Types_seen types_seen;
-  Type::add_methods_for_type(type, NULL, 0, false, false, &types_seen,
-                            all_methods);
+  std::vector<const Named_type*> seen;
+  Type::add_methods_for_type(type, NULL, 0, false, false, &seen, all_methods);
   Type::build_stub_methods(gogo, type, *all_methods, location);
 }
 
@@ -8986,7 +8985,7 @@ Type::add_methods_for_type(const Type* type,
                           unsigned int depth,
                           bool is_embedded_pointer,
                           bool needs_stub_method,
-                          Types_seen* types_seen,
+                          std::vector<const Named_type*>* seen,
                           Methods** methods)
 {
   // Pointer types may not have methods.
@@ -8996,19 +8995,24 @@ Type::add_methods_for_type(const Type* type,
   const Named_type* nt = type->named_type();
   if (nt != NULL)
     {
-      std::pair<Types_seen::iterator, bool> ins = types_seen->insert(nt);
-      if (!ins.second)
-       return;
-    }
+      for (std::vector<const Named_type*>::const_iterator p = seen->begin();
+          p != seen->end();
+          ++p)
+       {
+         if (*p == nt)
+           return;
+       }
 
-  if (nt != NULL)
-    Type::add_local_methods_for_type(nt, field_indexes, depth,
-                                    is_embedded_pointer, needs_stub_method,
-                                    methods);
+      seen->push_back(nt);
+
+      Type::add_local_methods_for_type(nt, field_indexes, depth,
+                                      is_embedded_pointer, needs_stub_method,
+                                      methods);
+    }
 
   Type::add_embedded_methods_for_type(type, field_indexes, depth,
                                      is_embedded_pointer, needs_stub_method,
-                                     types_seen, methods);
+                                     seen, methods);
 
   // If we are called with depth > 0, then we are looking at an
   // anonymous field of a struct.  If such a field has interface type,
@@ -9017,6 +9021,9 @@ Type::add_methods_for_type(const Type* type,
   // following the usual rules for an interface type.
   if (depth > 0)
     Type::add_interface_methods_for_type(type, field_indexes, depth, methods);
+
+  if (nt != NULL)
+      seen->pop_back();
 }
 
 // Add the local methods for the named type NT to *METHODS.  The
@@ -9062,7 +9069,7 @@ Type::add_embedded_methods_for_type(const Type* type,
                                    unsigned int depth,
                                    bool is_embedded_pointer,
                                    bool needs_stub_method,
-                                   Types_seen* types_seen,
+                                   std::vector<const Named_type*>* seen,
                                    Methods** methods)
 {
   // Look for anonymous fields in TYPE.  TYPE has fields if it is a
@@ -9106,7 +9113,7 @@ Type::add_embedded_methods_for_type(const Type* type,
                                 (needs_stub_method
                                  || is_pointer
                                  || i > 0),
-                                types_seen,
+                                seen,
                                 methods);
     }
 }
index 5fda4e7..acb06ca 100644 (file)
@@ -1171,14 +1171,11 @@ class Type
   static tree
   build_receive_return_type(tree type);
 
-  // A hash table we use to avoid infinite recursion.
-  typedef Unordered_set_hash(const Named_type*, Type_hash_identical,
-                            Type_identical) Types_seen;
-
   // Add all methods for TYPE to the list of methods for THIS.
   static void
   add_methods_for_type(const Type* type, const Method::Field_indexes*,
-                      unsigned int depth, bool, bool, Types_seen*,
+                      unsigned int depth, bool, bool,
+                      std::vector<const Named_type*>*,
                       Methods**);
 
   static void
@@ -1189,7 +1186,8 @@ class Type
   static void
   add_embedded_methods_for_type(const Type* type,
                                const Method::Field_indexes*,
-                               unsigned int depth, bool, bool, Types_seen*,
+                               unsigned int depth, bool, bool,
+                               std::vector<const Named_type*>*,
                                Methods**);
 
   static void
index b5e4a8c..635e21a 100644 (file)
@@ -219,7 +219,14 @@ graphite_can_represent_scev (tree scev)
 
   switch (TREE_CODE (scev))
     {
+    case NEGATE_EXPR:
+    case BIT_NOT_EXPR:
+    CASE_CONVERT:
+    case NON_LVALUE_EXPR:
+      return graphite_can_represent_scev (TREE_OPERAND (scev, 0));
+
     case PLUS_EXPR:
+    case POINTER_PLUS_EXPR:
     case MINUS_EXPR:
       return graphite_can_represent_scev (TREE_OPERAND (scev, 0))
        && graphite_can_represent_scev (TREE_OPERAND (scev, 1));
@@ -241,13 +248,15 @@ graphite_can_represent_scev (tree scev)
       if (!evolution_function_right_is_integer_cst (scev)
          || !graphite_can_represent_init (scev))
        return false;
+      return graphite_can_represent_scev (CHREC_LEFT (scev));
 
     default:
       break;
     }
 
   /* Only affine functions can be represented.  */
-  if (!scev_is_linear_expression (scev))
+  if (tree_contains_chrecs (scev, NULL)
+      || !scev_is_linear_expression (scev))
     return false;
 
   return true;
@@ -465,8 +474,10 @@ scopdet_basic_block_info (basic_block bb, loop_p outermost_loop,
       result.exits = false;
 
       /* Mark bbs terminating a SESE region difficult, if they start
-        a condition.  */
-      if (!single_succ_p (bb))
+        a condition or if the block it exits to cannot be split
+        with make_forwarder_block.  */
+      if (!single_succ_p (bb)
+         || bb_has_abnormal_pred (single_succ (bb)))
        result.difficult = true;
       else
        result.exit = single_succ (bb);
index 689378a..52d37fb 100644 (file)
@@ -433,6 +433,8 @@ determine_versionability (struct cgraph_node *node)
   else if (!opt_for_fn (node->decl, optimize)
           || !opt_for_fn (node->decl, flag_ipa_cp))
     reason = "non-optimized function";
+  else if (node->tm_clone)
+    reason = "transactional memory clone";
   else if (lookup_attribute ("omp declare simd", DECL_ATTRIBUTES (node->decl)))
     {
       /* Ideally we should clone the SIMD clones themselves and create
@@ -1587,15 +1589,7 @@ ipa_get_indirect_edge_target_1 (struct cgraph_edge *ie,
                   && DECL_FUNCTION_CODE (target) == BUILT_IN_UNREACHABLE)
                  || !possible_polymorphic_call_target_p
                       (ie, cgraph_get_node (target)))
-               {
-                 if (dump_file)
-                   fprintf (dump_file,
-                            "Type inconsident devirtualization: %s/%i->%s\n",
-                            ie->caller->name (), ie->caller->order,
-                            IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (target)));
-                 target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
-                 cgraph_get_create_node (target);
-               }
+               target = ipa_impossible_devirt_target (ie, target);
              return target;
            }
        }
@@ -1629,7 +1623,7 @@ ipa_get_indirect_edge_target_1 (struct cgraph_edge *ie,
       if (targets.length () == 1)
        target = targets[0]->decl;
       else
-       target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
+       target = ipa_impossible_devirt_target (ie, NULL_TREE);
     }
   else
     {
@@ -1643,15 +1637,7 @@ ipa_get_indirect_edge_target_1 (struct cgraph_edge *ie,
 
   if (target && !possible_polymorphic_call_target_p (ie,
                                                     cgraph_get_node (target)))
-    {
-      if (dump_file)
-       fprintf (dump_file,
-                "Type inconsident devirtualization: %s/%i->%s\n",
-                ie->caller->name (), ie->caller->order,
-                IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (target)));
-      target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
-      cgraph_get_create_node (target);
-    }
+    target = ipa_impossible_devirt_target (ie, target);
 
   return target;
 }
@@ -2482,7 +2468,8 @@ cgraph_edge_brings_value_p (struct cgraph_edge *cs,
                            struct ipcp_value_source *src)
 {
   struct ipa_node_params *caller_info = IPA_NODE_REF (cs->caller);
-  struct ipa_node_params *dst_info = IPA_NODE_REF (cs->callee);
+  cgraph_node *real_dest = cgraph_function_node (cs->callee);
+  struct ipa_node_params *dst_info = IPA_NODE_REF (real_dest);
 
   if ((dst_info->ipcp_orig_node && !dst_info->is_all_contexts_clone)
       || caller_info->node_dead)
index 03a6c5b..0671a8b 100644 (file)
@@ -987,6 +987,17 @@ give_up:
   context->outer_type = expected_type;
   context->offset = 0;
   context->maybe_derived_type = true;
+  context->maybe_in_construction = true;
+  /* POD can be changed to an instance of a polymorphic type by
+     placement new.  Here we play safe and assume that any
+     non-polymorphic type is POD.  */
+  if ((TREE_CODE (type) != RECORD_TYPE
+       || !TYPE_BINFO (type)
+       || !polymorphic_type_binfo_p (TYPE_BINFO (type)))
+      && (TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST
+         || (offset + tree_to_uhwi (TYPE_SIZE (expected_type)) <=
+             tree_to_uhwi (TYPE_SIZE (type)))))
+    return true;
   return false;
 }
 
@@ -1438,6 +1449,8 @@ possible_polymorphic_call_targets (tree otr_type,
     {
       if (completep)
        *completep = false;
+      if (cache_token)
+       *cache_token = NULL;
       if (nonconstruction_targetsp)
        *nonconstruction_targetsp = 0;
       return nodes;
@@ -1448,6 +1461,8 @@ possible_polymorphic_call_targets (tree otr_type,
     {
       if (completep)
        *completep = true;
+      if (cache_token)
+       *cache_token = NULL;
       if (nonconstruction_targetsp)
        *nonconstruction_targetsp = 0;
       return nodes;
@@ -1461,6 +1476,8 @@ possible_polymorphic_call_targets (tree otr_type,
     {
       if (completep)
        *completep = false;
+      if (cache_token)
+       *cache_token = NULL;
       if (nonconstruction_targetsp)
        *nonconstruction_targetsp = 0;
       return nodes;
index a45aab1..6f68631 100644 (file)
@@ -214,6 +214,7 @@ clone_inlined_nodes (struct cgraph_edge *e, bool duplicate,
    it is NULL. If UPDATE_OVERALL_SUMMARY is false, do not bother to recompute overall
    size of caller after inlining. Caller is required to eventually do it via
    inline_update_overall_summary.
+   If callee_removed is non-NULL, set it to true if we removed callee node.
 
    Return true iff any new callgraph edges were discovered as a
    result of inlining.  */
@@ -221,7 +222,8 @@ clone_inlined_nodes (struct cgraph_edge *e, bool duplicate,
 bool
 inline_call (struct cgraph_edge *e, bool update_original,
             vec<cgraph_edge_p> *new_edges,
-            int *overall_size, bool update_overall_summary)
+            int *overall_size, bool update_overall_summary,
+            bool *callee_removed)
 {
   int old_size = 0, new_size = 0;
   struct cgraph_node *to = NULL;
@@ -260,6 +262,8 @@ inline_call (struct cgraph_edge *e, bool update_original,
            {
              next_alias = cgraph_alias_target (alias);
              cgraph_remove_node (alias);
+             if (callee_removed)
+               *callee_removed = true;
              alias = next_alias;
            }
          else
index 4051819..dab3adf 100644 (file)
@@ -1961,6 +1961,8 @@ static bool
 inline_to_all_callers (struct cgraph_node *node, void *data)
 {
   int *num_calls = (int *)data;
+  bool callee_removed = false;
+
   while (node->callers && !node->global.inlined_to)
     {
       struct cgraph_node *caller = node->callers->caller;
@@ -1977,7 +1979,7 @@ inline_to_all_callers (struct cgraph_node *node, void *data)
                   inline_summary (node->callers->caller)->size);
        }
 
-      inline_call (node->callers, true, NULL, NULL, true);
+      inline_call (node->callers, true, NULL, NULL, true, &callee_removed);
       if (dump_file)
        fprintf (dump_file,
                 " Inlined into %s which now has %i size\n",
@@ -1987,8 +1989,10 @@ inline_to_all_callers (struct cgraph_node *node, void *data)
        {
          if (dump_file)
            fprintf (dump_file, "New calls found; giving up.\n");
-         return true;
+         return callee_removed;
        }
+      if (callee_removed)
+       return true;
     }
   return false;
 }
@@ -2107,8 +2111,9 @@ ipa_inline (void)
              int num_calls = 0;
              cgraph_for_node_and_aliases (node, sum_callers,
                                           &num_calls, true);
-             cgraph_for_node_and_aliases (node, inline_to_all_callers,
-                                          &num_calls, true);
+             while (cgraph_for_node_and_aliases (node, inline_to_all_callers,
+                                                 &num_calls, true))
+               ;
              remove_functions = true;
            }
        }
index 8ee075f..7860dec 100644 (file)
@@ -234,7 +234,8 @@ void compute_inline_parameters (struct cgraph_node *, bool);
 bool speculation_useful_p (struct cgraph_edge *e, bool anticipate_inlining);
 
 /* In ipa-inline-transform.c  */
-bool inline_call (struct cgraph_edge *, bool, vec<cgraph_edge_p> *, int *, bool);
+bool inline_call (struct cgraph_edge *, bool, vec<cgraph_edge_p> *, int *, bool,
+                 bool *callee_removed = NULL);
 unsigned int inline_transform (struct cgraph_node *);
 void clone_inlined_nodes (struct cgraph_edge *e, bool, bool, int *,
                          int freq_scale);
index 9f144fa..c3890f7 100644 (file)
@@ -2701,6 +2701,29 @@ try_make_edge_direct_simple_call (struct cgraph_edge *ie,
   return cs;
 }
 
+/* Return the target to be used in cases of impossible devirtualization.  IE
+   and target (the latter can be NULL) are dumped when dumping is enabled.  */
+
+tree
+ipa_impossible_devirt_target (struct cgraph_edge *ie, tree target)
+{
+  if (dump_file)
+    {
+      if (target)
+       fprintf (dump_file,
+                "Type inconsistent devirtualization: %s/%i->%s\n",
+                ie->caller->name (), ie->caller->order,
+                IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (target)));
+      else
+       fprintf (dump_file,
+                "No devirtualization target in %s/%i\n",
+                ie->caller->name (), ie->caller->order);
+    }
+  tree new_target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
+  cgraph_get_create_node (new_target);
+  return new_target;
+}
+
 /* Try to find a destination for indirect edge IE that corresponds to a virtual
    call based on a formal parameter which is described by jump function JFUNC
    and if it can be determined, make it direct and return the direct edge.
@@ -2735,15 +2758,7 @@ try_make_edge_direct_virtual_call (struct cgraph_edge *ie,
                   && DECL_FUNCTION_CODE (target) == BUILT_IN_UNREACHABLE)
                  || !possible_polymorphic_call_target_p
                       (ie, cgraph_get_node (target)))
-               {
-                 if (dump_file)
-                   fprintf (dump_file,
-                            "Type inconsident devirtualization: %s/%i->%s\n",
-                            ie->caller->name (), ie->caller->order,
-                            IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (target)));
-                 target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
-                 cgraph_get_create_node (target);
-               }
+               target = ipa_impossible_devirt_target (ie, target);
              return ipa_make_edge_direct_to_target (ie, target);
            }
        }
@@ -2773,10 +2788,7 @@ try_make_edge_direct_virtual_call (struct cgraph_edge *ie,
       if (targets.length () == 1)
        target = targets[0]->decl;
       else
-       {
-          target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
-         cgraph_get_create_node (target);
-       }
+       target = ipa_impossible_devirt_target (ie, NULL_TREE);
     }
   else
     {
@@ -2791,10 +2803,8 @@ try_make_edge_direct_virtual_call (struct cgraph_edge *ie,
 
   if (target)
     {
-#ifdef ENABLE_CHECKING
-      gcc_assert (possible_polymorphic_call_target_p
-        (ie, cgraph_get_node (target)));
-#endif
+      if (!possible_polymorphic_call_target_p (ie, cgraph_get_node (target)))
+       target = ipa_impossible_devirt_target (ie, target);
       return ipa_make_edge_direct_to_target (ie, target);
     }
   else
@@ -2877,16 +2887,20 @@ update_indirect_edges_after_inlining (struct cgraph_edge *cs,
       else if (jfunc->type == IPA_JF_PASS_THROUGH
               && ipa_get_jf_pass_through_operation (jfunc) == NOP_EXPR)
        {
-         if (ici->agg_contents
-             && !ipa_get_jf_pass_through_agg_preserved (jfunc))
+         if ((ici->agg_contents
+              && !ipa_get_jf_pass_through_agg_preserved (jfunc))
+             || (ici->polymorphic
+                 && !ipa_get_jf_pass_through_type_preserved (jfunc)))
            ici->param_index = -1;
          else
            ici->param_index = ipa_get_jf_pass_through_formal_id (jfunc);
        }
       else if (jfunc->type == IPA_JF_ANCESTOR)
        {
-         if (ici->agg_contents
-             && !ipa_get_jf_ancestor_agg_preserved (jfunc))
+         if ((ici->agg_contents
+              && !ipa_get_jf_ancestor_agg_preserved (jfunc))
+             || (ici->polymorphic
+                 && !ipa_get_jf_ancestor_type_preserved (jfunc)))
            ici->param_index = -1;
          else
            {
@@ -3650,6 +3664,7 @@ ipa_modify_formal_parameters (tree fndecl, ipa_parm_adjustment_vec adjustments)
 
   TREE_TYPE (fndecl) = new_type;
   DECL_VIRTUAL_P (fndecl) = 0;
+  DECL_LANG_SPECIFIC (fndecl) = NULL;
   otypes.release ();
   oparms.release ();
 }
index 8fdd92c..70185b2 100644 (file)
@@ -585,6 +585,7 @@ tree ipa_get_indirect_edge_target (struct cgraph_edge *ie,
 struct cgraph_edge *ipa_make_edge_direct_to_target (struct cgraph_edge *, tree);
 tree ipa_binfo_from_known_type_jfunc (struct ipa_jump_func *);
 tree ipa_intraprocedural_devirtualization (gimple);
+tree ipa_impossible_devirt_target (struct cgraph_edge *, tree);
 
 /* Functions related to both.  */
 void ipa_analyze_node (struct cgraph_node *);
index 26e9b03..ebaa82d 100644 (file)
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -415,7 +415,18 @@ symtab_remove_unreachable_nodes (bool before_inlining_p, FILE *file)
                          || !DECL_EXTERNAL (e->callee->decl)
                          || e->callee->alias
                          || before_inlining_p))
-                   pointer_set_insert (reachable, e->callee);
+                   {
+                     /* Be sure that we will not optimize out alias target
+                        body.  */
+                     if (DECL_EXTERNAL (e->callee->decl)
+                         && e->callee->alias
+                         && before_inlining_p)
+                       {
+                         pointer_set_insert (reachable,
+                                             cgraph_function_node (e->callee));
+                       }
+                     pointer_set_insert (reachable, e->callee);
+                   }
                  enqueue_node (e->callee, &first, reachable);
                }
 
@@ -506,6 +517,7 @@ symtab_remove_unreachable_nodes (bool before_inlining_p, FILE *file)
              if (!node->in_other_partition)
                node->local.local = false;
              cgraph_node_remove_callees (node);
+             symtab_remove_from_same_comdat_group (node);
              ipa_remove_all_references (&node->ref_list);
              changed = true;
            }
@@ -561,6 +573,8 @@ symtab_remove_unreachable_nodes (bool before_inlining_p, FILE *file)
          vnode->analyzed = false;
          vnode->aux = NULL;
 
+         symtab_remove_from_same_comdat_group (vnode);
+
          /* Keep body if it may be useful for constant folding.  */
          if ((init = ctor_for_folding (vnode->decl)) == error_mark_node)
            varpool_remove_initializer (vnode);
@@ -697,6 +711,8 @@ address_taken_from_non_vtable_p (symtab_node *node)
 static bool
 comdat_can_be_unshared_p_1 (symtab_node *node)
 {
+  if (!node->externally_visible)
+    return true;
   /* When address is taken, we don't know if equality comparison won't
      break eventually. Exception are virutal functions, C++
      constructors/destructors and vtables, where this is not possible by
index 648806b..43006f7 100644 (file)
@@ -407,6 +407,8 @@ record_reg_classes (int n_alts, int n_ops, rtx *ops,
   int alt;
   int i, j, k;
   int insn_allows_mem[MAX_RECOG_OPERANDS];
+  move_table *move_in_cost, *move_out_cost;
+  short (*mem_cost)[2];
 
   for (i = 0; i < n_ops; i++)
     insn_allows_mem[i] = 0;
@@ -517,41 +519,78 @@ record_reg_classes (int n_alts, int n_ops, rtx *ops,
                  bool in_p = recog_data.operand_type[i] != OP_OUT;
                  bool out_p = recog_data.operand_type[i] != OP_IN;
                  enum reg_class op_class = classes[i];
-                 move_table *move_in_cost, *move_out_cost;
 
                  ira_init_register_move_cost_if_necessary (mode);
                  if (! in_p)
                    {
                      ira_assert (out_p);
-                     move_out_cost = ira_may_move_out_cost[mode];
-                     for (k = cost_classes_ptr->num - 1; k >= 0; k--)
+                     if (op_class == NO_REGS)
                        {
-                         rclass = cost_classes[k];
-                         pp_costs[k]
-                           = move_out_cost[op_class][rclass] * frequency;
+                         mem_cost = ira_memory_move_cost[mode];
+                         for (k = cost_classes_ptr->num - 1; k >= 0; k--)
+                           {
+                             rclass = cost_classes[k];
+                             pp_costs[k] = mem_cost[rclass][0] * frequency;
+                           }
+                       }
+                     else
+                       {
+                         move_out_cost = ira_may_move_out_cost[mode];
+                         for (k = cost_classes_ptr->num - 1; k >= 0; k--)
+                           {
+                             rclass = cost_classes[k];
+                             pp_costs[k]
+                               = move_out_cost[op_class][rclass] * frequency;
+                           }
                        }
                    }
                  else if (! out_p)
                    {
                      ira_assert (in_p);
-                     move_in_cost = ira_may_move_in_cost[mode];
-                     for (k = cost_classes_ptr->num - 1; k >= 0; k--)
+                     if (op_class == NO_REGS)
                        {
-                         rclass = cost_classes[k];
-                         pp_costs[k]
-                           = move_in_cost[rclass][op_class] * frequency;
+                         mem_cost = ira_memory_move_cost[mode];
+                         for (k = cost_classes_ptr->num - 1; k >= 0; k--)
+                           {
+                             rclass = cost_classes[k];
+                             pp_costs[k] = mem_cost[rclass][1] * frequency;
+                           }
+                       }
+                     else
+                       {
+                         move_in_cost = ira_may_move_in_cost[mode];
+                         for (k = cost_classes_ptr->num - 1; k >= 0; k--)
+                           {
+                             rclass = cost_classes[k];
+                             pp_costs[k]
+                               = move_in_cost[rclass][op_class] * frequency;
+                           }
                        }
                    }
                  else
                    {
-                     move_in_cost = ira_may_move_in_cost[mode];
-                     move_out_cost = ira_may_move_out_cost[mode];
-                     for (k = cost_classes_ptr->num - 1; k >= 0; k--)
+                     if (op_class == NO_REGS)
                        {
-                         rclass = cost_classes[k];
-                         pp_costs[k] = ((move_in_cost[rclass][op_class]
-                                         + move_out_cost[op_class][rclass])
-                                        * frequency);
+                         mem_cost = ira_memory_move_cost[mode];
+                         for (k = cost_classes_ptr->num - 1; k >= 0; k--)
+                           {
+                             rclass = cost_classes[k];
+                             pp_costs[k] = ((mem_cost[rclass][0]
+                                             + mem_cost[rclass][1])
+                                            * frequency);
+                           }
+                       }
+                     else
+                       {
+                         move_in_cost = ira_may_move_in_cost[mode];
+                         move_out_cost = ira_may_move_out_cost[mode];
+                         for (k = cost_classes_ptr->num - 1; k >= 0; k--)
+                           {
+                             rclass = cost_classes[k];
+                             pp_costs[k] = ((move_in_cost[rclass][op_class]
+                                             + move_out_cost[op_class][rclass])
+                                            * frequency);
+                           }
                        }
                    }
 
@@ -762,10 +801,11 @@ record_reg_classes (int n_alts, int n_ops, rtx *ops,
             into that class.  */
          if (REG_P (op) && REGNO (op) >= FIRST_PSEUDO_REGISTER)
            {
-             if (classes[i] == NO_REGS)
+             if (classes[i] == NO_REGS && ! allows_mem[i])
                {
                  /* We must always fail if the operand is a REG, but
-                    we did not find a suitable class.
+                    we did not find a suitable class and memory is
+                    not allowed.
 
                     Otherwise we may perform an uninitialized read
                     from this_op_costs after the `continue' statement
@@ -782,51 +822,94 @@ record_reg_classes (int n_alts, int n_ops, rtx *ops,
                  bool in_p = recog_data.operand_type[i] != OP_OUT;
                  bool out_p = recog_data.operand_type[i] != OP_IN;
                  enum reg_class op_class = classes[i];
-                 move_table *move_in_cost, *move_out_cost;
 
                  ira_init_register_move_cost_if_necessary (mode);
                  if (! in_p)
                    {
                      ira_assert (out_p);
-                     move_out_cost = ira_may_move_out_cost[mode];
-                     for (k = cost_classes_ptr->num - 1; k >= 0; k--)
+                     if (op_class == NO_REGS)
                        {
-                         rclass = cost_classes[k];
-                         pp_costs[k]
-                           = move_out_cost[op_class][rclass] * frequency;
+                         mem_cost = ira_memory_move_cost[mode];
+                         for (k = cost_classes_ptr->num - 1; k >= 0; k--)
+                           {
+                             rclass = cost_classes[k];
+                             pp_costs[k] = mem_cost[rclass][0] * frequency;
+                           }
+                       }
+                     else
+                       {
+                         move_out_cost = ira_may_move_out_cost[mode];
+                         for (k = cost_classes_ptr->num - 1; k >= 0; k--)
+                           {
+                             rclass = cost_classes[k];
+                             pp_costs[k]
+                               = move_out_cost[op_class][rclass] * frequency;
+                           }
                        }
                    }
                  else if (! out_p)
                    {
                      ira_assert (in_p);
-                     move_in_cost = ira_may_move_in_cost[mode];
-                     for (k = cost_classes_ptr->num - 1; k >= 0; k--)
+                     if (op_class == NO_REGS)
+                       {
+                         mem_cost = ira_memory_move_cost[mode];
+                         for (k = cost_classes_ptr->num - 1; k >= 0; k--)
+                           {
+                             rclass = cost_classes[k];
+                             pp_costs[k] = mem_cost[rclass][1] * frequency;
+                           }
+                       }
+                     else
                        {
-                         rclass = cost_classes[k];
-                         pp_costs[k]
-                           = move_in_cost[rclass][op_class] * frequency;
+                         move_in_cost = ira_may_move_in_cost[mode];
+                         for (k = cost_classes_ptr->num - 1; k >= 0; k--)
+                           {
+                             rclass = cost_classes[k];
+                             pp_costs[k]
+                               = move_in_cost[rclass][op_class] * frequency;
+                           }
                        }
                    }
                  else
                    {
-                     move_in_cost = ira_may_move_in_cost[mode];
-                     move_out_cost = ira_may_move_out_cost[mode];
-                     for (k = cost_classes_ptr->num - 1; k >= 0; k--)
+                     if (op_class == NO_REGS)
                        {
-                         rclass = cost_classes[k];
-                         pp_costs[k] = ((move_in_cost[rclass][op_class]
-                                         + move_out_cost[op_class][rclass])
-                                        * frequency);
+                         mem_cost = ira_memory_move_cost[mode];
+                         for (k = cost_classes_ptr->num - 1; k >= 0; k--)
+                           {
+                             rclass = cost_classes[k];
+                             pp_costs[k] = ((mem_cost[rclass][0]
+                                             + mem_cost[rclass][1])
+                                            * frequency);
+                           }
+                       }
+                     else
+                       {
+                         move_in_cost = ira_may_move_in_cost[mode];
+                         move_out_cost = ira_may_move_out_cost[mode];
+                         for (k = cost_classes_ptr->num - 1; k >= 0; k--)
+                           {
+                             rclass = cost_classes[k];
+                             pp_costs[k] = ((move_in_cost[rclass][op_class]
+                                             + move_out_cost[op_class][rclass])
+                                            * frequency);
+                           }
                        }
                    }
 
-                 /* If the alternative actually allows memory, make
-                    things a bit cheaper since we won't need an extra
-                    insn to load it.  */
-                 pp->mem_cost
-                   = ((out_p ? ira_memory_move_cost[mode][op_class][0] : 0)
-                      + (in_p ? ira_memory_move_cost[mode][op_class][1] : 0)
-                      - allows_mem[i]) * frequency;
+                 if (op_class == NO_REGS)
+                   /* Although we don't need insn to reload from
+                      memory, still accessing memory is usually more
+                      expensive than a register.  */
+                   pp->mem_cost = frequency;
+                 else
+                   /* If the alternative actually allows memory, make
+                      things a bit cheaper since we won't need an
+                      extra insn to load it.  */
+                   pp->mem_cost
+                     = ((out_p ? ira_memory_move_cost[mode][op_class][0] : 0)
+                        + (in_p ? ira_memory_move_cost[mode][op_class][1] : 0)
+                        - allows_mem[i]) * frequency;
                  /* If we have assigned a class to this allocno in
                     our first pass, add a cost to this alternative
                     corresponding to what we would add if this
@@ -836,15 +919,28 @@ record_reg_classes (int n_alts, int n_ops, rtx *ops,
                      enum reg_class pref_class = pref[COST_INDEX (REGNO (op))];
 
                      if (pref_class == NO_REGS)
+                       {
+                         if (op_class != NO_REGS)
+                           alt_cost
+                             += ((out_p
+                                  ? ira_memory_move_cost[mode][op_class][0]
+                                  : 0)
+                                 + (in_p
+                                    ? ira_memory_move_cost[mode][op_class][1]
+                                    : 0));
+                       }
+                     else if (op_class == NO_REGS)
                        alt_cost
                          += ((out_p
-                              ? ira_memory_move_cost[mode][op_class][0] : 0)
+                              ? ira_memory_move_cost[mode][pref_class][1]
+                              : 0)
                              + (in_p
-                                ? ira_memory_move_cost[mode][op_class][1]
+                                ? ira_memory_move_cost[mode][pref_class][0]
                                 : 0));
                      else if (ira_reg_class_intersect[pref_class][op_class]
                               == NO_REGS)
-                       alt_cost += ira_register_move_cost[mode][pref_class][op_class];
+                       alt_cost += (ira_register_move_cost
+                                    [mode][pref_class][op_class]);
                    }
                }
            }
index c806f62..b9185f1 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 95bd379..20cb12a 100644 (file)
@@ -74,6 +74,7 @@ extern bool lhd_handle_option (size_t, const char *, int, int, location_t,
 extern int lhd_gimplify_expr (tree *, gimple_seq *, gimple_seq *);
 extern enum omp_clause_default_kind lhd_omp_predetermined_sharing (tree);
 extern tree lhd_omp_assignment (tree, tree, tree);
+extern void lhd_omp_finish_clause (tree, gimple_seq *);
 struct gimplify_omp_ctx;
 extern void lhd_omp_firstprivatize_type_sizes (struct gimplify_omp_ctx *,
                                               tree);
@@ -211,8 +212,9 @@ extern tree lhd_make_node (enum tree_code);
 #define LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR hook_tree_tree_tree_tree_null
 #define LANG_HOOKS_OMP_CLAUSE_COPY_CTOR lhd_omp_assignment
 #define LANG_HOOKS_OMP_CLAUSE_ASSIGN_OP lhd_omp_assignment
+#define LANG_HOOKS_OMP_CLAUSE_LINEAR_CTOR NULL
 #define LANG_HOOKS_OMP_CLAUSE_DTOR hook_tree_tree_tree_null
-#define LANG_HOOKS_OMP_FINISH_CLAUSE hook_void_tree
+#define LANG_HOOKS_OMP_FINISH_CLAUSE lhd_omp_finish_clause
 
 #define LANG_HOOKS_DECLS { \
   LANG_HOOKS_GLOBAL_BINDINGS_P, \
@@ -234,6 +236,7 @@ extern tree lhd_make_node (enum tree_code);
   LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR, \
   LANG_HOOKS_OMP_CLAUSE_COPY_CTOR, \
   LANG_HOOKS_OMP_CLAUSE_ASSIGN_OP, \
+  LANG_HOOKS_OMP_CLAUSE_LINEAR_CTOR, \
   LANG_HOOKS_OMP_CLAUSE_DTOR, \
   LANG_HOOKS_OMP_FINISH_CLAUSE \
 }
index d00ebd8..307af44 100644 (file)
@@ -515,6 +515,13 @@ lhd_omp_assignment (tree clause ATTRIBUTE_UNUSED, tree dst, tree src)
   return build2 (MODIFY_EXPR, TREE_TYPE (dst), dst, src);
 }
 
+/* Finalize clause C.  */
+
+void
+lhd_omp_finish_clause (tree, gimple_seq *)
+{
+}
+
 /* Register language specific type size variables as potentially OpenMP
    firstprivate variables.  */
 
index c848b0c..b5997ee 100644 (file)
@@ -219,12 +219,16 @@ struct lang_hooks_for_decls
   /* Similarly, except use an assignment operator instead.  */
   tree (*omp_clause_assign_op) (tree clause, tree dst, tree src);
 
+  /* Build and return code for a constructor of DST that sets it to
+     SRC + ADD.  */
+  tree (*omp_clause_linear_ctor) (tree clause, tree dst, tree src, tree add);
+
   /* Build and return code destructing DECL.  Return NULL if nothing
      to be done.  */
   tree (*omp_clause_dtor) (tree clause, tree decl);
 
   /* Do language specific checking on an implicitly determined clause.  */
-  void (*omp_finish_clause) (tree clause);
+  void (*omp_finish_clause) (tree clause, gimple_seq *pre_p);
 };
 
 /* Language hooks related to LTO serialization.  */
index 2c2c269..4cc561c 100644 (file)
@@ -94,20 +94,15 @@ loop_optimizer_init (unsigned flags)
   else
     {
       bool recorded_exits = loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS);
+      bool needs_fixup = loops_state_satisfies_p (LOOPS_NEED_FIXUP);
 
       gcc_assert (cfun->curr_properties & PROP_loops);
 
       /* Ensure that the dominators are computed, like flow_loops_find does.  */
       calculate_dominance_info (CDI_DOMINATORS);
 
-      if (loops_state_satisfies_p (LOOPS_NEED_FIXUP))
-       {
-         loops_state_clear (~0U);
-         fix_loop_structure (NULL);
-       }
-
 #ifdef ENABLE_CHECKING
-      else
+      if (!needs_fixup)
        verify_loop_structure ();
 #endif
 
@@ -115,6 +110,14 @@ loop_optimizer_init (unsigned flags)
       if (recorded_exits)
        release_recorded_exits ();
       loops_state_clear (~0U);
+
+      if (needs_fixup)
+       {
+         /* Apply LOOPS_MAY_HAVE_MULTIPLE_LATCHES early as fix_loop_structure
+            re-applies flags.  */
+         loops_state_set (flags & LOOPS_MAY_HAVE_MULTIPLE_LATCHES);
+         fix_loop_structure (NULL);
+       }
     }
 
   /* Apply flags to loops.  */
index aac5087..3970081 100644 (file)
@@ -1231,6 +1231,8 @@ insert_move_for_subreg (rtx *before, rtx *after, rtx origreg, rtx newreg)
     }
 }
 
+static int valid_address_p (enum machine_mode mode, rtx addr, addr_space_t as);
+
 /* Make reloads for subreg in operand NOP with internal subreg mode
    REG_MODE, add new reloads for further processing.  Return true if
    any reload was generated.  */
@@ -1261,10 +1263,26 @@ simplify_operand_subreg (int nop, enum machine_mode reg_mode)
      equivalences in function lra_constraints) and because for spilled
      pseudos we allocate stack memory enough for the biggest
      corresponding paradoxical subreg.  */
-  if ((MEM_P (reg)
-       && (! SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (reg))
-          || MEM_ALIGN (reg) >= GET_MODE_ALIGNMENT (mode)))
-      || (REG_P (reg) && REGNO (reg) < FIRST_PSEUDO_REGISTER))
+  if (MEM_P (reg)
+      && (! SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (reg))
+         || MEM_ALIGN (reg) >= GET_MODE_ALIGNMENT (mode)))
+    {
+      rtx subst, old = *curr_id->operand_loc[nop];
+
+      alter_subreg (curr_id->operand_loc[nop], false);
+      subst = *curr_id->operand_loc[nop];
+      lra_assert (MEM_P (subst));
+      if (! valid_address_p (GET_MODE (reg), XEXP (reg, 0),
+                            MEM_ADDR_SPACE (reg))
+         || valid_address_p (GET_MODE (subst), XEXP (subst, 0),
+                             MEM_ADDR_SPACE (subst)))
+       return true;
+      /* If the address was valid and became invalid, prefer to reload
+        the memory.  Typical case is when the index scale should
+        correspond the memory.  */
+      *curr_id->operand_loc[nop] = old;
+    }
+  else if (REG_P (reg) && REGNO (reg) < FIRST_PSEUDO_REGISTER)
     {
       alter_subreg (curr_id->operand_loc[nop], false);
       return true;
@@ -2787,9 +2805,14 @@ equiv_address_substitution (struct address_info *ad)
 
    Add reloads to the lists *BEFORE and *AFTER.  We might need to add
    reloads to *AFTER because of inc/dec, {pre, post} modify in the
-   address.  Return true for any RTL change.  */
+   address.  Return true for any RTL change.
+
+   The function is a helper function which does not produce all
+   transformations which can be necessary.  It does just basic steps.
+   To do all necessary transformations use function
+   process_address.  */
 static bool
-process_address (int nop, rtx *before, rtx *after)
+process_address_1 (int nop, rtx *before, rtx *after)
 {
   struct address_info ad;
   rtx new_reg;
@@ -2972,6 +2995,13 @@ process_address (int nop, rtx *before, rtx *after)
       *ad.inner = simplify_gen_binary (PLUS, GET_MODE (new_reg),
                                       new_reg, *ad.index);
     }
+  else if (get_index_scale (&ad) == 1)
+    {
+      /* The last transformation to one reg will be made in
+        curr_insn_transform function.  */
+      end_sequence ();
+      return false;
+    }
   else
     {
       /* base + scale * index => base + new_reg,
@@ -2989,6 +3019,18 @@ process_address (int nop, rtx *before, rtx *after)
   return true;
 }
 
+/* Do address reloads until it is necessary.  Use process_address_1 as
+   a helper function.  Return true for any RTL changes.  */
+static bool
+process_address (int nop, rtx *before, rtx *after)
+{
+  bool res = false;
+
+  while (process_address_1 (nop, before, after))
+    res = true;
+  return res;
+}
+
 /* Emit insns to reload VALUE into a new register.  VALUE is an
    auto-increment or auto-decrement RTX whose operand is a register or
    memory location; so reloading involves incrementing that location.
@@ -3273,7 +3315,7 @@ curr_insn_transform (void)
        change_p = true;
        lra_update_dup (curr_id, i);
       }
-
+  
   if (change_p)
     /* If we've changed the instruction then any alternative that
        we chose previously may no longer be valid.  */
index abdf697..2787820 100644 (file)
@@ -565,6 +565,16 @@ lra_eliminate_regs_1 (rtx insn, rtx x, enum machine_mode mem_mode,
              alter_subreg (&x, false);
              return x;
            }
+         else if (! subst_p)
+           {
+             /* LRA can transform subregs itself.  So don't call
+                simplify_gen_subreg until LRA transformations are
+                finished.  Function simplify_gen_subreg can do
+                non-trivial transformations (like truncation) which
+                might make LRA work to fail.  */
+             SUBREG_REG (x) = new_rtx;
+             return x;
+           }
          else
            return simplify_gen_subreg (GET_MODE (x), new_rtx,
                                        GET_MODE (new_rtx), SUBREG_BYTE (x));
index 69b5a79..b193d73 100644 (file)
@@ -2022,6 +2022,29 @@ copy_function (struct cgraph_node *node)
   lto_end_section ();
 }
 
+/* Wrap symbol references in *TP inside a type-preserving MEM_REF.  */
+
+static tree
+wrap_refs (tree *tp, int *ws, void *)
+{
+  tree t = *tp;
+  if (handled_component_p (t)
+      && TREE_CODE (TREE_OPERAND (t, 0)) == VAR_DECL)
+    {
+      tree decl = TREE_OPERAND (t, 0);
+      tree ptrtype = build_pointer_type (TREE_TYPE (decl));
+      TREE_OPERAND (t, 0) = build2 (MEM_REF, TREE_TYPE (decl),
+                                   build1 (ADDR_EXPR, ptrtype, decl),
+                                   build_int_cst (ptrtype, 0));
+      TREE_THIS_VOLATILE (TREE_OPERAND (t, 0)) = TREE_THIS_VOLATILE (decl);
+      *ws = 0;
+    }
+  else if (TREE_CODE (t) == CONSTRUCTOR)
+    ;
+  else if (!EXPR_P (t))
+    *ws = 0;
+  return NULL_TREE;
+}
 
 /* Main entry point from the pass manager.  */
 
@@ -2043,24 +2066,33 @@ lto_output (void)
   for (i = 0; i < n_nodes; i++)
     {
       symtab_node *snode = lto_symtab_encoder_deref (encoder, i);
-      cgraph_node *node = dyn_cast <cgraph_node> (snode);
-      if (node
-         && lto_symtab_encoder_encode_body_p (encoder, node)
-         && !node->alias)
+      if (cgraph_node *node = dyn_cast <cgraph_node> (snode))
        {
+         if (lto_symtab_encoder_encode_body_p (encoder, node)
+             && !node->alias)
+           {
 #ifdef ENABLE_CHECKING
-         gcc_assert (!bitmap_bit_p (output, DECL_UID (node->decl)));
-         bitmap_set_bit (output, DECL_UID (node->decl));
+             gcc_assert (!bitmap_bit_p (output, DECL_UID (node->decl)));
+             bitmap_set_bit (output, DECL_UID (node->decl));
 #endif
-         decl_state = lto_new_out_decl_state ();
-         lto_push_out_decl_state (decl_state);
-         if (gimple_has_body_p (node->decl) || !flag_wpa)
-           output_function (node);
-         else
-           copy_function (node);
-         gcc_assert (lto_get_out_decl_state () == decl_state);
-         lto_pop_out_decl_state ();
-         lto_record_function_out_decl_state (node->decl, decl_state);
+             decl_state = lto_new_out_decl_state ();
+             lto_push_out_decl_state (decl_state);
+             if (gimple_has_body_p (node->decl) || !flag_wpa)
+               output_function (node);
+             else
+               copy_function (node);
+             gcc_assert (lto_get_out_decl_state () == decl_state);
+             lto_pop_out_decl_state ();
+             lto_record_function_out_decl_state (node->decl, decl_state);
+           }
+       }
+      else if (varpool_node *node = dyn_cast <varpool_node> (snode))
+       {
+         /* Wrap symbol references inside the ctor in a type
+            preserving MEM_REF.  */
+         tree ctor = DECL_INITIAL (node->decl);
+         if (ctor && !in_lto_p)
+           walk_tree (&ctor, wrap_refs, NULL, NULL);
        }
     }
 
index b396e48..c029da6 100644 (file)
@@ -1,3 +1,12 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
+2014-04-22  Jan Hubicka  <hubicka@ucw.cz>
+
+       PR lto/61012
+       * lto-symtab.c (lto_symtab_merge_decls_1):
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 71242c8..e77448e 100644 (file)
@@ -453,7 +453,12 @@ lto_symtab_merge_decls_1 (symtab_node *first)
      cgraph or a varpool node.  */
   if (!prevailing)
     {
-      prevailing = first;
+      for (prevailing = first;
+          prevailing; prevailing = prevailing->next_sharing_asm_name)
+       if (lto_symtab_symbol_p (prevailing))
+         break;
+      if (!prevailing)
+       return;
       /* For variables chose with a priority variant with vnode
         attached (i.e. from unit where external declaration of
         variable is actually used).
index de619ae..2443c61 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 19f43bc..cba09a4 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 11bb2d3..a605c45 100644 (file)
@@ -1509,11 +1509,19 @@ scan_sharing_clauses (tree clauses, omp_context *ctx)
          break;
 
        case OMP_CLAUSE_SHARED:
+         decl = OMP_CLAUSE_DECL (c);
          /* Ignore shared directives in teams construct.  */
          if (gimple_code (ctx->stmt) == GIMPLE_OMP_TEAMS)
-           break;
+           {
+             /* Global variables don't need to be copied,
+                the receiver side will use them directly.  */
+             tree odecl = maybe_lookup_decl_in_outer_ctx (decl, ctx);
+             if (is_global_var (odecl))
+               break;
+             insert_decl_map (&ctx->cb, decl, odecl);
+             break;
+           }
          gcc_assert (is_taskreg_ctx (ctx));
-         decl = OMP_CLAUSE_DECL (c);
          gcc_assert (!COMPLETE_TYPE_P (TREE_TYPE (decl))
                      || !is_variable_sized (decl));
          /* Global variables don't need to be copied,
@@ -1670,6 +1678,11 @@ scan_sharing_clauses (tree clauses, omp_context *ctx)
                }
              else
                {
+                 if (ctx->outer)
+                   {
+                     scan_omp_op (&OMP_CLAUSE_DECL (c), ctx->outer);
+                     decl = OMP_CLAUSE_DECL (c);
+                   }
                  gcc_assert (!splay_tree_lookup (ctx->field_map,
                                                  (splay_tree_key) decl));
                  tree field
@@ -1730,6 +1743,9 @@ scan_sharing_clauses (tree clauses, omp_context *ctx)
          if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
              && OMP_CLAUSE_REDUCTION_PLACEHOLDER (c))
            scan_array_reductions = true;
+         else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LINEAR
+                  && OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c))
+           scan_array_reductions = true;
          break;
 
        case OMP_CLAUSE_SHARED:
@@ -1816,6 +1832,9 @@ scan_sharing_clauses (tree clauses, omp_context *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.  */
@@ -1997,6 +2016,7 @@ scan_omp_parallel (gimple_stmt_iterator *gsi, omp_context *outer_ctx)
              tree temp = create_tmp_var (type, NULL);
              tree c = build_omp_clause (UNKNOWN_LOCATION,
                                         OMP_CLAUSE__LOOPTEMP_);
+             insert_decl_map (&outer_ctx->cb, temp, temp);
              OMP_CLAUSE_DECL (c) = temp;
              OMP_CLAUSE_CHAIN (c) = gimple_omp_parallel_clauses (stmt);
              gimple_omp_parallel_set_clauses (stmt, c);
@@ -2494,6 +2514,23 @@ check_omp_nesting_restrictions (gimple stmt, omp_context *ctx)
          return false;
        }
       break;
+    case GIMPLE_OMP_TARGET:
+      for (; ctx != NULL; ctx = ctx->outer)
+       if (gimple_code (ctx->stmt) == GIMPLE_OMP_TARGET
+           && gimple_omp_target_kind (ctx->stmt) == GF_OMP_TARGET_KIND_REGION)
+         {
+           const char *name;
+           switch (gimple_omp_target_kind (stmt))
+             {
+             case GF_OMP_TARGET_KIND_REGION: name = "target"; break;
+             case GF_OMP_TARGET_KIND_DATA: name = "target data"; break;
+             case GF_OMP_TARGET_KIND_UPDATE: name = "target update"; break;
+             default: gcc_unreachable ();
+             }
+           warning_at (gimple_location (stmt), 0,
+                       "%s construct inside of target region", name);
+         }
+      break;
     default:
       break;
     }
@@ -2961,8 +2998,10 @@ lower_rec_simd_input_clauses (tree new_var, omp_context *ctx, int &max_vf,
        {
          tree c = find_omp_clause (gimple_omp_for_clauses (ctx->stmt),
                                    OMP_CLAUSE_SAFELEN);
-         if (c
-             && compare_tree_int (OMP_CLAUSE_SAFELEN_EXPR (c), max_vf) == -1)
+         if (c && TREE_CODE (OMP_CLAUSE_SAFELEN_EXPR (c)) != INTEGER_CST)
+           max_vf = 1;
+         else if (c && compare_tree_int (OMP_CLAUSE_SAFELEN_EXPR (c),
+                                         max_vf) == -1)
            max_vf = tree_to_shwi (OMP_CLAUSE_SAFELEN_EXPR (c));
        }
       if (max_vf > 1)
@@ -2994,6 +3033,27 @@ lower_rec_simd_input_clauses (tree new_var, omp_context *ctx, int &max_vf,
   return true;
 }
 
+/* Helper function of lower_rec_input_clauses.  For a reference
+   in simd reduction, add an underlying variable it will reference.  */
+
+static void
+handle_simd_reference (location_t loc, tree new_vard, gimple_seq *ilist)
+{
+  tree z = TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (new_vard)));
+  if (TREE_CONSTANT (z))
+    {
+      const char *name = NULL;
+      if (DECL_NAME (new_vard))
+       name = IDENTIFIER_POINTER (DECL_NAME (new_vard));
+
+      z = create_tmp_var_raw (TREE_TYPE (TREE_TYPE (new_vard)), name);
+      gimple_add_tmp_var (z);
+      TREE_ADDRESSABLE (z) = 1;
+      z = build_fold_addr_expr_loc (loc, z);
+      gimplify_assign (new_vard, z, ilist);
+    }
+}
+
 /* Generate code to implement the input clauses, FIRSTPRIVATE and COPYIN,
    from the receiver (aka child) side and initializers for REFERENCE_TYPE
    private variables.  Initialization statements go in ILIST, while calls
@@ -3025,11 +3085,14 @@ lower_rec_input_clauses (tree clauses, gimple_seq *ilist, gimple_seq *dlist,
     for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
       switch (OMP_CLAUSE_CODE (c))
        {
+       case OMP_CLAUSE_LINEAR:
+         if (OMP_CLAUSE_LINEAR_ARRAY (c))
+           max_vf = 1;
+         /* FALLTHRU */
        case OMP_CLAUSE_REDUCTION:
        case OMP_CLAUSE_PRIVATE:
        case OMP_CLAUSE_FIRSTPRIVATE:
        case OMP_CLAUSE_LASTPRIVATE:
-       case OMP_CLAUSE_LINEAR:
          if (is_variable_sized (OMP_CLAUSE_DECL (c)))
            max_vf = 1;
          break;
@@ -3085,6 +3148,13 @@ lower_rec_input_clauses (tree clauses, gimple_seq *ilist, gimple_seq *dlist,
                  if (pass != 0)
                    continue;
                }
+             /* Even without corresponding firstprivate, if
+                decl is Fortran allocatable, it needs outer var
+                reference.  */
+             else if (pass == 0
+                      && lang_hooks.decls.omp_private_outer_ref
+                                                       (OMP_CLAUSE_DECL (c)))
+               lastprivate_firstprivate = true;
              break;
            case OMP_CLAUSE_ALIGNED:
              if (pass == 0)
@@ -3185,13 +3255,11 @@ lower_rec_input_clauses (tree clauses, gimple_seq *ilist, gimple_seq *dlist,
                }
              else if (TREE_CONSTANT (x))
                {
-                 /* For reduction with placeholder in SIMD loop,
-                    defer adding the initialization of the reference,
-                    because if we decide to use SIMD array for it,
-                    the initilization could cause expansion ICE.  */
-                 if (c_kind == OMP_CLAUSE_REDUCTION
-                     && OMP_CLAUSE_REDUCTION_PLACEHOLDER (c)
-                     && is_simd)
+                 /* For reduction in SIMD loop, defer adding the
+                    initialization of the reference, because if we decide
+                    to use SIMD array for it, the initilization could cause
+                    expansion ICE.  */
+                 if (c_kind == OMP_CLAUSE_REDUCTION && is_simd)
                    x = NULL_TREE;
                  else
                    {
@@ -3350,34 +3418,37 @@ lower_rec_input_clauses (tree clauses, gimple_seq *ilist, gimple_seq *dlist,
                  if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LINEAR
                      && gimple_omp_for_combined_into_p (ctx->stmt))
                    {
-                     tree stept = POINTER_TYPE_P (TREE_TYPE (x))
-                                  ? sizetype : TREE_TYPE (x);
-                     tree t = fold_convert (stept,
-                                            OMP_CLAUSE_LINEAR_STEP (c));
-                     tree c = find_omp_clause (clauses,
-                                               OMP_CLAUSE__LOOPTEMP_);
-                     gcc_assert (c);
-                     tree l = OMP_CLAUSE_DECL (c);
-                     if (fd->collapse == 1)
-                       {
-                         tree n1 = fd->loop.n1;
-                         tree step = fd->loop.step;
-                         tree itype = TREE_TYPE (l);
-                         if (POINTER_TYPE_P (itype))
-                           itype = signed_type_for (itype);
-                         l = fold_build2 (MINUS_EXPR, itype, l, n1);
-                         if (TYPE_UNSIGNED (itype)
-                             && fd->loop.cond_code == GT_EXPR)
-                           l = fold_build2 (TRUNC_DIV_EXPR, itype,
-                                            fold_build1 (NEGATE_EXPR,
-                                                         itype, l),
-                                            fold_build1 (NEGATE_EXPR,
-                                                         itype, step));
-                         else
-                           l = fold_build2 (TRUNC_DIV_EXPR, itype, l, step);
-                       }
+                     tree t = OMP_CLAUSE_LINEAR_STEP (c);
+                     tree stept = TREE_TYPE (t);
+                     tree ct = find_omp_clause (clauses,
+                                                OMP_CLAUSE__LOOPTEMP_);
+                     gcc_assert (ct);
+                     tree l = OMP_CLAUSE_DECL (ct);
+                     tree n1 = fd->loop.n1;
+                     tree step = fd->loop.step;
+                     tree itype = TREE_TYPE (l);
+                     if (POINTER_TYPE_P (itype))
+                       itype = signed_type_for (itype);
+                     l = fold_build2 (MINUS_EXPR, itype, l, n1);
+                     if (TYPE_UNSIGNED (itype)
+                         && fd->loop.cond_code == GT_EXPR)
+                       l = fold_build2 (TRUNC_DIV_EXPR, itype,
+                                        fold_build1 (NEGATE_EXPR, itype, l),
+                                        fold_build1 (NEGATE_EXPR,
+                                                     itype, step));
+                     else
+                       l = fold_build2 (TRUNC_DIV_EXPR, itype, l, step);
                      t = fold_build2 (MULT_EXPR, stept,
                                       fold_convert (stept, l), t);
+
+                     if (OMP_CLAUSE_LINEAR_ARRAY (c))
+                       {
+                         x = lang_hooks.decls.omp_clause_linear_ctor
+                                                       (c, new_var, x, t);
+                         gimplify_and_add (x, ilist);
+                         goto do_dtor;
+                       }
+
                      if (POINTER_TYPE_P (TREE_TYPE (x)))
                        x = fold_build2 (POINTER_PLUS_EXPR,
                                         TREE_TYPE (x), x, t);
@@ -3401,10 +3472,7 @@ lower_rec_input_clauses (tree clauses, gimple_seq *ilist, gimple_seq *dlist,
                            = gimple_build_assign (unshare_expr (lvar), iv);
                          gsi_insert_before_without_update (&gsi, g,
                                                            GSI_SAME_STMT);
-                         tree stept = POINTER_TYPE_P (TREE_TYPE (x))
-                                      ? sizetype : TREE_TYPE (x);
-                         tree t = fold_convert (stept,
-                                                OMP_CLAUSE_LINEAR_STEP (c));
+                         tree t = OMP_CLAUSE_LINEAR_STEP (c);
                          enum tree_code code = PLUS_EXPR;
                          if (POINTER_TYPE_P (TREE_TYPE (new_var)))
                            code = POINTER_PLUS_EXPR;
@@ -3520,25 +3588,10 @@ lower_rec_input_clauses (tree clauses, gimple_seq *ilist, gimple_seq *dlist,
                     But if they aren't used, we need to emit the deferred
                     initialization now.  */
                  else if (is_reference (var) && is_simd)
-                   {
-                     tree z
-                       = TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (new_vard)));
-                     if (TREE_CONSTANT (z))
-                       {
-                         const char *name = NULL;
-                         if (DECL_NAME (var))
-                           name = IDENTIFIER_POINTER (DECL_NAME (new_vard));
-
-                         z = create_tmp_var_raw
-                               (TREE_TYPE (TREE_TYPE (new_vard)), name);
-                         gimple_add_tmp_var (z);
-                         TREE_ADDRESSABLE (z) = 1;
-                         z = build_fold_addr_expr_loc (clause_loc, z);
-                         gimplify_assign (new_vard, z, ilist);
-                       }
-                   }
+                   handle_simd_reference (clause_loc, new_vard, ilist);
                  x = lang_hooks.decls.omp_clause_default_ctor
-                               (c, new_var, unshare_expr (x));
+                               (c, unshare_expr (new_var),
+                                build_outer_var_ref (var, ctx));
                  if (x)
                    gimplify_and_add (x, ilist);
                  if (OMP_CLAUSE_REDUCTION_GIMPLE_INIT (c))
@@ -3569,6 +3622,13 @@ lower_rec_input_clauses (tree clauses, gimple_seq *ilist, gimple_seq *dlist,
                  if (code == MINUS_EXPR)
                    code = PLUS_EXPR;
 
+                 tree new_vard = new_var;
+                 if (is_simd && is_reference (var))
+                   {
+                     gcc_assert (TREE_CODE (new_var) == MEM_REF);
+                     new_vard = TREE_OPERAND (new_var, 0);
+                     gcc_assert (DECL_P (new_vard));
+                   }
                  if (is_simd
                      && lower_rec_simd_input_clauses (new_var, ctx, max_vf,
                                                       idx, lane, ivar, lvar))
@@ -3580,9 +3640,18 @@ lower_rec_input_clauses (tree clauses, gimple_seq *ilist, gimple_seq *dlist,
                      x = build2 (code, TREE_TYPE (ref), ref, ivar);
                      ref = build_outer_var_ref (var, ctx);
                      gimplify_assign (ref, x, &llist[1]);
+
+                     if (new_vard != new_var)
+                       {
+                         SET_DECL_VALUE_EXPR (new_vard,
+                                              build_fold_addr_expr (lvar));
+                         DECL_HAS_VALUE_EXPR_P (new_vard) = 1;
+                       }
                    }
                  else
                    {
+                     if (is_reference (var) && is_simd)
+                       handle_simd_reference (clause_loc, new_vard, ilist);
                      gimplify_assign (new_var, x, ilist);
                      if (is_simd)
                        {
@@ -3683,8 +3752,9 @@ lower_rec_input_clauses (tree clauses, gimple_seq *ilist, gimple_seq *dlist,
       tree c = find_omp_clause (gimple_omp_for_clauses (ctx->stmt),
                                OMP_CLAUSE_SAFELEN);
       if (c == NULL_TREE
-         || compare_tree_int (OMP_CLAUSE_SAFELEN_EXPR (c),
-                              max_vf) == 1)
+         || (TREE_CODE (OMP_CLAUSE_SAFELEN_EXPR (c)) == INTEGER_CST
+             && compare_tree_int (OMP_CLAUSE_SAFELEN_EXPR (c),
+                                  max_vf) == 1))
        {
          c = build_omp_clause (UNKNOWN_LOCATION, OMP_CLAUSE_SAFELEN);
          OMP_CLAUSE_SAFELEN_EXPR (c) = build_int_cst (integer_type_node,
@@ -3803,6 +3873,14 @@ lower_lastprivate_clauses (tree clauses, tree predicate, gimple_seq *stmt_list,
                                  OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ (c));
              OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ (c) = NULL;
            }
+         else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LINEAR
+                  && OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c))
+           {
+             lower_omp (&OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c), ctx);
+             gimple_seq_add_seq (stmt_list,
+                                 OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c));
+             OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c) = NULL;
+           }
 
          x = build_outer_var_ref (var, ctx);
          if (is_reference (var))
@@ -5570,6 +5648,12 @@ expand_omp_for_generic (struct omp_region *region,
     {
       stmt = gimple_build_assign (endvar, iend);
       gsi_insert_after (&gsi, stmt, GSI_CONTINUE_LINKING);
+      if (useless_type_conversion_p (TREE_TYPE (fd->loop.v), TREE_TYPE (iend)))
+       stmt = gimple_build_assign (fd->loop.v, iend);
+      else
+       stmt = gimple_build_assign_with_ops (NOP_EXPR, fd->loop.v, iend,
+                                            NULL_TREE);
+      gsi_insert_after (&gsi, stmt, GSI_CONTINUE_LINKING);
     }
   if (fd->collapse > 1)
     expand_omp_for_init_vars (fd, &gsi, counts, inner_stmt, startvar);
@@ -5986,6 +6070,12 @@ expand_omp_for_static_nochunk (struct omp_region *region,
     {
       stmt = gimple_build_assign (endvar, e);
       gsi_insert_after (&gsi, stmt, GSI_CONTINUE_LINKING);
+      if (useless_type_conversion_p (TREE_TYPE (fd->loop.v), TREE_TYPE (e)))
+       stmt = gimple_build_assign (fd->loop.v, e);
+      else
+       stmt = gimple_build_assign_with_ops (NOP_EXPR, fd->loop.v, e,
+                                            NULL_TREE);
+      gsi_insert_after (&gsi, stmt, GSI_CONTINUE_LINKING);
     }
   if (fd->collapse > 1)
     expand_omp_for_init_vars (fd, &gsi, counts, inner_stmt, startvar);
@@ -6371,6 +6461,12 @@ expand_omp_for_static_chunk (struct omp_region *region,
     {
       stmt = gimple_build_assign (endvar, e);
       gsi_insert_after (&si, stmt, GSI_CONTINUE_LINKING);
+      if (useless_type_conversion_p (TREE_TYPE (fd->loop.v), TREE_TYPE (e)))
+       stmt = gimple_build_assign (fd->loop.v, e);
+      else
+       stmt = gimple_build_assign_with_ops (NOP_EXPR, fd->loop.v, e,
+                                            NULL_TREE);
+      gsi_insert_after (&si, stmt, GSI_CONTINUE_LINKING);
     }
   if (fd->collapse > 1)
     expand_omp_for_init_vars (fd, &si, counts, inner_stmt, startvar);
@@ -6822,8 +6918,10 @@ expand_omp_simd (struct omp_region *region, struct omp_for_data *fd)
       else
        {
          safelen = OMP_CLAUSE_SAFELEN_EXPR (safelen);
-         if (!tree_fits_uhwi_p (safelen)
-             || tree_to_uhwi (safelen) > INT_MAX)
+         if (TREE_CODE (safelen) != INTEGER_CST)
+           loop->safelen = 0;
+         else if (!tree_fits_uhwi_p (safelen)
+                  || tree_to_uhwi (safelen) > INT_MAX)
            loop->safelen = INT_MAX;
          else
            loop->safelen = tree_to_uhwi (safelen);
@@ -8389,10 +8487,14 @@ maybe_add_implicit_barrier_cancel (omp_context *ctx, gimple_seq *body)
       && gimple_code (ctx->outer->stmt) == GIMPLE_OMP_PARALLEL
       && ctx->outer->cancellable)
     {
-      tree lhs = create_tmp_var (boolean_type_node, NULL);
+      tree fndecl = builtin_decl_explicit (BUILT_IN_GOMP_CANCEL);
+      tree c_bool_type = TREE_TYPE (TREE_TYPE (fndecl));
+      tree lhs = create_tmp_var (c_bool_type, NULL);
       gimple_omp_return_set_lhs (omp_return, lhs);
       tree fallthru_label = create_artificial_label (UNKNOWN_LOCATION);
-      gimple g = gimple_build_cond (NE_EXPR, lhs, boolean_false_node,
+      gimple g = gimple_build_cond (NE_EXPR, lhs,
+                                   fold_convert (c_bool_type,
+                                                 boolean_false_node),
                                    ctx->outer->cancel_label, fallthru_label);
       gimple_seq_add_stmt (body, g);
       gimple_seq_add_stmt (body, gimple_build_label (fallthru_label));
@@ -8989,7 +9091,10 @@ lower_omp_for (gimple_stmt_iterator *gsi_p, omp_context *ctx)
                                        OMP_CLAUSE__LOOPTEMP_);
            }
          else
-           temp = create_tmp_var (type, NULL);
+           {
+             temp = create_tmp_var (type, NULL);
+             insert_decl_map (&ctx->outer->cb, temp, temp);
+           }
          *pc = build_omp_clause (UNKNOWN_LOCATION, OMP_CLAUSE__LOOPTEMP_);
          OMP_CLAUSE_DECL (*pc) = temp;
          pc = &OMP_CLAUSE_CHAIN (*pc);
@@ -10098,21 +10203,23 @@ lower_omp_1 (gimple_stmt_iterator *gsi_p, omp_context *ctx)
                  }
                break;
              }
-           tree lhs;
-           lhs = create_tmp_var (boolean_type_node, NULL);
            if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_GOMP_BARRIER)
              {
                fndecl = builtin_decl_explicit (BUILT_IN_GOMP_BARRIER_CANCEL);
                gimple_call_set_fndecl (stmt, fndecl);
                gimple_call_set_fntype (stmt, TREE_TYPE (fndecl));
              }
+           tree lhs;
+           lhs = create_tmp_var (TREE_TYPE (TREE_TYPE (fndecl)), NULL);
            gimple_call_set_lhs (stmt, lhs);
            tree fallthru_label;
            fallthru_label = create_artificial_label (UNKNOWN_LOCATION);
            gimple g;
            g = gimple_build_label (fallthru_label);
            gsi_insert_after (gsi_p, g, GSI_SAME_STMT);
-           g = gimple_build_cond (NE_EXPR, lhs, boolean_false_node,
+           g = gimple_build_cond (NE_EXPR, lhs,
+                                  fold_convert (TREE_TYPE (lhs),
+                                                boolean_false_node),
                                   cctx->cancel_label, fallthru_label);
            gsi_insert_after (gsi_p, g, GSI_SAME_STMT);
            break;
@@ -11291,45 +11398,53 @@ static tree
 ipa_simd_modify_stmt_ops (tree *tp, int *walk_subtrees, void *data)
 {
   struct walk_stmt_info *wi = (struct walk_stmt_info *) data;
-  if (!SSA_VAR_P (*tp))
+  struct modify_stmt_info *info = (struct modify_stmt_info *) wi->info;
+  tree *orig_tp = tp;
+  if (TREE_CODE (*tp) == ADDR_EXPR)
+    tp = &TREE_OPERAND (*tp, 0);
+  struct ipa_parm_adjustment *cand = NULL;
+  if (TREE_CODE (*tp) == PARM_DECL)
+    cand = ipa_get_adjustment_candidate (&tp, NULL, info->adjustments, true);
+  else
     {
-      /* Make sure we treat subtrees as a RHS.  This makes sure that
-        when examining the `*foo' in *foo=x, the `foo' get treated as
-        a use properly.  */
-      wi->is_lhs = false;
-      wi->val_only = true;
       if (TYPE_P (*tp))
        *walk_subtrees = 0;
-      return NULL_TREE;
     }
-  struct modify_stmt_info *info = (struct modify_stmt_info *) wi->info;
-  struct ipa_parm_adjustment *cand
-    = ipa_get_adjustment_candidate (&tp, NULL, info->adjustments, true);
-  if (!cand)
-    return NULL_TREE;
 
-  tree t = *tp;
-  tree repl = make_ssa_name (TREE_TYPE (t), NULL);
-
-  gimple stmt;
-  gimple_stmt_iterator gsi = gsi_for_stmt (info->stmt);
-  if (wi->is_lhs)
+  tree repl = NULL_TREE;
+  if (cand)
+    repl = unshare_expr (cand->new_decl);
+  else
     {
-      stmt = gimple_build_assign (unshare_expr (cand->new_decl), repl);
-      gsi_insert_after (&gsi, stmt, GSI_SAME_STMT);
-      SSA_NAME_DEF_STMT (repl) = info->stmt;
+      if (tp != orig_tp)
+       {
+         *walk_subtrees = 0;
+         bool modified = info->modified;
+         info->modified = false;
+         walk_tree (tp, ipa_simd_modify_stmt_ops, wi, wi->pset);
+         if (!info->modified)
+           {
+             info->modified = modified;
+             return NULL_TREE;
+           }
+         info->modified = modified;
+         repl = *tp;
+       }
+      else
+       return NULL_TREE;
     }
-  else
+
+  if (tp != orig_tp)
     {
-      /* You'd think we could skip the extra SSA variable when
-        wi->val_only=true, but we may have `*var' which will get
-        replaced into `*var_array[iter]' and will likely be something
-        not gimple.  */
-      stmt = gimple_build_assign (repl, unshare_expr (cand->new_decl));
+      repl = build_fold_addr_expr (repl);
+      gimple stmt
+       = gimple_build_assign (make_ssa_name (TREE_TYPE (repl), NULL), repl);
+      repl = gimple_assign_lhs (stmt);
+      gimple_stmt_iterator gsi = gsi_for_stmt (info->stmt);
       gsi_insert_before (&gsi, stmt, GSI_SAME_STMT);
+      *orig_tp = repl;
     }
-
-  if (!useless_type_conversion_p (TREE_TYPE (*tp), TREE_TYPE (repl)))
+  else if (!useless_type_conversion_p (TREE_TYPE (*tp), TREE_TYPE (repl)))
     {
       tree vce = build1 (VIEW_CONVERT_EXPR, TREE_TYPE (*tp), repl);
       *tp = vce;
@@ -11338,8 +11453,6 @@ ipa_simd_modify_stmt_ops (tree *tp, int *walk_subtrees, void *data)
     *tp = repl;
 
   info->modified = true;
-  wi->is_lhs = false;
-  wi->val_only = true;
   return NULL_TREE;
 }
 
@@ -11358,7 +11471,7 @@ ipa_simd_modify_function_body (struct cgraph_node *node,
                               tree retval_array, tree iter)
 {
   basic_block bb;
-  unsigned int i, j;
+  unsigned int i, j, l;
 
   /* Re-use the adjustments array, but this time use it to replace
      every function argument use to an offset into the corresponding
@@ -11381,6 +11494,46 @@ ipa_simd_modify_function_body (struct cgraph_node *node,
        j += node->simdclone->simdlen / TYPE_VECTOR_SUBPARTS (vectype) - 1;
     }
 
+  l = adjustments.length ();
+  for (i = 1; i < num_ssa_names; i++)
+    {
+      tree name = ssa_name (i);
+      if (name
+         && SSA_NAME_VAR (name)
+         && TREE_CODE (SSA_NAME_VAR (name)) == PARM_DECL)
+       {
+         for (j = 0; j < l; j++)
+           if (SSA_NAME_VAR (name) == adjustments[j].base
+               && adjustments[j].new_decl)
+             {
+               tree base_var;
+               if (adjustments[j].new_ssa_base == NULL_TREE)
+                 {
+                   base_var
+                     = copy_var_decl (adjustments[j].base,
+                                      DECL_NAME (adjustments[j].base),
+                                      TREE_TYPE (adjustments[j].base));
+                   adjustments[j].new_ssa_base = base_var;
+                 }
+               else
+                 base_var = adjustments[j].new_ssa_base;
+               if (SSA_NAME_IS_DEFAULT_DEF (name))
+                 {
+                   bb = single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun));
+                   gimple_stmt_iterator gsi = gsi_after_labels (bb);
+                   tree new_decl = unshare_expr (adjustments[j].new_decl);
+                   set_ssa_default_def (cfun, adjustments[j].base, NULL_TREE);
+                   SET_SSA_NAME_VAR_OR_IDENTIFIER (name, base_var);
+                   SSA_NAME_IS_DEFAULT_DEF (name) = 0;
+                   gimple stmt = gimple_build_assign (name, new_decl);
+                   gsi_insert_before (&gsi, stmt, GSI_SAME_STMT);
+                 }
+               else
+                 SET_SSA_NAME_VAR_OR_IDENTIFIER (name, base_var);
+             }
+       }
+    }
+
   struct modify_stmt_info info;
   info.adjustments = adjustments;
 
index fdc903f..bbd6b9c 100644 (file)
@@ -431,8 +431,8 @@ static const struct default_options default_options_table[] =
     { OPT_LEVELS_1_PLUS, OPT_fguess_branch_probability, NULL, 1 },
     { OPT_LEVELS_1_PLUS, OPT_fcprop_registers, NULL, 1 },
     { OPT_LEVELS_1_PLUS, OPT_fforward_propagate, NULL, 1 },
-    { OPT_LEVELS_1_PLUS, OPT_fif_conversion, NULL, 1 },
-    { OPT_LEVELS_1_PLUS, OPT_fif_conversion2, NULL, 1 },
+    { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_fif_conversion, NULL, 1 },
+    { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_fif_conversion2, NULL, 1 },
     { OPT_LEVELS_1_PLUS, OPT_fipa_pure_const, NULL, 1 },
     { OPT_LEVELS_1_PLUS, OPT_fipa_reference, NULL, 1 },
     { OPT_LEVELS_1_PLUS, OPT_fipa_profile, NULL, 1 },
@@ -1501,9 +1501,9 @@ common_handle_option (struct gcc_options *opts,
                }
 
            if (! found)
-             warning_at (loc, 0,
-                         "unrecognized argument to -fsanitize= option: %q.*s",
-                         (int) len, p);
+             error_at (loc,
+                       "unrecognized argument to -fsanitize= option: %q.*s",
+                       (int) len, p);
 
            if (comma == NULL)
              break;
@@ -1740,7 +1740,7 @@ common_handle_option (struct gcc_options *opts,
       /* FIXME: Instrumentation we insert makes ipa-reference bitmaps
         quadratic.  Disable the pass until better memory representation
         is done.  */
-      if (!opts_set->x_flag_ipa_reference && opts->x_in_lto_p)
+      if (!opts_set->x_flag_ipa_reference)
         opts->x_flag_ipa_reference = false;
       break;
 
@@ -1820,13 +1820,8 @@ common_handle_option (struct gcc_options *opts,
       break;
 
     case OPT_g:
-      /* -g by itself should force -g2.  */
-      if (*arg == '\0')
-       set_debug_level (NO_DEBUG, DEFAULT_GDB_EXTENSIONS, "2", opts, opts_set,
-                        loc);
-      else
-       set_debug_level (NO_DEBUG, DEFAULT_GDB_EXTENSIONS, arg, opts, opts_set,
-                        loc);
+      set_debug_level (NO_DEBUG, DEFAULT_GDB_EXTENSIONS, arg, opts, opts_set,
+                       loc);
       break;
 
     case OPT_gcoff:
@@ -2076,10 +2071,12 @@ set_debug_level (enum debug_info_type type, int extended, const char *arg,
       opts_set->x_write_symbols = type;
     }
 
-  /* A debug flag without a level defaults to level 2.  */
+  /* A debug flag without a level defaults to level 2.
+     If off or at level 1, set it to level 2, but if already
+     at level 3, don't lower it.  */ 
   if (*arg == '\0')
     {
-      if (!opts->x_debug_info_level)
+      if (opts->x_debug_info_level < DINFO_LEVEL_NORMAL)
        opts->x_debug_info_level = DINFO_LEVEL_NORMAL;
     }
   else
index 60fb135..377b247 100644 (file)
@@ -2109,20 +2109,6 @@ execute_all_ipa_transforms (void)
     }
 }
 
-/* Callback for do_per_function to apply all IPA transforms.  */
-
-static void
-apply_ipa_transforms (void *data)
-{
-  struct cgraph_node *node = cgraph_get_node (current_function_decl);
-  if (!node->global.inlined_to && node->ipa_transforms_to_apply.exists ())
-    {
-      *(bool *)data = true;
-      execute_all_ipa_transforms ();
-      rebuild_cgraph_edges ();
-    }
-}
-
 /* Check if PASS is explicitly disabled or enabled and return
    the gate status.  FUNC is the function to be processed, and
    GATE_STATUS is the gate status determined by pass manager by
@@ -2194,8 +2180,26 @@ execute_one_pass (opt_pass *pass)
      Apply all trnasforms first.  */
   if (pass->type == SIMPLE_IPA_PASS)
     {
+      struct cgraph_node *node;
       bool applied = false;
-      do_per_function (apply_ipa_transforms, (void *)&applied);
+      FOR_EACH_DEFINED_FUNCTION (node)
+       if (node->analyzed
+           && cgraph_function_with_gimple_body_p (node)
+           && (!node->clone_of || node->decl != node->clone_of->decl))
+         {
+           if (!node->global.inlined_to
+               && node->ipa_transforms_to_apply.exists ())
+             {
+               cgraph_get_body (node);
+               push_cfun (DECL_STRUCT_FUNCTION (node->decl));
+               execute_all_ipa_transforms ();
+               rebuild_cgraph_edges ();
+               free_dominance_info (CDI_DOMINATORS);
+               free_dominance_info (CDI_POST_DOMINATORS);
+               pop_cfun ();
+               applied = true;
+             }
+         }
       if (applied)
         symtab_remove_unreachable_nodes (true, dump_file);
       /* Restore current_pass.  */
index b7e3dfb..399d6b5 100644 (file)
@@ -1,3 +1,15 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
+2014-05-14  Joseph Myers  <joseph@codesourcery.com>
+
+       * zh_CN.po: Update.
+
+2014-05-01  Joseph Myers  <joseph@codesourcery.com>
+
+       * sv.po: Update.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 690b520..7456b82 100644 (file)
Binary files a/gcc/po/sv.gmo and b/gcc/po/sv.gmo differ
index 0bae3b6..b38f708 100644 (file)
@@ -16,7 +16,7 @@ msgstr ""
 "Project-Id-Version: gcc 4.9-b20140202\n"
 "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
 "POT-Creation-Date: 2014-02-02 17:35+0000\n"
-"PO-Revision-Date: 2014-03-30 20:23+0200\n"
+"PO-Revision-Date: 2014-04-11 20:56+0200\n"
 "Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
 "Language: sv\n"
@@ -1493,7 +1493,7 @@ msgstr "attributen för optimeringsnivåer stämmer inte"
 
 #: cif-code.def:125
 msgid "callee refers to comdat-local symbols"
-msgstr "den anropade referarar till comdat-lokala symboler"
+msgstr "den anropade refererar till comdat-lokala symboler"
 
 #. The remainder are real diagnostic types.
 #: diagnostic.def:33
@@ -6065,7 +6065,7 @@ msgstr "Varna för missbruk av pragman"
 
 #: c-family/c.opt:653
 msgid "Warn about __TIME__, __DATE__ and __TIMESTAMP__ usage"
-msgstr "Warn för använding av __TIME__, __DATE__ och __TIMESTAMP__"
+msgstr "Varna för användning av __TIME__, __DATE__ och __TIMESTAMP__"
 
 #: c-family/c.opt:657
 msgid "Warn if a property for an Objective-C object has no assign semantics specified"
@@ -12220,7 +12220,7 @@ msgstr "-dumpdir <kat>\tAnge katalognamn att användas för dumpar"
 
 #: common.opt:811
 msgid "Aggressively optimize loops using language constraints"
-msgstr "Optimera aggresivt slingor med användning av språkbegränsningar"
+msgstr "Optimera aggressivt slingor med användning av språkbegränsningar"
 
 #: common.opt:815
 msgid "Align the start of functions"
@@ -13449,7 +13449,7 @@ msgstr "okänd kostnadsmodell för vektorisering %qs"
 
 #: common.opt:2332
 msgid "Enables the dynamic vectorizer cost model.  Preserved for backward compatibility."
-msgstr "Aktivera den dynamiska kostnadsmodellen för vekoriseraren.  Bevarad för bakåtkompatibilitet."
+msgstr "Aktivera den dynamiska kostnadsmodellen för vektoriseraren.  Bevarad för bakåtkompatibilitet."
 
 #: common.opt:2336
 msgid "Enables the unlimited vectorizer cost model.  Preserved for backward compatibility."
@@ -19151,7 +19151,7 @@ msgstr "längden stämmer inte i uttryck"
 #: c/c-array-notation.c:721 cp/cp-array-notation.c:610
 #, gcc-internal-format
 msgid "rank mismatch between %qE and %qE"
-msgstr "ordingen stämmer inte mellan %qE och %qE"
+msgstr "ordningen stämmer inte mellan %qE och %qE"
 
 #. Here the original expression is printed as a "heads-up"
 #. to the programmer.  This is because since there is no
@@ -25782,7 +25782,7 @@ msgstr "felaktig DISPOSE-konstruktion: %d"
 msgid "too much stack space to dispose of: %d"
 msgstr "för mycket stackutrymme att göra av med: %d"
 
-# Förmodligen en felstavning i orginalet, men tills jag vet säkert
+# Förmodligen en felstavning i originalet, men tills jag vet säkert
 # behåller jag den
 #: config/v850/v850.c:2788
 #, gcc-internal-format, gfc-internal-format
@@ -28130,7 +28130,7 @@ msgstr "den andra matchen är här"
 #: c/c-parser.c:6884
 #, gcc-internal-format
 msgid "%<_Generic%> selector of type %qT is not compatible with any association"
-msgstr "%<_Generic%>-väljare av typ %qT är inte kompatiblem med någon association"
+msgstr "%<_Generic%>-väljare av typ %qT är inte kompatibel med någon association"
 
 #: c/c-parser.c:7039 c/c-parser.c:7519 c/c-parser.c:7538
 #, gcc-internal-format
@@ -28185,7 +28185,7 @@ msgstr "-fcilkplus måste vara aktiverat för att använda %<_Cilk_spawn%>"
 #: c/c-parser.c:7505 cp/parser.c:5807
 #, gcc-internal-format
 msgid "consecutive %<_Cilk_spawn%> keywords are not permitted"
-msgstr "konsektiva %<_Cilk_spawn%>-nyckelord är inte tillåtet"
+msgstr "konsekutiva %<_Cilk_spawn%>-nyckelord är inte tillåtet"
 
 #: c/c-parser.c:7573
 #, gcc-internal-format
@@ -31055,7 +31055,7 @@ msgstr "%qD kan inte vara en skalär när %qD inte är det"
 #: cp/cp-array-notation.c:849 cp/cp-array-notation.c:855
 #, gcc-internal-format
 msgid "rank mismatch with controlling expression of parent if-statement"
-msgstr "ordingen stämmer inte med det styrande uttrycket i förälder-if-satsen"
+msgstr "ordningen stämmer inte med det styrande uttrycket i förälder-if-satsen"
 
 #: cp/cp-array-notation.c:1250
 #, gcc-internal-format
@@ -31090,7 +31090,7 @@ msgstr "startindex och längdfält är nödvändiga för att använda vektornota
 #: cp/cp-array-notation.c:1422
 #, gcc-internal-format
 msgid "array notation cannot be used with function type"
-msgstr "vektornotation kan inte användas användas med en funktionstyp"
+msgstr "vektornotation kan inte användas med en funktionstyp"
 
 #: cp/cp-array-notation.c:1432
 #, gcc-internal-format
@@ -31100,7 +31100,7 @@ msgstr "ordningen på en vektornotations trippels startindex är inte noll"
 #: cp/cp-array-notation.c:1438
 #, gcc-internal-format
 msgid "rank of an array notation triplet%'s length is not zero"
-msgstr "ordingen på en vektornotations trippels längd är inte noll"
+msgstr "ordningen på en vektornotations trippels längd är inte noll"
 
 #: cp/cp-array-notation.c:1443
 #, gcc-internal-format
@@ -31450,7 +31450,7 @@ msgstr "standardtypkonvertering kan inte härleda mallargumentet för %qD"
 #: cp/cvt.c:1659
 #, gcc-internal-format
 msgid "ambiguous default type conversion from %qT"
-msgstr "tvetydig standartypkonvertering från %qT"
+msgstr "tvetydig standardtypkonvertering från %qT"
 
 #: cp/cvt.c:1661
 #, gcc-internal-format
@@ -33747,7 +33747,7 @@ msgstr "%qD är redan definierad i klassen %qT"
 #: cp/decl.c:14531 cp/decl2.c:4673
 #, gcc-internal-format
 msgid "use of %qD before deduction of %<auto%>"
-msgstr "använding av %qD före härledning av %<auto%>"
+msgstr "användning av %qD före härledning av %<auto%>"
 
 #: cp/decl2.c:322
 #, gcc-internal-format
@@ -36027,7 +36027,7 @@ msgstr "användning av %<auto%> i lambdaparameterdeklarationer är endast tillg
 #: cp/parser.c:14516
 #, gcc-internal-format
 msgid "use of %<auto%> in parameter declaration only available with -std=c++1y or -std=gnu++1y"
-msgstr "använding av %<auto%> i parameterdeklarationer är endast tillgängligt med -std=c++1y eller -std=gnu++1y"
+msgstr "användning av %<auto%> i parameterdeklarationer är endast tillgängligt med -std=c++1y eller -std=gnu++1y"
 
 #: cp/parser.c:14521
 #, gcc-internal-format
@@ -37288,7 +37288,7 @@ msgstr "  men %d behövs"
 #: cp/pt.c:4861
 #, gcc-internal-format
 msgid "template arguments to %qD do not match original template %qD"
-msgstr "mallargument till %qD stämmer inte med orginalmallen %qD"
+msgstr "mallargument till %qD stämmer inte med originalmallen %qD"
 
 #: cp/pt.c:4865
 #, gcc-internal-format
@@ -38326,7 +38326,7 @@ msgstr "det går inte att applicera %<offsetof%> på destrueraren %<~%T%>"
 #: cp/semantics.c:3800
 #, gcc-internal-format
 msgid "second operand of %<offsetof%> is neither a single identifier nor a sequence of member accesses and array references"
-msgstr "andra operanden till %<offsetof%> är varken en ensam idientifierare eller en sekvens av medlemsåtkomster och vektorreferenser"
+msgstr "andra operanden till %<offsetof%> är varken en ensam identifierare eller en sekvens av medlemsåtkomster och vektorreferenser"
 
 #: cp/semantics.c:3808
 #, gcc-internal-format
@@ -48120,7 +48120,7 @@ msgstr "Variabeln ”%s” vid %L av TYPE(C_PTR) eller TYPE(C_FUNPTR) får inte
 #: fortran/resolve.c:13229
 #, gcc-internal-format, gfc-internal-format
 msgid "Variable '%s' at %L with coarray component shall be a nonpointer, nonallocatable scalar, which is not a coarray"
-msgstr "Variabeln ”%s” vid %L med co-vektorkomponent skall vara en skalär som inte är en pekare eller allokerbar och inte en co-vaktor"
+msgstr "Variabeln ”%s” vid %L med co-vektorkomponent skall vara en skalär som inte är en pekare eller allokerbar och inte en co-vektor"
 
 #: fortran/resolve.c:13244
 #, gcc-internal-format, gfc-internal-format
@@ -49576,12 +49576,12 @@ msgstr "tidigare definition här"
 #: lto/lto-symtab.c:404
 #, gcc-internal-format
 msgid "type of %qD does not match original declaration"
-msgstr "typen på %qD stämmer inte med orginaldeklarationen"
+msgstr "typen på %qD stämmer inte med originaldeklarationen"
 
 #: lto/lto-symtab.c:412
 #, gcc-internal-format
 msgid "alignment of %qD is bigger than original declaration"
-msgstr "justering av %qD är större än orginaldeklarationen"
+msgstr "justering av %qD är större än originaldeklarationen"
 
 #: lto/lto-symtab.c:418 lto/lto-symtab.c:517
 #, gcc-internal-format
index e82fdf5..c575bcd 100644 (file)
Binary files a/gcc/po/zh_CN.gmo and b/gcc/po/zh_CN.gmo differ
index 7edfcb4..e20e43f 100644 (file)
@@ -1,14 +1,14 @@
 # Simplified Chinese translation for gcc.
 # Copyright (C) 2005 Free Software Foundation, Inc.
 # This file is distributed under the same license as the gcc package.
-# Meng Jie <zuxy.meng@gmail.com>, 2005-2011.
+# Meng Jie <zuxy.meng@gmail.com>, 2005-2014.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gcc 4.6.0\n"
+"Project-Id-Version: gcc 4.9-b20140202\n"
 "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
 "POT-Creation-Date: 2014-02-02 17:35+0000\n"
-"PO-Revision-Date: 2011-05-19 15:04+0800\n"
+"PO-Revision-Date: 2014-05-14 14:25-0800\n"
 "Last-Translator: Meng Jie <zuxy.meng@gmail.com>\n"
 "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
 "Language: zh_CN\n"
@@ -38,7 +38,6 @@ msgstr "return 后没有屏障"
 
 #: collect2.c:1578
 #, fuzzy, c-format
-#| msgid "collect2 version %s"
 msgid "collect2 version %s\n"
 msgstr "collect2 版本 %s"
 
@@ -94,13 +93,11 @@ msgstr "常量/复制传递被禁用"
 
 #: diagnostic.c:170
 #, fuzzy, c-format
-#| msgid "%s: all warnings being treated as errors\n"
 msgid "%s: all warnings being treated as errors"
 msgstr "%s:所有的警告都被当作是错误\n"
 
 #: diagnostic.c:175
 #, fuzzy, c-format
-#| msgid "%s: some warnings being treated as errors\n"
 msgid "%s: some warnings being treated as errors"
 msgstr "%s:有些警告被当作是错误\n"
 
@@ -120,10 +117,6 @@ msgstr "编译中止因为 -fmax-errors=%u。\n"
 
 #: diagnostic.c:479
 #, fuzzy, c-format
-#| msgid ""
-#| "Please submit a full bug report,\n"
-#| "with preprocessed source if appropriate.\n"
-#| "See %s for instructions.\n"
 msgid ""
 "Please submit a full bug report,\n"
 "with preprocessed source if appropriate.\n"
@@ -134,7 +127,6 @@ msgstr ""
 
 #: diagnostic.c:485
 #, fuzzy, c-format
-#| msgid "Use fp double instructions"
 msgid "See %s for instructions.\n"
 msgstr "使用浮点双精度指令"
 
@@ -293,7 +285,6 @@ msgstr "  --target-help            显示目标机器特定的命令行选项\n"
 
 #: gcc.c:3073
 #, fuzzy
-#| msgid "  --help={target|optimizers|warnings|params|[^]{joined|separate|undocumented}}[,...]\n"
 msgid "  --help={common|optimizers|params|target|warnings|[^]{joined|separate|undocumented}}[,...]\n"
 msgstr "  --help={target|optimizers|warnings|params|[^]{joined|separate|undocumented}}[,...]\n"
 
@@ -339,9 +330,6 @@ msgstr "  -print-prog-name=<程序>  显示编译器组件 <程序> 的完整路
 
 #: gcc.c:3085
 #, fuzzy
-#| msgid ""
-#| "  -print-multi-lib         Display the mapping between command line options and\n"
-#| "                           multiple library search directories\n"
 msgid ""
 "  -print-multiarch         Display the target's normalized GNU triplet, used as\n"
 "                           a component in the library path\n"
@@ -461,13 +449,11 @@ msgstr "  -o <文件>                输出到 <文件>\n"
 
 #: gcc.c:3120
 #, fuzzy
-#| msgid "Create a position independent executable"
 msgid "  -pie                     Create a position independent executable\n"
 msgstr "生成位置无关可执行文件"
 
 #: gcc.c:3121
 #, fuzzy
-#| msgid "Create a shared library"
 msgid "  -shared                  Create a shared library\n"
 msgstr "生成一个共享库"
 
@@ -497,7 +483,6 @@ msgstr ""
 
 #: gcc.c:5402
 #, fuzzy, c-format
-#| msgid "Processing spec %c%s%c, which is '%s'\n"
 msgid "Processing spec (%s), which is '%s'\n"
 msgstr "处理 spec %c%s%c,即‘%s’\n"
 
@@ -613,9 +598,6 @@ msgstr ""
 
 #: gcov.c:472
 #, fuzzy, c-format
-#| msgid ""
-#| "Usage: gcov [OPTION]... SOURCEFILE...\n"
-#| "\n"
 msgid ""
 "Usage: gcov [OPTION]... SOURCE|OBJ...\n"
 "\n"
@@ -649,9 +631,6 @@ msgstr "  -b, --branch-probabilities      输出包含分支概率\n"
 
 #: gcov.c:477
 #, fuzzy, c-format
-#| msgid ""
-#| "  -c, --branch-counts             Given counts of branches taken\n"
-#| "                                    rather than percentages\n"
 msgid ""
 "  -c, --branch-counts             Output counts of branches taken\n"
 "                                    rather than percentages\n"
@@ -701,7 +680,6 @@ msgstr "  -p, --preserve-paths            保留所有路径名\n"
 
 #: gcov.c:488
 #, fuzzy, c-format
-#| msgid "  -a, --all-blocks                Show information for every basic block\n"
 msgid "  -r, --relative-only             Only show data for relative sources\n"
 msgstr "  -a, --all-blocks                显示每个基本块的信息\n"
 
@@ -749,25 +727,21 @@ msgstr ""
 
 #: gcov.c:794
 #, fuzzy, c-format
-#| msgid "%s:creating '%s'\n"
 msgid "Creating '%s'\n"
 msgstr "%s:正在创建‘%s’\n"
 
 #: gcov.c:797
 #, fuzzy, c-format
-#| msgid "%s:error writing output file '%s'\n"
 msgid "Error writing output file '%s'\n"
 msgstr "%s:写入输出文件‘%s’时出错\n"
 
 #: gcov.c:801
 #, fuzzy, c-format
-#| msgid "%s:could not open output file '%s'\n"
 msgid "Could not open output file '%s'\n"
 msgstr "%s:不能打开输出文件‘%s’\n"
 
 #: gcov.c:806
 #, fuzzy, c-format
-#| msgid "[Leaving %s]\n"
 msgid "Removing '%s'\n"
 msgstr "[离开 %s]\n"
 
@@ -778,13 +752,11 @@ msgstr "\n"
 
 #: gcov.c:856
 #, fuzzy, c-format
-#| msgid "%s: Cannot open output file: %s\n"
 msgid "Cannot open intermediate output file %s\n"
 msgstr "%s:无法打开输出文件:%s\n"
 
 #: gcov.c:1139
 #, fuzzy, c-format
-#| msgid "%s:source file is newer than graph file '%s'\n"
 msgid "%s:source file is newer than notes file '%s'\n"
 msgstr "%s:源文件较图文件‘%s’新\n"
 
@@ -795,13 +767,11 @@ msgstr "(每个源文件只显示一条信息)\n"
 
 #: gcov.c:1169
 #, fuzzy, c-format
-#| msgid "%s:cannot open source file\n"
 msgid "%s:cannot open notes file\n"
 msgstr "%s:无法打开源文件\n"
 
 #: gcov.c:1175
 #, fuzzy, c-format
-#| msgid "%s:not a gcov data file\n"
 msgid "%s:not a gcov notes file\n"
 msgstr "%s:不是一个 gcov 数据文件\n"
 
@@ -842,7 +812,6 @@ msgstr "%s:版本‘%.4s’,首选版本‘%.4s’\n"
 
 #: gcov.c:1417
 #, fuzzy, c-format
-#| msgid "%s:stamp mismatch with graph file\n"
 msgid "%s:stamp mismatch with notes file\n"
 msgstr "%s:时间戳与图文件不匹配\n"
 
@@ -958,7 +927,6 @@ msgstr "无条件 %2d 从未执行\n"
 
 #: gcov.c:2424
 #, fuzzy, c-format
-#| msgid "%s:cannot open source file\n"
 msgid "Cannot open source file %s\n"
 msgstr "%s:无法打开源文件\n"
 
@@ -1109,13 +1077,11 @@ msgstr "在函数%qs中"
 
 #: langhooks.c:456 cp/error.c:3131
 #, fuzzy
-#| msgid "    inlined from %qs at %s:%d:%d"
 msgid "    inlined from %qs at %r%s:%d:%d%R"
 msgstr "    内联自%qs于 %s:%d:%d"
 
 #: langhooks.c:461 cp/error.c:3136
 #, fuzzy
-#| msgid "    inlined from %qs at %s:%d"
 msgid "    inlined from %qs at %r%s:%d%R"
 msgstr "    内联自%qs于 %s:%d"
 
@@ -1419,7 +1385,6 @@ msgstr "不考虑内联函数"
 
 #: cif-code.def:43
 #, fuzzy
-#| msgid "%qE is not initialized"
 msgid "caller is not optimized"
 msgstr "%qE未经初始化"
 
@@ -1437,7 +1402,6 @@ msgstr "函数不能内联"
 
 #: cif-code.def:60
 #, fuzzy
-#| msgid "function body can be overwriten at linktime"
 msgid "function body can be overwritten at link time"
 msgstr "函数体可能在链接时被改写"
 
@@ -1499,7 +1463,6 @@ msgstr ""
 
 #: cif-code.def:113
 #, fuzzy
-#| msgid "Enable exception handling"
 msgid "non-call exception handling mismatch"
 msgstr "启用异常处理"
 
@@ -1602,7 +1565,6 @@ msgstr "早期内联器可以进行的嵌套间接内联的最大数量"
 
 #: params.def:117
 #, fuzzy
-#| msgid "Probability that COMDAT function will be shared with different compilatoin unit"
 msgid "Probability that COMDAT function will be shared with different compilation unit"
 msgstr "与其他编译单元共享 COMDAT 函数的概率"
 
@@ -1632,7 +1594,6 @@ msgstr "调度候选操作列表的最大长度"
 
 #: params.def:175
 #, fuzzy
-#| msgid "The maximum number of instructions to consider to unroll in a loop"
 msgid "The maximum number of backtrack attempts the scheduler should make when modulo scheduling a loop"
 msgstr "单个循环中考虑展开的最大指令数"
 
@@ -1719,7 +1680,6 @@ msgstr "单个循环最大的剥离数"
 
 #: params.def:300
 #, fuzzy
-#| msgid "The maximum number of iterations through CFG to extend regions"
 msgid "The maximum number of branches on the path through the peeled sequence"
 msgstr "通过 CFG 以扩展区域的最大循环次数"
 
@@ -2152,7 +2112,6 @@ msgstr "为实现跳转提示插入的 nop 的最大数(默认 2)"
 
 #: params.def:980
 #, fuzzy
-#| msgid "Maximum number of times that an insn could be scheduled"
 msgid "Maximum number of conditional store pairs that can be sunk"
 msgstr "指定一条指令最多能被调度几次"
 
@@ -2170,13 +2129,11 @@ msgstr ""
 
 #: params.def:1006
 #, fuzzy
-#| msgid "Allow branches to be packed with other instructions"
 msgid "Allow new data races on packed data loads to be introduced"
 msgstr "允许跳转与其他指令打包在一起"
 
 #: params.def:1011
 #, fuzzy
-#| msgid "Allow branches to be packed with other instructions"
 msgid "Allow new data races on packed data stores to be introduced"
 msgstr "允许跳转与其他指令打包在一起"
 
@@ -2206,31 +2163,26 @@ msgstr ""
 
 #: params.def:1054
 #, fuzzy
-#| msgid "Enable stack probing"
 msgid "Enable asan stack protection"
 msgstr "启用堆栈探测"
 
 #: params.def:1059
 #, fuzzy
-#| msgid "Enable all optional instructions"
 msgid "Enable asan globals protection"
 msgstr "启用所有可选指令"
 
 #: params.def:1064
 #, fuzzy
-#| msgid "Enable saturation instructions"
 msgid "Enable asan store operations protection"
 msgstr "启用饱和指令"
 
 #: params.def:1069
 #, fuzzy
-#| msgid "Enable all optional instructions"
 msgid "Enable asan load operations protection"
 msgstr "启用所有可选指令"
 
 #: params.def:1074 params.def:1079
 #, fuzzy
-#| msgid "Enable saturation instructions"
 msgid "Enable asan builtin functions protection"
 msgstr "启用饱和指令"
 
@@ -2510,7 +2462,6 @@ msgstr "<命令行>"
 #: config/aarch64/aarch64.c:3487 config/arm/arm.c:21114 config/arm/arm.c:21127
 #: config/nios2/nios2.c:1885
 #, fuzzy, c-format
-#| msgid "invalid operand for code '%c'"
 msgid "Unsupported operand for code '%c'"
 msgstr "代码‘%c’的操作数无效"
 
@@ -2519,7 +2470,6 @@ msgstr "代码‘%c’的操作数无效"
 #: config/aarch64/aarch64.c:3551 config/aarch64/aarch64.c:3567
 #: config/aarch64/aarch64.c:3586 config/aarch64/aarch64.c:3625
 #, fuzzy, c-format
-#| msgid "invalid operand for code '%c'"
 msgid "invalid operand for '%%%c'"
 msgstr "代码‘%c’的操作数无效"
 
@@ -2535,19 +2485,16 @@ msgstr "缺少操作数"
 
 #: config/aarch64/aarch64.c:3724
 #, fuzzy, c-format
-#| msgid "invalid insn:"
 msgid "invalid constant"
 msgstr "无效指令:"
 
 #: config/aarch64/aarch64.c:3727
 #, fuzzy, c-format
-#| msgid "invalid %%d operand"
 msgid "invalid operand"
 msgstr "无效的 %%d 操作数"
 
 #: config/aarch64/aarch64.c:3815
 #, fuzzy, c-format
-#| msgid "invalid operand code '%c'"
 msgid "invalid operand prefix '%%%c'"
 msgstr "无效的操作数代码‘%c’"
 
@@ -2637,19 +2584,16 @@ msgstr "无效的 %%xn 代码"
 
 #: config/arc/arc.c:2782
 #, fuzzy, c-format
-#| msgid "invalid operand to %%R code"
 msgid "invalid operand to %%Z code"
 msgstr "%%R 代码的操作数无效"
 
 #: config/arc/arc.c:2790
 #, fuzzy, c-format
-#| msgid "invalid operand to %%R code"
 msgid "invalid operand to %%z code"
 msgstr "%%R 代码的操作数无效"
 
 #: config/arc/arc.c:2798
 #, fuzzy, c-format
-#| msgid "invalid operand to %%R code"
 msgid "invalid operand to %%M code"
 msgstr "%%R 代码的操作数无效"
 
@@ -2675,7 +2619,6 @@ msgstr "%%V 代码的操作数无效"
 
 #: config/arc/arc.c:3099
 #, fuzzy, c-format
-#| msgid "invalid operand to %%R code"
 msgid "invalid operand to %%O code"
 msgstr "%%R 代码的操作数无效"
 
@@ -2689,7 +2632,6 @@ msgstr "无效的操作数输出代码"
 
 #: config/arc/arc.c:4676
 #, fuzzy, c-format
-#| msgid "invalid UNSPEC as operand"
 msgid "invalid UNSPEC as operand: %d"
 msgstr "无效的 UNSPEC 用作操作数"
 
@@ -2749,19 +2691,16 @@ msgstr "地址操作数需要 X、Y 或 Z 寄存器约束"
 
 #: config/avr/avr.c:2140
 #, fuzzy
-#| msgid "output operand %d must use %<&%> constraint"
 msgid "operands to %T/%t must be reg + const_int:"
 msgstr "输出操作数 %d 必须使用%<&%>约束"
 
 #: config/avr/avr.c:2180 config/avr/avr.c:2235
 #, fuzzy
-#| msgid "bad address, not (reg+disp):"
 msgid "bad address, not an I/O address:"
 msgstr "地址错误,不是(reg+disp):"
 
 #: config/avr/avr.c:2189
 #, fuzzy
-#| msgid "bad address, not a constant):"
 msgid "bad address, not a constant:"
 msgstr "错误的地址,不是一个常量):"
 
@@ -2813,7 +2752,6 @@ msgstr "编译器内部错误。不正确的移位量:"
 
 #: config/avr/avr.c:7100
 #, fuzzy
-#| msgid "invalid types in fixed-point conversion"
 msgid "unsupported fixed-point conversion"
 msgstr "整点转换中类型无效"
 
@@ -3058,25 +2996,21 @@ msgstr "无效的 UNSPEC 用作操作数"
 
 #: config/i386/i386.c:14839
 #, fuzzy, c-format
-#| msgid "invalid operand size for operand code '%c'"
 msgid "invalid operand size for operand code 'O'"
 msgstr "操作数代码‘%c’的操作数大小无效"
 
 #: config/i386/i386.c:14874
 #, fuzzy, c-format
-#| msgid "invalid operand size for operand code '%c'"
 msgid "invalid operand size for operand code 'z'"
 msgstr "操作数代码‘%c’的操作数大小无效"
 
 #: config/i386/i386.c:14944
 #, fuzzy, c-format
-#| msgid "invalid operand type used with operand code '%c'"
 msgid "invalid operand type used with operand code 'Z'"
 msgstr "操作数代码‘%c’的操作数类型无效"
 
 #: config/i386/i386.c:14949
 #, fuzzy, c-format
-#| msgid "invalid operand size for operand code '%c'"
 msgid "invalid operand size for operand code 'Z'"
 msgstr "操作数代码‘%c’的操作数大小无效"
 
@@ -3092,13 +3026,11 @@ msgstr "操作数不是一个条件码,无效的操作数代码‘D’"
 
 #: config/i386/i386.c:15115
 #, fuzzy, c-format
-#| msgid "operand is not a condition code, invalid operand code 'D'"
 msgid "operand is not a condition code, invalid operand code '%c'"
 msgstr "操作数不是一个条件码,无效的操作数代码‘D’"
 
 #: config/i386/i386.c:15128
 #, fuzzy, c-format
-#| msgid "operand is not a condition code, invalid operand code 'D'"
 msgid "operand is not an offsettable memory reference, invalid operand code 'H'"
 msgstr "操作数不是一个条件码,无效的操作数代码‘D’"
 
@@ -3127,7 +3059,6 @@ msgstr "使用本地 (MS) 位段存储方式"
 
 #: config/i386/i386-interix.h:78
 #, fuzzy
-#| msgid "Use native (MS) bitfield layout"
 msgid "Use gcc default bitfield layout"
 msgstr "使用本地 (MS) 位段存储方式"
 
@@ -3343,7 +3274,6 @@ msgstr "MMIX 内部错误:这不是一个常量:"
 
 #: config/msp430/msp430.c:2130
 #, fuzzy, c-format
-#| msgid "invalid reference prefix"
 msgid "invalid operand prefix"
 msgstr "无效的引用前缀"
 
@@ -3404,7 +3334,6 @@ msgstr "-mno-altivec 禁用了 VSX"
 
 #: config/rs6000/rs6000.c:3363
 #, fuzzy
-#| msgid "--resource requires -o"
 msgid "-mquad-memory requires 64-bit mode"
 msgstr "--resource 需要 -o"
 
@@ -3414,7 +3343,6 @@ msgstr ""
 
 #: config/rs6000/rs6000.c:3378
 #, fuzzy
-#| msgid "Generate code in little endian mode"
 msgid "-mquad-memory is not available in little endian mode"
 msgstr "生成小端在前的代码"
 
@@ -3503,13 +3431,11 @@ msgstr "传递 AltiVec 参数给无原型的函数"
 
 #: config/rs6000/rs6000.c:32382
 #, fuzzy
-#| msgid "Do not generate a single exit point for each function"
 msgid "Could not generate addis value for fusion"
 msgstr "不为每个函数生成单一的退出点"
 
 #: config/rs6000/rs6000.c:32441
 #, fuzzy
-#| msgid "unable to generate reloads for:"
 msgid "Unable to generate load offset for fusion"
 msgstr "无法生成重新载入,为:"
 
@@ -3638,13 +3564,11 @@ msgstr "无效的 %%B 操作数"
 #: config/sparc/sparc.c:8830 config/tilegx/tilegx.c:5061
 #: config/tilepro/tilepro.c:4516
 #, fuzzy, c-format
-#| msgid "invalid %%P operand"
 msgid "invalid %%C operand"
 msgstr "无效的 %%P 操作数"
 
 #: config/sparc/sparc.c:8847 config/tilegx/tilegx.c:5094
 #, fuzzy, c-format
-#| msgid "invalid %%P operand"
 msgid "invalid %%D operand"
 msgstr "无效的 %%P 操作数"
 
@@ -3700,49 +3624,41 @@ msgstr "无效的 %%d 操作数"
 
 #: config/tilegx/tilegx.c:5174
 #, fuzzy, c-format
-#| msgid "invalid %%L code"
 msgid "invalid %%H specifier"
 msgstr "无效 %%L 代码"
 
 #: config/tilegx/tilegx.c:5216 config/tilepro/tilepro.c:4530
 #, fuzzy, c-format
-#| msgid "invalid %%P operand"
 msgid "invalid %%h operand"
 msgstr "无效的 %%P 操作数"
 
 #: config/tilegx/tilegx.c:5228 config/tilepro/tilepro.c:4594
 #, fuzzy, c-format
-#| msgid "invalid %%P operand"
 msgid "invalid %%I operand"
 msgstr "无效的 %%P 操作数"
 
 #: config/tilegx/tilegx.c:5242 config/tilepro/tilepro.c:4608
 #, fuzzy, c-format
-#| msgid "invalid %%P operand"
 msgid "invalid %%i operand"
 msgstr "无效的 %%P 操作数"
 
 #: config/tilegx/tilegx.c:5265 config/tilepro/tilepro.c:4631
 #, fuzzy, c-format
-#| msgid "invalid %%P operand"
 msgid "invalid %%j operand"
 msgstr "无效的 %%P 操作数"
 
 #: config/tilegx/tilegx.c:5296
 #, fuzzy, c-format
-#| msgid "invalid %%c operand"
 msgid "invalid %%%c operand"
 msgstr "无效的 %%c 操作数"
 
 #: config/tilegx/tilegx.c:5311 config/tilepro/tilepro.c:4745
 #, fuzzy, c-format
-#| msgid "invalid %%P operand"
 msgid "invalid %%N operand"
 msgstr "无效的 %%P 操作数"
 
 #: config/tilegx/tilegx.c:5355
 #, fuzzy, c-format
-#| msgid "invalid operand for 'b' modifier"
 msgid "invalid operand for 'r' specifier"
 msgstr "‘b’修饰符的操作数无效"
 
@@ -3753,37 +3669,31 @@ msgstr ""
 
 #: config/tilepro/tilepro.c:4566
 #, fuzzy, c-format
-#| msgid "invalid %%P operand"
 msgid "invalid %%H operand"
 msgstr "无效的 %%P 操作数"
 
 #: config/tilepro/tilepro.c:4670
 #, fuzzy, c-format
-#| msgid "invalid %%P operand"
 msgid "invalid %%L operand"
 msgstr "无效的 %%P 操作数"
 
 #: config/tilepro/tilepro.c:4730
 #, fuzzy, c-format
-#| msgid "invalid %%P operand"
 msgid "invalid %%M operand"
 msgstr "无效的 %%P 操作数"
 
 #: config/tilepro/tilepro.c:4773
 #, fuzzy, c-format
-#| msgid "invalid %%P operand"
 msgid "invalid %%t operand"
 msgstr "无效的 %%P 操作数"
 
 #: config/tilepro/tilepro.c:4780
 #, fuzzy, c-format
-#| msgid "invalid %%P operand"
 msgid "invalid %%t operand '"
 msgstr "无效的 %%P 操作数"
 
 #: config/tilepro/tilepro.c:4801
 #, fuzzy, c-format
-#| msgid "invalid %%P operand"
 msgid "invalid %%r operand"
 msgstr "无效的 %%P 操作数"
 
@@ -4057,13 +3967,11 @@ msgstr "{匿名}"
 
 #: cp/error.c:1060
 #, fuzzy
-#| msgid "(anonymous)"
 msgid "(anonymous namespace)"
 msgstr "(匿名)"
 
 #: cp/error.c:1169
 #, fuzzy
-#| msgid "<template parameter error>"
 msgid "<template arguments error>"
 msgstr "<模板参数数错误>"
 
@@ -4104,7 +4012,6 @@ msgstr "<未解析>"
 
 #: cp/error.c:2616
 #, fuzzy
-#| msgid "<lambda"
 msgid "<lambda>"
 msgstr "<lambda"
 
@@ -4150,13 +4057,11 @@ msgstr "在 lambda 函数中"
 
 #: cp/error.c:3196
 #, fuzzy, c-format
-#| msgid "%s: In instantiation of %qs:\n"
 msgid "%s: In substitution of %qS:\n"
 msgstr "%s:在%qs的实例化中:\n"
 
 #: cp/error.c:3197
 #, fuzzy
-#| msgid "%s: In instantiation of %qs:\n"
 msgid "%s: In instantiation of %q#D:\n"
 msgstr "%s:在%qs的实例化中:\n"
 
@@ -4185,7 +4090,6 @@ msgstr "    内联自%qs于 %s:%d:%d"
 
 #: cp/error.c:3240
 #, fuzzy
-#| msgid "provided for %q+D"
 msgid "required from %q#D\n"
 msgstr "提供给%q+D"
 
@@ -4196,31 +4100,26 @@ msgstr "%s:%d:从此处实例化"
 
 #: cp/error.c:3248
 #, fuzzy
-#| msgid "called from here"
 msgid "required from here"
 msgstr "从此处调用"
 
 #: cp/error.c:3300
 #, fuzzy
-#| msgid "%s:%d:%d:   [ skipping %d instantiation contexts ]\n"
 msgid "%r%s:%d:%d:%R   [ skipping %d instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]\n"
 msgstr "%s:%d:%d:[ 跳过 %d 个实例化上下文 ]\n"
 
 #: cp/error.c:3306
 #, fuzzy
-#| msgid "%s:%d:%d:   [ skipping %d instantiation contexts ]\n"
 msgid "%r%s:%d:%R   [ skipping %d instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]\n"
 msgstr "%s:%d:%d:[ 跳过 %d 个实例化上下文 ]\n"
 
 #: cp/error.c:3371
 #, fuzzy
-#| msgid "%s:%d:%d:   in constexpr expansion of %qs"
 msgid "%r%s:%d:%d:%R   in constexpr expansion of %qs"
 msgstr "%s:%d:%d:在%qs的广义常表达式扩展中"
 
 #: cp/error.c:3375
 #, fuzzy
-#| msgid "%s:%d:   in constexpr expansion of %qs"
 msgid "%r%s:%d:%R   in constexpr expansion of %qs"
 msgstr "%s:%d:在%qs的广义常表达式扩展中"
 
@@ -4390,13 +4289,11 @@ msgstr ""
 
 #: fortran/error.c:899
 #, fuzzy
-#| msgid "Obsolescent feature: Computed GOTO at %C"
 msgid "Obsolescent feature:"
 msgstr "已过时的特性:%C处的计算转移 GOTO 语句"
 
 #: fortran/error.c:902
 #, fuzzy
-#| msgid "expected operator"
 msgid "Deleted feature:"
 msgstr "需要操作符"
 
@@ -4647,61 +4544,51 @@ msgstr "基本过程"
 
 #: fortran/resolve.c:2225
 #, fuzzy
-#| msgid "no arguments"
 msgid "allocatable argument"
 msgstr "没有参数"
 
 #: fortran/resolve.c:2230
 #, fuzzy
-#| msgid "not enough arguments"
 msgid "asynchronous argument"
 msgstr "实参太少"
 
 #: fortran/resolve.c:2235
 #, fuzzy
-#| msgid "invalid PHI argument"
 msgid "optional argument"
 msgstr "无效的 PHI 实参"
 
 #: fortran/resolve.c:2240
 #, fuzzy
-#| msgid "pointer assignment"
 msgid "pointer argument"
 msgstr "指针赋值"
 
 #: fortran/resolve.c:2245
 #, fuzzy
-#| msgid "no arguments"
 msgid "target argument"
 msgstr "没有参数"
 
 #: fortran/resolve.c:2250
 #, fuzzy
-#| msgid "invalid PHI argument"
 msgid "value argument"
 msgstr "无效的 PHI 实参"
 
 #: fortran/resolve.c:2255
 #, fuzzy
-#| msgid "no arguments"
 msgid "volatile argument"
 msgstr "没有参数"
 
 #: fortran/resolve.c:2260
 #, fuzzy
-#| msgid "mismatched arguments"
 msgid "assumed-shape argument"
 msgstr "参数不匹配"
 
 #: fortran/resolve.c:2265
 #, fuzzy
-#| msgid "mismatched arguments"
 msgid "assumed-rank argument"
 msgstr "参数不匹配"
 
 #: fortran/resolve.c:2270
 #, fuzzy
-#| msgid "array assignment"
 msgid "coarray argument"
 msgstr "数组赋值"
 
@@ -4711,7 +4598,6 @@ msgstr ""
 
 #: fortran/resolve.c:2280
 #, fuzzy
-#| msgid "no arguments"
 msgid "polymorphic argument"
 msgstr "没有参数"
 
@@ -4723,7 +4609,6 @@ msgstr ""
 #. See also TS 29113, Note 6.1.
 #: fortran/resolve.c:2292
 #, fuzzy
-#| msgid "mismatched arguments"
 msgid "assumed-type argument"
 msgstr "参数不匹配"
 
@@ -4738,13 +4623,11 @@ msgstr "%3$L 处“%1$s”分句对象“%2$s”有 ALLOCATABLE 组件"
 
 #: fortran/resolve.c:2315
 #, fuzzy
-#| msgid "'%s' at %L must have constant character length in this context"
 msgid "result with non-constant character length"
 msgstr "变量‘%s’在%L处上下文中字符长度必须为常量"
 
 #: fortran/resolve.c:2327
 #, fuzzy
-#| msgid "module procedure"
 msgid "bind(c) procedure"
 msgstr "模块过程"
 
@@ -4894,7 +4777,6 @@ msgstr "%3$s 中字符长度不相等 (%1$ld/%2$ld)"
 
 #: fortran/trans-intrinsic.c:6165
 #, fuzzy, c-format
-#| msgid "Argument NCOPIES of REPEAT intrinsic is negative (its value is %lld)"
 msgid "Argument NCOPIES of REPEAT intrinsic is negative (its value is %ld)"
 msgstr "内建函数 REPEAT 的 NCOPIES 参数为负(其值是 %lld)"
 
@@ -4964,7 +4846,6 @@ msgstr ""
 
 #: go/go-backend.c:171
 #, fuzzy
-#| msgid "Memory allocation failed"
 msgid "memory allocation failed while reading export data"
 msgstr "内存分配失败"
 
@@ -5230,13 +5111,11 @@ msgstr "Ada 需要指定 -c 或 -S"
 
 #: ada/gcc-interface/lang-specs.h:52
 #, fuzzy
-#| msgid "-c or -S required for Ada"
 msgid "-c required for gnat2why"
 msgstr "Ada 需要指定 -c 或 -S"
 
 #: ada/gcc-interface/lang-specs.h:65
 #, fuzzy
-#| msgid "-c or -S required for Ada"
 msgid "-c required for gnat2scil"
 msgstr "Ada 需要指定 -c 或 -S"
 
@@ -5266,7 +5145,6 @@ msgstr "不能同时使用 -EB 和 -EL"
 
 #: config/avr/avr.h:526
 #, fuzzy
-#| msgid "-fpic is not supported"
 msgid "shared is not supported"
 msgstr "不支持 -fpic"
 
@@ -5284,7 +5162,6 @@ msgstr "-mas100-syntax 与 -gdwarf 不兼容"
 
 #: config/rx/rx.h:76
 #, fuzzy
-#| msgid "rx200 cpu does not have FPU hardware"
 msgid "rx100 cpu does not have FPU hardware"
 msgstr "RX200 CPU 没有 FPU 硬件"
 
@@ -5306,7 +5183,6 @@ msgstr "-femit-class-file 应当与 -fsyntax-only 一起使用"
 
 #: config/rs6000/freebsd64.h:161 config/rs6000/freebsd64.h:173
 #, fuzzy
-#| msgid "consider using `-pg' instead of `-p' with gprof(1) "
 msgid "consider using `-pg' instead of `-p' with gprof(1)"
 msgstr "与 gprof(1) 一起使用时请考虑使用‘-pg’以代替‘-p’"
 
@@ -5321,7 +5197,6 @@ msgstr ""
 
 #: gcc.c:731
 #, fuzzy
-#| msgid "-fdirectives-only is incompatible with -traditional"
 msgid "-fsanitize=address is incompatible with -fsanitize=thread"
 msgstr "-fdirectives-only 与 -traditional 不兼容"
 
@@ -5339,7 +5214,6 @@ msgstr "当输入来自标准输入设备时,需要 -E 或 -x"
 
 #: config/arm/arm.h:217
 #, fuzzy
-#| msgid "-msoft-float and -mhard_float may not be used together"
 msgid "-mfloat-abi=soft and -mfloat-abi=hard may not be used together"
 msgstr "-msoft-float 和 -mhard_float 不能一起使用"
 
@@ -5410,7 +5284,6 @@ msgstr "打印额外(可能您并不想要)的警告信息"
 
 #: fortran/lang.opt:242
 #, fuzzy
-#| msgid "Warn about implicit function declarations"
 msgid "Warn about function call elimination"
 msgstr "对隐式函数声明给出警告"
 
@@ -5436,13 +5309,11 @@ msgstr ""
 
 #: fortran/lang.opt:270
 #, fuzzy
-#| msgid "Warn when a register variable is declared volatile"
 msgid "Warn when a left-hand-side array variable is reallocated"
 msgstr "当一个寄存器变量被声明为 volatile 时给出警告"
 
 #: fortran/lang.opt:274
 #, fuzzy
-#| msgid "Warn when a register variable is declared volatile"
 msgid "Warn when a left-hand-side variable is reallocated"
 msgstr "当一个寄存器变量被声明为 volatile 时给出警告"
 
@@ -5473,7 +5344,6 @@ msgstr "对未使用的哑元给出警告。"
 
 #: fortran/lang.opt:306
 #, fuzzy
-#| msgid "Warn about zero-length formats"
 msgid "Warn about zero-trip DO loops"
 msgstr "对长度为 0 的格式字符串给出警告"
 
@@ -5616,7 +5486,6 @@ msgstr "-ffpe-trap=[...]\t在以下浮点异常的情况下停止"
 
 #: fortran/lang.opt:458
 #, fuzzy
-#| msgid "-ffpe-trap=[...]\tStop on following floating point exceptions"
 msgid "-ffpe-summary=[...]\tPrint summary of floating point exceptions"
 msgstr "-ffpe-trap=[...]\t在以下浮点异常的情况下停止"
 
@@ -5634,7 +5503,6 @@ msgstr "-ffree-line-length-<n>\t在自由模式下以 n 作为字符行宽"
 
 #: fortran/lang.opt:474
 #, fuzzy
-#| msgid "Enable linker optimizations"
 msgid "Enable front end optimization"
 msgstr "启用链接器优化"
 
@@ -5784,7 +5652,6 @@ msgstr "遵循 ISO Fortran 2008 标准"
 
 #: fortran/lang.opt:670
 #, fuzzy
-#| msgid "Conform to the ISO Fortran 2008 standard"
 msgid "Conform to the ISO Fortran 2008 standard including TS 29113"
 msgstr "遵循 ISO Fortran 2008 标准"
 
@@ -5937,13 +5804,11 @@ msgstr "当在 C 语言中使用了 C 与 C++ 交集以外的构造时给出警
 
 #: c-family/c.opt:296
 #, fuzzy
-#| msgid "Deprecated in favor of -std=c99"
 msgid "Deprecated in favor of -Wc++11-compat"
 msgstr "不建议使用,请改用 -std=c99"
 
 #: c-family/c.opt:300
 #, fuzzy
-#| msgid "Warn about C++ constructs whose meaning differs between ISO C++ 1998 and ISO C++ 200x"
 msgid "Warn about C++ constructs whose meaning differs between ISO C++ 1998 and ISO C++ 2011"
 msgstr "当 C++ 构造的意义在 ISO C++ 1998 和 ISO C++ 200x 中不同时给出警告"
 
@@ -5989,13 +5854,11 @@ msgstr "当声明出现在语句后时给出警告"
 
 #: c-family/c.opt:344
 #, fuzzy
-#| msgid "dereferencing pointer to incomplete type"
 msgid "Warn when deleting a pointer to incomplete type"
 msgstr "提领指向不完全类型的指针"
 
 #: c-family/c.opt:348
 #, fuzzy
-#| msgid "Warn about non-virtual destructors"
 msgid "Warn about deleting polymorphic objects with non-virtual destructors"
 msgstr "当析构函数不是虚函数时给出警告"
 
@@ -6029,7 +5892,6 @@ msgstr "不建议使用此开关;请改用 -Werror=implicit-function-declarati
 
 #: c-family/c.opt:392
 #, fuzzy
-#| msgid "Warn for implicit type conversions that may change a value"
 msgid "Warn for implicit type conversions that cause loss of floating point precision"
 msgstr "当隐式类型转换可能改变值时给出警告"
 
@@ -6286,7 +6148,6 @@ msgstr "编译器将代码重新排序时给出警告"
 
 #: c-family/c.opt:673
 #, fuzzy
-#| msgid "returning reference to temporary"
 msgid "Warn about returning a pointer/reference to a local or temporary variable."
 msgstr "返回临时变量的引用"
 
@@ -6364,7 +6225,6 @@ msgstr "对不带后缀的浮点常量给出警告"
 
 #: c-family/c.opt:777
 #, fuzzy
-#| msgid "Warn about macros defined in the main file that are not used"
 msgid "Warn when typedefs locally defined in a function are not used"
 msgstr "当定义在主文件中的宏未被使用时给出警告"
 
@@ -6378,7 +6238,6 @@ msgstr "当一个带有 warn_unused_result 属性的函数的调用者未使用
 
 #: c-family/c.opt:789
 #, fuzzy
-#| msgid "Do not warn about using variadic macros when -pedantic"
 msgid "Warn about using variadic macros"
 msgstr "指定 -pedantic 时不为可变参数宏给出警告"
 
@@ -6404,13 +6263,11 @@ msgstr "在 C++ 中,非零值表示将字面字符串转换为‘char *’时
 
 #: c-family/c.opt:813
 #, fuzzy
-#| msgid "Warn when a label is unused"
 msgid "Warn when a literal '0' is used as null pointer"
 msgstr "有未使用的标号时警告"
 
 #: c-family/c.opt:817
 #, fuzzy
-#| msgid "Warn about misuses of pragmas"
 msgid "Warn about useless casts"
 msgstr "对错误使用的 pragma 加以警告"
 
@@ -6467,25 +6324,21 @@ msgstr "-fconst-string-class=<名字>\t使用名字作为常量字符串类的
 
 #: c-family/c.opt:883
 #, fuzzy
-#| msgid "-ftemplate-depth=<number>\tSpecify maximum template instantiation depth"
 msgid "-fconstexpr-depth=<number>\tSpecify maximum constexpr recursion depth"
 msgstr "-ftemplate-depth=<N>\t指定模板实例化的最大深度"
 
 #: c-family/c.opt:887
 #, fuzzy
-#| msgid "Enable traditional preprocessing"
 msgid "Emit debug annotations during preprocessing"
 msgstr "启用传统预处理"
 
 #: c-family/c.opt:891
 #, fuzzy
-#| msgid "-fno-deduce-init-list\tdisable 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 "-fno-deduce-init-list\t禁用为模板类型参数从花括号中的初始值设定列表演绎 std::initializer_list"
 
 #: c-family/c.opt:895
 #, fuzzy
-#| msgid "Warn when all constructors and destructors are private"
 msgid "Factor complex constructors and destructors to favor space over speed"
 msgstr "当所有构造函数和析构函数都是私有时给出警告"
 
@@ -6632,7 +6485,6 @@ msgstr "启用 OpenMP(对 Fortran 而言也同时设定 -frecursive)"
 
 #: c-family/c.opt:1090
 #, fuzzy
-#| msgid "Unclassifiable OpenMP directive at %C"
 msgid "Enable OpenMP's SIMD directives"
 msgstr "%C处的 OpenMP 指示无法分类"
 
@@ -6710,7 +6562,6 @@ msgstr "-ftabstop=<N>\t指定报告列号时制表位间的距离"
 
 #: c-family/c.opt:1183
 #, 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 "单个循环最大的剥离数"
 
@@ -6740,7 +6591,6 @@ msgstr "在异常处理中使用 __cxa_get_exception_ptr"
 
 #: c-family/c.opt:1217
 #, fuzzy
-#| msgid "Marks all inlined methods as having hidden visibility"
 msgid "Marks all inlined functions and methods as having hidden visibility"
 msgstr "将所有内联函数标记为具有隐藏的可见性"
 
@@ -6842,37 +6692,31 @@ msgstr "包含文件时映射短文件名"
 
 #: c-family/c.opt:1344 c-family/c.opt:1348
 #, fuzzy
-#| msgid "Conform to the ISO 1998 C++ standard with GNU extensions"
 msgid "Conform to the ISO 1998 C++ standard revised by the 2003 technical corrigendum"
 msgstr "遵循 ISO 1998 C++ 标准,也支持 GNU 扩展"
 
 #: c-family/c.opt:1352
 #, fuzzy
-#| msgid "Conform to the ISO 201X C standard draft (experimental and incomplete support)"
 msgid "Conform to the ISO 2011 C++ standard (experimental and incomplete support)"
 msgstr "遵循 ISO 201X C 标准草案(试验性质的不完全支持)"
 
 #: c-family/c.opt:1356
 #, fuzzy
-#| msgid "Deprecated in favor of -std=c99"
 msgid "Deprecated in favor of -std=c++11"
 msgstr "不建议使用,请改用 -std=c99"
 
 #: c-family/c.opt:1360
 #, fuzzy
-#| msgid "Conform to the ISO 201X C standard draft (experimental and incomplete support)"
 msgid "Conform to the ISO 201y(7?) C++ draft standard (experimental and incomplete support)"
 msgstr "遵循 ISO 201X C 标准草案(试验性质的不完全支持)"
 
 #: c-family/c.opt:1364 c-family/c.opt:1450
 #, fuzzy
-#| msgid "Conform to the ISO 201X C standard draft (experimental and incomplete support)"
 msgid "Conform to the ISO 2011 C standard (experimental and incomplete support)"
 msgstr "遵循 ISO 201X C 标准草案(试验性质的不完全支持)"
 
 #: c-family/c.opt:1368
 #, fuzzy
-#| msgid "Deprecated in favor of -std=c99"
 msgid "Deprecated in favor of -std=c11"
 msgstr "不建议使用,请改用 -std=c99"
 
@@ -6890,37 +6734,31 @@ msgstr "不建议使用,请改用 -std=c99"
 
 #: c-family/c.opt:1388 c-family/c.opt:1393
 #, fuzzy
-#| msgid "Conform to the ISO 1998 C++ standard with GNU extensions"
 msgid "Conform to the ISO 1998 C++ standard revised by the 2003 technical"
 msgstr "遵循 ISO 1998 C++ 标准,也支持 GNU 扩展"
 
 #: c-family/c.opt:1398
 #, fuzzy
-#| msgid "Conform to the ISO 201X C standard draft with GNU extensions (experimental and incomplete support)"
 msgid "Conform to the ISO 2011 C++ standard with GNU extensions (experimental and incomplete support)"
 msgstr "遵循 ISO 201X C 标准草案和 GNU 扩展(试验性质的不完全支持)"
 
 #: c-family/c.opt:1402
 #, fuzzy
-#| msgid "Deprecated in favor of -std=gnu99"
 msgid "Deprecated in favor of -std=gnu++11"
 msgstr "不建议使用,请改用 -std=gnu99"
 
 #: c-family/c.opt:1406
 #, fuzzy
-#| msgid "Conform to the ISO 201X C standard draft with GNU extensions (experimental and incomplete support)"
 msgid "Conform to the ISO 201y(7?) C++ draft standard with GNU extensions (experimental and incomplete support)"
 msgstr "遵循 ISO 201X C 标准草案和 GNU 扩展(试验性质的不完全支持)"
 
 #: c-family/c.opt:1410
 #, fuzzy
-#| msgid "Conform to the ISO 201X C standard draft with GNU extensions (experimental and incomplete support)"
 msgid "Conform to the ISO 2011 C standard with GNU extensions (experimental and incomplete support)"
 msgstr "遵循 ISO 201X C 标准草案和 GNU 扩展(试验性质的不完全支持)"
 
 #: c-family/c.opt:1414
 #, fuzzy
-#| msgid "Deprecated in favor of -std=gnu99"
 msgid "Deprecated in favor of -std=gnu11"
 msgstr "不建议使用,请改用 -std=gnu99"
 
@@ -6958,7 +6796,6 @@ msgstr "不预定义系统或 GCC 特定的宏"
 
 #: ada/gcc-interface/lang.opt:61
 #, fuzzy
-#| msgid "Synonym for -Wcomment"
 msgid "Synonym of -gnatk8"
 msgstr "-Wcomment 的同义词"
 
@@ -6968,7 +6805,6 @@ msgstr ""
 
 #: ada/gcc-interface/lang.opt:73
 #, fuzzy
-#| msgid "Select code model"
 msgid "Select the runtime"
 msgstr "选择代码模型"
 
@@ -7036,7 +6872,6 @@ msgstr ""
 
 #: config/vms/vms.opt:42
 #, fuzzy, c-format
-#| msgid "unknown TLS model %qs"
 msgid "unknown pointer size model %qs"
 msgstr "未知的 TLS 模型%qs"
 
@@ -7547,7 +7382,6 @@ msgstr "假定目标 CPU 被配置为大端在前"
 
 #: config/aarch64/aarch64.opt:68
 #, fuzzy
-#| msgid "Generate code which uses hardware floating point instructions"
 msgid "Generate code which uses only the general registers"
 msgstr "生成使用硬件浮点指令的代码"
 
@@ -7558,7 +7392,6 @@ msgstr "假定目标 CPU 被配置为小端在前"
 
 #: config/aarch64/aarch64.opt:76
 #, fuzzy
-#| msgid "Select code model"
 msgid "Specify the code model"
 msgstr "选择代码模型"
 
@@ -7576,13 +7409,11 @@ msgstr ""
 
 #: config/aarch64/aarch64.opt:92
 #, fuzzy
-#| msgid "-mcpu=\tUse features of and schedule code for given CPU"
 msgid "-march=ARCH\tUse features of architecture ARCH"
 msgstr "-mcpu=\t使用指定 CPU 的特性和调度代码"
 
 #: config/aarch64/aarch64.opt:96
 #, fuzzy
-#| msgid "-mcpu=\tUse features of and schedule code for given CPU"
 msgid "-mcpu=CPU\tUse features of and optimize for CPU"
 msgstr "-mcpu=\t使用指定 CPU 的特性和调度代码"
 
@@ -7592,7 +7423,6 @@ msgstr ""
 
 #: config/aarch64/aarch64.opt:104
 #, fuzzy
-#| msgid "-mabi=ABI\tGenerate code that conforms to the given ABI"
 msgid "-mabi=ABI\tGenerate code that conforms to the specified ABI"
 msgstr "-mabi=ABI\t生成遵循给定 ABI 的代码"
 
@@ -7874,25 +7704,21 @@ msgstr ""
 
 #: config/epiphany/epiphany.opt:32
 #, fuzzy
-#| msgid "Relax branches"
 msgid "Set branch cost"
 msgstr "放宽跳转"
 
 #: config/epiphany/epiphany.opt:36
 #, fuzzy
-#| msgid "Enable all optional instructions"
 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 "预取操作完成前执行指令的数目"
 
 #: config/epiphany/epiphany.opt:52
 #, fuzzy
-#| msgid "Use software floating point"
 msgid "Use software floating point comparisons"
 msgstr "使用软件浮点单元"
 
@@ -7918,13 +7744,11 @@ msgstr ""
 
 #: config/epiphany/epiphany.opt:76
 #, fuzzy
-#| msgid "Generate call insns as indirect calls, if necessary"
 msgid "Generate call insns as indirect calls"
 msgstr "如有必须,为调用指令生成间接调用"
 
 #: config/epiphany/epiphany.opt:80
 #, fuzzy
-#| msgid "Generate call insns as indirect calls, if necessary"
 msgid "Generate call insns as direct calls"
 msgstr "如有必须,为调用指令生成间接调用"
 
@@ -7938,7 +7762,6 @@ msgstr ""
 
 #: config/epiphany/epiphany.opt:112
 #, fuzzy
-#| msgid "Use structs on stronger alignment for double-word copies"
 msgid "Vectorize for double-word operations."
 msgstr "为结构使用更强的对齐以使用双字复制"
 
@@ -7948,7 +7771,6 @@ msgstr ""
 
 #: config/epiphany/epiphany.opt:132
 #, fuzzy
-#| msgid "Use hardware floating point conversion instructions"
 msgid "Use the floating point unit for integer add/subtract."
 msgstr "使用浮点转换指令"
 
@@ -8184,7 +8006,6 @@ msgstr "sizeof(long double) 等于 12"
 
 #: config/i386/i386.opt:190
 #, fuzzy
-#| msgid "Use 128-bit long double"
 msgid "Use 80-bit long double"
 msgstr "使用 128 位 long double"
 
@@ -8244,7 +8065,6 @@ msgstr ""
 
 #: config/i386/i386.opt:271
 #, fuzzy
-#| msgid "Use given x86-64 code model"
 msgid "Use given address mode"
 msgstr "使用给定的 x86-64 代码模式"
 
@@ -8291,19 +8111,16 @@ msgstr "不建议使用%<-mintel-syntax%>和 %<-mno-intel-syntax%>;请改用%<
 
 #: config/i386/i386.opt:369
 #, fuzzy
-#| msgid "Set 80387 floating-point precision (-mpc32, -mpc64, -mpc80)"
 msgid "Set 80387 floating-point precision to 32-bit"
 msgstr "设定 80387 浮点精度(-mpc32、-mpc64、-mpc80)"
 
 #: config/i386/i386.opt:373
 #, fuzzy
-#| msgid "Set 80387 floating-point precision (-mpc32, -mpc64, -mpc80)"
 msgid "Set 80387 floating-point precision to 64-bit"
 msgstr "设定 80387 浮点精度(-mpc32、-mpc64、-mpc80)"
 
 #: config/i386/i386.opt:377
 #, fuzzy
-#| msgid "Set 80387 floating-point precision (-mpc32, -mpc64, -mpc80)"
 msgid "Set 80387 floating-point precision to 80-bit"
 msgstr "设定 80387 浮点精度(-mpc32、-mpc64、-mpc80)"
 
@@ -8361,7 +8178,6 @@ msgstr "选择生成字符串操作的策略"
 
 #: config/i386/i386.opt:433
 #, fuzzy
-#| msgid "bad value (%s) for %sstringop-strategy=%s %s"
 msgid "Valid arguments to -mstringop-strategy=:"
 msgstr "%2$sstringop-strategy=%3$s %4$s所带参数(%1$s)不正确"
 
@@ -8425,7 +8241,6 @@ msgstr ""
 
 #: config/i386/i386.opt:543
 #, fuzzy
-#| msgid "Do dispatch scheduling if processor is bdver1 and Haifa scheduling"
 msgid "Do dispatch scheduling if processor is bdver1 or bdver2 or bdver3 or bdver4 and Haifa scheduling"
 msgstr "进行海法调度,当处理器是 bdver1 时也进行派遣调度"
 
@@ -8443,13 +8258,11 @@ msgstr "生成 64 位 x86-64 代码"
 
 #: config/i386/i386.opt:562
 #, fuzzy
-#| msgid "Generate 64bit x86-64 code"
 msgid "Generate 32bit x86-64 code"
 msgstr "生成 64 位 x86-64 代码"
 
 #: config/i386/i386.opt:566
 #, fuzzy
-#| msgid "Generate 32bit i386 code"
 msgid "Generate 16bit i386 code"
 msgstr "生成 32 位 i386 代码"
 
@@ -8503,31 +8316,26 @@ msgstr "支持 MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2 和 AVX 内建
 
 #: config/i386/i386.opt:622
 #, 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 AVX2 built-in functions and code generation"
 msgstr "支持 MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、AVX 和 FMA 内建函数及代码生成"
 
 #: config/i386/i386.opt:626
 #, 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, AVX2 and AVX512F built-in functions and code generation"
 msgstr "支持 MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、AVX 和 FMA 内建函数及代码生成"
 
 #: config/i386/i386.opt:630
 #, 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, AVX2 and AVX512F and AVX512PF built-in functions and code generation"
 msgstr "支持 MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、AVX 和 FMA 内建函数及代码生成"
 
 #: config/i386/i386.opt:634
 #, 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, AVX2 and AVX512F and AVX512ER built-in functions and code generation"
 msgstr "支持 MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、AVX 和 FMA 内建函数及代码生成"
 
 #: config/i386/i386.opt:638
 #, 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, AVX2 and AVX512F and AVX512CD built-in functions and code generation"
 msgstr "支持 MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、AVX 和 FMA 内建函数及代码生成"
 
@@ -8565,13 +8373,11 @@ msgstr "支持 BMI 内建函数及代码生成"
 
 #: config/i386/i386.opt:674
 #, fuzzy
-#| msgid "Support BMI built-in functions and code generation"
 msgid "Support BMI2 built-in functions and code generation"
 msgstr "支持 BMI 内建函数及代码生成"
 
 #: config/i386/i386.opt:678
 #, fuzzy
-#| msgid "Support TBM built-in functions and code generation"
 msgid "Support LZCNT built-in function and code generation"
 msgstr "支持 TBM 内建函数及代码生成"
 
@@ -8581,7 +8387,6 @@ msgstr ""
 
 #: config/i386/i386.opt:686
 #, fuzzy
-#| msgid "Use SmartMIPS instructions"
 msgid "Support RDSEED instruction"
 msgstr "使用 SmartMIPS 指令"
 
@@ -8591,7 +8396,6 @@ msgstr ""
 
 #: config/i386/i386.opt:694
 #, fuzzy
-#| msgid "Support code generation of crc32 instruction."
 msgid "Support flag-preserving add-carry instructions"
 msgstr "支持生成 crc32 指令。"
 
@@ -8601,13 +8405,11 @@ msgstr ""
 
 #: config/i386/i386.opt:702
 #, fuzzy
-#| msgid "Support calls between Thumb and ARM instruction sets"
 msgid "Support XSAVE and XRSTOR instructions"
 msgstr "支持 Thumb 和 ARM 指令集间互相调用g"
 
 #: config/i386/i386.opt:706
 #, fuzzy
-#| msgid "Support MMX built-in functions"
 msgid "Support XSAVEOPT instruction"
 msgstr "支持 MMX 内建函数"
 
@@ -8637,7 +8439,6 @@ msgstr "支持 AES 内建函数及代码生成"
 
 #: config/i386/i386.opt:734
 #, fuzzy
-#| msgid "Support MMX and SSE built-in functions and code generation"
 msgid "Support SHA1 and SHA256 built-in functions and code generation"
 msgstr "支持 MMX 和 SSE 内建函数及代码生成"
 
@@ -8680,13 +8481,11 @@ msgstr ""
 
 #: config/i386/i386.opt:774
 #, fuzzy
-#| msgid "Support TBM built-in functions and code generation"
 msgid "Support RTM built-in functions and code generation"
 msgstr "支持 TBM 内建函数及代码生成"
 
 #: config/i386/i386.opt:778
 #, fuzzy
-#| msgid "Use propolice as a stack protection method"
 msgid "Use given stack-protector guard"
 msgstr "使用 propolice 来保护堆栈"
 
@@ -8805,7 +8604,6 @@ msgstr "启用后端调试"
 
 #: config/v850/v850.opt:41
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the callt instruction (default)"
 msgstr "不使用 callt 指令"
 
@@ -8871,13 +8669,11 @@ msgstr "为 v850e2v3 处理器编译"
 
 #: config/v850/v850.opt:117
 #, fuzzy
-#| msgid "Compile for the v850e processor"
 msgid "Compile for the v850e3v5 processor"
 msgstr "为 v850e 处理器编译"
 
 #: config/v850/v850.opt:124
 #, fuzzy
-#| msgid "Enable clip instructions"
 msgid "Enable v850e3v5 loop instructions"
 msgstr "启用 clip 指令"
 
@@ -8887,37 +8683,31 @@ msgstr "为 ZDA 区域合格的数据设置最大尺寸"
 
 #: config/v850/v850.opt:135
 #, fuzzy
-#| msgid "Enable the rank heuristic in the scheduler"
 msgid "Enable relaxing in the assembler"
 msgstr "在调度器中启用秩启发"
 
 #: config/v850/v850.opt:139
 #, fuzzy
-#| msgid "Prohibit PC relative function calls"
 msgid "Prohibit PC relative jumps"
 msgstr "禁止相对 PC 的函数调用"
 
 #: config/v850/v850.opt:143
 #, fuzzy
-#| msgid "Prevent the use of all hardware floating-point instructions"
 msgid "Inhibit the use of hardware floating point instructions"
 msgstr "不允许使用任何硬件浮点指令"
 
 #: 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 "允许使用硬件浮点 ABI 和指令"
 
 #: config/v850/v850.opt:151
 #, fuzzy
-#| msgid "Enable the use of RX FPU instructions.  This is the default."
 msgid "Enable support for the RH850 ABI.  This is the default"
 msgstr "启用使用 RX FPU 指令。这是默认值。"
 
 #: config/v850/v850.opt:155
 #, fuzzy
-#| msgid "Enable support for huge objects"
 msgid "Enable support for the old GCC ABI"
 msgstr "启用对巨型对象的支持"
 
@@ -8951,13 +8741,11 @@ msgstr "假定 VxWorks vThreads 环境"
 
 #: config/cr16/cr16.opt:23
 #, fuzzy
-#| msgid "-msim\tUse simulator runtime"
 msgid "-msim   Use simulator runtime"
 msgstr "-msim\t使用仿真器运行时"
 
 #: config/cr16/cr16.opt:27
 #, fuzzy
-#| msgid "Generate bit instructions"
 msgid "Generate SBIT, CBIT instructions"
 msgstr "生成位指令"
 
@@ -8971,19 +8759,16 @@ msgstr ""
 
 #: config/cr16/cr16.opt:42
 #, fuzzy
-#| msgid "Generate code for a cpu32"
 msgid "Generate code for CR16C architecture"
 msgstr "为 cpu32 生成代码"
 
 #: config/cr16/cr16.opt:46
 #, fuzzy
-#| msgid "Generate code for GNU assembler (gas)"
 msgid "Generate code for CR16C+ architecture (Default)"
 msgstr "为 GNU 汇编器(gas)生成代码"
 
 #: config/cr16/cr16.opt:50
 #, fuzzy
-#| msgid "Pointers are 32-bit"
 msgid "Treat integers as 32-bit."
 msgstr "指针是 32 位"
 
@@ -9038,7 +8823,6 @@ msgstr ""
 
 #: config/avr/avr.opt:80
 #, fuzzy
-#| msgid "taking the address of a label is non-standard"
 msgid "Warn if the address space of an address is changed."
 msgstr "取标号的地址不符合标准"
 
@@ -9157,7 +8941,6 @@ msgstr "使用 128 位 long double"
 
 #: config/s390/s390.opt:117
 #, fuzzy
-#| msgid "Use hardware floating point instructions"
 msgid "Use hardware transactional execution instructions"
 msgstr "使用硬件浮点指令"
 
@@ -9203,7 +8986,6 @@ msgstr ""
 
 #: config/s390/s390.opt:167 config/rs6000/rs6000.opt:470
 #, fuzzy
-#| msgid "Use ROM instead of RAM"
 msgid "Use LRA instead of reload"
 msgstr "使用 ROM 而不是 RAM"
 
@@ -9217,7 +8999,6 @@ msgstr ""
 
 #: config/rl78/rl78.opt:47
 #, fuzzy
-#| msgid "Specifies the number of registers to reserve for interrupt handlers."
 msgid "Use all registers, reserving none for interrupt handlers."
 msgstr "指定保留给中断处理函数使用的寄存器的数量"
 
@@ -9227,7 +9008,6 @@ msgstr ""
 
 #: config/rl78/rl78.opt:55
 #, fuzzy
-#| msgid "Target the AM33/2.0 processor"
 msgid "Target the RL78/G10 series"
 msgstr "目标为 AM33/2.0 处理器"
 
@@ -9277,7 +9057,6 @@ msgstr "生成可重入的 PIC 代码"
 
 #: config/arm/arm.opt:90
 #, fuzzy
-#| msgid "Generate code for 32 bit addressing"
 msgid "Generate code in 32 bit ARM state."
 msgstr "为 32 位寻址生成代码"
 
@@ -9303,7 +9082,6 @@ msgstr "指定 __fp16 浮点格式"
 
 #: config/arm/arm.opt:131
 #, fuzzy
-#| msgid "invalid __fp16 format option: -mfp16-format=%s"
 msgid "Known __fp16 formats (for use with the -mfp16-format= option):"
 msgstr "无效的 __fp16 浮点选项:-mfp16-format=%s"
 
@@ -9317,7 +9095,6 @@ msgstr "如有必须,为调用指令生成间接调用"
 
 #: config/arm/arm.opt:163
 #, fuzzy
-#| msgid "Assume arguments alias no other storage"
 msgid "Assume data segments are relative to text segment."
 msgstr "假定实参不与其他存储重叠"
 
@@ -9343,7 +9120,6 @@ msgstr "为结构指定最小位对齐"
 
 #: config/arm/arm.opt:190
 #, fuzzy
-#| msgid "Generate code for GNU as"
 msgid "Generate code for Thumb state"
 msgstr "为 GNU as 生成代码"
 
@@ -9353,7 +9129,6 @@ msgstr "支持 Thumb 和 ARM 指令集间互相调用g"
 
 #: config/arm/arm.opt:198
 #, fuzzy
-#| msgid "Use given thread-local storage dialect"
 msgid "Specify thread local storage scheme"
 msgstr "使用给定的线程局部存储模式"
 
@@ -9380,7 +9155,6 @@ msgstr "为指定的处理器优化代码"
 
 #: config/arm/arm.opt:236
 #, fuzzy
-#| msgid "Assume big endian bytes, little endian words"
 msgid "Assume big endian bytes, little endian words.  This option is deprecated."
 msgstr "假定高位字节在前,低位字在前"
 
@@ -9390,7 +9164,6 @@ msgstr "使用 Neon 四字(而非双字)寄存器来进行向量化"
 
 #: config/arm/arm.opt:244
 #, fuzzy
-#| msgid "Use Neon quad-word (rather than double-word) registers for vectorization"
 msgid "Use Neon double-word (rather than quad-word) registers for vectorization"
 msgstr "使用 Neon 四字(而非双字)寄存器来进行向量化"
 
@@ -9436,7 +9209,6 @@ msgstr "不使用硬件浮点单元"
 
 #: config/sparc/sparc.opt:42
 #, fuzzy
-#| msgid "Use alternate register names"
 msgid "Use flat register window model"
 msgstr "使用另一套寄存器名"
 
@@ -9462,37 +9234,31 @@ msgstr "为 V8+ ABI 编译"
 
 #: config/sparc/sparc.opt:66
 #, fuzzy
-#| msgid "Use UltraSPARC Visual Instruction Set extensions"
 msgid "Use UltraSPARC Visual Instruction Set version 1.0 extensions"
 msgstr "使用 UltraSPARC 可视化指令集"
 
 #: config/sparc/sparc.opt:70
 #, fuzzy
-#| msgid "Use UltraSPARC Visual Instruction Set extensions"
 msgid "Use UltraSPARC Visual Instruction Set version 2.0 extensions"
 msgstr "使用 UltraSPARC 可视化指令集"
 
 #: config/sparc/sparc.opt:74
 #, fuzzy
-#| msgid "Use UltraSPARC Visual Instruction Set extensions"
 msgid "Use UltraSPARC Visual Instruction Set version 3.0 extensions"
 msgstr "使用 UltraSPARC 可视化指令集"
 
 #: config/sparc/sparc.opt:78
 #, fuzzy
-#| msgid "Use UltraSPARC Visual Instruction Set extensions"
 msgid "Use UltraSPARC Compare-and-Branch extensions"
 msgstr "使用 UltraSPARC 可视化指令集"
 
 #: config/sparc/sparc.opt:82
 #, fuzzy
-#| msgid "Use UltraSPARC Visual Instruction Set extensions"
 msgid "Use UltraSPARC Fused Multiply-Add extensions"
 msgstr "使用 UltraSPARC 可视化指令集"
 
 #: config/sparc/sparc.opt:86
 #, fuzzy
-#| msgid "Use hardware floating point instructions"
 msgid "Use UltraSPARC Population-Count instruction"
 msgstr "使用硬件浮点指令"
 
@@ -9534,7 +9300,6 @@ msgstr "使用给定的 SPARC-V9 代码模型"
 
 #: config/sparc/sparc.opt:196
 #, fuzzy
-#| msgid "-mdebug=\tEnable debug output"
 msgid "Enable debug output"
 msgstr "-mdebug=\t启用调试输出"
 
@@ -9628,13 +9393,11 @@ msgstr "使用 AltiVec 指令"
 
 #: config/rs6000/rs6000.opt:145
 #, fuzzy
-#| msgid "Generate code in little endian mode"
 msgid "Generate Altivec instructions using little-endian element order"
 msgstr "生成小端在前的代码"
 
 #: config/rs6000/rs6000.opt:149
 #, fuzzy
-#| msgid "Generate VRSAVE instructions when generating AltiVec code"
 msgid "Generate Altivec instructions using big-endian element order"
 msgstr "生成 AltiVec 代码时生成 VRSAVE 指令"
 
@@ -9741,13 +9504,11 @@ msgstr "生成 AltiVec 代码时生成 VRSAVE 指令"
 
 #: config/rs6000/rs6000.opt:322
 #, fuzzy
-#| msgid "-mvrsave=yes/no\tDeprecated option.  Use -mvrsave/-mno-vrsave instead"
 msgid "Deprecated option.  Use -mno-vrsave instead"
 msgstr "-mvrsave=yes/no\t不建议使用的选项。请改用 -mvrsave/-mno-vrsave"
 
 #: config/rs6000/rs6000.opt:326
 #, fuzzy
-#| msgid "Deprecated.  Use -Os instead"
 msgid "Deprecated option.  Use -mvrsave instead"
 msgstr "不建议使用。请改用 -Os"
 
@@ -9761,13 +9522,11 @@ msgstr "生成 isel 指令"
 
 #: config/rs6000/rs6000.opt:338
 #, fuzzy
-#| msgid "-misel=yes/no\tDeprecated option.  Use -misel/-mno-isel instead"
 msgid "Deprecated option.  Use -mno-isel instead"
 msgstr "-misel=yes/no\t不建议使用的选项。请改用 -misel/-mno-isel"
 
 #: config/rs6000/rs6000.opt:342
 #, fuzzy
-#| msgid "Deprecated.  Use -Os instead"
 msgid "Deprecated option.  Use -misel instead"
 msgstr "不建议使用。请改用 -Os"
 
@@ -9781,13 +9540,11 @@ msgstr "生成 PPC750CL 配对单精度指令"
 
 #: config/rs6000/rs6000.opt:354
 #, fuzzy
-#| msgid "-mspe=yes/no\tDeprecated option.  Use -mspe/-mno-spe instead"
 msgid "Deprecated option.  Use -mno-spe instead"
 msgstr "-mspe=yes/no\t不建议使用的选项。请改用 -mspe/-mno-spe"
 
 #: config/rs6000/rs6000.opt:358
 #, fuzzy
-#| msgid "Deprecated.  Use -Os instead"
 msgid "Deprecated option.  Use -mspe instead"
 msgstr "不建议使用。请改用 -Os"
 
@@ -9797,37 +9554,31 @@ msgstr "-mdebug=\t启用调试输出"
 
 #: config/rs6000/rs6000.opt:366
 #, fuzzy
-#| msgid "Use the Cray Pointer extension"
 msgid "Use the AltiVec ABI extensions"
 msgstr "使用 Cray 指针扩展"
 
 #: config/rs6000/rs6000.opt:370
 #, fuzzy
-#| msgid "Do not use the bit-field instructions"
 msgid "Do not use the AltiVec ABI extensions"
 msgstr "不使用位段指令"
 
 #: config/rs6000/rs6000.opt:374
 #, fuzzy
-#| msgid "Use the Cray Pointer extension"
 msgid "Use the SPE ABI extensions"
 msgstr "使用 Cray 指针扩展"
 
 #: config/rs6000/rs6000.opt:378
 #, fuzzy
-#| msgid "Do not use the bit-field instructions"
 msgid "Do not use the SPE ABI extensions"
 msgstr "不使用位段指令"
 
 #: config/rs6000/rs6000.opt:382
 #, fuzzy
-#| msgid "Use EABI"
 msgid "Use the ELFv1 ABI"
 msgstr "使用 EABI"
 
 #: config/rs6000/rs6000.opt:386
 #, fuzzy
-#| msgid "Use EABI"
 msgid "Use the ELFv2 ABI"
 msgstr "使用 EABI"
 
@@ -9947,7 +9698,6 @@ msgstr ""
 
 #: config/rs6000/rs6000.opt:554
 #, fuzzy
-#| msgid "Align destination of the string operations"
 msgid "Allow sign extension in fusion operations"
 msgstr "对齐字符串操作的目标"
 
@@ -9957,7 +9707,6 @@ msgstr ""
 
 #: config/rs6000/rs6000.opt:562
 #, fuzzy
-#| msgid "Use SmartMIPS instructions"
 msgid "Use ISA 2.07 crypto instructions"
 msgstr "使用 SmartMIPS 指令"
 
@@ -9967,13 +9716,11 @@ msgstr ""
 
 #: config/rs6000/rs6000.opt:570
 #, fuzzy
-#| msgid "Use vector/scalar (VSX) instructions"
 msgid "Use ISA 2.07 transactional memory (HTM) instructions"
 msgstr "使用向量/标量(VSX)指令"
 
 #: config/rs6000/rs6000.opt:574
 #, fuzzy
-#| msgid "Generate load/store multiple instructions"
 msgid "Generate the quad word memory instructions (lq/stq)."
 msgstr "生成加载/存储乘法指令"
 
@@ -10165,7 +9912,6 @@ msgstr ""
 
 #: config/tilepro/tilepro.opt:28 config/tilegx/tilegx.opt:26
 #, fuzzy
-#| msgid "-mcpu=\tUse features of and schedule code for given CPU"
 msgid "-mcpu=CPU\tUse features of and schedule code for given CPU"
 msgstr "-mcpu=\t使用指定 CPU 的特性和调度代码"
 
@@ -10195,7 +9941,6 @@ msgstr "启用用户自定义指令"
 
 #: config/nios2/elf.opt:26
 #, fuzzy
-#| msgid "Link with the fast floating-point library"
 msgid "Link with a limited version of the C library"
 msgstr "与快速浮点库链接"
 
@@ -10217,7 +9962,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:39
 #, fuzzy
-#| msgid "Enable clip instructions"
 msgid "Enable MUL instructions"
 msgstr "启用 clip 指令"
 
@@ -10227,19 +9971,16 @@ msgstr ""
 
 #: config/nios2/nios2.opt:47
 #, fuzzy
-#| msgid "Use the software emulation for divides (default)"
 msgid "Use table based fast divide (default at -O3)"
 msgstr "使用软件模拟除法(默认)"
 
 #: config/nios2/nios2.opt:51
 #, fuzzy
-#| msgid "Enable unaligned load/store instruction"
 msgid "All memory accesses use I/O load/store instructions"
 msgstr "启用不对齐的载入/存储指令"
 
 #: config/nios2/nios2.opt:55
 #, fuzzy
-#| msgid "Enable unaligned load/store instruction"
 msgid "Volatile memory accesses use I/O load/store instructions"
 msgstr "启用不对齐的载入/存储指令"
 
@@ -10268,7 +10009,6 @@ msgstr "大定点常量隐式截断为定点类型"
 
 #: config/nios2/nios2.opt:79
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the ftruncds custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10278,7 +10018,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:87
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fextsd custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10288,19 +10027,16 @@ msgstr ""
 
 #: config/nios2/nios2.opt:95
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fixdu custom instruction"
 msgstr "不使用 callt 指令"
 
 #: config/nios2/nios2.opt:99
 #, fuzzy
-#| msgid "Enable divide and modulus instructions"
 msgid "Integer id (N) of fixdu custom instruction"
 msgstr "启用除法和求余指令"
 
 #: config/nios2/nios2.opt:103
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fixdi custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10310,7 +10046,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:111
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fixsu custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10320,7 +10055,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:119
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fixsi custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10330,31 +10064,26 @@ msgstr ""
 
 #: config/nios2/nios2.opt:127
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the floatud custom instruction"
 msgstr "不使用 callt 指令"
 
 #: config/nios2/nios2.opt:131
 #, fuzzy
-#| msgid "Enable unaligned load/store instruction"
 msgid "Integer id (N) of floatud custom instruction"
 msgstr "启用不对齐的载入/存储指令"
 
 #: config/nios2/nios2.opt:135
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the floatid custom instruction"
 msgstr "不使用 callt 指令"
 
 #: config/nios2/nios2.opt:139
 #, fuzzy
-#| msgid "Enable unaligned load/store instruction"
 msgid "Integer id (N) of floatid custom instruction"
 msgstr "启用不对齐的载入/存储指令"
 
 #: config/nios2/nios2.opt:143
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the floatus custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10364,7 +10093,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:151
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the floatis custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10374,7 +10102,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:159
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fcmpned custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10384,7 +10111,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:167
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fcmpeqd custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10394,7 +10120,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:175
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fcmpged custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10404,7 +10129,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:183
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fcmpgtd custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10414,7 +10138,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:191
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fcmpled custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10424,7 +10147,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:199
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fcmpltd custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10434,7 +10156,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:207
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the flogd custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10444,7 +10165,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:215
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fexpd custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10454,7 +10174,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:223
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fatand custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10464,19 +10183,16 @@ msgstr ""
 
 #: config/nios2/nios2.opt:231
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the ftand custom instruction"
 msgstr "不使用 callt 指令"
 
 #: config/nios2/nios2.opt:235
 #, fuzzy
-#| msgid "Enable divide and modulus instructions"
 msgid "Integer id (N) of ftand custom instruction"
 msgstr "启用除法和求余指令"
 
 #: config/nios2/nios2.opt:239
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fsind custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10486,7 +10202,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:247
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fcosd custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10496,7 +10211,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:255
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fsqrtd custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10506,7 +10220,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:263
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fabsd custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10516,7 +10229,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:271
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fnegd custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10526,7 +10238,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:279
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fmaxd custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10536,7 +10247,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:287
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fmind custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10546,7 +10256,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:295
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fdivd custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10556,19 +10265,16 @@ msgstr ""
 
 #: config/nios2/nios2.opt:303
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fmuld custom instruction"
 msgstr "不使用 callt 指令"
 
 #: config/nios2/nios2.opt:307
 #, fuzzy
-#| msgid "Enable divide and modulus instructions"
 msgid "Integer id (N) of fmuld custom instruction"
 msgstr "启用除法和求余指令"
 
 #: config/nios2/nios2.opt:311
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fsubd custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10578,7 +10284,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:319
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the faddd custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10588,7 +10293,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:327
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fcmpnes custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10598,7 +10302,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:335
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fcmpeqs custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10608,7 +10311,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:343
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fcmpges custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10618,7 +10320,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:351
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fcmpgts custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10628,7 +10329,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:359
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fcmples custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10638,7 +10338,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:367
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fcmplts custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10648,7 +10347,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:375
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the flogs custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10658,7 +10356,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:383
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fexps custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10668,7 +10365,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:391
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fatans custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10678,7 +10374,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:399
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the ftans custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10688,7 +10383,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:407
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fsins custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10698,7 +10392,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:415
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fcoss custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10708,7 +10401,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:423
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fsqrts custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10718,7 +10410,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:431
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fabss custom instr"
 msgstr "不使用 callt 指令"
 
@@ -10728,7 +10419,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:439
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fnegs custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10738,7 +10428,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:447
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fmaxs custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10748,7 +10437,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:455
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fmins custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10758,7 +10446,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:463
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fdivs custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10768,19 +10455,16 @@ msgstr ""
 
 #: config/nios2/nios2.opt:471
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fmuls custom instruction"
 msgstr "不使用 callt 指令"
 
 #: config/nios2/nios2.opt:475
 #, fuzzy
-#| msgid "Enable divide and modulus instructions"
 msgid "Integer id (N) of fmuls custom instruction"
 msgstr "启用除法和求余指令"
 
 #: config/nios2/nios2.opt:479
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fsubs custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10790,7 +10474,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:487
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fadds custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10800,7 +10483,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:495
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the frdy custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10810,7 +10492,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:503
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the frdxhi custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10820,7 +10501,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:511
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the frdxlo custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10830,7 +10510,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:519
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fwry custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10840,7 +10519,6 @@ msgstr ""
 
 #: config/nios2/nios2.opt:527
 #, fuzzy
-#| msgid "Do not use the callt instruction"
 msgid "Do not use the fwrx custom instruction"
 msgstr "不使用 callt 指令"
 
@@ -10882,7 +10560,6 @@ msgstr "能被放在小内存区的全局和静态变量的最大尺寸。"
 
 #: config/rx/rx.opt:93
 #, fuzzy
-#| msgid "Generate assembler output that is compatible with the Renesas AS100 assembler.  This may restrict some of the compiler's capabilities.  The default is to generate GAS compatable syntax."
 msgid "Generate assembler output that is compatible with the Renesas AS100 assembler.  This may restrict some of the compiler's capabilities.  The default is to generate GAS compatible syntax."
 msgstr "生成与 Renesas AS100 兼容的汇编输出。这可能会限制编译器的某些功能。默认是使用与 GAS 兼容的语法。"
 
@@ -10920,7 +10597,6 @@ msgstr ""
 
 #: config/rx/rx.opt:141
 #, fuzzy
-#| msgid "Enable the use of the short load instructions"
 msgid "Enable the use of the LRA register allocator."
 msgstr "启用对短加载指令的使用"
 
@@ -10977,7 +10653,6 @@ msgstr "使用浮点双精度指令"
 
 #: config/microblaze/microblaze.opt:87
 #, fuzzy, c-format
-#| msgid "%qE is deprecated: %s"
 msgid "%qs is deprecated; use -fstack-check"
 msgstr "不建议使用%qE:%s"
 
@@ -10991,7 +10666,6 @@ msgstr "使用相对 GP 的 sdata/sbss 节"
 
 #: config/microblaze/microblaze.opt:95
 #, fuzzy, c-format
-#| msgid "-mno-clearbss is deprecated; use -fno-zero-initialized-in-bss"
 msgid "%qs is deprecated; use -fno-zero-initialized-in-bss"
 msgstr "-mno-clearbss已不建议使用;请改用 -fno-zero-initialized-in-bss"
 
@@ -11225,61 +10899,51 @@ msgstr "允许 gcc 生成 LIW 指令"
 
 #: config/mn10300/mn10300.opt:67
 #, fuzzy
-#| msgid "Allow gcc to generate LIW instructions"
 msgid "Allow gcc to generate the SETLB and Lcc instructions"
 msgstr "允许 gcc 生成 LIW 指令"
 
 #: config/nds32/nds32.opt:26
 #, fuzzy
-#| msgid "Generate code in big endian mode"
 msgid "Generate code in big-endian mode."
 msgstr "生成大端在前的代码"
 
 #: config/nds32/nds32.opt:30
 #, fuzzy
-#| msgid "Generate code in little endian mode"
 msgid "Generate code in little-endian mode."
 msgstr "生成小端在前的代码"
 
 #: config/nds32/nds32.opt:34
 #, fuzzy
-#| msgid "Reschedule instructions before register allocation"
 msgid "Use reduced-set registers for register allocation."
 msgstr "分配寄存器前重新调度指令"
 
 #: config/nds32/nds32.opt:38
 #, fuzzy
-#| msgid "Reschedule instructions before register allocation"
 msgid "Use full-set registers for register allocation."
 msgstr "分配寄存器前重新调度指令"
 
 #: config/nds32/nds32.opt:42
 #, fuzzy
-#| msgid "Generate bit instructions"
 msgid "Generate conditional move instructions."
 msgstr "生成位指令"
 
 #: config/nds32/nds32.opt:46
 #, fuzzy
-#| msgid "Generate bit instructions"
 msgid "Generate performance extension instructions."
 msgstr "生成位指令"
 
 #: config/nds32/nds32.opt:50
 #, fuzzy
-#| msgid "Generate isel instructions"
 msgid "Generate v3 push25/pop25 instructions."
 msgstr "生成 isel 指令"
 
 #: config/nds32/nds32.opt:54
 #, fuzzy
-#| msgid "Generate bit instructions"
 msgid "Generate 16-bit instructions."
 msgstr "生成位指令"
 
 #: config/nds32/nds32.opt:58
 #, fuzzy
-#| msgid "Generate isel instructions"
 msgid "Generate GP base instructions directly."
 msgstr "生成 isel 指令"
 
@@ -11293,7 +10957,6 @@ msgstr ""
 
 #: config/nds32/nds32.opt:70
 #, fuzzy
-#| msgid "Specify the name of the target architecture"
 msgid "Specify the name of the target architecture."
 msgstr "指定目标架构的名称"
 
@@ -11307,19 +10970,16 @@ msgstr ""
 
 #: config/nds32/nds32.opt:94
 #, fuzzy
-#| msgid "Run predictive commoning optimization."
 msgid "Use special directives to guide linker doing ex9 optimization."
 msgstr "启用预测公因子优化。"
 
 #: config/nds32/nds32.opt:98
 #, fuzzy
-#| msgid "Warn when all constructors and destructors are private"
 msgid "Enable constructor/destructor feature."
 msgstr "当所有构造函数和析构函数都是私有时给出警告"
 
 #: config/nds32/nds32.opt:102
 #, fuzzy
-#| msgid "Generate isel instructions"
 msgid "Guide linker to relax instructions."
 msgstr "生成 isel 指令"
 
@@ -11353,13 +11013,11 @@ msgstr ""
 
 #: config/c6x/c6x.opt:46
 #, fuzzy
-#| msgid "alias argument not a string"
 msgid "Valid arguments for the -msdata= option"
 msgstr "alias 的参数不是一个字符串"
 
 #: config/c6x/c6x.opt:59
 #, fuzzy
-#| msgid "Create a shared library"
 msgid "Compile for the DSBT shared library ABI"
 msgstr "生成一个共享库"
 
@@ -11633,7 +11291,6 @@ msgstr ""
 
 #: config/sh/sh.opt:236 config/sh/sh.opt:240
 #, fuzzy, c-format
-#| msgid "Deprecated.  This switch has no effect"
 msgid "%qs is deprecated and has no effect"
 msgstr "不建议使用。此开关不起作用。"
 
@@ -11675,7 +11332,6 @@ msgstr "遒循 Renesas(先前被称作 Hitachi)/SuperH 调用约定"
 
 #: config/sh/sh.opt:277
 #, fuzzy
-#| msgid "Increase the IEEE compliance for floating-point code"
 msgid "Increase the IEEE compliance for floating-point comparisons"
 msgstr "让浮点代码更加遵循 IEEE 标准"
 
@@ -11725,7 +11381,6 @@ msgstr ""
 
 #: config/sh/sh.opt:331
 #, fuzzy
-#| msgid "Generate code for built-in atomic operations"
 msgid "Specify the model for atomic operations"
 msgstr "为内建原子操作生成代码"
 
@@ -11751,13 +11406,11 @@ msgstr "将数据传输周围的跳转认为是条件转移。"
 
 #: config/sh/sh.opt:357
 #, fuzzy
-#| msgid "Enable the use of the short load instructions"
 msgid "Enable the use of the fsca instruction"
 msgstr "启用对短加载指令的使用"
 
 #: config/sh/sh.opt:361
 #, fuzzy
-#| msgid "Enable the use of the short load instructions"
 msgid "Enable the use of the fsrra instruction"
 msgstr "启用对短加载指令的使用"
 
@@ -11895,7 +11548,6 @@ msgstr "使用 PMC 风格的‘mad’指令"
 
 #: config/mips/mips.opt:63
 #, fuzzy
-#| msgid "Use multiply add/subtract instructions"
 msgid "Use integer madd/msub instructions"
 msgstr "使用乘加/减指令"
 
@@ -11925,7 +11577,6 @@ msgstr "-mcode-readable=SETTING\t指定何时指令允许被访问代码"
 
 #: config/mips/mips.opt:91
 #, fuzzy
-#| msgid "invalid argument %qs to -fdebug-prefix-map"
 msgid "Valid arguments to -mcode-readable=:"
 msgstr "-fdebug-prefix-map 的参数%qs无效"
 
@@ -11955,7 +11606,6 @@ msgstr "使用 MIPS-DSP REV 2指令"
 
 #: config/mips/mips.opt:146
 #, fuzzy
-#| msgid "Use the bit-field instructions"
 msgid "Use Enhanced Virtual Addressing instructions"
 msgstr "使用位段指令"
 
@@ -11969,7 +11619,6 @@ msgstr "为未被当前对象所定义的数据使用 -G"
 
 #: config/mips/mips.opt:158
 #, fuzzy
-#| msgid "Work around certain R4000 errata"
 msgid "Work around certain 24K errata"
 msgstr "为某些 R4000 缺陷提供变通"
 
@@ -11983,7 +11632,6 @@ msgstr "为某些 R4400 缺陷提供变通"
 
 #: config/mips/mips.opt:170
 #, fuzzy
-#| msgid "Work around certain R4000 errata"
 msgid "Work around certain RM7000 errata"
 msgstr "为某些 R4000 缺陷提供变通"
 
@@ -12057,13 +11705,11 @@ msgstr "允许使用硬件浮点 ABI 和指令"
 
 #: config/mips/mips.opt:252
 #, fuzzy
-#| msgid "Generate code that can be safely linked with MIPS16 code."
 msgid "Generate code that is link-compatible with MIPS16 and microMIPS code."
 msgstr "生成能与 MIPS16 代码安全链接的代码。"
 
 #: config/mips/mips.opt:256
 #, fuzzy
-#| msgid "Does nothing. Preserved for backward compatibility."
 msgid "An alias for minterlink-compressed provided for backward-compatibility."
 msgstr "不起作用。为向前兼容保留的选项。"
 
@@ -12109,7 +11755,6 @@ msgstr "不优化块移动"
 
 #: config/mips/mips.opt:300
 #, fuzzy
-#| msgid "Use SmartMIPS instructions"
 msgid "Use microMIPS instructions"
 msgstr "使用 SmartMIPS 指令"
 
@@ -12123,7 +11768,6 @@ msgstr "不允许使用任何浮点操作"
 
 #: config/mips/mips.opt:312
 #, fuzzy
-#| msgid "Use MIPS-3D instructions"
 msgid "Use MCU instructions"
 msgstr "使用 MIPS-3D 指令"
 
@@ -12214,31 +11858,26 @@ msgstr ""
 
 #: config/tilegx/tilegx.opt:37
 #, fuzzy
-#| msgid "Compile for 32-bit pointers"
 msgid "Compile with 32 bit longs and pointers."
 msgstr "为 32 位指针编译"
 
 #: config/tilegx/tilegx.opt:41
 #, fuzzy
-#| msgid "Compile for 64-bit pointers"
 msgid "Compile with 64 bit longs and pointers."
 msgstr "为 64 位指针编译"
 
 #: config/tilegx/tilegx.opt:45
 #, fuzzy
-#| msgid "Use given x86-64 code model"
 msgid "Use given TILE-Gx code model"
 msgstr "使用给定的 x86-64 代码模式"
 
 #: config/arc/arc.opt:26
 #, fuzzy
-#| msgid "Generate code in big endian mode"
 msgid "Compile code for big endian mode"
 msgstr "生成大端在前的代码"
 
 #: config/arc/arc.opt:30
 #, fuzzy
-#| msgid "Stores doubles in 32 bits.  This is the default."
 msgid "Compile code for little endian mode.  This is the default"
 msgstr "以 32 位双精度数存储。这是默认值。"
 
@@ -12284,31 +11923,26 @@ msgstr ""
 
 #: config/arc/arc.opt:80
 #, fuzzy
-#| msgid "Generate string instructions for block moves"
 msgid "Generate instructions supported by barrel shifter"
 msgstr "为块移动使用字符串指令"
 
 #: config/arc/arc.opt:84
 #, fuzzy
-#| msgid "Generate bit instructions"
 msgid "Generate norm instruction"
 msgstr "生成位指令"
 
 #: config/arc/arc.opt:88
 #, fuzzy
-#| msgid "Generate isel instructions"
 msgid "Generate swap instruction"
 msgstr "生成 isel 指令"
 
 #: config/arc/arc.opt:92
 #, fuzzy
-#| msgid "Generate load/store multiple instructions"
 msgid "Generate mul64 and mulu64 instructions"
 msgstr "生成加载/存储乘法指令"
 
 #: config/arc/arc.opt:96
 #, fuzzy
-#| msgid "Do not generate fused multiply/add instructions"
 msgid "Do not generate mpy instructions for ARC700"
 msgstr "不生成融合的乘/加指令"
 
@@ -12322,13 +11956,11 @@ msgstr ""
 
 #: config/arc/arc.opt:108
 #, fuzzy
-#| msgid "Generate call insns as indirect calls, if necessary"
 msgid "Generate call insns as register indirect calls"
 msgstr "如有必须,为调用指令生成间接调用"
 
 #: config/arc/arc.opt:112
 #, fuzzy
-#| msgid "Generate cld instruction in the function prologue."
 msgid "Do no generate BRcc instructions in arc_reorg."
 msgstr "在函数序言中生成 cld 指令"
 
@@ -12346,7 +11978,6 @@ msgstr ""
 
 #: config/arc/arc.opt:132
 #, fuzzy
-#| msgid "Generate bit instructions"
 msgid "FPX: Generate Single Precision FPX (fast) instructions."
 msgstr "生成位指令"
 
@@ -12356,13 +11987,11 @@ msgstr ""
 
 #: config/arc/arc.opt:140 config/arc/arc.opt:144
 #, fuzzy
-#| msgid "Generate bit instructions"
 msgid "FPX: Generate Double Precision FPX (compact) instructions."
 msgstr "生成位指令"
 
 #: config/arc/arc.opt:148
 #, fuzzy
-#| msgid "Generate bit instructions"
 msgid "FPX: Generate Double Precision FPX (fast) instructions."
 msgstr "生成位指令"
 
@@ -12384,7 +12013,6 @@ msgstr ""
 
 #: config/arc/arc.opt:187
 #, fuzzy
-#| msgid "Cost to assume for a multiply insn"
 msgid "Cost to assume for a multiply instruction, with 4 being equal to a normal insn."
 msgstr "为乘法指令设定的开销"
 
@@ -12406,7 +12034,6 @@ msgstr ""
 
 #: config/arc/arc.opt:215
 #, fuzzy
-#| msgid "Enable the use of the short load instructions"
 msgid "Enable the use of indexed loads"
 msgstr "启用对短加载指令的使用"
 
@@ -12416,7 +12043,6 @@ msgstr ""
 
 #: config/arc/arc.opt:223
 #, fuzzy
-#| msgid "Generate fused multiply/add instructions"
 msgid "Generate 32x16 multiply and mac instructions"
 msgstr "生成融合的乘/加指令"
 
@@ -12434,7 +12060,6 @@ msgstr ""
 
 #: config/arc/arc.opt:241
 #, fuzzy
-#| msgid "Avoid all range limits on call instructions"
 msgid "Do alignment optimizations for call instructions."
 msgstr "为调用指令避免一切范围限制"
 
@@ -12448,7 +12073,6 @@ msgstr ""
 
 #: config/arc/arc.opt:253
 #, fuzzy
-#| msgid "Enable cbranchdi4 pattern"
 msgid "Enable pre-reload use of cbranchsi pattern"
 msgstr "启用 cbranchdi4 样式"
 
@@ -12462,13 +12086,11 @@ msgstr ""
 
 #: config/arc/arc.opt:265
 #, fuzzy
-#| msgid "Enable cbranchdi4 pattern"
 msgid "Enable compact casesi pattern"
 msgstr "启用 cbranchdi4 样式"
 
 #: config/arc/arc.opt:269
 #, fuzzy
-#| msgid "Enable clip instructions"
 msgid "Enable 'q' instruction alternatives."
 msgstr "启用 clip 指令"
 
@@ -12478,25 +12100,21 @@ msgstr ""
 
 #: config/arc/arc.opt:280
 #, fuzzy
-#| msgid "Enable Plan 9 language extensions"
 msgid "Enable variable polynomial CRC extension"
 msgstr "启用九号计划语言扩展"
 
 #: config/arc/arc.opt:284
 #, fuzzy
-#| msgid "Enable Plan 9 language extensions"
 msgid "Enable DSP 3.1 Pack A extensions"
 msgstr "启用九号计划语言扩展"
 
 #: config/arc/arc.opt:288
 #, fuzzy
-#| msgid "Enable Plan 9 language extensions"
 msgid "Enable dual viterbi butterfly extension"
 msgstr "启用九号计划语言扩展"
 
 #: config/arc/arc.opt:298
 #, fuzzy
-#| msgid "Enable leading zero instructions"
 msgid "Enable Dual and Single Operand Instructions for Telephony"
 msgstr "启用前导零指令"
 
@@ -12506,19 +12124,16 @@ msgstr ""
 
 #: config/arc/arc.opt:307
 #, fuzzy
-#| msgid "Enable dead store elimination"
 msgid "Enable Locked Load/Store Conditional extension"
 msgstr "删除死存储"
 
 #: config/arc/arc.opt:311
 #, fuzzy
-#| msgid "Enable sign extend instructions"
 msgid "Enable swap byte ordering extension instruction"
 msgstr "启用符号扩展指令"
 
 #: config/arc/arc.opt:315
 #, fuzzy
-#| msgid "Enable bit manipulation instructions"
 msgid "Enable 64-bit Time-Stamp Counter extension instruction"
 msgstr "启用位操作指令"
 
@@ -12532,19 +12147,16 @@ msgstr ""
 
 #: config/arc/arc.opt:327
 #, fuzzy
-#| msgid "Pass -z text to linker"
 msgid "Pass -EB option through to linker."
 msgstr "将 -z text 传递给链接器"
 
 #: config/arc/arc.opt:331
 #, fuzzy
-#| msgid "Pass -z text to linker"
 msgid "Pass -EL option through to linker."
 msgstr "将 -z text 传递给链接器"
 
 #: config/arc/arc.opt:335
 #, fuzzy
-#| msgid "Pass -z text to linker"
 msgid "Pass -marclinux option through to linker."
 msgstr "将 -z text 传递给链接器"
 
@@ -12722,7 +12334,6 @@ msgstr "为速度优化,不严格遵守标准"
 
 #: common.opt:457
 #, fuzzy
-#| msgid "Optimize for space rather than speed"
 msgid "Optimize for debugging experience rather than speed or size"
 msgstr "为最小空间而不是最大速度优化"
 
@@ -12781,7 +12392,6 @@ msgstr "-Wframe-larger-than=<N>\t当一个函数的堆栈框架需要多于 N 
 
 #: common.opt:562
 #, fuzzy
-#| msgid "%Kattempt to free a non-heap object"
 msgid "Warn when attempting to free a non-heap object"
 msgstr "%K试图 free 一个不在堆上的对象"
 
@@ -12870,7 +12480,6 @@ msgstr "自动变量未初始化时警告"
 
 #: common.opt:660
 #, fuzzy
-#| msgid "Warn about uninitialized automatic variables"
 msgid "Warn about maybe uninitialized automatic variables"
 msgstr "自动变量未初始化时警告"
 
@@ -13007,7 +12616,6 @@ msgstr "比较几个数据依赖分析的结果。"
 
 #: common.opt:918
 #, fuzzy
-#| msgid "Check the return value of new"
 msgid "Check the return value of new in C++"
 msgstr "检查 new 的返回值"
 
@@ -13094,7 +12702,6 @@ msgstr "删除无用的空指针检查"
 
 #: common.opt:1012
 #, fuzzy
-#| msgid "Perform superblock formation via tail duplication"
 msgid "Perform speculative devirtualization"
 msgstr "通过尾复制进行超块合成"
 
@@ -13145,7 +12752,6 @@ msgstr "在调试转储中不输出地址"
 
 #: common.opt:1096
 #, fuzzy
-#| msgid "Do the full register move optimization pass"
 msgid "Dump optimization passes"
 msgstr "进行全寄存器传送优化"
 
@@ -13265,7 +12871,6 @@ msgstr "启用 Graphite 身份转换"
 
 #: common.opt:1243
 #, fuzzy
-#| msgid "Enable hoisting loads from conditional pointers."
 msgid "Enable hoisting adjacent loads to encourage generating conditional move"
 msgstr "为条件指针外提内存读取操作。"
 
@@ -13319,7 +12924,6 @@ msgstr ""
 
 #: common.opt:1303
 #, fuzzy, c-format
-#| msgid "unknown TLS model %qs"
 msgid "unknown Stack Reuse Level %qs"
 msgstr "未知的 TLS 模型%qs"
 
@@ -13346,19 +12950,16 @@ msgstr ""
 
 #: common.opt:1342
 #, fuzzy
-#| msgid "Integrate simple functions into their callers when code size is known to not growth"
 msgid "Integrate functions into their callers when code size is known not to grow"
 msgstr "在不导致代码膨胀的情况下将简单函数集成到它们的调用者中"
 
 #: common.opt:1346
 #, fuzzy
-#| msgid "Integrate functions called once into their callers"
 msgid "Integrate functions not declared \"inline\" into their callers when profitable"
 msgstr "将只被调用一次的函数集成到它们的调用者中"
 
 #: common.opt:1350
 #, fuzzy
-#| msgid "Integrate functions called once into their callers"
 msgid "Integrate functions only required by their single caller"
 msgstr "将只被调用一次的函数集成到它们的调用者中"
 
@@ -13384,7 +12985,6 @@ msgstr "-finstrument-functions-exclude-file-list=文件名,...  取样时排除
 
 #: common.opt:1377
 #, fuzzy
-#| msgid "Perform Interprocedural constant propagation"
 msgid "Perform interprocedural constant propagation"
 msgstr "进行进程间的复写传递"
 
@@ -13407,7 +13007,6 @@ msgstr "发现纯函数和常函数"
 
 #: common.opt:1397
 #, fuzzy
-#| msgid "unimplemented functionality"
 msgid "Perform Semantic function equality"
 msgstr "未实现的功能"
 
@@ -13504,7 +13103,6 @@ msgstr "报告各种链接时优化统计"
 
 #: common.opt:1521
 #, fuzzy
-#| msgid "Report various link-time optimization statistics"
 msgid "Report various link-time optimization statistics for WPA only"
 msgstr "报告各种链接时优化统计"
 
@@ -13522,7 +13120,6 @@ msgstr "报告永久性内存分配"
 
 #: common.opt:1537
 #, fuzzy
-#| msgid "Report on permanent memory allocation"
 msgid "Report on permanent memory allocation in WPA only"
 msgstr "报告永久性内存分配"
 
@@ -13576,7 +13173,6 @@ msgstr "尽可能不生成栈帧"
 
 #: common.opt:1592
 #, fuzzy
-#| msgid "Enable loop optimizations on tree level"
 msgid "Enable all optimization info dumps on stderr"
 msgstr "在树级别进行循环优化"
 
@@ -13690,13 +13286,11 @@ msgstr "为取样表达式的值插入相关代码"
 
 #: common.opt:1713
 #, fuzzy
-#| msgid "internal consistency failure"
 msgid "Report on consistency of profile"
 msgstr "内部一致性错误"
 
 #: common.opt:1717
 #, fuzzy
-#| msgid "Reorder functions to improve code placement"
 msgid "Enable function reordering that improves code placement"
 msgstr "函数重新排序以改善代码布局"
 
@@ -13714,7 +13308,6 @@ msgstr "在寄存器中返回小聚合"
 
 #: common.opt:1746
 #, fuzzy
-#| msgid "Enable register pressure sensitive insn scheduling"
 msgid "Relief of register pressure through live range shrinkage"
 msgstr "启用对寄存器压力敏感的指令调度"
 
@@ -13909,7 +13502,6 @@ msgstr "为每个函数使用堆栈保护机制"
 
 #: common.opt:1967
 #, fuzzy
-#| msgid "Use a stack protection method for every function"
 msgid "Use a smart stack protection method for certain functions"
 msgstr "为每个函数使用堆栈保护机制"
 
@@ -13986,7 +13578,6 @@ msgstr "启用树上的循环不变量转移"
 
 #: common.opt:2065
 #, fuzzy
-#| msgid "Perform variable tracking and also tag variables that are uninitialized"
 msgid "Enable coalescing of copy-related user variables that are inlined"
 msgstr "进行变量追踪并且标记未被初始化的变量"
 
@@ -14020,7 +13611,6 @@ msgstr "启用主导优化"
 
 #: common.opt:2101
 #, fuzzy
-#| msgid "Enable loop header copying on trees"
 msgid "Enable tail merging on trees"
 msgstr "启用树上的循环不变量转移"
 
@@ -14038,13 +13628,11 @@ msgstr "启用树上的完全冗余消除(FRE)"
 
 #: common.opt:2117
 #, fuzzy
-#| msgid "Enable SSA-CCP optimization on trees"
 msgid "Enable string length optimizations on trees"
 msgstr "启用树上的 SSA-CCP 优化"
 
 #: common.opt:2121
 #, fuzzy
-#| msgid "comparison with string literal results in unspecified behaviour"
 msgid "Detect paths which trigger erroneous or undefined behaviour due to"
 msgstr "与字面字符串比较的结构是不可预测的"
 
@@ -14164,13 +13752,11 @@ msgstr "仅为异常处理生成堆栈展开表"
 
 #: common.opt:2254
 #, fuzzy
-#| msgid "Use the hardware barrel shifter instead of emulation"
 msgid "Use the bfd linker instead of the default linker"
 msgstr "使用硬件桶型移位器代替仿真"
 
 #: common.opt:2258
 #, fuzzy
-#| msgid "Use the hardware barrel shifter instead of emulation"
 msgid "Use the gold linker instead of the default linker"
 msgstr "使用硬件桶型移位器代替仿真"
 
@@ -14192,7 +13778,6 @@ msgstr "进行变量追踪并且标记未被初始化的变量"
 
 #: common.opt:2296
 #, fuzzy
-#| msgid "Enable loop vectorization on trees"
 msgid "Enable vectorization on trees"
 msgstr "在树上进行循环向量化"
 
@@ -14206,7 +13791,6 @@ msgstr "在树上进行基本块向量化(SLP)"
 
 #: common.opt:2312
 #, fuzzy
-#| msgid "Enable use of cost model in vectorization"
 msgid "Specifies the cost model for vectorization"
 msgstr "启用向量化开销模型"
 
@@ -14216,19 +13800,16 @@ msgstr ""
 
 #: common.opt:2319
 #, fuzzy, c-format
-#| msgid "unknown TLS model %qs"
 msgid "unknown vectorizer cost model %qs"
 msgstr "未知的 TLS 模型%qs"
 
 #: common.opt:2332
 #, fuzzy
-#| msgid "Does nothing.  Preserved for backward compatibility."
 msgid "Enables the dynamic vectorizer cost model.  Preserved for backward compatibility."
 msgstr "不起作用。为向前兼容保留的选项。"
 
 #: common.opt:2336
 #, fuzzy
-#| msgid "Does nothing.  Preserved for backward compatibility."
 msgid "Enables the unlimited vectorizer cost model.  Preserved for backward compatibility."
 msgstr "不起作用。为向前兼容保留的选项。"
 
@@ -14255,7 +13836,6 @@ msgstr ""
 
 #: common.opt:2380
 #, fuzzy, c-format
-#| msgid "(near initialization for %qs)"
 msgid "unknown vtable verify initialization priority %qs"
 msgstr "(在%qs的初始化附近)"
 
@@ -14301,7 +13881,6 @@ msgstr "生成 COFF 格式的调试信息"
 
 #: common.opt:2433
 #, fuzzy
-#| msgid "Generate debug information in default format"
 msgid "Generate debug information in default version of DWARF format"
 msgstr "生成默认格式的调试信息"
 
@@ -14327,25 +13906,21 @@ msgstr ""
 
 #: common.opt:2457
 #, fuzzy
-#| msgid "Record gcc command line switches in the object file."
 msgid "Don't record gcc command line switches in DWARF DW_AT_producer."
 msgstr "在目标文件中记录 gcc 命令行开关。"
 
 #: common.opt:2461
 #, fuzzy
-#| msgid "Record gcc command line switches in the object file."
 msgid "Record gcc command line switches in DWARF DW_AT_producer."
 msgstr "在目标文件中记录 gcc 命令行开关。"
 
 #: common.opt:2465
 #, fuzzy
-#| msgid "Generate debug information in default format"
 msgid "Don't generate debug information in separate .dwo files"
 msgstr "生成默认格式的调试信息"
 
 #: common.opt:2469
 #, fuzzy
-#| msgid "Generate debug information in default format"
 msgid "Generate debug information in separate .dwo files"
 msgstr "生成默认格式的调试信息"
 
@@ -14387,7 +13962,6 @@ msgstr "-iplugindir=<目录>\t将目录设定为默认的插件子目录"
 
 #: common.opt:2512
 #, fuzzy
-#| msgid "-imultilib <dir>\tSet <dir> to be the multilib include subdirectory"
 msgid "-imultiarch <dir>\tSet <dir> to be the multiarch include subdirectory"
 msgstr "-imultilib <目录>\t将目录设定为 multilib 的包含子目录"
 
@@ -14450,7 +14024,6 @@ msgstr "需要数字类型"
 
 #: go/gofrontend/expressions.cc:4157
 #, fuzzy
-#| msgid "expected integer or boolean type"
 msgid "expected boolean type"
 msgstr "需要整数或布尔类型"
 
@@ -14469,7 +14042,6 @@ msgstr "需要指针"
 
 #: go/gofrontend/expressions.cc:5925
 #, fuzzy
-#| msgid "invalid comparison code in gimple cond"
 msgid "invalid comparison of nil with nil"
 msgstr "gimple 条件中比较代码无效"
 
@@ -14480,7 +14052,6 @@ msgstr "二元表达式中类型不匹配"
 
 #: go/gofrontend/expressions.cc:5969
 #, fuzzy
-#| msgid "division by zero"
 msgid "integer division by zero"
 msgstr "被零除"
 
@@ -14508,13 +14079,11 @@ msgstr "方法类型不匹配对象类型"
 
 #: go/gofrontend/expressions.cc:7156
 #, fuzzy
-#| msgid "invalid argument to built-in function"
 msgid "invalid use of %<...%> with builtin function"
 msgstr "内建函数实参无效"
 
 #: go/gofrontend/expressions.cc:7167
 #, fuzzy
-#| msgid "invalid use of template-name %qE without an argument list"
 msgid "invalid use of method value as argument of Offsetof"
 msgstr "使用模板名%qE时不带实参表无效"
 
@@ -14540,7 +14109,6 @@ msgstr "实参太多"
 
 #: go/gofrontend/expressions.cc:7271
 #, fuzzy
-#| msgid "argument must be a constant"
 msgid "argument 1 must be a map"
 msgstr "实参必须是常数"
 
@@ -14551,7 +14119,6 @@ msgstr "函数%q+#D的抽象返回类型无效"
 
 #: go/gofrontend/expressions.cc:7384
 #, fuzzy
-#| msgid "bad length when making slice"
 msgid "length required when allocating a slice"
 msgstr "生成切片时长度错误"
 
@@ -14561,7 +14128,6 @@ msgstr ""
 
 #: go/gofrontend/expressions.cc:7435
 #, fuzzy
-#| msgid "too many arguments to %qE"
 msgid "too many arguments to make"
 msgstr "%qE实参太多"
 
@@ -14603,19 +14169,16 @@ msgstr "元素类型必须一样"
 
 #: go/gofrontend/expressions.cc:8317
 #, fuzzy
-#| msgid "left argument must be a slice"
 msgid "first argument must be []byte"
 msgstr "左实参必须是一个切片"
 
 #: go/gofrontend/expressions.cc:8320
 #, fuzzy
-#| msgid "right argument must be a slice or a string"
 msgid "second argument must be slice or string"
 msgstr "右实参必须是一个切片或字符串"
 
 #: go/gofrontend/expressions.cc:8361
 #, fuzzy
-#| msgid "parameter %u has void type"
 msgid "argument 2 has invalid type"
 msgstr "第 %u 个参数类型为 void"
 
@@ -14638,7 +14201,6 @@ msgstr "需要函数"
 
 #: go/gofrontend/expressions.cc:9332
 #, fuzzy
-#| msgid "invalid use of %<this%> at top level"
 msgid "invalid use of %<...%> with non-slice"
 msgstr "在文件作用域使用%<this%>无效"
 
@@ -14648,7 +14210,6 @@ msgstr "接收器类型不兼容"
 
 #: go/gofrontend/expressions.cc:9623
 #, fuzzy
-#| msgid "invalid use of %<this%> in non-member function"
 msgid "invalid use of %<...%> calling non-variadic function"
 msgstr "在非成员函数中使用%<this%>无效"
 
@@ -14666,7 +14227,6 @@ msgstr "切片结尾必须是整数"
 
 #: go/gofrontend/expressions.cc:10474
 #, fuzzy
-#| msgid "slice end must be integer"
 msgid "slice capacity must be integer"
 msgstr "切片结尾必须是整数"
 
@@ -14741,7 +14301,6 @@ msgstr "需要行尾"
 
 #: go/gofrontend/statements.cc:2654 go/gofrontend/statements.cc:2683
 #, fuzzy
-#| msgid "not enough arguments"
 msgid "not enough arguments to return"
 msgstr "实参太少"
 
@@ -14783,49 +14342,41 @@ msgstr "右实参必须是一个切片或字符串"
 
 #: go/gofrontend/types.cc:514
 #, fuzzy
-#| msgid "invalid comparison code in gimple cond"
 msgid "invalid comparison of non-ordered type"
 msgstr "gimple 条件中比较代码无效"
 
 #: go/gofrontend/types.cc:530
 #, fuzzy
-#| msgid "duplicate class will only be compiled once"
 msgid "slice can only be compared to nil"
 msgstr "重复的类只会被编译一次"
 
 #: go/gofrontend/types.cc:532
 #, fuzzy
-#| msgid "duplicate class will only be compiled once"
 msgid "map can only be compared to nil"
 msgstr "重复的类只会被编译一次"
 
 #: go/gofrontend/types.cc:534
 #, fuzzy
-#| msgid "duplicate class will only be compiled once"
 msgid "func can only be compared to nil"
 msgstr "重复的类只会被编译一次"
 
 #: go/gofrontend/types.cc:540
 #, fuzzy, c-format
-#| msgid "invalid operand to %%R"
 msgid "invalid operation (%s)"
 msgstr "%%R 的操作数无效"
 
 #: go/gofrontend/types.cc:563
 #, fuzzy
-#| msgid "invalid comparison code in gimple cond"
 msgid "invalid comparison of non-comparable type"
 msgstr "gimple 条件中比较代码无效"
 
 #: go/gofrontend/types.cc:581
 #, fuzzy
-#| msgid "invalid comparison code in gimple cond"
 msgid "invalid comparison of non-comparable struct"
 msgstr "gimple 条件中比较代码无效"
 
 #: go/gofrontend/types.cc:592
 #, fuzzy
-#| msgid "invalid use of non-lvalue array"
 msgid "invalid comparison of non-comparable array"
 msgstr "对非左值数组的使用无效"
 
@@ -14911,13 +14462,11 @@ msgstr "缺少方法%s%s%s"
 
 #: go/gofrontend/types.cc:7240
 #, fuzzy, c-format
-#| msgid "method %s%s%s requires a pointer"
 msgid "method %s%s%s requires a pointer receiver"
 msgstr "方法%s%s%s需要一个指针"
 
 #: go/gofrontend/types.cc:7258
 #, fuzzy, c-format
-#| msgid "method %s%s%s requires a pointer"
 msgid "method %s%s%s is marked go:nointerface"
 msgstr "方法%s%s%s需要一个指针"
 
@@ -14930,7 +14479,6 @@ msgstr "%qE属性指定被忽略"
 
 #: attribs.c:450
 #, fuzzy, gcc-internal-format
-#| msgid "%qE attribute directive ignored"
 msgid "%<%E::%E%> scoped attribute directive ignored"
 msgstr "%qE属性指定被忽略"
 
@@ -14944,7 +14492,6 @@ msgstr "为%qE属性给定的实参数目错误"
 #. type.  Ignore it.
 #: attribs.c:472
 #, fuzzy, gcc-internal-format
-#| msgid "%qE attribute ignored"
 msgid "attribute ignored"
 msgstr "%qE属性被忽略"
 
@@ -15045,7 +14592,6 @@ msgstr ""
 
 #: builtins.c:5248
 #, fuzzy, gcc-internal-format
-#| msgid "invalid argument to built-in function"
 msgid "invalid memory model argument to builtin"
 msgstr "内建函数实参无效"
 
@@ -15066,13 +14612,11 @@ msgstr ""
 
 #: builtins.c:5360
 #, fuzzy, gcc-internal-format
-#| msgid "invalid use of %<auto%>"
 msgid "invalid memory model for %<__atomic_load%>"
 msgstr "错误地使用了%<auto%>"
 
 #: builtins.c:5390 builtins.c:5497
 #, fuzzy, gcc-internal-format
-#| msgid "invalid use of %<auto%>"
 msgid "invalid memory model for %<__atomic_store%>"
 msgstr "错误地使用了%<auto%>"
 
@@ -15088,13 +14632,11 @@ msgstr ""
 
 #: builtins.c:5709
 #, fuzzy, gcc-internal-format
-#| msgid "__builtin_eh_return not supported on this target"
 msgid "__builtin_thread_pointer is not supported on this target"
 msgstr "__builtin_eh_return 在此目标机上不受支持"
 
 #: builtins.c:5729
 #, fuzzy, gcc-internal-format
-#| msgid "__builtin_eh_return not supported on this target"
 msgid "__builtin_set_thread_pointer is not supported on this target"
 msgstr "__builtin_eh_return 在此目标机上不受支持"
 
@@ -15189,7 +14731,6 @@ msgstr "函数调用有聚合类型"
 
 #: calls.c:3055
 #, fuzzy, gcc-internal-format
-#| msgid "missing argument to %qs"
 msgid "passing too large argument on stack"
 msgstr "%qs缺少参数"
 
@@ -15335,7 +14876,6 @@ msgstr "verify_flow_info 失败"
 
 #: cfghooks.c:310
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "%s does not support duplicate_block"
 msgid "%s does not support dump_bb_for_graph"
 msgstr "%s 不支持 duplicate_block"
 
@@ -15406,7 +14946,6 @@ msgstr "%s 不支持 make_forwarder_block"
 
 #: cfghooks.c:984
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "%s does not support move_block_after"
 msgid "%s does not support force_nonfallthru"
 msgstr "%s 不支持t move_block_after"
 
@@ -15447,7 +14986,6 @@ msgstr ""
 
 #: cfgloop.c:1356
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Enable loop header copying on trees"
 msgid "loop with header %d not in loop tree"
 msgstr "启用树上的循环不变量转移"
 
@@ -15468,13 +15006,11 @@ msgstr "循环 %d 的大小应该为 %d,而不是%d"
 
 #: cfgloop.c:1395
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "bb %d do not belong to loop %d"
 msgid "bb %d does not belong to loop %d"
 msgstr "基本块 %d 不属于循环 %d"
 
 #: cfgloop.c:1407
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "size of loop %d should be %d, not %d"
 msgid "bb %d has father loop %d, should be loop %d"
 msgstr "循环 %d 的大小应该为 %d,而不是%d"
 
@@ -15595,7 +15131,6 @@ msgstr ""
 
 #: cfgrtl.c:2428
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "verify_flow_info: REG_BR_PROB does not match cfg %wi %i"
 msgid "verify_flow_info: REG_BR_PROB does not match cfg %i %i"
 msgstr "verify_flow_info:REG_BR_PROB 不匹配 cfg %wi %i"
 
@@ -15606,19 +15141,16 @@ msgstr ""
 
 #: cfgrtl.c:2454
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "fallthru edge crosses section boundary (bb %i)"
 msgid "fallthru edge crosses section boundary in bb %i"
 msgstr "直通边越过了节分界(基本块 %i)"
 
 #: cfgrtl.c:2460
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "fallthru edge crosses section boundary (bb %i)"
 msgid "EH edge crosses section boundary in bb %i"
 msgstr "直通边越过了节分界(基本块 %i)"
 
 #: cfgrtl.c:2467
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "fallthru edge crosses section boundary (bb %i)"
 msgid "No region crossing jump at section boundary in bb %i"
 msgstr "直通边越过了节分界(基本块 %i)"
 
@@ -15634,13 +15166,11 @@ msgstr ""
 
 #: cfgrtl.c:2510
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "missing REG_EH_REGION note in the end of bb %i"
 msgid "missing REG_EH_REGION note at the end of bb %i"
 msgstr "基本块 %i 结尾缺少 REG_EH_REGION 记录"
 
 #: cfgrtl.c:2515
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "too many outgoing branch edges from bb %i"
 msgid "too many exception handling edges in bb %i"
 msgstr "从基本块 %i 分出太多的分支边"
 
@@ -15651,31 +15181,26 @@ msgstr "从基本块 %i 分出太多的分支边"
 
 #: cfgrtl.c:2528
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "fallthru edge after unconditional jump %i"
 msgid "fallthru edge after unconditional jump in bb %i"
 msgstr "非条件跳转 %i 之后的直通边"
 
 #: cfgrtl.c:2533
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "wrong number of branch edges after unconditional jump %i"
 msgid "wrong number of branch edges after unconditional jump in bb %i"
 msgstr "非条件跳转 %i 之后的分支边数不对"
 
 #: cfgrtl.c:2540
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "wrong amount of branch edges after conditional jump %i"
 msgid "wrong amount of branch edges after conditional jump in bb %i"
 msgstr "条件跳转 %i 之后的分支边数不对"
 
 #: cfgrtl.c:2546
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "call edges for non-call insn in bb %i"
 msgid "abnormal call edges for non-call insn in bb %i"
 msgstr "在基本块 %i 中非调用指令的调用边"
 
 #: cfgrtl.c:2551
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "call edges for non-call insn in bb %i"
 msgid "sibcall edges for non-call insn in bb %i"
 msgstr "在基本块 %i 中非调用指令的调用边"
 
@@ -15801,7 +15326,6 @@ msgstr ""
 
 #: cgraph.c:2651
 #, fuzzy, gcc-internal-format
-#| msgid "Assume symbols might be invalid"
 msgid "local symbols must be defined"
 msgstr "假定符号可能无效"
 
@@ -15817,7 +15341,6 @@ msgstr "内联已被取地址的克隆"
 
 #: cgraph.c:2666
 #, fuzzy, gcc-internal-format
-#| msgid "inline clone is needed"
 msgid "inline clone is forced to output"
 msgstr "需要内联克隆"
 
@@ -15943,7 +15466,6 @@ msgstr "调用语句缺少 callgraph 边:"
 
 #: cgraph.c:2895
 #, fuzzy, gcc-internal-format
-#| msgid "expected statement"
 msgid "reference to dead statement"
 msgstr "需要语句"
 
@@ -15984,7 +15506,6 @@ msgstr "%qE属性被忽略,因为%qT已被定义"
 
 #: cgraphunit.c:774
 #, fuzzy, gcc-internal-format
-#| msgid "Warn when an inlined function cannot be inlined"
 msgid "always_inline function might not be inlinable"
 msgstr "当内联函数无法被内联时给出警告"
 
@@ -16010,7 +15531,6 @@ msgstr ""
 
 #: cgraphunit.c:1200
 #, fuzzy, gcc-internal-format
-#| msgid "%q+D used prior to declaration"
 msgid "%q+D aliased declaration"
 msgstr "%q+D在声明前使用"
 
@@ -16021,7 +15541,6 @@ msgstr "无法收回不需要的函数"
 
 #: cgraphunit.c:1303
 #, fuzzy, gcc-internal-format
-#| msgid "failed to reclaim unneeded function"
 msgid "failed to reclaim unneeded function in same comdat group"
 msgstr "无法收回不需要的函数"
 
@@ -16072,19 +15591,16 @@ msgstr "未知的解修饰风格‘%s’"
 
 #: collect2.c:1567 collect2.c:1750 collect2.c:1790
 #, fuzzy, gcc-internal-format
-#| msgid "fopen %s"
 msgid "fopen %s: %m"
 msgstr "fopen %s"
 
 #: collect2.c:1570 collect2.c:1755 collect2.c:1793
 #, fuzzy, gcc-internal-format
-#| msgid "fclose %s"
 msgid "fclose %s: %m"
 msgstr "fclose %s"
 
 #: collect2.c:1857
 #, fuzzy, gcc-internal-format
-#| msgid "can't get program status: %s"
 msgid "can't get program status: %m"
 msgstr "无法获取程序状态:%s"
 
@@ -16130,7 +15646,6 @@ msgstr "找不到 ‘nm’"
 
 #: collect2.c:2546
 #, fuzzy, gcc-internal-format
-#| msgid "can't open nm output"
 msgid "can't open nm output: %m"
 msgstr "无法打开 nm 的输出"
 
@@ -16151,7 +15666,6 @@ msgstr "找不到‘ldd’"
 
 #: collect2.c:2742
 #, fuzzy, gcc-internal-format
-#| msgid "can't open ldd output"
 msgid "can't open ldd output: %m"
 msgstr "无法打开 ldd 输出"
 
@@ -16247,7 +15761,6 @@ msgstr "%s 的存储信息很诡异"
 
 #: coverage.c:291
 #, fuzzy, gcc-internal-format
-#| msgid "checksum is %x instead of %x"
 msgid "checksum is (%x,%x) instead of (%x,%x)"
 msgstr "检验和是 %x 而不是 %x"
 
@@ -16273,7 +15786,6 @@ msgstr ""
 
 #: coverage.c:393
 #, fuzzy, gcc-internal-format
-#| msgid "execution counts estimated"
 msgid "execution counts estimated\n"
 msgstr "预计执行次数"
 
@@ -16374,7 +15886,6 @@ msgstr "忽略未知的选项%q.*s,在%<-fdump-%s%>中"
 
 #: dumpfile.c:862
 #, fuzzy, gcc-internal-format
-#| msgid "ignoring unknown option %q.*s in %<-fdump-%s%>"
 msgid "unknown option %q.*s in %<-fopt-info-%s%>"
 msgstr "忽略未知的选项%q.*s,在%<-fdump-%s%>中"
 
@@ -16390,7 +15901,6 @@ msgstr "多个 EH 个性需要汇编器支持 .cfi.personality 指示。"
 
 #: dwarf2out.c:11303
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "non-delegitimized UNSPEC %d found in variable location"
 msgid "non-delegitimized UNSPEC %s (%d) found in variable location"
 msgstr "变量位置处发现未被非法化的 UNSPEC %d"
 
@@ -16481,7 +15991,6 @@ msgstr "堆栈限制在此目标机上不受支持"
 
 #: expr.c:7657
 #, fuzzy, gcc-internal-format
-#| msgid "global register variable %qD used in nested function"
 msgid "local frame unavailable (naked function?)"
 msgstr "嵌套函数中使用了全局寄存器变量%qD"
 
@@ -16853,7 +16362,6 @@ msgstr "比较最终指令转储"
 
 #: gcc.c:7131
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "-fuse-linker-plugin, but "
 msgid "-fuse-linker-plugin, but %s not found"
 msgstr "使用了 -fuse-linker-plugin,但"
 
@@ -16944,7 +16452,6 @@ msgstr "%%:compare-debug-auxbase-opt 的参数未以 .gk 结尾"
 
 #: gcc.c:8636
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "too few arguments to function"
 msgid "too few arguments to %%:replace-extension"
 msgstr "给予函数的实参太少"
 
@@ -17042,13 +16549,11 @@ msgstr ""
 
 #: gimplify.c:5647
 #, fuzzy, gcc-internal-format
-#| msgid "%qE not specified in enclosing parallel"
 msgid "%qE not specified in enclosing task"
 msgstr "%qE未为在括入的并行中指定"
 
 #: gimplify.c:5653
 #, fuzzy, gcc-internal-format
-#| msgid "%qE not specified in enclosing parallel"
 msgid "%qE not specified in enclosing teams construct"
 msgstr "%qE未为在括入的并行中指定"
 
@@ -17069,7 +16574,6 @@ msgstr "括入并行"
 
 #: gimplify.c:5770 gimplify.c:5799
 #, fuzzy, gcc-internal-format
-#| msgid "iteration variable %qE should not be reduction"
 msgid "iteration variable %qE is predetermined linear"
 msgstr "迭代变量%qE不应当是 reduction"
 
@@ -17090,19 +16594,16 @@ msgstr "迭代变量%qE不应当是 reduction"
 
 #: gimplify.c:5793
 #, fuzzy, gcc-internal-format
-#| msgid "iteration variable %qE should not be firstprivate"
 msgid "iteration variable %qE should not be lastprivate"
 msgstr "迭代变量%qE不应当是 firstprivate"
 
 #: gimplify.c:5796
 #, fuzzy, gcc-internal-format
-#| msgid "iteration variable %qE should be private"
 msgid "iteration variable %qE should not be private"
 msgstr "迭代变量%qE应当是私有的"
 
 #: gimplify.c:6064
 #, fuzzy, gcc-internal-format
-#| msgid "%s variable %qE is private in outer context"
 msgid "copyprivate variable %qE is not threadprivate or private in outer context"
 msgstr "%s 变量%qE在外层上下文中是私有的"
 
@@ -17113,7 +16614,6 @@ msgstr "%s 变量%qE在外层上下文中是私有的"
 
 #: gimplify.c:8063
 #, fuzzy, gcc-internal-format
-#| msgid "expected %<}%> before %<else%>"
 msgid "expected %<_Cilk_spawn%> before %<_Cilk_sync%>"
 msgstr "%<else%>前需要%<}%>"
 
@@ -17170,7 +16670,6 @@ msgstr "不能使用 Graphite 循环优化"
 
 #: ipa-devirt.c:302 ipa-devirt.c:337
 #, fuzzy, gcc-internal-format
-#| msgid "previous definition here"
 msgid "type %qD violates one definition rule  "
 msgstr "先前的定义在这里"
 
@@ -17212,7 +16711,6 @@ msgstr ""
 
 #: ira.c:5544
 #, fuzzy, gcc-internal-format
-#| msgid "as %qD"
 msgid "for %qD"
 msgstr "作为%qD"
 
@@ -17238,7 +16736,6 @@ msgstr ""
 
 #: lto-cgraph.c:1083
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "bytecode stream: found multiple instances of cgraph node %d"
 msgid "bytecode stream: found multiple instances of cgraph node with uid %d"
 msgstr "字节码流:找到 cgraph 节点 %d 的多个实例"
 
@@ -17312,19 +16809,16 @@ msgstr ""
 
 #: lto-streamer-in.c:824
 #, fuzzy, gcc-internal-format
-#| msgid "operand number out of range"
 msgid "Reference statement index out of range"
 msgstr "操作数号超出范围"
 
 #: lto-streamer-in.c:827
 #, fuzzy, gcc-internal-format
-#| msgid "Warn if deprecated empty statements are found"
 msgid "Reference statement index not found"
 msgstr "发现不建议使用的空语句时给出警告"
 
 #: lto-streamer-out.c:393 lto-streamer-out.c:1307
 #, fuzzy, gcc-internal-format
-#| msgid "tree code %qs is not supported in gimple streams"
 msgid "tree code %qs is not supported in LTO streams"
 msgstr "树代码%qs在 gimple 流中不被支持"
 
@@ -17370,13 +16864,11 @@ msgstr ""
 
 #: omp-low.c:2351 omp-low.c:2364
 #, fuzzy, gcc-internal-format
-#| msgid "%<#pragma omp section%> may only be used in %<#pragma omp sections%> construct"
 msgid "%<#pragma omp cancel sections%> inside %<nowait%> sections construct"
 msgstr "%<#pragma omp section%>只能用在%<#pragma omp sections%>结构中"
 
 #: omp-low.c:2378
 #, fuzzy, gcc-internal-format
-#| msgid "invalid PHI argument"
 msgid "invalid arguments"
 msgstr "无效的 PHI 实参"
 
@@ -17417,7 +16909,6 @@ msgstr "临界区域不可以被嵌套在同名的临界区域内"
 
 #: omp-low.c:2492
 #, fuzzy, gcc-internal-format
-#| msgid "master region may not be closely nested inside of work-sharing or explicit task region"
 msgid "teams construct not closely nested inside of target region"
 msgstr "主要区域不可以紧密嵌套在工作共享或显式的任务区域内"
 
@@ -17438,13 +16929,11 @@ msgstr "OpenMP 结构块入口无效"
 
 #: omp-low.c:10275
 #, fuzzy, gcc-internal-format
-#| msgid "invalid entry to OpenMP structured block"
 msgid "invalid entry to Cilk Plus structured block"
 msgstr "OpenMP 结构块入口无效"
 
 #: omp-low.c:10283
 #, fuzzy, gcc-internal-format
-#| msgid "invalid branch to/from an OpenMP structured block"
 msgid "invalid branch to/from a Cilk Plus structured block"
 msgstr "进出 OpenMP 结构块的分支无效"
 
@@ -17455,7 +16944,6 @@ msgstr "进出 OpenMP 结构块的分支无效"
 
 #: omp-low.c:10761
 #, fuzzy, gcc-internal-format
-#| msgid "ignoring duplicate directory \"%s\"\n"
 msgid "ignoring large linear step"
 msgstr "忽略重复的目录“%s”\n"
 
@@ -17558,7 +17046,6 @@ msgstr "当unit-at-a-time 被禁止时顶层重新排序必须禁止。"
 
 #: opts.c:695
 #, fuzzy, gcc-internal-format
-#| msgid "-static-libgfortran is not supported in this configuration"
 msgid "transactional memory is not supported with non-call exceptions"
 msgstr "-static-libgfortran 在此配置下不受支持"
 
@@ -17705,7 +17192,6 @@ msgstr "无效的参数%qs"
 
 #: passes.c:107
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "%s does not support split_edge"
 msgid "pass %s does not support cloning"
 msgstr "%s 不支持 split_edge"
 
@@ -17721,13 +17207,11 @@ msgstr "无法识别的选项‘-%s’"
 
 #: passes.c:999
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "unknown field %qE specified in initializer"
 msgid "unknown pass %s specified in -fenable"
 msgstr "初始值设定项里有未知的字段%qE"
 
 #: passes.c:1001
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "unknown field %qE specified in initializer"
 msgid "unknown pass %s specified in -fdisable"
 msgstr "初始值设定项里有未知的字段%qE"
 
@@ -17743,19 +17227,16 @@ msgstr ""
 
 #: passes.c:1065 passes.c:1093
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "invalid floating point option: -mfpu=%s"
 msgid "Invalid range %s in option %s"
 msgstr "无效的浮点选项:-mfpu=%s"
 
 #: passes.c:1111
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "invalid storage class for function %qE"
 msgid "enable pass %s for function %s"
 msgstr "函数%qE存储类无效"
 
 #: passes.c:1122
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "invalid storage class for function %qE"
 msgid "disable pass %s for function %s"
 msgstr "函数%qE存储类无效"
 
@@ -17859,7 +17340,6 @@ msgstr "-iplugindir <目录>选项未被传递给 gcc 驱动程序"
 
 #: predict.c:2805
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Missing argument list in function '%s' at %C"
 msgid "Missing counts for called function %s/%i"
 msgstr "函数‘%s’在%C处缺少参数列表"
 
@@ -17967,13 +17447,11 @@ msgstr "全局寄存器变量出现在函数定义后"
 
 #: reginfo.c:770
 #, fuzzy, gcc-internal-format
-#| msgid "register used for two global register variables"
 msgid "register of %qD used for multiple global register variables"
 msgstr "寄存器用作两个全局寄存器变量"
 
 #: reginfo.c:773
 #, fuzzy, gcc-internal-format
-#| msgid "  conflict with %q+D"
 msgid "conflicts with %qD"
 msgstr "  与%q+D冲突"
 
@@ -18199,25 +17677,21 @@ msgstr "%D 在汇编中被引用后又被重命名"
 
 #: symtab.c:736
 #, fuzzy, gcc-internal-format
-#| msgid "function returning a function"
 msgid "function symbol is not function"
 msgstr "函数返回了一个函数"
 
 #: symtab.c:744
 #, fuzzy, gcc-internal-format
-#| msgid "array is not addressable"
 msgid "variable symbol is not variable"
 msgstr "数组不能被取指"
 
 #: symtab.c:750
 #, fuzzy, gcc-internal-format
-#| msgid "node has wrong clone list"
 msgid "node has unknown type"
 msgstr "节点的克隆列表不正确"
 
 #: symtab.c:759
 #, fuzzy, gcc-internal-format
-#| msgid "node not found in cgraph_hash"
 msgid "node not found in symtab decl hashtable"
 msgstr "cgraph_hash 中找不到节点"
 
@@ -18233,19 +17707,16 @@ msgstr ""
 
 #: symtab.c:790
 #, fuzzy, gcc-internal-format
-#| msgid "node not found in cgraph_hash"
 msgid "node not found in symtab assembler name hash"
 msgstr "cgraph_hash 中找不到节点"
 
 #: symtab.c:797
 #, fuzzy, gcc-internal-format
-#| msgid "double linked list of clones corrupted"
 msgid "double linked list of assembler names corrupted"
 msgstr "双向克隆链接列表已损坏"
 
 #: symtab.c:802
 #, fuzzy, gcc-internal-format
-#| msgid "node is in clone list but it is not clone"
 msgid "node is analyzed byt it is not a definition"
 msgstr "节点在克隆列表中,但并不是克隆"
 
@@ -18256,7 +17727,6 @@ msgstr ""
 
 #: symtab.c:813
 #, fuzzy, gcc-internal-format
-#| msgid "node is in clone list but it is not clone"
 msgid "node is alias but not definition"
 msgstr "节点在克隆列表中,但并不是克隆"
 
@@ -18272,7 +17742,6 @@ msgstr ""
 
 #: symtab.c:832
 #, fuzzy, gcc-internal-format
-#| msgid "Combining units with different profiles is not supported."
 msgid "mixing different types of symbol in same comdat groups is not supported"
 msgstr "不支持组合有不同取样信息的单元。"
 
@@ -18293,13 +17762,11 @@ msgstr ""
 
 #: symtab.c:885
 #, fuzzy, gcc-internal-format
-#| msgid "verify_cgraph_node failed"
 msgid "verify_symtab_node failed"
 msgstr "verify_cgraph_node 失败"
 
 #: symtab.c:1110
 #, fuzzy, gcc-internal-format
-#| msgid "function %q+D redeclared as inline"
 msgid "function %q+D part of alias cycle"
 msgstr "函数%q+D重声明为内联的"
 
@@ -18335,13 +17802,11 @@ msgstr "#pragma GCC target 在此目标机上不受支持"
 
 #: tlink.c:489
 #, fuzzy, gcc-internal-format
-#| msgid "removing .rpo file"
 msgid "removing .rpo file: %m"
 msgstr "删除 .rpo 文件"
 
 #: tlink.c:491
 #, fuzzy, gcc-internal-format
-#| msgid "renaming .rpo file"
 msgid "renaming .rpo file: %m"
 msgstr "重命名 .rpo 文件"
 
@@ -18382,7 +17847,6 @@ msgstr "-frecord-gcc-switches 在此目标机上不受支持"
 
 #: toplev.c:989
 #, fuzzy, gcc-internal-format
-#| msgid "-fstack-usage not supported for this target"
 msgid "stack usage computation not supported for this target"
 msgstr "-fstack-usage 在此目标机上不受支持"
 
@@ -18393,13 +17857,11 @@ msgstr ""
 
 #: toplev.c:1060
 #, fuzzy, gcc-internal-format
-#| msgid "stackframe too big: %d bytes"
 msgid "stack usage might be %wd bytes"
 msgstr "栈帧太大:%d 字节"
 
 #: toplev.c:1063
 #, fuzzy, gcc-internal-format
-#| msgid "stackframe too big: %d bytes"
 msgid "stack usage is %wd bytes"
 msgstr "栈帧太大:%d 字节"
 
@@ -18495,7 +17957,6 @@ msgstr "-fstack-protector 在此目标机上不受支持"
 
 #: toplev.c:1559
 #, fuzzy, gcc-internal-format
-#| msgid "-fdata-sections not supported for this target"
 msgid "-fsanitize=address not supported for this target"
 msgstr "-fdata-sections 在此目标机上不受支持"
 
@@ -18511,7 +17972,6 @@ msgstr "关闭 %s 时出错:%m"
 
 #: trans-mem.c:614
 #, fuzzy, gcc-internal-format
-#| msgid "invalid use of %qD in linkage specification"
 msgid "invalid volatile use of %qD inside transaction"
 msgstr "指定链接时使用%qD无效"
 
@@ -18532,7 +17992,6 @@ msgstr ""
 
 #: trans-mem.c:725
 #, fuzzy, gcc-internal-format
-#| msgid "indirect function call with a yet undetermined callee"
 msgid "unsafe indirect function call within atomic transaction"
 msgstr "间接函数调用目标未定义"
 
@@ -18548,25 +18007,21 @@ msgstr ""
 
 #: trans-mem.c:743
 #, fuzzy, gcc-internal-format
-#| msgid "indirect function call with a yet undetermined callee"
 msgid "unsafe indirect function call within %<transaction_safe%> function"
 msgstr "间接函数调用目标未定义"
 
 #: trans-mem.c:758 trans-mem.c:4721
 #, fuzzy, gcc-internal-format
-#| msgid "namespace %qD not allowed in using-declaration"
 msgid "asm not allowed in atomic transaction"
 msgstr "不允许在 using 声明中使用命名空间%qD"
 
 #: trans-mem.c:761
 #, fuzzy, gcc-internal-format
-#| msgid "attributes are not allowed on a function-definition"
 msgid "asm not allowed in %<transaction_safe%> function"
 msgstr "函数定义中不允许有属性"
 
 #: trans-mem.c:772
 #, fuzzy, gcc-internal-format
-#| msgid "Place each function into its own section"
 msgid "relaxed transaction in atomic transaction"
 msgstr "将每个函数分别放在它们各自的节中"
 
@@ -18577,7 +18032,6 @@ msgstr ""
 
 #: trans-mem.c:782
 #, fuzzy, gcc-internal-format
-#| msgid "pointer to a function used in subtraction"
 msgid "outer transaction in transaction"
 msgstr "函数指针不能相减"
 
@@ -18593,7 +18047,6 @@ msgstr ""
 
 #: trans-mem.c:4348
 #, fuzzy, gcc-internal-format
-#| msgid "attributes are not allowed on a function-definition"
 msgid "%Kasm not allowed in %<transaction_safe%> function"
 msgstr "函数定义中不允许有属性"
 
@@ -18684,7 +18137,6 @@ msgstr "非整体结果的模式精度不匹配 BIT_FIELD_REF 的字段尺寸"
 
 #: tree-cfg.c:2836
 #, fuzzy, gcc-internal-format
-#| msgid "invalid position or size operand to BIT_FIELD_REF"
 msgid "position plus size exceeds size of referenced object in BIT_FIELD_REF"
 msgstr "BIT_FIELD_REF 位置或大小操作数无效"
 
@@ -18850,31 +18302,26 @@ msgstr "gimple 比较中操作数无效"
 
 #: tree-cfg.c:3333
 #, fuzzy, gcc-internal-format
-#| msgid "type mismatch in comparison expression"
 msgid "mismatching comparison operand types"
 msgstr "比较表达式类型不匹配"
 
 #: tree-cfg.c:3347
 #, fuzzy, gcc-internal-format
-#| msgid "function returning a function"
 msgid "vector comparison returning a boolean"
 msgstr "函数返回了一个函数"
 
 #: tree-cfg.c:3361
 #, fuzzy, gcc-internal-format
-#| msgid "invalid operands in gimple comparison"
 msgid "non-vector operands in vector comparison"
 msgstr "gimple 比较中操作数无效"
 
 #: tree-cfg.c:3374
 #, fuzzy, gcc-internal-format
-#| msgid "invalid vector permutation constant"
 msgid "invalid vector comparison resulting type"
 msgstr "无效的向量置换常量"
 
 #: tree-cfg.c:3381
 #, fuzzy, gcc-internal-format
-#| msgid "Warn about comparison of different enum types"
 msgid "bogus comparison result type"
 msgstr "对不同枚举类型之间的比较给出警告"
 
@@ -18950,7 +18397,6 @@ msgstr "对浮点向量的非元素大小的向量移位"
 
 #: tree-cfg.c:3660 tree-cfg.c:3681
 #, fuzzy, gcc-internal-format
-#| msgid "type mismatch in vector shift expression"
 msgid "type mismatch in widening vector shift expression"
 msgstr "向量移位表达式类型不匹配"
 
@@ -19001,13 +18447,11 @@ msgstr "条件表达式中类型不匹配"
 
 #: tree-cfg.c:3900
 #, fuzzy, gcc-internal-format
-#| msgid "type mismatch in vector shift expression"
 msgid "type mismatch in vector permute expression"
 msgstr "向量移位表达式类型不匹配"
 
 #: tree-cfg.c:3912
 #, fuzzy, gcc-internal-format
-#| msgid "expected integer expression"
 msgid "vector types expected in vector permute expression"
 msgstr "需要整数表达式"
 
@@ -19018,7 +18462,6 @@ msgstr ""
 
 #: tree-cfg.c:3939
 #, fuzzy, gcc-internal-format
-#| msgid "invalid increment expression"
 msgid "invalid mask type in vector permute expression"
 msgstr "无效的自增语句"
 
@@ -19084,43 +18527,36 @@ msgstr "开关语句操作数无效"
 
 #: tree-cfg.c:4268
 #, fuzzy, gcc-internal-format
-#| msgid "invalid operand to switch statement"
 msgid "non-integral type switch statement"
 msgstr "开关语句操作数无效"
 
 #: tree-cfg.c:4276
 #, fuzzy, gcc-internal-format
-#| msgid "%<default%> label not within a switch statement"
 msgid "invalid default case label in switch statement"
 msgstr "%<default%>标号未出现在 switch 语句内"
 
 #: tree-cfg.c:4288
 #, fuzzy, gcc-internal-format
-#| msgid "case label not within a switch statement"
 msgid "invalid case label in switch statement"
 msgstr "case 标号出现在开关语句外"
 
 #: tree-cfg.c:4295
 #, fuzzy, gcc-internal-format
-#| msgid "invalid operand to switch statement"
 msgid "invalid case range in switch statement"
 msgstr "开关语句操作数无效"
 
 #: tree-cfg.c:4305
 #, fuzzy, gcc-internal-format
-#| msgid "case label not within a switch statement"
 msgid "type mismatch for case label in switch statement"
 msgstr "case 标号出现在开关语句外"
 
 #: tree-cfg.c:4315
 #, fuzzy, gcc-internal-format
-#| msgid "case label not within a switch statement"
 msgid "type precision mismatch in switch statement"
 msgstr "case 标号出现在开关语句外"
 
 #: tree-cfg.c:4324
 #, fuzzy, gcc-internal-format
-#| msgid "case label not within a switch statement"
 msgid "case labels not sorted in switch statement"
 msgstr "case 标号出现在开关语句外"
 
@@ -19191,7 +18627,6 @@ msgstr "gimple_bb (phi) 设置为一个错误的基本块"
 
 #: tree-cfg.c:4816
 #, fuzzy, gcc-internal-format
-#| msgid "from this location"
 msgid "PHI node with location"
 msgstr "从这个地方"
 
@@ -19327,13 +18762,11 @@ msgstr "忽略声明有 warn_unused_result 属性的函数的返回值"
 
 #: tree-diagnostic.c:203
 #, fuzzy, gcc-internal-format
-#| msgid "redefinition of %q+D"
 msgid "in definition of macro %qs"
 msgstr "%q+D重定义"
 
 #: tree-diagnostic.c:220
 #, fuzzy, gcc-internal-format
-#| msgid "%s:%d:   in constexpr expansion of %qs"
 msgid "in expansion of macro %qs"
 msgstr "%s:%d:在%qs的广义常表达式扩展中"
 
@@ -19439,7 +18872,6 @@ msgstr "函数%q+F无法被内联,因为它使用了与内联冲突的属性"
 
 #: tree-inline.c:4147
 #, fuzzy, gcc-internal-format
-#| msgid "inlining failed in call to %q+F: %s"
 msgid "inlining failed in call to always_inline %q+F: %s"
 msgstr "调用%q+F时内联失败:%s"
 
@@ -19466,7 +18898,6 @@ msgstr "未实现的功能"
 
 #: tree-ssa-loop-niter.c:2632
 #, fuzzy, gcc-internal-format
-#| msgid "operation on %qE may be undefined"
 msgid "iteration %E invokes undefined behavior"
 msgstr "%qE上的运算结果可能是未定义的"
 
@@ -19482,7 +18913,6 @@ msgstr ""
 
 #: tree-ssa-operands.c:1001
 #, fuzzy, gcc-internal-format
-#| msgid "invalid operand in return statement"
 msgid "virtual def operand missing for stmt"
 msgstr "返回语句操作数无效"
 
@@ -19503,7 +18933,6 @@ msgstr ""
 
 #: tree-ssa-operands.c:1042
 #, fuzzy, gcc-internal-format
-#| msgid "operand number missing after %%-letter"
 msgid "use operand missing for stmt"
 msgstr "%% 字母后缺少操作数号"
 
@@ -19529,13 +18958,11 @@ msgstr "此函数中的%qD在使用前可能未初始化"
 
 #: tree-ssa-uninit.c:238
 #, fuzzy, gcc-internal-format
-#| msgid "%qD is used uninitialized in this function"
 msgid "%qE is used uninitialized in this function"
 msgstr "此函数中的%qD在使用前未初始化"
 
 #: tree-ssa-uninit.c:243
 #, fuzzy, gcc-internal-format
-#| msgid "%qD may be used uninitialized in this function"
 msgid "%qE may be used uninitialized in this function"
 msgstr "此函数中的%qD在使用前可能未初始化"
 
@@ -19676,7 +19103,6 @@ msgstr ""
 
 #: tree-streamer-out.c:510
 #, fuzzy, gcc-internal-format
-#| msgid "gimple bytecode streams do not support machine specific builtin functions on this target"
 msgid "tree bytecode streams do not support machine specific builtin functions on this target"
 msgstr "GIMPLE 字节码流在此目标机上不支持机器相关的内建函数"
 
@@ -19882,37 +19308,31 @@ msgstr "树检查:在 %4$s 中访问有 %3$d 个操作数的 omp_clause %2$s 
 
 #: tree.c:12081
 #, fuzzy
-#| msgid "%qD is deprecated (declared at %s:%d): %s"
 msgid "%qD is deprecated (declared at %r%s:%d%R): %s"
 msgstr "不建议使用%qD(声明于 %s:%d):%s"
 
 #: tree.c:12085
 #, fuzzy
-#| msgid "%qD is deprecated (declared at %s:%d)"
 msgid "%qD is deprecated (declared at %r%s:%d%R)"
 msgstr "不建议使用%qD(声明于 %s:%d)"
 
 #: tree.c:12110
 #, fuzzy
-#| msgid "%qE is deprecated (declared at %s:%d): %s"
 msgid "%qE is deprecated (declared at %r%s:%d%R): %s"
 msgstr "不建议使用%qE(声明于 %s:%d):%s"
 
 #: tree.c:12114
 #, fuzzy
-#| msgid "%qE is deprecated (declared at %s:%d)"
 msgid "%qE is deprecated (declared at %r%s:%d%R)"
 msgstr "不建议使用%qE(声明于 %s:%d)"
 
 #: tree.c:12121
 #, fuzzy
-#| msgid "type is deprecated (declared at %s:%d): %s"
 msgid "type is deprecated (declared at %r%s:%d%R): %s"
 msgstr "不建议使用类型(声明于 %s:%d):%s"
 
 #: tree.c:12125
 #, fuzzy
-#| msgid "type is deprecated (declared at %s:%d)"
 msgid "type is deprecated (declared at %r%s:%d%R)"
 msgstr "不建议使用类型(声明于 %s:%d)"
 
@@ -19968,13 +19388,11 @@ msgstr "变量跟踪大小越限"
 
 #: varasm.c:319
 #, fuzzy, gcc-internal-format
-#| msgid "%+D causes a section type conflict"
 msgid "%+D causes a section type conflict with %D"
 msgstr "%+D 导致一个节类型冲突"
 
 #: varasm.c:322
 #, fuzzy, gcc-internal-format
-#| msgid "  conflict with %q+D"
 msgid "section type conflict with %D"
 msgstr "  与%q+D冲突"
 
@@ -19985,13 +19403,11 @@ msgstr "%+D 导致一个节类型冲突"
 
 #: varasm.c:329
 #, fuzzy, gcc-internal-format
-#| msgid "%+D causes a section type conflict"
 msgid "section type conflict"
 msgstr "%+D 导致一个节类型冲突"
 
 #: varasm.c:977
 #, fuzzy, gcc-internal-format
-#| msgid "alignment of %q+D is greater than maximum object file alignment.  Using %d"
 msgid "alignment of %q+D is greater than maximum object file alignment %d"
 msgstr "%q+D的对齐要求大于目标文件的最大对齐边界。使用 %d"
 
@@ -20012,13 +19428,11 @@ msgstr "为%q+D指定的寄存器不适合此数据类型"
 
 #: varasm.c:1295
 #, fuzzy, gcc-internal-format
-#| msgid "register specified for %q+D isn%'t suitable for data type"
 msgid "the register specified for %q+D cannot be accessed by the current target"
 msgstr "为%q+D指定的寄存器不适合此数据类型"
 
 #: varasm.c:1298
 #, fuzzy, gcc-internal-format
-#| msgid "register used for two global register variables"
 msgid "the register specified for %q+D is not general enough to be used as a register variable"
 msgstr "寄存器用作两个全局寄存器变量"
 
@@ -20094,7 +19508,6 @@ msgstr "弱引用在此配置下不受支持"
 
 #: varasm.c:5600
 #, fuzzy, gcc-internal-format
-#| msgid "nested functions not supported on this target"
 msgid "ifunc is not supported on this target"
 msgstr "嵌套函数在此目标机上不受支持"
 
@@ -20141,20 +19554,17 @@ msgstr "字节码流:标记 %s 不在预期的范围[%s,%s]内"
 
 #: c-family/array-notation-common.c:70
 #, fuzzy, gcc-internal-format
-#| msgid "case label is not an integer constant expression"
 msgid "__sec_implicit_index parameter must be an integer constant expression"
 msgstr "case 标号不是一个整数常量表达式"
 
 #: c-family/array-notation-common.c:106
 #, fuzzy, gcc-internal-format
-#| msgid "type mismatch in shift expression"
 msgid "length mismatch in expression"
 msgstr "移位表达式类型不匹配"
 
 #: c-family/array-notation-common.c:278 c-family/array-notation-common.c:306
 #: c/c-array-notation.c:721 cp/cp-array-notation.c:610
 #, fuzzy, gcc-internal-format
-#| msgid "comparison between %qT and %qT"
 msgid "rank mismatch between %qE and %qE"
 msgstr "在%qT和%qT间比较"
 
@@ -20166,7 +19576,6 @@ msgstr "在%qT和%qT间比较"
 #. may lie in the original expression.
 #: c-family/array-notation-common.c:287
 #, fuzzy, gcc-internal-format
-#| msgid "type mismatch in shift expression"
 msgid "rank mismatch in expression %qE"
 msgstr "移位表达式类型不匹配"
 
@@ -20177,19 +19586,16 @@ msgstr ""
 
 #: c-family/c-cilkplus.c:39
 #, fuzzy, gcc-internal-format
-#| msgid "iteration variable %qE should be private"
 msgid "iteration variable cannot be volatile"
 msgstr "迭代变量%qE应当是私有的"
 
 #: c-family/c-cilkplus.c:82
 #, fuzzy, gcc-internal-format
-#| msgid "%qE appears more than once in data clauses"
 msgid "variable appears in more than one clause"
 msgstr "%qE在数据子句中多次出现"
 
 #: c-family/c-cilkplus.c:84
 #, fuzzy, gcc-internal-format
-#| msgid "struct defined here"
 msgid "other clause defined here"
 msgstr "结构在此定义"
 
@@ -20400,13 +19806,11 @@ msgstr "使用 -flax-vector-conversions 以允许元素类型或数量不同的
 
 #: c-family/c-common.c:2333
 #, fuzzy, gcc-internal-format
-#| msgid "the last argument must be an 8-bit immediate"
 msgid "__builtin_shuffle last argument must be an integer vector"
 msgstr "最后一个实参必须是一个 8 位立即数"
 
 #: c-family/c-common.c:2342
 #, fuzzy, gcc-internal-format
-#| msgid "%<__builtin_longjmp%> second argument must be 1"
 msgid "__builtin_shuffle arguments must be vectors"
 msgstr "%<__builtin_longjmp%>的第二个实参必须是 1"
 
@@ -20557,13 +19961,11 @@ msgstr "%<sizeof%>不能用于函数类型"
 
 #: c-family/c-common.c:4958
 #, fuzzy, gcc-internal-format
-#| msgid "ISO C++ does not allow %<alignof%> with a non-type"
 msgid "ISO C++ does not permit %<alignof%> applied to a function type"
 msgstr "ISO C++ 不允许对非类型使用%<alignof%>"
 
 #: c-family/c-common.c:4961
 #, fuzzy, gcc-internal-format
-#| msgid "ISO C++ does not allow %<alignof%> with a non-type"
 msgid "ISO C does not permit %<_Alignof%> applied to a function type"
 msgstr "ISO C++ 不允许对非类型使用%<alignof%>"
 
@@ -20574,13 +19976,11 @@ msgstr "%qs不能用于 void 类型"
 
 #: c-family/c-common.c:4981
 #, fuzzy, gcc-internal-format
-#| msgid "invalid application of %qs to incomplete type %qT "
 msgid "invalid application of %qs to incomplete type %qT"
 msgstr "%qs不能用于不完全的类型%qT"
 
 #: c-family/c-common.c:4989
 #, fuzzy, gcc-internal-format
-#| msgid "invalid application of %qs to incomplete type %qT "
 msgid "invalid application of %qs to array type %qT of incomplete element type"
 msgstr "%qs不能用于不完全的类型%qT"
 
@@ -20787,13 +20187,11 @@ msgstr "此目标机不支持节属性"
 
 #: c-family/c-common.c:7417
 #, fuzzy, gcc-internal-format
-#| msgid "requested alignment is not a constant"
 msgid "requested alignment is not an integer constant"
 msgstr "要求的对齐边界不是常量"
 
 #: c-family/c-common.c:7425
 #, fuzzy, gcc-internal-format
-#| msgid "requested alignment is not a power of 2"
 msgid "requested alignment is not a positive power of 2"
 msgstr "要求的对齐边界不是 2 的某次方"
 
@@ -20804,7 +20202,6 @@ msgstr "要求的对齐边界太大"
 
 #: c-family/c-common.c:7513
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "requested alignment is too large"
 msgid "requested alignment %d is larger than %d"
 msgstr "要求的对齐边界太大"
 
@@ -20921,37 +20318,31 @@ msgstr "定义之后不能设定%qE属性"
 
 #: c-family/c-common.c:8190
 #, fuzzy, gcc-internal-format
-#| msgid "%qE attribute ignored"
 msgid "%qE attribute duplicated"
 msgstr "%qE属性被忽略"
 
 #: c-family/c-common.c:8192
 #, fuzzy, gcc-internal-format
-#| msgid "%qE attribute ignored for %qE"
 msgid "%qE attribute follows %qE"
 msgstr "%qE属性为%qE所忽略"
 
 #: c-family/c-common.c:8291
 #, fuzzy, gcc-internal-format
-#| msgid "previously declared here"
 msgid "type was previously declared %qE"
 msgstr "以前在此声明过"
 
 #: c-family/c-common.c:8344
 #, fuzzy, gcc-internal-format
-#| msgid "cleanup argument not an identifier"
 msgid "%qE argument not an identifier"
 msgstr "cleanup 实参不是一个标识符"
 
 #: c-family/c-common.c:8355
 #, fuzzy, gcc-internal-format
-#| msgid "%qD is not declared in %qD"
 msgid "%qD is not compatible with %qD"
 msgstr "%qD未在%qD中声明"
 
 #: c-family/c-common.c:8358
 #, fuzzy, gcc-internal-format
-#| msgid "cleanup argument not a function"
 msgid "transaction_wrap argument is not a function"
 msgstr "cleanup 实参不是一个函数"
 
@@ -21095,7 +20486,6 @@ msgstr "给予函数%2$qE的参数%1$u不是整型常量"
 
 #: c-family/c-common.c:9343
 #, fuzzy, gcc-internal-format
-#| msgid "non-const integer argument %u in call to function %qE"
 msgid "non-integer argument 3 in call to function %qE"
 msgstr "给予函数%2$qE的参数%1$u不是整型常量"
 
@@ -21316,7 +20706,6 @@ msgstr "%<->%>参数类型无效(有%qT)"
 
 #: c-family/c-common.c:9932
 #, fuzzy, gcc-internal-format
-#| msgid "invalid type argument of %<->%> (have %qT)"
 msgid "invalid type argument of %<->*%> (have %qT)"
 msgstr "%<->%>参数类型无效(有%qT)"
 
@@ -21342,49 +20731,41 @@ msgstr "%2$qE的第 %1$d 个实参类型不兼容"
 
 #: c-family/c-common.c:10277
 #, fuzzy, gcc-internal-format
-#| msgid "not enough arguments to function %qE"
 msgid "incorrect number of arguments to function %qE"
 msgstr "提供给函数%qE的实参太少"
 
 #: c-family/c-common.c:10285
 #, fuzzy, gcc-internal-format
-#| msgid "argument %d of %qE must be an address"
 msgid "argument 1 of %qE must be a non-void pointer type"
 msgstr "%2$qE的实参 %1$d 必须是地址"
 
 #: c-family/c-common.c:10294
 #, fuzzy, gcc-internal-format
-#| msgid "%Kfirst argument of %D must be a pointer, second integer constant"
 msgid "argument 1 of %qE must be a pointer to a constant size type"
 msgstr "%K%D 的第一个实参必须是一个指针,第二个必须是整常量"
 
 #: c-family/c-common.c:10305
 #, fuzzy, gcc-internal-format
-#| msgid "%Kfirst argument of %D must be a pointer, second integer constant"
 msgid "argument 1 of %qE must be a pointer to a nonzero size object"
 msgstr "%K%D 的第一个实参必须是一个指针,第二个必须是整常量"
 
 #: c-family/c-common.c:10320
 #, fuzzy, gcc-internal-format
-#| msgid "argument %d of %qE must be an address"
 msgid "argument %d of %qE must be a pointer type"
 msgstr "%2$qE的实参 %1$d 必须是地址"
 
 #: c-family/c-common.c:10327
 #, fuzzy, gcc-internal-format
-#| msgid "Type/rank mismatch in argument '%s' at %L"
 msgid "size mismatch in argument %d of %qE"
 msgstr "%2$L处实参‘%1$s’类型/秩不匹配"
 
 #: c-family/c-common.c:10343
 #, fuzzy, gcc-internal-format
-#| msgid "incompatible type for argument %d of %qE"
 msgid "invalid memory model argument %d of %qE"
 msgstr "%2$qE的第 %1$d 个实参类型不兼容"
 
 #: c-family/c-common.c:10350
 #, fuzzy, gcc-internal-format
-#| msgid "incompatible type for argument %d of %qE"
 msgid "non-integer memory model argument %d of %qE"
 msgstr "%2$qE的第 %1$d 个实参类型不兼容"
 
@@ -21520,7 +20901,6 @@ msgstr "比较无符号数和取反后又经提升的无符号数"
 
 #: c-family/c-common.c:11454
 #, fuzzy, gcc-internal-format
-#| msgid "%q+D defined but not used"
 msgid "typedef %qD locally defined but not used"
 msgstr "%q+D定义后未使用"
 
@@ -21532,7 +20912,6 @@ msgstr "索引值越界"
 #: c-family/c-common.c:11733 c-family/c-common.c:11783
 #: c-family/c-common.c:11798 cp/call.c:4493 cp/call.c:4500
 #, fuzzy, gcc-internal-format
-#| msgid "conversion from %qT to %qT is ambiguous"
 msgid "conversion of scalar %qT to vector %qT involves truncation"
 msgstr "从%qT到%qT的转换有歧义"
 
@@ -22020,7 +21399,6 @@ msgstr "无效的自增语句"
 
 #: c-family/c-omp.c:976
 #, fuzzy, gcc-internal-format
-#| msgid "%qE is not a function name"
 msgid "%qD is not an function argument"
 msgstr "%qE不是一个函数名"
 
@@ -22091,7 +21469,6 @@ msgstr "-Wformat-security 未与 -Wformat 一起使用,已忽略"
 
 #: c-family/c-opts.c:924
 #, fuzzy, gcc-internal-format
-#| msgid "nested functions not supported on this target"
 msgid "external TLS initialization functions not supported on this target"
 msgstr "嵌套函数在此目标机上不受支持"
 
@@ -22502,19 +21879,16 @@ msgstr "不能对该类型的实参求绝对值"
 
 #: c-family/cilk.c:93 cp/parser.c:5784
 #, fuzzy, gcc-internal-format
-#| msgid "%<friend%> can only be specified inside a class"
 msgid "%<_Cilk_spawn%> may only be used inside a function"
 msgstr "%<friend%>只能在类中指定"
 
 #: c-family/cilk.c:107
 #, fuzzy, gcc-internal-format
-#| msgid "virtual functions cannot be friends"
 msgid "only function calls can be spawned"
 msgstr "虚函数不能是友元"
 
 #: c-family/cilk.c:356
 #, fuzzy, gcc-internal-format
-#| msgid "address of explicit register variable %qD requested"
 msgid "explicit register variable %qD may not be modified in spawn"
 msgstr "要求显式寄存器变量%qD的地址。"
 
@@ -22525,7 +21899,6 @@ msgstr ""
 
 #: c-family/cilk.c:436
 #, fuzzy, gcc-internal-format
-#| msgid "invalid use of %qD in linkage specification"
 msgid "invalid use of label %q+D in %<_Cilk_spawn%>"
 msgstr "指定链接时使用%qD无效"
 
@@ -22551,7 +21924,6 @@ msgstr "-mtls-size 开关的值%qs不正确"
 
 #: common/config/arc/arc-common.c:80
 #, fuzzy, gcc-internal-format
-#| msgid "multiple function type attributes specified"
 msgid "multiple -mcpu= options specified."
 msgstr "指定了多个函数类型属性"
 
@@ -22572,43 +21944,36 @@ msgstr "-mcpu=%s 芯片版本不正确"
 
 #: common/config/i386/i386-common.c:764
 #, fuzzy, gcc-internal-format
-#| msgid "%salign-loops%s is obsolete, use -falign-loops%s"
 msgid "-malign-loops is obsolete, use -falign-loops"
 msgstr "%salign-loops%s 已经过时,请使用 -falign-loops%s"
 
 #: common/config/i386/i386-common.c:766
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "%salign-loops=%d%s is not between 0 and %d"
 msgid "-malign-loops=%d is not between 0 and %d"
 msgstr "%salign-loops=%d%s 不在 0 和 %d 之间"
 
 #: common/config/i386/i386-common.c:773
 #, fuzzy, gcc-internal-format
-#| msgid "%salign-jumps%s is obsolete, use -falign-jumps%s"
 msgid "-malign-jumps is obsolete, use -falign-jumps"
 msgstr "%salign-jumps%s 已经过时,请使用 -falign-jumps%s"
 
 #: common/config/i386/i386-common.c:775
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "%salign-loops=%d%s is not between 0 and %d"
 msgid "-malign-jumps=%d is not between 0 and %d"
 msgstr "%salign-loops=%d%s 不在 0 和 %d 之间"
 
 #: common/config/i386/i386-common.c:783
 #, fuzzy, gcc-internal-format
-#| msgid "%salign-functions%s is obsolete, use -falign-functions%s"
 msgid "-malign-functions is obsolete, use -falign-functions"
 msgstr "%salign-functions%s 已过时,请使用 -falign-functions%s"
 
 #: common/config/i386/i386-common.c:785
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "%salign-loops=%d%s is not between 0 and %d"
 msgid "-malign-functions=%d is not between 0 and %d"
 msgstr "%salign-loops=%d%s 不在 0 和 %d 之间"
 
 #: common/config/i386/i386-common.c:794
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "%sbranch-cost=%d%s is not between 0 and 5"
 msgid "-mbranch-cost=%d is not between 0 and 5"
 msgstr "%sbranch-cost=%d%s不在 0 和 5 之间"
 
@@ -22664,7 +22029,6 @@ msgstr "RX200 CPU 没有 FPU 硬件"
 
 #: common/config/rx/rx-common.c:63
 #, fuzzy, gcc-internal-format
-#| msgid "the RX200 cpu does not have FPU hardware"
 msgid "the RX100 cpu does not have FPU hardware"
 msgstr "RX200 CPU 没有 FPU 硬件"
 
@@ -22680,7 +22044,6 @@ msgstr "栈大小必须刚好是 2 的某次方"
 
 #: common/config/v850/v850-common.c:47
 #, fuzzy, gcc-internal-format
-#| msgid "value passed to %<-m%s%> is too large"
 msgid "value passed in %qs is too large"
 msgstr "传递给%<-m%s%>的值太大"
 
@@ -22777,7 +22140,6 @@ msgstr "%qE 2.95 虚表兼容属性只对 C++ 类有效"
 
 #: config/darwin.c:2738
 #, fuzzy, gcc-internal-format
-#| msgid "visibility attribute not supported in this configuration; ignored"
 msgid "protected visibility attribute not supported in this configuration; ignored"
 msgstr "可见性属性在此配置下不受支持;已忽略"
 
@@ -22788,19 +22150,16 @@ msgstr "无法打开临时响应文件 %s"
 
 #: config/darwin.c:3096
 #, fuzzy, gcc-internal-format
-#| msgid "%<-fobjc-abi-version%> >= 2 is only supported on %<-m64%> targets for %<-fnext-runtime%>"
 msgid "%<-fobjc-abi-version%> >= 2 must be used for %<-m64%> targets with %<-fnext-runtime%>"
 msgstr "%<-fobjc-abi-version%> >= 2 只在%<-m64%>目标下支持%<-fnext-runtime%>"
 
 #: config/darwin.c:3100
 #, fuzzy, gcc-internal-format
-#| msgid "%<-fobjc-abi-version%> >= 2 is only supported on %<-m64%> targets for %<-fnext-runtime%>"
 msgid "%<-fobjc-abi-version%> >= 2 is not supported on %<-m32%> targets with %<-fnext-runtime%>"
 msgstr "%<-fobjc-abi-version%> >= 2 只在%<-m64%>目标下支持%<-fnext-runtime%>"
 
 #: config/darwin.c:3185
 #, fuzzy, gcc-internal-format
-#| msgid "-mdynamic-no-pic overrides -fpic or -fPIC"
 msgid "%<-mdynamic-no-pic%> overrides %<-fpic%>, %<-fPIC%>, %<-fpie%> or %<-fPIE%>"
 msgstr "-mdynamic-no-pic 覆盖了 -fpic 或 -fPIC"
 
@@ -22917,26 +22276,22 @@ msgstr "对 VxWorks 的取样支持"
 
 #: config/aarch64/aarch64-builtins.c:817
 #, fuzzy, gcc-internal-format
-#| msgid "incompatible type for argument %d of %qE"
 msgid "incompatible type for argument %d, expected %<const int%>"
 msgstr "%2$qE的第 %1$d 个实参类型不兼容"
 
 #: config/aarch64/aarch64.c:5041
 #, fuzzy, gcc-internal-format
-#| msgid "missing filename after %qs"
 msgid "missing feature modifier after %qs"
 msgstr "%qs后缺少文件名"
 
 #. Extension not found in list.
 #: config/aarch64/aarch64.c:5062
 #, fuzzy, gcc-internal-format
-#| msgid "unknown TLS model %qs"
 msgid "unknown feature modifier %qs"
 msgstr "未知的 TLS 模型%qs"
 
 #: config/aarch64/aarch64.c:5093
 #, fuzzy, gcc-internal-format
-#| msgid "missing path after %qs"
 msgid "missing arch name in -march=%qs"
 msgstr "%qs后缺少路径"
 
@@ -22948,33 +22303,28 @@ msgstr "开关 -mcpu=%s 与 -march=%s 冲突"
 #. ARCH name not found in list.
 #: config/aarch64/aarch64.c:5125
 #, fuzzy, gcc-internal-format
-#| msgid "unknown value %s for -mfpu"
 msgid "unknown value %qs for -march"
 msgstr "-mfpu 的值 %s 未知"
 
 #: config/aarch64/aarch64.c:5150
 #, fuzzy, gcc-internal-format
-#| msgid "missing path after %qs"
 msgid "missing cpu name in -mcpu=%qs"
 msgstr "%qs后缺少路径"
 
 #. CPU name not found in list.
 #: config/aarch64/aarch64.c:5174
 #, fuzzy, gcc-internal-format
-#| msgid "unknown value %s for -mfpu"
 msgid "unknown value %qs for -mcpu"
 msgstr "-mfpu 的值 %s 未知"
 
 #. CPU name not found in list.
 #: config/aarch64/aarch64.c:5198
 #, fuzzy, gcc-internal-format
-#| msgid "unknown value %s for -mfpu"
 msgid "unknown value %qs for -mtune"
 msgstr "-mfpu 的值 %s 未知"
 
 #: config/aarch64/aarch64.c:5234
 #, fuzzy, gcc-internal-format
-#| msgid "does not support multilib"
 msgid "Assembler does not support -mabi=ilp32"
 msgstr "不支持 multilib"
 
@@ -22986,19 +22336,16 @@ msgstr ""
 #: config/aarch64/aarch64.c:5611 config/aarch64/aarch64.c:5719
 #: config/aarch64/aarch64.c:5958
 #, fuzzy, gcc-internal-format
-#| msgid "Use hardware floating point instructions"
 msgid "%qs and floating point or vector arguments"
 msgstr "使用硬件浮点指令"
 
 #: config/aarch64/aarch64.c:6830
 #, fuzzy, gcc-internal-format
-#| msgid "operand number out of range"
 msgid "lane out of range"
 msgstr "操作数号超出范围"
 
 #: config/aarch64/aarch64.c:6840
 #, fuzzy, gcc-internal-format
-#| msgid "constant argument out of range for %qs"
 msgid "constant out of range"
 msgstr "常量实参超过%qs的范围"
 
@@ -23066,7 +22413,6 @@ msgstr "错误的内建 fcode"
 
 #: config/arc/arc.c:738
 #, fuzzy, gcc-internal-format
-#| msgid "-mrelax is only supported for RTP PIC"
 msgid "-mmul64 not supported for ARC700"
 msgstr "-mrelax 只在 RTP PIC 上受支持"
 
@@ -23107,7 +22453,6 @@ msgstr ""
 
 #: config/arc/arc.c:1230
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "multiple function type attributes specified"
 msgid "multiply option implies r%d is fixed"
 msgstr "指定了多个函数类型属性"
 
@@ -23131,13 +22476,11 @@ msgstr ""
 
 #: config/arc/arc.c:5373
 #, fuzzy, gcc-internal-format
-#| msgid "%<__builtin_next_arg%> called without an argument"
 msgid "__builtin_arc_aligned with non-constant alignment"
 msgstr "调用%<__builtin_next_arg%>时没有给定实参"
 
 #: config/arc/arc.c:5381
 #, fuzzy, gcc-internal-format
-#| msgid "invalid argument to %<__builtin_frame_address%>"
 msgid "invalid alignment value for __builtin_arc_aligned"
 msgstr "%<__builtin_frame_address%>的实参无效"
 
@@ -23158,7 +22501,6 @@ msgstr ""
 
 #: config/arc/arc.c:6206
 #, fuzzy, gcc-internal-format
-#| msgid "Bad address, not register:"
 msgid "insn addresses not freed"
 msgstr "错误的地址,不是寄存器:"
 
@@ -23294,7 +22636,6 @@ msgstr "AAPCS 不支持 -mcallee-super-interworking"
 
 #: config/arm/arm.c:2571
 #, fuzzy, gcc-internal-format
-#| msgid "-fPIC and -G are incompatible"
 msgid "iWMMXt and NEON are incompatible"
 msgstr "-fPIC 与 -G 互不兼容"
 
@@ -23320,13 +22661,11 @@ msgstr "-mtp=cp15 和 16 位 Thumb 不能并用"
 
 #: config/arm/arm.c:2638
 #, fuzzy, gcc-internal-format
-#| msgid "structure size boundary can only be set to %s"
 msgid "structure size boundary can only be set to 8, 32 or 64"
 msgstr "结构大小边界只能被设定为 %s"
 
 #: config/arm/arm.c:2640
 #, fuzzy, gcc-internal-format
-#| msgid "structure size boundary can only be set to %s"
 msgid "structure size boundary can only be set to 8 or 32"
 msgstr "结构大小边界只能被设定为 %s"
 
@@ -23352,7 +22691,6 @@ msgstr "‘%s’不能被用作 PIC 寄存器"
 
 #: config/arm/arm.c:2715
 #, fuzzy, gcc-internal-format
-#| msgid "target CPU does not support ARM mode"
 msgid "target CPU does not support unaligned accesses"
 msgstr "目标 CPU 不支持 ARM 模式"
 
@@ -23440,7 +22778,6 @@ msgstr "掩码必须是一个立即数"
 
 #: config/arm/arm.c:25441
 #, fuzzy, gcc-internal-format
-#| msgid "%qE attribute argument should be between 0 to 255"
 msgid "the range of mask should be in 0 to 255"
 msgstr "%qE属性的参数应当在 0 和 255 之间"
 
@@ -23566,7 +22903,6 @@ msgstr ""
 
 #: config/arm/arm.c:26165
 #, fuzzy, gcc-internal-format
-#| msgid "Unexpected end of module"
 msgid "Unexpected thumb1 far jump"
 msgstr "非预期的模块结束"
 
@@ -23582,13 +22918,11 @@ msgstr "Thumb 模式中不能编码中断服务进程"
 
 #: config/avr/avr-c.c:66 config/avr/avr-c.c:191
 #, fuzzy, gcc-internal-format
-#| msgid "%qs expects a constant argument"
 msgid "%qs expects 1 argument but %d given"
 msgstr "%qs需要一个常量实参"
 
 #: config/avr/avr-c.c:77
 #, fuzzy, gcc-internal-format
-#| msgid "%qs expects a constant argument"
 msgid "%qs expects a fixed-point value as argument"
 msgstr "%qs需要一个常量实参"
 
@@ -23599,25 +22933,21 @@ msgstr "不建议使用。此开关不起作用。"
 
 #: config/avr/avr-c.c:108 config/avr/avr-c.c:174 config/avr/avr-c.c:231
 #, fuzzy, gcc-internal-format
-#| msgid "no matching template for %qD found"
 msgid "no matching fixed-point overload found for %qs"
 msgstr "没有找到与%qD匹配的模板"
 
 #: config/avr/avr-c.c:125
 #, fuzzy, gcc-internal-format
-#| msgid "%qs expects a constant argument"
 msgid "%qs expects 2 arguments but %d given"
 msgstr "%qs需要一个常量实参"
 
 #: config/avr/avr-c.c:137 config/avr/avr-c.c:202
 #, fuzzy, gcc-internal-format
-#| msgid "%qs expects a constant argument"
 msgid "%qs expects a fixed-point value as first argument"
 msgstr "%qs需要一个常量实参"
 
 #: config/avr/avr-c.c:145
 #, fuzzy, gcc-internal-format
-#| msgid "%qs expects a constant argument"
 msgid "%qs expects an integer value as second argument"
 msgstr "%qs需要一个常量实参"
 
@@ -23633,19 +22963,16 @@ msgstr "不支持 -fPIC"
 
 #: config/avr/avr.c:322
 #, fuzzy, gcc-internal-format
-#| msgid "-fpic is not supported"
 msgid "-fpie is not supported"
 msgstr "不支持 -fpic"
 
 #: config/avr/avr.c:324
 #, fuzzy, gcc-internal-format
-#| msgid "-fPIC is not supported"
 msgid "-fPIE is not supported"
 msgstr "不支持 -fPIC"
 
 #: config/avr/avr.c:586
 #, fuzzy, gcc-internal-format
-#| msgid "-flto and -fwhopr are mutually exclusive"
 msgid "function attributes %qs, %qs and %qs are mutually exclusive"
 msgstr "-flto and -fwhopr 互斥"
 
@@ -23656,25 +22983,21 @@ msgstr "%qE属性只能用于函数"
 
 #: config/avr/avr.c:616
 #, fuzzy, gcc-internal-format
-#| msgid "%qD cannot have default arguments"
 msgid "%qs function cannot have arguments"
 msgstr "%qD不能有默认参数"
 
 #: config/avr/avr.c:619
 #, fuzzy, gcc-internal-format
-#| msgid "functions cannot return __fp16 type"
 msgid "%qs function cannot return a value"
 msgstr "函数不能返回 __fp16 类型"
 
 #: config/avr/avr.c:626
 #, fuzzy, gcc-internal-format
-#| msgid "%qs appears to be a misspelled signal handler"
 msgid "%qs appears to be a misspelled %s handler"
 msgstr "%qs似乎是一个拼写错的信号处理者"
 
 #: config/avr/avr.c:856
 #, fuzzy, gcc-internal-format
-#| msgid "'builtin_return_address' contains only 2 bytes of address"
 msgid "%<builtin_return_address%> contains only 2 bytes of address"
 msgstr "‘builtin_return_address’只包含两字节地址"
 
@@ -23690,19 +23013,16 @@ msgstr "用程序内存地址访问数据内存"
 
 #: config/avr/avr.c:2241
 #, fuzzy, gcc-internal-format
-#| msgid "accessing program  memory with data memory address"
 msgid "accessing program memory with data memory address"
 msgstr "用数据内存地址访问程序内存"
 
 #: config/avr/avr.c:2660
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Number of registers used to pass integer arguments"
 msgid "fixed register %s used to pass parameter to function"
 msgstr "用以传递整数参数的寄存器个数"
 
 #: config/avr/avr.c:2931
 #, fuzzy, gcc-internal-format
-#| msgid "conflicting named address spaces (%s vs %s)"
 msgid "writing to address space %qs not supported"
 msgstr "冲突的有名地址空间(%s和%s)"
 
@@ -23718,13 +23038,11 @@ msgstr ""
 
 #: config/avr/avr.c:8292
 #, fuzzy, gcc-internal-format
-#| msgid "pointers to disjoint address spaces used in conditional expression"
 msgid "pointer targeting address space %qs must be const in %qT"
 msgstr "条件表达式中使用了指向不相交地址空间的指针"
 
 #: config/avr/avr.c:8295
 #, fuzzy, gcc-internal-format
-#| msgid "pointers to disjoint address spaces used in conditional expression"
 msgid "pointer targeting address space %qs must be const in %s %q+D"
 msgstr "条件表达式中使用了指向不相交地址空间的指针"
 
@@ -23745,7 +23063,6 @@ msgstr "只有未初始化的变量才能放在 .noinit 节中"
 
 #: config/avr/avr.c:8597
 #, fuzzy, gcc-internal-format
-#| msgid "only initialized variables can be placed into program memory area"
 msgid "uninitialized variable %q+D put into program memory area"
 msgstr "只有初始化的变量才能放入程序内存区"
 
@@ -23756,19 +23073,16 @@ msgstr "MCU%qs只支持汇编器"
 
 #: config/avr/avr.c:11101
 #, fuzzy, gcc-internal-format
-#| msgid "Conversion from %s to %s at %L"
 msgid "conversion from address space %qs to address space %qs"
 msgstr "从 %s 转换到 %s,位于 %L"
 
 #: config/avr/avr.c:12048
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Unexpected end of module in string constant"
 msgid "%s expects a compile time integer constant"
 msgstr "字符串常量中出现非预期的模块结束"
 
 #: config/avr/avr.c:12062
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "%qs expects a constant argument"
 msgid "%s expects a compile time long integer constant as first argument"
 msgstr "%qs需要一个常量实参"
 
@@ -23855,7 +23169,6 @@ msgstr "不能为局部变量指定%qE属性"
 
 #: config/c6x/c6x.c:238
 #, fuzzy, gcc-internal-format
-#| msgid "-fPIC and -fpic are not supported for this target"
 msgid "-fpic and -fPIC not supported without -mdsbt on this target"
 msgstr "-fPIC 和 -fpic 不被此目标所支持"
 
@@ -23871,7 +23184,6 @@ msgstr ""
 
 #: config/cr16/cr16.c:299
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "invalid thread pointer option: -mtp=%s"
 msgid "invalid data model option -mdata-model=%s"
 msgstr "无效的线程指钟选项:-mtp=%s"
 
@@ -24020,13 +23332,11 @@ msgstr ""
 
 #: config/epiphany/epiphany.c:1468
 #, fuzzy, gcc-internal-format
-#| msgid "stack size must be an exact power of 2"
 msgid "stack_offset must be at least 4"
 msgstr "栈大小必须刚好是 2 的某次方"
 
 #: config/epiphany/epiphany.c:1470
 #, fuzzy, gcc-internal-format
-#| msgid "stack size must be an exact power of 2"
 msgid "stack_offset must be a multiple of 4"
 msgstr "栈大小必须刚好是 2 的某次方"
 
@@ -24092,7 +23402,6 @@ msgstr "此内建函数只在 fr450 上可用"
 
 #: config/h8300/h8300.c:324
 #, fuzzy, gcc-internal-format
-#| msgid "-f%s not supported: ignored"
 msgid "-msx is not supported in coff"
 msgstr "-f%s 不受支持:已忽略"
 
@@ -24103,25 +23412,21 @@ msgstr "-ms2600 未与 -ms 一起使用"
 
 #: config/h8300/h8300.c:352
 #, fuzzy, gcc-internal-format
-#| msgid "-mn is used without -mh or -ms"
 msgid "-mn is used without -mh or -ms or -msx"
 msgstr "-mn 未与 -mh 或 -ms 一起使用"
 
 #: config/h8300/h8300.c:358
 #, fuzzy, gcc-internal-format
-#| msgid "-ms2600 is used without -ms"
 msgid "-mexr is used without -ms"
 msgstr "-ms2600 未与 -ms 一起使用"
 
 #: config/h8300/h8300.c:364
 #, fuzzy, gcc-internal-format
-#| msgid "%<__int128%> is not supported for this target"
 msgid "-mint32 is not supported for H8300 and H8300L targets"
 msgstr "%<__int128%>在此目标机上不受支持"
 
 #: config/h8300/h8300.c:370
 #, fuzzy, gcc-internal-format
-#| msgid "-mn is used without -mh or -ms"
 msgid "-mexr is used without -ms or -msx"
 msgstr "-mn 未与 -mh 或 -ms 一起使用"
 
@@ -24142,7 +23447,6 @@ msgstr "不能在 PCH 文件中设定位置:%m"
 
 #: config/i386/i386.c:2911
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "-Werror=%s: no option -%s"
 msgid "wrong arg %s to option %s"
 msgstr "-Werror=%s:没有选项 -%s"
 
@@ -24153,13 +23457,11 @@ msgstr ""
 
 #: config/i386/i386.c:2929
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "register name not specified for %q+D"
 msgid "wrong stringop strategy name %s specified for option %s"
 msgstr "%q+D的寄存器名无效"
 
 #: config/i386/i386.c:2943
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "alignment may not be specified for %q+D"
 msgid "unknown alignment %s specified for option %s"
 msgstr "不能为%q+D指定对齐"
 
@@ -24170,13 +23472,11 @@ msgstr ""
 
 #: config/i386/i386.c:2962
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "no class name specified with %qs"
 msgid "too many size ranges specified in option %s"
 msgstr "%qs没有指定类名"
 
 #: config/i386/i386.c:3016
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Unknown argument list function at %L"
 msgid "Unknown parameter to option -mtune-ctrl: %s"
 msgstr "%L处参数列表函数未知"
 
@@ -24193,7 +23493,6 @@ msgstr ""
 
 #: config/i386/i386.c:3424
 #, fuzzy, gcc-internal-format
-#| msgid "code model %qs not supported in the %s bit mode"
 msgid "address mode %qs not supported in the %s bit mode"
 msgstr "代码模式%qs在 %s 位模式下不受支持"
 
@@ -24205,7 +23504,6 @@ msgstr "代码模式%qs在 %s 位模式下不受支持"
 
 #: config/i386/i386.c:3462 config/i386/i386.c:3474
 #, fuzzy, gcc-internal-format
-#| msgid "code model %qs not supported in the %s bit mode"
 msgid "code model %qs not supported in x32 mode"
 msgstr "代码模式%qs在 %s 位模式下不受支持"
 
@@ -24216,7 +23514,6 @@ msgstr "代码模式 %s 在 PIC 模式下不受支持"
 
 #: config/i386/i386.c:3517
 #, fuzzy, gcc-internal-format
-#| msgid "-m%s not supported in this configuration"
 msgid "-masm=intel not supported in this configuration"
 msgstr "-m%s 在此配置下不受支持"
 
@@ -24237,7 +23534,6 @@ msgstr "generic 只能用在%stune%s %s中"
 
 #: config/i386/i386.c:3678
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "generic CPU can be used only for %stune=%s %s"
 msgid "intel CPU can be used only for %stune=%s %s"
 msgstr "generic 只能用在%stune%s %s中"
 
@@ -24253,13 +23549,11 @@ msgstr "%2$stune=%3$s%4$s所带参数(%1$s)不正确"
 
 #: config/i386/i386.c:3777
 #, fuzzy, gcc-internal-format
-#| msgid "%sregparm%s is ignored in 64-bit mode"
 msgid "-mregparm is ignored in 64-bit mode"
 msgstr "%sregparm%s 在 64 位模式下被忽略"
 
 #: config/i386/i386.c:3780
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "%sregparm=%d%s is not between 0 and %d"
 msgid "-mregparm=%d is not between 0 and %d"
 msgstr "%sregparm=%d%s 不在 0 和 %d 之间"
 
@@ -24270,13 +23564,11 @@ msgstr "%srtd%s 在 64 位模式下被忽略"
 
 #: config/i386/i386.c:3900
 #, fuzzy, gcc-internal-format
-#| msgid "%spreferred-stack-boundary%s is not supported for this target"
 msgid "-mpreferred-stack-boundary is not supported for this target"
 msgstr "%spreferred-stack-boundary%s 在此目标机上不被支持"
 
 #: config/i386/i386.c:3903
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "%spreferred-stack-boundary=%d%s is not between %d and %d"
 msgid "-mpreferred-stack-boundary=%d is not between %d and %d"
 msgstr "%spreferred-stack-boundary=%d%s 不在 %d 和 %d 之间"
 
@@ -24308,7 +23600,7 @@ msgstr "堆栈探针目前需要框架指针或 %saccumulate-outgoing-args%s 来
 #: config/i386/i386.c:4108
 #, gcc-internal-format
 msgid "-mfentry isn%'t supported for 32-bit in combination with -fpic"
-msgstr "-mfentry 在 32 位下不能和 -pic 同时使用"
+msgstr "-mfentry 在 32 位下不能和 -fpic 同时使用"
 
 #: config/i386/i386.c:4115
 #, gcc-internal-format
@@ -24422,7 +23714,6 @@ msgstr "没有启用 AVX,却出现了 AVX 向量实参,这改变了 ABI"
 
 #: config/i386/i386.c:6236
 #, fuzzy, gcc-internal-format
-#| msgid "AVX vector argument without AVX enabled changes the ABI"
 msgid "AVX vector return without AVX enabled changes the ABI"
 msgstr "没有启用 AVX,却出现了 AVX 向量实参,这改变了 ABI"
 
@@ -24515,7 +23806,6 @@ msgstr "扩展的寄存器不支持的操作数大小"
 
 #: config/i386/i386.c:14881
 #, fuzzy, gcc-internal-format
-#| msgid "non-integer operand used with operand code '%c'"
 msgid "non-integer operand used with operand code 'z'"
 msgstr "非整数操作数使用了操作数代码‘%c’"
 
@@ -24541,7 +23831,6 @@ msgstr ""
 
 #: config/i386/i386.c:31750 config/i386/i386.c:32198
 #, fuzzy, gcc-internal-format
-#| msgid "static linking is not supported"
 msgid "Virtual function multiversioning not supported"
 msgstr "不支持静态链接"
 
@@ -24552,25 +23841,21 @@ msgstr ""
 
 #: config/i386/i386.c:31818
 #, fuzzy, gcc-internal-format
-#| msgid "previous declaration of %q+D"
 msgid "previous declaration of %D"
 msgstr "%q+D的前一个声明"
 
 #: config/i386/i386.c:32037
 #, fuzzy, gcc-internal-format
-#| msgid "nested functions not supported on this target"
 msgid "multiversioning needs ifunc which is not supported on this target"
 msgstr "嵌套函数在此目标机上不受支持"
 
 #: config/i386/i386.c:32405
 #, fuzzy, gcc-internal-format
-#| msgid "argument to %qs must be a 2-bit unsigned literal"
 msgid "Parameter to builtin must be a string constant or literal"
 msgstr "%qs的实参必须是一个 2 位无符号字面常量"
 
 #: config/i386/i386.c:32430 config/i386/i386.c:32480
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Argument to -ffpe-trap is not valid: %s"
 msgid "Parameter to builtin not valid: %s"
 msgstr "-ffpe-trap 的参数无效:%s"
 
@@ -24581,25 +23866,21 @@ msgstr "最后一个实参必须是一个 2 位立即数"
 
 #: config/i386/i386.c:33287
 #, fuzzy, gcc-internal-format
-#| msgid "the fifth argument must be a 8-bit immediate"
 msgid "the fifth argument must be an 8-bit immediate"
 msgstr "第五个实参必须是一个 8 位立即数"
 
 #: config/i386/i386.c:33382
 #, fuzzy, gcc-internal-format
-#| msgid "the third argument must be a 8-bit immediate"
 msgid "the third argument must be an 8-bit immediate"
 msgstr "第三个实参必须是一个 8 位立即数"
 
 #: config/i386/i386.c:33967
 #, fuzzy, gcc-internal-format
-#| msgid "the last argument must be a 1-bit immediate"
 msgid "the last argument must be an 1-bit immediate"
 msgstr "最后一个实参必须是一个 1 位立即数"
 
 #: config/i386/i386.c:33974
 #, fuzzy, gcc-internal-format
-#| msgid "the last argument must be a 32-bit immediate"
 msgid "the last argument must be a 3-bit immediate"
 msgstr "最后一个参数必须是一个 32 位立即数"
 
@@ -24630,37 +23911,31 @@ msgstr "最后一个实参必须是一个 8 位立即数"
 
 #: config/i386/i386.c:34214
 #, fuzzy, gcc-internal-format
-#| msgid "argument must be a constant"
 msgid "the third argument must be comparison constant"
 msgstr "实参必须是常数"
 
 #: config/i386/i386.c:34219
 #, fuzzy, gcc-internal-format
-#| msgid "incorrect sharing of tree nodes"
 msgid "incorect comparison mode"
 msgstr "对树结节的共享不正确"
 
 #: config/i386/i386.c:34225 config/i386/i386.c:34421
 #, fuzzy, gcc-internal-format
-#| msgid "incorrect sharing of tree nodes"
 msgid "incorrect rounding operand"
 msgstr "对树结节的共享不正确"
 
 #: config/i386/i386.c:34403
 #, fuzzy, gcc-internal-format
-#| msgid "the last argument must be a 4-bit immediate"
 msgid "the immediate argument must be a 4-bit immediate"
 msgstr "最后一个实参必须是一个 4 位立即数"
 
 #: config/i386/i386.c:34409
 #, fuzzy, gcc-internal-format
-#| msgid "the last argument must be a 5-bit immediate"
 msgid "the immediate argument must be a 5-bit immediate"
 msgstr "最后一个实参必须是一个 5 位立即数"
 
 #: config/i386/i386.c:34412
 #, fuzzy, gcc-internal-format
-#| msgid "the last argument must be an 8-bit immediate"
 msgid "the immediate argument must be an 8-bit immediate"
 msgstr "最后一个实参必须是一个 8 位立即数"
 
@@ -24691,25 +23966,21 @@ msgstr "最后一个实参必须是一个立即数"
 
 #: config/i386/i386.c:35816 config/i386/i386.c:35964
 #, fuzzy, gcc-internal-format
-#| msgid "the last argument must be a 4-bit immediate"
 msgid "the last argument must be scale 1, 2, 4, 8"
 msgstr "最后一个实参必须是一个 4 位立即数"
 
 #: config/i386/i386.c:36016
 #, fuzzy, gcc-internal-format
-#| msgid "left argument must be a slice"
 msgid "the forth argument must be scale 1, 2, 4, 8"
 msgstr "左实参必须是一个切片"
 
 #: config/i386/i386.c:36022
 #, fuzzy, gcc-internal-format
-#| msgid "the last argument must be a 4-bit immediate"
 msgid "the last argument must be hint 0 or 1"
 msgstr "最后一个实参必须是一个 4 位立即数"
 
 #: config/i386/i386.c:36041
 #, fuzzy, gcc-internal-format
-#| msgid "the last argument must be an 8-bit immediate"
 msgid "the xabort's argument must be an 8-bit immediate"
 msgstr "最后一个实参必须是一个 8 位立即数"
 
@@ -24735,7 +24006,6 @@ msgstr "%qE不兼容的属性已被忽略"
 
 #: config/i386/i386.c:46439
 #, fuzzy, gcc-internal-format
-#| msgid "Unknown architecture '%s'"
 msgid "Unknown architecture specific memory model"
 msgstr "未知的架构‘%s’"
 
@@ -24751,7 +24021,6 @@ msgstr ""
 
 #: config/i386/i386.c:46476
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "unsupported ELF file class"
 msgid "unsupported simdlen %d"
 msgstr "不支持的 ELF 文件类"
 
@@ -24955,7 +24224,6 @@ msgstr "不支持 -falign-loops=%d"
 
 #: config/m68k/m68k.c:624
 #, fuzzy, gcc-internal-format
-#| msgid "stack limits not supported on this target"
 msgid "-fstack-limit- options are not supported on this cpu"
 msgstr "堆栈限制在此目标机上不受支持"
 
@@ -25240,7 +24508,6 @@ msgstr "非预期的 %d 字节 cop 指令"
 
 #: config/microblaze/microblaze.c:1679
 #, fuzzy, gcc-internal-format
-#| msgid "-fPIC and -fpic are not supported for this target"
 msgid "-fPIC/-fpic not supported for this target"
 msgstr "-fPIC 和 -fpic 不被此目标所支持"
 
@@ -25276,7 +24543,6 @@ msgstr "%qs属性只能应用于函数"
 
 #: config/mips/mips.c:1427 config/mips/mips.c:1433
 #, fuzzy, gcc-internal-format
-#| msgid "%qE cannot have both %<mips16%> and %<nomips16%> attributes"
 msgid "%qE cannot have both %qs and %qs attributes"
 msgstr "%qE不能同时有%<mips16%>和%<nomips16%>属性"
 
@@ -25385,7 +24651,6 @@ msgstr "%<-mgp32%>和%<-mfp64%>只有当使用 o32 ABI 时才能一起使用"
 
 #: config/mips/mips.c:17050 config/mips/mips.c:17052 config/mips/mips.c:17065
 #, fuzzy, gcc-internal-format
-#| msgid "assert: %s is assign compatible with %s"
 msgid "%qs is incompatible with %qs"
 msgstr "assert:%s 与 %s 赋值兼容"
 
@@ -25396,7 +24661,6 @@ msgstr "assert:%s 与 %s 赋值兼容"
 #. an error.
 #: config/mips/mips.c:17059
 #, fuzzy, gcc-internal-format
-#| msgid "assert: %s is assign compatible with %s"
 msgid "the combination of %qs and %qs is incompatible with %qs"
 msgstr "assert:%s 与 %s 赋值兼容"
 
@@ -25407,13 +24671,11 @@ msgstr "%qs架构不支持 Branch-Likely 指令"
 
 #: config/mips/mips.c:17120
 #, fuzzy, gcc-internal-format
-#| msgid "the %qs architecture does not support the synci instruction"
 msgid "the %qs architecture does not support madd or msub instructions"
 msgstr "%qs架构不支持 synci 指令"
 
 #: config/mips/mips.c:17134
 #, fuzzy, gcc-internal-format
-#| msgid "Generate position-independent code if possible (large mode)"
 msgid "cannot generate position-independent code for %qs"
 msgstr "尽可能生成与位置无关的代码(大模式)"
 
@@ -25530,19 +24792,16 @@ msgstr ""
 
 #: config/msp430/msp430.c:1102
 #, fuzzy, gcc-internal-format
-#| msgid "invalid argument of %qE attribute"
 msgid "unrecognised interrupt vector argument of %qE attribute"
 msgstr "属性%qE的参数无效"
 
 #: config/msp430/msp430.c:1111
 #, fuzzy, gcc-internal-format
-#| msgid "argument %d of %qE must be in the range %d...%d"
 msgid "numeric argument of %qE attribute must be in range 0..63"
 msgstr "%2$qE的第 %1$d 个参数必须是在 %3$d 和 %4$d 之间"
 
 #: config/msp430/msp430.c:1117
 #, fuzzy, gcc-internal-format
-#| msgid "argument of %qE attribute is not a string constant"
 msgid "argument of %qE attribute is not a string constant or number"
 msgstr "%qE属性的实参不是一个字符串常量"
 
@@ -25564,13 +24823,11 @@ msgstr "给予函数的实参太少"
 
 #: config/nds32/nds32.c:1213
 #, fuzzy, gcc-internal-format
-#| msgid "multiple function type attributes specified"
 msgid "multiple nested types attributes to function %qD"
 msgstr "指定了多个函数类型属性"
 
 #: config/nds32/nds32.c:1225
 #, fuzzy, gcc-internal-format
-#| msgid "multiple interrupt attributes not allowed"
 msgid "multiple interrupt attributes to function %qD"
 msgstr "不允许多个中断属性"
 
@@ -25581,44 +24838,37 @@ msgstr "不允许多个中断属性"
 #: config/nds32/nds32.c:3007 config/nds32/nds32.c:3013
 #: config/nds32/nds32.c:3045
 #, fuzzy, gcc-internal-format
-#| msgid "nested functions not supported on this target"
 msgid "a nested function is not supported for reduced registers"
 msgstr "嵌套函数在此目标机上不受支持"
 
 #. The enum index value for array size is out of range.
 #: config/nds32/nds32.c:2848
 #, fuzzy, gcc-internal-format
-#| msgid "invalid register in the instruction"
 msgid "intrinsic register index is out of range"
 msgstr "此指令中寄存器无效"
 
 #: config/nds32/nds32.c:3153
 #, fuzzy, gcc-internal-format
-#| msgid "invalid type for iteration variable %qE"
 msgid "invalid id value for interrupt/exception attribute"
 msgstr "迭代变量%qE类型无效"
 
 #: config/nds32/nds32.c:3181
 #, fuzzy, gcc-internal-format
-#| msgid "invalid argument of %qs attribute"
 msgid "invalid id value for reset attribute"
 msgstr "属性%qs的参数无效"
 
 #: config/nds32/nds32.c:3197
 #, fuzzy, gcc-internal-format
-#| msgid "invalid argument of %qs attribute"
 msgid "invalid nmi function for reset attribute"
 msgstr "属性%qs的参数无效"
 
 #: config/nds32/nds32.c:3210
 #, fuzzy, gcc-internal-format
-#| msgid "invalid argument of %qs attribute"
 msgid "invalid warm function for reset attribute"
 msgstr "属性%qs的参数无效"
 
 #: config/nds32/nds32.c:3284
 #, fuzzy, gcc-internal-format
-#| msgid "%s does not support split_block"
 msgid "not support -fpic"
 msgstr "%s 不支持 split_block"
 
@@ -25629,7 +24879,6 @@ msgstr ""
 
 #: config/nios2/nios2.c:794
 #, fuzzy, gcc-internal-format
-#| msgid "target attribute or pragma changes double precision floating point"
 msgid "switch %<-mcustom-%s%> is required for double precision floating point"
 msgstr "目标属性或 pragma 改变了双精度浮点数"
 
@@ -25675,7 +24924,6 @@ msgstr ""
 
 #: config/nios2/nios2.c:2598
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "invalid argument to built-in function"
 msgid "invalid argument to built-in function %s"
 msgstr "内建函数实参无效"
 
@@ -25686,7 +24934,6 @@ msgstr ""
 
 #: config/nios2/nios2.c:2743
 #, fuzzy, gcc-internal-format
-#| msgid "switch -mcpu=%s conflicts with -march=%s switch"
 msgid "switch %<-mcustom-%s%> conflicts with switch %<-mcustom-%s%>"
 msgstr "开关 -mcpu=%s 与 -march=%s 冲突"
 
@@ -25707,7 +24954,6 @@ msgstr ""
 
 #: config/nios2/nios2.c:2899
 #, fuzzy, gcc-internal-format
-#| msgid "%s only accepts 2 arguments"
 msgid "%<no-custom-%s%> does not accept arguments"
 msgstr "%s 只接受 2 个参数"
 
@@ -25728,7 +24974,6 @@ msgstr ""
 
 #: config/nios2/nios2.c:2943
 #, fuzzy, gcc-internal-format
-#| msgid "type of %qE is unknown"
 msgid "%<%s%> is unknown"
 msgstr "%qE的类型未知"
 
@@ -25979,13 +25224,11 @@ msgstr "-malign-power 在 64 位 Darwin 下不受支持;它与已安装的 C 
 
 #: config/rs6000/rs6000.c:3173
 #, fuzzy, gcc-internal-format
-#| msgid "not configured for ABI: '%s'"
 msgid "not configured for SPE ABI"
 msgstr "没有为此 ABI 配置:‘%s’"
 
 #: config/rs6000/rs6000.c:3178
 #, fuzzy, gcc-internal-format
-#| msgid "Do not use PowerPC instruction set"
 msgid "not configured for SPE instruction set"
 msgstr "不使用 PowerPC 指令集"
 
@@ -26021,7 +25264,6 @@ msgstr ""
 
 #: config/rs6000/rs6000.c:3333
 #, fuzzy, gcc-internal-format
-#| msgid "--resource requires -o"
 msgid "-mdirect-move requires -mvsx"
 msgstr "--resource 需要 -o"
 
@@ -26032,13 +25274,11 @@ msgstr ""
 
 #: config/rs6000/rs6000.c:3347
 #, fuzzy, gcc-internal-format
-#| msgid "--resource requires -o"
 msgid "-mpower8-vector requires -mvsx"
 msgstr "--resource 需要 -o"
 
 #: config/rs6000/rs6000.c:3354
 #, fuzzy, gcc-internal-format
-#| msgid "--resource requires -o"
 msgid "-mvsx-timode requires -mvsx"
 msgstr "--resource 需要 -o"
 
@@ -26099,7 +25339,6 @@ msgstr "内部错误:对 %s 的内建函数已经处理过。"
 
 #: config/rs6000/rs6000.c:11517
 #, fuzzy, gcc-internal-format
-#| msgid "argument 1 must be a 5-bit signed literal"
 msgid "argument 1 must be an 8-bit field value"
 msgstr "实参 1 必须是一个 5 位有符号字面值"
 
@@ -26125,13 +25364,11 @@ msgstr "__builtin_altivec_predicate 的第 1 个实参越界"
 
 #: config/rs6000/rs6000.c:12074
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "argument 2 must be a 5-bit unsigned literal"
 msgid "argument %d must be an unsigned literal"
 msgstr "实参 2 必须是一个 5 位无符号字面值"
 
 #: config/rs6000/rs6000.c:12076
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "argument 1 of __builtin_spe_predicate is out of range"
 msgid "argument %d is an unsigned literal that is out of range"
 msgstr "__builtin_spe_predicate 的第 1 个实参越界"
 
@@ -26152,13 +25389,11 @@ msgstr "实参 2 必须是一个 1 位无符号字面值"
 
 #: config/rs6000/rs6000.c:12246
 #, fuzzy, gcc-internal-format
-#| msgid "number must be 0 or 1"
 msgid "argument 2 must be 0 or 1"
 msgstr "数字必须是 0 或 1"
 
 #: config/rs6000/rs6000.c:12254
 #, fuzzy, gcc-internal-format
-#| msgid "argument %d of %qE must be in the range %d...%d"
 msgid "argument 3 must be in the range 0..15"
 msgstr "%2$qE的第 %1$d 个参数必须是在 %3$d 和 %4$d 之间"
 
@@ -26199,7 +25434,6 @@ msgstr "__builtin_spe_predicate 的第 1 个实参越界"
 
 #: config/rs6000/rs6000.c:13239
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "this builtin function is only available on the fr450"
 msgid "Builtin function %s is only valid for the cell processor"
 msgstr "此内建函数只在 fr450 上可用"
 
@@ -26464,19 +25698,16 @@ msgstr "-fdirectives-only 与 -traditional 不兼容"
 
 #: config/rs6000/e500.h:37
 #, fuzzy, gcc-internal-format
-#| msgid "AltiVec and E500 instructions cannot coexist"
 msgid "AltiVec and SPE instructions cannot coexist"
 msgstr "AltiVec 和 E500 指令不能共存"
 
 #: config/rs6000/e500.h:39
 #, fuzzy, gcc-internal-format
-#| msgid "VSX and E500 instructions cannot coexist"
 msgid "VSX and SPE instructions cannot coexist"
 msgstr "VSX 和 E500 指令不能共存"
 
 #: config/rs6000/e500.h:41
 #, fuzzy, gcc-internal-format
-#| msgid "64-bit E500 not supported"
 msgid "64-bit SPE not supported"
 msgstr "不支持 64 位 E500"
 
@@ -26492,7 +25723,6 @@ msgstr "-m64 需要 PowerPC64 CPU"
 
 #: config/rs6000/linux64.h:116
 #, fuzzy, gcc-internal-format
-#| msgid "-mas100-syntax is incompatible with -gdwarf"
 msgid "-mcall-aixdesc incompatible with -mabi=elfv2"
 msgstr "-mas100-syntax 与 -gdwarf 不兼容"
 
@@ -26550,13 +25780,11 @@ msgstr "-m%s 在此配置下不受支持"
 
 #: config/rx/rx.c:644
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "unreocgnized control register number: %d - using 'psw'"
 msgid "unrecognized control register number: %d - using 'psw'"
 msgstr "无法识别的控制寄存器号:%d - 使用‘psw’"
 
 #: config/rx/rx.c:1380
 #, fuzzy, gcc-internal-format
-#| msgid "multiple interrupt attributes not allowed"
 msgid "multiple fast interrupt routines seen: %qE and %qE"
 msgstr "不允许多个中断属性"
 
@@ -26577,13 +25805,11 @@ msgstr "RX FPU  指令不支持 NaN 和无限"
 
 #: config/s390/s390.c:479
 #, fuzzy, gcc-internal-format
-#| msgid "argument of %qE attribute is not a string constant"
 msgid "requested %qE attribute is not a non-negative integer constant or too large (max. %d)"
 msgstr "%qE属性的实参不是一个字符串常量"
 
 #: config/s390/s390.c:1712
 #, fuzzy, gcc-internal-format
-#| msgid "argument to %qE attribute larger than %d"
 msgid "argument to %qs is too large (max. %d)"
 msgstr "%qE属性的实参大于 %d"
 
@@ -26634,13 +25860,11 @@ msgstr "-mstack-guard 意味着使用 -mstack-size"
 
 #: config/s390/s390.c:5480
 #, fuzzy, gcc-internal-format
-#| msgid "function %q+D redeclared with attribute noinline"
 msgid "function %qE with the %qs attribute is not hotpatchable"
 msgstr "函数%q+D重声明为带有不可内联属性"
 
 #: config/s390/s390.c:5521
 #, fuzzy, gcc-internal-format
-#| msgid "ms_hook_prologue is not compatible with nested function"
 msgid "hotpatch_prologue is not compatible with nested function"
 msgstr "ms_hook_prologue 与嵌套函数不兼容"
 
@@ -26661,7 +25885,6 @@ msgstr ""
 
 #: config/s390/s390.c:9019
 #, fuzzy, gcc-internal-format
-#| msgid "frame size of %qs is "
 msgid "frame size of %qs is %wd bytes"
 msgstr "%qs的框架大小是"
 
@@ -26770,7 +25993,6 @@ msgstr "32 位系统不支持 -mcmodel="
 
 #: config/sparc/sparc.c:1298
 #, fuzzy, gcc-internal-format
-#| msgid "-fdata-sections not supported for this target"
 msgid "-fcall-saved-REG is not supported for out registers"
 msgstr "-fdata-sections 在此目标机上不受支持"
 
@@ -26856,13 +26078,11 @@ msgstr "__BELOW100__ 属性不允许用于自动存储类"
 
 #: config/tilegx/tilegx.c:3512 config/tilepro/tilepro.c:3118
 #, fuzzy, gcc-internal-format
-#| msgid "bad builtin code"
 msgid "bad builtin icode"
 msgstr "错误的内建代码"
 
 #: config/tilegx/tilegx.c:3553 config/tilepro/tilepro.c:3144
 #, fuzzy, gcc-internal-format
-#| msgid "mask must be an immediate"
 msgid "operand must be an immediate of the right size"
 msgstr "掩码必须是一个立即数"
 
@@ -26983,19 +26203,16 @@ msgstr "要准备太多的堆栈空间:%d"
 
 #: config/vms/vms-c.c:44
 #, fuzzy, gcc-internal-format
-#| msgid "junk at end of #pragma ghs starttda"
 msgid "junk at end of #pragma __nostandard"
 msgstr "#pragma ghs starttda 末尾有垃圾字符"
 
 #: config/vms/vms-c.c:55
 #, fuzzy, gcc-internal-format
-#| msgid "junk at end of #pragma %s"
 msgid "junk at end of #pragma __standard"
 msgstr "#pragma %s 末尾有垃圾字符"
 
 #: config/vms/vms-c.c:80
 #, fuzzy, gcc-internal-format
-#| msgid "malformed %<#pragma align%>, ignoring"
 msgid "malformed '#pragma member_alignment', ignoring"
 msgstr "%<#pragma align%>格式错误 - 已忽略"
 
@@ -27006,25 +26223,21 @@ msgstr ""
 
 #: config/vms/vms-c.c:100
 #, fuzzy, gcc-internal-format
-#| msgid "malformed %<#pragma align%>"
 msgid "malformed '#pragma member_alignment'"
 msgstr "%<#pragma align%>格式错误"
 
 #: config/vms/vms-c.c:134
 #, fuzzy, gcc-internal-format
-#| msgid "invalid alignment for %<#pragma align%>, ignoring"
 msgid "unhandled alignment for '#pragma nomember_alignment'"
 msgstr "%<#pragma align%>指定的对齐边界无效,忽略"
 
 #: config/vms/vms-c.c:147
 #, fuzzy, gcc-internal-format
-#| msgid "junk at end of '#pragma options'"
 msgid "garbage at end of '#pragma nomember_alignment'"
 msgstr "‘#pragma options’末尾有垃圾字符"
 
 #: config/vms/vms-c.c:202
 #, fuzzy, gcc-internal-format
-#| msgid "malformed '#pragma options', ignoring"
 msgid "malformed '#pragma extern_model', ignoring"
 msgstr "‘#pragma options’格式错误 - 已忽略"
 
@@ -27040,31 +26253,26 @@ msgstr ""
 
 #: config/vms/vms-c.c:234
 #, fuzzy, gcc-internal-format
-#| msgid "junk at end of %<#pragma extern_prefix%>"
 msgid "junk at end of '#pragma extern_model'"
 msgstr "%<#pragma extern_prefix%>末尾有垃圾字符"
 
 #: config/vms/vms-c.c:248
 #, fuzzy, gcc-internal-format
-#| msgid "malformed %<#pragma message%>, ignored"
 msgid "vms '#pragma __message' is ignored"
 msgstr "%<#pragma message%>格式错误,已忽略"
 
 #: config/vms/vms-c.c:273 config/vms/vms-c.c:279
 #, fuzzy, gcc-internal-format
-#| msgid "malformed #pragma extern_prefix, ignored"
 msgid "malformed '#pragma __extern_prefix', ignoring"
 msgstr "#pragma extern_prefix 格式错误,已忽略"
 
 #: config/vms/vms-c.c:312 config/vms/vms-c.c:332
 #, fuzzy, gcc-internal-format
-#| msgid "malformed %<#pragma %s%>, ignored"
 msgid "malformed %<#pragma %s%>, ignoring"
 msgstr "%<#pragma %s%>格式错误,已忽略"
 
 #: config/vms/vms-c.c:328
 #, fuzzy, gcc-internal-format
-#| msgid "invalid constant in %<#pragma pack%> - ignored"
 msgid "invalid constant in %<#pragma %s%>"
 msgstr "%<#pragma pack%>中有无效常量 - 已忽略"
 
@@ -27146,31 +26354,26 @@ msgstr ""
 
 #: c/c-array-notation.c:708 c/c-array-notation.c:714
 #, fuzzy, gcc-internal-format
-#| msgid "%qD cannot be declared as constexpr"
 msgid "%qE cannot be scalar when %qE is not"
 msgstr "%qD不能被声明为广义常表达式"
 
 #: c/c-array-notation.c:776 cp/cp-array-notation.c:658
 #, fuzzy, gcc-internal-format
-#| msgid "type mismatch between an SSA_NAME and its symbol"
 msgid "length mismatch between LHS and RHS"
 msgstr "SSA_NAME 和其符号间类型不匹配"
 
 #: c/c-array-notation.c:1323 cp/cp-array-notation.c:1407
 #, fuzzy, gcc-internal-format
-#| msgid "array subscript is not an integer"
 msgid "start-index of array notation triplet is not an integer"
 msgstr "数组下标不是一个整数"
 
 #: c/c-array-notation.c:1328 cp/cp-array-notation.c:1412
 #, fuzzy, gcc-internal-format
-#| msgid "array subscript is not an integer"
 msgid "length of array notation triplet is not an integer"
 msgstr "数组下标不是一个整数"
 
 #: c/c-array-notation.c:1335 cp/cp-array-notation.c:1417
 #, fuzzy, gcc-internal-format
-#| msgid "array subscript is not an integer"
 msgid "stride of array notation triplet is not an integer"
 msgstr "数组下标不是一个整数"
 
@@ -27593,7 +26796,6 @@ msgstr "带有类型限定的空声明没有重声明标记"
 
 #: c/c-decl.c:3755
 #, fuzzy, gcc-internal-format
-#| msgid "empty declaration with type qualifier does not redeclare tag"
 msgid "empty declaration with %<_Alignas%> does not redeclare tag"
 msgstr "带有类型限定的空声明没有重声明标记"
 
@@ -27609,7 +26811,6 @@ msgstr "%<inline%>用于空声明中"
 
 #: c/c-decl.c:3799
 #, fuzzy, gcc-internal-format
-#| msgid "%<inline%> in empty declaration"
 msgid "%<_Noreturn%> in empty declaration"
 msgstr "%<inline%>用于空声明中"
 
@@ -27630,7 +26831,6 @@ msgstr "空声明中指定存储类无用"
 
 #: c/c-decl.c:3824
 #, fuzzy, gcc-internal-format
-#| msgid "useless type name in empty declaration"
 msgid "useless %qs in empty declaration"
 msgstr "空声明中类型名无用"
 
@@ -27641,7 +26841,6 @@ msgstr "空声明中类型限定无用"
 
 #: c/c-decl.c:3844
 #, fuzzy, gcc-internal-format
-#| msgid "useless %<__thread%> in empty declaration"
 msgid "useless %<_Alignas%> in empty declaration"
 msgstr "空声明中%<__thread%>无用"
 
@@ -27890,7 +27089,6 @@ msgstr "重复的%<volatile%>"
 
 #: c/c-decl.c:5147
 #, fuzzy, gcc-internal-format
-#| msgid "duplicate %<restrict%>"
 msgid "duplicate %<_Atomic%>"
 msgstr "重复的%<restrict%>"
 
@@ -27921,7 +27119,6 @@ msgstr "函数声明定义为%<typedef%>"
 
 #: c/c-decl.c:5190
 #, fuzzy, gcc-internal-format
-#| msgid "function definition declared %<auto%>"
 msgid "function definition declared %qs"
 msgstr "函数声明定义为%<auto%>"
 
@@ -27977,7 +27174,6 @@ msgstr "嵌套函数%qE被声明为%<extern%>"
 
 #: c/c-decl.c:5259
 #, fuzzy, gcc-internal-format
-#| msgid "function-scope %qE implicitly auto and declared %<__thread%>"
 msgid "function-scope %qE implicitly auto and declared %qs"
 msgstr "函数作用域的%qE隐式为 auto,却被声明为%<__thread%>"
 
@@ -28103,7 +27299,6 @@ msgstr "忽略函数返回类型的类型限定"
 #: c/c-decl.c:5754 c/c-decl.c:5952 c/c-decl.c:6005 c/c-decl.c:6078
 #: c/c-decl.c:6179 c/c-parser.c:2401
 #, fuzzy, gcc-internal-format
-#| msgid "ISO C forbids qualified function types"
 msgid "%<_Atomic%>-qualified function type"
 msgstr "ISO C 不允许使用 const 或 volatile 限定函数类型"
 
@@ -28149,55 +27344,46 @@ msgstr "为结构字段指定了%qs"
 
 #: c/c-decl.c:5880
 #, fuzzy, gcc-internal-format
-#| msgid "bit-field %qs has invalid type"
 msgid "bit-field %qE has atomic type"
 msgstr "位段%qs类型无效"
 
 #: c/c-decl.c:5882
 #, fuzzy, gcc-internal-format
-#| msgid "bit-field %qs has invalid type"
 msgid "bit-field has atomic type"
 msgstr "位段%qs类型无效"
 
 #: c/c-decl.c:5891
 #, fuzzy, gcc-internal-format
-#| msgid "alignment may not be specified for %q+D"
 msgid "alignment specified for typedef %qE"
 msgstr "不能为%q+D指定对齐"
 
 #: c/c-decl.c:5893
 #, fuzzy, gcc-internal-format
-#| msgid "%qs specified for parameter %qE"
 msgid "alignment specified for %<register%> object %qE"
 msgstr "为形参%2$qE指定了%1$qs"
 
 #: c/c-decl.c:5898
 #, fuzzy, gcc-internal-format
-#| msgid "%qs specified for parameter %qE"
 msgid "alignment specified for parameter %qE"
 msgstr "为形参%2$qE指定了%1$qs"
 
 #: c/c-decl.c:5900
 #, fuzzy, gcc-internal-format
-#| msgid "%qs specified for unnamed parameter"
 msgid "alignment specified for unnamed parameter"
 msgstr "为无名形参指定了%qs"
 
 #: c/c-decl.c:5905
 #, fuzzy, gcc-internal-format
-#| msgid "alignment may not be specified for %q+D"
 msgid "alignment specified for bit-field %qE"
 msgstr "不能为%q+D指定对齐"
 
 #: c/c-decl.c:5907
 #, fuzzy, gcc-internal-format
-#| msgid "%qs specified for unnamed parameter"
 msgid "alignment specified for unnamed bit-field"
 msgstr "为无名形参指定了%qs"
 
 #: c/c-decl.c:5910
 #, fuzzy, gcc-internal-format
-#| msgid "assignment of function %qD"
 msgid "alignment specified for function %qE"
 msgstr "向函数%qD赋值"
 
@@ -28218,7 +27404,6 @@ msgstr "typedef%q+D声明为%<inline%>"
 
 #: c/c-decl.c:5968
 #, fuzzy, gcc-internal-format
-#| msgid "typedef %q+D declared %<inline%>"
 msgid "typedef %q+D declared %<_Noreturn%>"
 msgstr "typedef%q+D声明为%<inline%>"
 
@@ -28250,7 +27435,6 @@ msgstr "形参%q+D声明为%<inline%>"
 
 #: c/c-decl.c:6111
 #, fuzzy, gcc-internal-format
-#| msgid "parameter %q+D declared %<inline%>"
 msgid "parameter %q+D declared %<_Noreturn%>"
 msgstr "形参%q+D声明为%<inline%>"
 
@@ -28281,19 +27465,16 @@ msgstr "不能内联%<main%>函数"
 
 #: c/c-decl.c:6223
 #, fuzzy, gcc-internal-format
-#| msgid "%qE initialized and declared %<extern%>"
 msgid "%<main%> declared %<_Noreturn%>"
 msgstr "%qE已初始化,却又被声明为%<extern%>"
 
 #: c/c-decl.c:6236
 #, fuzzy, gcc-internal-format
-#| msgid "ISO C99 does not support %<_Static_assert%>"
 msgid "ISO C99 does not support %<_Noreturn%>"
 msgstr "ISO C90 不支持%<_Static_assert%>"
 
 #: c/c-decl.c:6239
 #, fuzzy, gcc-internal-format
-#| msgid "ISO C90 does not support %<long long%>"
 msgid "ISO C90 does not support %<_Noreturn%>"
 msgstr "ISO C90 不支持%<long long%>"
 
@@ -28309,7 +27490,6 @@ msgstr "变量%q+D声明为%<inline%>"
 
 #: c/c-decl.c:6280
 #, fuzzy, gcc-internal-format
-#| msgid "variable %q+D declared %<inline%>"
 msgid "variable %q+D declared %<_Noreturn%>"
 msgstr "变量%q+D声明为%<inline%>"
 
@@ -28482,7 +27662,6 @@ msgstr "可变数组是结构中的唯一成员"
 
 #: c/c-decl.c:7352 cp/class.c:6386
 #, fuzzy, gcc-internal-format
-#| msgid "size of array %qE is too large"
 msgid "type %qT is too large"
 msgstr "数组%qE太大"
 
@@ -28682,13 +27861,11 @@ msgstr "形参%qD被设定但未被使用"
 #. allow it.
 #: c/c-decl.c:8697
 #, fuzzy, gcc-internal-format
-#| msgid "%<for%> loop initial declarations are only allowed in C99 mode"
 msgid "%<for%> loop initial declarations are only allowed in C99 or C11 mode"
 msgstr "只允许在 C99 模式下使用%<for%>循环初始化声明"
 
 #: c/c-decl.c:8702
 #, fuzzy, gcc-internal-format
-#| msgid "use option -std=c99 or -std=gnu99 to compile your code"
 msgid "use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code"
 msgstr "使用 -std=c99 或 -std=gnu99 来编译您的代码"
 
@@ -28799,31 +27976,26 @@ msgstr "%qE没有出现在声明的开头"
 
 #: c/c-decl.c:9862
 #, fuzzy, gcc-internal-format
-#| msgid "%<__thread%> used with %<auto%>"
 msgid "%qE used with %<auto%>"
 msgstr "%<__thread%>与%<auto%>一起使用"
 
 #: c/c-decl.c:9864
 #, fuzzy, gcc-internal-format
-#| msgid "%<__thread%> used with %<register%>"
 msgid "%qE used with %<register%>"
 msgstr "%<__thread%>与%<register%>一起使用"
 
 #: c/c-decl.c:9866
 #, fuzzy, gcc-internal-format
-#| msgid "%<__thread%> used with %<typedef%>"
 msgid "%qE used with %<typedef%>"
 msgstr "%<__thread%>与%<typedef%>一起使用"
 
 #: c/c-decl.c:9880 c/c-parser.c:6560
 #, fuzzy, gcc-internal-format
-#| msgid "%s does not support %s"
 msgid "ISO C99 does not support %qE"
 msgstr "%s 不支持 %s"
 
 #: c/c-decl.c:9883 c/c-parser.c:6563
 #, fuzzy, gcc-internal-format
-#| msgid "ISO C90 does not support %<long long%>"
 msgid "ISO C90 does not support %qE"
 msgstr "ISO C90 不支持%<long long%>"
 
@@ -28849,7 +28021,6 @@ msgstr "声明指定了多个存储类"
 
 #: c/c-decl.c:9933
 #, fuzzy, gcc-internal-format
-#| msgid "%qs must be used with %qs"
 msgid "%qs used with %qE"
 msgstr "%qs必须与%qs一起使用"
 
@@ -28906,7 +28077,6 @@ msgstr "需要指定声明"
 
 #: c/c-parser.c:1535
 #, fuzzy, gcc-internal-format
-#| msgid "%<inline%> in empty declaration"
 msgid "%<__auto_type%> in empty declaration"
 msgstr "%<inline%>用于空声明中"
 
@@ -28942,13 +28112,11 @@ msgstr "数据定义时没有类型或存储类"
 
 #: c/c-parser.c:1706
 #, fuzzy, gcc-internal-format
-#| msgid "%<typeof%> applied to a bit-field"
 msgid "%<__auto_type%> used with a bit-field initializer"
 msgstr "为位段使用%<typeof%>"
 
 #: c/c-parser.c:1778 c/c-parser.c:1863
 #, fuzzy, gcc-internal-format
-#| msgid "%<auto%> in file-scope empty declaration"
 msgid "%<__auto_type%> requires an initialized data declaration"
 msgstr "文件作用域中出现%<auto%>空声明"
 
@@ -29022,19 +28190,16 @@ msgstr ""
 
 #: c/c-parser.c:2372
 #, fuzzy, gcc-internal-format
-#| msgid "ISO C99 does not support %<_Static_assert%>"
 msgid "ISO C99 does not support the %<_Atomic%> qualifier"
 msgstr "ISO C90 不支持%<_Static_assert%>"
 
 #: c/c-parser.c:2375
 #, fuzzy, gcc-internal-format
-#| msgid "ISO C90 does not support %<_Static_assert%>"
 msgid "ISO C90 does not support the %<_Atomic%> qualifier"
 msgstr "ISO C90 不支持%<_Static_assert%>"
 
 #: c/c-parser.c:2403
 #, fuzzy, gcc-internal-format
-#| msgid "%<typeof%> applied to a bit-field"
 msgid "%<_Atomic%> applied to a qualified type"
 msgstr "为位段使用%<typeof%>"
 
@@ -29109,13 +28274,11 @@ msgstr "为位段使用%<typeof%>"
 
 #: c/c-parser.c:3049
 #, fuzzy, gcc-internal-format
-#| msgid "ISO C90 does not support %<long long%>"
 msgid "ISO C99 does not support %<_Alignas%>"
 msgstr "ISO C90 不支持%<long long%>"
 
 #: c/c-parser.c:3052
 #, fuzzy, gcc-internal-format
-#| msgid "ISO C90 does not support %<long long%>"
 msgid "ISO C90 does not support %<_Alignas%>"
 msgstr "ISO C90 不支持%<long long%>"
 
@@ -29126,7 +28289,6 @@ msgstr "需要标识符或%<(%>"
 
 #: c/c-parser.c:3349 c/c-parser.c:3378
 #, fuzzy, gcc-internal-format
-#| msgid "Warn for obsolescent usage in a declaration"
 msgid "array notations cannot be used in declaration"
 msgstr "对声明中的过时用法给出警告"
 
@@ -29306,37 +28468,31 @@ msgstr "对位段使用%<sizeof%>"
 
 #: c/c-parser.c:6616
 #, fuzzy, gcc-internal-format
-#| msgid "ISO C++ does not allow %<alignof%> with a non-type"
 msgid "ISO C does not allow %<%E (expression)%>"
 msgstr "ISO C++ 不允许对非类型使用%<alignof%>"
 
 #: c/c-parser.c:6643
 #, fuzzy, gcc-internal-format
-#| msgid "cannot take address of bit-field %qD"
 msgid "cannot take address of %qs"
 msgstr "无法取得位段%qD的地址"
 
 #: c/c-parser.c:6727
 #, fuzzy, gcc-internal-format
-#| msgid "ISO C99 does not support %<_Static_assert%>"
 msgid "ISO C99 does not support %<_Generic%>"
 msgstr "ISO C90 不支持%<_Static_assert%>"
 
 #: c/c-parser.c:6730
 #, fuzzy, gcc-internal-format
-#| msgid "ISO C90 does not support %<_Static_assert%>"
 msgid "ISO C90 does not support %<_Generic%>"
 msgstr "ISO C90 不支持%<_Static_assert%>"
 
 #: c/c-parser.c:6797
 #, fuzzy, gcc-internal-format
-#| msgid "cast specifies function type"
 msgid "%<_Generic%> association has function type"
 msgstr "类型转换指定了函数类型"
 
 #: c/c-parser.c:6800
 #, fuzzy, gcc-internal-format
-#| msgid "expression statement has incomplete type"
 msgid "%<_Generic%> association has incomplete type"
 msgstr "表达式语句类型不完全"
 
@@ -29352,7 +28508,6 @@ msgstr ""
 
 #: c/c-parser.c:6829
 #, fuzzy, gcc-internal-format
-#| msgid "originally defined here"
 msgid "original %<default%> is here"
 msgstr "原先在这里定义"
 
@@ -29368,7 +28523,6 @@ msgstr "指针目标类型在 C++ 中不兼容"
 
 #: c/c-parser.c:6861
 #, fuzzy, gcc-internal-format
-#| msgid "Generate load/store multiple instructions"
 msgid "%<_Generic> selector matches multiple associations"
 msgstr "生成加载/存储乘法指令"
 
@@ -29399,7 +28553,6 @@ msgstr "ISO C 不允许在表达式中使用花括号组"
 
 #: c/c-parser.c:7265
 #, fuzzy, gcc-internal-format
-#| msgid "wrong number of arguments to function %<__builtin_next_arg%>"
 msgid "wrong number of arguments to %<__builtin_choose_expr%>"
 msgstr "给函数%<__builtin_next_arg%>的参数数目不对"
 
@@ -29410,7 +28563,6 @@ msgstr "%<__builtin_choose_expr%>的第一个实参不是一个常量"
 
 #: c/c-parser.c:7347
 #, fuzzy, gcc-internal-format
-#| msgid "wrong number of arguments to function %<__builtin_next_arg%>"
 msgid "wrong number of arguments to %<__builtin_complex%>"
 msgstr "给函数%<__builtin_next_arg%>的参数数目不对"
 
@@ -29421,13 +28573,11 @@ msgstr ""
 
 #: c/c-parser.c:7378
 #, fuzzy, gcc-internal-format
-#| msgid "%<__builtin_longjmp%> second argument must be 1"
 msgid "%<__builtin_complex%> operands of different types"
 msgstr "%<__builtin_longjmp%>的第二个实参必须是 1"
 
 #: c/c-parser.c:7424 cp/parser.c:5861
 #, fuzzy, gcc-internal-format
-#| msgid "wrong number of arguments to function %<__builtin_next_arg%>"
 msgid "wrong number of arguments to %<__builtin_shuffle%>"
 msgstr "给函数%<__builtin_next_arg%>的参数数目不对"
 
@@ -29538,19 +28688,16 @@ msgstr "%<#pragma omp taskwait%>只能用在复合语句中"
 
 #: c/c-parser.c:9422 cp/parser.c:31380
 #, fuzzy, gcc-internal-format
-#| msgid "%<#pragma omp taskwait%> may only be used in compound statements"
 msgid "%<#pragma omp taskyield%> may only be used in compound statements"
 msgstr "%<#pragma omp taskwait%>只能用在复合语句中"
 
 #: c/c-parser.c:9433 cp/parser.c:31396
 #, fuzzy, gcc-internal-format
-#| msgid "%<#pragma omp barrier%> may only be used in compound statements"
 msgid "%<#pragma omp cancel%> may only be used in compound statements"
 msgstr "%<#pragma omp barrier%>只能用在复合语句中"
 
 #: c/c-parser.c:9444 cp/parser.c:31412
 #, fuzzy, gcc-internal-format
-#| msgid "%<#pragma omp taskwait%> may only be used in compound statements"
 msgid "%<#pragma omp cancellation point%> may only be used in compound statements"
 msgstr "%<#pragma omp taskwait%>只能用在复合语句中"
 
@@ -29561,7 +28708,6 @@ msgstr "%<#pragma omp section%>只能用在%<#pragma omp sections%>结构中"
 
 #: c/c-parser.c:9479 cp/parser.c:31468
 #, fuzzy, gcc-internal-format
-#| msgid "for statement expected"
 msgid "for, while or do statement expected"
 msgstr "需要 for 语句"
 
@@ -29598,7 +28744,6 @@ msgstr "%<num_threads%>值必须为正"
 
 #: c/c-parser.c:10195
 #, fuzzy, gcc-internal-format
-#| msgid "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, or %<||%>"
 msgid "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%>, %<min%> or %<max%>"
 msgstr "需要%<+%>、%<*%>、%<-%>、%<&%>、%<^%>、%<|%>、%<&&%>或%<||%>"
 
@@ -29619,19 +28764,16 @@ msgstr "无效的调度类型"
 
 #: c/c-parser.c:10410
 #, fuzzy, gcc-internal-format
-#| msgid "%<num_threads%> value must be positive"
 msgid "%<num_teams%> value must be positive"
 msgstr "%<num_threads%>值必须为正"
 
 #: c/c-parser.c:10454
 #, fuzzy, gcc-internal-format
-#| msgid "%<num_threads%> value must be positive"
 msgid "%<thread_limit%> value must be positive"
 msgstr "%<num_threads%>值必须为正"
 
 #: c/c-parser.c:10496 cp/semantics.c:5589
 #, fuzzy, gcc-internal-format
-#| msgid "%Hcollapse argument needs positive constant integer expression"
 msgid "%<aligned%> clause alignment expression must be positive constant integer expression"
 msgstr "%H折叠变量需要正整常数表达式"
 
@@ -29642,49 +28784,41 @@ msgstr ""
 
 #: c/c-parser.c:10538
 #, fuzzy, gcc-internal-format
-#| msgid "schedule chunk size expression must be integral"
 msgid "%<linear%> clause step expression must be integral"
 msgstr "调度块大小表达式必须为整型"
 
 #: c/c-parser.c:10575
 #, fuzzy, gcc-internal-format
-#| msgid "%Hcollapse argument needs positive constant integer expression"
 msgid "%<safelen%> clause expression must be positive constant integer expression"
 msgstr "%H折叠变量需要正整常数表达式"
 
 #: c/c-parser.c:10611
 #, fuzzy, gcc-internal-format
-#| msgid "%Hcollapse argument needs positive constant integer expression"
 msgid "%<simdlen%> clause expression must be positive constant integer expression"
 msgstr "%H折叠变量需要正整常数表达式"
 
 #: c/c-parser.c:10673 cp/parser.c:27875 cp/parser.c:28058
 #, fuzzy, gcc-internal-format
-#| msgid "invalid schedule kind"
 msgid "invalid depend kind"
 msgstr "无效的调度类型"
 
 #: c/c-parser.c:10710 cp/parser.c:27915
 #, fuzzy, gcc-internal-format
-#| msgid "invalid mask"
 msgid "invalid map kind"
 msgstr "无效掩码"
 
 #: c/c-parser.c:10775 cp/parser.c:28005
 #, fuzzy, gcc-internal-format
-#| msgid "invalid schedule kind"
 msgid "invalid dist_schedule kind"
 msgstr "无效的调度类型"
 
 #: c/c-parser.c:10844
 #, fuzzy, gcc-internal-format
-#| msgid "invalid schedule kind"
 msgid "invalid proc_bind kind"
 msgstr "无效的调度类型"
 
 #: c/c-parser.c:10999 cp/parser.c:28194
 #, fuzzy, gcc-internal-format
-#| msgid "%qs must be used with %qs"
 msgid "%qs must be the first clause of %qs"
 msgstr "%qs必须与%qs一起使用"
 
@@ -29700,7 +28834,6 @@ msgstr "%qs对%qs而言无效"
 
 #: c/c-parser.c:11459 cp/parser.c:28653 cp/parser.c:28679
 #, fuzzy, gcc-internal-format
-#| msgid "invalid operator for %<#pragma omp atomic%>"
 msgid "invalid form of %<#pragma omp atomic%>"
 msgstr "%<#pragma omp atomic%>运算符无效"
 
@@ -29746,19 +28879,16 @@ msgstr "迭代变量%qD不应当是 firstprivate"
 
 #: c/c-parser.c:12219 cp/parser.c:29731
 #, fuzzy, gcc-internal-format
-#| msgid "expected %<operator%>"
 msgid "expected %<for%> after %qs"
 msgstr "需要%<operator%>"
 
 #: c/c-parser.c:12411 cp/parser.c:29918
 #, fuzzy, gcc-internal-format
-#| msgid "expected %<using%>"
 msgid "expected %<point%>"
 msgstr "需要%<using%>"
 
 #: c/c-parser.c:12615 cp/parser.c:30140
 #, fuzzy, gcc-internal-format
-#| msgid "%<#pragma omp taskwait%> may only be used in compound statements"
 msgid "%<#pragma omp target update%> may only be used in compound statements"
 msgstr "%<#pragma omp taskwait%>只能用在复合语句中"
 
@@ -29774,7 +28904,6 @@ msgstr ""
 
 #: c/c-parser.c:12817 c/c-parser.c:12845
 #, fuzzy, gcc-internal-format
-#| msgid "%<#pragma align%> must appear before the declaration of %D, ignoring"
 msgid "%<#pragma omp declare simd%> must be followed by function declaration or definition"
 msgstr "%<#pragma align%>必须出现在 %D 的声明之前,忽略"
 
@@ -29795,19 +28924,16 @@ msgstr ""
 
 #: c/c-parser.c:12983 cp/parser.c:30450
 #, fuzzy, gcc-internal-format
-#| msgid "expected %<try%>"
 msgid "expected %<target%>"
 msgstr "需要%<try%>"
 
 #: c/c-parser.c:12990 cp/parser.c:30457
 #, fuzzy, gcc-internal-format
-#| msgid "expected %<decltype%>"
 msgid "expected %<declare%>"
 msgstr "需要%<decltype%>"
 
 #: c/c-parser.c:12996 cp/parser.c:30464
 #, fuzzy, gcc-internal-format
-#| msgid "%<#pragma GCC pop_options%> without a corresponding %<#pragma GCC push_options%>"
 msgid "%<#pragma omp end declare target%> without corresponding %<#pragma omp declare target%>"
 msgstr "%<#pragma GCC pop_options%>缺少相应的%<#pragma GCC push_options%>"
 
@@ -29818,7 +28944,6 @@ msgstr "Objective-C 声明只能出现在全局作用域中"
 
 #: c/c-parser.c:13074
 #, fuzzy, gcc-internal-format
-#| msgid "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, or %<||%>"
 msgid "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%>, %<min%> or identifier"
 msgstr "需要%<+%>、%<*%>、%<-%>、%<&%>、%<^%>、%<|%>、%<&&%>或%<||%>"
 
@@ -29844,19 +28969,16 @@ msgstr ""
 
 #: c/c-parser.c:13125
 #, fuzzy, gcc-internal-format
-#| msgid "previous declaration"
 msgid "previous %<#pragma omp declare reduction%>"
 msgstr "上一个声明"
 
 #: c/c-parser.c:13242
 #, fuzzy, gcc-internal-format
-#| msgid "expected %<(%> or end of line"
 msgid "expected %<omp_priv%> or function-name"
 msgstr "需要%<(%>或行尾"
 
 #: c/c-parser.c:13253
 #, fuzzy, gcc-internal-format
-#| msgid "expected function"
 msgid "expected function-name %<(%>"
 msgstr "需要函数"
 
@@ -29867,7 +28989,6 @@ msgstr ""
 
 #: c/c-parser.c:13388 cp/parser.c:30900
 #, fuzzy, gcc-internal-format
-#| msgid "expected %<#pragma omp section%> or %<}%>"
 msgid "expected %<simd%> or %<reduction%> or %<target%>"
 msgstr "需要%<#pragma omp section%>或%<}%>"
 
@@ -29898,31 +29019,26 @@ msgstr ""
 
 #: c/c-parser.c:13536
 #, fuzzy, gcc-internal-format
-#| msgid "#pragma GCC optimize is not allowed inside functions"
 msgid "pragma simd must be inside a function"
 msgstr "#pragma GCC optimize 不允许用在函数中"
 
 #: c/c-parser.c:13580 cp/parser.c:31586
 #, fuzzy, gcc-internal-format
-#| msgid "selector must be an integer constant in the range 0..%wi"
 msgid "vectorlength must be an integer constant"
 msgstr "选择子必须是 0 到 %wi 间的整常量"
 
 #: c/c-parser.c:13582 cp/parser.c:31589
 #, fuzzy, gcc-internal-format
-#| msgid "stack size must be an exact power of 2"
 msgid "vectorlength must be a power of 2"
 msgstr "栈大小必须刚好是 2 的某次方"
 
 #: c/c-parser.c:13665 cp/parser.c:31696
 #, fuzzy, gcc-internal-format
-#| msgid "selector must be an integer constant in the range 0..%wi"
 msgid "step size must be an integer constant expression or an integer variable"
 msgstr "选择子必须是 0 到 %wi 间的整常量"
 
 #: c/c-parser.c:13764 cp/parser.c:31789
 #, fuzzy, gcc-internal-format
-#| msgid "expected %<#pragma omp%> clause"
 msgid "expected %<#pragma simd%> clause"
 msgstr "需要%<#pragma omp%>子句"
 
@@ -29953,7 +29069,6 @@ msgstr ""
 
 #: c/c-parser.c:14059 cp/parser.c:6263
 #, fuzzy, gcc-internal-format
-#| msgid "expected %<:%> or %<::%>"
 msgid "expected %<:%> or numeral"
 msgstr "需要%<:%>或%<::%>"
 
@@ -29964,7 +29079,6 @@ msgstr ""
 
 #: c/c-parser.c:14077 c/c-parser.c:14120
 #, fuzzy, gcc-internal-format
-#| msgid "new cannot be applied to a function type"
 msgid "array notations cannot be used with function type"
 msgstr "new 不能用于函数类型"
 
@@ -29980,7 +29094,6 @@ msgstr ""
 
 #: c/c-parser.c:14148 c/c-parser.c:14151
 #, fuzzy, gcc-internal-format
-#| msgid "expected boolean expression"
 msgid "expected array notation expression"
 msgstr "需要布尔表达式"
 
@@ -30062,7 +29175,6 @@ msgstr "在指向不完全类型的指针上执行算术运算"
 
 #: c/c-typeck.c:1832
 #, fuzzy, gcc-internal-format
-#| msgid "defining a type in a compound literal is invalid in C++"
 msgid "converting an array compound literal to a pointer is ill-formed in C++"
 msgstr "C++ 不允许在组合字面常量中定义类型"
 
@@ -30088,7 +29200,6 @@ msgstr "提领%<void *%>指针"
 
 #: c/c-typeck.c:2434
 #, fuzzy, gcc-internal-format
-#| msgid "alignment of array elements is greater than element size"
 msgid "rank of the array's index is greater than 1"
 msgstr "数组元素的对齐边界比元素大小还要大"
 
@@ -30129,19 +29240,16 @@ msgstr "在此声明"
 
 #: c/c-typeck.c:2881
 #, fuzzy, gcc-internal-format
-#| msgid "called object %qE is not a function"
 msgid "called object %qE is not a function or function pointer"
 msgstr "被调用的对象%qE不是一个函数"
 
 #: c/c-typeck.c:2886
 #, fuzzy, gcc-internal-format
-#| msgid "called object %qE is not a function"
 msgid "called object %qD is not a function or function pointer"
 msgstr "被调用的对象%qE不是一个函数"
 
 #: c/c-typeck.c:2892
 #, fuzzy, gcc-internal-format
-#| msgid "called object %qE is not a function"
 msgid "called object is not a function or function pointer"
 msgstr "被调用的对象%qE不是一个函数"
 
@@ -30250,7 +29358,6 @@ msgstr "函数指针不能相减"
 
 #: c/c-typeck.c:3515 cp/typeck.c:5054
 #, fuzzy, gcc-internal-format
-#| msgid "arithmetic on pointer to an incomplete type"
 msgid "arithmetic on pointer to an empty aggregate"
 msgstr "在指向不完全类型的指针上执行算术运算"
 
@@ -30366,7 +29473,6 @@ msgstr "条件表达式中指针/整数类型不匹配"
 
 #: c/c-typeck.c:4725 cp/typeck.c:6204
 #, fuzzy, gcc-internal-format
-#| msgid "a function call cannot appear in a constant-expression"
 msgid "spawned function call cannot be part of a comma expression"
 msgstr "函数调用不能出现在常量表达式中"
 
@@ -30377,7 +29483,6 @@ msgstr "逗号表达式的左操作数不起作用"
 
 #: c/c-typeck.c:4777 c/c-typeck.c:9666
 #, fuzzy, gcc-internal-format
-#| msgid "left-hand operand of comma expression has no effect"
 msgid "right-hand operand of comma expression has no effect"
 msgstr "逗号表达式的左操作数不起作用"
 
@@ -30473,7 +29578,6 @@ msgstr "C++ 禁止在类型转换中定义类型"
 
 #: c/c-typeck.c:5214
 #, fuzzy, gcc-internal-format
-#| msgid "assignment suppression"
 msgid "assignment to expression with array type"
 msgstr "取消赋值"
 
@@ -30819,7 +29923,6 @@ msgstr "在嵌套的上下文中初始化可变数组成员"
 
 #: c/c-typeck.c:7436
 #, fuzzy, gcc-internal-format
-#| msgid "missing initializer for member %qD"
 msgid "missing initializer for field %qD of %qT"
 msgstr "成员%qD缺少初始值设定"
 
@@ -30945,7 +30048,6 @@ msgstr ""
 
 #: c/c-typeck.c:9139 cp/typeck.c:8333
 #, fuzzy, gcc-internal-format
-#| msgid "Logical range in CASE statement at %L is not allowed"
 msgid "use of %<_Cilk_spawn%> in a return statement is not allowed"
 msgstr "%L处 CASE 语句中的逻辑范围是不被允许的"
 
@@ -31031,13 +30133,11 @@ msgstr "OpenMP for 循环中使用了 break 语句"
 
 #: c/c-typeck.c:9621
 #, fuzzy, gcc-internal-format
-#| msgid "break statement not within loop or switch"
 msgid "break statement within %<#pragma simd%> loop body"
 msgstr "break 语句不在循环或开关语句内"
 
 #: c/c-typeck.c:9623 cp/parser.c:10656
 #, fuzzy, gcc-internal-format
-#| msgid "continue statement not within a loop"
 msgid "continue statement within %<#pragma simd%> loop body"
 msgstr "continue 语句出现在循环以外"
 
@@ -31053,7 +30153,6 @@ msgstr "表达式语句类型不完全"
 
 #: c/c-typeck.c:10464 c/c-typeck.c:10601 cp/typeck.c:4570
 #, fuzzy, gcc-internal-format
-#| msgid "Warn about comparison of different enum types"
 msgid "comparing vectors with different element types"
 msgstr "对不同枚举类型之间的比较给出警告"
 
@@ -31140,7 +30239,6 @@ msgstr "需要标量时使用了联合类型"
 
 #: c/c-typeck.c:11053
 #, fuzzy, gcc-internal-format
-#| msgid "used struct type value where scalar is required"
 msgid "used vector type where scalar is required"
 msgstr "需要标量时使用了结构类型"
 
@@ -31156,33 +30254,28 @@ msgstr ""
 
 #: c/c-typeck.c:11269 cp/semantics.c:4222 cp/semantics.c:5655
 #, fuzzy, gcc-internal-format
-#| msgid "%qD is not a variable in clause %qs"
 msgid "%qD is not a variable in %qs clause"
 msgstr "%qD在子句%qs中不是一个变量"
 
 #: c/c-typeck.c:11273 c/c-typeck.c:12044 cp/semantics.c:4226
 #: cp/semantics.c:5658
 #, fuzzy, gcc-internal-format
-#| msgid "%qE is not a variable in clause %qs"
 msgid "%qE is not a variable in %qs clause"
 msgstr "%qE在子句%qs中不是一个变量"
 
 #: c/c-typeck.c:11281 c/c-typeck.c:12051 cp/semantics.c:4234
 #: cp/semantics.c:5664
 #, fuzzy, gcc-internal-format
-#| msgid "%qD is not a variable in clause %qs"
 msgid "%qD is threadprivate variable in %qs clause"
 msgstr "%qD在子句%qs中不是一个变量"
 
 #: c/c-typeck.c:11303 cp/semantics.c:4260
 #, fuzzy, gcc-internal-format
-#| msgid "size in array new must have integral type"
 msgid "low bound %qE of array section does not have integral type"
 msgstr "数组 new 的大小必须有整数类型"
 
 #: c/c-typeck.c:11310 cp/semantics.c:4267
 #, fuzzy, gcc-internal-format
-#| msgid "size in array new must have integral type"
 msgid "length %qE of array section does not have integral type"
 msgstr "数组 new 的大小必须有整数类型"
 
@@ -31198,7 +30291,6 @@ msgstr ""
 
 #: c/c-typeck.c:11359 cp/semantics.c:4316
 #, fuzzy, gcc-internal-format
-#| msgid "variable length array is used"
 msgid "negative length in array section in %qs clause"
 msgstr "使用了变长数组"
 
@@ -31219,14 +30311,12 @@ msgstr ""
 
 #: c/c-typeck.c:11447 cp/semantics.c:4404
 #, fuzzy, gcc-internal-format
-#| msgid "for increment expression has no effect"
 msgid "for pointer type length expression must be specified"
 msgstr "for 循环増量表达式不起作用"
 
 #: c/c-typeck.c:11456 c/c-typeck.c:11571 cp/semantics.c:4413
 #: cp/semantics.c:4524
 #, fuzzy, gcc-internal-format
-#| msgid "Copy array sections into a contiguous block on procedure entry"
 msgid "array section is not contiguous in %qs clause"
 msgstr "在过程入口处将数组段复制到一个连续的块中"
 
@@ -31282,25 +30372,21 @@ msgstr "%qE在子句%<lastprivate%>中不是一个变量"
 
 #: c/c-typeck.c:11975 cp/semantics.c:5545
 #, fuzzy, gcc-internal-format
-#| msgid "%qE is not a variable in clause %qs"
 msgid "%qE is not a variable in %<aligned%> clause"
 msgstr "%qE在子句%qs中不是一个变量"
 
 #: c/c-typeck.c:11982
 #, fuzzy, gcc-internal-format
-#| msgid "type to vector delete is neither pointer or array type"
 msgid "%qE in %<aligned%> clause is neither a pointer nor an array"
 msgstr "向量 delete 的实参类型既非指针也非数组"
 
 #: c/c-typeck.c:11989
 #, fuzzy, gcc-internal-format
-#| msgid "%qE appears more than once in data clauses"
 msgid "%qE appears more than once in %<aligned%> clauses"
 msgstr "%qE在数据子句中多次出现"
 
 #: c/c-typeck.c:12010 cp/semantics.c:5615
 #, fuzzy, gcc-internal-format
-#| msgid "%qE is not a variable in clause %qs"
 msgid "%qE is not a variable in %<depend%> clause"
 msgstr "%qE在子句%qs中不是一个变量"
 
@@ -31311,31 +30397,26 @@ msgstr "在 %L 处的推迟数组“%1$s”在初始化表达式中不被允许"
 
 #: c/c-typeck.c:12062 cp/semantics.c:5680
 #, fuzzy, gcc-internal-format
-#| msgid "%qD is not a variable in clause %qs"
 msgid "%qD does not have a mappable type in %qs clause"
 msgstr "%qD在子句%qs中不是一个变量"
 
 #: c/c-typeck.c:12069 cp/semantics.c:5687
 #, fuzzy, gcc-internal-format
-#| msgid "%qD appears more than once in data clauses"
 msgid "%qD appears more than once in motion clauses"
 msgstr "%qD在数据子句中多次出现"
 
 #: c/c-typeck.c:12071 cp/semantics.c:5689
 #, fuzzy, gcc-internal-format
-#| msgid "%qD appears more than once in data clauses"
 msgid "%qD appears more than once in map clauses"
 msgstr "%qD在数据子句中多次出现"
 
 #: c/c-typeck.c:12084 cp/semantics.c:5703
 #, fuzzy, gcc-internal-format
-#| msgid "%qD is not a variable in clause %qs"
 msgid "%qD is not an argument in %<uniform%> clause"
 msgstr "%qD在子句%qs中不是一个变量"
 
 #: c/c-typeck.c:12087 cp/semantics.c:5705
 #, fuzzy, gcc-internal-format
-#| msgid "%qE is not a variable in clause %qs"
 msgid "%qE is not an argument in %<uniform%> clause"
 msgstr "%qE在子句%qs中不是一个变量"
 
@@ -31424,7 +30505,6 @@ msgstr ""
 #. Re-run template unification with diagnostics.
 #: cp/call.c:3279
 #, fuzzy, gcc-internal-format
-#| msgid "template argument %d is invalid"
 msgid "  template argument deduction/substitution failed:"
 msgstr "模板第 %d 个参数无效"
 
@@ -31472,25 +30552,21 @@ msgstr "对%<(%T) (%A)%>的调用有歧义"
 
 #: cp/call.c:4245
 #, fuzzy, gcc-internal-format
-#| msgid "ambiguous overload for %qs in %<%s %E%>"
 msgid "ambiguous overload for "
 msgstr "%qs在%<%s %E%>中的重载有歧义"
 
 #: cp/call.c:4246
 #, fuzzy, gcc-internal-format
-#| msgid "no match for %qs in %<%s %E%>"
 msgid "no match for "
 msgstr "%qs在%<%s %E%>中没有匹配"
 
 #: cp/call.c:4249
 #, fuzzy, gcc-internal-format
-#| msgid "invalid operands to binary %s (have %qT and %qT)"
 msgid " (operand types are %qT, %qT, and %qT)"
 msgstr "双目运算符 %s 操作数(%qT和%qT)无效"
 
 #: cp/call.c:4251
 #, fuzzy, gcc-internal-format
-#| msgid "invalid operands to binary %s (have %qT and %qT)"
 msgid " (operand types are %qT and %qT)"
 msgstr "双目运算符 %s 操作数(%qT和%qT)无效"
 
@@ -31501,61 +30577,51 @@ msgstr ""
 
 #: cp/call.c:4273
 #, fuzzy, gcc-internal-format
-#| msgid "expected %<operator%>"
 msgid "ternary %<operator?:%>"
 msgstr "需要%<operator%>"
 
 #: cp/call.c:4277
 #, fuzzy, gcc-internal-format
-#| msgid "no match for ternary %<operator?:%> in %<%E ? %E : %E%>"
 msgid "ternary %<operator?:%> in %<%E ? %E : %E%>"
 msgstr "三元%<operator?:%>在%<%E ? %E : %E%>中没有匹配"
 
 #: cp/call.c:4286 cp/call.c:4317 cp/call.c:4326
 #, fuzzy, gcc-internal-format
-#| msgid "expected %<operator%>"
 msgid "%<operator%s%>"
 msgstr "需要%<operator%>"
 
 #: cp/call.c:4289
 #, fuzzy, gcc-internal-format
-#| msgid "no match for %<operator%s%> in %<%E%s%>"
 msgid "%<operator%s%> in %<%E%s%>"
 msgstr "%<operator%s%>在%<%E%s%>中没有匹配"
 
 #: cp/call.c:4296
 #, fuzzy, gcc-internal-format
-#| msgid "expected %<operator%>"
 msgid "%<operator[]%>"
 msgstr "需要%<operator%>"
 
 #: cp/call.c:4299
 #, fuzzy, gcc-internal-format
-#| msgid "no match for %<operator[]%> in %<%E[%E]%>"
 msgid "%<operator[]%> in %<%E[%E]%>"
 msgstr "%<operator[]%>在%<%E[%E]%>中没有匹配"
 
 #: cp/call.c:4307
 #, fuzzy, gcc-internal-format
-#| msgid "%s"
 msgid "%qs"
 msgstr "%s"
 
 #: cp/call.c:4310
 #, fuzzy, gcc-internal-format
-#| msgid "no match for %qs in %<%s %E%>"
 msgid "%qs in %<%s %E%>"
 msgstr "%qs在%<%s %E%>中没有匹配"
 
 #: cp/call.c:4320
 #, fuzzy, gcc-internal-format
-#| msgid "no match for %<operator%s%> in %<%E %s %E%>"
 msgid "%<operator%s%> in %<%E %s %E%>"
 msgstr "%<operator%s%>在%<%E %s %E%>中没有匹配"
 
 #: cp/call.c:4329
 #, fuzzy, gcc-internal-format
-#| msgid "no match for %<operator%s%> in %<%s%E%>"
 msgid "%<operator%s%> in %<%s%E%>"
 msgstr "%<operator%s%>在%<%s%E%>中没有匹配"
 
@@ -31571,7 +30637,6 @@ msgstr ""
 
 #: cp/call.c:4554
 #, fuzzy, gcc-internal-format
-#| msgid "enumeral mismatch in conditional expression: %qT vs %qT"
 msgid "incompatible vector types in conditional expression: %qT, %qT and %qT"
 msgstr "条件表达式中枚举不匹配:%qT对%qT"
 
@@ -31672,7 +30737,6 @@ msgstr "将%<false%>转换为指向%2$qD的实参 %1$P 的指针类型"
 
 #: cp/call.c:5883
 #, fuzzy, gcc-internal-format
-#| msgid "converting %<false%> to pointer type for argument %P of %qD"
 msgid "converting %<false%> to pointer type %qT"
 msgstr "将%<false%>转换为指向%2$qD的实参 %1$P 的指针类型"
 
@@ -31683,7 +30747,6 @@ msgstr "%qT的初始值设定周围花括号太多"
 
 #: cp/call.c:5940
 #, fuzzy, gcc-internal-format
-#| msgid "invalid conversion from %qT to %qT"
 msgid "invalid user-defined conversion from %qT to %qT"
 msgstr "从类型%qT到类型%qT的转换无效"
 
@@ -31694,7 +30757,6 @@ msgstr "从类型%qT到类型%qT的转换无效"
 
 #: cp/call.c:5975
 #, fuzzy, gcc-internal-format
-#| msgid "  initializing argument %P of %qD"
 msgid "initializing argument %P of %qD"
 msgstr "  初始化%2$qD的实参 %1$P"
 
@@ -31705,7 +30767,6 @@ msgstr "从初始化列表转换为%qT将使用显式构造函数%qD"
 
 #: cp/call.c:6080 cp/call.c:6219
 #, fuzzy, gcc-internal-format
-#| msgid "  initializing argument %P of %q+D"
 msgid "initializing argument %P of %q+D"
 msgstr "以初始化%2$q+D的实参 %1$P"
 
@@ -31736,7 +30797,6 @@ msgstr "无法将右值%qE绑定到%qT"
 
 #: cp/call.c:6370 cp/cvt.c:1720
 #, fuzzy, gcc-internal-format
-#| msgid "class %qT will be considered nearly empty in a future version of GCC"
 msgid "scoped enum %qT will not promote to an integral type in a future version of GCC"
 msgstr "在 GCC 的未来版本中类%qT将被看作几乎为空"
 
@@ -31758,7 +30818,6 @@ msgstr "递归计算%q#D的默认参数"
 
 #: cp/call.c:6507
 #, fuzzy, gcc-internal-format
-#| msgid "the default argument for parameter %d of %qD has not yet been parsed"
 msgid "call to %qD uses the default argument for parameter %P, which is not yet defined"
 msgstr "%2$qD的第 %1$d 个形参的默认实参尚未被解析到"
 
@@ -31769,7 +30828,6 @@ msgstr "函数的实参可能是 format 属性的备选"
 
 #: cp/call.c:6668
 #, fuzzy, gcc-internal-format
-#| msgid "defaulted function %q+D with default argument"
 msgid "use of multiversioned function without a default"
 msgstr "默认化函数%q+D有默认参数"
 
@@ -31820,7 +30878,6 @@ msgstr "不能直接调用构造函数%<%T::%D%>"
 
 #: cp/call.c:7662
 #, fuzzy, gcc-internal-format
-#| msgid "  for a function-style cast, remove the redundant %<::%D%>"
 msgid "for a function-style cast, remove the redundant %<::%D%>"
 msgstr "对于函数类型的类型转换,移除冗余的%<::%D%>"
 
@@ -31891,7 +30948,6 @@ msgstr "ISO C++ 认为有歧义,尽管第一个备选的最差类型转换要
 
 #: cp/call.c:9075
 #, fuzzy, gcc-internal-format
-#| msgid "could not convert %qE to %qT"
 msgid "could not convert %qE from %qT to %qT"
 msgstr "不能将%qE转换为%qT"
 
@@ -31912,25 +30968,21 @@ msgstr "将类型为%qT的引用初始化为类型为%qT的表达式无效"
 
 #: cp/class.c:302
 #, fuzzy, gcc-internal-format
-#| msgid "cannot convert from base %qT to derived type %qT via virtual base %qT"
 msgid "cannot convert from pointer to base class %qT to pointer to derived class %qT because the base is virtual"
 msgstr "无法从基类%qT转换到派生类%qT,通过虚基类%qT"
 
 #: cp/class.c:306
 #, fuzzy, gcc-internal-format
-#| msgid "cannot convert from base %qT to derived type %qT via virtual base %qT"
 msgid "cannot convert from base class %qT to derived class %qT because the base is virtual"
 msgstr "无法从基类%qT转换到派生类%qT,通过虚基类%qT"
 
 #: cp/class.c:313
 #, fuzzy, gcc-internal-format
-#| msgid "cannot convert from base %qT to derived type %qT via virtual base %qT"
 msgid "cannot convert from pointer to base class %qT to pointer to derived class %qT via virtual base %qT"
 msgstr "无法从基类%qT转换到派生类%qT,通过虚基类%qT"
 
 #: cp/class.c:318
 #, fuzzy, gcc-internal-format
-#| msgid "cannot convert from base %qT to derived type %qT via virtual base %qT"
 msgid "cannot convert from base class %qT to derived class %qT via virtual base %qT"
 msgstr "无法从基类%qT转换到派生类%qT,通过虚基类%qT"
 
@@ -31946,13 +30998,11 @@ msgstr "Java 类%qT不能有隐式的不平凡的析构函数"
 
 #: cp/class.c:1159
 #, fuzzy, gcc-internal-format
-#| msgid "    inlined from %qs"
 msgid "%q#D inherited from %qT"
 msgstr "    内联自%qs"
 
 #: cp/class.c:1162
 #, fuzzy, gcc-internal-format
-#| msgid "conflicts with previous declaration here"
 msgid "conflicts with version inherited from %qT"
 msgstr "与先前此处的声明冲突"
 
@@ -31998,7 +31048,6 @@ msgstr ""
 
 #: cp/class.c:1389 cp/class.c:1399
 #, fuzzy, gcc-internal-format
-#| msgid "%qD declared here"
 msgid "%qT declared here"
 msgstr "%qD在此声明"
 
@@ -32009,7 +31058,6 @@ msgstr ""
 
 #: cp/class.c:1508
 #, fuzzy, gcc-internal-format
-#| msgid "cannot convert from base %qT to derived type %qT via virtual base %qT"
 msgid "cannot derive from %<final%> base %qT in derived type %qT"
 msgstr "无法从基类%qT转换到派生类%qT,通过虚基类%qT"
 
@@ -32040,7 +31088,6 @@ msgstr "%qD的最终重载在%qT中不唯一"
 
 #: cp/class.c:2753
 #, fuzzy, gcc-internal-format
-#| msgid "%q+D defined but not used"
 msgid "%q+#D marked final, but is not virtual"
 msgstr "%q+D定义后未使用"
 
@@ -32177,13 +31224,11 @@ msgstr "为非紧实的非简单旧数据字段%q+#D忽略 packed 属性"
 
 #: cp/class.c:3594
 #, fuzzy, gcc-internal-format
-#| msgid "non-member %qs cannot be declared %<mutable%>"
 msgid "member %q+D cannot be declared both %<const%> and %<mutable%>"
 msgstr "非成员%qs不能被声明为%<mutable%>"
 
 #: cp/class.c:3600
 #, fuzzy, gcc-internal-format
-#| msgid "non-member %qs cannot be declared %<mutable%>"
 msgid "member %q+D cannot be declared as a %<mutable%> reference"
 msgstr "非成员%qs不能被声明为%<mutable%>"
 
@@ -32244,13 +31289,11 @@ msgstr "%3$L处 CLASS 变量‘%2$s’的类型‘%1$s’不能被扩展"
 
 #: cp/class.c:5393
 #, fuzzy, gcc-internal-format
-#| msgid "%q#T is not a class"
 msgid "%q+T is not literal because:"
 msgstr "%q#T不是一个类"
 
 #: cp/class.c:5395
 #, fuzzy, gcc-internal-format
-#| msgid "base class %q#T has a non-virtual destructor"
 msgid "  %q+T has a non-trivial destructor"
 msgstr "基类%q#T有一个非虚析构函数"
 
@@ -32266,7 +31309,6 @@ msgstr "%3$L处 CLASS 变量‘%2$s’的类型‘%1$s’不能被扩展"
 
 #: cp/class.c:5450
 #, fuzzy, gcc-internal-format
-#| msgid "non-static data member %qD has Java class type"
 msgid "  non-static data member %q+D has non-literal type"
 msgstr "非静态数据成员%qD具有 Java 类类型"
 
@@ -32339,7 +31381,6 @@ msgstr "%q#T有虚函数和可访问的非虚拟析构函数"
 
 #: cp/class.c:6643
 #, fuzzy, gcc-internal-format
-#| msgid "type %qT does not have a known size"
 msgid "type transparent %q#T does not have any fields"
 msgstr "类型%qT大小未知"
 
@@ -32350,7 +31391,6 @@ msgstr ""
 
 #: cp/class.c:6653
 #, fuzzy, gcc-internal-format
-#| msgid "type %qE has virtual member functions"
 msgid "type transparent class %qT has virtual functions"
 msgstr "类型%qE有虚成员函数"
 
@@ -32421,7 +31461,6 @@ msgstr "改变了%qD的原意%q+#D"
 
 #: cp/cp-array-notation.c:605
 #, fuzzy, gcc-internal-format
-#| msgid "%qD cannot be declared as constexpr"
 msgid "%qD cannot be scalar when %qD is not"
 msgstr "%qD不能被声明为广义常表达式"
 
@@ -32463,7 +31502,6 @@ msgstr ""
 
 #: cp/cp-array-notation.c:1422
 #, fuzzy, gcc-internal-format
-#| msgid "new cannot be applied to a function type"
 msgid "array notation cannot be used with function type"
 msgstr "new 不能用于函数类型"
 
@@ -32484,13 +31522,11 @@ msgstr ""
 
 #: cp/cp-cilkplus.c:53
 #, fuzzy, gcc-internal-format
-#| msgid "statement-expressions are not allowed outside functions nor in template-argument lists"
 msgid "throw expressions are not allowed inside loops marked with pragma simd"
 msgstr "语句表达式只能用于函数或模板实参列表内"
 
 #: cp/cp-cilkplus.c:60
 #, fuzzy, gcc-internal-format
-#| msgid "%s statement is not allowed inside of BLOCK at %C"
 msgid "try statements are not allowed inside loops marked with #pragma simd"
 msgstr "%s 语句不能用在%C处 BLOCK 内"
 
@@ -32561,7 +31597,6 @@ msgstr "不应使用%q#T而应使用%qT"
 
 #: cp/cvt.c:780
 #, fuzzy, gcc-internal-format
-#| msgid "could not convert %qE to %qT"
 msgid "could not convert %qE from %<void%> to %<bool%>"
 msgstr "不能将%qE转换为%qT"
 
@@ -32822,7 +31857,6 @@ msgstr "将 NULL 转换为非指针类型"
 
 #: cp/cvt.c:1644
 #, fuzzy, gcc-internal-format
-#| msgid "could not convert template argument %qE to %qT"
 msgid "default type conversion can't deduce template argument for %qD"
 msgstr "不能将模板参数从%qE转换到%qT"
 
@@ -32894,7 +31928,6 @@ msgstr "函数%q+D重声明为内联的"
 
 #: cp/decl.c:1304
 #, fuzzy, gcc-internal-format
-#| msgid "previous declaration of %q+D with attribute noinline"
 msgid "previous declaration of %qD with attribute noinline"
 msgstr "先前%q+D的声明带有 noinline 属性"
 
@@ -32905,7 +31938,6 @@ msgstr "函数%q+D重声明为带有不可内联属性"
 
 #: cp/decl.c:1314
 #, fuzzy, gcc-internal-format
-#| msgid "previous declaration of %q+D was inline"
 msgid "previous declaration of %qD was inline"
 msgstr "%q+D先前被声明为内联的"
 
@@ -32926,25 +31958,21 @@ msgstr "库函数%q#D重声明为非函数%q#D"
 
 #: cp/decl.c:1349
 #, fuzzy, gcc-internal-format
-#| msgid "conflicts with built-in declaration %q#D"
 msgid "declaration of %q#D conflicts with built-in declaration %q#D"
 msgstr "与内建声明%q#D冲突"
 
 #: cp/decl.c:1357
 #, fuzzy, gcc-internal-format
-#| msgid "declaration of %qD shadows a global declaration"
 msgid "redeclaration of %<pragma omp declare reduction%>"
 msgstr "%qD的声明隐藏了一个全局声明"
 
 #: cp/decl.c:1359
 #, fuzzy, gcc-internal-format
-#| msgid "previous non-function declaration %q+#D"
 msgid "previous %<pragma omp declare reduction%> declaration"
 msgstr "先前对于%q+#D的非函数声明"
 
 #: cp/decl.c:1410
 #, fuzzy, gcc-internal-format
-#| msgid "ambiguates built-in declaration %q#D"
 msgid "new declaration %q#D ambiguates built-in declaration %q#D"
 msgstr "使内建声明%q#D出现歧义"
 
@@ -32955,37 +31983,31 @@ msgstr "%q#D被重新声明为不同意义的符号"
 
 #: cp/decl.c:1505 cp/decl.c:1526 cp/decl.c:1553
 #, fuzzy, gcc-internal-format
-#| msgid "previous declaration %q+D"
 msgid "previous declaration %q#D"
 msgstr "先前的声明%q+D"
 
 #: cp/decl.c:1524
 #, fuzzy, gcc-internal-format
-#| msgid "declaration of template %q#D"
 msgid "conflicting declaration of template %q#D"
 msgstr "模板声明%q#D"
 
 #: cp/decl.c:1540
 #, fuzzy, gcc-internal-format
-#| msgid "ambiguates old declaration %q+#D"
 msgid "ambiguating new declaration %q#D"
 msgstr "使旧的声明%q+#D出现歧义"
 
 #: cp/decl.c:1542 cp/decl.c:1565
 #, fuzzy, gcc-internal-format
-#| msgid "global declaration %q+#D"
 msgid "old declaration %q#D"
 msgstr "全局声明%q+#D"
 
 #: cp/decl.c:1550
 #, fuzzy, gcc-internal-format
-#| msgid "conflicting declaration %q#D"
 msgid "conflicting declaration of C function %q#D"
 msgstr "相互冲突的声明%q#D"
 
 #: cp/decl.c:1563
 #, fuzzy, gcc-internal-format
-#| msgid "ambiguates old declaration %q+#D"
 msgid "ambiguating new declaration of %q#D"
 msgstr "使旧的声明%q+#D出现歧义"
 
@@ -32996,7 +32018,6 @@ msgstr "相互冲突的声明%q#D"
 
 #: cp/decl.c:1575
 #, fuzzy, gcc-internal-format
-#| msgid "previous declaration of %q+#D"
 msgid "previous declaration as %q#D"
 msgstr "%q+#D的前一个声明"
 
@@ -33009,13 +32030,11 @@ msgstr "%q+#D的前一个声明"
 #. of the program.
 #: cp/decl.c:1627
 #, fuzzy, gcc-internal-format
-#| msgid "conflicting declaration %q#D"
 msgid "conflicting declaration of namespace %qD"
 msgstr "相互冲突的声明%q#D"
 
 #: cp/decl.c:1629
 #, fuzzy, gcc-internal-format
-#| msgid "previous declaration of namespace %q+D here"
 msgid "previous declaration of namespace %qD here"
 msgstr "命名空间%q+D早先的声明在这里"
 
@@ -33026,37 +32045,31 @@ msgstr "%q+#D已在此定义过"
 
 #: cp/decl.c:1642 cp/name-lookup.c:1152 cp/name-lookup.c:1175
 #, fuzzy, gcc-internal-format
-#| msgid "previously declared here"
 msgid "%q+#D previously declared here"
 msgstr "以前在此声明过"
 
 #: cp/decl.c:1652
 #, fuzzy, gcc-internal-format
-#| msgid "prototype for %q+#D"
 msgid "prototype specified for %q#D"
 msgstr "%q+#D的原型"
 
 #: cp/decl.c:1654
 #, fuzzy, gcc-internal-format
-#| msgid "follows non-prototype definition here"
 msgid "previous non-prototype definition here"
 msgstr "出现在此处的非原型定义之后"
 
 #: cp/decl.c:1693
 #, fuzzy, gcc-internal-format
-#| msgid "conflicts with new declaration with %qL linkage"
 msgid "conflicting declaration of %q#D with %qL linkage"
 msgstr "与带有%qL链接的新声明冲突"
 
 #: cp/decl.c:1696
 #, fuzzy, gcc-internal-format
-#| msgid "previous declaration of %q+#D with %qL linkage"
 msgid "previous declaration with %qL linkage"
 msgstr "%q+#D的早先声明有%qL链接"
 
 #: cp/decl.c:1723
 #, fuzzy, gcc-internal-format
-#| msgid "redeclaration of friend %q#D may not have default template arguments"
 msgid "redeclaration of %q#D may not have default arguments"
 msgstr "友元%q#D的重声明不能有默认模板参数"
 
@@ -33067,7 +32080,6 @@ msgstr "为%2$q#D的第 %1$d 个形参指定了默认实参"
 
 #: cp/decl.c:1741 cp/decl.c:1749
 #, fuzzy, gcc-internal-format
-#| msgid "after previous specification in %q+#D"
 msgid "previous specification in %q#D here"
 msgstr "但先前在%q+#D中已有指定"
 
@@ -33078,7 +32090,6 @@ msgstr "同一作用域中%qD冗余的重声明"
 
 #: cp/decl.c:1815 cp/decl.c:1825
 #, fuzzy, gcc-internal-format
-#| msgid "previous declaration of %q+D"
 msgid "previous declaration of %qD"
 msgstr "%q+D的前一个声明"
 
@@ -33243,7 +32254,6 @@ msgstr "没有名为%q#T的类模板,在%q#T中 "
 
 #: cp/decl.c:3395
 #, fuzzy, gcc-internal-format
-#| msgid "no class template named %q#T in %q#T"
 msgid "no type named %q#T in %q#T"
 msgstr "没有名为%q#T的类模板,在%q#T中 "
 
@@ -33299,13 +32309,11 @@ msgstr "有拷贝赋值运算符的成员%q+#D不能用在联合中"
 
 #: cp/decl.c:4246
 #, fuzzy, gcc-internal-format
-#| msgid "attribute ignored in declaration of %q+#T"
 msgid "attribute ignored in declaration of %q#T"
 msgstr "属性于%q+#T的声明中被忽略"
 
 #: cp/decl.c:4249
 #, fuzzy, gcc-internal-format
-#| msgid "attribute for %q+#T must follow the %qs keyword"
 msgid "attribute for %q#T must follow the %qs keyword"
 msgstr "%q+#T的属性必须跟在%qs关键字后面"
 
@@ -33321,7 +32329,6 @@ msgstr "对 C++ 内建类型%qT的重声明"
 
 #: cp/decl.c:4294
 #, fuzzy, gcc-internal-format
-#| msgid "%qs can only be specified for functions"
 msgid "%<auto%> can only be specified for variables or function declarations"
 msgstr "只能为函数指定%qs"
 
@@ -33372,13 +32379,11 @@ msgstr "%<constexpr%>不能被用作类型声明"
 
 #: cp/decl.c:4378
 #, fuzzy, gcc-internal-format
-#| msgid "attributes ignored on template instantiation"
 msgid "attribute ignored in explicit instantiation %q#T"
 msgstr "属性在模板实例化上被忽略"
 
 #: cp/decl.c:4381
 #, fuzzy, gcc-internal-format
-#| msgid "%qE attribute can only be applied to class definitions"
 msgid "no attribute can be applied to an explicit instantiation"
 msgstr "只能为类定义应用%qE属性"
 
@@ -33543,7 +32548,6 @@ msgstr "%qT的初始值设定必须在花括号内"
 
 #: cp/decl.c:5260
 #, fuzzy, gcc-internal-format
-#| msgid "name %qD used in a GNU-style designated initializer for an array"
 msgid "%<[%E] =%> used in a GNU-style designated initializer for class %qT"
 msgstr "名字%qD用在 GNU 风格的数组指定元素初始值设定中"
 
@@ -33590,7 +32594,6 @@ msgstr "变长复合字面值"
 
 #: cp/decl.c:5632
 #, fuzzy, gcc-internal-format
-#| msgid "%qD has incomplete type"
 msgid "%q#D has incomplete type"
 msgstr "%qD类型不完全"
 
@@ -33666,19 +32669,16 @@ msgstr ""
 
 #: cp/decl.c:7176
 #, fuzzy, gcc-internal-format
-#| msgid "initializer fails to determine size of %qD"
 msgid "initializer fails to determine size of %qT"
 msgstr "初始值设定无法决定%qD的大小"
 
 #: cp/decl.c:7180
 #, fuzzy, gcc-internal-format
-#| msgid "array size missing in %qD"
 msgid "array size missing in %qT"
 msgstr "%qD缺少数组大小"
 
 #: cp/decl.c:7183
 #, fuzzy, gcc-internal-format
-#| msgid "zero-size array %qD"
 msgid "zero-size array %qT"
 msgstr "大小为 0 的数组%qD"
 
@@ -33795,7 +32795,6 @@ msgstr "%<inline%>不允许用于友元模板特例化%qD的声明"
 
 #: cp/decl.c:7499
 #, fuzzy, gcc-internal-format
-#| msgid "%<inline%> is not allowed in declaration of friend template specialization %qD"
 msgid "%<constexpr%> is not allowed in declaration of friend template specialization %qD"
 msgstr "%<inline%>不允许用于友元模板特例化%qD的声明"
 
@@ -33811,7 +32810,6 @@ msgstr "不能将%<::main%>声明为 inline"
 
 #: cp/decl.c:7547
 #, fuzzy, gcc-internal-format
-#| msgid "cannot declare %<::main%> to be inline"
 msgid "cannot declare %<::main%> to be constexpr"
 msgstr "不能将%<::main%>声明为 inline"
 
@@ -33847,19 +32845,16 @@ msgstr "非成员函数%qD不能拥有 cv 限定符"
 
 #: cp/decl.c:7620
 #, fuzzy, gcc-internal-format
-#| msgid "static member function %qD cannot have cv-qualifier"
 msgid "static member function %qD cannot have ref-qualifier"
 msgstr "成员函数%qD不能拥有 cv 限定符"
 
 #: cp/decl.c:7621
 #, fuzzy, gcc-internal-format
-#| msgid "non-member function %qD cannot have cv-qualifier"
 msgid "non-member function %qD cannot have ref-qualifier"
 msgstr "非成员函数%qD不能拥有 cv 限定符"
 
 #: cp/decl.c:7638
 #, fuzzy, gcc-internal-format
-#| msgid "template with C linkage"
 msgid "literal operator with C linkage"
 msgstr "模板有 C 链接"
 
@@ -33880,7 +32875,6 @@ msgstr ""
 
 #: cp/decl.c:7667
 #, fuzzy, gcc-internal-format
-#| msgid "%qD must be a nonstatic member function"
 msgid "%qD must be a non-member function"
 msgstr "%qD必须是一个非静态的成员函数"
 
@@ -33896,13 +32890,11 @@ msgstr "隐式声明的%qD的定义"
 
 #: cp/decl.c:7792
 #, fuzzy, gcc-internal-format
-#| msgid "definition of implicitly-declared %qD"
 msgid "definition of explicitly-defaulted %q+D"
 msgstr "隐式声明的%qD的定义"
 
 #: cp/decl.c:7793
 #, fuzzy, gcc-internal-format
-#| msgid "%q+#D previously defined here"
 msgid "%q+#D explicitly defaulted here"
 msgstr "%q+#D已在此定义过"
 
@@ -34017,7 +33009,6 @@ msgstr "数组维数溢出"
 
 #: cp/decl.c:8522
 #, fuzzy, gcc-internal-format
-#| msgid "declaration of %qD as array of void"
 msgid "declaration of %qD as array of %<auto%>"
 msgstr "%qD声明为 void 的数组"
 
@@ -34073,7 +33064,6 @@ msgstr "声明多维数组必须至少指定除第一维以外所有维的大小
 
 #: cp/decl.c:8578
 #, fuzzy, gcc-internal-format
-#| msgid "creating array of functions"
 msgid "array of array of runtime bound"
 msgstr "创建函数的数组"
 
@@ -34144,13 +33134,11 @@ msgstr "函数定义未声明形参"
 
 #: cp/decl.c:9014
 #, fuzzy, gcc-internal-format
-#| msgid "template declaration of %<typedef%>"
 msgid "declaration of %qD as %<typedef%>"
 msgstr "%<typedef%>的模板声明"
 
 #: cp/decl.c:9019
 #, fuzzy, gcc-internal-format
-#| msgid "declaration of %q+D shadows a parameter"
 msgid "declaration of %qD as parameter"
 msgstr "%q+D的声明隐藏了一个形参"
 
@@ -34326,25 +33314,21 @@ msgstr "%qs声明为返回一个数组的函数"
 
 #: cp/decl.c:9608
 #, fuzzy, gcc-internal-format
-#| msgid "%qs function uses %<auto%> type specifier without late return type"
 msgid "%qs function uses %<auto%> type specifier without trailing return type"
 msgstr "%qs函数使用了%<auto%>类型限定却没有迟返回类型"
 
 #: cp/decl.c:9611
 #, fuzzy, gcc-internal-format
-#| msgid "scoped enums only available with -std=c++0x or -std=gnu++0x"
 msgid "deduced return type only available with -std=c++1y or -std=gnu++1y"
 msgstr "带作用域的枚举只在 -std=c++0x 或 -std=gnu++0x 下可用"
 
 #: cp/decl.c:9616
 #, fuzzy, gcc-internal-format
-#| msgid "virtual functions cannot be friends"
 msgid "virtual function cannot have deduced return type"
 msgstr "虚函数不能是友元"
 
 #: cp/decl.c:9621
 #, fuzzy, gcc-internal-format
-#| msgid "%qs function with late return type has %qT as its type rather than plain %<auto%>"
 msgid "%qs function with trailing return type has %qT as its type rather than plain %<auto%>"
 msgstr "%qs函数使用迟返回类型%qT作为它的类型,而不是%<auto%>"
 
@@ -34357,7 +33341,6 @@ msgstr "可变参数模板只在 -std=c++0x 或 -std=gnu++0x 下可用"
 
 #: cp/decl.c:9635
 #, fuzzy, gcc-internal-format
-#| msgid "%qs function with late return type not declared with %<auto%> type specifier"
 msgid "%qs function with trailing return type not declared with %<auto%> type specifier"
 msgstr "%qs函数使用了迟返回类型却未用%<auto%>类型限定声明"
 
@@ -34368,7 +33351,6 @@ msgstr "析构函数不能是静态成员函数"
 
 #: cp/decl.c:9670
 #, fuzzy, gcc-internal-format
-#| msgid "destructor cannot be static member function"
 msgid "constructor cannot be static member function"
 msgstr "析构函数不能是静态成员函数"
 
@@ -34379,13 +33361,11 @@ msgstr "析构函数不能被 cv 限定"
 
 #: cp/decl.c:9675
 #, fuzzy, gcc-internal-format
-#| msgid "destructors may not be cv-qualified"
 msgid "constructors may not be cv-qualified"
 msgstr "析构函数不能被 cv 限定"
 
 #: cp/decl.c:9683
 #, fuzzy, gcc-internal-format
-#| msgid "destructors may not be cv-qualified"
 msgid "destructors may not be ref-qualified"
 msgstr "析构函数不能被 cv 限定"
 
@@ -34447,13 +33427,11 @@ msgstr "不能声明指向限定函数类型%qT的指针"
 
 #: cp/decl.c:9829
 #, fuzzy, gcc-internal-format
-#| msgid "Array reference out of bounds"
 msgid "reference to array of runtime bound"
 msgstr "对数组的引用超出范围"
 
 #: cp/decl.c:9830
 #, fuzzy, gcc-internal-format
-#| msgid "pointer to a function used in subtraction"
 msgid "pointer to array of runtime bound"
 msgstr "函数指针不能相减"
 
@@ -34489,7 +33467,6 @@ msgstr "无法定义成员函数%<%T::%s%>,在%<%T%>中"
 
 #: cp/decl.c:10028
 #, fuzzy, gcc-internal-format
-#| msgid "cannot define member function %<%T::%s%> within %<%T%>"
 msgid "cannot declare member function %<%T::%s%> within %<%T%>"
 msgstr "无法定义成员函数%<%T::%s%>,在%<%T%>中"
 
@@ -34557,13 +33534,11 @@ msgstr "函数%qs不能被声明为%<mutable%>"
 
 #: cp/decl.c:10170
 #, fuzzy, gcc-internal-format
-#| msgid "parameter declared %<auto%>"
 msgid "typedef declared %<auto%>"
 msgstr "形参声明为%<auto%>"
 
 #: cp/decl.c:10176
 #, fuzzy, gcc-internal-format
-#| msgid "creating array of functions"
 msgid "typedef naming array of runtime bound"
 msgstr "创建函数的数组"
 
@@ -34624,7 +33599,6 @@ msgstr "不能在参数声明中使用%<::%>"
 
 #: cp/decl.c:10420
 #, fuzzy, gcc-internal-format
-#| msgid "%<this%> may not be used in this context"
 msgid "%<auto%> parameter not permitted in this context"
 msgstr "%<this%>不能用在此上下文中"
 
@@ -34635,7 +33609,6 @@ msgstr "形参声明为%<auto%>"
 
 #: cp/decl.c:10465
 #, fuzzy, gcc-internal-format
-#| msgid "non-static data member %qE declared %<constexpr%>"
 msgid "non-static data member declared %<auto%>"
 msgstr "非静态数据成员%qE被声明为%<constexpr%>"
 
@@ -34682,7 +33655,6 @@ msgstr "在构造函数%qD中的友元声明需要限定名"
 
 #: cp/decl.c:10608
 #, fuzzy, gcc-internal-format
-#| msgid "field %qD has incomplete type"
 msgid "field %qD has incomplete type %qT"
 msgstr "字段%qD类型不完全"
 
@@ -34723,13 +33695,11 @@ msgstr "函数%qs的存储类%<__thread%>无效"
 
 #: cp/decl.c:10747
 #, fuzzy, gcc-internal-format
-#| msgid "storage class %<__thread%> invalid for function %qs"
 msgid "storage class %<thread_local%> invalid for function %qs"
 msgstr "函数%qs的存储类%<__thread%>无效"
 
 #: cp/decl.c:10752
 #, fuzzy, gcc-internal-format
-#| msgid "an asm-specification is not allowed on a function-definition"
 msgid "virt-specifiers in %qs not allowed outside a class definition"
 msgstr "函数定义中不允许出现 asm 指定"
 
@@ -34755,7 +33725,6 @@ msgstr "%qs定义在在非类作用域中"
 
 #: cp/decl.c:10783
 #, fuzzy, gcc-internal-format
-#| msgid "%qs defined in a non-class scope"
 msgid "%qs declared in a non-class scope"
 msgstr "%qs定义在在非类作用域中"
 
@@ -34802,7 +33771,6 @@ msgstr "%qs既有%<extern%>又有初始值设定"
 
 #: cp/decl.c:11032
 #, fuzzy, gcc-internal-format
-#| msgid "default argument %qE uses local variable %qD"
 msgid "default argument %qE uses %qD"
 msgstr "默认实参%qE使用了局部变量%qD"
 
@@ -34984,7 +33952,6 @@ msgstr "使用模板类型形参%qT,在%qs后"
 
 #: cp/decl.c:11915
 #, fuzzy, gcc-internal-format
-#| msgid "ambiguous template specialization %qD for %q+D"
 msgid "using alias template specialization %qT after %qs"
 msgstr "有歧义的模板特例化%qD(为%q+D)"
 
@@ -34995,7 +33962,6 @@ msgstr "使用 typedef 名%qD,在%qs后"
 
 #: cp/decl.c:11920
 #, fuzzy, gcc-internal-format
-#| msgid "%q+D has a previous declaration here"
 msgid "%qD has a previous declaration here"
 msgstr "%q+D先前在此处有过声明"
 
@@ -35123,7 +34089,6 @@ msgstr "%qD的枚举值不是一个整数常量"
 
 #: cp/decl.c:12928
 #, fuzzy, gcc-internal-format
-#| msgid "integer constant is too large for %<unsigned long%> type"
 msgid "incremented enumerator value is too large for %<unsigned long%>"
 msgstr "对%<unsigned long%>类型而言整数常量太大"
 
@@ -35134,7 +34099,6 @@ msgstr "%qD处枚举值溢出"
 
 #: cp/decl.c:12960
 #, fuzzy, gcc-internal-format
-#| msgid "enumerator value %E is too large for underlying type %<%T%>"
 msgid "enumerator value %E is outside the range of underlying type %<%T%>"
 msgstr "枚举值 %E 对其类型%<%T%>而言太大了"
 
@@ -35170,13 +34134,11 @@ msgstr "形参%qD被声明为 void"
 
 #: cp/decl.c:13960
 #, fuzzy, gcc-internal-format
-#| msgid "no return statement in function returning non-void"
 msgid "no return statements in function returning %qT"
 msgstr "在有返回值的函数中未发现 return 语句"
 
 #: cp/decl.c:13962 cp/typeck.c:8384
 #, fuzzy, gcc-internal-format
-#| msgid "function return types not compatible due to %<volatile%>"
 msgid "only plain %<auto%> return type can be deduced to %<void%>"
 msgstr "由于%<volatile%>,函数返回类型不兼容"
 
@@ -35197,7 +34159,6 @@ msgstr "%qD已在类%qT中定义过"
 
 #: cp/decl.c:14531 cp/decl2.c:4673
 #, fuzzy, gcc-internal-format
-#| msgid "type of %qD defaults to %<int%>"
 msgid "use of %qD before deduction of %<auto%>"
 msgstr "%qD的类型默认为%<int%>"
 
@@ -35218,7 +34179,6 @@ msgstr "%<%T[%T]%>用作数组下标类型无效"
 
 #: cp/decl2.c:449
 #, fuzzy, gcc-internal-format
-#| msgid "deleting array %q#D"
 msgid "deleting array %q#E"
 msgstr "删除数组%q#D"
 
@@ -35337,7 +34297,6 @@ msgstr "位段%qD非整型"
 
 #: cp/decl2.c:1388
 #, fuzzy, gcc-internal-format
-#| msgid "%qD is not a static data member of a class template"
 msgid "%q+D static data member inside of declare target directive"
 msgstr "%qD不是类模板的非静态数据成员"
 
@@ -35444,43 +34403,36 @@ msgstr "with"
 
 #: cp/error.c:3474
 #, fuzzy, gcc-internal-format
-#| msgid "extended initializer lists only available with -std=c++0x or -std=gnu++0x"
 msgid "extended initializer lists only available with -std=c++11 or -std=gnu++11"
 msgstr "扩展初始值设定列表只在 -std=c++0x 或 -std=gnu++0x 下可用"
 
 #: cp/error.c:3479
 #, fuzzy, gcc-internal-format
-#| msgid "explicit conversion operators only available with -std=c++0x or -std=gnu++0x"
 msgid "explicit conversion operators only available with -std=c++11 or -std=gnu++11"
 msgstr "显式转换运算符只在 -std=c++0x 或 -std=gnu++0x 下可用"
 
 #: cp/error.c:3484
 #, fuzzy, gcc-internal-format
-#| msgid "variadic templates only available with -std=c++0x or -std=gnu++0x"
 msgid "variadic templates only available with -std=c++11 or -std=gnu++11"
 msgstr "可变参数模板只在 -std=c++0x 或 -std=gnu++0x 下可用"
 
 #: cp/error.c:3489
 #, fuzzy, gcc-internal-format
-#| msgid "lambda expressions only available with -std=c++0x or -std=gnu++0x"
 msgid "lambda expressions only available with -std=c++11 or -std=gnu++11"
 msgstr "Lambda 表达式只在 -std=c++0x 或 -std=gnu++0x 下可用"
 
 #: cp/error.c:3494
 #, fuzzy, gcc-internal-format
-#| msgid "C++0x auto only available with -std=c++0x or -std=gnu++0x"
 msgid "C++11 auto only available with -std=c++11 or -std=gnu++11"
 msgstr "C++0x auto 只在 -std=c++0x 或 -std=gnu++0x 下可用"
 
 #: cp/error.c:3498
 #, fuzzy, gcc-internal-format
-#| msgid "scoped enums only available with -std=c++0x or -std=gnu++0x"
 msgid "scoped enums only available with -std=c++11 or -std=gnu++11"
 msgstr "带作用域的枚举只在 -std=c++0x 或 -std=gnu++0x 下可用"
 
 #: cp/error.c:3502
 #, fuzzy, gcc-internal-format
-#| msgid "defaulted and deleted functions only available with -std=c++0x or -std=gnu++0x"
 msgid "defaulted and deleted functions only available with -std=c++11 or -std=gnu++11"
 msgstr "默认化和被删除的函数只在 -std=c++0x 或 -std=gnu++0x 下可用"
 
@@ -35491,25 +34443,21 @@ msgstr "可变参数模板只在 -std=c++0x 或 -std=gnu++0x 下可用"
 
 #: cp/error.c:3512
 #, fuzzy, gcc-internal-format
-#| msgid "explicit conversion operators only available with -std=c++0x or -std=gnu++0x"
 msgid "override controls (override/final) only available with -std=c++11 or -std=gnu++11"
 msgstr "显式转换运算符只在 -std=c++0x 或 -std=gnu++0x 下可用"
 
 #: cp/error.c:3517
 #, fuzzy, gcc-internal-format
-#| msgid "extended initializer lists only available with -std=c++0x or -std=gnu++0x"
 msgid "non-static data member initializers only available with -std=c++11 or -std=gnu++11"
 msgstr "扩展初始值设定列表只在 -std=c++0x 或 -std=gnu++0x 下可用"
 
 #: cp/error.c:3522
 #, fuzzy, gcc-internal-format
-#| msgid "extended initializer lists only available with -std=c++0x or -std=gnu++0x"
 msgid "user-defined literals only available with -std=c++11 or -std=gnu++11"
 msgstr "扩展初始值设定列表只在 -std=c++0x 或 -std=gnu++0x 下可用"
 
 #: cp/error.c:3527
 #, fuzzy, gcc-internal-format
-#| msgid "explicit conversion operators only available with -std=c++0x or -std=gnu++0x"
 msgid "delegating constructors only available with -std=c++11 or -std=gnu++11"
 msgstr "显式转换运算符只在 -std=c++0x 或 -std=gnu++0x 下可用"
 
@@ -35520,13 +34468,11 @@ msgstr "可变参数模板只在 -std=c++0x 或 -std=gnu++0x 下可用"
 
 #: cp/error.c:3537
 #, fuzzy, gcc-internal-format
-#| msgid "C++0x auto only available with -std=c++0x or -std=gnu++0x"
 msgid "c++11 attributes only available with -std=c++11 or -std=gnu++11"
 msgstr "C++0x auto 只在 -std=c++0x 或 -std=gnu++0x 下可用"
 
 #: cp/error.c:3542
 #, fuzzy, gcc-internal-format
-#| msgid "scoped enums only available with -std=c++0x or -std=gnu++0x"
 msgid "ref-qualifiers only available with -std=c++11 or -std=gnu++11"
 msgstr "带作用域的枚举只在 -std=c++0x 或 -std=gnu++0x 下可用"
 
@@ -35599,19 +34545,16 @@ msgstr "  在抛出的表达式中"
 
 #: cp/except.c:987
 #, fuzzy, gcc-internal-format
-#| msgid "cannot declare parameter %q+D to be of abstract type %qT"
 msgid "cannot declare catch parameter to be of rvalue reference type %qT"
 msgstr "不能将形参%q+D声明为具有抽象类型%qT"
 
 #: cp/except.c:994
 #, fuzzy, gcc-internal-format
-#| msgid "cannot create type information for type %qT because it involves types of variable size"
 msgid "cannot throw expression of type %qT because it involves types of variable size"
 msgstr "无法为类型%qT创建类型信息,因为它的大小是可变的"
 
 #: cp/except.c:997
 #, fuzzy, gcc-internal-format
-#| msgid "cannot create type information for type %qT because it involves types of variable size"
 msgid "cannot catch type %qT because it involves types of variable size"
 msgstr "无法为类型%qT创建类型信息,因为它的大小是可变的"
 
@@ -35726,7 +34669,6 @@ msgstr "(如果这不是您原来的想法,请确定此函数模板已经声
 
 #: cp/init.c:378
 #, fuzzy, gcc-internal-format
-#| msgid "invalid application of %qs to incomplete type %qT "
 msgid "value-initialization of incomplete type %qT"
 msgstr "%qs不能用于不完全的类型%qT"
 
@@ -35737,13 +34679,11 @@ msgstr "形参%qD包含了指向具有未知边界数组%qT的指针"
 
 #: cp/init.c:482
 #, fuzzy, gcc-internal-format
-#| msgid "value-initialization of reference"
 msgid "value-initialization of function type %qT"
 msgstr "引用被值所初始化"
 
 #: cp/init.c:488
 #, fuzzy, gcc-internal-format
-#| msgid "value-initialization of reference"
 msgid "value-initialization of reference type %qT"
 msgstr "引用被值所初始化"
 
@@ -35759,7 +34699,6 @@ msgstr "%qD应该在成员初始化列表中被初始化"
 
 #: cp/init.c:585
 #, fuzzy, gcc-internal-format
-#| msgid "%qD is used uninitialized in this function"
 msgid "%qD is initialized with itself"
 msgstr "此函数中的%qD在使用前未初始化"
 
@@ -35910,7 +34849,6 @@ msgstr "未初始化的引用成员%qD"
 
 #: cp/init.c:2147
 #, fuzzy, gcc-internal-format
-#| msgid "uninitialized reference member in %q#T"
 msgid "uninitialized reference member in base %q#T of %q#T"
 msgstr "%q#T中有未初始化的引用成员"
 
@@ -35936,25 +34874,21 @@ msgstr "%q#T中有未初始化的引用成员"
 
 #: cp/init.c:2317
 #, fuzzy, gcc-internal-format
-#| msgid "integer overflow in expression"
 msgid "integer overflow in array size"
 msgstr "整数溢出"
 
 #: cp/init.c:2327
 #, fuzzy, gcc-internal-format
-#| msgid "Variable '%s' at %L in this context must be constant"
 msgid "array size in operator new must be constant"
 msgstr "变量‘%s’在%L处上下文中必须是常量"
 
 #: cp/init.c:2341
 #, fuzzy, gcc-internal-format
-#| msgid "variably modified field at file scope"
 msgid "variably modified type not allowed in operator new"
 msgstr "文件域中的动态可变字段"
 
 #: cp/init.c:2355
 #, fuzzy, gcc-internal-format
-#| msgid "ISO C does not support saturating types"
 msgid "ISO C++ does not support variable-length array types"
 msgstr "ISO C 不支持饱和类型"
 
@@ -35970,7 +34904,6 @@ msgstr "%<new%>%q#T时常量未初始化"
 
 #: cp/init.c:2477
 #, fuzzy, gcc-internal-format
-#| msgid "not a valid Java .class file"
 msgid "%qT isn%'t a valid Java class type"
 msgstr "不是一个有效的 Java .class 文件。"
 
@@ -35996,7 +34929,6 @@ msgstr "对成员%qD的请求有歧义"
 
 #: cp/init.c:2775
 #, fuzzy, gcc-internal-format
-#| msgid "attributes after parenthesized initializer ignored"
 msgid "parenthesized initializer in array new"
 msgstr "括起的初始值设定后出现的属性被忽略"
 
@@ -36027,7 +34959,6 @@ msgstr "%qT中找不到%<class$%>"
 
 #: cp/init.c:3158
 #, fuzzy, gcc-internal-format
-#| msgid "possible problem detected in invocation of delete operator:"
 msgid "possible problem detected in invocation of delete [] operator:"
 msgstr "检测到调用 delete 运算符时可能出现的问题:"
 
@@ -36088,7 +35019,6 @@ msgstr ""
 
 #: cp/lambda.c:477
 #, fuzzy, gcc-internal-format
-#| msgid "compound literal has variable size"
 msgid "because the array element type %qT has variable size"
 msgstr "复合字面值有可变的大小"
 
@@ -36099,7 +35029,6 @@ msgstr "无法通过引用捕获%qE"
 
 #: cp/lambda.c:514
 #, fuzzy, gcc-internal-format
-#| msgid "already captured %<this%> in lambda expression"
 msgid "already captured %qD in lambda expression"
 msgstr "已经在 Lambda 表达式中捕获了%<this%>"
 
@@ -36170,7 +35099,6 @@ msgstr "修饰 typeof,请改用 decltype"
 
 #: cp/mangle.c:2116
 #, fuzzy, gcc-internal-format
-#| msgid "mangling unknown fixed point type"
 msgid "mangling __underlying_type"
 msgstr "修饰未知的定点类型"
 
@@ -36206,7 +35134,6 @@ msgstr "%qD修饰后的名字将在 GCC 的未来版本中有变化"
 
 #: cp/mangle.c:3500
 #, fuzzy, gcc-internal-format
-#| msgid "-fabi-version=4 (or =0) avoids this error with a change in vector mangling"
 msgid "-fabi-version=6 (or =0) avoids this error with a change in mangling"
 msgstr "-fabi-version=4 (or =0) 可以改变向量修饰来避免这个错误"
 
@@ -36237,13 +35164,11 @@ msgstr "未初始化的成员%qD具有%<const%>类型%qT"
 
 #: cp/method.c:1010
 #, fuzzy, gcc-internal-format
-#| msgid "a destructor cannot be %<constexpr%>"
 msgid "defaulted constructor calls non-constexpr %q+D"
 msgstr "析构函数不能是%<constexpr%>"
 
 #: cp/method.c:1071
 #, fuzzy, gcc-internal-format
-#| msgid "uninitialized const %qD is invalid in C++"
 msgid "initializer for %q+#D is invalid"
 msgstr "未初始化的常量%qD在C++中是无效的"
 
@@ -36264,7 +35189,6 @@ msgstr ""
 
 #: cp/method.c:1128
 #, fuzzy, gcc-internal-format
-#| msgid "non-static data member %qD has Java class type"
 msgid "copying non-static data member %q#D of rvalue reference type"
 msgstr "非静态数据成员%qD具有 Java 类类型"
 
@@ -36315,7 +35239,6 @@ msgstr "不匹配%qD预期的签名"
 
 #: cp/method.c:1814
 #, fuzzy, gcc-internal-format
-#| msgid "function %q+D defaulted on its first declaration must not have an exception-specification"
 msgid "function %q+D defaulted on its redeclaration with an exception-specification that differs from the implicit declaration %q#D"
 msgstr "首次声明时被默认化的函数%q+D不可以指定异常"
 
@@ -36326,7 +35249,6 @@ msgstr ""
 
 #: cp/method.c:1860
 #, fuzzy, gcc-internal-format
-#| msgid "%qD cannot be defaulted"
 msgid "a template cannot be defaulted"
 msgstr "%qD不能被默认化"
 
@@ -36347,13 +35269,11 @@ msgstr "由于隐式的虚析构函数,类%qT的 vtable 布局可能与 ABI 
 
 #: cp/name-lookup.c:567
 #, fuzzy, gcc-internal-format
-#| msgid "%q#D conflicts with previous using declaration %q#D"
 msgid "%q#D conflicts with a previous declaration"
 msgstr "%q#D与先前的 using 声明%q#D冲突"
 
 #: cp/name-lookup.c:569
 #, fuzzy, gcc-internal-format
-#| msgid "previous declaration %q+D"
 msgid "previous declaration %q+#D"
 msgstr "先前的声明%q+D"
 
@@ -36420,7 +35340,6 @@ msgstr "%q#D的声明隐藏了一个形参"
 
 #: cp/name-lookup.c:1189
 #, fuzzy, gcc-internal-format
-#| msgid "declaration of %q+D shadows a parameter"
 msgid "declaration of %qD shadows a lambda capture"
 msgstr "%q+D的声明隐藏了一个形参"
 
@@ -36629,7 +35548,6 @@ msgstr "%qD做了多次复本"
 
 #: cp/parser.c:792
 #, fuzzy, gcc-internal-format
-#| msgid "identifier %qE will become a keyword in C++0x"
 msgid "identifier %qE is a keyword in C++11"
 msgstr "标志符%qE将会成为 C++0x 的一个关键字"
 
@@ -36730,7 +35648,6 @@ msgstr "%qT不是一个模板"
 
 #: cp/parser.c:2719
 #, fuzzy, gcc-internal-format
-#| msgid "%qE is not a template"
 msgid "%qE is not a class template"
 msgstr "%qE不是一个模板"
 
@@ -36811,7 +35728,6 @@ msgstr "%qD不能出现在常量表达式中"
 
 #: cp/parser.c:2809
 #, fuzzy, gcc-internal-format
-#| msgid "a function call cannot appear in a constant-expression"
 msgid "a transaction expression cannot appear in a constant-expression"
 msgstr "函数调用不能出现在常量表达式中"
 
@@ -36844,7 +35760,6 @@ msgstr "%qE不是一个类型名"
 
 #: cp/parser.c:2903
 #, fuzzy, gcc-internal-format
-#| msgid "C++0x %<constexpr%> only available with -std=c++0x or -std=gnu++0x"
 msgid "C++11 %<constexpr%> only available with -std=c++11 or -std=gnu++11"
 msgstr "C++0x %<constexpr%>只在 -std=c++0x 或 -std=gnu++0x 下可用"
 
@@ -36855,7 +35770,6 @@ msgstr "(也许您本意是想用%<typename %T::%E%>)"
 
 #: cp/parser.c:2948
 #, fuzzy, gcc-internal-format
-#| msgid "%qE in namespace %qE does not name a type"
 msgid "%qE in namespace %qE does not name a template type"
 msgstr "%qE不是命名空间%qE中的一个类型名"
 
@@ -36882,13 +35796,11 @@ msgstr "%<%T::%E%>之前需要%<typename%>,因为%qT是一个有依赖的作
 
 #: cp/parser.c:2974
 #, fuzzy, gcc-internal-format
-#| msgid "%qE in class %qT does not name a type"
 msgid "%qE in %q#T does not name a template type"
 msgstr "%qE不是类%qT中的一个类型名"
 
 #: cp/parser.c:2978
 #, fuzzy, gcc-internal-format
-#| msgid "%qE in class %qT does not name a type"
 msgid "%qE in %q#T does not name a type"
 msgstr "%qE不是类%qT中的一个类型名"
 
@@ -36914,25 +35826,21 @@ msgstr ""
 
 #: cp/parser.c:3867
 #, fuzzy, gcc-internal-format
-#| msgid "floating constant exceeds range of %qT"
 msgid "integer literal exceeds range of %qT type"
 msgstr "浮点常量超出%qT的范围"
 
 #: cp/parser.c:3873
 #, fuzzy, gcc-internal-format
-#| msgid "floating constant exceeds range of %qT"
 msgid "floating literal exceeds range of %qT type"
 msgstr "浮点常量超出%qT的范围"
 
 #: cp/parser.c:3877
 #, fuzzy, gcc-internal-format
-#| msgid "floating constant truncated to zero"
 msgid "floating literal truncated to zero"
 msgstr "浮点常量向零截断"
 
 #: cp/parser.c:3920
 #, fuzzy, gcc-internal-format
-#| msgid "unable to find a register to spill in class %qs"
 msgid "unable to find numeric literal operator %qD"
 msgstr "在类%qs中找不到可溢出的寄存器"
 
@@ -36943,7 +35851,6 @@ msgstr ""
 
 #: cp/parser.c:3969
 #, fuzzy, gcc-internal-format
-#| msgid "unable to find a register to spill in class %qs"
 msgid "unable to find string literal operator %qD"
 msgstr "在类%qs中找不到可溢出的寄存器"
 
@@ -37004,7 +35911,6 @@ msgstr "%<~%>前的作用域%qT不是一个类名"
 
 #: cp/parser.c:4935 cp/parser.c:6785
 #, fuzzy, gcc-internal-format
-#| msgid "C++0x auto only available with -std=c++0x or -std=gnu++0x"
 msgid "%<~auto%> only available with -std=c++1y or -std=gnu++1y"
 msgstr "C++0x auto 只在 -std=c++0x 或 -std=gnu++0x 下可用"
 
@@ -37035,7 +35941,6 @@ msgstr "嵌套名指定中使用了不完全的类型%qT"
 
 #: cp/parser.c:5276
 #, fuzzy, gcc-internal-format
-#| msgid "%qT resolves to %qT, which is not an enumeration type"
 msgid "decltype evaluates to %qT, which is not a class or enumeration type"
 msgstr "%qT被解析到非枚举类型%qT"
 
@@ -37076,7 +35981,6 @@ msgstr ""
 
 #: cp/parser.c:6368
 #, fuzzy, gcc-internal-format
-#| msgid "-client_name not allowed with -dynamiclib"
 msgid "braced list index is not allowed with array notation"
 msgstr "-client_name 不能和 -dynamiclib 一起使用"
 
@@ -37092,7 +35996,6 @@ msgstr "错误地使用了%qD"
 
 #: cp/parser.c:6558
 #, fuzzy, gcc-internal-format
-#| msgid "%<%D::%D%> is not a member of %qT"
 msgid "%<%D::%D%> is not a class member"
 msgstr "%<%D::%D%>不是%qT的成员"
 
@@ -37113,7 +36016,6 @@ msgstr "类型不能定义在%<decltype%>中"
 
 #: cp/parser.c:7262
 #, fuzzy, gcc-internal-format
-#| msgid "types may not be defined in a new-type-id"
 msgid "types may not be defined in a new-expression"
 msgstr "类型不能定义在 new-type-id 中"
 
@@ -37144,7 +36046,6 @@ msgstr "使用旧式的类型转换"
 
 #: cp/parser.c:7891
 #, fuzzy, gcc-internal-format
-#| msgid "%<>>%> operator will be treated as two right angle brackets in C++0x"
 msgid "%<>>%> operator is treated as two right angle brackets in C++11"
 msgstr "%<>>%>运算符在 C++0x 中将被认为是两个右尖括号"
 
@@ -37175,7 +36076,6 @@ msgstr ""
 
 #: cp/parser.c:8901
 #, fuzzy, gcc-internal-format
-#| msgid "lambda expressions only available with -std=c++0x or -std=gnu++0x"
 msgid "lambda capture initializers only available with -std=c++1y or -std=gnu++1y"
 msgstr "Lambda 表达式只在 -std=c++0x 或 -std=gnu++0x 下可用"
 
@@ -37186,13 +36086,11 @@ msgstr ""
 
 #: cp/parser.c:8931
 #, fuzzy, gcc-internal-format
-#| msgid "increment of read-only variable %qD"
 msgid "capture of non-variable %qD "
 msgstr "令只读变量%qD自增"
 
 #: cp/parser.c:8933 cp/parser.c:8942 cp/semantics.c:3237
 #, fuzzy, gcc-internal-format
-#| msgid "%q+D declared here"
 msgid "%q+#D declared here"
 msgstr "%q+D已在此声明过"
 
@@ -37213,7 +36111,6 @@ msgstr ""
 
 #: cp/parser.c:9027
 #, fuzzy, gcc-internal-format
-#| msgid "variadic templates only available with -std=c++0x or -std=gnu++0x"
 msgid "lambda templates are only available with -std=c++1y or -std=gnu++1y"
 msgstr "可变参数模板只在 -std=c++0x 或 -std=gnu++0x 下可用"
 
@@ -37224,7 +36121,6 @@ msgstr "为 lambda 形参指定了默认参数"
 
 #: cp/parser.c:9485
 #, fuzzy, gcc-internal-format
-#| msgid "attributes after parenthesized initializer ignored"
 msgid "attributes at the beginning of statement are ignored"
 msgstr "括起的初始值设定后出现的属性被忽略"
 
@@ -37250,7 +36146,6 @@ msgstr "%<%T::%D%>命名了一个构造函数而非类型"
 
 #: cp/parser.c:9692
 #, fuzzy, gcc-internal-format
-#| msgid "%qD is not a constexpr function"
 msgid "compound-statement in constexpr function"
 msgstr "%qD不是一个广义常函数"
 
@@ -37266,7 +36161,6 @@ msgstr "类型不能定义在条件表达式中"
 
 #: cp/parser.c:10305
 #, fuzzy, gcc-internal-format
-#| msgid "expression statement has incomplete type"
 msgid "range-based %<for%> expression of type %qT has incomplete type"
 msgstr "表达式语句类型不完全"
 
@@ -37292,13 +36186,11 @@ msgstr "需要循环语句"
 
 #: cp/parser.c:10568
 #, fuzzy, gcc-internal-format
-#| msgid "range-based-for loops are not allowed in C++98 mode"
 msgid "range-based %<for%> loops are not allowed in C++98 mode"
 msgstr "C++98 模式下不允许使用基于范围的 for 循环"
 
 #: cp/parser.c:10642
 #, fuzzy, gcc-internal-format
-#| msgid "break statement used with OpenMP for loop"
 msgid "break statement used with Cilk Plus for loop"
 msgstr "OpenMP for 循环中使用了 break 语句"
 
@@ -37337,7 +36229,6 @@ msgstr "%<friend%>用在类外"
 #. we're complaining about C++0x compatibility.
 #: cp/parser.c:11485
 #, fuzzy, gcc-internal-format
-#| msgid "%<auto%> will change meaning in C++0x; please remove it"
 msgid "%<auto%> changes meaning in C++11; please remove it"
 msgstr "%<auto%>的语义在 C++0x 中将被改变;请考虑删除它"
 
@@ -37368,7 +36259,6 @@ msgstr "类型不能定义在%<decltype%>中"
 
 #: cp/parser.c:12122
 #, fuzzy, gcc-internal-format
-#| msgid "types may not be defined in a new-type-id"
 msgid "types may not be defined in a conversion-type-id"
 msgstr "类型不能定义在 new-type-id 中"
 
@@ -37379,7 +36269,6 @@ msgstr "在转换运算符中使用%<auto%>无效"
 
 #: cp/parser.c:12153
 #, fuzzy, gcc-internal-format
-#| msgid "invalid use of %<auto%> in conversion operator"
 msgid "use of %<auto%> in member template conversion operator can never be deduced"
 msgstr "在转换运算符中使用%<auto%>无效"
 
@@ -37395,7 +36284,6 @@ msgstr "无法从成员%<%D%>中扩展初始值"
 
 #: cp/parser.c:12276
 #, fuzzy, gcc-internal-format
-#| msgid "static declaration of %q+D follows non-static declaration"
 msgid "mem-initializer for %qD follows constructor delegation"
 msgstr "对%qD的静态声明出现在非静态声明之后"
 
@@ -37421,7 +36309,6 @@ msgstr "二元操作中中操作数无效"
 
 #: cp/parser.c:12737 cp/parser.c:12784
 #, fuzzy, gcc-internal-format
-#| msgid "expected a string after %<#pragma message%>"
 msgid "expected empty string after %<operator%> keyword"
 msgstr "%<#pragma message%>后需要一个字符串"
 
@@ -37432,7 +36319,6 @@ msgstr ""
 
 #: cp/parser.c:12761
 #, fuzzy, gcc-internal-format
-#| msgid "expected identifier"
 msgid "expected suffix identifier"
 msgstr "需要标识符"
 
@@ -37484,7 +36370,6 @@ msgstr "%<<:%>是%<[%>的另一种拼法。请在%<<%>和%<::%>间加上空格"
 
 #: cp/parser.c:13403
 #, fuzzy, gcc-internal-format
-#| msgid "(if you use %<-fpermissive%> G++ will accept your code)"
 msgid "(if you use %<-fpermissive%> or %<-std=c++11%>, or %<-std=gnu++11%> G++ will accept your code)"
 msgstr "(如果您使用%<-fpermissive%>G++ 会接受您的代码)"
 
@@ -37547,19 +36432,16 @@ msgstr "需要类型限定"
 
 #: cp/parser.c:14510
 #, fuzzy, gcc-internal-format
-#| msgid "defaulted and deleted functions only available with -std=c++0x or -std=gnu++0x"
 msgid "use of %<auto%> in lambda parameter declaration only available with -std=c++1y or -std=gnu++1y"
 msgstr "默认化和被删除的函数只在 -std=c++0x 或 -std=gnu++0x 下可用"
 
 #: cp/parser.c:14516
 #, fuzzy, gcc-internal-format
-#| msgid "defaulted and deleted functions only available with -std=c++0x or -std=gnu++0x"
 msgid "use of %<auto%> in parameter declaration only available with -std=c++1y or -std=gnu++1y"
 msgstr "默认化和被删除的函数只在 -std=c++0x 或 -std=gnu++0x 下可用"
 
 #: cp/parser.c:14521
 #, fuzzy, gcc-internal-format
-#| msgid "ISO C forbids forward parameter declarations"
 msgid "ISO C++ forbids use of %<auto%> in parameter declaration"
 msgstr "ISO C 不允许前向参数声明"
 
@@ -37640,7 +36522,6 @@ msgstr "%q#T多次定义"
 
 #: cp/parser.c:15524
 #, fuzzy, gcc-internal-format
-#| msgid "ISO C++ forbids incrementing an enum"
 msgid "ISO C++ forbids empty anonymous enum"
 msgstr "ISO C++ 不允许枚举自增"
 
@@ -37681,7 +36562,6 @@ msgstr ""
 
 #: cp/parser.c:16101
 #, fuzzy, gcc-internal-format
-#| msgid "types may not be defined in exception-declarations"
 msgid "types may not be defined in alias template declarations"
 msgstr "类型不能定义在异常声明中"
 
@@ -37764,7 +36644,6 @@ msgstr "无效的声明"
 #. function.
 #: cp/parser.c:17476
 #, fuzzy, gcc-internal-format
-#| msgid "invalid type in declaration"
 msgid "qualified-id in declaration"
 msgstr "声明中有无效类型"
 
@@ -37780,7 +36659,6 @@ msgstr "%qD是一个命名空间"
 
 #: cp/parser.c:17605
 #, fuzzy, gcc-internal-format
-#| msgid "creating pointer to member of non-class type %qT"
 msgid "cannot form pointer to member of non-class %q#T"
 msgstr "生成非类类型%qT的成员指针"
 
@@ -37796,13 +36674,11 @@ msgstr "重复的 cv 限定"
 
 #: cp/parser.c:17739
 #, fuzzy, gcc-internal-format
-#| msgid "duplicate cv-qualifier"
 msgid "multiple ref-qualifiers"
 msgstr "重复的 cv 限定"
 
 #: cp/parser.c:17797
 #, fuzzy, gcc-internal-format
-#| msgid "duplicate cv-qualifier"
 msgid "duplicate virt-specifier"
 msgstr "重复的 cv 限定"
 
@@ -37843,13 +36719,11 @@ msgstr "默认参数只允许出现在函数参数中"
 
 #: cp/parser.c:18594
 #, fuzzy, gcc-internal-format
-#| msgid "%H%sparameter pack %qD cannot have a default argument"
 msgid "parameter pack %qD cannot have a default argument"
 msgstr "%H%s模板参数包%qD不能有默认参数"
 
 #: cp/parser.c:18602
 #, fuzzy, gcc-internal-format
-#| msgid "%H%sparameter pack cannot have a default argument"
 msgid "parameter pack cannot have a default argument"
 msgstr "%H%s模板参数包不能有默认参数"
 
@@ -37860,7 +36734,6 @@ msgstr "ISO C++ 不允许指定元素初始值设定"
 
 #: cp/parser.c:18907
 #, fuzzy, gcc-internal-format
-#| msgid "ISO C++ does not allow designated initializers"
 msgid "ISO C++ does not allow C99 designated initializers"
 msgstr "ISO C++ 不允许指定元素初始值设定"
 
@@ -37891,7 +36764,6 @@ msgstr "需要%<{%>或%<:%>"
 
 #: cp/parser.c:19667
 #, fuzzy, gcc-internal-format
-#| msgid "cannot find file for class %s"
 msgid "cannot specify %<override%> for a class"
 msgstr "无法为类 %s 找到文件"
 
@@ -37942,7 +36814,6 @@ msgstr "需要类名"
 
 #: cp/parser.c:20181
 #, fuzzy, gcc-internal-format
-#| msgid "a class-key must be used when declaring a friend"
 msgid "in C++03 a class-key must be used when declaring a friend"
 msgstr "声明友元时必须使用 class 关键字"
 
@@ -38018,7 +36889,6 @@ msgstr "类型不能定义在异常声明中"
 
 #: cp/parser.c:21749
 #, fuzzy, gcc-internal-format
-#| msgid "expected identifier or %<(%>"
 msgid "expected an identifier for the attribute name"
 msgstr "需要标识符或%<(%>"
 
@@ -38113,13 +36983,11 @@ msgstr "ISO C++ 1998 不支持%<long long%>"
 
 #: cp/parser.c:24031
 #, fuzzy, gcc-internal-format
-#| msgid "both %<_Sat%> and %<char%> in declaration specifiers"
 msgid "both %<__thread%> and %<thread_local%> specified"
 msgstr "声明中同时使用了%<_Sat%>和%<char%>"
 
 #: cp/parser.c:24033
 #, fuzzy, gcc-internal-format
-#| msgid "duplicate %qE"
 msgid "duplicate %qD"
 msgstr "重复的%qE"
 
@@ -38225,13 +37093,11 @@ msgstr "需要%<@throw%>"
 
 #: cp/parser.c:24157
 #, fuzzy, gcc-internal-format
-#| msgid "expected %<static_assert%>"
 msgid "expected %<__transaction_atomic%>"
 msgstr "需要%<static_assert%>"
 
 #: cp/parser.c:24160
 #, fuzzy, gcc-internal-format
-#| msgid "expected %<static_assert%>"
 msgid "expected %<__transaction_relaxed%>"
 msgstr "需要%<static_assert%>"
 
@@ -38272,7 +37138,6 @@ msgstr "使用了%qs标记,在命名%q#T时"
 
 #: cp/parser.c:24488
 #, fuzzy, gcc-internal-format
-#| msgid "previously declared here"
 msgid "%q#T was previously declared here"
 msgstr "以前在此声明过"
 
@@ -38283,7 +37148,6 @@ msgstr "%qD重声明时有不同的可访问性"
 
 #: cp/parser.c:24528
 #, fuzzy, gcc-internal-format
-#| msgid "%<template%> (as a disambiguator) is only allowed within templates"
 msgid "in C++98 %<template%> (as a disambiguator) is only allowed within templates"
 msgstr "用作消歧义的%<template%>只能用于模板内"
 
@@ -38354,7 +37218,6 @@ msgstr "%q+D的抽象类型无效"
 
 #: cp/parser.c:27475
 #, fuzzy, gcc-internal-format
-#| msgid "invalid initializer"
 msgid "invalid reduction-identifier"
 msgstr "无效的初始值设定"
 
@@ -38365,7 +37228,6 @@ msgstr "括起的初始化不允许使用在 OpenMP %<for%>循环中"
 
 #: cp/parser.c:29045
 #, fuzzy, gcc-internal-format
-#| msgid "parenthesized initialization is not allowed in OpenMP %<for%> loop"
 msgid "parenthesized initialization is not allowed in for-loop"
 msgstr "括起的初始化不允许使用在 OpenMP %<for%>循环中"
 
@@ -38381,13 +37243,11 @@ msgstr "循环折叠得不够"
 
 #: cp/parser.c:30334
 #, fuzzy, gcc-internal-format
-#| msgid "attributes are not allowed on a function-definition"
 msgid "vector attribute not immediately followed by a single function declaration or definition"
 msgstr "函数定义中不允许有属性"
 
 #: cp/parser.c:30561
 #, fuzzy, gcc-internal-format
-#| msgid "invalid initializer"
 msgid "invalid initializer clause"
 msgstr "无效的初始值设定"
 
@@ -38403,13 +37263,11 @@ msgstr ""
 
 #: cp/parser.c:30678
 #, fuzzy, gcc-internal-format
-#| msgid "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, or %<||%>"
 msgid "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%> or identifier"
 msgstr "需要%<+%>、%<*%>、%<-%>、%<&%>、%<^%>、%<|%>、%<&&%>或%<||%>"
 
 #: cp/parser.c:30697
 #, fuzzy, gcc-internal-format
-#| msgid "new types may not be defined in a return type"
 msgid "types may not be defined in declare reduction type list"
 msgstr "不能在返回类型中定义新类型"
 
@@ -38450,7 +37308,6 @@ msgstr "%<#pragma GCC pch_preprocess%>末尾有垃圾字符"
 
 #: cp/parser.c:31479
 #, fuzzy, gcc-internal-format
-#| msgid "#pragma GCC optimize is not allowed inside functions"
 msgid "%<#pragma simd%> must be inside a function"
 msgstr "#pragma GCC optimize 不允许用在函数中"
 
@@ -38461,19 +37318,16 @@ msgstr "模块间优化未为 C++ 实现"
 
 #: cp/parser.c:31650
 #, fuzzy, gcc-internal-format
-#| msgid "Expected variable name at %C"
 msgid "expected variable-name"
 msgstr "在%C处需要变量名"
 
 #: cp/parser.c:31714
 #, fuzzy, gcc-internal-format
-#| msgid "expected %<,%> or %<)%>"
 msgid "expected %<,%> or %<)%> after %qE"
 msgstr "需要 %<,%> 或 %<)%>"
 
 #: cp/parser.c:31996
 #, fuzzy, gcc-internal-format
-#| msgid "templates may not be %<virtual%>"
 msgid "implicit templates may not be %<virtual%>"
 msgstr "模板不能是%<virtual%>的"
 
@@ -38524,7 +37378,6 @@ msgstr "类名隐藏了模板的模板形参%qD"
 
 #: cp/pt.c:831
 #, fuzzy, gcc-internal-format
-#| msgid "declaration of template %q#D"
 msgid "specialization of alias template %qD"
 msgstr "模板声明%q#D"
 
@@ -38562,13 +37415,11 @@ msgstr "%qD的特例化在实例化之后"
 
 #: cp/pt.c:1769
 #, fuzzy, gcc-internal-format
-#| msgid "candidate is: %+#D"
 msgid "candidate is: %#D"
 msgstr "备选为:%+#D"
 
 #: cp/pt.c:1776 cp/semantics.c:4775
 #, fuzzy, gcc-internal-format
-#| msgid "%s %+#D"
 msgid "%s %#D"
 msgstr "%s %+#D"
 
@@ -38599,7 +37450,6 @@ msgstr "%qD不是类模板的非静态数据成员"
 
 #: cp/pt.c:2299
 #, fuzzy, gcc-internal-format
-#| msgid "wrong number of template arguments (%d, should be %d)"
 msgid "too many template headers for %D (should be %d)"
 msgstr "模板参数数目不对(不应是 %d 个而应是 %d 个)"
 
@@ -38735,7 +37585,6 @@ msgstr ""
 
 #: cp/pt.c:4159
 #, fuzzy, gcc-internal-format
-#| msgid "previously declared here"
 msgid "primary template here"
 msgstr "以前在此声明过"
 
@@ -38792,7 +37641,6 @@ msgstr "默认参数不能用在函数模板友元重声明中"
 
 #: cp/pt.c:4478
 #, fuzzy, gcc-internal-format
-#| msgid "default template arguments may not be used in function templates without -std=c++0x or -std=gnu++0x"
 msgid "default template arguments may not be used in function templates without -std=c++11 or -std=gnu++11"
 msgstr "只有指定了 -std=c++0x 或 -std=gnu++0x 时才能在函数模板中使用默认参数"
 
@@ -38914,19 +37762,16 @@ msgstr "它必须是一个具有外部链接函数的地址"
 
 #: cp/pt.c:5229
 #, fuzzy, gcc-internal-format
-#| msgid "it must be the address of a function with external linkage"
 msgid "it must be the name of a function with external linkage"
 msgstr "它必须是一个具有外部链接函数的地址"
 
 #: cp/pt.c:5237
 #, fuzzy, gcc-internal-format
-#| msgid "%qE is not a valid template argument for type %qT because object %qD has not external linkage"
 msgid "%qE is not a valid template argument for type %qT because %qD has no linkage"
 msgstr "%qE不是类型%qT的有效模板实参,因为对象%qD没有外部链接"
 
 #: cp/pt.c:5241
 #, fuzzy, gcc-internal-format
-#| msgid "%qE is not a valid template argument of type %qT because %qD does not have external linkage"
 msgid "%qE is not a valid template argument for type %qT because %qD does not have external linkage"
 msgstr "%qE不是类型%qT的有效模板实参,因为函数%qD没有外部链接"
 
@@ -38937,7 +37782,6 @@ msgstr "它必须是格式为‘&X::Y’的成员指针"
 
 #: cp/pt.c:5318
 #, fuzzy, gcc-internal-format
-#| msgid "got %d template parameters for %q#D"
 msgid "  couldn't deduce template parameter %qD"
 msgstr "得到 %d 个模板参数,为%q#D"
 
@@ -38948,31 +37792,26 @@ msgstr ""
 
 #: cp/pt.c:5342
 #, fuzzy, gcc-internal-format
-#| msgid "comparison between types %qT and %qT"
 msgid "  mismatched types %qT and %qT"
 msgstr "在类型%qT和%qT间比较"
 
 #: cp/pt.c:5351
 #, fuzzy, gcc-internal-format
-#| msgid "template parameter pack %qD cannot have a default argument"
 msgid "  template parameter %qD is not a parameter pack, but argument %qD is"
 msgstr "模板参数包%qD不能有默认参数"
 
 #: cp/pt.c:5362
 #, fuzzy, gcc-internal-format
-#| msgid "template arguments to %qD do not match original template %qD"
 msgid "  template argument %qE does not match pointer-to-member constant %qE"
 msgstr "给%qD的模板实参不匹配原先的模板%qD"
 
 #: cp/pt.c:5372
 #, fuzzy, gcc-internal-format
-#| msgid "%qs is not valid for %qs"
 msgid "  %qE is not equivalent to %qE"
 msgstr "%qs对%qs而言无效"
 
 #: cp/pt.c:5381
 #, fuzzy, gcc-internal-format
-#| msgid "inconsistent deduction for %qT: %qT and then %qT"
 msgid "  inconsistent parameter pack deduction with %qT and %qT"
 msgstr "对%qT不一致的演绎:先是%qT然后是%qT"
 
@@ -38988,31 +37827,26 @@ msgstr ""
 
 #: cp/pt.c:5408
 #, fuzzy, gcc-internal-format
-#| msgid "partial specialization %qT does not specialize any template arguments"
 msgid "  variable-sized array type %qT is not a valid template argument"
 msgstr "部分特例化%qT并未特例化任何模板参数"
 
 #: cp/pt.c:5419
 #, fuzzy, gcc-internal-format
-#| msgid "%qE is not a valid template argument for type %qT"
 msgid "  member function type %qT is not a valid template argument"
 msgstr "%qE不是类型%qT的有效模板参数"
 
 #: cp/pt.c:5453
 #, fuzzy, gcc-internal-format
-#| msgid "cannot convert type %qT to type %qT"
 msgid "  cannot convert %qE (type %qT) to type %qT"
 msgstr "不能将类型%qT转换为类型%qT"
 
 #: cp/pt.c:5466
 #, fuzzy, gcc-internal-format
-#| msgid "%qT is an ambiguous base of %qT"
 msgid "  %qT is an ambiguous base class of %qT"
 msgstr "%qT是%qT的有歧义的基类"
 
 #: cp/pt.c:5470
 #, fuzzy, gcc-internal-format
-#| msgid "type %qT is not derived from type %qT"
 msgid "  %qT is not derived from %qT"
 msgstr "类型%qT不是由类型%qT派生的"
 
@@ -39023,13 +37857,11 @@ msgstr ""
 
 #: cp/pt.c:5491
 #, fuzzy, gcc-internal-format
-#| msgid "cannot decrement a pointer to incomplete type %qT"
 msgid "  can't deduce a template for %qT from non-template type %qT"
 msgstr "指向不完全类型%qT的指针不能自减"
 
 #: cp/pt.c:5501
 #, fuzzy, gcc-internal-format
-#| msgid "template arguments to %qD do not match original template %qD"
 msgid "  template argument %qE does not match %qD"
 msgstr "给%qD的模板实参不匹配原先的模板%qD"
 
@@ -39055,7 +37887,6 @@ msgstr "%qD不是一个有效模板实参,因为%qD是一个变量,而非变
 
 #: cp/pt.c:5747
 #, fuzzy, gcc-internal-format
-#| msgid "%qD is not a valid template argument because %qD is a variable, not the address of a variable"
 msgid "%qE is not a valid template argument for %qT because it is not the address of a variable"
 msgstr "%qD不是一个有效模板实参,因为%qD是一个变量,而非变量的地址"
 
@@ -39071,7 +37902,6 @@ msgstr "%qE不是类型%qT的有效模板实参,因为函数%qD没有外部链
 
 #: cp/pt.c:5778
 #, fuzzy, gcc-internal-format
-#| msgid "%qE is not a valid template argument of type %qT because %qE is not a variable"
 msgid "%qE is not a valid template argument of type %qT because %qD has no linkage"
 msgstr "%qE不是类型%qT的有效模板实参,因为%qE不是一个变量"
 
@@ -39132,7 +37962,6 @@ msgstr "注入的类名%qD被用作模板的模板参数"
 
 #: cp/pt.c:6336
 #, fuzzy, gcc-internal-format
-#| msgid "invalid use of destructor %qD as a type"
 msgid "invalid use of destructor %qE as a type"
 msgstr "将析构函数%qD用作类型无效"
 
@@ -39210,13 +38039,11 @@ msgstr "提供给%q+D"
 
 #: cp/pt.c:6754
 #, fuzzy, gcc-internal-format
-#| msgid "default argument for template parameter for class enclosing %qD"
 msgid "pack expansion argument for non-pack parameter %qD of alias template %qD"
 msgstr "包含%qD的类的模板参数有默认参数"
 
 #: cp/pt.c:7085
 #, fuzzy, gcc-internal-format
-#| msgid "%qD is not a function template"
 msgid "%q#D is not a function template"
 msgstr "%qD不是一个函数模板"
 
@@ -39232,7 +38059,6 @@ msgstr "对于模板声明%q+D"
 
 #: cp/pt.c:8088
 #, fuzzy
-#| msgid "template instantiation depth exceeds maximum of %d (use -ftemplate-depth= to increase the maximum) instantiating %qD"
 msgid "template instantiation depth exceeds maximum of %d (use -ftemplate-depth= to increase the maximum) substituting %qS"
 msgstr "在实例化%2$qD时模板实例化深度超过最大值 %1$d(使用 use -ftemplate-depth= 来增大最大值)"
 
@@ -39253,7 +38079,6 @@ msgstr "展开%<%E%>时参数包长度不匹配"
 
 #: cp/pt.c:10108
 #, fuzzy, gcc-internal-format
-#| msgid "redefinition of default argument for %q#D"
 msgid "  when instantiating default argument for call to %D"
 msgstr "重定义%q#D的默认参数"
 
@@ -39317,25 +38142,21 @@ msgstr "生成指向引用类型%qT的引用"
 
 #: cp/pt.c:11791
 #, fuzzy, gcc-internal-format
-#| msgid "cannot declare pointer to qualified function type %qT"
 msgid "forming pointer to qualified function type %qT"
 msgstr "不能声明指向限定函数类型%qT的指针"
 
 #: cp/pt.c:11794
 #, fuzzy, gcc-internal-format
-#| msgid "cannot declare reference to qualified function type %qT"
 msgid "forming reference to qualified function type %qT"
 msgstr "不能声明指向限定函数类型%qT的引用"
 
 #: cp/pt.c:11831
 #, fuzzy, gcc-internal-format
-#| msgid "cannot declare reference to qualified function type %qT"
 msgid "cannot declare reference to array of runtime bound"
 msgstr "不能声明指向限定函数类型%qT的引用"
 
 #: cp/pt.c:11832
 #, fuzzy, gcc-internal-format
-#| msgid "cannot declare pointer to %q#T member"
 msgid "cannot declare pointer to array of runtime bound"
 msgstr "无法声明指向%q#T成员的指针"
 
@@ -39426,13 +38247,11 @@ msgstr ""
 
 #: cp/pt.c:14567
 #, fuzzy, gcc-internal-format
-#| msgid "%<%T::%E%> is not a type"
 msgid "use %<%T::%D%> instead"
 msgstr "%<%T::%E%>不是一个类型"
 
 #: cp/pt.c:14571
 #, fuzzy, gcc-internal-format
-#| msgid "%qE undeclared here (not in a function)"
 msgid "%q+D declared here, later in the translation unit"
 msgstr "%qE未声明(不在函数内)"
 
@@ -39518,7 +38337,6 @@ msgstr "为模板实例化化应用了存储类型%qD"
 
 #: cp/pt.c:18935
 #, fuzzy, gcc-internal-format
-#| msgid "explicit instantiation of non-template %q#D"
 msgid "explicit instantiation of non-class template %qD"
 msgstr "对非模板%q#D的显式实例化"
 
@@ -39561,13 +38379,11 @@ msgstr "在实例化%2$q+D时模板实例化深度超过了最大值 %1$d,可
 
 #: cp/pt.c:20137
 #, fuzzy, gcc-internal-format
-#| msgid "invalid use of template type parameter %qT"
 msgid "invalid template non-type parameter"
 msgstr "对模板类型参数%qT的使用无效"
 
 #: cp/pt.c:20139
 #, fuzzy, gcc-internal-format
-#| msgid "%q#T is not a valid type for a template constant parameter"
 msgid "%q#T is not a valid type for a template non-type parameter"
 msgstr "%q#T不是一个有效的模板常量参数类型"
 
@@ -39583,7 +38399,6 @@ msgstr ""
 
 #: cp/pt.c:21484
 #, fuzzy, gcc-internal-format
-#| msgid "unable to deduce %qT from %qE"
 msgid "unable to deduce lambda return type from %qE"
 msgstr "无法从%2$qE推导出%1$qT"
 
@@ -39629,7 +38444,6 @@ msgstr "在使用 typeid 之前必须先 #include <typeinfo>"
 
 #: cp/rtti.c:399
 #, fuzzy, gcc-internal-format
-#| msgid "creating array of functions"
 msgid "typeid of array of runtime bound"
 msgstr "创建函数的数组"
 
@@ -39640,7 +38454,6 @@ msgstr "无法为类型%qT创建类型信息,因为它的大小是可变的"
 
 #: cp/rtti.c:491
 #, fuzzy, gcc-internal-format
-#| msgid "cannot declare pointer to qualified function type %qT"
 msgid "typeid of qualified function type %qT"
 msgstr "不能声明指向限定函数类型%qT的指针"
 
@@ -39671,7 +38484,6 @@ msgstr "%qT是%qT不可访问的基类"
 
 #: cp/search.c:1899
 #, fuzzy, gcc-internal-format
-#| msgid "invalid covariant return type for %q+#D"
 msgid "invalid covariant return type for %q#D"
 msgstr "%q+#D的协变返回类型无效"
 
@@ -39727,13 +38539,11 @@ msgstr "隐藏了被删除的函数%q+D"
 
 #: cp/search.c:1966
 #, fuzzy, gcc-internal-format
-#| msgid "virtual non-class function %qs"
 msgid "virtual function %q+D"
 msgstr "虚函数%qs不是类成员"
 
 #: cp/search.c:1967
 #, fuzzy, gcc-internal-format
-#| msgid "overriding deleted function %q+D"
 msgid "overriding final function %q+D"
 msgstr "隐藏了被删除的函数%q+D"
 
@@ -39851,7 +38661,6 @@ msgstr "无效的基类"
 
 #: cp/semantics.c:3218
 #, fuzzy, gcc-internal-format
-#| msgid "protected member %q+#D in anonymous union"
 msgid "cannot capture member %qD of anonymous union"
 msgstr "匿名联合中出现保护成员%q+#D"
 
@@ -39862,13 +38671,11 @@ msgstr "%qD未被捕获"
 
 #: cp/semantics.c:3235
 #, fuzzy, gcc-internal-format
-#| msgid "use of %<auto%> variable from containing function"
 msgid "use of local variable with automatic storage from containing function"
 msgstr "在包含函数中使用%<auto%>变量"
 
 #: cp/semantics.c:3236
 #, fuzzy, gcc-internal-format
-#| msgid "use of %<auto%> variable from containing function"
 msgid "use of parameter from containing function"
 msgstr "在包含函数中使用%<auto%>变量"
 
@@ -39910,14 +38717,12 @@ msgstr "%qE的类型未知"
 
 #: cp/semantics.c:3622
 #, fuzzy, gcc-internal-format
-#| msgid "%qD is not an enumerator-name"
 msgid "%qT is not an enumeration type"
 msgstr "%qD不是一个枚举名"
 
 #. Parameter packs can only be used in templates
 #: cp/semantics.c:3771
 #, fuzzy, gcc-internal-format
-#| msgid "storage class specifiers invalid in parameter declarations"
 msgid "Parameter pack __bases only valid in template declaration"
 msgstr "为形参声明指定了无效的存储类"
 
@@ -39938,7 +38743,6 @@ msgstr "不能为成员函数%qD应用%<offsetof%>"
 
 #: cp/semantics.c:4772
 #, fuzzy, gcc-internal-format
-#| msgid "reference to %qD is ambiguous"
 msgid "user defined reduction lookup is ambiguous"
 msgstr "对%qD的引用有歧义"
 
@@ -39959,7 +38763,6 @@ msgstr ""
 
 #: cp/semantics.c:5267
 #, fuzzy, gcc-internal-format
-#| msgid "num_threads expression must be integral"
 msgid "linear step expression must be integral"
 msgstr "num_threads 表达式必须是整型的"
 
@@ -39995,43 +38798,36 @@ msgstr "调度块大小表达式必须为整型"
 
 #: cp/semantics.c:5434
 #, fuzzy, gcc-internal-format
-#| msgid "num_threads expression must be integral"
 msgid "%qs length expression must be integral"
 msgstr "num_threads 表达式必须是整型的"
 
 #: cp/semantics.c:5447
 #, fuzzy, gcc-internal-format
-#| msgid "%Hcollapse argument needs positive constant integer expression"
 msgid "%qs length expression must be positive constant integer expression"
 msgstr "%H折叠变量需要正整常数表达式"
 
 #: cp/semantics.c:5464
 #, fuzzy, gcc-internal-format
-#| msgid "num_threads expression must be integral"
 msgid "%<num_teams%> expression must be integral"
 msgstr "num_threads 表达式必须是整型的"
 
 #: cp/semantics.c:5483
 #, fuzzy, gcc-internal-format
-#| msgid "num_threads expression must be integral"
 msgid "%<thread_limit%> expression must be integral"
 msgstr "num_threads 表达式必须是整型的"
 
 #: cp/semantics.c:5502
 #, fuzzy, gcc-internal-format
-#| msgid "slice end must be integer"
 msgid "%<device%> id must be integral"
 msgstr "切片结尾必须是整数"
 
 #: cp/semantics.c:5523
 #, fuzzy, gcc-internal-format
-#| msgid "schedule chunk size expression must be integral"
 msgid "%<dist_schedule%> chunk size expression must be integral"
 msgstr "调度块大小表达式必须为整型"
 
 #: cp/semantics.c:5543
 #, fuzzy, gcc-internal-format
-#| msgid "%qD is not a variable in clause %qs"
 msgid "%qD is not a variable in %<aligned%> clause"
 msgstr "%qD在子句%qs中不是一个变量"
 
@@ -40042,19 +38838,16 @@ msgstr ""
 
 #: cp/semantics.c:5563
 #, fuzzy, gcc-internal-format
-#| msgid "%qD appears more than once in data clauses"
 msgid "%qD appears more than once in %<aligned%> clauses"
 msgstr "%qD在数据子句中多次出现"
 
 #: cp/semantics.c:5576
 #, fuzzy, gcc-internal-format
-#| msgid "schedule chunk size expression must be integral"
 msgid "%<aligned%> clause alignment expression must be integral"
 msgstr "调度块大小表达式必须为整型"
 
 #: cp/semantics.c:5613
 #, fuzzy, gcc-internal-format
-#| msgid "%qD is not a variable in clause %qs"
 msgid "%qD is not a variable in %<depend%> clause"
 msgstr "%qD在子句%qs中不是一个变量"
 
@@ -40091,7 +38884,6 @@ msgstr ""
 #. Report the error.
 #: cp/semantics.c:6870
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "static assertion failed: %E"
 msgid "static assertion failed: %s"
 msgstr "静态断言错误:%E"
 
@@ -40137,7 +38929,6 @@ msgstr "函数%2$qD的返回值类型%1$qT不是一个字面类型"
 
 #: cp/semantics.c:7494
 #, fuzzy, gcc-internal-format
-#| msgid "%q#T is not a class"
 msgid "%q#T has virtual base classes"
 msgstr "%q#T不是一个类"
 
@@ -40168,7 +38959,6 @@ msgstr "返回语句转换无效"
 
 #: cp/semantics.c:8033
 #, fuzzy, gcc-internal-format
-#| msgid "%qD is not a constexpr function"
 msgid "%q+D is not usable as a constexpr function because:"
 msgstr "%qD不是一个广义常函数"
 
@@ -40179,14 +38969,12 @@ msgstr "友元声明没有指定类或函数名"
 
 #: cp/semantics.c:8382 cp/semantics.c:10054
 #, fuzzy, gcc-internal-format
-#| msgid "call to non-function %qD"
 msgid "call to non-constexpr function %qD"
 msgstr "调用非函数的%qD"
 
 #. The definition of fun was somehow unsuitable.
 #: cp/semantics.c:8416
 #, fuzzy, gcc-internal-format
-#| msgid "%qE is not a constant expression"
 msgid "%qD called in a constant expression"
 msgstr "%qE不是一个常量表达式"
 
@@ -40202,7 +38990,6 @@ msgstr "调用存在循环依赖"
 
 #: cp/semantics.c:8462
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "template instantiation depth exceeds maximum of %d (use -ftemplate-depth= to increase the maximum) instantiating %qD"
 msgid "constexpr evaluation depth exceeds maximum of %d (use -fconstexpr-depth= to increase the maximum)"
 msgstr "在实例化%2$qD时模板实例化深度超过最大值 %1$d(使用 use -ftemplate-depth= 来增大最大值)"
 
@@ -40218,7 +39005,6 @@ msgstr "数组下标越界"
 
 #: cp/semantics.c:8682
 #, fuzzy, gcc-internal-format
-#| msgid "Expected array subscript at %C"
 msgid "negative array subscript"
 msgstr "%C处需要数组下标"
 
@@ -40284,13 +39070,11 @@ msgstr "%qE的枚举值不是一个整数常量"
 
 #: cp/semantics.c:9492 cp/semantics.c:10361
 #, fuzzy, gcc-internal-format
-#| msgid "enumeral and non-enumeral type in conditional expression"
 msgid "temporary of non-literal type %qT in a constant expression"
 msgstr "枚举和非枚举类型一起出现在条件表达式中"
 
 #: cp/semantics.c:9735 cp/semantics.c:10146
 #, fuzzy, gcc-internal-format
-#| msgid "reinterpret_cast from type %qT to type %qT casts away qualifiers"
 msgid "reinterpret_cast from integer to pointer"
 msgstr "从类型%qT到类型%qT的 reinterpret_cast 丢失了限定符"
 
@@ -40331,7 +39115,6 @@ msgstr ""
 
 #: cp/semantics.c:10200
 #, fuzzy, gcc-internal-format
-#| msgid "%qE is not a constant expression"
 msgid "use of %<this%> in a constant expression"
 msgstr "%qE不是一个常量表达式"
 
@@ -40352,7 +39135,6 @@ msgstr "整型表达式%qE不是常量"
 
 #: cp/semantics.c:10336
 #, fuzzy, gcc-internal-format
-#| msgid "Bad type in constant expression"
 msgid "cast to non-integral type %qT in a constant expression"
 msgstr "常量表达式中类型错误"
 
@@ -40423,43 +39205,36 @@ msgstr "%qE属性在此平台上不受支持"
 
 #: cp/tree.c:3333
 #, fuzzy, gcc-internal-format
-#| msgid "declaration of %qD as member of %qT"
 msgid "redeclaration of %qD adds abi tag %E"
 msgstr "%qD声明为%qT的一个成员"
 
 #: cp/tree.c:3339
 #, fuzzy, gcc-internal-format
-#| msgid "previous declaration %q+#D here"
 msgid "previous declaration here"
 msgstr "与此处早先的声明%q+#D冲突"
 
 #: cp/tree.c:3356
 #, fuzzy, gcc-internal-format
-#| msgid "%qE attribute ignored on non-class types"
 msgid "%qE attribute applied to non-class, non-enum type %qT"
 msgstr "%qE属性在不是类的类型上被忽略"
 
 #: cp/tree.c:3362
 #, fuzzy, gcc-internal-format
-#| msgid "ignoring attributes applied to %qT after definition"
 msgid "%qE attribute applied to %qT after its definition"
 msgstr "忽略在其定义之后为%qT应用的属性"
 
 #: cp/tree.c:3384
 #, fuzzy, gcc-internal-format
-#| msgid "%qE attribute applies only to functions"
 msgid "%qE attribute applied to non-function %qD"
 msgstr "%qE属性只能用于函数"
 
 #: cp/tree.c:3389
 #, fuzzy, gcc-internal-format
-#| msgid "%qE attribute applies only to functions"
 msgid "%qE attribute applied to extern \"C\" function %qD"
 msgstr "%qE属性只能用于函数"
 
 #: cp/tree.c:4093
 #, fuzzy, gcc-internal-format
-#| msgid "array bound is not an integer constant"
 msgid "zero as null pointer constant"
 msgstr "数组边界不是一个整数常量"
 
@@ -40530,7 +39305,6 @@ msgstr "%qs用于成员函数无效"
 
 #: cp/typeck.c:1559
 #, fuzzy, gcc-internal-format
-#| msgid "creating array of functions"
 msgid "taking sizeof array of runtime bound"
 msgstr "创建函数的数组"
 
@@ -40561,7 +39335,6 @@ msgstr "对非静态成员函数的使用无效"
 
 #: cp/typeck.c:1961
 #, fuzzy, gcc-internal-format
-#| msgid "taking address of temporary"
 msgid "taking address of temporary array"
 msgstr "取临时变量的地址"
 
@@ -40572,7 +39345,6 @@ msgstr "不建议使用从字符串常量到%qT的转换"
 
 #: cp/typeck.c:2248 cp/typeck.c:2658
 #, fuzzy, gcc-internal-format
-#| msgid "request for member %qD in %qE, which is of non-class type %qT"
 msgid "request for member %qD in %qE, which is of pointer type %qT (maybe you meant to use %<->%> ?)"
 msgstr "对成员%qD的请求出现在%qE中,而后者具有非类类型%qT"
 
@@ -40663,7 +39435,6 @@ msgstr "数组引用缺少下标"
 
 #: cp/typeck.c:3029
 #, fuzzy, gcc-internal-format
-#| msgid "alignment of array elements is greater than element size"
 msgid "rank of the array%'s index is greater than 1"
 msgstr "数组元素的对齐边界比元素大小还要大"
 
@@ -40704,13 +39475,11 @@ msgstr "%qE不能用作函数"
 
 #: cp/typeck.c:3486
 #, fuzzy, gcc-internal-format
-#| msgid "%qE cannot be used as a function"
 msgid "%qD cannot be used as a function"
 msgstr "%qE不能用作函数"
 
 #: cp/typeck.c:3489
 #, fuzzy, gcc-internal-format
-#| msgid "%qE cannot be used as a function"
 msgid "expression cannot be used as a function"
 msgstr "%qE不能用作函数"
 
@@ -40821,13 +39590,11 @@ msgstr "ISO C++ 不允许比较指针和整数的值"
 
 #: cp/typeck.c:4572 cp/typeck.c:4584
 #, fuzzy, gcc-internal-format
-#| msgid "comparison between %qT and %qT"
 msgid "operand types are %qT and %qT"
 msgstr "在%qT和%qT间比较"
 
 #: cp/typeck.c:4596
 #, fuzzy, gcc-internal-format
-#| msgid "could not find interface for class %qE"
 msgid "could not find an integer type of the same size as %qT"
 msgstr "找不到类%qE的接口"
 
@@ -40925,7 +39692,6 @@ msgstr "不能创建指向引用成员%qD的指针"
 
 #: cp/typeck.c:5473
 #, fuzzy, gcc-internal-format
-#| msgid "taking address of expression of type %<void%>"
 msgid "taking address of array of runtime bound"
 msgstr "取一个类型为%<void%>的表达式的地址"
 
@@ -40981,7 +39747,6 @@ msgstr "请求声明为%<register%>的%qD的地址"
 
 #: cp/typeck.c:6077
 #, fuzzy, gcc-internal-format
-#| msgid "initializer for %qT must be brace-enclosed"
 msgid "list-initializer for non-class type must not be parenthesized"
 msgstr "%qT的初始值设定必须在花括号内"
 
@@ -41027,7 +39792,6 @@ msgstr "从类型%qT到类型%qT的 reinterpret_cast 丢失了限定符"
 
 #: cp/typeck.c:6296
 #, fuzzy, gcc-internal-format
-#| msgid "invalid cast to function type %qT"
 msgid "useless cast to type %qT"
 msgstr "向函数类型%qT的转换无效"
 
@@ -41058,7 +39822,6 @@ msgstr "从%qT到%qT的转换增大了目标类型的对齐需求"
 
 #: cp/typeck.c:6850
 #, fuzzy, gcc-internal-format
-#| msgid "ISO C++ forbids casting between pointer-to-function and pointer-to-object"
 msgid "casting between pointer-to-function and pointer-to-object is conditionally-supported"
 msgstr "ISO C++ 不允许在函数指针和对象指针间进行转换"
 
@@ -41253,7 +40016,6 @@ msgstr "在返回%qT的函数中,返回语句不带返回值"
 
 #: cp/typeck.c:8390
 #, fuzzy, gcc-internal-format
-#| msgid "<brace-enclosed initializer list>"
 msgid "returning initializer list"
 msgstr "<花括号内的初始值列表>"
 
@@ -41335,7 +40097,6 @@ msgstr "不能将形参%q+D声明为具有抽象类型%qT"
 
 #: cp/typeck2.c:333
 #, fuzzy, gcc-internal-format
-#| msgid "cannot declare parameter %q+D to be of abstract type %qT"
 msgid "cannot declare parameter to be of abstract type %qT"
 msgstr "不能将形参%q+D声明为具有抽象类型%qT"
 
@@ -41372,37 +40133,31 @@ msgstr "生成抽象类型%qT的数组"
 
 #: cp/typeck2.c:356
 #, fuzzy, gcc-internal-format
-#| msgid "invalid cast to function type %qT"
 msgid "invalid cast to abstract class type %qT"
 msgstr "向函数类型%qT的转换无效"
 
 #: cp/typeck2.c:359
 #, fuzzy, gcc-internal-format
-#| msgid "invalid cast of an rvalue expression of type %qT to type %qT"
 msgid "invalid new-expression of abstract class type %qT"
 msgstr "从具有类型%qT的右值表达式到类型%qT中的转换无效"
 
 #: cp/typeck2.c:362
 #, fuzzy, gcc-internal-format
-#| msgid "invalid parameter type %qT"
 msgid "invalid abstract return type %qT"
 msgstr "无效的参数类型%qT"
 
 #: cp/typeck2.c:365
 #, fuzzy, gcc-internal-format
-#| msgid "invalid parameter type %qT"
 msgid "invalid abstract parameter type %qT"
 msgstr "无效的参数类型%qT"
 
 #: cp/typeck2.c:368
 #, fuzzy, gcc-internal-format
-#| msgid "expression %qE of abstract class type %qT cannot be used in throw-expression"
 msgid "expression of abstract class type %qT cannot be used in throw-expression"
 msgstr "表达式%qE具有抽象类类型%qT,不能用于 throw 表达式中"
 
 #: cp/typeck2.c:372
 #, fuzzy, gcc-internal-format
-#| msgid "cannot declare parameter %q+D to be of abstract type %qT"
 msgid "cannot declare catch parameter to be of abstract class type %qT"
 msgstr "不能将形参%q+D声明为具有抽象类型%qT"
 
@@ -41448,7 +40203,6 @@ msgstr "对%qT的使用非法"
 
 #: cp/typeck2.c:501
 #, fuzzy, gcc-internal-format
-#| msgid "invalid use of member (did you forget the %<&%> ?)"
 msgid "invalid use of member function (did you forget the %<()%> ?)"
 msgstr "对成员的使用无效(您是否遗忘了%<&%>?)"
 
@@ -41474,7 +40228,6 @@ msgstr "对依赖类型%qT的使用无效"
 
 #: cp/typeck2.c:534
 #, fuzzy, gcc-internal-format
-#| msgid "<brace-enclosed initializer list>"
 msgid "invalid use of brace-enclosed initializer list"
 msgstr "<花括号内的初始值列表>"
 
@@ -41510,7 +40263,6 @@ msgstr "在 {} 内将%qE从%qT转换为较窄的类型%qT"
 
 #: cp/typeck2.c:922
 #, fuzzy, gcc-internal-format
-#| msgid "narrowing conversion of %qE from %qT to %qT inside { }"
 msgid "narrowing conversion of %qE from %qT to %qT inside { } is ill-formed in C++11"
 msgstr "在 {} 内将%qE从%qT转换为较窄的类型%qT"
 
@@ -41606,19 +40358,16 @@ msgstr "成员指针类型%qT与对象类型%qT不兼容"
 
 #: cp/typeck2.c:1759
 #, fuzzy, gcc-internal-format
-#| msgid "pointer to member function used in arithmetic"
 msgid "pointer-to-member-function type %qT requires an rvalue"
 msgstr "在算术表达式中使用了成员指针"
 
 #: cp/typeck2.c:1766
 #, fuzzy, gcc-internal-format
-#| msgid "pointer to member function used in arithmetic"
 msgid "pointer-to-member-function type %qT requires an lvalue"
 msgstr "在算术表达式中使用了成员指针"
 
 #: cp/typeck2.c:1807
 #, fuzzy, gcc-internal-format
-#| msgid "invalid cast to function type %qT"
 msgid "functional cast to array type %qT"
 msgstr "向函数类型%qT的转换无效"
 
@@ -41659,7 +40408,6 @@ msgstr "在%L处把一个无穷大或非数转换为 INTEGER"
 
 #: fortran/arith.c:904 fortran/arith.c:929
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: Noninteger exponent in an initialization expression at %L"
 msgid "Noninteger exponent in an initialization expression at %L"
 msgstr "Fortran 2003:%L处初始化表达式中非整数指数"
 
@@ -41833,7 +40581,6 @@ msgstr "%C处数组规格中有多于 %d 的维数"
 
 #: fortran/array.c:578
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Array specification at %C has more than %d dimensions"
 msgid "Array specification at %C with more than 7 dimensions"
 msgstr "%C处数组规格中有多于 %d 的维数"
 
@@ -41864,13 +40611,11 @@ msgstr "%C处数组构造语法错误"
 
 #: fortran/array.c:1060
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: [...] style array constructors at %C"
 msgid "[...] style array constructors at %C"
 msgstr "Fortran 2003:%C处 [...] 风格的数组构造"
 
 #: fortran/array.c:1082
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: Array constructor including type specification at %C"
 msgid "Array constructor including type specification at %C"
 msgstr "Fortran 2003:%C处包含类型规格的数组构造"
 
@@ -42074,7 +40819,6 @@ msgstr "%4$L处‘%3$s’内建函数的‘%1$s’和‘%2$s’实参类型必
 #: fortran/check.c:868 fortran/check.c:1807 fortran/check.c:1933
 #: fortran/check.c:2007 fortran/check.c:2427
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Extension: Different type kinds at %L"
 msgid "Different type kinds at %L"
 msgstr "扩展:%L处类型种别不同"
 
@@ -42085,7 +40829,6 @@ msgstr "%3$L处内建函数‘%2$s’的实参‘%1$s’必须是一个 POINTER"
 
 #: fortran/check.c:913 fortran/check.c:949 fortran/check.c:2945
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "'%s' argument of '%s' intrinsic at %L must be of kind %d"
 msgid "'%s' argument of '%s' intrinsic at %L shall not be coindexed"
 msgstr "%3$L处内建函数‘%2$s’的实参‘%1$s’必须具有种别 %4$d"
 
@@ -42121,19 +40864,16 @@ msgstr "‘%s’的实参在%L处必须是一个指针"
 
 #: fortran/check.c:1030
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "'%s' and '%s' arguments of '%s' intrinsic at %L must have the same type"
 msgid "ATOM and VALUE argument of the %s intrinsic function shall have the same type at %L"
 msgstr "%4$L处‘%3$s’内建函数的‘%1$s’和‘%2$s’实参类型必须相同"
 
 #: fortran/check.c:1048
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "'%s' argument of '%s' intrinsic at %L must be default real"
 msgid "ATOM argument of the %s intrinsic function at %L shall be definable"
 msgstr "%3$L处内建函数‘%2$s’的‘%1$s’实参类型必须为默认实型"
 
 #: fortran/check.c:1065
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "'%s' argument of '%s' intrinsic at %L must be default real"
 msgid "VALUE argument of the %s intrinsic function at %L shall be definable"
 msgstr "%3$L处内建函数‘%2$s’的‘%1$s’实参类型必须为默认实型"
 
@@ -42162,7 +40902,6 @@ msgstr ""
 #: fortran/check.c:3609 fortran/check.c:3664 fortran/check.c:4620
 #: fortran/check.c:4749
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: '%s' intrinsic with KIND argument at %L"
 msgid "'%s' intrinsic with KIND argument at %L"
 msgstr "Fortran 2003:%2$L处的‘%1$s’内建函数有 KIND 实参"
 
@@ -42203,7 +40942,6 @@ msgstr "%2$L处 %1$s 内建函数缺少实参"
 
 #: fortran/check.c:1739
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2008: COMPLEX argument '%s' argument of '%s' intrinsic at %L"
 msgid "COMPLEX argument '%s' argument of '%s' intrinsic at %L"
 msgstr "Fortran 2008:%3$L处的‘%2$s’内建函数有 COMPLEX 参数‘%1$s’"
 
@@ -42239,19 +40977,16 @@ msgstr "%2$L处的内建函数‘%1$s’必须至少有两个实参"
 
 #: fortran/check.c:2384
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "'%s' argument of '%s' intrinsic at %L is empty"
 msgid "Missing '%s' argument to the %s intrinsic at %L"
 msgstr "%3$L处内建‘%2$s’内建函数的‘%1$s’实参为空"
 
 #: fortran/check.c:2399
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "arguments '%s' and '%s' for intrinsic %s"
 msgid "Duplicate argument '%s' at %L to intrinsic %s"
 msgstr "‘%s’和‘%s’用作内建函数‘%s’的参数"
 
 #: fortran/check.c:2404
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "arguments '%s' and '%s' for intrinsic %s"
 msgid "Unknown argument '%s' at %L to intrinsic %s"
 msgstr "‘%s’和‘%s’用作内建函数‘%s’的参数"
 
@@ -42262,7 +40997,6 @@ msgstr "%3$L处内建函数‘%2$s’的实参‘a%1$d’必须是 %4$s(%5$d)"
 
 #: fortran/check.c:2464
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: '%s' intrinsic with CHARACTER argument at %L"
 msgid "'%s' intrinsic with CHARACTER argument at %L"
 msgstr "Fortran 2003:%2$L处的‘%1$s’内建函数有 CHARACTER 实参"
 
@@ -42298,13 +41032,11 @@ msgstr "%3$L处内建函数‘%2$s’的实参‘%1$s’必须为整数型或实
 
 #: fortran/check.c:2815
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Second argument of NEAREST at %L shall not be zero"
 msgid "The FROM argument to MOVE_ALLOC at %L shall not be coindexed"
 msgstr "%L处 NEAREST 的第二个参数不能为 0"
 
 #: fortran/check.c:2826
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Second argument of NEAREST at %L shall not be zero"
 msgid "The TO argument to MOVE_ALLOC at %L shall not be coindexed"
 msgstr "%L处 NEAREST 的第二个参数不能为 0"
 
@@ -42315,25 +41047,21 @@ msgstr ""
 
 #: fortran/check.c:2844
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "the '%s' and '%s' arguments of '%s' intrinsic at %L must have the same rank %d/%d"
 msgid "The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L must have the same rank %d/%d"
 msgstr "%4$L处‘%3$s’内建函数的‘%1$s’和‘%2$s’实参必须有相同的秩 %5$d/%6$d"
 
 #: fortran/check.c:2853
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "the '%s' and '%s' arguments of '%s' intrinsic at %L must have the same rank %d/%d"
 msgid "The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L must have the same corank %d/%d"
 msgstr "%4$L处‘%3$s’内建函数的‘%1$s’和‘%2$s’实参必须有相同的秩 %5$d/%6$d"
 
 #: fortran/check.c:2880
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Second argument of NEAREST at %L shall not be zero"
 msgid "Argument 'S' of NEAREST at %L shall not be zero"
 msgstr "%L处 NEAREST 的第二个参数不能为 0"
 
 #: fortran/check.c:2930
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE"
 msgid "'%s' argument of '%s' intrinsic at %L must be a POINTER, ALLOCATABLE or procedure pointer"
 msgstr "%3$L处内建函数‘%2$s’的实参‘%1$s’必须为 ALLOCATABLE"
 
@@ -42364,7 +41092,6 @@ msgstr "%3$L处内建函数‘%2$s’的实参‘%1$s’必须是‘%4$s’的
 
 #: fortran/check.c:3150
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "'%s' argument of '%s' intrinsic at %L must be a variable"
 msgid "The argument of the RANK intrinsic at %L must be a data object"
 msgstr "%3$L处内建函数‘%2$s’的实参‘%1$s’必须是一个变量"
 
@@ -42410,7 +41137,6 @@ msgstr "若没有填充,%L处内建 ESHAPE 源中没有足够的元素去与
 
 #: fortran/check.c:3408 fortran/check.c:3427
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "'%s' argument of '%s' intrinsic at %L must be %s"
 msgid "'%s' argument of '%s' intrinsic at %L cannot be of type %s"
 msgstr "%3$L处内建函数‘%2$s’的实参‘%1$s’必须是 %4$s"
 
@@ -42436,19 +41162,16 @@ msgstr "‘shape’内建函数的‘source’实参在%L处不能是假定大
 
 #: fortran/check.c:3679 fortran/check.c:5705
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "'%s' argument of '%s' intrinsic at %L must be a scalar"
 msgid "'%s' argument of '%s' intrinsic at %L shall not be a procedure"
 msgstr "%3$L处内建函数‘%2$s’的实参‘%1$s’必须是一个标量"
 
 #: fortran/check.c:3687 fortran/check.c:3826 fortran/check.c:5697
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)"
 msgid "'%s' argument of '%s' intrinsic at %L shall not be TYPE(*)"
 msgstr "%3$L处内建函数‘%2$s’的实参‘%1$s’不能是 INTENT(IN)"
 
 #: fortran/check.c:3698 fortran/check.c:3838
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "'source' argument of 'shape' intrinsic at %L must not be an assumed size array"
 msgid "'%s' argument of '%s' intrinsic at %L shall not be an assumed-size array"
 msgstr "‘shape’内建函数的‘source’实参在%L处不能是假定大小的数组"
 
@@ -42474,7 +41197,6 @@ msgstr ""
 
 #: fortran/check.c:3906
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Argument dim at %L must be scalar"
 msgid "Argument FPTR at %L to C_F_POINTER must be a pointer"
 msgstr "%L 实参维数必须是标量"
 
@@ -42540,7 +41262,6 @@ msgstr "%L处数据传输元素不能有 POINTER 组件"
 
 #: fortran/check.c:4036
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Function result '%s' at %L has no IMPLICIT type"
 msgid "Function result '%s' at %L is invalid as X argument to C_FUNLOC"
 msgstr "%2$L处的函数返回值‘%1$s’处没有隐式类型"
 
@@ -42551,7 +41272,6 @@ msgstr ""
 
 #: fortran/check.c:4050
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "User operator procedure '%s' at %L must be a FUNCTION"
 msgid "Noninteroperable procedure at %L to C_FUNLOC"
 msgstr "%2$L处的用户运算符‘%1$s’必须是一个 FUNCTION"
 
@@ -42567,7 +41287,6 @@ msgstr "‘%s’的实参在%L处必须是一个指针"
 
 #: fortran/check.c:4081
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Component at %C must have the POINTER attribute"
 msgid "Argument X at %L to C_LOC shall have either the POINTER or the TARGET attribute"
 msgstr "%C处的组件必须有 POINTER 属性"
 
@@ -42730,7 +41449,6 @@ msgstr "%L处数据元素高于数组上限"
 
 #: fortran/data.c:327 fortran/data.c:493
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Extension: re-initialization of '%s' at %L"
 msgid "re-initialization of '%s' at %L"
 msgstr "扩展:‘%s’重初始化于 %L"
 
@@ -42741,7 +41459,6 @@ msgstr "%2$C处主机相关的变量‘%1$s’不能出现在 DATA 语句中"
 
 #: fortran/decl.c:271
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Extension: initialization of common block variable '%s' in DATA statement at %C"
 msgid "initialization of common block variable '%s' in DATA statement at %C"
 msgstr "扩展:DATA 语句中对公共块变量‘%s’在%C处初始化"
 
@@ -42787,7 +41504,6 @@ msgstr "%C处函数参数属性中有冲突"
 
 #: fortran/decl.c:752
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Obsolescent feature: Old-style character length at %C"
 msgid "Old-style character length at %C"
 msgstr "已过时:%C处的旧式字符长度"
 
@@ -42823,13 +41539,11 @@ msgstr "%2$L 处类型“%1$s”是去到 BIND(C) 过程“%3$s”的参数,
 
 #: fortran/decl.c:1032
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Variable '%s' at %L is a parameter to the BIND(C) procedure '%s' but may not be C interoperable"
 msgid "Variable '%s' at %L is a dummy argument to the BIND(C) procedure '%s' but is not C interoperable because it is polymorphic"
 msgstr "%2$L处变量‘%1$s’是 BIND(C) 过程‘%3$s’的参数,但它不能与 C 互操作"
 
 #: fortran/decl.c:1038
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Variable '%s' at %L is a parameter to the BIND(C) procedure '%s' but may not be C interoperable"
 msgid "Variable '%s' at %L is a dummy argument of the BIND(C) procedure '%s' but may not be C interoperable"
 msgstr "%2$L处变量‘%1$s’是 BIND(C) 过程‘%3$s’的参数,但它不能与 C 互操作"
 
@@ -42840,37 +41554,31 @@ msgstr "%2$L处字符参数‘%1$s’长度必须为 1,因为过程‘%3$s’
 
 #: fortran/decl.c:1066
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Variable '%s' at %L cannot have the ALLOCATABLE attribute because procedure '%s' is BIND(C)"
 msgid "Variable '%s' at %L with ALLOCATABLE attribute in procedure '%s' with BIND(C)"
 msgstr "%2$L处变量‘%1$s’不能有 ALLOCATABLE 属性,因为过程‘%3$s’是 BIND(C)"
 
 #: fortran/decl.c:1074
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Variable '%s' at %L cannot have the POINTER attribute because procedure '%s' is BIND(C)"
 msgid "Variable '%s' at %L with POINTER attribute in procedure '%s' with BIND(C)"
 msgstr "%2$L处变量‘%1$s’不能有 POINTER 属性,因为过程‘%3$s’是 BIND(C)"
 
 #: fortran/decl.c:1083
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Variable '%s' at %L cannot have the ALLOCATABLE attribute because procedure '%s' is BIND(C)"
 msgid "Scalar variable '%s' at %L with POINTER or ALLOCATABLE in procedure '%s' with BIND(C) is not yet supported"
 msgstr "%2$L处变量‘%1$s’不能有 ALLOCATABLE 属性,因为过程‘%3$s’是 BIND(C)"
 
 #: fortran/decl.c:1092
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Variable '%s' at %L cannot have the OPTIONAL attribute because procedure '%s' is BIND(C)"
 msgid "Variable '%s' at %L cannot have both the OPTIONAL and the VALUE attribute because procedure '%s' is BIND(C)"
 msgstr "%2$L处变量‘%1$s’不能有 OPTIONAL 属性,因为过程‘%3$s’是 BIND(C)"
 
 #: fortran/decl.c:1099
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Variable '%s' at %L cannot have the OPTIONAL attribute because procedure '%s' is BIND(C)"
 msgid "Variable '%s' at %L with OPTIONAL attribute in procedure '%s' which is BIND(C)"
 msgstr "%2$L处变量‘%1$s’不能有 OPTIONAL 属性,因为过程‘%3$s’是 BIND(C)"
 
 #: fortran/decl.c:1110
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Assumed-shape array '%s' at %L cannot be an argument to the procedure '%s' at %L because the procedure is BIND(C)"
 msgid "Assumed-shape array '%s' at %L as dummy argument to the BIND(C) procedure '%s' at %L"
 msgstr "%2$L处假定外形数组‘%1$s’不能是%4$L处过程‘%3$s’的参数,因为该过程是 BIND(C)"
 
@@ -42946,7 +41654,6 @@ msgstr "%C处的 NULL() 初始化有歧义"
 
 #: fortran/decl.c:1724
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "NULL() initialization at %C is ambiguous"
 msgid "NULL() initialization at %C may not have MOLD"
 msgstr "%C处的 NULL() 初始化有歧义"
 
@@ -42987,7 +41694,6 @@ msgstr "%C处 Cray 指针重复指定了数组"
 
 #: fortran/decl.c:2003
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Extension: Old-style initialization at %C"
 msgid "Old-style initialization at %C"
 msgstr "扩展:%C处旧式的初始化"
 
@@ -43068,7 +41774,6 @@ msgstr "%C处 CHARACTER 声明语法错误"
 
 #: fortran/decl.c:2597
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Extension: BYTE type at %C"
 msgid "BYTE type at %C"
 msgstr "扩展:%C处的 BYTE 类型"
 
@@ -43079,7 +41784,6 @@ msgstr "%C处使用到的 BYTE 类型在目标机上不可用"
 
 #: fortran/decl.c:2624
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "By-value argument at %L is not allowed in this context"
 msgid "Assumed type at %C is not allowed for components"
 msgstr "%L处上下文中不允许使用按值传递的实参"
 
@@ -43101,7 +41805,6 @@ msgstr "扩展:‘%s’重初始化于 %L"
 
 #: fortran/decl.c:2780
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: CLASS statement at %C"
 msgid "CLASS statement at %C"
 msgstr "Fortran 2003:%C处的 CLASS 语句"
 
@@ -43138,7 +41841,6 @@ msgstr "%C处 IMPORT 语句只允许出现在接口体中"
 
 #: fortran/decl.c:3171
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Empty IMPLICIT statement at %C"
 msgid "IMPORT statement at %C"
 msgstr "%C处 IMPLICIT 语句为空"
 
@@ -43179,7 +41881,6 @@ msgstr "重复的 %s 属性,位于 %L"
 
 #: fortran/decl.c:3667
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: ALLOCATABLE attribute at %C in a TYPE definition"
 msgid "ALLOCATABLE attribute at %C in a TYPE definition"
 msgstr "Fortran 2003:%C处的 ALLOCATABLE 属性出现在 TYPE 定义中"
 
@@ -43190,7 +41891,6 @@ msgstr "%L处的属性不允许出现在 TYPE 定义中"
 
 #: fortran/decl.c:3694
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: Attribute %s at %L in a TYPE definition"
 msgid "Attribute %s at %L in a TYPE definition"
 msgstr "Fortran 2003:属性 %s 在%L处出现在 TYPE 定义中"
 
@@ -43201,7 +41901,6 @@ msgstr "%2$L处的 %1$s 属性不允许出现在模块规格说明以外"
 
 #: fortran/decl.c:3718
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: ASYNCHRONOUS attribute at %C"
 msgid "ASYNCHRONOUS attribute at %C"
 msgstr "Fortran 2003:%C处的 ASYNCHRONOUS 属性"
 
@@ -43217,19 +41916,16 @@ msgstr "%C处的 PROTECTED 仅允许出现在模块规格说明部分内"
 
 #: fortran/decl.c:3780
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: PROTECTED attribute at %C"
 msgid "PROTECTED attribute at %C"
 msgstr "Fortran 2003:%C处的 PROTECT 属性"
 
 #: fortran/decl.c:3809
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: VALUE attribute at %C"
 msgid "VALUE attribute at %C"
 msgstr "Fortran 2003:%C处的 VALUE 属性"
 
 #: fortran/decl.c:3816
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: VOLATILE attribute at %C"
 msgid "VOLATILE attribute at %C"
 msgstr "Fortran 2003:%C处的 VOLATILE 属性"
 
@@ -43302,7 +41998,6 @@ msgstr "%C处的属性规格说明语句缺少实体或公共块名"
 
 #: fortran/decl.c:4212
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Empty IMPLICIT statement at %C"
 msgid "BIND(C) statement at %C"
 msgstr "%C处 IMPLICIT 语句为空"
 
@@ -43328,7 +42023,6 @@ msgstr ""
 
 #: fortran/decl.c:4475 fortran/primary.c:1717
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Expected alternate return label at %C"
 msgid "Alternate-return argument at %C"
 msgstr "%C处需要替代的返回标号"
 
@@ -43359,7 +42053,6 @@ msgstr "%C处的函数声明后有非预期的垃圾字符"
 
 #: fortran/decl.c:4687 fortran/decl.c:5753
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2008: BIND(C) attribute at %L may not be specified for an internal procedure"
 msgid "BIND(C) attribute at %L may not be specified for an internal procedure"
 msgstr "Fortran 2008:%L处的 BIND(C)属性对于内部过程不可以指定"
 
@@ -43400,7 +42093,6 @@ msgstr "%C处需要 NOPASS 或显式接口"
 
 #: fortran/decl.c:5031
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: Procedure pointer component at %C"
 msgid "Procedure pointer component at %C"
 msgstr "Fortran 2003:%C处的过程指针组件"
 
@@ -43416,13 +42108,11 @@ msgstr "%C处的 PROCEDURE 必须在一个泛型接口内"
 
 #: fortran/decl.c:5130 fortran/decl.c:7325
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Syntax error in PROCEDURE statement at %C"
 msgid "double colon in MODULE PROCEDURE statement at %L"
 msgstr "%C处 PROCEDURE 语句语法错误"
 
 #: fortran/decl.c:5199
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: PROCEDURE statement at %C"
 msgid "PROCEDURE statement at %C"
 msgstr "Fortran 2003:%C处的 PROCEDURE 语句"
 
@@ -43440,7 +42130,6 @@ msgstr "%L处的 BIND(C) 属性只能用于变量或公共块"
 
 #: fortran/decl.c:5440
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Empty IMPLICIT statement at %C"
 msgid "ENTRY statement at %C"
 msgstr "%C处 IMPLICIT 语句为空"
 
@@ -43562,13 +42251,11 @@ msgstr "需要 %s 语句在%L处"
 
 #: fortran/decl.c:6144
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Expecting %s statement at %C"
 msgid "Expecting %s statement at %L"
 msgstr "需要 %s 语句,于 %C"
 
 #: fortran/decl.c:6162
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Expected block name of '%s' in %s statement at %C"
 msgid "Expected block name of '%s' in %s statement at %L"
 msgstr "需要块名‘%s’在‘%s’表达式中,于 %C"
 
@@ -43674,7 +42361,6 @@ msgstr "%2$C处的 .%1$s. 运算符的访问规格说明已经被指定"
 
 #: fortran/decl.c:6834
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: PROTECTED statement at %C"
 msgid "PROTECTED statement at %C"
 msgstr "Fortran 2003:%C处的 PROTECTED 语句"
 
@@ -43740,7 +42426,6 @@ msgstr "VALUE 不能用在%C处 BLOCK 内"
 
 #: fortran/decl.c:7128
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: VALUE statement at %C"
 msgid "VALUE statement at %C"
 msgstr "Fortran 2003:%C处的 VALUE 语句"
 
@@ -43751,7 +42436,6 @@ msgstr "%C处 VALUE 语句语法错误"
 
 #: fortran/decl.c:7177
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: VOLATILE statement at %C"
 msgid "VOLATILE statement at %C"
 msgstr "Fortran 2003:%C处的 VOLATILE 语句"
 
@@ -43767,7 +42451,6 @@ msgstr "%C处的 VOLATILE 语句语法错误"
 
 #: fortran/decl.c:7236
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: ASYNCHRONOUS statement at %C"
 msgid "ASYNCHRONOUS statement at %C"
 msgstr "Fortran 2003:%C处的 ASYNCHRONOUS 语句"
 
@@ -43793,7 +42476,6 @@ msgstr "%C处 TYPE 定义中的歧义符号"
 
 #: fortran/decl.c:7416
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Symbol '%s' at %C has already been host associated"
 msgid "Symbol '%s' at %C has not been previously defined"
 msgstr "%2$C处符号‘%1$s’已经与主机相关联"
 
@@ -43824,7 +42506,6 @@ msgstr "%C处的派生类型在模块规格说明部分内只能是 PUBLIC"
 
 #: fortran/decl.c:7492
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "ABSTRACT type '%s' used at %L"
 msgid "ABSTRACT type at %C"
 msgstr "%2$L处使用了 ABSTRACT 类型‘%1$s’"
 
@@ -43855,7 +42536,6 @@ msgstr "%C处 Cray 指针不能指向假定外形数组"
 
 #: fortran/decl.c:7722
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: ENUM and ENUMERATOR at %C"
 msgid "ENUM and ENUMERATOR at %C"
 msgstr "Fortran 2003:%C处的 ENUM 和 ENUMERATOR"
 
@@ -44171,7 +42851,6 @@ msgstr "%2$L处的转换内建函数‘%1$s’不允许用在初始化表达式
 
 #: fortran/expr.c:2414
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Extension: Evaluation of nonstandard initialization expression at %L"
 msgid "Evaluation of nonstandard initialization expression at %L"
 msgstr "扩展:%L处求非标量初始化表达式的值"
 
@@ -44302,19 +42981,16 @@ msgstr "%L处赋值右手边出现 NULL"
 
 #: fortran/expr.c:3161
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "POINTER valued function appears on right-hand side of assignment at %L"
 msgid "POINTER-valued function appears on right-hand side of assignment at %L"
 msgstr "%L处赋值右手边出现值为 POINTER 的函数"
 
 #: fortran/expr.c:3171
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Extension: BOZ literal at %L used to initialize non-integer variable '%s'"
 msgid "BOZ literal at %L used to initialize non-integer variable '%s'"
 msgstr "扩展:%L处 BOZ 字面值被用来初始化非整数变量‘%s’"
 
 #: fortran/expr.c:3176 fortran/resolve.c:9062
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Extension: BOZ literal at %L outside a DATA statement and outside INT/REAL/DBLE/CMPLX"
 msgid "BOZ literal at %L outside a DATA statement and outside INT/REAL/DBLE/CMPLX"
 msgstr "扩展:在 %L处的 BOZ 字面值在一个 DATA 语句之外并且也在 INT/REAL/DBLE/CMPLX 之外"
 
@@ -44375,7 +43051,6 @@ msgstr "%2$L处‘%1$s’需要边界规格"
 
 #: fortran/expr.c:3343
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: Bounds specification for '%s' in pointer assignment at %L"
 msgid "Bounds specification for '%s' in pointer assignment at %L"
 msgstr "Fortran 2003:%2$L处指针赋值语句中‘%1$s’的边界规格"
 
@@ -44406,7 +43081,6 @@ msgstr "%L处过程指针赋值非法"
 
 #: fortran/expr.c:3445
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Statement function '%s' is invalid in procedure pointer assignment at %L"
 msgid "Function result '%s' is invalid as proc-target in procedure pointer assignment at %L"
 msgstr "语句函数‘%s’在%L处的过程指针赋值中是非法的"
 
@@ -44427,13 +43101,11 @@ msgstr "内部过程‘%s’在%L处的过程指针赋值中是非法的"
 
 #: fortran/expr.c:3477
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Internal procedure '%s' is invalid in procedure pointer assignment at %L"
 msgid "Intrinsic '%s' at %L is invalid in procedure pointer assignment"
 msgstr "内部过程‘%s’在%L处的过程指针赋值中是非法的"
 
 #: fortran/expr.c:3485
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Internal procedure '%s' is invalid in procedure pointer assignment at %L"
 msgid "Nonintrinsic elemental procedure '%s' is invalid in procedure pointer assignment at %L"
 msgstr "内部过程‘%s’在%L处的过程指针赋值中是非法的"
 
@@ -44444,7 +43116,6 @@ msgstr "%L处过程指针赋值不匹配:调用约定不匹配"
 
 #: fortran/expr.c:3564 fortran/expr.c:3571 fortran/resolve.c:2430
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "NOPASS or explicit interface required at %C"
 msgid "Explicit interface required for '%s' at %L: %s"
 msgstr "%C处需要 NOPASS 或显式接口"
 
@@ -44632,31 +43303,26 @@ msgstr "在%L处建立临时数组"
 
 #: fortran/frontend-passes.c:562 fortran/frontend-passes.c:565
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Return value of function '%s' at %L not set"
 msgid "Removing call to function '%s' at %L"
 msgstr "%2$L处函数‘%1$s’的返回值没有设置"
 
 #: fortran/frontend-passes.c:1668
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Variable '%s' at %C cannot be redefined inside loop beginning at %L"
 msgid "Variable '%s' at %L set to undefined value inside loop  beginning at %L as INTENT(OUT) argument to subroutine '%s'"
 msgstr "变量‘%s’(位于 %C)不能在从 %L 开始的循环的内部重定义"
 
 #: fortran/frontend-passes.c:1674
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Variable '%s' at %C cannot be redefined inside loop beginning at %L"
 msgid "Variable '%s' at %L not definable inside loop beginning at %L as INTENT(INOUT) argument to subroutine '%s'"
 msgstr "变量‘%s’(位于 %C)不能在从 %L 开始的循环的内部重定义"
 
 #: fortran/frontend-passes.c:1738
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Variable '%s' at %C cannot be redefined inside loop beginning at %L"
 msgid "Variable '%s' at %L set to undefined value inside loop beginning at %L as INTENT(OUT) argument to function '%s'"
 msgstr "变量‘%s’(位于 %C)不能在从 %L 开始的循环的内部重定义"
 
 #: fortran/frontend-passes.c:1744
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Variable '%s' at %C cannot be redefined inside loop beginning at %L"
 msgid "Variable '%s' at %L not definable inside loop beginning at %L as INTENT(INOUT) argument to function '%s'"
 msgstr "变量‘%s’(位于 %C)不能在从 %L 开始的循环的内部重定义"
 
@@ -44687,7 +43353,6 @@ msgstr "哑过程‘%s’在%C处不能有泛型接口"
 
 #: fortran/interface.c:254
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: ABSTRACT INTERFACE at %C"
 msgid "ABSTRACT INTERFACE at %C"
 msgstr "Fortran 2003:%C处的 ABSTRACT INTERFACE"
 
@@ -44803,7 +43468,6 @@ msgstr ""
 
 #: fortran/interface.c:1590
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Cray pointee '%s' in %s clause at %L"
 msgid "Internal procedure '%s' in %s at %L"
 msgstr "%3$L处 %2$s 分句中 的Cray 指针目标‘%1$s’"
 
@@ -44824,7 +43488,6 @@ msgstr "%2$L处的‘%1$s’并非一个模块过程"
 
 #: fortran/interface.c:1893
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Assumed shape array at %L must be a dummy argument"
 msgid "The assumed-rank array at %L requires that the dummy argument '%s' has assumed-rank"
 msgstr "%L处假定外形的数组必须是一个虚参"
 
@@ -44865,7 +43528,6 @@ msgstr "%2$L处实参‘%1$s’类型不匹配;将 %3$s 传递给 %4$s"
 
 #: fortran/interface.c:2007
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Assumed-shape actual argument at %L is incompatible with the non-assumed-shape dummy argument '%s' due to VOLATILE attribute"
 msgid "Assumed-type actual argument at %L requires that dummy argument '%s' is of assumed type"
 msgstr "%L处假定外形的实参由于 VOLATILE 属性而与非假定外形虚参‘%s’不兼容"
 
@@ -45051,7 +43713,6 @@ msgstr ""
 
 #: fortran/interface.c:2843
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Actual argument for '%s' must be a pointer at %L"
 msgid "Actual CLASS array argument for '%s' must be a full array at %L"
 msgstr "‘%s’的实参在%L处必须是一个指针"
 
@@ -45142,7 +43803,6 @@ msgstr "%2$L处过程‘%1$s’的关键字参数要求显式的接口"
 
 #: fortran/interface.c:3298
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Symbol '%s' at %L already has an explicit interface"
 msgid "Assumed-type argument %s at %L requires an explicit interface"
 msgstr "符号‘%s’在%L处已经有了显式接口"
 
@@ -45158,7 +43818,6 @@ msgstr ""
 
 #: fortran/interface.c:3328
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Keyword argument requires explicit interface for procedure '%s' at %L"
 msgid "Assumed-rank argument requires an explicit interface at %L"
 msgstr "%2$L处过程‘%1$s’的关键字参数要求显式的接口"
 
@@ -45179,7 +43838,6 @@ msgstr ""
 
 #: fortran/interface.c:3902
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Entity '%s' at %C is already present in the interface"
 msgid "Entity '%s' at %L is already present in the interface"
 msgstr "%2$C处实体‘%1$s’已经出现在接口中"
 
@@ -45225,7 +43883,6 @@ msgstr "%2$L处的‘%1$s’覆盖了一个 FUNCTION 因此也必须是 FUNCTION
 
 #: fortran/interface.c:4184
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Interface mismatch in dummy procedure '%s' at %L: %s"
 msgid "Result mismatch for the overriding procedure '%s' at %L: %s"
 msgstr "哑过程‘%s’接口在%L处不匹配:%s"
 
@@ -45241,7 +43898,6 @@ msgstr "%3$L处‘%2$s’的虚参‘%1$s’应该命名为‘%4$s’以匹配
 
 #: fortran/interface.c:4236
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Interface mismatch in dummy procedure '%s' at %L: %s"
 msgid "Argument mismatch for the overriding procedure '%s' at %L: %s"
 msgstr "哑过程‘%s’接口在%L处不匹配:%s"
 
@@ -45267,31 +43923,26 @@ msgstr "%2$L处的‘%1$s’的传递对象虚参必须与被覆盖的过程传
 
 #: fortran/intrinsic.c:196
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "NULL pointer at %L is not permitted as actual argument of '%s' intrinsic function"
 msgid "Variable with NO_ARG_CHECK attribute at %L is only permitted as argument to the intrinsic functions C_LOC and PRESENT"
 msgstr "%L 的 NULL 指针不能用作内建函数‘%s’的实参"
 
 #: fortran/intrinsic.c:210
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "NULL pointer at %L is not permitted as actual argument of '%s' intrinsic function"
 msgid "Assumed-type argument at %L is not permitted as actual argument to the intrinsic %s"
 msgstr "%L 的 NULL 指针不能用作内建函数‘%s’的实参"
 
 #: fortran/intrinsic.c:217
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "NULL pointer at %L is not permitted as actual argument of '%s' intrinsic function"
 msgid "Assumed-type argument at %L is only permitted as first actual argument to the intrinsic %s"
 msgstr "%L 的 NULL 指针不能用作内建函数‘%s’的实参"
 
 #: fortran/intrinsic.c:224
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "NULL pointer at %L is not permitted as actual argument of '%s' intrinsic function"
 msgid "Assumed-rank argument at %L is only permitted as actual argument to intrinsic inquiry functions"
 msgstr "%L 的 NULL 指针不能用作内建函数‘%s’的实参"
 
 #: fortran/intrinsic.c:231
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "NULL pointer at %L is not permitted as actual argument of '%s' intrinsic function"
 msgid "Assumed-rank argument at %L is only permitted as first actual argument to the intrinsic inquiry function %s"
 msgstr "%L 的 NULL 指针不能用作内建函数‘%s’的实参"
 
@@ -45342,19 +43993,16 @@ msgstr "%3$L处使用了内建的‘%1$s’(是 %2$s)"
 
 #: fortran/intrinsic.c:4255
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: Function '%s' as initialization expression at %L"
 msgid "Function '%s' as initialization expression at %L"
 msgstr "Fortran 2003:函数‘%s’在%L处用作初始化表达式"
 
 #: fortran/intrinsic.c:4331
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: Elemental function as initialization expression with non-integer/non-character arguments at %L"
 msgid "Elemental function as initialization expression with non-integer/non-character arguments at %L"
 msgstr "Fortran 2003:作为初始表达式的基本函数在%L处使用了非整数或非字符的参数"
 
 #: fortran/intrinsic.c:4402
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Subroutine call to intrinsic '%s' at %L is not PURE"
 msgid "Subroutine call to intrinsic '%s' in DO CONCURRENT block at %L is not PURE"
 msgstr "在%2$L处调用内建‘%1$s’的子例程不是 PURE"
 
@@ -45395,25 +44043,21 @@ msgstr "扩展:%C处格式中的制表符"
 
 #: fortran/io.c:455
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: DP format specifier not allowed at %C"
 msgid "DP format specifier not allowed at %C"
 msgstr "Fortran 2003:不允许在%C处使用 DP 格式限定符"
 
 #: fortran/io.c:462
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: DC format specifier not allowed at %C"
 msgid "DC format specifier not allowed at %C"
 msgstr "Fortran 2003:不允许在%C处使用 DC 格式限定符"
 
 #: fortran/io.c:651
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Extension: X descriptor requires leading space count at %L"
 msgid "X descriptor requires leading space count at %L"
 msgstr "扩展:X 描述符在%L需要前导空格数量"
 
 #: fortran/io.c:680
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Extension: $ descriptor at %L"
 msgid "$ descriptor at %L"
 msgstr "扩展:%L处的 $ 描述符"
 
@@ -45429,7 +44073,6 @@ msgstr "扩展:%L处的 L 描述符后缺少正的宽度"
 
 #: fortran/io.c:826
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2008: 'G0' in format at %L"
 msgid "'G0' in format at %L"
 msgstr "Fortran 2008:%L处格式中的‘G0’"
 
@@ -45455,7 +44098,6 @@ msgstr "%L处的 H 格式限定符已在 Fortran 95 中被删除"
 
 #: fortran/io.c:1059 fortran/io.c:1121
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Extension: Missing comma at %L"
 msgid "Missing comma at %L"
 msgstr "扩展:%L处缺少逗号"
 
@@ -45511,13 +44153,11 @@ msgstr "%L处 FORMAT 标记中的常量表达式默认类型必须为 CHARACTER"
 
 #: fortran/io.c:1399
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "FORMAT tag at %L must be of type CHARACTER or INTEGER"
 msgid "FORMAT tag at %L must be of type default-kind CHARACTER or of INTEGER"
 msgstr "%L处 FORMAT 标记必须具有类型 CHARACTER 或 INTEGER"
 
 #: fortran/io.c:1405
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Deleted feature: ASSIGNED variable in FORMAT tag at %L"
 msgid "ASSIGNED variable in FORMAT tag at %L"
 msgstr "已删除的特性:%L处 FORMAT 标记中有 ASSIGNED 变量"
 
@@ -45533,7 +44173,6 @@ msgstr "%2$L处的 FORMAT 标记中的标量‘%1$s’不是一个 ASSIGNED 变
 
 #: fortran/io.c:1429
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Extension: Non-character in FORMAT tag at %L"
 msgid "Non-character in FORMAT tag at %L"
 msgstr "扩展:%L处的 FORMAT 标记中有非字符"
 
@@ -45559,7 +44198,6 @@ msgstr "%s 标记在%L处必须具有类型 %s"
 
 #: fortran/io.c:1482
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Concat operator at %L must concatenate strings of the same kind"
 msgid "%s tag at %L must be a character string of default kind"
 msgstr "%L处的毗连运算符必须毗连同一种别的字符串"
 
@@ -45570,7 +44208,6 @@ msgstr "%s 标记在%L处必须是标量"
 
 #: fortran/io.c:1495
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: IOMSG tag at %L"
 msgid "IOMSG tag at %L"
 msgstr "Fortran 2003:%L处的 IOMSG 标记"
 
@@ -45586,13 +44223,11 @@ msgstr "Fortran 95 在%2$L处的 %1$s 标记中需要默认的 INTEGER"
 
 #: fortran/io.c:1516
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "UNIT not specified at %L"
 msgid "NEWUNIT specifier at %L"
 msgstr "%L没有指定 UNIT"
 
 #: fortran/io.c:1534
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Extension: CONVERT tag at %L"
 msgid "CONVERT tag at %L"
 msgstr "扩展:%L处的 CONVERT 标记"
 
@@ -45603,7 +44238,6 @@ msgstr "Fortran 2003:%3$C 处 %2$s 语句中的 %1$s 限定符值为‘%4$s’
 
 #: fortran/io.c:1727 fortran/io.c:1754
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "%s specifier in %s statement at %C has invalid value '%s'"
 msgid "%s specifier in %s statement at %C has value '%s'"
 msgstr "为%3$C处 %2$s 语句中 %1$s 指定了非法的值‘%4$s’"
 
@@ -45639,37 +44273,31 @@ msgstr "%L处的 INQUIRE 语句需要 FILE 或 UNIT 限定符"
 
 #: fortran/io.c:1889
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: ASYNCHRONOUS= at %C not allowed in Fortran 95"
 msgid "ASYNCHRONOUS= at %C not allowed in Fortran 95"
 msgstr "Fortran 2003:%C处的 ASYNCHRONOUS= 不允许用在 Fortran 95 中"
 
 #: fortran/io.c:1907 fortran/io.c:3350
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: BLANK= at %C not allowed in Fortran 95"
 msgid "BLANK= at %C not allowed in Fortran 95"
 msgstr "Fortran 2003:%C处的 BLANK= 不允许用在 Fortran 95 中"
 
 #: fortran/io.c:1925 fortran/io.c:3329
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: DECIMAL= at %C not allowed in Fortran 95"
 msgid "DECIMAL= at %C not allowed in Fortran 95"
 msgstr "Fortran 2003:%C处的 DECIMAL= 不允许用在 Fortran 95 中"
 
 #: fortran/io.c:1957
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: ENCODING= at %C not allowed in Fortran 95"
 msgid "ENCODING= at %C not allowed in Fortran 95"
 msgstr "Fortran 2003:%C处的 ENCODING= 不允许用在 Fortran 95 中"
 
 #: fortran/io.c:2008 fortran/io.c:3392
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: ROUND= at %C not allowed in Fortran 95"
 msgid "ROUND= at %C not allowed in Fortran 95"
 msgstr "Fortran 2003:%C处的 ROUND= 不允许用在 Fortran 95 中"
 
 #: fortran/io.c:2028
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: SIGN= at %C not allowed in Fortran 95"
 msgid "SIGN= at %C not allowed in Fortran 95"
 msgstr "Fortran 2003:%C处的 SIGN= 不允许用在 Fortran 95 中"
 
@@ -45680,7 +44308,6 @@ msgstr "CLOSE 语句不允许出现在%C处的 PURE 过程中"
 
 #: fortran/io.c:2301
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "ASSIGNED GOTO statement at %L requires an INTEGER variable"
 msgid "CLOSE statement at %L requires a UNIT number"
 msgstr "ASSIGNED GOTO 语句在%L处需要一个 INTEGER 变量"
 
@@ -45701,7 +44328,6 @@ msgstr "%L处的语句中 UNIT 数必须为非负的数"
 
 #: fortran/io.c:2474
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: FLUSH statement at %C"
 msgid "FLUSH statement at %C"
 msgstr "Fortran 2003:%C处的 FLUSH 语句"
 
@@ -45767,7 +44393,6 @@ msgstr ""
 
 #: fortran/io.c:2904
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Extension: Comma before i/o item list at %L"
 msgid "Comma before i/o item list at %L"
 msgstr "扩展:%L处 i/o 项目列表前的逗号"
 
@@ -45814,7 +44439,6 @@ msgstr "%s 语句在%C处语法错误"
 
 #: fortran/io.c:3246
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: Internal file at %L with namelist"
 msgid "Internal file at %L with namelist"
 msgstr "Fortran 2003:%L处内部文件有名字列表"
 
@@ -45825,13 +44449,11 @@ msgstr "必须为%L处的 ASYNCHRONOUS= 指定一个初始化表达式"
 
 #: fortran/io.c:3371
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: PAD= at %C not allowed in Fortran 95"
 msgid "PAD= at %C not allowed in Fortran 95"
 msgstr "Fortran 2003:%C处的 PAD= 不允许用在 Fortran 95 中"
 
 #: fortran/io.c:3437
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: DELIM= at %C not allowed in Fortran 95"
 msgid "DELIM= at %C not allowed in Fortran 95"
 msgstr "Fortran 2003:%C处的 DELIM= 不允许用在 Fortran 95 中"
 
@@ -45877,7 +44499,6 @@ msgstr "%L处的 INQUIRE 语句需要带有 ID= 指定的 PENDING="
 
 #: fortran/io.c:4188
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: WAIT at %C not allowed in Fortran 95"
 msgid "WAIT at %C not allowed in Fortran 95"
 msgstr "Fortran 2003:%C处的 WAIT 不允许用在 Fortran 95 中"
 
@@ -45933,7 +44554,6 @@ msgstr "%C 的名字太长"
 
 #: fortran/match.c:560
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Invalid character '$' at %C. Use -fdollar-ok to allow it as an extension"
 msgid "Invalid character '$' at %L. Use -fdollar-ok to allow it as an extension"
 msgstr "%C处无效的字符‘$’。使用 -fdollar-ok 以允许它作为一个扩展"
 
@@ -45974,7 +44594,6 @@ msgstr "%C处 PROGRAM 语句格式无效"
 
 #: fortran/match.c:1395 fortran/match.c:1475
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Obsolescent feature: Arithmetic IF statement at %C"
 msgid "Arithmetic IF statement at %C"
 msgstr "已过时的特性:%C处的算术 IF 语句"
 
@@ -46186,7 +44805,6 @@ msgstr "%C处 Cray 指针必须是一个整数"
 
 #: fortran/match.c:2766
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Unexpected CASE statement at %C"
 msgid "PAUSE statement at %C"
 msgstr "%C处非预期的 CASE 语句"
 
@@ -46224,19 +44842,16 @@ msgstr "%L有多余的 ERRMSG 标记"
 
 #: fortran/match.c:2907
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Redundant SOURCE tag found at %L "
 msgid "Redundant ACQUIRED_LOCK tag found at %L "
 msgstr "%L有多余的 SOURCE 标记"
 
 #: fortran/match.c:2972
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Empty IMPLICIT statement at %C"
 msgid "LOCK statement at %C"
 msgstr "%C处 IMPLICIT 语句为空"
 
 #: fortran/match.c:2982
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Empty IMPLICIT statement at %C"
 msgid "UNLOCK statement at %C"
 msgstr "%C处 IMPLICIT 语句为空"
 
@@ -46262,13 +44877,11 @@ msgstr "PRINT 语句不允许出现在%C处的 PURE 过程中"
 
 #: fortran/match.c:3211
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Deleted feature: ASSIGN statement at %C"
 msgid "ASSIGN statement at %C"
 msgstr "已删除的特性:%C处的 ASSIGN 语句"
 
 #: fortran/match.c:3255
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Deleted feature: Assigned GOTO statement at %C"
 msgid "Assigned GOTO statement at %C"
 msgstr "已删除的特性:%C处赋值 GOTO 语句"
 
@@ -46279,7 +44892,6 @@ msgstr "%C处 GOTO 中的语句标号列表不能为空"
 
 #: fortran/match.c:3360
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Obsolescent feature: Computed GOTO at %C"
 msgid "Computed GOTO at %C"
 msgstr "已过时的特性:%C处的计算转移 GOTO 语句"
 
@@ -46290,7 +44902,6 @@ msgstr "%C处指定 TYPE IS 语法错误"
 
 #: fortran/match.c:3442
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: typespec in ALLOCATE at %L"
 msgid "typespec in ALLOCATE at %L"
 msgstr "Fortran 2003:%L处 ALLOCATE 中有 typespec"
 
@@ -46331,13 +44942,11 @@ msgstr "%C处可分配标量的外形规格说明"
 
 #: fortran/match.c:3607
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: ERRMSG tag at %L"
 msgid "ERRMSG tag at %L"
 msgstr "Fortran 2003:%L处的 ERRMSG 标记"
 
 #: fortran/match.c:3630
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: SOURCE tag at %L"
 msgid "SOURCE tag at %L"
 msgstr "Fortran 2003:%L处的 SOURCE 标记"
 
@@ -46353,7 +44962,6 @@ msgstr "%L处的 SOURCE 标记与%L处的类型指定冲突"
 
 #: fortran/match.c:3649
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "SOURCE tag at %L requires only a single entity in the allocation-list"
 msgid "SOURCE tag at %L with more than a single allocate object"
 msgstr "%L处的 SOURCE 标记在分配列表中只需要一个单独的实体"
 
@@ -46409,13 +45017,11 @@ msgstr ""
 
 #: fortran/match.c:3906
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Allocate-object at %C is not a nonprocedure pointer or an allocatable variable"
 msgid "Allocate-object at %C is not a nonprocedure pointer nor an allocatable variable"
 msgstr "%C处的分配对象不是一个非过程指针或可分配的变量"
 
 #: fortran/match.c:3943
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: ERRMSG at %L"
 msgid "ERRMSG at %L"
 msgstr "Fortran 2003:%L处的 ERRMSG"
 
@@ -46436,7 +45042,6 @@ msgstr "%C处的替代 RETURN 语句只允许出现在 SUBROUTINE 中"
 
 #: fortran/match.c:4046
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Extension: RETURN statement in main program at %C"
 msgid "RETURN statement in main program at %C"
 msgstr "扩展:%C处 RETURN 语句出现在主程序中"
 
@@ -46545,7 +45150,6 @@ msgstr "%L处的语句函数是递归的"
 
 #: fortran/match.c:4941
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Statement function at %L is recursive"
 msgid "Statement function at %C"
 msgstr "%L处的语句函数是递归的"
 
@@ -46561,7 +45165,6 @@ msgstr "%2$C处需要 SELECT 构造的块名‘%1$s’"
 
 #: fortran/match.c:5339
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Syntax error in PROTECTED statement at %C"
 msgid "parse error in SELECT TYPE statement at %C"
 msgstr "%C处 PROTECTED 语句语法错误"
 
@@ -46638,7 +45241,6 @@ msgstr "扩展:%C处单目运算符出现在算术运算符之后"
 
 #: fortran/module.c:527
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: module nature in USE statement at %C"
 msgid "module nature in USE statement at %C"
 msgstr "Fortran 2003:%C处的 USE 语句中模块本性"
 
@@ -46654,7 +45256,6 @@ msgstr "%C处在模块本性后需要“::”"
 
 #: fortran/module.c:562
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: \"USE :: module\" at %C"
 msgid "\"USE :: module\" at %C"
 msgstr "Fortran 2003:%C处的“USE :: module”"
 
@@ -46665,7 +45266,6 @@ msgstr "%C处的 USE 语句缺少泛型规格"
 
 #: fortran/module.c:629
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: Renaming operators in USE statements at %C"
 msgid "Renaming operators in USE statements at %C"
 msgstr "Fortran 2003:%C处的 USE 语句中更名运算符"
 
@@ -46701,7 +45301,6 @@ msgstr "名字列表 %s 不能为对 %s 的 USE 关联来更名"
 
 #: fortran/module.c:4494
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Name '%s' at %C is an ambiguous reference to '%s' from current program unit"
 msgid "'%s' of module '%s', imported at %C, is also the name of the current program unit"
 msgstr "%2$C处的名字‘%1$s’是从当前程序单元对‘%3$s’有歧义的引用"
 
@@ -46778,13 +45377,11 @@ msgstr "%2$L处引用的符号‘%1$s’在内建模块 ISO_FORTRAN_ENV 中找
 
 #: fortran/module.c:6307
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: ISO_FORTRAN_ENV intrinsic module at %C"
 msgid "ISO_FORTRAN_ENV intrinsic module at %C"
 msgstr "Fortran 2003:%C 处的 ISO_FORTRAN_ENV 内建模块"
 
 #: fortran/module.c:6319
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: ISO_C_BINDING module at %C"
 msgid "ISO_C_BINDING module at %C"
 msgstr "Fortran 2003:%C处的 ISO_C_BINDING 模块"
 
@@ -46805,7 +45402,6 @@ msgstr "%2$C处对非内建模块‘%1$s’的使用与之前对内建模块名
 
 #: fortran/module.c:6368
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "File '%s' opened at %C is not a GFORTRAN module file"
 msgid "File '%s' opened at %C is not a GNU Fortran module file"
 msgstr "%2$C处打开的文件的‘%1$s’并非一个 GFORTRAN 模块文件"
 
@@ -46906,7 +45502,6 @@ msgstr "%L处的 IF 分句需要一个标量 LOGICAL 表达式"
 
 #: fortran/openmp.c:824
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "IF clause at %L requires a scalar LOGICAL expression"
 msgid "FINAL clause at %L requires a scalar LOGICAL expression"
 msgstr "%L处的 IF 分句需要一个标量 LOGICAL 表达式"
 
@@ -47023,25 +45618,21 @@ msgstr "%L处 !$OMP ATOMIC 语句必须设定一个内建类型的标量值"
 
 #: fortran/openmp.c:1189
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "!$OMP ATOMIC statement must set a scalar variable of intrinsic type at %L"
 msgid "!$OMP ATOMIC READ statement must read from a scalar variable of intrinsic type at %L"
 msgstr "%L处 !$OMP ATOMIC 语句必须设定一个内建类型的标量值"
 
 #: fortran/openmp.c:1194
 #, fuzzy, 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"
 msgid "expr in !$OMP ATOMIC WRITE assignment var = expr must be scalar and cannot reference var at %L"
 msgstr "%L处 !$OMP ATOMIC 赋值“变量 = 变量 运算符 表达式”中的“表达式”必须是标量并且不能引用“变量”"
 
 #: fortran/openmp.c:1216 fortran/openmp.c:1486
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "!$OMP ATOMIC statement must set a scalar variable of intrinsic type at %L"
 msgid "!$OMP ATOMIC CAPTURE capture statement must read from a scalar variable of intrinsic type at %L"
 msgstr "%L处 !$OMP ATOMIC 语句必须设定一个内建类型的标量值"
 
 #: fortran/openmp.c:1231
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "!$OMP ATOMIC statement must set a scalar variable of intrinsic type at %L"
 msgid "!$OMP ATOMIC CAPTURE update statement must set a scalar variable of intrinsic type at %L"
 msgstr "%L处 !$OMP ATOMIC 语句必须设定一个内建类型的标量值"
 
@@ -47052,7 +45643,6 @@ msgstr ""
 
 #: fortran/openmp.c:1282
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "!$OMP ATOMIC assignment operator must be +, *, -, /, .AND., .OR., .EQV. or .NEQV. at %L"
 msgid "!$OMP ATOMIC assignment operator must be binary +, *, -, /, .AND., .OR., .EQV. or .NEQV. at %L"
 msgstr "%L处 !$OMP ATOMIC 赋值运算符必须是 +、*、-、/、.AND.、.OR.、.EQV. 或 .NEQV."
 
@@ -47103,7 +45693,6 @@ msgstr "%L处 !$OMP ATOMIC 赋值的右手边必须有一个运算符或内建
 
 #: fortran/openmp.c:1464
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "!$OMP ATOMIC statement must set a scalar variable of intrinsic type at %L"
 msgid "!$OMP ATOMIC CAPTURE capture statement must set a scalar variable of intrinsic type at %L"
 msgstr "%L处 !$OMP ATOMIC 语句必须设定一个内建类型的标量值"
 
@@ -47199,7 +45788,6 @@ msgstr "-ffpe-trap 的参数无效:%s"
 
 #: fortran/options.c:564
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Argument to -ffpe-trap is not valid: %s"
 msgid "Argument to -ffpe-summary is not valid: %s"
 msgstr "-ffpe-trap 的参数无效:%s"
 
@@ -47340,25 +45928,21 @@ msgstr "%C处 TYPE 中的组件必须先于 CONTAINS"
 
 #: fortran/parse.c:1987
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003:  Type-bound procedure at %C"
 msgid "Type-bound procedure at %C"
 msgstr "Fortran 2003:%C处的类型限定过程"
 
 #: fortran/parse.c:1995
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Junk after GENERIC binding at %C"
 msgid "GENERIC binding at %C"
 msgstr "%C 处的泛型绑定后有垃圾字符"
 
 #: fortran/parse.c:2003
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003:  FINAL procedure declaration at %C"
 msgid "FINAL procedure declaration at %C"
 msgstr "Fortran 2003:%C处的的 FINAL 过程声明"
 
 #: fortran/parse.c:2015
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2008: Derived type definition at %C with empty CONTAINS section"
 msgid "Derived type definition at %C with empty CONTAINS section"
 msgstr "Fortran 2008:%C的派生类型定义有空的 CONTAINS 节"
 
@@ -47394,7 +45978,6 @@ msgstr "%C处的 FINAL 声明必须在 CONTAINS 内"
 
 #: fortran/parse.c:2119
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: Derived type definition at %C without components"
 msgid "Derived type definition at %C without components"
 msgstr "Fortran 2003:%C处的派生类型定义没有组件"
 
@@ -47420,7 +46003,6 @@ msgstr "%C处重复的 SEQUENCE 语句"
 
 #: fortran/parse.c:2173
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003:  CONTAINS block in derived type definition at %C"
 msgid "CONTAINS block in derived type definition at %C"
 msgstr "Fortran 2003:%C处的派生类型定义中的 CONTAINS 块"
 
@@ -47436,7 +46018,6 @@ msgstr ""
 
 #: fortran/parse.c:2272
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Allocatable component of structure at %C must have a deferred shape"
 msgid "Allocatable component %s at %L of type LOCK_TYPE must have a codimension"
 msgstr "%C处可分配的组件必须有延迟的外形"
 
@@ -47487,7 +46068,6 @@ msgstr "%s 语句不能用在%C处 BLOCK 内"
 
 #: fortran/parse.c:2653
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "%s statement is not allowed inside of BLOCK at %C"
 msgid "%s statement is not allowed inside of BLOCK DATA at %C"
 msgstr "%s 语句不能用在%C处 BLOCK 内"
 
@@ -47568,7 +46148,6 @@ msgstr "%C处 ENDDO 中的语句标号与 DO 标号不匹配"
 
 #: fortran/parse.c:3372
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2008: BLOCK construct at %C"
 msgid "BLOCK construct at %C"
 msgstr "Fortran 2008:%C处的 BLOCK 结构"
 
@@ -47604,7 +46183,6 @@ msgstr "%2$C处的 %1$s 语句不能终止一个不成块的 DO 循环"
 
 #: fortran/parse.c:3863
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "FORMAT statement at %L does not have a statement label"
 msgid "DATA statement at %C after the first executable statement"
 msgstr "%L处 FORMAT 语句没有语句标号"
 
@@ -47620,7 +46198,6 @@ msgstr "非预期的 %s 语句出现在%C处的 CONTAINS 段中"
 
 #: fortran/parse.c:4135
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2008: CONTAINS statement without FUNCTION or SUBROUTINE statement at %C"
 msgid "CONTAINS statement without FUNCTION or SUBROUTINE statement at %C"
 msgstr "Fortran 2008:%C处 CONTAINS 语句没有 FUNCTION 或 SUBROUTINE 语句"
 
@@ -47631,7 +46208,6 @@ msgstr "%C处的 CONTAINS 语句已经在包含的程序单元中"
 
 #: fortran/parse.c:4263
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Global name '%s' at %L is already being used as a %s at %L"
 msgid "Global binding name '%s' at %L is already being used as a %s at %L"
 msgstr "%2$L处的名字‘%1$s’已经在%4$L处被用作 %3$s"
 
@@ -47680,7 +46256,6 @@ msgstr "%C整数相对其种别而言太大。这一检查可用 -fno-range-chec
 
 #: fortran/primary.c:270
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Extension: Hollerith constant at %C"
 msgid "Hollerith constant at %C"
 msgstr "扩展:%C处的荷勒瑞斯常量"
 
@@ -47701,7 +46276,6 @@ msgstr "%L处无效的荷勒瑞斯常量包含一个宽字符"
 
 #: fortran/primary.c:393
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Extension: Hexadecimal constant at %C uses non-standard syntax"
 msgid "Hexadecimal constant at %C uses non-standard syntax"
 msgstr "扩展:%C处的十六进制常量使用了非标准语法"
 
@@ -47717,7 +46291,6 @@ msgstr "%C处的 BOZ 常量中有非法字符"
 
 #: fortran/primary.c:431
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Extension: BOZ constant at %C uses non-standard postfix syntax"
 msgid "BOZ constant at %C uses non-standard postfix syntax"
 msgstr "扩展:%C处的 BOZ 常量使用了非标准的后序语法。"
 
@@ -47728,7 +46301,6 @@ msgstr "%2$C处的整数对其种别 %1$i 来说太大"
 
 #: fortran/primary.c:467
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: BOZ used outside a DATA statement at %C"
 msgid "BOZ used outside a DATA statement at %C"
 msgstr "Fortran 2003:%C处的 BOZ 用在了 DATA 语句之外"
 
@@ -47739,7 +46311,6 @@ msgstr ""
 
 #: fortran/primary.c:561
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Extension: Hollerith constant at %C"
 msgid "Extension: exponent-letter 'q' in real-literal-constant at %C"
 msgstr "扩展:%C处的荷勒瑞斯常量"
 
@@ -47755,13 +46326,11 @@ msgstr "%C处的实数有一个‘d’指数和一个显式的种别"
 
 #: fortran/primary.c:663
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Real number at %C has a 'd' exponent and an explicit kind"
 msgid "Real number at %C has a 'q' exponent and an explicit kind"
 msgstr "%C处的实数有一个‘d’指数和一个显式的种别"
 
 #: fortran/primary.c:677
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Invalid initializer %s in Data statement at %C"
 msgid "Invalid exponent-letter 'q' in real-literal-constant at %C"
 msgstr "%2$C处 DATA 语句初始值设定 %1$s 无效"
 
@@ -47822,7 +46391,6 @@ msgstr "%C处标量 PARAMETER 要求复数常量"
 
 #: fortran/primary.c:1216
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Expected PARAMETER symbol in complex constant at %C"
 msgid "PARAMETER symbol in complex constant at %C"
 msgstr "%C处复数常量中需要 PARAMETER 符号"
 
@@ -47843,7 +46411,6 @@ msgstr "关键字‘%s’在%C处已经出现在当前实参列表中"
 
 #: fortran/primary.c:1645
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Unknown argument list function at %L"
 msgid "argument list function at %C"
 msgstr "%L处参数列表函数未知"
 
@@ -47874,13 +46441,11 @@ msgstr "在 %2$L 处的函数“%1$s”是 INTRINSIC,但不是与一个内建
 
 #: fortran/primary.c:1915
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Symbol '%s' at %L has no IMPLICIT type"
 msgid "Symbol '%s' at %C has no IMPLICIT type"
 msgstr "%2$L处的符号‘%1$s’没有隐式类型"
 
 #: fortran/primary.c:1921
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Unexpected character in variable list at %C"
 msgid "Unexpected '%%' for nonderived-type variable '%s' at %C"
 msgstr "%C处变量列表中有非预期的垃圾字符"
 
@@ -47906,7 +46471,6 @@ msgstr "Fortran 2003:%C处的过程指针组件"
 
 #: fortran/primary.c:2363
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: Structure constructor with missing optional arguments at %C"
 msgid "Structure constructor with missing optional arguments at %C"
 msgstr "Fortran 2003:%C处的结构构造函数丢失可选的参数"
 
@@ -47917,31 +46481,26 @@ msgstr "%2$C处结构构造函数中没有组件‘%1$s’的初始值设定!"
 
 #: fortran/primary.c:2418
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Can't construct ABSTRACT type '%s' at %C"
 msgid "Can't construct ABSTRACT type '%s' at %L"
 msgstr "%2$C处无法构建 ABSTRACT 类型‘%1$s’"
 
 #: fortran/primary.c:2438
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: Structure constructor with named arguments at %C"
 msgid "Structure constructor with named arguments at %C"
 msgstr "Fortran 2003:%C处的结构构造函数有有名的参数"
 
 #: fortran/primary.c:2453
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Component initializer without name after component named %s at %C!"
 msgid "Component initializer without name after component named %s at %L!"
 msgstr "%2$C处名为 %1$s 的组件之后的组件初始值设定没有名字!"
 
 #: fortran/primary.c:2458
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Too many components in structure constructor at %C!"
 msgid "Too many components in structure constructor at %L!"
 msgstr "%C处结构构造函数中组件太多!"
 
 #: fortran/primary.c:2495
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Component '%s' is initialized twice in the structure constructor at %C!"
 msgid "Component '%s' is initialized twice in the structure constructor at %L!"
 msgstr "%2$C处结构构造函数中组件‘%1$s’被初始化两次!"
 
@@ -48012,31 +46571,26 @@ msgstr "%2$L处使用了 ABSTRACT 类型‘%1$s’"
 
 #: fortran/resolve.c:145
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Interface '%s', used by procedure '%s' at %L, is declared in a later PROCEDURE statement"
 msgid "Interface '%s' at %L is declared in a later PROCEDURE statement"
 msgstr "为过程‘%2$s’在%3$L处使用的接口‘%1$s’是在之后的 PROCEDURE 语句中声明的"
 
 #: fortran/resolve.c:158
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Interface '%s' at %C may not be generic"
 msgid "Interface '%s' at %L may not be generic"
 msgstr "%2$C处的接口‘%1$s’不能是泛型"
 
 #: fortran/resolve.c:165
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Interface '%s' at %C may not be a statement function"
 msgid "Interface '%s' at %L may not be a statement function"
 msgstr "%2$C处的接口‘%1$s’不能是个语句函数"
 
 #: fortran/resolve.c:174
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Intrinsic procedure '%s' not allowed in PROCEDURE statement at %C"
 msgid "Intrinsic procedure '%s' not allowed in PROCEDURE statement at %L"
 msgstr "内建过程‘%s’不允许在 %C 的 PROCEDURE 语句中"
 
 #: fortran/resolve.c:180
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Interface '%s' of procedure '%s' at %L must be explicit"
 msgid "Interface '%s' at %L must be explicit"
 msgstr "%3$L处过程‘%2$s’的接口‘%1$s’必须是显式的"
 
@@ -48057,7 +46611,6 @@ msgstr "函数‘%s’中的替代返回限定符在%L处不被允许"
 
 #: fortran/resolve.c:311
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Keyword argument '%s' at %L is not in the procedure"
 msgid "Self-referential argument '%s' at %L is not allowed"
 msgstr "%2$L处关键字实参‘%1$s’不在过程里"
 
@@ -48148,7 +46701,6 @@ msgstr "%2$L处函数‘%1$s’有不匹配的数组规格说明"
 
 #: fortran/resolve.c:788
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Extension: Function %s at %L with entries returning variables of different string lengths"
 msgid "Function %s at %L with entries returning variables of different string lengths"
 msgstr "扩展:%2$L处函数 %1$s 有返回不同字符串长度的变量的表项"
 
@@ -48219,7 +46771,6 @@ msgstr ""
 
 #: fortran/resolve.c:1001
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "COMMON block '%s' at %L is used as PARAMETER at %L"
 msgid "COMMON block '%s' at %L uses the same global identifier as entity at %L"
 msgstr "%2$L处的 COMMON 块‘%1$s’在%3$L处被用作 PARAMETER"
 
@@ -48240,7 +46791,6 @@ msgstr "%2$L处的 COMMON 块‘%1$s’在%3$L处被用作 PARAMETER"
 
 #: fortran/resolve.c:1056
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Variable '%s' at %L cannot have both the POINTER and BIND(C) attributes"
 msgid "COMMON block '%s' at %L can not have the EXTERNAL attribute"
 msgstr "%2$L处变量‘%1$s’不能既有 POINTER 又有 BIND(C) 属性"
 
@@ -48251,31 +46801,26 @@ msgstr "%2$L处的 COMMON 块‘%1$s’也是一个内建过程"
 
 #: fortran/resolve.c:1064
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: COMMON block '%s' at %L that is also a function result"
 msgid "COMMON block '%s' at %L that is also a function result"
 msgstr "Fortran 2003:%2$L处的 COMMON 块‘%1$s’也是一个函数返回值"
 
 #: fortran/resolve.c:1069
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: COMMON block '%s' at %L that is also a global procedure"
 msgid "COMMON block '%s' at %L that is also a global procedure"
 msgstr "Fortran 2003:%2$L处的 COMMON 块‘%1$s’也是一个全局过程"
 
 #: fortran/resolve.c:1152
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "The rank of the element in the derived type constructor at %L does not match that of the component (%d/%d)"
 msgid "The rank of the element in the structure constructor at %L does not match that of the component (%d/%d)"
 msgstr "%L处的派生类型构造函数中元素的秩与该组件(%d/%d)的不匹配"
 
 #: fortran/resolve.c:1173
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "The element in the derived type constructor at %L, for pointer component '%s', is %s but should be %s"
 msgid "The element in the structure constructor at %L, for pointer component '%s', is %s but should be %s"
 msgstr "%L处指针组件‘%s’的派生类型构造函数中的元素是 %s 但应该是 %s"
 
 #: fortran/resolve.c:1258
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "The NULL in the derived type constructor at %L is being applied to component '%s', which is neither a POINTER nor ALLOCATABLE"
 msgid "The NULL in the structure constructor at %L is being applied to component '%s', which is neither a POINTER nor ALLOCATABLE"
 msgstr "%L处派生类型构造函数中的 NULL 被用在既不是一个指针也不是 ALLOCATABLE 的组件‘%s’上"
 
@@ -48286,7 +46831,6 @@ msgstr "%C处结构构造函数中组件太多!"
 
 #: fortran/resolve.c:1308
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "The element in the derived type constructor at %L, for pointer component '%s' should be a POINTER or a TARGET"
 msgid "The element in the structure constructor at %L, for pointer component '%s' should be a POINTER or a TARGET"
 msgstr "%L处指针组件‘%s’的派生类型构造函数中的元素应该是 POINTER 或 TARGET"
 
@@ -48297,7 +46841,6 @@ msgstr "%2$L处‘%1$s’的传递对象虚参不能是 ALLOCATABLE"
 
 #: fortran/resolve.c:1336
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Invalid expression in the derived type constructor for pointer component '%s' at %L in PURE procedure"
 msgid "Invalid expression in the structure constructor for pointer component '%s' at %L in PURE procedure"
 msgstr "%2$L处指针组件‘%1$s’的派生类型构造函数中表达式无效"
 
@@ -48418,7 +46961,6 @@ msgstr "函数不能返回函数"
 
 #: fortran/resolve.c:2442
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Interface mismatch in dummy procedure '%s' at %L: %s"
 msgid "Interface mismatch in global procedure '%s' at %L: %s "
 msgstr "哑过程‘%s’接口在%L处不匹配:%s"
 
@@ -48470,13 +47012,11 @@ msgstr "%2$L处用户定义的非 ELEMENTAL 函数‘%1$s’不容许出现在 W
 
 #: fortran/resolve.c:2990
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "reference to non-PURE function '%s' at %L inside a FORALL %s"
 msgid "Reference to non-PURE function '%s' at %L inside a FORALL %s"
 msgstr "%2$L处对非 PURE 函数‘%1$s’的引用出现在 FORALL %3$s 中"
 
 #: fortran/resolve.c:2997
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "reference to non-PURE function '%s' at %L inside a FORALL %s"
 msgid "Reference to non-PURE function '%s' at %L inside a DO CONCURRENT %s"
 msgstr "%2$L处对非 PURE 函数‘%1$s’的引用出现在 FORALL %3$s 中"
 
@@ -48502,7 +47042,6 @@ msgstr "%2$L处 FORALL 块内对‘%1$s’子例程的调用不是 PURE"
 
 #: fortran/resolve.c:3069
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Subroutine call to '%s' in FORALL block at %L is not PURE"
 msgid "Subroutine call to '%s' in DO CONCURRENT block at %L is not PURE"
 msgstr "%2$L处 FORALL 块内对‘%1$s’子例程的调用不是 PURE"
 
@@ -48628,7 +47167,6 @@ msgstr "%L处数组索引必须具有 INTEGER 类型而不是 %s"
 
 #: fortran/resolve.c:4129
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Extension: REAL array index at %L"
 msgid "REAL array index at %L"
 msgstr "扩展:%L处的 REAL 数组索引"
 
@@ -48704,7 +47242,6 @@ msgstr ""
 
 #: fortran/resolve.c:4766
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Assumed shape array at %L must be a dummy argument"
 msgid "Assumed-type variable %s at %L may only be used as actual argument"
 msgstr "%L处假定外形的数组必须是一个虚参"
 
@@ -48719,7 +47256,6 @@ msgstr ""
 
 #: fortran/resolve.c:4791
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Assumed shape array at %L must be a dummy argument"
 msgid "Assumed-rank variable %s at %L may only be used as actual argument"
 msgstr "%L处假定外形的数组必须是一个虚参"
 
@@ -48825,7 +47361,6 @@ msgstr "%L处的 DO 循环中的步进表达式不能为零"
 
 #: fortran/resolve.c:6292
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "DO loop at %L will be executed zero times"
 msgid "DO loop at %L will be executed zero times (use -Wno-zerotrip to suppress)"
 msgstr "%L处的 DO 循环会被执行零次"
 
@@ -49070,7 +47605,6 @@ msgstr "%2$L处派生类型‘%1$s’必须是‘%3$s’的一个扩展"
 
 #: fortran/resolve.c:7966
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Unexpected use of subroutine name '%s' at %C"
 msgid "Unexpected intrinsic type '%s' at %L"
 msgstr "对子进程名‘%s’非预期的使用,在%C处"
 
@@ -49086,7 +47620,6 @@ msgstr "%L处 SELECT TYPE 语句中有双重的 CLASS IS 块"
 
 #: fortran/resolve.c:8256
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Invalid context for NULL() pointer at %%L"
 msgid "Invalid context for NULL () intrinsic at %L"
 msgstr "%%L处 NULL() 指针上下文无效"
 
@@ -49098,7 +47631,6 @@ msgstr ""
 
 #: fortran/resolve.c:8296
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Data transfer element at %L cannot have POINTER components"
 msgid "Data transfer element at %L cannot have POINTER components unless it is processed by a defined input/output procedure"
 msgstr "%L处数据传输元素不能有 POINTER 组件"
 
@@ -49109,7 +47641,6 @@ msgstr "%L处数据传输元素不能有 POINTER 组件"
 
 #: fortran/resolve.c:8312
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Data transfer element at %L cannot have ALLOCATABLE components"
 msgid "Data transfer element at %L cannot have ALLOCATABLE components unless it is processed by a defined input/output procedure"
 msgstr "%L处数据传输元素不能有 ALLOCATABLE 组件"
 
@@ -49125,7 +47656,6 @@ msgstr "%L处数据传输元素不能是对一个假定大小数组的全引用"
 
 #: fortran/resolve.c:8388
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Stat-variable at %L must be a scalar INTEGER variable"
 msgid "Lock variable at %L must be a scalar of type LOCK_TYPE"
 msgstr "%L处 stat 变量必须是一个标量 INTEGER 变量"
 
@@ -49251,7 +47781,6 @@ msgstr ""
 
 #: fortran/resolve.c:9196
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Assignment to a FORALL index variable at %L"
 msgid "Assignment to an allocatable polymorphic variable at %L"
 msgstr "%L处向 FORALL 索引变量赋值"
 
@@ -49318,7 +47847,6 @@ msgstr "%L处的 FORMALL 掩码子句需要一个 LOGICAL 表达式"
 
 #: fortran/resolve.c:10180
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Binding label '%s' at %L collides with the global entity '%s' at %L"
 msgid "Variable %s with binding label %s at %L uses the same global identifier as entity at %L"
 msgstr "%2$L处的绑定标号‘%1$s’与 %4$L 处的全局实体‘%3$s’冲突"
 
@@ -49334,7 +47862,6 @@ msgstr ""
 #. multiple checks for the same procedure.
 #: fortran/resolve.c:10210
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Binding label '%s' at %L collides with the global entity '%s' at %L"
 msgid "Procedure %s with binding label %s at %L uses the same global identifier as entity at %L"
 msgstr "%2$L处的绑定标号‘%1$s’与 %4$L 处的全局实体‘%3$s’冲突"
 
@@ -49350,7 +47877,6 @@ msgstr "%L处字符串太长"
 
 #: fortran/resolve.c:10628
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Allocatable array '%s' at %L must have a deferred shape"
 msgid "Allocatable array '%s' at %L must have a deferred shape or assumed rank"
 msgstr "可分配的数组‘%s’在%L处必须有延迟的外形"
 
@@ -49361,7 +47887,6 @@ msgstr "%2$L处标量对象‘%1$s’不能为 ALLOCATABLE"
 
 #: fortran/resolve.c:10640
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Array pointer '%s' at %L must have a deferred shape"
 msgid "Array pointer '%s' at %L must have a deferred shape or assumed rank"
 msgstr "数组指针‘%s’在%L处必须有延迟的外形"
 
@@ -49387,7 +47912,6 @@ msgstr "‘%s’在%L处不能是主机相关的,因为它被在%L处声明的
 
 #: fortran/resolve.c:10730
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2008: Implied SAVE for module variable '%s' at %L, needed due to the default initialization"
 msgid "Implied SAVE for module variable '%s' at %L, needed due to the default initialization"
 msgstr "Fortran 2008:%2$L处模块变量‘%1$s’隐含使用了 SAVE,因为默认初始化有此需求"
 
@@ -49415,7 +47939,6 @@ msgstr "变量‘%s’在%L处上下文中字符长度必须为常量"
 
 #: fortran/resolve.c:10830
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "'%s' at %L must have constant character length in this context"
 msgid "COMMON variable '%s' at %L must have constant character length"
 msgstr "变量‘%s’在%L处上下文中字符长度必须为常量"
 
@@ -49456,13 +47979,11 @@ msgstr "%2$L处有字符值的语句函数‘%1$s’必须有常量长度"
 
 #: fortran/resolve.c:10958
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: '%s' is of a PRIVATE type and cannot be a dummy argument of '%s', which is PUBLIC at %L"
 msgid "'%s' is of a PRIVATE type and cannot be a dummy argument of '%s', which is PUBLIC at %L"
 msgstr "Fortran 2003:%3$L处‘%1$s’是 PRIVATE 类型因而不能是 PUBLIC 类型‘%2$s’的虚参"
 
 #: fortran/resolve.c:10980 fortran/resolve.c:11004
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: Procedure '%s' in PUBLIC interface '%s' at %L takes dummy arguments of '%s' which is PRIVATE"
 msgid "Procedure '%s' in PUBLIC interface '%s' at %L takes dummy arguments of '%s' which is PRIVATE"
 msgstr "Fortran 2003: %3$L处 PUBLIC 接口‘%2$s’中的过程‘%1$s’有 PRIVATE 的虚参‘%4$s’"
 
@@ -49508,19 +48029,16 @@ msgstr "CHARACTER(*) 函数‘%s’在%L处不能是递归的"
 
 #: fortran/resolve.c:11093
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "CHARACTER(*) function '%s' at %L cannot be pure"
 msgid "CHARACTER(*) function '%s' at %L"
 msgstr "CHARACTER(*) 函数‘%s’在%L处不能为纯函数"
 
 #: fortran/resolve.c:11102
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Procedure pointer component '%s' with PASS at %L must have at least one argument"
 msgid "Procedure pointer '%s' at %L shall not be elemental"
 msgstr "%2$L处的具有 PASS 的过程指针组件‘%1$s’必须至少有一个实参"
 
 #: fortran/resolve.c:11108
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Dummy procedure '%s' at %C cannot have a generic interface"
 msgid "Dummy procedure '%s' at %L shall not be elemental"
 msgstr "哑过程‘%s’在%C处不能有泛型接口"
 
@@ -49766,7 +48284,6 @@ msgstr ""
 
 #: fortran/resolve.c:12356
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: the component '%s' is a PRIVATE type and cannot be a component of '%s', which is PUBLIC at %L"
 msgid "the component '%s' is a PRIVATE type and cannot be a component of '%s', which is PUBLIC at %L"
 msgstr "Fortran 2003:%3$L处组合‘%1$s’是一个 PRIVATE 类型,因此不能是 PUBLIC‘%2$s’的组合"
 
@@ -49792,7 +48309,6 @@ msgstr "%2$L处具有 CLASS 的组件‘%1$s’必须是可分配的或指针"
 
 #: fortran/resolve.c:12484
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Component '%s' of '%s' at %L has the same name as an inherited type-bound procedure"
 msgid "Generic name '%s' of function '%s' at %L being the same name as derived type at %L"
 msgstr "%3$L处‘%2$s’的组件‘%1$s’与一个继承的类型限定过程同名"
 
@@ -49895,7 +48411,6 @@ msgstr "%L处假定外形的数组必须是一个虚参"
 
 #: fortran/resolve.c:12900
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Assumed shape array at %L must be a dummy argument"
 msgid "Assumed-rank array at %L must be a dummy argument"
 msgstr "%L处假定外形的数组必须是一个虚参"
 
@@ -49941,13 +48456,11 @@ msgstr ""
 
 #: fortran/resolve.c:12990
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Variable '%s' at %L cannot have both the ALLOCATABLE and BIND(C) attributes"
 msgid "Variable %s at %L with NO_ARG_CHECK attribute may not have the ALLOCATABLE, CODIMENSION, POINTER or VALUE attribute"
 msgstr "%2$L处变量‘%1$s’不能既有 ALLOCATABLE 又有 BIND(C) 属性"
 
 #: fortran/resolve.c:12998
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Variable '%s' at %L cannot have both the POINTER and BIND(C) attributes"
 msgid "Variable %s at %L with NO_ARG_CHECK attribute may not have the INTENT(OUT) attribute"
 msgstr "%2$L处变量‘%1$s’不能既有 POINTER 又有 BIND(C) 属性"
 
@@ -49958,19 +48471,16 @@ msgstr ""
 
 #: fortran/resolve.c:13025
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Assumed shape array '%s' at %L is not permitted in an initialization expression"
 msgid "Assumed type of variable %s at %L is only permitted for dummy variables"
 msgstr "%2$L处假定外形数组‘%1$s’不能用在初始化表达式中"
 
 #: fortran/resolve.c:13032
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Variable '%s' at %L cannot have both the ALLOCATABLE and BIND(C) attributes"
 msgid "Assumed-type variable %s at %L may not have the ALLOCATABLE, CODIMENSION, POINTER or VALUE attribute"
 msgstr "%2$L处变量‘%1$s’不能既有 ALLOCATABLE 又有 BIND(C) 属性"
 
 #: fortran/resolve.c:13039
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Variable '%s' at %L cannot have both the POINTER and BIND(C) attributes"
 msgid "Assumed-type variable %s at %L may not have the INTENT(OUT) attribute"
 msgstr "%2$L处变量‘%1$s’不能既有 POINTER 又有 BIND(C) 属性"
 
@@ -49986,7 +48496,6 @@ msgstr "%2$L处变量‘%1$s’不能是 BIND(C) 因为它既不是一个 COMMON
 
 #: fortran/resolve.c:13151
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: PUBLIC %s '%s' at %L of PRIVATE derived type '%s'"
 msgid "PUBLIC %s '%s' at %L of PRIVATE derived type '%s'"
 msgstr "Fortran 2003:%3$L处 PUBLIC %1$s‘%2$s’具有 PRIVATE 派生类型‘%4$s’"
 
@@ -50002,7 +48511,6 @@ msgstr "%2$L处INTENT(OUT) 虚参‘%1$s’是 ASSUMED SIZE,所以不能有一
 
 #: fortran/resolve.c:13196
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Dummy argument '%s' at %L cannot be INTENT(OUT)"
 msgid "Dummy argument '%s' at %L of LOCK_TYPE shall not be INTENT(OUT)"
 msgstr "%2$L处的‘%1$s’虚参不能是 INTENT(OUT)"
 
@@ -50178,7 +48686,6 @@ msgstr "%L 的子字符串长度为零"
 
 #: fortran/resolve.c:14338
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: PUBLIC function '%s' at %L of PRIVATE type '%s'"
 msgid "PUBLIC function '%s' at %L of PRIVATE type '%s'"
 msgstr "Fortran 2003:%2$L处 PRIVATE 类型‘%3$s’的 PUBLIC 函数‘%1$s’"
 
@@ -50224,19 +48731,16 @@ msgstr "%2$L处 PURE 过程中包含的过程‘%1$s’必须也是 PURE"
 
 #: fortran/scanner.c:327
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "ignoring duplicate directory \"%s\"\n"
 msgid "Include directory \"%s\": %s"
 msgstr "忽略重复的目录“%s”\n"
 
 #: fortran/scanner.c:333
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "ignoring nonexistent directory \"%s\"\n"
 msgid "Nonexistent include directory \"%s\""
 msgstr "忽略不存在的目录“%s”\n"
 
 #: fortran/scanner.c:339
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "%qD is not a type"
 msgid "\"%s\" is not a directory"
 msgstr "%qD不是一个类型"
 
@@ -50536,7 +49040,6 @@ msgstr "%2$L 处的对象“%1$s”对于成分的默认初始化必须有 SAVE
 
 #: fortran/symbol.c:474
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: Procedure pointer at %C"
 msgid "Procedure pointer at %C"
 msgstr "Fortran 2003:%C处的过程指针"
 
@@ -50562,13 +49065,11 @@ msgstr "%s 属性与 %s 属性冲突,在‘%s’中,位于 %L"
 
 #: fortran/symbol.c:767
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "%s attribute conflicts with %s attribute at %L"
 msgid "%s attribute with %s attribute at %L"
 msgstr "%s 属性与 %s 属性在%L处冲突"
 
 #: fortran/symbol.c:773
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "%s attribute conflicts with %s attribute in '%s' at %L"
 msgid "%s attribute with %s attribute in '%s' at %L"
 msgstr "%s 属性与 %s 属性冲突,在‘%s’中,位于 %L"
 
@@ -50664,7 +49165,6 @@ msgstr "%L处指定了重复的 BIND 属性"
 
 #: fortran/symbol.c:1590
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: BIND(C) at %L"
 msgid "BIND(C) at %L"
 msgstr "Fortran 2003:%L处的 BIND(C)"
 
@@ -50675,7 +49175,6 @@ msgstr "%L处指定了重复的 EXTENDS 属性"
 
 #: fortran/symbol.c:1610
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Fortran 2003: EXTENDS at %L"
 msgid "EXTENDS at %L"
 msgstr "Fortran 2003:%L处的 EXTENDS"
 
@@ -50771,7 +49270,6 @@ msgstr "%2$C处的标号 %1$d 先前用作分支目标"
 
 #: fortran/symbol.c:2270
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Expected terminating name at %C"
 msgid "Shared DO termination label %d at %C"
 msgstr "%C处需要结束名"
 
@@ -50868,7 +49366,6 @@ msgstr "走过错误的表达式类型(%d)"
 
 #: fortran/trans-common.c:400
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Named COMMON block '%s' at %L shall be of the same size"
 msgid "Named COMMON block '%s' at %L shall be of the same size as elsewhere (%lu vs %lu bytes)"
 msgstr "%2$L处的 COMMON 块‘%1$s’应该有同样的大小"
 
@@ -50920,13 +49417,11 @@ msgstr "%2$L处的 COMMON‘%1$s’并不存在"
 
 #: fortran/trans-common.c:1167
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "COMMON '%s' at %L requires %d bytes of padding at start; reorder elements or use -fno-align-commons"
 msgid "COMMON '%s' at %L requires %d bytes of padding; reorder elements or use -fno-align-commons"
 msgstr "%2$L处的 COMMON‘%1$s’需要 %3$d 字节填充在开始处;重排序元素或使用 -fno-align-commons"
 
 #: fortran/trans-common.c:1171
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "COMMON at %L requires %d bytes of padding at start; reorder elements or use -fno-align-commons"
 msgid "COMMON at %L requires %d bytes of padding; reorder elements or use -fno-align-commons"
 msgstr "%L处的 COMMON 需要 %d 字节填充在开始处;重排序元素或使用 -fno-align-commons"
 
@@ -50967,7 +49462,6 @@ msgstr "模块变量 %s 的后端声明已存在"
 
 #: fortran/trans-decl.c:4257
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Unused variable '%s' declared at %L"
 msgid "Unused PRIVATE module variable '%s' declared at %L"
 msgstr "%2$L处声明了未使用的变量‘%1$s’"
 
@@ -50988,7 +49482,6 @@ msgstr "%2$L处声明了未使用的虚参‘%1$s’"
 
 #: fortran/trans-decl.c:4837
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Unused variable '%s' declared at %L"
 msgid "Unused module variable '%s' which has been explicitly imported at %L"
 msgstr "%2$L处声明了未使用的变量‘%1$s’"
 
@@ -51004,7 +49497,6 @@ msgstr "%2$L处声明了未使用的参数‘%1$s’"
 
 #: fortran/trans-decl.c:4896
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Unused parameter '%s' declared at %L"
 msgid "Unused parameter '%s' which has been explicitly imported at %L"
 msgstr "%2$L处声明了未使用的参数‘%1$s’"
 
@@ -51066,37 +49558,31 @@ msgstr ""
 
 #: fortran/trans-types.c:496
 #, fuzzy, gcc-internal-format
-#| msgid "integer kind=8 not available for -fdefault-integer-8 option"
 msgid "INTEGER(KIND=8) is not available for -fdefault-integer-8 option"
 msgstr "integer kind=8 在指定了 -fdefault-integer-8 选项时不可用"
 
 #: fortran/trans-types.c:504
 #, fuzzy, gcc-internal-format
-#| msgid "integer kind=8 not available for -fdefault-integer-8 option"
 msgid "INTEGER(KIND=8) is not available for -finteger-4-integer-8 option"
 msgstr "integer kind=8 在指定了 -fdefault-integer-8 选项时不可用"
 
 #: fortran/trans-types.c:522
 #, fuzzy, gcc-internal-format
-#| msgid "real kind=8 not available for -fdefault-real-8 option"
 msgid "REAL(KIND=8) is not available for -fdefault-real-8 option"
 msgstr "real kind=8 在指定了 -fdefault-real-8 选项时不可用"
 
 #: fortran/trans-types.c:529
 #, fuzzy, gcc-internal-format
-#| msgid "real kind=8 not available for -fdefault-real-8 option"
 msgid "REAL(KIND=8) is not available for -freal-4-real-8 option"
 msgstr "real kind=8 在指定了 -fdefault-real-8 选项时不可用"
 
 #: fortran/trans-types.c:536
 #, fuzzy, gcc-internal-format
-#| msgid "real kind=8 not available for -fdefault-real-8 option"
 msgid "REAL(KIND=10) is not available for -freal-4-real-10 option"
 msgstr "real kind=8 在指定了 -fdefault-real-8 选项时不可用"
 
 #: fortran/trans-types.c:543
 #, fuzzy, gcc-internal-format
-#| msgid "real kind=8 not available for -fdefault-real-8 option"
 msgid "REAL(KIND=16) is not available for -freal-4-real-16 option"
 msgstr "real kind=8 在指定了 -fdefault-real-8 选项时不可用"
 
@@ -51107,25 +49593,21 @@ msgstr "使用 -fdefault-double-8 时需要 -fdefault-real-8"
 
 #: fortran/trans-types.c:566
 #, fuzzy, gcc-internal-format
-#| msgid "real kind=8 not available for -fdefault-real-8 option"
 msgid "REAL(KIND=4) is not available for -freal-8-real-4 option"
 msgstr "real kind=8 在指定了 -fdefault-real-8 选项时不可用"
 
 #: fortran/trans-types.c:573
 #, fuzzy, gcc-internal-format
-#| msgid "real kind=8 not available for -fdefault-real-8 option"
 msgid "REAL(KIND=10) is not available for -freal-8-real-10 option"
 msgstr "real kind=8 在指定了 -fdefault-real-8 选项时不可用"
 
 #: fortran/trans-types.c:580
 #, fuzzy, gcc-internal-format
-#| msgid "real kind=8 not available for -fdefault-real-8 option"
 msgid "REAL(KIND=10) is not available for -freal-8-real-16 option"
 msgstr "real kind=8 在指定了 -fdefault-real-8 选项时不可用"
 
 #: fortran/trans-types.c:1458
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Array element size too big"
 msgid "Array element size too big at %C"
 msgstr "数组元素太大"
 
@@ -51272,7 +49754,6 @@ msgstr "不会执行到的字节码,从 %d 直到方法末尾"
 #. duplicate code from LOAD macro
 #: java/expr.c:3549
 #, fuzzy, gcc-internal-format
-#| msgid "unrecogized wide sub-instruction"
 msgid "unrecognized wide sub-instruction"
 msgstr "无法识别的宽子指令"
 
@@ -51570,19 +50051,16 @@ msgstr "不能读取 ELF 头:%s"
 
 #: lto/lto.c:2302
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "cannot open %s"
 msgid "Cannot open %s"
 msgstr "不能打开 %s"
 
 #: lto/lto.c:2323
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "cannot open %s"
 msgid "Cannot map %s"
 msgstr "不能打开 %s"
 
 #: lto/lto.c:2334
 #, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "cannot open %s"
 msgid "Cannot read %s"
 msgstr "不能打开 %s"
 
@@ -52006,7 +50484,6 @@ msgstr "全局/静态变量赋值已被打断"
 
 #: objc/objc-act.c:3964 objc/objc-act.c:3992 objc/objc-act.c:4048
 #, fuzzy, gcc-internal-format
-#| msgid "unused variable %q+D"
 msgid "duplicate instance variable %q+D"
 msgstr "未使用的变量%q+D"
 
@@ -52125,7 +50602,6 @@ msgstr "也找到了%<%c%s%>"
 #. rtype is an IDENTIFIER_NODE at this point.
 #: objc/objc-act.c:5398 objc/objc-act.c:5532
 #, fuzzy, gcc-internal-format
-#| msgid "definition of protocol %qE not found"
 msgid "@interface of class %qE not found"
 msgstr "找不到协议%qE的方法定义"
 
index fcde9a0..0d5090b 100644 (file)
--- a/gcc/ree.c
+++ b/gcc/ree.c
@@ -507,6 +507,8 @@ struct ATTRIBUTE_PACKED ext_modified
   /* Kind of modification of the insn.  */
   ENUM_BITFIELD(ext_modified_kind) kind : 2;
 
+  unsigned int do_not_reextend : 1;
+
   /* True if the insn is scheduled to be deleted.  */
   unsigned int deleted : 1;
 };
@@ -712,8 +714,10 @@ combine_reaching_defs (ext_cand *cand, const_rtx set_pat, ext_state *state)
      register than the source operand, then additional restrictions
      are needed.  Note we have to handle cases where we have nested
      extensions in the source operand.  */
-  if (REGNO (SET_DEST (PATTERN (cand->insn)))
-      != REGNO (get_extended_src_reg (SET_SRC (PATTERN (cand->insn)))))
+  bool copy_needed
+    = (REGNO (SET_DEST (PATTERN (cand->insn)))
+       != REGNO (get_extended_src_reg (SET_SRC (PATTERN (cand->insn)))));
+  if (copy_needed)
     {
       /* In theory we could handle more than one reaching def, it
         just makes the code to update the insn stream more complex.  */
@@ -722,7 +726,7 @@ combine_reaching_defs (ext_cand *cand, const_rtx set_pat, ext_state *state)
 
       /* We require the candidate not already be modified.  It may,
         for example have been changed from a (sign_extend (reg))
-        into (zero_extend (sign_extend (reg)).
+        into (zero_extend (sign_extend (reg))).
 
         Handling that case shouldn't be terribly difficult, but the code
         here and the code to emit copies would need auditing.  Until
@@ -777,6 +781,34 @@ combine_reaching_defs (ext_cand *cand, const_rtx set_pat, ext_state *state)
          || reg_set_between_p (SET_DEST (PATTERN (cand->insn)),
                                def_insn, cand->insn))
        return false;
+
+      /* We must be able to copy between the two registers.   Generate,
+        recognize and verify constraints of the copy.  Also fail if this
+        generated more than one insn.
+
+         This generates garbage since we throw away the insn when we're
+        done, only to recreate it later if this test was successful. 
+
+        Make sure to get the mode from the extension (cand->insn).  This
+        is different than in the code to emit the copy as we have not
+        modified the defining insn yet.  */
+      start_sequence ();
+      rtx pat = PATTERN (cand->insn);
+      rtx new_dst = gen_rtx_REG (GET_MODE (SET_DEST (pat)),
+                                 REGNO (XEXP (SET_SRC (pat), 0)));
+      rtx new_src = gen_rtx_REG (GET_MODE (SET_DEST (pat)),
+                                 REGNO (SET_DEST (pat)));
+      emit_move_insn (new_dst, new_src);
+
+      rtx insn = get_insns();
+      end_sequence ();
+      if (NEXT_INSN (insn))
+       return false;
+      if (recog_memoized (insn) == -1)
+       return false;
+      extract_insn (insn);
+      if (!constrain_operands (1))
+       return false;
     }
 
 
@@ -843,11 +875,15 @@ combine_reaching_defs (ext_cand *cand, const_rtx set_pat, ext_state *state)
             fprintf (dump_file, "All merges were successful.\n");
 
          FOR_EACH_VEC_ELT (state->modified_list, i, def_insn)
-           if (state->modified[INSN_UID (def_insn)].kind == EXT_MODIFIED_NONE)
-             state->modified[INSN_UID (def_insn)].kind
-               = (cand->code == ZERO_EXTEND
-                  ? EXT_MODIFIED_ZEXT : EXT_MODIFIED_SEXT);
+           {
+             ext_modified *modified = &state->modified[INSN_UID (def_insn)];
+             if (modified->kind == EXT_MODIFIED_NONE)
+               modified->kind = (cand->code == ZERO_EXTEND ? EXT_MODIFIED_ZEXT
+                                                           : EXT_MODIFIED_SEXT);
 
+             if (copy_needed)
+               modified->do_not_reextend = 1;
+           }
           return true;
         }
       else
index f5a4ee0..e1408b4 100644 (file)
@@ -162,7 +162,7 @@ static void create_initial_data_sets (basic_block);
 static void free_av_set (basic_block);
 static void invalidate_av_set (basic_block);
 static void extend_insn_data (void);
-static void sel_init_new_insn (insn_t, int);
+static void sel_init_new_insn (insn_t, int, int = -1);
 static void finish_insns (void);
 \f
 /* Various list functions.  */
@@ -4007,9 +4007,10 @@ get_seqno_by_succs (rtx insn)
   return seqno;
 }
 
-/* Compute seqno for INSN by its preds or succs.  */
+/* Compute seqno for INSN by its preds or succs.  Use OLD_SEQNO to compute
+   seqno in corner cases.  */
 static int
-get_seqno_for_a_jump (insn_t insn)
+get_seqno_for_a_jump (insn_t insn, int old_seqno)
 {
   int seqno;
 
@@ -4065,8 +4066,16 @@ get_seqno_for_a_jump (insn_t insn)
   if (seqno < 0)
     seqno = get_seqno_by_succs (insn);
 
-  gcc_assert (seqno >= 0);
+  if (seqno < 0)
+    {
+      /* The only case where this could be here legally is that the only
+        unscheduled insn was a conditional jump that got removed and turned
+        into this unconditional one.  Initialize from the old seqno
+        of that jump passed down to here.  */
+      seqno = old_seqno;
+    }
 
+  gcc_assert (seqno >= 0);
   return seqno;
 }
 
@@ -4246,22 +4255,24 @@ init_insn_data (insn_t insn)
 }
 
 /* This is used to initialize spurious jumps generated by
-   sel_redirect_edge ().  */
+   sel_redirect_edge ().  OLD_SEQNO is used for initializing seqnos
+   in corner cases within get_seqno_for_a_jump.  */
 static void
-init_simplejump_data (insn_t insn)
+init_simplejump_data (insn_t insn, int old_seqno)
 {
   init_expr (INSN_EXPR (insn), vinsn_create (insn, false), 0,
             REG_BR_PROB_BASE, 0, 0, 0, 0, 0, 0,
             vNULL, true, false, false,
             false, true);
-  INSN_SEQNO (insn) = get_seqno_for_a_jump (insn);
+  INSN_SEQNO (insn) = get_seqno_for_a_jump (insn, old_seqno);
   init_first_time_insn_data (insn);
 }
 
 /* Perform deferred initialization of insns.  This is used to process
-   a new jump that may be created by redirect_edge.  */
-void
-sel_init_new_insn (insn_t insn, int flags)
+   a new jump that may be created by redirect_edge.  OLD_SEQNO is used
+   for initializing simplejumps in init_simplejump_data.  */
+static void
+sel_init_new_insn (insn_t insn, int flags, int old_seqno)
 {
   /* We create data structures for bb when the first insn is emitted in it.  */
   if (INSN_P (insn)
@@ -4288,7 +4299,7 @@ sel_init_new_insn (insn_t insn, int flags)
   if (flags & INSN_INIT_TODO_SIMPLEJUMP)
     {
       extend_insn_data ();
-      init_simplejump_data (insn);
+      init_simplejump_data (insn, old_seqno);
     }
 
   gcc_assert (CONTAINING_RGN (BLOCK_NUM (insn))
@@ -5575,14 +5586,14 @@ sel_merge_blocks (basic_block a, basic_block b)
 }
 
 /* A wrapper for redirect_edge_and_branch_force, which also initializes
-   data structures for possibly created bb and insns.  Returns the newly
-   added bb or NULL, when a bb was not needed.  */
+   data structures for possibly created bb and insns.  */
 void
 sel_redirect_edge_and_branch_force (edge e, basic_block to)
 {
   basic_block jump_bb, src, orig_dest = e->dest;
   int prev_max_uid;
   rtx jump;
+  int old_seqno = -1;
 
   /* This function is now used only for bookkeeping code creation, where
      we'll never get the single pred of orig_dest block and thus will not
@@ -5591,8 +5602,13 @@ sel_redirect_edge_and_branch_force (edge e, basic_block to)
               && !single_pred_p (orig_dest));
   src = e->src;
   prev_max_uid = get_max_uid ();
-  jump_bb = redirect_edge_and_branch_force (e, to);
+  /* Compute and pass old_seqno down to sel_init_new_insn only for the case
+     when the conditional jump being redirected may become unconditional.  */
+  if (any_condjump_p (BB_END (src))
+      && INSN_SEQNO (BB_END (src)) >= 0)
+    old_seqno = INSN_SEQNO (BB_END (src));
 
+  jump_bb = redirect_edge_and_branch_force (e, to);
   if (jump_bb != NULL)
     sel_add_bb (jump_bb);
 
@@ -5604,7 +5620,8 @@ sel_redirect_edge_and_branch_force (edge e, basic_block to)
 
   jump = find_new_jump (src, jump_bb, prev_max_uid);
   if (jump)
-    sel_init_new_insn (jump, INSN_INIT_TODO_LUID | INSN_INIT_TODO_SIMPLEJUMP);
+    sel_init_new_insn (jump, INSN_INIT_TODO_LUID | INSN_INIT_TODO_SIMPLEJUMP,
+                      old_seqno);
   set_immediate_dominator (CDI_DOMINATORS, to,
                           recompute_dominator (CDI_DOMINATORS, to));
   set_immediate_dominator (CDI_DOMINATORS, orig_dest,
@@ -5623,6 +5640,7 @@ sel_redirect_edge_and_branch (edge e, basic_block to)
   edge redirected;
   bool recompute_toporder_p = false;
   bool maybe_unreachable = single_pred_p (orig_dest);
+  int old_seqno = -1;
 
   latch_edge_p = (pipelining_p
                   && current_loop_nest
@@ -5631,6 +5649,12 @@ sel_redirect_edge_and_branch (edge e, basic_block to)
   src = e->src;
   prev_max_uid = get_max_uid ();
 
+  /* Compute and pass old_seqno down to sel_init_new_insn only for the case
+     when the conditional jump being redirected may become unconditional.  */
+  if (any_condjump_p (BB_END (src))
+      && INSN_SEQNO (BB_END (src)) >= 0)
+    old_seqno = INSN_SEQNO (BB_END (src));
+
   redirected = redirect_edge_and_branch (e, to);
 
   gcc_assert (redirected && !last_added_blocks.exists ());
@@ -5651,7 +5675,7 @@ sel_redirect_edge_and_branch (edge e, basic_block to)
 
   jump = find_new_jump (src, NULL, prev_max_uid);
   if (jump)
-    sel_init_new_insn (jump, INSN_INIT_TODO_LUID | INSN_INIT_TODO_SIMPLEJUMP);
+    sel_init_new_insn (jump, INSN_INIT_TODO_LUID | INSN_INIT_TODO_SIMPLEJUMP, old_seqno);
 
   /* Only update dominator info when we don't have unreachable blocks.
      Otherwise we'll update in maybe_tidy_empty_bb.  */
index 4db4870..288821d 100644 (file)
@@ -323,16 +323,11 @@ symtab_insert_node_to_hashtable (symtab_node *node)
   *slot = node;
 }
 
-/* Remove node from symbol table.  This function is not used directly, but via
-   cgraph/varpool node removal routines.  */
+/* Remove NODE from same comdat group.   */
 
 void
-symtab_unregister_node (symtab_node *node)
+symtab_remove_from_same_comdat_group (symtab_node *node)
 {
-  void **slot;
-  ipa_remove_all_references (&node->ref_list);
-  ipa_remove_all_referring (&node->ref_list);
-
   if (node->same_comdat_group)
     {
       symtab_node *prev;
@@ -346,6 +341,19 @@ symtab_unregister_node (symtab_node *node)
        prev->same_comdat_group = node->same_comdat_group;
       node->same_comdat_group = NULL;
     }
+}
+
+/* Remove node from symbol table.  This function is not used directly, but via
+   cgraph/varpool node removal routines.  */
+
+void
+symtab_unregister_node (symtab_node *node)
+{
+  void **slot;
+  ipa_remove_all_references (&node->ref_list);
+  ipa_remove_all_referring (&node->ref_list);
+
+  symtab_remove_from_same_comdat_group (node);
 
   if (node->previous)
     node->previous->next = node->next;
@@ -829,6 +837,16 @@ verify_symtab_base (symtab_node *node)
          error ("non-DECL_ONE_ONLY node in a same_comdat_group list");
          error_found = true;
        }
+      if (DECL_COMDAT_GROUP (n->decl) != DECL_COMDAT_GROUP (node->same_comdat_group->decl))
+       {
+         error ("same_comdat_group list across different groups");
+         error_found = true;
+       }
+      if (!n->definition)
+       {
+         error ("Node has same_comdat_group but it is not a definition");
+         error_found = true;
+       }
       if (n->type != node->type)
        {
          error ("mixing different types of symbol in same comdat groups is not supported");
index 4c09a1e..e383be4 100644 (file)
@@ -1,3 +1,878 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
+2014-07-10  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gnat.dg/opt39.adb: New test.
+
+2014-07-09  Edward Smith-Rowland  <3dw4rd@verizon.net>
+
+       PR c++/58155 - -Wliteral-suffix warns about tokens which are skipped
+       g++.dg/cpp0x/pr58155.C: New.
+
+2014-07-09  Alan Lawrence  <alan.lawrence@arm.com>
+
+       Backport r211369 from trunk.
+       2014-06-09  Alan Lawrence  <alan.lawrence@arm.com>
+
+       PR target/61062
+       * gcc.target/arm/pr48252.c (main): Expect same result as endian-neutral.
+
+2014-07-08  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/61673
+       * gcc.c-torture/execute/pr61673.c: New test.
+
+2014-07-08  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/61680
+       * gcc.dg/vect/pr61680.c: New testcase.
+
+       PR tree-optimization/61681
+       * gcc.dg/torture/pr61681.c: New testcase.
+
+2014-07-08  Alan Lawrence  <alan.lawrence@arm.com>
+
+        Backport r211502 from mainline.
+        2014-06-10  Alan Lawrence  <alan.lawrence@arm.com>
+
+       PR target/59843
+       * gcc.dg/vect/vect-singleton_1.c: New file.
+
+2014-07-08  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/61725
+       * gcc.dg/tree-ssa/vrp93.c: New test.
+       * gcc.c-torture/execute/pr61725.c: New test.
+
+2014-07-07  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/61459
+       PR fortran/58883
+       * gfortran.dg/allocatable_function_8.f90 : New test
+
+2014-07-07  Dominique d'Humieres <dominiq@lps.ens.fr>
+           Mikael Morin <mikael@gcc.gnu.org>
+
+       PR fortran/41936
+       * gfortran.dg/class_array_15.f03: Check memory leaks.
+
+2014-07-06  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       Backport from mainline.
+       PR libgfortran/61640
+       * gfortran.dg/arrayio_16.f90: New test.
+
+2014-07-04  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/61654
+       * g++.dg/opt/pr61654.C: New test.
+
+       PR tree-optimization/61684
+       * gcc.c-torture/compile/pr61684.c: New test.
+
+       PR c++/61382
+       Backport from mainline
+       2014-06-05  Andreas Schwab  <schwab@suse.de>
+
+       * g++.dg/cpp0x/initlist86.C (main): Initialize i.
+
+2014-07-02  Jakub Jelinek  <jakub@redhat.com>
+           Fritz Reese  <Reese-Fritz@zai.com>
+
+       * gfortran.dg/oldstyle_5.f: New test.
+
+2014-07-01  Paul Pluzhnikov  <ppluzhnikov@google.com>
+
+       PR c++/58753
+       PR c++/58930
+       PR c++/58704
+
+       Backported from mainline
+       2014-05-20  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * g++.dg/cpp0x/nsdmi-template11.C: New.
+       * g++.dg/cpp0x/nsdmi-template12.C: Likewise.
+       * g++.dg/cpp0x/nsdmi-template13.C: Likewise.
+
+2014-06-28  Edward Smith-Rowland  <3dw4rd@verizon.net>
+
+       PR c++/58781
+       PR c++/60249
+       PR c++/59867
+       * testsuite/g++.dg/cpp0x/pr58781.C: New.
+       * testsuite/g++.dg/cpp0x/pr60249.C: New.
+       * testsuite/g++.dg/cpp1y/pr59867.C: New.
+
+2014-06-30  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * gfortran.dg/round_4.f90: Skip for powerpc*-*-linux* since the
+       test requires greater precision than the current PowerPC long
+       double implementation supports.
+
+2014-06-30  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2014-06-27  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/57233
+       PR tree-optimization/61299
+       * gcc.dg/pr57233.c: New test.
+       * gcc.target/i386/pr57233.c: New test.
+       * gcc.target/i386/sse2-pr57233.c: New test.
+       * gcc.target/i386/avx-pr57233.c: New test.
+       * gcc.target/i386/avx2-pr57233.c: New test.
+       * gcc.target/i386/avx512f-pr57233.c: New test.
+       * gcc.target/i386/xop-pr57233.c: New test.
+
+       2014-06-24  Jakub Jelinek  <jakub@redhat.com>
+
+       * gfortran.dg/gomp/udr2.f90 (f7, f9): Add !$omp parallel with
+       reduction clause.
+       * gfortran.dg/gomp/udr4.f90 (f4): Likewise.
+       Remove Label is never defined expected error.
+       * gfortran.dg/gomp/udr8.f90: New test.
+
+       2014-06-18  Jakub Jelinek  <jakub@redhat.com>
+
+       * gfortran.dg/gomp/declare-simd-1.f90: New test.
+       * gfortran.dg/gomp/depend-1.f90: New test.
+       * gfortran.dg/gomp/target1.f90: New test.
+       * gfortran.dg/gomp/target2.f90: New test.
+       * gfortran.dg/gomp/target3.f90: New test.
+       * gfortran.dg/gomp/udr4.f90: Adjust expected diagnostics.
+       * gfortran.dg/openmp-define-3.f90: Expect _OPENMP 201307 instead of
+       201107.
+
+       2014-06-10  Jakub Jelinek  <jakub@redhat.com>
+
+       PR fortran/60928
+       * gfortran.dg/gomp/allocatable_components_1.f90: Remove dg-error
+       directives.
+       * gfortran.dg/gomp/associate1.f90: New test.
+       * gfortran.dg/gomp/intentin1.f90: New test.
+       * gfortran.dg/gomp/openmp-simd-1.f90: New test.
+       * gfortran.dg/gomp/openmp-simd-2.f90: New test.
+       * gfortran.dg/gomp/openmp-simd-3.f90: New test.
+       * gfortran.dg/gomp/proc_ptr_2.f90: New test.
+
+       2014-06-09  Jakub Jelinek  <jakub@redhat.com>
+
+       * gfortran.dg/gomp/udr6.f90 (f1, f2, f3): Use complex(kind=8)
+       instead of complex(kind=16).
+
+       2014-06-06  Jakub Jelinek  <jakub@redhat.com>
+
+       * gfortran.dg/gomp/allocatable_components_1.f90: Adjust for
+       reduction clause diagnostic changes.
+       * gfortran.dg/gomp/appendix-a/a.31.3.f90: Likewise.
+       * gfortran.dg/gomp/reduction1.f90: Likewise.
+       * gfortran.dg/gomp/reduction3.f90: Likewise.
+       * gfortran.dg/gomp/udr1.f90: New test.
+       * gfortran.dg/gomp/udr2.f90: New test.
+       * gfortran.dg/gomp/udr3.f90: New test.
+       * gfortran.dg/gomp/udr4.f90: New test.
+       * gfortran.dg/gomp/udr5.f90: New test.
+       * gfortran.dg/gomp/udr6.f90: New test.
+       * gfortran.dg/gomp/udr7.f90: New test.
+
+       2014-05-12  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/60127
+       * gfortran.dg/gomp/omp_do_concurrent.f90: New.
+
+       2014-05-11  Jakub Jelinek  <jakub@redhat.com>
+
+       * gfortran.dg/gomp/affinity-1.f90: New test.
+
+2014-06-30  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+
+       * gcc.dg/typeof-2.c: New testcase.
+
+2014-06-30  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       * gcc.target/aarch64/vqdmulhh_lane_s16.c: New test.
+       * gcc.target/aarch64/vqdmulhs_lane_s32.c: Likewise.
+       * gcc.target/aarch64/vqrdmulhh_lane_s16.c: Likewise.
+       * gcc.target/aarch64/vqrdmulhs_lane_s32.c: Likewise.
+       * gcc.target/aarch64/vqdmlal_high_lane_s16.c: New test.
+       * gcc.target/aarch64/vqdmlal_high_lane_s32.c: Likewise.
+       * gcc.target/aarch64/vqdmlal_high_laneq_s16.c: Likewise.
+       * gcc.target/aarch64/vqdmlal_high_laneq_s32.c: Likewise.
+       * gcc.target/aarch64/vqdmlal_lane_s16.c: Likewise.
+       * gcc.target/aarch64/vqdmlal_lane_s32.c: Likewise.
+       * gcc.target/aarch64/vqdmlal_laneq_s16.c: Likewise.
+       * gcc.target/aarch64/vqdmlal_laneq_s32.c: Likewise.
+       * gcc.target/aarch64/vqdmlalh_lane_s16.c: Likewise.
+       * gcc.target/aarch64/vqdmlals_lane_s32.c: Likewise.
+       * gcc.target/aarch64/vqdmlsl_high_lane_s16.c: Likewise.
+       * gcc.target/aarch64/vqdmlsl_high_lane_s32.c: Likewise.
+       * gcc.target/aarch64/vqdmlsl_high_laneq_s16.c: Likewise.
+       * gcc.target/aarch64/vqdmlsl_high_laneq_s32.c: Likewise.
+       * gcc.target/aarch64/vqdmlsl_lane_s16.c: Likewise.
+       * gcc.target/aarch64/vqdmlsl_lane_s32.c: Likewise.
+       * gcc.target/aarch64/vqdmlsl_laneq_s32.c: Likewise.
+       * gcc.target/aarch64/vqdmlslh_lane_s16.c: Likewise.
+       * gcc.target/aarch64/vqdmlsls_lane_s32.c: Likewise.
+       * gcc.target/aarch64/vqdmulh_laneq_s16.c: Likewise.
+       * gcc.target/aarch64/vqdmulh_laneq_s32.c: Likewise.
+       * gcc.target/aarch64/vqdmulhq_laneq_s16.c: Likewise.
+       * gcc.target/aarch64/vqdmulhq_laneq_s32.c: Likewise.
+       * gcc.target/aarch64/vqdmull_high_lane_s16.c: Likewise.
+       * gcc.target/aarch64/vqdmull_high_lane_s32.c: Likewise.
+       * gcc.target/aarch64/vqdmull_high_laneq_s16.c: Likewise.
+       * gcc.target/aarch64/vqdmull_high_laneq_s32.c: Likewise.
+       * gcc.target/aarch64/vqdmull_lane_s16.c: Likewise.
+       * gcc.target/aarch64/vqdmull_lane_s32.c: Likewise.
+       * gcc.target/aarch64/vqdmull_laneq_s16.c: Likewise.
+       * gcc.target/aarch64/vqdmull_laneq_s32.c: Likewise.
+       * gcc.target/aarch64/vqdmullh_lane_s16.c: Likewise.
+       * gcc.target/aarch64/vqdmulls_lane_s32.c: Likewise.
+       * gcc.target/aarch64/vqrdmulh_laneq_s16.c: Likewise.
+       * gcc.target/aarch64/vqrdmulh_laneq_s32.c: Likewise.
+       * gcc.target/aarch64/vqrdmulhq_laneq_s16.c: Likewise.
+       * gcc.target/aarch64/vqrdmulhq_laneq_s32.c: Likewise.
+       * gcc.target/aarch64/vector_intrinsics.c: Simplify arm_neon.h include.
+       (test_vqdmlal_high_lane_s16): Fix parameter type.
+       (test_vqdmlal_high_lane_s32): Likewise.
+       (test_vqdmull_high_lane_s16): Likewise.
+       (test_vqdmull_high_lane_s32): Likewise.
+       (test_vqdmlsl_high_lane_s32): Likewise.
+       (test_vqdmlsl_high_lane_s16): Likewise.
+       * gcc.target/aarch64/scalar_intrinsics.c (test_vqdmlalh_lane_s16):
+       Fix argument type.
+       (test_vqdmlals_lane_s32): Likewise.
+       (test_vqdmlslh_lane_s16): Likewise.
+       (test_vqdmlsls_lane_s32): Likewise.
+       (test_vqdmulhh_lane_s16): Likewise.
+       (test_vqdmulhs_lane_s32): Likewise.
+       (test_vqdmullh_lane_s16): Likewise.
+       (test_vqdmulls_lane_s32): Likewise.
+       (test_vqrdmulhh_lane_s16): Likewise.
+       (test_vqrdmulhs_lane_s32): Likewise.
+
+2014-06-30  Igor Zamyatin  <igor.zamyatin@intel.com>
+
+       PR middle-end/57541
+       * c-c++-common/cilk-plus/AN/pr57541.c: New case added.
+       * c-c++-common/cilk-plus/AN/pr57541-2.c: New test.
+
+2014-06-30  Thomas Preud'homme  <thomas.preudhomme@arm.com>
+
+       Backport from mainline
+       2014-06-11  Thomas Preud'homme  <thomas.preudhomme@arm.com>
+
+       PR tree-optimization/61306
+       * gcc.c-torture/execute/pr61306-1.c: New test.
+       * gcc.c-torture/execute/pr61306-2.c: Likewise.
+       * gcc.c-torture/execute/pr61306-3.c: Likewise.
+
+2014-06-27  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       Backport from mainline.
+       PR libgfortran/61499
+       * gfortran.dg/arrayio_15.f90: New test.
+
+2014-06-27  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * gfortran.dg/nint_2.f90: Don't XFAIL for powerpc64le-*-linux*.
+
+2014-06-27  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/61614
+       * g++.dg/ext/complit14.C: New.
+
+2014-06-27  Martin Jambor  <mjambor@suse.cz>
+
+       PR ipa/61160
+       * g++.dg/ipa/pr61160-2.C: New test.
+       * g++.dg/ipa/pr61160-3.C: Likewise.
+
+2014-06-27  Uros Bizjak  <ubizjak@gmail.com>
+
+       Backport from mainline
+       2014-06-26  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/61586
+       * gcc.target/alpha/pr61586.c: New test.
+
+2014-06-26  Adam Butcher  <adam@jessamine.co.uk>
+
+       PR c++/61537
+       * g++.dg/template/pr61537.C: New testcase.
+
+2014-06-26  Martin Jambor  <mjambor@suse.cz>
+
+       * g++.dg/ipa/pr60600.C: Fix typo.
+       * g++.dg/ipa/devirt-25.C: Likewise.
+       * g++.dg/ipa/pr61540.C: Likewise.
+
+2014-06-26  Martin Jambor  <mjambor@suse.cz>
+
+       * g++.dg/ipa/pr61540.C: Remove dumping test.
+
+2014-06-25  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * gfortran.dg/default_format_denormal_2.f90:  Remove xfail for
+       powerpc*-*-linux*.
+
+2014-06-23  Alan Modra  <amodra@gmail.com>
+
+       * gcc.dg/pr61583.c: New.
+
+2014-06-20  Martin Jambor  <mjambor@suse.cz>
+
+       PR ipa/61540
+       * g++.dg/ipa/pr61540.C: New test.
+
+2014-06-17  Yufeng Zhang  <yufeng.zhang@arm.com>
+
+       PR target/61483
+       * gcc.target/aarch64/aapcs64/type-def.h (struct hfa_fx2_t): New type.
+       * gcc.target/aarch64/aapcs64/va_arg-13.c: New test.
+       * gcc.target/aarch64/aapcs64/va_arg-14.c: Ditto.
+       * gcc.target/aarch64/aapcs64/va_arg-15.c: Ditto.
+
+2014-06-17  Richard Biener  <rguenther@suse.de>
+
+       PR lto/61012
+       * gcc.dg/lto/pr61526_0.c: New testcase.
+       * gcc.dg/lto/pr61526_1.c: Likewise.
+
+2014-06-17  Uros Bizjak  <ubizjak@gmail.com>
+
+       Backport from mainline
+       2014-06-06  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/61423
+       * gcc.target/i386/pr61423.c: New test.
+
+2014-06-15  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+
+       Backport from trunk.
+       PR fortran/45187
+       * gfortran.dg/cray_pointers_10.f90: New file.
+
+2014-06-13  Peter Bergner  <bergner@vnet.ibm.com>
+
+       Backport from mainline
+
+       2014-06-13  Peter Bergner  <bergner@vnet.ibm.com>
+       PR target/61415
+       * lib/target-supports.exp (check_effective_target_longdouble128): New.
+       * gcc.target/powerpc/pack02.c: Use it.
+       * gcc.target/powerpc/tfmode_off.c: Likewise.
+
+2014-06-13  Jeff Law  <law@redhat.com>
+
+       Backports from mainline:
+
+       2014-06-13  Ilya Enkovich  <ilya.enkovich@intel.com>
+
+       PR rtl-optimization/61094
+       PR rtl-optimization/61446
+       * gcc.target/i386/pr61446.c : New.
+
+       2014-06-02  Jeff Law  <law@redhat.com>
+
+       PR rtl-optimization/61094
+       * g++.dg/pr61094: New test.
+
+2014-06-12  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/61486
+       * c-c++-common/gomp/pr61486-1.c: New test.
+       * c-c++-common/gomp/pr61486-2.c: New test.
+
+2014-06-12  Jeff Law  <law@redhat.com>
+
+       Backports from mainline:
+       2014-06-05  Jeff Law  <law@redhat.com>
+
+       PR tree-optimization/61289
+       * g++.dg/pr61289.C: New test.
+       * g++.dg/pr61289-2.C: New test.
+
+2014-06-12  Georg-Johann Lay  <avr@gjlay.de>
+
+       Backport from 2014-06-12 trunk r211491
+
+       PR target/61443
+       * gcc.target/avr/torture/pr61443.c: New test.
+
+2014-06-11  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/61452
+       * gcc.dg/torture/pr61452.c: New testcase.
+
+2014-06-11  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/61456
+       * g++.dg/opt/pr61456.C: New testcase.
+
+2014-06-09  Paul Thomas  <pault@gcc.gnu.org>
+
+       Backport from trunk.
+       PR fortran/61406
+       * gfortran.dg/associate_17.f90 : New test
+
+2014-06-07  Jerry DeLisle  <jvdelisle@gcc.gnu>
+
+       Backport from trunk.
+       PR libfortran/61173
+       * gfortran.dg/arrayio_14.f90: New test.
+
+2014-06-07  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gnat.dg/opt38.adb: New test.
+       * gnat.dg/opt38_pkg.ad[sb]: New helper.
+
+2014-06-04  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/61383
+       * gcc.dg/torture/pr61383-1.c: New testcase.
+
+2014-06-04  Igor Zamyatin  <igor.zamyatin@intel.com>
+
+       PR c/58942
+       * c-c++-common/cilk-plus/AN/pr58942.c: Check for correct handling of
+       the case with a pointer.
+
+2014-06-04  Marek Polacek  <polacek@redhat.com>
+
+       Backport from mainline
+       2014-05-08  Marek Polacek  <polacek@redhat.com>
+
+       PR c/61053
+       * gcc.dg/pr61053.c: New test.
+
+2014-06-03  Martin Jambor  <mjambor@suse.cz>
+
+       PR ipa/61160
+       * g++.dg/ipa/pr61160-1.C: New test.
+
+2014-06-03  Andrey Belevantsev  <abel@ispras.ru>
+
+       Backport from mainline
+       2014-05-14  Andrey Belevantsev  <abel@ispras.ru>
+
+       PR rtl-optimization/60866
+       * gcc.dg/pr60866.c: New test.
+
+2014-06-03  Andrey Belevantsev  <abel@ispras.ru>
+
+       Backport from mainline
+       2014-05-14  Andrey Belevantsev  <abel@ispras.ru>
+
+       PR rtl-optimization/60901
+       * gcc.target/i386/pr60901.c: New test.
+
+2014-06-01  Uros Bizjak  <ubizjak@gmail.com>
+
+       * g++.dg/pr60969.C (dg-do compile): Change ilp32 target to ia32.
+
+2014-05-29  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR rtl-optimization/61325
+       * gcc.target/aarch64/pr61325.c: New.
+
+2014-05-29  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/60834
+       Backport from mainline
+       * gfortran.dg/associate_16.f90:  New test.
+
+2014-05-28  Eric Botcazou  <ebotcazou@adacore.com>
+
+       Backport from mainline
+       2014-05-27  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gnat.dg/overflow_fixed.adb: New test.
+
+2014-05-28  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2014-05-28  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/61045
+       * gcc.dg/pr61045.c: New testcase.
+
+       2014-05-05  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/61010
+       * gcc.dg/torture/pr61010.c: New testcase.
+
+       2014-04-28  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/60979
+       * gcc.dg/graphite/pr60979.c: New testcase.
+
+2014-05-28  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       * lib/clearcap.exp: New file.
+       * gcc.dg/vect/vect.exp: Load clearcap.exp.
+       Remove clearcap_ldflags handling.
+       Call clearcap-init, clearcap-finish.
+       * gcc.target/i386/i386.exp: Likewise.
+       * gcc.target/i386/clearcap.map: Move to ../config/sol2-clearcap.map.
+       * gcc.target/i386/clearcapv2.map: Move to
+       ../config/sol2-clearcapv2.map.
+       * gcc.target/x86_64/abi/avx/abi-avx.exp: Likewise.
+       * gcc.target/x86_64/abi/avx512f/abi-avx512f.exp: Likewise.
+
+2014-05-27  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gnat.dg/aliasing1.adb (dg-final): Robustify pattern matching.
+
+2014-05-26  Uros Bizjak  <ubizjak@gmail.com>
+
+       * c-c++-common/cilk-plus/AN/pr61191.c: Fix dg-error directives.
+
+2014-05-26  Igor Zamyatin  <igor.zamyatin@intel.com>
+
+       PR c/61191
+       * c-c++-common/cilk-plus/AN/pr61191.c: Check for correct handling of
+       the case with syntax error.
+
+2014-05-22  Peter Bergner  <bergner@vnet.ibm.com>
+
+       * gcc.target/powerpc/htm-ttest.c: New test.
+
+2014-05-21  Igor Zamyatin  <igor.zamyatin@intel.com>
+
+       PR c++/60189
+       * c-c++-common/cilk-plus/CK/invalid_sync.cc: New test.
+
+2014-05-18  Jan Hubicka  <hubicka@ucw.cz>
+
+       PR middle-end/58094
+       * g++.dg/ipa/devirt-11.C: Be lax about number of devirtualizations.
+
+2014-05-18  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gnat.dg/enum3.adb: New test.
+
+2014-04-16  Jan Hubicka  <hubicka@ucw.cz>
+
+       PR ipa/60854
+       * g++.dg/torture/pr60854.C: New testcase.
+
+2014-05-17  Uros Bizjak  <ubizjak@gmail.com>
+
+       * g++.dg/pr60969.C: Compile for all ilp32 x86 targets.
+       (dg-options): Add -mfpmath=387.
+       (dg-final): Check that no MMX registers are used.
+
+2014-05-16  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR rtl-optimization/60969
+       * g++.dg/pr60969.C: New.
+
+2014-05-15  Martin Jambor  <mjambor@suse.cz>
+
+       PR ipa/61085
+       * g++.dg/ipa/pr61085.C: New test.
+
+2014-05-15  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/61158
+       * gcc.dg/pr61158.c: New test.
+
+2014-05-14  Matthias Klose  <doko@ubuntu.com>
+
+       PR driver/61106
+       * gcc-dg/unused-8a.c: Remove.
+
+2014-05-13  Peter Bergner  <bergner@vnet.ibm.com>
+
+       * lib/target-support.exp (check_dfp_hw_available): New function.
+       (is-effective-target): Check $arg for dfp_hw.
+       (is-effective-target-keyword): Likewise.
+       * gcc.target/powerpc/pack03.c: (dg-require-effective-target):
+       Change target to dfp_hw.
+
+2014-05-13  Jeff Law  <law@redhat.com>
+
+       Backports from mainline
+
+       2014-05-08  Jeff Law  <law@redhat.com>
+
+       PR tree-optimization/61009
+       * g++.dg/tree-ssa/pr61009.C: New test.
+
+       2014-04-23  Jeff Law  <law@redhat.com>
+
+       PR tree-optimization/60902
+       * gcc.target/i386/pr60902.c: New test.
+
+2014-05-13  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/61060
+       * gcc.dg/pr61060.c: New test.
+
+2014-05-12  Senthil Kumar Selvaraj  <senthil_kumar.selvaraj@atmel.com>
+
+       Backport from mainline
+       2014-05-12  Senthil Kumar Selvaraj  <senthil_kumar.selvaraj@atmel.com>
+
+       PR target/60991
+       * gcc.target/avr/pr60991.c: New testcase.
+
+2014-05-10  Jerry DeLisle  <jvdelisle@gcc.gnu>
+
+       Backport from trunk.
+       PR libfortran/61049
+       * gfortran.dg/list_read_13.f: New test.
+
+2014-05-09  Georg-Johann Lay  <avr@gjlay.de>
+
+       Backport from 2014-05-09 trunk r210267
+
+       PR target/61055
+       * gcc.target/avr/torture/pr61055.c: New test.
+
+2014-05-08  Matthias Klose  <doko@ubuntu.com>
+
+       PR driver/61106
+       * gcc-dg/unused-8a.c: New.
+       * gcc-dg/unused-8b.c: Likewise.
+
+2014-05-07  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/61083
+       * g++.dg/cpp0x/sfinae50.C: New.
+
+2014-05-07  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/57864
+       * gcc.dg/torture/pr57864.c: New testcase.
+
+2014-05-06  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/60999
+       * g++.dg/cpp0x/nsdmi-template9.C: New.
+       * g++.dg/cpp0x/nsdmi-template10.C: Likewise.
+
+2014-05-04  Jan Hubicka  <hubicka@ucw.cz>
+
+       PR ipa/60965
+       * g++.dg/ipa/devirt-31.C: New testcase.
+       * g++.dg/ipa/devirt-11.C: Adjust testcase.
+
+2014-05-04  Peter Bergner  <bergner@vnet.ibm.com>
+
+       * gcc.target/powerpc/pack02.c (dg-options): Add -mhard-float.
+       (dg-require-effective-target): Change target to powerpc_fprs.
+       * gcc.target/powerpc/pack03.c (dg-options): Add -mhard-dfp.
+       (dg-require-effective-target): Change target to dfprt.
+
+2014-05-02  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       PR tree-optimization/60930
+       * gcc.dg/torture/pr60930.c:  New test.
+
+2014-04-30  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       Back port from mainline
+       2014-04-24  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       * gcc.target/powerpc/pack01.c: New test to test the new pack and
+       unpack builtin functionss for 128-bit types.
+       * gcc.target/powerpc/pack02.c: Likewise.
+       * gcc.target/powerpc/pack03.c: Likewise.
+       * gcc.target/powerpc/extend-divide-1.c: New test to test extended
+       divide builtin functionss.
+       * gcc.target/powerpc/extend-divide-2.c: Likewise.
+       * gcc.target/powerpc/bcd-1.c: New test for the new BCD builtin
+       functions.
+       * gcc.target/powerpc/bcd-2.c: Likewise.
+       * gcc.target/powerpc/bcd-3.c: Likewise.
+       * gcc.target/powerpc/dfp-builtin-1.c: New test for the new DFP
+       builtin functionss.
+       * gcc.target/powerpc/dfp-builtin-2.c: Likewise.
+
+2014-04-29  Pat Haugen  <pthaugen@us.ibm.com>
+
+       Backport from mainline
+       2014-04-17  Pat Haugen  <pthaugen@us.ibm.com>
+
+       * gcc.target/powerpc/ti_math1.c: New.
+       * gcc.target/powerpc/ti_math2.c: New.
+
+2014-04-29  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/60971
+       * c-c++-common/turtore/pr60971.c: New test.
+
+2014-04-26  Uros Bizjak  <ubizjak@gmail.com>
+
+       * gcc.dg/tree-ssa/alias-30.c (dg-options): Dump only fre1 details.
+       * gcc.dg/vect/pr60505.c: Cleanup vect tree dump.
+       * g++.dg/ipa/devirt-27.C (dg-options): Remove -fdump-ipa-devirt.
+
+2014-04-25  Uros Bizjak  <ubizjak@gmail.com>
+
+       * c-c++-common/gomp/pr60823-2.c: Require effective target
+       vect_simd_clones.
+
+2014-04-25  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/60960
+       * gcc.c-torture/execute/pr60960.c: New test.
+
+2014-04-25  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gcc.c-torture/execute/20140425-1.c: New test.
+
+2014-04-25  Richard Biener  <rguenther@suse.de>
+
+       PR ipa/60912
+       * g++.dg/opt/pr60912.C: New testcase.
+
+2014-04-25  Richard Biener  <rguenther@suse.de>
+
+       PR ipa/60911
+       * gcc.dg/lto/pr60911_0.c: New testcase.
+
+2014-04-24  Jakub Jelinek  <jakub@redhat.com>
+
+       * c-c++-common/gomp/atomic-16.c: Remove all dg-error directives.
+       Replace load with read and store with write.
+
+2014-04-23  Uros Bizjak  <ubizjak@gmail.com>
+
+       Backport from mainline
+       2014-04-21  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/60909
+       * gcc.target/i386/pr60909-1.c: New test.
+       * gcc.target/i386/pr60909-2.c: Ditto.
+
+2014-04-23  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/60903
+       * gcc.dg/torture/pr60903.c: New testcase.
+
+2014-04-23  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2014-04-14  Richard Biener  <rguenther@suse.de>
+
+       PR lto/60720
+       * gcc.dg/lto/pr60720_0.c: New testcase.
+       * gcc.dg/lto/pr60720_1.c: Likewise.
+
+2014-04-23  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/60895
+       * g++.dg/torture/pr60895.C: New testcase.
+
+2014-04-23  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/60891
+       * gcc.dg/torture/pr60891.c: New testcase.
+
+2014-04-22  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2014-04-21  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       PR target/60735
+       * gcc.target/powerpc/pr60735.c: New test.  Insure _Decimal64 does
+       not cause errors if -mspe.
+
+2014-04-22  Tobias Burnus  <burnus@net-b.de>
+
+       Backport from mainline
+       2014-04-11  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/58880
+       PR fortran/60495
+       * gfortran.dg/finalize_25.f90: New.
+
+2014-04-22  H.J. Lu  <hongjiu.lu@intel.com>
+
+       Backport from mainline
+       2014-04-22  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * gcc.target/i386/pr60868.c: New testcase.
+
+2014-04-22  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/59073
+       * c-c++-common/gomp/pr59073.c: New test.
+
+2014-04-22  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * gcc.dg/vmx/merge-vsx.c: Add V4SI and V4SF tests.
+       * gcc.dg/vmx/merge-vsx-be-order.c: Likewise.
+
+2014-04-22  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2014-04-14  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/55022
+       * gcc.dg/graphite/pr55022.c: New testcase.
+
+2014-04-22  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2014-04-17  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/60849
+       * g++.dg/opt/pr60849.C: New testcase.
+
+2014-04-22   Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2014-04-17   Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/60841
+       * gcc.dg/vect/pr60841.c: New testcase.
+
+2014-04-22  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2014-04-17  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/60836
+       * g++.dg/vect/pr60836.cc: New testcase.
+
+2014-04-22  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2014-04-14  Richard Biener  <rguenther@suse.de>
+               Marc Glisse  <marc.glisse@inria.fr>
+
+       PR c/60819
+       * gcc.target/i386/vec-may_alias.c: New testcase.
+
+2014-04-22  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2014-04-14  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/59817
+       PR tree-optimization/60453
+       * gfortran.dg/graphite/pr59817.f: New testcase.
+       * gcc.dg/graphite/pr59817-1.c: Likewise.
+       * gcc.dg/graphite/pr59817-2.c: Likewise.
+
+2014-04-22  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/60823
+       * c-c++-common/gomp/pr60823-1.c: New test.
+       * c-c++-common/gomp/pr60823-2.c: New test.
+       * c-c++-common/gomp/pr60823-3.c: New test.
+
+       Backported from mainline
+       2014-04-16  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/60844
+       * gcc.dg/pr60844.c: New test.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
 2014-04-12  Jerry DeLisle  <jvdelisle@gcc.gnu>
 
        PR libfortran/60810
-       gfortran.dg/arrayio_13.f90: New test.
+       gfortran.dg/arrayio_13.f90: New test.
 
 2014-04-11  Steve Ellcey  <sellcey@mips.com>
            Jakub Jelinek  <jakub@redhat.com>
 
 2014-04-08  Jason Merrill  <jason@redhat.com>
 
-       * lib/gcc-dg.exp (dg-build-dso): Reset dg-do-what-default to
-       compile.
+       * lib/gcc-dg.exp (dg-build-dso): Reset dg-do-what-default to compile.
 
 2014-04-08  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
 2014-04-04  Martin Jambor  <mjambor@suse.cz>
 
        PR ipa/60640
-        * g++.dg/ipa/pr60640-1.C: New test.
-        * g++.dg/ipa/pr60640-2.C: Likewise.
-        * g++.dg/ipa/pr60640-3.C: Likewise.
-        * g++.dg/ipa/pr60640-4.C: Likewise.
+       * g++.dg/ipa/pr60640-1.C: New test.
+       * g++.dg/ipa/pr60640-2.C: Likewise.
+       * g++.dg/ipa/pr60640-3.C: Likewise.
+       * g++.dg/ipa/pr60640-4.C: Likewise.
 
 2014-04-04  Jeff Law  <law@redhat.com>
 
 
 2014-04-01  Fabien Chêne  <fabien@gcc.gnu.org>
 
-        * g++.dg/init/ctor4.C: Adjust.
+       * g++.dg/init/ctor4.C: Adjust.
        * g++.dg/init/ctor4-1.C: New.
        * g++.dg/cpp0x/defaulted2.C: Adjust.
 
 
 2014-03-27  Jeff Law  <law@redhat.com>
 
-       PR target/60648
-       * g++.dg/pr60648.C: New test.
+       PR target/60648
+       * g++.dg/pr60648.C: New test.
 
 2014-03-28  Adam Butcher  <adam@jessamine.co.uk>
 
 
 2014-03-28  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
-       * gcc.dg/tree-ssa/ssa-dom-thread-4.c: Remove s390 special
-          option.
+       * gcc.dg/tree-ssa/ssa-dom-thread-4.c: Remove s390 special option.
        * lib/target-supports.exp: Return true for s390
-          in check_effective_logical_op_short_circuit.
+       in check_effective_logical_op_short_circuit.
 
 2014-03-28  Kirill Yukhin  <kirill.yukhin@intel.com>
 
-        * gcc.target/i386/avx512f-vshuff32x4-2.c: Fix initialization
+       * gcc.target/i386/avx512f-vshuff32x4-2.c: Fix initialization
        of second source operand.
        * gcc.target/i386/avx512f-vshuff64x2-2.c: Ditto.
        * gcc.target/i386/avx512f-vshufi32x4-2.c: Ditto.
 
 2014-03-24  Marek Polacek  <polacek@redhat.com>
 
-       * c-c++-common/ubsan/div-by-zero-4.c: Don't include limits.h.  Define
-       INT_MIN.
+       * c-c++-common/ubsan/div-by-zero-4.c: Don't include limits.h.
+       Define INT_MIN.
        * c-c++-common/ubsan/overflow-1.c: Check for unwanted output.
        * c-c++-common/ubsan/overflow-add-1.c: Likewise.
        * c-c++-common/ubsan/overflow-mul-1.c: Likewise.
 2014-03-21  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/60599
-       * lib/gcc-dg.exp (scan-module): Uncompress .mod files for
-       reading.
+       * lib/gcc-dg.exp (scan-module): Uncompress .mod files for reading.
 
 2014-03-20  Jakub Jelinek  <jakub@redhat.com>
 
 
 2014-02-19  Paul Pluzhnikov  <ppluzhnikov@google.com>
 
-       * gcc.dg/vect/no-vfa-vect-depend-2.c (main1): Fix buffer
-       overflow.
+       * gcc.dg/vect/no-vfa-vect-depend-2.c (main1): Fix buffer overflow.
 
 2014-02-19  Jakub Jelinek  <jakub@redhat.com>
 
 
 2014-02-10  Jakub Jelinek  <jakub@redhat.com>
 
-       * gcc.dg/vect/pr59984.c: Require effective target
-       vect_simd_clones.
+       * gcc.dg/vect/pr59984.c: Require effective target vect_simd_clones.
 
 2014-02-09  Paul Thomas  <pault@gcc.gnu.org>
 
        * gfortran.dg/vect/fast-math-mgrid-resid.f: Change
        -fdump-tree-optimized to -fdump-tree-pcom-details in dg-options and
        cleanup-tree-dump from optimized to pcom.  Remove scan-tree-dump-times
-       for vect_\[^\\n\]*\\+, add scan-tree-dump-times for no suitable chains and
-       Executing predictive commoning without unrolling.
+       for vect_\[^\\n\]*\\+, add scan-tree-dump-times for no suitable
+       chains and Executing predictive commoning without unrolling.
 
 2014-01-14  Kirill Yukhin  <kirill.yukhin@intel.com>
 
diff --git a/gcc/testsuite/c-c++-common/cilk-plus/AN/pr57541-2.c b/gcc/testsuite/c-c++-common/cilk-plus/AN/pr57541-2.c
new file mode 100644 (file)
index 0000000..83325a7
--- /dev/null
@@ -0,0 +1,15 @@
+/* PR middle-end/57541 */
+/* { dg-do compile } */
+/* { dg-options "-fcilkplus" } */
+
+int foo1 ()
+{
+  int a;
+  a = __sec_reduce_add (1); /* { dg-error "Invalid builtin arguments" } */
+}
+
+int foo2 ()
+{
+  int a;
+  a = __sec_reduce_add (); /* { dg-error "Invalid builtin arguments" } */
+}
index 9bff079..f379e46 100755 (executable)
@@ -1,9 +1,10 @@
+/* PR middle-end/57541 */
 /* { dg-do compile } */
 /* { dg-options "-fcilkplus" } */
 
 int A[10];
 
-int main () {
+int foo () {
 
   /* C compiler uses the term "undeclared" whereas C++ compiler uses
     "not declared".  Thus, grepping for declared seem to be the easiest.  */
@@ -13,5 +14,13 @@ int main () {
   A[l:s:c];
 }
 
-/* { dg-message "note: each" "defined" { target c }  10 } */
+int foo1 (int N) {
+
+  char c = (char)N;
+  short s = (short)N;
+  A[l:s:c]; /* { dg-error "declared" } */
+}
+
+
+/* { dg-message "note: each" "defined" { target c }  11 } */
 
diff --git a/gcc/testsuite/c-c++-common/cilk-plus/AN/pr58942.c b/gcc/testsuite/c-c++-common/cilk-plus/AN/pr58942.c
new file mode 100644 (file)
index 0000000..87903af
--- /dev/null
@@ -0,0 +1,8 @@
+/* PR c/58942 */
+/* { dg-do compile } */
+/* { dg-options "-fcilkplus" } */
+
+int foo (int*p, int i)
+{
+  return __sec_reduce_max_ind(p[1:i]);
+}
diff --git a/gcc/testsuite/c-c++-common/cilk-plus/AN/pr61191.c b/gcc/testsuite/c-c++-common/cilk-plus/AN/pr61191.c
new file mode 100644 (file)
index 0000000..deb8392
--- /dev/null
@@ -0,0 +1,10 @@
+/* PR c/61191 */
+/* { dg-do compile } */
+/* { dg-options "-fcilkplus" } */
+
+double f(double * A, double * B)
+{
+  return __sec_reduce_add((B[0:500])(; /* { dg-error "called object" "" { target c } } */
+/* { dg-error "expected expression before ';' token" "" { target c } 7 } */
+/* { dg-error "expected primary-expression before ';' token" "" { target c++ } 7 } */
+} /* { dg-error "expected" "" { target c } } */
diff --git a/gcc/testsuite/c-c++-common/cilk-plus/CK/invalid_sync.cc b/gcc/testsuite/c-c++-common/cilk-plus/CK/invalid_sync.cc
new file mode 100644 (file)
index 0000000..cf1caf1
--- /dev/null
@@ -0,0 +1,9 @@
+/* PR c/60189 */
+/* { dg-do compile } */
+/* { dg-options "-fcilkplus" } */
+
+int main (void)
+{
+    _Cilk_sync return; /* { dg-error " expected ';' before 'return'" } */
+    return 0;
+}
index 87fbaa2..9332396 100644 (file)
@@ -7,28 +7,28 @@ void
 foo ()
 {
   int v;
-  #pragma omp atomic seq_cst load      /* { dg-error "expected end of line" } */
-  v = x;                               /* { dg-error "invalid form" } */
-  #pragma omp atomic seq_cst, load     /* { dg-error "expected end of line" } */
-  v = x;                               /* { dg-error "invalid form" } */
-  #pragma omp atomic seq_cst store     /* { dg-error "expected end of line" } */
-  x = v;                               /* { dg-error "invalid form" } */
-  #pragma omp atomic seq_cst ,store    /* { dg-error "expected end of line" } */
-  x = v;                               /* { dg-error "invalid form" } */
-  #pragma omp atomic seq_cst update    /* { dg-error "expected end of line" } */
+  #pragma omp atomic seq_cst read
+  v = x;
+  #pragma omp atomic seq_cst, read
+  v = x;
+  #pragma omp atomic seq_cst write
+  x = v;
+  #pragma omp atomic seq_cst ,write
+  x = v;
+  #pragma omp atomic seq_cst update
   x += v;
-  #pragma omp atomic seq_cst , update  /* { dg-error "expected end of line" } */
+  #pragma omp atomic seq_cst , update
   x += v;
-  #pragma omp atomic seq_cst capture   /* { dg-error "expected end of line" } */
-  v = x += 2;                          /* { dg-error "invalid form" } */
-  #pragma omp atomic seq_cst, capture  /* { dg-error "expected end of line" } */
-  v = x += 2;                          /* { dg-error "invalid form" } */
-  #pragma omp atomic load , seq_cst    /* { dg-error "expected end of line" } */
-  v = x;                               /* { dg-error "invalid form" } */
-  #pragma omp atomic store ,seq_cst    /* { dg-error "expected end of line" } */
-  x = v;                               /* { dg-error "invalid form" } */
-  #pragma omp atomic update, seq_cst   /* { dg-error "expected end of line" } */
+  #pragma omp atomic seq_cst capture
+  v = x += 2;
+  #pragma omp atomic seq_cst, capture
+  v = x += 2;
+  #pragma omp atomic read , seq_cst
+  v = x;
+  #pragma omp atomic write ,seq_cst
+  x = v;
+  #pragma omp atomic update, seq_cst
   x += v;
-  #pragma omp atomic capture, seq_cst  /* { dg-error "expected end of line" } */
+  #pragma omp atomic capture, seq_cst
   v = x += 2;
 }
diff --git a/gcc/testsuite/c-c++-common/gomp/pr59073.c b/gcc/testsuite/c-c++-common/gomp/pr59073.c
new file mode 100644 (file)
index 0000000..543ff5d
--- /dev/null
@@ -0,0 +1,12 @@
+/* PR c/59073 */
+/* { dg-do compile } */
+/* { dg-options "-fopenmp" } */
+
+void
+foo ()
+{
+  int i; 
+#pragma omp distribute parallel for
+  for (i = 0; i < 10; i)       /* { dg-error "invalid increment expression" } */
+    ;
+}
diff --git a/gcc/testsuite/c-c++-common/gomp/pr60823-1.c b/gcc/testsuite/c-c++-common/gomp/pr60823-1.c
new file mode 100644 (file)
index 0000000..5f98572
--- /dev/null
@@ -0,0 +1,19 @@
+/* PR tree-optimization/60823 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fopenmp-simd" } */
+
+#pragma omp declare simd simdlen(4) notinbranch
+int
+foo (const double c1, const double c2)
+{
+  double z1 = c1, z2 = c2;
+  int res = 100, i;
+
+  for (i = 0; i < 100; i++)
+    {
+      res = (z1 * z1 + z2 * z2 > 4.0) ? (i < res ? i : res) : res;
+      z1 = c1 + z1 * z1 - z2 * z2;
+      z2 = c2 + 2.0 * z1 * z2;
+    }
+  return res;
+}
diff --git a/gcc/testsuite/c-c++-common/gomp/pr60823-2.c b/gcc/testsuite/c-c++-common/gomp/pr60823-2.c
new file mode 100644 (file)
index 0000000..4c87620
--- /dev/null
@@ -0,0 +1,44 @@
+/* PR tree-optimization/60823 */
+/* { dg-do run } */
+/* { dg-require-effective-target vect_simd_clones } */
+/* { dg-options "-O2 -fopenmp-simd" } */
+
+#pragma omp declare simd simdlen(4) notinbranch
+__attribute__((noinline)) int
+foo (double c1, double c2)
+{
+  double z1 = c1, z2 = c2;
+  int res = 100, i;
+
+  for (i = 0; i < 5; i++)
+    {
+      res = (z1 * z1 + z2 * z2 > 4.0) ? (i < res ? i : res) : res;
+      z1 = c1 + z1 * z1 - z2 * z2;
+      z2 = c2 + 2.0 * z1 * z2;
+      c1 += 0.5;
+      c2 += 0.5;
+    }
+  return res;
+}
+
+__attribute__((noinline, noclone)) void
+bar (double *x, double *y)
+{
+  asm volatile ("" : : "rm" (x), "rm" (y) : "memory");
+}
+
+int
+main ()
+{
+  int i;
+  double c[4] = { 0.0, 1.0, 0.0, 1.0 };
+  double d[4] = { 0.0, 1.0, 2.0, 0.0 };
+  int e[4];
+  bar (c, d);
+#pragma omp simd safelen(4)
+  for (i = 0; i < 4; i++)
+    e[i] = foo (c[i], d[i]);
+  if (e[0] != 3 || e[1] != 1 || e[2] != 1 || e[3] != 2)
+    __builtin_abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/c-c++-common/gomp/pr60823-3.c b/gcc/testsuite/c-c++-common/gomp/pr60823-3.c
new file mode 100644 (file)
index 0000000..93e9fbe
--- /dev/null
@@ -0,0 +1,32 @@
+/* PR tree-optimization/60823 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fopenmp-simd -fno-strict-aliasing" } */
+
+void bar (char *, double *);
+
+#if __SIZEOF_DOUBLE__ >= 4
+
+struct S { char c[sizeof (double)]; };
+void baz (struct S, struct S);
+union U { struct S s; double d; };
+
+#pragma omp declare simd simdlen(4) notinbranch
+__attribute__((noinline)) int
+foo (double c1, double c2)
+{
+  double *a = &c1;
+  char *b = (char *) &c1 + 2;
+
+  b[-2]++;
+  b[1]--;
+  *a++;
+  c2++;
+  bar ((char *) &c2 + 1, &c2);
+  c2 *= 3.0;
+  bar (b, a);
+  baz (((union U) { .d = c1 }).s, ((union U) { .d = c2 }).s);
+  baz (*(struct S *)&c1, *(struct S *)&c2);
+  return c1 + c2 + ((struct S *)&c1)->c[1];
+}
+
+#endif
diff --git a/gcc/testsuite/c-c++-common/gomp/pr61486-1.c b/gcc/testsuite/c-c++-common/gomp/pr61486-1.c
new file mode 100644 (file)
index 0000000..9ada58c
--- /dev/null
@@ -0,0 +1,13 @@
+/* PR middle-end/61486 */
+/* { dg-do compile } */
+/* { dg-options "-fopenmp" } */
+
+int
+foo (int *a)
+{
+  int i, j = 0;
+  #pragma omp target teams distribute simd linear(i, j) map(a[:10])
+  for (i = 0; i < 10; i++)
+    a[i] = j++;
+  return i + j;
+}
diff --git a/gcc/testsuite/c-c++-common/gomp/pr61486-2.c b/gcc/testsuite/c-c++-common/gomp/pr61486-2.c
new file mode 100644 (file)
index 0000000..7294381
--- /dev/null
@@ -0,0 +1,458 @@
+/* PR middle-end/61486 */
+/* { dg-do compile } */
+/* { dg-options "-fopenmp" } */
+
+#pragma omp declare target
+void dosomething (int *a, int n, int m);
+#pragma omp end declare target
+
+void
+test (int n, int o, int p, int q, int r, int s, int *pp)
+{
+  int a[o], i, j;
+  #pragma omp target data device (n + 1) if (n != 6) map (tofrom: n, r)
+  {
+    #pragma omp target device (n + 1) if (n != 6) map (from: n) map (alloc: a[2:o-2])
+      dosomething (a, n, 0);
+    #pragma omp target teams device (n + 1) num_teams (n + 4) thread_limit (n * 2) \
+       if (n != 6)map (from: n) map (alloc: a[2:o-2]) default(shared) \
+       private (p) firstprivate (q) shared (n) reduction (+: r)
+    {
+      r = r + 1;
+      p = q;
+      dosomething (a, n, p + q);
+    }
+    #pragma omp target teams distribute device (n + 1) num_teams (n + 4) collapse (2) \
+       if (n != 6)map (from: n) map (alloc: a[2:o-2]) default(shared) \
+       private (p) firstprivate (q) shared (n) reduction (+: r) \
+       thread_limit (n * 2) dist_schedule (static, 4)
+      for (i = 0; i < 10; i++)
+       for (j = 0; j < 10; j++)
+         {
+           r = r + 1;
+           p = q;
+           dosomething (a, n, p + q);
+         }
+    #pragma omp target teams distribute device (n + 1) num_teams (n + 4) \
+       if (n != 6)map (from: n) map (alloc: a[2:o-2]) default(shared) \
+       private (p) firstprivate (q) shared (n) reduction (+: r) \
+       thread_limit (n * 2) dist_schedule (static, 4)
+      for (i = 0; i < 10; i++)
+       for (j = 0; j < 10; j++)
+         {
+           r = r + 1;
+           p = q;
+           dosomething (a, n, p + q);
+         }
+    #pragma omp target teams distribute parallel for device (n + 1) num_teams (n + 4) \
+       if (n != 6)map (from: n) map (alloc: a[2:o-2]) default(shared) \
+       private (p) firstprivate (q) shared (n) reduction (+: r) \
+       thread_limit (n * 2) dist_schedule (static, 4) collapse (2) \
+       num_threads (n + 4) proc_bind (spread) lastprivate (s) \
+       ordered schedule (static, 8)
+      for (i = 0; i < 10; i++)
+       for (j = 0; j < 10; j++)
+         {
+           r = r + 1;
+           p = q;
+           dosomething (a, n, p + q);
+           #pragma omp ordered
+             p = q;
+           s = i * 10 + j;
+         }
+    #pragma omp target teams distribute parallel for device (n + 1) num_teams (n + 4) \
+       if (n != 6)map (from: n) map (alloc: a[2:o-2]) default(shared) \
+       private (p) firstprivate (q) shared (n) reduction (+: r) \
+       thread_limit (n * 2) dist_schedule (static, 4) num_threads (n + 4) \
+       proc_bind (master) lastprivate (s) ordered schedule (static, 8)
+      for (i = 0; i < 10; i++)
+       {
+         for (j = 0; j < 10; j++)
+           {
+             r = r + 1;
+             p = q;
+             dosomething (a, n, p + q);
+           }
+         #pragma omp ordered
+           p = q;
+         s = i * 10;
+       }
+    #pragma omp target teams distribute parallel for simd device (n + 1) \
+       if (n != 6)map (from: n) map (alloc: a[2:o-2]) default(shared) \
+       private (p) firstprivate (q) shared (n) reduction (+: r) \
+       thread_limit (n * 2) dist_schedule (static, 4) collapse (2) \
+       num_threads (n + 4) proc_bind (spread) lastprivate (s) \
+       schedule (static, 8) num_teams (n + 4) safelen(8)
+      for (i = 0; i < 10; i++)
+       for (j = 0; j < 10; j++)
+         {
+           r = r + 1;
+           p = q;
+           a[2+i*10+j] = p + q;
+           s = i * 10 + j;
+         }
+    #pragma omp target teams distribute parallel for simd device (n + 1) \
+       if (n != 6)map (from: n) map (alloc: a[2:o-2]) default(shared) \
+       private (p) firstprivate (q) shared (n) reduction (+: r) \
+       thread_limit (n * 2) dist_schedule (static, 4) num_threads (n + 4) \
+       proc_bind (master) lastprivate (s) schedule (static, 8) \
+       num_teams (n + 4) safelen(16) linear(i:1) aligned (pp:4)
+      for (i = 0; i < 10; i++)
+       {
+         r = r + 1;
+         p = q;
+         a[2+i] = p + q;
+         s = i * 10;
+       }
+    #pragma omp target teams distribute simd device (n + 1) \
+       if (n != 6)map (from: n) map (alloc: a[2:o-2]) default(shared) \
+       private (p) firstprivate (q) shared (n) reduction (+: r) \
+       thread_limit (n * 2) dist_schedule (static, 4) collapse (2) \
+       lastprivate (s) num_teams (n + 4) safelen(8)
+      for (i = 0; i < 10; i++)
+       for (j = 0; j < 10; j++)
+         {
+           r = r + 1;
+           p = q;
+           a[2+i*10+j] = p + q;
+           s = i * 10 + j;
+         }
+    #pragma omp target teams distribute simd device (n + 1) \
+       if (n != 6)map (from: n) map (alloc: a[2:o-2]) default(shared) \
+       private (p) firstprivate (q) shared (n) reduction (+: r) \
+       thread_limit (n * 2) dist_schedule (static, 4) lastprivate (s) \
+       num_teams (n + 4) safelen(16) linear(i:1) aligned (pp:4)
+      for (i = 0; i < 10; i++)
+       {
+         r = r + 1;
+         p = q;
+         a[2+i] = p + q;
+         s = i * 10;
+       }
+    #pragma omp target device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2])
+    #pragma omp teams num_teams (n + 4) thread_limit (n * 2) default(shared) \
+       private (p) firstprivate (q) shared (n) reduction (+: r)
+    {
+      r = r + 1;
+      p = q;
+      dosomething (a, n, p + q);
+    }
+    #pragma omp target device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2])
+    #pragma omp teams distribute num_teams (n + 4) collapse (2) default(shared) \
+       private (p) firstprivate (q) shared (n) reduction (+: r) \
+       thread_limit (n * 2) dist_schedule (static, 4)
+      for (i = 0; i < 10; i++)
+       for (j = 0; j < 10; j++)
+         {
+           r = r + 1;
+           p = q;
+           dosomething (a, n, p + q);
+         }
+    #pragma omp target device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2])
+    #pragma omp teams distribute num_teams (n + 4) default(shared) \
+       private (p) firstprivate (q) shared (n) reduction (+: r) \
+       thread_limit (n * 2) dist_schedule (static, 4)
+      for (i = 0; i < 10; i++)
+       for (j = 0; j < 10; j++)
+         {
+           r = r + 1;
+           p = q;
+           dosomething (a, n, p + q);
+         }
+    #pragma omp target device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2])
+    #pragma omp teams distribute parallel for num_teams (n + 4) if (n != 6) \
+       default(shared) private (p) firstprivate (q) shared (n) reduction (+: r) \
+       thread_limit (n * 2) dist_schedule (static, 4) collapse (2) \
+       num_threads (n + 4) proc_bind (spread) lastprivate (s) \
+       ordered schedule (static, 8)
+      for (i = 0; i < 10; i++)
+       for (j = 0; j < 10; j++)
+         {
+           r = r + 1;
+           p = q;
+           dosomething (a, n, p + q);
+           #pragma omp ordered
+             p = q;
+           s = i * 10 + j;
+         }
+    #pragma omp target device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2])
+    #pragma omp teams distribute parallel for num_teams (n + 4) if (n != 6) \
+       default(shared) private (p) firstprivate (q) shared (n) reduction (+: r) \
+       thread_limit (n * 2) dist_schedule (static, 4) num_threads (n + 4) \
+       proc_bind (master) lastprivate (s) ordered schedule (static, 8)
+      for (i = 0; i < 10; i++)
+       {
+         for (j = 0; j < 10; j++)
+           {
+             r = r + 1;
+             p = q;
+             dosomething (a, n, p + q);
+           }
+         #pragma omp ordered
+           p = q;
+         s = i * 10;
+       }
+    #pragma omp target device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2])
+    #pragma omp teams distribute parallel for simd if (n != 6)default(shared) \
+       private (p) firstprivate (q) shared (n) reduction (+: r) \
+       thread_limit (n * 2) dist_schedule (static, 4) collapse (2) \
+       num_threads (n + 4) proc_bind (spread) lastprivate (s) \
+       schedule (static, 8) num_teams (n + 4) safelen(8)
+      for (i = 0; i < 10; i++)
+       for (j = 0; j < 10; j++)
+         {
+           r = r + 1;
+           p = q;
+           a[2+i*10+j] = p + q;
+           s = i * 10 + j;
+         }
+    #pragma omp target device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2])
+    #pragma omp teams distribute parallel for simd if (n != 6)default(shared) \
+       private (p) firstprivate (q) shared (n) reduction (+: r) \
+       thread_limit (n * 2) dist_schedule (static, 4) num_threads (n + 4) \
+       proc_bind (master) lastprivate (s) schedule (static, 8) \
+       num_teams (n + 4) safelen(16) linear(i:1) aligned (pp:4)
+      for (i = 0; i < 10; i++)
+       {
+         r = r + 1;
+         p = q;
+         a[2+i] = p + q;
+         s = i * 10;
+       }
+    #pragma omp target device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2])
+    #pragma omp teams distribute simd default(shared) \
+       private (p) firstprivate (q) shared (n) reduction (+: r) \
+       thread_limit (n * 2) dist_schedule (static, 4) collapse (2) \
+       lastprivate (s) num_teams (n + 4) safelen(8)
+      for (i = 0; i < 10; i++)
+       for (j = 0; j < 10; j++)
+         {
+           r = r + 1;
+           p = q;
+           a[2+i*10+j] = p + q;
+           s = i * 10 + j;
+         }
+    #pragma omp target device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2])
+    #pragma omp teams distribute simd default(shared) \
+       private (p) firstprivate (q) shared (n) reduction (+: r) \
+       thread_limit (n * 2) dist_schedule (static, 4) lastprivate (s) \
+       num_teams (n + 4) safelen(16) linear(i:1) aligned (pp:4)
+      for (i = 0; i < 10; i++)
+       {
+         r = r + 1;
+         p = q;
+         a[2+i] = p + q;
+         s = i * 10;
+       }
+    #pragma omp target teams device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2]) \
+       num_teams (n + 4) thread_limit (n * 2)default(shared) shared(n) \
+       private (p) reduction (+: r)
+    #pragma omp distribute collapse (2) dist_schedule (static, 4) firstprivate (q)
+      for (i = 0; i < 10; i++)
+       for (j = 0; j < 10; j++)
+         {
+           r = r + 1;
+           p = q;
+           dosomething (a, n, p + q);
+         }
+    #pragma omp target teams device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2]) \
+       num_teams (n + 4) thread_limit (n * 2) shared(n) private(p) reduction (+ : r) \
+       default(shared)
+    #pragma omp distribute dist_schedule (static, 4) firstprivate (q)
+      for (i = 0; i < 10; i++)
+       for (j = 0; j < 10; j++)
+         {
+           r = r + 1;
+           p = q;
+           dosomething (a, n, p + q);
+         }
+    #pragma omp target teams device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2]) \
+       num_teams (n + 4) thread_limit (n * 2)
+    #pragma omp distribute parallel for if (n != 6) \
+       default(shared) private (p) firstprivate (q) shared (n) reduction (+: r) \
+       collapse (2) dist_schedule (static, 4) \
+       num_threads (n + 4) proc_bind (spread) lastprivate (s) \
+       ordered schedule (static, 8)
+      for (i = 0; i < 10; i++)
+       for (j = 0; j < 10; j++)
+         {
+           r = r + 1;
+           p = q;
+           dosomething (a, n, p + q);
+           #pragma omp ordered
+             p = q;
+           s = i * 10 + j;
+         }
+    #pragma omp target teams device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2]) \
+       num_teams (n + 4) thread_limit (n * 2)
+    #pragma omp distribute parallel for if (n != 6) \
+       default(shared) private (p) firstprivate (q) shared (n) reduction (+: r) \
+       num_threads (n + 4) dist_schedule (static, 4) \
+       proc_bind (master) lastprivate (s) ordered schedule (static, 8)
+      for (i = 0; i < 10; i++)
+       {
+         for (j = 0; j < 10; j++)
+           {
+             r = r + 1;
+             p = q;
+             dosomething (a, n, p + q);
+           }
+         #pragma omp ordered
+           p = q;
+         s = i * 10;
+       }
+    #pragma omp target teams device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2]) \
+       num_teams (n + 4) thread_limit (n * 2)
+    #pragma omp distribute parallel for simd if (n != 6)default(shared) \
+       private (p) firstprivate (q) shared (n) reduction (+: r) \
+       collapse (2) dist_schedule (static, 4) \
+       num_threads (n + 4) proc_bind (spread) lastprivate (s) \
+       schedule (static, 8) safelen(8)
+      for (i = 0; i < 10; i++)
+       for (j = 0; j < 10; j++)
+         {
+           r = r + 1;
+           p = q;
+           a[2+i*10+j] = p + q;
+           s = i * 10 + j;
+         }
+    #pragma omp target teams device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2]) \
+       num_teams (n + 4) thread_limit (n * 2)
+    #pragma omp distribute parallel for simd if (n != 6)default(shared) \
+       private (p) firstprivate (q) shared (n) reduction (+: r) \
+       num_threads (n + 4) dist_schedule (static, 4) \
+       proc_bind (master) lastprivate (s) schedule (static, 8) \
+       safelen(16) linear(i:1) aligned (pp:4)
+      for (i = 0; i < 10; i++)
+       {
+         r = r + 1;
+         p = q;
+         a[2+i] = p + q;
+         s = i * 10;
+       }
+    #pragma omp target teams device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2]) \
+       num_teams (n + 4) thread_limit (n * 2) default(shared) shared(n) private(p) \
+       reduction(+:r)
+    #pragma omp distribute simd private (p) firstprivate (q) reduction (+: r) \
+       collapse (2) dist_schedule (static, 4) lastprivate (s) safelen(8)
+      for (i = 0; i < 10; i++)
+       for (j = 0; j < 10; j++)
+         {
+           r = r + 1;
+           p = q;
+           a[2+i*10+j] = p + q;
+           s = i * 10 + j;
+         }
+    #pragma omp target teams device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2]) \
+       num_teams (n + 4) thread_limit (n * 2) default(shared) shared(n) private(p) \
+       reduction(+:r)
+    #pragma omp distribute simd private (p) firstprivate (q) reduction (+: r) \
+       lastprivate (s) dist_schedule (static, 4) safelen(16) linear(i:1) aligned (pp:4)
+      for (i = 0; i < 10; i++)
+       {
+         r = r + 1;
+         p = q;
+         a[2+i] = p + q;
+         s = i * 10;
+       }
+  }
+}
+
+int q, i, j;
+
+void
+test2 (int n, int o, int p, int r, int s, int *pp)
+{
+  int a[o];
+    #pragma omp distribute collapse (2) dist_schedule (static, 4) firstprivate (q)
+      for (i = 0; i < 10; i++)
+       for (j = 0; j < 10; j++)
+         {
+           r = r + 1;
+           p = q;
+           dosomething (a, n, p + q);
+         }
+    #pragma omp distribute dist_schedule (static, 4) firstprivate (q)
+      for (i = 0; i < 10; i++)
+       for (j = 0; j < 10; j++)
+         {
+           r = r + 1;
+           p = q;
+           dosomething (a, n, p + q);
+         }
+    #pragma omp distribute parallel for if (n != 6) \
+       default(shared) private (p) firstprivate (q) shared (n) reduction (+: r) \
+       collapse (2) dist_schedule (static, 4) \
+       num_threads (n + 4) proc_bind (spread) lastprivate (s) \
+       ordered schedule (static, 8)
+      for (i = 0; i < 10; i++)
+       for (j = 0; j < 10; j++)
+         {
+           r = r + 1;
+           p = q;
+           dosomething (a, n, p + q);
+           #pragma omp ordered
+             p = q;
+           s = i * 10 + j;
+         }
+    #pragma omp distribute parallel for if (n != 6) \
+       default(shared) private (p) firstprivate (q) shared (n) reduction (+: r) \
+       num_threads (n + 4) dist_schedule (static, 4) \
+       proc_bind (master) lastprivate (s) ordered schedule (static, 8)
+      for (i = 0; i < 10; i++)
+       {
+         for (j = 0; j < 10; j++)
+           {
+             r = r + 1;
+             p = q;
+             dosomething (a, n, p + q);
+           }
+         #pragma omp ordered
+           p = q;
+         s = i * 10;
+       }
+    #pragma omp distribute parallel for simd if (n != 6)default(shared) \
+       private (p) firstprivate (q) shared (n) reduction (+: r) \
+       collapse (2) dist_schedule (static, 4) \
+       num_threads (n + 4) proc_bind (spread) lastprivate (s) \
+       schedule (static, 8) safelen(8)
+      for (i = 0; i < 10; i++)
+       for (j = 0; j < 10; j++)
+         {
+           r = r + 1;
+           p = q;
+           a[2+i*10+j] = p + q;
+           s = i * 10 + j;
+         }
+    #pragma omp distribute parallel for simd if (n != 6)default(shared) \
+       private (p) firstprivate (q) shared (n) reduction (+: r) \
+       num_threads (n + 4) dist_schedule (static, 4) \
+       proc_bind (master) lastprivate (s) schedule (static, 8) \
+       safelen(16) linear(i:1) aligned (pp:4)
+      for (i = 0; i < 10; i++)
+       {
+         r = r + 1;
+         p = q;
+         a[2+i] = p + q;
+         s = i * 10;
+       }
+    #pragma omp distribute simd private (p) firstprivate (q) reduction (+: r) \
+       collapse (2) dist_schedule (static, 4) lastprivate (s) safelen(8)
+      for (i = 0; i < 10; i++)
+       for (j = 0; j < 10; j++)
+         {
+           r = r + 1;
+           p = q;
+           a[2+i*10+j] = p + q;
+           s = i * 10 + j;
+         }
+    #pragma omp distribute simd private (p) firstprivate (q) reduction (+: r) \
+       lastprivate (s) dist_schedule (static, 4) safelen(16) linear(i:1) aligned (pp:4)
+      for (i = 0; i < 10; i++)
+       {
+         r = r + 1;
+         p = q;
+         a[2+i] = p + q;
+         s = i * 10;
+       }
+}
diff --git a/gcc/testsuite/c-c++-common/torture/pr60971.c b/gcc/testsuite/c-c++-common/torture/pr60971.c
new file mode 100644 (file)
index 0000000..b7a967d
--- /dev/null
@@ -0,0 +1,34 @@
+/* PR tree-optimization/60971 */
+/* { dg-do run } */
+
+#ifndef __cplusplus
+#define bool _Bool
+#endif
+
+volatile unsigned char c;
+
+__attribute__((noinline)) unsigned char
+foo (void)
+{
+  return c;
+}
+
+__attribute__((noinline)) bool
+bar (void)
+{
+  return foo () & 1;
+}
+
+int
+main ()
+{
+  c = 0x41;
+  c = bar ();
+  if (c != 1)
+    __builtin_abort ();
+  c = 0x20;
+  c = bar ();
+  if (c != 0)
+    __builtin_abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-aggr1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-aggr1.C
new file mode 100644 (file)
index 0000000..7e4da11
--- /dev/null
@@ -0,0 +1,17 @@
+// PR c++/60951
+// { dg-do compile { target c++11 } }
+
+struct Foo {
+  constexpr Foo(int x = 0) : memb(x) {}
+  int memb;
+};
+
+struct FooContainer {
+  Foo foo[2];
+};
+
+void fubar() {
+  int nonConst = 0;
+  FooContainer fooContainer;
+  fooContainer = { { 0, nonConst } };
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem2.C
new file mode 100644 (file)
index 0000000..86859aa
--- /dev/null
@@ -0,0 +1,13 @@
+// PR c++/61661
+// { dg-do compile { target c++11 } }
+
+struct Outer {
+
+  void Bar();
+
+  struct Foo {
+    void (Outer::*ptr)() ;
+  };
+
+  static constexpr Foo foo = { &Outer::Bar };
+};
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-template7.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-template7.C
new file mode 100644 (file)
index 0000000..e835dbf
--- /dev/null
@@ -0,0 +1,32 @@
+// PR c++/61556
+// { dg-do compile { target c++11 } }
+
+class ValueType {
+public:
+    constexpr operator int() const {return m_ID;};
+    constexpr ValueType(const int v)
+        : m_ID(v) {}
+private:
+    int m_ID;
+};
+
+class ValueTypeEnum {
+public:
+    static constexpr ValueType doubleval = ValueType(1);
+};
+
+template <int format>
+class ValueTypeInfo {
+};
+
+template <typename Format>
+class FillFunctor {
+public:
+    FillFunctor() {
+        ValueTypeInfo<ValueTypeEnum::doubleval> v;
+    }
+};
+
+int main() {
+    ValueTypeInfo<ValueTypeEnum::doubleval> v;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted49.C b/gcc/testsuite/g++.dg/cpp0x/defaulted49.C
new file mode 100644 (file)
index 0000000..357be41
--- /dev/null
@@ -0,0 +1,15 @@
+// PR c++/60980
+// { dg-do compile { target c++11 } }
+
+struct x0
+{
+  x0 () = default;
+};
+struct x1
+{
+  x0 x2[2];
+  void x3 ()
+  {
+    x1 ();
+  }
+};
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist-array4.C b/gcc/testsuite/g++.dg/cpp0x/initlist-array4.C
new file mode 100644 (file)
index 0000000..af2045d
--- /dev/null
@@ -0,0 +1,9 @@
+// PR c++/58636
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+// { dg-error "pointer to reference" "" { target *-*-* } 0 }
+int foo(std::initializer_list<int&&>);
+
+int i = foo({ 0 });            // { dg-error "std::initializer_list" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist84.C b/gcc/testsuite/g++.dg/cpp0x/initlist84.C
new file mode 100644 (file)
index 0000000..4d46746
--- /dev/null
@@ -0,0 +1,17 @@
+// PR c++/61242
+// { dg-do compile { target c++11 } }
+
+struct Foo
+{
+  struct A
+  {
+    const int &container;
+    const int &args;
+  };
+  static void Create (const A &);
+};
+
+int main ()
+{
+  Foo::Create ({{}, {}});
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist86.C b/gcc/testsuite/g++.dg/cpp0x/initlist86.C
new file mode 100644 (file)
index 0000000..ace2ef9
--- /dev/null
@@ -0,0 +1,18 @@
+// PR c++/61382
+// { dg-do run { target c++11 } }
+
+struct A
+{
+  int i,j;
+  A(int i,int j):i(i),j(j){}
+};
+
+extern "C" int printf (const char *, ...);
+
+int main()
+{
+  int i = 0;
+  A a{i++,i++};
+  if (a.i != 0 || a.j != 1)
+    __builtin_abort();
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const3.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const3.C
new file mode 100644 (file)
index 0000000..a1ffadd
--- /dev/null
@@ -0,0 +1,38 @@
+// PR c++/60992
+// { dg-do compile { target c++11 } }
+
+struct ScopeGuardGenerator { };
+
+struct FF
+{
+  template < class F, class ... Ts >
+  void
+  operator () (F & ...)
+  {
+    const int n = sizeof ... (Ts) + 1;
+    void *mutexes[n];
+    auto _on_scope_exit_var_0 =
+      ScopeGuardGenerator () + [&mutexes] { };
+  }
+};
+
+template < class F >
+int operator+ (ScopeGuardGenerator, F) { return 1; }
+
+struct D
+{
+  template < class T0, class T1, class T2, class ... T >
+  void
+  operator () (T0, T1, const T2 & t2, T & ... t)
+  {
+    base (t2, t ...);
+  }
+  FF base;
+};
+
+D run_with_locks;
+
+void Fn ()
+{
+  run_with_locks ([] { }, 0, 0);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template13.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template13.C
new file mode 100644 (file)
index 0000000..adbb4db
--- /dev/null
@@ -0,0 +1,20 @@
+// PR c++/61566
+// { dg-do compile { target c++11 } }
+
+struct function
+{
+  template < typename _Functor>
+  function (_Functor);
+};
+
+struct C
+{
+  template <typename T>
+  void foo (T, function = [] {});
+};
+
+void bar ()
+{
+  C c;
+  c.foo (1);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this18.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this18.C
new file mode 100644 (file)
index 0000000..fec2da6
--- /dev/null
@@ -0,0 +1,30 @@
+// PR c++/61151
+// { dg-do compile { target c++11 } }
+
+struct B
+{
+  void foo () {}
+};
+
+template <class>
+struct A
+{
+  template <class> void bar ();
+  B a;
+};
+
+template <class T>
+template <class U>
+void
+A<T>::bar ()
+{
+  auto f = [this] () { auto g = [=] () { a.foo (); }; g (); };
+  f ();
+}
+
+int
+main ()
+{
+  A<int> a;
+  a.bar <int> ();
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/nsdmi-template10.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-template10.C
new file mode 100644 (file)
index 0000000..4a8c87e
--- /dev/null
@@ -0,0 +1,14 @@
+// PR c++/60999
+// { dg-do compile { target c++11 } }
+
+struct B
+{
+  template<int N, int M>
+  struct A;
+
+  template<int M>
+  struct A<1, M>
+  {
+    int X = M;
+  };
+};
diff --git a/gcc/testsuite/g++.dg/cpp0x/nsdmi-template11.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-template11.C
new file mode 100644 (file)
index 0000000..60e53c4
--- /dev/null
@@ -0,0 +1,15 @@
+// PR c++/58930
+// { dg-do compile { target c++11 } }
+
+struct SampleModule
+{
+  explicit SampleModule (int);
+};
+
+template < typename >
+struct BaseHandler
+{
+  SampleModule module_ { 0 };
+};
+
+BaseHandler<int> a;
diff --git a/gcc/testsuite/g++.dg/cpp0x/nsdmi-template12.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-template12.C
new file mode 100644 (file)
index 0000000..52ae257
--- /dev/null
@@ -0,0 +1,17 @@
+// PR c++/58753
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+template <class T>
+struct X {X(std::initializer_list<int>) {}};
+
+template <class zomg>
+class T {
+  X<T> x{1};
+};
+
+int main()
+{
+  T<int> t;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/nsdmi-template13.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-template13.C
new file mode 100644 (file)
index 0000000..65ccd0a
--- /dev/null
@@ -0,0 +1,11 @@
+// PR c++/58704
+// { dg-do compile { target c++11 } }
+
+struct A {};
+
+template<typename> struct B
+{
+  A a[1] = { };
+};
+
+B<int> b;
diff --git a/gcc/testsuite/g++.dg/cpp0x/nsdmi-template9.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-template9.C
new file mode 100644 (file)
index 0000000..0cfbb90
--- /dev/null
@@ -0,0 +1,16 @@
+// PR c++/60999
+// { dg-do compile { target c++11 } }
+
+template <typename A>
+struct foo
+{
+};
+  
+template<>
+struct foo<int>
+{
+  static constexpr int code = 42;
+  unsigned int bar = static_cast<unsigned int>(code);
+};
+  
+foo<int> a;
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr58155.C b/gcc/testsuite/g++.dg/cpp0x/pr58155.C
new file mode 100644 (file)
index 0000000..60b02ab
--- /dev/null
@@ -0,0 +1,13 @@
+// { dg-do compile { target c++11 } }
+
+#define BAZ "baz"
+
+#if 0
+
+"bar"BAZ
+
+R"(
+  bar
+)"BAZ
+
+#endif
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr58781.C b/gcc/testsuite/g++.dg/cpp0x/pr58781.C
new file mode 100644 (file)
index 0000000..58c972f
--- /dev/null
@@ -0,0 +1,18 @@
+// PR c++/58781
+// { dg-do compile { target c++11 } }
+
+#include <cstddef>
+
+int
+operator""_s(const char32_t *a, size_t b)
+{
+  return 0;
+}
+
+int
+f()
+{
+  using a = decltype(U"\x1181"_s);
+  using b = decltype(U"\x8111"_s);
+  using c = decltype(U" \x1181"_s);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr60249.C b/gcc/testsuite/g++.dg/cpp0x/pr60249.C
new file mode 100644 (file)
index 0000000..e650dcb
--- /dev/null
@@ -0,0 +1,6 @@
+// PR c++/60249
+// { dg-do compile { target c++11 } }
+
+decltype(""_) x; // { dg-error "unable to find string literal operator" }
+
+// { dg-error "invalid type in declaration before" "invalid" { target *-*-* } 4 }
diff --git a/gcc/testsuite/g++.dg/cpp0x/ref-qual15.C b/gcc/testsuite/g++.dg/cpp0x/ref-qual15.C
new file mode 100644 (file)
index 0000000..ca333c2
--- /dev/null
@@ -0,0 +1,13 @@
+// PR c++/59296
+// { dg-do compile { target c++11 } }
+
+struct Type
+{
+  void get() const& { }
+  void get() const&& { }
+};
+
+int main()
+{
+  Type{}.get();
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae50.C b/gcc/testsuite/g++.dg/cpp0x/sfinae50.C
new file mode 100644 (file)
index 0000000..e8d90ca
--- /dev/null
@@ -0,0 +1,41 @@
+// PR c++/61083
+// { dg-do compile { target c++11 } }
+
+template<typename T> T declval();
+
+template<typename T, typename U>
+struct is_same {
+  static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T> {
+  static const bool value = true;
+};
+
+struct true_type {};
+struct false_type {};
+
+template <typename T>
+struct is_foo {
+private:
+  template<typename U, U> struct helper {};
+
+  template <typename Z> static auto
+  test(Z z) -> decltype(helper<void (Z::*)() const, &Z::foo>(), true_type());
+
+  template <typename> static auto test(...) -> false_type;
+
+public:
+  enum { value = is_same<decltype(test<T>(declval<T>())), true_type>::value };
+};
+
+struct A { 
+  int foo();
+  void foo() const; 
+};
+
+struct A1 : public A {};
+
+static_assert (is_foo<A>::value == 1, "");
+static_assert (is_foo<A1>::value == 0, "");
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic158.C b/gcc/testsuite/g++.dg/cpp0x/variadic158.C
new file mode 100644 (file)
index 0000000..cc5c24d
--- /dev/null
@@ -0,0 +1,24 @@
+// PR c++/61134
+// { dg-do compile { target c++11 } }
+
+struct Base { };
+
+template <typename>
+struct Fixed {
+  typedef const char* name;
+};
+
+template <typename VT, typename... Fields>
+void New(const char* name,
+         typename Fixed<Fields>::name... field_names);
+
+template <typename VT, typename... Fields>
+void CreateMetric(const char* name,
+                  typename Fixed<Fields>::name... field_names,
+                  const Base&) { }
+
+
+void Fn()
+{
+  CreateMetric<int, const char*>("abcd", "def", Base());
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic159.C b/gcc/testsuite/g++.dg/cpp0x/variadic159.C
new file mode 100644 (file)
index 0000000..2b14d30
--- /dev/null
@@ -0,0 +1,14 @@
+// PR c++/61507
+// { dg-do compile { target c++11 } }
+
+struct A {
+  void foo(const int &);
+  void foo(float);
+};
+
+template <typename... Args>
+void bar(void (A::*memfun)(Args...), Args... args);
+
+void go(const int& i) {
+  bar<const int &>(&A::foo, i);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic160.C b/gcc/testsuite/g++.dg/cpp0x/variadic160.C
new file mode 100644 (file)
index 0000000..20fcd5b
--- /dev/null
@@ -0,0 +1,49 @@
+// PR c++/61539
+// { dg-do compile { target c++11 } }
+
+template <typename _CharT> class A;
+template <typename> class B;
+template <class charT> class C;
+template <> class C<char>
+{
+  virtual void xparse (int &, const B<A<char> > &) const;
+};
+template <class T, class charT = char> class G : C<charT>
+{
+public:
+  G (void *) {}
+  void default_value (const T &);
+  void xparse (int &, const B<A<charT> > &) const;
+};
+template <class T, class charT>
+void validate (int &, const B<A<charT> > &, T *, int);
+template <class T, class charT>
+void G<T, charT>::xparse (int &p1, const B<A<charT> > &p2) const
+{
+  validate (p1, p2, (T *)0, 0);
+}
+template <class T> G<T> *value (T *) { return new G<T>(0); }
+namespace Eigen
+{
+template <typename T> struct D;
+template <typename, int, int, int = 0, int = 0, int = 0 > class F;
+template <typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows,
+          int _MaxCols>
+struct D<F<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> >
+{
+  typedef _Scalar Scalar;
+};
+template <typename, int, int, int, int, int _MaxCols> class F
+{
+public:
+  typedef typename Eigen::D<F>::Scalar Scalar;
+  F (const Scalar &, const Scalar &, const Scalar &);
+};
+template <class... T>
+void validate (int &, const B<A<char> > &, Eigen::F<T...> *);
+}
+int main (int, char *[])
+{
+  Eigen::F<double, 3, 1> a (0, 0, 0);
+  value (&a)->default_value (Eigen::F<double, 3, 1>(0, 0, 0));
+}
diff --git a/gcc/testsuite/g++.dg/cpp1y/pr59867.C b/gcc/testsuite/g++.dg/cpp1y/pr59867.C
new file mode 100644 (file)
index 0000000..91d0259
--- /dev/null
@@ -0,0 +1,52 @@
+// PR c++/59867
+// { dg-do compile { target c++1y } }
+
+#include <iostream>
+using namespace std;
+
+// constant
+template<typename T, T x>
+  struct meta_value
+  {
+    typedef meta_value type;
+    typedef T value_type;
+    static const T value = x;
+  };
+
+// array
+template<typename T, T... data>
+  struct meta_array
+  {
+    typedef meta_array type;
+    typedef T item_type;
+  };
+
+// static array -> runtime array conversion utility
+template<typename T>
+  struct array_gen;
+
+template<typename T, T... xs>
+  struct array_gen<meta_array<T, xs...>>
+  {
+    static const T value[sizeof...(xs)];
+  };
+
+template<typename T, T... xs>
+  const T
+  array_gen<meta_array<T, xs...>>::value[sizeof...(xs)] = {xs...};
+
+// static string
+template<typename T, T... xs>
+  constexpr meta_array<T, xs...>
+  operator""_s()
+  {
+    static_assert(sizeof...(xs) == 3, "What's wrong with you?");
+    return meta_array<T, xs...>();
+  }
+
+int
+main()
+{
+  auto a = "123"_s;
+  const char (& xs)[3] = array_gen<decltype("123"_s)>::value;
+}
diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/imported-decl-2.C b/gcc/testsuite/g++.dg/debug/dwarf2/imported-decl-2.C
new file mode 100644 (file)
index 0000000..ce01f72
--- /dev/null
@@ -0,0 +1,32 @@
+// { dg-do compile }
+// { dg-options "-gdwarf-2 -dA -O0 -fno-merge-debug-strings" }
+
+class AAAA
+{
+ public:
+  int method (void);
+  int a;
+};
+
+int
+AAAA::method (void)
+{
+  return a;
+}
+
+class BBBB : public AAAA
+{
+ public:
+  using AAAA::method;
+
+  int method (int b);
+};
+
+int
+BBBB::method (int b)
+{
+  return a + b;
+}
+
+// { dg-final { scan-assembler-not "ascii \"BBBB\\\\0\".*ascii \"AAAA\\\\0\".*DW_TAG_imported_declaration" } }
+// { dg-final { scan-assembler-times "ascii \"AAAA\\\\0\".*ascii \"BBBB\\\\0\".*DIE .0x\[0-9a-f\]*. DW_TAG_imported_declaration" 1 } }
diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/pr61433.C b/gcc/testsuite/g++.dg/debug/dwarf2/pr61433.C
new file mode 100644 (file)
index 0000000..a63b8a9
--- /dev/null
@@ -0,0 +1,23 @@
+// PR c++/61433
+// { dg-do compile { target c++11 } }
+// { dg-options "-O -fcompare-debug -fno-inline -fno-ipa-pure-const -fipa-sra" }
+
+template <class T>
+struct A
+{
+  template <class V>
+  struct B
+  {
+    int MEM;
+  };
+};
+struct D {};
+struct C: public A<int>::B<D>
+{};
+template <class T, class U, class V>
+auto k(T t, U u, V v) -> decltype (t.U::template B<V>::MEM)
+{}
+int main()
+{
+  k( C(), A<int>(), D() );
+}
diff --git a/gcc/testsuite/g++.dg/ext/complit14.C b/gcc/testsuite/g++.dg/ext/complit14.C
new file mode 100644 (file)
index 0000000..aed765d
--- /dev/null
@@ -0,0 +1,11 @@
+// PR c++/61614
+// { dg-options "" }
+
+int Fn (...);
+
+void
+Test ()
+{
+  int j = Fn ((const int[]) { 0 });                    // OK
+  unsigned long sz = sizeof Fn ((const int[]) { 0 });  // Error
+}
diff --git a/gcc/testsuite/g++.dg/init/copy7.C b/gcc/testsuite/g++.dg/init/copy7.C
new file mode 100644 (file)
index 0000000..655fae2
--- /dev/null
@@ -0,0 +1,9 @@
+// CWG 5
+
+struct C { };
+C c;
+struct A {
+  A(const A&);
+  A(const C&);
+};
+const volatile A a = c;    // Okay
index d30d56c..2b6bdcb 100644 (file)
@@ -45,5 +45,5 @@ bar ()
 /* While inlining function called once we should devirtualize a new call to fn2
    and two to fn3. While doing so the new symbol for fn2 needs to be
    introduced.  */
-/* { dg-final { scan-ipa-dump-times "Discovered a virtual call to a known target" 3 "inline"  } } */
+/* { dg-final { scan-ipa-dump "Discovered a virtual call to a known target" "inline"  } } */
 /* { dg-final { cleanup-ipa-dump "inline" } } */
index 7516479..1da44f5 100644 (file)
@@ -22,5 +22,5 @@ void dpr_run(ebs_Object& objectA) {
   dpr_Job jobL;
   dpr_run(jobL);
 }
-/* { dg-final { scan-ipa-dump "Type inconsident devirtualization" "cp"  } } */
+/* { dg-final { scan-ipa-dump "Type inconsistent devirtualization" "cp"  } } */
 /* { dg-final { cleanup-ipa-dump "cp" } } */
index 1dcf76c..749f40a 100644 (file)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O3 -fdump-ipa-devirt -fdump-tree-optimized"  } */
+/* { dg-options "-O3 -fdump-tree-optimized"  } */
 struct A
  {
    int a;
diff --git a/gcc/testsuite/g++.dg/ipa/devirt-31.C b/gcc/testsuite/g++.dg/ipa/devirt-31.C
new file mode 100644 (file)
index 0000000..64c44ba
--- /dev/null
@@ -0,0 +1,23 @@
+/* { dg-options "-O2 -std=c++11 -fdump-ipa-inline"  } */
+#include <new>
+
+class EmbeddedObject {
+public:
+  virtual int val() { return 2; }
+};
+
+class Container {
+  alignas(EmbeddedObject) char buffer[sizeof(EmbeddedObject)];
+public:
+  EmbeddedObject *obj() { return (EmbeddedObject*)buffer; }
+  Container() { new (buffer) EmbeddedObject(); }
+};
+
+Container o;
+
+int main()
+{
+  __builtin_printf("%d\n", o.obj()->val());
+}
+/* { dg-final { scan-ipa-dump-not "__builtin_unreachable"  "inline"  } } */
+/* { dg-final { cleanup-ipa-dump "inline" } } */
index 00c368e..0753931 100644 (file)
@@ -30,5 +30,5 @@ void test(top& t)
     test(d);
 }
 
-/* { dg-final { scan-ipa-dump "Type inconsident devirtualization" "cp" } } */
+/* { dg-final { scan-ipa-dump "Type inconsistent devirtualization" "cp" } } */
 /* { dg-final { cleanup-ipa-dump "cp" } } */
diff --git a/gcc/testsuite/g++.dg/ipa/pr61085.C b/gcc/testsuite/g++.dg/ipa/pr61085.C
new file mode 100644 (file)
index 0000000..531f59d
--- /dev/null
@@ -0,0 +1,33 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fno-early-inlining" } */
+
+struct A {};
+struct B : virtual A {
+  unsigned m_i;
+  B() : m_i () {}
+  virtual A *m_virt ()
+  {
+    return 0;
+  }
+  ~B ()
+  {
+    m_foo ();
+    while (m_i)
+      ;
+  }
+  void m_foo ()
+  {
+    m_virt ();
+  }
+};
+
+class C : B {
+  A *m_virt () {
+    __builtin_abort ();
+  }
+};
+
+int main ()
+{
+  C c;
+}
diff --git a/gcc/testsuite/g++.dg/ipa/pr61160-1.C b/gcc/testsuite/g++.dg/ipa/pr61160-1.C
new file mode 100644 (file)
index 0000000..a0fbb5f
--- /dev/null
@@ -0,0 +1,31 @@
+/* { dg-do compile } */
+/* { dg-options "-O3"  } */
+
+struct CBase {
+  virtual void BaseFunc () {}
+};
+
+struct MMixin {
+  virtual void * MixinFunc (int, void *) = 0;
+};
+
+struct CExample: CBase, public MMixin
+{
+  void *MixinFunc (int arg, void *arg2)
+  {
+    if (arg != 1 || arg2)
+      return 0;
+    return this;
+  }
+};
+
+void *test (MMixin & anExample)
+{
+  return anExample.MixinFunc (1, 0);
+}
+
+int main ()
+{
+  CExample c;
+  return (test (c) != &c);
+}
diff --git a/gcc/testsuite/g++.dg/ipa/pr61160-2.C b/gcc/testsuite/g++.dg/ipa/pr61160-2.C
new file mode 100644 (file)
index 0000000..1011bd1
--- /dev/null
@@ -0,0 +1,43 @@
+/* { dg-do run } */
+/* { dg-options "-O3 --param ipa-cp-eval-threshold=1"  } */
+
+extern "C" void abort (void);
+
+struct CBase {
+  virtual void BaseFunc () {}
+};
+
+struct MMixin {
+  virtual void * MixinFunc (int, void *) = 0;
+};
+
+struct CExample: CBase, public MMixin
+{
+  int stuff, magic, more_stuff;
+
+  CExample ()
+  {
+    stuff = 0;
+    magic = 0xbeef;
+    more_stuff = 0;
+  }
+  void *MixinFunc (int arg, void *arg2)
+  {
+    if (arg != 1 || arg2)
+      return 0;
+    if (magic != 0xbeef)
+      abort();
+    return this;
+  }
+};
+
+void *test (MMixin & anExample)
+{
+  return anExample.MixinFunc (1, 0);
+}
+
+int main ()
+{
+  CExample c;
+  return (test (c) != &c);
+}
diff --git a/gcc/testsuite/g++.dg/ipa/pr61160-3.C b/gcc/testsuite/g++.dg/ipa/pr61160-3.C
new file mode 100644 (file)
index 0000000..8184ec2
--- /dev/null
@@ -0,0 +1,37 @@
+/* { dg-do run } */
+/* { dg-options "-O3"  } */
+
+struct A {
+  void *p;
+  A (void *q) : p (q) {}
+  A (const A &) : p () {}
+};
+
+struct CBase {
+  virtual void BaseFunc () {}
+};
+
+struct MMixin {
+  virtual A MixinFunc (int, A) = 0;
+};
+
+struct CExample: CBase, public MMixin
+{
+  A MixinFunc (int arg, A arg2)
+  {
+    if (arg != 1 || arg2.p)
+      return 0;
+    return this;
+  }
+};
+
+void *test (MMixin & anExample)
+{
+  return anExample.MixinFunc (1, (0)).p;
+}
+
+int main ()
+{
+  CExample c;
+  return (test (c) != &c);
+}
diff --git a/gcc/testsuite/g++.dg/ipa/pr61540.C b/gcc/testsuite/g++.dg/ipa/pr61540.C
new file mode 100644 (file)
index 0000000..e7dee72
--- /dev/null
@@ -0,0 +1,38 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -fno-early-inlining" } */
+
+struct data {
+  data(int) {}
+};
+
+struct top {
+  virtual int topf() {}
+};
+
+struct intermediate: top {
+    int topf() /* override */ { return 0; }
+};
+
+struct child1: top {
+    void childf()
+    {
+        data d(topf());
+    }
+};
+
+struct child2: intermediate {};
+
+void test(top& t)
+{
+    child1& c = static_cast<child1&>(t);
+    c.childf();
+    child2 d;
+    test(d);
+}
+
+int main (int argc, char **argv)
+{
+  child1 c;
+  test (c);
+  return 0;
+}
diff --git a/gcc/testsuite/g++.dg/opt/pr60849.C b/gcc/testsuite/g++.dg/opt/pr60849.C
new file mode 100644 (file)
index 0000000..52d8826
--- /dev/null
@@ -0,0 +1,13 @@
+// { dg-do compile }
+// { dg-options "-O2" }
+
+int g;
+
+extern "C" int isnan ();
+
+void foo(float a) {
+  int (*xx)(...);
+  xx = isnan;
+  if (xx(a))
+    g++;
+}
diff --git a/gcc/testsuite/g++.dg/opt/pr60912.C b/gcc/testsuite/g++.dg/opt/pr60912.C
new file mode 100644 (file)
index 0000000..ad51ba7
--- /dev/null
@@ -0,0 +1,18 @@
+// { dg-do run }
+// { dg-options "-O -fno-inline -fipa-pta" }
+
+struct IFoo
+{
+  virtual void Foo () = 0;
+};
+
+struct Bar:IFoo
+{
+  void Foo () {}
+};
+
+int main ()
+{
+  (new Bar ())->Foo ();
+  return 0;
+}
diff --git a/gcc/testsuite/g++.dg/opt/pr61456.C b/gcc/testsuite/g++.dg/opt/pr61456.C
new file mode 100644 (file)
index 0000000..14a118b
--- /dev/null
@@ -0,0 +1,26 @@
+// { dg-do compile }
+// { dg-options "-O2 -std=c++11 -Werror=uninitialized" }
+
+int rand ();
+
+class Funcs
+{
+public:
+    int *f1 ();
+    int *f2 ();
+};
+typedef decltype (&Funcs::f1) pfunc;
+
+static int Set (Funcs * f, const pfunc & fp)
+{
+  (f->*fp) ();
+}
+
+void
+Foo ()
+{
+  pfunc fp = &Funcs::f1;
+  if (rand ())
+    fp = &Funcs::f2;
+  Set (0, fp);
+}
diff --git a/gcc/testsuite/g++.dg/opt/pr61654.C b/gcc/testsuite/g++.dg/opt/pr61654.C
new file mode 100644 (file)
index 0000000..78dc0c1
--- /dev/null
@@ -0,0 +1,27 @@
+// PR middle-end/61654
+// { dg-do compile }
+
+class A
+{
+  virtual int a (int, int = 0) = 0;
+  int b (const int &);
+  int c;
+};
+
+class B : virtual A
+{
+  int d;
+  int a (int, int);
+};
+
+int
+A::b (const int &)
+{
+  return a ('\0');
+}
+
+int
+B::a (int, int)
+{
+  return 0 ? 0 : d;
+}
diff --git a/gcc/testsuite/g++.dg/opt/typeinfo1.C b/gcc/testsuite/g++.dg/opt/typeinfo1.C
new file mode 100644 (file)
index 0000000..efac4cb
--- /dev/null
@@ -0,0 +1,27 @@
+// PR c++/61020
+// { dg-options "-O2" }
+// { dg-do run }
+
+#include <typeinfo>
+
+struct Base {
+  virtual ~Base() { }
+};
+
+struct Derived : public Base {
+};
+
+int compare(const Base& base)
+{
+  return typeid(base) == typeid(typeid(Derived));
+}
+
+int main()
+{
+  Base base;
+  Derived derived;
+
+  if (compare(base)) return 1;
+  if (compare(derived)) return 2;
+  return 0;
+}
diff --git a/gcc/testsuite/g++.dg/pr60969.C b/gcc/testsuite/g++.dg/pr60969.C
new file mode 100644 (file)
index 0000000..4012e2c
--- /dev/null
@@ -0,0 +1,32 @@
+/* { dg-do compile { target { { i?86-*-* x86_64-*-* } && ia32 } } } */
+/* { dg-options "-O2 -ftree-vectorize -march=pentium4 -mfpmath=387" } */
+
+struct A
+{
+  float f, g, h, k;
+  A () {}
+  A (float v0, float x, float y) : f(v0), g(x), h(y), k(0.0f) {}
+  A bar (A &a, float t) { return A (f + a.f * t, g + a.g * t, h + a.h * t); }
+};
+
+A
+baz (A &x, A &y, float t)
+{
+  return x.bar (y, t);
+}
+
+A *
+foo (A &s, A &t, A &u, A &v, int y, int z)
+{
+  A *x = new A[y * z];
+  for (int i = 0; i < 7; i++)
+    {
+      A s = baz (s, u, i / (float) z);
+      A t = baz (t, v, i / (float) z);
+      for (int j = 0; j < 7; j++)
+        x[i * y + j] = baz (s, t, j / (float) y);
+    }
+  return x;
+}
+
+/* { dg-final { scan-assembler-not "%mm" } } */
diff --git a/gcc/testsuite/g++.dg/pr61094.C b/gcc/testsuite/g++.dg/pr61094.C
new file mode 100644 (file)
index 0000000..35adc25
--- /dev/null
@@ -0,0 +1,31 @@
+/* { dg-do compile } */
+/* { dg-options "-O3" }  */
+
+template <typename> struct A {
+  unsigned _width, _height, _depth, _spectrum;
+  template <typename t> A(t p1) {
+    int a = p1.size();
+    if (a) {
+      _width = p1._width;
+      _depth = _height = _spectrum = p1._spectrum;
+    }
+  }
+  long size() { return (long)_width * _height * _depth * _spectrum; }
+};
+
+int d;
+void fn1(void *);
+A<int> *fn2();
+void fn3() {
+  int b;
+  for (;;) {
+    A<char> c(*fn2());
+    fn1(&c);
+    if (d || !b)
+      throw;
+  }
+}
+
+
+
+
diff --git a/gcc/testsuite/g++.dg/pr61289-2.c b/gcc/testsuite/g++.dg/pr61289-2.c
new file mode 100644 (file)
index 0000000..4cc3ebe
--- /dev/null
@@ -0,0 +1,62 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fno-exceptions" } */
+struct S
+{
+  inline int fn1 () const { return s; }
+  __attribute__ ((noinline, noclone)) S *fn2 (int);
+  __attribute__ ((noinline, noclone)) void fn3 ();
+  __attribute__ ((noinline, noclone)) static S *fn4 (int);
+  S (int i) : s (i) {}
+  int s;
+};
+
+int a = 0;
+S *b = 0;
+
+S *
+S::fn2 (int i)
+{
+  a++;
+  if (a == 1)
+    return b;
+  if (a > 3)
+    __builtin_abort ();
+  b = this;
+  return new S (i + s);
+}
+
+S *
+S::fn4 (int i)
+{
+  b = new S (i);
+  return b;
+}
+
+void
+S::fn3 ()
+{
+  delete this;
+}
+
+void
+foo ()
+{
+  S *c = S::fn4 (20);
+  for (int i = 0; i < 2;)
+    {
+      S *d = c->fn2 (c->fn1 () + 10);
+      if (c != d)
+{
+  c->fn3 ();
+  c = d;
+  ++i;
+}
+    }
+  c->fn3 ();
+}
+
+int
+main ()
+{
+  foo ();
+}
diff --git a/gcc/testsuite/g++.dg/pr61289.C b/gcc/testsuite/g++.dg/pr61289.C
new file mode 100644 (file)
index 0000000..ea7ccea
--- /dev/null
@@ -0,0 +1,63 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fno-exceptions" } */
+
+struct S
+{
+  inline int fn1 () const { return s; }
+  __attribute__ ((noinline, noclone)) S *fn2 (int);
+  __attribute__ ((noinline, noclone)) void fn3 ();
+  __attribute__ ((noinline, noclone)) static S *fn4 (int);
+  S (int i) : s (i) {}
+  int s;
+};
+
+int a = 0;
+S *b = 0;
+
+S *
+S::fn2 (int i)
+{
+  a++;
+  if (a == 1)
+    return b;
+  if (a > 3)
+    __builtin_abort ();
+  b = this;
+  return new S (i + s);
+}
+
+S *
+S::fn4 (int i)
+{
+  b = new S (i);
+  return b;
+}
+
+void
+S::fn3 ()
+{
+  delete this;
+}
+
+void
+foo ()
+{
+  S *c = S::fn4 (20);
+  for (int i = 0; i < 2;)
+    {
+      S *d = c->fn2 (c->fn1 () + 10);
+      if (d != c)
+{
+  c->fn3 ();
+  c = d;
+  ++i;
+}
+    }
+  c->fn3 ();
+}
+
+int
+main ()
+{
+  foo ();
+}
diff --git a/gcc/testsuite/g++.dg/template/conv14.C b/gcc/testsuite/g++.dg/template/conv14.C
new file mode 100644 (file)
index 0000000..509ae6a
--- /dev/null
@@ -0,0 +1,30 @@
+// PR c++/61647
+
+class XX;
+
+template<typename Container, typename Key>
+struct Accessor;
+
+template<typename Container, typename Key, typename KeyStore = Key>
+class Variant {
+protected:
+    KeyStore index;
+    Container state;
+public:
+    Variant(Container st, const Key& i) : index(i), state(st) {}
+
+    template<typename T>
+    operator T() const {
+        return Accessor<Container, KeyStore>::template get<T>(state, index);
+    }
+};
+
+class AutoCleanVariant : public Variant<XX*, int> {
+public:
+    AutoCleanVariant(XX* st, int i) : Variant<XX*,int>(st,i) {}
+
+    template<typename T>
+    operator T() const {
+         return Variant<XX*, int>::operator T();
+    }
+};
diff --git a/gcc/testsuite/g++.dg/template/local-fn1.C b/gcc/testsuite/g++.dg/template/local-fn1.C
new file mode 100644 (file)
index 0000000..88acd17
--- /dev/null
@@ -0,0 +1,8 @@
+// PR c++/60605
+
+template <typename T = int>
+struct Foo {
+    void bar() {
+        void bug();
+    }
+};
diff --git a/gcc/testsuite/g++.dg/template/pr61537.C b/gcc/testsuite/g++.dg/template/pr61537.C
new file mode 100644 (file)
index 0000000..12aaf58
--- /dev/null
@@ -0,0 +1,23 @@
+// PR c++/61537
+// { dg-do compile }
+
+struct A {};
+
+template <typename T>
+struct B
+{
+  template <typename U>
+  void f(U, struct A);
+};
+
+template <typename T>
+template <typename U>
+void B<T>::f(U, struct A)
+{
+}
+
+int main()
+{
+  B<char> b;
+  b.f(42, A());
+}
diff --git a/gcc/testsuite/g++.dg/template/ptrmem27.C b/gcc/testsuite/g++.dg/template/ptrmem27.C
new file mode 100644 (file)
index 0000000..8c63f9c
--- /dev/null
@@ -0,0 +1,22 @@
+// PR c++/61500
+
+struct X {
+  int i;
+  int j;
+
+  int foo(int X::* ptr);
+
+  template <int X::* ptr>
+  int bar();
+};
+
+int X::foo(int X::* ptr) {
+  int* p = &(this->*ptr);  // OK.
+  return *p;
+}
+
+template <int X::* ptr>
+int X::bar() {
+  int* p = &(this->*ptr);  // gcc 4.9.0: OK in C++98 mode, fails in C++11 mode.
+  return *p;
+}
diff --git a/gcc/testsuite/g++.dg/template/ptrmem28.C b/gcc/testsuite/g++.dg/template/ptrmem28.C
new file mode 100644 (file)
index 0000000..0379960
--- /dev/null
@@ -0,0 +1,10 @@
+// PR c++/61488
+
+struct A {
+  typedef int (A::*cont_func)();
+  template <A::cont_func> void wait(int);
+  int notify();
+
+  void fix() { wait<&A::notify>(0); } // OK
+  template <int> void repair() { wait<&A::notify>(0); }
+};
diff --git a/gcc/testsuite/g++.dg/tls/thread_local9.C b/gcc/testsuite/g++.dg/tls/thread_local9.C
new file mode 100644 (file)
index 0000000..c75528a
--- /dev/null
@@ -0,0 +1,23 @@
+// PR c++/61343
+
+// { dg-do run { target c++11 } }
+// { dg-add-options tls }
+// { dg-require-effective-target tls_runtime }
+
+struct Foo {
+  int value;
+
+  Foo() noexcept {
+    value = 12;
+  }
+};
+
+static thread_local Foo a{};
+
+static __attribute__((noinline)) void UseA() {
+  if (a.value != 12) __builtin_abort();
+}
+
+int main() {
+  UseA();
+}
diff --git a/gcc/testsuite/g++.dg/torture/pr60854.C b/gcc/testsuite/g++.dg/torture/pr60854.C
new file mode 100644 (file)
index 0000000..fa4b2e7
--- /dev/null
@@ -0,0 +1,13 @@
+template <typename T>
+class MyClass
+{
+public:
+  __attribute__ ((__always_inline__)) inline MyClass () { ; }
+};
+
+extern template class MyClass<double>;
+
+void Func()
+{
+  MyClass<double> x;
+}
diff --git a/gcc/testsuite/g++.dg/torture/pr60895.C b/gcc/testsuite/g++.dg/torture/pr60895.C
new file mode 100644 (file)
index 0000000..0edd36a
--- /dev/null
@@ -0,0 +1,32 @@
+// { dg-do compile }
+
+struct C
+{
+  double elems[3];
+};
+
+C
+foo ()
+{
+  C a;
+  double *f = a.elems;
+  int b;
+  for (; b;)
+    {
+      *f = 0;
+      ++f;
+    }
+  return a;
+}
+
+struct J
+{
+  C c;
+  __attribute__((always_inline)) J () : c (foo ()) {}
+};
+
+void
+bar ()
+{
+  J ();
+}
diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr61009.C b/gcc/testsuite/g++.dg/tree-ssa/pr61009.C
new file mode 100644 (file)
index 0000000..4e7bb1a
--- /dev/null
@@ -0,0 +1,53 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-tree-vrp -std=c++11 -fno-strict-aliasing -fdump-tree-dom1" } */
+
+#include <stdio.h>
+struct Field {
+ virtual int Compare(void*, void*);
+};
+extern int NKF, NR;
+extern int idxs[];
+extern Field* the_field;
+extern int *incs;
+extern char** fptrs;
+inline int doCmp(int this_row_offset, int field_idx) {
+ void *p = fptrs[field_idx] + this_row_offset * incs[field_idx];
+ return the_field->Compare(p,0);
+}
+bool  Test(void) {
+
+ int row_offset = 0;
+
+ for (; row_offset < NR; ++row_offset) {
+
+   bool is_different = false;
+   for (int j = 0; j < NKF ; ++j) {
+     int field_idx = idxs[j];
+     int cmp = doCmp(row_offset, field_idx);
+     fprintf (stderr, "cmp=%d\n",cmp);
+
+     if (cmp == 0) {
+       continue;
+     }
+     if (cmp > 0) {
+       is_different = true;
+       break;
+     } else {
+       fprintf (stderr, "Incorrect\n");
+       return false;
+     }
+   }
+   if (!is_different) {
+
+     return false;
+   }
+ }
+
+ return true;
+}
+
+// The block ending with cmp == 0 should not be threaded.  ie,
+// there should be a single == 0 comparison in the dump file.
+
+// { dg-final { scan-tree-dump-times "== 0" 1 "dom1" } }
+// { dg-final { cleanup-tree-dump "dom1" } }
diff --git a/gcc/testsuite/g++.dg/vect/pr60836.cc b/gcc/testsuite/g++.dg/vect/pr60836.cc
new file mode 100644 (file)
index 0000000..83bb183
--- /dev/null
@@ -0,0 +1,39 @@
+// { dg-do compile }
+
+int a, b;
+typedef double (*NormFunc) (const int &);
+int &
+max (int &p1, int &p2)
+{
+  if (p1 < p2)
+    return p2;
+  return p1;
+}
+
+struct A
+{
+  int operator      () (int p1, int p2)
+    {
+      return max (p1, p2);
+    }
+};
+template < class, class > double
+norm_ (const int &)
+{
+  char c, d;
+  A e;
+  for (; a; a++)
+    {
+      b = e (b, d);
+      b = e (b, c);
+    }
+}
+
+void
+norm ()
+{
+  static NormFunc f = norm_ < int, A >;
+  f = 0;
+}
+
+// { dg-final { cleanup-tree-dump "vect" } }
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr61684.c b/gcc/testsuite/gcc.c-torture/compile/pr61684.c
new file mode 100644 (file)
index 0000000..f5b53b7
--- /dev/null
@@ -0,0 +1,15 @@
+/* PR tree-optimization/61684 */
+
+int a, c;
+static int *b = 0;
+short d;
+static short **e = 0;
+
+void
+foo ()
+{
+  for (; c < 1; c++)
+    ;
+  *e = &d;
+  a = d && (c && 1) & *b;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/20140425-1.c b/gcc/testsuite/gcc.c-torture/execute/20140425-1.c
new file mode 100644 (file)
index 0000000..c447ef9
--- /dev/null
@@ -0,0 +1,23 @@
+/* PR target/60941 */
+/* Reported by Martin Husemann <martin@netbsd.org> */
+
+extern void abort (void);
+
+static void __attribute__((noinline))
+set (unsigned long *l)
+{
+  *l = 31;
+}
+
+int main (void)
+{
+  unsigned long l;
+  int i;
+
+  set (&l);
+  i = (int) l;
+  l = (unsigned long)(2U << i);
+  if (l != 0)
+    abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr60960.c b/gcc/testsuite/gcc.c-torture/execute/pr60960.c
new file mode 100644 (file)
index 0000000..b4f08d4
--- /dev/null
@@ -0,0 +1,38 @@
+/* PR tree-optimization/60960 */
+
+typedef unsigned char v4qi __attribute__ ((vector_size (4)));
+
+__attribute__((noinline, noclone)) v4qi
+f1 (v4qi v)
+{
+  return v / 2;
+}
+
+__attribute__((noinline, noclone)) v4qi
+f2 (v4qi v)
+{
+  return v / (v4qi) { 2, 2, 2, 2 };
+}
+
+__attribute__((noinline, noclone)) v4qi
+f3 (v4qi x, v4qi y)
+{
+  return x / y;
+}
+
+int
+main ()
+{
+  v4qi x = { 5, 5, 5, 5 };
+  v4qi y = { 2, 2, 2, 2 };
+  v4qi z = f1 (x);
+  if (__builtin_memcmp (&y, &z, sizeof (y)) != 0)
+    __builtin_abort ();
+  z = f2 (x);
+  if (__builtin_memcmp (&y, &z, sizeof (y)) != 0)
+    __builtin_abort ();
+  z = f3 (x, y);
+  if (__builtin_memcmp (&y, &z, sizeof (y)) != 0)
+    __builtin_abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr61306-1.c b/gcc/testsuite/gcc.c-torture/execute/pr61306-1.c
new file mode 100644 (file)
index 0000000..ebc90a3
--- /dev/null
@@ -0,0 +1,39 @@
+#ifdef __INT32_TYPE__
+typedef __INT32_TYPE__ int32_t;
+#else
+typedef int int32_t;
+#endif
+
+#ifdef __UINT32_TYPE__
+typedef __UINT32_TYPE__ uint32_t;
+#else
+typedef unsigned uint32_t;
+#endif
+
+#define __fake_const_swab32(x) ((uint32_t)(                  \
+       (((uint32_t)(x) & (uint32_t)0x000000ffUL) << 24) |    \
+       (((uint32_t)(x) & (uint32_t)0x0000ff00UL) <<  8) |    \
+       (((uint32_t)(x) & (uint32_t)0x00ff0000UL) >>  8) |    \
+       (( (int32_t)(x) &  (int32_t)0xff000000UL) >> 24)))
+
+/* Previous version of bswap optimization failed to consider sign extension
+   and as a result would replace an expression *not* doing a bswap by a
+   bswap.  */
+
+__attribute__ ((noinline, noclone)) uint32_t
+fake_bswap32 (uint32_t in)
+{
+  return __fake_const_swab32 (in);
+}
+
+int
+main(void)
+{
+  if (sizeof (int32_t) * __CHAR_BIT__ != 32)
+    return 0;
+  if (sizeof (uint32_t) * __CHAR_BIT__ != 32)
+    return 0;
+  if (fake_bswap32 (0x87654321) != 0xffffff87)
+    __builtin_abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr61306-2.c b/gcc/testsuite/gcc.c-torture/execute/pr61306-2.c
new file mode 100644 (file)
index 0000000..886ecfd
--- /dev/null
@@ -0,0 +1,40 @@
+#ifdef __INT16_TYPE__
+typedef __INT16_TYPE__ int16_t;
+#else
+typedef short int16_t;
+#endif
+
+#ifdef __UINT32_TYPE__
+typedef __UINT32_TYPE__ uint32_t;
+#else
+typedef unsigned uint32_t;
+#endif
+
+#define __fake_const_swab32(x) ((uint32_t)(                          \
+       (((uint32_t)         (x) & (uint32_t)0x000000ffUL) << 24) |   \
+       (((uint32_t)(int16_t)(x) & (uint32_t)0x00ffff00UL) <<  8) |   \
+       (((uint32_t)         (x) & (uint32_t)0x00ff0000UL) >>  8) |   \
+       (((uint32_t)         (x) & (uint32_t)0xff000000UL) >> 24)))
+
+
+/* Previous version of bswap optimization failed to consider sign extension
+   and as a result would replace an expression *not* doing a bswap by a
+   bswap.  */
+
+__attribute__ ((noinline, noclone)) uint32_t
+fake_bswap32 (uint32_t in)
+{
+  return __fake_const_swab32 (in);
+}
+
+int
+main(void)
+{
+  if (sizeof (uint32_t) * __CHAR_BIT__ != 32)
+    return 0;
+  if (sizeof (int16_t) * __CHAR_BIT__ != 16)
+    return 0;
+  if (fake_bswap32 (0x81828384) != 0xff838281)
+    __builtin_abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr61306-3.c b/gcc/testsuite/gcc.c-torture/execute/pr61306-3.c
new file mode 100644 (file)
index 0000000..6086e27
--- /dev/null
@@ -0,0 +1,13 @@
+short a = -1;
+int b;
+char c;
+
+int
+main ()
+{
+  c = a;
+  b = a | c;
+  if (b != -1)
+    __builtin_abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr61673.c b/gcc/testsuite/gcc.c-torture/execute/pr61673.c
new file mode 100644 (file)
index 0000000..b3e243d
--- /dev/null
@@ -0,0 +1,50 @@
+/* PR rtl-optimization/61673 */
+
+char e;
+
+__attribute__((noinline, noclone)) void
+bar (char x)
+{
+  if (x != 0x54 && x != (char) 0x87)
+    __builtin_abort ();
+}
+
+__attribute__((noinline, noclone)) void
+foo (const char *x)
+{
+  char d = x[0];
+  int c = d;
+  if ((c >= 0 && c <= 0x7f) == 0)
+    e = d;
+  bar (d);
+}
+
+__attribute__((noinline, noclone)) void
+baz (const char *x)
+{
+  char d = x[0];
+  int c = d;
+  if ((c >= 0 && c <= 0x7f) == 0)
+    e = d;
+}
+
+int
+main ()
+{
+  const char c[] = { 0x54, 0x87 };
+  e = 0x21;
+  foo (c);
+  if (e != 0x21)
+    __builtin_abort ();
+  foo (c + 1);
+  if (e != (char) 0x87)
+    __builtin_abort ();
+  e = 0x21;
+  baz (c);
+  if (e != 0x21)
+    __builtin_abort ();
+  baz (c + 1);
+  if (e != (char) 0x87)
+    __builtin_abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr61725.c b/gcc/testsuite/gcc.c-torture/execute/pr61725.c
new file mode 100644 (file)
index 0000000..0aa6daf
--- /dev/null
@@ -0,0 +1,14 @@
+/* PR tree-optimization/61725 */
+
+int
+main ()
+{
+  int x;
+  for (x = -128; x <= 128; x++)
+    {
+      int a = __builtin_ffs (x);
+      if (x == 0 && a != 0)
+        __builtin_abort ();
+    }
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/graphite/pr55022.c b/gcc/testsuite/gcc.dg/graphite/pr55022.c
new file mode 100644 (file)
index 0000000..c631c0e
--- /dev/null
@@ -0,0 +1,27 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fgraphite-identity" } */
+
+extern void abort (void);
+
+void __attribute__((noinline,noclone))
+f(int *limit, int minLen, int maxLen)
+{
+  int i;
+
+  for (i = minLen; i <= maxLen; i++) {
+      limit[i] = i;
+  }
+}
+
+int main()
+{
+  int limit[256], i;
+  f (limit, 0, 255);
+  for (i = 0; i < 256; ++i)
+    {
+      if (limit[i] != i)
+       abort ();
+      __asm__ volatile ("" : : : "memory");
+    }
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/graphite/pr59817-1.c b/gcc/testsuite/gcc.dg/graphite/pr59817-1.c
new file mode 100644 (file)
index 0000000..175fa16
--- /dev/null
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -floop-interchange" } */
+
+int kd;
+
+void
+n2(void)
+{
+  static int so;
+  static short int i5;
+  int wj;
+  int *il;
+  int *nk = &so;
+  for (wj = 0; wj < 2; ++wj)
+    *nk = ((i5 += *il) || kd );
+}
diff --git a/gcc/testsuite/gcc.dg/graphite/pr59817-2.c b/gcc/testsuite/gcc.dg/graphite/pr59817-2.c
new file mode 100644 (file)
index 0000000..1395007
--- /dev/null
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -floop-interchange" } */
+
+void
+xl(void)
+{
+  static int j3;
+  for (j3 = 0; j3 < 1; ++j3) {
+      static int f2;
+      static int w7;
+      short int b5;
+      int ok;
+      f2 = (b5 += ok) ? (w7 = 0): (w7 ? 0 : (f2 = ok));
+  }
+}
diff --git a/gcc/testsuite/gcc.dg/graphite/pr60979.c b/gcc/testsuite/gcc.dg/graphite/pr60979.c
new file mode 100644 (file)
index 0000000..0004a51
--- /dev/null
@@ -0,0 +1,37 @@
+/* { dg-options "-O -fgraphite-identity" } */
+
+#include <setjmp.h>
+
+struct x;
+
+typedef struct x **(*a)(struct x *);
+
+struct x {
+    union {
+       struct {
+           union {
+               a *i;
+           } l;
+           int s;
+       } y;
+    } e;
+};
+
+jmp_buf c;
+
+void
+b(struct x *r)
+{
+  int f;
+  static int w = 0;
+  volatile jmp_buf m;
+  f = (*(((struct x *)r)->e.y.l.i[2]((struct x *)r)))->e.y.s;
+  if (w++ != 0)
+    __builtin_memcpy((char *)m, (const char *)c, sizeof(jmp_buf));
+  if (setjmp (c) == 0) {
+      int z;
+      for (z = 0; z < 0; ++z)
+       ;
+  }
+  d((const char *)m);
+}
diff --git a/gcc/testsuite/gcc.dg/lto/pr60720_0.c b/gcc/testsuite/gcc.dg/lto/pr60720_0.c
new file mode 100644 (file)
index 0000000..79cef5d
--- /dev/null
@@ -0,0 +1,15 @@
+/* { dg-lto-do run } */
+/* { dg-extra-ld-options { -w } } */
+
+/* ???  lto.exp does not allow to scan for
+   :1:12: warning: type of 'x' does not match original declaration
+    extern int x[];
+               ^
+   :1:5: note: previously declared here
+    int x;
+        ^  */
+
+extern int x[];
+int *foo[] = { &x[0] };
+
+int main() { return *foo[0]; }
diff --git a/gcc/testsuite/gcc.dg/lto/pr60720_1.c b/gcc/testsuite/gcc.dg/lto/pr60720_1.c
new file mode 100644 (file)
index 0000000..6d1a0d4
--- /dev/null
@@ -0,0 +1 @@
+int x;
diff --git a/gcc/testsuite/gcc.dg/lto/pr60911_0.c b/gcc/testsuite/gcc.dg/lto/pr60911_0.c
new file mode 100644 (file)
index 0000000..e4820a2
--- /dev/null
@@ -0,0 +1,21 @@
+// { dg-lto-do run }
+// { dg-lto-options { { -O2 -flto -fipa-pta } } }
+
+int __attribute__ ((__noinline__)) f (unsigned *p, int *x)
+{
+  int y = *p++ & 0xfff;
+  *x++ = y;
+  *x = *p;
+  return y;
+}
+
+int
+main ()
+{
+  unsigned u[2] = { 0x3aad, 0x5ad1 };
+  int x[2] = { 17689, 23456 };
+
+  if (f (u, x) != 0xaad || x[0] != 0xaad || x[1] != 0x5ad1)
+    __builtin_abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/lto/pr61526_0.c b/gcc/testsuite/gcc.dg/lto/pr61526_0.c
new file mode 100644 (file)
index 0000000..6324c8c
--- /dev/null
@@ -0,0 +1,6 @@
+/* { dg-lto-do link } */
+/* { dg-lto-options { { -fPIC -flto -flto-partition=1to1 } } } */
+/* { dg-extra-ld-options { -shared } } */
+
+static void *master;
+void *foo () { return master; }
diff --git a/gcc/testsuite/gcc.dg/lto/pr61526_1.c b/gcc/testsuite/gcc.dg/lto/pr61526_1.c
new file mode 100644 (file)
index 0000000..bb2893b
--- /dev/null
@@ -0,0 +1,2 @@
+extern void *master;
+void *bar () { return master; }
diff --git a/gcc/testsuite/gcc.dg/pr57233.c b/gcc/testsuite/gcc.dg/pr57233.c
new file mode 100644 (file)
index 0000000..58c0534
--- /dev/null
@@ -0,0 +1,171 @@
+/* PR tree-optimization/57233 */
+/* { dg-do run { target { ilp32 || lp64 } } } */
+/* { dg-options "-O2" } */
+
+typedef unsigned V4 __attribute__((vector_size(4 * sizeof (int))));
+typedef unsigned V8 __attribute__((vector_size(8 * sizeof (int))));
+typedef unsigned V16 __attribute__((vector_size(16 * sizeof (int))));
+V4 a, b, g;
+V8 c, d, h;
+V16 e, f, j;
+
+__attribute__((noinline)) void
+f1 (void)
+{
+  a = (a << 2) | (a >> 30);
+}
+
+__attribute__((noinline)) void
+f2 (void)
+{
+  a = (a << 30) | (a >> 2);
+}
+
+__attribute__((noinline)) void
+f3 (void)
+{
+  a = (a << b) | (a >> (32 - b));
+}
+
+__attribute__((noinline, noclone)) void
+f4 (int x)
+{
+  a = (a << x) | (a >> (32 - x));
+}
+
+__attribute__((noinline)) void
+f5 (void)
+{
+  c = (c << 2) | (c >> 30);
+}
+
+__attribute__((noinline)) void
+f6 (void)
+{
+  c = (c << 30) | (c >> 2);
+}
+
+__attribute__((noinline)) void
+f7 (void)
+{
+  c = (c << d) | (c >> (32 - d));
+}
+
+__attribute__((noinline, noclone)) void
+f8 (int x)
+{
+  c = (c << x) | (c >> (32 - x));
+}
+
+__attribute__((noinline)) void
+f9 (void)
+{
+  e = (e << 2) | (e >> 30);
+}
+
+__attribute__((noinline)) void
+f10 (void)
+{
+  e = (e << 30) | (e >> 2);
+}
+
+__attribute__((noinline)) void
+f11 (void)
+{
+  e = (e << f) | (e >> (32 - f));
+}
+
+__attribute__((noinline, noclone)) void
+f12 (int x)
+{
+  e = (e << x) | (e >> (32 - x));
+}
+
+unsigned
+r (void)
+{
+  static unsigned x = 0xdeadbeefU;
+  static unsigned y = 0x12347654U;
+  static unsigned z = 0x1a2b3c4dU;
+  static unsigned w = 0x87654321U;
+  unsigned t = x ^ (x << 11);
+  x = y;
+  y = z;
+  z = w;
+  w = w ^ (w >> 19) ^ t ^ (t >> 8);
+  return w;
+}
+
+void
+init (unsigned int *p, int count, int mod)
+{
+  int i;
+  for (i = 0; i < count; i++)
+    {
+      unsigned int v = r ();
+      if (mod)
+       v = (v % 31) + 1;
+      p[i] = v;
+    }
+}
+
+void
+check (unsigned int *p, unsigned int *q, int count, unsigned int *s, int ss)
+{
+  int i;
+  for (i = 0; i < count; i++)
+    {
+      if (s)
+       ss = s[i];
+      if (p[i] != ((q[i] << ss) | (q[i] >> (32 - ss))))
+       __builtin_abort ();
+    }
+}
+
+int
+main ()
+{
+  init ((unsigned int *) &a, 4, 0);
+  init ((unsigned int *) &b, 4, 1);
+  init ((unsigned int *) &c, 8, 0);
+  init ((unsigned int *) &d, 8, 1);
+  init ((unsigned int *) &e, 16, 0);
+  init ((unsigned int *) &f, 16, 1);
+  g = a;
+  h = c;
+  j = e;
+  f1 ();
+  f5 ();
+  f9 ();
+  check ((unsigned int *) &a, (unsigned int *) &g, 4, 0, 2);
+  check ((unsigned int *) &c, (unsigned int *) &h, 8, 0, 2);
+  check ((unsigned int *) &e, (unsigned int *) &j, 16, 0, 2);
+  g = a;
+  h = c;
+  j = e;
+  f2 ();
+  f6 ();
+  f10 ();
+  check ((unsigned int *) &a, (unsigned int *) &g, 4, 0, 30);
+  check ((unsigned int *) &c, (unsigned int *) &h, 8, 0, 30);
+  check ((unsigned int *) &e, (unsigned int *) &j, 16, 0, 30);
+  g = a;
+  h = c;
+  j = e;
+  f3 ();
+  f7 ();
+  f11 ();
+  check ((unsigned int *) &a, (unsigned int *) &g, 4, (unsigned int *) &b, 0);
+  check ((unsigned int *) &c, (unsigned int *) &h, 8, (unsigned int *) &d, 0);
+  check ((unsigned int *) &e, (unsigned int *) &j, 16, (unsigned int *) &f, 0);
+  g = a;
+  h = c;
+  j = e;
+  f4 (5);
+  f8 (5);
+  f12 (5);
+  check ((unsigned int *) &a, (unsigned int *) &g, 4, 0, 5);
+  check ((unsigned int *) &c, (unsigned int *) &h, 8, 0, 5);
+  check ((unsigned int *) &e, (unsigned int *) &j, 16, 0, 5);
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/pr60844.c b/gcc/testsuite/gcc.dg/pr60844.c
new file mode 100644 (file)
index 0000000..16ed243
--- /dev/null
@@ -0,0 +1,16 @@
+/* PR tree-optimization/60844 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -g" } */
+/* { dg-additional-options "-mtune=atom" { target { i?86-*-* x86_64-*-* } } } */
+
+void
+foo (int *x, int y, int z)
+{
+  int b, c = x[0], d = x[1];
+  for (b = 0; b < 1; b++)
+    {
+      int e = (y ? 1 : 0) | (d ? 2 : 0) | (z ? 1 : 0);
+      e |= (c ? 2 : 0) | ((1 >> b) ? 1 : 0);
+      x[2 + b] = e;
+    }
+}
diff --git a/gcc/testsuite/gcc.dg/pr60866.c b/gcc/testsuite/gcc.dg/pr60866.c
new file mode 100644 (file)
index 0000000..020878d
--- /dev/null
@@ -0,0 +1,18 @@
+/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
+/* { dg-options "-O -fselective-scheduling -fno-if-conversion -fschedule-insns"  } */
+
+int n;
+
+void
+foo (int w, int **dnroot, int **dn)
+{
+  int *child;
+  int *xchild = xchild;
+  for (; w < n; w++)
+    if (!dnroot)
+      {
+       dnroot = dn;
+       for (child = *dn; child; child = xchild)
+         ;
+      }
+}
diff --git a/gcc/testsuite/gcc.dg/pr61045.c b/gcc/testsuite/gcc.dg/pr61045.c
new file mode 100644 (file)
index 0000000..1808cdc
--- /dev/null
@@ -0,0 +1,12 @@
+/* { dg-do run } */
+/* { dg-options "-fstrict-overflow" } */
+
+int main ()
+{
+  int a = 0;
+  int b = __INT_MAX__;
+  int t = (a - 2) > (b - 1);
+  if (t != 0)
+    __builtin_abort();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/pr61053.c b/gcc/testsuite/gcc.dg/pr61053.c
new file mode 100644 (file)
index 0000000..4fd5319
--- /dev/null
@@ -0,0 +1,75 @@
+/* PR c/61053 */
+/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-options "-std=c11 -pedantic-errors" } */
+
+_Alignas (char) char cc;
+_Alignas (short int) char cs;
+_Alignas (int) char ci;
+_Alignas (long int) char cl;
+_Alignas (long long int) char cll;
+_Alignas (float) char cf;
+_Alignas (double) char cd;
+_Alignas (long double) char cld;
+
+_Alignas (char) short int sc; /* { dg-error "cannot reduce alignment" } */
+_Alignas (short int) short int ss;
+_Alignas (int) short int si;
+_Alignas (long int) short int sl;
+_Alignas (long long int) short int sll;
+_Alignas (float) short int sf;
+_Alignas (double) short int sd;
+_Alignas (long double) short int sld;
+
+_Alignas (char) int ic; /* { dg-error "cannot reduce alignment" } */
+_Alignas (short int) int is; /* { dg-error "cannot reduce alignment" } */
+_Alignas (int) int ii;
+_Alignas (long int) int il;
+_Alignas (long long int) int ill;
+_Alignas (float) int if_;
+_Alignas (double) int id;
+_Alignas (long double) int ild;
+
+_Alignas (char) long int lic; /* { dg-error "cannot reduce alignment" } */
+_Alignas (short int) long int lis; /* { dg-error "cannot reduce alignment" } */
+_Alignas (int) long int lii; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
+_Alignas (long int) long int lil;
+_Alignas (long long int) long int lill;
+_Alignas (float) long int lif; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
+_Alignas (double) long int lid;
+_Alignas (long double) long int lild;
+
+_Alignas (char) long long int llic; /* { dg-error "cannot reduce alignment" } */
+_Alignas (short int) long long int llis; /* { dg-error "cannot reduce alignment" } */
+_Alignas (int) long long int llii; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
+_Alignas (long int) long long int llil;
+_Alignas (long long int) long long int llill;
+_Alignas (float) long long int llif; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
+_Alignas (double) long long int llid;
+_Alignas (long double) long long int llild;
+
+_Alignas (char) float fc; /* { dg-error "cannot reduce alignment" } */
+_Alignas (short int) float fs; /* { dg-error "cannot reduce alignment" } */
+_Alignas (int) float fi;
+_Alignas (long int) float fl;
+_Alignas (long long int) float fll;
+_Alignas (float) float ff;
+_Alignas (double) float fd;
+_Alignas (long double) float fld;
+
+_Alignas (char) double dc; /* { dg-error "cannot reduce alignment" } */
+_Alignas (short int) double ds; /* { dg-error "cannot reduce alignment" } */
+_Alignas (int) double di; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
+_Alignas (long int) double dl;
+_Alignas (long long int) double dll;
+_Alignas (float) double df; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
+_Alignas (double) double dd;
+_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 } } } } */
+_Alignas (long double) long double ldld;
diff --git a/gcc/testsuite/gcc.dg/pr61060.c b/gcc/testsuite/gcc.dg/pr61060.c
new file mode 100644 (file)
index 0000000..d2a1365
--- /dev/null
@@ -0,0 +1,19 @@
+/* PR target/61060 */
+/* { dg-do compile } */
+/* { dg-options "-O0 -ftree-ter" } */
+
+typedef __SIZE_TYPE__ size_t;
+
+extern inline __attribute__ ((gnu_inline, always_inline, artificial))
+void *memset (void *dest, int ch, size_t len)
+{
+  return __builtin_memset (dest, ch, len);
+}
+
+char buf[10];
+
+void
+foo (void)
+{
+  memset (buf, sizeof (buf), 0);
+}
diff --git a/gcc/testsuite/gcc.dg/pr61158.c b/gcc/testsuite/gcc.dg/pr61158.c
new file mode 100644 (file)
index 0000000..d0ba7f3
--- /dev/null
@@ -0,0 +1,12 @@
+/* PR tree-optimization/61158 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-original" } */
+
+unsigned long long
+foo (unsigned int x)
+{
+  return ((unsigned long long) x & 0x00ff000000000000ULL) >> 40;
+}
+
+/* { dg-final { scan-tree-dump "return 0;" "original" { target { ilp32 || lp64 } } } } */
+/* { dg-final { cleanup-tree-dump "original" } } */
diff --git a/gcc/testsuite/gcc.dg/pr61583.c b/gcc/testsuite/gcc.dg/pr61583.c
new file mode 100644 (file)
index 0000000..8424293
--- /dev/null
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fcompare-debug" } */
+
+void
+f1 (int n, int b)
+{
+  extern void f2 (int);
+  int j;
+
+  if (b)
+    n = 1;
+
+  if (n < 1)
+    __builtin_unreachable ();
+
+  for (j = 0; j < n; j++)
+    f2 (j);
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr57864.c b/gcc/testsuite/gcc.dg/torture/pr57864.c
new file mode 100644 (file)
index 0000000..93962c2
--- /dev/null
@@ -0,0 +1,37 @@
+/* { dg-do compile } */
+
+union U {
+    double val;
+    union U *ptr;
+};
+
+union U *d;
+double a;
+int b;
+int c;
+
+static void fn1(union U *p1, int p2, _Bool p3)
+{
+    union U *e;
+
+    if (p2 == 0)
+       a = ((union U*)((unsigned long)p1 & ~1))->val;
+
+    if (b) {
+       e = p1;
+    } else if (c) {
+       e = ((union U*)((unsigned long)p1 & ~1))->ptr;
+       d = e;
+    } else {
+       e = 0;
+       d = ((union U*)0)->ptr;
+    }
+
+    fn1 (e, 0, 0);
+    fn1 (0, 0, p3);
+}
+
+void fn2 (void)
+{
+  fn1 (0, 0, 0);
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr60891.c b/gcc/testsuite/gcc.dg/torture/pr60891.c
new file mode 100644 (file)
index 0000000..c8fec87
--- /dev/null
@@ -0,0 +1,23 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-fno-tree-ch -fno-tree-cselim -fno-tree-dominator-opts" } */
+
+int a, b, c, d, e, f;
+
+void foo (int x)
+{
+  for (;;)
+    {
+      int g = c;
+      if (x)
+       {
+         if (e)
+           while (a)
+             --f;
+       }
+      for (b = 5; b; b--)
+       {
+       }
+      if (!g)
+       x = 0;
+    }
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr60903.c b/gcc/testsuite/gcc.dg/torture/pr60903.c
new file mode 100644 (file)
index 0000000..5d93ae3
--- /dev/null
@@ -0,0 +1,22 @@
+/* { dg-do compile } */
+
+extern int a, b, k, q;
+
+void
+foo ()
+{
+  if (a)
+    {
+      while (q)
+       {
+       lbl:
+         if (a)
+           {
+             a = 0;
+             goto lbl;
+           }
+       }
+      b = k;
+    }
+  goto lbl;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr60930.c b/gcc/testsuite/gcc.dg/torture/pr60930.c
new file mode 100644 (file)
index 0000000..5e35f19
--- /dev/null
@@ -0,0 +1,22 @@
+/* { dg-do run } */
+
+int x = 1;
+
+__attribute__((noinline, noclone)) void
+foo (unsigned long long t)
+{
+  asm volatile ("" : : "r" (&t));
+  if (t == 1)
+    __builtin_abort ();
+}
+
+int
+main ()
+{
+#if __SIZEOF_LONG_LONG__ >= 8
+  unsigned long long t = 0xffffffffffffffffULL * (0xffffffffUL * x);
+  if (t != 0xffffffff00000001ULL)
+    foo (t);;
+#endif
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr61010.c b/gcc/testsuite/gcc.dg/torture/pr61010.c
new file mode 100644 (file)
index 0000000..ed56539
--- /dev/null
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+
+int main (void)
+{
+  int a = 0;
+  unsigned b = (a * 64 & 192) | 63U;
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr61383-1.c b/gcc/testsuite/gcc.dg/torture/pr61383-1.c
new file mode 100644 (file)
index 0000000..d9a0a0b
--- /dev/null
@@ -0,0 +1,35 @@
+/* { dg-do run } */
+
+int a, b = 1, c, d, e, f, g;
+
+int
+fn1 ()
+{
+  int h;
+  for (;;)
+    {
+      g = b;
+      g = g ? 0 : 1 % g;
+      e = a + 1;
+      for (; d < 1; d = e)
+       {
+         if (f == 0)
+           h = 0;
+         else
+           h = 1 % f;
+         if (f < 1)
+           c = 0;
+         else if (h)
+           break;
+       }
+      if (b)
+       return 0;
+    }
+}
+
+int
+main ()
+{
+  fn1 ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr61452.c b/gcc/testsuite/gcc.dg/torture/pr61452.c
new file mode 100644 (file)
index 0000000..a62de30
--- /dev/null
@@ -0,0 +1,31 @@
+/* { dg-do run } */
+
+int a, b;
+short c, d;
+char e, f;
+
+int
+fn1 (int p1, char p2)
+{
+  return p1 || p2 ? 0 : p2;
+}
+
+void
+fn2 ()
+{
+  for (; a;)
+    {
+      int g;
+      g = c = e;
+      for (; a;)
+       b = fn1 (g = d = e, g);
+      f = g; 
+    }
+}
+
+int
+main ()
+{
+  fn2 (); 
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr61681.c b/gcc/testsuite/gcc.dg/torture/pr61681.c
new file mode 100644 (file)
index 0000000..226de0c
--- /dev/null
@@ -0,0 +1,37 @@
+/* { dg-do run } */
+
+extern void abort (void);
+
+int a = 1, *e = &a, **f = &e, *l, *p, j;
+static int b;
+long d;
+short g;
+
+void
+fn1 (int *p)
+{
+  int m;
+  if (!(*p & j))
+    {
+      int *n = &m;
+      for (d = 6; d; d--)
+       {
+         for (g = 0; g < 1; g++)
+           {
+             n = l = *f;
+             b = *p;
+           }
+         *n = 0;
+       }
+    }
+}
+
+int
+main ()
+{
+  p = *f;
+  fn1 (p);
+  if (b != 0)
+    abort ();
+  return 0;
+}
index addf128..7ef830d 100644 (file)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O -fdump-tree-fre-details" } */
+/* { dg-options "-O -fdump-tree-fre1-details" } */
 
 extern int posix_memalign(void **memptr,
                          __SIZE_TYPE__ alignment, __SIZE_TYPE__ size);
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp93.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp93.c
new file mode 100644 (file)
index 0000000..d78c399
--- /dev/null
@@ -0,0 +1,36 @@
+/* PR target/29776 */
+/* PR tree-optimization/61725 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-vrp1" } */
+/* { dg-final { scan-tree-dump-not "link_error" "vrp1"} } */
+/* { dg-final { cleanup-tree-dump "vrp1" } } */
+
+#define A(fn, arg, min, max) \
+  if (__builtin_##fn (arg) < min || __builtin_##fn (arg) > max) \
+    link_error ();
+#define B(fn, min, max) \
+  A (fn, a, min, max) A (fn##l, b, min, max) A (fn##ll, c, min, max)
+#define C(fn, min, sub) \
+  A (fn, a, min, ((int) sizeof (a) * __CHAR_BIT__ - sub)) \
+  A (fn##l, b, min, ((int) sizeof (b) * __CHAR_BIT__ - sub)) \
+  A (fn##ll, c, min, ((int) sizeof (c) * __CHAR_BIT__ - sub))
+
+extern void link_error (void);
+
+unsigned int d;
+unsigned long e;
+unsigned long long f;
+
+void
+foo (int a, long b, long long c)
+{
+  C (ffs, 0, 0)
+  a &= 63; b &= 63; c &= 63;
+  B (ffs, 0, 6)
+  a++; b++; c++;
+  B (ffs, 1, 7)
+  a -= 2; b -= 2; c -= 2;
+  C (ffs, 0, 0)
+  a -= 63; b -= 63; c -= 63;
+  C (ffs, 1, 0)
+}
diff --git a/gcc/testsuite/gcc.dg/typeof-2.c b/gcc/testsuite/gcc.dg/typeof-2.c
new file mode 100644 (file)
index 0000000..e916900
--- /dev/null
@@ -0,0 +1,28 @@
+/* Test qualifier discard of typeof for atomic types. */
+/* { dg-do compile } */
+/* { dg-options "-std=c11" } */
+
+extern int i;
+
+extern int * p;
+
+extern int _Atomic const ci;
+extern __typeof (ci) i;
+
+extern int _Atomic volatile vi;
+extern __typeof (vi) i;
+
+extern int * _Atomic restrict ri;
+extern __typeof (ri) p;
+
+void f(void)
+{
+  __auto_type aci = ci;
+  int *paci = &aci;
+
+  __auto_type avi = vi;
+  int *pavi = &avi;
+
+  __auto_type ari = ri;
+  int **pari = &ari;
+}
diff --git a/gcc/testsuite/gcc.dg/unused-8b.c b/gcc/testsuite/gcc.dg/unused-8b.c
new file mode 100644 (file)
index 0000000..5b4b894
--- /dev/null
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+/* { dg-options "-Wall -Wno-unused -Wextra" } */
+
+void foo(int x) { }
index 6940513..70e2ec0 100644 (file)
@@ -10,3 +10,5 @@ void foo(char *in, char *out, int num)
     out[i] = (ovec[i] = in[i]);
   out[num] = ovec[num/2];
 }
+
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr60841.c b/gcc/testsuite/gcc.dg/vect/pr60841.c
new file mode 100644 (file)
index 0000000..44b5d01
--- /dev/null
@@ -0,0 +1,183 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-ffast-math" } */
+
+/* This testcase shouldn't consume much memory or produce a 1GB vectorizer
+   dump file due to SLP tree explosion.  */
+
+struct S { int f1, f2, f3, f4; } a;
+struct T { short f3, f2, f1, f4; };
+int b, c, d, e, f, g;
+unsigned long z;
+
+void
+foo (struct T *p, struct T *q, int x, int w)
+{
+  for (; x; x++)
+    {
+      struct S h;
+      int i;
+      struct T j;
+      struct T *r;
+      h = a;
+      g = 0;
+      r = p + 2 * (c + 4) + 1;
+      j = *r;
+      r = p;
+      f = r->f1 - 1;
+      b = +1.0 + f * f;
+      i = (r->f2 + j.f2) / 2;
+      f = r->f3 - 1;
+      b += 1.0 - i * f * f;
+      f = r->f4 - 1;
+      if (b)
+       b += -1.0 - i * f;
+      if (b / w)
+       {
+         h.f1 += 8.0 * r->f1;
+         h.f2 += 8.0 * r->f2;
+         h.f3 += 8.0 * r->f3;
+         h.f4 += 8.0 * r->f4;
+         g = 1;
+       }
+      r++;
+      f = r->f1;
+      i = (r->f2 + j.f2) / 2;
+      f = r->f3 - 1;
+      b += 1.0 - i * f * f;
+      i = (r->f4);
+      if (b * 65535UL / w)
+       {
+         h.f1 += 10.0 * r->f1;
+         h.f2 += 10.0 * r->f2;
+         h.f3 += 10.0 * r->f3;
+         h.f4 += 10.0 * r->f4;
+         g += 10.0;
+       }
+      r++;
+      f = r->f1;
+      z = 5UL * i;
+      f = r->f2;
+      i = (r->f3 + j.f3) / 2;
+      b = -i * f * f;
+      i = (r->f4 + j.f4) / 2;
+      if (b * 65535UL / 25.0f)
+       {
+         h.f1 += 8.0 * r->f1;
+         h.f2 += 8.0 * r->f2;
+         h.f3 += 8.0 * r->f3;
+         h.f4 += 8.0 * r->f4;
+         g += 8.0;
+       }
+      r++;
+      f = r->f1 - j.f1;
+      b = 1 * 2.0 * i * f * f;
+      f = r->f2;
+      b += 4.0 * f;
+      i = r->f3 / 2;
+      f = r->f4 - 1;
+      if (b * 1)
+       {
+         h.f1 += 8.0 * r->f1;
+         h.f2 += 8.0 * r->f2;
+         h.f3 += 8.0 * r->f3;
+         h.f4 += 8.0 * r->f4;
+         g += 8.0;
+       }
+      b = 4.0 * 1 * f;
+      if (b * 65535UL / 25.0f)
+       {
+         h.f1 += 20.0 * r->f1;
+         h.f2 += 20.0 * r->f2;
+         h.f3 += 20.0 * r->f3;
+         h.f4 += 20.0 * r->f4;
+         g += 20.0;
+       }
+      b = 5 * (0.0 - i);
+      if (b < 0)
+       {
+         h.f1 += 8.0 * r->f1;
+         h.f2 += 8.0 * r->f2;
+         h.f3 += 8.0 * r->f3;
+         h.f4 += 8.0 * r->f4;
+         g += 8.0;
+       }
+      r = p + 2 * (c + 4);
+      i = (r->f1 + j.f1);
+      b = 1 * 2.0 * i * 1;
+      f = r->f2 - 1;
+      i = (r->f3 + j.f3) / 2;
+      b = 5 * (0.0 - i) * f * f;
+      i = (r->f4 + j.f4) / 2;
+      if (b * 65535UL / 25.0f)
+       {
+         h.f1 += 10.0 * r->f1;
+         h.f2 += 10.0 * r->f2;
+         h.f3 += 10.0 * r->f3;
+         h.f4 += 10.0 * r->f4;
+         g += 10.0;
+       }
+      r++;
+      f = r->f1;
+      b = 5UL * i * f;
+      i = (r->f2 + j.f2) / 2;
+      f = r->f3 - 1;
+      b = 5 * (0.0 - i) * f * f;
+      f = r->f4 - 1;
+      if (b * 65535UL / 25.0f)
+       {
+         h.f1 += 40.0 * r->f1;
+         h.f2 += 40.0 * r->f2;
+         h.f3 += 40.0 * r->f3;
+         h.f4 += 40.0 * r->f4;
+         g += 40.0;
+       }
+      r++;
+      i = (r->f1 + j.f1);
+      b = 5 * i * f;
+      f = r->f2;
+      b = 4.0 * f * f;
+      f = r->f3;
+      i = (r->f4 + j.f4) / 2;
+      b = 5 * (0.0 - i) * f * f;
+      if (b * 25.0f)
+       {
+         h.f1 += 8.0 * r->f1;
+         h.f2 += 8.0 * r->f2;
+         h.f3 += 8.0 * r->f3;
+         h.f4 += 8.0 * r->f4;
+         g += 8.0;
+       }
+      r = p + 4 * (c + 4);
+      i = r->f1 / 2;
+      b = 5 * (1.0 + i);
+      i = r->f2 + j.f2;
+      f = r->f3 - 1;
+      b = 5 * (0.0 - i) * f * f;
+      i = (r->f4 + j.f4) / 2;
+      if (b * 65535UL / 25.0f)
+       {
+         h.f1 += 5.0 * r->f1;
+         h.f2 += 5.0 * r->f2;
+         h.f3 += 5.0 * r->f3;
+         h.f4 += 5.0 * r->f4;
+         g += 5.0;
+       }
+      b = 5 * (1.0 + i);
+      if (b < 0)
+       {
+         h.f1 += 5.0 * r->f1;
+         h.f2 += 5.0 * r->f2;
+         h.f3 += 5.0 * r->f3;
+         h.f4 += 5.0 * r->f4;
+         g += 5.0;
+       }
+      q->f1 = (h.f1 + g / 2 - 1) / g;
+      q->f2 = (h.f2 + g / 2 - 1) / g;
+      q->f3 = (h.f3 + g / 2 - 1) / g;
+      q->f4 = (h.f4 + g / 2 - 1) / g;
+      p++;
+      q++;
+    }
+}
+
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr61680.c b/gcc/testsuite/gcc.dg/vect/pr61680.c
new file mode 100644 (file)
index 0000000..605a651
--- /dev/null
@@ -0,0 +1,51 @@
+/* { dg-do run } */
+
+#include "tree-vect.h"
+
+double v[4096][4];
+
+__attribute__((noinline, noclone)) void
+bar (double p[][4])
+{
+  int i;
+  double d = 172.0;
+  for (i = 0; i < 4096; i++)
+    {
+      if (p[i][0] != 6.0 || p[i][1] != 6.0 || p[i][2] != 10.0)
+       __builtin_abort ();
+      if (__builtin_fabs (p[i][3] - d) > 0.25)
+       __builtin_abort ();
+    }
+}
+
+__attribute__((noinline, noclone)) void
+foo (void)
+{
+  int i;
+  double w[4096][4], t;
+  for (i = 0; i < 4096; i++)
+    {
+      w[i][0] = v[i][0] + 2.0;
+      w[i][1] = v[i][1] + 1.0;
+      w[i][2] = v[i][2] + 4.0;
+      w[i][3] = (w[i][0] * w[i][0] + w[i][1] * w[i][1] + w[i][2] * w[i][2]);
+    }
+  bar (w);
+}
+
+int
+main ()
+{
+  int i;
+
+  check_vect ();
+
+  for (i = 0; i < 4096; i++)
+    {
+      v[i][0] = 4.0;
+      v[i][1] = 5.0;
+      v[i][2] = 6.0;
+    }
+  foo ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/vect/vect-singleton_1.c b/gcc/testsuite/gcc.dg/vect/vect-singleton_1.c
new file mode 100644 (file)
index 0000000..6c2ff49
--- /dev/null
@@ -0,0 +1,38 @@
+/* PR target/59843 ICE on function taking/returning vector of one float64_t.  */
+
+/* { dg-do compile } */
+/* { dg-options "-Warray-bounds -O2 -fno-inline -std=c99" } */
+
+#define TEST(BASETYPE, VECTYPE, SUFFIX)                                             \
+  typedef BASETYPE VECTYPE                                                  \
+      __attribute__ ((__vector_size__ (sizeof (BASETYPE))));                \
+  VECTYPE                                                                   \
+  test_vadd_##SUFFIX (VECTYPE a, VECTYPE b)                                 \
+  {                                                                         \
+    return a + b;                                                           \
+  }                                                                         \
+                                                                            \
+  void                                                                      \
+  test_##SUFFIX (BASETYPE val)                                              \
+  {                                                                         \
+    VECTYPE var = { val };                                                  \
+    BASETYPE v0 = var[0];                                                   \
+    BASETYPE v1 = var[1]; /* { dg-warning "index value is out of bound" } */ \
+  }
+
+TEST (double, float64x1_t, f64)
+
+/* Original bug was for above type;
+   in a nod to completeness, test other types too.  */
+
+TEST (long long, int64x1_t, s64)
+
+TEST (float, float32x1_t, f32)
+
+TEST (long, longx1_t, l)
+
+TEST (int, intx1_t, i)
+
+TEST (short, int16x1_t, s16)
+
+TEST (char, int8x1_t, s8)
index fa11e7e..e8d866b 100644 (file)
@@ -18,6 +18,7 @@
 
 # Load support procs.
 load_lib gcc-dg.exp
+load_lib clearcap.exp
 
 # Set up flags used for tests that don't specify options.
 global DEFAULT_VECTCFLAGS
@@ -41,30 +42,9 @@ if ![check_vect_support_and_set_flags] {
 # These flags are used for all targets.
 lappend DEFAULT_VECTCFLAGS "-ftree-vectorize" "-fno-vect-cost-model" "-fno-common"
 
-# If the linker used understands -M <mapfile>, pass it to clear hardware
-# capabilities set by the Sun assembler.
-# Try mapfile syntax v2 first which is the only way to clear hwcap_2 flags.
-set clearcap_ldflags "-Wl,-M,$srcdir/gcc.target/i386/clearcapv2.map"
-
-if ![check_no_compiler_messages mapfilev2 executable {
-    int main (void) { return 0; }
-} $clearcap_ldflags ] {
-    # If this doesn't work, fall back to the less capable v1 syntax.
-    set clearcap_ldflags "-Wl,-M,$srcdir/gcc.target/i386/clearcap.map"
-
-    if ![check_no_compiler_messages mapfile executable {
-       int main (void) { return 0; }
-    } $clearcap_ldflags ] {
-       unset clearcap_ldflags
-    }
-}
-
-if [info exists clearcap_ldflags] {
-    lappend DEFAULT_VECTCFLAGS $clearcap_ldflags
-}
-
 # Initialize `dg'.
 dg-init
+clearcap-init
 
 global VEC_FLAGS
 set VEC_FLAGS $DEFAULT_VECTCFLAGS
@@ -308,4 +288,5 @@ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/no-tree-sra-bb-slp-*.\[cS\]]
 set dg-do-what-default ${save-dg-do-what-default}
 
 # All done.
+clearcap-finish
 dg-finish
index 440ac9a..56e0b0e 100644 (file)
@@ -21,10 +21,19 @@ static void test()
   vector long long vlb = {0,1};
   vector double vda = {-2.0,-1.0};
   vector double vdb = {0.0,1.0};
+  vector unsigned int vuia = {0,1,2,3};
+  vector unsigned int vuib = {4,5,6,7};
+  vector signed int vsia = {-4,-3,-2,-1};
+  vector signed int vsib = {0,1,2,3};
+  vector float vfa = {-4.0,-3.0,-2.0,-1.0};
+  vector float vfb = {0.0,1.0,2.0,3.0};
 
   /* Result vectors.  */
   vector long long vlh, vll;
   vector double vdh, vdl;
+  vector unsigned int vuih, vuil;
+  vector signed int vsih, vsil;
+  vector float vfh, vfl;
 
   /* Expected result vectors.  */
 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
@@ -32,20 +41,44 @@ static void test()
   vector long long vlrl = {0,-2};
   vector double vdrh = {1.0,-1.0};
   vector double vdrl = {0.0,-2.0};
+  vector unsigned int vuirh = {6,2,7,3};
+  vector unsigned int vuirl = {4,0,5,1};
+  vector signed int vsirh = {2,-2,3,-1};
+  vector signed int vsirl = {0,-4,1,-3};
+  vector float vfrh = {2.0,-2.0,3.0,-1.0};
+  vector float vfrl = {0.0,-4.0,1.0,-3.0};
 #else
   vector long long vlrh = {-2,0};
   vector long long vlrl = {-1,1};
   vector double vdrh = {-2.0,0.0};
   vector double vdrl = {-1.0,1.0};
+  vector unsigned int vuirh = {0,4,1,5};
+  vector unsigned int vuirl = {2,6,3,7};
+  vector signed int vsirh = {-4,0,-3,1};
+  vector signed int vsirl = {-2,2,-1,3};
+  vector float vfrh = {-4.0,0.0,-3.0,1.0};
+  vector float vfrl = {-2.0,2.0,-1.0,3.0};
 #endif
 
   vlh = vec_mergeh (vla, vlb);
   vll = vec_mergel (vla, vlb);
   vdh = vec_mergeh (vda, vdb);
   vdl = vec_mergel (vda, vdb);
+  vuih = vec_mergeh (vuia, vuib);
+  vuil = vec_mergel (vuia, vuib);
+  vsih = vec_mergeh (vsia, vsib);
+  vsil = vec_mergel (vsia, vsib);
+  vfh  = vec_mergeh (vfa,  vfb );
+  vfl  = vec_mergel (vfa,  vfb );
 
   check (vec_long_long_eq (vlh, vlrh), "vlh");
   check (vec_long_long_eq (vll, vlrl), "vll");
   check (vec_double_eq (vdh, vdrh), "vdh" );
   check (vec_double_eq (vdl, vdrl), "vdl" );
+  check (vec_all_eq (vuih, vuirh), "vuih");
+  check (vec_all_eq (vuil, vuirl), "vuil");
+  check (vec_all_eq (vsih, vsirh), "vsih");
+  check (vec_all_eq (vsil, vsirl), "vsil");
+  check (vec_all_eq (vfh,  vfrh),  "vfh");
+  check (vec_all_eq (vfl,  vfrl),  "vfl");
 }
index 851f35b..40693e9 100644 (file)
@@ -21,24 +21,51 @@ static void test()
   vector long long vlb = {0,1};
   vector double vda = {-2.0,-1.0};
   vector double vdb = {0.0,1.0};
+  vector unsigned int vuia = {0,1,2,3};
+  vector unsigned int vuib = {4,5,6,7};
+  vector signed int vsia = {-4,-3,-2,-1};
+  vector signed int vsib = {0,1,2,3};
+  vector float vfa = {-4.0,-3.0,-2.0,-1.0};
+  vector float vfb = {0.0,1.0,2.0,3.0};
 
   /* Result vectors.  */
   vector long long vlh, vll;
   vector double vdh, vdl;
+  vector unsigned int vuih, vuil;
+  vector signed int vsih, vsil;
+  vector float vfh, vfl;
 
   /* Expected result vectors.  */
   vector long long vlrh = {-2,0};
   vector long long vlrl = {-1,1};
   vector double vdrh = {-2.0,0.0};
   vector double vdrl = {-1.0,1.0};
+  vector unsigned int vuirh = {0,4,1,5};
+  vector unsigned int vuirl = {2,6,3,7};
+  vector signed int vsirh = {-4,0,-3,1};
+  vector signed int vsirl = {-2,2,-1,3};
+  vector float vfrh = {-4.0,0.0,-3.0,1.0};
+  vector float vfrl = {-2.0,2.0,-1.0,3.0};
 
   vlh = vec_mergeh (vla, vlb);
   vll = vec_mergel (vla, vlb);
   vdh = vec_mergeh (vda, vdb);
   vdl = vec_mergel (vda, vdb);
+  vuih = vec_mergeh (vuia, vuib);
+  vuil = vec_mergel (vuia, vuib);
+  vsih = vec_mergeh (vsia, vsib);
+  vsil = vec_mergel (vsia, vsib);
+  vfh  = vec_mergeh (vfa,  vfb );
+  vfl  = vec_mergel (vfa,  vfb );
 
   check (vec_long_long_eq (vlh, vlrh), "vlh");
   check (vec_long_long_eq (vll, vlrl), "vll");
   check (vec_double_eq (vdh, vdrh), "vdh" );
   check (vec_double_eq (vdl, vdrl), "vdl" );
+  check (vec_all_eq (vuih, vuirh), "vuih");
+  check (vec_all_eq (vuil, vuirl), "vuil");
+  check (vec_all_eq (vsih, vsirh), "vsih");
+  check (vec_all_eq (vsil, vsirl), "vsil");
+  check (vec_all_eq (vfh,  vfrh),  "vfh");
+  check (vec_all_eq (vfl,  vfrl),  "vfl");
 }
index a95d06a..07e56ff 100644 (file)
@@ -34,6 +34,13 @@ struct hfa_fx2_t
   float b;
 };
 
+struct hfa_fx3_t
+{
+  float a;
+  float b;
+  float c;
+};
+
 struct hfa_dx2_t
 {
   double a;
diff --git a/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-13.c b/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-13.c
new file mode 100644 (file)
index 0000000..ae1e3ec
--- /dev/null
@@ -0,0 +1,59 @@
+/* Test AAPCS64 layout and __builtin_va_start.
+
+   Pass named HFA/HVA argument on stack.  */
+
+/* { dg-do run { target aarch64*-*-* } } */
+
+#ifndef IN_FRAMEWORK
+#define AAPCS64_TEST_STDARG
+#define TESTFILE "va_arg-13.c"
+
+struct float_float_t
+{
+  float a;
+  float b;
+} float_float;
+
+union float_int_t
+{
+  float b8;
+  int b5;
+} float_int;
+
+#define HAS_DATA_INIT_FUNC
+void
+init_data ()
+{
+  float_float.a = 1.2f;
+  float_float.b = 2.2f;
+
+  float_int.b8 = 4983.80f;
+}
+
+#include "abitest.h"
+#else
+  ARG (float, 1.0f, S0, 0)
+  ARG (float, 2.0f, S1, 1)
+  ARG (float, 3.0f, S2, 2)
+  ARG (float, 4.0f, S3, 3)
+  ARG (float, 5.0f, S4, 4)
+  ARG (float, 6.0f, S5, 5)
+  ARG (float, 7.0f, S6, 6)
+  ARG (struct float_float_t, float_float, STACK, 7)
+  ARG (int,  9, W0, 8)
+  ARG (int, 10, W1, 9)
+  ARG (int, 11, W2, 10)
+  ARG (int, 12, W3, 11)
+  ARG (int, 13, W4, 12)
+  ARG (int, 14, W5, 13)
+  ARG (int, 15, W6, LAST_NAMED_ARG_ID)
+  DOTS
+  /* Note on the reason of using 'X7' instead of 'W7' here:
+     Using 'X7' makes sure the test works in the big-endian mode.
+     According to PCS rules B.4 and C.10, the size of float_int is rounded
+     to 8 bytes and prepared in the register X7 as if loaded via LDR from
+     the memory, with the content of the other 4 bytes unspecified.  The
+     test framework will only compare the 4 relavent bytes.  */
+  ANON (union float_int_t, float_int, X7, 15)
+  LAST_ANON (long long, 12683143434LL, STACK + 8, 16)
+#endif
diff --git a/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-14.c b/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-14.c
new file mode 100644 (file)
index 0000000..91080d5
--- /dev/null
@@ -0,0 +1,35 @@
+/* Test AAPCS64 layout and __builtin_va_start.
+
+   Pass named HFA/HVA argument on stack.  */
+
+/* { dg-do run { target aarch64*-*-* } } */
+
+#ifndef IN_FRAMEWORK
+#define AAPCS64_TEST_STDARG
+#define TESTFILE "va_arg-14.c"
+#include "type-def.h"
+
+struct hfa_fx2_t hfa_fx2 = {1.2f, 2.2f};
+struct hfa_fx3_t hfa_fx3 = {3.2f, 4.2f, 5.2f};
+vf4_t float32x4 = {6.2f, 7.2f, 8.2f, 9.2f};
+vf4_t float32x4_2 = {10.2f, 11.2f, 12.2f, 13.2f};
+
+#include "abitest.h"
+#else
+  ARG (float, 1.0f, S0, 0)
+  ARG (float, 2.0f, S1, 1)
+  ARG (float, 3.0f, S2, 2)
+  ARG (float, 4.0f, S3, 3)
+  ARG (float, 5.0f, S4, 4)
+  ARG (float, 6.0f, S5, 5)
+  ARG (float, 7.0f, S6, 6)
+  ARG (struct hfa_fx3_t, hfa_fx3, STACK, 7)
+  /* Previous argument size has been rounded up to the nearest multiple of
+     8 bytes.  */
+  ARG (struct hfa_fx2_t, hfa_fx2, STACK + 16, 8)
+  /* NSAA is rounded up to the nearest natural alignment of float32x4.  */
+  ARG (vf4_t, float32x4, STACK + 32, 9)
+  ARG (vf4_t, float32x4_2, STACK + 48, LAST_NAMED_ARG_ID)
+  DOTS
+  LAST_ANON (double, 123456789.987, STACK + 64, 11)
+#endif
diff --git a/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-15.c b/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-15.c
new file mode 100644 (file)
index 0000000..d8fdb32
--- /dev/null
@@ -0,0 +1,39 @@
+/* Test AAPCS64 layout and __builtin_va_start.
+
+   Pass named __128int argument on stack.  */
+
+/* { dg-do run { target aarch64*-*-* } } */
+
+#ifndef IN_FRAMEWORK
+#define AAPCS64_TEST_STDARG
+#define TESTFILE "va_arg-15.c"
+#include "type-def.h"
+
+union int128_t qword;
+
+#define HAS_DATA_INIT_FUNC
+void
+init_data ()
+{
+  /* Init signed quad-word integer.  */
+  qword.l64 = 0xfdb9753102468aceLL;
+  qword.h64 = 0xeca8642013579bdfLL;
+}
+
+#include "abitest.h"
+#else
+  ARG (int, 1, W0, 0)
+  ARG (int, 2, W1, 1)
+  ARG (int, 3, W2, 2)
+  ARG (int, 4, W3, 3)
+  ARG (int, 5, W4, 4)
+  ARG (int, 6, W5, 5)
+  ARG (int, 7, W6, 6)
+  ARG (__int128, qword.i, STACK, LAST_NAMED_ARG_ID)
+  DOTS
+#ifndef __AAPCS64_BIG_ENDIAN__
+  LAST_ANON (int, 8, STACK + 16, 8)
+#else
+  LAST_ANON (int, 8, STACK + 20, 8)
+#endif
+#endif
diff --git a/gcc/testsuite/gcc.target/aarch64/pr61325.c b/gcc/testsuite/gcc.target/aarch64/pr61325.c
new file mode 100644 (file)
index 0000000..45ece53
--- /dev/null
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+typedef unsigned int wchar_t;
+typedef long unsigned int size_t;
+
+size_t
+wcstombs(char *s , const wchar_t *pwcs , size_t n)
+{
+  int count = 0;
+  
+  if (n != 0) {
+    do {
+      if ((*s++ = (char) *pwcs++) == 0)
+        break;
+      count++;
+    } while (--n != 0);
+  }
+  return count;
+}
index aa041cc..782f6d1 100644 (file)
@@ -387,7 +387,7 @@ test_vqdmlalh_s16 (int32x1_t a, int16x1_t b, int16x1_t c)
 /* { dg-final { scan-assembler-times "\\tsqdmlal\\ts\[0-9\]+, h\[0-9\]+, v" 1 } } */
 
 int32x1_t
-test_vqdmlalh_lane_s16 (int32x1_t a, int16x1_t b, int16x8_t c)
+test_vqdmlalh_lane_s16 (int32x1_t a, int16x1_t b, int16x4_t c)
 {
   return vqdmlalh_lane_s16 (a, b, c, 3);
 }
@@ -403,7 +403,7 @@ test_vqdmlals_s32 (int64x1_t a, int32x1_t b, int32x1_t c)
 /* { dg-final { scan-assembler-times "\\tsqdmlal\\td\[0-9\]+, s\[0-9\]+, v" 1 } } */
 
 int64x1_t
-test_vqdmlals_lane_s32 (int64x1_t a, int32x1_t b, int32x4_t c)
+test_vqdmlals_lane_s32 (int64x1_t a, int32x1_t b, int32x2_t c)
 {
   return vqdmlals_lane_s32 (a, b, c, 1);
 }
@@ -419,7 +419,7 @@ test_vqdmlslh_s16 (int32x1_t a, int16x1_t b, int16x1_t c)
 /* { dg-final { scan-assembler-times "\\tsqdmlsl\\ts\[0-9\]+, h\[0-9\]+, v" 1 } } */
 
 int32x1_t
-test_vqdmlslh_lane_s16 (int32x1_t a, int16x1_t b, int16x8_t c)
+test_vqdmlslh_lane_s16 (int32x1_t a, int16x1_t b, int16x4_t c)
 {
   return vqdmlslh_lane_s16 (a, b, c, 3);
 }
@@ -435,7 +435,7 @@ test_vqdmlsls_s32 (int64x1_t a, int32x1_t b, int32x1_t c)
 /* { dg-final { scan-assembler-times "\\tsqdmlsl\\td\[0-9\]+, s\[0-9\]+, v" 1 } } */
 
 int64x1_t
-test_vqdmlsls_lane_s32 (int64x1_t a, int32x1_t b, int32x4_t c)
+test_vqdmlsls_lane_s32 (int64x1_t a, int32x1_t b, int32x2_t c)
 {
   return vqdmlsls_lane_s32 (a, b, c, 1);
 }
@@ -451,7 +451,7 @@ test_vqdmulhh_s16 (int16x1_t a, int16x1_t b)
 /* { dg-final { scan-assembler-times "\\tsqdmulh\\th\[0-9\]+, h\[0-9\]+, v" 1 } } */
 
 int16x1_t
-test_vqdmulhh_lane_s16 (int16x1_t a, int16x8_t b)
+test_vqdmulhh_lane_s16 (int16x1_t a, int16x4_t b)
 {
   return vqdmulhh_lane_s16 (a, b, 3);
 }
@@ -467,9 +467,9 @@ test_vqdmulhs_s32 (int32x1_t a, int32x1_t b)
 /* { dg-final { scan-assembler-times "\\tsqdmulh\\ts\[0-9\]+, s\[0-9\]+, v" 1 } } */
 
 int32x1_t
-test_vqdmulhs_lane_s32 (int32x1_t a, int32x4_t b)
+test_vqdmulhs_lane_s32 (int32x1_t a, int32x2_t b)
 {
-  return vqdmulhs_lane_s32 (a, b, 3);
+  return vqdmulhs_lane_s32 (a, b, 1);
 }
 
 /* { dg-final { scan-assembler-times "\\tsqdmull\\ts\[0-9\]+, h\[0-9\]+, h\[0-9\]+" 1 } } */
@@ -483,7 +483,7 @@ test_vqdmullh_s16 (int16x1_t a, int16x1_t b)
 /* { dg-final { scan-assembler-times "\\tsqdmull\\ts\[0-9\]+, h\[0-9\]+, v" 1 } } */
 
 int32x1_t
-test_vqdmullh_lane_s16 (int16x1_t a, int16x8_t b)
+test_vqdmullh_lane_s16 (int16x1_t a, int16x4_t b)
 {
   return vqdmullh_lane_s16 (a, b, 3);
 }
@@ -499,7 +499,7 @@ test_vqdmulls_s32 (int32x1_t a, int32x1_t b)
 /* { dg-final { scan-assembler-times "\\tsqdmull\\td\[0-9\]+, s\[0-9\]+, v" 1 } } */
 
 int64x1_t
-test_vqdmulls_lane_s32 (int32x1_t a, int32x4_t b)
+test_vqdmulls_lane_s32 (int32x1_t a, int32x2_t b)
 {
   return vqdmulls_lane_s32 (a, b, 1);
 }
@@ -515,9 +515,9 @@ test_vqrdmulhh_s16 (int16x1_t a, int16x1_t b)
 /* { dg-final { scan-assembler-times "\\tsqrdmulh\\th\[0-9\]+, h\[0-9\]+, v" 1 } } */
 
 int16x1_t
-test_vqrdmulhh_lane_s16 (int16x1_t a, int16x8_t b)
+test_vqrdmulhh_lane_s16 (int16x1_t a, int16x4_t b)
 {
-  return vqrdmulhh_lane_s16 (a, b, 6);
+  return vqrdmulhh_lane_s16 (a, b, 3);
 }
 
 /* { dg-final { scan-assembler-times "\\tsqrdmulh\\ts\[0-9\]+, s\[0-9\]+, s\[0-9\]+" 1 } } */
@@ -531,9 +531,9 @@ test_vqrdmulhs_s32 (int32x1_t a, int32x1_t b)
 /* { dg-final { scan-assembler-times "\\tsqrdmulh\\ts\[0-9\]+, s\[0-9\]+, v" 1 } } */
 
 int32x1_t
-test_vqrdmulhs_lane_s32 (int32x1_t a, int32x4_t b)
+test_vqrdmulhs_lane_s32 (int32x1_t a, int32x2_t b)
 {
-  return vqrdmulhs_lane_s32 (a, b, 2);
+  return vqrdmulhs_lane_s32 (a, b, 1);
 }
 
 /* { dg-final { scan-assembler-times "\\tsuqadd\\tb\[0-9\]+" 1 } } */
index affb8a8..52b0496 100644 (file)
@@ -1,7 +1,7 @@
 /* { dg-do compile } */
 /* { dg-options "-O2" } */
 
-#include "../../../config/aarch64/arm_neon.h"
+#include "arm_neon.h"
 
 
 /* { dg-final { scan-assembler-times "\\tfmax\\tv\[0-9\]+\.2s, v\[0-9\].2s, v\[0-9\].2s" 1 } } */
@@ -305,7 +305,7 @@ test_vqdmlal_high_s16 (int32x4_t __a, int16x8_t __b, int16x8_t __c)
 /* { dg-final { scan-assembler-times "\\tsqdmlal2\\tv\[0-9\]+\.4s, v\[0-9\]+\.8h, v\[0-9\]+\.h" 3 } } */
 
 int32x4_t
-test_vqdmlal_high_lane_s16 (int32x4_t a, int16x8_t b, int16x8_t c)
+test_vqdmlal_high_lane_s16 (int32x4_t a, int16x8_t b, int16x4_t c)
 {
   return vqdmlal_high_lane_s16 (a, b, c, 3);
 }
@@ -361,7 +361,7 @@ test_vqdmlal_high_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c)
 /* { dg-final { scan-assembler-times "\\tsqdmlal2\\tv\[0-9\]+\.2d, v\[0-9\]+\.4s, v\[0-9\]+\.s" 3 } } */
 
 int64x2_t
-test_vqdmlal_high_lane_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c)
+test_vqdmlal_high_lane_s32 (int64x2_t __a, int32x4_t __b, int32x2_t __c)
 {
   return vqdmlal_high_lane_s32 (__a, __b, __c, 1);
 }
@@ -417,7 +417,7 @@ test_vqdmlsl_high_s16 (int32x4_t __a, int16x8_t __b, int16x8_t __c)
 /* { dg-final { scan-assembler-times "\\tsqdmlsl2\\tv\[0-9\]+\.4s, v\[0-9\]+\.8h, v\[0-9\]+\.h" 3 } } */
 
 int32x4_t
-test_vqdmlsl_high_lane_s16 (int32x4_t a, int16x8_t b, int16x8_t c)
+test_vqdmlsl_high_lane_s16 (int32x4_t a, int16x8_t b, int16x4_t c)
 {
   return vqdmlsl_high_lane_s16 (a, b, c, 3);
 }
@@ -473,7 +473,7 @@ test_vqdmlsl_high_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c)
 /* { dg-final { scan-assembler-times "\\tsqdmlsl2\\tv\[0-9\]+\.2d, v\[0-9\]+\.4s, v\[0-9\]+\.s" 3 } } */
 
 int64x2_t
-test_vqdmlsl_high_lane_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c)
+test_vqdmlsl_high_lane_s32 (int64x2_t __a, int32x4_t __b, int32x2_t __c)
 {
   return vqdmlsl_high_lane_s32 (__a, __b, __c, 1);
 }
@@ -529,7 +529,7 @@ test_vqdmull_high_s16 (int16x8_t __a, int16x8_t __b)
 /* { dg-final { scan-assembler-times "\\tsqdmull2\\tv\[0-9\]+\.4s, v\[0-9\]+\.8h, v\[0-9\]+\.h" 3 } } */
 
 int32x4_t
-test_vqdmull_high_lane_s16 (int16x8_t a, int16x8_t b)
+test_vqdmull_high_lane_s16 (int16x8_t a, int16x4_t b)
 {
   return vqdmull_high_lane_s16 (a, b, 3);
 }
@@ -585,7 +585,7 @@ test_vqdmull_high_s32 (int32x4_t __a, int32x4_t __b)
 /* { dg-final { scan-assembler-times "\\tsqdmull2\\tv\[0-9\]+\.2d, v\[0-9\]+\.4s, v\[0-9\]+\.s" 3 } } */
 
 int64x2_t
-test_vqdmull_high_lane_s32 (int32x4_t __a, int32x4_t __b)
+test_vqdmull_high_lane_s32 (int32x4_t __a, int32x2_t __b)
 {
   return vqdmull_high_lane_s32 (__a, __b, 1);
 }
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmlal_high_lane_s16.c b/gcc/testsuite/gcc.target/aarch64/vqdmlal_high_lane_s16.c
new file mode 100644 (file)
index 0000000..1388c3b
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmlal_high_lane_s16 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int32x4_t
+t_vqdmlal_high_lane_s16 (int32x4_t a, int16x8_t b, int16x4_t c)
+{
+  return vqdmlal_high_lane_s16 (a, b, c, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmlal2\[ \t\]+\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.8\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmlal_high_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/vqdmlal_high_lane_s32.c
new file mode 100644 (file)
index 0000000..f90387d
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmlal_high_lane_s32 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int64x2_t
+t_vqdmlal_high_lane_s32 (int64x2_t a, int32x4_t b, int32x2_t c)
+{
+  return vqdmlal_high_lane_s32 (a, b, c, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmlal2\[ \t\]+\[vV\]\[0-9\]+\.2\[dD\], ?\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmlal_high_laneq_s16.c b/gcc/testsuite/gcc.target/aarch64/vqdmlal_high_laneq_s16.c
new file mode 100644 (file)
index 0000000..5399ce9
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmlal_high_laneq_s16 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int32x4_t
+t_vqdmlal_high_laneq_s16 (int32x4_t a, int16x8_t b, int16x8_t c)
+{
+  return vqdmlal_high_laneq_s16 (a, b, c, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmlal2\[ \t\]+\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.8\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmlal_high_laneq_s32.c b/gcc/testsuite/gcc.target/aarch64/vqdmlal_high_laneq_s32.c
new file mode 100644 (file)
index 0000000..e4b5558
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmlal_high_laneq_s32 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int64x2_t
+t_vqdmlal_high_laneq_s32 (int64x2_t a, int32x4_t b, int32x4_t c)
+{
+  return vqdmlal_high_laneq_s32 (a, b, c, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmlal2\[ \t\]+\[vV\]\[0-9\]+\.2\[dD\], ?\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmlal_lane_s16.c b/gcc/testsuite/gcc.target/aarch64/vqdmlal_lane_s16.c
new file mode 100644 (file)
index 0000000..7e60c82
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmlal_lane_s16 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int32x4_t
+t_vqdmlal_lane_s16 (int32x4_t a, int16x4_t b, int16x4_t c)
+{
+  return vqdmlal_lane_s16 (a, b, c, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmlal\[ \t\]+\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.4\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmlal_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/vqdmlal_lane_s32.c
new file mode 100644 (file)
index 0000000..c0f508d
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmlal_lane_s32 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int64x2_t
+t_vqdmlal_lane_s32 (int64x2_t a, int32x2_t b, int32x2_t c)
+{
+  return vqdmlal_lane_s32 (a, b, c, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmlal\[ \t\]+\[vV\]\[0-9\]+\.2\[dD\], ?\[vV\]\[0-9\]+\.2\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmlal_laneq_s16.c b/gcc/testsuite/gcc.target/aarch64/vqdmlal_laneq_s16.c
new file mode 100644 (file)
index 0000000..9bf1304
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmlal_laneq_s16 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int32x4_t
+t_vqdmlal_laneq_s16 (int32x4_t a, int16x4_t b, int16x8_t c)
+{
+  return vqdmlal_laneq_s16 (a, b, c, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmlal\[ \t\]+\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.4\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmlal_laneq_s32.c b/gcc/testsuite/gcc.target/aarch64/vqdmlal_laneq_s32.c
new file mode 100644 (file)
index 0000000..5fd9c56
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmlal_laneq_s32 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int64x2_t
+t_vqdmlal_laneq_s32 (int64x2_t a, int32x2_t b, int32x4_t c)
+{
+  return vqdmlal_laneq_s32 (a, b, c, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmlal\[ \t\]+\[vV\]\[0-9\]+\.2\[dD\], ?\[vV\]\[0-9\]+\.2\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmlalh_lane_s16.c b/gcc/testsuite/gcc.target/aarch64/vqdmlalh_lane_s16.c
new file mode 100644 (file)
index 0000000..83f5af5
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmlalh_lane_s16 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int32x1_t
+t_vqdmlalh_lane_s16 (int32x1_t a, int16x1_t b, int16x4_t c)
+{
+  return vqdmlalh_lane_s16 (a, b, c, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmlal\[ \t\]+\[sS\]\[0-9\]+, ?\[hH\]\[0-9\]+, ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmlals_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/vqdmlals_lane_s32.c
new file mode 100644 (file)
index 0000000..ef94e95
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmlals_lane_s32 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int64x1_t
+t_vqdmlals_lane_s32 (int64x1_t a, int32x1_t b, int32x2_t c)
+{
+  return vqdmlals_lane_s32 (a, b, c, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmlal\[ \t\]+\[dD\]\[0-9\]+, ?\[sS\]\[0-9\]+, ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_lane_s16.c b/gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_lane_s16.c
new file mode 100644 (file)
index 0000000..276a1a2
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmlsl_high_lane_s16 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int32x4_t
+t_vqdmlsl_high_lane_s16 (int32x4_t a, int16x8_t b, int16x4_t c)
+{
+  return vqdmlsl_high_lane_s16 (a, b, c, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmlsl2\[ \t\]+\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.8\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_lane_s32.c
new file mode 100644 (file)
index 0000000..2ae58ef
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmlsl_high_lane_s32 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int64x2_t
+t_vqdmlsl_high_lane_s32 (int64x2_t a, int32x4_t b, int32x2_t c)
+{
+  return vqdmlsl_high_lane_s32 (a, b, c, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmlsl2\[ \t\]+\[vV\]\[0-9\]+\.2\[dD\], ?\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_laneq_s16.c b/gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_laneq_s16.c
new file mode 100644 (file)
index 0000000..1db5db4
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmlsl_high_laneq_s16 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int32x4_t
+t_vqdmlsl_high_laneq_s16 (int32x4_t a, int16x8_t b, int16x8_t c)
+{
+  return vqdmlsl_high_laneq_s16 (a, b, c, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmlsl2\[ \t\]+\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.8\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_laneq_s32.c b/gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_laneq_s32.c
new file mode 100644 (file)
index 0000000..3a72a7b
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmlsl_high_laneq_s32 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int64x2_t
+t_vqdmlsl_high_laneq_s32 (int64x2_t a, int32x4_t b, int32x4_t c)
+{
+  return vqdmlsl_high_laneq_s32 (a, b, c, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmlsl2\[ \t\]+\[vV\]\[0-9\]+\.2\[dD\], ?\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmlsl_lane_s16.c b/gcc/testsuite/gcc.target/aarch64/vqdmlsl_lane_s16.c
new file mode 100644 (file)
index 0000000..0535378
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmlsl_lane_s16 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int32x4_t
+t_vqdmlsl_lane_s16 (int32x4_t a, int16x4_t b, int16x4_t c)
+{
+  return vqdmlsl_lane_s16 (a, b, c, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmlsl\[ \t\]+\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.4\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmlsl_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/vqdmlsl_lane_s32.c
new file mode 100644 (file)
index 0000000..b52e51e
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmlsl_lane_s32 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int64x2_t
+t_vqdmlsl_lane_s32 (int64x2_t a, int32x2_t b, int32x2_t c)
+{
+  return vqdmlsl_lane_s32 (a, b, c, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmlsl\[ \t\]+\[vV\]\[0-9\]+\.2\[dD\], ?\[vV\]\[0-9\]+\.2\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmlsl_laneq_s32.c b/gcc/testsuite/gcc.target/aarch64/vqdmlsl_laneq_s32.c
new file mode 100644 (file)
index 0000000..7009a35
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmlsl_laneq_s32 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int64x2_t
+t_vqdmlsl_lane_s32 (int64x2_t a, int32x2_t b, int32x4_t c)
+{
+  return vqdmlsl_laneq_s32 (a, b, c, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmlsl\[ \t\]+\[vV\]\[0-9\]+\.2\[dD\], ?\[vV\]\[0-9\]+\.2\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmlslh_lane_s16.c b/gcc/testsuite/gcc.target/aarch64/vqdmlslh_lane_s16.c
new file mode 100644 (file)
index 0000000..056dfbb
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmlslh_lane_s16 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int32x1_t
+t_vqdmlslh_lane_s16 (int32x1_t a, int16x1_t b, int16x4_t c)
+{
+  return vqdmlslh_lane_s16 (a, b, c, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmlsl\[ \t\]+\[sS\]\[0-9\]+, ?\[hH\]\[0-9\]+, ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmlsls_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/vqdmlsls_lane_s32.c
new file mode 100644 (file)
index 0000000..9e351bc
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmlsls_lane_s32 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int64x1_t
+t_vqdmlsls_lane_s32 (int64x1_t a, int32x1_t b, int32x2_t c)
+{
+  return vqdmlsls_lane_s32 (a, b, c, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmlsl\[ \t\]+\[dD\]\[0-9\]+, ?\[sS\]\[0-9\]+, ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmulh_laneq_s16.c b/gcc/testsuite/gcc.target/aarch64/vqdmulh_laneq_s16.c
new file mode 100644 (file)
index 0000000..d3c699b
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmulh_laneq_s16 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int16x4_t
+t_vqdmulh_laneq_s16 (int16x4_t a, int16x8_t b)
+{
+  return vqdmulh_laneq_s16 (a, b, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmulh\[ \t\]+\[vV\]\[0-9\]+\.4\[hH\], ?\[vV\]\[0-9\]+\.4\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmulh_laneq_s32.c b/gcc/testsuite/gcc.target/aarch64/vqdmulh_laneq_s32.c
new file mode 100644 (file)
index 0000000..c6202ce
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmulh_laneq_s32 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int32x2_t
+t_vqdmulh_laneq_s32 (int32x2_t a, int32x4_t b)
+{
+  return vqdmulh_laneq_s32 (a, b, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmulh\[ \t\]+\[vV\]\[0-9\]+\.2\[sS\], ?\[vV\]\[0-9\]+\.2\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmulhh_lane_s16.c b/gcc/testsuite/gcc.target/aarch64/vqdmulhh_lane_s16.c
new file mode 100644 (file)
index 0000000..7635851
--- /dev/null
@@ -0,0 +1,36 @@
+/* Test the vqdmulhh_lane_s16 AArch64 SIMD intrinsic.  */
+
+/* { dg-do run } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+#include <stdio.h>
+
+extern void abort (void);
+
+int
+main (void)
+{
+  int16_t arg1;
+  int16x4_t arg2;
+  int16_t result;
+  int16_t actual;
+  int16_t expected;
+
+  arg1 = -32768;
+  arg2 = vcreate_s16 (0x0000ffff2489e398ULL);
+  actual = vqdmulhh_lane_s16 (arg1, arg2, 2);
+  expected = 1;
+
+  if (expected != actual)
+    {
+      fprintf (stderr, "Expected: %xd, got %xd\n", expected, actual);
+      abort ();
+    }
+
+  return 0;
+}
+
+
+/* { dg-final { scan-assembler-times "sqdmulh\[ \t\]+\[hH\]\[0-9\]+, ?\[hH\]\[0-9\]+, ?\[vV\]\[0-9\]+\.\[hH\]\\\[2\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmulhq_laneq_s16.c b/gcc/testsuite/gcc.target/aarch64/vqdmulhq_laneq_s16.c
new file mode 100644 (file)
index 0000000..809c85a
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmulhq_laneq_s16 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int16x8_t
+t_vqdmulhq_laneq_s16 (int16x8_t a, int16x8_t b)
+{
+  return vqdmulhq_laneq_s16 (a, b, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmulh\[ \t\]+\[vV\]\[0-9\]+\.8\[hH\], ?\[vV\]\[0-9\]+\.8\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmulhq_laneq_s32.c b/gcc/testsuite/gcc.target/aarch64/vqdmulhq_laneq_s32.c
new file mode 100644 (file)
index 0000000..d375fe8
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmulhq_laneq_s32 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int32x4_t
+t_vqdmulhq_laneq_s32 (int32x4_t a, int32x4_t b)
+{
+  return vqdmulhq_laneq_s32 (a, b, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmulh\[ \t\]+\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmulhs_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/vqdmulhs_lane_s32.c
new file mode 100644 (file)
index 0000000..9c27f5f
--- /dev/null
@@ -0,0 +1,34 @@
+/* Test the vqdmulhs_lane_s32 AArch64 SIMD intrinsic.  */
+
+/* { dg-do run } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+#include <stdio.h>
+
+extern void abort (void);
+
+int
+main (void)
+{
+  int32_t arg1;
+  int32x2_t arg2;
+  int32_t result;
+  int32_t actual;
+  int32_t expected;
+
+  arg1 = 57336;
+  arg2 = vcreate_s32 (0x55897fff7fff0000ULL);
+  actual = vqdmulhs_lane_s32 (arg1, arg2, 0);
+  expected = 57334;
+
+  if (expected != actual)
+    {
+      fprintf (stderr, "Expected: %xd, got %xd\n", expected, actual);
+      abort ();
+    }
+
+  return 0;
+}
+/* { dg-final { scan-assembler-times "sqdmulh\[ \t\]+\[sS\]\[0-9\]+, ?\[sS\]\[0-9\]+, ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmull_high_lane_s16.c b/gcc/testsuite/gcc.target/aarch64/vqdmull_high_lane_s16.c
new file mode 100644 (file)
index 0000000..0af320e
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmull_high_lane_s16 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int32x4_t
+t_vqdmull_high_lane_s16 (int16x8_t a, int16x4_t b)
+{
+  return vqdmull_high_lane_s16 (a, b, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmull2\[ \t\]+\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.8\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmull_high_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/vqdmull_high_lane_s32.c
new file mode 100644 (file)
index 0000000..583e8a1
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmull_high_lane_s32 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int64x2_t
+t_vqdmull_high_lane_s32 (int32x4_t a, int32x2_t b)
+{
+  return vqdmull_high_lane_s32 (a, b, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmull2\[ \t\]+\[vV\]\[0-9\]+\.2\[dD\], ?\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmull_high_laneq_s16.c b/gcc/testsuite/gcc.target/aarch64/vqdmull_high_laneq_s16.c
new file mode 100644 (file)
index 0000000..dcfd14c
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmull_high_laneq_s16 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int32x4_t
+t_vqdmull_high_laneq_s16 (int16x8_t a, int16x8_t b)
+{
+  return vqdmull_high_laneq_s16 (a, b, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmull2\[ \t\]+\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.8\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmull_high_laneq_s32.c b/gcc/testsuite/gcc.target/aarch64/vqdmull_high_laneq_s32.c
new file mode 100644 (file)
index 0000000..3e8b652
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmull_high_laneq_s32 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int64x2_t
+t_vqdmull_high_laneq_s32 (int32x4_t a, int32x4_t b)
+{
+  return vqdmull_high_laneq_s32 (a, b, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmull2\[ \t\]+\[vV\]\[0-9\]+\.2\[dD\], ?\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmull_lane_s16.c b/gcc/testsuite/gcc.target/aarch64/vqdmull_lane_s16.c
new file mode 100644 (file)
index 0000000..695d4e3
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmull_lane_s16 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int32x4_t
+t_vqdmull_lane_s16 (int16x4_t a, int16x4_t b)
+{
+  return vqdmull_lane_s16 (a, b, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmull\[ \t\]+\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.4\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmull_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/vqdmull_lane_s32.c
new file mode 100644 (file)
index 0000000..e6a02b5
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmull_lane_s32 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int64x2_t
+t_vqdmull_lane_s32 (int32x2_t a, int32x2_t b)
+{
+  return vqdmull_lane_s32 (a, b, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmull\[ \t\]+\[vV\]\[0-9\]+\.2\[dD\], ?\[vV\]\[0-9\]+\.2\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmull_laneq_s16.c b/gcc/testsuite/gcc.target/aarch64/vqdmull_laneq_s16.c
new file mode 100644 (file)
index 0000000..ba761b2
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmull_laneq_s16 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int32x4_t
+t_vqdmull_laneq_s16 (int16x4_t a, int16x8_t b)
+{
+  return vqdmull_laneq_s16 (a, b, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmull\[ \t\]+\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.4\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmull_laneq_s32.c b/gcc/testsuite/gcc.target/aarch64/vqdmull_laneq_s32.c
new file mode 100644 (file)
index 0000000..82b8e19
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmull_laneq_s32 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int64x2_t
+t_vqdmull_laneq_s32 (int32x2_t a, int32x4_t b)
+{
+  return vqdmull_laneq_s32 (a, b, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmull\[ \t\]+\[vV\]\[0-9\]+\.2\[dD\], ?\[vV\]\[0-9\]+\.2\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmullh_lane_s16.c b/gcc/testsuite/gcc.target/aarch64/vqdmullh_lane_s16.c
new file mode 100644 (file)
index 0000000..fd271e0
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmullh_lane_s16 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int32x1_t
+t_vqdmullh_lane_s16 (int16x1_t a, int16x4_t b)
+{
+  return vqdmullh_lane_s16 (a, b, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmull\[ \t\]+\[sS\]\[0-9\]+, ?\[hH\]\[0-9\]+, ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqdmulls_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/vqdmulls_lane_s32.c
new file mode 100644 (file)
index 0000000..1103333
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqdmulls_lane_s32 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int64x1_t
+t_vqdmulls_lane_s32 (int32x1_t a, int32x2_t b)
+{
+  return vqdmulls_lane_s32 (a, b, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqdmull\[ \t\]+\[dD\]\[0-9\]+, ?\[sS\]\[0-9\]+, ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqrdmulh_laneq_s16.c b/gcc/testsuite/gcc.target/aarch64/vqrdmulh_laneq_s16.c
new file mode 100644 (file)
index 0000000..0313f1c
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqrdmulh_laneq_s16 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int16x4_t
+t_vqrdmulh_laneq_s16 (int16x4_t a, int16x8_t b)
+{
+  return vqrdmulh_laneq_s16 (a, b, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqrdmulh\[ \t\]+\[vV\]\[0-9\]+\.4\[hH\], ?\[vV\]\[0-9\]+\.4\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqrdmulh_laneq_s32.c b/gcc/testsuite/gcc.target/aarch64/vqrdmulh_laneq_s32.c
new file mode 100644 (file)
index 0000000..a9124ee
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqrdmulh_laneq_s32 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int32x2_t
+t_vqrdmulh_laneq_s32 (int32x2_t a, int32x4_t b)
+{
+  return vqrdmulh_laneq_s32 (a, b, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqrdmulh\[ \t\]+\[vV\]\[0-9\]+\.2\[sS\], ?\[vV\]\[0-9\]+\.2\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqrdmulhh_lane_s16.c b/gcc/testsuite/gcc.target/aarch64/vqrdmulhh_lane_s16.c
new file mode 100644 (file)
index 0000000..f21863a
--- /dev/null
@@ -0,0 +1,35 @@
+/* Test the vqrdmulhh_lane_s16 AArch64 SIMD intrinsic.  */
+
+/* { dg-do run } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+#include <stdio.h>
+
+extern void abort (void);
+
+int
+main (void)
+{
+  int16_t arg1;
+  int16x4_t arg2;
+  int16_t result;
+  int16_t actual;
+  int16_t expected;
+
+  arg1 = -32768;
+  arg2 = vcreate_s16 (0xd78e000005d78000ULL);
+  actual = vqrdmulhh_lane_s16 (arg1, arg2, 3);
+  expected = 10354;
+
+  if (expected != actual)
+    {
+      fprintf (stderr, "Expected: %xd, got %xd\n", expected, actual);
+      abort ();
+    }
+
+  return 0;
+}
+
+/* { dg-final { scan-assembler-times "sqrdmulh\[ \t\]+\[hH\]\[0-9\]+, ?\[hH\]\[0-9\]+, ?\[vV\]\[0-9\]+\.\[hH\]\\\[3\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqrdmulhq_laneq_s16.c b/gcc/testsuite/gcc.target/aarch64/vqrdmulhq_laneq_s16.c
new file mode 100644 (file)
index 0000000..488e694
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqrdmulhq_laneq_s16 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int16x8_t
+t_vqrdmulhq_laneq_s16 (int16x8_t a, int16x8_t b)
+{
+  return vqrdmulhq_laneq_s16 (a, b, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqrdmulh\[ \t\]+\[vV\]\[0-9\]+\.8\[hH\], ?\[vV\]\[0-9\]+\.8\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqrdmulhq_laneq_s32.c b/gcc/testsuite/gcc.target/aarch64/vqrdmulhq_laneq_s32.c
new file mode 100644 (file)
index 0000000..42519f6
--- /dev/null
@@ -0,0 +1,15 @@
+/* Test the vqrdmulhq_laneq_s32 AArch64 SIMD intrinsic.  */
+
+/* { dg-do compile } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+
+int32x4_t
+t_vqrdmulhq_laneq_s32 (int32x4_t a, int32x4_t b)
+{
+  return vqrdmulhq_laneq_s32 (a, b, 0);
+}
+
+/* { dg-final { scan-assembler-times "sqrdmulh\[ \t\]+\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vqrdmulhs_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/vqrdmulhs_lane_s32.c
new file mode 100644 (file)
index 0000000..83d2ba2
--- /dev/null
@@ -0,0 +1,35 @@
+/* Test the vqrdmulhs_lane_s32 AArch64 SIMD intrinsic.  */
+
+/* { dg-do run } */
+/* { dg-options "-save-temps -O3 -fno-inline" } */
+
+#include "arm_neon.h"
+#include <stdio.h>
+
+extern void abort (void);
+
+int
+main (void)
+{
+  int32_t arg1;
+  int32x2_t arg2;
+  int32_t result;
+  int32_t actual;
+  int32_t expected;
+
+  arg1 = -2099281921;
+  arg2 = vcreate_s32 (0x000080007fff0000ULL);
+  actual = vqrdmulhs_lane_s32 (arg1, arg2, 1);
+  expected = -32033;
+
+  if (expected != actual)
+    {
+      fprintf (stderr, "Expected: %xd, got %xd\n", expected, actual);
+      abort ();
+    }
+
+  return 0;
+}
+
+/* { dg-final { scan-assembler-times "sqrdmulh\[ \t\]+\[sS\]\[0-9\]+, ?\[sS\]\[0-9\]+, ?\[vV\]\[0-9\]+\.\[sS\]\\\[1\\\]\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/alpha/pr61586.c b/gcc/testsuite/gcc.target/alpha/pr61586.c
new file mode 100644 (file)
index 0000000..afb1af3
--- /dev/null
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mieee" } */
+
+void foo (int *dimensions, double **params, int hh)
+{
+  if (params[hh])
+    ;
+  else if (dimensions[hh] > 0)
+    params[hh][0] = 1.0f;
+}
index 17f729b..250d5e4 100644 (file)
@@ -15,7 +15,6 @@ int main(void)
     uint8x8x2_t vd1, vd2;
     union {uint8x8_t v; uint8_t buf[8];} d1, d2, d3, d4;
     int i;
-    uint8_t odd, even;
 
     vd1 = vzip_u8(v1, vdup_n_u8(0));
     vd2 = vzip_u8(v2, vdup_n_u8(0));
@@ -25,17 +24,9 @@ int main(void)
     vst1_u8(d3.buf, vd2.val[0]);
     vst1_u8(d4.buf, vd2.val[1]);
 
-#ifdef __ARMEL__
-    odd = 1;
-    even = 0;
-#else
-    odd = 0;
-    even = 1;
-#endif
-
     for (i = 0; i < 8; i++)
-      if ((i % 2 == even && d4.buf[i] != 2)
-          || (i % 2 == odd && d4.buf[i] != 0))
+      if ((i % 2 == 0 && d4.buf[i] != 2)
+          || (i % 2 == 1 && d4.buf[i] != 0))
          abort ();
 
     return 0;
diff --git a/gcc/testsuite/gcc.target/avr/pr60991.c b/gcc/testsuite/gcc.target/avr/pr60991.c
new file mode 100644 (file)
index 0000000..a09f42a
--- /dev/null
@@ -0,0 +1,21 @@
+/* { dg-do run } */
+/* { dg-options "-O1" } */
+
+/* This testcase (simplified from the original bug report) exposes 
+   PR60991. The code generated for writing the __int24 value corrupts
+   the frame pointer if the offset is <= 63 + MAX_LD_OFFSET */
+
+#include <stdlib.h>
+
+int main(void)
+{
+    volatile char junk[62];
+    junk[0] = 5;
+    volatile __int24 staticConfig = 0;
+
+    if (junk[0] != 5)
+      abort();
+
+    exit(0);
+    return 0;
+}
diff --git a/gcc/testsuite/gcc.target/avr/torture/pr61055.c b/gcc/testsuite/gcc.target/avr/torture/pr61055.c
new file mode 100644 (file)
index 0000000..9dd1f42
--- /dev/null
@@ -0,0 +1,88 @@
+/* { dg-do run } */
+/* { dg-options { -fno-peephole2 } } */
+
+#include <stdlib.h>
+
+typedef __UINT16_TYPE__ uint16_t;
+typedef __INT16_TYPE__  int16_t;
+typedef __UINT8_TYPE__  uint8_t;
+
+uint8_t __attribute__((noinline,noclone))
+fun_inc (uint8_t c0)
+{
+  register uint8_t c asm ("r15") = c0;
+
+  /* Force target value into R15 (lower register)  */
+  asm ("" : "+l" (c));
+
+  c++;
+  if (c >= 0x80)
+    c = 0;
+  
+  asm ("" : "+l" (c));
+
+  return c;
+}
+
+uint8_t __attribute__((noinline,noclone))
+fun_dec (uint8_t c0)
+{
+  register uint8_t c asm ("r15") = c0;
+
+  /* Force target value into R15 (lower register)  */
+  asm ("" : "+l" (c));
+
+  c--;
+  if (c < 0x80)
+    c = 0;
+  
+  asm ("" : "+l" (c));
+
+  return c;
+}
+
+
+uint8_t __attribute__((noinline,noclone))
+fun_neg (uint8_t c0)
+{
+  register uint8_t c asm ("r15") = c0;
+
+  c = -c;
+  if (c >= 0x80)
+    c = 0;
+
+  return c;
+}
+
+uint16_t __attribute__((noinline,noclone))
+fun_adiw (uint16_t c0)
+{
+  register uint16_t c asm ("r24") = c0;
+
+  /* Force target value into R24 (for ADIW) */
+  asm ("" : "+r" (c));
+
+  c += 2;
+  if (c >= 0x8000)
+    c = 0;
+
+  asm ("" : "+r" (c));
+  
+  return c;
+}
+
+
+int main()
+{
+  if (fun_inc (0x7f) != 0)
+    abort();
+  
+  if (fun_neg (0x80) != 0)
+    abort();
+  
+  if (fun_adiw (0x7ffe) != 0)
+    abort();
+
+  exit (0);
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/avr/torture/pr61443.c b/gcc/testsuite/gcc.target/avr/torture/pr61443.c
new file mode 100644 (file)
index 0000000..12c6bca
--- /dev/null
@@ -0,0 +1,134 @@
+/* { dg-do run } */
+/* { dg-options "-std=gnu99" } */
+
+#include <stdlib.h>
+#include <stdarg.h>
+
+#define NC __attribute__((noinline,noclone))
+
+void NC vfun (char n, ...)
+{
+  va_list ap;
+
+  va_start (ap, n);
+
+  switch (n)
+    {
+    default:
+      abort();
+    case 1:
+      if (11 != va_arg (ap, int))
+        abort();
+      break;
+    case 2:
+      if (2222 != va_arg (ap, int))
+        abort();
+      break;
+    case 3:
+      if (333333 != va_arg (ap, __int24))
+        abort();
+      break;
+    case 4:
+      if (44444444 != va_arg (ap, long))
+        abort();
+      break;
+    case 8:
+      if (8888888888888888 != va_arg (ap, long long))
+        abort();
+      break;
+    }
+
+  va_end (ap);
+}
+
+
+void NC boo_qi (const __flash char *p)
+{
+  vfun (1, *p);
+}
+
+void NC boox_qi (const __memx char *p)
+{
+  vfun (1, *p);
+}
+
+void NC boo_hi (const __flash int *p)
+{
+  vfun (2, *p);
+}
+
+void NC boox_hi (const __memx int *p)
+{
+  vfun (2, *p);
+}
+
+void NC boo_psi (const __flash __int24 *p)
+{
+  vfun (3, *p);
+}
+
+void NC boox_psi (const __memx __int24 *p)
+{
+  vfun (3, *p);
+}
+
+void NC boo_si (const __flash long *p)
+{
+  vfun (4, *p);
+}
+
+void NC boox_si (const __memx long *p)
+{
+  vfun (4, *p);
+}
+
+void NC boo_di (const __flash long long *p)
+{
+  vfun (8, *p);
+}
+
+void NC boox_di (const __memx long long *p)
+{
+  vfun (8, *p);
+}
+
+const __flash char f_qi = 11;
+const __flash int f_hi = 2222;
+const __flash __int24 f_psi = 333333;
+const __flash long f_si = 44444444;
+const __flash long long f_di = 8888888888888888;
+
+const __memx char x_qi = 11;
+const __memx int x_hi = 2222;
+const __memx __int24 x_psi = 333333;
+const __memx long x_si = 44444444;
+const __memx long long x_di = 8888888888888888;
+
+char r_qi = 11;
+int r_hi = 2222;
+__int24 r_psi = 333333;
+long r_si = 44444444;
+long long r_di = 8888888888888888;
+
+int main (void)
+{
+  boo_qi (&f_qi);
+  boo_hi (&f_hi);
+  boo_psi (&f_psi);
+  boo_si (&f_si);
+  boo_di (&f_di);
+
+  boox_qi (&x_qi);
+  boox_hi (&x_hi);
+  boox_psi (&x_psi);
+  boox_si (&x_si);
+  boox_di (&x_di);
+
+  boox_qi (&r_qi);
+  boox_hi (&r_hi);
+  boox_psi (&r_psi);
+  boox_si (&r_si);
+  boox_di (&r_di);
+
+  exit (0);
+}
diff --git a/gcc/testsuite/gcc.target/i386/avx-pr57233.c b/gcc/testsuite/gcc.target/i386/avx-pr57233.c
new file mode 100644 (file)
index 0000000..ffc71d9
--- /dev/null
@@ -0,0 +1,16 @@
+/* PR tree-optimization/57233 */
+/* { dg-do run { target avx } } */
+/* { dg-options "-O2 -mavx" } */
+
+#include "avx-check.h"
+
+static void
+avx_test (void)
+{
+  do_main ();
+}
+
+#undef main
+#define main() do_main ()
+
+#include "../../gcc.dg/pr57233.c"
diff --git a/gcc/testsuite/gcc.target/i386/avx2-pr57233.c b/gcc/testsuite/gcc.target/i386/avx2-pr57233.c
new file mode 100644 (file)
index 0000000..3fb2608
--- /dev/null
@@ -0,0 +1,16 @@
+/* PR tree-optimization/57233 */
+/* { dg-do run { target avx2 } } */
+/* { dg-options "-O2 -mavx2" } */
+
+#include "avx2-check.h"
+
+static void
+avx2_test (void)
+{
+  do_main ();
+}
+
+#undef main
+#define main() do_main ()
+
+#include "../../gcc.dg/pr57233.c"
diff --git a/gcc/testsuite/gcc.target/i386/avx512f-pr57233.c b/gcc/testsuite/gcc.target/i386/avx512f-pr57233.c
new file mode 100644 (file)
index 0000000..2f1c23a
--- /dev/null
@@ -0,0 +1,16 @@
+/* PR tree-optimization/57233 */
+/* { dg-do run { target avx512f } } */
+/* { dg-options "-O2 -mavx512f" } */
+
+#include "avx512f-check.h"
+
+static void
+avx512f_test (void)
+{
+  do_main ();
+}
+
+#undef main
+#define main() do_main ()
+
+#include "../../gcc.dg/pr57233.c"
diff --git a/gcc/testsuite/gcc.target/i386/clearcap.map b/gcc/testsuite/gcc.target/i386/clearcap.map
deleted file mode 100644 (file)
index 147f922..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-# clear all hardware capabilities emitted by Sun as: the tests here
-# guard against execution at runtime
-hwcap_1 = V0x0 OVERRIDE;
diff --git a/gcc/testsuite/gcc.target/i386/clearcapv2.map b/gcc/testsuite/gcc.target/i386/clearcapv2.map
deleted file mode 100644 (file)
index 95cb14c..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-# clear all hardware capabilities emitted by Sun as: the tests here
-# guard against execution at runtime
-# uses mapfile v2 syntax which is the only way to clear AT_SUN_CAP_HW2 flags
-$mapfile_version 2
-CAPABILITY {
-  HW = ;
-};
index 080e302..d9b36cd 100644 (file)
@@ -23,6 +23,7 @@ if { ![istarget i?86*-*-*] && ![istarget x86_64-*-*] } then {
 
 # Load support procs.
 load_lib gcc-dg.exp
+load_lib clearcap.exp
 
 # Return 1 if attribute ms_hook_prologue is supported.
 proc check_effective_target_ms_hook_prologue { } {
@@ -307,39 +308,6 @@ proc check_effective_target_sha { } {
     } "-O2 -msha" ]
 }
 
-# If the linker used understands -M <mapfile>, pass it to clear hardware
-# capabilities set by the Sun assembler.
-# Try mapfile syntax v2 first which is the only way to clear hwcap_2 flags.
-set clearcap_ldflags "-Wl,-M,$srcdir/$subdir/clearcapv2.map"
-
-if ![check_no_compiler_messages mapfilev2 executable {
-    int main (void) { return 0; }
-} $clearcap_ldflags ] {
-    # If this doesn't work, fall back to the less capable v1 syntax.
-    set clearcap_ldflags "-Wl,-M,$srcdir/$subdir/clearcap.map"
-
-    if ![check_no_compiler_messages mapfile executable {
-       int main (void) { return 0; }
-    } $clearcap_ldflags ] {
-       unset clearcap_ldflags
-    }
-}
-
-if [info exists clearcap_ldflags] {
-  if { [info procs gcc_target_compile] != [list] \
-       && [info procs saved_gcc_target_compile] == [list] } {
-    rename gcc_target_compile saved_gcc_target_compile
-
-    proc gcc_target_compile { source dest type options } {
-      global clearcap_ldflags
-      # Always pass -Wl,-M,<mapfile>, but don't let it show up in gcc.sum.
-      lappend options "additional_flags=$clearcap_ldflags"
-
-      return [saved_gcc_target_compile $source $dest $type $options]
-    }
-  }
-}
-
 # If a testcase doesn't have special options, use these.
 global DEFAULT_CFLAGS
 if ![info exists DEFAULT_CFLAGS] then {
@@ -348,6 +316,7 @@ if ![info exists DEFAULT_CFLAGS] then {
 
 # Initialize `dg'.
 dg-init
+clearcap-init
 
 # Special case compilation of vect-args.c so we don't have to
 # replicate it 10 times.
@@ -367,4 +336,5 @@ set tests [prune $tests $srcdir/$subdir/vect-args.c]
 dg-runtest $tests "" $DEFAULT_CFLAGS
 
 # All done.
+clearcap-finish
 dg-finish
diff --git a/gcc/testsuite/gcc.target/i386/pr57233.c b/gcc/testsuite/gcc.target/i386/pr57233.c
new file mode 100644 (file)
index 0000000..34182fa
--- /dev/null
@@ -0,0 +1,15 @@
+/* PR tree-optimization/57233 */
+/* { dg-do compile { target avx } } */
+/* { dg-options "-O2 -mavx -mno-xop" } */
+
+typedef unsigned V4 __attribute__((vector_size(4 * sizeof (int))));
+V4 a;
+
+__attribute__((noinline)) void
+foo (void)
+{
+  a = (a << 2) | (a >> 30);
+}
+
+/* { dg-final { scan-assembler "vpsrld\[^\n\r]*30" } } */
+/* { dg-final { scan-assembler "vpslld\[^\n\r]*2" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr60868.c b/gcc/testsuite/gcc.target/i386/pr60868.c
new file mode 100644 (file)
index 0000000..c30bbfc
--- /dev/null
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O0 -minline-all-stringops -minline-stringops-dynamically -march=core2" } */
+
+void bar (float *);
+
+void foo (void)
+{
+  float b[256] = {0};
+  bar(b);
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr60901.c b/gcc/testsuite/gcc.target/i386/pr60901.c
new file mode 100644 (file)
index 0000000..f0f25a1
--- /dev/null
@@ -0,0 +1,17 @@
+/* { dg-options "-O -fselective-scheduling -fschedule-insns -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops -fno-tree-dominator-opts"  } */
+
+extern int n;
+extern void bar (void);
+extern int baz (int);
+
+void
+foo (void)
+{
+  int i, j;
+  for (j = 0; j < n; j++)
+    {
+      for (i = 1; i < j; i++)
+       bar ();
+      baz (0);
+    }
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr60902.c b/gcc/testsuite/gcc.target/i386/pr60902.c
new file mode 100644 (file)
index 0000000..b81dcd7
--- /dev/null
@@ -0,0 +1,32 @@
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+extern void abort ();
+extern void exit (int);
+
+int x;
+
+foo()
+{
+  static int count;
+  count++;
+  if (count > 1)
+    abort ();
+}
+
+static inline int
+frob ()
+{
+  int a;
+  __asm__ ("mov %1, %0\n\t" : "=r" (a) : "m" (x));
+  x++;
+  return a;
+}
+
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 10 && frob () == 0; i++)
+    foo();
+  exit (0);
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr60909-1.c b/gcc/testsuite/gcc.target/i386/pr60909-1.c
new file mode 100644 (file)
index 0000000..5a1ac3c
--- /dev/null
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-mrdrnd" } */
+
+extern void bar (int);
+
+void
+foo (unsigned *u)
+{
+  int i = __builtin_ia32_rdrand32_step (u);
+  bar (i);
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr60909-2.c b/gcc/testsuite/gcc.target/i386/pr60909-2.c
new file mode 100644 (file)
index 0000000..dd35668
--- /dev/null
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-mrdseed" } */
+
+extern void bar (int);
+
+void
+foo (unsigned *u)
+{
+  int i = __builtin_ia32_rdseed_si_step (u);
+  bar (i);
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr61423.c b/gcc/testsuite/gcc.target/i386/pr61423.c
new file mode 100644 (file)
index 0000000..5b538a2
--- /dev/null
@@ -0,0 +1,38 @@
+/* PR target/61423 */
+/* { dg-do run { target ia32 } } */
+/* { dg-options "-O1 -ftree-vectorize -msse2 -mfpmath=387 -mtune=core2" } */
+
+#define N 1024
+static unsigned int A[N];
+
+double
+__attribute__((noinline))
+func (void)
+{
+  unsigned int sum = 0;
+  unsigned i;
+  double t;
+
+  for (i = 0; i < N; i++)
+    sum += A[i];
+
+  t = sum;
+  return t;
+}
+
+int
+main ()
+{
+  unsigned i;
+  double d;
+
+  for(i = 0; i < N; i++)
+    A[i] = 1;
+
+  d = func();
+
+  if (d != 1024.0)
+    __builtin_abort ();
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr61446.c b/gcc/testsuite/gcc.target/i386/pr61446.c
new file mode 100644 (file)
index 0000000..fc32f63
--- /dev/null
@@ -0,0 +1,14 @@
+/* PR rtl-optimization/61446 */
+
+/* { dg-do compile { target { ia32 } } } */
+/* { dg-options "-O2 -march=corei7 -mfpmath=387" } */
+
+unsigned long long
+foo (float a)
+{
+  const double dfa = a;
+  const unsigned int hi = dfa / 0x1p32f;
+  const unsigned int lo = dfa - (double) hi * 0x1p32f;
+
+  return ((unsigned long long) hi << (4 * (8))) | lo;
+}
diff --git a/gcc/testsuite/gcc.target/i386/sse2-pr57233.c b/gcc/testsuite/gcc.target/i386/sse2-pr57233.c
new file mode 100644 (file)
index 0000000..8a3bb2f
--- /dev/null
@@ -0,0 +1,16 @@
+/* PR tree-optimization/57233 */
+/* { dg-do run { target sse2 } } */
+/* { dg-options "-O2 -msse2" } */
+
+#include "sse2-check.h"
+
+static void
+sse2_test (void)
+{
+  do_main ();
+}
+
+#undef main
+#define main() do_main ()
+
+#include "../../gcc.dg/pr57233.c"
diff --git a/gcc/testsuite/gcc.target/i386/vec-may_alias.c b/gcc/testsuite/gcc.target/i386/vec-may_alias.c
new file mode 100644 (file)
index 0000000..e970497
--- /dev/null
@@ -0,0 +1,25 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -w -Wno-abi" } */
+
+typedef int v2si __attribute__ ((vector_size (8)));
+typedef short v4hi __attribute__ ((vector_size (8)));
+typedef short v4hia __attribute__ ((vector_size (8), may_alias));
+
+__attribute__ ((noinline, noclone))
+int f (v2si A, int N)
+{ return ((v4hia)A)[N]; }
+
+__attribute__ ((noinline, noclone))
+int g (v2si A, int N)
+{ return ((v4hi)A)[N]; }
+
+int main()
+{
+  v2si x = { 0, 0 }, y = { 1, 1 };
+  if (f (x, 0) || f (x, 1) || f (x, 2) || f (x, 3))
+    __builtin_abort ();
+  if (g (y, 0) != 1 || g (y, 1) || g (y, 2) != 1 || g (y, 3))
+    __builtin_abort ();
+  return 0;
+}
+
diff --git a/gcc/testsuite/gcc.target/i386/xop-pr57233.c b/gcc/testsuite/gcc.target/i386/xop-pr57233.c
new file mode 100644 (file)
index 0000000..6129dc2
--- /dev/null
@@ -0,0 +1,16 @@
+/* PR tree-optimization/57233 */
+/* { dg-do run { target xop } } */
+/* { dg-options "-O2 -mxop" } */
+
+#include "xop-check.h"
+
+static void
+xop_test (void)
+{
+  do_main ();
+}
+
+#undef main
+#define main() do_main ()
+
+#include "../../gcc.dg/pr57233.c"
diff --git a/gcc/testsuite/gcc.target/powerpc/bcd-1.c b/gcc/testsuite/gcc.target/powerpc/bcd-1.c
new file mode 100644 (file)
index 0000000..c7496c2
--- /dev/null
@@ -0,0 +1,27 @@
+/* { dg-do compile { target { powerpc*-*-linux* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-mcpu=power7 -O2" } */
+/* { dg-final { scan-assembler-times "cdtbcd " 1 } } */
+/* { dg-final { scan-assembler-times "cbcdtd " 1 } } */
+/* { dg-final { scan-assembler-times "addg6s " 1 } } */
+/* { dg-final { scan-assembler-not    "bl __builtin" } } */
+
+unsigned int
+to_bcd (unsigned int a)
+{
+  return __builtin_cdtbcd (a);
+}
+
+unsigned int
+from_bcd (unsigned int a)
+{
+  return __builtin_cbcdtd (a);
+}
+
+unsigned int
+bcd_arith (unsigned int a, unsigned int b)
+{
+  return __builtin_addg6s (a, b);
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/bcd-2.c b/gcc/testsuite/gcc.target/powerpc/bcd-2.c
new file mode 100644 (file)
index 0000000..d330b74
--- /dev/null
@@ -0,0 +1,44 @@
+/* { dg-do compile { target { powerpc*-*-linux* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O2" } */
+/* { dg-final { scan-assembler-times "bcdadd\[.\] " 2 } } */
+/* { dg-final { scan-assembler-times "bcdsub\[.\] " 2 } } */
+/* { dg-final { scan-assembler-not   "bl __builtin"   } } */
+/* { dg-final { scan-assembler-not   "mtvsr"                 } } */
+/* { dg-final { scan-assembler-not   "mfvsr"                 } } */
+/* { dg-final { scan-assembler-not   "lvx"                   } } */
+/* { dg-final { scan-assembler-not   "lxvw4x"                } } */
+/* { dg-final { scan-assembler-not   "lxvd2x"                } } */
+/* { dg-final { scan-assembler-not   "stvx"                  } } */
+/* { dg-final { scan-assembler-not   "stxvw4x"               } } */
+/* { dg-final { scan-assembler-not   "stxvd2x"               } } */
+
+typedef __int128_t __attribute__((__vector_size__(16)))        vector_128_t;
+typedef __int128_t                                     scalar_128_t;
+typedef        unsigned long long                              scalar_64_t;
+
+vector_128_t
+do_add_0 (vector_128_t a, vector_128_t b)
+{
+  return __builtin_bcdadd (a, b, 0);
+}
+
+vector_128_t
+do_add_1 (vector_128_t a, vector_128_t b)
+{
+  return __builtin_bcdadd (a, b, 1);
+}
+
+vector_128_t
+do_sub_0 (vector_128_t a, vector_128_t b)
+{
+  return __builtin_bcdsub (a, b, 0);
+}
+
+vector_128_t
+do_sub_1 (vector_128_t a, vector_128_t b)
+{
+  return __builtin_bcdsub (a, b, 1);
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/bcd-3.c b/gcc/testsuite/gcc.target/powerpc/bcd-3.c
new file mode 100644 (file)
index 0000000..436cecf
--- /dev/null
@@ -0,0 +1,103 @@
+/* { dg-do compile { target { powerpc*-*-linux* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mcpu=power8 -O2" } */
+/* { dg-final { scan-assembler-times "bcdadd\[.\] " 4 } } */
+/* { dg-final { scan-assembler-times "bcdsub\[.\] " 4 } } */
+/* { dg-final { scan-assembler-not   "bl __builtin"   } } */
+/* { dg-final { scan-assembler-not   "mtvsr"                 } } */
+/* { dg-final { scan-assembler-not   "mfvsr"                 } } */
+/* { dg-final { scan-assembler-not   "lvx"                   } } */
+/* { dg-final { scan-assembler-not   "lxvw4x"                } } */
+/* { dg-final { scan-assembler-not   "lxvd2x"                } } */
+/* { dg-final { scan-assembler-not   "stvx"                  } } */
+/* { dg-final { scan-assembler-not   "stxvw4x"               } } */
+/* { dg-final { scan-assembler-not   "stxvd2x"               } } */
+
+typedef __int128_t __attribute__((__vector_size__(16)))        vector_128_t;
+typedef __int128_t                                     scalar_128_t;
+typedef        unsigned long long                              scalar_64_t;
+
+/* Test whether the peephole works to allow folding a bcdadd, with a
+   bcdadd_<test> into a single instruction.  */
+
+vector_128_t
+do_add_lt (vector_128_t a, vector_128_t b, int *p)
+{
+  vector_128_t ret = __builtin_bcdadd (a, b, 0);
+  if (__builtin_bcdadd_lt (a, b, 0))
+    *p = 1;
+
+  return ret;
+}
+
+vector_128_t
+do_add_eq (vector_128_t a, vector_128_t b, int *p)
+{
+  vector_128_t ret = __builtin_bcdadd (a, b, 0);
+  if (__builtin_bcdadd_eq (a, b, 0))
+    *p = 1;
+
+  return ret;
+}
+
+vector_128_t
+do_add_gt (vector_128_t a, vector_128_t b, int *p)
+{
+  vector_128_t ret = __builtin_bcdadd (a, b, 0);
+  if (__builtin_bcdadd_gt (a, b, 0))
+    *p = 1;
+
+  return ret;
+}
+
+vector_128_t
+do_add_ov (vector_128_t a, vector_128_t b, int *p)
+{
+  vector_128_t ret = __builtin_bcdadd (a, b, 0);
+  if (__builtin_bcdadd_ov (a, b, 0))
+    *p = 1;
+
+  return ret;
+}
+
+vector_128_t
+do_sub_lt (vector_128_t a, vector_128_t b, int *p)
+{
+  vector_128_t ret = __builtin_bcdsub (a, b, 0);
+  if (__builtin_bcdsub_lt (a, b, 0))
+    *p = 1;
+
+  return ret;
+}
+
+vector_128_t
+do_sub_eq (vector_128_t a, vector_128_t b, int *p)
+{
+  vector_128_t ret = __builtin_bcdsub (a, b, 0);
+  if (__builtin_bcdsub_eq (a, b, 0))
+    *p = 1;
+
+  return ret;
+}
+
+vector_128_t
+do_sub_gt (vector_128_t a, vector_128_t b, int *p)
+{
+  vector_128_t ret = __builtin_bcdsub (a, b, 0);
+  if (__builtin_bcdsub_gt (a, b, 0))
+    *p = 1;
+
+  return ret;
+}
+
+vector_128_t
+do_sub_ov (vector_128_t a, vector_128_t b, int *p)
+{
+  vector_128_t ret = __builtin_bcdsub (a, b, 0);
+  if (__builtin_bcdsub_ov (a, b, 0))
+    *p = 1;
+
+  return ret;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp-builtin-1.c b/gcc/testsuite/gcc.target/powerpc/dfp-builtin-1.c
new file mode 100644 (file)
index 0000000..614f272
--- /dev/null
@@ -0,0 +1,88 @@
+/* { dg-do compile { target { powerpc*-*-linux* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-mcpu=power7 -O2" } */
+/* { dg-final { scan-assembler-times "ddedpd " 4    } } */
+/* { dg-final { scan-assembler-times "denbcd " 2    } } */
+/* { dg-final { scan-assembler-times "dxex "   1    } } */
+/* { dg-final { scan-assembler-times "diex "   1    } } */
+/* { dg-final { scan-assembler-times "dscli "  2    } } */
+/* { dg-final { scan-assembler-times "dscri "  2    } } */
+/* { dg-final { scan-assembler-not   "bl __builtin" } } */
+/* { dg-final { scan-assembler-not   "dctqpq"       } } */
+/* { dg-final { scan-assembler-not   "drdpq"        } } */
+/* { dg-final { scan-assembler-not   "stfd"         } } */
+/* { dg-final { scan-assembler-not   "lfd"          } } */
+
+_Decimal64
+do_dedpd_0 (_Decimal64 a)
+{
+  return __builtin_ddedpd (0, a);
+}
+
+_Decimal64
+do_dedpd_1 (_Decimal64 a)
+{
+  return __builtin_ddedpd (1, a);
+}
+
+_Decimal64
+do_dedpd_2 (_Decimal64 a)
+{
+  return __builtin_ddedpd (2, a);
+}
+
+_Decimal64
+do_dedpd_3 (_Decimal64 a)
+{
+  return __builtin_ddedpd (3, a);
+}
+
+_Decimal64
+do_enbcd_0 (_Decimal64 a)
+{
+  return __builtin_denbcd (0, a);
+}
+
+_Decimal64
+do_enbcd_1 (_Decimal64 a)
+{
+  return __builtin_denbcd (1, a);
+}
+
+_Decimal64
+do_xex (_Decimal64 a)
+{
+  return __builtin_dxex (a);
+}
+
+_Decimal64
+do_iex (_Decimal64 a, _Decimal64 b)
+{
+  return __builtin_diex (a, b);
+}
+
+_Decimal64
+do_scli_1 (_Decimal64 a)
+{
+  return __builtin_dscli (a, 1);
+}
+
+_Decimal64
+do_scli_10 (_Decimal64 a)
+{
+  return __builtin_dscli (a, 10);
+}
+
+_Decimal64
+do_scri_1 (_Decimal64 a)
+{
+  return __builtin_dscri (a, 1);
+}
+
+_Decimal64
+do_scri_10 (_Decimal64 a)
+{
+  return __builtin_dscri (a, 10);
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/dfp-builtin-2.c b/gcc/testsuite/gcc.target/powerpc/dfp-builtin-2.c
new file mode 100644 (file)
index 0000000..189bc9a
--- /dev/null
@@ -0,0 +1,88 @@
+/* { dg-do compile { target { powerpc*-*-linux* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-mcpu=power7 -O2" } */
+/* { dg-final { scan-assembler-times "ddedpdq " 4    } } */
+/* { dg-final { scan-assembler-times "denbcdq " 2    } } */
+/* { dg-final { scan-assembler-times "dxexq "   1    } } */
+/* { dg-final { scan-assembler-times "diexq "   1    } } */
+/* { dg-final { scan-assembler-times "dscliq "  2    } } */
+/* { dg-final { scan-assembler-times "dscriq "  2    } } */
+/* { dg-final { scan-assembler-not    "bl __builtin" } } */
+/* { dg-final { scan-assembler-not   "dctqpq"        } } */
+/* { dg-final { scan-assembler-not   "drdpq"         } } */
+/* { dg-final { scan-assembler-not   "stfd"          } } */
+/* { dg-final { scan-assembler-not   "lfd"           } } */
+
+_Decimal128
+do_dedpdq_0 (_Decimal128 a)
+{
+  return __builtin_ddedpdq (0, a);
+}
+
+_Decimal128
+do_dedpdq_1 (_Decimal128 a)
+{
+  return __builtin_ddedpdq (1, a);
+}
+
+_Decimal128
+do_dedpdq_2 (_Decimal128 a)
+{
+  return __builtin_ddedpdq (2, a);
+}
+
+_Decimal128
+do_dedpdq_3 (_Decimal128 a)
+{
+  return __builtin_ddedpdq (3, a);
+}
+
+_Decimal128
+do_enbcdq_0 (_Decimal128 a)
+{
+  return __builtin_denbcdq (0, a);
+}
+
+_Decimal128
+do_enbcdq_1 (_Decimal128 a)
+{
+  return __builtin_denbcdq (1, a);
+}
+
+_Decimal128
+do_xexq (_Decimal128 a)
+{
+  return __builtin_dxexq (a);
+}
+
+_Decimal128
+do_iexq (_Decimal128 a, _Decimal128 b)
+{
+  return __builtin_diexq (a, b);
+}
+
+_Decimal128
+do_scliq_1 (_Decimal128 a)
+{
+  return __builtin_dscliq (a, 1);
+}
+
+_Decimal128
+do_scliq_10 (_Decimal128 a)
+{
+  return __builtin_dscliq (a, 10);
+}
+
+_Decimal128
+do_scriq_1 (_Decimal128 a)
+{
+  return __builtin_dscriq (a, 1);
+}
+
+_Decimal128
+do_scriq_10 (_Decimal128 a)
+{
+  return __builtin_dscriq (a, 10);
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/extend-divide-1.c b/gcc/testsuite/gcc.target/powerpc/extend-divide-1.c
new file mode 100644 (file)
index 0000000..5f948b7
--- /dev/null
@@ -0,0 +1,34 @@
+/* { dg-do compile { target { powerpc*-*-linux* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-mcpu=power7 -O2" } */
+/* { dg-final { scan-assembler-times "divwe "   1 } } */
+/* { dg-final { scan-assembler-times "divweo "  1 } } */
+/* { dg-final { scan-assembler-times "divweu "  1 } } */
+/* { dg-final { scan-assembler-times "divweuo " 1 } } */
+/* { dg-final { scan-assembler-not    "bl __builtin" } } */
+
+int
+div_we (int a, int b)
+{
+  return __builtin_divwe (a, b);
+}
+
+int
+div_weo (int a, int b)
+{
+  return __builtin_divweo (a, b);
+}
+
+unsigned int
+div_weu (unsigned int a, unsigned int b)
+{
+  return __builtin_divweu (a, b);
+}
+
+unsigned int
+div_weuo (unsigned int a, unsigned int b)
+{
+  return __builtin_divweuo (a, b);
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/extend-divide-2.c b/gcc/testsuite/gcc.target/powerpc/extend-divide-2.c
new file mode 100644 (file)
index 0000000..8ee6c8c
--- /dev/null
@@ -0,0 +1,34 @@
+/* { dg-do compile { target { powerpc*-*-linux* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-mcpu=power7 -O2" } */
+/* { dg-final { scan-assembler-times "divde "   1 } } */
+/* { dg-final { scan-assembler-times "divdeo "  1 } } */
+/* { dg-final { scan-assembler-times "divdeu "  1 } } */
+/* { dg-final { scan-assembler-times "divdeuo " 1 } } */
+/* { dg-final { scan-assembler-not    "bl __builtin" } } */
+
+long
+div_de (long a, long b)
+{
+  return __builtin_divde (a, b);
+}
+
+long
+div_deo (long a, long b)
+{
+  return __builtin_divdeo (a, b);
+}
+
+unsigned long
+div_deu (unsigned long a, unsigned long b)
+{
+  return __builtin_divdeu (a, b);
+}
+
+unsigned long
+div_deuo (unsigned long a, unsigned long b)
+{
+  return __builtin_divdeuo (a, b);
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/htm-ttest.c b/gcc/testsuite/gcc.target/powerpc/htm-ttest.c
new file mode 100644 (file)
index 0000000..29cbd5b
--- /dev/null
@@ -0,0 +1,14 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_htm_ok } */
+/* { dg-options "-O2 -mhtm" } */
+
+/* { dg-final { scan-assembler "rlwinm r?\[0-9\]+,r?\[0-9\]+,3,30,31" { target { ilp32 } } } } */
+/* { dg-final { scan-assembler "rldicl r?\[0-9\]+,r?\[0-9\]+,35,62" { target { lp64 } } } } */
+
+#include <htmintrin.h>
+long
+ttest (void)
+{
+  return _HTM_STATE(__builtin_ttest());
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/pack01.c b/gcc/testsuite/gcc.target/powerpc/pack01.c
new file mode 100644 (file)
index 0000000..efac408
--- /dev/null
@@ -0,0 +1,91 @@
+/* { dg-do run { target { powerpc*-*-linux* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target p8vector_hw } */
+/* { dg-options "-mcpu=power8 -O2" } */
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <altivec.h>
+
+#ifdef DEBUG
+#include <stdio.h>
+#endif
+
+typedef __int128_t __attribute__((__vector_size__(16)))        vector_128_t;
+typedef __int128_t                                     scalar_128_t;
+typedef        unsigned long long                              scalar_64_t;
+
+volatile scalar_64_t one = 1;
+volatile scalar_64_t two = 2;
+
+int
+main (void)
+{
+  scalar_128_t a = (((scalar_128_t)one) << 64) | ((scalar_128_t)two);
+  vector_128_t v1 = (vector_128_t) { a };
+  vector_128_t v2 = __builtin_pack_vector_int128 (one, two);
+  scalar_64_t x0 = __builtin_unpack_vector_int128 (v1, 0);
+  scalar_64_t x1 = __builtin_unpack_vector_int128 (v1, 1);
+  vector_128_t v3 = __builtin_pack_vector_int128 (x0, x1);
+
+  size_t i;
+  union {
+    scalar_128_t i128;
+    vector_128_t v128;
+    scalar_64_t u64;
+    unsigned char uc[sizeof (scalar_128_t)];
+    char c[sizeof (scalar_128_t)];
+  } u, u2;
+
+#ifdef DEBUG
+  {
+    printf ("a  = 0x");
+    u.i128 = a;
+    for (i = 0; i < sizeof (scalar_128_t); i++)
+      printf ("%.2x", u.uc[i]);
+
+    printf ("\nv1 = 0x");
+    u.v128 = v1;
+    for (i = 0; i < sizeof (scalar_128_t); i++)
+      printf ("%.2x", u.uc[i]);
+
+    printf ("\nv2 = 0x");
+    u.v128 = v2;
+    for (i = 0; i < sizeof (scalar_128_t); i++)
+      printf ("%.2x", u.uc[i]);
+
+    printf ("\nv3 = 0x");
+    u.v128 = v3;
+    for (i = 0; i < sizeof (scalar_128_t); i++)
+      printf ("%.2x", u.uc[i]);
+
+    printf ("\nx0 = 0x");
+    u.u64 = x0;
+    for (i = 0; i < sizeof (scalar_64_t); i++)
+      printf ("%.2x", u.uc[i]);
+
+    printf ("\nx1 = 0x");
+    u.u64 = x1;
+    for (i = 0; i < sizeof (scalar_64_t); i++)
+      printf ("%.2x", u.uc[i]);
+
+    printf ("\n");
+  }
+#endif
+
+  u2.i128 = a;
+  u.v128 = v1;
+  if (memcmp (u.c, u2.c, sizeof (scalar_128_t)) != 0)
+    abort ();
+
+  u.v128 = v2;
+  if (memcmp (u.c, u2.c, sizeof (scalar_128_t)) != 0)
+    abort ();
+
+  u.v128 = v3;
+  if (memcmp (u.c, u2.c, sizeof (scalar_128_t)) != 0)
+    abort ();
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/pack02.c b/gcc/testsuite/gcc.target/powerpc/pack02.c
new file mode 100644 (file)
index 0000000..f85d3ff
--- /dev/null
@@ -0,0 +1,96 @@
+/* { dg-do run { target { powerpc*-*-linux* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_fprs } */
+/* { dg-require-effective-target longdouble128 } */
+/* { dg-options "-O2 -mhard-float" } */
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <math.h>
+
+#ifdef DEBUG
+#include <stdio.h>
+#endif
+
+int
+main (void)
+{
+  double high = pow (2.0, 60);
+  double low  = 2.0;
+  long double a = ((long double)high) + ((long double)low);
+  double x0 = __builtin_unpack_longdouble (a, 0);
+  double x1 = __builtin_unpack_longdouble (a, 1);
+  long double b = __builtin_pack_longdouble (x0, x1);
+
+#ifdef DEBUG
+  {
+    size_t i;
+    union {
+      long double ld;
+      double d;
+      unsigned char uc[sizeof (long double)];
+      char c[sizeof (long double)];
+    } u;
+
+    printf ("a  = 0x");
+    u.ld = a;
+    for (i = 0; i < sizeof (long double); i++)
+      printf ("%.2x", u.uc[i]);
+
+    printf (", %Lg\n", a);
+
+    printf ("b  = 0x");
+    u.ld = b;
+    for (i = 0; i < sizeof (long double); i++)
+      printf ("%.2x", u.uc[i]);
+
+    printf (", %Lg\n", b);
+
+    printf ("hi = 0x");
+    u.d = high;
+    for (i = 0; i < sizeof (double); i++)
+      printf ("%.2x", u.uc[i]);
+
+    printf (",%*s %g\n", (int)(2 * (sizeof (long double) - sizeof (double))), "", high);
+
+    printf ("lo = 0x");
+    u.d = low;
+    for (i = 0; i < sizeof (double); i++)
+      printf ("%.2x", u.uc[i]);
+
+    printf (",%*s %g\n", (int)(2 * (sizeof (long double) - sizeof (double))), "", low);
+
+    printf ("x0 = 0x");
+    u.d = x0;
+    for (i = 0; i < sizeof (double); i++)
+      printf ("%.2x", u.uc[i]);
+
+    printf (",%*s %g\n", (int)(2 * (sizeof (long double) - sizeof (double))), "", x0);
+
+    printf ("x1 = 0x");
+    u.d = x1;
+    for (i = 0; i < sizeof (double); i++)
+      printf ("%.2x", u.uc[i]);
+
+    printf (",%*s %g\n", (int)(2 * (sizeof (long double) - sizeof (double))), "", x1);
+  }
+#endif
+
+  if (high != x0)
+    abort ();
+
+  if (low != x1)
+    abort ();
+
+  if (a != b)
+    abort ();
+
+  if (x0 != high)
+    abort ();
+
+  if (x1 != low)
+    abort ();
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/pack03.c b/gcc/testsuite/gcc.target/powerpc/pack03.c
new file mode 100644 (file)
index 0000000..dfaf2ef
--- /dev/null
@@ -0,0 +1,88 @@
+/* { dg-do run { target { powerpc*-*-linux* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
+/* { dg-require-effective-target dfp_hw } */
+/* { dg-options "-O2 -mhard-dfp" } */
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <math.h>
+
+#ifdef DEBUG
+#include <stdio.h>
+#endif
+
+int
+main (void)
+{
+  _Decimal128 one      = (_Decimal128)1.0;
+  _Decimal128 two      = (_Decimal128)2.0;
+  _Decimal128 ten      = (_Decimal128)10.0;
+  _Decimal128 a                = one;
+  _Decimal128 b;
+  _Decimal128 c;
+  unsigned long long x0;
+  unsigned long long x1;
+  size_t i;
+
+  for (i = 0; i < 25; i++)
+    a *= ten;
+
+  a += two;
+
+  x0 = __builtin_unpack_dec128 (a, 0);
+  x1 = __builtin_unpack_dec128 (a, 1);
+  b = __builtin_pack_dec128 (x0, x1);
+  c = __builtin_dscliq (one, 25) + two;
+
+#ifdef DEBUG
+  {
+    union {
+      _Decimal128 d;
+      unsigned long long ull;
+      unsigned char uc[sizeof (_Decimal128)];
+    } u;
+
+    printf ("a  = 0x");
+    u.d = a;
+    for (i = 0; i < sizeof (_Decimal128); i++)
+      printf ("%.2x", u.uc[i]);
+
+    printf (", %Lg\n", (long double)a);
+
+    printf ("b  = 0x");
+    u.d = b;
+    for (i = 0; i < sizeof (_Decimal128); i++)
+      printf ("%.2x", u.uc[i]);
+
+    printf (", %Lg\n", (long double)b);
+
+    printf ("c  = 0x");
+    u.d = c;
+    for (i = 0; i < sizeof (_Decimal128); i++)
+      printf ("%.2x", u.uc[i]);
+
+    printf (", %Lg\n", (long double)c);
+
+    printf ("x0 = 0x");
+    u.ull = x0;
+    for (i = 0; i < sizeof (unsigned long long); i++)
+      printf ("%.2x", u.uc[i]);
+
+    printf ("\nx1 = 0x");
+    u.ull = x1;
+    for (i = 0; i < sizeof (unsigned long long); i++)
+      printf ("%.2x", u.uc[i]);
+
+    printf ("\n");
+  }
+#endif
+
+  if (a != b)
+    abort ();
+
+  if (a != c)
+    abort ();
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/pr60735.c b/gcc/testsuite/gcc.target/powerpc/pr60735.c
new file mode 100644 (file)
index 0000000..9bac30b
--- /dev/null
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-mcpu=8548 -mspe -mabi=spe -O2" } */
+/* { dg-skip-if "not an SPE target" { ! powerpc_spe_nocache } { "*" } { "" } } */
+
+/* In PR60735, the type _Decimal64 generated an insn not found message.  */
+
+void
+pr60735 (_Decimal64 *p, _Decimal64 *q)
+{
+  *p = *q;
+}
index e6578ef..ea703f0 100644 (file)
@@ -1,6 +1,7 @@
 /* { dg-do assemble } */
 /* { dg-skip-if "" { powerpc-ibm-aix* } { "*" } { "" } } */
 /* { dg-skip-if "no TFmode" { powerpc-*-eabi* } { "*" } { "" } } */
+/* { dg-require-effective-target longdouble128 } */
 /* { dg-options "-O2 -fno-align-functions -mtraceback=no -save-temps" } */
 
 typedef float TFmode __attribute__ ((mode (TF)));
diff --git a/gcc/testsuite/gcc.target/powerpc/ti_math1.c b/gcc/testsuite/gcc.target/powerpc/ti_math1.c
new file mode 100644 (file)
index 0000000..cdf9251
--- /dev/null
@@ -0,0 +1,20 @@
+/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
+/* { dg-options "-O2" } */
+/* { dg-final { scan-assembler-times "addc" 1 } } */
+/* { dg-final { scan-assembler-times "adde" 1 } } */
+/* { dg-final { scan-assembler-times "subfc" 1 } } */
+/* { dg-final { scan-assembler-times "subfe" 1 } } */
+/* { dg-final { scan-assembler-not "subf " } } */
+
+__int128
+add_128 (__int128 *ptr, __int128 val)
+{
+       return (*ptr + val);
+}
+
+__int128
+sub_128 (__int128 *ptr, __int128 val)
+{
+       return (*ptr - val);
+}
+
diff --git a/gcc/testsuite/gcc.target/powerpc/ti_math2.c b/gcc/testsuite/gcc.target/powerpc/ti_math2.c
new file mode 100644 (file)
index 0000000..b9c0330
--- /dev/null
@@ -0,0 +1,73 @@
+/* { dg-do run { target { powerpc*-*-* && lp64 } } } */
+/* { dg-options "-O2 -fno-inline" } */
+
+union U {
+  __int128 i128;
+  struct {
+    long l1;
+    long l2;
+  } s;
+};
+
+union U u1,u2;
+
+__int128
+create_128 (long most_sig, long least_sig)
+{
+  union U u;
+
+#if __LITTLE_ENDIAN__
+  u.s.l1 = least_sig;
+  u.s.l2 = most_sig;
+#else
+  u.s.l1 = most_sig;
+  u.s.l2 = least_sig;
+#endif
+  return u.i128;
+}
+
+long most_sig (union U * u)
+{
+#if __LITTLE_ENDIAN__
+  return (*u).s.l2;
+#else
+  return (*u).s.l1;
+#endif
+}
+
+long least_sig (union U * u)
+{
+#if __LITTLE_ENDIAN__
+  return (*u).s.l1;
+#else
+  return (*u).s.l2;
+#endif
+}
+
+__int128
+add_128 (__int128 *ptr, __int128 val)
+{
+       return (*ptr + val);
+}
+
+__int128
+sub_128 (__int128 *ptr, __int128 val)
+{
+       return (*ptr - val);
+}
+
+int
+main (void)
+{
+  /* Do a simple add/sub to make sure carry is happening between the dwords
+     and that dwords are in correct endian order. */
+  u1.i128 = create_128 (1, -1);
+  u2.i128 = add_128 (&u1.i128, 1);
+  if ((most_sig (&u2) != 2) || (least_sig (&u2) != 0))
+    __builtin_abort ();
+  u2.i128 = sub_128 (&u2.i128, 1);
+  if ((most_sig (&u2) != 1) || (least_sig (&u2) != -1))
+    __builtin_abort ();
+  return 0;
+}
+
index d6fc187..624b7ea 100644 (file)
@@ -20,6 +20,7 @@
 load_lib c-torture.exp
 load_lib target-supports.exp
 load_lib torture-options.exp
+load_lib clearcap.exp
 
 if { (![istarget x86_64-*-*] && ![istarget i?86-*-*])
      || ![is-effective-target lp64]
@@ -28,20 +29,10 @@ if { (![istarget x86_64-*-*] && ![istarget i?86-*-*])
 }
 
 
-# If the linker used understands -M <mapfile>, pass it to clear hardware
-# capabilities set by the Sun assembler.
-set flags ""
-set clearcap_ldflags "-Wl,-M,$srcdir/gcc.target/i386/clearcap.map"
-
-if [check_no_compiler_messages mapfile executable {
-       int main (void) { return 0; }
-  } $clearcap_ldflags ] {
-  set flags $clearcap_ldflags
-}
-
 torture-init
+clearcap-init
 set-torture-options $C_TORTURE_OPTIONS
-set additional_flags "-W -Wall -mavx $flags"
+set additional_flags "-W -Wall -mavx"
 
 foreach src [lsort [glob -nocomplain $srcdir/$subdir/test_*.c]] {
     if {[runtest_file_p $runtests $src]} {
@@ -58,4 +49,5 @@ foreach src [lsort [glob -nocomplain $srcdir/$subdir/test_*.c]] {
     }
 }
 
+clearcap-finish
 torture-finish
index cef6fa1..f8f991e 100644 (file)
@@ -20,6 +20,7 @@
 load_lib c-torture.exp
 load_lib target-supports.exp
 load_lib torture-options.exp
+load_lib clearcap.exp
 
 if { (![istarget x86_64-*-*] && ![istarget i?86-*-*])
      || ![is-effective-target lp64]
@@ -28,20 +29,10 @@ if { (![istarget x86_64-*-*] && ![istarget i?86-*-*])
 }
 
 
-# If the linker used understands -M <mapfile>, pass it to clear hardware
-# capabilities set by the Sun assembler.
-set flags ""
-set clearcap_ldflags "-Wl,-M,$srcdir/gcc.target/i386/clearcap.map"
-
-if [check_no_compiler_messages mapfile executable {
-       int main (void) { return 0; }
-  } $clearcap_ldflags ] {
-  set flags $clearcap_ldflags
-}
-
 torture-init
+clearcap-init
 set-torture-options $C_TORTURE_OPTIONS
-set additional_flags "-W -Wall -mavx512f $flags"
+set additional_flags "-W -Wall -mavx512f"
 
 foreach src [lsort [glob -nocomplain $srcdir/$subdir/test_*.c]] {
     if {[runtest_file_p $runtests $src]} {
@@ -58,4 +49,5 @@ foreach src [lsort [glob -nocomplain $srcdir/$subdir/test_*.c]] {
     }
 }
 
+clearcap-finish
 torture-finish
diff --git a/gcc/testsuite/gfortran.dg/allocatable_function_8.f90 b/gcc/testsuite/gfortran.dg/allocatable_function_8.f90
new file mode 100644 (file)
index 0000000..48f6dd2
--- /dev/null
@@ -0,0 +1,59 @@
+! { dg-do run }
+! Test the fix for PR61459 and PR58883.
+!
+! Contributed by John Wingate  <johnww@tds.net>
+!             and Tao Song  <songtao.thu@gmail.com>
+!
+module a
+
+   implicit none
+   private
+   public :: f_segfault, f_segfault_plus, f_workaround
+   integer, dimension(2,2) :: b = reshape([1,-1,1,1],[2,2])
+
+contains
+
+   function f_segfault(x)
+      real, dimension(:), allocatable :: f_segfault
+      real, dimension(:), intent(in)  :: x
+      allocate(f_segfault(2))
+      f_segfault = matmul(b,x)
+   end function f_segfault
+
+! Sefaulted without the ALLOCATE as well.
+   function f_segfault_plus(x)
+      real, dimension(:), allocatable :: f_segfault_plus
+      real, dimension(:), intent(in)  :: x
+      f_segfault_plus = matmul(b,x)
+   end function f_segfault_plus
+
+   function f_workaround(x)
+      real, dimension(:), allocatable :: f_workaround
+      real, dimension(:), intent(in)  :: x
+      real, dimension(:), allocatable :: tmp
+      allocate(f_workaround(2),tmp(2))
+      tmp = matmul(b,x)
+      f_workaround = tmp
+   end function f_workaround
+
+end module a
+
+program main
+   use a
+   implicit none
+   real, dimension(2) :: x = 1.0, y
+! PR61459
+   y = f_workaround (x)
+   if (any (f_segfault (x) .ne. y)) call abort
+   if (any (f_segfault_plus (x) .ne. y)) call abort
+! PR58883
+   if (any (foo () .ne. reshape([1,2,3,4,5,6,7,8],[2,4]))) call abort
+contains
+  function foo()
+    integer, allocatable  :: foo(:,:)
+    integer, allocatable  :: temp(:)
+
+    temp = [1,2,3,4,5,6,7,8]
+    foo = reshape(temp,[2,4])
+  end function
+end program main
diff --git a/gcc/testsuite/gfortran.dg/arrayio_14.f90 b/gcc/testsuite/gfortran.dg/arrayio_14.f90
new file mode 100644 (file)
index 0000000..3d878c7
--- /dev/null
@@ -0,0 +1,18 @@
+! { dg-do run }
+! PR61173.f90 Bogus END condition
+module bd
+  character(len=25, kind=1), dimension(:), allocatable, save :: source
+  contains
+    subroutine init_data
+      allocate(source(2))
+      source=["   1   1   1  ", "   4   4   4  "]
+    end subroutine init_data
+end module bd
+program read_internal
+  use bd
+  integer :: x(6),i
+
+  call init_data
+  read(source,*) (x(i), i=1,6)
+  if (any(x/=[1,1,1,4,4,4])) call abort
+end program read_internal
diff --git a/gcc/testsuite/gfortran.dg/arrayio_15.f90 b/gcc/testsuite/gfortran.dg/arrayio_15.f90
new file mode 100644 (file)
index 0000000..df497dc
--- /dev/null
@@ -0,0 +1,11 @@
+! { dg-do run }
+! PR61499
+program read_internal
+
+  integer :: x(9),i,iostat
+  character(len=512) :: iomsg
+  character(kind=1,len=30), dimension(:), allocatable, save :: source
+  allocate(source(3))
+  source=["  1   1  -1","  1  -1   1"," -1   1   1"]      !This fails
+  read(source,*) (x(i), i=1,6)
+end program read_internal
diff --git a/gcc/testsuite/gfortran.dg/arrayio_16.f90 b/gcc/testsuite/gfortran.dg/arrayio_16.f90
new file mode 100644 (file)
index 0000000..46814ae
--- /dev/null
@@ -0,0 +1,13 @@
+! { dg-do run }
+! PR61640 KIND=4 Character Array Internal Unit Read Fail
+program read_internal
+  integer :: x(9),i
+  integer :: y(9)
+  character(kind=4,len=30), dimension(3) :: source
+
+  y = reshape ((/ 1,1,-1,1,-1,1,-1,1,1 /), shape(x))
+  source=[4_"  1   1  -1",4_"  1  -1   1",4_" -1   1   1"]
+  !print *, (trim(source(i)), i=1,3)
+  read(source,*) (x(i), i=1,9) ! This read fails for KIND=4 character
+  if (any(x /= y )) call abort
+end program read_internal
diff --git a/gcc/testsuite/gfortran.dg/associate_16.f90 b/gcc/testsuite/gfortran.dg/associate_16.f90
new file mode 100644 (file)
index 0000000..9129388
--- /dev/null
@@ -0,0 +1,23 @@
+! { dg-do compile }
+! PR 60834 - this used to ICE.
+
+module m
+  implicit none
+  type :: t
+    real :: diffusion=1.
+  end type
+contains
+  subroutine solve(this, x)
+    class(t), intent(in) :: this
+    real, intent(in) :: x(:)
+    integer :: i
+    integer, parameter :: n(1:5)=[(i,i=1, 5)]
+
+    associate( nu=>this%diffusion)
+      associate( exponential=>exp(-(x(i)-n) ))
+        do i = 1, size(x)
+        end do
+      end associate
+    end associate
+  end subroutine solve
+end module m
diff --git a/gcc/testsuite/gfortran.dg/associate_17.f90 b/gcc/testsuite/gfortran.dg/associate_17.f90
new file mode 100644 (file)
index 0000000..5c39cf0
--- /dev/null
@@ -0,0 +1,12 @@
+! { dg-do run }
+! Test the fix for PR61406
+! Contributed by Adam Hirst  <adam@aphirst.karoo.co.uk>
+program test
+  implicit none
+  real :: theta = 1.0
+
+  associate (n => [cos(theta), sin(theta)])
+    if (abs (norm2(n) - 1.0) .gt. 1.0e-4) call abort
+  end associate
+
+end program test
index 7d1d4d7..d3a1232 100644 (file)
@@ -1,4 +1,5 @@
 ! { dg-do run }
+! { dg-options "-fdump-tree-original" }
 !
 ! Tests the fixes for three bugs with the same underlying cause.  All are regressions
 ! that come about because class array elements end up with a different tree type
@@ -114,3 +115,5 @@ subroutine pr54992  ! This test remains as the original.
   bh => bhGet(b,instance=2)
   if (loc (b) .ne. loc(bh%hostNode)) call abort
 end
+! { dg-final { scan-tree-dump-times "builtin_free" 12 "original" } }
+! { dg-final { cleanup-tree-dump "original" } }
diff --git a/gcc/testsuite/gfortran.dg/cray_pointers_10.f90 b/gcc/testsuite/gfortran.dg/cray_pointers_10.f90
new file mode 100644 (file)
index 0000000..1ac98f3
--- /dev/null
@@ -0,0 +1,18 @@
+! { dg-do run }
+! { dg-options "-fcray-pointer" }
+!
+! PR fortran/45187
+!
+module foo
+  implicit none
+  real :: a
+  pointer(c_a, a)
+end module foo
+
+program test
+  use foo
+  real :: z
+  c_a = loc(z)
+  a = 42
+  if (z /= 42) call abort
+end program test
index a5337ca..6134a56 100644 (file)
@@ -1,6 +1,6 @@
 ! { dg-require-effective-target fortran_large_real }
-! { dg-do run { xfail powerpc*-apple-darwin* powerpc*-*-linux* } }
-! Test XFAILed on these platforms because the system's printf() lacks
+! { dg-do run { xfail powerpc*-apple-darwin* } }
+! Test XFAILed on this platform because the system's printf() lacks
 ! proper support for denormalized long doubles. See PR24685
 !
 ! This tests that the default formats for formatted I/O of reals are
diff --git a/gcc/testsuite/gfortran.dg/finalize_25.f90 b/gcc/testsuite/gfortran.dg/finalize_25.f90
new file mode 100644 (file)
index 0000000..cdbec4c
--- /dev/null
@@ -0,0 +1,55 @@
+! { dg-do run }
+!
+! PR fortran/58880
+! PR fortran/60495
+!
+! Contributed by Andrew Benson and Janus Weil
+!
+
+module gn
+  implicit none
+  type sl
+     integer, allocatable, dimension(:) :: lv
+   contains
+     final :: sld
+  end type
+  type :: nde
+     type(sl) :: r
+  end type nde
+
+  integer :: cnt = 0
+
+contains
+
+  subroutine sld(s)
+    type(sl) :: s
+    cnt = cnt + 1
+    ! print *,'Finalize sl'
+  end subroutine
+  subroutine ndm(s)
+    type(nde), intent(inout) :: s
+    type(nde)                :: i
+    i=s
+  end subroutine ndm
+end module
+
+program main
+  use gn
+  type :: nde2
+     type(sl) :: r
+  end type nde2
+  type(nde) :: x
+
+  cnt = 0
+  call ndm(x)
+  if (cnt /= 2) call abort()
+
+  cnt = 0
+  call ndm2()
+  if (cnt /= 3) call abort()
+contains
+  subroutine ndm2
+    type(nde2) :: s,i
+    i=s
+  end subroutine ndm2
+end program main
diff --git a/gcc/testsuite/gfortran.dg/gomp/affinity-1.f90 b/gcc/testsuite/gfortran.dg/gomp/affinity-1.f90
new file mode 100644 (file)
index 0000000..b6e20b9
--- /dev/null
@@ -0,0 +1,19 @@
+  integer :: i, j
+  integer, dimension (10, 10) :: a
+!$omp parallel do default(none)proc_bind(master)shared(a)
+  do i = 1, 10
+    j = 4
+    do j = 1, 10
+      a(i, j) = i + j
+    end do
+    j = 8
+  end do
+!$omp end parallel do
+!$omp parallel proc_bind (close)
+!$omp parallel default(none) proc_bind (spread) firstprivate(a) private (i)
+  do i = 1, 10
+    a(i, i) = i
+  enddo
+!$omp end parallel
+!$omp endparallel
+end
index 2a762c7..bc06cc8 100644 (file)
@@ -14,7 +14,7 @@ CONTAINS
     TYPE(t), SAVE :: a
 
     !$omp threadprivate(a)
-    !$omp parallel copyin(a)        ! { dg-error "has ALLOCATABLE components" }
+    !$omp parallel copyin(a)
       ! do something
     !$omp end parallel
   END SUBROUTINE
@@ -22,7 +22,7 @@ CONTAINS
   SUBROUTINE test_copyprivate()
     TYPE(t) :: a
 
-    !$omp single                    ! { dg-error "has ALLOCATABLE components" }
+    !$omp single
       ! do something
     !$omp end single copyprivate (a)
   END SUBROUTINE
@@ -30,7 +30,7 @@ CONTAINS
   SUBROUTINE test_firstprivate
     TYPE(t) :: a
 
-    !$omp parallel firstprivate(a)  ! { dg-error "has ALLOCATABLE components" }
+    !$omp parallel firstprivate(a)
       ! do something
     !$omp end parallel
   END SUBROUTINE
@@ -39,7 +39,7 @@ CONTAINS
     TYPE(t) :: a
     INTEGER :: i
 
-    !$omp parallel do lastprivate(a)  ! { dg-error "has ALLOCATABLE components" }
+    !$omp parallel do lastprivate(a)
       DO i = 1, 1
       END DO
     !$omp end parallel do
@@ -49,7 +49,7 @@ CONTAINS
     TYPE(t) :: a(10)
     INTEGER :: i
 
-    !$omp parallel do reduction(+: a)   ! { dg-error "must be of numeric type" }
+    !$omp parallel do reduction(+: a)   ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
     DO i = 1, SIZE(a)
     END DO
     !$omp end parallel do
index f67c91c..598c904 100644 (file)
@@ -5,7 +5,7 @@
         !$OMP PARALLEL DO REDUCTION(MAX: M) ! MAX is no longer the
                                             ! intrinsic so this
                                             ! is non-conforming
-! { dg-error "is not INTRINSIC procedure name" "" { target *-*-* } 5 } */
+! { dg-error "OMP DECLARE REDUCTION max not found" "" { target *-*-* } 5 } */
         DO I = 1, 100
         CALL SUB(M,I)
         END DO
diff --git a/gcc/testsuite/gfortran.dg/gomp/associate1.f90 b/gcc/testsuite/gfortran.dg/gomp/associate1.f90
new file mode 100644 (file)
index 0000000..abc5ae9
--- /dev/null
@@ -0,0 +1,83 @@
+! { dg-do compile }
+
+program associate1
+  type dl
+    integer :: i
+  end type
+  type dt
+    integer :: i
+    real :: a(3, 3)
+    type(dl) :: c(3, 3)
+  end type
+  integer :: v, i, j
+  real :: a(3, 3)
+  type(dt) :: b(3)
+  i = 1
+  j = 2
+  associate(k => v, l => a(i, j), m => a(i, :))
+  associate(n => b(j)%c(:, :)%i, o => a, p => b)
+!$omp parallel shared (l)      ! { dg-error "ASSOCIATE name" }
+!$omp end parallel
+!$omp parallel firstprivate (m)        ! { dg-error "ASSOCIATE name" }
+!$omp end parallel
+!$omp parallel reduction (+: k)        ! { dg-error "ASSOCIATE name" }
+!$omp end parallel
+!$omp parallel do firstprivate (k)     ! { dg-error "ASSOCIATE name" }
+  do i = 1, 10
+  end do
+!$omp parallel do lastprivate (n)      ! { dg-error "ASSOCIATE name" }
+  do i = 1, 10
+  end do
+!$omp parallel do private (o)  ! { dg-error "ASSOCIATE name" }
+  do i = 1, 10
+  end do
+!$omp parallel do shared (p)   ! { dg-error "ASSOCIATE name" }
+  do i = 1, 10
+  end do
+!$omp task private (k)         ! { dg-error "ASSOCIATE name" }
+!$omp end task
+!$omp task shared (l)          ! { dg-error "ASSOCIATE name" }
+!$omp end task
+!$omp task firstprivate (m)    ! { dg-error "ASSOCIATE name" }
+!$omp end task
+!$omp do private (l)           ! { dg-error "ASSOCIATE name" }
+  do i = 1, 10
+  end do
+!$omp do reduction (*: k)      ! { dg-error "ASSOCIATE name" }
+  do i = 1, 10
+  end do
+!$omp sections private(o)      ! { dg-error "ASSOCIATE name" }
+!$omp section
+!$omp section
+!$omp end sections
+!$omp parallel sections firstprivate(p)        ! { dg-error "ASSOCIATE name" }
+!$omp section
+!$omp section
+!$omp endparallelsections
+!$omp parallelsections lastprivate(m)  ! { dg-error "ASSOCIATE name" }
+!$omp section
+!$omp section
+!$omp endparallelsections
+!$omp sections reduction(+:k)  ! { dg-error "ASSOCIATE name" }
+!$omp section
+!$omp section
+!$omp end sections
+!$omp simd private (l)         ! { dg-error "ASSOCIATE name" }
+  do i = 1, 10
+  end do
+  k = 1
+!$omp simd lastprivate (m)     ! { dg-error "ASSOCIATE name" }
+  do i = 1, 10
+  end do
+  k = 1
+!$omp simd reduction (+: k)    ! { dg-error "ASSOCIATE name" }
+  do i = 1, 10
+  end do
+  k = 1
+!$omp simd linear (k : 2)      ! { dg-error "ASSOCIATE name" }
+  do i = 1, 10
+    k = k + 2
+  end do
+  end associate
+  end associate
+end program
diff --git a/gcc/testsuite/gfortran.dg/gomp/declare-simd-1.f90 b/gcc/testsuite/gfortran.dg/gomp/declare-simd-1.f90
new file mode 100644 (file)
index 0000000..d6ae7c9
--- /dev/null
@@ -0,0 +1,9 @@
+! { dg-do compile }
+
+subroutine fn1 (x)
+  integer :: x
+!$omp declare simd (fn1) inbranch notinbranch uniform (x) ! { dg-error "Unclassifiable OpenMP directive" }
+end subroutine fn1
+subroutine fn2 (x)
+!$omp declare simd (fn100)     ! { dg-error "should refer to containing procedure" }
+end subroutine fn2
diff --git a/gcc/testsuite/gfortran.dg/gomp/depend-1.f90 b/gcc/testsuite/gfortran.dg/gomp/depend-1.f90
new file mode 100644 (file)
index 0000000..bd6d26a
--- /dev/null
@@ -0,0 +1,13 @@
+! { dg-do compile }
+
+subroutine foo (x)
+  integer :: x(5, *)
+!$omp parallel
+!$omp single
+!$omp task depend(in:x(:,5))
+!$omp end task
+!$omp task depend(in:x(5,:))   ! { dg-error "Rightmost upper bound of assumed size array section|proper array section" }
+!$omp end task
+!$omp end single
+!$omp end parallel
+end
diff --git a/gcc/testsuite/gfortran.dg/gomp/intentin1.f90 b/gcc/testsuite/gfortran.dg/gomp/intentin1.f90
new file mode 100644 (file)
index 0000000..f2a2e98
--- /dev/null
@@ -0,0 +1,16 @@
+! { dg-do compile }
+
+subroutine foo (x)
+  integer, pointer, intent (in) :: x
+  integer :: i
+!$omp parallel private (x)             ! { dg-error "INTENT.IN. POINTER" }
+!$omp end parallel
+!$omp parallel do lastprivate (x)      ! { dg-error "INTENT.IN. POINTER" }
+  do i = 1, 10
+  end do
+!$omp simd linear (x)                  ! { dg-error "INTENT.IN. POINTER" }
+  do i = 1, 10
+  end do
+!$omp single                           ! { dg-error "INTENT.IN. POINTER" }
+!$omp end single copyprivate (x)
+end
diff --git a/gcc/testsuite/gfortran.dg/gomp/omp_do_concurrent.f90 b/gcc/testsuite/gfortran.dg/gomp/omp_do_concurrent.f90
new file mode 100644 (file)
index 0000000..8320479
--- /dev/null
@@ -0,0 +1,13 @@
+! { dg-do compile }
+! { dg-options "-fopenmp" }
+!
+! PR fortran/60127
+!
+! OpenMP 4.0 doesn't permit DO CONCURRENT (yet)
+!
+
+!$omp do
+do concurrent(i=1:5) ! { dg-error "OMP DO cannot be a DO CONCURRENT loop" }
+print *, 'Hello'
+end do
+end
diff --git a/gcc/testsuite/gfortran.dg/gomp/openmp-simd-1.f90 b/gcc/testsuite/gfortran.dg/gomp/openmp-simd-1.f90
new file mode 100644 (file)
index 0000000..c9ce70c
--- /dev/null
@@ -0,0 +1,137 @@
+! { dg-do compile }
+! { dg-options "-fno-openmp -fopenmp-simd -fdump-tree-original -O2" }
+
+!$omp declare reduction (foo:integer:omp_out = omp_out + omp_in)
+  interface
+    integer function foo (x, y)
+      integer, value :: x, y
+!$omp declare simd (foo) linear (y : 2)
+    end function foo
+  end interface
+  integer :: i, a(64), b, c
+  integer, save :: d
+!$omp threadprivate (d)
+  d = 5
+  a = 6
+!$omp simd
+  do i = 1, 64
+    a(i) = foo (a(i), 2 * i)
+  end do
+  b = 0
+  c = 0
+!$omp simd reduction (+:b) reduction (foo:c)
+  do i = 1, 64
+    b = b + a(i)
+    c = c + a(i) * 2
+  end do
+  print *, b
+  b = 0
+!$omp parallel
+!$omp do simd schedule(static, 4) safelen (8) reduction (+:b)
+  do i = 1, 64
+    a(i) = a(i) + 1
+    b = b + 1
+  end do
+!$omp end parallel
+  print *, b
+  b = 0
+!$omp parallel do simd schedule(static, 4) safelen (8) &
+!$omp num_threads (4) if (.true.) reduction (+:b)
+  do i = 1, 64
+    a(i) = a(i) + 1
+    b = b + 1
+  end do
+  print *, b
+  b = 0
+!$omp parallel
+!$omp do simd schedule(static, 4) safelen (8) reduction (+:b)
+  do i = 1, 64
+    a(i) = a(i) + 1
+    b = b + 1
+  end do
+!$omp enddosimd
+!$omp end parallel
+  print *, b
+  b = 0
+!$omp parallel do simd schedule(static, 4) safelen (8) &
+!$omp num_threads (4) if (.true.) reduction (+:b)
+  do i = 1, 64
+    a(i) = a(i) + 1
+    b = b + 1
+  end do
+!$omp end parallel do simd
+!$omp atomic seq_cst
+  b = b + 1
+!$omp end atomic
+!$omp barrier
+!$omp parallel private (i)
+!$omp cancellation point parallel
+!$omp critical (bar)
+  b = b + 1
+!$omp end critical (bar)
+!$omp flush(b)
+!$omp single
+  b = b + 1
+!$omp end single
+!$omp do ordered
+  do i = 1, 10
+    !$omp atomic
+    b = b + 1
+    !$omp end atomic
+    !$omp ordered
+      print *, b
+    !$omp end ordered
+  end do
+!$omp end do
+!$omp master
+  b = b + 1
+!$omp end master
+!$omp cancel parallel
+!$omp end parallel
+!$omp parallel do schedule(runtime) num_threads(8)
+  do i = 1, 10
+    print *, b
+  end do
+!$omp end parallel do
+!$omp sections
+!$omp section
+  b = b + 1
+!$omp section
+  c = c + 1
+!$omp end sections
+  print *, b
+!$omp parallel sections firstprivate (b) if (.true.)
+!$omp section
+  b = b + 1
+!$omp section
+  c = c + 1
+!$omp endparallelsections
+!$omp workshare
+  b = 24
+!$omp end workshare
+!$omp parallel workshare num_threads (2)
+  b = b + 1
+  c = c + 1
+!$omp end parallel workshare
+  print *, b
+!$omp parallel
+!$omp single
+!$omp taskgroup
+!$omp task firstprivate (b)
+  b = b + 1
+!$omp taskyield
+!$omp end task
+!$omp task firstprivate (b)
+  b = b + 1
+!$omp end task
+!$omp taskwait
+!$omp end taskgroup
+!$omp end single
+!$omp end parallel
+  print *, a, c
+end
+
+! { dg-final { scan-tree-dump-times "pragma omp simd" 6 "original" } }
+! { dg-final { scan-tree-dump-times "pragma omp" 6 "original" } }
+! { dg-final { scan-tree-dump-times "__builtin_GOMP" 0 "original" } }
+! { dg-final { cleanup-tree-dump "original" } }
diff --git a/gcc/testsuite/gfortran.dg/gomp/openmp-simd-2.f90 b/gcc/testsuite/gfortran.dg/gomp/openmp-simd-2.f90
new file mode 100644 (file)
index 0000000..4b2046a
--- /dev/null
@@ -0,0 +1,28 @@
+! { dg-do compile }
+! { dg-options "-fopenmp -fopenmp-simd -fdump-tree-original -O2" }
+
+include 'openmp-simd-1.f90'
+
+! { dg-final { scan-tree-dump-times "pragma omp simd" 6 "original" } }
+! { dg-final { scan-tree-dump-times "pragma omp" 39 "original" } }
+! { dg-final { scan-tree-dump-times "pragma omp for" 6 "original" } }
+! { dg-final { scan-tree-dump-times "pragma omp parallel" 9 "original" } }
+! { dg-final { scan-tree-dump-times "pragma omp taskgroup" 1 "original" } }
+! Includes the above taskgroup
+! { dg-final { scan-tree-dump-times "pragma omp task" 3 "original" } }
+! { dg-final { scan-tree-dump-times "pragma omp critical" 1 "original" } }
+! { dg-final { scan-tree-dump-times "pragma omp atomic" 2 "original" } }
+! { dg-final { scan-tree-dump-times "pragma omp sections" 2 "original" } }
+! Includes the above sections
+! { dg-final { scan-tree-dump-times "pragma omp section" 6 "original" } }
+! { dg-final { scan-tree-dump-times "pragma omp single" 4 "original" } }
+! { dg-final { scan-tree-dump-times "pragma omp ordered" 1 "original" } }
+! { dg-final { scan-tree-dump-times "pragma omp master" 1 "original" } }
+! { dg-final { scan-tree-dump-times "__builtin_GOMP" 5 "original" } }
+! { dg-final { scan-tree-dump-times "__builtin_GOMP_barrier" 1 "original" } }
+! { dg-final { scan-tree-dump-times "__builtin_GOMP_cancellation_point" 1 "original" } }
+! Includes the above cancellation point
+! { dg-final { scan-tree-dump-times "__builtin_GOMP_cancel" 2 "original" } }
+! { dg-final { scan-tree-dump-times "__builtin_GOMP_taskyield" 1 "original" } }
+! { dg-final { scan-tree-dump-times "__builtin_GOMP_taskwait" 1 "original" } }
+! { dg-final { cleanup-tree-dump "original" } }
diff --git a/gcc/testsuite/gfortran.dg/gomp/openmp-simd-3.f90 b/gcc/testsuite/gfortran.dg/gomp/openmp-simd-3.f90
new file mode 100644 (file)
index 0000000..2dece89
--- /dev/null
@@ -0,0 +1,28 @@
+! { dg-do compile }
+! { dg-options "-fopenmp -fno-openmp-simd -fdump-tree-original -O2" }
+
+include 'openmp-simd-1.f90'
+
+! { dg-final { scan-tree-dump-times "pragma omp simd" 6 "original" } }
+! { dg-final { scan-tree-dump-times "pragma omp" 39 "original" } }
+! { dg-final { scan-tree-dump-times "pragma omp for" 6 "original" } }
+! { dg-final { scan-tree-dump-times "pragma omp parallel" 9 "original" } }
+! { dg-final { scan-tree-dump-times "pragma omp taskgroup" 1 "original" } }
+! Includes the above taskgroup
+! { dg-final { scan-tree-dump-times "pragma omp task" 3 "original" } }
+! { dg-final { scan-tree-dump-times "pragma omp critical" 1 "original" } }
+! { dg-final { scan-tree-dump-times "pragma omp atomic" 2 "original" } }
+! { dg-final { scan-tree-dump-times "pragma omp sections" 2 "original" } }
+! Includes the above sections
+! { dg-final { scan-tree-dump-times "pragma omp section" 6 "original" } }
+! { dg-final { scan-tree-dump-times "pragma omp single" 4 "original" } }
+! { dg-final { scan-tree-dump-times "pragma omp ordered" 1 "original" } }
+! { dg-final { scan-tree-dump-times "pragma omp master" 1 "original" } }
+! { dg-final { scan-tree-dump-times "__builtin_GOMP" 5 "original" } }
+! { dg-final { scan-tree-dump-times "__builtin_GOMP_barrier" 1 "original" } }
+! { dg-final { scan-tree-dump-times "__builtin_GOMP_cancellation_point" 1 "original" } }
+! Includes the above cancellation point
+! { dg-final { scan-tree-dump-times "__builtin_GOMP_cancel" 2 "original" } }
+! { dg-final { scan-tree-dump-times "__builtin_GOMP_taskyield" 1 "original" } }
+! { dg-final { scan-tree-dump-times "__builtin_GOMP_taskwait" 1 "original" } }
+! { dg-final { cleanup-tree-dump "original" } }
diff --git a/gcc/testsuite/gfortran.dg/gomp/proc_ptr_2.f90 b/gcc/testsuite/gfortran.dg/gomp/proc_ptr_2.f90
new file mode 100644 (file)
index 0000000..d993429
--- /dev/null
@@ -0,0 +1,14 @@
+! { dg-do compile }
+  procedure(foo), pointer :: ptr
+  integer :: i
+  ptr => foo
+!$omp do reduction (+ : ptr)   ! { dg-error "Procedure pointer|not found" }
+  do i = 1, 10
+  end do
+!$omp simd linear (ptr)                ! { dg-error "must be INTEGER" }
+  do i = 1, 10
+  end do
+contains
+  subroutine foo
+  end subroutine
+end
index 4912f71..cdc530b 100644 (file)
@@ -60,73 +60,73 @@ common /blk/ i1
 !$omp end parallel
 !$omp parallel reduction (*:ia1)       ! { dg-error "Assumed size" }
 !$omp end parallel
-!$omp parallel reduction (+:l1)                ! { dg-error "must be of numeric type, got LOGICAL" }
+!$omp parallel reduction (+:l1)                ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (*:la1)       ! { dg-error "must be of numeric type, got LOGICAL" }
+!$omp parallel reduction (*:la1)       ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (-:a1)                ! { dg-error "must be of numeric type, got CHARACTER" }
+!$omp parallel reduction (-:a1)                ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (+:t1)                ! { dg-error "must be of numeric type, got TYPE" }
+!$omp parallel reduction (+:t1)                ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (*:ta1)       ! { dg-error "must be of numeric type, got TYPE" }
+!$omp parallel reduction (*:ta1)       ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (.and.:i3)    ! { dg-error "must be LOGICAL" }
+!$omp parallel reduction (.and.:i3)    ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (.or.:ia2)    ! { dg-error "must be LOGICAL" }
+!$omp parallel reduction (.or.:ia2)    ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (.eqv.:r1)    ! { dg-error "must be LOGICAL" }
+!$omp parallel reduction (.eqv.:r1)    ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (.neqv.:ra1)  ! { dg-error "must be LOGICAL" }
+!$omp parallel reduction (.neqv.:ra1)  ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (.and.:d1)    ! { dg-error "must be LOGICAL" }
+!$omp parallel reduction (.and.:d1)    ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (.or.:da1)    ! { dg-error "must be LOGICAL" }
+!$omp parallel reduction (.or.:da1)    ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (.eqv.:c1)    ! { dg-error "must be LOGICAL" }
+!$omp parallel reduction (.eqv.:c1)    ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (.neqv.:ca1)  ! { dg-error "must be LOGICAL" }
+!$omp parallel reduction (.neqv.:ca1)  ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (.and.:a1)    ! { dg-error "must be LOGICAL" }
+!$omp parallel reduction (.and.:a1)    ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (.or.:t1)     ! { dg-error "must be LOGICAL" }
+!$omp parallel reduction (.or.:t1)     ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (.eqv.:ta1)   ! { dg-error "must be LOGICAL" }
+!$omp parallel reduction (.eqv.:ta1)   ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (min:c1)      ! { dg-error "must be INTEGER or REAL" }
+!$omp parallel reduction (min:c1)      ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (max:ca1)     ! { dg-error "must be INTEGER or REAL" }
+!$omp parallel reduction (max:ca1)     ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (max:l1)      ! { dg-error "must be INTEGER or REAL" }
+!$omp parallel reduction (max:l1)      ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (min:la1)     ! { dg-error "must be INTEGER or REAL" }
+!$omp parallel reduction (min:la1)     ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (max:a1)      ! { dg-error "must be INTEGER or REAL" }
+!$omp parallel reduction (max:a1)      ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (min:t1)      ! { dg-error "must be INTEGER or REAL" }
+!$omp parallel reduction (min:t1)      ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (max:ta1)     ! { dg-error "must be INTEGER or REAL" }
+!$omp parallel reduction (max:ta1)     ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (iand:r1)     ! { dg-error "must be INTEGER" }
+!$omp parallel reduction (iand:r1)     ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (ior:ra1)     ! { dg-error "must be INTEGER" }
+!$omp parallel reduction (ior:ra1)     ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (ieor:d1)     ! { dg-error "must be INTEGER" }
+!$omp parallel reduction (ieor:d1)     ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (ior:da1)     ! { dg-error "must be INTEGER" }
+!$omp parallel reduction (ior:da1)     ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (iand:c1)     ! { dg-error "must be INTEGER" }
+!$omp parallel reduction (iand:c1)     ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (ior:ca1)     ! { dg-error "must be INTEGER" }
+!$omp parallel reduction (ior:ca1)     ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (ieor:l1)     ! { dg-error "must be INTEGER" }
+!$omp parallel reduction (ieor:l1)     ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (iand:la1)    ! { dg-error "must be INTEGER" }
+!$omp parallel reduction (iand:la1)    ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (ior:a1)      ! { dg-error "must be INTEGER" }
+!$omp parallel reduction (ior:a1)      ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (ieor:t1)     ! { dg-error "must be INTEGER" }
+!$omp parallel reduction (ieor:t1)     ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
-!$omp parallel reduction (iand:ta1)    ! { dg-error "must be INTEGER" }
+!$omp parallel reduction (iand:ta1)    ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
 !$omp end parallel
 
 end subroutine
index 2c11389..9cab6d5 100644 (file)
@@ -16,7 +16,7 @@ subroutine f1
   integer :: i, ior
   ior = 6
   i = 6
-!$omp parallel reduction (ior:i) ! { dg-error "is not INTRINSIC procedure name" }
+!$omp parallel reduction (ior:i) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found" }
 !$omp end parallel
 end subroutine f1
 subroutine f2
@@ -27,7 +27,7 @@ subroutine f2
     end function
   end interface
   i = 6
-!$omp parallel reduction (ior:i) ! { dg-error "is not INTRINSIC procedure name" }
+!$omp parallel reduction (ior:i) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found" }
   i = ior (i, 3)
 !$omp end parallel
 end subroutine f2
@@ -50,7 +50,7 @@ subroutine f5
   use mreduction3
   integer :: i
   i = 6
-!$omp parallel reduction (ior:i) ! { dg-error "is not INTRINSIC procedure name" }
+!$omp parallel reduction (ior:i) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found" }
   i = ior (i, 7)
 !$omp end parallel
 end subroutine f5
@@ -58,7 +58,7 @@ subroutine f6
   use mreduction3
   integer :: i
   i = 6
-!$omp parallel reduction (iand:i) ! { dg-error "is not INTRINSIC procedure name" }
+!$omp parallel reduction (iand:i) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found" }
   i = iand (i, 18)
 !$omp end parallel
 end subroutine f6
diff --git a/gcc/testsuite/gfortran.dg/gomp/target1.f90 b/gcc/testsuite/gfortran.dg/gomp/target1.f90
new file mode 100644 (file)
index 0000000..14db497
--- /dev/null
@@ -0,0 +1,520 @@
+! { dg-do compile }
+! { dg-options "-fopenmp" }
+
+module target1
+  interface
+    subroutine dosomething (a, n, m)
+      integer :: a (:), n, m
+      !$omp declare target
+    end subroutine dosomething
+  end interface
+contains
+  subroutine foo (n, o, p, q, r, pp)
+    integer :: n, o, p, q, r, s, i, j
+    integer :: a (2:o)
+    integer, pointer :: pp
+  !$omp target data device (n + 1) if (n .ne. 6) map (tofrom: n, r)
+    !$omp target device (n + 1) if (n .ne. 6) map (from: n) map (alloc: a(2:o))
+      call dosomething (a, n, 0)
+    !$omp end target
+    !$omp target teams device (n + 1) num_teams (n + 4) thread_limit (n * 2) &
+    !$omp & if (n .ne. 6)map (from: n) map (alloc: a(2:o)) default(shared) &
+    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r)
+      r = r + 1
+      p = q
+      call dosomething (a, n, p + q)
+    !$omp end target teams
+    !$omp target teams distribute device (n + 1) num_teams (n + 4) collapse (2) &
+    !$omp & if (n .ne. 6)map (from: n) map (alloc: a(2:o)) default(shared) &
+    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
+    !$omp & thread_limit (n * 2) dist_schedule (static, 4)
+      do i = 1, 10
+        do j = 1, 10
+          r = r + 1
+          p = q
+          call dosomething (a, n, p + q)
+        end do
+      end do
+    !$omp target teams distribute device (n + 1) num_teams (n + 4) &
+    !$omp & if (n .ne. 6)map (from: n) map (alloc: a(2:o)) default(shared) &
+    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
+    !$omp & thread_limit (n * 2) dist_schedule (static, 4)
+      do i = 1, 10
+        do j = 1, 10
+          r = r + 1
+          p = q
+          call dosomething (a, n, p + q)
+        end do
+      end do
+    !$omp end target teams distribute
+    !$omp target teams distribute parallel do device (n + 1) num_teams (n + 4) &
+    !$omp & if (n .ne. 6)map (from: n) map (alloc: a(2:o)) default(shared) &
+    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
+    !$omp & thread_limit (n * 2) dist_schedule (static, 4) collapse (2) &
+    !$omp & num_threads (n + 4) proc_bind (spread) lastprivate (s) &
+    !$omp & ordered schedule (static, 8)
+      do i = 1, 10
+        do j = 1, 10
+          r = r + 1
+          p = q
+          call dosomething (a, n, p + q)
+         !$omp ordered
+           p = q
+         !$omp end ordered
+         s = i * 10 + j
+        end do
+      end do
+    !$omp target teams distribute parallel do device (n + 1) num_teams (n + 4) &
+    !$omp & if (n .ne. 6)map (from: n) map (alloc: a(2:o)) default(shared) &
+    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
+    !$omp & thread_limit (n * 2) dist_schedule (static, 4) num_threads (n + 4) &
+    !$omp & proc_bind (master) lastprivate (s) ordered schedule (static, 8)
+      do i = 1, 10
+        do j = 1, 10
+          r = r + 1
+          p = q
+          call dosomething (a, n, p + q)
+        end do
+        !$omp ordered
+          p = q
+        !$omp end ordered
+       s = i * 10
+      end do
+    !$omp end target teams distribute parallel do
+    !$omp target teams distribute parallel do simd device (n + 1) &
+    !$omp & if (n .ne. 6)map (from: n) map (alloc: a(2:o)) default(shared) &
+    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
+    !$omp & thread_limit (n * 2) dist_schedule (static, 4) collapse (2) &
+    !$omp & num_threads (n + 4) proc_bind (spread) lastprivate (s) &
+    !$omp & schedule (static, 8) num_teams (n + 4) safelen(8)
+      do i = 1, 10
+        do j = 1, 10
+          r = r + 1
+          p = q
+          a(2+i*10+j) = p + q
+         s = i * 10 + j
+        end do
+      end do
+    !$omp target teams distribute parallel do simd device (n + 1) &
+    !$omp & if (n .ne. 6)map (from: n) map (alloc: a(2:o)) default(shared) &
+    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
+    !$omp & thread_limit (n * 2) dist_schedule (static, 4) num_threads (n + 4) &
+    !$omp & proc_bind (master) lastprivate (s) schedule (static, 8) &
+    !$omp & num_teams (n + 4) safelen(16) linear(i:1) aligned (pp:4)
+      do i = 1, 10
+        r = r + 1
+        p = q
+        a(1+i) = p + q
+       s = i * 10
+      end do
+    !$omp end target teams distribute parallel do simd
+    !$omp target teams distribute simd device (n + 1) &
+    !$omp & if (n .ne. 6)map (from: n) map (alloc: a(2:o)) default(shared) &
+    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
+    !$omp & thread_limit (n * 2) dist_schedule (static, 4) collapse (2) &
+    !$omp & lastprivate (s) num_teams (n + 4) safelen(8)
+      do i = 1, 10
+        do j = 1, 10
+          r = r + 1
+          p = q
+          a(2+i*10+j) = p + q
+         s = i * 10 + j
+        end do
+      end do
+    !$omp target teams distribute simd device (n + 1) &
+    !$omp & if (n .ne. 6)map (from: n) map (alloc: a(2:o)) default(shared) &
+    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
+    !$omp & thread_limit (n * 2) dist_schedule (static, 4) lastprivate (s) &
+    !$omp & num_teams (n + 4) safelen(16) linear(i:1) aligned (pp:4)
+      do i = 1, 10
+        r = r + 1
+        p = q
+        a(1+i) = p + q
+       s = i * 10
+      end do
+    !$omp end target teams distribute simd
+    !$omp target device (n + 1) if (n .ne. 6)map (from: n) map (alloc: a(2:o))
+    !$omp teams num_teams (n + 4) thread_limit (n * 2) default(shared) &
+    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r)
+      r = r + 1
+      p = q
+      call dosomething (a, n, p + q)
+    !$omp end teams
+    !$omp end target
+    !$omp target device (n + 1) if (n .ne. 6)map (from: n) map (alloc: a(2:o))
+    !$omp teams distribute num_teams (n + 4) collapse (2) default(shared) &
+    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
+    !$omp & thread_limit (n * 2) dist_schedule (static, 4)
+      do i = 1, 10
+        do j = 1, 10
+          r = r + 1
+          p = q
+          call dosomething (a, n, p + q)
+        end do
+      end do
+    !$omp end target
+    !$omp target device (n + 1) if (n .ne. 6)map (from: n) map (alloc: a(2:o))
+    !$omp teams distribute num_teams (n + 4) default(shared) &
+    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
+    !$omp & thread_limit (n * 2) dist_schedule (static, 4)
+      do i = 1, 10
+        do j = 1, 10
+          r = r + 1
+          p = q
+          call dosomething (a, n, p + q)
+        end do
+      end do
+    !$omp end teams distribute
+    !$omp end target
+    !$omp target device (n + 1) if (n .ne. 6)map (from: n) map (alloc: a(2:o))
+    !$omp teams distribute parallel do num_teams (n + 4) &
+    !$omp & if (n .ne. 6) default(shared) ordered schedule (static, 8) &
+    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
+    !$omp & thread_limit (n * 2) dist_schedule (static, 4) collapse (2) &
+    !$omp & num_threads (n + 4) proc_bind (spread) lastprivate (s)
+      do i = 1, 10
+        do j = 1, 10
+          r = r + 1
+          p = q
+          call dosomething (a, n, p + q)
+         !$omp ordered
+           p = q
+         !$omp end ordered
+         s = i * 10 + j
+        end do
+      end do
+    !$omp end target
+    !$omp target device (n + 1) if (n .ne. 6)map (from: n) map (alloc: a(2:o))
+    !$omp teams distribute parallel do num_teams (n + 4)if(n.ne.6)default(shared)&
+    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
+    !$omp & thread_limit (n * 2) dist_schedule (static, 4) num_threads (n + 4) &
+    !$omp & proc_bind (master) lastprivate (s) ordered schedule (static, 8)
+      do i = 1, 10
+        do j = 1, 10
+          r = r + 1
+          p = q
+          call dosomething (a, n, p + q)
+        end do
+        !$omp ordered
+          p = q
+        !$omp end ordered
+       s = i * 10
+      end do
+    !$omp end teams distribute parallel do
+    !$omp end target
+    !$omp target device (n + 1) if (n .ne. 6)map (from: n) map (alloc: a(2:o))
+    !$omp teams distribute parallel do simd if(n.ne.6)default(shared)&
+    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
+    !$omp & thread_limit (n * 2) dist_schedule (static, 4) collapse (2) &
+    !$omp & num_threads (n + 4) proc_bind (spread) lastprivate (s) &
+    !$omp & schedule (static, 8) num_teams (n + 4) safelen(8)
+      do i = 1, 10
+        do j = 1, 10
+          r = r + 1
+          p = q
+          a(2+i*10+j) = p + q
+         s = i * 10 + j
+        end do
+      end do
+    !$omp end target
+    !$omp target device (n + 1) if (n .ne. 6)map (from: n) map (alloc: a(2:o))
+    !$omp teams distribute parallel do simd if (n .ne. 6)default(shared) &
+    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
+    !$omp & thread_limit (n * 2) dist_schedule (static, 4) num_threads (n + 4) &
+    !$omp & proc_bind (master) lastprivate (s) schedule (static, 8) &
+    !$omp & num_teams (n + 4) safelen(16) linear(i:1) aligned (pp:4)
+      do i = 1, 10
+        r = r + 1
+        p = q
+        a(1+i) = p + q
+       s = i * 10
+      end do
+    !$omp end teams distribute parallel do simd
+    !$omp end target
+    !$omp target device (n + 1) if (n .ne. 6)map (from: n) map (alloc: a(2:o))
+    !$omp teams distribute simd default(shared) safelen(8) &
+    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
+    !$omp & thread_limit (n * 2) dist_schedule (static, 4) collapse (2) &
+    !$omp & lastprivate (s) num_teams (n + 4)
+      do i = 1, 10
+        do j = 1, 10
+          r = r + 1
+          p = q
+          a(2+i*10+j) = p + q
+         s = i * 10 + j
+        end do
+      end do
+    !$omp end target
+    !$omp target device (n + 1) if (n .ne. 6)map (from: n) map (alloc: a(2:o))
+    !$omp teams distribute simd default(shared) aligned (pp:4) &
+    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
+    !$omp & thread_limit (n * 2) dist_schedule (static, 4) lastprivate (s)
+      do i = 1, 10
+        r = r + 1
+        p = q
+        a(1+i) = p + q
+       s = i * 10
+      end do
+    !$omp end teams distribute simd
+    !$omp end target
+    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
+    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
+    !$omp & default(shared) shared(n) private (p) reduction ( + : r )
+    !$omp distribute collapse (2) firstprivate (q) dist_schedule (static, 4)
+      do i = 1, 10
+        do j = 1, 10
+          r = r + 1
+          p = q
+          call dosomething (a, n, p + q)
+        end do
+      end do
+    !$omp end target teams
+    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
+    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
+    !$omp & default(shared) shared(n) private (p) reduction(+:r)
+    !$omp distribute firstprivate (q) dist_schedule (static, 4)
+      do i = 1, 10
+        do j = 1, 10
+          r = r + 1
+          p = q
+          call dosomething (a, n, p + q)
+        end do
+      end do
+    !$omp end distribute
+    !$omp end target teams
+    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
+    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
+    !$omp & default(shared) shared(n) private (p) reduction(+:r)
+    !$omp distribute parallel do if (n .ne. 6) default(shared) &
+    !$omp & ordered schedule (static, 8) private (p) firstprivate (q) &
+    !$omp & shared(n)reduction(+:r)dist_schedule(static,4)collapse(2)&
+    !$omp & num_threads (n + 4) proc_bind (spread) lastprivate (s)
+      do i = 1, 10
+        do j = 1, 10
+          r = r + 1
+          p = q
+          call dosomething (a, n, p + q)
+         !$omp ordered
+           p = q
+         !$omp end ordered
+         s = i * 10 + j
+        end do
+      end do
+    !$omp end target teams
+    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
+    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
+    !$omp & default(shared) shared(n) private (p) reduction(+:r)
+    !$omp distribute parallel do if(n.ne.6)default(shared)&
+    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
+    !$omp & dist_schedule (static, 4) num_threads (n + 4) &
+    !$omp & proc_bind (master) lastprivate (s) ordered schedule (static, 8)
+      do i = 1, 10
+        do j = 1, 10
+          r = r + 1
+          p = q
+          call dosomething (a, n, p + q)
+        end do
+        !$omp ordered
+          p = q
+        !$omp end ordered
+       s = i * 10
+      end do
+    !$omp end distribute parallel do
+    !$omp end target teams
+    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
+    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
+    !$omp & default(shared) shared(n) private (p) reduction(+:r)
+    !$omp distribute parallel do simd if(n.ne.6)default(shared)&
+    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
+    !$omp & dist_schedule (static, 4) collapse (2) safelen(8) &
+    !$omp & num_threads (n + 4) proc_bind (spread) lastprivate (s) &
+    !$omp & schedule (static, 8)
+      do i = 1, 10
+        do j = 1, 10
+          r = r + 1
+          p = q
+          a(2+i*10+j) = p + q
+         s = i * 10 + j
+        end do
+      end do
+    !$omp end target teams
+    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
+    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
+    !$omp & default(shared) shared(n) private (p) reduction(+:r)
+    !$omp distribute parallel do simd if (n .ne. 6)default(shared) &
+    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
+    !$omp & dist_schedule (static, 4) num_threads (n + 4) &
+    !$omp & proc_bind (master) lastprivate (s) schedule (static, 8) &
+    !$omp & safelen(16) linear(i:1) aligned (pp:4)
+      do i = 1, 10
+        r = r + 1
+        p = q
+        a(1+i) = p + q
+       s = i * 10
+      end do
+    !$omp end distribute parallel do simd
+    !$omp end target teams
+    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
+    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
+    !$omp & default(shared) shared(n) private (p) reduction(+:r)
+    !$omp distribute simd safelen(8) lastprivate(s) &
+    !$omp & private (p) firstprivate (q) reduction (+: r) &
+    !$omp & dist_schedule (static, 4) collapse (2)
+      do i = 1, 10
+        do j = 1, 10
+          r = r + 1
+          p = q
+          a(2+i*10+j) = p + q
+         s = i * 10 + j
+        end do
+      end do
+    !$omp end target teams
+    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
+    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
+    !$omp & default(shared) shared(n) private (p) reduction(+:r)
+    !$omp distribute simd aligned (pp:4) &
+    !$omp & private (p) firstprivate (q) reduction (+: r) &
+    !$omp & dist_schedule (static, 4) lastprivate (s)
+      do i = 1, 10
+        r = r + 1
+        p = q
+        a(1+i) = p + q
+       s = i * 10
+      end do
+    !$omp end distribute simd
+    !$omp end target teams
+  !$omp end target data
+  end subroutine
+  subroutine bar (n, o, p, r, pp)
+    integer :: n, o, p, q, r, s, i, j
+    integer :: a (2:o)
+    integer, pointer :: pp
+    common /blk/ i, j, q
+    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
+    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
+    !$omp & default(shared) shared(n) private (p) reduction ( + : r )
+    !$omp distribute collapse (2) firstprivate (q) dist_schedule (static, 4)
+      do i = 1, 10
+        do j = 1, 10
+          r = r + 1
+          p = q
+          call dosomething (a, n, p + q)
+        end do
+      end do
+    !$omp end target teams
+    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
+    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
+    !$omp & default(shared) shared(n) private (p) reduction(+:r)
+    !$omp distribute firstprivate (q) dist_schedule (static, 4)
+      do i = 1, 10
+        do j = 1, 10
+          r = r + 1
+          p = q
+          call dosomething (a, n, p + q)
+        end do
+      end do
+    !$omp end distribute
+    !$omp end target teams
+    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
+    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
+    !$omp & default(shared) shared(n) private (p) reduction(+:r)
+    !$omp distribute parallel do if (n .ne. 6) default(shared) &
+    !$omp & ordered schedule (static, 8) private (p) firstprivate (q) &
+    !$omp & shared(n)reduction(+:r)dist_schedule(static,4)collapse(2)&
+    !$omp & num_threads (n + 4) proc_bind (spread) lastprivate (s)
+      do i = 1, 10
+        do j = 1, 10
+          r = r + 1
+          p = q
+          call dosomething (a, n, p + q)
+         !$omp ordered
+           p = q
+         !$omp end ordered
+         s = i * 10 + j
+        end do
+      end do
+    !$omp end target teams
+    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
+    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
+    !$omp & default(shared) shared(n) private (p) reduction(+:r)
+    !$omp distribute parallel do if(n.ne.6)default(shared)&
+    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
+    !$omp & dist_schedule (static, 4) num_threads (n + 4) &
+    !$omp & proc_bind (master) lastprivate (s) ordered schedule (static, 8)
+      do i = 1, 10
+        do j = 1, 10
+          r = r + 1
+          p = q
+          call dosomething (a, n, p + q)
+        end do
+        !$omp ordered
+          p = q
+        !$omp end ordered
+       s = i * 10
+      end do
+    !$omp end distribute parallel do
+    !$omp end target teams
+    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
+    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
+    !$omp & default(shared) shared(n) private (p) reduction(+:r)
+    !$omp distribute parallel do simd if(n.ne.6)default(shared)&
+    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
+    !$omp & dist_schedule (static, 4) collapse (2) safelen(8) &
+    !$omp & num_threads (n + 4) proc_bind (spread) lastprivate (s) &
+    !$omp & schedule (static, 8)
+      do i = 1, 10
+        do j = 1, 10
+          r = r + 1
+          p = q
+          a(2+i*10+j) = p + q
+         s = i * 10 + j
+        end do
+      end do
+    !$omp end target teams
+    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
+    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
+    !$omp & default(shared) shared(n) private (p) reduction(+:r)
+    !$omp distribute parallel do simd if (n .ne. 6)default(shared) &
+    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
+    !$omp & dist_schedule (static, 4) num_threads (n + 4) &
+    !$omp & proc_bind (master) lastprivate (s) schedule (static, 8) &
+    !$omp & safelen(16) linear(i:1) aligned (pp:4)
+      do i = 1, 10
+        r = r + 1
+        p = q
+        a(1+i) = p + q
+       s = i * 10
+      end do
+    !$omp end distribute parallel do simd
+    !$omp end target teams
+    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
+    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
+    !$omp & default(shared) shared(n) private (p) reduction(+:r)
+    !$omp distribute simd safelen(8) lastprivate(s) &
+    !$omp & private (p) firstprivate (q) reduction (+: r) &
+    !$omp & dist_schedule (static, 4) collapse (2)
+      do i = 1, 10
+        do j = 1, 10
+          r = r + 1
+          p = q
+          a(2+i*10+j) = p + q
+         s = i * 10 + j
+        end do
+      end do
+    !$omp end target teams
+    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
+    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
+    !$omp & default(shared) shared(n) private (p) reduction(+:r)
+    !$omp distribute simd aligned (pp:4) &
+    !$omp & private (p) firstprivate (q) reduction (+: r) &
+    !$omp & dist_schedule (static, 4) lastprivate (s)
+      do i = 1, 10
+        r = r + 1
+        p = q
+        a(1+i) = p + q
+       s = i * 10
+      end do
+    !$omp end distribute simd
+    !$omp end target teams
+  end subroutine
+end module
diff --git a/gcc/testsuite/gfortran.dg/gomp/target2.f90 b/gcc/testsuite/gfortran.dg/gomp/target2.f90
new file mode 100644 (file)
index 0000000..7521331
--- /dev/null
@@ -0,0 +1,74 @@
+! { dg-do compile }
+! { dg-options "-fopenmp -ffree-line-length-160" }
+
+subroutine foo (n, s, t, u, v, w)
+  integer :: n, i, s, t, u, v, w
+  common /bar/ i
+  !$omp simd safelen(s + 1)
+  do i = 1, n
+  end do
+  !$omp do schedule (static, t * 2)
+  do i = 1, n
+  end do
+  !$omp do simd safelen(s + 1) schedule (static, t * 2)
+  do i = 1, n
+  end do
+  !$omp parallel do schedule (static, t * 2) num_threads (u - 1)
+  do i = 1, n
+  end do
+  !$omp parallel do simd safelen(s + 1) schedule (static, t * 2) num_threads (u - 1)
+  do i = 1, n
+  end do
+  !$omp distribute dist_schedule (static, v + 8)
+  do i = 1, n
+  end do
+  !$omp distribute simd dist_schedule (static, v + 8) safelen(s + 1)
+  do i = 1, n
+  end do
+  !$omp distribute parallel do simd dist_schedule (static, v + 8) safelen(s + 1) &
+  !$omp & schedule (static, t * 2) num_threads (u - 1)
+  do i = 1, n
+  end do
+  !$omp distribute parallel do dist_schedule (static, v + 8) num_threads (u - 1) &
+  !$omp & schedule (static, t * 2)
+  do i = 1, n
+  end do
+  !$omp target
+  !$omp teams distribute dist_schedule (static, v + 8) num_teams (w + 8)
+  do i = 1, n
+  end do
+  !$omp end target
+  !$omp target
+  !$omp teams distribute simd dist_schedule (static, v + 8) safelen(s + 1) &
+  !$omp & num_teams (w + 8)
+  do i = 1, n
+  end do
+  !$omp end target
+  !$omp target
+  !$omp teams distribute parallel do simd dist_schedule (static, v + 8) safelen(s + 1) &
+  !$omp & schedule (static, t * 2) num_threads (u - 1) num_teams (w + 8)
+  do i = 1, n
+  end do
+  !$omp end target
+  !$omp target
+  !$omp teams distribute parallel do dist_schedule (static, v + 8) num_threads (u - 1) &
+  !$omp & schedule (static, t * 2) num_teams (w + 8)
+  do i = 1, n
+  end do
+  !$omp end target
+  !$omp target teams distribute dist_schedule (static, v + 8) num_teams (w + 8)
+  do i = 1, n
+  end do
+  !$omp target teams distribute simd dist_schedule (static, v + 8) safelen(s + 1) &
+  !$omp & num_teams (w + 8)
+  do i = 1, n
+  end do
+  !$omp target teams distribute parallel do simd dist_schedule (static, v + 8) safelen(s + 1) &
+  !$omp & schedule (static, t * 2) num_threads (u - 1) num_teams (w + 8)
+  do i = 1, n
+  end do
+  !$omp target teams distribute parallel do dist_schedule (static, v + 8) num_threads (u - 1) &
+  !$omp & schedule (static, t * 2) num_teams (w + 8)
+  do i = 1, n
+  end do
+end subroutine
diff --git a/gcc/testsuite/gfortran.dg/gomp/target3.f90 b/gcc/testsuite/gfortran.dg/gomp/target3.f90
new file mode 100644 (file)
index 0000000..53a9682
--- /dev/null
@@ -0,0 +1,12 @@
+! { dg-do compile }
+! { dg-options "-fopenmp" }
+
+subroutine foo (r)
+  integer :: i, r
+  !$omp target
+  !$omp target teams distribute parallel do reduction (+: r) ! { dg-warning "target construct inside of target region" }
+    do i = 1, 10
+      r = r + 1
+    end do
+  !$omp end target
+end subroutine
diff --git a/gcc/testsuite/gfortran.dg/gomp/udr1.f90 b/gcc/testsuite/gfortran.dg/gomp/udr1.f90
new file mode 100644 (file)
index 0000000..8460131
--- /dev/null
@@ -0,0 +1,41 @@
+! { dg-do compile }
+
+subroutine f1
+!$omp declare reduction (.le.:integer:omp_out = omp_out + omp_in) ! { dg-error "Invalid operator for" }
+end subroutine f1
+subroutine f2
+!$omp declare reduction (bar:real(kind=4):omp_out = omp_out + omp_in)
+  real(kind=4) :: r
+  integer :: i
+  r = 0.0
+!$omp parallel do reduction (bar:r)
+  do i = 1, 10
+    r = r + i
+  end do
+!$omp parallel do reduction (foo:r) ! { dg-error "foo not found" }
+  do i = 1, 10
+    r = r + i
+  end do
+!$omp parallel do reduction (.gt.:r) ! { dg-error "cannot be used as a defined operator" }
+  do i = 1, 10
+    r = r + i
+  end do
+end subroutine f2
+subroutine f3
+!$omp declare reduction (foo:blah:omp_out=omp_out + omp_in) ! { dg-error "Unclassifiable OpenMP directive" }
+end subroutine f3
+subroutine f4
+!$omp declare reduction (foo:integer:a => null()) ! { dg-error "Invalid character in name" }
+!$omp declare reduction (foo:integer:omp_out = omp_in + omp_out) &
+!$omp & initializer(a => null()) ! { dg-error "Invalid character in name" }
+end subroutine f4
+subroutine f5
+  integer :: a, b
+!$omp declare reduction (foo:integer:a = b + 1) ! { dg-error "Variable other than OMP_OUT or OMP_IN used in combiner" }
+!$omp declare reduction (bar:integer:omp_out = omp_out * omp_in) &
+!$omp & initializer(b = a + 1) ! { dg-error "Variable other than OMP_PRIV or OMP_ORIG used in INITIALIZER clause" }
+end subroutine f5
+subroutine f6
+!$omp declare reduction (foo:integer:omp_out=omp_out+omp_in) &
+!$omp & initializer(omp_orig=omp_priv)
+end subroutine f6
diff --git a/gcc/testsuite/gfortran.dg/gomp/udr2.f90 b/gcc/testsuite/gfortran.dg/gomp/udr2.f90
new file mode 100644 (file)
index 0000000..7038d18
--- /dev/null
@@ -0,0 +1,53 @@
+! { dg-do compile }
+
+subroutine f6
+!$omp declare reduction (foo:real:omp_out (omp_in)) ! { dg-error "Unclassifiable OpenMP directive" }
+!$omp declare reduction (bar:real:omp_out = omp_in * omp_out) & ! { dg-error "Unclassifiable OpenMP directive" }
+!$omp & initializer (omp_priv (omp_orig))
+end subroutine f6
+subroutine f7
+  integer :: a
+!$omp declare reduction (foo:integer:a (omp_out, omp_in)) ! { dg-error "Unclassifiable OpenMP directive" }
+!$omp declare reduction (bar:real:omp_out = omp_out.or.omp_in) ! { dg-error "Operands of logical operator" }
+!$omp declare reduction (baz:real:omp_out = omp_out + omp_in)
+!$omp & initializer (a (omp_priv, omp_orig)) ! { dg-error "Unclassifiable OpenMP directive" }
+  real :: r
+  r = 0.0
+!$omp parallel reduction (bar:r)
+!$omp end parallel
+end subroutine f7
+subroutine f8
+  interface
+    subroutine f8a (x)
+      integer :: x
+    end subroutine f8a
+  end interface
+!$omp declare reduction (baz:integer:omp_out = omp_out + omp_in) &
+!$omp & initializer (f8a (omp_orig)) ! { dg-error "One of actual subroutine arguments in INITIALIZER clause" }
+!$omp declare reduction (foo:integer:f8a) ! { dg-error "is not a variable" }
+!$omp declare reduction (bar:integer:omp_out = omp_out - omp_in) &
+!$omp & initializer (f8a) ! { dg-error "is not a variable" }
+end subroutine f8
+subroutine f9
+  type dt      ! { dg-error "which is not consistent with the CALL" }
+    integer :: x = 0
+    integer :: y = 0
+  end type dt
+  integer :: i
+!$omp declare reduction (foo:integer:dt (omp_out, omp_in)) ! { dg-error "which is not consistent with the CALL" }
+!$omp declare reduction (bar:integer:omp_out = omp_out + omp_in) &
+!$omp & initializer (dt (omp_priv, omp_orig)) ! { dg-error "which is not consistent with the CALL" }
+  i = 0
+!$omp parallel reduction (foo : i)
+!$omp end parallel
+!$omp parallel reduction (bar : i)
+!$omp end parallel
+end subroutine f9
+subroutine f10
+  integer :: a, b
+!$omp declare reduction(foo:character(len=64) &
+!$omp & :omp_out(a:b) = omp_in(a:b)) ! { dg-error "Variable other than OMP_OUT or OMP_IN used in combiner" }
+!$omp declare reduction(bar:character(len=16) &
+!$omp & :omp_out = trim(omp_out) // omp_in) &
+!$omp & initializer (omp_priv(a:b) = ' ') ! { dg-error "Variable other than OMP_PRIV or OMP_ORIG used in INITIALIZER clause" }
+end subroutine f10
diff --git a/gcc/testsuite/gfortran.dg/gomp/udr3.f90 b/gcc/testsuite/gfortran.dg/gomp/udr3.f90
new file mode 100644 (file)
index 0000000..a4feadd
--- /dev/null
@@ -0,0 +1,75 @@
+! { dg-do compile }
+
+subroutine f1
+  type dt
+    logical :: l = .false.
+  end type
+  type dt2
+    logical :: l = .false.
+  end type
+!$omp declare reduction (foo:integer(kind = 4) & ! { dg-error "Previous !.OMP DECLARE REDUCTION" }
+!$omp & :omp_out = omp_out + omp_in)
+!$omp declare reduction (foo:integer(kind = 4) : & ! { dg-error "Redefinition of !.OMP DECLARE REDUCTION" }
+!$omp & omp_out = omp_out + omp_in)
+!$omp declare reduction (bar:integer, &
+!$omp & real:omp_out = omp_out + omp_in)
+!$omp declare reduction (baz:integer,real,integer & ! { dg-error "Redefinition of !.OMP DECLARE REDUCTION|Previous" }
+!$omp & : omp_out = omp_out + omp_in)
+!$omp declare reduction (id1:dt,dt2:omp_out%l=omp_out%l &
+!$omp & .or.omp_in%l)
+!$omp declare reduction (id2:dt,dt:omp_out%l=omp_out%l & ! { dg-error "Redefinition of !.OMP DECLARE REDUCTION|Previous" }
+!$omp & .or.omp_in%l)
+!$omp declare reduction (id3:dt2,dt:omp_out%l=omp_out%l & ! { dg-error "Previous !.OMP DECLARE REDUCTION" }
+!$omp & .or.omp_in%l)
+!$omp declare reduction (id3:dt2:omp_out%l=omp_out%l & ! { dg-error "Redefinition of !.OMP DECLARE REDUCTION" }
+!$omp & .or.omp_in%l)
+end subroutine f1
+subroutine f2
+  interface
+    subroutine f2a (x, y, z)
+      character (len = *) :: x, y
+      logical :: z
+    end subroutine
+  end interface
+  interface f2b
+    subroutine f2b (x, y, z)
+      character (len = *, kind = 1) :: x, y
+      logical :: z
+    end subroutine
+    subroutine f2c (x, y, z)
+      character (kind = 4, len = *) :: x, y
+      logical :: z
+    end subroutine
+  end interface
+!$omp declare reduction (foo:character(len=*): &
+!$omp & f2a (omp_out, omp_in, .false.)) &
+!$omp & initializer (f2a (omp_priv, omp_orig, .true.))
+!$omp declare reduction (bar:character(len=:): &
+!$omp & f2a (omp_out, omp_in, .false.)) &
+!$omp & initializer (f2a (omp_priv, omp_orig, .true.))
+!$omp declare reduction (baz:character(len=4): &
+!$omp & f2a (omp_out, omp_in, .false.)) &
+!$omp & initializer (f2a (omp_priv, omp_orig, .true.))
+!$omp declare reduction (baz:character(len=5): &
+!$omp & f2a (omp_out, omp_in, .false.)) &
+!$omp & initializer (f2a (omp_priv, omp_orig, .true.))
+!$omp declare reduction (baz:character(len=6): &
+!$omp & f2a (omp_out, omp_in, .false.)) &
+!$omp & initializer (f2a (omp_priv, omp_orig, .true.))
+!$omp declare reduction (id:character(len=*): & ! { dg-error "Previous !.OMP DECLARE REDUCTION" }
+!$omp & f2a (omp_out, omp_in, .false.)) &
+!$omp & initializer (f2a (omp_priv, omp_orig, .true.))
+!$omp declare reduction (id: & ! { dg-error "Redefinition of !.OMP DECLARE REDUCTION" }
+!$omp & character(len=:) : f2a (omp_out, omp_in, .false.)) &
+!$omp & initializer (f2a (omp_priv, omp_orig, .true.))
+!$omp declare reduction & ! { dg-error "Redefinition of !.OMP DECLARE REDUCTION|Previous" }
+!$omp (id2:character(len=*), character(len=:): &
+!$omp f2a (omp_out, omp_in, .false.)) &
+!$omp & initializer (f2a (omp_priv, omp_orig, .true.))
+!$omp declare reduction (id3:character(len=*, kind = 1), character(kind=4, len=:): &
+!$omp f2b (omp_out, omp_in, .false.)) &
+!$omp & initializer (f2b (omp_priv, omp_orig, .true.))
+!$omp declare reduction (id4:character(kind=4, len=4), character(kind =1, len=4): &
+!$omp f2b (omp_out, omp_in, .false.)) &
+!$omp & initializer (f2b (omp_priv, omp_orig, .true.))
+end subroutine f2
diff --git a/gcc/testsuite/gfortran.dg/gomp/udr4.f90 b/gcc/testsuite/gfortran.dg/gomp/udr4.f90
new file mode 100644 (file)
index 0000000..b48c109
--- /dev/null
@@ -0,0 +1,74 @@
+! { dg-do compile }
+
+subroutine f3
+!$omp declare reduction ! { dg-error "Unclassifiable OpenMP directive" }
+!$omp declare reduction foo ! { dg-error "Unclassifiable OpenMP directive" }
+!$omp declare reduction (foo) ! { dg-error "Unclassifiable OpenMP directive" }
+!$omp declare reduction (foo:integer) ! { dg-error "Unclassifiable OpenMP directive" }
+!$omp declare reduction (foo:integer:omp_out=omp_out+omp_in) &
+!$omp & initializer(omp_priv=0) initializer(omp_priv=0) ! { dg-error "Unexpected junk after" }
+end subroutine f3
+subroutine f4
+  implicit integer (o)
+  implicit real (b)
+!$omp declare reduction (foo:integer:omp_priv(omp_out,omp_in)) ! { dg-error "Implicitly declared subroutine omp_priv" }
+!$omp declare reduction (foo:real:bar(omp_out,omp_in)) ! { dg-error "Implicitly declared subroutine bar used" }
+!$omp declare reduction (bar:integer:omp_out=omp_out+omp_in) &
+!$omp & initializer(omp_out (omp_priv)) ! { dg-error "Implicitly declared subroutine omp_out used" }
+!$omp declare reduction (bar:real:omp_out=omp_out+omp_in) &
+!$omp & initializer(bar (omp_priv, omp_orig)) ! { dg-error "Implicitly declared subroutine bar used" }
+!$omp declare reduction (id1:integer:omp_out=omp_orig(omp_out,omp_in)) ! { dg-error "Implicitly declared function omp_orig used" }
+!$omp declare reduction (id1:real:omp_out=foo(omp_out,omp_in)) ! { dg-error "Implicitly declared function foo used" }
+!$omp declare reduction (id2:integer:omp_out=omp_out+omp_in) &
+!$omp & initializer(omp_priv = omp_in (omp_orig)) ! { dg-error "Implicitly declared function omp_in used" }
+!$omp declare reduction (id2:real:omp_out=omp_out+omp_in) &
+!$omp & initializer(omp_priv = baz (omp_orig)) ! { dg-error "Implicitly declared function baz used" }
+  integer :: i
+  real :: r
+  i = 0
+  r = 0
+!$omp parallel reduction (foo: i, r)
+!$omp end parallel
+!$omp parallel reduction (bar: i, r)
+!$omp end parallel
+!$omp parallel reduction (id1: i, r)
+!$omp end parallel
+!$omp parallel reduction (id2: i, r)
+!$omp end parallel
+end subroutine f4
+subroutine f5
+  interface
+    subroutine f5a (x, *, y)
+      double precision :: x, y
+    end subroutine f5a
+  end interface
+!$omp declare reduction (foo:double precision: & ! { dg-error "Subroutine call with alternate returns in combiner" }
+!$omp & f5a (omp_out, *10, omp_in))
+!$omp declare reduction (bar:double precision: &
+!$omp omp_out = omp_in + omp_out) &
+!$omp & initializer (f5a (omp_priv, *20, omp_orig)) ! { dg-error "Subroutine call with alternate returns in INITIALIZER clause" }
+10 continue
+20 continue
+end subroutine f5
+subroutine f6
+  integer :: a
+!$omp declare reduction(foo:character(len=a*2) & ! { dg-error "cannot appear in the expression|not constant" }
+!$omp & :omp_out=trim(omp_out)//omp_in) &
+!$omp & initializer(omp_priv=' ')
+end subroutine f6
+subroutine f7
+  type dt1
+    integer :: a = 1
+    integer :: b
+  end type
+  type dt2
+    integer :: a = 2
+    integer :: b = 3
+  end type
+  type dt3
+    integer :: a
+    integer :: b
+  end type dt3
+!$omp declare reduction(foo:dt1,dt2:omp_out%a=omp_out%a+omp_in%a)
+!$omp declare reduction(foo:dt3:omp_out%a=omp_out%a+omp_in%a) ! { dg-error "Missing INITIALIZER clause for !.OMP DECLARE REDUCTION of derived type without default initializer" }
+end subroutine f7
diff --git a/gcc/testsuite/gfortran.dg/gomp/udr5.f90 b/gcc/testsuite/gfortran.dg/gomp/udr5.f90
new file mode 100644 (file)
index 0000000..aebeee3
--- /dev/null
@@ -0,0 +1,59 @@
+! { dg-do compile }
+
+module udr5m1
+  type dt
+    real :: r
+  end type dt
+end module udr5m1
+module udr5m2
+  use udr5m1
+  interface operator(+)
+    module procedure addm2
+  end interface
+!$omp declare reduction(+:dt:omp_out=omp_out+omp_in) &
+!$omp & initializer(omp_priv=dt(0.0))
+!$omp declare reduction(.myadd.:dt:omp_out=omp_out.myadd.omp_in) &
+!$omp & initializer(omp_priv=dt(0.0))
+  interface operator(.myadd.)
+    module procedure addm2
+  end interface
+contains
+  type(dt) function addm2 (x, y)
+    type(dt), intent (in):: x, y
+    addm2%r = x%r + y%r
+  end function
+end module udr5m2
+module udr5m3
+  use udr5m1
+  interface operator(.myadd.)
+    module procedure addm3
+  end interface
+!$omp declare reduction(+:dt:omp_out=omp_out+omp_in) &
+!$omp & initializer(omp_priv=dt(0.0))
+!$omp declare reduction(.myadd.:dt:omp_out=omp_out.myadd.omp_in) &
+!$omp & initializer(omp_priv=dt(0.0))
+  interface operator(+)
+    module procedure addm3
+  end interface
+contains
+  type(dt) function addm3 (x, y)
+    type(dt), intent (in):: x, y
+    addm3%r = x%r + y%r
+  end function
+end module udr5m3
+subroutine f1
+  use udr5m2
+  type(dt) :: d, e
+  integer :: i
+  d=dt(0.0)
+  e = dt (0.0)
+!$omp parallel do reduction (+ : d) reduction ( .myadd. : e)
+  do i=1,100
+    d=d+dt(i)
+    e=e+dt(i)
+  end do
+end subroutine f1
+subroutine f2
+  use udr5m3   ! { dg-error "Previous !.OMP DECLARE REDUCTION|Ambiguous interfaces" }
+  use udr5m2   ! { dg-error "Ambiguous !.OMP DECLARE REDUCTION" }
+end subroutine f2
diff --git a/gcc/testsuite/gfortran.dg/gomp/udr6.f90 b/gcc/testsuite/gfortran.dg/gomp/udr6.f90
new file mode 100644 (file)
index 0000000..92fc5bb
--- /dev/null
@@ -0,0 +1,205 @@
+! { dg-do compile }
+! { dg-options "-fmax-errors=1000 -fopenmp -ffree-line-length-160" }
+
+module udr6
+  type dt
+    integer :: i
+  end type
+end module udr6
+subroutine f1
+  use udr6, only : dt
+!$omp declare reduction (+:integer:omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (+:real(kind=4):omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (+:double precision:omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (+:integer(kind=8),integer(kind=1) & ! { dg-error "Redefinition of predefined" }
+!$omp & :omp_out = omp_out + omp_in)
+!$omp declare reduction (+:complex:omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (+:complex(kind=8):omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" }
+  interface operator(+)
+    function addf1 (x, y)
+      use udr6, only : dt
+      type(dt), intent (in) :: x, y
+      type(dt) :: addf1
+    end function
+  end interface
+end subroutine f1
+subroutine f2
+  use udr6, only : dt
+  interface operator(-)
+    function subf2 (x, y)
+      use udr6, only : dt
+      type(dt), intent (in) :: x, y
+      type(dt) :: subf2
+    end function
+  end interface
+!$omp declare reduction (-:integer:omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (-:real(kind=4):omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (-:double precision:omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (-:integer(kind=8),integer(kind=1) & ! { dg-error "Redefinition of predefined" }
+!$omp & :omp_out = omp_out + omp_in)
+!$omp declare reduction (-:complex:omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (-:complex(kind=8):omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" }
+end subroutine f2
+subroutine f3
+  use udr6, only : dt
+  interface operator(*)
+    function mulf3 (x, y)
+      use udr6, only : dt
+      type(dt), intent (in) :: x, y
+      type(dt) :: mulf3
+    end function
+  end interface
+!$omp declare reduction (*:integer:omp_out = omp_out * omp_in) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (*:real(kind=4):omp_out = omp_out * omp_in) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (*:double precision:omp_out = omp_out * omp_in) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (*:integer(kind=8),integer(kind=1) & ! { dg-error "Redefinition of predefined" }
+!$omp & :omp_out = omp_out * omp_in)
+!$omp declare reduction (*:complex:omp_out = omp_out * omp_in) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (*:complex(kind=8):omp_out = omp_out * omp_in) ! { dg-error "Redefinition of predefined" }
+end subroutine f3
+subroutine f4
+  use udr6, only : dt
+  interface operator(.and.)
+    function andf4 (x, y)
+      use udr6, only : dt
+      type(dt), intent (in) :: x, y
+      type(dt) :: andf4
+    end function
+  end interface
+!$omp declare reduction (.neqv.:logical:omp_out = omp_out .or. omp_in) ! { dg-error "Redefinition of predefined" }
+  interface operator(.or.)
+    function orf4 (x, y)
+      use udr6, only : dt
+      type(dt), intent (in) :: x, y
+      type(dt) :: orf4
+    end function
+  end interface
+!$omp declare reduction (.eqv.:logical:omp_out = omp_out .or. omp_in) ! { dg-error "Redefinition of predefined" }
+  interface operator(.eqv.)
+    function eqvf4 (x, y)
+      use udr6, only : dt
+      type(dt), intent (in) :: x, y
+      type(dt) :: eqvf4
+    end function
+  end interface
+!$omp declare reduction (.or.:logical:omp_out = omp_out .or. omp_in) ! { dg-error "Redefinition of predefined" }
+  interface operator(.neqv.)
+    function neqvf4 (x, y)
+      use udr6, only : dt
+      type(dt), intent (in) :: x, y
+      type(dt) :: neqvf4
+    end function
+  end interface
+!$omp declare reduction (.and.:logical:omp_out = omp_out .and. omp_in) ! { dg-error "Redefinition of predefined" }
+end subroutine f4
+subroutine f5
+  use udr6, only : dt
+  interface operator(.and.)
+    function andf5 (x, y)
+      use udr6, only : dt
+      type(dt), intent (in) :: x, y
+      type(dt) :: andf5
+    end function
+  end interface
+!$omp declare reduction (.neqv.:logical(kind =4):omp_out = omp_out .neqv. omp_in) ! { dg-error "Redefinition of predefined" }
+  interface operator(.or.)
+    function orf5 (x, y)
+      use udr6, only : dt
+      type(dt), intent (in) :: x, y
+      type(dt) :: orf5
+    end function
+  end interface
+!$omp declare reduction (.eqv.:logical(kind= 4):omp_out = omp_out .eqv. omp_in) ! { dg-error "Redefinition of predefined" }
+  interface operator(.eqv.)
+    function eqvf5 (x, y)
+      use udr6, only : dt
+      type(dt), intent (in) :: x, y
+      type(dt) :: eqvf5
+    end function
+  end interface
+!$omp declare reduction (.or.:logical(kind=4):omp_out = omp_out .or. omp_in) ! { dg-error "Redefinition of predefined" }
+  interface operator(.neqv.)
+    function neqvf5 (x, y)
+      use udr6, only : dt
+      type(dt), intent (in) :: x, y
+      type(dt) :: neqvf5
+    end function
+  end interface
+!$omp declare reduction (.and.:logical(kind = 4):omp_out = omp_out .and. omp_in) ! { dg-error "Redefinition of predefined" }
+end subroutine f5
+subroutine f6
+!$omp declare reduction (min:integer:omp_out = min (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (max:integer:omp_out = max (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (iand:integer:omp_out = iand (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (ior:integer:omp_out = ior (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (ieor:integer:omp_out = ieor (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (min:real:omp_out = min (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (max:real:omp_out = max (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (min:double precision:omp_out = min (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (max:double precision:omp_out = max (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
+end subroutine f6
+subroutine f7
+!$omp declare reduction (min:integer(kind=2):omp_out = min (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (max:integer(kind=4):omp_out = max (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (iand:integer(kind=1):omp_out = iand (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (ior:integer(kind=8):omp_out = ior (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (ieor:integer(kind=4):omp_out = ieor (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (min:real(kind=4):omp_out = min (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (max:real(kind=4):omp_out = max (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (min:double precision:omp_out = min (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
+!$omp declare reduction (max:double precision:omp_out = max (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
+end subroutine f7
+subroutine f8
+  integer :: min
+!$omp declare reduction (min:integer:omp_out = omp_out + omp_in)
+!$omp declare reduction (min:real:omp_out = omp_out + omp_in)
+!$omp declare reduction (min:double precision:omp_out = omp_out + omp_in)
+end subroutine f8
+subroutine f9
+  integer :: max
+!$omp declare reduction (max:integer:omp_out = omp_out + omp_in)
+!$omp declare reduction (max:real:omp_out = omp_out + omp_in)
+!$omp declare reduction (max:double precision:omp_out = omp_out + omp_in)
+end subroutine f9
+subroutine f10
+  integer :: iand
+!$omp declare reduction (iand:integer:omp_out = omp_out + omp_in)
+!$omp declare reduction (iand:real:omp_out = omp_out + omp_in)
+end subroutine f10
+subroutine f11
+  integer :: ior
+!$omp declare reduction (ior:integer:omp_out = omp_out + omp_in)
+!$omp declare reduction (ior:real:omp_out = omp_out + omp_in)
+end subroutine f11
+subroutine f12
+  integer :: ieor
+!$omp declare reduction (ieor:integer:omp_out = omp_out + omp_in)
+!$omp declare reduction (ieor:real:omp_out = omp_out + omp_in)
+end subroutine f12
+subroutine f13
+!$omp declare reduction (min:integer:omp_out = omp_out + omp_in)
+!$omp declare reduction (min:real:omp_out = omp_out + omp_in)
+!$omp declare reduction (min:double precision:omp_out = omp_out + omp_in)
+  integer :: min
+end subroutine f13
+subroutine f14
+!$omp declare reduction (max:integer:omp_out = omp_out + omp_in)
+!$omp declare reduction (max:real:omp_out = omp_out + omp_in)
+!$omp declare reduction (max:double precision:omp_out = omp_out + omp_in)
+  integer :: max
+end subroutine f14
+subroutine f15
+!$omp declare reduction (iand:integer:omp_out = omp_out + omp_in)
+!$omp declare reduction (iand:real:omp_out = omp_out + omp_in)
+  integer :: iand
+end subroutine f15
+subroutine f16
+!$omp declare reduction (ior:integer:omp_out = omp_out + omp_in)
+!$omp declare reduction (ior:real:omp_out = omp_out + omp_in)
+  integer :: ior
+end subroutine f16
+subroutine f17
+!$omp declare reduction (ieor:integer:omp_out = omp_out + omp_in)
+!$omp declare reduction (ieor:real:omp_out = omp_out + omp_in)
+  integer :: ieor
+end subroutine f17
diff --git a/gcc/testsuite/gfortran.dg/gomp/udr7.f90 b/gcc/testsuite/gfortran.dg/gomp/udr7.f90
new file mode 100644 (file)
index 0000000..230a3fc
--- /dev/null
@@ -0,0 +1,90 @@
+! { dg-do compile }
+
+module udr7m1
+  type dt
+    real :: r
+  end type dt
+end module udr7m1
+module udr7m2
+  use udr7m1
+  interface operator(+)
+    module procedure addm2
+  end interface
+!$omp declare reduction(+:dt:omp_out=omp_out+omp_in) &
+!$omp & initializer(omp_priv=dt(0.0))
+!$omp declare reduction(.myadd.:dt:omp_out=omp_out.myadd.omp_in) &
+!$omp & initializer(omp_priv=dt(0.0))
+  interface operator(.myadd.)
+    module procedure addm2
+  end interface
+  private
+  public :: operator(+), operator(.myadd.), dt
+contains
+  type(dt) function addm2 (x, y)
+    type(dt), intent (in):: x, y
+    addm2%r = x%r + y%r
+  end function
+end module udr7m2
+module udr7m3
+  use udr7m1
+  private
+  public :: operator(.myadd.), operator(+), dt
+  interface operator(.myadd.)
+    module procedure addm3
+  end interface
+!$omp declare reduction(+:dt:omp_out=omp_out+omp_in) &
+!$omp & initializer(omp_priv=dt(0.0))
+!$omp declare reduction(.myadd.:dt:omp_out=omp_out.myadd.omp_in) &
+!$omp & initializer(omp_priv=dt(0.0))
+  interface operator(+)
+    module procedure addm3
+  end interface
+contains
+  type(dt) function addm3 (x, y)
+    type(dt), intent (in):: x, y
+    addm3%r = x%r + y%r
+  end function
+end module udr7m3
+module udr7m4
+  use udr7m1
+  private
+  interface operator(.myadd.)
+    module procedure addm4
+  end interface
+!$omp declare reduction(+:dt:omp_out=omp_out+omp_in) &
+!$omp & initializer(omp_priv=dt(0.0))
+!$omp declare reduction(.myadd.:dt:omp_out=omp_out.myadd.omp_in) &
+!$omp & initializer(omp_priv=dt(0.0))
+  interface operator(+)
+    module procedure addm4
+  end interface
+contains
+  type(dt) function addm4 (x, y)
+    type(dt), intent (in):: x, y
+    addm4%r = x%r + y%r
+  end function
+end module udr7m4
+subroutine f1
+  use udr7m2
+  type(dt) :: d, e
+  integer :: i
+  d=dt(0.0)
+  e = dt (0.0)
+!$omp parallel do reduction (+ : d) reduction ( .myadd. : e)
+  do i=1,100
+    d=d+dt(i)
+    e=e+dt(i)
+  end do
+end subroutine f1
+subroutine f2
+  use udr7m3   ! { dg-error "Previous !.OMP DECLARE REDUCTION|Ambiguous interfaces" }
+  use udr7m2   ! { dg-error "Ambiguous !.OMP DECLARE REDUCTION" }
+end subroutine f2
+subroutine f3
+  use udr7m4
+  use udr7m2
+end subroutine f3
+subroutine f4
+  use udr7m3
+  use udr7m4
+end subroutine f4
diff --git a/gcc/testsuite/gfortran.dg/gomp/udr8.f90 b/gcc/testsuite/gfortran.dg/gomp/udr8.f90
new file mode 100644 (file)
index 0000000..e040b3d
--- /dev/null
@@ -0,0 +1,351 @@
+! { dg-do compile }
+! { dg-options "-fmax-errors=1000 -fopenmp" }
+
+module m
+contains
+  function fn1 (x, y)
+    integer, intent(in) :: x, y
+    integer :: fn1
+    fn1 = x + 2 * y
+  end function
+  subroutine sub1 (x, y)
+    integer, intent(in) :: y
+    integer, intent(out) :: x
+    x = y
+  end subroutine
+  function fn2 (x)
+    integer, intent(in) :: x
+    integer :: fn2
+    fn2 = x
+  end function
+  subroutine sub2 (x, y)
+    integer, intent(in) :: y
+    integer, intent(inout) :: x
+    x = x + y
+  end subroutine
+  function fn3 (x, y)
+    integer, intent(in) :: x(:), y(:)
+    integer :: fn3(lbound(x, 1):ubound(x, 1))
+    fn3 = x + 2 * y
+  end function
+  subroutine sub3 (x, y)
+    integer, intent(in) :: y(:)
+    integer, intent(out) :: x(:)
+    x = y
+  end subroutine
+  function fn4 (x)
+    integer, intent(in) :: x(:)
+    integer :: fn4(lbound(x, 1):ubound(x, 1))
+    fn4 = x
+  end function
+  subroutine sub4 (x, y)
+    integer, intent(in) :: y(:)
+    integer, intent(inout) :: x(:)
+    x = x + y
+  end subroutine
+  function fn5 (x, y)
+    integer, intent(in) :: x(10), y(10)
+    integer :: fn5(10)
+    fn5 = x + 2 * y
+  end function
+  subroutine sub5 (x, y)
+    integer, intent(in) :: y(10)
+    integer, intent(out) :: x(10)
+    x = y
+  end subroutine
+  function fn6 (x)
+    integer, intent(in) :: x(10)
+    integer :: fn6(10)
+    fn6 = x
+  end function
+  subroutine sub6 (x, y)
+    integer, intent(in) :: y(10)
+    integer, intent(inout) :: x(10)
+    x = x + y
+  end subroutine
+  function fn7 (x, y)
+    integer, allocatable, intent(in) :: x(:), y(:)
+    integer, allocatable :: fn7(:)
+    fn7 = x + 2 * y
+  end function
+  subroutine sub7 (x, y)
+    integer, allocatable, intent(in) :: y(:)
+    integer, allocatable, intent(out) :: x(:)
+    x = y
+  end subroutine
+  function fn8 (x)
+    integer, allocatable, intent(in) :: x(:)
+    integer, allocatable :: fn8(:)
+    fn8 = x
+  end function
+  subroutine sub8 (x, y)
+    integer, allocatable, intent(in) :: y(:)
+    integer, allocatable, intent(inout) :: x(:)
+    x = x + y
+  end subroutine
+end module
+subroutine test1
+  use m
+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
+!$omp declare reduction (bar : integer : omp_out = fn1 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*scalar and rank-1" }
+!$omp & initializer (sub1 (omp_priv, omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*scalar and rank-1" }
+!$omp declare reduction (baz : integer : sub2 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*scalar and rank-1" }
+!$omp initializer (omp_priv = fn2 (omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*scalar and rank-1" }
+  integer :: a(10)
+!$omp parallel reduction (foo : a)
+!$omp end parallel
+!$omp parallel reduction (bar : a)
+!$omp end parallel
+!$omp parallel reduction (baz : a)
+!$omp end parallel
+end subroutine test1
+subroutine test2
+  use m
+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
+!$omp declare reduction (bar : integer : omp_out = fn1 (omp_out, omp_in)) &
+!$omp & initializer (sub1 (omp_priv, omp_orig))
+!$omp declare reduction (baz : integer : sub2 (omp_out, omp_in)) &
+!$omp initializer (omp_priv = fn2 (omp_orig))
+  integer :: a
+!$omp parallel reduction (foo : a)
+!$omp end parallel
+!$omp parallel reduction (bar : a)
+!$omp end parallel
+!$omp parallel reduction (baz : a)
+!$omp end parallel
+end subroutine test2
+subroutine test3
+  use m
+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
+!$omp declare reduction (bar : integer : omp_out = fn1 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*scalar and rank-1" }
+!$omp & initializer (sub1 (omp_priv, omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*scalar and rank-1" }
+!$omp declare reduction (baz : integer : sub2 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*scalar and rank-1" }
+!$omp initializer (omp_priv = fn2 (omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*scalar and rank-1" }
+  integer, allocatable :: a(:)
+  allocate (a(10))
+!$omp parallel reduction (foo : a)
+!$omp end parallel
+!$omp parallel reduction (bar : a)
+!$omp end parallel
+!$omp parallel reduction (baz : a)
+!$omp end parallel
+end subroutine test3
+subroutine test4
+  use m
+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
+!$omp declare reduction (bar : integer : omp_out = fn1 (omp_out, omp_in)) &
+!$omp & initializer (sub1 (omp_priv, omp_orig))
+!$omp declare reduction (baz : integer : sub2 (omp_out, omp_in)) &
+!$omp initializer (omp_priv = fn2 (omp_orig))
+  integer, allocatable :: a
+  allocate (a)
+!$omp parallel reduction (foo : a)
+!$omp end parallel
+!$omp parallel reduction (bar : a)
+!$omp end parallel
+!$omp parallel reduction (baz : a)
+!$omp end parallel
+end subroutine test4
+subroutine test5
+  use m
+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
+!$omp declare reduction (bar : integer : omp_out = fn3 (omp_out, omp_in)) &
+!$omp & initializer (sub3 (omp_priv, omp_orig))
+!$omp declare reduction (baz : integer : sub4 (omp_out, omp_in)) &
+!$omp initializer (omp_priv = fn4 (omp_orig))
+  integer :: a(10)
+!$omp parallel reduction (foo : a)
+!$omp end parallel
+!$omp parallel reduction (bar : a)
+!$omp end parallel
+!$omp parallel reduction (baz : a)
+!$omp end parallel
+end subroutine test5
+subroutine test6
+  use m
+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
+!$omp declare reduction (bar : integer : omp_out = fn3 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar|Incompatible ranks 0 and 1 in assignment" }
+!$omp & initializer (sub3 (omp_priv, omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar" }
+!$omp declare reduction (baz : integer : sub4 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar" }
+!$omp initializer (omp_priv = fn4 (omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar|Incompatible ranks 0 and 1 in assignment" }
+  integer :: a
+!$omp parallel reduction (foo : a)
+!$omp end parallel
+!$omp parallel reduction (bar : a)
+!$omp end parallel
+!$omp parallel reduction (baz : a)
+!$omp end parallel
+end subroutine test6
+subroutine test7
+  use m
+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
+!$omp declare reduction (bar : integer : omp_out = fn3 (omp_out, omp_in)) &
+!$omp & initializer (sub3 (omp_priv, omp_orig))
+!$omp declare reduction (baz : integer : sub4 (omp_out, omp_in)) &
+!$omp initializer (omp_priv = fn4 (omp_orig))
+  integer, allocatable :: a(:)
+  allocate (a(10))
+!$omp parallel reduction (foo : a)
+!$omp end parallel
+!$omp parallel reduction (bar : a)
+!$omp end parallel
+!$omp parallel reduction (baz : a)
+!$omp end parallel
+end subroutine test7
+subroutine test8
+  use m
+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
+!$omp declare reduction (bar : integer : omp_out = fn3 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar|Incompatible ranks 0 and 1 in assignment" }
+!$omp & initializer (sub3 (omp_priv, omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar" }
+!$omp declare reduction (baz : integer : sub4 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar" }
+!$omp initializer (omp_priv = fn4 (omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar|Incompatible ranks 0 and 1 in assignment" }
+  integer, allocatable :: a
+  allocate (a)
+!$omp parallel reduction (foo : a)
+!$omp end parallel
+!$omp parallel reduction (bar : a)
+!$omp end parallel
+!$omp parallel reduction (baz : a)
+!$omp end parallel
+end subroutine test8
+subroutine test9
+  use m
+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
+!$omp declare reduction (bar : integer : omp_out = fn5 (omp_out, omp_in)) &
+!$omp & initializer (sub5 (omp_priv, omp_orig))
+!$omp declare reduction (baz : integer : sub6 (omp_out, omp_in)) &
+!$omp initializer (omp_priv = fn6 (omp_orig))
+  integer :: a(10)
+!$omp parallel reduction (foo : a)
+!$omp end parallel
+!$omp parallel reduction (bar : a)
+!$omp end parallel
+!$omp parallel reduction (baz : a)
+!$omp end parallel
+end subroutine test9
+subroutine test10
+  use m
+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
+!$omp declare reduction (bar : integer : omp_out = fn5 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar|Incompatible ranks 0 and 1 in assignment" }
+!$omp & initializer (sub5 (omp_priv, omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar" }
+!$omp declare reduction (baz : integer : sub6 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar" }
+!$omp initializer (omp_priv = fn6 (omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar|Incompatible ranks 0 and 1 in assignment" }
+  integer :: a
+!$omp parallel reduction (foo : a)
+!$omp end parallel
+!$omp parallel reduction (bar : a)
+!$omp end parallel
+!$omp parallel reduction (baz : a)
+!$omp end parallel
+end subroutine test10
+subroutine test11
+  use m
+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
+!$omp declare reduction (bar : integer : omp_out = fn5 (omp_out, omp_in)) &
+!$omp & initializer (sub5 (omp_priv, omp_orig))
+!$omp declare reduction (baz : integer : sub6 (omp_out, omp_in)) &
+!$omp initializer (omp_priv = fn6 (omp_orig))
+  integer, allocatable :: a(:)
+  allocate (a(10))
+!$omp parallel reduction (foo : a)
+!$omp end parallel
+!$omp parallel reduction (bar : a)
+!$omp end parallel
+!$omp parallel reduction (baz : a)
+!$omp end parallel
+end subroutine test11
+subroutine test12
+  use m
+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
+!$omp declare reduction (bar : integer : omp_out = fn5 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar|Incompatible ranks 0 and 1 in assignment" }
+!$omp & initializer (sub5 (omp_priv, omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar" }
+!$omp declare reduction (baz : integer : sub6 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar" }
+!$omp initializer (omp_priv = fn6 (omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar|Incompatible ranks 0 and 1 in assignment" }
+  integer, allocatable :: a
+  allocate (a)
+!$omp parallel reduction (foo : a)
+!$omp end parallel
+!$omp parallel reduction (bar : a)
+!$omp end parallel
+!$omp parallel reduction (baz : a)
+!$omp end parallel
+end subroutine test12
+subroutine test13
+  use m
+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
+!$omp declare reduction (bar : integer : omp_out = & ! { dg-error "Different shape for array assignment at \[^\n\r]* on dimension 1 .9 and 10" }
+!$omp & fn5 (omp_out, omp_in)) & ! { dg-warning "Actual argument contains too few elements for dummy argument \[^\n\r]* .9/10" }
+!$omp & initializer (sub5 (omp_priv, omp_orig)) ! { dg-warning "Actual argument contains too few elements for dummy argument \[^\n\r]* .9/10" }
+!$omp declare reduction (baz : integer : sub6 (omp_out, omp_in)) & ! { dg-warning "Actual argument contains too few elements for dummy argument \[^\n\r]* .9/10" }
+!$omp initializer (omp_priv = & ! { dg-error "Different shape for array assignment at \[^\n\r]* on dimension 1 .9 and 10" }
+!$omp & fn6 (omp_orig)) ! { dg-warning "Actual argument contains too few elements for dummy argument \[^\n\r]* .9/10" }
+  integer :: a(9)
+!$omp parallel reduction (foo : a)
+!$omp end parallel
+!$omp parallel reduction (bar : a)
+!$omp end parallel
+!$omp parallel reduction (baz : a)
+!$omp end parallel
+end subroutine test13
+subroutine test14
+  use m
+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
+!$omp declare reduction (bar : integer : omp_out = fn7 (omp_out, omp_in)) & ! { dg-error "Actual argument for \[^\n\r]* must be ALLOCATABLE" }
+!$omp & initializer (sub7 (omp_priv, omp_orig)) ! { dg-error "Actual argument for \[^\n\r]* must be ALLOCATABLE" }
+!$omp declare reduction (baz : integer : sub8 (omp_out, omp_in)) & ! { dg-error "Actual argument for \[^\n\r]* must be ALLOCATABLE" }
+!$omp initializer (omp_priv = fn8 (omp_orig)) ! { dg-error "Actual argument for \[^\n\r]* must be ALLOCATABLE" }
+  integer :: a(10)
+!$omp parallel reduction (foo : a)
+!$omp end parallel
+!$omp parallel reduction (bar : a)
+!$omp end parallel
+!$omp parallel reduction (baz : a)
+!$omp end parallel
+end subroutine test14
+subroutine test15
+  use m
+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
+!$omp declare reduction (bar : integer : omp_out = fn7 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar|Incompatible ranks 0 and 1 in assignment" }
+!$omp & initializer (sub7 (omp_priv, omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar" }
+!$omp declare reduction (baz : integer : sub8 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar" }
+!$omp initializer (omp_priv = fn8 (omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar|Incompatible ranks 0 and 1 in assignment" }
+  integer :: a
+!$omp parallel reduction (foo : a)
+!$omp end parallel
+!$omp parallel reduction (bar : a)
+!$omp end parallel
+!$omp parallel reduction (baz : a)
+!$omp end parallel
+end subroutine test15
+subroutine test16
+  use m
+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
+!$omp declare reduction (bar : integer : omp_out = fn7 (omp_out, omp_in)) &
+!$omp & initializer (sub7 (omp_priv, omp_orig))
+!$omp declare reduction (baz : integer : sub8 (omp_out, omp_in)) &
+!$omp initializer (omp_priv = fn8 (omp_orig))
+  integer, allocatable :: a(:)
+  allocate (a(10))
+!$omp parallel reduction (foo : a)
+!$omp end parallel
+!$omp parallel reduction (bar : a)
+!$omp end parallel
+!$omp parallel reduction (baz : a)
+!$omp end parallel
+end subroutine test16
+subroutine test17
+  use m
+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
+!$omp declare reduction (bar : integer : omp_out = fn7 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar|Incompatible ranks 0 and 1 in assignment" }
+!$omp & initializer (sub7 (omp_priv, omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar" }
+!$omp declare reduction (baz : integer : sub8 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar" }
+!$omp initializer (omp_priv = fn8 (omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar|Incompatible ranks 0 and 1 in assignment" }
+  integer, allocatable :: a
+  allocate (a)
+!$omp parallel reduction (foo : a)
+!$omp end parallel
+!$omp parallel reduction (bar : a)
+!$omp end parallel
+!$omp parallel reduction (baz : a)
+!$omp end parallel
+end subroutine test17
diff --git a/gcc/testsuite/gfortran.dg/graphite/pr59817.f b/gcc/testsuite/gfortran.dg/graphite/pr59817.f
new file mode 100644 (file)
index 0000000..a9ee8f1
--- /dev/null
@@ -0,0 +1,14 @@
+! { dg-do compile }
+! { dg-options "-O2 -floop-interchange" }
+      SUBROUTINE PREPD(ICAST,ICAS,ICASX,ICAS1,ICAS2,NDET,NM,III,IMP,
+     *                 CASMIN)
+      LOGICAL CASMIN
+      DIMENSION ICAST(NDET,NM),IMP(NM)
+      IF(CASMIN) THEN
+         DO K=1,NDET
+            DO L=1,NM
+               IF(L.EQ.K-1) ICAST(K,L) = 1
+            END DO
+         END DO
+      END IF
+      END SUBROUTINE
diff --git a/gcc/testsuite/gfortran.dg/list_read_13.f b/gcc/testsuite/gfortran.dg/list_read_13.f
new file mode 100644 (file)
index 0000000..0f8efd8
--- /dev/null
@@ -0,0 +1,13 @@
+c { dg-do run }
+c PR61049, reduced test case by  Dominique d'Humieres
+      character(len=30) :: buff = ", (2.0, 3.0),,6.0D0, 2*,"
+      DOUBLE PRECISION AVD, BVD, CVD, DVCORR 
+      COMPLEX AVC, BVC, CVC, ZVCORR
+      
+      read(buff, *, err=10)  AVD, AVC, BVC, BVD, CVC, CVD
+      goto 20
+ 10   call abort
+ 20   continue       
+      end
+    
+  
index 9f27053..0727136 100644 (file)
@@ -4,7 +4,8 @@
 ! http://gcc.gnu.org/ml/fortran/2005-04/msg00139.html
 !
 ! { dg-do run }
-! { dg-xfail-run-if "PR 33271, math library bug" { powerpc-ibm-aix* powerpc*-*-linux* *-*-mingw* } { "-O0" } { "" } }
+! { dg-xfail-run-if "PR 33271, math library bug" { powerpc-ibm-aix* powerpc-*-linux* powerpc64-*-linux* *-*-mingw* } { "-O0" } { "" } }
+! Note that this doesn't fail on powerpc64le-*-linux*.
   real(kind=8) :: a
   integer(kind=8) :: i1, i2
   real :: b
diff --git a/gcc/testsuite/gfortran.dg/oldstyle_5.f b/gcc/testsuite/gfortran.dg/oldstyle_5.f
new file mode 100644 (file)
index 0000000..8a0d311
--- /dev/null
@@ -0,0 +1,8 @@
+C { dg-do compile }
+      TYPE T
+      INTEGER A(2)/1,2/ ! { dg-error "Invalid old style initialization for derived type component" }
+      END TYPE
+      TYPE S
+      INTEGER B/1/ ! { dg-error "Invalid old style initialization for derived type component" }
+      END TYPE
+      END
index 3d55986..44d5c9d 100644 (file)
@@ -6,6 +6,6 @@
 # error _OPENMP not defined
 #endif
 
-#if _OPENMP != 201107
+#if _OPENMP != 201307
 # error _OPENMP defined to wrong value
 #endif
index 975cb20..f60e1f7 100644 (file)
@@ -1,6 +1,7 @@
 ! { dg-do run }
 ! { dg-add-options ieee }
 ! { dg-skip-if "PR libfortran/58015" { *-*-solaris2.9* hppa*-*-hpux* } }
+! { dg-skip-if "IBM long double 31 bits of precision, test requires 38" { powerpc*-*-linux* } }
 !
 ! PR fortran/35862
 !
index b2b7d12..bffc422 100644 (file)
@@ -18,5 +18,5 @@ package body Aliasing1 is
 
 end Aliasing1;
 
--- { dg-final { scan-tree-dump-not "__gnat_rcheck" "optimized" } }
+-- { dg-final { scan-tree-dump-not "gnat_rcheck" "optimized" } }
 -- { dg-final { cleanup-tree-dump "optimized" } }
diff --git a/gcc/testsuite/gnat.dg/enum3.adb b/gcc/testsuite/gnat.dg/enum3.adb
new file mode 100644 (file)
index 0000000..1cb6c4b
--- /dev/null
@@ -0,0 +1,23 @@
+-- { dg-do run }
+
+procedure Enum3 is
+   type Enum is (Aaa, Bbb, Ccc);
+   for Enum use (1,2,4);
+begin
+   for Lo in Enum loop
+      for Hi in Enum loop
+         declare
+            subtype S is Enum range Lo .. Hi;
+            type Vector is array (S) of Integer;
+            Vec : Vector;
+         begin
+            for I in S loop
+               Vec (I) := 0;
+            end loop;
+            if Vec /= (S => 0) then
+               raise Program_Error;
+            end if;
+         end;
+      end loop;
+   end loop;
+end;
diff --git a/gcc/testsuite/gnat.dg/opt38.adb b/gcc/testsuite/gnat.dg/opt38.adb
new file mode 100644 (file)
index 0000000..143f4fa
--- /dev/null
@@ -0,0 +1,9 @@
+-- { dg-do run }
+-- { dg-options "-O2 -gnatn" }
+
+with Opt38_Pkg; use Opt38_Pkg;
+
+procedure Opt38 is
+begin
+  Test (-1);
+end;
diff --git a/gcc/testsuite/gnat.dg/opt38_pkg.adb b/gcc/testsuite/gnat.dg/opt38_pkg.adb
new file mode 100644 (file)
index 0000000..7cbbeea
--- /dev/null
@@ -0,0 +1,33 @@
+package body Opt38_Pkg is
+
+  procedure Proc (I : Integer);
+  pragma Inline (Proc);
+
+  procedure Proc (I : Integer) is
+
+    procedure Inner;
+    pragma No_Inline (Inner);
+
+    procedure Inner is
+    begin
+      if I /= 110 then
+        raise Program_Error;
+      end if;
+    end;
+
+  begin
+    if I > 0 then
+      Inner;
+    end if;
+  end;
+
+  procedure Test (I : Integer) is
+  begin
+    if I > -1 then
+      Proc (I);
+    else
+      Proc (I + 111);
+    end if;
+  end;
+
+end Opt38_Pkg;
diff --git a/gcc/testsuite/gnat.dg/opt38_pkg.ads b/gcc/testsuite/gnat.dg/opt38_pkg.ads
new file mode 100644 (file)
index 0000000..b6cb4e6
--- /dev/null
@@ -0,0 +1,5 @@
+package Opt38_Pkg is
+
+  procedure Test (I : Integer);
+
+end Opt38_Pkg;
diff --git a/gcc/testsuite/gnat.dg/opt39.adb b/gcc/testsuite/gnat.dg/opt39.adb
new file mode 100644 (file)
index 0000000..a00cac7
--- /dev/null
@@ -0,0 +1,31 @@
+-- { dg-do compile }
+-- { dg-options "-O2 -fno-inline -fdump-tree-optimized" }
+
+procedure Opt39 (I : Integer) is
+
+  type Rec is record
+    I1 : Integer;
+    I2 : Integer;
+    I3 : Integer;
+    I4 : Integer;
+    I5 : Integer;
+  end record;
+
+  procedure Set (A : access Rec; I : Integer) is
+    Tmp : Rec := A.all;
+  begin
+    Tmp.I1 := I;
+    A.all := Tmp;
+  end;
+
+  R : aliased Rec;
+
+begin
+  Set (R'Access, I);
+  if R.I1 /= I then
+    raise Program_Error;
+  end if;
+end;
+
+-- { dg-final { scan-tree-dump-times "MEM" 1 "optimized" } }
+-- { dg-final { cleanup-tree-dump "optimized" } }
diff --git a/gcc/testsuite/gnat.dg/overflow_fixed.adb b/gcc/testsuite/gnat.dg/overflow_fixed.adb
new file mode 100644 (file)
index 0000000..6ece515
--- /dev/null
@@ -0,0 +1,19 @@
+-- { dg-do run }
+-- { dg-options "-gnato -O" }
+
+procedure Overflow_Fixed is
+
+  type Unsigned_8_Bit is mod 2**8;
+
+  procedure Fixed_To_Eight (Value : Duration) is
+    Item : Unsigned_8_Bit;
+  begin
+    Item := Unsigned_8_Bit(Value);
+    raise Program_Error;
+  exception
+    when Constraint_Error => null; -- expected case
+  end;
+
+begin
+  Fixed_To_Eight (-0.5);
+end;
diff --git a/gcc/testsuite/lib/clearcap.exp b/gcc/testsuite/lib/clearcap.exp
new file mode 100644 (file)
index 0000000..044881f
--- /dev/null
@@ -0,0 +1,58 @@
+# Copyright (C) 2014 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/>.
+
+# Clear hardware capabilities on Solaris.
+if [istarget *-*-solaris2*] {
+    set clearcap_ldflags "-mclear-hwcap"
+}
+
+#
+# clearcap-init -- called at the start of each subdir of tests
+#
+
+proc clearcap-init { args } {
+    global TEST_ALWAYS_FLAGS
+    global ALWAYS_CXXFLAGS
+    global clearcap_saved_TEST_ALWAYS_FLAGS
+    global clearcap_ldflags
+
+    if [info exists TEST_ALWAYS_FLAGS] {
+       set clearcap_saved_TEST_ALWAYS_FLAGS $TEST_ALWAYS_FLAGS
+    }
+    if [info exists clearcap_ldflags] {
+       if [info exists ALWAYS_CXXFLAGS] {
+           set ALWAYS_CXXFLAGS [concat "{ldflags=$clearcap_ldflags}" $ALWAYS_CXXFLAGS]
+       } else {
+           append TEST_ALWAYS_FLAGS " $clearcap_ldflags"
+       }
+    }
+    return 0
+}
+
+#
+# clearcap-finish -- called at the start of each subdir of tests
+#
+
+proc clearcap-finish { args } {
+    global TEST_ALWAYS_FLAGS
+    global clearcap_saved_TEST_ALWAYS_FLAGS
+
+    if [info exists clearcap_saved_TEST_ALWAYS_FLAGS] {
+       set TEST_ALWAYS_FLAGS $clearcap_saved_TEST_ALWAYS_FLAGS
+    } else {
+       unset TEST_ALWAYS_FLAGS
+    }
+}
index 57b10d0..481d7da 100644 (file)
@@ -1862,6 +1862,15 @@ proc check_effective_target_large_double { } {
     }]
 }
 
+# Return 1 if the target supports long double of 128 bits,
+# 0 otherwise.
+
+proc check_effective_target_longdouble128 { } {
+    return [check_no_compiler_messages longdouble128 object {
+       int dummy[sizeof(long double) == 16 ? 1 : -1];
+    }]
+}
+
 # Return 1 if the target supports double of 64 bits,
 # 0 otherwise.
 
@@ -1956,6 +1965,32 @@ proc check_effective_target_dfprt { } {
     }]
 }
 
+# Return 1 if the target supports executing DFP hardware instructions,
+# 0 otherwise.  Cache the result.
+
+proc check_dfp_hw_available { } {
+    return [check_cached_effective_target dfp_hw_available {
+       # For now, disable on Darwin
+       if { [istarget powerpc-*-eabi] || [istarget powerpc*-*-eabispe] || [istarget *-*-darwin*]} {
+           expr 0
+       } else {
+           check_runtime_nocache dfp_hw_available {
+               volatile _Decimal64 r;
+               volatile _Decimal64 a = 4.0DD;
+               volatile _Decimal64 b = 2.0DD;
+               int main()
+               {
+                 asm volatile ("dadd %0,%1,%2" : "=d" (r) : "d" (a), "d" (b));
+                 asm volatile ("dsub %0,%1,%2" : "=d" (r) : "d" (a), "d" (b));
+                 asm volatile ("dmul %0,%1,%2" : "=d" (r) : "d" (a), "d" (b));
+                 asm volatile ("ddiv %0,%1,%2" : "=d" (r) : "d" (a), "d" (b));
+                 return 0;
+               }
+           } "-mcpu=power6 -mhard-float"
+       }
+    }]
+}
+
 # Return 1 if the target supports compiling and assembling UCN, 0 otherwise.
 
 proc check_effective_target_ucn_nocache { } {
@@ -4919,6 +4954,7 @@ proc is-effective-target { arg } {
          "vsx_hw"         { set selected [check_vsx_hw_available] }
          "p8vector_hw"    { set selected [check_p8vector_hw_available] }
          "ppc_recip_hw"   { set selected [check_ppc_recip_hw_available] }
+         "dfp_hw"         { set selected [check_dfp_hw_available] }
          "named_sections" { set selected [check_named_sections_available] }
          "gc_sections"    { set selected [check_gc_sections_available] }
          "cxa_atexit"     { set selected [check_cxa_atexit_available] }
@@ -4941,6 +4977,7 @@ proc is-effective-target-keyword { arg } {
          "vsx_hw"         { return 1 }
          "p8vector_hw"    { return 1 }
          "ppc_recip_hw"   { return 1 }
+         "dfp_hw"         { return 1 }
          "named_sections" { return 1 }
          "gc_sections"    { return 1 }
          "cxa_atexit"     { return 1 }
index 1719c7e..40443d4 100644 (file)
@@ -987,7 +987,7 @@ struct GTY(()) tree_base {
        SSA_NAME_IN_FREELIST in
           SSA_NAME
 
-       VAR_DECL_NONALIASED in
+       DECL_NONALIASED in
          VAR_DECL
 
    deprecated_flag:
@@ -1127,6 +1127,11 @@ enum omp_clause_map_kind
      array sections.  OMP_CLAUSE_SIZE for these is not the pointer size,
      which is implicitly POINTER_SIZE / BITS_PER_UNIT, but the bias.  */
   OMP_CLAUSE_MAP_POINTER,
+  /* Also internal, behaves like OMP_CLAUS_MAP_TO, but additionally any
+     OMP_CLAUSE_MAP_POINTER records consecutive after it which have addresses
+     falling into that range will not be ignored if OMP_CLAUSE_MAP_TO_PSET
+     wasn't mapped already.  */
+  OMP_CLAUSE_MAP_TO_PSET,
   OMP_CLAUSE_MAP_LAST
 };
 
index fcf8d80..a1f2758 100644 (file)
@@ -343,7 +343,7 @@ set_ssa_default_def (struct function *fn, tree var, tree def)
     {
       loc = htab_find_slot_with_hash (DEFAULT_DEFS (fn), &in,
                                      DECL_UID (var), NO_INSERT);
-      if (*loc)
+      if (loc)
        {
          SSA_NAME_IS_DEFAULT_DEF (*(tree *)loc) = false;
          htab_clear_slot (DEFAULT_DEFS (fn), loc);
index 4293241..04d099f 100644 (file)
@@ -1485,6 +1485,11 @@ remap_gimple_stmt (gimple stmt, copy_body_data *id)
       /* Create a new deep copy of the statement.  */
       copy = gimple_copy (stmt);
 
+      /* Clear flags that need revisiting.  */
+      if (is_gimple_call (copy)
+         && gimple_call_tail_p (copy))
+       gimple_call_set_tail (copy, false);
+
       /* Remap the region numbers for __builtin_eh_{pointer,filter},
         RESX and EH_DISPATCH.  */
       if (id->eh_map)
@@ -3119,7 +3124,8 @@ declare_return_variable (copy_body_data *id, tree return_slot, tree modify_dest,
        {
          var = return_slot;
          gcc_assert (TREE_CODE (var) != SSA_NAME);
-         TREE_ADDRESSABLE (var) |= TREE_ADDRESSABLE (result);
+         if (TREE_ADDRESSABLE (result))
+           mark_addressable (var);
        }
       if ((TREE_CODE (TREE_TYPE (result)) == COMPLEX_TYPE
            || TREE_CODE (TREE_TYPE (result)) == VECTOR_TYPE)
index df6923f..28753c1 100644 (file)
@@ -1082,6 +1082,15 @@ convert_nonlocal_omp_clauses (tree *pclauses, struct walk_stmt_info *wi)
            need_stmts = true;
          goto do_decl_clause;
 
+       case OMP_CLAUSE_LINEAR:
+         if (OMP_CLAUSE_LINEAR_GIMPLE_SEQ (clause))
+           need_stmts = true;
+         wi->val_only = true;
+         wi->is_lhs = false;
+         convert_nonlocal_reference_op (&OMP_CLAUSE_LINEAR_STEP (clause),
+                                        &dummy, wi);
+         goto do_decl_clause;
+
        case OMP_CLAUSE_PRIVATE:
        case OMP_CLAUSE_FIRSTPRIVATE:
        case OMP_CLAUSE_COPYPRIVATE:
@@ -1107,10 +1116,64 @@ convert_nonlocal_omp_clauses (tree *pclauses, struct walk_stmt_info *wi)
        case OMP_CLAUSE_FINAL:
        case OMP_CLAUSE_IF:
        case OMP_CLAUSE_NUM_THREADS:
+       case OMP_CLAUSE_DEPEND:
+       case OMP_CLAUSE_DEVICE:
+       case OMP_CLAUSE_NUM_TEAMS:
+       case OMP_CLAUSE_THREAD_LIMIT:
+       case OMP_CLAUSE_SAFELEN:
          wi->val_only = true;
          wi->is_lhs = false;
          convert_nonlocal_reference_op (&OMP_CLAUSE_OPERAND (clause, 0),
-                                        &dummy, wi);
+                                        &dummy, wi);
+         break;
+
+       case OMP_CLAUSE_DIST_SCHEDULE:
+         if (OMP_CLAUSE_DIST_SCHEDULE_CHUNK_EXPR (clause) != NULL)
+           {
+             wi->val_only = true;
+             wi->is_lhs = false;
+             convert_nonlocal_reference_op (&OMP_CLAUSE_OPERAND (clause, 0),
+                                            &dummy, wi);
+           }
+         break;
+
+       case OMP_CLAUSE_MAP:
+       case OMP_CLAUSE_TO:
+       case OMP_CLAUSE_FROM:
+         if (OMP_CLAUSE_SIZE (clause))
+           {
+             wi->val_only = true;
+             wi->is_lhs = false;
+             convert_nonlocal_reference_op (&OMP_CLAUSE_SIZE (clause),
+                                            &dummy, wi);
+           }
+         if (DECL_P (OMP_CLAUSE_DECL (clause)))
+           goto do_decl_clause;
+         wi->val_only = true;
+         wi->is_lhs = false;
+         walk_tree (&OMP_CLAUSE_DECL (clause), convert_nonlocal_reference_op,
+                    wi, NULL);
+         break;
+
+       case OMP_CLAUSE_ALIGNED:
+         if (OMP_CLAUSE_ALIGNED_ALIGNMENT (clause))
+           {
+             wi->val_only = true;
+             wi->is_lhs = false;
+             convert_nonlocal_reference_op
+               (&OMP_CLAUSE_ALIGNED_ALIGNMENT (clause), &dummy, wi);
+           }
+         /* Like do_decl_clause, but don't add any suppression.  */
+         decl = OMP_CLAUSE_DECL (clause);
+         if (TREE_CODE (decl) == VAR_DECL
+             && (TREE_STATIC (decl) || DECL_EXTERNAL (decl)))
+           break;
+         if (decl_function_context (decl) != info->context)
+           {
+             OMP_CLAUSE_DECL (clause) = get_nonlocal_debug_decl (info, decl);
+             if (OMP_CLAUSE_CODE (clause) != OMP_CLAUSE_PRIVATE)
+               need_chain = true;
+           }
          break;
 
        case OMP_CLAUSE_NOWAIT:
@@ -1120,6 +1183,7 @@ convert_nonlocal_omp_clauses (tree *pclauses, struct walk_stmt_info *wi)
        case OMP_CLAUSE_COLLAPSE:
        case OMP_CLAUSE_UNTIED:
        case OMP_CLAUSE_MERGEABLE:
+       case OMP_CLAUSE_PROC_BIND:
          break;
 
        default:
@@ -1157,6 +1221,12 @@ convert_nonlocal_omp_clauses (tree *pclauses, struct walk_stmt_info *wi)
                     &OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ (clause));
          break;
 
+       case OMP_CLAUSE_LINEAR:
+         walk_body (convert_nonlocal_reference_stmt,
+                    convert_nonlocal_reference_op, info,
+                    &OMP_CLAUSE_LINEAR_GIMPLE_SEQ (clause));
+         break;
+
        default:
          break;
        }
@@ -1304,10 +1374,42 @@ convert_nonlocal_reference_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p,
       break;
 
     case GIMPLE_OMP_TARGET:
+      if (gimple_omp_target_kind (stmt) != GF_OMP_TARGET_KIND_REGION)
+       {
+         save_suppress = info->suppress_expansion;
+         convert_nonlocal_omp_clauses (gimple_omp_target_clauses_ptr (stmt),
+                                       wi);
+         info->suppress_expansion = save_suppress;
+         walk_body (convert_nonlocal_reference_stmt,
+                    convert_nonlocal_reference_op, info,
+                    gimple_omp_body_ptr (stmt));
+         break;
+       }
       save_suppress = info->suppress_expansion;
-      convert_nonlocal_omp_clauses (gimple_omp_target_clauses_ptr (stmt), wi);
+      if (convert_nonlocal_omp_clauses (gimple_omp_target_clauses_ptr (stmt),
+                                       wi))
+       {
+         tree c, decl;
+         decl = get_chain_decl (info);
+         c = build_omp_clause (gimple_location (stmt), OMP_CLAUSE_MAP);
+         OMP_CLAUSE_DECL (c) = decl;
+         OMP_CLAUSE_MAP_KIND (c) = OMP_CLAUSE_MAP_TO;
+         OMP_CLAUSE_SIZE (c) = DECL_SIZE_UNIT (decl);
+         OMP_CLAUSE_CHAIN (c) = gimple_omp_target_clauses (stmt);
+         gimple_omp_target_set_clauses (stmt, c);
+       }
+
+      save_local_var_chain = info->new_local_var_chain;
+      info->new_local_var_chain = NULL;
+
       walk_body (convert_nonlocal_reference_stmt, convert_nonlocal_reference_op,
                 info, gimple_omp_body_ptr (stmt));
+
+      if (info->new_local_var_chain)
+       declare_vars (info->new_local_var_chain,
+                     gimple_seq_first_stmt (gimple_omp_body (stmt)),
+                     false);
+      info->new_local_var_chain = save_local_var_chain;
       info->suppress_expansion = save_suppress;
       break;
 
@@ -1605,6 +1707,15 @@ convert_local_omp_clauses (tree *pclauses, struct walk_stmt_info *wi)
            need_stmts = true;
          goto do_decl_clause;
 
+       case OMP_CLAUSE_LINEAR:
+         if (OMP_CLAUSE_LINEAR_GIMPLE_SEQ (clause))
+           need_stmts = true;
+         wi->val_only = true;
+         wi->is_lhs = false;
+         convert_local_reference_op (&OMP_CLAUSE_LINEAR_STEP (clause), &dummy,
+                                     wi);
+         goto do_decl_clause;
+
        case OMP_CLAUSE_PRIVATE:
        case OMP_CLAUSE_FIRSTPRIVATE:
        case OMP_CLAUSE_COPYPRIVATE:
@@ -1635,12 +1746,71 @@ convert_local_omp_clauses (tree *pclauses, struct walk_stmt_info *wi)
        case OMP_CLAUSE_FINAL:
        case OMP_CLAUSE_IF:
        case OMP_CLAUSE_NUM_THREADS:
+       case OMP_CLAUSE_DEPEND:
+       case OMP_CLAUSE_DEVICE:
+       case OMP_CLAUSE_NUM_TEAMS:
+       case OMP_CLAUSE_THREAD_LIMIT:
+       case OMP_CLAUSE_SAFELEN:
          wi->val_only = true;
          wi->is_lhs = false;
          convert_local_reference_op (&OMP_CLAUSE_OPERAND (clause, 0), &dummy,
                                      wi);
          break;
 
+       case OMP_CLAUSE_DIST_SCHEDULE:
+         if (OMP_CLAUSE_DIST_SCHEDULE_CHUNK_EXPR (clause) != NULL)
+           {
+             wi->val_only = true;
+             wi->is_lhs = false;
+             convert_local_reference_op (&OMP_CLAUSE_OPERAND (clause, 0),
+                                         &dummy, wi);
+           }
+         break;
+
+       case OMP_CLAUSE_MAP:
+       case OMP_CLAUSE_TO:
+       case OMP_CLAUSE_FROM:
+         if (OMP_CLAUSE_SIZE (clause))
+           {
+             wi->val_only = true;
+             wi->is_lhs = false;
+             convert_local_reference_op (&OMP_CLAUSE_SIZE (clause),
+                                         &dummy, wi);
+           }
+         if (DECL_P (OMP_CLAUSE_DECL (clause)))
+           goto do_decl_clause;
+         wi->val_only = true;
+         wi->is_lhs = false;
+         walk_tree (&OMP_CLAUSE_DECL (clause), convert_local_reference_op,
+                    wi, NULL);
+         break;
+
+       case OMP_CLAUSE_ALIGNED:
+         if (OMP_CLAUSE_ALIGNED_ALIGNMENT (clause))
+           {
+             wi->val_only = true;
+             wi->is_lhs = false;
+             convert_local_reference_op
+               (&OMP_CLAUSE_ALIGNED_ALIGNMENT (clause), &dummy, wi);
+           }
+         /* Like do_decl_clause, but don't add any suppression.  */
+         decl = OMP_CLAUSE_DECL (clause);
+         if (TREE_CODE (decl) == VAR_DECL
+             && (TREE_STATIC (decl) || DECL_EXTERNAL (decl)))
+           break;
+         if (decl_function_context (decl) == info->context
+             && !use_pointer_in_frame (decl))
+           {
+             tree field = lookup_field_for_decl (info, decl, NO_INSERT);
+             if (field)
+               {
+                 OMP_CLAUSE_DECL (clause)
+                   = get_local_debug_decl (info, decl, field);
+                 need_frame = true;
+               }
+           }
+         break;
+
        case OMP_CLAUSE_NOWAIT:
        case OMP_CLAUSE_ORDERED:
        case OMP_CLAUSE_DEFAULT:
@@ -1648,6 +1818,7 @@ convert_local_omp_clauses (tree *pclauses, struct walk_stmt_info *wi)
        case OMP_CLAUSE_COLLAPSE:
        case OMP_CLAUSE_UNTIED:
        case OMP_CLAUSE_MERGEABLE:
+       case OMP_CLAUSE_PROC_BIND:
          break;
 
        default:
@@ -1685,6 +1856,12 @@ convert_local_omp_clauses (tree *pclauses, struct walk_stmt_info *wi)
                     &OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ (clause));
          break;
 
+       case OMP_CLAUSE_LINEAR:
+         walk_body (convert_local_reference_stmt,
+                    convert_local_reference_op, info,
+                    &OMP_CLAUSE_LINEAR_GIMPLE_SEQ (clause));
+         break;
+
        default:
          break;
        }
@@ -1763,10 +1940,38 @@ convert_local_reference_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p,
       break;
 
     case GIMPLE_OMP_TARGET:
+      if (gimple_omp_target_kind (stmt) != GF_OMP_TARGET_KIND_REGION)
+       {
+         save_suppress = info->suppress_expansion;
+         convert_local_omp_clauses (gimple_omp_target_clauses_ptr (stmt), wi);
+         info->suppress_expansion = save_suppress;
+         walk_body (convert_local_reference_stmt, convert_local_reference_op,
+                    info, gimple_omp_body_ptr (stmt));
+         break;
+       }
       save_suppress = info->suppress_expansion;
-      convert_local_omp_clauses (gimple_omp_target_clauses_ptr (stmt), wi);
-      walk_body (convert_local_reference_stmt, convert_local_reference_op,
-                info, gimple_omp_body_ptr (stmt));
+      if (convert_local_omp_clauses (gimple_omp_target_clauses_ptr (stmt), wi))
+       {
+         tree c;
+         (void) get_frame_type (info);
+         c = build_omp_clause (gimple_location (stmt), OMP_CLAUSE_MAP);
+         OMP_CLAUSE_DECL (c) = info->frame_decl;
+         OMP_CLAUSE_MAP_KIND (c) = OMP_CLAUSE_MAP_TOFROM;
+         OMP_CLAUSE_SIZE (c) = DECL_SIZE_UNIT (info->frame_decl);
+         OMP_CLAUSE_CHAIN (c) = gimple_omp_target_clauses (stmt);
+         gimple_omp_target_set_clauses (stmt, c);
+       }
+
+      save_local_var_chain = info->new_local_var_chain;
+      info->new_local_var_chain = NULL;
+
+      walk_body (convert_local_reference_stmt, convert_local_reference_op, info,
+                gimple_omp_body_ptr (stmt));
+
+      if (info->new_local_var_chain)
+       declare_vars (info->new_local_var_chain,
+                     gimple_seq_first_stmt (gimple_omp_body (stmt)), false);
+      info->new_local_var_chain = save_local_var_chain;
       info->suppress_expansion = save_suppress;
       break;
 
@@ -2067,6 +2272,13 @@ convert_tramp_reference_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p,
        break;
       }
 
+    case GIMPLE_OMP_TARGET:
+      if (gimple_omp_target_kind (stmt) != GF_OMP_TARGET_KIND_REGION)
+       {
+         *handled_ops_p = false;
+         return NULL_TREE;
+       }
+      /* FALLTHRU */
     case GIMPLE_OMP_PARALLEL:
     case GIMPLE_OMP_TASK:
       {
@@ -2087,7 +2299,6 @@ convert_tramp_reference_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p,
     default:
       *handled_ops_p = false;
       return NULL_TREE;
-      break;
     }
 
   *handled_ops_p = true;
@@ -2159,6 +2370,42 @@ convert_gimple_call (gimple_stmt_iterator *gsi, bool *handled_ops_p,
       info->static_chain_added |= save_static_chain_added;
       break;
 
+    case GIMPLE_OMP_TARGET:
+      if (gimple_omp_target_kind (stmt) != GF_OMP_TARGET_KIND_REGION)
+       {
+         walk_body (convert_gimple_call, NULL, info, gimple_omp_body_ptr (stmt));
+         break;
+       }
+      save_static_chain_added = info->static_chain_added;
+      info->static_chain_added = 0;
+      walk_body (convert_gimple_call, NULL, info, gimple_omp_body_ptr (stmt));
+      for (i = 0; i < 2; i++)
+       {
+         tree c, decl;
+         if ((info->static_chain_added & (1 << i)) == 0)
+           continue;
+         decl = i ? get_chain_decl (info) : info->frame_decl;
+         /* Don't add CHAIN.* or FRAME.* twice.  */
+         for (c = gimple_omp_target_clauses (stmt);
+              c;
+              c = OMP_CLAUSE_CHAIN (c))
+           if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_MAP
+               && OMP_CLAUSE_DECL (c) == decl)
+             break;
+         if (c == NULL)
+           {
+             c = build_omp_clause (gimple_location (stmt), OMP_CLAUSE_MAP);
+             OMP_CLAUSE_DECL (c) = decl;
+             OMP_CLAUSE_MAP_KIND (c)
+               = i ? OMP_CLAUSE_MAP_TO : OMP_CLAUSE_MAP_TOFROM;
+             OMP_CLAUSE_SIZE (c) = DECL_SIZE_UNIT (decl);
+             OMP_CLAUSE_CHAIN (c) = gimple_omp_target_clauses (stmt);
+             gimple_omp_target_set_clauses (stmt, c);
+           }
+       }
+      info->static_chain_added |= save_static_chain_added;
+      break;
+
     case GIMPLE_OMP_FOR:
       walk_body (convert_gimple_call, NULL, info,
                 gimple_omp_for_pre_body_ptr (stmt));
@@ -2166,7 +2413,6 @@ convert_gimple_call (gimple_stmt_iterator *gsi, bool *handled_ops_p,
     case GIMPLE_OMP_SECTIONS:
     case GIMPLE_OMP_SECTION:
     case GIMPLE_OMP_SINGLE:
-    case GIMPLE_OMP_TARGET:
     case GIMPLE_OMP_TEAMS:
     case GIMPLE_OMP_MASTER:
     case GIMPLE_OMP_TASKGROUP:
index 83d5ca6..d6f39d8 100644 (file)
@@ -499,6 +499,7 @@ dump_omp_clause (pretty_printer *buffer, tree clause, int spc, int flags)
          pp_string (buffer, "alloc");
          break;
        case OMP_CLAUSE_MAP_TO:
+       case OMP_CLAUSE_MAP_TO_PSET:
          pp_string (buffer, "to");
          break;
        case OMP_CLAUSE_MAP_FROM:
@@ -519,6 +520,9 @@ dump_omp_clause (pretty_printer *buffer, tree clause, int spc, int flags)
          if (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_MAP
              && OMP_CLAUSE_MAP_KIND (clause) == OMP_CLAUSE_MAP_POINTER)
            pp_string (buffer, " [pointer assign, bias: ");
+         else if (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_MAP
+                  && OMP_CLAUSE_MAP_KIND (clause) == OMP_CLAUSE_MAP_TO_PSET)
+           pp_string (buffer, " [pointer set, len: ");
          else
            pp_string (buffer, " [len: ");
          dump_generic_node (buffer, OMP_CLAUSE_SIZE (clause),
index e706275..cdf3166 100644 (file)
@@ -835,8 +835,8 @@ nonoverlapping_component_refs_of_decl_p (tree ref1, tree ref2)
       /* ??? We cannot simply use the type of operand #0 of the refs here
         as the Fortran compiler smuggles type punning into COMPONENT_REFs
         for common blocks instead of using unions like everyone else.  */
-      tree type1 = TYPE_MAIN_VARIANT (DECL_CONTEXT (field1));
-      tree type2 = TYPE_MAIN_VARIANT (DECL_CONTEXT (field2));
+      tree type1 = DECL_CONTEXT (field1);
+      tree type2 = DECL_CONTEXT (field2);
 
       /* We cannot disambiguate fields in a union or qualified union.  */
       if (type1 != type2 || TREE_CODE (type1) != RECORD_TYPE)
index be28fb0..d02d72b 100644 (file)
@@ -127,7 +127,11 @@ bb_no_side_effects_p (basic_block bb)
     {
       gimple stmt = gsi_stmt (gsi);
 
+      if (is_gimple_debug (stmt))
+       continue;
+
       if (gimple_has_side_effects (stmt)
+         || gimple_could_trap_p (stmt)
          || gimple_vuse (stmt))
        return false;
     }
@@ -229,7 +233,8 @@ recognize_single_bit_test (gimple cond, tree *name, tree *bit, bool inv)
       while (is_gimple_assign (stmt)
             && ((CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (stmt))
                  && (TYPE_PRECISION (TREE_TYPE (gimple_assign_lhs (stmt)))
-                     <= TYPE_PRECISION (TREE_TYPE (gimple_assign_rhs1 (stmt)))))
+                     <= TYPE_PRECISION (TREE_TYPE (gimple_assign_rhs1 (stmt))))
+                 && TREE_CODE (gimple_assign_rhs1 (stmt)) == SSA_NAME)
                 || gimple_assign_ssa_name_copy_p (stmt)))
        stmt = SSA_NAME_DEF_STMT (gimple_assign_rhs1 (stmt));
 
index c75f257..1b40190 100644 (file)
@@ -1544,15 +1544,6 @@ analyze_memory_references (void)
   struct loop *loop, *outer;
   unsigned i, n;
 
-#if 0
-  /* Initialize bb_loop_postorder with a mapping from loop->num to
-     its postorder index.  */
-  i = 0;
-  bb_loop_postorder = XNEWVEC (unsigned, number_of_loops (cfun));
-  FOR_EACH_LOOP (loop, LI_FROM_INNERMOST)
-    bb_loop_postorder[loop->num] = i++;
-#endif
-
   /* Collect all basic-blocks in loops and sort them after their
      loops postorder.  */
   i = 0;
@@ -1807,6 +1798,7 @@ execute_sm_if_changed (edge ex, tree mem, tree tmp_var, tree flag)
   gimple_stmt_iterator gsi;
   gimple stmt;
   struct prev_flag_edges *prev_edges = (struct prev_flag_edges *) ex->aux;
+  bool irr = ex->flags & EDGE_IRREDUCIBLE_LOOP;
 
   /* ?? Insert store after previous store if applicable.  See note
      below.  */
@@ -1821,8 +1813,9 @@ execute_sm_if_changed (edge ex, tree mem, tree tmp_var, tree flag)
   old_dest = ex->dest;
   new_bb = split_edge (ex);
   then_bb = create_empty_bb (new_bb);
-  if (current_loops && new_bb->loop_father)
-    add_bb_to_loop (then_bb, new_bb->loop_father);
+  if (irr)
+    then_bb->flags = BB_IRREDUCIBLE_LOOP;
+  add_bb_to_loop (then_bb, new_bb->loop_father);
 
   gsi = gsi_start_bb (new_bb);
   stmt = gimple_build_cond (NE_EXPR, flag, boolean_false_node,
@@ -1834,9 +1827,12 @@ execute_sm_if_changed (edge ex, tree mem, tree tmp_var, tree flag)
   stmt = gimple_build_assign (unshare_expr (mem), tmp_var);
   gsi_insert_after (&gsi, stmt, GSI_CONTINUE_LINKING);
 
-  make_edge (new_bb, then_bb, EDGE_TRUE_VALUE);
-  make_edge (new_bb, old_dest, EDGE_FALSE_VALUE);
-  then_old_edge = make_edge (then_bb, old_dest, EDGE_FALLTHRU);
+  make_edge (new_bb, then_bb,
+            EDGE_TRUE_VALUE | (irr ? EDGE_IRREDUCIBLE_LOOP : 0));
+  make_edge (new_bb, old_dest,
+            EDGE_FALSE_VALUE | (irr ? EDGE_IRREDUCIBLE_LOOP : 0));
+  then_old_edge = make_edge (then_bb, old_dest,
+                            EDGE_FALLTHRU | (irr ? EDGE_IRREDUCIBLE_LOOP : 0));
 
   set_immediate_dominator (CDI_DOMINATORS, then_bb, new_bb);
 
index 9ff857c..292ced1 100644 (file)
@@ -1620,7 +1620,7 @@ make_pass_cse_sincos (gcc::context *ctxt)
 
 struct symbolic_number {
   unsigned HOST_WIDEST_INT n;
-  int size;
+  tree type;
 };
 
 /* Perform a SHIFT or ROTATE operation by COUNT bits on symbolic
@@ -1632,13 +1632,15 @@ do_shift_rotate (enum tree_code code,
                 struct symbolic_number *n,
                 int count)
 {
+  int bitsize = TYPE_PRECISION (n->type);
+
   if (count % 8 != 0)
     return false;
 
   /* Zero out the extra bits of N in order to avoid them being shifted
      into the significant bits.  */
-  if (n->size < (int)sizeof (HOST_WIDEST_INT))
-    n->n &= ((unsigned HOST_WIDEST_INT)1 << (n->size * BITS_PER_UNIT)) - 1;
+  if (bitsize < 8 * (int)sizeof (HOST_WIDEST_INT))
+    n->n &= ((unsigned HOST_WIDEST_INT)1 << bitsize) - 1;
 
   switch (code)
     {
@@ -1646,20 +1648,24 @@ do_shift_rotate (enum tree_code code,
       n->n <<= count;
       break;
     case RSHIFT_EXPR:
+      /* Arithmetic shift of signed type: result is dependent on the value.  */
+      if (!TYPE_UNSIGNED (n->type)
+         && (n->n & ((unsigned HOST_WIDEST_INT) 0xff << (bitsize - 8))))
+       return false;
       n->n >>= count;
       break;
     case LROTATE_EXPR:
-      n->n = (n->n << count) | (n->n >> ((n->size * BITS_PER_UNIT) - count));
+      n->n = (n->n << count) | (n->n >> (bitsize - count));
       break;
     case RROTATE_EXPR:
-      n->n = (n->n >> count) | (n->n << ((n->size * BITS_PER_UNIT) - count));
+      n->n = (n->n >> count) | (n->n << (bitsize - count));
       break;
     default:
       return false;
     }
   /* Zero unused bits for size.  */
-  if (n->size < (int)sizeof (HOST_WIDEST_INT))
-    n->n &= ((unsigned HOST_WIDEST_INT)1 << (n->size * BITS_PER_UNIT)) - 1;
+  if (bitsize < 8 * (int)sizeof (HOST_WIDEST_INT))
+    n->n &= ((unsigned HOST_WIDEST_INT)1 << bitsize) - 1;
   return true;
 }
 
@@ -1676,7 +1682,7 @@ verify_symbolic_number_p (struct symbolic_number *n, gimple stmt)
   if (TREE_CODE (lhs_type) != INTEGER_TYPE)
     return false;
 
-  if (TYPE_PRECISION (lhs_type) != n->size * BITS_PER_UNIT)
+  if (TYPE_PRECISION (lhs_type) != TYPE_PRECISION (n->type))
     return false;
 
   return true;
@@ -1733,20 +1739,23 @@ find_bswap_1 (gimple stmt, struct symbolic_number *n, int limit)
         to initialize the symbolic number.  */
       if (!source_expr1)
        {
+         int size;
+
          /* Set up the symbolic number N by setting each byte to a
             value between 1 and the byte size of rhs1.  The highest
             order byte is set to n->size and the lowest order
             byte to 1.  */
-         n->size = TYPE_PRECISION (TREE_TYPE (rhs1));
-         if (n->size % BITS_PER_UNIT != 0)
+         n->type = TREE_TYPE (rhs1);
+         size = TYPE_PRECISION (n->type);
+         if (size % BITS_PER_UNIT != 0)
            return NULL_TREE;
-         n->size /= BITS_PER_UNIT;
+         size /= BITS_PER_UNIT;
          n->n = (sizeof (HOST_WIDEST_INT) < 8 ? 0 :
                  (unsigned HOST_WIDEST_INT)0x08070605 << 32 | 0x04030201);
 
-         if (n->size < (int)sizeof (HOST_WIDEST_INT))
+         if (size < (int)sizeof (HOST_WIDEST_INT))
            n->n &= ((unsigned HOST_WIDEST_INT)1 <<
-                    (n->size * BITS_PER_UNIT)) - 1;
+                    (size * BITS_PER_UNIT)) - 1;
 
          source_expr1 = rhs1;
        }
@@ -1755,12 +1764,12 @@ find_bswap_1 (gimple stmt, struct symbolic_number *n, int limit)
        {
        case BIT_AND_EXPR:
          {
-           int i;
+           int i, size = TYPE_PRECISION (n->type) / BITS_PER_UNIT;
            unsigned HOST_WIDEST_INT val = widest_int_cst_value (rhs2);
            unsigned HOST_WIDEST_INT tmp = val;
 
            /* Only constants masking full bytes are allowed.  */
-           for (i = 0; i < n->size; i++, tmp >>= BITS_PER_UNIT)
+           for (i = 0; i < size; i++, tmp >>= BITS_PER_UNIT)
              if ((tmp & 0xff) != 0 && (tmp & 0xff) != 0xff)
                return NULL_TREE;
 
@@ -1776,19 +1785,29 @@ find_bswap_1 (gimple stmt, struct symbolic_number *n, int limit)
          break;
        CASE_CONVERT:
          {
-           int type_size;
+           int type_size, old_type_size;
+           tree type;
 
-           type_size = TYPE_PRECISION (gimple_expr_type (stmt));
+           type = gimple_expr_type (stmt);
+           type_size = TYPE_PRECISION (type);
            if (type_size % BITS_PER_UNIT != 0)
              return NULL_TREE;
 
+           /* Sign extension: result is dependent on the value.  */
+           old_type_size = TYPE_PRECISION (n->type);
+           if (!TYPE_UNSIGNED (n->type)
+               && type_size > old_type_size
+               && n->n &
+                  ((unsigned HOST_WIDEST_INT) 0xff << (old_type_size - 8)))
+             return NULL_TREE;
+
            if (type_size / BITS_PER_UNIT < (int)(sizeof (HOST_WIDEST_INT)))
              {
                /* If STMT casts to a smaller type mask out the bits not
                   belonging to the target type.  */
                n->n &= ((unsigned HOST_WIDEST_INT)1 << type_size) - 1;
              }
-           n->size = type_size / BITS_PER_UNIT;
+           n->type = type;
          }
          break;
        default:
@@ -1801,7 +1820,7 @@ find_bswap_1 (gimple stmt, struct symbolic_number *n, int limit)
 
   if (rhs_class == GIMPLE_BINARY_RHS)
     {
-      int i;
+      int i, size;
       struct symbolic_number n1, n2;
       unsigned HOST_WIDEST_INT mask;
       tree source_expr2;
@@ -1825,11 +1844,12 @@ find_bswap_1 (gimple stmt, struct symbolic_number *n, int limit)
          source_expr2 = find_bswap_1 (rhs2_stmt, &n2, limit - 1);
 
          if (source_expr1 != source_expr2
-             || n1.size != n2.size)
+             || TYPE_PRECISION (n1.type) != TYPE_PRECISION (n2.type))
            return NULL_TREE;
 
-         n->size = n1.size;
-         for (i = 0, mask = 0xff; i < n->size; i++, mask <<= BITS_PER_UNIT)
+         n->type = n1.type;
+         size = TYPE_PRECISION (n->type) / BITS_PER_UNIT;
+         for (i = 0, mask = 0xff; i < size; i++, mask <<= BITS_PER_UNIT)
            {
              unsigned HOST_WIDEST_INT masked1, masked2;
 
@@ -1868,7 +1888,7 @@ find_bswap (gimple stmt)
 
   struct symbolic_number n;
   tree source_expr;
-  int limit;
+  int limit, bitsize;
 
   /* The last parameter determines the depth search limit.  It usually
      correlates directly to the number of bytes to be touched.  We
@@ -1883,13 +1903,14 @@ find_bswap (gimple stmt)
     return NULL_TREE;
 
   /* Zero out the extra bits of N and CMP.  */
-  if (n.size < (int)sizeof (HOST_WIDEST_INT))
+  bitsize = TYPE_PRECISION (n.type);
+  if (bitsize < 8 * (int)sizeof (HOST_WIDEST_INT))
     {
       unsigned HOST_WIDEST_INT mask =
-       ((unsigned HOST_WIDEST_INT)1 << (n.size * BITS_PER_UNIT)) - 1;
+       ((unsigned HOST_WIDEST_INT)1 << bitsize) - 1;
 
       n.n &= mask;
-      cmp >>= (sizeof (HOST_WIDEST_INT) - n.size) * BITS_PER_UNIT;
+      cmp >>= sizeof (HOST_WIDEST_INT) * BITS_PER_UNIT - bitsize;
     }
 
   /* A complete byte swap should make the symbolic number to start
index 840d7e7..172b638 100644 (file)
@@ -571,8 +571,18 @@ valid_gimple_rhs_p (tree expr)
       /* All constants are ok.  */
       break;
 
-    case tcc_binary:
     case tcc_comparison:
+      /* GENERIC allows comparisons with non-boolean types, reject
+         those for GIMPLE.  Let vector-typed comparisons pass - rules
+        for GENERIC and GIMPLE are the same here.  */
+      if (!(INTEGRAL_TYPE_P (TREE_TYPE (expr))
+           && (TREE_CODE (TREE_TYPE (expr)) == BOOLEAN_TYPE
+               || TYPE_PRECISION (TREE_TYPE (expr)) == 1))
+         && TREE_CODE (TREE_TYPE (expr)) != VECTOR_TYPE)
+       return false;
+
+      /* Fallthru.  */
+    case tcc_binary:
       if (!is_gimple_val (TREE_OPERAND (expr, 0))
          || !is_gimple_val (TREE_OPERAND (expr, 1)))
        return false;
index e9e29e5..fce2a6e 100644 (file)
@@ -221,6 +221,35 @@ static struct pointer_map_t *operand_rank;
 static long get_rank (tree);
 static bool reassoc_stmt_dominates_stmt_p (gimple, gimple);
 
+/* Wrapper around gsi_remove, which adjusts gimple_uid of debug stmts
+   possibly added by gsi_remove.  */
+
+bool
+reassoc_remove_stmt (gimple_stmt_iterator *gsi)
+{
+  gimple stmt = gsi_stmt (*gsi);
+
+  if (!MAY_HAVE_DEBUG_STMTS || gimple_code (stmt) == GIMPLE_PHI)
+    return gsi_remove (gsi, true);
+
+  gimple_stmt_iterator prev = *gsi;
+  gsi_prev (&prev);
+  unsigned uid = gimple_uid (stmt);
+  basic_block bb = gimple_bb (stmt);
+  bool ret = gsi_remove (gsi, true);
+  if (!gsi_end_p (prev))
+    gsi_next (&prev);
+  else
+    prev = gsi_start_bb (bb);
+  gimple end_stmt = gsi_stmt (*gsi);
+  while ((stmt = gsi_stmt (prev)) != end_stmt)
+    {
+      gcc_assert (stmt && is_gimple_debug (stmt) && gimple_uid (stmt) == 0);
+      gimple_set_uid (stmt, uid);
+      gsi_next (&prev);
+    }
+  return ret;
+}
 
 /* Bias amount for loop-carried phis.  We want this to be larger than
    the depth of any reassociation tree we can see, but not larger than
@@ -1123,7 +1152,7 @@ propagate_op_to_single_use (tree op, gimple stmt, tree *def)
     update_stmt (use_stmt);
   gsi = gsi_for_stmt (stmt);
   unlink_stmt_vdef (stmt);
-  gsi_remove (&gsi, true);
+  reassoc_remove_stmt (&gsi);
   release_defs (stmt);
 }
 
@@ -3072,7 +3101,7 @@ remove_visited_stmt_chain (tree var)
        {
          var = gimple_assign_rhs1 (stmt);
          gsi = gsi_for_stmt (stmt);
-         gsi_remove (&gsi, true);
+         reassoc_remove_stmt (&gsi);
          release_defs (stmt);
        }
       else
@@ -3494,7 +3523,7 @@ linearize_expr (gimple stmt)
   update_stmt (stmt);
 
   gsi = gsi_for_stmt (oldbinrhs);
-  gsi_remove (&gsi, true);
+  reassoc_remove_stmt (&gsi);
   release_defs (oldbinrhs);
 
   gimple_set_visited (stmt, true);
@@ -3896,7 +3925,7 @@ repropagate_negates (void)
              gimple_assign_set_rhs_with_ops (&gsi2, NEGATE_EXPR, x, NULL);
              user = gsi_stmt (gsi2);
              update_stmt (user);
-             gsi_remove (&gsi, true);
+             reassoc_remove_stmt (&gsi);
              release_defs (feed);
              plus_negates.safe_push (gimple_assign_lhs (user));
            }
@@ -4413,7 +4442,7 @@ reassociate_bb (basic_block bb)
                 reassociations.  */
              if (has_zero_uses (gimple_get_lhs (stmt)))
                {
-                 gsi_remove (&gsi, true);
+                 reassoc_remove_stmt (&gsi);
                  release_defs (stmt);
                  /* We might end up removing the last stmt above which
                     places the iterator to the end of the sequence.
index f7ec8b6..5bf4e92 100644 (file)
@@ -3074,33 +3074,12 @@ visit_phi (gimple phi)
   /* If all value numbered to the same value, the phi node has that
      value.  */
   if (allsame)
-    {
-      if (is_gimple_min_invariant (sameval))
-       {
-         VN_INFO (PHI_RESULT (phi))->has_constants = true;
-         VN_INFO (PHI_RESULT (phi))->expr = sameval;
-       }
-      else
-       {
-         VN_INFO (PHI_RESULT (phi))->has_constants = false;
-         VN_INFO (PHI_RESULT (phi))->expr = sameval;
-       }
-
-      if (TREE_CODE (sameval) == SSA_NAME)
-       return visit_copy (PHI_RESULT (phi), sameval);
-
-      return set_ssa_val_to (PHI_RESULT (phi), sameval);
-    }
+    return set_ssa_val_to (PHI_RESULT (phi), sameval);
 
   /* Otherwise, see if it is equivalent to a phi node in this block.  */
   result = vn_phi_lookup (phi);
   if (result)
-    {
-      if (TREE_CODE (result) == SSA_NAME)
-       changed = visit_copy (PHI_RESULT (phi), result);
-      else
-       changed = set_ssa_val_to (PHI_RESULT (phi), result);
-    }
+    changed = set_ssa_val_to (PHI_RESULT (phi), result);
   else
     {
       vn_phi_insert (phi, PHI_RESULT (phi));
@@ -3214,24 +3193,18 @@ simplify_binary_expression (gimple stmt)
      catch those with constants.  The goal here is to simultaneously
      combine constants between expressions, but avoid infinite
      expansion of expressions during simplification.  */
-  if (TREE_CODE (op0) == SSA_NAME)
-    {
-      if (VN_INFO (op0)->has_constants
+  op0 = vn_valueize (op0);
+  if (TREE_CODE (op0) == SSA_NAME
+      && (VN_INFO (op0)->has_constants
          || TREE_CODE_CLASS (code) == tcc_comparison
-         || code == COMPLEX_EXPR)
-       op0 = valueize_expr (vn_get_expr_for (op0));
-      else
-       op0 = vn_valueize (op0);
-    }
+         || code == COMPLEX_EXPR))
+    op0 = valueize_expr (vn_get_expr_for (op0));
 
-  if (TREE_CODE (op1) == SSA_NAME)
-    {
-      if (VN_INFO (op1)->has_constants
-         || code == COMPLEX_EXPR)
-       op1 = valueize_expr (vn_get_expr_for (op1));
-      else
-       op1 = vn_valueize (op1);
-    }
+  op1 = vn_valueize (op1);
+  if (TREE_CODE (op1) == SSA_NAME
+      && (VN_INFO (op1)->has_constants
+         || code == COMPLEX_EXPR))
+    op1 = valueize_expr (vn_get_expr_for (op1));
 
   /* Pointer plus constant can be represented as invariant address.
      Do so to allow further propatation, see also tree forwprop.  */
@@ -3289,24 +3262,28 @@ simplify_unary_expression (gimple stmt)
     return NULL_TREE;
 
   orig_op0 = op0;
-  if (VN_INFO (op0)->has_constants)
-    op0 = valueize_expr (vn_get_expr_for (op0));
-  else if (CONVERT_EXPR_CODE_P (code)
-          || code == REALPART_EXPR
-          || code == IMAGPART_EXPR
-          || code == VIEW_CONVERT_EXPR
-          || code == BIT_FIELD_REF)
+  op0 = vn_valueize (op0);
+  if (TREE_CODE (op0) == SSA_NAME)
     {
-      /* We want to do tree-combining on conversion-like expressions.
-         Make sure we feed only SSA_NAMEs or constants to fold though.  */
-      tree tem = valueize_expr (vn_get_expr_for (op0));
-      if (UNARY_CLASS_P (tem)
-         || BINARY_CLASS_P (tem)
-         || TREE_CODE (tem) == VIEW_CONVERT_EXPR
-         || TREE_CODE (tem) == SSA_NAME
-         || TREE_CODE (tem) == CONSTRUCTOR
-         || is_gimple_min_invariant (tem))
-       op0 = tem;
+      if (VN_INFO (op0)->has_constants)
+       op0 = valueize_expr (vn_get_expr_for (op0));
+      else if (CONVERT_EXPR_CODE_P (code)
+              || code == REALPART_EXPR
+              || code == IMAGPART_EXPR
+              || code == VIEW_CONVERT_EXPR
+              || code == BIT_FIELD_REF)
+       {
+         /* We want to do tree-combining on conversion-like expressions.
+            Make sure we feed only SSA_NAMEs or constants to fold though.  */
+         tree tem = valueize_expr (vn_get_expr_for (op0));
+         if (UNARY_CLASS_P (tem)
+             || BINARY_CLASS_P (tem)
+             || TREE_CODE (tem) == VIEW_CONVERT_EXPR
+             || TREE_CODE (tem) == SSA_NAME
+             || TREE_CODE (tem) == CONSTRUCTOR
+             || is_gimple_min_invariant (tem))
+           op0 = tem;
+       }
     }
 
   /* Avoid folding if nothing changed, but remember the expression.  */
index 8201cb4..abc99ba 100644 (file)
@@ -6091,6 +6091,10 @@ find_what_var_points_to (varinfo_t orig_vi)
                pt->ipa_escaped = 1;
              else
                pt->escaped = 1;
+             /* Expand some special vars of ESCAPED in-place here.  */
+             varinfo_t evi = get_varinfo (find (escaped_id));
+             if (bitmap_bit_p (evi->solution, nonlocal_id))
+               pt->nonlocal = 1;
            }
          else if (vi->id == nonlocal_id)
            pt->nonlocal = 1;
@@ -7264,10 +7268,7 @@ ipa_pta_execute (void)
       tree ptr;
       struct function *fn;
       unsigned i;
-      varinfo_t fi;
       basic_block bb;
-      struct pt_solution uses, clobbers;
-      struct cgraph_edge *e;
 
       /* Nodes without a body are not interesting.  */
       if (!cgraph_function_with_gimple_body_p (node) || node->clone_of)
@@ -7283,21 +7284,6 @@ ipa_pta_execute (void)
            find_what_p_points_to (ptr);
        }
 
-      /* Compute the call-use and call-clobber sets for all direct calls.  */
-      fi = lookup_vi_for_tree (node->decl);
-      gcc_assert (fi->is_fn_info);
-      clobbers
-       = find_what_var_points_to (first_vi_for_offset (fi, fi_clobbers));
-      uses = find_what_var_points_to (first_vi_for_offset (fi, fi_uses));
-      for (e = node->callers; e; e = e->next_caller)
-       {
-         if (!e->call_stmt)
-           continue;
-
-         *gimple_call_clobber_set (e->call_stmt) = clobbers;
-         *gimple_call_use_set (e->call_stmt) = uses;
-       }
-
       /* Compute the call-use and call-clobber sets for indirect calls
         and calls to external functions.  */
       FOR_EACH_BB_FN (bb, fn)
@@ -7308,17 +7294,27 @@ ipa_pta_execute (void)
            {
              gimple stmt = gsi_stmt (gsi);
              struct pt_solution *pt;
-             varinfo_t vi;
+             varinfo_t vi, fi;
              tree decl;
 
              if (!is_gimple_call (stmt))
                continue;
 
-             /* Handle direct calls to external functions.  */
+             /* Handle direct calls to functions with body.  */
              decl = gimple_call_fndecl (stmt);
              if (decl
-                 && (!(fi = lookup_vi_for_tree (decl))
-                     || !fi->is_fn_info))
+                 && (fi = lookup_vi_for_tree (decl))
+                 && fi->is_fn_info)
+               {
+                 *gimple_call_clobber_set (stmt)
+                    = find_what_var_points_to
+                        (first_vi_for_offset (fi, fi_clobbers));
+                 *gimple_call_use_set (stmt)
+                    = find_what_var_points_to
+                        (first_vi_for_offset (fi, fi_uses));
+               }
+             /* Handle direct calls to external functions.  */
+             else if (decl)
                {
                  pt = gimple_call_use_set (stmt);
                  if (gimple_call_flags (stmt) & ECF_CONST)
@@ -7362,10 +7358,9 @@ ipa_pta_execute (void)
                      pt->nonlocal = 1;
                    }
                }
-
              /* Handle indirect calls.  */
-             if (!decl
-                 && (fi = get_fi_for_callee (stmt)))
+             else if (!decl
+                      && (fi = get_fi_for_callee (stmt)))
                {
                  /* We need to accumulate all clobbers/uses of all possible
                     callees.  */
index f6b1ba0..aa7f829 100644 (file)
@@ -481,7 +481,11 @@ same_succ_hash (const_same_succ e)
        hashval = iterative_hash_hashval_t
          ((hashval_t) gimple_call_internal_fn (stmt), hashval);
       else
-       hashval = iterative_hash_expr (gimple_call_fn (stmt), hashval);
+       {
+         hashval = iterative_hash_expr (gimple_call_fn (stmt), hashval);
+         if (gimple_call_chain (stmt))
+           hashval = iterative_hash_expr (gimple_call_chain (stmt), hashval);
+       }
       for (i = 0; i < gimple_call_num_args (stmt); i++)
        {
          arg = gimple_call_arg (stmt, i);
@@ -1121,18 +1125,23 @@ gimple_equal_p (same_succ same_succ, gimple s1, gimple s2)
   switch (gimple_code (s1))
     {
     case GIMPLE_CALL:
-      if (gimple_call_num_args (s1) != gimple_call_num_args (s2))
-       return false;
       if (!gimple_call_same_target_p (s1, s2))
         return false;
 
+      t1 = gimple_call_chain (s1);
+      t2 = gimple_call_chain (s2);
+      if (!gimple_operand_equal_value_p (t1, t2))
+       return false;
+
+      if (gimple_call_num_args (s1) != gimple_call_num_args (s2))
+       return false;
+
       for (i = 0; i < gimple_call_num_args (s1); ++i)
        {
          t1 = gimple_call_arg (s1, i);
          t2 = gimple_call_arg (s2, i);
-         if (gimple_operand_equal_value_p (t1, t2))
-           continue;
-         return false;
+         if (!gimple_operand_equal_value_p (t1, t2))
+           return false;
        }
 
       lhs1 = gimple_get_lhs (s1);
index c447b72..c715e84 100644 (file)
@@ -199,9 +199,7 @@ record_temporary_equivalence (tree x, tree y, vec<tree> *stack)
    traversing back edges less painful.  */
 
 static bool
-record_temporary_equivalences_from_phis (edge e, vec<tree> *stack,
-                                        bool backedge_seen,
-                                        bitmap src_map, bitmap dst_map)
+record_temporary_equivalences_from_phis (edge e, vec<tree> *stack)
 {
   gimple_stmt_iterator gsi;
 
@@ -229,14 +227,6 @@ record_temporary_equivalences_from_phis (edge e, vec<tree> *stack,
        stmt_count++;
 
       record_temporary_equivalence (dst, src, stack);
-
-      /* If we have crossed a backedge, then start recording equivalences
-        we might need to invalidate.  */
-      if (backedge_seen && TREE_CODE (src) == SSA_NAME)
-       {
-         bitmap_set_bit (src_map, SSA_NAME_VERSION (src));
-         bitmap_set_bit (dst_map, SSA_NAME_VERSION (dst));
-       }
     }
   return true;
 }
@@ -294,29 +284,15 @@ fold_assignment_stmt (gimple stmt)
 /* A new value has been assigned to LHS.  If necessary, invalidate any
    equivalences that are no longer valid.  */
 static void
-invalidate_equivalences (tree lhs, vec<tree> *stack,
-                        bitmap src_map, bitmap dst_map)
+invalidate_equivalences (tree lhs, vec<tree> *stack)
 {
-  /* SRC_MAP contains the source SSA_NAMEs for equivalences created by PHI
-     nodes.  If an entry in SRC_MAP changes, there's some destination that
-     has been recorded as equivalent to the source and that equivalency
-     needs to be eliminated.  */
-  if (bitmap_bit_p (src_map, SSA_NAME_VERSION (lhs)))
-    {
-      unsigned int i;
-      bitmap_iterator bi;
-
-      /* We know that the LHS of STMT was used as the RHS in an equivalency
-        created by a PHI.  All the LHS of such PHIs were recorded into DST_MAP.
-        So we can iterate over them to see if any have the LHS of STMT as
-        an equivalence, and if so, remove the equivalence as it is no longer
-        valid.  */
-      EXECUTE_IF_SET_IN_BITMAP (dst_map, 0, i, bi)
-       {
-         if (SSA_NAME_VALUE (ssa_name (i)) == lhs)
-           record_temporary_equivalence (ssa_name (i), NULL_TREE, stack);
-       }
-    }
+
+  for (unsigned int i = 1; i < num_ssa_names; i++)
+    if (ssa_name (i) && SSA_NAME_VALUE (ssa_name (i)) == lhs)
+      record_temporary_equivalence (ssa_name (i), NULL_TREE, stack);
+
+  if (SSA_NAME_VALUE (lhs))
+    record_temporary_equivalence (lhs, NULL_TREE, stack);
 }
 
 /* Try to simplify each statement in E->dest, ultimately leading to
@@ -341,9 +317,7 @@ record_temporary_equivalences_from_stmts_at_dest (edge e,
                                                  vec<tree> *stack,
                                                  tree (*simplify) (gimple,
                                                                    gimple),
-                                                 bool backedge_seen,
-                                                 bitmap src_map,
-                                                 bitmap dst_map)
+                                                 bool backedge_seen)
 {
   gimple stmt = NULL;
   gimple_stmt_iterator gsi;
@@ -387,7 +361,22 @@ record_temporary_equivalences_from_stmts_at_dest (edge e,
           && (gimple_code (stmt) != GIMPLE_CALL
               || gimple_call_lhs (stmt) == NULL_TREE
               || TREE_CODE (gimple_call_lhs (stmt)) != SSA_NAME))
-       continue;
+       {
+         /* STMT might still have DEFS and we need to invalidate any known
+            equivalences for them.
+
+            Consider if STMT is a GIMPLE_ASM with one or more outputs that
+            feeds a conditional inside a loop.  We might derive an equivalence
+            due to the conditional.  */
+         tree op;
+         ssa_op_iter iter;
+
+         if (backedge_seen)
+           FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_DEF)
+             invalidate_equivalences (op, stack);
+
+         continue;
+       }
 
       /* The result of __builtin_object_size depends on all the arguments
         of a phi node. Temporarily using only one edge produces invalid
@@ -424,8 +413,7 @@ record_temporary_equivalences_from_stmts_at_dest (edge e,
              if (backedge_seen)
                {
                  tree lhs = gimple_get_lhs (stmt);
-                 record_temporary_equivalence (lhs, NULL_TREE, stack);
-                 invalidate_equivalences (lhs, stack, src_map, dst_map);
+                 invalidate_equivalences (lhs, stack);
                }
              continue;
            }
@@ -503,11 +491,7 @@ record_temporary_equivalences_from_stmts_at_dest (edge e,
              || is_gimple_min_invariant (cached_lhs)))
        record_temporary_equivalence (gimple_get_lhs (stmt), cached_lhs, stack);
       else if (backedge_seen)
-       record_temporary_equivalence (gimple_get_lhs (stmt), NULL_TREE, stack);
-
-      if (backedge_seen)
-       invalidate_equivalences (gimple_get_lhs (stmt), stack,
-                                src_map, dst_map);
+       invalidate_equivalences (gimple_get_lhs (stmt), stack);
     }
   return stmt;
 }
@@ -939,9 +923,14 @@ thread_around_empty_blocks (edge taken_edge,
    SIMPLIFY is a pass-specific function used to simplify statements.
 
    Our caller is responsible for restoring the state of the expression
-   and const_and_copies stacks.  */
+   and const_and_copies stacks.
 
-static bool
+   Positive return value is success.  Zero return value is failure, but
+   the block can still be duplicated as a joiner in a jump thread path,
+   negative indicates the block should not be duplicated and thus is not
+   suitable for a joiner in a jump threading path.  */
+
+static int
 thread_through_normal_block (edge e,
                             gimple dummy_cond,
                             bool handle_dominating_asserts,
@@ -949,9 +938,7 @@ thread_through_normal_block (edge e,
                             tree (*simplify) (gimple, gimple),
                             vec<jump_thread_edge *> *path,
                             bitmap visited,
-                            bool *backedge_seen_p,
-                            bitmap src_map,
-                            bitmap dst_map)
+                            bool *backedge_seen_p)
 {
   /* If we have traversed a backedge, then we do not want to look
      at certain expressions in the table that can not be relied upon.
@@ -960,19 +947,28 @@ thread_through_normal_block (edge e,
   if (*backedge_seen_p)
     simplify = dummy_simplify;
 
-  /* PHIs create temporary equivalences.  */
-  if (!record_temporary_equivalences_from_phis (e, stack, *backedge_seen_p,
-                                               src_map, dst_map))
-    return false;
+  /* PHIs create temporary equivalences.
+     Note that if we found a PHI that made the block non-threadable, then
+     we need to bubble that up to our caller in the same manner we do
+     when we prematurely stop processing statements below.  */
+  if (!record_temporary_equivalences_from_phis (e, stack))
+    return -1;
 
   /* Now walk each statement recording any context sensitive
      temporary equivalences we can detect.  */
   gimple stmt
     = record_temporary_equivalences_from_stmts_at_dest (e, stack, simplify,
-                                                       *backedge_seen_p,
-                                                       src_map, dst_map);
+                                                       *backedge_seen_p);
+
+  /* If we didn't look at all the statements, the most likely reason is
+     there were too many and thus duplicating this block is not profitable.
+
+     Also note if we do not look at all the statements, then we may not
+     have invalidated equivalences that are no longer valid if we threaded
+     around a loop.  Thus we must signal to our caller that this block
+     is not suitable for use as a joiner in a threading path.  */
   if (!stmt)
-    return false;
+    return -1;
 
   /* If we stopped at a COND_EXPR or SWITCH_EXPR, see if we know which arm
      will be taken.  */
@@ -996,7 +992,7 @@ thread_through_normal_block (edge e,
          if (dest == NULL
              || dest == e->dest
              || bitmap_bit_p (visited, dest->index))
-           return false;
+           return 0;
 
          /* Only push the EDGE_START_JUMP_THREAD marker if this is
             first edge on the path.  */
@@ -1030,10 +1026,10 @@ thread_through_normal_block (edge e,
                                      visited,
                                      path,
                                      backedge_seen_p);
-         return true;
+         return 1;
        }
     }
-  return false;
+  return 0;
 }
 
 /* We are exiting E->src, see if E->dest ends with a conditional
@@ -1071,8 +1067,6 @@ thread_across_edge (gimple dummy_cond,
                    tree (*simplify) (gimple, gimple))
 {
   bitmap visited = BITMAP_ALLOC (NULL);
-  bitmap src_map = BITMAP_ALLOC (NULL);
-  bitmap dst_map = BITMAP_ALLOC (NULL);
   bool backedge_seen;
 
   stmt_count = 0;
@@ -1085,25 +1079,40 @@ thread_across_edge (gimple dummy_cond,
   if (backedge_seen)
     simplify = dummy_simplify;
 
-  if (thread_through_normal_block (e, dummy_cond, handle_dominating_asserts,
-                                  stack, simplify, path, visited,
-                                  &backedge_seen, src_map, dst_map))
+  int threaded = thread_through_normal_block (e, dummy_cond,
+                                             handle_dominating_asserts,
+                                             stack, simplify, path,
+                                             visited, &backedge_seen);
+  if (threaded > 0)
     {
       propagate_threaded_block_debug_into (path->last ()->e->dest,
                                           e->dest);
       remove_temporary_equivalences (stack);
       BITMAP_FREE (visited);
-      BITMAP_FREE (src_map);
-      BITMAP_FREE (dst_map);
       register_jump_thread (path);
       return;
     }
   else
     {
-      /* There should be no edges on the path, so no need to walk through
-        the vector entries.  */
+      /* Negative and zero return values indicate no threading was possible,
+        thus there should be no edges on the thread path and no need to walk
+        through the vector entries.  */
       gcc_assert (path->length () == 0);
       path->release ();
+
+      /* A negative status indicates the target block was deemed too big to
+        duplicate.  Just quit now rather than trying to use the block as
+        a joiner in a jump threading path.
+
+        This prevents unnecessary code growth, but more importantly if we
+        do not look at all the statements in the block, then we may have
+        missed some invalidations if we had traversed a backedge!  */
+      if (threaded < 0)
+       {
+         BITMAP_FREE (visited);
+         remove_temporary_equivalences (stack);
+         return;
+       }
     }
 
  /* We were unable to determine what out edge from E->dest is taken.  However,
@@ -1129,26 +1138,15 @@ thread_across_edge (gimple dummy_cond,
        {
          remove_temporary_equivalences (stack);
          BITMAP_FREE (visited);
-         BITMAP_FREE (src_map);
-         BITMAP_FREE (dst_map);
          return;
        }
 
-    /* We need to restore the state of the maps to this point each loop
-       iteration.  */
-    bitmap src_map_copy = BITMAP_ALLOC (NULL);
-    bitmap dst_map_copy = BITMAP_ALLOC (NULL);
-    bitmap_copy (src_map_copy, src_map);
-    bitmap_copy (dst_map_copy, dst_map);
-
     /* Look at each successor of E->dest to see if we can thread through it.  */
     FOR_EACH_EDGE (taken_edge, ei, e->dest->succs)
       {
        /* Push a fresh marker so we can unwind the equivalences created
           for each of E->dest's successors.  */
        stack->safe_push (NULL_TREE);
-       bitmap_copy (src_map, src_map_copy);
-       bitmap_copy (dst_map, dst_map_copy);
      
        /* Avoid threading to any block we have already visited.  */
        bitmap_clear (visited);
@@ -1184,8 +1182,7 @@ thread_across_edge (gimple dummy_cond,
          found = thread_through_normal_block (path->last ()->e, dummy_cond,
                                               handle_dominating_asserts,
                                               stack, simplify, path, visited,
-                                              &backedge_seen,
-                                              src_map, dst_map);
+                                              &backedge_seen) > 0;
 
        /* If we were able to thread through a successor of E->dest, then
           record the jump threading opportunity.  */
@@ -1204,10 +1201,6 @@ thread_across_edge (gimple dummy_cond,
        remove_temporary_equivalences (stack);
       }
     BITMAP_FREE (visited);
-    BITMAP_FREE (src_map);
-    BITMAP_FREE (dst_map);
-    BITMAP_FREE (src_map_copy);
-    BITMAP_FREE (dst_map_copy);
   }
 
   remove_temporary_equivalences (stack);
index b02bb6b..1839f57 100644 (file)
@@ -167,6 +167,9 @@ unpack_ts_real_cst_value_fields (struct bitpack_d *bp, tree expr)
   REAL_VALUE_TYPE r;
   REAL_VALUE_TYPE *rp;
 
+  /* Clear all bits of the real value type so that we can later do
+     bitwise comparisons to see if two values are the same.  */
+  memset (&r, 0, sizeof r);
   r.cl = (unsigned) bp_unpack_value (bp, 2);
   r.decimal = (unsigned) bp_unpack_value (bp, 1);
   r.sign = (unsigned) bp_unpack_value (bp, 1);
index 3488c2f..0208631 100644 (file)
@@ -285,9 +285,19 @@ process_assignment (gimple stmt, gimple_stmt_iterator call, tree *m,
     {
       /* Reject a tailcall if the type conversion might need
         additional code.  */
-      if (gimple_assign_cast_p (stmt)
-         && TYPE_MODE (TREE_TYPE (dest)) != TYPE_MODE (TREE_TYPE (src_var)))
-       return false;
+      if (gimple_assign_cast_p (stmt))
+       {
+         if (TYPE_MODE (TREE_TYPE (dest)) != TYPE_MODE (TREE_TYPE (src_var)))
+           return false;
+
+         /* Even if the type modes are the same, if the precision of the
+            type is smaller than mode's precision,
+            reduce_to_bit_field_precision would generate additional code.  */
+         if (INTEGRAL_TYPE_P (TREE_TYPE (dest))
+             && (GET_MODE_PRECISION (TYPE_MODE (TREE_TYPE (dest)))
+                 > TYPE_PRECISION (TREE_TYPE (dest))))
+           return false;
+       }
 
       if (src_var != *ass_var)
        return false;
index fbc35a3..6622bd8 100644 (file)
@@ -373,11 +373,14 @@ vect_analyze_data_ref_dependence (struct data_dependence_relation *ddr,
                .. = a[i+1];
             where we will end up loading { a[i], a[i+1] } once, make
             sure that inserting group loads before the first load and
-            stores after the last store will do the right thing.  */
-         if ((STMT_VINFO_GROUPED_ACCESS (stmtinfo_a)
-              && GROUP_SAME_DR_STMT (stmtinfo_a))
-             || (STMT_VINFO_GROUPED_ACCESS (stmtinfo_b)
-                 && GROUP_SAME_DR_STMT (stmtinfo_b)))
+            stores after the last store will do the right thing.
+            Similar for groups like
+               a[i] = ...;
+               ... = a[i];
+               a[i+1] = ...;
+            where loads from the group interleave with the store.  */
+         if (STMT_VINFO_GROUPED_ACCESS (stmtinfo_a)
+             || STMT_VINFO_GROUPED_ACCESS (stmtinfo_b))
            {
              gimple earlier_stmt;
              earlier_stmt = get_earlier_stmt (DR_STMT (dra), DR_STMT (drb));
@@ -3172,7 +3175,7 @@ vect_check_gather (gimple stmt, loop_vec_info loop_vinfo, tree *basep,
 bool
 vect_analyze_data_refs (loop_vec_info loop_vinfo,
                        bb_vec_info bb_vinfo,
-                       int *min_vf)
+                       int *min_vf, unsigned *n_stmts)
 {
   struct loop *loop = NULL;
   basic_block bb = NULL;
@@ -3207,6 +3210,9 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo,
          for (gsi = gsi_start_bb (bbs[i]); !gsi_end_p (gsi); gsi_next (&gsi))
            {
              gimple stmt = gsi_stmt (gsi);
+             if (is_gimple_debug (stmt))
+               continue;
+             ++*n_stmts;
              if (!find_data_references_in_stmt (loop, stmt, &datarefs))
                {
                  if (is_gimple_call (stmt) && loop->safelen)
@@ -3260,6 +3266,9 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo,
       for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
        {
          gimple stmt = gsi_stmt (gsi);
+         if (is_gimple_debug (stmt))
+           continue;
+         ++*n_stmts;
          if (!find_data_references_in_stmt (NULL, stmt,
                                             &BB_VINFO_DATAREFS (bb_vinfo)))
            {
index d00a4b4..0cc83b4 100644 (file)
@@ -971,7 +971,8 @@ expand_vector_operation (gimple_stmt_iterator *gsi, tree type, tree compute_type
 
          if (!optimize
              || !VECTOR_INTEGER_TYPE_P (type)
-             || TREE_CODE (rhs2) != VECTOR_CST)
+             || TREE_CODE (rhs2) != VECTOR_CST
+             || !VECTOR_MODE_P (TYPE_MODE (type)))
            break;
 
          ret = expand_vector_divmod (gsi, type, rhs1, rhs2, code);
@@ -1335,15 +1336,67 @@ lower_vec_perm (gimple_stmt_iterator *gsi)
   update_stmt (gsi_stmt (*gsi));
 }
 
+/* Return type in which CODE operation with optab OP can be
+   computed.  */
+
+static tree
+get_compute_type (enum tree_code code, optab op, tree type)
+{
+  /* For very wide vectors, try using a smaller vector mode.  */
+  tree compute_type = type;
+  if (op
+      && (!VECTOR_MODE_P (TYPE_MODE (type))
+         || optab_handler (op, TYPE_MODE (type)) == CODE_FOR_nothing))
+    {
+      tree vector_compute_type
+       = type_for_widest_vector_mode (TREE_TYPE (type), op);
+      if (vector_compute_type != NULL_TREE
+         && (TYPE_VECTOR_SUBPARTS (vector_compute_type)
+             < TYPE_VECTOR_SUBPARTS (compute_type))
+         && (optab_handler (op, TYPE_MODE (vector_compute_type))
+             != CODE_FOR_nothing))
+       compute_type = vector_compute_type;
+    }
+
+  /* If we are breaking a BLKmode vector into smaller pieces,
+     type_for_widest_vector_mode has already looked into the optab,
+     so skip these checks.  */
+  if (compute_type == type)
+    {
+      enum machine_mode compute_mode = TYPE_MODE (compute_type);
+      if (VECTOR_MODE_P (compute_mode))
+       {
+         if (op && optab_handler (op, compute_mode) != CODE_FOR_nothing)
+           return compute_type;
+         if (code == MULT_HIGHPART_EXPR
+             && can_mult_highpart_p (compute_mode,
+                                     TYPE_UNSIGNED (compute_type)))
+           return compute_type;
+       }
+      /* There is no operation in hardware, so fall back to scalars.  */
+      compute_type = TREE_TYPE (type);
+    }
+
+  return compute_type;
+}
+
+/* Helper function of expand_vector_operations_1.  Return number of
+   vector elements for vector types or 1 for other types.  */
+
+static inline int
+count_type_subparts (tree type)
+{
+  return VECTOR_TYPE_P (type) ? TYPE_VECTOR_SUBPARTS (type) : 1;
+}
+
 /* Process one statement.  If we identify a vector operation, expand it.  */
 
 static void
 expand_vector_operations_1 (gimple_stmt_iterator *gsi)
 {
   gimple stmt = gsi_stmt (*gsi);
-  tree lhs, rhs1, rhs2 = NULL, type, compute_type;
+  tree lhs, rhs1, rhs2 = NULL, type, compute_type = NULL_TREE;
   enum tree_code code;
-  enum machine_mode compute_mode;
   optab op = unknown_optab;
   enum gimple_rhs_class rhs_class;
   tree new_rhs;
@@ -1456,11 +1509,76 @@ expand_vector_operations_1 (gimple_stmt_iterator *gsi)
        {
           op = optab_for_tree_code (code, type, optab_scalar);
 
+         compute_type = get_compute_type (code, op, type);
+         if (compute_type == type)
+           return;
          /* The rtl expander will expand vector/scalar as vector/vector
-            if necessary.  Don't bother converting the stmt here.  */
-         if (optab_handler (op, TYPE_MODE (type)) == CODE_FOR_nothing
-             && optab_handler (opv, TYPE_MODE (type)) != CODE_FOR_nothing)
+            if necessary.  Pick one with wider vector type.  */
+         tree compute_vtype = get_compute_type (code, opv, type);
+         if (count_type_subparts (compute_vtype)
+             > count_type_subparts (compute_type))
+           {
+             compute_type = compute_vtype;
+             op = opv;
+           }
+       }
+
+      if (code == LROTATE_EXPR || code == RROTATE_EXPR)
+       {
+         if (compute_type == NULL_TREE)
+           compute_type = get_compute_type (code, op, type);
+         if (compute_type == type)
            return;
+         /* Before splitting vector rotates into scalar rotates,
+            see if we can't use vector shifts and BIT_IOR_EXPR
+            instead.  For vector by vector rotates we'd also
+            need to check BIT_AND_EXPR and NEGATE_EXPR, punt there
+            for now, fold doesn't seem to create such rotates anyway.  */
+         if (compute_type == TREE_TYPE (type)
+             && !VECTOR_INTEGER_TYPE_P (TREE_TYPE (rhs2)))
+           {
+             optab oplv = vashl_optab, opl = ashl_optab;
+             optab oprv = vlshr_optab, opr = lshr_optab, opo = ior_optab;
+             tree compute_lvtype = get_compute_type (LSHIFT_EXPR, oplv, type);
+             tree compute_rvtype = get_compute_type (RSHIFT_EXPR, oprv, type);
+             tree compute_otype = get_compute_type (BIT_IOR_EXPR, opo, type);
+             tree compute_ltype = get_compute_type (LSHIFT_EXPR, opl, type);
+             tree compute_rtype = get_compute_type (RSHIFT_EXPR, opr, type);
+             /* The rtl expander will expand vector/scalar as vector/vector
+                if necessary.  Pick one with wider vector type.  */
+             if (count_type_subparts (compute_lvtype)
+                 > count_type_subparts (compute_ltype))
+               {
+                 compute_ltype = compute_lvtype;
+                 opl = oplv;
+               }
+             if (count_type_subparts (compute_rvtype)
+                 > count_type_subparts (compute_rtype))
+               {
+                 compute_rtype = compute_rvtype;
+                 opr = oprv;
+               }
+             /* Pick the narrowest type from LSHIFT_EXPR, RSHIFT_EXPR and
+                BIT_IOR_EXPR.  */
+             compute_type = compute_ltype;
+             if (count_type_subparts (compute_type)
+                 > count_type_subparts (compute_rtype))
+               compute_type = compute_rtype;
+             if (count_type_subparts (compute_type)
+                 > count_type_subparts (compute_otype))
+               compute_type = compute_otype;
+             /* Verify all 3 operations can be performed in that type.  */
+             if (compute_type != TREE_TYPE (type))
+               {
+                 if (optab_handler (opl, TYPE_MODE (compute_type))
+                     == CODE_FOR_nothing
+                     || optab_handler (opr, TYPE_MODE (compute_type))
+                        == CODE_FOR_nothing
+                     || optab_handler (opo, TYPE_MODE (compute_type))
+                        == CODE_FOR_nothing)
+                   compute_type = TREE_TYPE (type);
+               }
+           }
        }
     }
   else
@@ -1474,38 +1592,10 @@ expand_vector_operations_1 (gimple_stmt_iterator *gsi)
       && INTEGRAL_TYPE_P (TREE_TYPE (type)))
     op = optab_for_tree_code (MINUS_EXPR, type, optab_default);
 
-  /* For very wide vectors, try using a smaller vector mode.  */
-  compute_type = type;
-  if (!VECTOR_MODE_P (TYPE_MODE (type)) && op)
-    {
-      tree vector_compute_type
-        = type_for_widest_vector_mode (TREE_TYPE (type), op);
-      if (vector_compute_type != NULL_TREE
-         && (TYPE_VECTOR_SUBPARTS (vector_compute_type)
-             < TYPE_VECTOR_SUBPARTS (compute_type))
-         && (optab_handler (op, TYPE_MODE (vector_compute_type))
-             != CODE_FOR_nothing))
-       compute_type = vector_compute_type;
-    }
-
-  /* If we are breaking a BLKmode vector into smaller pieces,
-     type_for_widest_vector_mode has already looked into the optab,
-     so skip these checks.  */
+  if (compute_type == NULL_TREE)
+    compute_type = get_compute_type (code, op, type);
   if (compute_type == type)
-    {
-      compute_mode = TYPE_MODE (compute_type);
-      if (VECTOR_MODE_P (compute_mode))
-       {
-          if (op && optab_handler (op, compute_mode) != CODE_FOR_nothing)
-           return;
-         if (code == MULT_HIGHPART_EXPR
-             && can_mult_highpart_p (compute_mode,
-                                     TYPE_UNSIGNED (compute_type)))
-           return;
-       }
-      /* There is no operation in hardware, so fall back to scalars.  */
-      compute_type = TREE_TYPE (type);
-    }
+    return;
 
   gcc_assert (code != VEC_LSHIFT_EXPR && code != VEC_RSHIFT_EXPR);
   new_rhs = expand_vector_operation (gsi, type, compute_type, stmt, code);
index 1c78e11..4204907 100644 (file)
@@ -1629,6 +1629,7 @@ vect_analyze_loop_2 (loop_vec_info loop_vinfo)
   int max_vf = MAX_VECTORIZATION_FACTOR;
   int min_vf = 2;
   unsigned int th;
+  unsigned int n_stmts = 0;
 
   /* Find all data references in the loop (which correspond to vdefs/vuses)
      and analyze their evolution in the loop.  Also adjust the minimal
@@ -1637,7 +1638,7 @@ vect_analyze_loop_2 (loop_vec_info loop_vinfo)
      FORNOW: Handle only simple, array references, which
      alignment can be forced, and aligned pointer-references.  */
 
-  ok = vect_analyze_data_refs (loop_vinfo, NULL, &min_vf);
+  ok = vect_analyze_data_refs (loop_vinfo, NULL, &min_vf, &n_stmts);
   if (!ok)
     {
       if (dump_enabled_p ())
@@ -1747,7 +1748,7 @@ vect_analyze_loop_2 (loop_vec_info loop_vinfo)
     }
 
   /* Check the SLP opportunities in the loop, analyze and build SLP trees.  */
-  ok = vect_analyze_slp (loop_vinfo, NULL);
+  ok = vect_analyze_slp (loop_vinfo, NULL, n_stmts);
   if (ok)
     {
       /* Decide which possible SLP instances to SLP.  */
@@ -3951,8 +3952,12 @@ vect_create_epilog_for_reduction (vec<tree> vect_defs, gimple stmt,
   /* Set phi nodes arguments.  */
   FOR_EACH_VEC_ELT (reduction_phis, i, phi)
     {
-      tree vec_init_def = vec_initial_defs[i];
-      tree def = vect_defs[i];
+      tree vec_init_def, def;
+      gimple_seq stmts;
+      vec_init_def = force_gimple_operand (vec_initial_defs[i], &stmts,
+                                          true, NULL_TREE);
+      gsi_insert_seq_on_edge_immediate (loop_preheader_edge (loop), stmts);
+      def = vect_defs[i];
       for (j = 0; j < ncopies; j++)
         {
           /* Set the loop-entry arg of the reduction-phi.  */
index 65f8b02..0ab267f 100644 (file)
@@ -849,9 +849,10 @@ vect_build_slp_tree (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo,
                      unsigned int *max_nunits,
                      vec<slp_tree> *loads,
                      unsigned int vectorization_factor,
-                    bool *matches, unsigned *npermutes)
+                    bool *matches, unsigned *npermutes, unsigned *tree_size,
+                    unsigned max_tree_size)
 {
-  unsigned nops, i, this_npermutes = 0;
+  unsigned nops, i, this_npermutes = 0, this_tree_size = 0;
   gimple stmt;
 
   if (!matches)
@@ -911,6 +912,12 @@ vect_build_slp_tree (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo,
       if (oprnd_info->first_dt != vect_internal_def)
         continue;
 
+      if (++this_tree_size > max_tree_size)
+       {
+         vect_free_oprnd_info (oprnds_info);
+         return false;
+       }
+
       child = vect_create_new_slp_node (oprnd_info->def_stmts);
       if (!child)
        {
@@ -921,7 +928,8 @@ vect_build_slp_tree (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo,
       bool *matches = XALLOCAVEC (bool, group_size);
       if (vect_build_slp_tree (loop_vinfo, bb_vinfo, &child,
                               group_size, max_nunits, loads,
-                              vectorization_factor, matches, npermutes))
+                              vectorization_factor, matches,
+                              npermutes, &this_tree_size, max_tree_size))
        {
          oprnd_info->def_stmts = vNULL;
          SLP_TREE_CHILDREN (*node).quick_push (child);
@@ -961,7 +969,8 @@ vect_build_slp_tree (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo,
          if (vect_build_slp_tree (loop_vinfo, bb_vinfo, &child,
                                   group_size, max_nunits, loads,
                                   vectorization_factor,
-                                  matches, npermutes))
+                                  matches, npermutes, &this_tree_size,
+                                  max_tree_size))
            {
              oprnd_info->def_stmts = vNULL;
              SLP_TREE_CHILDREN (*node).quick_push (child);
@@ -977,6 +986,9 @@ vect_build_slp_tree (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo,
       return false;
     }
 
+  if (tree_size)
+    *tree_size += this_tree_size;
+
   vect_free_oprnd_info (oprnds_info);
   return true;
 }
@@ -1436,7 +1448,7 @@ vect_analyze_slp_cost (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo,
 
 static bool
 vect_analyze_slp_instance (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo,
-                           gimple stmt)
+                           gimple stmt, unsigned max_tree_size)
 {
   slp_instance new_instance;
   slp_tree node;
@@ -1536,7 +1548,8 @@ vect_analyze_slp_instance (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo,
   /* Build the tree for the SLP instance.  */
   if (vect_build_slp_tree (loop_vinfo, bb_vinfo, &node, group_size,
                           &max_nunits, &loads,
-                          vectorization_factor, NULL, NULL))
+                          vectorization_factor, NULL, NULL, NULL,
+                          max_tree_size))
     {
       /* Calculate the unrolling factor based on the smallest type.  */
       if (max_nunits > nunits)
@@ -1641,7 +1654,8 @@ vect_analyze_slp_instance (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo,
    trees of packed scalar stmts if SLP is possible.  */
 
 bool
-vect_analyze_slp (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo)
+vect_analyze_slp (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo,
+                 unsigned max_tree_size)
 {
   unsigned int i;
   vec<gimple> grouped_stores;
@@ -1664,7 +1678,8 @@ vect_analyze_slp (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo)
 
   /* Find SLP sequences starting from groups of grouped stores.  */
   FOR_EACH_VEC_ELT (grouped_stores, i, first_element)
-    if (vect_analyze_slp_instance (loop_vinfo, bb_vinfo, first_element))
+    if (vect_analyze_slp_instance (loop_vinfo, bb_vinfo, first_element,
+                                  max_tree_size))
       ok = true;
 
   if (bb_vinfo && !ok)
@@ -1681,7 +1696,8 @@ vect_analyze_slp (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo)
     {
       /* Find SLP sequences starting from reduction chains.  */
       FOR_EACH_VEC_ELT (reduc_chains, i, first_element)
-        if (vect_analyze_slp_instance (loop_vinfo, bb_vinfo, first_element))
+        if (vect_analyze_slp_instance (loop_vinfo, bb_vinfo, first_element,
+                                      max_tree_size))
           ok = true;
         else
           return false;
@@ -1693,7 +1709,8 @@ vect_analyze_slp (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo)
 
   /* Find SLP sequences starting from groups of reductions.  */
   if (loop_vinfo && LOOP_VINFO_REDUCTIONS (loop_vinfo).length () > 1
-      && vect_analyze_slp_instance (loop_vinfo, bb_vinfo, reductions[0]))
+      && vect_analyze_slp_instance (loop_vinfo, bb_vinfo, reductions[0],
+                                   max_tree_size))
     ok = true;
 
   return true;
@@ -2071,12 +2088,13 @@ vect_slp_analyze_bb_1 (basic_block bb)
   slp_instance instance;
   int i;
   int min_vf = 2;
+  unsigned n_stmts = 0;
 
   bb_vinfo = new_bb_vec_info (bb);
   if (!bb_vinfo)
     return NULL;
 
-  if (!vect_analyze_data_refs (NULL, bb_vinfo, &min_vf))
+  if (!vect_analyze_data_refs (NULL, bb_vinfo, &min_vf, &n_stmts))
     {
       if (dump_enabled_p ())
         dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
@@ -2124,7 +2142,7 @@ vect_slp_analyze_bb_1 (basic_block bb)
 
   /* Check the SLP opportunities in the basic block, analyze and build SLP
      trees.  */
-  if (!vect_analyze_slp (NULL, bb_vinfo))
+  if (!vect_analyze_slp (NULL, bb_vinfo, n_stmts))
     {
       if (dump_enabled_p ())
         dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, 
index f2087e2..fa2989d 100644 (file)
@@ -1057,7 +1057,8 @@ extern bool vect_analyze_data_ref_accesses (loop_vec_info, bb_vec_info);
 extern bool vect_prune_runtime_alias_test_list (loop_vec_info);
 extern tree vect_check_gather (gimple, loop_vec_info, tree *, tree *,
                               int *);
-extern bool vect_analyze_data_refs (loop_vec_info, bb_vec_info, int *);
+extern bool vect_analyze_data_refs (loop_vec_info, bb_vec_info, int *,
+                                   unsigned *);
 extern tree vect_create_data_ref_ptr (gimple, tree, struct loop *, tree,
                                      tree *, gimple_stmt_iterator *,
                                      gimple *, bool, bool *);
@@ -1107,7 +1108,7 @@ extern bool vect_transform_slp_perm_load (slp_tree, vec<tree> ,
                                           slp_instance, bool);
 extern bool vect_schedule_slp (loop_vec_info, bb_vec_info);
 extern void vect_update_slp_costs_according_to_vf (loop_vec_info);
-extern bool vect_analyze_slp (loop_vec_info, bb_vec_info);
+extern bool vect_analyze_slp (loop_vec_info, bb_vec_info, unsigned);
 extern bool vect_make_slp_decision (loop_vec_info);
 extern void vect_detect_hybrid_slp (loop_vec_info);
 extern void vect_get_slp_defs (vec<tree> , slp_tree,
index 14f1526..2c80135 100644 (file)
@@ -3616,15 +3616,18 @@ extract_range_basic (value_range_t *vr, gimple stmt)
              /* If arg is non-zero, then ffs or popcount
                 are non-zero.  */
              if (((vr0->type == VR_RANGE
-                   && integer_nonzerop (vr0->min))
+                   && range_includes_zero_p (vr0->min, vr0->max) == 0)
                   || (vr0->type == VR_ANTI_RANGE
-                      && integer_zerop (vr0->min)))
-                 && !is_overflow_infinity (vr0->min))
+                      && range_includes_zero_p (vr0->min, vr0->max) == 1))
+                 && !is_overflow_infinity (vr0->min)
+                 && !is_overflow_infinity (vr0->max))
                mini = 1;
              /* If some high bits are known to be zero,
                 we can decrease the maximum.  */
              if (vr0->type == VR_RANGE
                  && TREE_CODE (vr0->max) == INTEGER_CST
+                 && !operand_less_p (vr0->min,
+                                     build_zero_cst (TREE_TYPE (vr0->min)))
                  && !is_overflow_infinity (vr0->max))
                maxi = tree_floor_log2 (vr0->max) + 1;
            }
@@ -6661,8 +6664,9 @@ remove_range_assertions (void)
          }
        else
          {
+           if (!is_gimple_debug (gsi_stmt (si)))
+             is_unreachable = 0;
            gsi_next (&si);
-           is_unreachable = 0;
          }
       }
 }
index efee5e6..069abb7 100644 (file)
@@ -252,7 +252,7 @@ unsigned const char omp_clause_num_ops[] =
   4, /* OMP_CLAUSE_REDUCTION  */
   1, /* OMP_CLAUSE_COPYIN  */
   1, /* OMP_CLAUSE_COPYPRIVATE  */
-  2, /* OMP_CLAUSE_LINEAR  */
+  3, /* OMP_CLAUSE_LINEAR  */
   2, /* OMP_CLAUSE_ALIGNED  */
   1, /* OMP_CLAUSE_DEPEND  */
   1, /* OMP_CLAUSE_UNIFORM  */
@@ -11079,8 +11079,13 @@ walk_tree_1 (tree *tp, walk_tree_fn func, void *data,
            WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
          }
 
-       case OMP_CLAUSE_ALIGNED:
        case OMP_CLAUSE_LINEAR:
+         WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
+         WALK_SUBTREE (OMP_CLAUSE_LINEAR_STEP (*tp));
+         WALK_SUBTREE (OMP_CLAUSE_LINEAR_STMT (*tp));
+         WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
+
+       case OMP_CLAUSE_ALIGNED:
        case OMP_CLAUSE_FROM:
        case OMP_CLAUSE_TO:
        case OMP_CLAUSE_MAP:
index 9fbc5c4..d73bc52 100644 (file)
@@ -1327,9 +1327,20 @@ extern void protected_set_expr_location (tree, location_t);
 #define OMP_CLAUSE_LINEAR_VARIABLE_STRIDE(NODE) \
   TREE_PROTECTED (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LINEAR))
 
+/* True if a LINEAR clause is for an array or allocatable variable that
+   needs special handling by the frontend.  */
+#define OMP_CLAUSE_LINEAR_ARRAY(NODE) \
+  (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LINEAR)->base.deprecated_flag)
+
 #define OMP_CLAUSE_LINEAR_STEP(NODE) \
   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LINEAR), 1)
 
+#define OMP_CLAUSE_LINEAR_STMT(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LINEAR), 2)
+
+#define OMP_CLAUSE_LINEAR_GIMPLE_SEQ(NODE) \
+  (OMP_CLAUSE_CHECK (NODE))->omp_clause.gimple_reduction_init
+
 #define OMP_CLAUSE_ALIGNED_ALIGNMENT(NODE) \
   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_ALIGNED), 1)
 
index acb5221..dc869e2 100644 (file)
@@ -166,7 +166,9 @@ varpool_remove_node (varpool_node *node)
   /* Because we remove references from external functions before final compilation,
      we may end up removing useful constructors.
      FIXME: We probably want to trace boundaries better.  */
-  if ((init = ctor_for_folding (node->decl)) == error_mark_node)
+  if (cgraph_state == CGRAPH_LTO_STREAMING)
+    ;
+  else if ((init = ctor_for_folding (node->decl)) == error_mark_node)
     varpool_remove_initializer (node);
   else
     DECL_INITIAL (node->decl) = init;
@@ -302,7 +304,16 @@ ctor_for_folding (tree decl)
   if (DECL_VIRTUAL_P (real_decl))
     {
       gcc_checking_assert (TREE_READONLY (real_decl));
-      return DECL_INITIAL (real_decl);
+      if (DECL_INITIAL (real_decl))
+       return DECL_INITIAL (real_decl);
+      else
+       {
+         /* The C++ front end creates VAR_DECLs for vtables of typeinfo
+            classes not defined in the current TU so that it can refer
+            to them from typeinfo objects.  Avoid returning NULL_TREE.  */
+         gcc_checking_assert (!COMPLETE_TYPE_P (DECL_CONTEXT (real_decl)));
+         return error_mark_node;
+       }
     }
 
   /* If there is no constructor, we have nothing to do.  */
index 8da4465..ca1c728 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 800e1bc..cc3b59c 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 83ceb0a..4a30e7b 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index dcabfa9..94ea2e0 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 9a546c1..f78862f 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 5dfe80b..8acd472 100644 (file)
@@ -1,3 +1,16 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
+2014-05-08  Ian Lance Taylor  <iant@google.com>
+
+       Backport from mainline:
+       * mmap.c (backtrace_free): If freeing a large aligned block of
+       memory, call munmap rather than holding onto it.
+       (backtrace_vector_grow): When growing a vector, double the number
+       of pages requested.  When releasing the old version of a grown
+       vector, pass the correct size to backtrace_free.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index b530e38..5a9f629 100644 (file)
@@ -164,6 +164,26 @@ backtrace_free (struct backtrace_state *state, void *addr, size_t size,
 {
   int locked;
 
+  /* If we are freeing a large aligned block, just release it back to
+     the system.  This case arises when growing a vector for a large
+     binary with lots of debug info.  Calling munmap here may cause us
+     to call mmap again if there is also a large shared library; we
+     just live with that.  */
+  if (size >= 16 * 4096)
+    {
+      size_t pagesize;
+
+      pagesize = getpagesize ();
+      if (((uintptr_t) addr & (pagesize - 1)) == 0
+         && (size & (pagesize - 1)) == 0)
+       {
+         /* If munmap fails for some reason, just add the block to
+            the freelist.  */
+         if (munmap (addr, size) == 0)
+           return;
+       }
+    }
+
   /* If we can acquire the lock, add the new space to the free list.
      If we can't acquire the lock, just leak the memory.
      __sync_lock_test_and_set returns the old state of the lock, so we
@@ -209,14 +229,18 @@ backtrace_vector_grow (struct backtrace_state *state,size_t size,
            alc = pagesize;
        }
       else
-       alc = (alc + pagesize - 1) & ~ (pagesize - 1);
+       {
+         alc *= 2;
+         alc = (alc + pagesize - 1) & ~ (pagesize - 1);
+       }
       base = backtrace_alloc (state, alc, error_callback, data);
       if (base == NULL)
        return NULL;
       if (vec->base != NULL)
        {
          memcpy (base, vec->base, vec->size);
-         backtrace_free (state, vec->base, vec->alc, error_callback, data);
+         backtrace_free (state, vec->base, vec->size + vec->alc,
+                         error_callback, data);
        }
       vec->base = base;
       vec->alc = alc - vec->size;
index bb75077..5f36983 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 41510d2..32bb84f 100644 (file)
@@ -1,3 +1,14 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
+2014-07-09  Edward Smith-Rowland  <3dw4rd@verizon.net>
+
+       PR c++/58155 - -Wliteral-suffix warns about tokens which are skipped
+       by preprocessor
+       * lex.c (lex_raw_string ()): Do not warn about invalid suffix
+       if skipping. (lex_string ()): Ditto.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index a2168e4..6d69b59 100644 (file)
@@ -1648,7 +1648,7 @@ lex_raw_string (cpp_reader *pfile, cpp_token *token, const uchar *base,
       if (is_macro (pfile, cur))
        {
          /* Raise a warning, but do not consume subsequent tokens.  */
-         if (CPP_OPTION (pfile, warn_literal_suffix))
+         if (CPP_OPTION (pfile, warn_literal_suffix) && !pfile->state.skipping)
            cpp_warning_with_line (pfile, CPP_W_LITERAL_SUFFIX,
                                   token->src_loc, 0,
                                   "invalid suffix on literal; C++11 requires "
@@ -1777,7 +1777,7 @@ lex_string (cpp_reader *pfile, cpp_token *token, const uchar *base)
       if (is_macro (pfile, cur))
        {
          /* Raise a warning, but do not consume subsequent tokens.  */
-         if (CPP_OPTION (pfile, warn_literal_suffix))
+         if (CPP_OPTION (pfile, warn_literal_suffix) && !pfile->state.skipping)
            cpp_warning_with_line (pfile, CPP_W_LITERAL_SUFFIX,
                                   token->src_loc, 0,
                                   "invalid suffix on literal; C++11 requires "
index 49879ab..b9f6038 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 367babb..c3215a6 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index bc2ab9c..6b22f69 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 41db7d8..575715b 100644 (file)
@@ -1,3 +1,44 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
+2014-05-27  Georg-Johann Lay  <avr@gjlay.de>
+
+       Backport from 2014-05-27 mainline r210322.
+
+       PR libgcc/61152
+       * config/arm/bpabi-lib.h (License): Add GCC Runtime Library Exception.
+
+2014-05-22  Nick Clifton  <nickc@redhat.com>
+
+       * config/msp430/t-msp430 (HOST_LIBGCC2_CFLAGS): Add
+       -mhwmult=none.
+
+2014-05-21  Maciej W. Rozycki  <macro@codesourcery.com>
+
+       Backport from mainline
+       2014-05-21  Maciej W. Rozycki  <macro@codesourcery.com>
+
+       PR libgcc/60166
+       * config/arm/sfp-machine.h (_FP_NANFRAC_H, _FP_NANFRAC_S)
+       (_FP_NANFRAC_D, _FP_NANSIGN_Q): Set the quiet bit.
+
+2014-05-15  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       Backport from mainline
+       2014-05-08  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       PR libgcc/61097
+       * config/t-slibgcc-sld: Only build and install libgcc-unwind.map
+       if --enable-shared.
+
+2014-04-30  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+       Work around for current cygwin32 build problems.
+       * config/i386/cygming-crtbegin.c (__register_frame_info,
+       __deregister_frame_info, _Jv_RegisterClasses): Compile weak default
+       functions only for 64-bit systems.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 193cc56..d6e7796 100644 (file)
    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
    License for more details.
 
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
    You should have received a copy of the GNU General Public License and
    a copy of the GCC Runtime Library Exception along with this program;
    see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
index 4f2b15d..b7b5171 100644 (file)
@@ -21,10 +21,10 @@ typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__)));
 
 /* According to RTABI, QNAN is only with the most significant bit of the
    significand set, and all other significand bits zero.  */
-#define _FP_NANFRAC_H          0
-#define _FP_NANFRAC_S          0
-#define _FP_NANFRAC_D          0, 0
-#define _FP_NANFRAC_Q          0, 0, 0, 0
+#define _FP_NANFRAC_H          _FP_QNANBIT_H
+#define _FP_NANFRAC_S          _FP_QNANBIT_S
+#define _FP_NANFRAC_D          _FP_QNANBIT_D, 0
+#define _FP_NANFRAC_Q          _FP_QNANBIT_Q, 0, 0, 0
 #define _FP_NANSIGN_H          0
 #define _FP_NANSIGN_S          0
 #define _FP_NANSIGN_D          0
index eeb51d4..195b463 100644 (file)
@@ -54,6 +54,11 @@ extern void __register_frame_info (__attribute__((unused)) const void *,
                                   TARGET_ATTRIBUTE_WEAK;
 extern void *__deregister_frame_info (__attribute__((unused)) const void *)
                                      TARGET_ATTRIBUTE_WEAK;
+
+/* Work around for current cygwin32 build problems (Bug gas/16858).
+   Compile weak default functions only for 64-bit systems,
+   when absolutely necessary.  */
+#ifdef __x86_64__
 TARGET_ATTRIBUTE_WEAK void
 __register_frame_info (__attribute__((unused)) const void *p,
                       __attribute__((unused)) struct object *o)
@@ -65,16 +70,19 @@ __deregister_frame_info (__attribute__((unused)) const void *p)
 {
   return (void*) 0;
 }
+#endif
 #endif /* DWARF2_UNWIND_INFO */
 
 #if TARGET_USE_JCR_SECTION
 extern void _Jv_RegisterClasses (__attribute__((unused)) const void *)
   TARGET_ATTRIBUTE_WEAK;
 
+#ifdef __x86_64__
 TARGET_ATTRIBUTE_WEAK void
 _Jv_RegisterClasses (__attribute__((unused)) const void *p)
 {
 }
+#endif
 #endif /* TARGET_USE_JCR_SECTION */
 
 #if defined(HAVE_LD_RO_RW_SECTION_MIXING)
index 60132c4..c3f8386 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 7a7b680..f82c123 100644 (file)
@@ -42,7 +42,7 @@ LIB2ADD = \
        $(srcdir)/config/msp430/floathisf.c \
        $(srcdir)/config/msp430/cmpd.c
 
-HOST_LIBGCC2_CFLAGS += -Os -ffunction-sections -fdata-sections
+HOST_LIBGCC2_CFLAGS += -Os -ffunction-sections -fdata-sections -mhwmult=none
 
 # Local Variables:
 # mode: Makefile
index ec6e5db..0b95391 100644 (file)
@@ -4,6 +4,8 @@
 SHLIB_LDFLAGS = -Wl,-h,$(SHLIB_SONAME) -Wl,-z,text -Wl,-z,defs \
        -Wl,-M,$(SHLIB_MAP)
 
+ifeq ($(enable_shared),yes)
+
 # Linker mapfile to enforce direct binding to libgcc_s unwinder
 # (PR target/59788).
 libgcc-unwind.map: libgcc-std.ver
@@ -26,3 +28,5 @@ install-libgcc-unwind-map: libgcc-unwind.map
        $(INSTALL_DATA) $< $(DESTDIR)$(slibdir)
 
 install: install-libgcc-unwind-map
+
+endif
index 91d283d..bd35d8e 100644 (file)
@@ -1,3 +1,56 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
+2014-07-06  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       Backport from trunk.
+       PR libgfortran/61640
+       * io/list_read.c (next_char_internal): Adjust the read length to
+       a single wide character. (eat_spaces): Add missing paren. 
+       * io/unix.c (mem_read4): Use the correct mem_alloc function for
+       wide character internal reads.
+
+2014-06-27  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       Backport from trunk.
+       PR libgfortran/61499
+       * io/list_read.c (eat_spaces): Use a 'for' loop instead of
+       'while' loop to skip the loop if there are no bytes left in the
+       string. Only seek if actual spaces can be skipped.
+
+2014-06-07  Jerry DeLisle  <jvdelisle@gcc.gnu>
+
+       Backport from trunk.
+       PR libfortran/61173
+       * io/list_read.c (eat_spaces): If the next character pointed to
+       is a space, don't seek, must be at the end.
+
+2014-05-26  Janne Blomqvist  <jb@gcc.gnu.org>
+
+       Backport from mainline
+       PR libfortran/61310
+       * intrinsics/ctime.c (strctime): Rename to gf_ctime, use snprintf
+       instead of strftime.
+       (fdate): Use gf_ctime.
+       (fdate_sub): Likewise.
+       (ctime): Likewise.
+       (ctime_sub): Likewise.
+
+2014-05-16  Janne Blomqvist  <jb@gcc.gnu.org>
+
+       Backport from trunk:
+       PR libfortran/61187
+       * io/unix.c (raw_close): Check if s->fd is -1.
+       (fd_to_stream): Check return value of fstat(), handle error.
+
+2014-05-10  Jerry DeLisle  <jvdelisle@gcc.gnu>
+
+       Backport from Trunk.
+       PR libfortran/61049
+       * io/list_read.c (list_formatted_read_scalar): Use eat_separator
+       and delete extraneous code.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index db41f02..9cda39b 100644 (file)
@@ -31,31 +31,53 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #include <string.h>
 
 
-/* strftime-like function that fills a C string with %c format which
-   is identical to ctime in the default locale. As ctime and ctime_r
-   are poorly specified and their usage not recommended, the
-   implementation instead uses strftime.  */
-
-static size_t
-strctime (char *s, size_t max, const time_t *timep)
+/* Maximum space a ctime-like string might need. A "normal" ctime
+   string is 26 bytes, and in our case 24 bytes as we don't include
+   the trailing newline and null. However, the longest possible year
+   number is -2,147,481,748 (1900 - 2,147,483,648, since tm_year is a
+   32-bit signed integer) so an extra 7 bytes are needed. */
+#define CTIME_BUFSZ 31
+
+
+/* Thread-safe ctime-like function that fills a Fortran
+   string. ctime_r is a portability headache and marked as obsolescent
+   in POSIX 2008, which recommends strftime in its place. However,
+   strftime(..., "%c",...)  doesn't produce ctime-like output on
+   MinGW, so do it manually with snprintf.  */
+
+static int
+gf_ctime (char *s, size_t max, const time_t timev)
 {
   struct tm ltm;
   int failed;
+  char buf[CTIME_BUFSZ + 1];
   /* Some targets provide a localtime_r based on a draft of the POSIX
      standard where the return type is int rather than the
      standardized struct tm*.  */
-  __builtin_choose_expr (__builtin_classify_type (localtime_r (timep, &ltm)) 
+  __builtin_choose_expr (__builtin_classify_type (localtime_r (&timev, &ltm)) 
                         == 5,
-                        failed = localtime_r (timep, &ltm) == NULL,
-                        failed = localtime_r (timep, &ltm) != 0);
+                        failed = localtime_r (&timev, &ltm) == NULL,
+                        failed = localtime_r (&timev, &ltm) != 0);
   if (failed)
-    return 0;
-  return strftime (s, max, "%c", &ltm);
+    goto blank;
+  int n = snprintf (buf, sizeof (buf), 
+                   "%3.3s %3.3s%3d %.2d:%.2d:%.2d %d",
+                   "SunMonTueWedThuFriSat" + ltm.tm_wday * 3,
+                   "JanFebMarAprMayJunJulAugSepOctNovDec" + ltm.tm_mon * 3,
+                   ltm.tm_mday, ltm.tm_hour, ltm.tm_min, ltm.tm_sec, 
+                   1900 + ltm.tm_year);
+  if (n < 0)
+    goto blank;
+  if ((size_t) n <= max)
+    {
+      cf_strcpy (s, max, buf);
+      return n;
+    }
+ blank:
+  memset (s, ' ', max);
+  return 0;
 }
 
-/* In the default locale, the date and time representation fits in 26
-   bytes. However, other locales might need more space.  */
-#define CSZ 100
 
 extern void fdate (char **, gfc_charlen_type *);
 export_proto(fdate);
@@ -64,8 +86,8 @@ void
 fdate (char ** date, gfc_charlen_type * date_len)
 {
   time_t now = time(NULL);
-  *date = xmalloc (CSZ);
-  *date_len = strctime (*date, CSZ, &now);
+  *date = xmalloc (CTIME_BUFSZ);
+  *date_len = gf_ctime (*date, CTIME_BUFSZ, now);
 }
 
 
@@ -76,10 +98,7 @@ void
 fdate_sub (char * date, gfc_charlen_type date_len)
 {
   time_t now = time(NULL);
-  char *s = xmalloc (date_len + 1);
-  size_t n = strctime (s, date_len + 1, &now);
-  fstrcpy (date, date_len, s, n);
-  free (s);
+  gf_ctime (date, date_len, now);
 }
 
 
@@ -91,8 +110,8 @@ void
 PREFIX(ctime) (char ** date, gfc_charlen_type * date_len, GFC_INTEGER_8 t)
 {
   time_t now = t;
-  *date = xmalloc (CSZ);
-  *date_len = strctime (*date, CSZ, &now);
+  *date = xmalloc (CTIME_BUFSZ);
+  *date_len = gf_ctime (*date, CTIME_BUFSZ, now);
 }
 
 
@@ -103,8 +122,5 @@ void
 ctime_sub (GFC_INTEGER_8 * t, char * date, gfc_charlen_type date_len)
 {
   time_t now = *t;
-  char *s = xmalloc (date_len + 1);
-  size_t n = strctime (s, date_len + 1, &now);
-  fstrcpy (date, date_len, s, n);
-  free (s);
+  gf_ctime (date, date_len, now);
 }
index 625ba0c..d871ce9 100644 (file)
@@ -200,7 +200,7 @@ next_char (st_parameter_dt *dtp)
     {
       /* Check for kind=4 internal unit.  */
       if (dtp->common.unit)
-       length = sread (dtp->u.p.current_unit->s, &c, sizeof (gfc_char4_t));
+       length = sread (dtp->u.p.current_unit->s, &c, 1);
       else
        {
          char cc;
@@ -265,46 +265,39 @@ eat_spaces (st_parameter_dt *dtp)
   int c;
 
   /* If internal character array IO, peak ahead and seek past spaces.
-     This is an optimazation to eliminate numerous calls to
-     next character unique to character arrays with large character
-     lengths (PR38199). */
-  if (is_array_io (dtp))
+     This is an optimization unique to character arrays with large
+     character lengths (PR38199).  This code eliminates numerous calls
+     to next_character.  */
+  if (is_array_io (dtp) && (dtp->u.p.last_char == EOF - 1))
     {
       gfc_offset offset = stell (dtp->u.p.current_unit->s);
-      gfc_offset limit = dtp->u.p.current_unit->bytes_left;
+      gfc_offset i;
 
       if (dtp->common.unit) /* kind=4 */
        {
-         gfc_char4_t cc;
-         limit *= (sizeof (gfc_char4_t));
-         do
+         for (i = 0; i < dtp->u.p.current_unit->bytes_left; i++)
            {
-             cc = dtp->internal_unit[offset];
-             offset += (sizeof (gfc_char4_t));
-             dtp->u.p.current_unit->bytes_left--;
+             if (dtp->internal_unit[(offset + i) * sizeof (gfc_char4_t)]
+                 != (gfc_char4_t)' ')
+               break;
            }
-         while (offset < limit && (cc == (gfc_char4_t)' '
-                 || cc == (gfc_char4_t)'\t'));
-         /* Back up, seek ahead, and fall through to complete the
-            process so that END conditions are handled correctly.  */
-         dtp->u.p.current_unit->bytes_left++;
-         sseek (dtp->u.p.current_unit->s,
-                 offset-(sizeof (gfc_char4_t)), SEEK_SET);
        }
       else
        {
-         do
+         for (i = 0; i < dtp->u.p.current_unit->bytes_left; i++)
            {
-             c = dtp->internal_unit[offset++];
-             dtp->u.p.current_unit->bytes_left--;
+             if (dtp->internal_unit[offset + i] != ' ')
+               break;
            }
-         while (offset < limit && (c == ' ' || c == '\t'));
-         /* Back up, seek ahead, and fall through to complete the
-            process so that END conditions are handled correctly.  */
-         dtp->u.p.current_unit->bytes_left++;
-         sseek (dtp->u.p.current_unit->s, offset-1, SEEK_SET);
+       }
+
+      if (i != 0)
+       {
+         sseek (dtp->u.p.current_unit->s, offset + i, SEEK_SET);
+         dtp->u.p.current_unit->bytes_left -= i;
        }
     }
+
   /* Now skip spaces, EOF and EOL are handled in next_char.  */
   do
     c = next_char (dtp);
@@ -1923,20 +1916,9 @@ list_formatted_read_scalar (st_parameter_dt *dtp, bt type, void *p,
        }
       if (is_separator (c))
        {
-         /* Found a null value. Do not use eat_separator here otherwise
-            we will do an extra read from stdin.  */
+         /* Found a null value.  */
          dtp->u.p.repeat_count = 0;
-
-         /* Set comma_flag.  */
-         if ((c == ';' 
-             && dtp->u.p.current_unit->decimal_status == DECIMAL_COMMA)
-             ||
-             (c == ','
-             && dtp->u.p.current_unit->decimal_status == DECIMAL_POINT))
-           {
-             dtp->u.p.comma_flag = 1;
-             goto cleanup;
-           }
+         eat_separator (dtp);
 
          /* Set end-of-line flag.  */
          if (c == '\n' || c == '\r')
@@ -1951,7 +1933,6 @@ list_formatted_read_scalar (st_parameter_dt *dtp, bt type, void *p,
          else
            goto cleanup;
        }
-
     }
   else
     {
index 34c2d0c..a2df440 100644 (file)
@@ -412,7 +412,9 @@ raw_close (unix_stream * s)
 {
   int retval;
   
-  if (s->fd != STDOUT_FILENO
+  if (s->fd == -1)
+    retval = -1;
+  else if (s->fd != STDOUT_FILENO
       && s->fd != STDERR_FILENO
       && s->fd != STDIN_FILENO)
     retval = close (s->fd);
@@ -784,10 +786,10 @@ mem_read4 (stream * s, void * buf, ssize_t nbytes)
   void *p;
   int nb = nbytes;
 
-  p = mem_alloc_r (s, &nb);
+  p = mem_alloc_r4 (s, &nb);
   if (p)
     {
-      memcpy (buf, p, nb);
+      memcpy (buf, p, nb * 4);
       return (ssize_t) nb;
     }
   else
@@ -1003,7 +1005,15 @@ fd_to_stream (int fd, bool unformatted)
 
   /* Get the current length of the file. */
 
-  fstat (fd, &statbuf);
+  if (fstat (fd, &statbuf) == -1)
+    {
+      s->st_dev = s->st_ino = -1;
+      s->file_length = 0;
+      if (errno == EBADF)
+       s->fd = -1;
+      raw_init (s);
+      return (stream *) s;
+    }
 
   s->st_dev = statbuf.st_dev;
   s->st_ino = statbuf.st_ino;
index 7385435..2ee0cfc 100644 (file)
 /* Define to 1 if you have the `renameat' function. */
 #undef HAVE_RENAMEAT
 
+/* Define to 1 if you have the <sched.h> header file. */
+#undef HAVE_SCHED_H
+
 /* Define to 1 if you have the `sem_timedwait' function. */
 #undef HAVE_SEM_TIMEDWAIT
 
index f4b8c10..1223204 100755 (executable)
@@ -14627,7 +14627,7 @@ no)
   ;;
 esac
 
-for ac_header in sys/file.h sys/mman.h syscall.h sys/epoll.h sys/inotify.h sys/ptrace.h sys/syscall.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/if.h net/if_arp.h net/route.h netpacket/packet.h sys/prctl.h sys/mount.h sys/vfs.h sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/ether.h linux/fs.h linux/reboot.h netinet/icmp6.h netinet/in_syst.h netinet/ip.h netinet/ip_mroute.h netinet/if_ether.h
+for ac_header in sched.h sys/file.h sys/mman.h syscall.h sys/epoll.h sys/inotify.h sys/ptrace.h sys/syscall.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/if.h net/if_arp.h net/route.h netpacket/packet.h sys/prctl.h sys/mount.h sys/vfs.h sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/ether.h linux/fs.h linux/reboot.h netinet/icmp6.h netinet/in_syst.h netinet/ip.h netinet/ip_mroute.h netinet/if_ether.h
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
index 4480261..754e190 100644 (file)
@@ -480,7 +480,7 @@ no)
   ;;
 esac
 
-AC_CHECK_HEADERS(sys/file.h sys/mman.h syscall.h sys/epoll.h sys/inotify.h sys/ptrace.h sys/syscall.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/if.h net/if_arp.h net/route.h netpacket/packet.h sys/prctl.h sys/mount.h sys/vfs.h sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/ether.h linux/fs.h linux/reboot.h netinet/icmp6.h netinet/in_syst.h netinet/ip.h netinet/ip_mroute.h netinet/if_ether.h)
+AC_CHECK_HEADERS(sched.h sys/file.h sys/mman.h syscall.h sys/epoll.h sys/inotify.h sys/ptrace.h sys/syscall.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/if.h net/if_arp.h net/route.h netpacket/packet.h sys/prctl.h sys/mount.h sys/vfs.h sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/ether.h linux/fs.h linux/reboot.h netinet/icmp6.h netinet/in_syst.h netinet/ip.h netinet/ip_mroute.h netinet/if_ether.h)
 
 AC_CHECK_HEADERS([linux/filter.h linux/if_addr.h linux/if_ether.h linux/if_tun.h linux/netlink.h linux/rtnetlink.h], [], [],
 [#ifdef HAVE_SYS_SOCKET_H
index 025729c..bb6abfd 100755 (executable)
@@ -163,6 +163,9 @@ cat > sysinfo.c <<EOF
 #if defined(HAVE_NETINET_ICMP6_H)
 #include <netinet/icmp6.h>
 #endif
+#if defined(HAVE_SCHED_H)
+#include <sched.h>
+#endif
 
 /* Constants that may only be defined as expressions on some systems,
    expressions too complex for -fdump-go-spec to handle.  These are
@@ -177,6 +180,18 @@ enum {
 #ifdef TIOCSCTTY
   TIOCSCTTY_val = TIOCSCTTY,
 #endif
+#ifdef TIOCGPTN
+  TIOCGPTN_val = TIOCGPTN,
+#endif
+#ifdef TIOCSPTLCK
+  TIOCSPTLCK_val = TIOCSPTLCK,
+#endif
+#ifdef TIOCGDEV
+  TIOCGDEV_val = TIOCGDEV,
+#endif
+#ifdef TIOCSIG
+  TIOCSIG_val = TIOCSIG,
+#endif
 };
 EOF
 
@@ -775,6 +790,26 @@ if ! grep '^const TIOCSCTTY' ${OUT} >/dev/null 2>&1; then
     echo 'const TIOCSCTTY = _TIOCSCTTY_val' >> ${OUT}
   fi
 fi
+if ! grep '^const TIOCGPTN' ${OUT} >/dev/null 2>&1; then
+  if grep '^const _TIOCGPTN_val' ${OUT} >/dev/null 2>&1; then
+    echo 'const TIOCGPTN = _TIOCGPTN_val' >> ${OUT}
+  fi
+fi
+if ! grep '^const TIOCSPTLCK' ${OUT} >/dev/null 2>&1; then
+  if grep '^const _TIOCSPTLCK_val' ${OUT} >/dev/null 2>&1; then
+    echo 'const TIOCSPTLCK = _TIOCSPTLCK_val' >> ${OUT}
+  fi
+fi
+if ! grep '^const TIOCGDEV' ${OUT} >/dev/null 2>&1; then
+  if grep '^const _TIOCGDEV_val' ${OUT} >/dev/null 2>&1; then
+    echo 'const TIOCGDEV = _TIOCGDEV_val' >> ${OUT}
+  fi
+fi
+if ! grep '^const TIOCSIG' ${OUT} >/dev/null 2>&1; then
+  if grep '^const _TIOCSIG_val' ${OUT} >/dev/null 2>&1; then
+    echo 'const TIOCSIG = _TIOCSIG_val' >> ${OUT}
+  fi
+fi
 
 # The ioctl flags for terminal control
 grep '^const _TC[GS]ET' gen-sysinfo.go | \
@@ -1130,6 +1165,10 @@ grep '^type _inotify_event ' gen-sysinfo.go | \
       -e 's/\[0\]byte/[0]int8/' \
     >> ${OUT}
 
+# The GNU/Linux CLONE flags.
+grep '^const _CLONE_' gen-sysinfo.go | \
+  sed -e 's/^\(const \)_\(CLONE_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
+
 # The Solaris 11 Update 1 _zone_net_addr_t struct.
 grep '^type _zone_net_addr_t ' gen-sysinfo.go | \
     sed -e 's/_in6_addr/[16]byte/' \
index fee493c..1b8ab79 100644 (file)
@@ -387,7 +387,7 @@ forcegchelper(void *vnote)
 static uintptr
 scavengelist(MSpan *list, uint64 now, uint64 limit)
 {
-       uintptr released, sumreleased;
+       uintptr released, sumreleased, start, end, pagesize;
        MSpan *s;
 
        if(runtime_MSpanList_IsEmpty(list))
@@ -400,7 +400,17 @@ scavengelist(MSpan *list, uint64 now, uint64 limit)
                        mstats.heap_released += released;
                        sumreleased += released;
                        s->npreleased = s->npages;
-                       runtime_SysUnused((void*)(s->start << PageShift), s->npages << PageShift);
+
+                       start = s->start << PageShift;
+                       end = start + (s->npages << PageShift);
+
+                       // Round start up and end down to ensure we
+                       // are acting on entire pages.
+                       pagesize = getpagesize();
+                       start = ROUND(start, pagesize);
+                       end &= ~(pagesize - 1);
+                       if(end > start)
+                               runtime_SysUnused((void*)start, end - start);
                }
        }
        return sumreleased;
index 1bc0876..30516ad 100644 (file)
@@ -1117,7 +1117,8 @@ runtime_needm(void)
        if(runtime_needextram) {
                // Can happen if C/C++ code calls Go from a global ctor.
                // Can not throw, because scheduler is not initialized yet.
-               runtime_write(2, "fatal error: cgo callback before cgo call\n",
+               int rv __attribute__((unused));
+               rv = runtime_write(2, "fatal error: cgo callback before cgo call\n",
                        sizeof("fatal error: cgo callback before cgo call\n")-1);
                runtime_exit(1);
        }
index 91fc2a2..f84950d 100644 (file)
@@ -1,3 +1,157 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
+2014-06-30  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2014-06-25  Jakub Jelinek  <jakub@redhat.com>
+
+       * testsuite/libgomp.fortran/simd5.f90: New test.
+       * testsuite/libgomp.fortran/simd6.f90: New test.
+       * testsuite/libgomp.fortran/simd7.f90: New test.
+
+       2014-06-24  Jakub Jelinek  <jakub@redhat.com>
+
+       * testsuite/libgomp.fortran/aligned1.f03: New test.
+       * testsuite/libgomp.fortran/nestedfn5.f90: New test.
+       * testsuite/libgomp.fortran/target7.f90: Surround loop spawning
+       tasks with !$omp parallel !$omp single.
+       * testsuite/libgomp.fortran/target8.f90: New test.
+       * testsuite/libgomp.fortran/udr4.f90 (foo UDR, bar UDR): Adjust
+       not to use trim in the combiner, instead call elemental function.
+       (fn): New elemental function.
+       * testsuite/libgomp.fortran/udr6.f90 (do_add, dp_add, dp_init):
+       Make elemental.
+       * testsuite/libgomp.fortran/udr7.f90 (omp_priv, omp_orig, omp_out,
+       omp_in): Likewise.
+       * testsuite/libgomp.fortran/udr12.f90: New test.
+       * testsuite/libgomp.fortran/udr13.f90: New test.
+       * testsuite/libgomp.fortran/udr14.f90: New test.
+       * testsuite/libgomp.fortran/udr15.f90: New test.
+
+       2014-06-18  Jakub Jelinek  <jakub@redhat.com>
+
+       * omp_lib.f90.in (openmp_version): Set to 201307.
+       * omp_lib.h.in (openmp_version): Likewise.
+       * testsuite/libgomp.c/target-8.c: New test.
+       * testsuite/libgomp.fortran/declare-simd-1.f90: Add notinbranch
+       and inbranch clauses.
+       * testsuite/libgomp.fortran/depend-3.f90: New test.
+       * testsuite/libgomp.fortran/openmp_version-1.f: Adjust for new
+       openmp_version.
+       * testsuite/libgomp.fortran/openmp_version-2.f90: Likewise.
+       * testsuite/libgomp.fortran/target1.f90: New test.
+       * testsuite/libgomp.fortran/target2.f90: New test.
+       * testsuite/libgomp.fortran/target3.f90: New test.
+       * testsuite/libgomp.fortran/target4.f90: New test.
+       * testsuite/libgomp.fortran/target5.f90: New test.
+       * testsuite/libgomp.fortran/target6.f90: New test.
+       * testsuite/libgomp.fortran/target7.f90: New test.
+
+       2014-06-10  Jakub Jelinek  <jakub@redhat.com>
+
+       PR fortran/60928
+       * testsuite/libgomp.fortran/allocatable9.f90: New test.
+       * testsuite/libgomp.fortran/allocatable10.f90: New test.
+       * testsuite/libgomp.fortran/allocatable11.f90: New test.
+       * testsuite/libgomp.fortran/allocatable12.f90: New test.
+       * testsuite/libgomp.fortran/alloc-comp-1.f90: New test.
+       * testsuite/libgomp.fortran/alloc-comp-2.f90: New test.
+       * testsuite/libgomp.fortran/alloc-comp-3.f90: New test.
+       * testsuite/libgomp.fortran/associate1.f90: New test.
+       * testsuite/libgomp.fortran/associate2.f90: New test.
+       * testsuite/libgomp.fortran/procptr1.f90: New test.
+
+       2014-06-06  Jakub Jelinek  <jakub@redhat.com>
+
+       * testsuite/libgomp.fortran/simd1.f90: New test.
+       * testsuite/libgomp.fortran/udr1.f90: New test.
+       * testsuite/libgomp.fortran/udr2.f90: New test.
+       * testsuite/libgomp.fortran/udr3.f90: New test.
+       * testsuite/libgomp.fortran/udr4.f90: New test.
+       * testsuite/libgomp.fortran/udr5.f90: New test.
+       * testsuite/libgomp.fortran/udr6.f90: New test.
+       * testsuite/libgomp.fortran/udr7.f90: New test.
+       * testsuite/libgomp.fortran/udr8.f90: New test.
+       * testsuite/libgomp.fortran/udr9.f90: New test.
+       * testsuite/libgomp.fortran/udr10.f90: New test.
+       * testsuite/libgomp.fortran/udr11.f90: New test.
+
+       2014-05-27  Uros Bizjak  <ubizjak@gmail.com>
+
+       * testsuite/libgomp.fortran/declare-simd-1.f90: Require
+       vect_simd_clones effective target.
+       * testsuite/libgomp.fortran/declare-simd-2.f90: Ditto.
+
+       2014-05-11  Jakub Jelinek  <jakub@redhat.com>
+
+       * testsuite/libgomp.fortran/cancel-do-1.f90: New test.
+       * testsuite/libgomp.fortran/cancel-do-2.f90: New test.
+       * testsuite/libgomp.fortran/cancel-parallel-1.f90: New test.
+       * testsuite/libgomp.fortran/cancel-parallel-3.f90: New test.
+       * testsuite/libgomp.fortran/cancel-sections-1.f90: New test.
+       * testsuite/libgomp.fortran/cancel-taskgroup-2.f90: New test.
+       * testsuite/libgomp.fortran/declare-simd-1.f90: New test.
+       * testsuite/libgomp.fortran/declare-simd-2.f90: New test.
+       * testsuite/libgomp.fortran/declare-simd-3.f90: New test.
+       * testsuite/libgomp.fortran/depend-1.f90: New test.
+       * testsuite/libgomp.fortran/depend-2.f90: New test.
+       * testsuite/libgomp.fortran/omp_atomic5.f90: New test.
+       * testsuite/libgomp.fortran/simd1.f90: New test.
+       * testsuite/libgomp.fortran/simd2.f90: New test.
+       * testsuite/libgomp.fortran/simd3.f90: New test.
+       * testsuite/libgomp.fortran/simd4.f90: New test.
+       * testsuite/libgomp.fortran/taskgroup1.f90: New test.
+
+2014-06-24  Jakub Jelinek  <jakub@redhat.com>
+
+       * testsuite/libgomp.c/for-2.c: Define SC to static for
+       #pragma omp for simd testing.
+       * testsuite/libgomp.c/for-2.h (SC): Define if not defined.
+       (N(f5), N(f6), N(f7), N(f8), N(f10), N(f12), N(f14)): Use
+       SC macro.
+       * testsuite/libgomp.c/simd-14.c: New test.
+       * testsuite/libgomp.c/simd-15.c: New test.
+       * testsuite/libgomp.c/simd-16.c: New test.
+       * testsuite/libgomp.c/simd-17.c: New test.
+       * testsuite/libgomp.c++/for-10.C: Define SC to static for
+       #pragma omp for simd testing.
+       * testsuite/libgomp.c++/simd10.C: New test.
+       * testsuite/libgomp.c++/simd11.C: New test.
+       * testsuite/libgomp.c++/simd12.C: New test.
+       * testsuite/libgomp.c++/simd13.C: New test.
+
+2014-05-21  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/61252
+       * testsuite/libgomp.c++/simd-9.C: New test.
+
+2014-05-18  Uros Bizjak  <ubizjak@gmail.com>
+
+       * libgomp.texi (Runitme Library Routines): Remove multiple @menu.
+       (Environment Variables) Move OMP_PROC_BIND and OMP_STACKSIZE node
+       texts according to their @menu entry positions.
+
+2014-05-02  Jakub Jelinek  <jakub@redhat.com>
+
+       * testsuite/libgomp.c/simd-10.c: New test.
+       * testsuite/libgomp.c/simd-11.c: New test.
+       * testsuite/libgomp.c/simd-12.c: New test.
+       * testsuite/libgomp.c/simd-13.c: New test.
+
+2014-04-24  Jakub Jelinek  <jakub@redhat.com>
+
+       * testsuite/libgomp.c++/atomic-14.C: Allow seq_cst and
+       atomic type clauses in any order and optional comma in between.
+       * testsuite/libgomp.c++/atomic-15.C: Likewise.
+       * testsuite/libgomp.c/atomic-17.c: Likewise.
+
+       * testsuite/libgomp.c/simd-7.c: New test.
+       * testsuite/libgomp.c/simd-8.c: New test.
+       * testsuite/libgomp.c/simd-9.c: New test.
+       * testsuite/libgomp.c/loop-16.c: New test.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index a2d8495..5ade281 100644 (file)
@@ -107,11 +107,11 @@ The runtime routines described here are defined by Section 3 of the
 OpenMP specification in version 4.0.  The routines are structured in
 following three parts:
 
-   Control threads, processors and the parallel environment.  They have
-C linkage, and do not throw exceptions.
-
 * Menu:
 
+Control threads, processors and the parallel environment.  They have C
+linkage, and do not throw exceptions.
+
 * omp_get_active_level::        Number of active parallel regions
 * omp_get_ancestor_thread_num:: Ancestor thread ID
 * omp_get_cancellation::        Whether cancellation support is enabled
@@ -141,9 +141,7 @@ C linkage, and do not throw exceptions.
 * omp_set_num_threads::         Set upper team size limit
 * omp_set_schedule::            Set the runtime scheduling method
 
-   Initialize, set, test, unset and destroy simple and nested locks.
-
-* Menu:
+Initialize, set, test, unset and destroy simple and nested locks.
 
 * omp_init_lock::            Initialize simple lock
 * omp_set_lock::             Wait for and set simple lock
@@ -156,9 +154,7 @@ C linkage, and do not throw exceptions.
 * omp_unset_nest_lock::      Unset nested lock
 * omp_destroy_nest_lock::    Destroy nested lock
 
-   Portable, thread-based, wall clock timer.
-
-* Menu:
+Portable, thread-based, wall clock timer.
 
 * omp_get_wtick::            Get timer precision.
 * omp_get_wtime::            Elapsed wall clock time.
@@ -1250,7 +1246,7 @@ _Reference_:
      OpenMP specification v4.0 (http://www.openmp.org/), Section 4.6
 
 \1f
-File: libgomp.info,  Node: OMP_NUM_THREADS,  Next: OMP_PLACES,  Prev: OMP_NESTED,  Up: Environment Variables
+File: libgomp.info,  Node: OMP_NUM_THREADS,  Next: OMP_PROC_BIND,  Prev: OMP_NESTED,  Up: Environment Variables
 
 3.7 'OMP_NUM_THREADS' - Specifies the number of threads to use
 ==============================================================
@@ -1269,9 +1265,36 @@ _Reference_:
      OpenMP specification v4.0 (http://www.openmp.org/), Section 4.2
 
 \1f
-File: libgomp.info,  Node: OMP_PLACES,  Next: OMP_PROC_BIND,  Prev: OMP_NUM_THREADS,  Up: Environment Variables
+File: libgomp.info,  Node: OMP_PROC_BIND,  Next: OMP_PLACES,  Prev: OMP_NUM_THREADS,  Up: Environment Variables
+
+3.8 'OMP_PROC_BIND' - Whether theads may be moved between CPUs
+==============================================================
+
+_Description_:
+     Specifies whether threads may be moved between processors.  If set
+     to 'TRUE', OpenMP theads should not be moved; if set to 'FALSE'
+     they may be moved.  Alternatively, a comma separated list with the
+     values 'MASTER', 'CLOSE' and 'SPREAD' can be used to specify the
+     thread affinity policy for the corresponding nesting level.  With
+     'MASTER' the worker threads are in the same place partition as the
+     master thread.  With 'CLOSE' those are kept close to the master
+     thread in contiguous place partitions.  And with 'SPREAD' a sparse
+     distribution across the place partitions is used.
+
+     When undefined, 'OMP_PROC_BIND' defaults to 'TRUE' when
+     'OMP_PLACES' or 'GOMP_CPU_AFFINITY' is set and 'FALSE' otherwise.
+
+_See also_:
+     *note OMP_PLACES::, *note GOMP_CPU_AFFINITY::, *note
+     omp_get_proc_bind::
+
+_Reference_:
+     OpenMP specification v4.0 (http://www.openmp.org/), Section 4.4
+
+\1f
+File: libgomp.info,  Node: OMP_PLACES,  Next: OMP_STACKSIZE,  Prev: OMP_PROC_BIND,  Up: Environment Variables
 
-3.8 'OMP_PLACES' - Specifies on which CPUs the theads should be placed
+3.9 'OMP_PLACES' - Specifies on which CPUs the theads should be placed
 ======================================================================
 
 _Description_:
@@ -1311,36 +1334,28 @@ _Reference_:
      OpenMP specification v4.0 (http://www.openmp.org/), Section 4.5
 
 \1f
-File: libgomp.info,  Node: OMP_PROC_BIND,  Next: OMP_SCHEDULE,  Prev: OMP_PLACES,  Up: Environment Variables
+File: libgomp.info,  Node: OMP_STACKSIZE,  Next: OMP_SCHEDULE,  Prev: OMP_PLACES,  Up: Environment Variables
 
-3.9 'OMP_PROC_BIND' - Whether theads may be moved between CPUs
-==============================================================
+3.10 'OMP_STACKSIZE' - Set default thread stack size
+====================================================
 
 _Description_:
-     Specifies whether threads may be moved between processors.  If set
-     to 'TRUE', OpenMP theads should not be moved; if set to 'FALSE'
-     they may be moved.  Alternatively, a comma separated list with the
-     values 'MASTER', 'CLOSE' and 'SPREAD' can be used to specify the
-     thread affinity policy for the corresponding nesting level.  With
-     'MASTER' the worker threads are in the same place partition as the
-     master thread.  With 'CLOSE' those are kept close to the master
-     thread in contiguous place partitions.  And with 'SPREAD' a sparse
-     distribution across the place partitions is used.
-
-     When undefined, 'OMP_PROC_BIND' defaults to 'TRUE' when
-     'OMP_PLACES' or 'GOMP_CPU_AFFINITY' is set and 'FALSE' otherwise.
-
-_See also_:
-     *note OMP_PLACES::, *note GOMP_CPU_AFFINITY::, *note
-     omp_get_proc_bind::
+     Set the default thread stack size in kilobytes, unless the number
+     is suffixed by 'B', 'K', 'M' or 'G', in which case the size is,
+     respectively, in bytes, kilobytes, megabytes or gigabytes.  This is
+     different from 'pthread_attr_setstacksize' which gets the number of
+     bytes as an argument.  If the stack size cannot be set due to
+     system constraints, an error is reported and the initial stack size
+     is left unchanged.  If undefined, the stack size is system
+     dependent.
 
 _Reference_:
-     OpenMP specification v4.0 (http://www.openmp.org/), Section 4.4
+     OpenMP specification v4.0 (http://www.openmp.org/), Section 4.7
 
 \1f
-File: libgomp.info,  Node: OMP_SCHEDULE,  Next: OMP_STACKSIZE,  Prev: OMP_PROC_BIND,  Up: Environment Variables
+File: libgomp.info,  Node: OMP_SCHEDULE,  Next: OMP_THREAD_LIMIT,  Prev: OMP_STACKSIZE,  Up: Environment Variables
 
-3.10 'OMP_SCHEDULE' - How threads are scheduled
+3.11 'OMP_SCHEDULE' - How threads are scheduled
 ===============================================
 
 _Description_:
@@ -1358,26 +1373,7 @@ _Reference_:
      and 4.1
 
 \1f
-File: libgomp.info,  Node: OMP_STACKSIZE,  Next: OMP_THREAD_LIMIT,  Prev: OMP_SCHEDULE,  Up: Environment Variables
-
-3.11 'OMP_STACKSIZE' - Set default thread stack size
-====================================================
-
-_Description_:
-     Set the default thread stack size in kilobytes, unless the number
-     is suffixed by 'B', 'K', 'M' or 'G', in which case the size is,
-     respectively, in bytes, kilobytes, megabytes or gigabytes.  This is
-     different from 'pthread_attr_setstacksize' which gets the number of
-     bytes as an argument.  If the stack size cannot be set due to
-     system constraints, an error is reported and the initial stack size
-     is left unchanged.  If undefined, the stack size is system
-     dependent.
-
-_Reference_:
-     OpenMP specification v4.0 (http://www.openmp.org/), Section 4.7
-
-\1f
-File: libgomp.info,  Node: OMP_THREAD_LIMIT,  Next: OMP_WAIT_POLICY,  Prev: OMP_STACKSIZE,  Up: Environment Variables
+File: libgomp.info,  Node: OMP_THREAD_LIMIT,  Next: OMP_WAIT_POLICY,  Prev: OMP_SCHEDULE,  Up: Environment Variables
 
 3.12 'OMP_THREAD_LIMIT' - Set the maximum number of threads
 ===========================================================
@@ -3127,10 +3123,10 @@ Library Index
 * Environment Variable <4>:              OMP_MAX_ACTIVE_LEVELS. (line 6)
 * Environment Variable <5>:              OMP_NESTED.            (line 6)
 * Environment Variable <6>:              OMP_NUM_THREADS.       (line 6)
-* Environment Variable <7>:              OMP_PLACES.            (line 6)
-* Environment Variable <8>:              OMP_PROC_BIND.         (line 6)
-* Environment Variable <9>:              OMP_SCHEDULE.          (line 6)
-* Environment Variable <10>:             OMP_STACKSIZE.         (line 6)
+* Environment Variable <7>:              OMP_PROC_BIND.         (line 6)
+* Environment Variable <8>:              OMP_PLACES.            (line 6)
+* Environment Variable <9>:              OMP_STACKSIZE.         (line 6)
+* Environment Variable <10>:             OMP_SCHEDULE.          (line 6)
 * Environment Variable <11>:             OMP_THREAD_LIMIT.      (line 6)
 * Environment Variable <12>:             OMP_WAIT_POLICY.       (line 6)
 * Environment Variable <13>:             GOMP_CPU_AFFINITY.     (line 6)
@@ -3151,82 +3147,82 @@ Tag Table:
 Node: Top\7f1992
 Node: Enabling OpenMP\7f3186
 Node: Runtime Library Routines\7f3973
-Node: omp_get_active_level\7f6987
-Node: omp_get_ancestor_thread_num\7f7687
-Node: omp_get_cancellation\7f8617
-Node: omp_get_default_device\7f9431
-Node: omp_get_dynamic\7f10107
-Node: omp_get_level\7f10982
-Node: omp_get_max_active_levels\7f11602
-Node: omp_get_max_threads\7f12301
-Node: omp_get_nested\7f13058
-Node: omp_get_num_devices\7f13970
-Node: omp_get_num_procs\7f14491
-Node: omp_get_num_teams\7f15030
-Node: omp_get_num_threads\7f15546
-Node: omp_get_proc_bind\7f16635
-Node: omp_get_schedule\7f17556
-Node: omp_get_team_num\7f18502
-Node: omp_get_team_size\7f19001
-Node: omp_get_thread_limit\7f19961
-Node: omp_get_thread_num\7f20580
-Node: omp_in_parallel\7f21451
-Node: omp_in_final\7f22100
-Node: omp_is_initial_device\7f22774
-Node: omp_set_default_device\7f23467
-Node: omp_set_dynamic\7f24258
-Node: omp_set_max_active_levels\7f25144
-Node: omp_set_nested\7f25921
-Node: omp_set_num_threads\7f26813
-Node: omp_set_schedule\7f27681
-Node: omp_init_lock\7f28732
-Node: omp_set_lock\7f29385
-Node: omp_test_lock\7f30240
-Node: omp_unset_lock\7f31216
-Node: omp_destroy_lock\7f32147
-Node: omp_init_nest_lock\7f32824
-Node: omp_set_nest_lock\7f33559
-Node: omp_test_nest_lock\7f34474
-Node: omp_unset_nest_lock\7f35501
-Node: omp_destroy_nest_lock\7f36516
-Node: omp_get_wtick\7f37267
-Node: omp_get_wtime\7f37859
-Node: Environment Variables\7f38635
-Node: OMP_CANCELLATION\7f39977
-Node: OMP_DISPLAY_ENV\7f40510
-Node: OMP_DEFAULT_DEVICE\7f41213
-Node: OMP_DYNAMIC\7f41993
-Node: OMP_MAX_ACTIVE_LEVELS\7f42589
-Node: OMP_NESTED\7f43228
-Node: OMP_NUM_THREADS\7f43833
-Node: OMP_PLACES\7f44518
-Node: OMP_PROC_BIND\7f46695
-Node: OMP_SCHEDULE\7f47884
-Node: OMP_STACKSIZE\7f48577
-Node: OMP_THREAD_LIMIT\7f49407
-Node: OMP_WAIT_POLICY\7f50008
-Node: GOMP_CPU_AFFINITY\7f50700
-Node: GOMP_STACKSIZE\7f52437
-Node: GOMP_SPINCOUNT\7f53273
-Node: The libgomp ABI\7f54445
-Node: Implementing MASTER construct\7f55244
-Node: Implementing CRITICAL construct\7f55658
-Node: Implementing ATOMIC construct\7f56397
-Node: Implementing FLUSH construct\7f56878
-Node: Implementing BARRIER construct\7f57149
-Node: Implementing THREADPRIVATE construct\7f57418
-Node: Implementing PRIVATE clause\7f58071
-Node: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses\7f58652
-Node: Implementing REDUCTION clause\7f59976
-Node: Implementing PARALLEL construct\7f60533
-Node: Implementing FOR construct\7f61790
-Node: Implementing ORDERED construct\7f63788
-Node: Implementing SECTIONS construct\7f64094
-Node: Implementing SINGLE construct\7f64860
-Node: Reporting Bugs\7f65522
-Node: Copying\7f65832
-Node: GNU Free Documentation License\7f103378
-Node: Funding\7f128500
-Node: Library Index\7f131026
+Node: omp_get_active_level\7f6960
+Node: omp_get_ancestor_thread_num\7f7660
+Node: omp_get_cancellation\7f8590
+Node: omp_get_default_device\7f9404
+Node: omp_get_dynamic\7f10080
+Node: omp_get_level\7f10955
+Node: omp_get_max_active_levels\7f11575
+Node: omp_get_max_threads\7f12274
+Node: omp_get_nested\7f13031
+Node: omp_get_num_devices\7f13943
+Node: omp_get_num_procs\7f14464
+Node: omp_get_num_teams\7f15003
+Node: omp_get_num_threads\7f15519
+Node: omp_get_proc_bind\7f16608
+Node: omp_get_schedule\7f17529
+Node: omp_get_team_num\7f18475
+Node: omp_get_team_size\7f18974
+Node: omp_get_thread_limit\7f19934
+Node: omp_get_thread_num\7f20553
+Node: omp_in_parallel\7f21424
+Node: omp_in_final\7f22073
+Node: omp_is_initial_device\7f22747
+Node: omp_set_default_device\7f23440
+Node: omp_set_dynamic\7f24231
+Node: omp_set_max_active_levels\7f25117
+Node: omp_set_nested\7f25894
+Node: omp_set_num_threads\7f26786
+Node: omp_set_schedule\7f27654
+Node: omp_init_lock\7f28705
+Node: omp_set_lock\7f29358
+Node: omp_test_lock\7f30213
+Node: omp_unset_lock\7f31189
+Node: omp_destroy_lock\7f32120
+Node: omp_init_nest_lock\7f32797
+Node: omp_set_nest_lock\7f33532
+Node: omp_test_nest_lock\7f34447
+Node: omp_unset_nest_lock\7f35474
+Node: omp_destroy_nest_lock\7f36489
+Node: omp_get_wtick\7f37240
+Node: omp_get_wtime\7f37832
+Node: Environment Variables\7f38608
+Node: OMP_CANCELLATION\7f39950
+Node: OMP_DISPLAY_ENV\7f40483
+Node: OMP_DEFAULT_DEVICE\7f41186
+Node: OMP_DYNAMIC\7f41966
+Node: OMP_MAX_ACTIVE_LEVELS\7f42562
+Node: OMP_NESTED\7f43201
+Node: OMP_NUM_THREADS\7f43806
+Node: OMP_PROC_BIND\7f44494
+Node: OMP_PLACES\7f45686
+Node: OMP_STACKSIZE\7f47861
+Node: OMP_SCHEDULE\7f48685
+Node: OMP_THREAD_LIMIT\7f49381
+Node: OMP_WAIT_POLICY\7f49981
+Node: GOMP_CPU_AFFINITY\7f50673
+Node: GOMP_STACKSIZE\7f52410
+Node: GOMP_SPINCOUNT\7f53246
+Node: The libgomp ABI\7f54418
+Node: Implementing MASTER construct\7f55217
+Node: Implementing CRITICAL construct\7f55631
+Node: Implementing ATOMIC construct\7f56370
+Node: Implementing FLUSH construct\7f56851
+Node: Implementing BARRIER construct\7f57122
+Node: Implementing THREADPRIVATE construct\7f57391
+Node: Implementing PRIVATE clause\7f58044
+Node: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses\7f58625
+Node: Implementing REDUCTION clause\7f59949
+Node: Implementing PARALLEL construct\7f60506
+Node: Implementing FOR construct\7f61763
+Node: Implementing ORDERED construct\7f63761
+Node: Implementing SECTIONS construct\7f64067
+Node: Implementing SINGLE construct\7f64833
+Node: Reporting Bugs\7f65495
+Node: Copying\7f65805
+Node: GNU Free Documentation License\7f103351
+Node: Funding\7f128473
+Node: Library Index\7f130999
 \1f
 End Tag Table
index 8461c5b..254be57 100644 (file)
@@ -130,10 +130,10 @@ The runtime routines described here are defined by Section 3 of the OpenMP
 specification in version 4.0.  The routines are structured in following
 three parts:
 
+@menu
 Control threads, processors and the parallel environment.  They have C
 linkage, and do not throw exceptions.
 
-@menu
 * omp_get_active_level::        Number of active parallel regions
 * omp_get_ancestor_thread_num:: Ancestor thread ID
 * omp_get_cancellation::        Whether cancellation support is enabled
@@ -162,11 +162,9 @@ linkage, and do not throw exceptions.
 * omp_set_nested::              Enable/disable nested parallel regions
 * omp_set_num_threads::         Set upper team size limit
 * omp_set_schedule::            Set the runtime scheduling method
-@end menu
 
 Initialize, set, test, unset and destroy simple and nested locks.
 
-@menu
 * omp_init_lock::            Initialize simple lock
 * omp_set_lock::             Wait for and set simple lock
 * omp_test_lock::            Test and set simple lock if available
@@ -177,11 +175,9 @@ Initialize, set, test, unset and destroy simple and nested locks.
 * omp_test_nest_lock::       Test and set nested lock if available
 * omp_unset_nest_lock::      Unset nested lock
 * omp_destroy_nest_lock::    Destroy nested lock
-@end menu
 
 Portable, thread-based, wall clock timer.
 
-@menu
 * omp_get_wtick::            Get timer precision.
 * omp_get_wtime::            Elapsed wall clock time.
 @end menu
@@ -1448,6 +1444,33 @@ level.  If undefined one thread per CPU is used.
 
 
 
+@node OMP_PROC_BIND
+@section @env{OMP_PROC_BIND} -- Whether theads may be moved between CPUs
+@cindex Environment Variable
+@table @asis
+@item @emph{Description}:
+Specifies whether threads may be moved between processors.  If set to
+@code{TRUE}, OpenMP theads should not be moved; if set to @code{FALSE}
+they may be moved.  Alternatively, a comma separated list with the
+values @code{MASTER}, @code{CLOSE} and @code{SPREAD} can be used to specify
+the thread affinity policy for the corresponding nesting level.  With
+@code{MASTER} the worker threads are in the same place partition as the
+master thread.  With @code{CLOSE} those are kept close to the master thread
+in contiguous place partitions.  And with @code{SPREAD} a sparse distribution
+across the place partitions is used.
+
+When undefined, @env{OMP_PROC_BIND} defaults to @code{TRUE} when
+@env{OMP_PLACES} or @env{GOMP_CPU_AFFINITY} is set and @code{FALSE} otherwise.
+
+@item @emph{See also}:
+@ref{OMP_PLACES}, @ref{GOMP_CPU_AFFINITY}, @ref{omp_get_proc_bind}
+
+@item @emph{Reference}:
+@uref{http://www.openmp.org/, OpenMP specification v4.0}, Section 4.4
+@end table
+
+
+
 @node OMP_PLACES
 @section @env{OMP_PLACES} -- Specifies on which CPUs the theads should be placed
 @cindex Environment Variable
@@ -1490,29 +1513,22 @@ between CPUs following no placement policy.
 
 
 
-@node OMP_PROC_BIND
-@section @env{OMP_PROC_BIND} -- Whether theads may be moved between CPUs
+@node OMP_STACKSIZE
+@section @env{OMP_STACKSIZE} -- Set default thread stack size
 @cindex Environment Variable
 @table @asis
 @item @emph{Description}:
-Specifies whether threads may be moved between processors.  If set to
-@code{TRUE}, OpenMP theads should not be moved; if set to @code{FALSE}
-they may be moved.  Alternatively, a comma separated list with the
-values @code{MASTER}, @code{CLOSE} and @code{SPREAD} can be used to specify
-the thread affinity policy for the corresponding nesting level.  With
-@code{MASTER} the worker threads are in the same place partition as the
-master thread.  With @code{CLOSE} those are kept close to the master thread
-in contiguous place partitions.  And with @code{SPREAD} a sparse distribution
-across the place partitions is used.
-
-When undefined, @env{OMP_PROC_BIND} defaults to @code{TRUE} when
-@env{OMP_PLACES} or @env{GOMP_CPU_AFFINITY} is set and @code{FALSE} otherwise.
-
-@item @emph{See also}:
-@ref{OMP_PLACES}, @ref{GOMP_CPU_AFFINITY}, @ref{omp_get_proc_bind}
+Set the default thread stack size in kilobytes, unless the number
+is suffixed by @code{B}, @code{K}, @code{M} or @code{G}, in which
+case the size is, respectively, in bytes, kilobytes, megabytes
+or gigabytes.  This is different from @code{pthread_attr_setstacksize}
+which gets the number of bytes as an argument.  If the stack size cannot
+be set due to system constraints, an error is reported and the initial
+stack size is left unchanged.  If undefined, the stack size is system
+dependent.
 
-@item @emph{Reference}:
-@uref{http://www.openmp.org/, OpenMP specification v4.0}, Section 4.4
+@item @emph{Reference}: 
+@uref{http://www.openmp.org/, OpenMP specification v4.0}, Section 4.7
 @end table
 
 
@@ -1538,26 +1554,6 @@ dynamic scheduling and a chunk size of 1 is used.
 
 
 
-@node OMP_STACKSIZE
-@section @env{OMP_STACKSIZE} -- Set default thread stack size
-@cindex Environment Variable
-@table @asis
-@item @emph{Description}:
-Set the default thread stack size in kilobytes, unless the number
-is suffixed by @code{B}, @code{K}, @code{M} or @code{G}, in which
-case the size is, respectively, in bytes, kilobytes, megabytes
-or gigabytes.  This is different from @code{pthread_attr_setstacksize}
-which gets the number of bytes as an argument.  If the stack size cannot
-be set due to system constraints, an error is reported and the initial
-stack size is left unchanged.  If undefined, the stack size is system
-dependent.
-
-@item @emph{Reference}: 
-@uref{http://www.openmp.org/, OpenMP specification v4.0}, Section 4.7
-@end table
-
-
-
 @node OMP_THREAD_LIMIT
 @section @env{OMP_THREAD_LIMIT} -- Set the maximum number of threads
 @cindex Environment Variable
index dda297a..757053c 100644 (file)
@@ -42,7 +42,7 @@
       module omp_lib
         use omp_lib_kinds
         implicit none
-        integer, parameter :: openmp_version = 201107
+        integer, parameter :: openmp_version = 201307
 
         interface
           subroutine omp_init_lock (svar)
index 7725396..691adb8 100644 (file)
@@ -45,7 +45,7 @@
       parameter (omp_proc_bind_master = 2)
       parameter (omp_proc_bind_close = 3)
       parameter (omp_proc_bind_spread = 4)
-      parameter (openmp_version = 201107)
+      parameter (openmp_version = 201307)
 
       external omp_init_lock, omp_init_nest_lock
       external omp_destroy_lock, omp_destroy_nest_lock
index 4cd9df8..dccea3a 100644 (file)
@@ -13,13 +13,13 @@ main ()
     v = x;
   if (v != 3)
     abort ();
-  #pragma omp atomic update seq_cst
+  #pragma omp atomic seq_cst update
     x = 3 * 2 * 1 + x;
-  #pragma omp atomic read seq_cst
+  #pragma omp atomic read, seq_cst
     v = x;
   if (v != 9)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst, capture
     v = x = x | 16;
   if (v != 25)
     abort ();
@@ -27,15 +27,15 @@ main ()
     v = x = x + 14 * 2 / 4;
   if (v != 32)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst capture
     v = x = 5 | x;
   if (v != 37)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic capture, seq_cst
     v = x = 40 + 12 - 2 - 7 - x;
   if (v != 6)
     abort ();
-  #pragma omp atomic read seq_cst
+  #pragma omp atomic seq_cst read
     v = x;
   if (v != 6)
     abort ();
@@ -43,7 +43,7 @@ main ()
     { v = x; x = 3 + x; }
   if (v != 6)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst capture
     { v = x; x = -1 * -1 * -1 * -1 - x; }
   if (v != 9)
     abort ();
@@ -51,11 +51,11 @@ main ()
     v = x;
   if (v != -8)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic capture, seq_cst
     { x = 2 * 2 - x; v = x; }
   if (v != 12)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst capture
     { x = 7 & x; v = x; }
   if (v != 4)
     abort ();
@@ -63,7 +63,7 @@ main ()
     { v = x; x = 6; }
   if (v != 4)
     abort ();
-  #pragma omp atomic read seq_cst
+  #pragma omp atomic read, seq_cst
     v = x;
   if (v != 6)
     abort ();
@@ -71,11 +71,11 @@ main ()
     { v = x; x = 7 * 8 + 23; }
   if (v != 6)
     abort ();
-  #pragma omp atomic read seq_cst
+  #pragma omp atomic seq_cst, read
     v = x;
   if (v != 79)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic capture seq_cst
     { v = x; x = 23 + 6 * 4; }
   if (v != 79)
     abort ();
@@ -83,7 +83,7 @@ main ()
     v = x;
   if (v != 47)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst capture
     { v = x; x = l ? 17 : 12; }
   if (v != 47)
     abort ();
index 1eabce7..9abefb6 100644 (file)
@@ -14,13 +14,13 @@ foo ()
     v = x;
   if (v != 3)
     abort ();
-  #pragma omp atomic update seq_cst
+  #pragma omp atomic seq_cst update
     x = 3 * 2 * 1 + x;
-  #pragma omp atomic read seq_cst
+  #pragma omp atomic read, seq_cst
     v = x;
   if (v != 9)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst, capture
     v = x = x | 16;
   if (v != 25)
     abort ();
@@ -28,15 +28,15 @@ foo ()
     v = x = x + 14 * 2 / 4;
   if (v != 32)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst capture
     v = x = 5 | x;
   if (v != 37)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic capture, seq_cst
     v = x = 40 + 12 - 2 - 7 - x;
   if (v != 6)
     abort ();
-  #pragma omp atomic read seq_cst
+  #pragma omp atomic seq_cst read
     v = x;
   if (v != 6)
     abort ();
@@ -44,7 +44,7 @@ foo ()
     { v = x; x = 3 + x; }
   if (v != 6)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst capture
     { v = x; x = -1 * -1 * -1 * -1 - x; }
   if (v != 9)
     abort ();
@@ -52,11 +52,11 @@ foo ()
     v = x;
   if (v != -8)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic capture, seq_cst
     { x = 2 * 2 - x; v = x; }
   if (v != 12)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst capture
     { x = 7 & x; v = x; }
   if (v != 4)
     abort ();
@@ -64,7 +64,7 @@ foo ()
     { v = x; x = 6; }
   if (v != 4)
     abort ();
-  #pragma omp atomic read seq_cst
+  #pragma omp atomic read, seq_cst
     v = x;
   if (v != 6)
     abort ();
@@ -72,11 +72,11 @@ foo ()
     { v = x; x = 7 * 8 + 23; }
   if (v != 6)
     abort ();
-  #pragma omp atomic read seq_cst
+  #pragma omp atomic seq_cst, read
     v = x;
   if (v != 79)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic capture seq_cst
     { v = x; x = 23 + 6 * 4; }
   if (v != 79)
     abort ();
@@ -84,7 +84,7 @@ foo ()
     v = x;
   if (v != 47)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst capture
     { v = x; x = l ? 17 : 12; }
   if (v != 47)
     abort ();
index fb1a3e9..c67096a 100644 (file)
@@ -19,11 +19,14 @@ extern "C" void abort ();
 #undef F
 #undef G
 
+#undef SC
+#define SC static
 #define F for simd
 #define G f_simd
 #include "../libgomp.c/for-1.h"
 #undef F
 #undef G
+#undef SC
 
 int
 main ()
diff --git a/libgomp/testsuite/libgomp.c++/simd-9.C b/libgomp/testsuite/libgomp.c++/simd-9.C
new file mode 100644 (file)
index 0000000..3c567b3
--- /dev/null
@@ -0,0 +1,52 @@
+// { dg-do run }
+// { dg-options "-O2" }
+// { dg-additional-options "-msse2" { target sse2_runtime } }
+// { dg-additional-options "-mavx" { target avx_runtime } }
+
+extern "C" void abort ();
+int a[1024] __attribute__((aligned (32))) = { 1 };
+#pragma omp declare reduction (foo:int:omp_out += omp_in) \
+                   initializer (omp_priv = 0)
+
+__attribute__((noinline, noclone)) void
+foo (int &u, int &v)
+{
+  int i;
+  #pragma omp simd aligned(a : 32) reduction(foo:u) reduction(+:v)
+  for (i = 0; i < 1024; i++)
+    {
+      int x = a[i];
+      u += x;
+      v += x;
+    }
+}
+
+__attribute__((noinline, noclone)) void
+bar (int &u, int &v)
+{
+  int i;
+  #pragma omp simd aligned(a : 32) reduction(foo:u) reduction(+:v) \
+                  safelen(1)
+  for (i = 0; i < 1024; i++)
+    {
+      int x = a[i];
+      u += x;
+      v += x;
+    }
+}
+
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 1024; i++)
+    a[i] = (i & 31) + (i / 128);
+  int u = 0, v = 0;
+  foo (u, v);
+  if (u != 19456 || v != 19456)
+    abort ();
+  u = 0; v = 0;
+  bar (u, v);
+  if (u != 19456 || v != 19456)
+    abort ();
+}
diff --git a/libgomp/testsuite/libgomp.c++/simd10.C b/libgomp/testsuite/libgomp.c++/simd10.C
new file mode 100644 (file)
index 0000000..390e65f
--- /dev/null
@@ -0,0 +1,6 @@
+// { dg-do run }
+// { dg-options "-O2" }
+// { dg-additional-options "-msse2" { target sse2_runtime } }
+// { dg-additional-options "-mavx" { target avx_runtime } }
+
+#include "../libgomp.c/simd-14.c"
diff --git a/libgomp/testsuite/libgomp.c++/simd11.C b/libgomp/testsuite/libgomp.c++/simd11.C
new file mode 100644 (file)
index 0000000..b966868
--- /dev/null
@@ -0,0 +1,6 @@
+// { dg-do run }
+// { dg-options "-O2" }
+// { dg-additional-options "-msse2" { target sse2_runtime } }
+// { dg-additional-options "-mavx" { target avx_runtime } }
+
+#include "../libgomp.c/simd-15.c"
diff --git a/libgomp/testsuite/libgomp.c++/simd12.C b/libgomp/testsuite/libgomp.c++/simd12.C
new file mode 100644 (file)
index 0000000..ecfc912
--- /dev/null
@@ -0,0 +1,6 @@
+// { dg-do run }
+// { dg-options "-O2" }
+// { dg-additional-options "-msse2" { target sse2_runtime } }
+// { dg-additional-options "-mavx" { target avx_runtime } }
+
+#include "../libgomp.c/simd-16.c"
diff --git a/libgomp/testsuite/libgomp.c++/simd13.C b/libgomp/testsuite/libgomp.c++/simd13.C
new file mode 100644 (file)
index 0000000..f749620
--- /dev/null
@@ -0,0 +1,6 @@
+// { dg-do run }
+// { dg-options "-O2" }
+// { dg-additional-options "-msse2" { target sse2_runtime } }
+// { dg-additional-options "-mavx" { target avx_runtime } }
+
+#include "../libgomp.c/simd-17.c"
index 2bd0e9b..147ab26 100644 (file)
@@ -13,13 +13,13 @@ main ()
     v = x;
   if (v != 3)
     abort ();
-  #pragma omp atomic update seq_cst
+  #pragma omp atomic seq_cst update
     x = 3 * 2 * 1 + x;
-  #pragma omp atomic read seq_cst
+  #pragma omp atomic read, seq_cst
     v = x;
   if (v != 9)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst, capture
     v = x = x | 16;
   if (v != 25)
     abort ();
@@ -27,15 +27,15 @@ main ()
     v = x = x + 14 * 2 / 4;
   if (v != 32)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst capture
     v = x = 5 | x;
   if (v != 37)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic capture, seq_cst
     v = x = 40 + 12 - 2 - 7 - x;
   if (v != 6)
     abort ();
-  #pragma omp atomic read seq_cst
+  #pragma omp atomic seq_cst read
     v = x;
   if (v != 6)
     abort ();
@@ -43,7 +43,7 @@ main ()
     { v = x; x = 3 + x; }
   if (v != 6)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst capture
     { v = x; x = -1 * -1 * -1 * -1 - x; }
   if (v != 9)
     abort ();
@@ -51,11 +51,11 @@ main ()
     v = x;
   if (v != -8)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic capture, seq_cst
     { x = 2 * 2 - x; v = x; }
   if (v != 12)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst capture
     { x = 7 & x; v = x; }
   if (v != 4)
     abort ();
@@ -63,7 +63,7 @@ main ()
     { v = x; x = 6; }
   if (v != 4)
     abort ();
-  #pragma omp atomic read seq_cst
+  #pragma omp atomic read, seq_cst
     v = x;
   if (v != 6)
     abort ();
@@ -71,11 +71,11 @@ main ()
     { v = x; x = 7 * 8 + 23; }
   if (v != 6)
     abort ();
-  #pragma omp atomic read seq_cst
+  #pragma omp atomic seq_cst, read
     v = x;
   if (v != 79)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic capture seq_cst
     { v = x; x = 23 + 6 * 4; }
   if (v != 79)
     abort ();
@@ -83,7 +83,7 @@ main ()
     v = x;
   if (v != 47)
     abort ();
-  #pragma omp atomic capture seq_cst
+  #pragma omp atomic seq_cst capture
     { v = x; x = l ? 17 : 12; }
   if (v != 47)
     abort ();
index f5a01ab..ae81008 100644 (file)
@@ -21,11 +21,14 @@ extern void abort (void);
 #undef F
 #undef G
 
+#undef SC
+#define SC static
 #define F for simd
 #define G f_simd
 #include "for-1.h"
 #undef F
 #undef G
+#undef SC
 
 int
 main ()
index 57c385e..920d23b 100644 (file)
@@ -8,6 +8,9 @@ noreturn (void)
   for (;;);
 }
 #endif
+#ifndef SC
+#define SC
+#endif
 
 __attribute__((noinline, noclone)) void
 N(f0) (void)
@@ -57,7 +60,7 @@ __attribute__((noinline, noclone)) void
 N(f5) (int n11, int n12, int n21, int n22, int n31, int n32,
        int s1, int s2, int s3)
 {
-  int v1, v2, v3;
+  SC int v1, v2, v3;
 #pragma omp F S collapse(3)
   for (v1 = n11; v1 < n12; v1 += s1)
     for (v2 = n21; v2 < n22; v2 += s2)
@@ -69,8 +72,8 @@ __attribute__((noinline, noclone)) void
 N(f6) (int n11, int n12, int n21, int n22, long long n31, long long n32,
        int s1, int s2, long long int s3)
 {
-  int v1, v2;
-  long long v3;
+  SC int v1, v2;
+  SC long long v3;
 #pragma omp F S collapse(3)
   for (v1 = n11; v1 > n12; v1 += s1)
     for (v2 = n21; v2 > n22; v2 += s2)
@@ -81,8 +84,8 @@ N(f6) (int n11, int n12, int n21, int n22, long long n31, long long n32,
 __attribute__((noinline, noclone)) void
 N(f7) (void)
 {
-  unsigned int v1, v3;
-  unsigned long long v2;
+  SC unsigned int v1, v3;
+  SC unsigned long long v2;
 #pragma omp F S collapse(3)
   for (v1 = 0; v1 < 20; v1 += 2)
     for (v2 = __LONG_LONG_MAX__ + 16ULL;
@@ -94,7 +97,7 @@ N(f7) (void)
 __attribute__((noinline, noclone)) void
 N(f8) (void)
 {
-  long long v1, v2, v3;
+  SC long long v1, v2, v3;
 #pragma omp F S collapse(3)
   for (v1 = 0; v1 < 20; v1 += 2)
     for (v2 = 30; v2 < 20; v2++)
@@ -118,7 +121,7 @@ N(f9) (void)
 __attribute__((noinline, noclone)) void
 N(f10) (void)
 {
-  int i;
+  SC int i;
 #pragma omp F S collapse(3)
   for (i = 0; i < 10; i++)
     for (int j = 10; j < 8; j++)
@@ -146,7 +149,7 @@ N(f11) (int n)
 __attribute__((noinline, noclone)) void
 N(f12) (int n)
 {
-  int i;
+  SC int i;
 #pragma omp F S collapse(3)
   for (i = 0; i < 10; i++)
     for (int j = n; j < 8; j++)
@@ -170,7 +173,7 @@ N(f13) (void)
 __attribute__((noinline, noclone)) void
 N(f14) (void)
 {
-  float *i;
+  SC float *i;
 #pragma omp F S collapse(3)
   for (i = &b[0][0][0]; i < &b[0][0][10]; i++)
     for (float *j = &b[0][15][0]; j > &b[0][0][0]; j -= 10)
diff --git a/libgomp/testsuite/libgomp.c/loop-16.c b/libgomp/testsuite/libgomp.c/loop-16.c
new file mode 100644 (file)
index 0000000..3ef2f64
--- /dev/null
@@ -0,0 +1,27 @@
+/* { dg-do run } */
+
+extern void abort (void);
+
+volatile int count;
+static int test (void)
+{
+  return ++count > 0;
+}
+
+int i;
+
+int
+main ()
+{
+  #pragma omp for lastprivate (i)
+  for (i = 0; i < 10; ++i)
+    {
+      int *p = &i;
+      if (test ())
+       continue;
+      abort ();
+    }
+  if (i != count)
+    abort ();
+  return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/simd-10.c b/libgomp/testsuite/libgomp.c/simd-10.c
new file mode 100644 (file)
index 0000000..70cd9f0
--- /dev/null
@@ -0,0 +1,26 @@
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+/* { dg-additional-options "-msse2" { target sse2_runtime } } */
+/* { dg-additional-options "-mavx" { target avx_runtime } } */
+
+int s = 0, i, u;
+
+void
+foo ()
+{
+  #pragma omp for simd schedule(static, 32) reduction(+:s) lastprivate(u)
+  for (i = 0; i < 128; i++)
+    {
+      s++;
+      u = i;
+    }
+  if (i != 128 || s != 128 || u != 127)
+    __builtin_abort ();
+}
+
+int
+main ()
+{
+  foo ();
+  return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/simd-11.c b/libgomp/testsuite/libgomp.c/simd-11.c
new file mode 100644 (file)
index 0000000..b09f0dd
--- /dev/null
@@ -0,0 +1,27 @@
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+/* { dg-additional-options "-msse2" { target sse2_runtime } } */
+/* { dg-additional-options "-mavx" { target avx_runtime } } */
+
+int s = 0, i, j, u;
+
+void
+foo ()
+{
+  #pragma omp for simd schedule(static, 32) reduction(+:s) lastprivate(u) collapse(2)
+  for (i = 0; i < 16; i++)
+    for (j = 0; j < 16; j++)
+      {
+       s++;
+       u = i + j;
+      }
+  if (i != 16 || j != 16 || s != 256 || u != 30)
+    __builtin_abort ();
+}
+
+int
+main ()
+{
+  foo ();
+  return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/simd-12.c b/libgomp/testsuite/libgomp.c/simd-12.c
new file mode 100644 (file)
index 0000000..6685111
--- /dev/null
@@ -0,0 +1,19 @@
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+/* { dg-additional-options "-msse2" { target sse2_runtime } } */
+/* { dg-additional-options "-mavx" { target avx_runtime } } */
+
+int
+main ()
+{
+  int k = 0, i, s = 0;
+  #pragma omp parallel
+  #pragma omp for simd linear(k : 3) reduction(+: s) schedule (static, 16)
+  for (i = 0; i < 128; i++)
+    {
+      k = k + 3;
+      s = s + k;
+    }
+  if (s != 128 * 129 / 2 * 3) __builtin_abort ();
+  return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/simd-13.c b/libgomp/testsuite/libgomp.c/simd-13.c
new file mode 100644 (file)
index 0000000..7c817b7
--- /dev/null
@@ -0,0 +1,18 @@
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+/* { dg-additional-options "-msse2" { target sse2_runtime } } */
+/* { dg-additional-options "-mavx" { target avx_runtime } } */
+
+int
+main ()
+{
+  int k = 0, i, s = 0;
+  #pragma omp parallel for simd linear(k : 3) reduction(+: s) schedule (static, 16)
+  for (i = 0; i < 128; i++)
+    {
+      k = k + 3;
+      s = s + k;
+    }
+  if (s != 128 * 129 / 2 * 3) __builtin_abort ();
+  return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/simd-14.c b/libgomp/testsuite/libgomp.c/simd-14.c
new file mode 100644 (file)
index 0000000..50e8d5e
--- /dev/null
@@ -0,0 +1,123 @@
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+/* { dg-additional-options "-msse2" { target sse2_runtime } } */
+/* { dg-additional-options "-mavx" { target avx_runtime } } */
+
+int
+main ()
+{
+  int i, j, b, c = 0;
+  i = 4; j = 4; b = 7;
+  #pragma omp simd linear(b:2) reduction(+:c)
+  for (i = 0; i < 64; i++)
+    {
+      c = c + (b != 7 + 2 * i);
+      b = b + 2;
+    }
+  if (c || i != 64 || b != 7 + 64 * 2)
+    __builtin_abort ();
+  i = 4; j = 4; b = 7;
+  #pragma omp simd linear(b:3) reduction(+:c)
+  for (i = 0; i < 64; i += 4)
+    {
+      c = c + (b != 7 + i / 4 * 3);
+      b = b + 3;
+    }
+  if (c || i != 64 || b != 7 + 16 * 3)
+    __builtin_abort ();
+  i = 4; j = 4; b = 7;
+  #pragma omp simd linear(i) linear(b:2) reduction(+:c)
+  for (i = 0; i < 64; i++)
+    {
+      c = c + (b != 7 + 2 * i);
+      b = b + 2;
+    }
+  if (c || i != 64 || b != 7 + 64 * 2)
+    __builtin_abort ();
+  i = 4; j = 4; b = 7;
+  #pragma omp simd linear(i:4) linear(b:3) reduction(+:c)
+  for (i = 0; i < 64; i += 4)
+    {
+      c = c + (b != 7 + i / 4 * 3);
+      b = b + 3;
+    }
+  if (c || i != 64 || b != 7 + 16 * 3)
+    __builtin_abort ();
+  i = 4; j = 4; b = 7;
+  #pragma omp simd collapse (2) linear(b:2) reduction(+:c)
+  for (i = 0; i < 8; i++)
+    for (j = 0; j < 8; j++)
+      {
+       c = c + (b != 7 + 2 * j + 2 * 8 * i);
+       b = b + 2;
+      }
+  if (c || i != 8 || j != 8 || b != 7 + 64 * 2)
+    __builtin_abort ();
+  i = 4; j = 4; b = 7;
+  #pragma omp simd collapse (2) lastprivate (i, j) linear(b:2) reduction(+:c)
+  for (i = 0; i < 8; i++)
+    for (j = 0; j < 8; j++)
+      {
+       c = c + (b != 7 + 2 * j + 2 * 8 * i);
+       b = b + 2;
+      }
+  if (c || i != 8 || j != 8 || b != 7 + 64 * 2)
+    __builtin_abort ();
+  i = 4; j = 4; b = 7;
+  #pragma omp parallel for simd schedule (static, 4) linear(b:2) reduction(+:c)
+  for (i = 0; i < 64; i++)
+    {
+      c = c + (b != 7 + 2 * i);
+      b = b + 2;
+    }
+  if (c || i != 64 || b != 7 + 64 * 2)
+    __builtin_abort ();
+  i = 4; j = 4; b = 7;
+  #pragma omp parallel for simd schedule (static, 4) linear(b:3) reduction(+:c)
+  for (i = 0; i < 64; i += 4)
+    {
+      c = c + (b != 7 + i / 4 * 3);
+      b = b + 3;
+    }
+  if (c || i != 64 || b != 7 + 16 * 3)
+    __builtin_abort ();
+  i = 4; j = 4; b = 7;
+  #pragma omp parallel for simd schedule (static, 4) linear(i) linear(b:2) reduction(+:c)
+  for (i = 0; i < 64; i++)
+    {
+      c = c + (b != 7 + 2 * i);
+      b = b + 2;
+    }
+  if (c || i != 64 || b != 7 + 64 * 2)
+    __builtin_abort ();
+  i = 4; j = 4; b = 7;
+  #pragma omp parallel for simd schedule (static, 4) linear(i:4) linear(b:3) reduction(+:c)
+  for (i = 0; i < 64; i += 4)
+    {
+      c = c + (b != 7 + i / 4 * 3);
+      b = b + 3;
+    }
+  if (c || i != 64 || b != 7 + 16 * 3)
+    __builtin_abort ();
+  i = 4; j = 4; b = 7;
+  #pragma omp parallel for simd lastprivate (i, j) collapse (2) schedule (static, 4) linear(b:2) reduction(+:c)
+  for (i = 0; i < 8; i++)
+    for (j = 0; j < 8; j++)
+      {
+       c = c + (b != 7 + 2 * j + 2 * 8 * i);
+       b = b + 2;
+      }
+  if (c || i != 8 || j != 8 || b != 7 + 64 * 2)
+    __builtin_abort ();
+  i = 4; j = 4; b = 7;
+  #pragma omp parallel for simd collapse (2) schedule (static, 4) linear(b:2) reduction(+:c)
+  for (i = 0; i < 8; i++)
+    for (j = 0; j < 8; j++)
+      {
+       c = c + (b != 7 + 2 * j + 2 * 8 * i);
+       b = b + 2;
+      }
+  if (c || i != 8 || j != 8 || b != 7 + 64 * 2)
+    __builtin_abort ();
+  return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/simd-15.c b/libgomp/testsuite/libgomp.c/simd-15.c
new file mode 100644 (file)
index 0000000..e474b81
--- /dev/null
@@ -0,0 +1,129 @@
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+/* { dg-additional-options "-msse2" { target sse2_runtime } } */
+/* { dg-additional-options "-mavx" { target avx_runtime } } */
+
+static inline void
+foo (int *b, int *i, int *j, int x)
+{
+  *b = *b + x + (*i - *i) + (*j - *j);
+}
+
+int
+main ()
+{
+  int i, j, b, c = 0;
+  i = 4; j = 4; b = 7;
+  #pragma omp simd linear(b:2) reduction(+:c)
+  for (i = 0; i < 64; i++)
+    {
+      c = c + (b != 7 + 2 * i);
+      foo (&b, &i, &j, 2);
+    }
+  if (c || i != 64 || b != 7 + 64 * 2)
+    __builtin_abort ();
+  i = 4; j = 4; b = 7;
+  #pragma omp simd linear(b:3) reduction(+:c)
+  for (i = 0; i < 64; i += 4)
+    {
+      c = c + (b != 7 + i / 4 * 3);
+      foo (&b, &i, &j, 3);
+    }
+  if (c || i != 64 || b != 7 + 16 * 3)
+    __builtin_abort ();
+  i = 4; j = 4; b = 7;
+  #pragma omp simd linear(i) linear(b:2) reduction(+:c)
+  for (i = 0; i < 64; i++)
+    {
+      c = c + (b != 7 + 2 * i);
+      foo (&b, &i, &j, 2);
+    }
+  if (c || i != 64 || b != 7 + 64 * 2)
+    __builtin_abort ();
+  i = 4; j = 4; b = 7;
+  #pragma omp simd linear(i:4) linear(b:3) reduction(+:c)
+  for (i = 0; i < 64; i += 4)
+    {
+      c = c + (b != 7 + i / 4 * 3);
+      foo (&b, &i, &j, 3);
+    }
+  if (c || i != 64 || b != 7 + 16 * 3)
+    __builtin_abort ();
+  i = 4; j = 4; b = 7;
+  #pragma omp simd collapse (2) linear(b:2) reduction(+:c)
+  for (i = 0; i < 8; i++)
+    for (j = 0; j < 8; j++)
+      {
+       c = c + (b != 7 + 2 * j + 2 * 8 * i);
+       foo (&b, &i, &j, 2);
+      }
+  if (c || i != 8 || j != 8 || b != 7 + 64 * 2)
+    __builtin_abort ();
+  i = 4; j = 4; b = 7;
+  #pragma omp simd collapse (2) lastprivate (i, j) linear(b:2) reduction(+:c)
+  for (i = 0; i < 8; i++)
+    for (j = 0; j < 8; j++)
+      {
+       c = c + (b != 7 + 2 * j + 2 * 8 * i);
+       foo (&b, &i, &j, 2);
+      }
+  if (c || i != 8 || j != 8 || b != 7 + 64 * 2)
+    __builtin_abort ();
+  i = 4; j = 4; b = 7;
+  #pragma omp parallel for simd schedule (static, 4) linear(b:2) reduction(+:c)
+  for (i = 0; i < 64; i++)
+    {
+      c = c + (b != 7 + 2 * i);
+      foo (&b, &i, &j, 2);
+    }
+  if (c || i != 64 || b != 7 + 64 * 2)
+    __builtin_abort ();
+  i = 4; j = 4; b = 7;
+  #pragma omp parallel for simd schedule (static, 4) linear(b:3) reduction(+:c)
+  for (i = 0; i < 64; i += 4)
+    {
+      c = c + (b != 7 + i / 4 * 3);
+      foo (&b, &i, &j, 3);
+    }
+  if (c || i != 64 || b != 7 + 16 * 3)
+    __builtin_abort ();
+  i = 4; j = 4; b = 7;
+  #pragma omp parallel for simd schedule (static, 4) linear(i) linear(b:2) reduction(+:c)
+  for (i = 0; i < 64; i++)
+    {
+      c = c + (b != 7 + 2 * i);
+      foo (&b, &i, &j, 2);
+    }
+  if (c || i != 64 || b != 7 + 64 * 2)
+    __builtin_abort ();
+  i = 4; j = 4; b = 7;
+  #pragma omp parallel for simd schedule (static, 4) linear(i:4) linear(b:3) reduction(+:c)
+  for (i = 0; i < 64; i += 4)
+    {
+      c = c + (b != 7 + i / 4 * 3);
+      foo (&b, &i, &j, 3);
+    }
+  if (c || i != 64 || b != 7 + 16 * 3)
+    __builtin_abort ();
+  i = 4; j = 4; b = 7;
+  #pragma omp parallel for simd lastprivate (i, j) collapse (2) schedule (static, 4) linear(b:2) reduction(+:c)
+  for (i = 0; i < 8; i++)
+    for (j = 0; j < 8; j++)
+      {
+       c = c + (b != 7 + 2 * j + 2 * 8 * i);
+       foo (&b, &i, &j, 2);
+      }
+  if (c || i != 8 || j != 8 || b != 7 + 64 * 2)
+    __builtin_abort ();
+  i = 4; j = 4; b = 7;
+  #pragma omp parallel for simd collapse (2) schedule (static, 4) linear(b:2) reduction(+:c)
+  for (i = 0; i < 8; i++)
+    for (j = 0; j < 8; j++)
+      {
+       c = c + (b != 7 + 2 * j + 2 * 8 * i);
+       foo (&b, &i, &j, 2);
+      }
+  if (c || i != 8 || j != 8 || b != 7 + 64 * 2)
+    __builtin_abort ();
+  return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/simd-16.c b/libgomp/testsuite/libgomp.c/simd-16.c
new file mode 100644 (file)
index 0000000..c8c29c7
--- /dev/null
@@ -0,0 +1,67 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -std=c99" } */
+/* { dg-additional-options "-msse2" { target sse2_runtime } } */
+/* { dg-additional-options "-mavx" { target avx_runtime } } */
+
+int
+main ()
+{
+  int b, c = 0;
+  b = 7;
+  #pragma omp simd linear(b:2) reduction(+:c)
+  for (int i = 0; i < 64; i++)
+    {
+      c = c + (b != 7 + 2 * i);
+      b = b + 2;
+    }
+  if (c || b != 7 + 64 * 2)
+    __builtin_abort ();
+  b = 7;
+  #pragma omp simd linear(b:3) reduction(+:c)
+  for (int i = 0; i < 64; i += 4)
+    {
+      c = c + (b != 7 + i / 4 * 3);
+      b = b + 3;
+    }
+  if (c || b != 7 + 16 * 3)
+    __builtin_abort ();
+  b = 7;
+  #pragma omp simd collapse (2) linear(b:2) reduction(+:c)
+  for (int i = 0; i < 8; i++)
+    for (int j = 0; j < 8; j++)
+      {
+       c = c + (b != 7 + 2 * j + 2 * 8 * i);
+       b = b + 2;
+      }
+  if (c || b != 7 + 64 * 2)
+    __builtin_abort ();
+  b = 7;
+  #pragma omp parallel for simd schedule (static, 4) linear(b:2) reduction(+:c)
+  for (int i = 0; i < 64; i++)
+    {
+      c = c + (b != 7 + 2 * i);
+      b = b + 2;
+    }
+  if (c || b != 7 + 64 * 2)
+    __builtin_abort ();
+  b = 7;
+  #pragma omp parallel for simd schedule (static, 4) linear(b:3) reduction(+:c)
+  for (int i = 0; i < 64; i += 4)
+    {
+      c = c + (b != 7 + i / 4 * 3);
+      b = b + 3;
+    }
+  if (c || b != 7 + 16 * 3)
+    __builtin_abort ();
+  b = 7;
+  #pragma omp parallel for simd collapse (2) schedule (static, 4) linear(b:2) reduction(+:c)
+  for (int i = 0; i < 8; i++)
+    for (int j = 0; j < 8; j++)
+      {
+       c = c + (b != 7 + 2 * j + 2 * 8 * i);
+       b = b + 2;
+      }
+  if (c || b != 7 + 64 * 2)
+    __builtin_abort ();
+  return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/simd-17.c b/libgomp/testsuite/libgomp.c/simd-17.c
new file mode 100644 (file)
index 0000000..136e6e6
--- /dev/null
@@ -0,0 +1,73 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -std=c99" } */
+/* { dg-additional-options "-msse2" { target sse2_runtime } } */
+/* { dg-additional-options "-mavx" { target avx_runtime } } */
+
+static inline void
+foo (int *b, int *i, int *j, int x)
+{
+  *b = *b + x + (*i - *i) + (*j - *j);
+}
+
+int
+main ()
+{
+  int b, c = 0;
+  b = 7;
+  #pragma omp simd linear(b:2) reduction(+:c)
+  for (int i = 0; i < 64; i++)
+    {
+      c = c + (b != 7 + 2 * i);
+      foo (&b, &i, &i, 2);
+    }
+  if (c || b != 7 + 64 * 2)
+    __builtin_abort ();
+  b = 7;
+  #pragma omp simd linear(b:3) reduction(+:c)
+  for (int i = 0; i < 64; i += 4)
+    {
+      c = c + (b != 7 + i / 4 * 3);
+      foo (&b, &i, &i, 3);
+    }
+  if (c || b != 7 + 16 * 3)
+    __builtin_abort ();
+  b = 7;
+  #pragma omp simd collapse (2) linear(b:2) reduction(+:c)
+  for (int i = 0; i < 8; i++)
+    for (int j = 0; j < 8; j++)
+      {
+       c = c + (b != 7 + 2 * j + 2 * 8 * i);
+       foo (&b, &i, &j, 2);
+      }
+  if (c || b != 7 + 64 * 2)
+    __builtin_abort ();
+  b = 7;
+  #pragma omp parallel for simd schedule (static, 4) linear(b:2) reduction(+:c)
+  for (int i = 0; i < 64; i++)
+    {
+      c = c + (b != 7 + 2 * i);
+      foo (&b, &i, &i, 2);
+    }
+  if (c || b != 7 + 64 * 2)
+    __builtin_abort ();
+  b = 7;
+  #pragma omp parallel for simd schedule (static, 4) linear(b:3) reduction(+:c)
+  for (int i = 0; i < 64; i += 4)
+    {
+      c = c + (b != 7 + i / 4 * 3);
+      foo (&b, &i, &i, 3);
+    }
+  if (c || b != 7 + 16 * 3)
+    __builtin_abort ();
+  b = 7;
+  #pragma omp parallel for simd collapse (2) schedule (static, 4) linear(b:2) reduction(+:c)
+  for (int i = 0; i < 8; i++)
+    for (int j = 0; j < 8; j++)
+      {
+       c = c + (b != 7 + 2 * j + 2 * 8 * i);
+       foo (&b, &i, &j, 2);
+      }
+  if (c || b != 7 + 64 * 2)
+    __builtin_abort ();
+  return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/simd-7.c b/libgomp/testsuite/libgomp.c/simd-7.c
new file mode 100644 (file)
index 0000000..ab04fee
--- /dev/null
@@ -0,0 +1,96 @@
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+/* { dg-additional-options "-msse2" { target sse2_runtime } } */
+/* { dg-additional-options "-mavx" { target avx_runtime } } */
+
+extern void abort ();
+int a[1024] __attribute__((aligned (32))) = { 1 };
+int b[1024] __attribute__((aligned (32))) = { 1 };
+int k, m;
+struct U { int u; };
+struct V { int v; };
+
+__attribute__((noinline, noclone)) int
+foo (int *p)
+{
+  int i, s = 0;
+  struct U u;
+  struct V v;
+  #pragma omp simd aligned(a, p : 32) linear(k: m + 1) \
+                  linear(i) reduction(+:s) lastprivate(u, v)
+  for (i = 0; i < 1024; i++)
+    {
+      int *q = &i;
+      a[i] *= p[i];
+      u.u = p[i] + k;
+      k += m + 1;
+      v.v = p[i] + k;
+      s += p[i] + k;
+    }
+  if (u.u != 36 + 4 + 3 * 1023 || v.v != 36 + 4 + 3 * 1024 || i != 1024)
+    abort ();
+  return s;
+}
+
+__attribute__((noinline, noclone)) int
+bar (int *p)
+{
+  int i, s = 0;
+  struct U u;
+  struct V v;
+  #pragma omp simd aligned(a, p : 32) linear(k: m + 1) \
+                  reduction(+:s) lastprivate(u, v)
+  for (i = 0; i < 1024; i++)
+    {
+      int *q = &i;
+      a[i] *= p[i];
+      u.u = p[i] + k;
+      k += m + 1;
+      v.v = p[i] + k;
+      s += p[i] + k;
+    }
+  if (u.u != 36 + 4 + 3 * 1023 || v.v != 36 + 4 + 3 * 1024 || i != 1024)
+    abort ();
+  return s;
+}
+
+int
+main ()
+{
+#if __SIZEOF_INT__ >= 4
+  int i;
+  k = 4;
+  m = 2;
+  for (i = 0; i < 1024; i++)
+    {
+      a[i] = i - 512;
+      b[i] = (i - 51) % 39;
+    }
+  int s = foo (b);
+  for (i = 0; i < 1024; i++)
+    {
+      if (b[i] != (i - 51) % 39
+         || a[i] != (i - 512) * b[i])
+       abort ();
+    }
+  if (k != 4 + 3 * 1024 || s != 1596127)
+    abort ();
+  k = 4;
+  m = 2;
+  for (i = 0; i < 1024; i++)
+    {
+      a[i] = i - 512;
+      b[i] = (i - 51) % 39;
+    }
+  s = bar (b);
+  for (i = 0; i < 1024; i++)
+    {
+      if (b[i] != (i - 51) % 39
+         || a[i] != (i - 512) * b[i])
+       abort ();
+    }
+  if (k != 4 + 3 * 1024 || s != 1596127)
+    abort ();
+#endif
+  return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/simd-8.c b/libgomp/testsuite/libgomp.c/simd-8.c
new file mode 100644 (file)
index 0000000..13f40d5
--- /dev/null
@@ -0,0 +1,44 @@
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+/* { dg-additional-options "-msse2" { target sse2_runtime } } */
+/* { dg-additional-options "-mavx" { target avx_runtime } } */
+
+extern void abort ();
+int a[32][32] __attribute__((aligned (32))) = { { 1 } };
+struct S { int s; };
+#pragma omp declare reduction (+:struct S:omp_out.s += omp_in.s)
+#pragma omp declare reduction (foo:struct S:omp_out.s += omp_in.s)
+#pragma omp declare reduction (foo:int:omp_out += omp_in)
+
+__attribute__((noinline, noclone)) int
+foo (void)
+{
+  int i, j, u = 0;
+  struct S s, t;
+  s.s = 0; t.s = 0;
+  #pragma omp simd aligned(a : 32) reduction(+:s) reduction(foo:t, u) collapse(2)
+  for (i = 0; i < 32; i++)
+    for (j = 0; j < 32; j++)
+      {
+       int x = a[i][j];
+       s.s += x;
+       t.s += x;
+       u += x;
+      }
+  if (t.s != s.s || u != s.s)
+    abort ();
+  return s.s;
+}
+
+int
+main ()
+{
+  int i, j;
+  for (i = 0; i < 32; i++)
+    for (j = 0; j < 32; j++)
+      a[i][j] = j + (i / 4);
+  int s = foo ();
+  if (s != 19456)
+    abort ();
+  return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/simd-9.c b/libgomp/testsuite/libgomp.c/simd-9.c
new file mode 100644 (file)
index 0000000..b64dd25
--- /dev/null
@@ -0,0 +1,70 @@
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+/* { dg-additional-options "-msse2" { target sse2_runtime } } */
+/* { dg-additional-options "-mavx" { target avx_runtime } } */
+
+extern void abort ();
+int a[32][32] __attribute__((aligned (32))) = { { 1 } };
+struct S { int s; };
+#pragma omp declare reduction (+:struct S:omp_out.s += omp_in.s)
+#pragma omp declare reduction (foo:struct S:omp_out.s += omp_in.s)
+#pragma omp declare reduction (foo:int:omp_out += omp_in)
+
+__attribute__((noinline, noclone)) int
+foo (void)
+{
+  int i, j, u = 0;
+  struct S s, t;
+  s.s = 0; t.s = 0;
+  #pragma omp simd aligned(a : 32) lastprivate (i, j) reduction(+:s) reduction(foo:t, u) collapse(2)
+  for (i = 0; i < 32; i++)
+    for (j = 0; j < 32; j++)
+      {
+       int *q = &i;
+       int *r = &j;
+       int x = a[i][j];
+       s.s += x;
+       t.s += x;
+       u += x;
+      }
+  if (t.s != s.s || u != s.s || i != 32 || j != 32)
+    abort ();
+  return s.s;
+}
+
+__attribute__((noinline, noclone)) int
+bar (void)
+{
+  int i, j, u = 0;
+  struct S s, t;
+  s.s = 0; t.s = 0;
+  #pragma omp simd aligned(a:32)reduction(+:s)reduction(foo:t,u)collapse(2)
+  for (i = 0; i < 32; i++)
+    for (j = 0; j < 32; j++)
+      {
+       int *q = &i;
+       int *r = &j;
+       int x = a[i][j];
+       s.s += x;
+       t.s += x;
+       u += x;
+      }
+  if (t.s != s.s || u != s.s || i != 32 || j != 32)
+    abort ();
+  return s.s;
+}
+
+int
+main ()
+{
+  int i, j;
+  for (i = 0; i < 32; i++)
+    for (j = 0; j < 32; j++)
+      a[i][j] = j + (i / 4);
+  int s = foo ();
+  if (s != 19456)
+    abort ();
+  if (bar () != 19456)
+    abort ();
+  return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/target-8.c b/libgomp/testsuite/libgomp.c/target-8.c
new file mode 100644 (file)
index 0000000..3508457
--- /dev/null
@@ -0,0 +1,26 @@
+/* { dg-do run } */
+/* { dg-options "-fopenmp" } */
+
+void
+foo (int *p)
+{
+  int i;
+  #pragma omp parallel
+  #pragma omp single
+  #pragma omp target teams distribute parallel for map(p[0:24])
+  for (i = 0; i < 24; i++)
+    p[i] = p[i] + 1;
+}
+
+int
+main ()
+{
+  int p[24], i;
+  for (i = 0; i < 24; i++)
+    p[i] = i;
+  foo (p);
+  for (i = 0; i < 24; i++)
+    if (p[i] != i + 1)
+      __builtin_abort ();
+  return 0;
+}
diff --git a/libgomp/testsuite/libgomp.fortran/aligned1.f03 b/libgomp/testsuite/libgomp.fortran/aligned1.f03
new file mode 100644 (file)
index 0000000..67a9ab4
--- /dev/null
@@ -0,0 +1,133 @@
+! { dg-do run }
+! { dg-options "-fopenmp -fcray-pointer" }
+
+  use iso_c_binding, only : c_ptr, c_ptrdiff_t, c_loc
+  interface
+    subroutine foo (x, y, z, w)
+      use iso_c_binding, only : c_ptr
+      real, pointer :: x(:), y(:), w(:)
+      type(c_ptr) :: z
+    end subroutine
+    subroutine bar (x, y, z, w)
+      use iso_c_binding, only : c_ptr
+      real, pointer :: x(:), y(:), w(:)
+      type(c_ptr) :: z
+    end subroutine
+    subroutine baz (x, c)
+      real, pointer :: x(:)
+      real, allocatable :: c(:)
+    end subroutine
+  end interface
+  type dt
+    real, allocatable :: a(:)
+  end type
+  type (dt) :: b(64)
+  real, target :: a(4096+63)
+  real, pointer :: p(:), q(:), r(:), s(:)
+  real, allocatable :: c(:)
+  integer(c_ptrdiff_t) :: o
+  integer :: i
+  o = 64 - mod (loc (a), 64)
+  if (o == 64) o = 0
+  o = o / sizeof(0.0)
+  p => a(o + 1:o + 1024)
+  q => a(o + 1025:o + 2048)
+  r => a(o + 2049:o + 3072)
+  s => a(o + 3073:o + 4096)
+  do i = 1, 1024
+    p(i) = i
+    q(i) = i
+    r(i) = i
+    s(i) = i
+  end do
+  call foo (p, q, c_loc (r(1)), s)
+  do i = 1, 1024
+    if (p(i) /= i * i + 3 * i + 2) call abort
+    p(i) = i
+  end do
+  call bar (p, q, c_loc (r(1)), s)
+  do i = 1, 1024
+    if (p(i) /= i * i + 3 * i + 2) call abort
+  end do
+  ! Attempt to create 64-byte aligned allocatable
+  do i = 1, 64
+    allocate (c(1023 + i))
+    if (iand (loc (c(1)), 63) == 0) exit
+    deallocate (c)
+    allocate (b(i)%a(1023 + i))
+    allocate (c(1023 + i))
+    if (iand (loc (c(1)), 63) == 0) exit
+    deallocate (c)
+  end do
+  if (allocated (c)) then
+    do i = 1, 1024
+      c(i) = 2 * i
+    end do
+    call baz (p, c)
+    do i = 1, 1024
+      if (p(i) /= i * i + 5 * i + 2) call abort
+    end do
+  end if
+end
+subroutine foo (x, y, z, w)
+  use iso_c_binding, only : c_ptr, c_f_pointer
+  real, pointer :: x(:), y(:), w(:), p(:)
+  type(c_ptr) :: z
+  integer :: i
+  real :: pt(1024)
+  pointer (ip, pt)
+  ip = loc (w)
+!$omp simd aligned (x, y : 64)
+  do i = 1, 1024
+    x(i) = x(i) * y(i) + 2.0
+  end do
+!$omp simd aligned (x, z : 64) private (p)
+  do i = 1, 1024
+    call c_f_pointer (z, p, shape=[1024])
+    x(i) = x(i) + p(i)
+  end do
+!$omp simd aligned (x, ip : 64)
+  do i = 1, 1024
+    x(i) = x(i) + 2 * pt(i)
+  end do
+!$omp end simd
+end subroutine
+subroutine bar (x, y, z, w)
+  use iso_c_binding, only : c_ptr, c_f_pointer
+  real, pointer :: x(:), y(:), w(:), a(:), b(:)
+  type(c_ptr) :: z, c
+  integer :: i
+  real :: pt(1024)
+  pointer (ip, pt)
+  ip = loc (w)
+  a => x
+  b => y
+  c = z
+!$omp simd aligned (a, b : 64)
+  do i = 1, 1024
+    a(i) = a(i) * b(i) + 2.0
+  end do
+!$omp simd aligned (a, c : 64)
+  do i = 1, 1024
+    block
+      real, pointer :: p(:)
+      call c_f_pointer (c, p, shape=[1024])
+      a(i) = a(i) + p(i)
+    end block
+  end do
+!$omp simd aligned (a, ip : 64)
+  do i = 1, 1024
+    a(i) = a(i) + 2 * pt(i)
+  end do
+!$omp end simd
+end subroutine
+subroutine baz (x, c)
+  real, pointer :: x(:)
+  real, allocatable :: c(:)
+  integer :: i
+!$omp simd aligned (x, c : 64)
+  do i = 1, 1024
+    x(i) = x(i) + c(i)
+  end do
+!$omp end simd
+end subroutine baz
diff --git a/libgomp/testsuite/libgomp.fortran/alloc-comp-1.f90 b/libgomp/testsuite/libgomp.fortran/alloc-comp-1.f90
new file mode 100644 (file)
index 0000000..2a2a12e
--- /dev/null
@@ -0,0 +1,328 @@
+! { dg-do run }
+! Don't cycle by default through all options, just test -O0 and -O2,
+! as this is quite large test.
+! { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O0" "-O2" } }
+
+module m
+  type dl
+    integer :: a, b
+    integer, allocatable :: c(:,:)
+    integer :: d, e
+    integer, allocatable :: f
+  end type
+  type dt
+    integer :: g
+    type (dl), allocatable :: h(:)
+    integer :: i
+    type (dl) :: j(2, 2)
+    type (dl), allocatable :: k
+  end type
+contains
+  subroutine ver_dl (obj, val, c, cl1, cu1, cl2, cu2, f)
+    type (dl), intent (in) :: obj
+    integer, intent (in) :: val, cl1, cu1, cl2, cu2
+    logical, intent (in) :: c, f
+    if ((c .neqv. allocated (obj%c)) .or. (f .neqv. allocated (obj%f))) call abort
+    if (c) then
+      if (lbound (obj%c, 1) /= cl1 .or. ubound (obj%c, 1) /= cu1) call abort
+      if (lbound (obj%c, 2) /= cl2 .or. ubound (obj%c, 2) /= cu2) call abort
+    end if
+    if (val /= 0) then
+      if (obj%a /= val .or. obj%b /= val) call abort
+      if (obj%d /= val .or. obj%e /= val) call abort
+      if (c) then
+        if (any (obj%c /= val)) call abort
+      end if
+      if (f) then
+        if (obj%f /= val) call abort
+      end if
+    end if
+  end subroutine ver_dl
+  subroutine ver_dt (obj, val, h, hl, hu, k, c, cl1, cu1, cl2, cu2, f)
+    type (dt), intent (in) :: obj
+    integer, intent (in) :: val, hl, hu, cl1, cu1, cl2, cu2
+    logical, intent (in) :: h, k, c, f
+    integer :: i, j
+    if ((h .neqv. allocated (obj%h)) .or. (k .neqv. allocated (obj%k))) call abort
+    if (h) then
+      if (lbound (obj%h, 1) /= hl .or. ubound (obj%h, 1) /= hu) call abort
+      do i = hl, hu
+        call ver_dl (obj%h(i), val, c, cl1, cu1, cl2, cu2, f)
+      end do
+    end if
+    do i = 1, 2
+      do j = 1, 2
+        call ver_dl (obj%j(i, j), val, c, cl1, cu1, cl2, cu2, f)
+      end do
+    end do
+    if (k) call ver_dl (obj%k, val, c, cl1, cu1, cl2, cu2, f)
+    if (val /= 0) then
+      if (obj%g /= val .or. obj%i /= val) call abort
+    end if
+  end subroutine ver_dt
+  subroutine alloc_dl (obj, val, c, cl1, cu1, cl2, cu2, f)
+    type (dl), intent (inout) :: obj
+    integer, intent (in) :: val, cl1, cu1, cl2, cu2
+    logical, intent (in) :: c, f
+    if (val /= 0) then
+      obj%a = val
+      obj%b = val
+      obj%d = val
+      obj%e = val
+    end if
+    if (allocated (obj%c)) deallocate (obj%c)
+    if (c) then
+      allocate (obj%c(cl1:cu1, cl2:cu2))
+      if (val /= 0) obj%c = val
+    end if
+    if (f) then
+      if (.not.allocated (obj%f)) allocate (obj%f)
+      if (val /= 0) obj%f = val
+    else
+      if (allocated (obj%f)) deallocate (obj%f)
+    end if
+  end subroutine alloc_dl
+  subroutine alloc_dt (obj, val, h, hl, hu, k, c, cl1, cu1, cl2, cu2, f)
+    type (dt), intent (inout) :: obj
+    integer, intent (in) :: val, hl, hu, cl1, cu1, cl2, cu2
+    logical, intent (in) :: h, k, c, f
+    integer :: i, j
+    if (val /= 0) then
+      obj%g = val
+      obj%i = val
+    end if
+    if (allocated (obj%h)) deallocate (obj%h)
+    if (h) then
+      allocate (obj%h(hl:hu))
+      do i = hl, hu
+        call alloc_dl (obj%h(i), val, c, cl1, cu1, cl2, cu2, f)
+      end do
+    end if
+    do i = 1, 2
+      do j = 1, 2
+        call alloc_dl (obj%j(i, j), val, c, cl1, cu1, cl2, cu2, f)
+      end do
+    end do
+    if (k) then
+      if (.not.allocated (obj%k)) allocate (obj%k)
+      call alloc_dl (obj%k, val, c, cl1, cu1, cl2, cu2, f)
+    else
+      if (allocated (obj%k)) deallocate (obj%k)
+    end if
+  end subroutine alloc_dt
+end module m
+  use m
+  type (dt) :: y
+  call foo (y)
+contains
+  subroutine foo (y)
+    use m
+    type (dt) :: x, y, z(-3:-3,2:3)
+    logical, parameter :: F = .false.
+    logical, parameter :: T = .true.
+    logical :: l
+    call ver_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (y, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (z(-3,3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+!$omp parallel private (x, y, z)
+    call ver_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (y, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (y, 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
+    call ver_dt (y, 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
+    call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (z(-3,3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (z(-3,3), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
+    call ver_dt (z(-3,3), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
+!$omp end parallel
+    call ver_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (y, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (y, 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
+    call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (z(-3,3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (z(-3,3), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
+!$omp parallel private (x, y, z)
+    call ver_dt (x, 0, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (y, 0, T, 3, 4, F, T, 1, 1, 2, 4, T)
+    deallocate (x%h, x%k)
+    deallocate (y%h)
+    allocate (y%k)
+    call ver_dt (z(-3,2), 0, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (z(-3,3), 0, T, 3, 4, F, T, 1, 1, 2, 4, T)
+    deallocate (z(-3,2)%h, z(-3,2)%k)
+    deallocate (z(-3,3)%h)
+    allocate (z(-3,3)%k)
+!$omp end parallel
+    call alloc_dt (x, 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
+    call alloc_dt (y, 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
+    call alloc_dt (z(-3,2), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
+    call alloc_dt (z(-3,3), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
+!$omp parallel firstprivate (x, y, z)
+    call ver_dt (x, 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
+    call alloc_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (y, 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
+    call alloc_dt (y, 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
+    call ver_dt (y, 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
+    call ver_dt (z(-3,2), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
+    call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (z(-3,3), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
+    call alloc_dt (z(-3,3), 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
+    call ver_dt (z(-3,3), 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
+!$omp end parallel
+    call ver_dt (x, 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
+    call alloc_dt (x, 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (y, 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
+    call alloc_dt (y, 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (z(-3,2), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
+    call alloc_dt (z(-3,2), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (z(-3,3), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
+    call alloc_dt (z(-3,3), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
+!$omp parallel firstprivate (x, y, z)
+    call ver_dt (x, 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (y, 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (y, 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
+    call ver_dt (y, 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
+    call ver_dt (z(-3,2), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (z(-3,3), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (z(-3,3), 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
+    call ver_dt (z(-3,3), 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
+!$omp end parallel
+    call ver_dt (x, 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (y, 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (y, 18, T, 0, 1, T, T, 0, 1, 0, 1, T)
+    call ver_dt (z(-3,2), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (z(-3,3), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (z(-3,3), 18, T, 0, 1, T, T, 0, 1, 0, 1, T)
+    l = F
+!$omp parallel sections lastprivate (x, y, z) firstprivate (l)
+!$omp section
+    if (l) then
+      call ver_dt (x, 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
+      call ver_dt (y, 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
+      call ver_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
+      call ver_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
+    else
+      call ver_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+      call ver_dt (y, 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
+      call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+      call ver_dt (z(-3,3), 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
+    end if
+    l = T
+    call alloc_dt (x, 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
+    call ver_dt (x, 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
+    call alloc_dt (y, 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
+    call ver_dt (y, 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
+    call alloc_dt (z(-3,2), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
+    call ver_dt (z(-3,2), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
+    call alloc_dt (z(-3,3), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
+    call ver_dt (z(-3,3), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
+!$omp section
+    if (l) then
+      call ver_dt (x, 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
+      call ver_dt (y, 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
+      call ver_dt (z(-3,2), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
+      call ver_dt (z(-3,3), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
+    else
+      call ver_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+      call ver_dt (y, 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
+      call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+      call ver_dt (z(-3,3), 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
+    end if
+    l = T
+    call alloc_dt (x, 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
+    call ver_dt (x, 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
+    call alloc_dt (y, 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
+    call ver_dt (y, 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
+    call alloc_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
+    call ver_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
+    call alloc_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
+    call ver_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
+!$omp section
+!$omp end parallel sections
+    call ver_dt (x, 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
+    call ver_dt (y, 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
+    call ver_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
+    call ver_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
+!$omp parallel sections lastprivate (x, y, z) firstprivate (l)
+!$omp section
+    if (l) then
+      call ver_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+      call ver_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+      call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+      call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    else
+      call ver_dt (x, 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
+      call ver_dt (y, 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
+      call ver_dt (z(-3,2), 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
+      call ver_dt (z(-3,3), 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
+    end if
+    l = T
+    call alloc_dt (x, 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+    call ver_dt (x, 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+    call alloc_dt (y, 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+    call ver_dt (y, 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+    call alloc_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+    call ver_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+    call alloc_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+    call ver_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+!$omp section
+    if (l) then
+      call ver_dt (x, 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+      call ver_dt (y, 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+      call ver_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+      call ver_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+    else
+      call ver_dt (x, 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
+      call ver_dt (y, 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
+      call ver_dt (z(-3,2), 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
+      call ver_dt (z(-3,3), 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
+    end if
+    l = T
+    call alloc_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call alloc_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    call ver_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    call alloc_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call alloc_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+!$omp section
+!$omp end parallel sections
+    call ver_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+!$omp parallel private (x, y, z)
+    call ver_dt (x, 0, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (y, 0, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    call ver_dt (z(-3,2), 0, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (z(-3,3), 0, T, 0, 1, T, T, 2, 2, 2, 2, F)
+!$omp single
+    call alloc_dt (x, 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+    call alloc_dt (y, 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+    call alloc_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+    call alloc_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+!$omp end single copyprivate (x, y, z)
+    call ver_dt (x, 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+    call ver_dt (y, 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+    call ver_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+    call ver_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+!$omp end parallel
+    call ver_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+  end subroutine foo
+end
diff --git a/libgomp/testsuite/libgomp.fortran/alloc-comp-2.f90 b/libgomp/testsuite/libgomp.fortran/alloc-comp-2.f90
new file mode 100644 (file)
index 0000000..490ed24
--- /dev/null
@@ -0,0 +1,367 @@
+! { dg-do run }
+! Don't cycle by default through all options, just test -O0 and -O2,
+! as this is quite large test.
+! { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O0" "-O2" } }
+
+module m
+  type dl
+    integer :: a, b
+    integer, allocatable :: c(:,:)
+    integer :: d, e
+    integer, allocatable :: f
+  end type
+  type dt
+    integer :: g
+    type (dl), allocatable :: h(:)
+    integer :: i
+    type (dl) :: j(2, 2)
+    type (dl), allocatable :: k
+  end type
+contains
+  subroutine ver_dl (obj, val, c, cl1, cu1, cl2, cu2, f)
+    type (dl), intent (in) :: obj
+    integer, intent (in) :: val, cl1, cu1, cl2, cu2
+    logical, intent (in) :: c, f
+    if ((c .neqv. allocated (obj%c)) .or. (f .neqv. allocated (obj%f))) call abort
+    if (c) then
+      if (lbound (obj%c, 1) /= cl1 .or. ubound (obj%c, 1) /= cu1) call abort
+      if (lbound (obj%c, 2) /= cl2 .or. ubound (obj%c, 2) /= cu2) call abort
+    end if
+    if (val /= 0) then
+      if (obj%a /= val .or. obj%b /= val) call abort
+      if (obj%d /= val .or. obj%e /= val) call abort
+      if (c) then
+        if (any (obj%c /= val)) call abort
+      end if
+      if (f) then
+        if (obj%f /= val) call abort
+      end if
+    end if
+  end subroutine ver_dl
+  subroutine ver_dt (obj, val, h, hl, hu, k, c, cl1, cu1, cl2, cu2, f)
+    type (dt), intent (in) :: obj
+    integer, intent (in) :: val, hl, hu, cl1, cu1, cl2, cu2
+    logical, intent (in) :: h, k, c, f
+    integer :: i, j
+    if ((h .neqv. allocated (obj%h)) .or. (k .neqv. allocated (obj%k))) call abort
+    if (h) then
+      if (lbound (obj%h, 1) /= hl .or. ubound (obj%h, 1) /= hu) call abort
+      do i = hl, hu
+        call ver_dl (obj%h(i), val, c, cl1, cu1, cl2, cu2, f)
+      end do
+    end if
+    do i = 1, 2
+      do j = 1, 2
+        call ver_dl (obj%j(i, j), val, c, cl1, cu1, cl2, cu2, f)
+      end do
+    end do
+    if (k) call ver_dl (obj%k, val, c, cl1, cu1, cl2, cu2, f)
+    if (val /= 0) then
+      if (obj%g /= val .or. obj%i /= val) call abort
+    end if
+  end subroutine ver_dt
+  subroutine alloc_dl (obj, val, c, cl1, cu1, cl2, cu2, f)
+    type (dl), intent (inout) :: obj
+    integer, intent (in) :: val, cl1, cu1, cl2, cu2
+    logical, intent (in) :: c, f
+    if (val /= 0) then
+      obj%a = val
+      obj%b = val
+      obj%d = val
+      obj%e = val
+    end if
+    if (allocated (obj%c)) deallocate (obj%c)
+    if (c) then
+      allocate (obj%c(cl1:cu1, cl2:cu2))
+      if (val /= 0) obj%c = val
+    end if
+    if (f) then
+      if (.not.allocated (obj%f)) allocate (obj%f)
+      if (val /= 0) obj%f = val
+    else
+      if (allocated (obj%f)) deallocate (obj%f)
+    end if
+  end subroutine alloc_dl
+  subroutine alloc_dt (obj, val, h, hl, hu, k, c, cl1, cu1, cl2, cu2, f)
+    type (dt), intent (inout) :: obj
+    integer, intent (in) :: val, hl, hu, cl1, cu1, cl2, cu2
+    logical, intent (in) :: h, k, c, f
+    integer :: i, j
+    if (val /= 0) then
+      obj%g = val
+      obj%i = val
+    end if
+    if (allocated (obj%h)) deallocate (obj%h)
+    if (h) then
+      allocate (obj%h(hl:hu))
+      do i = hl, hu
+        call alloc_dl (obj%h(i), val, c, cl1, cu1, cl2, cu2, f)
+      end do
+    end if
+    do i = 1, 2
+      do j = 1, 2
+        call alloc_dl (obj%j(i, j), val, c, cl1, cu1, cl2, cu2, f)
+      end do
+    end do
+    if (k) then
+      if (.not.allocated (obj%k)) allocate (obj%k)
+      call alloc_dl (obj%k, val, c, cl1, cu1, cl2, cu2, f)
+    else
+      if (allocated (obj%k)) deallocate (obj%k)
+    end if
+  end subroutine alloc_dt
+end module m
+  use m
+  type (dt), allocatable :: y
+  call foo (y)
+contains
+  subroutine foo (y)
+    use m
+    type (dt), allocatable :: x, y, z(:,:)
+    logical, parameter :: F = .false.
+    logical, parameter :: T = .true.
+    logical :: l
+!$omp parallel private (x, y, z)
+    if (allocated (x) .or. allocated (y) .or. allocated (z)) call abort
+!$omp end parallel
+!$omp parallel firstprivate (x, y, z)
+    if (allocated (x) .or. allocated (y) .or. allocated (z)) call abort
+!$omp end parallel
+    l = F
+!$omp parallel sections lastprivate (x, y, z) firstprivate (l)
+!$omp section
+    if (.not. l) then
+      if (allocated (x) .or. allocated (y) .or. allocated (z)) call abort
+    end if
+!$omp section
+    if (.not. l) then
+      if (allocated (x) .or. allocated (y) .or. allocated (z)) call abort
+    end if
+    allocate (x, y, z(-3:-3,2:3))
+    call alloc_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call alloc_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    call ver_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    call alloc_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call alloc_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+!$omp section
+!$omp end parallel sections
+    if (.not.allocated (x) .or. .not.allocated (y)) call abort
+    if (.not.allocated (z)) call abort
+    if (lbound (z, 1) /= -3 .or. ubound (z, 1) /= -3) call abort
+    if (lbound (z, 2) /= 2 .or. ubound (z, 2) /= 3) call abort
+    call ver_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    call alloc_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (y, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (y, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (z(-3,3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (z(-3,3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+!$omp parallel private (x, y, z)
+    call ver_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (y, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (y, 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
+    call ver_dt (y, 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
+    call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (z(-3,3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (z(-3,3), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
+    call ver_dt (z(-3,3), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
+!$omp end parallel
+    call ver_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (y, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (y, 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
+    call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (z(-3,3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (z(-3,3), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
+!$omp parallel private (x, y, z)
+    call ver_dt (x, 0, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (y, 0, T, 3, 4, F, T, 1, 1, 2, 4, T)
+    deallocate (x%h, x%k)
+    deallocate (y%h)
+    allocate (y%k)
+    call ver_dt (z(-3,2), 0, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (z(-3,3), 0, T, 3, 4, F, T, 1, 1, 2, 4, T)
+    deallocate (z(-3,2)%h, z(-3,2)%k)
+    deallocate (z(-3,3)%h)
+    allocate (z(-3,3)%k)
+!$omp end parallel
+    call alloc_dt (x, 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
+    call alloc_dt (y, 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
+    call alloc_dt (z(-3,2), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
+    call alloc_dt (z(-3,3), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
+!$omp parallel firstprivate (x, y, z)
+    call ver_dt (x, 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
+    call alloc_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (y, 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
+    call alloc_dt (y, 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
+    call ver_dt (y, 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
+    call ver_dt (z(-3,2), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
+    call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (z(-3,3), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
+    call alloc_dt (z(-3,3), 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
+    call ver_dt (z(-3,3), 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
+!$omp end parallel
+    call ver_dt (x, 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
+    call alloc_dt (x, 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (y, 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
+    call alloc_dt (y, 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (z(-3,2), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
+    call alloc_dt (z(-3,2), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (z(-3,3), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
+    call alloc_dt (z(-3,3), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
+!$omp parallel firstprivate (x, y, z)
+    call ver_dt (x, 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (y, 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (y, 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
+    call ver_dt (y, 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
+    call ver_dt (z(-3,2), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (z(-3,3), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (z(-3,3), 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
+    call ver_dt (z(-3,3), 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
+!$omp end parallel
+    call ver_dt (x, 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (y, 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (y, 18, T, 0, 1, T, T, 0, 1, 0, 1, T)
+    call ver_dt (z(-3,2), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (z(-3,3), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (z(-3,3), 18, T, 0, 1, T, T, 0, 1, 0, 1, T)
+    l = F
+!$omp parallel sections lastprivate (x, y, z) firstprivate (l)
+!$omp section
+    if (l) then
+      call ver_dt (x, 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
+      call ver_dt (y, 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
+      call ver_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
+      call ver_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
+    else
+      call ver_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+      call ver_dt (y, 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
+      call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+      call ver_dt (z(-3,3), 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
+    end if
+    l = T
+    call alloc_dt (x, 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
+    call ver_dt (x, 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
+    call alloc_dt (y, 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
+    call ver_dt (y, 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
+    call alloc_dt (z(-3,2), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
+    call ver_dt (z(-3,2), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
+    call alloc_dt (z(-3,3), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
+    call ver_dt (z(-3,3), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
+!$omp section
+    if (l) then
+      call ver_dt (x, 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
+      call ver_dt (y, 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
+      call ver_dt (z(-3,2), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
+      call ver_dt (z(-3,3), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
+    else
+      call ver_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+      call ver_dt (y, 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
+      call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+      call ver_dt (z(-3,3), 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
+    end if
+    l = T
+    call alloc_dt (x, 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
+    call ver_dt (x, 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
+    call alloc_dt (y, 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
+    call ver_dt (y, 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
+    call alloc_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
+    call ver_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
+    call alloc_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
+    call ver_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
+!$omp section
+!$omp end parallel sections
+    call ver_dt (x, 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
+    call ver_dt (y, 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
+    call ver_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
+    call ver_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
+!$omp parallel sections lastprivate (x, y, z) firstprivate (l)
+!$omp section
+    if (l) then
+      call ver_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+      call ver_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+      call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+      call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    else
+      call ver_dt (x, 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
+      call ver_dt (y, 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
+      call ver_dt (z(-3,2), 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
+      call ver_dt (z(-3,3), 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
+    end if
+    l = T
+    call alloc_dt (x, 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+    call ver_dt (x, 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+    call alloc_dt (y, 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+    call ver_dt (y, 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+    call alloc_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+    call ver_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+    call alloc_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+    call ver_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+!$omp section
+    if (l) then
+      call ver_dt (x, 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+      call ver_dt (y, 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+      call ver_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+      call ver_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+    else
+      call ver_dt (x, 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
+      call ver_dt (y, 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
+      call ver_dt (z(-3,2), 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
+      call ver_dt (z(-3,3), 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
+    end if
+    l = T
+    call alloc_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call alloc_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    call ver_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    call alloc_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call alloc_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+!$omp section
+!$omp end parallel sections
+    call ver_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+!$omp parallel private (x, y, z)
+    call ver_dt (x, 0, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (y, 0, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    call ver_dt (z(-3,2), 0, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (z(-3,3), 0, T, 0, 1, T, T, 2, 2, 2, 2, F)
+!$omp single
+    call alloc_dt (x, 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+    call alloc_dt (y, 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+    call alloc_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+    call alloc_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+!$omp end single copyprivate (x, y, z)
+    call ver_dt (x, 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+    call ver_dt (y, 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+    call ver_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+    call ver_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+!$omp end parallel
+    call ver_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+  end subroutine foo
+end
diff --git a/libgomp/testsuite/libgomp.fortran/alloc-comp-3.f90 b/libgomp/testsuite/libgomp.fortran/alloc-comp-3.f90
new file mode 100644 (file)
index 0000000..20f1314
--- /dev/null
@@ -0,0 +1,372 @@
+! { dg-do run }
+! Don't cycle by default through all options, just test -O0 and -O2,
+! as this is quite large test.
+! { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O0" "-O2" } }
+
+module m
+  type dl
+    integer :: a, b
+    integer, allocatable :: c(:,:)
+    integer :: d, e
+    integer, allocatable :: f
+  end type
+  type dt
+    integer :: g
+    type (dl), allocatable :: h(:)
+    integer :: i
+    type (dl) :: j(2, 2)
+    type (dl), allocatable :: k
+  end type
+contains
+  subroutine ver_dl (obj, val, c, cl1, cu1, cl2, cu2, f)
+    type (dl), intent (in) :: obj
+    integer, intent (in) :: val, cl1, cu1, cl2, cu2
+    logical, intent (in) :: c, f
+    if ((c .neqv. allocated (obj%c)) .or. (f .neqv. allocated (obj%f))) call abort
+    if (c) then
+      if (lbound (obj%c, 1) /= cl1 .or. ubound (obj%c, 1) /= cu1) call abort
+      if (lbound (obj%c, 2) /= cl2 .or. ubound (obj%c, 2) /= cu2) call abort
+    end if
+    if (val /= 0) then
+      if (obj%a /= val .or. obj%b /= val) call abort
+      if (obj%d /= val .or. obj%e /= val) call abort
+      if (c) then
+        if (any (obj%c /= val)) call abort
+      end if
+      if (f) then
+        if (obj%f /= val) call abort
+      end if
+    end if
+  end subroutine ver_dl
+  subroutine ver_dt (obj, val, h, hl, hu, k, c, cl1, cu1, cl2, cu2, f)
+    type (dt), intent (in) :: obj
+    integer, intent (in) :: val, hl, hu, cl1, cu1, cl2, cu2
+    logical, intent (in) :: h, k, c, f
+    integer :: i, j
+    if ((h .neqv. allocated (obj%h)) .or. (k .neqv. allocated (obj%k))) call abort
+    if (h) then
+      if (lbound (obj%h, 1) /= hl .or. ubound (obj%h, 1) /= hu) call abort
+      do i = hl, hu
+        call ver_dl (obj%h(i), val, c, cl1, cu1, cl2, cu2, f)
+      end do
+    end if
+    do i = 1, 2
+      do j = 1, 2
+        call ver_dl (obj%j(i, j), val, c, cl1, cu1, cl2, cu2, f)
+      end do
+    end do
+    if (k) call ver_dl (obj%k, val, c, cl1, cu1, cl2, cu2, f)
+    if (val /= 0) then
+      if (obj%g /= val .or. obj%i /= val) call abort
+    end if
+  end subroutine ver_dt
+  subroutine alloc_dl (obj, val, c, cl1, cu1, cl2, cu2, f)
+    type (dl), intent (inout) :: obj
+    integer, intent (in) :: val, cl1, cu1, cl2, cu2
+    logical, intent (in) :: c, f
+    if (val /= 0) then
+      obj%a = val
+      obj%b = val
+      obj%d = val
+      obj%e = val
+    end if
+    if (allocated (obj%c)) deallocate (obj%c)
+    if (c) then
+      allocate (obj%c(cl1:cu1, cl2:cu2))
+      if (val /= 0) obj%c = val
+    end if
+    if (f) then
+      if (.not.allocated (obj%f)) allocate (obj%f)
+      if (val /= 0) obj%f = val
+    else
+      if (allocated (obj%f)) deallocate (obj%f)
+    end if
+  end subroutine alloc_dl
+  subroutine alloc_dt (obj, val, h, hl, hu, k, c, cl1, cu1, cl2, cu2, f)
+    type (dt), intent (inout) :: obj
+    integer, intent (in) :: val, hl, hu, cl1, cu1, cl2, cu2
+    logical, intent (in) :: h, k, c, f
+    integer :: i, j
+    if (val /= 0) then
+      obj%g = val
+      obj%i = val
+    end if
+    if (allocated (obj%h)) deallocate (obj%h)
+    if (h) then
+      allocate (obj%h(hl:hu))
+      do i = hl, hu
+        call alloc_dl (obj%h(i), val, c, cl1, cu1, cl2, cu2, f)
+      end do
+    end if
+    do i = 1, 2
+      do j = 1, 2
+        call alloc_dl (obj%j(i, j), val, c, cl1, cu1, cl2, cu2, f)
+      end do
+    end do
+    if (k) then
+      if (.not.allocated (obj%k)) allocate (obj%k)
+      call alloc_dl (obj%k, val, c, cl1, cu1, cl2, cu2, f)
+    else
+      if (allocated (obj%k)) deallocate (obj%k)
+    end if
+  end subroutine alloc_dt
+end module m
+  use m
+  type (dt), allocatable :: z(:,:)
+  type (dt) :: y(2:3)
+  call foo (y, z, 4)
+contains
+  subroutine foo (y, z, n)
+    use m
+    integer :: n
+    type (dt) :: x(2:n), y(3:)
+    type (dt), allocatable :: z(:,:)
+    logical, parameter :: F = .false.
+    logical, parameter :: T = .true.
+    logical :: l
+    if (lbound (x, 1) /= 2 .or. ubound (x, 1) /= 4) call abort
+    if (lbound (y, 1) /= 3 .or. ubound (y, 1) /= 4) call abort
+    call ver_dt (x(2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (x(n), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (y(3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (y(4), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+!$omp parallel private (z)
+    if (allocated (z)) call abort
+!$omp end parallel
+!$omp parallel firstprivate (z)
+    if (allocated (z)) call abort
+!$omp end parallel
+    l = F
+!$omp parallel sections lastprivate (z) firstprivate (l)
+!$omp section
+    if (.not. l) then
+      if (allocated (z)) call abort
+    end if
+!$omp section
+    if (.not. l) then
+      if (allocated (z)) call abort
+    end if
+    allocate (z(-3:-3,2:3))
+    call alloc_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call alloc_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+!$omp section
+!$omp end parallel sections
+    if (.not.allocated (z)) call abort
+    if (lbound (z, 1) /= -3 .or. ubound (z, 1) /= -3) call abort
+    if (lbound (z, 2) /= 2 .or. ubound (z, 2) /= 3) call abort
+    call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    call ver_dt (x(n - 1), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (y(4), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (z(-3,3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (z(-3,3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+!$omp parallel private (x, y, z)
+    call ver_dt (x(n - 1), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (x(n - 1), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (x(n - 1), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (y(4), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (y(4), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
+    call ver_dt (y(4), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
+    call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (z(-3,3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (z(-3,3), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
+    call ver_dt (z(-3,3), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
+!$omp end parallel
+    call ver_dt (x(n - 1), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (x(n - 1), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (y(4), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (y(4), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
+    call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (z(-3,3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (z(-3,3), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
+!$omp parallel private (x, y, z)
+    call ver_dt (x(n - 1), 0, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (y(4), 0, T, 3, 4, F, T, 1, 1, 2, 4, T)
+    deallocate (x(n - 1)%h, x(n - 1)%k)
+    deallocate (y(4)%h)
+    allocate (y(4)%k)
+    call ver_dt (z(-3,2), 0, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (z(-3,3), 0, T, 3, 4, F, T, 1, 1, 2, 4, T)
+    deallocate (z(-3,2)%h, z(-3,2)%k)
+    deallocate (z(-3,3)%h)
+    allocate (z(-3,3)%k)
+!$omp end parallel
+    call alloc_dt (x(n - 1), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
+    call alloc_dt (y(4), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
+    call alloc_dt (z(-3,2), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
+    call alloc_dt (z(-3,3), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
+!$omp parallel firstprivate (x, y, z)
+    if (lbound (x, 1) /= 2 .or. ubound (x, 1) /= 4) call abort
+    if (lbound (y, 1) /= 3 .or. ubound (y, 1) /= 4) call abort
+    call ver_dt (x(n - 1), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
+    call alloc_dt (x(n - 1), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (x(n - 1), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (y(4), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
+    call alloc_dt (y(4), 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
+    call ver_dt (y(4), 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
+    call ver_dt (z(-3,2), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
+    call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (z(-3,3), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
+    call alloc_dt (z(-3,3), 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
+    call ver_dt (z(-3,3), 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
+!$omp end parallel
+    call ver_dt (x(n - 1), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
+    call alloc_dt (x(n - 1), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (y(4), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
+    call alloc_dt (y(4), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (z(-3,2), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
+    call alloc_dt (z(-3,2), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (z(-3,3), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
+    call alloc_dt (z(-3,3), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
+!$omp parallel firstprivate (x, y, z)
+    call ver_dt (x(n - 1), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (x(n - 1), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (x(n - 1), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (y(4), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (y(4), 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
+    call ver_dt (y(4), 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
+    call ver_dt (z(-3,2), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
+    call ver_dt (z(-3,3), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (z(-3,3), 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
+    call ver_dt (z(-3,3), 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
+!$omp end parallel
+    call ver_dt (x(n - 1), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (y(4), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (y(4), 18, T, 0, 1, T, T, 0, 1, 0, 1, T)
+    call ver_dt (z(-3,2), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (z(-3,3), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call alloc_dt (z(-3,3), 18, T, 0, 1, T, T, 0, 1, 0, 1, T)
+    l = F
+!$omp parallel sections lastprivate (x, y, z) firstprivate (l)
+!$omp section
+    if (l) then
+      call ver_dt (x(n - 1), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
+      call ver_dt (y(4), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
+      call ver_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
+      call ver_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
+    else
+      call ver_dt (x(n - 1), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+      call ver_dt (y(4), 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
+      call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+      call ver_dt (z(-3,3), 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
+    end if
+    l = T
+    call alloc_dt (x(n - 1), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
+    call ver_dt (x(n - 1), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
+    call alloc_dt (y(4), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
+    call ver_dt (y(4), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
+    call alloc_dt (z(-3,2), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
+    call ver_dt (z(-3,2), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
+    call alloc_dt (z(-3,3), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
+    call ver_dt (z(-3,3), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
+!$omp section
+    if (l) then
+      call ver_dt (x(n - 1), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
+      call ver_dt (y(4), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
+      call ver_dt (z(-3,2), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
+      call ver_dt (z(-3,3), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
+    else
+      call ver_dt (x(n - 1), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+      call ver_dt (y(4), 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
+      call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+      call ver_dt (z(-3,3), 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
+    end if
+    l = T
+    call alloc_dt (x(n - 1), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
+    call ver_dt (x(n - 1), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
+    call alloc_dt (y(4), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
+    call ver_dt (y(4), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
+    call alloc_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
+    call ver_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
+    call alloc_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
+    call ver_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
+!$omp section
+!$omp end parallel sections
+    call ver_dt (x(n - 1), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
+    call ver_dt (y(4), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
+    call ver_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
+    call ver_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
+!$omp parallel sections lastprivate (x, y, z) firstprivate (l)
+!$omp section
+    if (l) then
+      call ver_dt (x(n - 1), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+      call ver_dt (y(4), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+      call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+      call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    else
+      call ver_dt (x(n - 1), 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
+      call ver_dt (y(4), 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
+      call ver_dt (z(-3,2), 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
+      call ver_dt (z(-3,3), 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
+    end if
+    l = T
+    call alloc_dt (x(n - 1), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+    call ver_dt (x(n - 1), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+    call alloc_dt (y(4), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+    call ver_dt (y(4), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+    call alloc_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+    call ver_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+    call alloc_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+    call ver_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+!$omp section
+    if (l) then
+      call ver_dt (x(n - 1), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+      call ver_dt (y(4), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+      call ver_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+      call ver_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+    else
+      call ver_dt (x(n - 1), 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
+      call ver_dt (y(4), 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
+      call ver_dt (z(-3,2), 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
+      call ver_dt (z(-3,3), 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
+    end if
+    l = T
+    call alloc_dt (x(n - 1), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (x(n - 1), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call alloc_dt (y(4), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    call ver_dt (y(4), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    call alloc_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call alloc_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+!$omp section
+!$omp end parallel sections
+    call ver_dt (x(n - 1), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (y(4), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+!$omp parallel private (x, y, z)
+    call ver_dt (x(n - 1), 0, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (y(4), 0, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    call ver_dt (z(-3,2), 0, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (z(-3,3), 0, T, 0, 1, T, T, 2, 2, 2, 2, F)
+!$omp single
+    call alloc_dt (x(n - 1), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+    call alloc_dt (y(4), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+    call alloc_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+    call alloc_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+!$omp end single copyprivate (x, y, z)
+    call ver_dt (x(n - 1), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+    call ver_dt (y(4), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+    call ver_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
+    call ver_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
+!$omp end parallel
+    call ver_dt (x(n - 1), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (y(4), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
+    call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
+    call ver_dt (x(2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (x(n), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+    call ver_dt (y(3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
+  end subroutine foo
+end
diff --git a/libgomp/testsuite/libgomp.fortran/allocatable10.f90 b/libgomp/testsuite/libgomp.fortran/allocatable10.f90
new file mode 100644 (file)
index 0000000..54eed61
--- /dev/null
@@ -0,0 +1,112 @@
+! { dg-do run }
+
+  integer, allocatable :: a, b(:), c(:,:)
+  integer :: i
+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) &
+!$omp & initializer (omp_priv = 0)
+  if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
+  allocate (a, b(6:9), c(3, 8:9))
+  a = 0
+  b = 0
+  c = 0
+  if (.not.allocated (a)) call abort
+  if (.not.allocated (b) .or. size (b) /= 4) call abort
+  if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
+  if (.not.allocated (c) .or. size (c) /= 6) call abort
+  if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
+  if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
+  if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
+!$omp parallel do reduction (+:a, b, c)
+  do i = 1, 10
+    if (.not.allocated (a)) call abort
+    if (.not.allocated (b) .or. size (b) /= 4) call abort
+    if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
+    if (.not.allocated (c) .or. size (c) /= 6) call abort
+    if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
+    if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
+    if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
+    a = a + i
+    b = b + 2 * i
+    c = c + 3 * i
+  end do
+  if (.not.allocated (a)) call abort
+  if (.not.allocated (b) .or. size (b) /= 4) call abort
+  if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
+  if (.not.allocated (c) .or. size (c) /= 6) call abort
+  if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
+  if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
+  if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
+  if (a /= 55 .or. any (b /= 110) .or. any (c /= 165)) call abort
+  a = 0
+  b = 0
+  c = 0
+!$omp parallel do reduction (foo : a, b, c)
+  do i = 1, 10
+    if (.not.allocated (a)) call abort
+    if (.not.allocated (b) .or. size (b) /= 4) call abort
+    if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
+    if (.not.allocated (c) .or. size (c) /= 6) call abort
+    if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
+    if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
+    if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
+    a = a + i
+    b = b + 2 * i
+    c = c + 3 * i
+  end do
+  if (.not.allocated (a)) call abort
+  if (.not.allocated (b) .or. size (b) /= 4) call abort
+  if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
+  if (.not.allocated (c) .or. size (c) /= 6) call abort
+  if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
+  if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
+  if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
+  if (a /= 55 .or. any (b /= 110) .or. any (c /= 165)) call abort
+  a = 0
+  b = 0
+  c = 0
+!$omp simd reduction (+:a, b, c)
+  do i = 1, 10
+    if (.not.allocated (a)) call abort
+    if (.not.allocated (b) .or. size (b) /= 4) call abort
+    if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
+    if (.not.allocated (c) .or. size (c) /= 6) call abort
+    if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
+    if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
+    if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
+    a = a + i
+    b = b + 2 * i
+    c = c + 3 * i
+  end do
+  if (.not.allocated (a)) call abort
+  if (.not.allocated (b) .or. size (b) /= 4) call abort
+  if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
+  if (.not.allocated (c) .or. size (c) /= 6) call abort
+  if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
+  if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
+  if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
+  if (a /= 55 .or. any (b /= 110) .or. any (c /= 165)) call abort
+  a = 0
+  b = 0
+  c = 0
+!$omp simd reduction (foo : a, b, c)
+  do i = 1, 10
+    if (.not.allocated (a)) call abort
+    if (.not.allocated (b) .or. size (b) /= 4) call abort
+    if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
+    if (.not.allocated (c) .or. size (c) /= 6) call abort
+    if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
+    if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
+    if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
+    a = a + i
+    b = b + 2 * i
+    c = c + 3 * i
+  end do
+  if (.not.allocated (a)) call abort
+  if (.not.allocated (b) .or. size (b) /= 4) call abort
+  if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
+  if (.not.allocated (c) .or. size (c) /= 6) call abort
+  if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
+  if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
+  if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
+  if (a /= 55 .or. any (b /= 110) .or. any (c /= 165)) call abort
+end
diff --git a/libgomp/testsuite/libgomp.fortran/allocatable11.f90 b/libgomp/testsuite/libgomp.fortran/allocatable11.f90
new file mode 100644 (file)
index 0000000..479f604
--- /dev/null
@@ -0,0 +1,72 @@
+! { dg-do run }
+! { dg-require-effective-target tls_runtime }
+
+  use omp_lib
+  integer, allocatable, save :: a, b(:), c(:,:)
+  integer :: p
+!$omp threadprivate (a, b, c)
+  if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
+
+  call omp_set_dynamic (.false.)
+  call omp_set_num_threads (4)
+
+!$omp parallel num_threads (4)
+  if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
+!$omp end parallel
+
+  allocate (a, b(6:9), c(3, 8:9))
+  a = 4
+  b = 5
+  c = 6
+  if (.not.allocated (a)) call abort
+  if (.not.allocated (b) .or. size (b) /= 4) call abort
+  if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
+  if (.not.allocated (c) .or. size (c) /= 6) call abort
+  if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
+  if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
+  if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
+
+!$omp parallel num_threads (4) copyin (a, b, c) private (p)
+  p = omp_get_thread_num ()
+  if (.not.allocated (a)) call abort
+  if (.not.allocated (b) .or. size (b) /= 4) call abort
+  if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
+  if (.not.allocated (c) .or. size (c) /= 6) call abort
+  if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
+  if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
+  if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
+  if (a /= 4 .or. any (b /= 5) .or. any (c /= 6)) call abort
+  deallocate (a, b, c)
+  if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
+  allocate (a, b(p:9), c(3, p:7))
+  a = p
+  b = p
+  c = p
+  if (.not.allocated (a)) call abort
+  if (.not.allocated (b) .or. size (b) /= (10 - p)) call abort
+  if (lbound (b, 1) /= p .or. ubound (b, 1) /= 9) call abort
+  if (.not.allocated (c) .or. size (c) /= (3 * (8 - p))) call abort
+  if (size (c, 1) /= 3 .or. size (c, 2) /= (8 - p)) call abort
+  if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
+  if (lbound (c, 2) /= p .or. ubound (c, 2) /= 7) call abort
+  if (a /= p .or. any (b /= p) .or. any (c /= p)) call abort
+!$omp end parallel
+
+!$omp parallel num_threads (4) copyin (a, b, c)
+  if (.not.allocated (a)) call abort
+  if (.not.allocated (b) .or. size (b) /= 10) call abort
+  if (lbound (b, 1) /= 0 .or. ubound (b, 1) /= 9) call abort
+  if (.not.allocated (c) .or. size (c) /= 24) call abort
+  if (size (c, 1) /= 3 .or. size (c, 2) /= 8) call abort
+  if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
+  if (lbound (c, 2) /= 0 .or. ubound (c, 2) /= 7) call abort
+  if (a /= 0 .or. any (b /= 0) .or. any (c /= 0)) call abort
+!$omp end parallel
+
+  deallocate (a, b, c)
+  if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
+
+!$omp parallel num_threads (4) copyin (a, b, c)
+  if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
+!$omp end parallel
+end
diff --git a/libgomp/testsuite/libgomp.fortran/allocatable12.f90 b/libgomp/testsuite/libgomp.fortran/allocatable12.f90
new file mode 100644 (file)
index 0000000..533ab7c
--- /dev/null
@@ -0,0 +1,74 @@
+! { dg-do run }
+
+  integer, allocatable :: a, b(:), c(:,:)
+  logical :: l
+  if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
+
+!$omp parallel private (a, b, c, l)
+  l = .false.
+  if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
+
+!$omp single
+  allocate (a, b(6:9), c(3, 8:9))
+  a = 4
+  b = 5
+  c = 6
+!$omp end single copyprivate (a, b, c)
+
+  if (.not.allocated (a)) call abort
+  if (.not.allocated (b) .or. size (b) /= 4) call abort
+  if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
+  if (.not.allocated (c) .or. size (c) /= 6) call abort
+  if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
+  if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
+  if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
+  if (a /= 4 .or. any (b /= 5) .or. any (c /= 6)) call abort
+
+!$omp single
+  deallocate (a, b, c)
+  if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
+  allocate (a, b(0:4), c(3, 2:7))
+  a = 1
+  b = 2
+  c = 3
+!$omp end single copyprivate (a, b, c)
+
+  if (.not.allocated (a)) call abort
+  if (.not.allocated (b) .or. size (b) /= 5) call abort
+  if (lbound (b, 1) /= 0 .or. ubound (b, 1) /= 4) call abort
+  if (.not.allocated (c) .or. size (c) /= 18) call abort
+  if (size (c, 1) /= 3 .or. size (c, 2) /= 6) call abort
+  if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
+  if (lbound (c, 2) /= 2 .or. ubound (c, 2) /= 7) call abort
+  if (a /= 1 .or. any (b /= 2) .or. any (c /= 3)) call abort
+
+!$omp single
+  l = .true.
+  deallocate (a, b, c)
+  if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
+  allocate (a, b(2:6), c(3:5, 3:8))
+  a = 7
+  b = 8
+  c = 9
+!$omp end single copyprivate (a, b, c)
+
+  if (.not.allocated (a)) call abort
+  if (.not.allocated (b) .or. size (b) /= 5) call abort
+  if (l) then
+    if (lbound (b, 1) /= 2 .or. ubound (b, 1) /= 6) call abort
+  else
+    if (lbound (b, 1) /= 0 .or. ubound (b, 1) /= 4) call abort
+  end if
+  if (.not.allocated (c) .or. size (c) /= 18) call abort
+  if (size (c, 1) /= 3 .or. size (c, 2) /= 6) call abort
+  if (l) then
+    if (lbound (c, 1) /= 3 .or. ubound (c, 1) /= 5) call abort
+    if (lbound (c, 2) /= 3 .or. ubound (c, 2) /= 8) call abort
+  else
+    if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
+    if (lbound (c, 2) /= 2 .or. ubound (c, 2) /= 7) call abort
+  end if
+  if (a /= 7 .or. any (b /= 8) .or. any (c /= 9)) call abort
+
+!$omp end parallel
+end
diff --git a/libgomp/testsuite/libgomp.fortran/allocatable9.f90 b/libgomp/testsuite/libgomp.fortran/allocatable9.f90
new file mode 100644 (file)
index 0000000..80bf5d3
--- /dev/null
@@ -0,0 +1,156 @@
+! { dg-do run }
+
+  integer, allocatable :: a, b(:), c(:,:)
+  logical :: l
+  if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
+!$omp parallel private (a, b, c)
+  if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
+  allocate (a, b(-7:-1), c(2:3, 3:5))
+  if (.not.allocated (a)) call abort
+  if (.not.allocated (b) .or. size (b) /= 7) call abort
+  if (lbound (b, 1) /= -7 .or. ubound (b, 1) /= -1) call abort
+  if (.not.allocated (c) .or. size (c) /= 6) call abort
+  if (size (c, 1) /= 2 .or. size (c, 2) /= 3) call abort
+  if (lbound (c, 1) /= 2 .or. ubound (c, 1) /= 3) call abort
+  if (lbound (c, 2) /= 3 .or. ubound (c, 2) /= 5) call abort
+  a = 4
+  b = 3
+  c = 2
+!$omp end parallel
+  if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
+!$omp parallel firstprivate (a, b, c)
+  if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
+  allocate (a, b(-7:-1), c(2:3, 3:5))
+  if (.not.allocated (a)) call abort
+  if (.not.allocated (b) .or. size (b) /= 7) call abort
+  if (lbound (b, 1) /= -7 .or. ubound (b, 1) /= -1) call abort
+  if (.not.allocated (c) .or. size (c) /= 6) call abort
+  if (size (c, 1) /= 2 .or. size (c, 2) /= 3) call abort
+  if (lbound (c, 1) /= 2 .or. ubound (c, 1) /= 3) call abort
+  if (lbound (c, 2) /= 3 .or. ubound (c, 2) /= 5) call abort
+  a = 4
+  b = 3
+  c = 2
+!$omp end parallel
+  if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
+  allocate (a, b(6:9), c(3, 8:9))
+  a = 2
+  b = 4
+  c = 5
+  if (.not.allocated (a)) call abort
+  if (.not.allocated (b) .or. size (b) /= 4) call abort
+  if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
+  if (.not.allocated (c) .or. size (c) /= 6) call abort
+  if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
+  if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
+  if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
+!$omp parallel firstprivate (a, b, c)
+  if (.not.allocated (a)) call abort
+  if (.not.allocated (b) .or. size (b) /= 4) call abort
+  if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
+  if (.not.allocated (c) .or. size (c) /= 6) call abort
+  if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
+  if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
+  if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
+  if (a /= 2 .or. any (b .ne. 4) .or. any (c .ne. 5)) call abort
+  deallocate (a)
+  if (allocated (a)) call abort
+  allocate (a)
+  a = 8
+  b = (/ 1, 2, 3 /)
+  c = reshape ((/ 1, 2, 3, 4, 5, 6, 7, 8 /), (/ 2, 4 /))
+  if (.not.allocated (a)) call abort
+  if (.not.allocated (b) .or. size (b) /= 3) call abort
+  if (lbound (b, 1) /= 1 .or. ubound (b, 1) /= 3) call abort
+  if (.not.allocated (c) .or. size (c) /= 8) call abort
+  if (size (c, 1) /= 2 .or. size (c, 2) /= 4) call abort
+  if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 2) call abort
+  if (lbound (c, 2) /= 1 .or. ubound (c, 2) /= 4) call abort
+  if (a /= 8 .or. b(2) /= 2 .or. c(1, 2) /= 3) call abort
+!$omp end parallel
+  if (.not.allocated (a)) call abort
+  if (.not.allocated (b) .or. size (b) /= 4) call abort
+  if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
+  if (.not.allocated (c) .or. size (c) /= 6) call abort
+  if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
+  if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
+  if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
+  if (a /= 2 .or. any (b .ne. 4) .or. any (c .ne. 5)) call abort
+  l = .false.
+!$omp parallel sections lastprivate (a, b, c) firstprivate (l)
+!$omp section
+  if (.not.allocated (a)) call abort
+  if (l) then
+    if (.not.allocated (b) .or. size (b) /= 6) call abort
+    if (lbound (b, 1) /= 1 .or. ubound (b, 1) /= 6) call abort
+    if (.not.allocated (c) .or. size (c) /= 8) call abort
+    if (size (c, 1) /= 4 .or. size (c, 2) /= 2) call abort
+    if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 4) call abort
+    if (lbound (c, 2) /= 1 .or. ubound (c, 2) /= 2) call abort
+    if (a /= 12 .or. b(2) /= 8 .or. c(1, 2) /= 5) call abort
+  else
+    if (.not.allocated (b) .or. size (b) /= 4) call abort
+    if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
+    if (.not.allocated (c) .or. size (c) /= 6) call abort
+    if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
+    if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
+    if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
+  end if
+  l = .true.
+  deallocate (a)
+  if (allocated (a)) call abort
+  allocate (a)
+  a = 8
+  b = (/ 1, 2, 3 /)
+  c = reshape ((/ 1, 2, 3, 4, 5, 6, 7, 8 /), (/ 2, 4 /))
+  if (.not.allocated (a)) call abort
+  if (.not.allocated (b) .or. size (b) /= 3) call abort
+  if (lbound (b, 1) /= 1 .or. ubound (b, 1) /= 3) call abort
+  if (.not.allocated (c) .or. size (c) /= 8) call abort
+  if (size (c, 1) /= 2 .or. size (c, 2) /= 4) call abort
+  if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 2) call abort
+  if (lbound (c, 2) /= 1 .or. ubound (c, 2) /= 4) call abort
+  if (a /= 8 .or. b(2) /= 2 .or. c(1, 2) /= 3) call abort
+!$omp section
+  if (.not.allocated (a)) call abort
+  if (l) then
+    if (.not.allocated (b) .or. size (b) /= 3) call abort
+    if (lbound (b, 1) /= 1 .or. ubound (b, 1) /= 3) call abort
+    if (.not.allocated (c) .or. size (c) /= 8) call abort
+    if (size (c, 1) /= 2 .or. size (c, 2) /= 4) call abort
+    if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 2) call abort
+    if (lbound (c, 2) /= 1 .or. ubound (c, 2) /= 4) call abort
+    if (a /= 8 .or. b(2) /= 2 .or. c(1, 2) /= 3) call abort
+  else
+    if (.not.allocated (b) .or. size (b) /= 4) call abort
+    if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
+    if (.not.allocated (c) .or. size (c) /= 6) call abort
+    if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
+    if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
+    if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
+  end if
+  l = .true.
+  deallocate (a)
+  if (allocated (a)) call abort
+  allocate (a)
+  a = 12
+  b = (/ 9, 8, 7, 6, 5, 4 /)
+  c = reshape ((/ 1, 2, 3, 4, 5, 6, 7, 8 /), (/ 4, 2 /))
+  if (.not.allocated (a)) call abort
+  if (.not.allocated (b) .or. size (b) /= 6) call abort
+  if (lbound (b, 1) /= 1 .or. ubound (b, 1) /= 6) call abort
+  if (.not.allocated (c) .or. size (c) /= 8) call abort
+  if (size (c, 1) /= 4 .or. size (c, 2) /= 2) call abort
+  if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 4) call abort
+  if (lbound (c, 2) /= 1 .or. ubound (c, 2) /= 2) call abort
+  if (a /= 12 .or. b(2) /= 8 .or. c(1, 2) /= 5) call abort
+!$omp end parallel sections
+  if (.not.allocated (a)) call abort
+  if (.not.allocated (b) .or. size (b) /= 6) call abort
+  if (lbound (b, 1) /= 1 .or. ubound (b, 1) /= 6) call abort
+  if (.not.allocated (c) .or. size (c) /= 8) call abort
+  if (size (c, 1) /= 4 .or. size (c, 2) /= 2) call abort
+  if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 4) call abort
+  if (lbound (c, 2) /= 1 .or. ubound (c, 2) /= 2) call abort
+  if (a /= 12 .or. b(2) /= 8 .or. c(1, 2) /= 5) call abort
+end
diff --git a/libgomp/testsuite/libgomp.fortran/associate1.f90 b/libgomp/testsuite/libgomp.fortran/associate1.f90
new file mode 100644 (file)
index 0000000..e409955
--- /dev/null
@@ -0,0 +1,23 @@
+! { dg-do run }
+
+program associate1
+  integer :: v, i, j
+  real :: a(3, 3)
+  v = 15
+  a = 4.5
+  a(2,1) = 3.5
+  i = 2
+  j = 1
+  associate(u => v, b => a(i, j))
+!$omp parallel private(v, a) default(none)
+  v = -1
+  a = 2.5
+  if (v /= -1 .or. u /= 15) call abort
+  if (a(2,1) /= 2.5 .or. b /= 3.5) call abort
+  associate(u => v, b => a(2, 1))
+  if (u /= -1 .or. b /= 2.5) call abort
+  end associate
+  if (u /= 15 .or. b /= 3.5) call abort
+!$omp end parallel
+  end associate
+end program
diff --git a/libgomp/testsuite/libgomp.fortran/associate2.f90 b/libgomp/testsuite/libgomp.fortran/associate2.f90
new file mode 100644 (file)
index 0000000..dee8496
--- /dev/null
@@ -0,0 +1,46 @@
+! { dg-do run }
+
+program associate2
+  type dl
+    integer :: i
+  end type
+  type dt
+    integer :: i
+    real :: a(3, 3)
+    type(dl) :: c(3, 3)
+  end type
+  integer :: v(4), i, j, k, l
+  type (dt) :: a(3, 3)
+  v = 15
+  forall (k = 1:3, l = 1:3) a(k, l)%a(:,:) = 4.5
+  a(2,1)%a(1,2) = 3.5
+  i = 2
+  j = 1
+  associate(u => v, b => a(i, j)%a)
+!$omp parallel private(v, a) default(none)
+  v = -1
+  forall (k = 1:3, l = 1:3) a(k, l)%a(:,:) = 2.5
+  if (v(3) /= -1 .or. u(3) /= 15) call abort
+  if (a(2,1)%a(1,2) /= 2.5 .or. b(1,2) /= 3.5) call abort
+  associate(u => v, b => a(2, 1)%a)
+  if (u(3) /= -1 .or. b(1,2) /= 2.5) call abort
+  end associate
+  if (u(3) /= 15 .or. b(1,2) /= 3.5) call abort
+!$omp end parallel
+  end associate
+  forall (k = 1:3, l = 1:3) a(k, l)%c(:,:)%i = 7
+  a(1,2)%c(2,1)%i = 9
+  i = 1
+  j = 2
+  associate(d => a(i, j)%c(2,:)%i)
+!$omp parallel private(a) default(none)
+  forall (k = 1:3, l = 1:3) a(k, l)%c(:,:)%i = 15
+  if (a(1,2)%c(2,1)%i /= 15 .or. d(1) /= 9) call abort
+  if (a(1,2)%c(2,2)%i /= 15 .or. d(2) /= 7) call abort
+  associate(d => a(2,1)%c(2,:)%i)
+  if (d(1) /= 15 .or. d(2) /= 15) call abort
+  end associate
+  if (d(1) /= 9 .or. d(2) /= 7) call abort
+!$omp end parallel
+  end associate
+end program
diff --git a/libgomp/testsuite/libgomp.fortran/cancel-do-1.f90 b/libgomp/testsuite/libgomp.fortran/cancel-do-1.f90
new file mode 100644 (file)
index 0000000..61713c4
--- /dev/null
@@ -0,0 +1,14 @@
+! { dg-do run }
+! { dg-set-target-env-var OMP_CANCELLATION "true" }
+
+  use omp_lib
+  integer :: i
+
+  !$omp parallel num_threads(32)
+    !$omp do
+      do i = 0, 999
+       !$omp cancel do
+       if (omp_get_cancellation ()) call abort
+      enddo
+  !$omp endparallel
+end
diff --git a/libgomp/testsuite/libgomp.fortran/cancel-do-2.f90 b/libgomp/testsuite/libgomp.fortran/cancel-do-2.f90
new file mode 100644 (file)
index 0000000..c748800
--- /dev/null
@@ -0,0 +1,90 @@
+! { dg-do run }
+! { dg-options "-fno-inline -fno-ipa-sra -fno-ipa-cp -fno-ipa-cp-clone" }
+! { dg-set-target-env-var OMP_CANCELLATION "true" }
+
+  use omp_lib
+  integer :: i
+  logical :: x(5)
+
+  x(:) = .false.
+  x(1) = .true.
+  x(3) = .true.
+  if (omp_get_cancellation ()) call foo (x)
+contains
+  subroutine foo (x)
+    use omp_lib
+    logical :: x(5)
+    integer :: v, w, i
+
+    v = 0
+    w = 0
+    !$omp parallel num_threads (32) shared (v, w)
+      !$omp do
+       do i = 0, 999
+         !$omp cancel do if (x(1))
+         call abort
+       end do
+      !$omp do
+       do i = 0, 999
+         !$omp cancel do if (x(2))
+         !$omp atomic
+           v = v + 1
+         !$omp endatomic
+       enddo
+      !$omp do
+       do i = 0, 999
+         !$omp cancel do if (x(3))
+         !$omp atomic
+           w = w + 8
+         !$omp end atomic
+       end do
+      !$omp do
+       do i = 0, 999
+         !$omp cancel do if (x(4))
+         !$omp atomic
+           v = v + 2
+         !$omp end atomic
+       end do
+      !$omp end do
+    !$omp end parallel
+    if (v.ne.3000.or.w.ne.0) call abort
+    !$omp parallel num_threads (32) shared (v, w)
+      ! None of these cancel directives should actually cancel anything,
+      ! but the compiler shouldn't know that and thus should use cancellable
+      ! barriers at the end of all the workshares.
+      !$omp cancel parallel if (omp_get_thread_num ().eq.1.and.x(5))
+      !$omp do
+       do i = 0, 999
+         !$omp cancel do if (x(1))
+         call abort
+       end do
+      !$omp cancel parallel if (omp_get_thread_num ().eq.2.and.x(5))
+      !$omp do
+       do i = 0, 999
+         !$omp cancel do if (x(2))
+         !$omp atomic
+           v = v + 1
+         !$omp endatomic
+       enddo
+      !$omp cancel parallel if (omp_get_thread_num ().eq.3.and.x(5))
+      !$omp do
+       do i = 0, 999
+         !$omp cancel do if (x(3))
+         !$omp atomic
+           w = w + 8
+         !$omp end atomic
+       end do
+      !$omp cancel parallel if (omp_get_thread_num ().eq.4.and.x(5))
+      !$omp do
+       do i = 0, 999
+         !$omp cancel do if (x(4))
+         !$omp atomic
+           v = v + 2
+         !$omp end atomic
+       end do
+      !$omp end do
+      !$omp cancel parallel if (omp_get_thread_num ().eq.5.and.x(5))
+    !$omp end parallel
+    if (v.ne.6000.or.w.ne.0) call abort
+  end subroutine
+end
diff --git a/libgomp/testsuite/libgomp.fortran/cancel-parallel-1.f90 b/libgomp/testsuite/libgomp.fortran/cancel-parallel-1.f90
new file mode 100644 (file)
index 0000000..7d91ff5
--- /dev/null
@@ -0,0 +1,10 @@
+! { dg-do run }
+! { dg-set-target-env-var OMP_CANCELLATION "true" }
+
+  use omp_lib
+
+  !$omp parallel num_threads(32)
+    !$omp cancel parallel
+    if (omp_get_cancellation ()) call abort
+  !$omp end parallel
+end
diff --git a/libgomp/testsuite/libgomp.fortran/cancel-parallel-3.f90 b/libgomp/testsuite/libgomp.fortran/cancel-parallel-3.f90
new file mode 100644 (file)
index 0000000..9d5ba8f
--- /dev/null
@@ -0,0 +1,38 @@
+! { dg-do run }
+! { dg-options "-fno-inline -fno-ipa-sra -fno-ipa-cp -fno-ipa-cp-clone" }
+! { dg-set-target-env-var OMP_CANCELLATION "true" }
+
+  use omp_lib
+  integer :: x, i, j
+  common /x/ x
+
+  call omp_set_dynamic (.false.)
+  call omp_set_schedule (omp_sched_static, 1)
+  !$omp parallel num_threads(16) private (i, j)
+    call do_some_work
+    !$omp barrier
+    if (omp_get_thread_num ().eq.1) then
+      call sleep (2)
+      !$omp cancellation point parallel
+    end if
+    do j = 3, 16
+      !$omp do schedule(runtime)
+       do i = 0, j - 1
+         call do_some_work
+       end do
+      !$omp enddo nowait
+    end do
+    if (omp_get_thread_num ().eq.0) then
+      call sleep (1)
+      !$omp cancel parallel
+    end if
+  !$omp end parallel
+contains
+  subroutine do_some_work
+    integer :: x
+    common /x/ x
+    !$omp atomic
+      x = x + 1
+    !$omp end atomic
+  endsubroutine do_some_work
+end
diff --git a/libgomp/testsuite/libgomp.fortran/cancel-sections-1.f90 b/libgomp/testsuite/libgomp.fortran/cancel-sections-1.f90
new file mode 100644 (file)
index 0000000..9ba8af8
--- /dev/null
@@ -0,0 +1,23 @@
+! { dg-do run }
+! { dg-set-target-env-var OMP_CANCELLATION "true" }
+
+  use omp_lib
+
+  if (omp_get_cancellation ()) then
+    !$omp parallel num_threads(32)
+      !$omp sections
+         !$omp cancel sections
+         call abort
+       !$omp section
+         !$omp cancel sections
+         call abort
+       !$omp section
+         !$omp cancel sections
+         call abort
+       !$omp section
+         !$omp cancel sections
+         call abort
+      !$omp end sections
+    !$omp end parallel
+  end if
+end
diff --git a/libgomp/testsuite/libgomp.fortran/cancel-taskgroup-2.f90 b/libgomp/testsuite/libgomp.fortran/cancel-taskgroup-2.f90
new file mode 100644 (file)
index 0000000..c727a20
--- /dev/null
@@ -0,0 +1,28 @@
+! { dg-do run }
+! { dg-set-target-env-var OMP_CANCELLATION "true" }
+
+  use omp_lib
+  integer :: i
+
+  !$omp parallel
+    !$omp taskgroup
+      !$omp task
+       !$omp cancel taskgroup
+       call abort
+      !$omp endtask
+    !$omp endtaskgroup
+  !$omp endparallel
+  !$omp parallel private (i)
+    !$omp barrier
+    !$omp single
+      !$omp taskgroup
+       do i = 0, 49
+         !$omp task
+           !$omp cancellation point taskgroup
+           !$omp cancel taskgroup if (i.gt.5)
+         !$omp end task
+       end do
+      !$omp end taskgroup
+    !$omp endsingle
+  !$omp end parallel
+end
diff --git a/libgomp/testsuite/libgomp.fortran/declare-simd-1.f90 b/libgomp/testsuite/libgomp.fortran/declare-simd-1.f90
new file mode 100644 (file)
index 0000000..5cd592c
--- /dev/null
@@ -0,0 +1,95 @@
+! { dg-do run { target vect_simd_clones } }
+! { dg-options "-fno-inline" }
+! { dg-additional-options "-msse2" { target sse2_runtime } }
+! { dg-additional-options "-mavx" { target avx_runtime } }
+
+module declare_simd_1_mod
+  contains
+    real function foo (a, b, c)
+      !$omp declare simd (foo) simdlen (4) uniform (a) linear (b : 5) &
+      !$omp & notinbranch
+      double precision, value :: a
+      real, value :: c
+      !$omp declare simd (foo)
+      integer, value :: b
+      foo = a + b * c
+    end function foo
+end module declare_simd_1_mod
+  use declare_simd_1_mod
+  interface
+    function bar (a, b, c)
+      !$omp declare simd (bar)
+      integer, value :: b
+      real, value :: c
+      real :: bar
+      !$omp declare simd (bar) simdlen (4) linear (b : 2)
+      !$omp declare simd (bar) simdlen (16) inbranch
+      double precision, value :: a
+    end function bar
+  end interface
+  integer :: i
+  double precision :: a(128)
+  real :: b(128), d(128)
+  data d /171., 414., 745., 1164., 1671., 2266., 2949., 3720., 4579., &
+  &       5526., 6561., 7684., 8895., 10194., 11581., 13056., 14619., &
+  &       16270., 18009., 19836., 21751., 23754., 25845., 28024., &
+  &       30291., 32646., 35089., 37620., 40239., 42946., 45741., &
+  &       48624., 51595., 54654., 57801., 61036., 64359., 67770., &
+  &       71269., 74856., 78531., 82294., 86145., 90084., 94111., &
+  &       98226., 102429., 106720., 111099., 115566., 120121., 124764., &
+  &       129495., 134314., 139221., 144216., 149299., 154470., 159729., &
+  &       165076., 170511., 176034., 181645., 187344., 193131., 199006., &
+  &       204969., 211020., 217159., 223386., 229701., 236104., 242595., &
+  &       249174., 255841., 262596., 269439., 276370., 283389., 290496., &
+  &       297691., 304974., 312345., 319804., 327351., 334986., 342709., &
+  &       350520., 358419., 366406., 374481., 382644., 390895., 399234., &
+  &       407661., 416176., 424779., 433470., 442249., 451116., 460071., &
+  &       469114., 478245., 487464., 496771., 506166., 515649., 525220., &
+  &       534879., 544626., 554461., 564384., 574395., 584494., 594681., &
+  &       604956., 615319., 625770., 636309., 646936., 657651., 668454., &
+  &       679345., 690324., 701391., 712546., 723789., 735120./
+  !$omp simd
+  do i = 1, 128
+    a(i) = 7.0 * i + 16.0
+    b(i) = 5.0 * i + 12.0
+  end do
+  !$omp simd
+  do i = 1, 128
+    b(i) = foo (a(i), 3, b(i))
+  end do
+  !$omp simd
+  do i = 1, 128
+    b(i) = bar (a(i), 2 * i, b(i))
+  end do
+  if (any (b.ne.d)) call abort
+  !$omp simd
+  do i = 1, 128
+    b(i) = i * 2.0
+  end do
+  !$omp simd
+  do i = 1, 128
+    b(i) = baz (7.0_8, 2, b(i))
+  end do
+  do i = 1, 128
+    if (b(i).ne.(7.0 + 4.0 * i)) call abort
+  end do
+contains
+  function baz (x, y, z)
+    !$omp declare simd (baz) simdlen (8) uniform (x, y)
+    !$omp declare simd (baz)
+    integer, value :: y
+    real, value :: z
+    real :: baz
+    double precision, value :: x
+    baz = x + y * z
+  end function baz
+end
+function bar (a, b, c)
+  integer, value :: b
+  real, value :: c
+  real :: bar
+  double precision, value :: a
+  !$omp declare simd (bar)
+  !$omp declare simd (bar) simdlen (4) linear (b : 2)
+  bar = a + b * c
+end function bar
diff --git a/libgomp/testsuite/libgomp.fortran/declare-simd-2.f90 b/libgomp/testsuite/libgomp.fortran/declare-simd-2.f90
new file mode 100644 (file)
index 0000000..30c63f7
--- /dev/null
@@ -0,0 +1,25 @@
+! { dg-do run { target vect_simd_clones } }
+! { dg-options "-fno-inline" }
+! { dg-additional-sources declare-simd-3.f90 }
+! { dg-additional-options "-msse2" { target sse2_runtime } }
+! { dg-additional-options "-mavx" { target avx_runtime } }
+
+module declare_simd_2_mod
+  contains
+    real function foo (a, b, c)
+      !$omp declare simd (foo) simdlen (4) uniform (a) linear (b : 5)
+      double precision, value :: a
+      real, value :: c
+      !$omp declare simd (foo)
+      integer, value :: b
+      foo = a + b * c
+    end function foo
+end module declare_simd_2_mod
+
+  interface
+    subroutine bar ()
+    end subroutine bar
+  end interface
+
+  call bar ()
+end
diff --git a/libgomp/testsuite/libgomp.fortran/declare-simd-3.f90 b/libgomp/testsuite/libgomp.fortran/declare-simd-3.f90
new file mode 100644 (file)
index 0000000..031625e
--- /dev/null
@@ -0,0 +1,22 @@
+! Don't compile this anywhere, it is just auxiliary
+! file compiled together with declare-simd-2.f90
+! to verify inter-CU module handling of omp declare simd.
+! { dg-do compile { target { lp64 && { ! lp64 } } } }
+
+subroutine bar
+  use declare_simd_2_mod
+  real :: b(128)
+  integer :: i
+
+  !$omp simd
+  do i = 1, 128
+    b(i) = i * 2.0
+  end do
+  !$omp simd
+  do i = 1, 128
+    b(i) = foo (7.0_8, 5 * i, b(i))
+  end do
+  do i = 1, 128
+    if (b(i).ne.(7.0 + 10.0 * i * i)) call abort
+  end do
+end subroutine bar
diff --git a/libgomp/testsuite/libgomp.fortran/depend-1.f90 b/libgomp/testsuite/libgomp.fortran/depend-1.f90
new file mode 100644 (file)
index 0000000..030d3fb
--- /dev/null
@@ -0,0 +1,203 @@
+! { dg-do run }
+
+  call dep ()
+  call dep2 ()
+  call dep3 ()
+  call firstpriv ()
+  call antidep ()
+  call antidep2 ()
+  call antidep3 ()
+  call outdep ()
+  call concurrent ()
+  call concurrent2 ()
+  call concurrent3 ()
+contains
+  subroutine dep
+    integer :: x
+    x = 1
+    !$omp parallel
+      !$omp single
+        !$omp task shared (x) depend(out: x)
+          x = 2
+        !$omp end task
+        !$omp task shared (x) depend(in: x)
+          if (x.ne.2) call abort
+        !$omp end task
+      !$omp end single
+    !$omp end parallel
+  end subroutine dep
+
+  subroutine dep2
+    integer :: x
+    !$omp parallel
+      !$omp single private (x)
+        x = 1
+        !$omp task shared (x) depend(out: x)
+          x = 2
+        !$omp end task
+        !$omp task shared (x) depend(in: x)
+          if (x.ne.2) call abort
+        !$omp end task
+        !$omp taskwait
+      !$omp end single
+    !$omp end parallel
+  end subroutine dep2
+
+  subroutine dep3
+    integer :: x
+    !$omp parallel private (x)
+      x = 1
+      !$omp single
+        !$omp task shared (x) depend(out: x)
+          x = 2
+        !$omp endtask
+        !$omp task shared (x) depend(in: x)
+          if (x.ne.2) call abort
+        !$omp endtask
+      !$omp endsingle
+    !$omp endparallel
+  end subroutine dep3
+
+  subroutine firstpriv
+    integer :: x
+    !$omp parallel private (x)
+      !$omp single
+        x = 1
+        !$omp task depend(out: x)
+          x = 2
+        !$omp end task
+        !$omp task depend(in: x)
+          if (x.ne.1) call abort
+        !$omp end task
+      !$omp end single
+    !$omp end parallel
+  end subroutine firstpriv
+
+  subroutine antidep
+    integer :: x
+    x = 1
+    !$omp parallel
+      !$omp single
+        !$omp task shared(x) depend(in: x)
+          if (x.ne.1) call abort
+        !$omp end task
+        !$omp task shared(x) depend(out: x)
+          x = 2
+        !$omp end task
+      !$omp end single
+    !$omp end parallel
+  end subroutine antidep
+
+  subroutine antidep2
+    integer :: x
+    !$omp parallel private (x)
+      !$omp single
+        x = 1
+        !$omp taskgroup
+          !$omp task shared(x) depend(in: x)
+            if (x.ne.1) call abort
+          !$omp end task
+          !$omp task shared(x) depend(out: x)
+            x = 2
+          !$omp end task
+        !$omp end taskgroup
+      !$omp end single
+    !$omp end parallel
+  end subroutine antidep2
+
+  subroutine antidep3
+    integer :: x
+    !$omp parallel
+      x = 1
+      !$omp single
+        !$omp task shared(x) depend(in: x)
+          if (x.ne.1) call abort
+        !$omp end task
+        !$omp task shared(x) depend(out: x)
+          x = 2
+        !$omp end task
+      !$omp end single
+    !$omp end parallel
+  end subroutine antidep3
+
+  subroutine outdep
+    integer :: x
+    !$omp parallel private (x)
+      !$omp single
+        x = 0
+        !$omp task shared(x) depend(out: x)
+          x = 1
+        !$omp end task
+        !$omp task shared(x) depend(out: x)
+          x = 2
+        !$omp end task
+        !$omp taskwait
+        if (x.ne.2) call abort
+      !$omp end single
+    !$omp end parallel
+  end subroutine outdep
+
+  subroutine concurrent
+    integer :: x
+    x = 1
+    !$omp parallel
+      !$omp single
+        !$omp task shared (x) depend(out: x)
+          x = 2
+        !$omp end task
+        !$omp task shared (x) depend(in: x)
+          if (x.ne.2) call abort
+        !$omp end task
+        !$omp task shared (x) depend(in: x)
+          if (x.ne.2) call abort
+        !$omp end task
+        !$omp task shared (x) depend(in: x)
+          if (x.ne.2) call abort
+        !$omp end task
+      !$omp end single
+    !$omp end parallel
+  end subroutine concurrent
+
+  subroutine concurrent2
+    integer :: x
+    !$omp parallel private (x)
+      !$omp single
+        x = 1
+        !$omp task shared (x) depend(out: x)
+          x = 2;
+        !$omp end task
+        !$omp task shared (x) depend(in: x)
+          if (x.ne.2) call abort
+        !$omp end task
+        !$omp task shared (x) depend(in: x)
+          if (x.ne.2) call abort
+        !$omp end task
+        !$omp task shared (x) depend(in: x)
+          if (x.ne.2) call abort
+        !$omp end task
+        !$omp taskwait
+      !$omp end single
+    !$omp end parallel
+  end subroutine concurrent2
+
+  subroutine concurrent3
+    integer :: x
+    !$omp parallel private (x)
+      x = 1
+      !$omp single
+        !$omp task shared (x) depend(out: x)
+          x = 2
+        !$omp end task
+        !$omp task shared (x) depend(in: x)
+          if (x.ne.2) call abort
+        !$omp end task
+        !$omp task shared (x) depend(in: x)
+          if (x.ne.2) call abort
+        !$omp end task
+        !$omp task shared (x) depend(in: x)
+          if (x.ne.2) call abort
+        !$omp end task
+      !$omp end single
+    !$omp end parallel
+  end subroutine concurrent3
+end
diff --git a/libgomp/testsuite/libgomp.fortran/depend-2.f90 b/libgomp/testsuite/libgomp.fortran/depend-2.f90
new file mode 100644 (file)
index 0000000..0694ce7
--- /dev/null
@@ -0,0 +1,34 @@
+! { dg-do run }
+
+  integer :: x(3:6, 7:12), y
+  y = 1
+  !$omp parallel shared (x, y)
+    !$omp single
+      !$omp taskgroup
+        !$omp task depend(in: x(:, :))
+         if (y.ne.1) call abort
+        !$omp end task
+        !$omp task depend(out: x(:, :))
+         y = 2
+        !$omp end task
+      !$omp end taskgroup
+      !$omp taskgroup
+        !$omp task depend(in: x(4, 7))
+         if (y.ne.2) call abort
+        !$omp end task
+        !$omp task depend(out: x(4:4, 7:7))
+         y = 3
+        !$omp end task
+      !$omp end taskgroup
+      !$omp taskgroup
+        !$omp task depend(in: x(4:, 8:))
+         if (y.ne.3) call abort
+        !$omp end task
+        !$omp task depend(out: x(4:6, 8:12))
+         y = 4
+        !$omp end task
+      !$omp end taskgroup
+    !$omp end single
+  !$omp end parallel
+  if (y.ne.4) call abort
+end
diff --git a/libgomp/testsuite/libgomp.fortran/depend-3.f90 b/libgomp/testsuite/libgomp.fortran/depend-3.f90
new file mode 100644 (file)
index 0000000..11be641
--- /dev/null
@@ -0,0 +1,42 @@
+! { dg-do run }
+
+  integer :: x(2, 3)
+  integer, allocatable :: z(:, :)
+  allocate (z(-2:3, 2:4))
+  call foo (x, z)
+contains
+  subroutine foo (x, z)
+    integer :: x(:, :), y
+    integer, allocatable :: z(:, :)
+    y = 1
+    !$omp parallel shared (x, y, z)
+      !$omp single
+        !$omp taskgroup
+          !$omp task depend(in: x)
+         if (y.ne.1) call abort
+          !$omp end task
+          !$omp task depend(out: x(1:2, 1:3))
+         y = 2
+          !$omp end task
+        !$omp end taskgroup
+        !$omp taskgroup
+          !$omp task depend(in: z)
+         if (y.ne.2) call abort
+          !$omp end task
+          !$omp task depend(out: z(-2:3, 2:4))
+         y = 3
+          !$omp end task
+        !$omp end taskgroup
+        !$omp taskgroup
+          !$omp task depend(in: x)
+         if (y.ne.3) call abort
+          !$omp end task
+          !$omp task depend(out: x(1:, 1:))
+         y = 4
+          !$omp end task
+        !$omp end taskgroup
+      !$omp end single
+    !$omp end parallel
+    if (y.ne.4) call abort
+  end subroutine
+end
diff --git a/libgomp/testsuite/libgomp.fortran/nestedfn5.f90 b/libgomp/testsuite/libgomp.fortran/nestedfn5.f90
new file mode 100644 (file)
index 0000000..f67bd47
--- /dev/null
@@ -0,0 +1,96 @@
+! { dg-do run }
+
+  interface
+    subroutine bar (q)
+      integer :: q(19:)
+    end subroutine
+  end interface
+  integer :: q(7:15)
+  q(:) = 5
+  call bar (q)
+end
+subroutine bar (q)
+  use iso_c_binding, only: c_ptr, c_loc, c_int
+  integer :: a, b, c, d(2:3,4:5), q(19:), h, k, m, n, o, p
+  integer(c_int), target :: e(64)
+  type (c_ptr) :: f, g(64)
+  logical :: l
+  a = 1
+  b = 2
+  c = 3
+  d = 4
+  l = .false.
+  f = c_loc (e)
+  call foo
+contains
+  subroutine foo
+    use iso_c_binding, only: c_sizeof
+!$omp simd linear(a:2) linear(b:1)
+    do a = 1, 20, 2
+      b = b + 1
+    end do
+!$omp end simd
+    if (a /= 21 .or. b /= 12) call abort
+!$omp simd aligned(f : c_sizeof (e(1)))
+    do b = 1, 64
+      g(b) = f
+    end do
+!$omp end simd
+!$omp parallel
+!$omp single
+!$omp taskgroup
+!$omp task depend(out : a, d(2:2,4:5))
+    a = a + 1
+    d(2:2,4:5) = d(2:2,4:5) + 1
+!$omp end task
+!$omp task depend(in : a, d(2:2,4:5))
+    if (a /= 22) call abort
+    if (any (d(2:2,4:5) /= 5)) call abort
+!$omp end task
+!$omp end taskgroup
+!$omp end single
+!$omp end parallel
+    b = 10
+!$omp target data map (tofrom: a, d(2:3,4:4), q) map (from: l)
+!$omp target map (tofrom: b, d(2:3,4:4))
+    l = .false.
+    if (a /= 22 .or. any (q /= 5)) l = .true.
+    if (lbound (q, 1) /= 19 .or. ubound (q, 1) /= 27) l = .true.
+    if (d(2,4) /= 5 .or. d(3,4) /= 4) l = .true.
+    l = l .or. (b /= 10)
+    a = 6
+    b = 11
+    q = 8
+    d(2:3,4:4) = 9
+!$omp end target
+!$omp target update from (a, q, d(2:3,4:4), l)
+    if (a /= 6 .or. l .or. b /= 11 .or. any (q /= 8)) call abort
+    if (any (d(2:3,4:4) /= 9) .or. d(2,5) /= 5 .or. d(3,5) /= 4) call abort
+    a = 12
+    b = 13
+    q = 14
+    d = 15
+!$omp target update to (a, q, d(2:3,4:4))
+!$omp target map (tofrom: b, d(2:3,4:4))
+    if (a /= 12 .or. b /= 13 .or. any (q /= 14)) l = .true.
+    l = l .or. any (d(2:3,4:4) /= 15)
+!$omp end target
+    a = 0
+    b = 1
+    c = 100
+    h = 8
+    m = 0
+    n = 64
+    o = 16
+    if (l) call abort
+!$omp target teams distribute parallel do simd if (.not.l) device(a) &
+!$omp & num_teams(b) dist_schedule(static, c) num_threads (h) &
+!$omp & reduction (+: m) safelen (n) schedule(static, o)
+    do p = 1, 64
+      m = m + 1
+    end do
+!$omp end target teams distribute parallel do simd
+    if (m /= 64) call abort
+!$omp end target data
+  end subroutine foo
+end subroutine bar
diff --git a/libgomp/testsuite/libgomp.fortran/omp_atomic5.f90 b/libgomp/testsuite/libgomp.fortran/omp_atomic5.f90
new file mode 100644 (file)
index 0000000..8e06415
--- /dev/null
@@ -0,0 +1,59 @@
+! { dg-do run }
+    integer (kind = 4) :: a, a2
+    integer (kind = 2) :: b, b2
+    real :: c
+    double precision :: d, d2, c2
+    integer, dimension (10) :: e
+    e(:) = 5
+    e(7) = 9
+!$omp atomic write seq_cst
+    a = 1
+!$omp atomic seq_cst, write
+    b = 2
+!$omp atomic write, seq_cst
+    c = 3
+!$omp atomic seq_cst write
+    d = 4
+!$omp atomic capture seq_cst
+    a2 = a
+    a = a + 4
+!$omp end atomic
+!$omp atomic capture, seq_cst
+    b = b - 18
+    b2 = b
+!$omp end atomic
+!$omp atomic seq_cst, capture
+    c2 = c
+    c = 2.0 * c
+!$omp end atomic
+!$omp atomic seq_cst capture
+    d = d / 2.0
+    d2 = d
+!$omp end atomic
+    if (a2 .ne. 1 .or. b2 .ne. -16 .or. c2 .ne. 3 .or. d2 .ne. 2) call abort
+!$omp atomic read seq_cst
+    a2 = a
+!$omp atomic seq_cst, read
+    c2 = c
+    if (a2 .ne. 5 .or. b2 .ne. -16 .or. c2 .ne. 6 .or. d2 .ne. 2) call abort
+    a2 = 10
+    if (a2 .ne. 10) call abort
+!$omp atomic capture
+    a2 = a
+    a = e(1) + e(6) + e(7) * 2
+!$omp endatomic
+    if (a2 .ne. 5) call abort
+!$omp atomic read
+    a2 = a
+!$omp end atomic
+    if (a2 .ne. 28) call abort
+!$omp atomic capture seq_cst
+    b2 = b
+    b = e(1) + e(7) + e(5) * 2
+!$omp end atomic
+    if (b2 .ne. -16) call abort
+!$omp atomic seq_cst, read
+    b2 = b
+!$omp end atomic
+    if (b2 .ne. 24) call abort
+end
index aaa8881..be24adc 100644 (file)
@@ -4,6 +4,6 @@
       implicit none
       include "omp_lib.h"
 
-      if (openmp_version .ne. 201107) call abort;
+      if (openmp_version .ne. 201307) call abort;
 
       end program main
index b2d1d26..62712c7 100644 (file)
@@ -4,6 +4,6 @@ program main
   use omp_lib
   implicit none
 
-  if (openmp_version .ne. 201107) call abort;
+  if (openmp_version .ne. 201307) call abort;
 
 end program main
diff --git a/libgomp/testsuite/libgomp.fortran/procptr1.f90 b/libgomp/testsuite/libgomp.fortran/procptr1.f90
new file mode 100644 (file)
index 0000000..4187739
--- /dev/null
@@ -0,0 +1,42 @@
+! { dg-do run }
+  interface
+    integer function foo ()
+    end function
+    integer function bar ()
+    end function
+    integer function baz ()
+    end function
+  end interface
+  procedure(foo), pointer :: ptr
+  integer :: i
+  ptr => foo
+!$omp parallel shared (ptr)
+  if (ptr () /= 1) call abort
+!$omp end parallel
+  ptr => bar
+!$omp parallel firstprivate (ptr)
+  if (ptr () /= 2) call abort
+!$omp end parallel
+!$omp parallel sections lastprivate (ptr)
+!$omp section
+  ptr => foo
+  if (ptr () /= 1) call abort
+!$omp section
+  ptr => bar
+  if (ptr () /= 2) call abort
+!$omp section
+  ptr => baz
+  if (ptr () /= 3) call abort
+!$omp end parallel sections
+  if (ptr () /= 3) call abort
+  if (.not.associated (ptr, baz)) call abort
+end
+integer function foo ()
+  foo = 1
+end function
+integer function bar ()
+  bar = 2
+end function
+integer function baz ()
+  baz = 3
+end function
diff --git a/libgomp/testsuite/libgomp.fortran/simd1.f90 b/libgomp/testsuite/libgomp.fortran/simd1.f90
new file mode 100644 (file)
index 0000000..b97d27f
--- /dev/null
@@ -0,0 +1,35 @@
+! { dg-do run }
+! { dg-additional-options "-msse2" { target sse2_runtime } }
+! { dg-additional-options "-mavx" { target avx_runtime } }
+
+  type dt
+    integer :: x = 0
+  end type
+  type (dt) :: t
+  integer :: i, j, k, l, r, s, a(30)
+  integer, target :: q(30)
+  integer, pointer :: p(:)
+  !$omp declare reduction (foo : integer : &
+  !$omp & omp_out = omp_out + omp_in) initializer (omp_priv = 0)
+  !$omp declare reduction (+ : dt : omp_out%x = omp_out%x &
+  !$omp & + omp_in%x)
+  a(:) = 1
+  q(:) = 1
+  p => q
+  r = 0
+  j = 10
+  k = 20
+  s = 0
+  !$omp simd safelen (8) reduction(+:r, t) linear(j, k : 2) &
+  !$omp& private (l) aligned(p : 4) reduction(foo:s)
+  do i = 1, 30
+    l = j + k + a(i) + p(i)
+    r = r + l
+    j = j + 2
+    k = k + 2
+    s = s + l
+    t%x = t%x + l
+  end do
+  if (r.ne.2700.or.j.ne.70.or.k.ne.80.or.s.ne.2700) call abort
+  if (t%x.ne.2700) call abort
+end
diff --git a/libgomp/testsuite/libgomp.fortran/simd2.f90 b/libgomp/testsuite/libgomp.fortran/simd2.f90
new file mode 100644 (file)
index 0000000..9b90bcd
--- /dev/null
@@ -0,0 +1,101 @@
+! { dg-do run }
+! { dg-additional-options "-msse2" { target sse2_runtime } }
+! { dg-additional-options "-mavx" { target avx_runtime } }
+
+  integer :: a(1024), b(1024), k, m, i, s, t
+  k = 4
+  m = 2
+  t = 1
+  do i = 1, 1024
+    a(i) = i - 513
+    b(i) = modulo (i - 52, 39)
+    if (i.lt.52.and.b(i).ne.0) b(i) = b(i) - 39
+  end do
+  s = foo (b)
+  do i = 1, 1024
+    if (a(i).ne.((i - 513) * b(i))) call abort
+    if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
+      if (b(i).ne.(modulo (i - 52, 39) - 39)) call abort
+    else
+      if (b(i).ne.(modulo (i - 52, 39))) call abort
+    end if
+    a(i) = i - 513
+  end do
+  if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) call abort
+  k = 4
+  m = 2
+  t = 1
+  s = bar (b)
+  do i = 1, 1024
+    if (a(i).ne.((i - 513) * b(i))) call abort
+    if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
+      if (b(i).ne.(modulo (i - 52, 39) - 39)) call abort
+    else
+      if (b(i).ne.(modulo (i - 52, 39))) call abort
+    end if
+    a(i) = i - 513
+  end do
+  if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) call abort
+  k = 4
+  m = 2
+  t = 1
+  s = baz (b)
+  do i = 1, 1024
+    if (a(i).ne.((i - 513) * b(i))) call abort
+    if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
+      if (b(i).ne.(modulo (i - 52, 39) - 39)) call abort
+    else
+      if (b(i).ne.(modulo (i - 52, 39))) call abort
+    end if
+  end do
+  if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) call abort
+contains
+  function foo (p)
+    integer :: p(1024), u, v, i, s, foo
+    s = 0
+    !$omp simd linear(k : m + 1) reduction(+: s) lastprivate(u, v)
+    do i = 1, 1024
+      a(i) = a(i) * p(i)
+      u = p(i) + k
+      k = k + m + 1
+      v = p(i) + k
+      s = s + p(i) + k
+    end do
+    !$omp end simd
+    if (i.ne.1025) call abort
+    if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) call abort
+    foo = s
+  end function foo
+  function bar (p)
+    integer :: p(1024), u, v, i, s, bar
+    s = 0
+    !$omp simd linear(k : m + 1) reduction(+: s) lastprivate(u, v)
+    do i = 1, 1024, t
+      a(i) = a(i) * p(i)
+      u = p(i) + k
+      k = k + m + 1
+      v = p(i) + k
+      s = s + p(i) + k
+    end do
+    !$omp end simd
+    if (i.ne.1025) call abort
+    if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) call abort
+    bar = s
+  end function bar
+  function baz (p)
+    integer :: p(1024), u, v, i, s, baz
+    s = 0
+    !$omp simd linear(k : m + 1) reduction(+: s) lastprivate(u, v) &
+    !$omp & linear(i : t)
+    do i = 1, 1024, t
+      a(i) = a(i) * p(i)
+      u = p(i) + k
+      k = k + m + 1
+      v = p(i) + k
+      s = s + p(i) + k
+    end do
+    if (i.ne.1025) call abort
+    if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) call abort
+    baz = s
+  end function baz
+end
diff --git a/libgomp/testsuite/libgomp.fortran/simd3.f90 b/libgomp/testsuite/libgomp.fortran/simd3.f90
new file mode 100644 (file)
index 0000000..df9f4ca
--- /dev/null
@@ -0,0 +1,109 @@
+! { dg-do run }
+! { dg-additional-options "-msse2" { target sse2_runtime } }
+! { dg-additional-options "-mavx" { target avx_runtime } }
+
+  integer :: a(1024), b(1024), k, m, i, s, t
+  k = 4
+  m = 2
+  t = 1
+  do i = 1, 1024
+    a(i) = i - 513
+    b(i) = modulo (i - 52, 39)
+    if (i.lt.52.and.b(i).ne.0) b(i) = b(i) - 39
+  end do
+  s = foo (b)
+  do i = 1, 1024
+    if (a(i).ne.((i - 513) * b(i))) call abort
+    if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
+      if (b(i).ne.(modulo (i - 52, 39) - 39)) call abort
+    else
+      if (b(i).ne.(modulo (i - 52, 39))) call abort
+    end if
+    a(i) = i - 513
+  end do
+  if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) call abort
+  k = 4
+  m = 2
+  t = 1
+  s = bar (b)
+  do i = 1, 1024
+    if (a(i).ne.((i - 513) * b(i))) call abort
+    if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
+      if (b(i).ne.(modulo (i - 52, 39) - 39)) call abort
+    else
+      if (b(i).ne.(modulo (i - 52, 39))) call abort
+    end if
+    a(i) = i - 513
+  end do
+  if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) call abort
+  k = 4
+  m = 2
+  t = 1
+  s = baz (b)
+  do i = 1, 1024
+    if (a(i).ne.((i - 513) * b(i))) call abort
+    if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
+      if (b(i).ne.(modulo (i - 52, 39) - 39)) call abort
+    else
+      if (b(i).ne.(modulo (i - 52, 39))) call abort
+    end if
+  end do
+  if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) call abort
+contains
+  function foo (p)
+    integer :: p(1024), u, v, i, s, foo
+    s = 0
+    !$omp parallel
+    !$omp do simd linear(k : m + 1) reduction(+: s) lastprivate(u, v) &
+    !$omp & schedule (static, 32)
+    do i = 1, 1024
+      a(i) = a(i) * p(i)
+      u = p(i) + k
+      k = k + m + 1
+      v = p(i) + k
+      s = s + p(i) + k
+    end do
+    !$omp end do simd
+    !$omp end parallel
+    if (i.ne.1025) call abort
+    if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) call abort
+    foo = s
+  end function foo
+  function bar (p)
+    integer :: p(1024), u, v, i, s, bar
+    s = 0
+    !$omp parallel
+    !$omp do simd linear(k : m + 1) reduction(+: s) lastprivate(u, v) &
+    !$omp & schedule (dynamic, 32)
+    do i = 1, 1024, t
+      a(i) = a(i) * p(i)
+      u = p(i) + k
+      k = k + m + 1
+      v = p(i) + k
+      s = s + p(i) + k
+    end do
+    !$omp end do simd
+    !$omp endparallel
+    if (i.ne.1025) call abort
+    if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) call abort
+    bar = s
+  end function bar
+  function baz (p)
+    integer :: p(1024), u, v, i, s, baz
+    s = 0
+    !$omp parallel
+    !$omp do simd linear(k : m + 1) reduction(+: s) lastprivate(u, v) &
+    !$omp & linear(i : t) schedule (static, 8)
+    do i = 1, 1024, t
+      a(i) = a(i) * p(i)
+      u = p(i) + k
+      k = k + m + 1
+      v = p(i) + k
+      s = s + p(i) + k
+    end do
+    !$omp end parallel
+    if (i.ne.1025) call abort
+    if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) call abort
+    baz = s
+  end function baz
+end
diff --git a/libgomp/testsuite/libgomp.fortran/simd4.f90 b/libgomp/testsuite/libgomp.fortran/simd4.f90
new file mode 100644 (file)
index 0000000..a5b8ba0
--- /dev/null
@@ -0,0 +1,103 @@
+! { dg-do run }
+! { dg-additional-options "-msse2" { target sse2_runtime } }
+! { dg-additional-options "-mavx" { target avx_runtime } }
+
+  integer :: a(1024), b(1024), k, m, i, s, t
+  k = 4
+  m = 2
+  t = 1
+  do i = 1, 1024
+    a(i) = i - 513
+    b(i) = modulo (i - 52, 39)
+    if (i.lt.52.and.b(i).ne.0) b(i) = b(i) - 39
+  end do
+  s = foo (b)
+  do i = 1, 1024
+    if (a(i).ne.((i - 513) * b(i))) call abort
+    if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
+      if (b(i).ne.(modulo (i - 52, 39) - 39)) call abort
+    else
+      if (b(i).ne.(modulo (i - 52, 39))) call abort
+    end if
+    a(i) = i - 513
+  end do
+  if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) call abort
+  k = 4
+  m = 2
+  t = 1
+  s = bar (b)
+  do i = 1, 1024
+    if (a(i).ne.((i - 513) * b(i))) call abort
+    if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
+      if (b(i).ne.(modulo (i - 52, 39) - 39)) call abort
+    else
+      if (b(i).ne.(modulo (i - 52, 39))) call abort
+    end if
+    a(i) = i - 513
+  end do
+  if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) call abort
+  k = 4
+  m = 2
+  t = 1
+  s = baz (b)
+  do i = 1, 1024
+    if (a(i).ne.((i - 513) * b(i))) call abort
+    if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
+      if (b(i).ne.(modulo (i - 52, 39) - 39)) call abort
+    else
+      if (b(i).ne.(modulo (i - 52, 39))) call abort
+    end if
+  end do
+  if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) call abort
+contains
+  function foo (p)
+    integer :: p(1024), u, v, i, s, foo
+    s = 0
+    !$omp parallel do simd linear(k : m + 1) reduction(+: s) &
+    !$omp & lastprivate(u, v) schedule (static, 32)
+    do i = 1, 1024
+      a(i) = a(i) * p(i)
+      u = p(i) + k
+      k = k + m + 1
+      v = p(i) + k
+      s = s + p(i) + k
+    end do
+    !$omp end parallel do simd
+    if (i.ne.1025) call abort
+    if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) call abort
+    foo = s
+  end function foo
+  function bar (p)
+    integer :: p(1024), u, v, i, s, bar
+    s = 0
+    !$omp parallel do simd linear(k : m + 1) reduction(+: s) &
+    !$omp & lastprivate(u, v) schedule (dynamic, 32)
+    do i = 1, 1024, t
+      a(i) = a(i) * p(i)
+      u = p(i) + k
+      k = k + m + 1
+      v = p(i) + k
+      s = s + p(i) + k
+    end do
+    !$omp endparalleldosimd
+    if (i.ne.1025) call abort
+    if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) call abort
+    bar = s
+  end function bar
+  function baz (p)
+    integer :: p(1024), u, v, i, s, baz
+    s = 0
+    !$omp parallel do simd linear(k : m + 1) reduction(+: s) &
+    !$omp & lastprivate(u, v) linear(i : t) schedule (static, 8)
+    do i = 1, 1024, t
+      a(i) = a(i) * p(i)
+      u = p(i) + k
+      k = k + m + 1
+      v = p(i) + k
+      s = s + p(i) + k
+    end do
+    if (i.ne.1025) call abort
+    if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) call abort
+    baz = s
+  end function baz
+end
diff --git a/libgomp/testsuite/libgomp.fortran/simd5.f90 b/libgomp/testsuite/libgomp.fortran/simd5.f90
new file mode 100644 (file)
index 0000000..7a5efec
--- /dev/null
@@ -0,0 +1,124 @@
+! { dg-do run }
+! { dg-additional-options "-msse2" { target sse2_runtime } }
+! { dg-additional-options "-mavx" { target avx_runtime } }
+
+  integer :: i, j, b, c
+  c = 0
+  i = 4
+  j = 4
+  b = 7
+!$omp simd linear(b:2) reduction(+:c)
+  do i = 0, 63
+    c = c + b - (7 + 2 * i)
+    b = b + 2
+  end do
+  if (c /= 0 .or. i /= 64 .or. b /= 7 + 64 * 2) call abort
+  i = 4
+  j = 4
+  b = 7
+!$omp simd linear(b:3) reduction(+:c)
+  do i = 0, 63, 4
+    c = c + b - (7 + i / 4 * 3)
+    b = b + 3
+  end do
+  if (c /= 0 .or. i /= 64 .or. b /= 7 + 16 * 3) call abort
+  i = 4
+  j = 4
+  b = 7
+!$omp simd linear(i) linear(b:2) reduction(+:c)
+  do i = 0, 63
+    c = c + b - (7 + 2 * i)
+    b = b + 2
+  end do
+  if (c /= 0 .or. i /= 64 .or. b /= 7 + 64 * 2) call abort
+  i = 4
+  j = 4
+  b = 7
+!$omp simd linear(i:4) linear(b:3) reduction(+:c)
+  do i = 0, 63, 4
+    c = c + b - (7 + i / 4 * 3)
+    b = b + 3
+  end do
+  if (c /= 0 .or. i /= 64 .or. b /= 7 + 16 * 3) call abort
+  i = 4
+  j = 4
+  b = 7
+!$omp simd collapse(2) linear(b:2) reduction(+:c)
+  do i = 0, 7
+    do j = 0, 7
+      c = c + b - (7 + 2 * j + 2 * 8 * i)
+      b = b + 2
+    end do
+  end do
+  if (c /= 0 .or. i /= 8 .or. j /= 8 .or. b /= 7 + 64 * 2) call abort
+  i = 4
+  j = 4
+  b = 7
+!$omp simd collapse(2) linear(b:2) reduction(+:c) lastprivate (i, j)
+  do i = 0, 7
+    do j = 0, 7
+      c = c + b - (7 + 2 * j + 2 * 8 * i)
+      b = b + 2
+    end do
+  end do
+  if (c /= 0 .or. i /= 8 .or. j /= 8 .or. b /= 7 + 64 * 2) call abort
+  i = 4
+  j = 4
+  b = 7
+!$omp parallel do simd schedule (static, 4) linear(b:2) reduction(+:c)
+  do i = 0, 63
+    c = c + b - (7 + 2 * i)
+    b = b + 2
+  end do
+  if (c /= 0 .or. i /= 64 .or. b /= 7 + 64 * 2) call abort
+  i = 4
+  j = 4
+  b = 7
+!$omp parallel do simd schedule (static, 4) linear(b:3) reduction(+:c)
+  do i = 0, 63, 4
+    c = c + b - (7 + i / 4 * 3)
+    b = b + 3
+  end do
+  if (c /= 0 .or. i /= 64 .or. b /= 7 + 16 * 3) call abort
+  i = 4
+  j = 4
+  b = 7
+!$omp parallel do simd schedule (static, 4) linear(i) linear(b:2) reduction(+:c)
+  do i = 0, 63
+    c = c + b - (7 + 2 * i)
+    b = b + 2
+  end do
+  if (c /= 0 .or. i /= 64 .or. b /= 7 + 64 * 2) call abort
+  i = 4
+  j = 4
+  b = 7
+!$omp parallel do simd schedule (static, 4) linear(i:4) linear(b:3) reduction(+:c)
+  do i = 0, 63, 4
+    c = c + b - (7 + i / 4 * 3)
+    b = b + 3
+  end do
+  if (c /= 0 .or. i /= 64 .or. b /= 7 + 16 * 3) call abort
+  i = 4
+  j = 4
+  b = 7
+!$omp parallel do simd schedule (static, 4) collapse(2) linear(b:2) reduction(+:c)
+  do i = 0, 7
+    do j = 0, 7
+      c = c + b - (7 + 2 * j + 2 * 8 * i)
+      b = b + 2
+    end do
+  end do
+  if (c /= 0 .or. i /= 8 .or. j /= 8 .or. b /= 7 + 64 * 2) call abort
+  i = 4
+  j = 4
+  b = 7
+!$omp parallel do simd schedule (static, 4) collapse(2) linear(b:2) &
+!$omp & reduction(+:c) lastprivate (i, j)
+  do i = 0, 7
+    do j = 0, 7
+      c = c + b - (7 + 2 * j + 2 * 8 * i)
+      b = b + 2
+    end do
+  end do
+  if (c /= 0 .or. i /= 8 .or. j /= 8 .or. b /= 7 + 64 * 2) call abort
+end
diff --git a/libgomp/testsuite/libgomp.fortran/simd6.f90 b/libgomp/testsuite/libgomp.fortran/simd6.f90
new file mode 100644 (file)
index 0000000..881a8fb
--- /dev/null
@@ -0,0 +1,135 @@
+! { dg-do run }
+! { dg-additional-options "-msse2" { target sse2_runtime } }
+! { dg-additional-options "-mavx" { target avx_runtime } }
+
+  interface
+    subroutine foo (b, i, j, x)
+      integer, intent (inout) :: b
+      integer, intent (in) :: i, j, x
+    end subroutine
+  end interface
+  integer :: i, j, b, c
+  c = 0
+  i = 4
+  j = 4
+  b = 7
+!$omp simd linear(b:2) reduction(+:c)
+  do i = 0, 63
+    c = c + b - (7 + 2 * i)
+    call foo (b, i, j, 2)
+  end do
+  if (c /= 0 .or. i /= 64 .or. b /= 7 + 64 * 2) call abort
+  i = 4
+  j = 4
+  b = 7
+!$omp simd linear(b:3) reduction(+:c)
+  do i = 0, 63, 4
+    c = c + b - (7 + i / 4 * 3)
+    call foo (b, i, j, 3)
+  end do
+  if (c /= 0 .or. i /= 64 .or. b /= 7 + 16 * 3) call abort
+  i = 4
+  j = 4
+  b = 7
+!$omp simd linear(i) linear(b:2) reduction(+:c)
+  do i = 0, 63
+    c = c + b - (7 + 2 * i)
+    call foo (b, i, j, 2)
+  end do
+  if (c /= 0 .or. i /= 64 .or. b /= 7 + 64 * 2) call abort
+  i = 4
+  j = 4
+  b = 7
+!$omp simd linear(i:4) linear(b:3) reduction(+:c)
+  do i = 0, 63, 4
+    c = c + b - (7 + i / 4 * 3)
+    call foo (b, i, j, 3)
+  end do
+  if (c /= 0 .or. i /= 64 .or. b /= 7 + 16 * 3) call abort
+  i = 4
+  j = 4
+  b = 7
+!$omp simd collapse(2) linear(b:2) reduction(+:c)
+  do i = 0, 7
+    do j = 0, 7
+      c = c + b - (7 + 2 * j + 2 * 8 * i)
+      call foo (b, i, j, 2)
+    end do
+  end do
+  if (c /= 0 .or. i /= 8 .or. j /= 8 .or. b /= 7 + 64 * 2) call abort
+  i = 4
+  j = 4
+  b = 7
+!$omp simd collapse(2) linear(b:2) reduction(+:c) lastprivate (i, j)
+  do i = 0, 7
+    do j = 0, 7
+      c = c + b - (7 + 2 * j + 2 * 8 * i)
+      call foo (b, i, j, 2)
+    end do
+  end do
+  if (c /= 0 .or. i /= 8 .or. j /= 8 .or. b /= 7 + 64 * 2) call abort
+  i = 4
+  j = 4
+  b = 7
+!$omp parallel do simd schedule (static, 4) linear(b:2) reduction(+:c)
+  do i = 0, 63
+    c = c + b - (7 + 2 * i)
+    call foo (b, i, j, 2)
+  end do
+  if (c /= 0 .or. i /= 64 .or. b /= 7 + 64 * 2) call abort
+  i = 4
+  j = 4
+  b = 7
+!$omp parallel do simd schedule (static, 4) linear(b:3) reduction(+:c)
+  do i = 0, 63, 4
+    c = c + b - (7 + i / 4 * 3)
+    call foo (b, i, j, 3)
+  end do
+  if (c /= 0 .or. i /= 64 .or. b /= 7 + 16 * 3) call abort
+  i = 4
+  j = 4
+  b = 7
+!$omp parallel do simd schedule (static, 4) linear(i) linear(b:2) reduction(+:c)
+  do i = 0, 63
+    c = c + b - (7 + 2 * i)
+    call foo (b, i, j, 2)
+  end do
+  if (c /= 0 .or. i /= 64 .or. b /= 7 + 64 * 2) call abort
+  i = 4
+  j = 4
+  b = 7
+!$omp parallel do simd schedule (static, 4) linear(i:4) linear(b:3) reduction(+:c)
+  do i = 0, 63, 4
+    c = c + b - (7 + i / 4 * 3)
+    call foo (b, i, j, 3)
+  end do
+  if (c /= 0 .or. i /= 64 .or. b /= 7 + 16 * 3) call abort
+  i = 4
+  j = 4
+  b = 7
+!$omp parallel do simd schedule (static, 4) collapse(2) linear(b:2) reduction(+:c)
+  do i = 0, 7
+    do j = 0, 7
+      c = c + b - (7 + 2 * j + 2 * 8 * i)
+      call foo (b, i, j, 2)
+    end do
+  end do
+  if (c /= 0 .or. i /= 8 .or. j /= 8 .or. b /= 7 + 64 * 2) call abort
+  i = 4
+  j = 4
+  b = 7
+!$omp parallel do simd schedule (static, 4) collapse(2) linear(b:2) &
+!$omp & reduction(+:c) lastprivate (i, j)
+  do i = 0, 7
+    do j = 0, 7
+      c = c + b - (7 + 2 * j + 2 * 8 * i)
+      call foo (b, i, j, 2)
+    end do
+  end do
+  if (c /= 0 .or. i /= 8 .or. j /= 8 .or. b /= 7 + 64 * 2) call abort
+end
+subroutine foo (b, i, j, x)
+  integer, intent (inout) :: b
+  integer, intent (in) :: i, j, x
+  b = b + (i - i) + (j - j) + x
+end subroutine
diff --git a/libgomp/testsuite/libgomp.fortran/simd7.f90 b/libgomp/testsuite/libgomp.fortran/simd7.f90
new file mode 100644 (file)
index 0000000..b0473fa
--- /dev/null
@@ -0,0 +1,172 @@
+! { dg-do run }
+! { dg-additional-options "-msse2" { target sse2_runtime } }
+! { dg-additional-options "-mavx" { target avx_runtime } }
+
+subroutine foo (d, e, f, g, m, n)
+  integer :: i, j, b(2:9), c(3:n), d(:), e(2:n), f(2:,3:), n
+  integer, allocatable :: g(:), h(:), k, m
+  logical :: l
+  l = .false.
+  allocate (h(2:7))
+  i = 4; j = 4; b = 7; c = 8; d = 9; e = 10; f = 11; g = 12; h = 13; k = 14; m = 15
+!$omp simd linear(b)linear(c:2)linear(d:3)linear(e:4)linear(f:5)linear(g:6) &
+!$omp & linear(h:7)linear(k:8)linear(m:9) reduction(.or.:l)
+  do i = 0, 63
+    l = l .or. .not.allocated (g) .or. .not.allocated (h)
+    l = l .or. .not.allocated (k) .or. .not.allocated (m)
+    l = l .or. any (b /= 7 + i) .or. any (c /= 8 + 2 * i)
+    l = l .or. any (d /= 9 + 3 * i) .or. any (e /= 10 + 4 * i)
+    l = l .or. any (f /= 11 + 5 * i) .or. any (g /= 12 + 6 * i)
+    l = l .or. any (h /= 13 + 7 * i) .or. (k /= 14 + 8 * i)
+    l = l .or. (m /= 15 + 9 * i)
+    l = l .or. (lbound (b, 1) /= 2) .or. (ubound (b, 1) /= 9)
+    l = l .or. (lbound (c, 1) /= 3) .or. (ubound (c, 1) /= n)
+    l = l .or. (lbound (d, 1) /= 1) .or. (ubound (d, 1) /= 17)
+    l = l .or. (lbound (e, 1) /= 2) .or. (ubound (e, 1) /= n)
+    l = l .or. (lbound (f, 1) /= 2) .or. (ubound (f, 1) /= 3)
+    l = l .or. (lbound (f, 2) /= 3) .or. (ubound (f, 2) /= 5)
+    l = l .or. (lbound (g, 1) /= 7) .or. (ubound (g, 1) /= 10)
+    l = l .or. (lbound (h, 1) /= 2) .or. (ubound (h, 1) /= 7)
+    b = b + 1; c = c + 2; d = d + 3; e = e + 4; f = f + 5; g = g + 6
+    h = h + 7; k = k + 8; m = m + 9
+  end do
+  if (l .or. i /= 64) call abort
+  if (any (b /= 7 + 64) .or. any (c /= 8 + 2 * 64)) call abort
+  if (any (d /= 9 + 3 * 64) .or. any (e /= 10 + 4 * 64)) call abort
+  if (any (f /= 11 + 5 * 64) .or. any (g /= 12 + 6 * 64)) call abort
+  if (any (h /= 13 + 7 * 64) .or. (k /= 14 + 8 * 64)) call abort
+  if (m /= 15 + 9 * 64) call abort
+  if ((lbound (b, 1) /= 2) .or. (ubound (b, 1) /= 9)) call abort
+  if ((lbound (c, 1) /= 3) .or. (ubound (c, 1) /= n)) call abort
+  if ((lbound (d, 1) /= 1) .or. (ubound (d, 1) /= 17)) call abort
+  if ((lbound (e, 1) /= 2) .or. (ubound (e, 1) /= n)) call abort
+  if ((lbound (f, 1) /= 2) .or. (ubound (f, 1) /= 3)) call abort
+  if ((lbound (f, 2) /= 3) .or. (ubound (f, 2) /= 5)) call abort
+  if ((lbound (g, 1) /= 7) .or. (ubound (g, 1) /= 10)) call abort
+  if ((lbound (h, 1) /= 2) .or. (ubound (h, 1) /= 7)) call abort
+  i = 4; j = 4; b = 7; c = 8; d = 9; e = 10; f = 11; g = 12; h = 13; k = 14; m = 15
+!$omp simd linear(b)linear(c:2)linear(d:3)linear(e:4)linear(f:5)linear(g:6) &
+!$omp & linear(h:7)linear(k:8)linear(m:9) reduction(.or.:l) collapse(2)
+  do i = 0, 7
+    do j = 0, 7
+      l = l .or. .not.allocated (g) .or. .not.allocated (h)
+      l = l .or. .not.allocated (k) .or. .not.allocated (m)
+      l = l .or. any (b /= 7 + (8 * i + j)) .or. any (c /= 8 + 2 * (8 * i + j))
+      l = l .or. any (d /= 9 + 3 * (8 * i + j)) .or. any (e /= 10 + 4 * (8 * i + j))
+      l = l .or. any (f /= 11 + 5 * (8 * i + j)) .or. any (g /= 12 + 6 * (8 * i + j))
+      l = l .or. any (h /= 13 + 7 * (8 * i + j)) .or. (k /= 14 + 8 * (8 * i + j))
+      l = l .or. (m /= 15 + 9 * (8 * i + j))
+      l = l .or. (lbound (b, 1) /= 2) .or. (ubound (b, 1) /= 9)
+      l = l .or. (lbound (c, 1) /= 3) .or. (ubound (c, 1) /= n)
+      l = l .or. (lbound (d, 1) /= 1) .or. (ubound (d, 1) /= 17)
+      l = l .or. (lbound (e, 1) /= 2) .or. (ubound (e, 1) /= n)
+      l = l .or. (lbound (f, 1) /= 2) .or. (ubound (f, 1) /= 3)
+      l = l .or. (lbound (f, 2) /= 3) .or. (ubound (f, 2) /= 5)
+      l = l .or. (lbound (g, 1) /= 7) .or. (ubound (g, 1) /= 10)
+      l = l .or. (lbound (h, 1) /= 2) .or. (ubound (h, 1) /= 7)
+      b = b + 1; c = c + 2; d = d + 3; e = e + 4; f = f + 5; g = g + 6
+      h = h + 7; k = k + 8; m = m + 9
+    end do
+  end do
+  if (l .or. i /= 8 .or. j /= 8) call abort
+  if (any (b /= 7 + 64) .or. any (c /= 8 + 2 * 64)) call abort
+  if (any (d /= 9 + 3 * 64) .or. any (e /= 10 + 4 * 64)) call abort
+  if (any (f /= 11 + 5 * 64) .or. any (g /= 12 + 6 * 64)) call abort
+  if (any (h /= 13 + 7 * 64) .or. (k /= 14 + 8 * 64)) call abort
+  if (m /= 15 + 9 * 64) call abort
+  if ((lbound (b, 1) /= 2) .or. (ubound (b, 1) /= 9)) call abort
+  if ((lbound (c, 1) /= 3) .or. (ubound (c, 1) /= n)) call abort
+  if ((lbound (d, 1) /= 1) .or. (ubound (d, 1) /= 17)) call abort
+  if ((lbound (e, 1) /= 2) .or. (ubound (e, 1) /= n)) call abort
+  if ((lbound (f, 1) /= 2) .or. (ubound (f, 1) /= 3)) call abort
+  if ((lbound (f, 2) /= 3) .or. (ubound (f, 2) /= 5)) call abort
+  if ((lbound (g, 1) /= 7) .or. (ubound (g, 1) /= 10)) call abort
+  if ((lbound (h, 1) /= 2) .or. (ubound (h, 1) /= 7)) call abort
+  i = 4; j = 4; b = 7; c = 8; d = 9; e = 10; f = 11; g = 12; h = 13; k = 14; m = 15
+!$omp parallel do simd linear(b)linear(c:2)linear(d:3)linear(e:4)linear(f:5) &
+!$omp & linear(g:6)linear(h:7)linear(k:8)linear(m:9) reduction(.or.:l)
+  do i = 0, 63
+    l = l .or. .not.allocated (g) .or. .not.allocated (h)
+    l = l .or. .not.allocated (k) .or. .not.allocated (m)
+    l = l .or. any (b /= 7 + i) .or. any (c /= 8 + 2 * i)
+    l = l .or. any (d /= 9 + 3 * i) .or. any (e /= 10 + 4 * i)
+    l = l .or. any (f /= 11 + 5 * i) .or. any (g /= 12 + 6 * i)
+    l = l .or. any (h /= 13 + 7 * i) .or. (k /= 14 + 8 * i)
+    l = l .or. (m /= 15 + 9 * i)
+    l = l .or. (lbound (b, 1) /= 2) .or. (ubound (b, 1) /= 9)
+    l = l .or. (lbound (c, 1) /= 3) .or. (ubound (c, 1) /= n)
+    l = l .or. (lbound (d, 1) /= 1) .or. (ubound (d, 1) /= 17)
+    l = l .or. (lbound (e, 1) /= 2) .or. (ubound (e, 1) /= n)
+    l = l .or. (lbound (f, 1) /= 2) .or. (ubound (f, 1) /= 3)
+    l = l .or. (lbound (f, 2) /= 3) .or. (ubound (f, 2) /= 5)
+    l = l .or. (lbound (g, 1) /= 7) .or. (ubound (g, 1) /= 10)
+    l = l .or. (lbound (h, 1) /= 2) .or. (ubound (h, 1) /= 7)
+    b = b + 1; c = c + 2; d = d + 3; e = e + 4; f = f + 5; g = g + 6
+    h = h + 7; k = k + 8; m = m + 9
+  end do
+  if (l .or. i /= 64) call abort
+  if (any (b /= 7 + 64) .or. any (c /= 8 + 2 * 64)) call abort
+  if (any (d /= 9 + 3 * 64) .or. any (e /= 10 + 4 * 64)) call abort
+  if (any (f /= 11 + 5 * 64) .or. any (g /= 12 + 6 * 64)) call abort
+  if (any (h /= 13 + 7 * 64) .or. (k /= 14 + 8 * 64)) call abort
+  if (m /= 15 + 9 * 64) call abort
+  if ((lbound (b, 1) /= 2) .or. (ubound (b, 1) /= 9)) call abort
+  if ((lbound (c, 1) /= 3) .or. (ubound (c, 1) /= n)) call abort
+  if ((lbound (d, 1) /= 1) .or. (ubound (d, 1) /= 17)) call abort
+  if ((lbound (e, 1) /= 2) .or. (ubound (e, 1) /= n)) call abort
+  if ((lbound (f, 1) /= 2) .or. (ubound (f, 1) /= 3)) call abort
+  if ((lbound (f, 2) /= 3) .or. (ubound (f, 2) /= 5)) call abort
+  if ((lbound (g, 1) /= 7) .or. (ubound (g, 1) /= 10)) call abort
+  if ((lbound (h, 1) /= 2) .or. (ubound (h, 1) /= 7)) call abort
+  i = 4; j = 4; b = 7; c = 8; d = 9; e = 10; f = 11; g = 12; h = 13; k = 14; m = 15
+!$omp parallel do simd linear(b)linear(c:2)linear(d:3)linear(e:4)linear(f:5) &
+!$omp & linear(g:6)linear(h:7)linear(k:8)linear(m:9) reduction(.or.:l) collapse(2)
+  do i = 0, 7
+    do j = 0, 7
+      l = l .or. .not.allocated (g) .or. .not.allocated (h)
+      l = l .or. .not.allocated (k) .or. .not.allocated (m)
+      l = l .or. any (b /= 7 + (8 * i + j)) .or. any (c /= 8 + 2 * (8 * i + j))
+      l = l .or. any (d /= 9 + 3 * (8 * i + j)) .or. any (e /= 10 + 4 * (8 * i + j))
+      l = l .or. any (f /= 11 + 5 * (8 * i + j)) .or. any (g /= 12 + 6 * (8 * i + j))
+      l = l .or. any (h /= 13 + 7 * (8 * i + j)) .or. (k /= 14 + 8 * (8 * i + j))
+      l = l .or. (m /= 15 + 9 * (8 * i + j))
+      l = l .or. (lbound (b, 1) /= 2) .or. (ubound (b, 1) /= 9)
+      l = l .or. (lbound (c, 1) /= 3) .or. (ubound (c, 1) /= n)
+      l = l .or. (lbound (d, 1) /= 1) .or. (ubound (d, 1) /= 17)
+      l = l .or. (lbound (e, 1) /= 2) .or. (ubound (e, 1) /= n)
+      l = l .or. (lbound (f, 1) /= 2) .or. (ubound (f, 1) /= 3)
+      l = l .or. (lbound (f, 2) /= 3) .or. (ubound (f, 2) /= 5)
+      l = l .or. (lbound (g, 1) /= 7) .or. (ubound (g, 1) /= 10)
+      l = l .or. (lbound (h, 1) /= 2) .or. (ubound (h, 1) /= 7)
+      b = b + 1; c = c + 2; d = d + 3; e = e + 4; f = f + 5; g = g + 6
+      h = h + 7; k = k + 8; m = m + 9
+    end do
+  end do
+  if (l .or. i /= 8 .or. j /= 8) call abort
+  if (any (b /= 7 + 64) .or. any (c /= 8 + 2 * 64)) call abort
+  if (any (d /= 9 + 3 * 64) .or. any (e /= 10 + 4 * 64)) call abort
+  if (any (f /= 11 + 5 * 64) .or. any (g /= 12 + 6 * 64)) call abort
+  if (any (h /= 13 + 7 * 64) .or. (k /= 14 + 8 * 64)) call abort
+  if (m /= 15 + 9 * 64) call abort
+  if ((lbound (b, 1) /= 2) .or. (ubound (b, 1) /= 9)) call abort
+  if ((lbound (c, 1) /= 3) .or. (ubound (c, 1) /= n)) call abort
+  if ((lbound (d, 1) /= 1) .or. (ubound (d, 1) /= 17)) call abort
+  if ((lbound (e, 1) /= 2) .or. (ubound (e, 1) /= n)) call abort
+  if ((lbound (f, 1) /= 2) .or. (ubound (f, 1) /= 3)) call abort
+  if ((lbound (f, 2) /= 3) .or. (ubound (f, 2) /= 5)) call abort
+  if ((lbound (g, 1) /= 7) .or. (ubound (g, 1) /= 10)) call abort
+  if ((lbound (h, 1) /= 2) .or. (ubound (h, 1) /= 7)) call abort
+end subroutine
+
+  interface
+    subroutine foo (d, e, f, g, m, n)
+      integer :: d(:), e(2:n), f(2:,3:), n
+      integer, allocatable :: g(:), m
+    end subroutine
+  end interface
+  integer, parameter :: n = 8
+  integer :: d(2:18), e(3:n+1), f(5:6,7:9)
+  integer, allocatable :: g(:), m
+  allocate (g(7:10))
+  call foo (d, e, f, g, m, n)
+end
diff --git a/libgomp/testsuite/libgomp.fortran/target1.f90 b/libgomp/testsuite/libgomp.fortran/target1.f90
new file mode 100644 (file)
index 0000000..c70daac
--- /dev/null
@@ -0,0 +1,58 @@
+! { dg-do run }
+
+module target1
+contains
+  subroutine foo (p, v, w, n)
+    double precision, pointer :: p(:), v(:), w(:)
+    double precision :: q(n)
+    integer :: i, n
+    !$omp target if (n > 256) map (to: v(1:n), w(:n)) map (from: p(1:n), q)
+    !$omp parallel do simd
+      do i = 1, n
+        p(i) = v(i) * w(i)
+        q(i) = p(i)
+      end do
+    !$omp end target
+    if (any (p /= q)) call abort
+    do i = 1, n
+      if (p(i) /= i * iand (i, 63)) call abort
+    end do
+    !$omp target data if (n > 256) map (to: v(1:n), w) map (from: p, q)
+    !$omp target if (n > 256)
+      do i = 1, n
+        p(i) = 1.0
+        q(i) = 2.0
+      end do
+    !$omp end target
+    !$omp target if (n > 256)
+      do i = 1, n
+        p(i) = p(i) + v(i) * w(i)
+        q(i) = q(i) + v(i) * w(i)
+      end do
+    !$omp end target
+    !$omp target if (n > 256)
+      !$omp teams distribute parallel do simd linear(i:1)
+      do i = 1, n
+        p(i) = p(i) + 2.0
+        q(i) = q(i) + 3.0
+      end do
+    !$omp end target
+    !$omp end target data
+    if (any (p + 2.0 /= q)) call abort
+  end subroutine
+end module target1
+  use target1, only : foo
+  integer :: n, i
+  double precision, pointer :: p(:), v(:), w(:)
+  n = 10000
+  allocate (p(n), v(n), w(n))
+  do i = 1, n
+    v(i) = i
+    w(i) = iand (i, 63)
+  end do
+  call foo (p, v, w, n)
+  do i = 1, n
+    if (p(i) /= i * iand (i, 63) + 3) call abort
+  end do
+  deallocate (p, v, w)
+end
diff --git a/libgomp/testsuite/libgomp.fortran/target2.f90 b/libgomp/testsuite/libgomp.fortran/target2.f90
new file mode 100644 (file)
index 0000000..42f704f
--- /dev/null
@@ -0,0 +1,96 @@
+! { dg-do run }
+! { dg-options "-fopenmp -ffree-line-length-160" }
+
+module target2
+contains
+  subroutine foo (a, b, c, d, e, f, g, n, q)
+    integer :: n, q
+    integer :: a, b(3:n), c(5:), d(2:*), e(:,:)
+    integer, pointer :: f, g(:)
+    integer :: h, i(3:n)
+    integer, pointer :: j, k(:)
+    logical :: r
+    allocate (j, k(4:n))
+    h = 14
+    i = 15
+    j = 16
+    k = 17
+    !$omp target map (to: a, b, c, d(2:n+1), e, f, g, h, i, j, k, n) map (from: r)
+      r = a /= 7
+      r = r .or. (any (b /= 8)) .or. (lbound (b, 1) /= 3) .or. (ubound (b, 1) /= n)
+      r = r .or. (any (c /= 9)) .or. (lbound (c, 1) /= 5) .or. (ubound (c, 1) /= n + 4)
+      r = r .or. (any (d(2:n+1) /= 10)) .or. (lbound (d, 1) /= 2)
+      r = r .or. (any (e /= 11)) .or. (lbound (e, 1) /= 1) .or. (ubound (e, 1) /= 2)
+      r = r .or. (lbound (e, 2) /= 1) .or. (ubound (e, 2) /= 2)
+      r = r .or. (f /= 12)
+      r = r .or. (any (g /= 13)) .or. (lbound (g, 1) /= 3) .or. (ubound (g, 1) /= n)
+      r = r .or. (h /= 14)
+      r = r .or. (any (i /= 15)) .or. (lbound (i, 1) /= 3) .or. (ubound (i, 1) /= n)
+      r = r .or. (j /= 16)
+      r = r .or. (any (k /= 17)) .or. (lbound (k, 1) /= 4) .or. (ubound (k, 1) /= n)
+    !$omp end target
+    if (r) call abort
+    !$omp target map (to: b(3:n), c(5:n+4), d(2:n+1), e(1:,:2), g(3:n), i(3:n), k(4:n), n) map (from: r)
+      r = (any (b /= 8)) .or. (lbound (b, 1) /= 3) .or. (ubound (b, 1) /= n)
+      r = r .or. (any (c /= 9)) .or. (lbound (c, 1) /= 5) .or. (ubound (c, 1) /= n + 4)
+      r = r .or. (any (d(2:n+1) /= 10)) .or. (lbound (d, 1) /= 2)
+      r = r .or. (any (e /= 11)) .or. (lbound (e, 1) /= 1) .or. (ubound (e, 1) /= 2)
+      r = r .or. (lbound (e, 2) /= 1) .or. (ubound (e, 2) /= 2)
+      r = r .or. (any (g /= 13)) .or. (lbound (g, 1) /= 3) .or. (ubound (g, 1) /= n)
+      r = r .or. (any (i /= 15)) .or. (lbound (i, 1) /= 3) .or. (ubound (i, 1) /= n)
+      r = r .or. (any (k /= 17)) .or. (lbound (k, 1) /= 4) .or. (ubound (k, 1) /= n)
+    !$omp end target
+    if (r) call abort
+    !$omp target map (to: b(5:n-2), c(7:n), d(4:n-2), e(1:,2:), g(5:n-3), i(6:n-4), k(5:n-5), n) map (from: r)
+      r = (any (b(5:n-2) /= 8)) .or. (lbound (b, 1) /= 3) .or. (ubound (b, 1) /= n)
+      r = r .or. (any (c(7:n) /= 9)) .or. (lbound (c, 1) /= 5) .or. (ubound (c, 1) /= n + 4)
+      r = r .or. (any (d(4:n-2) /= 10)) .or. (lbound (d, 1) /= 2)
+      r = r .or. (any (e(1:,2:) /= 11)) .or. (lbound (e, 1) /= 1) .or. (ubound (e, 1) /= 2)
+      r = r .or. (lbound (e, 2) /= 1) .or. (ubound (e, 2) /= 2)
+      r = r .or. (any (g(5:n-3) /= 13)) .or. (lbound (g, 1) /= 3) .or. (ubound (g, 1) /= n)
+      r = r .or. (any (i(6:n-4) /= 15)) .or. (lbound (i, 1) /= 3) .or. (ubound (i, 1) /= n)
+      r = r .or. (any (k(5:n-5) /= 17)) .or. (lbound (k, 1) /= 4) .or. (ubound (k, 1) /= n)
+    !$omp end target
+    !$omp target map (to: b(q+5:n-2+q), c(q+7:q+n), d(q+4:q+n-2), e(1:q+2,2:q+2), g(5+q:n-3+q), &
+    !$omp & i(6+q:n-4+q), k(5+q:n-5+q), n) map (from: r)
+      r = (any (b(5:n-2) /= 8)) .or. (lbound (b, 1) /= 3) .or. (ubound (b, 1) /= n)
+      r = r .or. (any (c(7:n) /= 9)) .or. (lbound (c, 1) /= 5) .or. (ubound (c, 1) /= n + 4)
+      r = r .or. (any (d(4:n-2) /= 10)) .or. (lbound (d, 1) /= 2)
+      r = r .or. (any (e(1:,2:) /= 11)) .or. (lbound (e, 1) /= 1) .or. (ubound (e, 1) /= 2)
+      r = r .or. (lbound (e, 2) /= 1) .or. (ubound (e, 2) /= 2)
+      r = r .or. (any (g(5:n-3) /= 13)) .or. (lbound (g, 1) /= 3) .or. (ubound (g, 1) /= n)
+      r = r .or. (any (i(6:n-4) /= 15)) .or. (lbound (i, 1) /= 3) .or. (ubound (i, 1) /= n)
+      r = r .or. (any (k(5:n-5) /= 17)) .or. (lbound (k, 1) /= 4) .or. (ubound (k, 1) /= n)
+    !$omp end target
+    if (r) call abort
+    !$omp target map (to: d(2:n+1), n)
+      r = a /= 7
+      r = r .or. (any (b /= 8)) .or. (lbound (b, 1) /= 3) .or. (ubound (b, 1) /= n)
+      r = r .or. (any (c /= 9)) .or. (lbound (c, 1) /= 5) .or. (ubound (c, 1) /= n + 4)
+      r = r .or. (any (d(2:n+1) /= 10)) .or. (lbound (d, 1) /= 2)
+      r = r .or. (any (e /= 11)) .or. (lbound (e, 1) /= 1) .or. (ubound (e, 1) /= 2)
+      r = r .or. (lbound (e, 2) /= 1) .or. (ubound (e, 2) /= 2)
+      r = r .or. (f /= 12)
+      r = r .or. (any (g /= 13)) .or. (lbound (g, 1) /= 3) .or. (ubound (g, 1) /= n)
+      r = r .or. (h /= 14)
+      r = r .or. (any (i /= 15)) .or. (lbound (i, 1) /= 3) .or. (ubound (i, 1) /= n)
+      r = r .or. (j /= 16)
+      r = r .or. (any (k /= 17)) .or. (lbound (k, 1) /= 4) .or. (ubound (k, 1) /= n)
+    !$omp end target
+    if (r) call abort
+  end subroutine foo
+end module target2
+  use target2, only : foo
+  integer, parameter :: n = 15, q = 0
+  integer :: a, b(2:n-1), c(n), d(n), e(3:4, 3:4)
+  integer, pointer :: f, g(:)
+  allocate (f, g(3:n))
+  a = 7
+  b = 8
+  c = 9
+  d = 10
+  e = 11
+  f = 12
+  g = 13
+  call foo (a, b, c, d, e, f, g, n, q)
+end
diff --git a/libgomp/testsuite/libgomp.fortran/target3.f90 b/libgomp/testsuite/libgomp.fortran/target3.f90
new file mode 100644 (file)
index 0000000..1f197ac
--- /dev/null
@@ -0,0 +1,29 @@
+! { dg-do run }
+
+module target3
+contains
+  subroutine foo (f, g)
+    integer :: n
+    integer, pointer :: f, g(:)
+    integer, pointer :: j, k(:)
+    logical :: r
+    nullify (j)
+    k => null ()
+    !$omp target map (tofrom: f, g, j, k) map (from: r)
+      r = associated (f) .or. associated (g)
+      r = r .or. associated (j) .or. associated (k)
+    !$omp end target
+    if (r) call abort
+    !$omp target
+      r = associated (f) .or. associated (g)
+      r = r .or. associated (j) .or. associated (k)
+    !$omp end target
+    if (r) call abort
+  end subroutine foo
+end module target3
+  use target3, only : foo
+  integer, pointer :: f, g(:)
+  f => null ()
+  nullify (g)
+  call foo (f, g)
+end
diff --git a/libgomp/testsuite/libgomp.fortran/target4.f90 b/libgomp/testsuite/libgomp.fortran/target4.f90
new file mode 100644 (file)
index 0000000..aa2f0a5
--- /dev/null
@@ -0,0 +1,48 @@
+! { dg-do run }
+
+module target4
+contains
+  subroutine foo (a,m,n)
+    integer :: m,n,i,j
+    double precision :: a(m, n), t
+    !$omp target data map(a) map(to: m, n)
+    do i=1,n
+      t = 0.0d0
+      !$omp target
+        !$omp parallel do reduction(+:t)
+          do j=1,m
+            t = t + a(j,i) * a(j,i)
+          end do
+      !$omp end target
+      t = 2.0d0 * t
+      !$omp target
+        !$omp parallel do
+          do j=1,m
+            a(j,i) = a(j,i) * t
+          end do
+      !$omp end target
+    end do
+    !$omp end target data
+  end subroutine foo
+end module target4
+  use target4, only : foo
+  integer :: i, j
+  double precision :: a(8, 9), res(8, 9)
+  do i = 1, 8
+    do j = 1, 9
+      a(i, j) = i + j
+    end do
+  end do
+  call foo (a, 8, 9)
+  res = reshape ((/ 1136.0d0, 1704.0d0, 2272.0d0, 2840.0d0, 3408.0d0, 3976.0d0, &
+&   4544.0d0, 5112.0d0, 2280.0d0, 3040.0d0, 3800.0d0, 4560.0d0, 5320.0d0, 6080.0d0, &
+&   6840.0d0, 7600.0d0, 3936.0d0, 4920.0d0, 5904.0d0, 6888.0d0, 7872.0d0, 8856.0d0, &
+&   9840.0d0, 10824.0d0, 6200.0d0, 7440.0d0, 8680.0d0, 9920.0d0, 11160.0d0, 12400.0d0, &
+&   13640.0d0, 14880.0d0, 9168.0d0, 10696.0d0, 12224.0d0, 13752.0d0, 15280.0d0, 16808.0d0, &
+&   18336.0d0, 19864.0d0, 12936.0d0, 14784.0d0, 16632.0d0, 18480.0d0, 20328.0d0, 22176.0d0, &
+&   24024.0d0, 25872.0d0, 17600.0d0, 19800.0d0, 22000.0d0, 24200.0d0, 26400.0d0, 28600.0d0, &
+&   30800.0d0, 33000.0d0, 23256.0d0, 25840.0d0, 28424.0d0, 31008.0d0, 33592.0d0, 36176.0d0, &
+&   38760.0d0, 41344.0d0, 30000.0d0, 33000.0d0, 36000.0d0, 39000.0d0, 42000.0d0, 45000.0d0, &
+&   48000.0d0, 51000.0d0 /), (/ 8, 9 /))
+  if (any (a /= res)) call abort
+end
diff --git a/libgomp/testsuite/libgomp.fortran/target5.f90 b/libgomp/testsuite/libgomp.fortran/target5.f90
new file mode 100644 (file)
index 0000000..c46faf2
--- /dev/null
@@ -0,0 +1,21 @@
+! { dg-do compile }
+! { dg-options "-fopenmp" }
+
+  integer :: r
+  r = 0
+  call foo (r)
+  if (r /= 11) call abort
+contains
+  subroutine foo (r)
+    integer :: i, r
+    !$omp parallel
+    !$omp single
+    !$omp target teams distribute parallel do reduction (+: r)
+      do i = 1, 10
+        r = r + 1
+      end do
+      r = r + 1
+    !$omp end single
+    !$omp end parallel
+  end subroutine
+end
diff --git a/libgomp/testsuite/libgomp.fortran/target6.f90 b/libgomp/testsuite/libgomp.fortran/target6.f90
new file mode 100644 (file)
index 0000000..13f5a52
--- /dev/null
@@ -0,0 +1,50 @@
+! { dg-do run }
+
+module target6
+contains
+  subroutine foo (p, v, w, n)
+    double precision, pointer :: p(:), v(:), w(:)
+    double precision :: q(n)
+    integer :: i, n
+    !$omp target data if (n > 256) map (to: v(1:n), w(:n)) map (from: p(1:n), q)
+    !$omp target if (n > 256)
+    !$omp parallel do simd
+      do i = 1, n
+        p(i) = v(i) * w(i)
+        q(i) = p(i)
+      end do
+    !$omp end target
+    !$omp target update if (n > 256) from (p)
+    do i = 1, n
+      if (p(i) /= i * iand (i, 63)) call abort
+      v(i) = v(i) + 1
+    end do
+    !$omp target update if (n > 256) to (v(1:n))
+    !$omp target if (n > 256)
+    !$omp parallel do simd
+      do i = 1, n
+        p(i) = v(i) * w(i)
+      end do
+    !$omp end target
+    !$omp end target data
+    do i = 1, n
+      if (q(i) /= (v(i) - 1) * w(i)) call abort
+      if (p(i) /= q(i) + w(i)) call abort
+    end do
+  end subroutine
+end module target6
+  use target6, only : foo
+  integer :: n, i
+  double precision, pointer :: p(:), v(:), w(:)
+  n = 10000
+  allocate (p(n), v(n), w(n))
+  do i = 1, n
+    v(i) = i
+    w(i) = iand (i, 63)
+  end do
+  call foo (p, v, w, n)
+  do i = 1, n
+    if (p(i) /= (i + 1) * iand (i, 63)) call abort
+  end do
+  deallocate (p, v, w)
+end
diff --git a/libgomp/testsuite/libgomp.fortran/target7.f90 b/libgomp/testsuite/libgomp.fortran/target7.f90
new file mode 100644 (file)
index 0000000..0c977c4
--- /dev/null
@@ -0,0 +1,38 @@
+! { dg-do run }
+
+  interface
+    real function foo (x)
+      !$omp declare target
+      real, intent(in) :: x
+    end function foo
+  end interface
+  integer, parameter :: n = 1000
+  integer, parameter :: c = 100
+  integer :: i, j
+  real :: a(n)
+  do i = 1, n
+    a(i) = i
+  end do
+  !$omp parallel
+  !$omp single
+  do i = 1, n, c
+    !$omp task shared(a)
+      !$omp target map(a(i:i+c-1))
+        !$omp parallel do
+          do j = i, i + c - 1
+            a(j) = foo (a(j))
+          end do
+      !$omp end target
+    !$omp end task
+  end do
+  !$omp end single
+  !$omp end parallel
+  do i = 1, n
+    if (a(i) /= i + 1) call abort
+  end do
+end
+real function foo (x)
+  !$omp declare target
+  real, intent(in) :: x
+  foo = x + 1
+end function foo
diff --git a/libgomp/testsuite/libgomp.fortran/target8.f90 b/libgomp/testsuite/libgomp.fortran/target8.f90
new file mode 100644 (file)
index 0000000..0564e90
--- /dev/null
@@ -0,0 +1,33 @@
+! { dg-do run }
+
+  integer, parameter :: n = 1000
+  integer, parameter :: c = 100
+  integer :: i, j
+  real :: a(n)
+  do i = 1, n
+    a(i) = i
+  end do
+  !$omp parallel
+  !$omp single
+  do i = 1, n, c
+    !$omp task shared(a)
+      !$omp target map(a(i:i+c-1))
+        !$omp parallel do
+          do j = i, i + c - 1
+            a(j) = foo (a(j))
+          end do
+      !$omp end target
+    !$omp end task
+  end do
+  !$omp end single
+  !$omp end parallel
+  do i = 1, n
+    if (a(i) /= i + 1) call abort
+  end do
+contains
+  real function foo (x)
+    !$omp declare target
+    real, intent(in) :: x
+    foo = x + 1
+  end function foo
+end
diff --git a/libgomp/testsuite/libgomp.fortran/taskgroup1.f90 b/libgomp/testsuite/libgomp.fortran/taskgroup1.f90
new file mode 100644 (file)
index 0000000..018d3e8
--- /dev/null
@@ -0,0 +1,80 @@
+  integer :: v(16), i
+  do i = 1, 16
+    v(i) = i
+  end do
+
+  !$omp parallel num_threads (4)
+    !$omp single
+      !$omp taskgroup
+       do i = 1, 16, 2
+         !$omp task
+           !$omp task
+             v(i) = v(i) + 1
+           !$omp end task
+           !$omp task
+             v(i + 1) = v(i + 1) + 1
+           !$omp end task
+         !$omp end task
+       end do
+      !$omp end taskgroup
+      do i = 1, 16
+       if (v(i).ne.(i + 1)) call abort
+      end do
+      !$omp taskgroup
+       do i = 1, 16, 2
+         !$omp task
+           !$omp task
+             v(i) = v(i) + 1
+           !$omp endtask
+           !$omp task
+             v(i + 1) = v(i + 1) + 1
+           !$omp endtask
+           !$omp taskwait
+         !$omp endtask
+       end do
+      !$omp endtaskgroup
+      do i = 1, 16
+       if (v(i).ne.(i + 2)) call abort
+      end do
+      !$omp taskgroup
+       do i = 1, 16, 2
+         !$omp task
+           !$omp task
+             v(i) = v(i) + 1
+           !$omp end task
+           v(i + 1) = v(i + 1) + 1
+         !$omp end task
+       end do
+       !$omp taskwait
+       do i = 1, 16, 2
+         !$omp task
+           v(i + 1) = v(i + 1) + 1
+         !$omp end task
+       end do
+      !$omp end taskgroup
+      do i = 1, 16, 2
+       if (v(i).ne.(i + 3)) call abort
+       if (v(i + 1).ne.(i + 5)) call abort
+      end do
+      !$omp taskgroup
+       do i = 1, 16, 2
+         !$omp taskgroup
+           !$omp task
+             v(i) = v(i) + 1
+           !$omp end task
+           !$omp task
+             v(i + 1) = v(i + 1) + 1
+           !$omp end task
+         !$omp end taskgroup
+         if (v(i).ne.(i + 4).or.v(i + 1).ne.(i + 6)) call abort
+         !$omp task
+           v(i) = v(i) + 1
+         !$omp end task
+       end do
+      !$omp end taskgroup
+      do i = 1, 16
+       if (v(i).ne.(i + 5)) call abort
+      end do
+    !$omp end single
+  !$omp end parallel
+end
diff --git a/libgomp/testsuite/libgomp.fortran/udr1.f90 b/libgomp/testsuite/libgomp.fortran/udr1.f90
new file mode 100644 (file)
index 0000000..5b8044f
--- /dev/null
@@ -0,0 +1,51 @@
+! { dg-do run }
+
+module udr1
+  type dt
+    integer :: x = 7
+    integer :: y = 9
+  end type
+end module udr1
+  use udr1, only : dt
+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in)
+  integer :: i, j
+!$omp declare reduction (bar : integer : &
+!$omp & omp_out = omp_out + iand (omp_in, -4)) initializer (omp_priv = 3)
+  type (dt) :: d
+!$omp declare reduction (+ : dt : omp_out%x = omp_out%x &
+!$omp & + iand (omp_in%x, -8))
+!$omp declare reduction (foo : dt : omp_out%x = iand (omp_in%x, -8) &
+!$omp & + omp_out%x) initializer (omp_priv = dt (5, 21))
+  interface operator (+)
+    function notdefined(x, y)
+      use udr1, only : dt
+      type(dt), intent (in) :: x, y
+      type(dt) :: notdefined
+    end function
+  end interface
+  j = 0
+!$omp parallel do reduction (foo : j)
+  do i = 1, 100
+    j = j + i
+  end do
+  if (j .ne. 5050) call abort
+  j = 3
+!$omp parallel do reduction (bar : j)
+  do i = 1, 100
+    j = j + 4 * i
+  end do
+  if (j .ne. (5050 * 4 + 3)) call abort
+!$omp parallel do reduction (+ : d)
+  do i = 1, 100
+    if (d%y .ne. 9) call abort
+    d%x = d%x + 8 * i
+  end do
+  if (d%x .ne. (5050 * 8 + 7) .or. d%y .ne. 9) call abort
+  d = dt (5, 21)
+!$omp parallel do reduction (foo : d)
+  do i = 1, 100
+    if (d%y .ne. 21) call abort
+    d%x = d%x + 8 * i
+  end do
+  if (d%x .ne. (5050 * 8 + 5) .or. d%y .ne. 21) call abort
+end
diff --git a/libgomp/testsuite/libgomp.fortran/udr10.f90 b/libgomp/testsuite/libgomp.fortran/udr10.f90
new file mode 100644 (file)
index 0000000..b64b4f4
--- /dev/null
@@ -0,0 +1,32 @@
+! { dg-do run }
+
+module udr10m
+  type dt
+    integer :: x = 0
+  end type
+!$omp declare reduction(.add.:dt:omp_out=omp_out.add.omp_in)
+!$omp declare reduction(+:dt:omp_out=omp_out+omp_in)
+  interface operator(+)
+    module procedure addme
+  end interface
+  interface operator(.add.)
+    module procedure addme
+  end interface
+contains
+  type(dt) function addme (x, y)
+    type (dt), intent (in) :: x, y
+    addme%x = x%x + y%x
+  end function addme
+end module udr10m
+program udr10
+  use udr10m, only : operator(.localadd.) => operator(.add.), &
+& operator(+), dl => dt
+  type(dl) :: j, k
+  integer :: i
+!$omp parallel do reduction(+:j) reduction(.localadd.:k)
+  do i = 1, 100
+    j = j .localadd. dl(i)
+    k = k + dl(i * 2)
+  end do
+  if (j%x /= 5050 .or. k%x /= 10100) call abort
+end
diff --git a/libgomp/testsuite/libgomp.fortran/udr11.f90 b/libgomp/testsuite/libgomp.fortran/udr11.f90
new file mode 100644 (file)
index 0000000..61fb196
--- /dev/null
@@ -0,0 +1,95 @@
+! { dg-do run }
+
+module udr11
+  type dt
+    integer :: x = 0
+  end type
+end module udr11
+  use udr11, only : dt
+!$omp declare reduction(+:dt:omp_out%x=omp_out%x+omp_in%x)
+!$omp declare reduction(-:dt:omp_out%x=omp_out%x+omp_in%x)
+!$omp declare reduction(*:dt:omp_out%x=omp_out%x+omp_in%x)
+!$omp declare reduction(.and.:dt:omp_out%x=omp_out%x+omp_in%x)
+!$omp declare reduction(.or.:dt:omp_out%x=omp_out%x+3*omp_in%x)
+!$omp declare reduction(.eqv.:dt:omp_out%x=omp_out%x+omp_in%x)
+!$omp declare reduction(.neqv.:dt:omp_out%x=omp_out%x+omp_in%x)
+!$omp declare reduction(min:dt:omp_out%x=omp_out%x+omp_in%x)
+!$omp declare reduction(max:dt:omp_out%x=omp_out%x+omp_in%x)
+!$omp declare reduction(iand:dt:omp_out%x=omp_out%x+omp_in%x)
+!$omp declare reduction(ior:dt:omp_out%x=omp_out%x+omp_in%x)
+!$omp declare reduction(ieor:dt:omp_out%x=omp_out%x+omp_in%x)
+  interface operator(.and.)
+    function addme1 (x, y)
+      use udr11, only : dt
+      type (dt), intent (in) :: x, y
+      type(dt) :: addme1
+    end function addme1
+  end interface
+  interface operator(.or.)
+    function addme2 (x, y)
+      use udr11, only : dt
+      type (dt), intent (in) :: x, y
+      type(dt) :: addme2
+    end function addme2
+  end interface
+  interface operator(.eqv.)
+    function addme3 (x, y)
+      use udr11, only : dt
+      type (dt), intent (in) :: x, y
+      type(dt) :: addme3
+    end function addme3
+  end interface
+  interface operator(.neqv.)
+    function addme4 (x, y)
+      use udr11, only : dt
+      type (dt), intent (in) :: x, y
+      type(dt) :: addme4
+    end function addme4
+  end interface
+  interface operator(+)
+    function addme5 (x, y)
+      use udr11, only : dt
+      type (dt), intent (in) :: x, y
+      type(dt) :: addme5
+    end function addme5
+  end interface
+  interface operator(-)
+    function addme6 (x, y)
+      use udr11, only : dt
+      type (dt), intent (in) :: x, y
+      type(dt) :: addme6
+    end function addme6
+  end interface
+  interface operator(*)
+    function addme7 (x, y)
+      use udr11, only : dt
+      type (dt), intent (in) :: x, y
+      type(dt) :: addme7
+    end function addme7
+  end interface
+  type(dt) :: j, k, l, m, n, o, p, q, r, s, t, u
+  integer :: i
+!$omp parallel do reduction(.and.:j) reduction(.or.:k) &
+!$omp & reduction(.eqv.:l) reduction(.neqv.:m) &
+!$omp & reduction(min:n) reduction(max:o) &
+!$omp & reduction(iand:p) reduction(ior:q) reduction (ieor:r) &
+!$omp & reduction(+:s) reduction(-:t) reduction(*:u)
+  do i = 1, 100
+    j%x = j%x + i
+    k%x = k%x + 2 * i
+    l%x = l%x + 3 * i
+    m%x = m%x + i
+    n%x = n%x + 2 * i
+    o%x = o%x + 3 * i
+    p%x = p%x + i
+    q%x = q%x + 2 * i
+    r%x = r%x + 3 * i
+    s%x = s%x + i
+    t%x = t%x + 2 * i
+    u%x = u%x + 3 * i
+  end do
+  if (j%x /= 5050 .or. k%x /= 30300 .or. l%x /= 15150) call abort
+  if (m%x /= 5050 .or. n%x /= 10100 .or. o%x /= 15150) call abort
+  if (p%x /= 5050 .or. q%x /= 10100 .or. r%x /= 15150) call abort
+  if (s%x /= 5050 .or. t%x /= 10100 .or. u%x /= 15150) call abort
+end
diff --git a/libgomp/testsuite/libgomp.fortran/udr12.f90 b/libgomp/testsuite/libgomp.fortran/udr12.f90
new file mode 100644 (file)
index 0000000..601bca6
--- /dev/null
@@ -0,0 +1,76 @@
+! { dg-do run }
+
+  interface
+    elemental subroutine sub1 (x, y)
+      integer, intent(in) :: y
+      integer, intent(out) :: x
+    end subroutine
+    elemental function fn2 (x)
+      integer, intent(in) :: x
+      integer :: fn2
+    end function
+  end interface
+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
+!$omp declare reduction (bar : integer : omp_out = fn1 (omp_out, omp_in)) &
+!$omp & initializer (sub1 (omp_priv, omp_orig))
+!$omp declare reduction (baz : integer : sub2 (omp_out, omp_in)) &
+!$omp initializer (omp_priv = fn2 (omp_orig))
+  interface
+    elemental function fn1 (x, y)
+      integer, intent(in) :: x, y
+      integer :: fn1
+    end function
+    elemental subroutine sub2 (x, y)
+      integer, intent(in) :: y
+      integer, intent(inout) :: x
+    end subroutine
+  end interface
+  integer :: a(10), b, r
+  a(:) = 0
+  b = 0
+  r = 0
+!$omp parallel reduction (foo : a, b) reduction (+: r)
+  a = a + 2
+  b = b + 3
+  r = r + 1
+!$omp end parallel
+  if (any (a /= 2 * r) .or. b /= 3 * r) call abort
+  a(:) = 0
+  b = 0
+  r = 0
+!$omp parallel reduction (bar : a, b) reduction (+: r)
+  a = a + 2
+  b = b + 3
+  r = r + 1
+!$omp end parallel
+  if (any (a /= 4 * r) .or. b /= 6 * r) call abort
+  a(:) = 0
+  b = 0
+  r = 0
+!$omp parallel reduction (baz : a, b) reduction (+: r)
+  a = a + 2
+  b = b + 3
+  r = r + 1
+!$omp end parallel
+  if (any (a /= 2 * r) .or. b /= 3 * r) call abort
+end
+elemental function fn1 (x, y)
+  integer, intent(in) :: x, y
+  integer :: fn1
+  fn1 = x + 2 * y
+end function
+elemental subroutine sub1 (x, y)
+  integer, intent(in) :: y
+  integer, intent(out) :: x
+  x = 0
+end subroutine
+elemental function fn2 (x)
+  integer, intent(in) :: x
+  integer :: fn2
+  fn2 = x
+end function
+elemental subroutine sub2 (x, y)
+  integer, intent(inout) :: x
+  integer, intent(in) :: y
+  x = x + y
+end subroutine
diff --git a/libgomp/testsuite/libgomp.fortran/udr13.f90 b/libgomp/testsuite/libgomp.fortran/udr13.f90
new file mode 100644 (file)
index 0000000..0da1da4
--- /dev/null
@@ -0,0 +1,106 @@
+! { dg-do run }
+
+  interface
+    subroutine sub1 (x, y)
+      integer, intent(in) :: y(:)
+      integer, intent(out) :: x(:)
+    end subroutine
+    function fn2 (x, m1, m2, n1, n2)
+      integer, intent(in) :: x(:,:), m1, m2, n1, n2
+      integer :: fn2(m1:m2,n1:n2)
+    end function
+    subroutine sub3 (x, y)
+      integer, allocatable, intent(in) :: y(:,:)
+      integer, allocatable, intent(inout) :: x(:,:)
+    end subroutine
+  end interface
+!$omp declare reduction (foo : integer : sub3 (omp_out, omp_in)) &
+!$omp initializer (omp_priv = fn3 (omp_orig))
+!$omp declare reduction (bar : integer : omp_out = fn1 (omp_out, omp_in, &
+!$omp & lbound (omp_out, 1), ubound (omp_out, 1))) &
+!$omp & initializer (sub1 (omp_priv, omp_orig))
+!$omp declare reduction (baz : integer : sub2 (omp_out, omp_in)) &
+!$omp initializer (omp_priv = fn2 (omp_orig, lbound (omp_priv, 1), &
+!$omp ubound (omp_priv, 1), lbound (omp_priv, 2), ubound (omp_priv, 2)))
+  interface
+    function fn1 (x, y, m1, m2)
+      integer, intent(in) :: x(:), y(:), m1, m2
+      integer :: fn1(m1:m2)
+    end function
+    subroutine sub2 (x, y)
+      integer, intent(in) :: y(:,:)
+      integer, intent(inout) :: x(:,:)
+    end subroutine
+    function fn3 (x)
+      integer, allocatable, intent(in) :: x(:,:)
+      integer, allocatable :: fn3(:,:)
+    end function
+  end interface
+  integer :: a(10), b(3:5,7:9), r
+  integer, allocatable :: c(:,:)
+  a(:) = 0
+  r = 0
+!$omp parallel reduction (bar : a) reduction (+: r)
+  if (lbound (a, 1) /= 1 .or. ubound (a, 1) /= 10) call abort
+  a = a + 2
+  r = r + 1
+!$omp end parallel
+  if (any (a /= 4 * r) ) call abort
+  b(:,:) = 0
+  allocate (c (4:6,8:10))
+  c(:,:) = 0
+  r = 0
+!$omp parallel reduction (baz : b, c) reduction (+: r)
+  if (lbound (b, 1) /= 3 .or. ubound (b, 1) /= 5) call abort
+  if (lbound (b, 2) /= 7 .or. ubound (b, 2) /= 9) call abort
+  if (.not. allocated (c)) call abort
+  if (lbound (c, 1) /= 4 .or. ubound (c, 1) /= 6) call abort
+  if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 10) call abort
+  b = b + 3
+  c = c + 4
+  r = r + 1
+!$omp end parallel
+  if (any (b /= 3 * r) .or. any (c /= 4 * r)) call abort
+  deallocate (c)
+  allocate (c (0:1,7:11))
+  c(:,:) = 0
+  r = 0
+!$omp parallel reduction (foo : c) reduction (+: r)
+  if (.not. allocated (c)) call abort
+  if (lbound (c, 1) /= 0 .or. ubound (c, 1) /= 1) call abort
+  if (lbound (c, 2) /= 7 .or. ubound (c, 2) /= 11) call abort
+  c = c + 5
+  r = r + 1
+!$omp end parallel
+  if (any (c /= 10 * r)) call abort
+end
+function fn1 (x, y, m1, m2)
+  integer, intent(in) :: x(:), y(:), m1, m2
+  integer :: fn1(m1:m2)
+  fn1 = x + 2 * y
+end function
+subroutine sub1 (x, y)
+  integer, intent(in) :: y(:)
+  integer, intent(out) :: x(:)
+  x = 0
+end subroutine
+function fn2 (x, m1, m2, n1, n2)
+  integer, intent(in) :: x(:,:), m1, m2, n1, n2
+  integer :: fn2(m1:m2,n1:n2)
+  fn2 = x
+end function
+subroutine sub2 (x, y)
+  integer, intent(inout) :: x(:,:)
+  integer, intent(in) :: y(:,:)
+  x = x + y
+end subroutine
+function fn3 (x)
+  integer, allocatable, intent(in) :: x(:,:)
+  integer, allocatable :: fn3(:,:)
+  fn3 = x
+end function
+subroutine sub3 (x, y)
+  integer, allocatable, intent(inout) :: x(:,:)
+  integer, allocatable, intent(in) :: y(:,:)
+  x = x + 2 * y
+end subroutine
diff --git a/libgomp/testsuite/libgomp.fortran/udr14.f90 b/libgomp/testsuite/libgomp.fortran/udr14.f90
new file mode 100644 (file)
index 0000000..d697458
--- /dev/null
@@ -0,0 +1,50 @@
+! { dg-do run }
+
+  type dt
+    integer :: g
+    integer, allocatable :: h(:)
+  end type
+!$omp declare reduction (baz : dt : bar (omp_out, omp_in)) &
+!$omp & initializer (foo (omp_priv, omp_orig))
+  integer :: r
+  type (dt), allocatable :: a(:)
+  allocate (a(7:8))
+  a(:)%g = 0
+  a(7)%h = (/ 0, 0, 0 /)
+  r = 0
+!$omp parallel reduction(+:r) reduction (baz:a)
+  if (.not.allocated (a)) call abort
+  if (lbound (a, 1) /= 7 .or. ubound (a, 1) /= 8) call abort
+  if (.not.allocated (a(7)%h)) call abort
+  if (allocated (a(8)%h)) call abort
+  if (lbound (a(7)%h, 1) /= 1 .or. ubound (a(7)%h, 1) /= 3) call abort
+  a(:)%g = a(:)%g + 2
+  a(7)%h = a(7)%h + 3
+  r = r + 1
+!$omp end parallel
+  if (.not.allocated (a)) call abort
+  if (lbound (a, 1) /= 7 .or. ubound (a, 1) /= 8) call abort
+  if (.not.allocated (a(7)%h)) call abort
+  if (allocated (a(8)%h)) call abort
+  if (lbound (a(7)%h, 1) /= 1 .or. ubound (a(7)%h, 1) /= 3) call abort
+  if (any (a(:)%g /= 2 * r) .or. any (a(7)%h(:) /= 3 * r)) call abort
+contains
+  subroutine foo (x, y)
+    type (dt), allocatable :: x(:), y(:)
+    if (allocated (x) .neqv. allocated (y)) call abort
+    if (lbound (x, 1) /= lbound (y, 1)) call abort
+    if (ubound (x, 1) /= ubound (y, 1)) call abort
+    if (allocated (x(7)%h) .neqv. allocated (y(7)%h)) call abort
+    if (allocated (x(8)%h) .neqv. allocated (y(8)%h)) call abort
+    if (lbound (x(7)%h, 1) /= lbound (y(7)%h, 1)) call abort
+    if (ubound (x(7)%h, 1) /= ubound (y(7)%h, 1)) call abort
+    x(7)%g = 0
+    x(7)%h = 0
+    x(8)%g = 0
+  end subroutine
+  subroutine bar (x, y)
+    type (dt), allocatable :: x(:), y(:)
+    x(:)%g = x(:)%g + y(:)%g
+    x(7)%h(:) = x(7)%h(:) + y(7)%h(:)
+  end subroutine
+end
diff --git a/libgomp/testsuite/libgomp.fortran/udr15.f90 b/libgomp/testsuite/libgomp.fortran/udr15.f90
new file mode 100644 (file)
index 0000000..2d11695
--- /dev/null
@@ -0,0 +1,64 @@
+! { dg-do run }
+
+module udr15m1
+  integer, parameter :: a = 6
+  integer :: b
+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in)
+!$omp declare reduction (.add. : integer : &
+!$omp & omp_out = omp_out .add. f3 (omp_in, -4)) &
+!$omp & initializer (s1 (omp_priv, omp_orig))
+  interface operator (.add.)
+    module procedure f1
+  end interface
+contains
+  integer function f1 (x, y)
+    integer, intent (in) :: x, y
+    f1 = x + y
+  end function f1
+  integer function f3 (x, y)
+    integer, intent (in) :: x, y
+    f3 = iand (x, y)
+  end function f3
+  subroutine s1 (x, y)
+    integer, intent (in) :: y
+    integer, intent (out) :: x
+    x = 3
+  end subroutine s1
+end module udr15m1
+module udr15m2
+  use udr15m1, f4 => f1, f5 => f3, s2 => s1, operator (.addtwo.) => operator (.add.)
+  type dt
+    integer :: x
+  end type
+!$omp declare reduction (+ : dt : omp_out = f6 (omp_out + omp_in)) &
+!$omp & initializer (s3 (omp_priv))
+  interface operator (+)
+    module procedure f2
+  end interface
+contains
+  type(dt) function f2 (x, y)
+    type(dt), intent (in) :: x, y
+    f2%x = x%x + y%x
+  end function f2
+  type(dt) function f6 (x)
+    type(dt), intent (in) :: x
+    f6%x = x%x
+  end function f6
+  subroutine s3 (x)
+    type(dt), intent (out) :: x
+    x = dt(0)
+  end subroutine
+end module udr15m2
+  use udr15m2, operator (.addthree.) => operator (.addtwo.), &
+               f7 => f4, f8 => f6, s4 => s3
+  integer :: i, j
+  type(dt) :: d
+  j = 3
+  d%x = 0
+!$omp parallel do reduction (.addthree.: j) reduction (+ : d)
+  do i = 1, 100
+    j = j.addthree.iand (i, -4)
+    d = d + dt(i)
+  end do
+  if (d%x /= 5050 .or. j /= 4903) call abort
+end
diff --git a/libgomp/testsuite/libgomp.fortran/udr2.f90 b/libgomp/testsuite/libgomp.fortran/udr2.f90
new file mode 100644 (file)
index 0000000..861a4b2
--- /dev/null
@@ -0,0 +1,51 @@
+! { dg-do run }
+
+module udr2
+  type dt
+    integer :: x = 7
+    integer :: y = 9
+  end type
+end module udr2
+  use udr2, only : dt
+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in)
+  integer :: i, j(2:4,3:5)
+!$omp declare reduction (bar : integer : &
+!$omp & omp_out = omp_out + iand (omp_in, -4)) initializer (omp_priv = 3)
+  interface operator (+)
+    function notdefined(x, y)
+      use udr2, only : dt
+      type(dt), intent (in) :: x, y
+      type(dt) :: notdefined
+    end function
+  end interface
+  type (dt) :: d(2:4,3:5)
+!$omp declare reduction (+ : dt : omp_out%x = omp_out%x &
+!$omp & + iand (omp_in%x, -8))
+!$omp declare reduction (foo : dt : omp_out%x = iand (omp_in%x, -8) &
+!$omp & + omp_out%x) initializer (omp_priv = dt (5, 21))
+  j = 0
+!$omp parallel do reduction (foo : j)
+  do i = 1, 100
+    j = j + i
+  end do
+  if (any(j .ne. 5050)) call abort
+  j = 3
+!$omp parallel do reduction (bar : j)
+  do i = 1, 100
+    j = j + 4 * i
+  end do
+  if (any(j .ne. (5050 * 4 + 3))) call abort
+!$omp parallel do reduction (+ : d)
+  do i = 1, 100
+    if (any(d%y .ne. 9)) call abort
+    d%x = d%x + 8 * i
+  end do
+  if (any(d%x .ne. (5050 * 8 + 7)) .or. any(d%y .ne. 9)) call abort
+  d = dt (5, 21)
+!$omp parallel do reduction (foo : d)
+  do i = 1, 100
+    if (any(d%y .ne. 21)) call abort
+    d%x = d%x + 8 * i
+  end do
+  if (any(d%x .ne. (5050 * 8 + 5)) .or. any(d%y .ne. 21)) call abort
+end
diff --git a/libgomp/testsuite/libgomp.fortran/udr3.f90 b/libgomp/testsuite/libgomp.fortran/udr3.f90
new file mode 100644 (file)
index 0000000..258b672
--- /dev/null
@@ -0,0 +1,38 @@
+! { dg-do run }
+
+!$omp declare reduction (foo : character(kind=1, len=*) &
+!$omp & : omp_out = trim(omp_out) // omp_in) initializer (omp_priv = '')
+!$omp declare reduction (bar : character(kind=1, len=:) &
+!$omp & : omp_out = trim(omp_in) // omp_out) initializer (omp_priv = '')
+!$omp declare reduction (baz : character(kind=1, len=1) &
+!$omp & : omp_out = char (ichar (omp_out) + ichar (omp_in) &
+!$omp & - ichar ('0'))) initializer (omp_priv = '0')
+!$omp declare reduction (baz : character(kind=1, len=2) &
+!$omp & : omp_out = char (ichar (omp_out(1:1)) + ichar (omp_in(1:1)) &
+!$omp & - ichar ('0')) // char (ichar (omp_out(2:2)) + &
+!$omp & ichar (omp_in(2:2)) - ichar ('0'))) initializer (omp_priv = '00')
+  character(kind=1, len=64) :: c, d
+  character(kind = 1, len=1) :: e
+  character(kind = 1, len=1+1) :: f
+  integer :: i
+  c = ''
+  d = ''
+  e = '0'
+  f = '00'
+!$omp parallel do reduction (foo : c) reduction (bar : d) &
+!$omp & reduction (baz : e, f)
+  do i = 1, 64
+    c = trim(c) // char (ichar ('0') + i)
+    d = char (ichar ('0') + i) // d
+    e = char (ichar (e) + mod (i, 3))
+    f = char (ichar (f(1:1)) + mod (i, 2)) &
+&      // char (ichar (f(2:2)) + mod (i, 3))
+  end do
+  do i = 1, 64
+    if (index (c, char (ichar ('0') + i)) .eq. 0) call abort
+    if (index (d, char (ichar ('0') + i)) .eq. 0) call abort
+  end do
+  if (e.ne.char (ichar ('0') + 64)) call abort
+  if (f(1:1).ne.char (ichar ('0') + 32)) call abort
+  if (f(2:2).ne.char (ichar ('0') + 64)) call abort
+end
diff --git a/libgomp/testsuite/libgomp.fortran/udr4.f90 b/libgomp/testsuite/libgomp.fortran/udr4.f90
new file mode 100644 (file)
index 0000000..8936547
--- /dev/null
@@ -0,0 +1,50 @@
+! { dg-do run }
+
+!$omp declare reduction (foo : character(kind=1, len=*) &
+!$omp & : omp_out = fn (omp_out, omp_in)) initializer (omp_priv = '')
+!$omp declare reduction (bar : character(kind=1, len=:) &
+!$omp & : omp_out = fn (omp_in, omp_out)) initializer (omp_priv = '')
+!$omp declare reduction (baz : character(kind=1, len=1) &
+!$omp & : omp_out = char (ichar (omp_out) + ichar (omp_in) &
+!$omp & - ichar ('0'))) initializer (omp_priv = '0')
+!$omp declare reduction (baz : character(kind=1, len=2) &
+!$omp & : omp_out = char (ichar (omp_out(1:1)) + ichar (omp_in(1:1)) &
+!$omp & - ichar ('0')) // char (ichar (omp_out(2:2)) + &
+!$omp & ichar (omp_in(2:2)) - ichar ('0'))) initializer (omp_priv = '00')
+  interface
+    elemental function fn (x, y)
+      character (len=64), intent (in) :: x, y
+      character (len=64) :: fn
+    end function
+  end interface
+  character(kind=1, len=64) :: c(-3:-2,1:1,7:8), d(2:3,-7:-5)
+  character(kind = 1, len=1) :: e(2:4)
+  character(kind = 1, len=1+1) :: f(8:10,9:10)
+  integer :: i, j, k
+  c = ''
+  d = ''
+  e = '0'
+  f = '00'
+!$omp parallel do reduction (foo : c) reduction (bar : d) &
+!$omp & reduction (baz : e, f) private (j, k)
+  do i = 1, 64
+    forall (j = -3:-2, k = 7:8) &
+      c(j,1,k) = trim(c(j,1,k)) // char (ichar ('0') + i)
+    d = char (ichar ('0') + i) // d
+    e = char (ichar (e) + mod (i, 3))
+    f = char (ichar (f(:,:)(1:1)) + mod (i, 2)) &
+&      // char (ichar (f(:,:)(2:2)) + mod (i, 3))
+  end do
+  do i = 1, 64
+    if (any (index (c, char (ichar ('0') + i)) .eq. 0)) call abort
+    if (any (index (d, char (ichar ('0') + i)) .eq. 0)) call abort
+  end do
+  if (any (e.ne.char (ichar ('0') + 64))) call abort
+  if (any (f(:,:)(1:1).ne.char (ichar ('0') + 32))) call abort
+  if (any (f(:,:)(2:2).ne.char (ichar ('0') + 64))) call abort
+end
+elemental function fn (x, y)
+  character (len=64), intent (in) :: x, y
+  character (len=64) :: fn
+  fn = trim(x) // y
+end function
diff --git a/libgomp/testsuite/libgomp.fortran/udr5.f90 b/libgomp/testsuite/libgomp.fortran/udr5.f90
new file mode 100644 (file)
index 0000000..6dae9b9
--- /dev/null
@@ -0,0 +1,57 @@
+! { dg-do run }
+
+module m
+  interface operator(.add.)
+    module procedure do_add
+  end interface
+  type dt
+    real :: r = 0.0
+  end type
+contains
+  function do_add(x, y)
+    type (dt), intent (in) :: x, y
+    type (dt) :: do_add
+    do_add%r = x%r + y%r
+  end function
+  subroutine dp_add(x, y)
+    double precision :: x, y
+    x = x + y
+  end subroutine
+  subroutine dp_init(x)
+    double precision :: x
+    x = 0.0
+  end subroutine
+end module
+
+program udr5
+  use m, only : operator(.add.), dt, dp_add, dp_init
+  type(dt) :: xdt, one
+  real :: r
+  integer (kind = 4) :: i4
+  integer (kind = 8) :: i8
+  real (kind = 4) :: r4
+  double precision :: dp
+!$omp declare reduction(.add.:dt:omp_out=omp_out.add.omp_in)
+!$omp declare reduction(foo:integer(4),integer(kind=8),real (kind = 4) &
+!$omp & :omp_out = omp_out + omp_in) initializer (omp_priv = 0)
+!$omp declare reduction(foo:double precision:dp_add (omp_out, omp_in)) &
+!$omp & initializer (dp_init (omp_priv))
+
+  one%r = 1.0
+  r = 0.0
+  i4 = 0
+  i8 = 0
+  r4 = 0.0
+  call dp_init (dp)
+!$omp parallel reduction(.add.: xdt) reduction(+: r) &
+!$omp & reduction(foo: i4, i8, r4, dp)
+  xdt = xdt.add.one
+  r = r + 1.0
+  i4 = i4 + 1
+  i8 = i8 + 1
+  r4 = r4 + 1.0
+  call dp_add (dp, 1.0d0)
+!$omp end parallel
+  if (xdt%r .ne. r) call abort
+  if (i4.ne.r.or.i8.ne.r.or.r4.ne.r.or.dp.ne.r) call abort
+end program udr5
diff --git a/libgomp/testsuite/libgomp.fortran/udr6.f90 b/libgomp/testsuite/libgomp.fortran/udr6.f90
new file mode 100644 (file)
index 0000000..20736fb
--- /dev/null
@@ -0,0 +1,69 @@
+! { dg-do run }
+
+module m
+  interface operator(.add.)
+    module procedure do_add
+  end interface
+  type dt
+    real :: r = 0.0
+  end type
+contains
+  elemental function do_add(x, y)
+    type (dt), intent (in) :: x, y
+    type (dt) :: do_add
+    do_add%r = x%r + y%r
+  end function
+  elemental subroutine dp_add(x, y)
+    double precision, intent (inout) :: x
+    double precision, intent (in) :: y
+    x = x + y
+  end subroutine
+  elemental subroutine dp_init(x)
+    double precision, intent (out) :: x
+    x = 0.0
+  end subroutine
+end module
+
+program udr6
+  use m, only : operator(.add.), dt, dp_add, dp_init
+  type(dt), allocatable :: xdt(:)
+  type(dt) :: one
+  real :: r
+  integer (kind = 4), allocatable, dimension(:) :: i4
+  integer (kind = 8), allocatable, dimension(:,:) :: i8
+  integer :: i
+  real (kind = 4), allocatable :: r4(:,:)
+  double precision, allocatable :: dp(:)
+!$omp declare reduction(.add.:dt:omp_out=omp_out.add.omp_in)
+!$omp declare reduction(foo:integer(4),integer(kind=8),real (kind = 4) &
+!$omp & :omp_out = omp_out + omp_in) initializer (omp_priv = 0)
+!$omp declare reduction(foo:double precision:dp_add (omp_out, omp_in)) &
+!$omp & initializer (dp_init (omp_priv))
+
+  one%r = 1.0
+  allocate (xdt(4), i4 (3), i8(-5:-2,2:3), r4(2:5,1:1), dp(7))
+  r = 0.0
+  i4 = 0
+  i8 = 0
+  r4 = 0.0
+  do i = 1, 7
+    call dp_init (dp(i))
+  end do
+!$omp parallel reduction(.add.: xdt) reduction(+: r) &
+!$omp & reduction(foo: i4, i8, r4, dp) private(i)
+  do i = 1, 4
+    xdt(i) = xdt(i).add.one
+  end do
+  r = r + 1.0
+  i4 = i4 + 1
+  i8 = i8 + 1
+  r4 = r4 + 1.0
+  do i = 1, 7
+    call dp_add (dp(i), 1.0d0)
+  end do
+!$omp end parallel
+  if (any (xdt%r .ne. r)) call abort
+  if (any (i4.ne.r).or.any(i8.ne.r)) call abort
+  if (any(r4.ne.r).or.any(dp.ne.r)) call abort
+  deallocate (xdt, i4, i8, r4, dp)
+end program udr6
diff --git a/libgomp/testsuite/libgomp.fortran/udr7.f90 b/libgomp/testsuite/libgomp.fortran/udr7.f90
new file mode 100644 (file)
index 0000000..42be00c
--- /dev/null
@@ -0,0 +1,46 @@
+! { dg-do run }
+
+program udr7
+  implicit none
+  interface
+    elemental subroutine omp_priv (x, y, z)
+      real, intent (in) :: x
+      real, intent (inout) :: y
+      real, intent (in) :: z
+    end subroutine omp_priv
+    elemental real function omp_orig (x)
+      real, intent (in) :: x
+    end function omp_orig
+  end interface
+!$omp declare reduction (omp_priv : real : &
+!$omp & omp_priv (omp_orig (omp_in), omp_out, 1.0)) &
+!$omp & initializer (omp_out (omp_priv, omp_in (omp_orig)))
+  real :: x (2:4, 1:1, -2:0)
+  integer :: i
+  x = 0
+!$omp parallel do reduction (omp_priv : x)
+  do i = 1, 64
+    x = x + i
+  end do
+  if (any (x /= 2080.0)) call abort
+contains
+  elemental subroutine omp_out (x, y)
+    real, intent (out) :: x
+    real, intent (in) :: y
+    x = y - 4.0
+  end subroutine omp_out
+  elemental real function omp_in (x)
+    real, intent (in) :: x
+    omp_in = x + 4.0
+  end function omp_in
+end program udr7
+elemental subroutine omp_priv (x, y, z)
+  real, intent (in) :: x
+  real, intent (inout) :: y
+  real, intent (in) :: z
+  y = y + (x - 4.0) + (z - 1.0)
+end subroutine omp_priv
+elemental real function omp_orig (x)
+  real, intent (in) :: x
+  omp_orig = x + 4.0
+end function omp_orig
diff --git a/libgomp/testsuite/libgomp.fortran/udr8.f90 b/libgomp/testsuite/libgomp.fortran/udr8.f90
new file mode 100644 (file)
index 0000000..9ef48a5
--- /dev/null
@@ -0,0 +1,46 @@
+! { dg-do run }
+
+module udr8m1
+  integer, parameter :: a = 6
+  integer :: b
+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in)
+!$omp declare reduction (.add. : integer : &
+!$omp & omp_out = omp_out .add. iand (omp_in, -4)) &
+!$omp & initializer (omp_priv = 3)
+  interface operator (.add.)
+    module procedure f1
+  end interface
+contains
+  integer function f1 (x, y)
+    integer, intent (in) :: x, y
+    f1 = x + y
+  end function f1
+end module udr8m1
+module udr8m2
+  use udr8m1
+  type dt
+    integer :: x
+  end type
+!$omp declare reduction (+ : dt : omp_out = omp_out + omp_in) &
+!$omp & initializer (omp_priv = dt (0))
+  interface operator (+)
+    module procedure f2
+  end interface
+contains
+  type(dt) function f2 (x, y)
+    type(dt), intent (in) :: x, y
+    f2%x = x%x + y%x
+  end function f2
+end module udr8m2
+  use udr8m2
+  integer :: i, j
+  type(dt) :: d
+  j = 3
+  d%x = 0
+!$omp parallel do reduction (.add.: j) reduction (+ : d)
+  do i = 1, 100
+    j = j.add.iand (i, -4)
+    d = d + dt(i)
+  end do
+  if (d%x /= 5050 .or. j /= 4903) call abort
+end
diff --git a/libgomp/testsuite/libgomp.fortran/udr9.f90 b/libgomp/testsuite/libgomp.fortran/udr9.f90
new file mode 100644 (file)
index 0000000..a4fec13
--- /dev/null
@@ -0,0 +1,65 @@
+! { dg-do run }
+
+module udr9m1
+  integer, parameter :: a = 6
+  integer :: b
+!$omp declare reduction (foo : integer : combiner1 (omp_out, omp_in)) &
+!$omp & initializer (initializer1 (omp_priv, omp_orig))
+!$omp declare reduction (.add. : integer : &
+!$omp & combiner1 (omp_out, omp_in)) &
+!$omp & initializer (initializer1 (omp_priv, omp_orig))
+  interface operator (.add.)
+    module procedure f1
+  end interface
+contains
+  integer function f1 (x, y)
+    integer, intent (in) :: x, y
+    f1 = x + y
+  end function f1
+  elemental subroutine combiner1 (x, y)
+    integer, intent (inout) :: x
+    integer, intent (in) :: y
+    x = x + iand (y, -4)
+  end subroutine
+  subroutine initializer1 (x, y)
+    integer :: x, y
+    if (y .ne. 3) call abort
+    x = y
+  end subroutine
+end module udr9m1
+module udr9m2
+  use udr9m1
+  type dt
+    integer :: x
+  end type
+!$omp declare reduction (+ : dt : combiner2 (omp_in, omp_out)) &
+!$omp & initializer (initializer2 (omp_priv))
+  interface operator (+)
+    module procedure f2
+  end interface
+contains
+  type(dt) function f2 (x, y)
+    type(dt), intent (in) :: x, y
+    f2%x = x%x + y%x
+  end function f2
+  subroutine combiner2 (x, y)
+    type(dt) :: x, y
+    y = y + x
+  end subroutine combiner2
+  subroutine initializer2 (x)
+    type(dt), intent(out) :: x
+    x%x = 0
+  end subroutine initializer2
+end module udr9m2
+  use udr9m2
+  integer :: i, j
+  type(dt) :: d
+  j = 3
+  d%x = 0
+!$omp parallel do reduction (.add.: j) reduction (+ : d)
+  do i = 1, 100
+    j = j.add.iand (i, -4)
+    d = d + dt(i)
+  end do
+  if (d%x /= 5050 .or. j /= 4903) call abort
+end
index 5b78c2e..44e79a0 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 9bd84a5..11e9042 100644 (file)
@@ -1,3 +1,14 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
+2014-05-28  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       * acinclude.m4 (LIBITM_CHECK_LINKER_HWCAP): Check for
+       -mclear-hwcap instead.
+       * configure: Regenerate.
+       * clearcap.map: Remove.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index ca7e0a9..a82f6d6 100644 (file)
@@ -301,10 +301,10 @@ AC_DEFUN([LIBITM_CHECK_LINKER_FEATURES], [
 
 dnl
 dnl Check if the linker used supports linker maps to clear hardware
-dnl capabilities.  This is only supported by Sun ld at the moment.
+dnl capabilities.  This is only supported on Solaris at the moment.
 dnl
 dnl Defines:
-dnl  HWCAP_LDFLAGS='-Wl,-M,clearcap.map' if possible
+dnl  HWCAP_LDFLAGS=-mclear-hwcap if possible
 dnl  LD (as a side effect of testing)
 dnl
 AC_DEFUN([LIBITM_CHECK_LINKER_HWCAP], [
@@ -312,12 +312,12 @@ AC_DEFUN([LIBITM_CHECK_LINKER_HWCAP], [
   AC_REQUIRE([AC_PROG_LD])
 
   ac_save_LDFLAGS="$LDFLAGS"
-  LDFLAGS="$LFLAGS -Wl,-M,$srcdir/clearcap.map"
+  LDFLAGS="$LFLAGS -mclear-hwcap"
 
-  AC_MSG_CHECKING([for ld that supports -Wl,-M,mapfile])
+  AC_MSG_CHECKING([for -mclear-hwcap])
   AC_TRY_LINK([], [return 0;], [ac_hwcap_ldflags=yes],[ac_hwcap_ldflags=no])
   if test "$ac_hwcap_ldflags" = "yes"; then
-    HWCAP_LDFLAGS="-Wl,-M,$srcdir/clearcap.map $HWCAP_LDFLAGS"
+    HWCAP_LDFLAGS="-mclear-hwcap $HWCAP_LDFLAGS"
   fi
   AC_MSG_RESULT($ac_hwcap_ldflags)
 
diff --git a/libitm/clearcap.map b/libitm/clearcap.map
deleted file mode 100644 (file)
index bd8189b..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-# Clear hardware capabilities emitted by Sun as: calls to the x86_avx.c
-# functions are only emitted with -mavx.
-#
-# The v1 mapfile syntax has no support for clearing specific capabilities,
-# so clear everything.
-#
-hwcap_1 = V0x0 OVERRIDE;
-#
-# If we can assume mapfile v2 syntax, we can specificially clear AVX.
-#
-#$mapfile_version 2
-#CAPABILITY {
-#      HW -= AVX;
-#};
index 031c19c..ce6d50a 100644 (file)
@@ -16739,10 +16739,10 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
 
 
   ac_save_LDFLAGS="$LDFLAGS"
-  LDFLAGS="$LFLAGS -Wl,-M,$srcdir/clearcap.map"
+  LDFLAGS="$LFLAGS -mclear-hwcap"
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld that supports -Wl,-M,mapfile" >&5
-$as_echo_n "checking for ld that supports -Wl,-M,mapfile... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -mclear-hwcap" >&5
+$as_echo_n "checking for -mclear-hwcap... " >&6; }
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -16762,7 +16762,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
   if test "$ac_hwcap_ldflags" = "yes"; then
-    HWCAP_LDFLAGS="-Wl,-M,$srcdir/clearcap.map $HWCAP_LDFLAGS"
+    HWCAP_LDFLAGS="-mclear-hwcap $HWCAP_LDFLAGS"
   fi
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_hwcap_ldflags" >&5
 $as_echo "$ac_hwcap_ldflags" >&6; }
index 93cbe82..aeef0af 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index a9ed735..961745f 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 1eacd85..175f329 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "GAPPLETVIEWER 1"
-.TH GAPPLETVIEWER 1 "2014-04-22" "0.99.1-pre" "GNU"
+.TH GAPPLETVIEWER 1 "2014-07-16" "0.99.1-pre" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index c0c2e27..9c6eccb 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "GJAR 1"
-.TH GJAR 1 "2014-04-22" "0.99.1-pre" "GNU"
+.TH GJAR 1 "2014-07-16" "0.99.1-pre" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index d9a3391..4501d6c 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "GJARSIGNER 1"
-.TH GJARSIGNER 1 "2014-04-22" "0.99.1-pre" "GNU"
+.TH GJARSIGNER 1 "2014-07-16" "0.99.1-pre" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index b2a5335..c54a73d 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "GJAVAH 1"
-.TH GJAVAH 1 "2014-04-22" "0.99.1-pre" "GNU"
+.TH GJAVAH 1 "2014-07-16" "0.99.1-pre" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index ef8c4e3..2d6df38 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "GJDOC 1"
-.TH GJDOC 1 "2014-04-22" "0.99.1-pre" "GNU"
+.TH GJDOC 1 "2014-07-16" "0.99.1-pre" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 16422a4..eac3d3a 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "GKEYTOOL 1"
-.TH GKEYTOOL 1 "2014-04-22" "0.99.1-pre" "GNU"
+.TH GKEYTOOL 1 "2014-07-16" "0.99.1-pre" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 81ce3f0..bb71dbf 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "GNATIVE2ASCII 1"
-.TH GNATIVE2ASCII 1 "2014-04-22" "0.99.1-pre" "GNU"
+.TH GNATIVE2ASCII 1 "2014-07-16" "0.99.1-pre" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index cc99252..2a23dfe 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "GORBD 1"
-.TH GORBD 1 "2014-04-22" "0.99.1-pre" "GNU"
+.TH GORBD 1 "2014-07-16" "0.99.1-pre" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 8cfcbdd..1f82f54 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "GRMID 1"
-.TH GRMID 1 "2014-04-22" "0.99.1-pre" "GNU"
+.TH GRMID 1 "2014-07-16" "0.99.1-pre" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index d9a40b2..8370801 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "GRMIREGISTRY 1"
-.TH GRMIREGISTRY 1 "2014-04-22" "0.99.1-pre" "GNU"
+.TH GRMIREGISTRY 1 "2014-07-16" "0.99.1-pre" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index aa68fc2..0a10cbe 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "GSERIALVER 1"
-.TH GSERIALVER 1 "2014-04-22" "0.99.1-pre" "GNU"
+.TH GSERIALVER 1 "2014-07-16" "0.99.1-pre" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index d12c391..ad9b877 100644 (file)
 .\" ========================================================================
 .\"
 .IX Title "GTNAMESERV 1"
-.TH GTNAMESERV 1 "2014-04-22" "0.99.1-pre" "GNU"
+.TH GTNAMESERV 1 "2014-07-16" "0.99.1-pre" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 323fd2e..45db6e1 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 5a810fc..c0be646 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index a533dc4..3c50d51 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index fe2c4f8..840bca8 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 1289c62..a445537 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index a88c29a..a742a72 100644 (file)
@@ -1,3 +1,201 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
+2014-06-23  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/61532
+       * testsuite/20_util/make_signed/requirements/typedefs-1.cc: Do not
+       apply the signed specifier to wchar_t.
+       * testsuite/20_util/make_signed/requirements/typedefs-2.cc: Likewise.
+       * testsuite/20_util/make_unsigned/requirements/typedefs-1.cc: Do not
+       apply the unsigned specifier to wchar_t.
+       * testsuite/20_util/make_unsigned/requirements/typedefs-2.cc:
+       Likewise.
+
+2014-06-13  Jonathan Wakely  <jwakely@redhat.com>
+
+       Backport from mainline
+       PR libstdc++/60326
+       * include/std/type_traits (__make_unsigned, __make_signed): Define
+       specializations for wchar_t, char16_t and char32_t.
+       * testsuite/20_util/make_signed/requirements/typedefs-4.cc: New.
+       * testsuite/20_util/make_unsigned/requirements/typedefs-1.cc: Correct
+       test for make_unsigned<volatile wchar_t>.
+       * testsuite/20_util/make_unsigned/requirements/typedefs-2.cc:
+       Likewise.
+       * testsuite/20_util/declval/requirements/1_neg.cc: Adjust dg-error
+       line number.
+       * testsuite/20_util/make_signed/requirements/typedefs_neg.cc:
+       Likewise.
+       * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc:
+       Likewise.
+
+       Backport from mainline
+       PR libstdc++/61269
+       * include/std/type_traits: Move include outside namespace std.
+       * testsuite/20_util/declval/requirements/1_neg.cc: Adjust dg-error.
+       * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Likewise.
+       * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc:
+       Likewise.
+
+       * include/std/tuple (tuple_size<cv _Tp>): Implement LWG 2313.
+       (get<_Tp>(tuple<_Types...>&&)): Use forward instead of move.
+       * testsuite/20_util/tuple/element_access/get_by_type.cc: Test rvalues.
+
+2014-06-07  Ed Smith-Rowland  <3dw4rd@verizon.net>
+
+       Backport from mainline
+       DR 2344 - std::quoted doesn't respect padding
+       * include/std/iomanip: Allow for padding in quoted inserters.
+       * testsuite/27_io/manipulators/standard/char/dr2344.cc: New.
+       * testsuite/27_io/manipulators/standard/wchar_t/dr2344.cc: New.
+
+2014-06-03  Jonathan Wakely  <jwakely@redhat.com>
+
+       * include/bits/regex_executor.tcc (_Executor<>::_M_main): Move instead
+       of copying.
+
+2014-06-03  Jonathan Wakely  <jwakely@redhat.com>
+
+       Backport from mainline
+       2014-04-15  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/60734
+       * include/bits/stl_tree.h (_Rb_tree::_M_end): Fix invalid cast.
+
+       Backport from mainline
+       2014-04-24  Tim Shen  <timshen91@gmail.com>
+
+       * include/bits/regex_automaton.tcc (_StateSeq<>::_M_clone()):
+       Do _M_alt before _M_next.
+       * testsuite/28_regex/basic_regex/multiple_quantifiers.cc: Add testcases.
+
+       Backport from mainline
+       2014-05-20  Tim Shen  <timshen91@gmail.com>
+
+       PR libstdc++/61227
+       * include/bits/regex_compiler.h
+       (_BracketMatcher<>::_M_add_character_class): Add negative character
+       class support.
+       * include/bits/regex_compiler.tcc (_BracketMatcher<>::_M_apply):
+       Likewise.
+       * testsuite/28_regex/algorithms/regex_match/ecma/char/quoted_char.cc:
+       Add more testcases.
+
+2014-05-29  Jonathan Wakely  <jwakely@redhat.com>
+
+       * include/tr2/bool_set: Use UTF-8 for accented characters.
+       * scripts/run_doxygen: Handle Doxygen 1.8.x change.
+
+2014-05-27  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/61329
+       * include/bits/regex_automaton.tcc (_State_base::_M_print): Add
+       inline specifier.
+       (_State_base::_M_dot): Likewise.
+
+2014-05-23  François Dumont  <fdumont@gcc.gnu.org>
+
+       PR libstdc++/61143
+       * include/bits/hashtable.h: Fix move semantic to leave hashtable in a
+       usable state.
+       * testsuite/23_containers/unordered_set/61143.cc: New.
+       * testsuite/23_containers/unordered_set/modifiers/swap.cc: New.
+
+2014-05-17  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/60966
+       * include/std/future (__future_base::_State_baseV2::_M_set_result):
+       Signal condition variable after call_once returns.
+       (__future_base::_State_baseV2::_M_do_set): Do not signal here.
+       (promise::set_value, promise::set_exception): Increment the reference
+       count on the shared state until the function returns.
+       * testsuite/30_threads/promise/60966.cc: New.
+
+2014-05-08  Joshua Gay  <jgay@gnu.org>
+
+       PR libstdc++/61117
+       * doc/xml/faq.xml (faq.license.what_restrictions): Replace "open
+       source" with "free software".
+       * doc/html/faq.html: Likewise.
+
+2014-05-08  Jonathan Wakely  <jwakely@redhat.com>
+
+       * include/std/iostream: Fix URL in comment.
+       * src/c++98/ios_init.cc: Fix path in comment.
+
+2014-05-07  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/61023
+       * include/bits/stl_tree.h (_Rb_tree::_M_move_assign): Copy the
+       comparison function.
+       * testsuite/23_containers/set/cons/61023.cc: New.
+
+       PR libstdc++/61086
+       * include/bits/stl_iterator.h (__normal_iterator::_M_const_cast):
+       Remove.
+       * include/bits/stl_vector.h (vector::insert, vector::erase): Use
+       arithmetic to obtain a mutable iterator from const_iterator.
+       * include/bits/vector.tcc (vector::insert): Likewise.
+       * include/debug/vector (vector::erase): Likewise.
+       * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc:
+       Adjust dg-error line number.
+       * testsuite/23_containers/vector/requirements/dr438/
+       constructor_1_neg.cc: Likewise.
+       * testsuite/23_containers/vector/requirements/dr438/
+       constructor_2_neg.cc: Likewise.
+       * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc:
+       Likewise.
+
+2014-05-06  Jonathan Wakely  <jwakely@redhat.com>
+
+       Backport from mainline
+       2014-04-15  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/60594
+       * include/std/functional (function::_Callable): Exclude own type
+       from the callable checks.
+       * testsuite/20_util/function/60594.cc: New.
+
+2014-05-02  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/59476
+       * python/libstdcxx/v6/printers.py (get_value_from_Rb_tree_node): New
+       function to handle both C++03 and C++11 _Rb_tree_node implementations.
+       (StdRbtreeIteratorPrinter, StdMapPrinter, StdSetPrinter): Use it.
+       * testsuite/libstdc++-prettyprinters/simple.cc: Update comment to
+       refer to...
+       * testsuite/libstdc++-prettyprinters/simple11.cc: New.
+
+       PR libstdc++/61036
+       * include/bits/shared_ptr_base.h (__shared_ptr::__shared_ptr(_Tp1*)):
+       Check the correct type in the static assertion.
+       * testsuite/20_util/shared_ptr/cons/61036.cc: New.
+
+2014-04-27  Lars Gullik Bjønnes  <larsbj@gullik.org>
+
+       PR libstdc++/60710
+       * include/experimental/optional (operator!=): Implement in terms of
+       operator==.
+       * testsuite/experimental/optional/relops/1.cc: Remove operator!=.
+       * testsuite/experimental/optional/relops/2.cc: Likewise.
+       * testsuite/experimental/optional/relops/3.cc: Likewise.
+       * testsuite/experimental/optional/relops/4.cc: Likewise.
+       * testsuite/experimental/optional/relops/5.cc: Likewise.
+       * testsuite/experimental/optional/relops/6.cc: Likewise.
+
+2014-04-27  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/60497
+       * include/std/tuple (get): Qualify calls to prevent ADL.
+       * testsuite/20_util/tuple/60497.cc: New.
+
+       * include/std/tuple (tuple_element_t): Define.
+       * testsuite/20_util/tuple/tuple_element.cc: Change to compile-only
+       test.
+       * testsuite/20_util/tuple/tuple_element_t.cc: New.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 2e0f3e2..81b295f 100644 (file)
     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.license.what_restrictions"></a><a id="q-license.what_restrictions"></a><p><strong>2.4.</strong></p></td><td align="left" valign="top"><p>
       I see. So, what restrictions are there on programs that use the library?
     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.what_restrictions"></a></td><td align="left" valign="top"><p>
-      None.  We encourage such programs to be released as open source,
+      None.  We encourage such programs to be released as free software,
      but we won't punish you or sue you if you choose otherwise.
     </p></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>3.1. <a href="faq.html#faq.how_to_install">How do I install libstdc++?
     </a></dt><dt>3.2. <a href="faq.html#faq.how_to_get_sources">How does one get current libstdc++ sources?
index 3a2fbad..69e2f90 100644 (file)
   </question>
   <answer xml:id="a-license.what_restrictions">
     <para>
-      None.  We encourage such programs to be released as open source,
+      None.  We encourage such programs to be released as free software,
      but we won't punish you or sue you if you choose otherwise.
     </para> 
   </answer>
index 22e17d2..9b6394c 100644 (file)
@@ -316,14 +316,49 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       size_type                        _M_element_count;
       _RehashPolicy            _M_rehash_policy;
 
+      // A single bucket used when only need for 1 bucket. Especially
+      // interesting in move semantic to leave hashtable with only 1 buckets
+      // which is not allocated so that we can have those operations noexcept
+      // qualified.
+      // Note that we can't leave hashtable with 0 bucket without adding
+      // numerous checks in the code to avoid 0 modulus.
+      __bucket_type            _M_single_bucket;
+
+      bool
+      _M_uses_single_bucket(__bucket_type* __bkts) const
+      { return __builtin_expect(_M_buckets == &_M_single_bucket, false); }
+
+      bool
+      _M_uses_single_bucket() const
+      { return _M_uses_single_bucket(_M_buckets); }
+
       __hashtable_alloc&
       _M_base_alloc() { return *this; }
 
-      using __hashtable_alloc::_M_deallocate_buckets;
+      __bucket_type*
+      _M_allocate_buckets(size_type __n)
+      {
+       if (__builtin_expect(__n == 1, false))
+         {
+           _M_single_bucket = nullptr;
+           return &_M_single_bucket;
+         }
+
+       return __hashtable_alloc::_M_allocate_buckets(__n);
+      }
+
+      void
+      _M_deallocate_buckets(__bucket_type* __bkts, size_type __n)
+      {
+       if (_M_uses_single_bucket(__bkts))
+         return;
+
+       __hashtable_alloc::_M_deallocate_buckets(__bkts, __n);
+      }
 
       void
       _M_deallocate_buckets()
-      { this->_M_deallocate_buckets(_M_buckets, _M_bucket_count); }
+      { _M_deallocate_buckets(_M_buckets, _M_bucket_count); }
 
       // Gets bucket begin, deals with the fact that non-empty buckets contain
       // their before begin node.
@@ -703,11 +738,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
       size_type
       erase(const key_type& __k)
-      {
-       if (__builtin_expect(_M_bucket_count == 0, false))
-         return 0;
-       return _M_erase(__unique_keys(), __k);
-      }
+      { return _M_erase(__unique_keys(), __k); }
 
       iterator
       erase(const_iterator, const_iterator);
@@ -768,7 +799,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       _M_rehash_policy()
     {
       _M_bucket_count = _M_rehash_policy._M_next_bkt(__bucket_hint);
-      _M_buckets = this->_M_allocate_buckets(_M_bucket_count);
+      _M_buckets = _M_allocate_buckets(_M_bucket_count);
     }
 
   template<typename _Key, typename _Value,
@@ -796,7 +827,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
            std::max(_M_rehash_policy._M_bkt_for_elements(__nb_elems),
                     __bucket_hint));
 
-       _M_buckets = this->_M_allocate_buckets(_M_bucket_count);
+       _M_buckets = _M_allocate_buckets(_M_bucket_count);
        __try
          {
            for (; __f != __l; ++__f)
@@ -833,9 +864,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
              {
                // Replacement allocator cannot free existing storage.
                this->_M_deallocate_nodes(_M_begin());
-               if (__builtin_expect(_M_bucket_count != 0, true))
-                 _M_deallocate_buckets();
-               _M_reset();
+               _M_before_begin._M_nxt = nullptr;
+               _M_deallocate_buckets();
+               _M_buckets = nullptr;
                std::__alloc_on_copy(__this_alloc, __that_alloc);
                __hashtable_base::operator=(__ht);
                _M_bucket_count = __ht._M_bucket_count;
@@ -867,7 +898,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        if (_M_bucket_count != __ht._M_bucket_count)
          {
            __former_buckets = _M_buckets;
-           _M_buckets = this->_M_allocate_buckets(__ht._M_bucket_count);
+           _M_buckets = _M_allocate_buckets(__ht._M_bucket_count);
            _M_bucket_count = __ht._M_bucket_count;
          }
        else
@@ -885,8 +916,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
                      [&__roan](const __node_type* __n)
                      { return __roan(__n->_M_v()); });
            if (__former_buckets)
-             this->_M_deallocate_buckets(__former_buckets,
-                                         __former_bucket_count);
+             _M_deallocate_buckets(__former_buckets, __former_bucket_count);
          }
        __catch(...)
          {
@@ -917,7 +947,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       {
        __bucket_type* __buckets = nullptr;
        if (!_M_buckets)
-         _M_buckets = __buckets = this->_M_allocate_buckets(_M_bucket_count);
+         _M_buckets = __buckets = _M_allocate_buckets(_M_bucket_count);
 
        __try
          {
@@ -964,8 +994,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     _M_reset() noexcept
     {
       _M_rehash_policy._M_reset();
-      _M_bucket_count = 0;
-      _M_buckets = nullptr;
+      _M_bucket_count = 1;
+      _M_single_bucket = nullptr;
+      _M_buckets = &_M_single_bucket;
       _M_before_begin._M_nxt = nullptr;
       _M_element_count = 0;
     }
@@ -980,12 +1011,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     _M_move_assign(_Hashtable&& __ht, std::true_type)
     {
       this->_M_deallocate_nodes(_M_begin());
-      if (__builtin_expect(_M_bucket_count != 0, true))
-       _M_deallocate_buckets();
-
+      _M_deallocate_buckets();
       __hashtable_base::operator=(std::move(__ht));
       _M_rehash_policy = __ht._M_rehash_policy;
-      _M_buckets = __ht._M_buckets;
+      if (!__ht._M_uses_single_bucket())
+       _M_buckets = __ht._M_buckets;
+      else
+       {
+         _M_buckets = &_M_single_bucket;
+         _M_single_bucket = __ht._M_single_bucket;
+       }
       _M_bucket_count = __ht._M_bucket_count;
       _M_before_begin._M_nxt = __ht._M_before_begin._M_nxt;
       _M_element_count = __ht._M_element_count;
@@ -1019,7 +1054,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
          if (_M_bucket_count != __ht._M_bucket_count)
            {
              __former_buckets = _M_buckets;
-             _M_buckets = this->_M_allocate_buckets(__ht._M_bucket_count);
+             _M_buckets = _M_allocate_buckets(__ht._M_bucket_count);
              _M_bucket_count = __ht._M_bucket_count;
            }
          else
@@ -1093,10 +1128,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       _M_element_count(__ht._M_element_count),
       _M_rehash_policy(__ht._M_rehash_policy)
     {
+      // Update, if necessary, buckets if __ht is using its single bucket.
+      if (__ht._M_uses_single_bucket())
+       {
+         _M_buckets = &_M_single_bucket;
+         _M_single_bucket = __ht._M_single_bucket;
+       }
+
       // Update, if necessary, bucket pointing to before begin that hasn't
       // moved.
       if (_M_begin())
        _M_buckets[_M_bucket_index(_M_begin())] = &_M_before_begin;
+
       __ht._M_reset();
     }
 
@@ -1139,7 +1182,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     {
       if (__ht._M_node_allocator() == this->_M_node_allocator())
        {
-         _M_buckets = __ht._M_buckets;
+         if (__ht._M_uses_single_bucket())
+           {
+             _M_buckets = &_M_single_bucket;
+             _M_single_bucket = __ht._M_single_bucket;
+           }
+         else
+           _M_buckets = __ht._M_buckets;
+
          _M_before_begin._M_nxt = __ht._M_before_begin._M_nxt;
          // Update, if necessary, bucket pointing to before begin that hasn't
          // moved.
@@ -1189,15 +1239,34 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
       std::__alloc_on_swap(this->_M_node_allocator(), __x._M_node_allocator());
       std::swap(_M_rehash_policy, __x._M_rehash_policy);
-      std::swap(_M_buckets, __x._M_buckets);
+
+      // Deal properly with potentially moved instances.
+      if (this->_M_uses_single_bucket())
+       {
+         if (!__x._M_uses_single_bucket())
+           {
+             _M_buckets = __x._M_buckets;
+             __x._M_buckets = &__x._M_single_bucket;
+           }
+       }
+      else if (__x._M_uses_single_bucket())
+       {
+         __x._M_buckets = _M_buckets;
+         _M_buckets = &_M_single_bucket;
+       }       
+      else
+       std::swap(_M_buckets, __x._M_buckets);
+
       std::swap(_M_bucket_count, __x._M_bucket_count);
       std::swap(_M_before_begin._M_nxt, __x._M_before_begin._M_nxt);
       std::swap(_M_element_count, __x._M_element_count);
+      std::swap(_M_single_bucket, __x._M_single_bucket);
 
       // Fix buckets containing the _M_before_begin pointers that can't be
       // swapped.
       if (_M_begin())
        _M_buckets[_M_bucket_index(_M_begin())] = &_M_before_begin;
+
       if (__x._M_begin())
        __x._M_buckets[__x._M_bucket_index(__x._M_begin())]
          = &__x._M_before_begin;
@@ -1230,9 +1299,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
               _H1, _H2, _Hash, _RehashPolicy, _Traits>::
     find(const key_type& __k)
     {
-      if (__builtin_expect(_M_bucket_count == 0, false))
-       return end();
-
       __hash_code __code = this->_M_hash_code(__k);
       std::size_t __n = _M_bucket_index(__k, __code);
       __node_type* __p = _M_find_node(__n, __k, __code);
@@ -1250,9 +1316,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
               _H1, _H2, _Hash, _RehashPolicy, _Traits>::
     find(const key_type& __k) const
     {
-      if (__builtin_expect(_M_bucket_count == 0, false))
-       return end();
-      
       __hash_code __code = this->_M_hash_code(__k);
       std::size_t __n = _M_bucket_index(__k, __code);
       __node_type* __p = _M_find_node(__n, __k, __code);
@@ -1270,9 +1333,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
               _H1, _H2, _Hash, _RehashPolicy, _Traits>::
     count(const key_type& __k) const
     {
-      if (__builtin_expect(_M_bucket_count == 0, false))
-       return 0;
-
       __hash_code __code = this->_M_hash_code(__k);
       std::size_t __n = _M_bucket_index(__k, __code);
       __node_type* __p = _M_bucket_begin(__n);
@@ -1287,7 +1347,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
          else if (__result)
            // All equivalent values are next to each other, if we
            // found a non-equivalent value after an equivalent one it
-           // means that we won't find any more equivalent values.
+           // means that we won't find any new equivalent value.
            break;
          if (!__p->_M_nxt || _M_bucket_index(__p->_M_next()) != __n)
            break;
@@ -1311,9 +1371,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
               _H1, _H2, _Hash, _RehashPolicy, _Traits>::
     equal_range(const key_type& __k)
     {
-      if (__builtin_expect(_M_bucket_count == 0, false))
-       return std::make_pair(end(), end());
-
       __hash_code __code = this->_M_hash_code(__k);
       std::size_t __n = _M_bucket_index(__k, __code);
       __node_type* __p = _M_find_node(__n, __k, __code);
@@ -1347,9 +1404,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
               _H1, _H2, _Hash, _RehashPolicy, _Traits>::
     equal_range(const key_type& __k) const
     {
-      if (__builtin_expect(_M_bucket_count == 0, false))
-       return std::make_pair(end(), end());
-       
       __hash_code __code = this->_M_hash_code(__k);
       std::size_t __n = _M_bucket_index(__k, __code);
       __node_type* __p = _M_find_node(__n, __k, __code);
@@ -1944,7 +1998,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
               _H1, _H2, _Hash, _RehashPolicy, _Traits>::
     _M_rehash_aux(size_type __n, std::true_type)
     {
-      __bucket_type* __new_buckets = this->_M_allocate_buckets(__n);
+      __bucket_type* __new_buckets = _M_allocate_buckets(__n);
       __node_type* __p = _M_begin();
       _M_before_begin._M_nxt = nullptr;
       std::size_t __bbegin_bkt = 0;
@@ -1969,8 +2023,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
          __p = __next;
        }
 
-      if (__builtin_expect(_M_bucket_count != 0, true))
-       _M_deallocate_buckets();
+      _M_deallocate_buckets();
       _M_bucket_count = __n;
       _M_buckets = __new_buckets;
     }
@@ -1986,7 +2039,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
               _H1, _H2, _Hash, _RehashPolicy, _Traits>::
     _M_rehash_aux(size_type __n, std::false_type)
     {
-      __bucket_type* __new_buckets = this->_M_allocate_buckets(__n);
+      __bucket_type* __new_buckets = _M_allocate_buckets(__n);
 
       __node_type* __p = _M_begin();
       _M_before_begin._M_nxt = nullptr;
@@ -2060,8 +2113,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
            __new_buckets[__next_bkt] = __prev_p;
        }
 
-      if (__builtin_expect(_M_bucket_count != 0, true))
-       _M_deallocate_buckets();
+      _M_deallocate_buckets();
       _M_bucket_count = __n;
       _M_buckets = __new_buckets;
     }
index 759b053..6e68fca 100644 (file)
@@ -35,7 +35,7 @@ namespace __detail
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
 #ifdef _GLIBCXX_DEBUG
-  std::ostream&
+  inline std::ostream&
   _State_base::_M_print(std::ostream& ostr) const
   {
     switch (_M_opcode)
@@ -66,7 +66,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   }
 
   // Prints graphviz dot commands for state.
-  std::ostream&
+  inline std::ostream&
   _State_base::_M_dot(std::ostream& __ostr, _StateIdT __id) const
   {
     switch (_M_opcode)
@@ -197,20 +197,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
          // _M_insert_state() never return -1
          auto __id = _M_nfa._M_insert_state(__dup);
          __m[__u] = __id;
-         if (__u == _M_end)
-           continue;
-         if (__dup._M_next != _S_invalid_state_id && __m[__dup._M_next] == -1)
-           __stack.push(__dup._M_next);
          if (__dup._M_opcode == _S_opcode_alternative
              || __dup._M_opcode == _S_opcode_subexpr_lookahead)
            if (__dup._M_alt != _S_invalid_state_id && __m[__dup._M_alt] == -1)
              __stack.push(__dup._M_alt);
+         if (__u == _M_end)
+           continue;
+         if (__dup._M_next != _S_invalid_state_id && __m[__dup._M_next] == -1)
+           __stack.push(__dup._M_next);
        }
-      long __size = static_cast<long>(__m.size());
-      for (long __k = 0; __k < __size; __k++)
+      for (auto __v : __m)
        {
-         long __v;
-         if ((__v = __m[__k]) == -1)
+         if (__v == -1)
            continue;
          auto& __ref = _M_nfa[__v];
          if (__ref._M_next != _S_invalid_state_id)
index f5a198f..af76f55 100644 (file)
@@ -369,15 +369,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 #endif
       }
 
+      // __neg should be true for \D, \S and \W only.
       void
-      _M_add_character_class(const _StringT& __s)
+      _M_add_character_class(const _StringT& __s, bool __neg)
       {
        auto __mask = _M_traits.lookup_classname(__s.data(),
                                                 __s.data() + __s.size(),
                                                 __icase);
        if (__mask == 0)
          __throw_regex_error(regex_constants::error_ctype);
-       _M_class_set |= __mask;
+       if (!__neg)
+         _M_class_set |= __mask;
+       else
+         _M_neg_class_set.push_back(__mask);
 #ifdef _GLIBCXX_DEBUG
        _M_is_ready = false;
 #endif
@@ -387,7 +391,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       _M_make_range(_CharT __l, _CharT __r)
       {
        _M_range_set.push_back(make_pair(_M_translator._M_transform(__l),
-                                     _M_translator._M_transform(__r)));
+                                        _M_translator._M_transform(__r)));
 #ifdef _GLIBCXX_DEBUG
        _M_is_ready = false;
 #endif
@@ -435,6 +439,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       std::vector<_CharT>                       _M_char_set;
       std::vector<_StringT>                     _M_equiv_set;
       std::vector<pair<_StrTransT, _StrTransT>> _M_range_set;
+      std::vector<_CharClassT>                  _M_neg_class_set;
       _CharClassT                               _M_class_set;
       _TransT                                   _M_translator;
       const _TraitsT&                           _M_traits;
index 128dac1..14e40c0 100644 (file)
@@ -397,7 +397,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       _GLIBCXX_DEBUG_ASSERT(_M_value.size() == 1);
       _BracketMatcher<_TraitsT, __icase, __collate> __matcher
        (_M_ctype.is(_CtypeT::upper, _M_value[0]), _M_traits);
-      __matcher._M_add_character_class(_M_value);
+      __matcher._M_add_character_class(_M_value, false);
       __matcher._M_ready();
       _M_stack.push(_StateSeqT(_M_nfa,
        _M_nfa._M_insert_matcher(std::move(__matcher))));
@@ -428,7 +428,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       else if (_M_match_token(_ScannerT::_S_token_equiv_class_name))
        __matcher._M_add_equivalence_class(_M_value);
       else if (_M_match_token(_ScannerT::_S_token_char_class_name))
-       __matcher._M_add_character_class(_M_value);
+       __matcher._M_add_character_class(_M_value, false);
       else if (_M_try_char()) // [a
        {
          auto __ch = _M_value[0];
@@ -451,6 +451,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
            }
          __matcher._M_add_char(__ch);
        }
+      else if (_M_match_token(_ScannerT::_S_token_quoted_class))
+       __matcher._M_add_character_class(_M_value,
+                                        _M_ctype.is(_CtypeT::upper,
+                                                    _M_value[0]));
       else
        __throw_regex_error(regex_constants::error_brack);
     }
@@ -527,6 +531,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
                             _M_traits.transform_primary(&__ch, &__ch+1))
                   != _M_equiv_set.end())
            __ret = true;
+         else
+           {
+             for (auto& __it : _M_neg_class_set)
+               if (!_M_traits.isctype(__ch, __it))
+                 {
+                   __ret = true;
+                   break;
+                 }
+           }
        }
       if (_M_is_non_matching)
        return !__ret;
index 68a5e04..052302b 100644 (file)
@@ -120,10 +120,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
              if (_M_match_queue->empty())
                break;
              _M_visited->assign(_M_visited->size(), false);
-             auto _M_old_queue = std::move(*_M_match_queue);
-             for (auto __task : _M_old_queue)
+             auto __old_queue = std::move(*_M_match_queue);
+             for (auto& __task : __old_queue)
                {
-                 _M_cur_results = __task.second;
+                 _M_cur_results = std::move(__task.second);
                  _M_dfs<__match_mode>(__task.first);
                }
              if (!__match_mode)
index 536df01..026c597 100644 (file)
@@ -871,7 +871,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
         : _M_ptr(__p), _M_refcount(__p)
        {
          __glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>)
-         static_assert( !is_void<_Tp>::value, "incomplete type" );
+         static_assert( !is_void<_Tp1>::value, "incomplete type" );
          static_assert( sizeof(_Tp1) > 0, "incomplete type" );
          __enable_shared_from_this_helper(_M_refcount, __p, __p);
        }
index 1d2a524..aa3581e 100644 (file)
@@ -736,21 +736,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
                      _Container>::__type>& __i) _GLIBCXX_NOEXCEPT
         : _M_current(__i.base()) { }
 
-#if __cplusplus >= 201103L
-      __normal_iterator<typename _Container::pointer, _Container>
-      _M_const_cast() const noexcept
-      {
-       using _PTraits = std::pointer_traits<typename _Container::pointer>;
-       return __normal_iterator<typename _Container::pointer, _Container>
-         (_PTraits::pointer_to(const_cast<typename _PTraits::element_type&>
-                               (*_M_current)));
-      }
-#else
-      __normal_iterator
-      _M_const_cast() const
-      { return *this; }
-#endif
-
       // Forward iterator requirements
       reference
       operator*() const _GLIBCXX_NOEXCEPT
index 4bc3c60..ce43ab8 100644 (file)
@@ -526,11 +526,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
       _Link_type
       _M_end() _GLIBCXX_NOEXCEPT
-      { return static_cast<_Link_type>(&this->_M_impl._M_header); }
+      { return reinterpret_cast<_Link_type>(&this->_M_impl._M_header); }
 
       _Const_Link_type
       _M_end() const _GLIBCXX_NOEXCEPT
-      { return static_cast<_Const_Link_type>(&this->_M_impl._M_header); }
+      { return reinterpret_cast<_Const_Link_type>(&this->_M_impl._M_header); }
 
       static const_reference
       _S_value(_Const_Link_type __x)
@@ -1073,6 +1073,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
     _M_move_assign(_Rb_tree& __x)
     {
+      _M_impl._M_key_compare = __x._M_impl._M_key_compare;
       if (_Alloc_traits::_S_propagate_on_move_assign()
          || _Alloc_traits::_S_always_equal()
          || _M_get_Node_allocator() == __x._M_get_Node_allocator())
index 7e52fde..c33e2c6 100644 (file)
@@ -1051,7 +1051,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
       insert(const_iterator __position, size_type __n, const value_type& __x)
       {
        difference_type __offset = __position - cbegin();
-       _M_fill_insert(__position._M_const_cast(), __n, __x);
+       _M_fill_insert(begin() + __offset, __n, __x);
        return begin() + __offset;
       }
 #else
@@ -1096,7 +1096,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
               _InputIterator __last)
         {
          difference_type __offset = __position - cbegin();
-         _M_insert_dispatch(__position._M_const_cast(),
+         _M_insert_dispatch(begin() + __offset,
                             __first, __last, __false_type());
          return begin() + __offset;
        }
@@ -1144,10 +1144,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
       iterator
 #if __cplusplus >= 201103L
       erase(const_iterator __position)
+      { return _M_erase(begin() + (__position - cbegin())); }
 #else
       erase(iterator __position)
+      { return _M_erase(__position); }
 #endif
-      { return _M_erase(__position._M_const_cast()); }
 
       /**
        *  @brief  Remove a range of elements.
@@ -1170,10 +1171,15 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
       iterator
 #if __cplusplus >= 201103L
       erase(const_iterator __first, const_iterator __last)
+      {
+       const auto __beg = begin();
+       const auto __cbeg = cbegin();
+       return _M_erase(__beg + (__first - __cbeg), __beg + (__last - __cbeg));
+      }
 #else
       erase(iterator __first, iterator __last)
+      { return _M_erase(__first, __last); }
 #endif
-      { return _M_erase(__first._M_const_cast(), __last._M_const_cast()); }
 
       /**
        *  @brief  Swaps data with another %vector.
index 1eff514..c937b38 100644 (file)
@@ -121,14 +121,17 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
       else
        {
 #if __cplusplus >= 201103L
+         const auto __pos = begin() + (__position - cbegin());
          if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
            {
              _Tp __x_copy = __x;
-             _M_insert_aux(__position._M_const_cast(), std::move(__x_copy));
+             _M_insert_aux(__pos, std::move(__x_copy));
            }
          else
+           _M_insert_aux(__pos, __x);
+#else
+           _M_insert_aux(__position, __x);
 #endif
-           _M_insert_aux(__position._M_const_cast(), __x);
        }
       return iterator(this->_M_impl._M_start + __n);
     }
@@ -307,7 +310,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
            ++this->_M_impl._M_finish;
          }
        else
-         _M_insert_aux(__position._M_const_cast(),
+         _M_insert_aux(begin() + (__position - cbegin()),
                        std::forward<_Args>(__args)...);
        return iterator(this->_M_impl._M_start + __n);
       }
index 2e9cd65..f7f54ee 100644 (file)
@@ -602,7 +602,7 @@ namespace __debug
          }
        else
 #if __cplusplus >= 201103L
-         return iterator(__first.base()._M_const_cast(), this);
+         return begin() + (__first.base() - cbegin().base());
 #else
          return __first;
 #endif
index 5f2d93f..2a3f29d 100644 (file)
@@ -736,12 +736,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   template<typename _Tp>
     constexpr bool
     operator!=(const optional<_Tp>& __lhs, _Tp const& __rhs)
-    { return !__lhs || *__lhs != __rhs; }
+    { return !__lhs || !(*__lhs == __rhs); }
 
   template<typename _Tp>
     constexpr bool
     operator!=(const _Tp& __lhs, const optional<_Tp>& __rhs)
-    { return !__rhs || __lhs != *__rhs; }
+    { return !__rhs || !(__lhs == *__rhs); }
 
   template<typename _Tp>
     constexpr bool
index 5a987d9..0e80fa3 100644 (file)
@@ -2149,8 +2149,15 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
        using _Invoke = decltype(__callable_functor(std::declval<_Functor&>())
                                 (std::declval<_ArgTypes>()...) );
 
+      // Used so the return type convertibility checks aren't done when
+      // performing overload resolution for copy construction/assignment.
+      template<typename _Tp>
+       using _NotSelf = __not_<is_same<_Tp, function>>;
+
       template<typename _Functor>
-       using _Callable = __check_func_return_type<_Invoke<_Functor>, _Res>;
+       using _Callable
+         = __and_<_NotSelf<_Functor>,
+                  __check_func_return_type<_Invoke<_Functor>, _Res>>;
 
       template<typename _Cond, typename _Tp>
        using _Requires = typename enable_if<_Cond::value, _Tp>::type;
@@ -2291,7 +2298,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
        *  reference_wrapper<F>, this function will not throw.
        */
       template<typename _Functor>
-       _Requires<_Callable<_Functor>, function&>
+       _Requires<_Callable<typename decay<_Functor>::type>, function&>
        operator=(_Functor&& __f)
        {
          function(std::forward<_Functor>(__f)).swap(*this);
index 717ce71..998e90a 100644 (file)
@@ -365,12 +365,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       void
       _M_set_result(function<_Ptr_type()> __res, bool __ignore_failure = false)
       {
-        bool __set = __ignore_failure;
+        bool __set = false;
         // all calls to this function are serialized,
         // side-effects of invoking __res only happen once
         call_once(_M_once, &_State_baseV2::_M_do_set, this, ref(__res),
             ref(__set));
-        if (!__set)
+       if (__set)
+         _M_cond.notify_all();
+       else if (!__ignore_failure)
           __throw_future_error(int(future_errc::promise_already_satisfied));
       }
 
@@ -485,7 +487,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
           lock_guard<mutex> __lock(_M_mutex);
           _M_result.swap(__res);
         }
-        _M_cond.notify_all();
         __set = true;
       }
 
@@ -495,6 +496,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       virtual void _M_complete_async() { }
 
       // Return true if state contains a deferred function.
+      // Caller must own _M_mutex.
       virtual bool _M_has_deferred() const { return false; }
     };
 
@@ -1007,22 +1009,25 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       void
       set_value(const _Res& __r)
       {
+       auto __future = _M_future;
         auto __setter = _State::__setter(this, __r);
-        _M_future->_M_set_result(std::move(__setter));
+        __future->_M_set_result(std::move(__setter));
       }
 
       void
       set_value(_Res&& __r)
       {
+       auto __future = _M_future;
         auto __setter = _State::__setter(this, std::move(__r));
-        _M_future->_M_set_result(std::move(__setter));
+        __future->_M_set_result(std::move(__setter));
       }
 
       void
       set_exception(exception_ptr __p)
       {
+       auto __future = _M_future;
         auto __setter = _State::__setter(__p, this);
-        _M_future->_M_set_result(std::move(__setter));
+        __future->_M_set_result(std::move(__setter));
       }
     };
 
@@ -1105,15 +1110,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       void
       set_value(_Res& __r)
       {
+       auto __future = _M_future;
         auto __setter = _State::__setter(this, __r);
-        _M_future->_M_set_result(std::move(__setter));
+        __future->_M_set_result(std::move(__setter));
       }
 
       void
       set_exception(exception_ptr __p)
       {
+       auto __future = _M_future;
         auto __setter = _State::__setter(__p, this);
-        _M_future->_M_set_result(std::move(__setter));
+        __future->_M_set_result(std::move(__setter));
       }
     };
 
@@ -1190,8 +1197,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       void
       set_exception(exception_ptr __p)
       {
+       auto __future = _M_future;
         auto __setter = _State::__setter(__p, this);
-        _M_future->_M_set_result(std::move(__setter));
+        __future->_M_set_result(std::move(__setter));
       }
     };
 
@@ -1217,8 +1225,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   inline void
   promise<void>::set_value()
   {
+    auto __future = _M_future;
     auto __setter = _State::__setter(this);
-    _M_future->_M_set_result(std::move(__setter));
+    __future->_M_set_result(std::move(__setter));
   }
 
 
index 73822db..cc6f60c 100644 (file)
@@ -41,6 +41,9 @@
 
 #if __cplusplus >= 201103L
 #include <locale>
+#if __cplusplus > 201103L
+#include <sstream> // used in quoted.
+#endif
 #endif
 
 namespace std _GLIBCXX_VISIBILITY(default)
@@ -342,7 +345,6 @@ _GLIBCXX_END_NAMESPACE_VERSION
 
     /**
      * @brief Struct for delimited strings.
-     *        The left and right delimiters can be different.
      */
     template<typename _String, typename _CharT>
       struct _Quoted_string
@@ -364,45 +366,51 @@ _GLIBCXX_END_NAMESPACE_VERSION
       };
 
     /**
-     * @brief Inserter for delimited strings.
-     *        The left and right delimiters can be different.
+     * @brief Inserter for quoted strings.
+     *
+     *  _GLIBCXX_RESOLVE_LIB_DEFECTS
+     *  DR 2344 quoted()'s interaction with padding is unclear
      */
     template<typename _CharT, typename _Traits>
       auto&
       operator<<(std::basic_ostream<_CharT, _Traits>& __os,
                 const _Quoted_string<const _CharT*, _CharT>& __str)
       {
-       __os << __str._M_delim;
+       std::basic_ostringstream<_CharT, _Traits> __ostr;
+       __ostr << __str._M_delim;
        for (const _CharT* __c = __str._M_string; *__c; ++__c)
          {
            if (*__c == __str._M_delim || *__c == __str._M_escape)
-             __os << __str._M_escape;
-           __os << *__c;
+             __ostr << __str._M_escape;
+           __ostr << *__c;
          }
-       __os << __str._M_delim;
+       __ostr << __str._M_delim;
 
-       return __os;
+       return __os << __ostr.str();
       }
 
     /**
-     * @brief Inserter for delimited strings.
-     *        The left and right delimiters can be different.
+     * @brief Inserter for quoted strings.
+     *
+     *  _GLIBCXX_RESOLVE_LIB_DEFECTS
+     *  DR 2344 quoted()'s interaction with padding is unclear
      */
     template<typename _CharT, typename _Traits, typename _String>
       auto&
       operator<<(std::basic_ostream<_CharT, _Traits>& __os,
                 const _Quoted_string<_String, _CharT>& __str)
       {
-       __os << __str._M_delim;
+       std::basic_ostringstream<_CharT, _Traits> __ostr;
+       __ostr << __str._M_delim;
        for (auto& __c : __str._M_string)
          {
            if (__c == __str._M_delim || __c == __str._M_escape)
-             __os << __str._M_escape;
-           __os << __c;
+             __ostr << __str._M_escape;
+           __ostr << __c;
          }
-       __os << __str._M_delim;
+       __ostr << __str._M_delim;
 
-       return __os;
+       return __os << __ostr.str();
       }
 
     /**
index 85d2b95..5c10869 100644 (file)
@@ -48,13 +48,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
    *
    *  The &lt;iostream&gt; header declares the eight <em>standard stream
    *  objects</em>.  For other declarations, see
-   *  http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt11ch24.html
+   *  http://gcc.gnu.org/onlinedocs/libstdc++/manual/io.html
    *  and the @link iosfwd I/O forward declarations @endlink
    *
    *  They are required by default to cooperate with the global C
    *  library's @c FILE streams, and to be available during program
-   *  startup and termination. For more information, see the HOWTO
-   *  linked to above.
+   *  startup and termination. For more information, see the section of the
+   *  manual linked to above.
   */
   //@{
   extern istream cin;          /// Linked to standard input
index 92ecdb9..103c99e 100644 (file)
@@ -710,27 +710,28 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       add_cv<typename tuple_element<__i, _Tp>::type>::type type;
     };
 
+#if __cplusplus > 201103L
+  template<std::size_t __i, typename _Tp>
+    using tuple_element_t = typename tuple_element<__i, _Tp>::type;
+#endif
+
   /// Finds the size of a given tuple type.
   template<typename _Tp>
     struct tuple_size;
 
+  // _GLIBCXX_RESOLVE_LIB_DEFECTS
+  // 2313. tuple_size should always derive from integral_constant<size_t, N>
   template<typename _Tp>
     struct tuple_size<const _Tp>
-    : public integral_constant<
-             typename remove_cv<decltype(tuple_size<_Tp>::value)>::type,
-             tuple_size<_Tp>::value> { };
+    : public integral_constant<size_t, tuple_size<_Tp>::value> { };
 
   template<typename _Tp>
     struct tuple_size<volatile _Tp>
-    : public integral_constant<
-             typename remove_cv<decltype(tuple_size<_Tp>::value)>::type,
-             tuple_size<_Tp>::value> { };
+    : public integral_constant<size_t, tuple_size<_Tp>::value> { };
 
   template<typename _Tp>
     struct tuple_size<const volatile _Tp>
-    : public integral_constant<
-             typename remove_cv<decltype(tuple_size<_Tp>::value)>::type,
-             tuple_size<_Tp>::value> { };
+    : public integral_constant<size_t, tuple_size<_Tp>::value> { };
 
   /// class tuple_size
   template<typename... _Elements>
@@ -747,23 +748,23 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     __get_helper(const _Tuple_impl<__i, _Head, _Tail...>& __t) noexcept
     { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); }
 
-  // Return a reference (const reference, rvalue reference) to the ith element
-  // of a tuple.  Any const or non-const ref elements are returned with their
-  // original type.
+  /// Return a reference to the ith element of a tuple.
   template<std::size_t __i, typename... _Elements>
     constexpr typename __add_ref<
                       typename tuple_element<__i, tuple<_Elements...>>::type
                     >::type
     get(tuple<_Elements...>& __t) noexcept
-    { return __get_helper<__i>(__t); }
+    { return std::__get_helper<__i>(__t); }
 
+  /// Return a const reference to the ith element of a const tuple.
   template<std::size_t __i, typename... _Elements>
     constexpr typename __add_c_ref<
                       typename tuple_element<__i, tuple<_Elements...>>::type
                     >::type
     get(const tuple<_Elements...>& __t) noexcept
-    { return __get_helper<__i>(__t); }
+    { return std::__get_helper<__i>(__t); }
 
+  /// Return an rvalue reference to the ith element of a tuple rvalue.
   template<std::size_t __i, typename... _Elements>
     constexpr typename __add_r_ref<
                       typename tuple_element<__i, tuple<_Elements...>>::type
@@ -783,22 +784,26 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     __get_helper2(const _Tuple_impl<__i, _Head, _Tail...>& __t) noexcept
     { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); }
 
+  /// Return a reference to the unique element of type _Tp of a tuple.
   template <typename _Tp, typename... _Types>
     constexpr _Tp&
     get(tuple<_Types...>& __t) noexcept
-    { return __get_helper2<_Tp>(__t); }
+    { return std::__get_helper2<_Tp>(__t); }
 
+  /// Return a reference to the unique element of type _Tp of a tuple rvalue.
   template <typename _Tp, typename... _Types>
     constexpr _Tp&&
     get(tuple<_Types...>&& __t) noexcept
-    { return std::move(__get_helper2<_Tp>(__t)); }
+    { return std::forward<_Tp&&>(std::__get_helper2<_Tp>(__t)); }
 
+  /// Return a const reference to the unique element of type _Tp of a tuple.
   template <typename _Tp, typename... _Types>
     constexpr const _Tp&
     get(const tuple<_Types...>& __t) noexcept
-    { return __get_helper2<_Tp>(__t); }
+    { return std::__get_helper2<_Tp>(__t); }
 #endif
 
+
   // This class helps construct the various comparison operations on tuples
   template<std::size_t __check_equal_size, std::size_t __i, std::size_t __j,
           typename _Tp, typename _Up>
index 4b434a6..1ff2e62 100644 (file)
 
 #include <bits/c++config.h>
 
+#ifdef _GLIBCXX_USE_C99_STDINT_TR1
+# if defined (__UINT_LEAST16_TYPE__) && defined(__UINT_LEAST32_TYPE__)
+namespace std
+{
+  typedef __UINT_LEAST16_TYPE__ uint_least16_t;
+  typedef __UINT_LEAST32_TYPE__ uint_least32_t;
+}
+# else
+#  include <cstdint>
+# endif
+#endif
+
 namespace std _GLIBCXX_VISIBILITY(default)
 {
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
@@ -1583,6 +1595,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     struct __make_unsigned<long long>
     { typedef unsigned long long __type; };
 
+#if defined(_GLIBCXX_USE_WCHAR_T) && !defined(__WCHAR_UNSIGNED__)
+  template<>
+    struct __make_unsigned<wchar_t> : __make_unsigned<__WCHAR_TYPE__>
+    { };
+#endif
+
 #if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128)
   template<>
     struct __make_unsigned<__int128>
@@ -1665,6 +1683,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     struct __make_signed<unsigned long long>
     { typedef signed long long __type; };
 
+#if defined(_GLIBCXX_USE_WCHAR_T) && defined(__WCHAR_UNSIGNED__)
+  template<>
+    struct __make_signed<wchar_t> : __make_signed<__WCHAR_TYPE__>
+    { };
+#endif
+
+#ifdef _GLIBCXX_USE_C99_STDINT_TR1
+  template<>
+    struct __make_signed<char16_t> : __make_signed<uint_least16_t>
+    { };
+  template<>
+    struct __make_signed<char32_t> : __make_signed<uint_least32_t>
+    { };
+#endif
+
 #if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128)
   template<>
     struct __make_signed<unsigned __int128>
index d97714c..34e58f4 100644 (file)
@@ -44,7 +44,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
    *  bool_set
    *
    *  See N2136, Bool_set: multi-valued logic
-   *  by Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion.
+   *  by Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion.
    *
    *  The implicit conversion to bool is slippery!  I may use the new
    *  explicit conversion.  This has been specialized in the language
index 05da17b..1f1f860 100644 (file)
@@ -375,6 +375,22 @@ class RbtreeIterator:
             self.node = node
         return result
 
+def get_value_from_Rb_tree_node(node):
+    """Returns the value held in an _Rb_tree_node<_Val>"""
+    try:
+        member = node.type.fields()[1].name
+        if member == '_M_value_field':
+            # C++03 implementation, node contains the value as a member
+            return node['_M_value_field']
+        elif member == '_M_storage':
+            # C++11 implementation, node stores value in __aligned_buffer
+            p = node['_M_storage']['_M_storage'].address
+            p = p.cast(node.type.template_argument(0).pointer())
+            return p.dereference()
+    except:
+        pass
+    raise ValueError, "Unsupported implementation for %s" % str(node.type)
+
 # This is a pretty printer for std::_Rb_tree_iterator (which is
 # std::map::iterator), and has nothing to do with the RbtreeIterator
 # class above.
@@ -387,7 +403,8 @@ class StdRbtreeIteratorPrinter:
     def to_string (self):
         typename = str(self.val.type.strip_typedefs()) + '::_Link_type'
         nodetype = gdb.lookup_type(typename).strip_typedefs()
-        return self.val.cast(nodetype).dereference()['_M_value_field']
+        node = self.val.cast(nodetype).dereference()
+        return get_value_from_Rb_tree_node(node)
 
 class StdDebugIteratorPrinter:
     "Print a debug enabled version of an iterator"
@@ -417,7 +434,8 @@ class StdMapPrinter:
         def next(self):
             if self.count % 2 == 0:
                 n = self.rbiter.next()
-                n = n.cast(self.type).dereference()['_M_value_field']
+                n = n.cast(self.type).dereference()
+                n = get_value_from_Rb_tree_node(n)
                 self.pair = n
                 item = n['first']
             else:
@@ -458,7 +476,8 @@ class StdSetPrinter:
 
         def next(self):
             item = self.rbiter.next()
-            item = item.cast(self.type).dereference()['_M_value_field']
+            item = item.cast(self.type).dereference()
+            item = get_value_from_Rb_tree_node(item)
             # FIXME: this is weird ... what to do?
             # Maybe a 'set' display hint?
             result = ('[%d]' % self.count, item)
index c81bc18..8f59936 100644 (file)
@@ -193,8 +193,15 @@ fi
 if $do_latex; then
     cd ${outdir}/${mode}
 
-    # Also drop in the header file and style sheet
-    doxygen -w latex header.tex doxygen.sty
+    # Grrr, Doxygen 1.8.x changed the -w latex options.
+    need_footer=`doxygen -h | sed -n -e '/-w latex/s=.*footer.*=true=p'`
+
+    # Also drop in the header file (maybe footer file) and style sheet
+    if $need_footer; then
+      doxygen -w latex header.tex footer.tex doxygen.sty
+    else
+      doxygen -w latex header.tex doxygen.sty
+    fi
     
     echo ::
     echo :: LaTeX pages begin with
index d8d2a0d..b5c14f2 100644 (file)
@@ -37,7 +37,7 @@ namespace __gnu_internal _GLIBCXX_VISIBILITY(hidden)
 {
   using namespace __gnu_cxx;
 
-  // Extern declarations for global objects in src/globals.cc.
+  // Extern declarations for global objects in src/c++98/globals.cc.
   extern stdio_sync_filebuf<char> buf_cout_sync;
   extern stdio_sync_filebuf<char> buf_cin_sync;
   extern stdio_sync_filebuf<char> buf_cerr_sync;
index a744d83..04e6b71 100644 (file)
@@ -19,7 +19,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-// { dg-error "static assertion failed" "" { target *-*-* } 2003 }
+// { dg-error "static assertion failed" "" { target *-*-* } 2036 }
 
 #include <utility>
 
diff --git a/libstdc++-v3/testsuite/20_util/function/60594.cc b/libstdc++-v3/testsuite/20_util/function/60594.cc
new file mode 100644 (file)
index 0000000..be80b3f
--- /dev/null
@@ -0,0 +1,36 @@
+// { dg-options "-std=gnu++11" }
+// { dg-do compile }
+
+// Copyright (C) 2011-2014 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/>.
+
+// libstdc++/60594
+
+#include <functional>
+#include <type_traits>
+struct bar;
+using F = std::function<bar()>;
+// check for copy constructible and assignable while 'bar' is incomplete
+constexpr int c = std::is_copy_constructible<F>::value;
+constexpr int a = std::is_copy_assignable<F>::value;
+struct bar { };
+bar func();
+void test()
+{
+  F g{ &func };
+  g = func;
+}
index e3b84d6..5b094d9 100644 (file)
@@ -29,6 +29,7 @@ void test01()
   using std::make_signed;
   using std::is_same;
   using std::is_signed;
+  using std::is_volatile;
 
   // Positive tests.
   typedef make_signed<const int>::type         test2_type;
@@ -53,7 +54,9 @@ void test01()
 
 #ifdef _GLIBCXX_USE_WCHAR_T
   typedef make_signed<volatile wchar_t>::type          test23_type;
-  static_assert( is_same<test23_type, volatile signed wchar_t>::value,
+  static_assert( is_signed<test23_type>::value
+                 && is_volatile<test23_type>::value
+                 && sizeof(test23_type) == sizeof(volatile wchar_t),
                  "make_signed<volatile wchar_t>" );
 #endif
 
index 654b375..3f47dba 100644 (file)
@@ -30,6 +30,8 @@ void test01()
 {
   using std::make_signed;
   using std::is_same;
+  using std::is_signed;
+  using std::is_volatile;
 
   // Positive tests.
   typedef make_signed<const int>::type         test2_type;
@@ -50,7 +52,9 @@ void test01()
 
 #ifdef _GLIBCXX_USE_WCHAR_T
   typedef make_signed<volatile wchar_t>::type          test23_type;
-  static_assert(is_same<test23_type, volatile signed wchar_t>::value, "");
+  static_assert(is_signed<test23_type>::value
+                 && is_volatile<test23_type>::value
+                 && sizeof(test23_type) == sizeof(volatile wchar_t), "");
 #endif
 
   typedef make_signed<test_enum>::type         test24_type;
diff --git a/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-4.cc b/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-4.cc
new file mode 100644 (file)
index 0000000..4950e54
--- /dev/null
@@ -0,0 +1,33 @@
+// { dg-options "-std=gnu++11" }
+// { dg-do compile }
+// { dg-require-cstdint "" }
+
+// Copyright (C) 2014 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 <type_traits>
+
+// libstdc++/60326
+
+using namespace std;
+#ifdef _GLIBCXX_USE_WCHAR_T
+using wchar_signed = make_signed<wchar_t>::type;
+using wchar_unsigned = make_unsigned<wchar_t>::type;
+static_assert( !is_same<wchar_signed, wchar_unsigned>::value, "wchar_t" );
+#endif
+static_assert( is_signed<make_signed<char16_t>::type>::value, "char16_t");
+static_assert( is_signed<make_signed<char32_t>::type>::value, "char32_t");
index 9f155ea..d711546 100644 (file)
@@ -48,5 +48,5 @@ void test01()
 // { dg-error "required from here" "" { target *-*-* } 40 }
 // { dg-error "required from here" "" { target *-*-* } 42 }
 
-// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1714 }
-// { dg-error "declaration of" "" { target *-*-* } 1678 }
+// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1747 }
+// { dg-error "declaration of" "" { target *-*-* } 1711 }
index f07cf4a..de65504 100644 (file)
@@ -29,6 +29,7 @@ void test01()
   using std::make_unsigned;
   using std::is_same;
   using std::is_unsigned;
+  using std::is_volatile;
 
   // Positive tests.
   typedef make_unsigned<const unsigned int>::type      test2_type;
@@ -49,7 +50,9 @@ void test01()
 
 #ifdef _GLIBCXX_USE_WCHAR_T
   typedef make_unsigned<volatile wchar_t>::type        test23_type;
-  static_assert(is_same<test23_type, volatile wchar_t>::value, "");
+  static_assert(is_unsigned<test23_type>::value
+                && is_volatile<test23_type>::value
+                && sizeof(test23_type) == sizeof(volatile wchar_t), "");
 #endif
 
   // Chapter 48, chapter 20. Smallest rank such that new unsigned type
index 8997fb7..7801dca 100644 (file)
@@ -30,6 +30,8 @@ void test01()
 {
   using std::make_unsigned;
   using std::is_same;
+  using std::is_unsigned;
+  using std::is_volatile;
 
   // Positive tests.
   typedef make_unsigned<const unsigned int>::type      test2_type;
@@ -50,7 +52,9 @@ void test01()
 
 #ifdef _GLIBCXX_USE_WCHAR_T
   typedef make_unsigned<volatile wchar_t>::type        test23_type;
-  static_assert(is_same<test23_type, volatile wchar_t>::value, "");
+  static_assert(is_unsigned<test23_type>::value
+                && is_volatile<test23_type>::value
+                && sizeof(test23_type) == sizeof(volatile wchar_t), "");
 #endif
 
   typedef make_unsigned<test_enum>::type         test24_type;
index 57a5c61..c77205b 100644 (file)
@@ -48,5 +48,5 @@ void test01()
 // { dg-error "required from here" "" { target *-*-* } 40 }
 // { dg-error "required from here" "" { target *-*-* } 42 }
 
-// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1632 }
-// { dg-error "declaration of" "" { target *-*-* } 1596 }
+// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1650 }
+// { dg-error "declaration of" "" { target *-*-* } 1614 }
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/61036.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/61036.cc
new file mode 100644 (file)
index 0000000..9cade66
--- /dev/null
@@ -0,0 +1,28 @@
+// { dg-options "-std=gnu++11" }
+// { dg-do compile }
+
+// Copyright (C) 2014 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/>.
+
+// 20.8.2.2 Template class shared_ptr [util.smartptr.shared]
+
+#include <memory>
+
+void test01()
+{
+  std::shared_ptr<void> p(new int);
+}
diff --git a/libstdc++-v3/testsuite/20_util/tuple/60497.cc b/libstdc++-v3/testsuite/20_util/tuple/60497.cc
new file mode 100644 (file)
index 0000000..76d4223
--- /dev/null
@@ -0,0 +1,37 @@
+// { dg-options "-std=gnu++14" }
+// { dg-do compile }
+
+// Copyright (C) 2014 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/>.
+
+// libstdc++/60497
+
+#include <tuple>
+
+struct A;
+template<typename T> struct B { T t; };
+
+using element_type = B<A>*;
+using tuple_type = std::tuple<element_type>;
+
+tuple_type t;
+const tuple_type ct;
+
+auto a = std::get<0>(t);
+auto b = std::get<0>(ct);
+auto c = std::get<element_type>(t);
+auto d = std::get<element_type>(ct);
index 226e9e4..042f214 100644 (file)
@@ -41,4 +41,8 @@ main()
   get<1>(b)=5;
   VERIFY(get<int>(b)==1 && get<int&>(b)==5 && get<const int&>(b)==2);
   VERIFY(j==5);
+  // test rvalue overload:
+  VERIFY(get<int>(std::move(b))==1);
+  VERIFY(get<int&>(std::move(b))==5);
+  VERIFY(get<const int&>(std::move(b))==2);
 }
index 0dbdf10..3ff8e82 100644 (file)
@@ -1,4 +1,5 @@
-// { dg-options "-std=gnu++0x" }
+// { dg-options "-std=gnu++11" }
+// { dg-do compile }
 
 // Copyright (C) 2007-2014 Free Software Foundation, Inc.
 //
diff --git a/libstdc++-v3/testsuite/20_util/tuple/tuple_element_t.cc b/libstdc++-v3/testsuite/20_util/tuple/tuple_element_t.cc
new file mode 100644 (file)
index 0000000..e46af5c
--- /dev/null
@@ -0,0 +1,36 @@
+// { dg-options "-std=gnu++14" }
+// { dg-do compile }
+
+// Copyright (C) 2014 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 <tuple>
+
+using namespace std;
+
+struct foo
+{ };
+
+int
+main()
+{
+  // As foo isn't constructible from anything else, this
+  // lets us check if the alias is returning foo when it should
+  foo q1;
+  tuple_element_t<0,tuple<foo,void,int> > q2(q1);
+  tuple_element_t<2,tuple<void,int,foo> > q3(q1);
+}
diff --git a/libstdc++-v3/testsuite/23_containers/set/cons/61023.cc b/libstdc++-v3/testsuite/23_containers/set/cons/61023.cc
new file mode 100644 (file)
index 0000000..087b9cc
--- /dev/null
@@ -0,0 +1,56 @@
+// { dg-options "-std=gnu++11" }
+
+// Copyright (C) 2014 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 <set>
+#include <stdexcept>
+
+struct Comparator
+{
+  Comparator() : valid(false) { }
+  explicit Comparator(bool) : valid(true) { }
+
+  bool operator()(int i, int j) const
+  {
+    if (!valid)
+      throw std::logic_error("Comparator is invalid");
+    return i < j;
+  }
+
+private:
+  bool valid;
+};
+
+int main()
+{
+  using test_type = std::set<int, Comparator>;
+
+  Comparator cmp{true};
+
+  test_type good{cmp};
+
+  test_type s1;
+  s1 = good;             // copy-assign
+  s1.insert(1);
+  s1.insert(2);
+
+  test_type s2;
+  s2 = std::move(good);  // move-assign
+  s2.insert(1);
+  s2.insert(2);
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/61143.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/61143.cc
new file mode 100644 (file)
index 0000000..b946425
--- /dev/null
@@ -0,0 +1,38 @@
+// { dg-options "-std=gnu++11" }
+
+// Copyright (C) 2014 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/>.
+
+// libstdc++/61143
+
+#include <unordered_set>
+
+void test01()
+{
+  std::unordered_set<int> us1, us2;
+  us1.insert(1);
+
+  us2 = std::move(us1);
+
+  us1.insert(1);
+}
+
+int main()
+{
+  test01();
+  return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/swap.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/swap.cc
new file mode 100644 (file)
index 0000000..d03fd1d
--- /dev/null
@@ -0,0 +1,65 @@
+// Copyright (C) 2014 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++11" }
+
+#include <unordered_set>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+  bool test __attribute__((unused)) = true;
+  std::unordered_set<int> us1 { 0, 1 };
+  {
+    std::unordered_set<int> us2(std::move(us1));
+
+    us1.swap(us2);
+
+    VERIFY( us1.find(0) != us1.end() );
+
+    us1.insert(2);
+
+    VERIFY( us1.size() == 3 );
+
+    us2.swap(us1);
+
+    VERIFY( us2.size() == 3 );
+    VERIFY( us2.find(2) != us2.end() );
+
+    us1 = { 3, 4, 5 };
+
+    VERIFY( us1.size() == 3 );
+    VERIFY( us1.bucket_count() >= 3 );
+
+    std::unordered_set<int> us3(std::move(us1));
+    us3 = std::move(us2);
+
+    us1.swap(us2);
+
+    VERIFY( us1.empty() );
+    VERIFY( us2.empty() );
+  }
+
+  us1 = { 0, 1 };
+  VERIFY( us1.size() == 2 );
+}
+
+int main()
+{
+  test01();
+  return 0;
+}
index 191fbc7..655c7e8 100644 (file)
@@ -18,7 +18,7 @@
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1320 }
+// { dg-error "no matching" "" { target *-*-* } 1326 }
 
 #include <vector>
 
index 8818a88..d938aa2 100644 (file)
@@ -18,7 +18,7 @@
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1246 }
+// { dg-error "no matching" "" { target *-*-* } 1252 }
 
 #include <vector>
 
index 09499bc..f888285 100644 (file)
@@ -18,7 +18,7 @@
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1246 }
+// { dg-error "no matching" "" { target *-*-* } 1252 }
 
 #include <vector>
 #include <utility>
index 674e3b5..316249b 100644 (file)
@@ -18,7 +18,7 @@
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1361 }
+// { dg-error "no matching" "" { target *-*-* } 1367 }
 
 #include <vector>
 
diff --git a/libstdc++-v3/testsuite/27_io/manipulators/standard/char/dr2344.cc b/libstdc++-v3/testsuite/27_io/manipulators/standard/char/dr2344.cc
new file mode 100644 (file)
index 0000000..e220d35
--- /dev/null
@@ -0,0 +1,50 @@
+// { dg-do run }
+// { dg-options "-std=gnu++14" }
+
+// Copyright (C) 2014 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/>.
+
+// 27.7.6 - Quoted manipulators                [quoted.manip]
+
+#include <sstream>
+#include <iomanip>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+  bool test [[gnu::unused]] = true;
+
+  std::ostringstream ssx;
+  ssx << "[" << std::left << std::setfill('x') << std::setw(20) << R"("AB \"CD\" EF")" << "]";
+  VERIFY( ssx.str() == R"(["AB \"CD\" EF"xxxxxx])" );
+
+  std::ostringstream ssy;
+  ssy << "[" << std::left << std::setfill('y') << std::setw(20) << std::quoted(R"(GH "IJ" KL)") << "]";
+  VERIFY( ssy.str() == R"(["GH \"IJ\" KL"yyyyyy])" );
+
+  std::ostringstream ssz;
+  ssz << "[" << std::right << std::setfill('z') << std::setw(20) << std::quoted(R"(PQ "RS" TU)") << "]";
+  VERIFY( ssz.str() == R"([zzzzzz"PQ \"RS\" TU"])" );
+}
+
+int
+main()
+{
+  test01();
+  return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/manipulators/standard/wchar_t/dr2344.cc b/libstdc++-v3/testsuite/27_io/manipulators/standard/wchar_t/dr2344.cc
new file mode 100644 (file)
index 0000000..5bdabac
--- /dev/null
@@ -0,0 +1,50 @@
+// { dg-do run }
+// { dg-options "-std=gnu++14" }
+
+// Copyright (C) 2014 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/>.
+
+// 27.7.6 - Quoted manipulators                [quoted.manip]
+
+#include <sstream>
+#include <iomanip>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+  bool test [[gnu::unused]] = true;
+
+  std::wostringstream ssx;
+  ssx << L"[" << std::left << std::setfill(L'x') << std::setw(20) << LR"("AB \"CD\" EF")" << L"]";
+  VERIFY( ssx.str() == LR"(["AB \"CD\" EF"xxxxxx])" );
+
+  std::wostringstream ssy;
+  ssy << L"[" << std::left << std::setfill(L'y') << std::setw(20) << std::quoted(LR"(GH "IJ" KL)") << L"]";
+  VERIFY( ssy.str() == LR"(["GH \"IJ\" KL"yyyyyy])" );
+
+  std::wostringstream ssz;
+  ssz << L"[" << std::right << std::setfill(L'z') << std::setw(20) << std::quoted(LR"(PQ "RS" TU)") << L"]";
+  VERIFY( ssz.str() == LR"([zzzzzz"PQ \"RS\" TU"])" );
+}
+
+int
+main()
+{
+  test01();
+  return 0;
+}
index e7280ac..8641732 100644 (file)
@@ -44,6 +44,16 @@ test01()
   VERIFY(regex_match_debug("_az", regex("\\w*")));
   VERIFY(regex_match_debug("!@#$%", regex("\\W*")));
   VERIFY(!regex_match_debug("_01234", regex("\\W*")));
+
+  VERIFY(regex_match_debug("01", regex("[\\d]*")));
+  VERIFY(regex_match_debug("asdfjkl", regex("[\\D]*")));
+  VERIFY(!regex_match_debug("asdfjkl0", regex("[\\D]*")));
+  VERIFY(regex_match_debug("\r\t\v\f ", regex("[\\s]*")));
+  VERIFY(regex_match_debug("asdfjkl", regex("[\\S]*")));
+  VERIFY(!regex_match_debug("asdfjkl\r", regex("[\\S]*")));
+  VERIFY(regex_match_debug("_az", regex("[\\w]*")));
+  VERIFY(regex_match_debug("!@#$%", regex("[\\W]*")));
+  VERIFY(!regex_match_debug("_01234", regex("[\\W]*")));
 }
 
 int
index 5670cbb..8243eea 100644 (file)
 // Tests multiple consecutive quantifiers
 
 #include <regex>
+#include <testsuite_hooks.h>
+#include <testsuite_regex.h>
 
+using namespace __gnu_test;
 using namespace std;
 
 int
@@ -29,5 +32,6 @@ main()
 {
   regex re1("a++");
   regex re2("(a+)+");
+  VERIFY(regex_match_debug("aa", regex("(a)*{3}")));
   return 0;
 }
diff --git a/libstdc++-v3/testsuite/30_threads/promise/60966.cc b/libstdc++-v3/testsuite/30_threads/promise/60966.cc
new file mode 100644 (file)
index 0000000..269268b
--- /dev/null
@@ -0,0 +1,67 @@
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-gnu* *-*-solaris* *-*-cygwin *-*-darwin* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++11 -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-gnu* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++11 -pthreads" { target *-*-solaris* } }
+// { dg-options " -std=gnu++11 " { target *-*-cygwin *-*-darwin* } }
+// { dg-require-cstdint "" }
+// { dg-require-gthreads "" }
+// { dg-require-atomic-builtins "" }
+
+// Copyright (C) 2014 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/>.
+
+// libstdc++/60966
+// This test hangs if std::promise::~promise() destroys the
+// shared state before std::promise::set_value() finishes using it.
+
+#include <future>
+#include <thread>
+#include <vector>
+
+const int THREADS = 10;
+
+void run_task(std::promise<void>* pr)
+{
+  std::this_thread::sleep_for(std::chrono::milliseconds(100));
+  pr->set_value();
+}
+
+int main()
+{
+  std::vector<std::promise<void>*> tasks(THREADS);
+  std::vector<std::thread> threads(THREADS);
+  std::vector<std::future<void>> futures(THREADS);
+
+  for (int i = 0; i < THREADS; ++i)
+  {
+    std::promise<void>* task = new std::promise<void>;
+    tasks[i] = task;
+    futures[i] = task->get_future();
+    threads[i] = std::thread(run_task, task);
+  }
+
+  for (int i = 0; i < THREADS; ++i)
+  {
+    // the temporary future releases the state as soon as wait() returns
+    std::future<void>(std::move(futures[i])).wait();
+    // state is ready, should now be safe to delete promise, so it
+    // releases the shared state too
+    delete tasks[i];
+  }
+
+  for (auto& t : threads)
+    t.join();
+}
index f140880..3f1ee9c 100644 (file)
@@ -37,10 +37,6 @@ namespace ns
   { return std::tie(lhs.i, lhs.s) == std::tie(rhs.i, rhs.s); }
 
   bool
-  operator!=(value_type const& lhs, value_type const& rhs)
-  { return !(lhs == rhs); }
-
-  bool
   operator<(value_type const& lhs, value_type const& rhs)
   { return std::tie(lhs.i, lhs.s) < std::tie(rhs.i, rhs.s); }
 
index c7fc848..6ee9cba 100644 (file)
@@ -37,10 +37,6 @@ namespace ns
   { return std::tie(lhs.i, lhs.s) == std::tie(rhs.i, rhs.s); }
 
   bool
-  operator!=(value_type const& lhs, value_type const& rhs)
-  { return !(lhs == rhs); }
-
-  bool
   operator<(value_type const& lhs, value_type const& rhs)
   { return std::tie(lhs.i, lhs.s) < std::tie(rhs.i, rhs.s); }
 
index 9729000..581d016 100644 (file)
@@ -37,10 +37,6 @@ namespace ns
   { return std::tie(lhs.i, lhs.s) == std::tie(rhs.i, rhs.s); }
 
   bool
-  operator!=(value_type const& lhs, value_type const& rhs)
-  { return !(lhs == rhs); }
-
-  bool
   operator<(value_type const& lhs, value_type const& rhs)
   { return std::tie(lhs.i, lhs.s) < std::tie(rhs.i, rhs.s); }
 
index 45378f6..ce16fcb 100644 (file)
@@ -37,10 +37,6 @@ namespace ns
   { return std::tie(lhs.i, lhs.s) == std::tie(rhs.i, rhs.s); }
 
   bool
-  operator!=(value_type const& lhs, value_type const& rhs)
-  { return !(lhs == rhs); }
-
-  bool
   operator<(value_type const& lhs, value_type const& rhs)
   { return std::tie(lhs.i, lhs.s) < std::tie(rhs.i, rhs.s); }
 
index 008409e..c01bba5 100644 (file)
@@ -37,10 +37,6 @@ namespace ns
   { return std::tie(lhs.i, lhs.s) == std::tie(rhs.i, rhs.s); }
 
   bool
-  operator!=(value_type const& lhs, value_type const& rhs)
-  { return !(lhs == rhs); }
-
-  bool
   operator<(value_type const& lhs, value_type const& rhs)
   { return std::tie(lhs.i, lhs.s) < std::tie(rhs.i, rhs.s); }
 
index b179140..a24622b 100644 (file)
@@ -37,10 +37,6 @@ namespace ns
   { return std::tie(lhs.i, lhs.s) == std::tie(rhs.i, rhs.s); }
 
   bool
-  operator!=(value_type const& lhs, value_type const& rhs)
-  { return !(lhs == rhs); }
-
-  bool
   operator<(value_type const& lhs, value_type const& rhs)
   { return std::tie(lhs.i, lhs.s) < std::tie(rhs.i, rhs.s); }
 
index 66ae8f7..030207a 100644 (file)
@@ -1,4 +1,4 @@
-// If you modify this, please update debug.cc as well.
+// If you modify this, please update simple11.cc and debug.cc as well.
 
 // { dg-do run }
 // { dg-options "-g -O0" }
diff --git a/libstdc++-v3/testsuite/libstdc++-prettyprinters/simple11.cc b/libstdc++-v3/testsuite/libstdc++-prettyprinters/simple11.cc
new file mode 100644 (file)
index 0000000..e94bea6
--- /dev/null
@@ -0,0 +1,92 @@
+// If you modify this, please update simple.cc and debug.cc as well.
+
+// { dg-do run }
+// { dg-options "-g -O0 -std=gnu++11" }
+
+// Copyright (C) 2011-2014 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 <string>
+#include <deque>
+#include <bitset>
+#include <iostream>
+#include <list>
+#include <map>
+#include <set>
+#include <ext/slist>
+
+int
+main()
+{
+  std::string tem;
+  std::string str = "zardoz";
+// { dg-final { note-test str "\"zardoz\"" } }
+
+  std::bitset<10> bs;
+  bs[0] = 1;
+  bs[5] = 1;
+  bs[7] = 1;
+// { dg-final { note-test bs {std::bitset = {[0] = 1, [5] = 1, [7] = 1}} } }
+
+  std::deque<std::string> deq;
+  deq.push_back("one");
+  deq.push_back("two");
+// { dg-final { note-test deq {std::deque with 2 elements = {"one", "two"}} } }
+
+  std::deque<std::string>::iterator deqiter = deq.begin();
+// { dg-final { note-test deqiter {"one"} } }
+
+  std::list<std::string> lst;
+  lst.push_back("one");
+  lst.push_back("two");
+// { dg-final { note-test lst {std::list = {[0] = "one", [1] = "two"}} } }
+
+  std::list<std::string>::iterator lstiter = lst.begin();
+  tem = *lstiter;
+// { dg-final { note-test lstiter {"one"}} }
+
+  std::list<std::string>::const_iterator lstciter = lst.begin();
+  tem = *lstciter;
+// { dg-final { note-test lstciter {"one"}} }
+
+  std::map<std::string, int> mp;
+  mp["zardoz"] = 23;
+// { dg-final { note-test mp {std::map with 1 elements = {["zardoz"] = 23}} } }
+
+  std::map<std::string, int>::iterator mpiter = mp.begin();
+// { dg-final { note-test mpiter {{first = "zardoz", second = 23}} } }
+
+  std::set<std::string> sp;
+  sp.insert("clownfish");
+  sp.insert("barrel");
+// { dg-final { note-test sp {std::set with 2 elements = {[0] = "barrel", [1] = "clownfish"}} } }
+
+  std::set<std::string>::const_iterator spciter = sp.begin();
+// { dg-final { note-test spciter {"barrel"} } }
+
+  __gnu_cxx::slist<int> sll;
+  sll.push_front(23);
+  sll.push_front(47);
+// { dg-final { note-test sll {__gnu_cxx::slist = {[0] = 47, [1] = 23}} } }
+
+  __gnu_cxx::slist<int>::iterator slliter = sll.begin();
+// { dg-final { note-test slliter {47} } }
+
+  return 0;                    // Mark SPOT
+}
+
+// { dg-final { gdb-test SPOT } }
index bda11cd..bf84e4b 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index af21cf8..b58ed26 100644 (file)
@@ -1,3 +1,13 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
+2014-05-15  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       PR lto/60981
+       * configure.ac: Check for -static-libgcc.
+       * configure: Regenerate.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 2fc8383..a579b99 100755 (executable)
@@ -4087,8 +4087,32 @@ fi
   done
 CFLAGS="$save_CFLAGS"
 
+
+# Check whether -static-libgcc is supported.
+saved_LDFLAGS="$LDFLAGS"
+LDFLAGS="$LDFLAGS -static-libgcc"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -static-libgcc" >&5
+$as_echo_n "checking for -static-libgcc... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  int main() {}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  have_static_libgcc=yes
+else
+  have_static_libgcc=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_static_libgcc" >&5
+$as_echo "$have_static_libgcc" >&6; };
+LDFLAGS="$saved_LDFLAGS"
 # Need -Wc to get it through libtool.
-if test "x$GCC" = xyes; then ac_lto_plugin_ldflags="-Wc,-static-libgcc"; fi
+if test "x$have_static_libgcc" = xyes; then
+   ac_lto_plugin_ldflags="-Wc,-static-libgcc"
+fi
+
 
 case `pwd` in
   *\ * | *\    *)
@@ -10562,7 +10586,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 10565 "configure"
+#line 10589 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -10668,7 +10692,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 10671 "configure"
+#line 10695 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
index 4003ae6..a5f1774 100644 (file)
@@ -7,9 +7,21 @@ AM_MAINTAINER_MODE
 AC_PROG_CC
 AC_SYS_LARGEFILE
 ACX_PROG_CC_WARNING_OPTS([-Wall], [ac_lto_plugin_warn_cflags])
+
+# Check whether -static-libgcc is supported.
+saved_LDFLAGS="$LDFLAGS"
+LDFLAGS="$LDFLAGS -static-libgcc"
+AC_MSG_CHECKING([for -static-libgcc])
+AC_LINK_IFELSE([
+  int main() {}], [have_static_libgcc=yes], [have_static_libgcc=no])
+AC_MSG_RESULT($have_static_libgcc); 
+LDFLAGS="$saved_LDFLAGS"
 # Need -Wc to get it through libtool.
-if test "x$GCC" = xyes; then ac_lto_plugin_ldflags="-Wc,-static-libgcc"; fi
+if test "x$have_static_libgcc" = xyes; then
+   ac_lto_plugin_ldflags="-Wc,-static-libgcc"
+fi
 AC_SUBST(ac_lto_plugin_ldflags)
+
 AM_PROG_LIBTOOL
 ACX_LT_HOST_FLAGS
 AC_SUBST(target_noncanonical)
index 07de6db..b598869 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.
index 9b334dd..c7c8fa4 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-16  Release Manager
+
+       * GCC 4.9.1 released.
+
 2014-04-22  Release Manager
 
        * GCC 4.9.0 released.