summaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog267
-rw-r--r--gcc/testsuite/c-c++-common/pr56566.c14
-rw-r--r--gcc/testsuite/c-c++-common/pr56607.c29
-rw-r--r--gcc/testsuite/c-c++-common/uninit-17.c4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alias-decl-32.C20
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-array5.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-static11.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-template4.C26
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-template5.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/decltype-call1.C32
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist-defarg1.C36
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist40.C3
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv8.C15
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg4.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mutable2.C23
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi3.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-sfinae1.C55
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-shadow1.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this13.C20
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this9.C19
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nsdmi-local.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/rv-copy1.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/trailing8.C25
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/trailing9.C12
-rw-r--r--gcc/testsuite/g++.dg/diagnostic/variadic1.C9
-rw-r--r--gcc/testsuite/g++.dg/eh/anon1.C26
-rw-r--r--gcc/testsuite/g++.dg/eh/anon1a.cc10
-rw-r--r--gcc/testsuite/g++.dg/eh/anon2.C24
-rw-r--r--gcc/testsuite/g++.dg/ext/vector21.C39
-rw-r--r--gcc/testsuite/g++.dg/ipa/devirt-12.C22
-rw-r--r--gcc/testsuite/g++.dg/opt/longbranch2.C4
-rw-r--r--gcc/testsuite/g++.dg/other/abstract5.C6
-rw-r--r--gcc/testsuite/g++.dg/parse/typename7.C2
-rw-r--r--gcc/testsuite/g++.dg/template/abstract-dr337.C13
-rw-r--r--gcc/testsuite/g++.dg/template/access26.C6
-rw-r--r--gcc/testsuite/g++.dg/template/arrow2.C12
-rw-r--r--gcc/testsuite/g++.dg/template/const6.C7
-rw-r--r--gcc/testsuite/g++.dg/template/friend54.C18
-rw-r--r--gcc/testsuite/g++.dg/template/sfinae-dr657.C22
-rw-r--r--gcc/testsuite/g++.dg/torture/20121105-1.C4
-rw-r--r--gcc/testsuite/g++.dg/torture/pr56635.C17
-rw-r--r--gcc/testsuite/g++.dg/tree-ssa/ssa-dom.C104
-rw-r--r--gcc/testsuite/g++.dg/warn/Wdiv-by-zero-2.C34
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr56571.c8
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/builtins/builtins.exp3
-rw-r--r--gcc/testsuite/gcc.dg/graphite/id-6.c2
-rw-r--r--gcc/testsuite/gcc.dg/graphite/pr35356-2.c4
-rw-r--r--gcc/testsuite/gcc.dg/graphite/scop-3.c2
-rw-r--r--gcc/testsuite/gcc.dg/pr53265.c156
-rw-r--r--gcc/testsuite/gcc.dg/pr56355-1.c8
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr49518.c1
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr56661.c46
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr56689.c46
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/cunroll-10.c5
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr55579.c4
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/vector-4.c1
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/vrp47.c15
-rw-r--r--gcc/testsuite/gcc.dg/vect/fast-math-bb-slp-call-3.c68
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-outer-3a-big-array.c3
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-outer-3a.c3
-rw-r--r--gcc/testsuite/gcc.target/aarch64/extr.c34
-rw-r--r--gcc/testsuite/gcc.target/aarch64/movk.c31
-rw-r--r--gcc/testsuite/gcc.target/aarch64/ror.c34
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sbc.c41
-rw-r--r--gcc/testsuite/gcc.target/aarch64/vect-compile.c2
-rw-r--r--gcc/testsuite/gcc.target/aarch64/vect-fp-compile.c1
-rw-r--r--gcc/testsuite/gcc.target/aarch64/vect-fp.c11
-rw-r--r--gcc/testsuite/gcc.target/aarch64/vect-fp.x20
-rw-r--r--gcc/testsuite/gcc.target/aarch64/vect.c4
-rw-r--r--gcc/testsuite/gcc.target/aarch64/vect.x14
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-for-64bits-1.c54
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-for-64bits-2.c57
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vcond-gt.c17
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vcond-ltgt.c18
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vcond-unordered.c19
-rw-r--r--gcc/testsuite/gcc.target/i386/movti.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/pr20020-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr20020-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr20020-3.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr22152.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/pr53425-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr53425-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr53907.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/pr55093.c1
-rw-r--r--gcc/testsuite/gcc.target/mips/mips.exp11
-rw-r--r--gcc/testsuite/gcc.target/mips/umips-constraints-1.c14
-rw-r--r--gcc/testsuite/gcc.target/mips/umips-constraints-2.c14
-rw-r--r--gcc/testsuite/gcc.target/mips/umips-lwp-1.c17
-rw-r--r--gcc/testsuite/gcc.target/mips/umips-lwp-2.c17
-rw-r--r--gcc/testsuite/gcc.target/mips/umips-lwp-3.c17
-rw-r--r--gcc/testsuite/gcc.target/mips/umips-lwp-4.c17
-rw-r--r--gcc/testsuite/gcc.target/mips/umips-lwp-5.c17
-rw-r--r--gcc/testsuite/gcc.target/mips/umips-lwp-6.c17
-rw-r--r--gcc/testsuite/gcc.target/mips/umips-lwp-7.c41
-rw-r--r--gcc/testsuite/gcc.target/mips/umips-lwp-8.c17
-rw-r--r--gcc/testsuite/gcc.target/mips/umips-lwp-swp-volatile.c42
-rw-r--r--gcc/testsuite/gcc.target/mips/umips-movep-1.c16
-rw-r--r--gcc/testsuite/gcc.target/mips/umips-movep-2.c13
-rw-r--r--gcc/testsuite/gcc.target/mips/umips-save-restore-1.c18
-rw-r--r--gcc/testsuite/gcc.target/mips/umips-save-restore-2.c16
-rw-r--r--gcc/testsuite/gcc.target/mips/umips-save-restore-3.c14
-rw-r--r--gcc/testsuite/gcc.target/mips/umips-swp-1.c10
-rw-r--r--gcc/testsuite/gcc.target/mips/umips-swp-2.c17
-rw-r--r--gcc/testsuite/gcc.target/mips/umips-swp-3.c17
-rw-r--r--gcc/testsuite/gcc.target/mips/umips-swp-4.c17
-rw-r--r--gcc/testsuite/gcc.target/mips/umips-swp-5.c17
-rw-r--r--gcc/testsuite/gcc.target/mips/umips-swp-6.c17
-rw-r--r--gcc/testsuite/gcc.target/mips/umips-swp-7.c17
-rw-r--r--gcc/testsuite/gcc.target/powerpc/mmfpgpr.c22
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr56605.c13
-rw-r--r--gcc/testsuite/gcc.target/powerpc/sd-pwr6.c19
-rw-r--r--gcc/testsuite/gcc.target/powerpc/sd-vsx.c20
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vsx-float0.c16
-rw-r--r--gcc/testsuite/gcc.target/sh/pr49880-1.c22
-rw-r--r--gcc/testsuite/gcc.target/sh/pr49880-2.c22
-rw-r--r--gcc/testsuite/gcc.target/sh/pr49880-3.c22
-rw-r--r--gcc/testsuite/gcc.target/sh/pr49880-4.c19
-rw-r--r--gcc/testsuite/gcc.target/sh/pr49880-5.c19
-rw-r--r--gcc/testsuite/gfortran.dg/do_1.f903
-rw-r--r--gcc/testsuite/gfortran.dg/eof_5.f9021
-rw-r--r--gcc/testsuite/gfortran.dg/namelist_77.f9049
-rw-r--r--gcc/testsuite/gfortran.dg/namelist_78.f9034
-rw-r--r--gcc/testsuite/gfortran.dg/open_negative_unit_1.f9021
-rw-r--r--gcc/testsuite/gfortran.dg/transfer_intrinsic_5.f9050
124 files changed, 2560 insertions, 42 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7d918f826de..7e1cd5b0d8f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,260 @@
+2013-03-25 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+ PR target/56720
+ * gcc.target/arm/neon-vcond-gt.c: New test.
+ * gcc.target/arm/neon-vcond-ltgt.c: Likewise.
+ * gcc.target/arm/neon-vcond-unordered.c: Likewise.
+
+2013-03-25 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/56689
+ * gcc.dg/torture/pr56689.c: New testcase.
+
+2013-03-25 Kai Tietz <ktietz@redhat.com>
+
+ * g++.dg/torture/20121105-1.C: Adjust for LLP64 targets.
+
+2013-03-24 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/56696
+ * gfortran.dg/eof_5.f90: New.
+
+2013-03-23 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+ * gcc.c-torture/execute/builtins/builtins.exp: Sort targets
+ alphabetically.
+
+2013-03-22 Uros Bizjak <ubizjak@gmail.com>
+
+ * gcc.target/i386/pr22152.c (dg-options): Add -mtune=core2.
+
+2013-03-22 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+ PR testsuite/55994
+ * gcc.c-torture/execute/builtins/builtins.exp: Add
+ -Wl,--allow-multiple-definition for RTEMS targets.
+
+2013-03-22 Ian Bolton <ian.bolton@arm.com>
+
+ * gcc.target/aarch64/movk.c: New test.
+
+2013-03-21 Marc Glisse <marc.glisse@inria.fr>
+
+ * g++.dg/ext/vector21.C: New testcase.
+
+2013-03-21 Christophe Lyon <christophe.lyon@linaro.org>
+
+ * gcc.target/arm/neon-for-64bits-1.c: New tests.
+ * gcc.target/arm/neon-for-64bits-2.c: Likewise.
+
+2013-03-21 Richard Biener <rguenther@suse.de>
+
+ * gcc.dg/vect/vect-outer-3a-big-array.c: Adjust.
+ * gcc.dg/vect/vect-outer-3a.c: Likewise.
+
+2013-03-21 Naveen H.S <Naveen.Hurugalawadi@caviumnetworks.com>
+
+ * gcc.target/aarch64/vect.c: Test and result vector added
+ for sabd and saba instructions.
+ * gcc.target/aarch64/vect-compile.c: Check for sabd and saba
+ instructions in assembly.
+ * gcc.target/aarch64/vect.x: Add sabd and saba test functions.
+ * gcc.target/aarch64/vect-fp.c: Test and result vector added
+ for fabd instruction.
+ * gcc.target/aarch64/vect-fp-compile.c: Check for fabd
+ instruction in assembly.
+ * gcc.target/aarch64/vect-fp.x: Add fabd test function.
+
+2013-03-20 Jeff Law <law@redhat.com>
+
+ * g++.dg/tree-ssa/ssa-dom.C: New test.
+
+2013-03-20 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * gcc.target/powerpc/mmfpgpr.c: New test.
+ * gcc.target/powerpc/sd-vsx.c: Likewise.
+ * gcc.target/powerpc/sd-pwr6.c: Likewise.
+ * gcc.target/powerpc/vsx-float0.c: Likewise.
+
+2013-03-20 Marc Glisse <marc.glisse@inria.fr>
+
+ PR tree-optimization/56355
+ * gcc.dg/pr56355-1.c: New file.
+
+2013-03-20 Catherine Moore <clm@codesourcery.com>
+ Richard Sandiford <rdsandiford@googlemail.com>
+
+ * gcc.target/mips/mips.exp: Add microMIPS support.
+ * gcc.target/mips/umips-movep-2.c: New test.
+ * gcc.target/mips/umips-lwp-2.c: New test.
+ * gcc.target/mips/umips-swp-5.c: New test.
+ * gcc.target/mips/umips-constraints-1.c: New test.
+ * gcc.target/mips/umips-lwp-3.c: New test.
+ * gcc.target/mips/umips-swp-6.c: New test.
+ * gcc.target/mips/umips-constraints-2.c: New test.
+ * gcc.target/mips/umips-save-restore-1.c: New test.
+ * gcc.target/mips/umips-lwp-4.c: New test.
+ * gcc.target/mips/umips-swp-7.c: New test.
+ * gcc.target/mips/umips-save-restore-2.c: New test.
+ * gcc.target/mips/umips-lwp-swp-volatile.c: New test.
+ * gcc.target/mips/umips-lwp-5.c: New test.
+ * gcc.target/mips/umips-save-restore-3.c: New test.
+ * gcc.target/mips/umips-lwp-6.c: New test.
+ * gcc.target/mips/umips-swp-1.c: New test.
+ * gcc.target/mips/umips-lwp-7.c: New test.
+ * gcc.target/mips/umips-swp-2.c: New test.
+ * gcc.target/mips/umips-lwp-8.c: New test.
+ * gcc.target/mips/umips-swp-3.c: New test.
+ * gcc.target/mips/umips-movep-1.c: New test.
+ * gcc.target/mips/umips-lwp-1.c: New test.
+ * gcc.target/mips/umips-swp-4.c: New test.
+
+2013-03-20 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/56661
+ * gcc.dg/torture/pr56661.c: New testcase.
+
+2013-03-20 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ PR rtl-optimization/56605
+ * gcc.target/powerpc/pr56605.c: New.
+
+2013-03-20 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ PR fortran/54932
+ * gfortran.dg/do_1.f90: Don't xfail.
+
+2013-03-20 Tilo Schwarz <tilo@tilo-schwarz.de>
+
+ PR libfortran/51825
+ * gfortran.dg/namelist_77.f90: New.
+ * gfortran.dg/namelist_78.f90: New.
+
+2013-03-20 Tilo Schwarz <tilo@tilo-schwarz.de>
+
+ PR libfortran/48618
+ * gfortran.dg/open_negative_unit_1.f90: New.
+
+2013-03-19 Ian Bolton <ian.bolton@arm.com>
+
+ * gcc.target/aarch64/sbc.c: New test.
+
+2013-03-19 Ian Bolton <ian.bolton@arm.com>
+
+ * gcc.target/aarch64/ror.c: New test.
+
+2013-03-19 Ian Bolton <ian.bolton@arm.com>
+
+ * gcc.target/aarch64/extr.c: New test.
+
+2013-03-19 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/56273
+ * gcc.dg/tree-ssa/vrp47.c: Adjust.
+ * c-c++-common/uninit-17.c: Likewise.
+
+2013-03-18 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/56635
+ * g++.dg/torture/pr56635.C: New test.
+
+2013-03-18 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/3713
+ * g++.dg/ipa/devirt-12.C: New testcase.
+
+2013-03-18 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/56566
+ * c-c++-common/pr56566.c: New test.
+
+2013-03-17 Jason Merrill <jason@redhat.com>
+
+ * g++.dg/template/abstract-dr337.C: XFAIL.
+
+2013-03-16 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/56607
+ * g++.dg/warn/Wdiv-by-zero-2.C: New test.
+ * c-c++-common/pr56607.c: New test.
+
+2013-03-16 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/56582
+ * g++.dg/cpp0x/constexpr-array5.C: New.
+
+2013-03-15 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/56615
+ * gfortran.dg/transfer_intrinsic_5.f90: New.
+
+2013-03-15 Kai Tietz <ktietz@redhat.com>
+
+ * gcc.target/i386/movti.c: Don't test for x64 mingw.
+ * gcc.target/i386/pr20020-1.c: Likewise.
+ * gcc.target/i386/pr20020-2.c: Likewise.
+ * gcc.target/i386/pr20020-3.c: Likewise.
+ * gcc.target/i386/pr53425-1.c: Likewise.
+ * gcc.target/i386/pr53425-2.c: Likewise.
+ * gcc.target/i386/pr55093.c: Likewise.
+ * gcc.target/i386/pr53907.c: Adjust test for LLP64 targets.
+
+2013-03-15 Jakub Jelinek <jakub@redhat.com>
+
+ PR debug/56307
+ * gcc.dg/tree-ssa/pr55579.c: Add -fvar-tracking-assignments to
+ dg-options. Remove 32-bit hppa*-*-hpux* xfail.
+
+2013-03-14 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/53265
+ * gcc.dg/graphite/scop-3.c (toto): Increase array size to avoid
+ undefined behavior.
+ * gcc.dg/graphite/id-6.c (test): Likewise.
+ * gcc.dg/graphite/pr35356-2.c: Adjust regexp patterns to only look for
+ MIN_EXPR and MAX_EXPR in GIMPLE stmts.
+
+ PR tree-optimization/53265
+ * gcc.dg/pr53265.c: New test.
+ * gcc.dg/torture/pr49518.c: Add -Wno-aggressive-loop-optimizations
+ to dg-options.
+ * g++.dg/opt/longbranch2.C (EBCOTLut): Double sizes of a2 and a3
+ arrays.
+ * gcc.dg/tree-ssa/cunroll-10.c (main): Rename to foo. Add argument
+ n, use it as high bound instead of 4.
+
+2013-03-13 Oleg Endo <olegendo@gcc.gnu.org>
+
+ PR target/49880
+ * gcc.target/sh/pr49880-1.c: New.
+ * gcc.target/sh/pr49880-2.c: New.
+ * gcc.target/sh/pr49880-3.c: New.
+ * gcc.target/sh/pr49880-4.c: New.
+ * gcc.target/sh/pr49880-5.c: New.
+
+2013-03-13 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * g++.dg/cpp0x/alias-decl-32.C: Remove redundant bits.
+
+2013-03-13 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/56608
+ * gcc.dg/vect/fast-math-bb-slp-call-3.c: New testcase.
+
+2013-03-13 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/56611
+ * g++.dg/cpp0x/alias-decl-32.C: New.
+
+2013-03-11 Jan Hubicka <jh@suse.cz>
+
+ PR middle-end/56571
+ * gcc.c-torture/compile/pr56571.c: New testcase.
+
+2013-03-11 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ * gcc.dg/tree-ssa/vector-4.c: Add comment regarding xfail.
+ * gcc.dg/tree-ssa/pr55579.c: Likewise.
+
2013-03-11 Dominique d'Humieres <dominiq@lps.ens.fr>
* gcc.dg/inline_3.c: Remove target and dg-excess-errors.
@@ -370,7 +627,7 @@
2013-02-20 Jan Hubicka <jh@suse.cz>
PR tree-optimization/56265
- * testsuite/g++.dg/ipa/devirt-11.C: New testcase.
+ * g++.dg/ipa/devirt-11.C: New testcase.
2013-02-20 Richard Biener <rguenther@suse.de>
@@ -474,7 +731,7 @@
2013-02-15 Tobias Burnus <burnus@net-b.de>
PR fortran/56318
- * gcc/testsuite/gfortran.dg/matmul_9.f90: New.
+ * gfortran.dg/matmul_9.f90: New.
2013-02-15 Tobias Burnus <burnus@net-b.de>
@@ -557,9 +814,9 @@
Avoid instrumenting duplicated memory access in the same basic block
* c-c++-common/asan/no-redundant-instrumentation-1.c: New test.
- * testsuite/c-c++-common/asan/no-redundant-instrumentation-2.c: Likewise.
- * testsuite/c-c++-common/asan/no-redundant-instrumentation-3.c: Likewise.
- * testsuite/c-c++-common/asan/inc.c: Likewise.
+ * c-c++-common/asan/no-redundant-instrumentation-2.c: Likewise.
+ * c-c++-common/asan/no-redundant-instrumentation-3.c: Likewise.
+ * c-c++-common/asan/inc.c: Likewise.
2013-02-12 Vladimir Makarov <vmakarov@redhat.com>
diff --git a/gcc/testsuite/c-c++-common/pr56566.c b/gcc/testsuite/c-c++-common/pr56566.c
new file mode 100644
index 00000000000..e753d933a4f
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr56566.c
@@ -0,0 +1,14 @@
+/* PR c/56566 */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+struct S1 { enum E1 { N1 = -1, Z1 = 0 } e : 1; };
+struct S2 { enum E2 { N2 = -1 } e : 1; };
+struct S3 { enum E3 { Z3 = 0 } e : 1; };
+struct S4 { enum E4 { N4 = -2, Z4 = 1 } e : 2; };
+struct S5 { enum E5 { N5 = -3, Z5 = 1 } e : 3; };
+struct S6 { enum E6 { N6 = -2, Z6 = 1 } e : 1; }; // { dg-warning "too small|narrower" }
+struct S7 { enum E7 { N7 = -3, Z7 = 1 } e : 2; }; // { dg-warning "too small|narrower" }
+struct S8 { enum E8 { Z8 = 1 } e : 1; };
+struct S9 { enum E9 { Z9 = 2 } e : 2; };
+struct S0 { enum E0 { Z0 = 2 } e : 1; }; // { dg-warning "too small|narrower" }
diff --git a/gcc/testsuite/c-c++-common/pr56607.c b/gcc/testsuite/c-c++-common/pr56607.c
new file mode 100644
index 00000000000..d7faa81151a
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr56607.c
@@ -0,0 +1,29 @@
+/* PR c++/56607 */
+/* { dg-do compile { target { { lp64 || ilp32 } || llp64 } } } */
+/* { dg-options "-O2 -Wdiv-by-zero" } */
+
+int
+f1 (void)
+{
+ return 1 / (sizeof (char) - 1); /* { dg-warning "division by zero" } */
+}
+
+int
+f2 (void)
+{
+ const int x = sizeof (char) - 1;
+ return 1 / x; /* { dg-warning "division by zero" "" { target c++ } } */
+}
+
+int
+f3 (void)
+{
+ return 1 / (sizeof (int) / 3 - 1); /* { dg-warning "division by zero" } */
+}
+
+int
+f4 (void)
+{
+ const int x = sizeof (int) / 3 - 1;
+ return 1 / x; /* { dg-warning "division by zero" "" { target c++ } } */
+}
diff --git a/gcc/testsuite/c-c++-common/uninit-17.c b/gcc/testsuite/c-c++-common/uninit-17.c
index 1719ae85f96..fd773da78ad 100644
--- a/gcc/testsuite/c-c++-common/uninit-17.c
+++ b/gcc/testsuite/c-c++-common/uninit-17.c
@@ -11,9 +11,9 @@ static void bar(int a, int *ptr)
{
int b; /* { dg-message "declared" } */
if (b < 40) {
- ptr[0] = b;
+ ptr[0] = b; /* { dg-warning "may be used uninitialized" } */
}
- b += 1; /* { dg-warning "may be used uninitialized" } */
+ b += 1;
ptr++;
}
while (--a != 0);
diff --git a/gcc/testsuite/g++.dg/cpp0x/alias-decl-32.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-32.C
new file mode 100644
index 00000000000..cb39edde8f6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-32.C
@@ -0,0 +1,20 @@
+// PR c++/56611
+// { dg-do compile { target c++11 } }
+
+template<class T> struct remove_reference { typedef T type; };
+template<class T> struct remove_reference<T&> { typedef T type; };
+template<class T> T declval() { return T(); }
+
+int f(int, int){return 0;}
+struct Func{};
+
+template<class... Args> using result2
+= decltype(f(declval<typename remove_reference<Args>::type>()...));
+
+template<class Sig> struct R;
+template<class This, class... Args> struct R< This(Args...) >
+{
+ typedef result2<Args...> type;
+};
+
+typedef R< Func(int, int) >::type R_type;
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-array5.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-array5.C
new file mode 100644
index 00000000000..4605b4be902
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-array5.C
@@ -0,0 +1,9 @@
+// PR c++/56582
+// { dg-do compile { target c++11 } }
+
+// Reliable ICE
+constexpr int n[3] = {};
+constexpr int k = n[-1]; // { dg-error "negative" }
+
+// Some random byte
+constexpr char c = "foo"[-1000]; // { dg-error "negative" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-static11.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-static11.C
new file mode 100644
index 00000000000..91cc25a71c3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-static11.C
@@ -0,0 +1,14 @@
+// PR c++/54532
+// { dg-do compile { target c++11 } }
+
+#define SA(X) static_assert(X,#X)
+
+struct A {
+ int i;
+ constexpr static int A::*p = &A::i;
+};
+
+constexpr A a = { 42 };
+SA(a.*A::p == 42);
+
+constexpr int A::* A::p;
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-template4.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-template4.C
new file mode 100644
index 00000000000..7adcae83abd
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-template4.C
@@ -0,0 +1,26 @@
+// PR c++/55931
+// { dg-do compile { target c++11 } }
+
+#include <type_traits>
+
+template<typename Type>
+class Test
+{
+ public:
+ constexpr Test(const Type val) : _value(val) {}
+ constexpr Type get() const {return _value;}
+ static void test()
+ {
+ static constexpr Test<int> x(42);
+ std::integral_constant<int, x.get()> i; // This is not working
+ }
+ protected:
+ Type _value;
+};
+
+int main()
+{
+ static constexpr Test<int> x(42);
+ std::integral_constant<int, x.get()> i; // This is working
+ Test<double>::test();
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-template5.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-template5.C
new file mode 100644
index 00000000000..aa80658036d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-template5.C
@@ -0,0 +1,6 @@
+// PR c++/54946
+// { dg-do compile { target c++11 } }
+
+template<const char*s> static void testfunc();
+constexpr struct testtype { const char* str; } test = { "abc"} ;
+void (*functionpointer)() = testfunc<(const char*) test.str>; // { dg-error "" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype-call1.C b/gcc/testsuite/g++.dg/cpp0x/decltype-call1.C
new file mode 100644
index 00000000000..2616bb09046
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/decltype-call1.C
@@ -0,0 +1,32 @@
+// PR c++/52748
+// N3276
+// { dg-do compile { target c++11 } }
+
+struct A; // { dg-error "forward declaration" }
+A f();
+
+decltype(f()) g1(); // OK
+decltype(((f()))) g2b(); // OK
+decltype(42,f()) g3(); // OK
+decltype(42,45,f()) g3b(); // OK
+decltype(42,45,(f())) g3c(); // OK
+decltype(42,((45,(f())))) g3c(); // OK
+
+decltype(f(),42) g4(); // { dg-error "" }
+decltype(45,f(),42) g4b(); // { dg-error "" }
+
+class B
+{
+ ~B(); // { dg-error "private" }
+public:
+ int i;
+ void operator[](int);
+};
+B h();
+
+void i(const B&);
+
+decltype(h()) g5a(); // OK
+decltype(h().i) g5(); // { dg-error "" }
+decltype(h()[0]) g6(); // { dg-error "" }
+decltype(i(h())) g7(); // { dg-error "" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist-defarg1.C b/gcc/testsuite/g++.dg/cpp0x/initlist-defarg1.C
new file mode 100644
index 00000000000..45eb2d5e1f0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist-defarg1.C
@@ -0,0 +1,36 @@
+// PR c++/56614
+// { dg-require-effective-target c++11 }
+
+#include <initializer_list>
+
+namespace std
+{
+ template<typename T>
+ struct allocator
+ { };
+
+ template<typename T, typename Alloc = std::allocator<T> >
+ struct vector
+ {
+ vector(std::initializer_list<T>, const Alloc& = Alloc()) { }
+ };
+}
+
+void func() { }
+
+enum E { ee };
+
+struct C
+{
+ template<typename T>
+ C(T, std::vector<E> = std::vector<E>({ ee }))
+ { }
+};
+
+struct G
+{
+ void gen()
+ {
+ C c(&func);
+ }
+};
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist40.C b/gcc/testsuite/g++.dg/cpp0x/initlist40.C
index f2703602c9e..8cf36be1ca1 100644
--- a/gcc/testsuite/g++.dg/cpp0x/initlist40.C
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist40.C
@@ -1,3 +1,4 @@
+// PR c++/54835, DR 1518
// { dg-options "-std=c++0x" }
struct A
@@ -7,6 +8,6 @@ struct A
int main()
{
- A a1 = { };
+ A a1 = { }; // { dg-error "explicit" }
A a2 = { 24 }; // { dg-error "explicit" }
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv8.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv8.C
new file mode 100644
index 00000000000..abe272a8b8b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv8.C
@@ -0,0 +1,15 @@
+// PR c++/56447
+// { dg-do compile { target c++11 } }
+
+template <class T>
+void f()
+{
+ int i;
+ // This lambda should not have a conversion op, since it captures i
+ int (*p)() = [=]{ return i; }; // { dg-error "cannot convert" }
+}
+
+int main()
+{
+ f<int>();
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg4.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg4.C
new file mode 100644
index 00000000000..2217954596b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg4.C
@@ -0,0 +1,8 @@
+// PR c++/54764
+// { dg-require-effective-target c++11 }
+
+template<class T = void>
+struct c
+{
+ int (*f)(int) = [](int i){return i + i;};
+};
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mutable2.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mutable2.C
new file mode 100644
index 00000000000..c54ff5c841c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mutable2.C
@@ -0,0 +1,23 @@
+// PR c++/55532
+// { dg-do compile { target c++11 } }
+
+struct Foo {
+ void doit() {
+ }
+};
+
+template<typename T>
+void oops(Foo &foo, const T &) {
+ auto fun = [&] () mutable {
+ foo.doit();
+ };
+ auto fun2 = [=]() {
+ fun(); // { dg-error "" }
+ };
+ fun2();
+}
+
+int main() {
+ Foo foo;
+ oops(foo, 1);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi3.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi3.C
new file mode 100644
index 00000000000..da7e0bfed20
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi3.C
@@ -0,0 +1,9 @@
+// PR c++/55972
+// { dg-do compile { target c++11 } }
+
+class C
+{
+ void f();
+ int j = 10;
+ int i = [this]() { return this->j; }();
+};
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-sfinae1.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-sfinae1.C
new file mode 100644
index 00000000000..973f8a78048
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-sfinae1.C
@@ -0,0 +1,55 @@
+// PR c++/56039
+// { dg-do compile { target c++11 } }
+
+template <bool> struct BoolSink { typedef void type; };
+
+template <typename T, typename U>
+struct AddRvalueReferenceImpl { typedef T type; };
+
+template <typename T>
+struct AddRvalueReferenceImpl<T, typename BoolSink<false &&
+ [] {
+ extern T &&tref;
+ }>::type> { // { dg-error "lambda" }
+ typedef T &&type;
+};
+
+template <typename T>
+struct AddRvalueReference : AddRvalueReferenceImpl<T, void> { };
+
+namespace ImplHelpers {
+ template <typename T>
+ typename AddRvalueReference<T>::type create(void) { }
+}
+
+template <typename T, typename U, typename ...Args>
+struct IsConstructibleImpl { enum { value = 0 }; };
+
+template <typename T, typename ...Args>
+struct IsConstructibleImpl<T, typename BoolSink<false &&
+ [] {
+ T t( ::ImplHelpers::create<Args>() ...);
+ }>::type, Args ...> { // { dg-error "lambda" }
+ enum { value = 1 };
+};
+
+template <typename T, typename ...Args>
+struct IsConstructible : IsConstructibleImpl<T, void, Args ...> { };
+
+struct DestroyMe {
+ ~DestroyMe() = delete;
+};
+
+static_assert(+IsConstructible<int>::value, "error");
+static_assert(!IsConstructible<void>::value, "error");
+static_assert(+IsConstructible<int [1]>::value, "error");
+static_assert(!IsConstructible<DestroyMe>::value, "error");
+static_assert(!IsConstructible<int *, char *>::value, "error");
+
+static_assert(+IsConstructible<int &&, int>::value, "error");
+static_assert(!IsConstructible<int &&, int &>::value, "error");
+static_assert(+IsConstructible<int &&, int &&>::value, "error");
+
+// { dg-prune-output "expected" }
+// { dg-prune-output "does not name a class" }
+// { dg-prune-output "static assertion" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-shadow1.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-shadow1.C
new file mode 100644
index 00000000000..bb06bfe4afa
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-shadow1.C
@@ -0,0 +1,9 @@
+// PR c++/55357
+// { dg-options "-std=c++11 -Wshadow" }
+
+int main() {
+ int x = 1; // { dg-warning "shadowed" }
+ auto const lambda = [](int x) { // { dg-warning "shadows" }
+ return x;
+ };
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this13.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this13.C
new file mode 100644
index 00000000000..090d0a13e1d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this13.C
@@ -0,0 +1,20 @@
+// PR c++/52374
+// { dg-do compile { target c++11 } }
+
+struct B
+{
+ int get() const { return 42; }
+};
+
+template<typename X>
+struct D
+ : public X
+{
+ int get() const { return [this]() -> int { return X::get(); }(); }
+};
+
+int main()
+{
+ D<B> d;
+ d.get();
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this9.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this9.C
new file mode 100644
index 00000000000..07ddd0863de
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this9.C
@@ -0,0 +1,19 @@
+// PR c++/54277
+// { dg-do compile { target c++11 } }
+
+struct Used
+{
+ void foo() { }
+};
+
+template <typename>
+struct S
+{
+ Used x;
+
+ void bar()
+ {
+ auto f = [this] { x.foo(); };
+ f();
+ }
+};
diff --git a/gcc/testsuite/g++.dg/cpp0x/nsdmi-local.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-local.C
new file mode 100644
index 00000000000..9b84c8c3ded
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi-local.C
@@ -0,0 +1,8 @@
+// PR c++/55240
+// { dg-do compile { target c++11 } }
+
+int main()
+{
+ int q = 1; // { dg-error "declared here" }
+ struct test { int x = q; } instance; // { dg-error "local variable" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv-copy1.C b/gcc/testsuite/g++.dg/cpp0x/rv-copy1.C
new file mode 100644
index 00000000000..70d3d719222
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/rv-copy1.C
@@ -0,0 +1,10 @@
+// PR c++/55017
+// { dg-do compile { target c++11 } }
+
+struct S { // { dg-error "rvalue ref" }
+ int&& rr;
+ S(int&& rr) : rr(static_cast<int&&>(rr)) {}
+};
+
+S s1(13);
+S s2 = s1; // { dg-error "deleted" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/trailing8.C b/gcc/testsuite/g++.dg/cpp0x/trailing8.C
new file mode 100644
index 00000000000..304845e66d8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/trailing8.C
@@ -0,0 +1,25 @@
+// PR c++/54359
+// { dg-require-effective-target c++11 }
+
+int& ref(int& x) { return x; }
+const int& ref(const int& x) { return x; }
+
+class A {
+ int x;
+ int f() const;
+ auto test1() const -> decltype(this);
+ auto test2() const -> decltype(ref(x));
+ auto test3() const -> decltype(f());
+};
+
+auto A::test1() const -> decltype(this) {
+ return this;
+}
+
+auto A::test2() const -> decltype(ref(x)) {
+ return ref(x);
+}
+
+auto A::test3() const -> decltype(f()) {
+ return f();
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/trailing9.C b/gcc/testsuite/g++.dg/cpp0x/trailing9.C
new file mode 100644
index 00000000000..d7895b38e3e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/trailing9.C
@@ -0,0 +1,12 @@
+// PR c++/56646
+// { dg-require-effective-target c++11 }
+
+struct A {
+ void f();
+};
+
+void A::f() {
+ struct B {
+ auto g() -> void { }
+ };
+}
diff --git a/gcc/testsuite/g++.dg/diagnostic/variadic1.C b/gcc/testsuite/g++.dg/diagnostic/variadic1.C
new file mode 100644
index 00000000000..69f1f988f30
--- /dev/null
+++ b/gcc/testsuite/g++.dg/diagnostic/variadic1.C
@@ -0,0 +1,9 @@
+// PR c++/55241
+// { dg-do compile { target c++11 } }
+
+template<int N> struct B { };
+template<typename... T> struct A
+{
+ B<sizeof...(T)> f(); // { dg-error "sizeof\\.\\.\\." }
+ B<42> f(); // { dg-error "cannot be overloaded" }
+};
diff --git a/gcc/testsuite/g++.dg/eh/anon1.C b/gcc/testsuite/g++.dg/eh/anon1.C
new file mode 100644
index 00000000000..2a5ef4bc5e3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/eh/anon1.C
@@ -0,0 +1,26 @@
+// Test that the anonymous namespace isn't mangled with random characters,
+// but also doesn't get mixed up with an anonymous namespace in another
+// translation unit.
+
+// { dg-do run }
+// { dg-additional-sources "anon1a.cc" }
+
+namespace {
+ struct A
+ {
+ virtual void f();
+ };
+
+ void A::f() { }
+}
+
+extern void g();
+
+int main()
+{
+ try {
+ try {
+ g();
+ } catch (A) { __builtin_abort(); }
+ } catch (...) { }
+}
diff --git a/gcc/testsuite/g++.dg/eh/anon1a.cc b/gcc/testsuite/g++.dg/eh/anon1a.cc
new file mode 100644
index 00000000000..ba161ac2b01
--- /dev/null
+++ b/gcc/testsuite/g++.dg/eh/anon1a.cc
@@ -0,0 +1,10 @@
+namespace {
+ struct A
+ {
+ virtual void f();
+ };
+
+ void A::f() { }
+}
+
+void g() { throw A(); }
diff --git a/gcc/testsuite/g++.dg/eh/anon2.C b/gcc/testsuite/g++.dg/eh/anon2.C
new file mode 100644
index 00000000000..9ff9ee3ab7f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/eh/anon2.C
@@ -0,0 +1,24 @@
+// Test that the anonymous namespace isn't mangled with random characters,
+// but also doesn't get mixed up with an anonymous namespace in another
+// translation unit.
+// { dg-final { scan-assembler "\\*N12_GLOBAL__N_11AE" } }
+
+namespace {
+ struct A
+ {
+ virtual void f();
+ };
+
+ void A::f() { }
+}
+
+extern void g();
+
+int main()
+{
+ try {
+ try {
+ g();
+ } catch (A) { __builtin_abort(); }
+ } catch (...) { }
+}
diff --git a/gcc/testsuite/g++.dg/ext/vector21.C b/gcc/testsuite/g++.dg/ext/vector21.C
new file mode 100644
index 00000000000..71634c32786
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/vector21.C
@@ -0,0 +1,39 @@
+/* { dg-do compile } */
+/* { dg-options "-O -fdump-tree-gimple" } */
+
+typedef int vec __attribute__ ((vector_size (4 * sizeof (int))));
+
+void f1 (vec *x)
+{
+ *x = (*x >= 0) ? *x : -*x;
+}
+void f2 (vec *x)
+{
+ *x = (0 < *x) ? *x : -*x;
+}
+void g1 (vec *x)
+{
+ *x = (*x < 0) ? -*x : *x;
+}
+void g2 (vec *x)
+{
+ *x = (0 > *x) ? -*x : *x;
+}
+void h (vec *x, vec *y)
+{
+ *x = (*x < *y) ? *y : *x;
+}
+void i (vec *x, vec *y)
+{
+ *x = (*x < *y) ? *x : *y;
+}
+void j (vec *x, vec *y)
+{
+ *x = (*x < *y) ? *x : *x;
+}
+
+/* { dg-final { scan-tree-dump-times "ABS_EXPR" 4 "gimple" } } */
+/* { dg-final { scan-tree-dump "MIN_EXPR" "gimple" } } */
+/* { dg-final { scan-tree-dump "MAX_EXPR" "gimple" } } */
+/* { dg-final { scan-tree-dump-not "VEC_COND_EXPR" "gimple" } } */
+/* { dg-final { cleanup-tree-dump "gimple" } } */
diff --git a/gcc/testsuite/g++.dg/ipa/devirt-12.C b/gcc/testsuite/g++.dg/ipa/devirt-12.C
new file mode 100644
index 00000000000..2fdf5c49b77
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ipa/devirt-12.C
@@ -0,0 +1,22 @@
+// { dg-do compile }
+// { dg-options "-std=c++11 -O -fdump-ipa-inline" }
+
+class Foo
+{
+public:
+ void Bar() const
+ {
+ __builtin_puts ("Howdy!");
+ }
+};
+
+int main()
+{
+ Foo x;
+ auto y = &Foo::Bar;
+ (x.*y)();
+ return 0;
+}
+
+// { dg-final { scan-ipa-dump "Inlined 1 calls, eliminated 1 functions" "inline" } }
+// { dg-final { cleanup-ipa-dump "inline" } }
diff --git a/gcc/testsuite/g++.dg/opt/longbranch2.C b/gcc/testsuite/g++.dg/opt/longbranch2.C
index de63f697fcf..4a8d5eef735 100644
--- a/gcc/testsuite/g++.dg/opt/longbranch2.C
+++ b/gcc/testsuite/g++.dg/opt/longbranch2.C
@@ -15,8 +15,8 @@ public:
class EBCOTLut : public JKeeper {
unsigned char a1[1<<8];
- unsigned char a2[1<<8];
- unsigned char a3[1<<8];
+ unsigned char a2[1<<9];
+ unsigned char a3[1<<9];
long a4[1<<9];
public:
EBCOTLut(void);
diff --git a/gcc/testsuite/g++.dg/other/abstract5.C b/gcc/testsuite/g++.dg/other/abstract5.C
new file mode 100644
index 00000000000..d13dd9e5160
--- /dev/null
+++ b/gcc/testsuite/g++.dg/other/abstract5.C
@@ -0,0 +1,6 @@
+struct A
+{
+ virtual void f() = 0;
+};
+
+typedef A (*fp)(); // { dg-error "abstract" }
diff --git a/gcc/testsuite/g++.dg/parse/typename7.C b/gcc/testsuite/g++.dg/parse/typename7.C
index 2d823f8078e..6ec76961013 100644
--- a/gcc/testsuite/g++.dg/parse/typename7.C
+++ b/gcc/testsuite/g++.dg/parse/typename7.C
@@ -22,7 +22,7 @@ struct B
A().bar<typename T>(t); } // { dg-error "expected|parse error|no matching" }
// { dg-message "candidate" "candidate note" { target *-*-* } 22 }
void bad(T t) {
- B<typename T>::bar(t); } // { dg-error "invalid|not a template" }
+ B<typename T>::bar(t); } // { dg-error "invalid|qualified-id|not a template" }
};
void baz()
diff --git a/gcc/testsuite/g++.dg/template/abstract-dr337.C b/gcc/testsuite/g++.dg/template/abstract-dr337.C
new file mode 100644
index 00000000000..6905262d6cb
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/abstract-dr337.C
@@ -0,0 +1,13 @@
+// PR c++/17232 (DR 337)
+
+template<typename T>
+class A {
+ virtual void f() = 0;
+};
+
+template<typename T>
+void g(T (*a)[1]) {} // { dg-error "abstract" "" }
+
+int main() {
+ g<A<int> >(0); // { dg-error "no matching function" }
+}
diff --git a/gcc/testsuite/g++.dg/template/access26.C b/gcc/testsuite/g++.dg/template/access26.C
new file mode 100644
index 00000000000..1c5de9a8fd2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/access26.C
@@ -0,0 +1,6 @@
+// PR c++/45917
+
+template < typename T >
+struct A { static int i; };
+class B { typedef int X; }; // { dg-error "private" }
+void f() { A<B::X>::i = 0; } // { dg-error "this context" }
diff --git a/gcc/testsuite/g++.dg/template/arrow2.C b/gcc/testsuite/g++.dg/template/arrow2.C
new file mode 100644
index 00000000000..8ec9e01d0de
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/arrow2.C
@@ -0,0 +1,12 @@
+// PR c++/56639
+
+struct A {
+ int i;
+ static A* f();
+};
+
+struct B {
+ void g() {
+ int (A::f()->i);
+ }
+};
diff --git a/gcc/testsuite/g++.dg/template/const6.C b/gcc/testsuite/g++.dg/template/const6.C
new file mode 100644
index 00000000000..3c40d2635bc
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/const6.C
@@ -0,0 +1,7 @@
+// PR c++/56684
+
+template < int T > struct S
+{
+ static const int Ti = T;
+ S() { 1 << Ti; }
+};
diff --git a/gcc/testsuite/g++.dg/template/friend54.C b/gcc/testsuite/g++.dg/template/friend54.C
new file mode 100644
index 00000000000..ead7a72fcc9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/friend54.C
@@ -0,0 +1,18 @@
+// PR c++/56642
+
+template <class T> struct A;
+
+template <class T>
+A<T> f(T*) { return A<T>(); }
+
+template <class T>
+struct A
+{
+ friend A f<T>(T*);
+};
+
+int main()
+{
+ int *p = 0;
+ f(p);
+}
diff --git a/gcc/testsuite/g++.dg/template/sfinae-dr657.C b/gcc/testsuite/g++.dg/template/sfinae-dr657.C
new file mode 100644
index 00000000000..b78b5a919c1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/sfinae-dr657.C
@@ -0,0 +1,22 @@
+// DR 657
+// Test that a return or parameter type with abstract class type causes a
+// deduction failure.
+
+struct A
+{
+ A();
+ A(int);
+ virtual void f() = 0;
+};
+
+template<class T> T declval();
+template<class T> int declval(...);
+
+template<class T> void arg(T);
+template<class T> int arg(...);
+
+int main()
+{
+ int i = declval<A>();
+ i = arg<A>(1);
+}
diff --git a/gcc/testsuite/g++.dg/torture/20121105-1.C b/gcc/testsuite/g++.dg/torture/20121105-1.C
index 03323421a5e..10eeeb90945 100644
--- a/gcc/testsuite/g++.dg/torture/20121105-1.C
+++ b/gcc/testsuite/g++.dg/torture/20121105-1.C
@@ -2,6 +2,8 @@
// Reported by Remi Vanicat <vanicat@debian.org>
// Reduced testcase by Markus Trippelsdorf <markus@trippelsdorf.de>
+__extension__ typedef __INTPTR_TYPE__ intptr_t;
+
struct A;
struct B
{
@@ -25,7 +27,7 @@ struct D
};
D c(0);
-const long d = (long)&c;
+const intptr_t d = (intptr_t)&c;
B *const e = (B *)&d;
static bool
diff --git a/gcc/testsuite/g++.dg/torture/pr56635.C b/gcc/testsuite/g++.dg/torture/pr56635.C
new file mode 100644
index 00000000000..53d6bb96ad5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr56635.C
@@ -0,0 +1,17 @@
+// PR tree-optimization/56635
+// { dg-do compile }
+
+struct A { _Complex double a; };
+
+void
+foo (A **x, A **y)
+{
+ A r;
+ if (__real__ x[0]->a)
+ {
+ r.a = y[0]->a / x[0]->a;
+ **x = r;
+ }
+ else
+ **x = **y;
+}
diff --git a/gcc/testsuite/g++.dg/tree-ssa/ssa-dom.C b/gcc/testsuite/g++.dg/tree-ssa/ssa-dom.C
new file mode 100644
index 00000000000..5f63865c166
--- /dev/null
+++ b/gcc/testsuite/g++.dg/tree-ssa/ssa-dom.C
@@ -0,0 +1,104 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-dom1" } */
+
+typedef long unsigned int size_t;
+extern void abort (void) __attribute__ ((__noreturn__));
+union tree_node;
+typedef union tree_node *tree;
+union gimple_statement_d;
+typedef union gimple_statement_d *gimple;
+typedef const union gimple_statement_d *const_gimple;
+
+enum gimple_code
+{
+ GIMPLE_RETURN = 10,
+};
+
+
+
+
+
+struct gimple_statement_base
+{
+
+
+ enum gimple_code code:8;
+};
+
+
+enum gimple_statement_structure_enum
+{
+ xyz
+};
+
+
+
+
+
+
+union gimple_statement_d
+{
+ struct gimple_statement_base gsbase;
+};
+
+
+
+
+
+extern size_t const gimple_ops_offset_[];
+
+
+extern enum gimple_statement_structure_enum const gss_for_code_[];
+
+
+static inline enum gimple_code
+gimple_code (const_gimple g)
+{
+ return g->gsbase.code;
+}
+
+
+
+
+static inline enum gimple_statement_structure_enum
+gss_for_code (enum gimple_code code)
+{
+ return gss_for_code_[code];
+}
+
+
+
+
+static inline enum gimple_statement_structure_enum
+gimple_statement_structure (gimple gs)
+{
+ return gss_for_code (gimple_code (gs));
+}
+
+
+static inline tree *
+gimple_ops (gimple gs)
+{
+ size_t off;
+ off = gimple_ops_offset_[gimple_statement_structure (gs)];
+ return (tree *) ((char *) gs + off);
+}
+
+
+static inline void
+gimple_set_op (gimple gs, unsigned i, tree op)
+{
+ gimple_ops (gs)[i] = op;
+}
+
+void
+gimple_return_set_retval (gimple gs, tree retval)
+{
+ const_gimple __gs = (gs);
+ if (gimple_code (__gs) != (GIMPLE_RETURN))
+ abort ();
+ gimple_set_op (gs, 0, retval);
+}
+/* { dg-final { scan-tree-dump-times "gss_for_code_.10." 1 "dom1"} } */
+/* { dg-final { cleanup-tree-dump "dom1" } } */
+
diff --git a/gcc/testsuite/g++.dg/warn/Wdiv-by-zero-2.C b/gcc/testsuite/g++.dg/warn/Wdiv-by-zero-2.C
new file mode 100644
index 00000000000..d7e226ce0a5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wdiv-by-zero-2.C
@@ -0,0 +1,34 @@
+// PR c++/56607
+// { dg-do compile { target { { lp64 || ilp32 } || llp64 } } }
+// { dg-options "-O2 -Wdiv-by-zero -std=c++11" }
+
+constexpr int sc () { return sizeof (char); }
+constexpr int si () { return sizeof (int); }
+constexpr int zc () { return sc () - 1; }
+constexpr int zi (int d) { return si () / d - 1; }
+
+int
+f1 (void)
+{
+ return 1 / zc (); // { dg-warning "division by zero" }
+}
+
+int
+f2 (void)
+{
+ constexpr int x = zc ();
+ return 1 / x; // { dg-warning "division by zero" }
+}
+
+int
+f3 (void)
+{
+ return 1 / zi (3); // { dg-warning "division by zero" }
+}
+
+int
+f4 (void)
+{
+ constexpr int x = zi (3);
+ return 1 / x; // { dg-warning "division by zero" }
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr56571.c b/gcc/testsuite/gcc.c-torture/compile/pr56571.c
new file mode 100644
index 00000000000..248148c9ff8
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr56571.c
@@ -0,0 +1,8 @@
+/* { dg-options "-funroll-loops -ftracer" } */
+int a, b;
+
+int f(void)
+{
+ (a % b) && f();
+ a = (0 || a | (a ? : 1));
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/builtins/builtins.exp b/gcc/testsuite/gcc.c-torture/execute/builtins/builtins.exp
index 45cfaddba19..d157fe392f5 100644
--- a/gcc/testsuite/gcc.c-torture/execute/builtins/builtins.exp
+++ b/gcc/testsuite/gcc.c-torture/execute/builtins/builtins.exp
@@ -43,7 +43,8 @@ if [istarget "powerpc-*-darwin*"] {
}
if { [istarget *-*-eabi*]
|| [istarget *-*-elf]
- || [istarget *-*-mingw*] } {
+ || [istarget *-*-mingw*]
+ || [istarget *-*-rtems*] } {
lappend additional_flags "-Wl,--allow-multiple-definition"
}
diff --git a/gcc/testsuite/gcc.dg/graphite/id-6.c b/gcc/testsuite/gcc.dg/graphite/id-6.c
index c3aab432a59..dd6fecda3bd 100644
--- a/gcc/testsuite/gcc.dg/graphite/id-6.c
+++ b/gcc/testsuite/gcc.dg/graphite/id-6.c
@@ -2,7 +2,7 @@
void foo (int);
int test ()
{
- int a[N];
+ int a[N + 8];
unsigned i;
for (i = 0; i < N; i++)
diff --git a/gcc/testsuite/gcc.dg/graphite/pr35356-2.c b/gcc/testsuite/gcc.dg/graphite/pr35356-2.c
index 66cfdea5aef..b406d1096ba 100644
--- a/gcc/testsuite/gcc.dg/graphite/pr35356-2.c
+++ b/gcc/testsuite/gcc.dg/graphite/pr35356-2.c
@@ -39,6 +39,6 @@ foo (int bar, int n, int k)
*/
-/* { dg-final { scan-tree-dump-times "MIN_EXPR" 4 "graphite" } } */
-/* { dg-final { scan-tree-dump-times "MAX_EXPR" 4 "graphite" } } */
+/* { dg-final { scan-tree-dump-times "MIN_EXPR\[^\\n\\r]*;" 4 "graphite" } } */
+/* { dg-final { scan-tree-dump-times "MAX_EXPR\[^\\n\\r]*;" 4 "graphite" } } */
/* { dg-final { cleanup-tree-dump "graphite" } } */
diff --git a/gcc/testsuite/gcc.dg/graphite/scop-3.c b/gcc/testsuite/gcc.dg/graphite/scop-3.c
index e20bfdcb34b..18917c0edcc 100644
--- a/gcc/testsuite/gcc.dg/graphite/scop-3.c
+++ b/gcc/testsuite/gcc.dg/graphite/scop-3.c
@@ -1,7 +1,7 @@
int toto()
{
int i, j, k;
- int a[100][100];
+ int a[100][200];
int b[100];
for (i = 1; i < 100; i++)
diff --git a/gcc/testsuite/gcc.dg/pr53265.c b/gcc/testsuite/gcc.dg/pr53265.c
new file mode 100644
index 00000000000..c60a736a927
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr53265.c
@@ -0,0 +1,156 @@
+/* PR tree-optimization/53265 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -Wall" } */
+
+void bar (void *);
+int baz (int);
+
+void
+fn1 (void)
+{
+ unsigned int a[128];
+ int i;
+
+ for (i = 0; i < 128; ++i) /* { dg-message "note: containing loop" } */
+ a[i] = i * 0x02000001; /* { dg-warning "invokes undefined behavior" } */
+ bar (a);
+}
+
+void
+fn2 (void)
+{
+ unsigned long long a[128];
+ int i;
+
+ for (i = 0; i < 128; i++) /* { dg-message "note: containing loop" } */
+ a[i] = (i + 1LL) * 0x0123456789ABCDEFLL; /* { dg-warning "invokes undefined behavior" } */
+ bar (a);
+}
+
+void
+fn3 (void)
+{
+ unsigned char a[16], b[16], c[16];
+ int i;
+
+ bar (b);
+ for (i = 0; i < (int) (sizeof (a) / sizeof (a[0])); i++) /* { dg-message "note: containing loop" } */
+ {
+ c[i + 8] = b[i]; /* { dg-warning "invokes undefined behavior" } */
+ a[i + 8] = b[i + 8];
+ }
+ bar (a);
+ bar (c);
+}
+
+void
+fn4 (void)
+{
+ unsigned int *a[32], *o, i;
+
+ bar (a);
+ for (i = 0; i <= sizeof (a) / sizeof (a[0]); i++) /* { dg-message "note: containing loop" "" { xfail *-*-* } } */
+ {
+ o = a[i]; /* { dg-warning "invokes undefined behavior" "" { xfail *-*-* } } */
+ bar (o);
+ }
+}
+
+void
+fn5 (void)
+{
+ unsigned short a[23940];
+ unsigned int b[1140];
+ int j;
+
+ bar (b);
+ for (j = 0; j < 1140; j++) /* { dg-message "note: containing loop" } */
+ a[23940 + j - 950] = b[j]; /* { dg-warning "invokes undefined behavior" } */
+ bar (a);
+}
+
+void
+fn6 (void)
+{
+ double a[4][3], b[12];
+ int i;
+ bar (b);
+ for (i = 0; i < 12; i++) /* { dg-message "note: containing loop" } */
+ a[0][i] = b[i] / 10000.0; /* { dg-warning "invokes undefined behavior" } */
+ bar (a);
+}
+
+void
+fn7 (void)
+{
+ int a[16], b, c;
+ bar (a);
+ for (b = a[c = 0]; c < 16; b = a[++c]) /* { dg-warning "invokes undefined behavior" "" { xfail *-*-* } } */
+ baz (b);
+}
+
+/* { dg-message "note: containing loop" "" { xfail *-*-* } 88 } */
+
+const void *va, *vb, *vc, *vd, *ve;
+const void *vf[4];
+void
+fn8 (void)
+{
+ unsigned long i;
+ vf[0] = va; vf[1] = vb; vf[2] = vc; vf[3] = vd;
+ for (i = 0; i < (sizeof (vf) / sizeof (vf[0])); i++)
+ if (!vf[i])
+ vf[i] = ve;
+}
+
+int wa, wb[53][5], wc[53][5];
+
+void
+fn9 (void)
+{
+ int i, j, k;
+ for (i = 0; i < 53; i++)
+ for (j = 16 / (((wa & 1) != 0) ? 8 : 4); j > 0; j--)
+ {
+ int d = 1;
+ if (wb[i][j] == 0 || wc[i][1] != 0)
+ continue;
+ for (k = 0; k < j; k++)
+ if (wc[i + k][1])
+ {
+ d = 0;
+ break;
+ }
+ if (!d)
+ continue;
+ wc[i][j] = baz (0);
+ }
+}
+
+int xa[18];
+
+void
+fn10 (void)
+{
+ int i;
+ for (i = 16; i < 32; i++) /* { dg-message "note: containing loop" } */
+ xa[i] = 26; /* { dg-warning "invokes undefined behavior" } */
+}
+
+__attribute__((noinline)) static void
+fn11 (int x)
+{
+ int i = 1;
+ if (x > 1)
+ do
+ baz (i);
+ while (++i != x); /* { dg-bogus "invokes undefined behavior" } */
+}
+
+void
+fn12 (void)
+{
+ fn11 (1);
+ fn11 (1);
+ fn11 (1);
+}
diff --git a/gcc/testsuite/gcc.dg/pr56355-1.c b/gcc/testsuite/gcc.dg/pr56355-1.c
new file mode 100644
index 00000000000..08b9c2e7109
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr56355-1.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -Wstrict-overflow=4" } */
+
+int
+f (int i)
+{
+ return __builtin_abs (i * i); /* { dg-warning "assuming signed overflow" } */
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr49518.c b/gcc/testsuite/gcc.dg/torture/pr49518.c
index 84a10fbbeeb..55761fd6108 100644
--- a/gcc/testsuite/gcc.dg/torture/pr49518.c
+++ b/gcc/testsuite/gcc.dg/torture/pr49518.c
@@ -1,4 +1,5 @@
/* { dg-do compile } */
+/* { dg-options "-Wno-aggressive-loop-optimizations" } */
int a, b;
struct S { unsigned int s, t, u; } c, d = { 0, 1, 0 };
diff --git a/gcc/testsuite/gcc.dg/torture/pr56661.c b/gcc/testsuite/gcc.dg/torture/pr56661.c
new file mode 100644
index 00000000000..6fdaedb3176
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr56661.c
@@ -0,0 +1,46 @@
+/* { dg-do run } */
+
+__attribute__((noinline, noclone)) void
+bar (int *b)
+{
+ b[0] = b[1] = b[2] = 1;
+}
+
+__attribute__((noinline, noclone)) int
+baz (int x)
+{
+ if (x != 1)
+ __builtin_abort ();
+}
+
+void
+foo (int x)
+{
+ if (x == 0)
+ {
+ int *b = __builtin_malloc (3 * sizeof (int));
+ while (b[0])
+ ;
+ }
+ else if (x == 1)
+ {
+ int i, j;
+ int *b = __builtin_malloc (3 * sizeof (int));
+ for (i = 0; i < 2; i++)
+ {
+ bar (b);
+ for (j = 0; j < 3; ++j)
+ baz (b[j]);
+ baz (b[0]);
+ }
+ }
+}
+
+int
+main ()
+{
+ int x = 1;
+ asm volatile ("" : "+r" (x));
+ foo (x);
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr56689.c b/gcc/testsuite/gcc.dg/torture/pr56689.c
new file mode 100644
index 00000000000..719f528c2c0
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr56689.c
@@ -0,0 +1,46 @@
+/* { dg-do compile } */
+
+extern int baz ();
+extern void bar (void);
+extern void noret (void) __attribute__ ((__noreturn__));
+
+void
+fix_register (const char *name, int fixed, int call_used, int nregs)
+{
+ int i;
+ int reg;
+
+ if ((reg = baz ()) >= 0)
+ {
+ for (i = reg; i < nregs; i++)
+ {
+ if ((i == 15 || i == 11) && (fixed == 0 || call_used == 0))
+ {
+ switch (fixed)
+ {
+ case 0:
+ switch (call_used)
+ {
+ case 1:
+ bar ();
+ break;
+ default:
+ (noret ());
+ }
+ case 1:
+ switch (call_used)
+ {
+ case 1:
+ break;
+ case 0:
+ default:
+ (noret ());
+ }
+ break;
+ default:
+ (noret ());
+ }
+ }
+ }
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/cunroll-10.c b/gcc/testsuite/gcc.dg/tree-ssa/cunroll-10.c
index 7893565918a..f2cd904efc6 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/cunroll-10.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/cunroll-10.c
@@ -2,10 +2,11 @@
/* { dg-options "-O3 -Warray-bounds -fdump-tree-cunroll-details" } */
int a[3];
int b[4];
-main()
+int
+foo (int n)
{
int i;
- for (i=0;i<4;i++)
+ for (i=0;i<n;i++)
if (b[i]==2)
a[i]++;
}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr55579.c b/gcc/testsuite/gcc.dg/tree-ssa/pr55579.c
index 741bd41551d..16807cf66c6 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/pr55579.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr55579.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -g -fdump-tree-esra" } */
+/* { dg-options "-O2 -g -fdump-tree-esra -fvar-tracking-assignments" } */
struct S { int a; char b; char c; short d; };
@@ -11,5 +11,5 @@ foo (int x)
return x;
}
-/* { dg-final { scan-tree-dump "Created a debug-only replacement for s" "esra" {xfail { hppa*-*-hpux* && { ! lp64 } } } } } */
+/* { dg-final { scan-tree-dump "Created a debug-only replacement for s" "esra" } } */
/* { dg-final { cleanup-tree-dump "esra" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vector-4.c b/gcc/testsuite/gcc.dg/tree-ssa/vector-4.c
index c2a39ca6751..10aebc47b45 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/vector-4.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vector-4.c
@@ -9,6 +9,7 @@ v4si vs (v4si a, v4si b)
}
/* The compound literal should be placed directly in the vec_perm. */
+/* Test is xfailed on 32-bit hppa*-*-* because target-callee-copies. */
/* { dg-final { scan-tree-dump-times "VEC_PERM_EXPR <a, b, { 0, 4, 1, 5 }>;" 1 "gimple" { xfail { hppa*-*-* && { ! lp64 } } } } } */
/* { dg-final { cleanup-tree-dump "gimple" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp47.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp47.c
index bf4f0f39e1e..d8c5841eb58 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/vrp47.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp47.c
@@ -4,7 +4,7 @@
jumps when evaluating an && condition. VRP is not able to optimize
this. */
/* { dg-do compile { target { ! "mips*-*-* s390*-*-* avr-*-* mn10300-*-*" } } } */
-/* { dg-options "-O2 -fdump-tree-vrp1 -fdump-tree-dom1 -fdump-tree-dom2" } */
+/* { dg-options "-O2 -fdump-tree-vrp1 -fdump-tree-dom1 -fdump-tree-vrp2" } */
/* { dg-additional-options "-march=i586" { target { { i?86-*-* x86_64-*-* } && ia32 } } } */
/* Skip on ARM Cortex-M0, where LOGICAL_OP_NON_SHORT_CIRCUIT is set to false,
leading to two conditional jumps when evaluating an && condition. VRP is
@@ -40,15 +40,14 @@ int f(int x)
0 or 1. */
/* { dg-final { scan-tree-dump-times "\[xy\]\[^ \]* !=" 0 "vrp1" } } */
-/* This one needs more copy propagation that only happens in dom1. */
-/* { dg-final { scan-tree-dump-times "x\[^ \]* & y" 1 "dom1" { xfail *-*-* } } } */
-/* { dg-final { scan-tree-dump-times "x\[^ \]* & y" 1 "dom2" } } */
-/* { dg-final { scan-tree-dump-times "x\[^ \]* & y" 1 "vrp1" { xfail *-*-* } } } */
-
-/* These two are fully simplified by VRP. */
+/* These two are fully simplified by VRP1. */
/* { dg-final { scan-tree-dump-times "x\[^ \]* \[|\] y" 1 "vrp1" } } */
/* { dg-final { scan-tree-dump-times "x\[^ \]* \\^ 1" 1 "vrp1" } } */
+/* VRP2 gets rid of the remaining & 1 operations, x and y are always
+ either 0 or 1. */
+/* { dg-final { scan-tree-dump-times " & 1;" 0 "vrp2" } } */
+
/* { dg-final { cleanup-tree-dump "vrp1" } } */
/* { dg-final { cleanup-tree-dump "dom1" } } */
-/* { dg-final { cleanup-tree-dump "dom2" } } */
+/* { dg-final { cleanup-tree-dump "vrp2" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/fast-math-bb-slp-call-3.c b/gcc/testsuite/gcc.dg/vect/fast-math-bb-slp-call-3.c
new file mode 100644
index 00000000000..5878d418f50
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/fast-math-bb-slp-call-3.c
@@ -0,0 +1,68 @@
+#include <stdlib.h>
+#include <math.h>
+
+#define MIN(a, b) (((a) < (b)) ? (a) : (b))
+#define MAX(a, b) (((a) > (b)) ? (a) : (b))
+
+typedef struct {
+ int initialHeight, initialWidth;
+ int rotatedHeight, rotatedWidth;
+ int autoCropHeight, autoCropWidth;
+} ufraw_data;
+
+void __attribute__((noinline,noclone))
+ufraw_test(ufraw_data *uf)
+{
+ int iWidth = uf->initialWidth;
+ int iHeight = uf->initialHeight;
+ double aspectRatio = ((double)iWidth) / iHeight;
+ double midX = iWidth / 2.0 - 0.5;
+ double midY = iHeight / 2.0 - 0.5;
+ double maxX = 0, maxY = 0;
+ double minX = 999999, minY = 999999;
+ double lastX = 0, lastY = 0, area = 0;
+ double scale;
+ int i;
+ for (i = 0; i < iWidth + iHeight - 1; i++)
+ {
+ int x, y;
+ if (i < iWidth) { // Trace the left border of the image
+ x = i;
+ y = 0;
+ } else { // Trace the bottom border of the image
+ x = iWidth - 1;
+ y = i - iWidth + 1;
+ }
+ double srcX = x - midX;
+ double srcY = y - midY;
+ // A digital planimeter:
+ area += srcY * lastX - srcX * lastY;
+ lastX = srcX;
+ lastY = srcY;
+ maxX = MAX(maxX, fabs(srcX));
+ maxY = MAX(maxY, fabs(srcY));
+ if (fabs(srcX / srcY) > aspectRatio)
+ minX = MIN(minX, fabs(srcX));
+ else
+ minY = MIN(minY, fabs(srcY));
+ }
+ scale = sqrt((iWidth - 1) * (iHeight - 1) / area);
+ uf->rotatedWidth = MIN(ceil(2 * maxX + 1.0) * scale, 2 * iWidth);
+ uf->rotatedHeight = MIN(ceil(2 * maxY + 1.0) * scale, 2 * iHeight);
+ uf->autoCropWidth = MIN(floor(2 * minX) * scale, 2 * iWidth);
+ uf->autoCropHeight = MIN(floor(2 * minY) * scale, 2 * iHeight);
+ if (uf->autoCropWidth != 3)
+ abort ();
+}
+
+int main()
+{
+ ufraw_data uf_data;
+ ufraw_data *uf = &uf_data;
+ uf->initialWidth = 4;
+ uf->initialHeight = 5;
+ ufraw_test(uf);
+ return 0;
+}
+
+/* { dg-final { cleanup-tree-dump "slp" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-outer-3a-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-outer-3a-big-array.c
index c6486db691b..ecb2d9076d2 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-outer-3a-big-array.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-outer-3a-big-array.c
@@ -49,6 +49,5 @@ int main (void)
}
/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail vect_no_align } } } */
-/* { dg-final { scan-tree-dump-times "step doesn't divide the vector-size" 2 "vect" { target { ! vect_multiple_sizes } } } } */
-/* { dg-final { scan-tree-dump-times "step doesn't divide the vector-size" 3 "vect" { target vect_multiple_sizes } } } */
+/* { dg-final { scan-tree-dump-times "step doesn't divide the vector-size" 1 "vect" } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-outer-3a.c b/gcc/testsuite/gcc.dg/vect/vect-outer-3a.c
index 3d6e1076e79..d0b4f80745f 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-outer-3a.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-outer-3a.c
@@ -49,6 +49,5 @@ int main (void)
}
/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail vect_no_align } } } */
-/* { dg-final { scan-tree-dump-times "step doesn't divide the vector-size" 2 "vect" { target { ! vect_multiple_sizes } } } } */
-/* { dg-final { scan-tree-dump-times "step doesn't divide the vector-size" 3 "vect" { target vect_multiple_sizes } } } */
+/* { dg-final { scan-tree-dump-times "step doesn't divide the vector-size" 1 "vect" } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/extr.c b/gcc/testsuite/gcc.target/aarch64/extr.c
new file mode 100644
index 00000000000..a78dd8d607b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/extr.c
@@ -0,0 +1,34 @@
+/* { dg-options "-O2 --save-temps" } */
+/* { dg-do run } */
+
+extern void abort (void);
+
+int
+test_si (int a, int b)
+{
+ /* { dg-final { scan-assembler "extr\tw\[0-9\]+, w\[0-9\]+, w\[0-9\]+, 27\n" } } */
+ return (a << 5) | ((unsigned int) b >> 27);
+}
+
+long long
+test_di (long long a, long long b)
+{
+ /* { dg-final { scan-assembler "extr\tx\[0-9\]+, x\[0-9\]+, x\[0-9\]+, 45\n" } } */
+ return (a << 19) | ((unsigned long long) b >> 45);
+}
+
+int
+main ()
+{
+ int v;
+ long long w;
+ v = test_si (0x00000004, 0x30000000);
+ if (v != 0x00000086)
+ abort();
+ w = test_di (0x0001040040040004ll, 0x0070050066666666ll);
+ if (w != 0x2002002000200380ll)
+ abort();
+ return 0;
+}
+
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/movk.c b/gcc/testsuite/gcc.target/aarch64/movk.c
new file mode 100644
index 00000000000..e4b22098c44
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/movk.c
@@ -0,0 +1,31 @@
+/* { dg-do run } */
+/* { dg-options "-O2 --save-temps -fno-inline" } */
+
+extern void abort (void);
+
+long long int
+dummy_number_generator ()
+{
+ /* { dg-final { scan-assembler "movk\tx\[0-9\]+, 0xefff, lsl 16" } } */
+ /* { dg-final { scan-assembler "movk\tx\[0-9\]+, 0xc4cc, lsl 32" } } */
+ /* { dg-final { scan-assembler "movk\tx\[0-9\]+, 0xfffe, lsl 48" } } */
+ return -346565474575675;
+}
+
+int
+main (void)
+{
+
+ long long int num = dummy_number_generator ();
+ if (num > 0)
+ abort ();
+
+ /* { dg-final { scan-assembler "movk\tx\[0-9\]+, 0x4667, lsl 16" } } */
+ /* { dg-final { scan-assembler "movk\tx\[0-9\]+, 0x7a3d, lsl 32" } } */
+ if (num / 69313094915135 != -5)
+ abort ();
+
+ return 0;
+}
+
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/ror.c b/gcc/testsuite/gcc.target/aarch64/ror.c
new file mode 100644
index 00000000000..4d266f00471
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/ror.c
@@ -0,0 +1,34 @@
+/* { dg-options "-O2 --save-temps" } */
+/* { dg-do run } */
+
+extern void abort (void);
+
+int
+test_si (int a)
+{
+ /* { dg-final { scan-assembler "ror\tw\[0-9\]+, w\[0-9\]+, 27\n" } } */
+ return (a << 5) | ((unsigned int) a >> 27);
+}
+
+long long
+test_di (long long a)
+{
+ /* { dg-final { scan-assembler "ror\tx\[0-9\]+, x\[0-9\]+, 45\n" } } */
+ return (a << 19) | ((unsigned long long) a >> 45);
+}
+
+int
+main ()
+{
+ int v;
+ long long w;
+ v = test_si (0x0203050);
+ if (v != 0x4060a00)
+ abort();
+ w = test_di (0x0000020506010304ll);
+ if (w != 0x1028300818200000ll)
+ abort();
+ return 0;
+}
+
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/sbc.c b/gcc/testsuite/gcc.target/aarch64/sbc.c
new file mode 100644
index 00000000000..e479910bc2c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sbc.c
@@ -0,0 +1,41 @@
+/* { dg-do run } */
+/* { dg-options "-O2 --save-temps" } */
+
+extern void abort (void);
+
+typedef unsigned int u32int;
+typedef unsigned long long u64int;
+
+u32int
+test_si (u32int w1, u32int w2, u32int w3, u32int w4)
+{
+ u32int w0;
+ /* { dg-final { scan-assembler "sbc\tw\[0-9\]+, w\[0-9\]+, w\[0-9\]+\n" } } */
+ w0 = w1 - w2 - (w3 < w4);
+ return w0;
+}
+
+u64int
+test_di (u64int x1, u64int x2, u64int x3, u64int x4)
+{
+ u64int x0;
+ /* { dg-final { scan-assembler "sbc\tx\[0-9\]+, x\[0-9\]+, x\[0-9\]+\n" } } */
+ x0 = x1 - x2 - (x3 < x4);
+ return x0;
+}
+
+int
+main ()
+{
+ u32int x;
+ u64int y;
+ x = test_si (7, 8, 12, 15);
+ if (x != -2)
+ abort();
+ y = test_di (0x987654321ll, 0x123456789ll, 0x345345345ll, 0x123123123ll);
+ if (y != 0x8641fdb98ll)
+ abort();
+ return 0;
+}
+
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vect-compile.c b/gcc/testsuite/gcc.target/aarch64/vect-compile.c
index 260c1e041c0..33130aab55d 100644
--- a/gcc/testsuite/gcc.target/aarch64/vect-compile.c
+++ b/gcc/testsuite/gcc.target/aarch64/vect-compile.c
@@ -16,5 +16,7 @@
/* { dg-final { scan-assembler "uminv" } } */
/* { dg-final { scan-assembler "smaxv" } } */
/* { dg-final { scan-assembler "sminv" } } */
+/* { dg-final { scan-assembler "sabd" } } */
+/* { dg-final { scan-assembler "saba" } } */
/* { dg-final { scan-assembler-times "addv" 2} } */
/* { dg-final { scan-assembler-times "addp" 2} } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vect-fp-compile.c b/gcc/testsuite/gcc.target/aarch64/vect-fp-compile.c
index b953dfae3b8..47ef100e87b 100644
--- a/gcc/testsuite/gcc.target/aarch64/vect-fp-compile.c
+++ b/gcc/testsuite/gcc.target/aarch64/vect-fp-compile.c
@@ -11,3 +11,4 @@
/* { dg-final { scan-assembler "fdiv\\tv" } } */
/* { dg-final { scan-assembler "fneg\\tv" } } */
/* { dg-final { scan-assembler "fabs\\tv" } } */
+/* { dg-final { scan-assembler "fabd\\tv" } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/vect-fp.c b/gcc/testsuite/gcc.target/aarch64/vect-fp.c
index a7357b7f065..bcf9d9d7530 100644
--- a/gcc/testsuite/gcc.target/aarch64/vect-fp.c
+++ b/gcc/testsuite/gcc.target/aarch64/vect-fp.c
@@ -117,6 +117,16 @@ int main (void)
9.0, 10.0, 11.0, 12.0,
13.0, 14.0, 15.0, 16.0 };
+ F32 fabd_F32_vector[] = { 1.0f, 1.0f, 1.0f, 1.0f,
+ 1.0f, 1.0f, 1.0f, 1.0f,
+ 1.0f, 1.0f, 1.0f, 1.0f,
+ 1.0f, 1.0f, 1.0f, 1.0f };
+
+ F64 fabd_F64_vector[] = { 1.0, 1.0, 1.0, 1.0,
+ 1.0, 1.0, 1.0, 1.0,
+ 1.0, 1.0, 1.0, 1.0,
+ 1.0, 1.0, 1.0, 1.0 };
+
/* Setup input vectors. */
for (i=1; i<=16; i++)
{
@@ -132,6 +142,7 @@ int main (void)
TEST (div, 3);
TEST (neg, 2);
TEST (abs, 2);
+ TEST (fabd, 3);
return 0;
}
diff --git a/gcc/testsuite/gcc.target/aarch64/vect-fp.x b/gcc/testsuite/gcc.target/aarch64/vect-fp.x
index 338f6edf945..82d1b1c50ee 100644
--- a/gcc/testsuite/gcc.target/aarch64/vect-fp.x
+++ b/gcc/testsuite/gcc.target/aarch64/vect-fp.x
@@ -7,13 +7,23 @@ typedef double *__restrict__ pRF64;
extern float fabsf (float);
extern double fabs (double);
+#define DEF3a(fname, type, op) \
+ void fname##_##type (pR##type a, \
+ pR##type b, \
+ pR##type c) \
+ { \
+ int i; \
+ for (i = 0; i < 16; i++) \
+ a[i] = op (b[i] - c[i]); \
+ }
+
#define DEF3(fname, type, op) \
void fname##_##type (pR##type a, \
pR##type b, \
pR##type c) \
{ \
int i; \
- for (i=0; i<16; i++) \
+ for (i = 0; i < 16; i++) \
a[i] = b[i] op c[i]; \
}
@@ -22,11 +32,15 @@ extern double fabs (double);
pR##type b) \
{ \
int i; \
- for (i=0; i<16; i++) \
+ for (i = 0; i < 16; i++) \
a[i] = op(b[i]); \
}
+#define DEFN3a(fname, op) \
+ DEF3a (fname, F32, op) \
+ DEF3a (fname, F64, op)
+
#define DEFN3(fname, op) \
DEF3 (fname, F32, op) \
DEF3 (fname, F64, op)
@@ -42,3 +56,5 @@ DEFN3 (div, /)
DEFN2 (neg, -)
DEF2 (abs, F32, fabsf)
DEF2 (abs, F64, fabs)
+DEF3a (fabd, F32, fabsf)
+DEF3a (fabd, F64, fabs)
diff --git a/gcc/testsuite/gcc.target/aarch64/vect.c b/gcc/testsuite/gcc.target/aarch64/vect.c
index fc4874440a0..ff70cae43b4 100644
--- a/gcc/testsuite/gcc.target/aarch64/vect.c
+++ b/gcc/testsuite/gcc.target/aarch64/vect.c
@@ -55,6 +55,8 @@ int main (void)
int smin_vector[] = {0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15};
unsigned int umax_vector[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
unsigned int umin_vector[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
+ int sabd_vector[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ int saba_vector[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int reduce_smax_value = 0;
int reduce_smin_value = -15;
unsigned int reduce_umax_value = 15;
@@ -81,6 +83,8 @@ int main (void)
TEST (smin, s);
TEST (umax, u);
TEST (umin, u);
+ TEST (sabd, s);
+ TEST (saba, s);
TESTV (reduce_smax, s);
TESTV (reduce_smin, s);
TESTV (reduce_umax, u);
diff --git a/gcc/testsuite/gcc.target/aarch64/vect.x b/gcc/testsuite/gcc.target/aarch64/vect.x
index 88078349750..c0f79b50b80 100644
--- a/gcc/testsuite/gcc.target/aarch64/vect.x
+++ b/gcc/testsuite/gcc.target/aarch64/vect.x
@@ -138,3 +138,17 @@ long long reduce_add_s64 (pRINT64 a)
return s;
}
+
+void sabd (pRINT a, pRINT b, pRINT c)
+{
+ int i;
+ for (i = 0; i < 16; i++)
+ c[i] = abs (a[i] - b[i]);
+}
+
+void saba (pRINT a, pRINT b, pRINT c)
+{
+ int i;
+ for (i = 0; i < 16; i++)
+ c[i] += abs (a[i] - b[i]);
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon-for-64bits-1.c b/gcc/testsuite/gcc.target/arm/neon-for-64bits-1.c
new file mode 100644
index 00000000000..a2a4103b9a2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-for-64bits-1.c
@@ -0,0 +1,54 @@
+/* Check that Neon is *not* used by default to handle 64-bits scalar
+ operations. */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_neon_ok } */
+/* { dg-options "-O2" } */
+/* { dg-add-options arm_neon } */
+
+typedef long long i64;
+typedef unsigned long long u64;
+typedef unsigned int u32;
+typedef int i32;
+
+/* Unary operators */
+#define UNARY_OP(name, op) \
+ void unary_##name(u64 *a, u64 *b) { *a = op (*b + 0x1234567812345678ULL) ; }
+
+/* Binary operators */
+#define BINARY_OP(name, op) \
+ void binary_##name(u64 *a, u64 *b, u64 *c) { *a = *b op *c ; }
+
+/* Unsigned shift */
+#define SHIFT_U(name, op, amount) \
+ void ushift_##name(u64 *a, u64 *b, int c) { *a = *b op amount; }
+
+/* Signed shift */
+#define SHIFT_S(name, op, amount) \
+ void sshift_##name(i64 *a, i64 *b, int c) { *a = *b op amount; }
+
+UNARY_OP(not, ~)
+
+BINARY_OP(add, +)
+BINARY_OP(sub, -)
+BINARY_OP(and, &)
+BINARY_OP(or, |)
+BINARY_OP(xor, ^)
+
+SHIFT_U(right1, >>, 1)
+SHIFT_U(right2, >>, 2)
+SHIFT_U(right5, >>, 5)
+SHIFT_U(rightn, >>, c)
+
+SHIFT_S(right1, >>, 1)
+SHIFT_S(right2, >>, 2)
+SHIFT_S(right5, >>, 5)
+SHIFT_S(rightn, >>, c)
+
+/* { dg-final {scan-assembler-times "vmvn" 0} } */
+/* { dg-final {scan-assembler-times "vadd" 0} } */
+/* { dg-final {scan-assembler-times "vsub" 0} } */
+/* { dg-final {scan-assembler-times "vand" 0} } */
+/* { dg-final {scan-assembler-times "vorr" 0} } */
+/* { dg-final {scan-assembler-times "veor" 0} } */
+/* { dg-final {scan-assembler-times "vshr" 0} } */
diff --git a/gcc/testsuite/gcc.target/arm/neon-for-64bits-2.c b/gcc/testsuite/gcc.target/arm/neon-for-64bits-2.c
new file mode 100644
index 00000000000..035bfb77a37
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-for-64bits-2.c
@@ -0,0 +1,57 @@
+/* Check that Neon is used to handle 64-bits scalar operations. */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_neon_ok } */
+/* { dg-options "-O2 -mneon-for-64bits" } */
+/* { dg-add-options arm_neon } */
+
+typedef long long i64;
+typedef unsigned long long u64;
+typedef unsigned int u32;
+typedef int i32;
+
+/* Unary operators */
+#define UNARY_OP(name, op) \
+ void unary_##name(u64 *a, u64 *b) { *a = op (*b + 0x1234567812345678ULL) ; }
+
+/* Binary operators */
+#define BINARY_OP(name, op) \
+ void binary_##name(u64 *a, u64 *b, u64 *c) { *a = *b op *c ; }
+
+/* Unsigned shift */
+#define SHIFT_U(name, op, amount) \
+ void ushift_##name(u64 *a, u64 *b, int c) { *a = *b op amount; }
+
+/* Signed shift */
+#define SHIFT_S(name, op, amount) \
+ void sshift_##name(i64 *a, i64 *b, int c) { *a = *b op amount; }
+
+UNARY_OP(not, ~)
+
+BINARY_OP(add, +)
+BINARY_OP(sub, -)
+BINARY_OP(and, &)
+BINARY_OP(or, |)
+BINARY_OP(xor, ^)
+
+SHIFT_U(right1, >>, 1)
+SHIFT_U(right2, >>, 2)
+SHIFT_U(right5, >>, 5)
+SHIFT_U(rightn, >>, c)
+
+SHIFT_S(right1, >>, 1)
+SHIFT_S(right2, >>, 2)
+SHIFT_S(right5, >>, 5)
+SHIFT_S(rightn, >>, c)
+
+/* { dg-final {scan-assembler-times "vmvn" 1} } */
+/* Two vadd: 1 in unary_not, 1 in binary_add */
+/* { dg-final {scan-assembler-times "vadd" 2} } */
+/* { dg-final {scan-assembler-times "vsub" 1} } */
+/* { dg-final {scan-assembler-times "vand" 1} } */
+/* { dg-final {scan-assembler-times "vorr" 1} } */
+/* { dg-final {scan-assembler-times "veor" 1} } */
+/* 6 vshr for right shifts by constant, and variable right shift uses
+ vshl with a negative amount in register. */
+/* { dg-final {scan-assembler-times "vshr" 6} } */
+/* { dg-final {scan-assembler-times "vshl" 2} } */
diff --git a/gcc/testsuite/gcc.target/arm/neon-vcond-gt.c b/gcc/testsuite/gcc.target/arm/neon-vcond-gt.c
new file mode 100644
index 00000000000..86ccf95ada6
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vcond-gt.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_neon_ok } */
+/* { dg-options "-O1 -funsafe-math-optimizations -ftree-vectorize" } */
+/* { dg-add-options arm_neon } */
+
+#define MAX(a, b) (a > b ? a : b)
+void foo (int ilast,float* w, float* w2)
+{
+ int i;
+ for (i = 0; i < ilast; ++i)
+ {
+ w[i] = MAX (0.0f, w2[i]);
+ }
+}
+
+/* { dg-final { scan-assembler "vcgt\\.f32\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+" } } */
+/* { dg-final { scan-assembler "vbit\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+" } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon-vcond-ltgt.c b/gcc/testsuite/gcc.target/arm/neon-vcond-ltgt.c
new file mode 100644
index 00000000000..acb23a947ff
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vcond-ltgt.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_neon_ok } */
+/* { dg-options "-O1 -funsafe-math-optimizations -ftree-vectorize" } */
+/* { dg-add-options arm_neon } */
+
+#define LTGT(a, b) (__builtin_islessgreater (a, b) ? a : b)
+void foo (int ilast,float* w, float* w2)
+{
+ int i;
+ for (i = 0; i < ilast; ++i)
+ {
+ w[i] = LTGT (0.0f, w2[i]);
+ }
+}
+
+/* { dg-final { scan-assembler-times "vcgt\\.f32\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+" 2 } } */
+/* { dg-final { scan-assembler "vorr\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+" } } */
+/* { dg-final { scan-assembler "vbsl\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+" } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon-vcond-unordered.c b/gcc/testsuite/gcc.target/arm/neon-vcond-unordered.c
new file mode 100644
index 00000000000..c3e448d621b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vcond-unordered.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_neon_ok } */
+/* { dg-options "-O1 -funsafe-math-optimizations -ftree-vectorize" } */
+/* { dg-add-options arm_neon } */
+
+#define UNORD(a, b) (__builtin_isunordered (a, b) ? a : b)
+void foo (int ilast,float* w, float* w2)
+{
+ int i;
+ for (i = 0; i < ilast; ++i)
+ {
+ w[i] = UNORD (0.0f, w2[i]);
+ }
+}
+
+/* { dg-final { scan-assembler "vcgt\\.f32\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+" } } */
+/* { dg-final { scan-assembler "vcge\\.f32\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+" } } */
+/* { dg-final { scan-assembler "vorr\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+" } } */
+/* { dg-final { scan-assembler "vbsl\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+" } } */
diff --git a/gcc/testsuite/gcc.target/i386/movti.c b/gcc/testsuite/gcc.target/i386/movti.c
index e306c1e3f01..86a0279faa2 100644
--- a/gcc/testsuite/gcc.target/i386/movti.c
+++ b/gcc/testsuite/gcc.target/i386/movti.c
@@ -7,4 +7,4 @@ _Decimal128 test (void)
return 1234123412341234.123412341234dl;
}
-/* { dg-final { scan-assembler-not "movabs" } } */
+/* { dg-final { scan-assembler-not "movabs" { target { ! x86_64-*-mingw* } } } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr20020-1.c b/gcc/testsuite/gcc.target/i386/pr20020-1.c
index 3f10970a943..f36a8a0953d 100644
--- a/gcc/testsuite/gcc.target/i386/pr20020-1.c
+++ b/gcc/testsuite/gcc.target/i386/pr20020-1.c
@@ -1,5 +1,6 @@
/* Check that 128-bit struct's are represented as TImode values. */
/* { dg-do compile { target int128 } } */
+/* { dg-skip-if "different ABI" { x86_64-*-mingw* } } */
/* { dg-options "-O2 -fdump-rtl-expand" } */
struct shared_ptr_struct
diff --git a/gcc/testsuite/gcc.target/i386/pr20020-2.c b/gcc/testsuite/gcc.target/i386/pr20020-2.c
index e8c5b3d06a4..fa5b6edaf81 100644
--- a/gcc/testsuite/gcc.target/i386/pr20020-2.c
+++ b/gcc/testsuite/gcc.target/i386/pr20020-2.c
@@ -1,5 +1,6 @@
/* Check that 128-bit struct's are represented as TImode values. */
/* { dg-do compile { target int128 } } */
+/* { dg-skip-if "different ABI" { x86_64-*-mingw* } } */
/* { dg-options "-O2 -fdump-rtl-expand" } */
struct shared_ptr_struct
diff --git a/gcc/testsuite/gcc.target/i386/pr20020-3.c b/gcc/testsuite/gcc.target/i386/pr20020-3.c
index b1cc9260ec8..a30fbc4b11c 100644
--- a/gcc/testsuite/gcc.target/i386/pr20020-3.c
+++ b/gcc/testsuite/gcc.target/i386/pr20020-3.c
@@ -1,5 +1,6 @@
/* Check that 128-bit struct's are represented as TImode values. */
/* { dg-do compile { target int128 } } */
+/* { dg-skip-if "different ABI" { x86_64-*-mingw* } } */
/* { dg-options "-O2 -fdump-rtl-expand" } */
struct shared_ptr_struct
diff --git a/gcc/testsuite/gcc.target/i386/pr22152.c b/gcc/testsuite/gcc.target/i386/pr22152.c
index 0b00169d026..b20a22a4c90 100644
--- a/gcc/testsuite/gcc.target/i386/pr22152.c
+++ b/gcc/testsuite/gcc.target/i386/pr22152.c
@@ -1,6 +1,6 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -msse2" } */
-/* { dg-options "-O2 -msse2 -mno-vect8-ret-in-mem" { target i?86-*-solaris2.9 *-*-vxworks* } } */
+/* { dg-options "-O2 -msse2 -mtune=core2" } */
+/* { dg-additional-options "-mno-vect8-ret-in-mem" { target i?86-*-solaris2.9 *-*-vxworks* } } */
/* { dg-additional-options "-mabi=sysv" { target x86_64-*-mingw* } } */
#include <mmintrin.h>
diff --git a/gcc/testsuite/gcc.target/i386/pr53425-1.c b/gcc/testsuite/gcc.target/i386/pr53425-1.c
index 2446c0f5419..00143f32ab3 100644
--- a/gcc/testsuite/gcc.target/i386/pr53425-1.c
+++ b/gcc/testsuite/gcc.target/i386/pr53425-1.c
@@ -1,6 +1,7 @@
/* PR target/53425 */
/* { dg-do compile { target { ! { ia32 } } } } */
/* { dg-options "-O2 -mno-sse" } */
+/* { dg-skip-if "no SSE vector" { x86_64-*-mingw* } } */
typedef double __v2df __attribute__ ((__vector_size__ (16)));
diff --git a/gcc/testsuite/gcc.target/i386/pr53425-2.c b/gcc/testsuite/gcc.target/i386/pr53425-2.c
index b89a5b1fa8c..97523f35bb5 100644
--- a/gcc/testsuite/gcc.target/i386/pr53425-2.c
+++ b/gcc/testsuite/gcc.target/i386/pr53425-2.c
@@ -1,6 +1,7 @@
/* PR target/53425 */
/* { dg-do compile { target { ! { ia32 } } } } */
/* { dg-options "-O2 -mno-sse" } */
+/* { dg-skip-if "no SSE vector" { x86_64-*-mingw* } } */
typedef float __v2sf __attribute__ ((__vector_size__ (8)));
diff --git a/gcc/testsuite/gcc.target/i386/pr53907.c b/gcc/testsuite/gcc.target/i386/pr53907.c
index 8de8f0de985..27e2e02985f 100644
--- a/gcc/testsuite/gcc.target/i386/pr53907.c
+++ b/gcc/testsuite/gcc.target/i386/pr53907.c
@@ -3,10 +3,12 @@
#include <emmintrin.h>
+__extension__ typedef __UINTPTR_TYPE__ uintptr_t;
+
__m128i x(char *s)
{
__m128i sz,z,mvec;
- s-=((unsigned long) s)%16;
+ s-=((uintptr_t) s)%16;
sz=_mm_load_si128((__m128i *)s);
return sz;
}
diff --git a/gcc/testsuite/gcc.target/i386/pr55093.c b/gcc/testsuite/gcc.target/i386/pr55093.c
index 76b4042302f..3d32a5799d7 100644
--- a/gcc/testsuite/gcc.target/i386/pr55093.c
+++ b/gcc/testsuite/gcc.target/i386/pr55093.c
@@ -1,5 +1,6 @@
/* { dg-do compile { target { ! { ia32 } } } } */
/* { dg-options "-O2 -mx32 -maddress-mode=long" } */
+/* { dg-skip-if "different ABI" { x86_64-*-mingw* } } */
typedef union tree_node *tree;
typedef const union tree_node *const_tree;
diff --git a/gcc/testsuite/gcc.target/mips/mips.exp b/gcc/testsuite/gcc.target/mips/mips.exp
index ad32fb67713..15b1386bd9e 100644
--- a/gcc/testsuite/gcc.target/mips/mips.exp
+++ b/gcc/testsuite/gcc.target/mips/mips.exp
@@ -238,6 +238,7 @@ set mips_option_groups {
fp "-mfp(32|64)"
gp "-mgp(32|64)"
long "-mlong(32|64)"
+ micromips "-mmicromips|-mno-micromips"
mips16 "-mips16|-mno-mips16|-mflip-mips16"
mips3d "-mips3d|-mno-mips3d"
pic "-f(no-|)(pic|PIC)"
@@ -816,6 +817,8 @@ proc mips-dg-finish {} {
# | |
# -mips16/-mflip-mips16 -mno-mips16
# | |
+# -micromips -mno-micromips
+# | |
# -mips3d -mno-mips3d
# | |
# -mpaired-single -mno-paired-single
@@ -904,6 +907,8 @@ proc mips-dg-options { args } {
# Handle dependencies between options on the left of the
# dependency diagram.
+ mips_option_dependency options "-mips16" "-mno-micromips"
+ mips_option_dependency options "-mmicromips" "-mno-mips16"
mips_option_dependency options "-mips3d" "-mpaired-single"
mips_option_dependency options "-mpaired-single" "-mfp64"
mips_option_dependency options "-mfp64" "-mhard-float"
@@ -1246,6 +1251,10 @@ proc mips-dg-options { args } {
append extra_tool_flags " -DMIPS16=__attribute__((mips16))"
}
+ if { [mips_have_test_option_p options "-mmicromips"] } {
+ append extra_tool_flags " -DMICROMIPS=__attribute__((micromips))"
+ }
+
# Use our version of gcc-dg-test for this test.
if { ![string equal [info procs "mips-gcc-dg-test"] ""] } {
rename gcc-dg-test mips-old-gcc-dg-test
@@ -1275,6 +1284,6 @@ proc mips-gcc-dg-test { prog do_what extra_tool_flags } {
dg-init
mips-dg-init
gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.c]] \
- "-DNOMIPS16=__attribute__((nomips16))"
+ "-DNOMIPS16=__attribute__((nomips16)) -DNOMICROMIPS=__attribute__((nomicromips)) -DNOCOMPRESSION=__attribute__((nocompression))"
mips-dg-finish
dg-finish
diff --git a/gcc/testsuite/gcc.target/mips/umips-constraints-1.c b/gcc/testsuite/gcc.target/mips/umips-constraints-1.c
index e69de29bb2d..ddec815b0f3 100644
--- a/gcc/testsuite/gcc.target/mips/umips-constraints-1.c
+++ b/gcc/testsuite/gcc.target/mips/umips-constraints-1.c
@@ -0,0 +1,14 @@
+/* { dg-options "(-mmicromips)" } */
+/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */
+
+MICROMIPS void
+foo (int *x)
+{
+ asm volatile ("insn1\t%a0" :: "ZD" (&x[0]));
+ asm volatile ("insn2\t%a0" :: "ZD" (&x[511]));
+ asm volatile ("insn3\t%a0" :: "ZD" (&x[512]));
+}
+
+/* { dg-final { scan-assembler "\tinsn1\t0\\(" } } */
+/* { dg-final { scan-assembler "\tinsn2\t2044\\(" } } */
+/* { dg-final { scan-assembler-not "\tinsn3\t2048\\(" } } */
diff --git a/gcc/testsuite/gcc.target/mips/umips-constraints-2.c b/gcc/testsuite/gcc.target/mips/umips-constraints-2.c
index e69de29bb2d..0240d467026 100644
--- a/gcc/testsuite/gcc.target/mips/umips-constraints-2.c
+++ b/gcc/testsuite/gcc.target/mips/umips-constraints-2.c
@@ -0,0 +1,14 @@
+/* { dg-options "(-mmicromips)" } */
+/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */
+
+MICROMIPS void
+foo (int *x)
+{
+ asm volatile ("insn1\t%0" :: "ZC" (x[0]));
+ asm volatile ("insn2\t%0" :: "ZC" (x[511]));
+ asm volatile ("insn3\t%0" :: "ZC" (x[512]));
+}
+
+/* { dg-final { scan-assembler "\tinsn1\t0\\(" } } */
+/* { dg-final { scan-assembler "\tinsn2\t2044\\(" } } */
+/* { dg-final { scan-assembler-not "\tinsn3\t2048\\(" } } */
diff --git a/gcc/testsuite/gcc.target/mips/umips-lwp-1.c b/gcc/testsuite/gcc.target/mips/umips-lwp-1.c
index e69de29bb2d..0cdb1b7f2bc 100644
--- a/gcc/testsuite/gcc.target/mips/umips-lwp-1.c
+++ b/gcc/testsuite/gcc.target/mips/umips-lwp-1.c
@@ -0,0 +1,17 @@
+/* { dg-options "-mgp32 -fpeephole2 -mtune=m14k (-mmicromips)" } */
+/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */
+
+void MICROMIPS
+foo (int *r4)
+{
+ int r5 = r4[0];
+ int r6 = r4[1];
+ r4[2] = r5 * r5;
+ {
+ register int r5asm asm ("$5") = r5;
+ register int r6asm asm ("$6") = r6;
+ asm ("#foo" : "=m" (r4[3]) : "d" (r5asm), "d" (r6asm));
+ }
+}
+
+/* { dg-final { scan-assembler "\tlwp\t\\\$5,0\\(\\\$4\\)" } }*/
diff --git a/gcc/testsuite/gcc.target/mips/umips-lwp-2.c b/gcc/testsuite/gcc.target/mips/umips-lwp-2.c
index e69de29bb2d..ea3f3960742 100644
--- a/gcc/testsuite/gcc.target/mips/umips-lwp-2.c
+++ b/gcc/testsuite/gcc.target/mips/umips-lwp-2.c
@@ -0,0 +1,17 @@
+/* { dg-options "-mgp32 -fpeephole2 -mtune=m14k (-mmicromips)" } */
+/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */
+
+void MICROMIPS
+foo (int *r4)
+{
+ int r5 = r4[0];
+ int r6 = r4[1];
+ r4[2] = r6 * r6;
+ {
+ register int r5asm asm ("$5") = r5;
+ register int r6asm asm ("$6") = r6;
+ asm ("#foo" : "=m" (r4[3]) : "d" (r5asm), "d" (r6asm));
+ }
+}
+
+/* { dg-final { scan-assembler "\tlwp\t\\\$5,0\\(\\\$4\\)" } }*/
diff --git a/gcc/testsuite/gcc.target/mips/umips-lwp-3.c b/gcc/testsuite/gcc.target/mips/umips-lwp-3.c
index e69de29bb2d..2cb37510feb 100644
--- a/gcc/testsuite/gcc.target/mips/umips-lwp-3.c
+++ b/gcc/testsuite/gcc.target/mips/umips-lwp-3.c
@@ -0,0 +1,17 @@
+/* { dg-options "-mgp32 -fpeephole2 -mtune=m14k (-mmicromips)" } */
+/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */
+
+void MICROMIPS
+foo (int *r4)
+{
+ int r5 = r4[511];
+ int r6 = r4[512];
+ r4[2] = r5 * r5;
+ {
+ register int r5asm asm ("$5") = r5;
+ register int r6asm asm ("$6") = r6;
+ asm ("#foo" : "=m" (r4[3]) : "d" (r5asm), "d" (r6asm));
+ }
+}
+
+/* { dg-final { scan-assembler "\tlwp\t\\\$5,2044\\(\\\$4\\)" } }*/
diff --git a/gcc/testsuite/gcc.target/mips/umips-lwp-4.c b/gcc/testsuite/gcc.target/mips/umips-lwp-4.c
index e69de29bb2d..b8a86b4ed90 100644
--- a/gcc/testsuite/gcc.target/mips/umips-lwp-4.c
+++ b/gcc/testsuite/gcc.target/mips/umips-lwp-4.c
@@ -0,0 +1,17 @@
+/* { dg-options "-mgp32 -fpeephole2 -mtune=m14k (-mmicromips)" } */
+/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */
+
+void MICROMIPS
+foo (int *r4)
+{
+ int r5 = r4[511];
+ int r6 = r4[512];
+ r4[2] = r6 * r6;
+ {
+ register int r5asm asm ("$5") = r5;
+ register int r6asm asm ("$6") = r6;
+ asm ("#foo" : "=m" (r4[3]) : "d" (r5asm), "d" (r6asm));
+ }
+}
+
+/* { dg-final { scan-assembler "\tlwp\t\\\$5,2044\\(\\\$4\\)" } }*/
diff --git a/gcc/testsuite/gcc.target/mips/umips-lwp-5.c b/gcc/testsuite/gcc.target/mips/umips-lwp-5.c
index e69de29bb2d..2315f21e91e 100644
--- a/gcc/testsuite/gcc.target/mips/umips-lwp-5.c
+++ b/gcc/testsuite/gcc.target/mips/umips-lwp-5.c
@@ -0,0 +1,17 @@
+/* { dg-options "-mgp32 -fpeephole2 -mtune=m14k (-mmicromips)" } */
+/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */
+
+void MICROMIPS
+foo (int *r4)
+{
+ int r5 = r4[512];
+ int r6 = r4[513];
+ r4[2] = r5 * r5;
+ {
+ register int r5asm asm ("$5") = r5;
+ register int r6asm asm ("$6") = r6;
+ asm ("#foo" : "=m" (r4[3]) : "d" (r5asm), "d" (r6asm));
+ }
+}
+
+/* { dg-final { scan-assembler-not "\tlwp" } }*/
diff --git a/gcc/testsuite/gcc.target/mips/umips-lwp-6.c b/gcc/testsuite/gcc.target/mips/umips-lwp-6.c
index e69de29bb2d..9534974de8f 100644
--- a/gcc/testsuite/gcc.target/mips/umips-lwp-6.c
+++ b/gcc/testsuite/gcc.target/mips/umips-lwp-6.c
@@ -0,0 +1,17 @@
+/* { dg-options "-mgp32 -fpeephole2 -mtune=m14k (-mmicromips)" } */
+/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */
+
+void MICROMIPS
+foo (int *r4)
+{
+ int r5 = r4[512];
+ int r6 = r4[513];
+ r4[2] = r6 * r6;
+ {
+ register int r5asm asm ("$5") = r5;
+ register int r6asm asm ("$6") = r6;
+ asm ("#foo" : "=m" (r4[3]) : "d" (r5asm), "d" (r6asm));
+ }
+}
+
+/* { dg-final { scan-assembler-not "\tlwp" } }*/
diff --git a/gcc/testsuite/gcc.target/mips/umips-lwp-7.c b/gcc/testsuite/gcc.target/mips/umips-lwp-7.c
index e69de29bb2d..87ff6dc1154 100644
--- a/gcc/testsuite/gcc.target/mips/umips-lwp-7.c
+++ b/gcc/testsuite/gcc.target/mips/umips-lwp-7.c
@@ -0,0 +1,41 @@
+/* { dg-options "-mgp32 -fpeephole2 -mtune=m14k (-mmicromips)" } */
+/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */
+
+void MICROMIPS
+f1 (int *r4, int dummy, int *other)
+{
+ int r5 = r4[1];
+ int newr4 = r4[0];
+ other[0] = r5 * r5;
+ {
+ register int r5asm asm ("$5") = r5;
+ register int r4asm asm ("$4") = newr4;
+ asm ("#foo" : "=m" (other[1]) : "d" (r4asm), "d" (r5asm));
+ }
+}
+
+void MICROMIPS
+f2 (int *r4, int dummy, int *other)
+{
+ int newr4 = r4[0];
+ int r5 = *(int *)(newr4 + 4);
+ {
+ register int r5asm asm ("$5") = r5;
+ register int r4asm asm ("$4") = newr4;
+ asm ("#foo" : "=m" (other[0]) : "d" (r4asm), "d" (r5asm));
+ }
+}
+
+void MICROMIPS
+f3 (int dummy, int *r5, int *other)
+{
+ int newr5 = r5[1];
+ int r4 = *(int *)newr5;
+ {
+ register int r5asm asm ("$4") = r4;
+ register int r4asm asm ("$5") = newr5;
+ asm ("#foo" : "=m" (other[0]) : "d" (r4asm), "d" (r5asm));
+ }
+}
+
+/* { dg-final { scan-assembler-not "\tlwp" } }*/
diff --git a/gcc/testsuite/gcc.target/mips/umips-lwp-8.c b/gcc/testsuite/gcc.target/mips/umips-lwp-8.c
index e69de29bb2d..43b98423dfd 100644
--- a/gcc/testsuite/gcc.target/mips/umips-lwp-8.c
+++ b/gcc/testsuite/gcc.target/mips/umips-lwp-8.c
@@ -0,0 +1,17 @@
+/* { dg-options "-mgp32 -fpeephole2 -mtune=m14k (-mmicromips)" } */
+/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */
+
+void MICROMIPS
+f1 (int dummy, int *r5, int *other)
+{
+ int r4 = r5[0];
+ int newr5 = r5[1];
+ other[0] = r4 * r4;
+ {
+ register int r5asm asm ("$4") = r4;
+ register int r4asm asm ("$5") = newr5;
+ asm ("#foo" : "=m" (other[1]) : "d" (r4asm), "d" (r5asm));
+ }
+}
+
+/* { dg-final { scan-assembler "\tlwp\t\\\$4,0\\(\\\$5\\)" } }*/
diff --git a/gcc/testsuite/gcc.target/mips/umips-lwp-swp-volatile.c b/gcc/testsuite/gcc.target/mips/umips-lwp-swp-volatile.c
index e69de29bb2d..da2cbaff38b 100644
--- a/gcc/testsuite/gcc.target/mips/umips-lwp-swp-volatile.c
+++ b/gcc/testsuite/gcc.target/mips/umips-lwp-swp-volatile.c
@@ -0,0 +1,42 @@
+/* { dg-do compile } */
+/* { dg-options "-mmicromips" } */
+
+/* This test ensures that we do not generate microMIPS SWP or LWP
+ instructions when any component of the accessed memory is volatile;
+ they are unsafe for such since they might cause replay of partial
+ accesses if interrupted by an exception. */
+
+static void set_csr (volatile void *p, int v)
+{
+ *(volatile int *) (p) = v;
+}
+
+static int get_csr (volatile void *p)
+{
+ return *(volatile int *) (p);
+}
+
+int main ()
+{
+ int i, q = 0, p = 0, r = 0;
+
+ for (i = 0; i < 20; i++)
+ {
+ set_csr ((volatile void *) 0xbf0100a8, 0xffff0002);
+ set_csr ((volatile void *) 0xbf0100a4, 0x80000008);
+ }
+
+ for (i = 0; i < 20; i++)
+ {
+ register int k, j;
+ k = get_csr ((volatile void *) 0xbf0100b8);
+ p += k;
+ j = get_csr ((volatile void *) 0xbf0100b4);
+ r += j;
+ q = j + k;
+ }
+ return q + r + p;
+}
+
+/* { dg-final { scan-assembler-not "\tswp" } } */
+/* { dg-final { scan-assembler-not "\tlwp" } } */
diff --git a/gcc/testsuite/gcc.target/mips/umips-movep-1.c b/gcc/testsuite/gcc.target/mips/umips-movep-1.c
index e69de29bb2d..0865b78bd8c 100644
--- a/gcc/testsuite/gcc.target/mips/umips-movep-1.c
+++ b/gcc/testsuite/gcc.target/mips/umips-movep-1.c
@@ -0,0 +1,16 @@
+/* Check that we can generate the MOVEP instruction. */
+/* { dg-options "-mgp32 -fpeephole2 (-mmicromips)" } */
+/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */
+
+long long bar (long long, long long);
+
+MICROMIPS long long
+foo (long long n, long long a)
+{
+ long long i, j;
+
+ i = bar (n, a);
+ j = bar (n, a);
+ return i + j;
+}
+/* { dg-final { scan-assembler "\tmovep\t" } } */
diff --git a/gcc/testsuite/gcc.target/mips/umips-movep-2.c b/gcc/testsuite/gcc.target/mips/umips-movep-2.c
index e69de29bb2d..5a3a8419eee 100644
--- a/gcc/testsuite/gcc.target/mips/umips-movep-2.c
+++ b/gcc/testsuite/gcc.target/mips/umips-movep-2.c
@@ -0,0 +1,13 @@
+/* Check that we can generate the MOVEP instruction. */
+/* { dg-options "-fpeephole2 -mgp32 (-mmicromips)" } */
+/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */
+
+int bar (int, int);
+
+int MICROMIPS
+foo (int n, int a)
+{
+ return bar (0, 0);
+}
+
+/* { dg-final { scan-assembler "\tmovep\t\\\$4,\\\$5,\\\$0,\\\$0" } } */
diff --git a/gcc/testsuite/gcc.target/mips/umips-save-restore-1.c b/gcc/testsuite/gcc.target/mips/umips-save-restore-1.c
index e69de29bb2d..ff1ea4b339a 100644
--- a/gcc/testsuite/gcc.target/mips/umips-save-restore-1.c
+++ b/gcc/testsuite/gcc.target/mips/umips-save-restore-1.c
@@ -0,0 +1,18 @@
+/* Check that we can use the swm/lwm instructions. */
+/* { dg-options "-mabi=32 (-mmicromips)" } */
+/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */
+
+int bar (int, int, int, int, int);
+
+MICROMIPS int
+foo (int n, int a, int b, int c, int d)
+{
+ int i, j;
+
+ i = bar (n, a, b, c, d);
+ j = bar (n, a, b, c, d);
+ return i + j;
+}
+
+/* { dg-final { scan-assembler "\tswm\t\\\$16-\\\$2(0|1),\\\$31" } } */
+/* { dg-final { scan-assembler "\tlwm\t\\\$16-\\\$2(0|1),\\\$31" } } */
diff --git a/gcc/testsuite/gcc.target/mips/umips-save-restore-2.c b/gcc/testsuite/gcc.target/mips/umips-save-restore-2.c
index e69de29bb2d..cb421d5d4be 100644
--- a/gcc/testsuite/gcc.target/mips/umips-save-restore-2.c
+++ b/gcc/testsuite/gcc.target/mips/umips-save-restore-2.c
@@ -0,0 +1,16 @@
+/* Check that we can use the save instruction to save spilled arguments. */
+/* { dg-options "-mabi=32 (-mmicromips)" } */
+/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */
+
+MICROMIPS void
+foo (int *a, int b, int c)
+{
+ asm volatile ("" ::: "$2", "$3", "$4", "$5", "$6", "$7", "$8",
+ "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$16",
+ "$17", "$18", "$19", "$20", "$21", "$22", "$23", "$24",
+ "$25", "$30", "memory");
+ a[b] = 1;
+ a[c] = 1;
+}
+/* { dg-final { scan-assembler "\tswm\t\\\$16-\\\$23,\\\$fp" } } */
+/* { dg-final { scan-assembler "\tlwm\t\\\$16-\\\$23,\\\$fp" } } */
diff --git a/gcc/testsuite/gcc.target/mips/umips-save-restore-3.c b/gcc/testsuite/gcc.target/mips/umips-save-restore-3.c
index e69de29bb2d..22c6f45f717 100644
--- a/gcc/testsuite/gcc.target/mips/umips-save-restore-3.c
+++ b/gcc/testsuite/gcc.target/mips/umips-save-restore-3.c
@@ -0,0 +1,14 @@
+/* Check that we can use the swm instruction to save $16, $17 and $31. */
+/* { dg-options "-mgp32 (-mmicromips)" } */
+/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */
+
+void bar (void);
+
+MICROMIPS void
+foo (void)
+{
+ bar ();
+ asm volatile ("" ::: "$16", "$17");
+}
+/* { dg-final { scan-assembler "\tswm\t\\\$16-\\\$17,\\\$31" } } */
+/* { dg-final { scan-assembler "\tlwm\t\\\$16-\\\$17,\\\$31" } } */
diff --git a/gcc/testsuite/gcc.target/mips/umips-swp-1.c b/gcc/testsuite/gcc.target/mips/umips-swp-1.c
index e69de29bb2d..5e337b27b6c 100644
--- a/gcc/testsuite/gcc.target/mips/umips-swp-1.c
+++ b/gcc/testsuite/gcc.target/mips/umips-swp-1.c
@@ -0,0 +1,10 @@
+/* { dg-options "-fpeephole2 -mgp32 (-mmicromips)" } */
+/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */
+
+void MICROMIPS
+foo (long long l1, long long *l2)
+{
+ *l2 = l1;
+}
+
+/* { dg-final { scan-assembler "\tswp\t\\\$4,0\\(\\\$6\\)" } }*/
diff --git a/gcc/testsuite/gcc.target/mips/umips-swp-2.c b/gcc/testsuite/gcc.target/mips/umips-swp-2.c
index e69de29bb2d..042322c2175 100644
--- a/gcc/testsuite/gcc.target/mips/umips-swp-2.c
+++ b/gcc/testsuite/gcc.target/mips/umips-swp-2.c
@@ -0,0 +1,17 @@
+/* { dg-options "-fpeephole2 -mtune=m14k (-mmicromips)" } */
+/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */
+
+void MICROMIPS
+foo (int *r4, int r5, int r6)
+{
+ r6 *= r6;
+ r4[0] = r5;
+ r4[1] = r6;
+ {
+ register int r5asm asm ("$5") = r5;
+ register int r6asm asm ("$6") = r6;
+ asm ("#foo" : "=m" (r4[2]) : "d" (r5asm), "d" (r6asm));
+ }
+}
+
+/* { dg-final { scan-assembler "\tswp\t\\\$5,0\\(\\\$4\\)" } }*/
diff --git a/gcc/testsuite/gcc.target/mips/umips-swp-3.c b/gcc/testsuite/gcc.target/mips/umips-swp-3.c
index e69de29bb2d..f0e54647d9c 100644
--- a/gcc/testsuite/gcc.target/mips/umips-swp-3.c
+++ b/gcc/testsuite/gcc.target/mips/umips-swp-3.c
@@ -0,0 +1,17 @@
+/* { dg-options "-fpeephole2 -mtune=m14k (-mmicromips)" } */
+/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */
+
+void MICROMIPS
+foo (int *r4, int r5, int r6)
+{
+ r5 *= r5;
+ r4[0] = r5;
+ r4[1] = r6;
+ {
+ register int r5asm asm ("$5") = r5;
+ register int r6asm asm ("$6") = r6;
+ asm ("#foo" : "=m" (r4[2]) : "d" (r5asm), "d" (r6asm));
+ }
+}
+
+/* { dg-final { scan-assembler "\tswp\t\\\$5,0\\(\\\$4\\)" } }*/
diff --git a/gcc/testsuite/gcc.target/mips/umips-swp-4.c b/gcc/testsuite/gcc.target/mips/umips-swp-4.c
index e69de29bb2d..5e8f5ea2a76 100644
--- a/gcc/testsuite/gcc.target/mips/umips-swp-4.c
+++ b/gcc/testsuite/gcc.target/mips/umips-swp-4.c
@@ -0,0 +1,17 @@
+/* { dg-options "-fpeephole2 -mtune=m14k (-mmicromips)" } */
+/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */
+
+void MICROMIPS
+foo (int *r4, int r5, int r6)
+{
+ r6 *= r6;
+ r4[511] = r5;
+ r4[512] = r6;
+ {
+ register int r5asm asm ("$5") = r5;
+ register int r6asm asm ("$6") = r6;
+ asm ("#foo" : "=m" (r4[2]) : "d" (r5asm), "d" (r6asm));
+ }
+}
+
+/* { dg-final { scan-assembler "\tswp\t\\\$5,2044\\(\\\$4\\)" } }*/
diff --git a/gcc/testsuite/gcc.target/mips/umips-swp-5.c b/gcc/testsuite/gcc.target/mips/umips-swp-5.c
index e69de29bb2d..dc1938e47b5 100644
--- a/gcc/testsuite/gcc.target/mips/umips-swp-5.c
+++ b/gcc/testsuite/gcc.target/mips/umips-swp-5.c
@@ -0,0 +1,17 @@
+/* { dg-options "-fpeephole2 -mtune=m14k (-mmicromips)" } */
+/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */
+
+void MICROMIPS
+foo (int *r4, int r5, int r6)
+{
+ r5 *= r5;
+ r4[511] = r5;
+ r4[512] = r6;
+ {
+ register int r5asm asm ("$5") = r5;
+ register int r6asm asm ("$6") = r6;
+ asm ("#foo" : "=m" (r4[2]) : "d" (r5asm), "d" (r6asm));
+ }
+}
+
+/* { dg-final { scan-assembler "\tswp\t\\\$5,2044\\(\\\$4\\)" } }*/
diff --git a/gcc/testsuite/gcc.target/mips/umips-swp-6.c b/gcc/testsuite/gcc.target/mips/umips-swp-6.c
index e69de29bb2d..b489006ce99 100644
--- a/gcc/testsuite/gcc.target/mips/umips-swp-6.c
+++ b/gcc/testsuite/gcc.target/mips/umips-swp-6.c
@@ -0,0 +1,17 @@
+/* { dg-options "-fpeephole2 -mtune=m14k (-mmicromips)" } */
+/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */
+
+void MICROMIPS
+foo (int *r4, int r5, int r6)
+{
+ r6 *= r6;
+ r4[512] = r5;
+ r4[513] = r6;
+ {
+ register int r5asm asm ("$5") = r5;
+ register int r6asm asm ("$6") = r6;
+ asm ("#foo" : "=m" (r4[2]) : "d" (r5asm), "d" (r6asm));
+ }
+}
+
+/* { dg-final { scan-assembler-not "\tswp" } }*/
diff --git a/gcc/testsuite/gcc.target/mips/umips-swp-7.c b/gcc/testsuite/gcc.target/mips/umips-swp-7.c
index e69de29bb2d..6dde49b8a35 100644
--- a/gcc/testsuite/gcc.target/mips/umips-swp-7.c
+++ b/gcc/testsuite/gcc.target/mips/umips-swp-7.c
@@ -0,0 +1,17 @@
+/* { dg-options "-fpeephole2 -mtune=m14k (-mmicromips)" } */
+/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */
+
+void MICROMIPS
+foo (int *r4, int r5, int r6)
+{
+ r5 *= r5;
+ r4[512] = r5;
+ r4[513] = r6;
+ {
+ register int r5asm asm ("$5") = r5;
+ register int r6asm asm ("$6") = r6;
+ asm ("#foo" : "=m" (r4[2]) : "d" (r5asm), "d" (r6asm));
+ }
+}
+
+/* { dg-final { scan-assembler-not "\tswp" } }*/
diff --git a/gcc/testsuite/gcc.target/powerpc/mmfpgpr.c b/gcc/testsuite/gcc.target/powerpc/mmfpgpr.c
new file mode 100644
index 00000000000..7f2d3d3eff9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/mmfpgpr.c
@@ -0,0 +1,22 @@
+/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-O2 -mcpu=power6x -mmfpgpr" } */
+/* { dg-final { scan-assembler "mffgpr" } } */
+/* { dg-final { scan-assembler "mftgpr" } } */
+
+/* Test that we generate the instructions to move between the GPR and FPR
+ registers under power6x. */
+
+extern long return_long (void);
+extern double return_double (void);
+
+double return_double2 (void)
+{
+ return (double) return_long ();
+}
+
+long return_long2 (void)
+{
+ return (long) return_double ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/pr56605.c b/gcc/testsuite/gcc.target/powerpc/pr56605.c
new file mode 100644
index 00000000000..7e5af449d05
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr56605.c
@@ -0,0 +1,13 @@
+/* PR rtl-optimization/56605 */
+/* { dg-do compile { target { powerpc64-*-* && lp64 } } } */
+/* { dg-options "-O3 -mvsx -mcpu=power7 -fno-unroll-loops -fdump-rtl-loop2_doloop" } */
+
+void foo (short* __restrict sb, int* __restrict ia)
+{
+ int i;
+ for (i = 0; i < 4000; i++)
+ ia[i] = (int) sb[i];
+}
+
+/* { dg-final { scan-rtl-dump-times "\\\(compare:CC \\\(subreg:SI \\\(reg:DI" 1 "loop2_doloop" } } */
+/* { dg-final { cleanup-rtl-dump "loop2_doloop" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/sd-pwr6.c b/gcc/testsuite/gcc.target/powerpc/sd-pwr6.c
new file mode 100644
index 00000000000..947382b7f7b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/sd-pwr6.c
@@ -0,0 +1,19 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-O2 -mcpu=power6 -mhard-dfp" } */
+/* { dg-final { scan-assembler-not "lfiwzx" } } */
+/* { dg-final { scan-assembler-times "lfd" 2 } } */
+/* { dg-final { scan-assembler-times "dctdp" 2 } } */
+/* { dg-final { scan-assembler-times "dadd" 1 } } */
+/* { dg-final { scan-assembler-times "drsp" 1 } } */
+
+/* Test that for power6 we need to use a bounce buffer on the stack to load
+ SDmode variables because the power6 does not have a way to directly load
+ 32-bit values from memory. */
+_Decimal32 a;
+
+void inc_dec32 (void)
+{
+ a += (_Decimal32) 1.0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/sd-vsx.c b/gcc/testsuite/gcc.target/powerpc/sd-vsx.c
new file mode 100644
index 00000000000..7e41e1e84cc
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/sd-vsx.c
@@ -0,0 +1,20 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-O2 -mcpu=power7 -mhard-dfp" } */
+/* { dg-final { scan-assembler-times "lfiwzx" 2 } } */
+/* { dg-final { scan-assembler-times "stfiwx" 1 } } */
+/* { dg-final { scan-assembler-not "lfd" } } */
+/* { dg-final { scan-assembler-not "stfd" } } */
+/* { dg-final { scan-assembler-times "dctdp" 2 } } */
+/* { dg-final { scan-assembler-times "dadd" 1 } } */
+/* { dg-final { scan-assembler-times "drsp" 1 } } */
+
+/* Test that power7 can directly load/store SDmode variables without using a
+ bounce buffer. */
+_Decimal32 a;
+
+void inc_dec32 (void)
+{
+ a += (_Decimal32) 1.0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-float0.c b/gcc/testsuite/gcc.target/powerpc/vsx-float0.c
new file mode 100644
index 00000000000..7e4fea68957
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/vsx-float0.c
@@ -0,0 +1,16 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-O2 -mcpu=power7" } */
+/* { dg-final { scan-assembler "xxlxor" } } */
+
+/* Test that we generate xxlor to clear a SFmode register. */
+
+float sum (float *p, unsigned long n)
+{
+ float sum = 0.0f; /* generate xxlxor instead of load */
+ while (n-- > 0)
+ sum += *p++;
+
+ return sum;
+}
diff --git a/gcc/testsuite/gcc.target/sh/pr49880-1.c b/gcc/testsuite/gcc.target/sh/pr49880-1.c
new file mode 100644
index 00000000000..e19f1bf38a1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/sh/pr49880-1.c
@@ -0,0 +1,22 @@
+/* Check that the option -mdiv=call-div1 works. */
+/* { dg-do link { target "sh*-*-*" } } */
+/* { dg-options "-mdiv=call-div1" } */
+/* { dg-skip-if "" { "sh*-*-*" } { "-m5*"} { "" } } */
+
+int
+test00 (int a, int b)
+{
+ return a / b;
+}
+
+unsigned int
+test01 (unsigned int a, unsigned b)
+{
+ return a / b;
+}
+
+int
+main (int argc, char** argv)
+{
+ return test00 (argc, 123) + test01 (argc, 123);
+}
diff --git a/gcc/testsuite/gcc.target/sh/pr49880-2.c b/gcc/testsuite/gcc.target/sh/pr49880-2.c
new file mode 100644
index 00000000000..eef832e30db
--- /dev/null
+++ b/gcc/testsuite/gcc.target/sh/pr49880-2.c
@@ -0,0 +1,22 @@
+/* Check that the option -mdiv=call-fp works. */
+/* { dg-do link { target "sh*-*-*" } } */
+/* { dg-options "-mdiv=call-fp" } */
+/* { dg-skip-if "" { "sh*-*-*" } { "-m5*"} { "" } } */
+
+int
+test00 (int a, int b)
+{
+ return a / b;
+}
+
+unsigned int
+test01 (unsigned int a, unsigned b)
+{
+ return a / b;
+}
+
+int
+main (int argc, char** argv)
+{
+ return test00 (argc, 123) + test01 (argc, 123);
+}
diff --git a/gcc/testsuite/gcc.target/sh/pr49880-3.c b/gcc/testsuite/gcc.target/sh/pr49880-3.c
new file mode 100644
index 00000000000..80a7df548a8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/sh/pr49880-3.c
@@ -0,0 +1,22 @@
+/* Check that the option -mdiv=call-table works. */
+/* { dg-do link { target "sh*-*-*" } } */
+/* { dg-options "-mdiv=call-table" } */
+/* { dg-skip-if "" { "sh*-*-*" } { "-m5*"} { "" } } */
+
+int
+test00 (int a, int b)
+{
+ return a / b;
+}
+
+unsigned int
+test01 (unsigned int a, unsigned b)
+{
+ return a / b;
+}
+
+int
+main (int argc, char** argv)
+{
+ return test00 (argc, 123) + test01 (argc, 123);
+}
diff --git a/gcc/testsuite/gcc.target/sh/pr49880-4.c b/gcc/testsuite/gcc.target/sh/pr49880-4.c
new file mode 100644
index 00000000000..998a8b69fdd
--- /dev/null
+++ b/gcc/testsuite/gcc.target/sh/pr49880-4.c
@@ -0,0 +1,19 @@
+/* Check that the option -mdiv=call-fp does not produce calls to the
+ library function that uses FPU to implement integer division if FPU insns
+ are not supported or are disabled. */
+/* { dg-do compile { target "sh*-*-*" } } */
+/* { dg-options "-mdiv=call-fp" } */
+/* { dg-skip-if "" { "sh*-*-*" } { "*"} { "-m1" "-m2" "-m3" "-m4al" "*nofpu" "-m4-340*" "-m4-400*" "-m4-500*" } } */
+/* { dg-final { scan-assembler-not "sdivsi3_i4\n|udivsi3_i4\n" } } */
+
+int
+test00 (int a, int b)
+{
+ return a / b;
+}
+
+unsigned int
+test01 (unsigned int a, unsigned b)
+{
+ return a / b;
+}
diff --git a/gcc/testsuite/gcc.target/sh/pr49880-5.c b/gcc/testsuite/gcc.target/sh/pr49880-5.c
new file mode 100644
index 00000000000..09e99a85f63
--- /dev/null
+++ b/gcc/testsuite/gcc.target/sh/pr49880-5.c
@@ -0,0 +1,19 @@
+/* Check that the option -mdiv=call-fp results in the corresponding library
+ function calls on targets that have a double precision FPU. */
+/* { dg-do compile { target "sh*-*-*" } } */
+/* { dg-options "-mdiv=call-fp" } */
+/* { dg-skip-if "" { "sh*-*-*" } { "*"} { "-m2a" "-m4" "-m4a" "*single-only" } } */
+/* { dg-final { scan-assembler "sdivsi3_i4\n" } } */
+/* { dg-final { scan-assembler "udivsi3_i4\n" } } */
+
+int
+test00 (int a, int b)
+{
+ return a / b;
+}
+
+unsigned int
+test01 (unsigned int a, unsigned b)
+{
+ return a / b;
+}
diff --git a/gcc/testsuite/gfortran.dg/do_1.f90 b/gcc/testsuite/gfortran.dg/do_1.f90
index 8ed0f7fb6c2..171275af3f2 100644
--- a/gcc/testsuite/gfortran.dg/do_1.f90
+++ b/gcc/testsuite/gfortran.dg/do_1.f90
@@ -1,5 +1,4 @@
-! { dg-do run { xfail *-*-* } }
-! XFAIL is tracked in PR 54932
+! { dg-do run }
! Program to check corner cases for DO statements.
program do_1
implicit none
diff --git a/gcc/testsuite/gfortran.dg/eof_5.f90 b/gcc/testsuite/gfortran.dg/eof_5.f90
new file mode 100644
index 00000000000..88671ba2374
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/eof_5.f90
@@ -0,0 +1,21 @@
+! { dg-do run }
+!
+! PR fortran/56696
+!
+! Contributed by Keith Refson
+!
+
+program iotest
+ character(len=258) :: inp = ' 1.0 1.0 1.0'
+ character(len=7) :: inp2 = '1 2 3 4'
+ integer :: ios
+ real :: a1, a2, a3, a4
+
+ read(inp2,*,iostat=ios) a1, a2, a3, a4
+ if (ios /= 0) call abort ()
+
+ read(inp,*,iostat=ios) a1, a2, a3, a4
+ if (ios == 0) call abort ()
+! write(*,*) 'IOSTAT=',ios
+end program iotest
+
diff --git a/gcc/testsuite/gfortran.dg/namelist_77.f90 b/gcc/testsuite/gfortran.dg/namelist_77.f90
new file mode 100644
index 00000000000..5cbfe3aad65
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/namelist_77.f90
@@ -0,0 +1,49 @@
+! { dg-do run }
+!
+! PR libfortran/51825 - Fortran runtime error: Cannot match namelist object name
+! Test case derived from PR.
+
+module local_mod
+
+ type mytype1
+ integer :: int1
+ end type
+
+ type mytype2
+ integer :: n_x
+ integer :: n_px
+ end type
+
+ type beam_init_struct
+ character(16) :: chars(1) = ''
+ type (mytype1) dummy
+ type (mytype2) grid(1)
+ end type
+
+end module
+
+program error_namelist
+
+ use local_mod
+
+ implicit none
+
+ type (beam_init_struct) beam_init
+
+ namelist / error_params / beam_init
+
+ open (10, status='scratch')
+ write (10, '(a)') "&error_params"
+ write (10, '(a)') " beam_init%chars(1)='JUNK'"
+ write (10, '(a)') " beam_init%grid(1)%n_x=3"
+ write (10, '(a)') " beam_init%grid(1)%n_px=2"
+ write (10, '(a)') "/"
+ rewind(10)
+ read(10, nml=error_params)
+ close (10)
+
+ if (beam_init%chars(1) /= 'JUNK') call abort
+ if (beam_init%grid(1)%n_x /= 3) call abort
+ if (beam_init%grid(1)%n_px /= 2) call abort
+
+end program
diff --git a/gcc/testsuite/gfortran.dg/namelist_78.f90 b/gcc/testsuite/gfortran.dg/namelist_78.f90
new file mode 100644
index 00000000000..d4e29ab8228
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/namelist_78.f90
@@ -0,0 +1,34 @@
+! { dg-do run }
+!
+! PR libfortran/51825
+! Test case regarding namelist problems with derived types
+
+program namelist
+
+ type d1
+ integer :: j = 0
+ end type d1
+
+ type d2
+ type(d1) k
+ end type d2
+
+ type d3
+ type(d2) d(2)
+ end type d3
+
+ type(d3) der
+ namelist /nmlst/ der
+
+ open (10, status='scratch')
+ write (10, '(a)') "&NMLST"
+ write (10, '(a)') " DER%D(1)%K%J = 1,"
+ write (10, '(a)') " DER%D(2)%K%J = 2,"
+ write (10, '(a)') "/"
+ rewind(10)
+ read(10, nml=nmlst)
+ close (10)
+
+ if (der%d(1)%k%j /= 1) call abort
+ if (der%d(2)%k%j /= 2) call abort
+end program namelist
diff --git a/gcc/testsuite/gfortran.dg/open_negative_unit_1.f90 b/gcc/testsuite/gfortran.dg/open_negative_unit_1.f90
new file mode 100644
index 00000000000..6446436c885
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/open_negative_unit_1.f90
@@ -0,0 +1,21 @@
+! { dg-do run }
+! PR48618 - Negative unit number in OPEN(...) is sometimes allowed
+!
+! Test originally from Janne Blomqvist in PR:
+! http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48618
+
+program nutest
+ implicit none
+ integer id, ios
+
+ open(newunit=id, file="foo.txt", iostat=ios)
+ if (ios /= 0) call abort
+
+ open(id, file="bar.txt", iostat=ios)
+ if (ios /= 0) call abort
+
+ close(id, status="delete")
+
+ open(-10, file="foo.txt", iostat=ios)
+ if (ios == 0) call abort
+end program nutest
diff --git a/gcc/testsuite/gfortran.dg/transfer_intrinsic_5.f90 b/gcc/testsuite/gfortran.dg/transfer_intrinsic_5.f90
new file mode 100644
index 00000000000..47be585a78a
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/transfer_intrinsic_5.f90
@@ -0,0 +1,50 @@
+! { dg-do run }
+!
+! PR fortran/56615
+!
+! Contributed by Harald Anlauf
+!
+!
+program gfcbug
+ implicit none
+ integer, parameter :: n = 8
+ integer :: i
+ character(len=1), dimension(n) :: a, b
+ character(len=n) :: s, t
+ character(len=n/2) :: u
+
+ do i = 1, n
+ a(i) = achar (i-1 + iachar("a"))
+ end do
+! print *, "# Forward:"
+! print *, "a=", a
+ s = transfer (a, s)
+! print *, "s=", s
+ call cmp (a, s)
+! print *, " stride = +2:"
+ do i = 1, n/2
+ u(i:i) = a(2*i-1)
+ end do
+! print *, "u=", u
+ call cmp (a(1:n:2), u)
+! print *
+! print *, "# Backward:"
+ b = a(n:1:-1)
+! print *, "b=", b
+ t = transfer (b, t)
+! print *, "t=", t
+ call cmp (b, t)
+! print *, " stride = -1:"
+ call cmp (a(n:1:-1), t)
+contains
+ subroutine cmp (b, s)
+ character(len=1), dimension(:), intent(in) :: b
+ character(len=*), intent(in) :: s
+ character(len=size(b)) :: c
+ c = transfer (b, c)
+ if (c /= s) then
+ print *, "c=", c, " ", merge (" ok","BUG!", c == s)
+ call abort ()
+ end if
+ end subroutine cmp
+end program gfcbug