aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2010-01-24 10:36:49 +0000
committerJan Hubicka <jh@suse.cz>2010-01-24 10:36:49 +0000
commite9fc1a6f86ca7b860854fee0ba9b33dfe5f93c63 (patch)
treedcf236316723541fe267b3437aa3779930381fe0 /gcc/testsuite
parent4f5058063ea01ff1d1c475ffe9ed8a30eaa6ef8b (diff)
Merge.
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/pretty-ipa@156196 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog228
-rw-r--r--gcc/testsuite/g++.dg/abi/mangle39.C28
-rw-r--r--gcc/testsuite/g++.dg/abi/packed1.C24
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/compat-common.h55
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/decimal-dummy.h67
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/pass-1_main.C13
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/pass-1_x.C30
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/pass-1_y.C5
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/pass-2_main.C13
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/pass-2_x.C32
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/pass-2_y.C7
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/pass-3_main.C13
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/pass-3_x.C30
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/pass-3_y.C7
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/pass-4_main.C13
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/pass-4_x.C32
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/pass-4_y.C5
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/pass-5_main.C13
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/pass-5_x.C30
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/pass-5_y.C7
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/pass-6_main.C13
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/pass-6_x.C32
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/pass-6_y.C5
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/pass_x.h151
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/pass_y.h89
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/return-1_main.C13
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/return-1_x.C24
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/return-1_y.C5
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/return-2_main.C13
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/return-2_x.C26
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/return-2_y.C7
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/return-3_main.C13
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/return-3_x.C24
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/return-3_y.C7
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/return-4_main.C13
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/return-4_x.C26
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/return-4_y.C5
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/return-5_main.C14
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/return-5_x.C24
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/return-5_y.C7
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/return-6_main.C14
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/return-6_x.C26
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/return-6_y.C5
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/return_x.h90
-rw-r--r--gcc/testsuite/g++.dg/compat/decimal/return_y.h67
-rw-r--r--gcc/testsuite/g++.dg/conversion/op6.C18
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/decltype22.C13
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-warn1.C8
-rw-r--r--gcc/testsuite/g++.dg/other/cv_func.C3
-rw-r--r--gcc/testsuite/g++.dg/parse/crash55.C8
-rw-r--r--gcc/testsuite/g++.dg/parse/fn-typedef1.C19
-rw-r--r--gcc/testsuite/g++.dg/parse/limits-initializer1.C37
-rw-r--r--gcc/testsuite/g++.dg/torture/pr42773.C54
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr42717.c30
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr42248.c27
-rw-r--r--gcc/testsuite/gcc.dg/20020312-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/cleanup-13.c15
-rw-r--r--gcc/testsuite/gcc.dg/cpp/_Pragma6.c2
-rw-r--r--gcc/testsuite/gcc.dg/debug/pr42767.c18
-rw-r--r--gcc/testsuite/gcc.dg/guality/pr42782.c24
-rw-r--r--gcc/testsuite/gcc.dg/pr19340.c2
-rw-r--r--gcc/testsuite/gcc.dg/pr19988.c14
-rw-r--r--gcc/testsuite/gcc.dg/pr42715.c59
-rw-r--r--gcc/testsuite/gcc.dg/pr42719.c14
-rw-r--r--gcc/testsuite/gcc.dg/pr42728.c11
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/20040204-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/asm-3.c4
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr42585.c37
-rw-r--r--gcc/testsuite/gcc.dg/weak/typeof-2.c2
-rw-r--r--gcc/testsuite/gcc.target/alpha/pr42774.c10
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vget_lowf32.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vget_lowp16.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vget_lowp8.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vget_lows16.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vget_lows32.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vget_lows64.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vget_lows8.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vget_lowu16.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vget_lowu32.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vget_lowu64.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vget_lowu8.c2
-rw-r--r--gcc/testsuite/gfortran.dg/bounds_check_15.f9033
-rw-r--r--gcc/testsuite/gfortran.dg/dependency_25.f9095
-rw-r--r--gcc/testsuite/gfortran.dg/extends_10.f0334
-rw-r--r--gcc/testsuite/gfortran.dg/extends_6.f032
-rw-r--r--gcc/testsuite/gfortran.dg/interface_assignment_5.f9049
-rw-r--r--gcc/testsuite/gfortran.dg/private_type_6.f902
-rw-r--r--gcc/testsuite/gfortran.dg/proc_ptr_comp_pass_6.f9035
-rw-r--r--gcc/testsuite/gfortran.dg/structure_constructor_8.f032
-rw-r--r--gcc/testsuite/gfortran.dg/typebound_call_12.f0336
-rw-r--r--gcc/testsuite/gfortran.dg/vect/fast-math-mgrid-resid.f45
-rw-r--r--gcc/testsuite/gfortran.fortran-torture/compile/pr42781.f9059
92 files changed, 2190 insertions, 20 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 995ba7989e0..e3214126111 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,231 @@
+2010-01-22 Michael Matz <matz@suse.de>
+
+ * gfortran.dg/vect/fast-math-mgrid-resid.f: Limit to x86, add
+ -msse2.
+
+2010-01-21 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/42736
+ * gfortran.dg/dependency_25.f90 : New test.
+
+2010-01-21 Martin Jambor <mjambor@suse.cz>
+
+ PR tree-optimization/42585
+ * gcc.dg/tree-ssa/pr42585.c: New test.
+
+2010-01-21 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/19988
+ * gcc.dg/pr19988.c: New testcase.
+
+2010-01-20 Janis Johnson <janis187@us.ibm.com>
+
+ * g++.dg/compat/decimal/compat-common.h: New file.
+ * g++.dg/compat/decimal/decimal-dummy.h: New file.
+ * g++.dg/compat/decimal/pass_x.h: New file.
+ * g++.dg/compat/decimal/pass_y.h: New file.
+ * g++.dg/compat/decimal/pass-1_main.C: New file.
+ * g++.dg/compat/decimal/pass-1_x.C: New file.
+ * g++.dg/compat/decimal/pass-1_y.C: New file.
+ * g++.dg/compat/decimal/pass-2_main.C: New file.
+ * g++.dg/compat/decimal/pass-2_x.C: New file.
+ * g++.dg/compat/decimal/pass-2_y.C: New file.
+ * g++.dg/compat/decimal/pass-3_main.C: New file.
+ * g++.dg/compat/decimal/pass-3_x.C: New file.
+ * g++.dg/compat/decimal/pass-3_y.C: New file.
+ * g++.dg/compat/decimal/pass-4_main.C: New file.
+ * g++.dg/compat/decimal/pass-4_x.C: New file.
+ * g++.dg/compat/decimal/pass-4_y.C: New file.
+ * g++.dg/compat/decimal/pass-5_main.C: New file.
+ * g++.dg/compat/decimal/pass-5_x.C: New file.
+ * g++.dg/compat/decimal/pass-5_y.C: New file.
+ * g++.dg/compat/decimal/pass-6_main.C: New file.
+ * g++.dg/compat/decimal/pass-6_x.C: New file.
+ * g++.dg/compat/decimal/pass-6_y.C: New file.
+ * g++.dg/compat/decimal/return_x.h: New file.
+ * g++.dg/compat/decimal/return_y.h: New file.
+ * g++.dg/compat/decimal/return-1_main.C: New file.
+ * g++.dg/compat/decimal/return-1_x.C: New file.
+ * g++.dg/compat/decimal/return-1_y.C: New file.
+ * g++.dg/compat/decimal/return-2_main.C: New file.
+ * g++.dg/compat/decimal/return-2_x.C: New file.
+ * g++.dg/compat/decimal/return-2_y.C: New file.
+ * g++.dg/compat/decimal/return-3_main.C: New file.
+ * g++.dg/compat/decimal/return-3_x.C: New file.
+ * g++.dg/compat/decimal/return-3_y.C: New file.
+ * g++.dg/compat/decimal/return-4_main.C: New file.
+ * g++.dg/compat/decimal/return-4_x.C: New file.
+ * g++.dg/compat/decimal/return-4_y.C: New file.
+ * g++.dg/compat/decimal/return-5_main.C: New file.
+ * g++.dg/compat/decimal/return-5_x.C: New file.
+ * g++.dg/compat/decimal/return-5_y.C: New file.
+ * g++.dg/compat/decimal/return-6_main.C: New file.
+ * g++.dg/compat/decimal/return-6_x.C: New file.
+ * g++.dg/compat/decimal/return-6_y.C: New file.
+
+2010-01-20 Alexandre Oliva <aoliva@redhat.com>
+
+ PR debug/42715
+ * gcc.dg/pr42715.c: New.
+
+2010-01-20 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/42038
+ * g++.dg/parse/crash55.C: New.
+
+2010-01-20 Alexandre Oliva <aoliva@redhat.com>
+
+ PR debug/42782
+ * gcc.dg/guality/pr42782.c: New.
+
+2010-01-20 Jason Merrill <jason@redhat.com>
+
+ PR c++/41788
+ * g++.dg/abi/packed1.C: New.
+
+ PR c++/41920
+ * g++.dg/cpp0x/lambda/lambda-warn1.C: New.
+
+ PR c++/40750
+ * g++.dg/parse/fn-typedef1.C: New.
+ * g++.dg/other/cv_quals.C: Adjust.
+
+2010-01-20 Anthony Green <green@moxielogic.com>
+
+ * gcc.dg/cpp/_Pragma6.c: Skip this test for moxie-*-* (no
+ pack(push) pragma).
+ * gcc.dg/pr19340.c: Skip this test for moxie-*-* (no scheduling).
+ * gcc.dg/20020312-2.c: Port this to the moxie core.
+ * gcc.dg/weak/typeof-2.c: Ditto.
+
+2010-01-20 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/42717
+ * gcc.c-torture/compile/pr42717.c: New testcase.
+
+2010-01-20 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc.dg/cleanup-13.c: Expect DW_OP_mod to do unsigned modulo instead
+ of signed, add a few new tests.
+
+ PR middle-end/42803
+ * g++.dg/parse/limits-initializer1.C: New test.
+
+2010-01-19 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/42804
+ * gfortran.dg/proc_ptr_comp_pass_6.f90: New test.
+ * gfortran.dg/typebound_call_12.f03: New test.
+
+2010-01-19 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/42783
+ * gfortran.dg/bounds_check_15.f90 : New test.
+
+2010-01-19 Michael Matz <matz@suse.de>
+
+ PR tree-optimization/41783
+ * gfortran.dg/vect/fast-math-mgrid-resid.f: New.
+
+2010-01-19 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
+
+ PR target/38697.
+ * gcc.target/arm/neon/vget_lowf32.c: Regenerate.
+ * gcc.target/arm/neon/vget_lowp16.c: Likewise.
+ * gcc.target/arm/neon/vget_lowp8.c: Likewise.
+ * gcc.target/arm/neon/vget_lows16.c: Likewise.
+ * gcc.target/arm/neon/vget_lows32.c: Likewise.
+ * gcc.target/arm/neon/vget_lows64.c: Likewise.
+ * gcc.target/arm/neon/vget_lows8.c: Likewise.
+ * gcc.target/arm/neon/vget_lowu16.c: Likewise.
+ * gcc.target/arm/neon/vget_lowu32.c: Likewise.
+ * gcc.target/arm/neon/vget_lowu64.c: Likewise.
+ * gcc.target/arm/neon/vget_lowu8.c: Likewise.
+
+2010-01-19 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/42545
+ * gfortran.dg/extends_6.f03: Modified an error message.
+ * gfortran.dg/extends_10.f03: New test.
+ * gfortran.dg/private_type_6.f03: Modified an error message.
+ * gfortran.dg/structure_constructor_8.f03: Ditto.
+
+2010-01-19 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/42719
+ * gcc.dg/pr42719.c: New test.
+
+ PR debug/42728
+ * gcc.dg/pr42728.c: New test.
+
+2010-01-19 Anthony Green <green@moxielogic.com>
+
+ * gcc.dg/tree-ssa/20040204-1.c: Expect this test to pass.
+
+2010-01-18 Anthony Green <green@moxielogic.com>
+
+ * gcc.dg/tree-ssa/asm-3.c (REGISTER): Pick an appropriate register
+ for moxie.
+
+2010-01-19 Dodji Seketeli <dodji@redhat.com>
+
+ * g++.dg/template/error45.C: reverted as part of reverting the
+ fix of PR c++/42634.
+
+2010-01-18 Dodji Seketeli <dodji@redhat.com>
+
+ PR c++/42634
+ * g++.dg/template/error45.C: New test.
+
+2010-01-18 Dodji Seketeli <dodji@redhat.com>
+
+ PR c++/42766
+ * g++.dg/conversion/op6.C: New test.
+
+2010-01-18 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/42774
+ * gcc.target/alpha/pr42774.c: New test.
+
+2010-01-18 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/42781
+ * gfortran.fortran-torture/compile/pr42781.f90: New testcase.
+
+2010-01-17 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/42248
+ * gcc.c-torture/execute/pr42248.c: New testcase.
+
+2010-01-17 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/42773
+ * g++.dg/torture/pr42773.C: New testcase.
+
+2010-01-17 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/42677
+ * gfortran.dg/interface_assignment_5.f90: New test.
+
+2010-01-17 Dodji Seketeli <dodji@redhat.com>
+
+ PR c++/42697
+ * g++.dg/template/crash94.C: Reverted.
+
+2010-01-17 Dodji Seketeli <dodji@redhat.com>
+
+ PR c++/42697
+
+2010-01-17 Jie Zhang <jie.zhang@analog.com>
+
+ PR debug/42767
+ * gcc.dg/debug/pr42767.c: New.
+
+2010-01-15 Jason Merrill <jason@redhat.com>
+
+ PR c++/42761
+ * g++.dg/cpp0x/decltype22.C: New.
+
2010-01-16 Jakub Jelinek <jakub@redhat.com>
PR middle-end/42760
diff --git a/gcc/testsuite/g++.dg/abi/mangle39.C b/gcc/testsuite/g++.dg/abi/mangle39.C
new file mode 100644
index 00000000000..30a08b0c32f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/abi/mangle39.C
@@ -0,0 +1,28 @@
+// PR c++/42338
+// { dg-options "-std=c++0x" }
+// { dg-final { scan-assembler "_Z1fIPiEDTcmppfp_Li0EET_" } }
+// { dg-final { scan-assembler "_Z1gIiEvRK1AIT_EDTixfp_Li0EE" } }
+
+template<typename T>
+auto f(T t) -> decltype(++t, 0)
+{
+ ++t;
+ return 0;
+}
+
+template <class T>
+struct A
+{
+ T operator[](int) const { return 0; }
+};
+
+template< typename T >
+void g(const A<T> &a, decltype(a[0]) t) { }
+
+int main()
+{
+ f((int*)0);
+
+ A<int> a;
+ g(a,1);
+}
diff --git a/gcc/testsuite/g++.dg/abi/packed1.C b/gcc/testsuite/g++.dg/abi/packed1.C
new file mode 100644
index 00000000000..4e759728a17
--- /dev/null
+++ b/gcc/testsuite/g++.dg/abi/packed1.C
@@ -0,0 +1,24 @@
+// PR c++/41788
+// { dg-options "-Wpacked" }
+// { dg-do run }
+
+extern "C" void abort ();
+
+struct INNER {
+ virtual int foo() const { return 1; }
+} __attribute__ ((packed));
+
+struct OUTER {
+ char c;
+ INNER inner;
+} __attribute__ ((packed));
+
+int main()
+{
+ OUTER outer;
+ int s = sizeof(outer);
+ int o = (char *)&outer.inner - (char *)&outer;
+ if (s != sizeof (char) + sizeof (void*)
+ || o != sizeof (char))
+ abort ();
+}
diff --git a/gcc/testsuite/g++.dg/compat/decimal/compat-common.h b/gcc/testsuite/g++.dg/compat/decimal/compat-common.h
new file mode 100644
index 00000000000..43c22d722f7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/compat-common.h
@@ -0,0 +1,55 @@
+/* Several of the binary compatibility tests use these macros to
+ allow debugging the test or tracking down a failure by getting an
+ indication of whether each individual check passed or failed.
+ When DBG is defined, each check is shown by a dot (pass) or 'F'
+ (fail) rather than aborting as soon as a failure is detected. */
+
+#ifdef DBG
+#include <stdio.h>
+#define DEBUG_INIT setbuf (stdout, NULL);
+#define DEBUG_FPUTS(x) fputs (x, stdout);
+#define DEBUG_DOT putc ('.', stdout);
+#define DEBUG_NL putc ('\n', stdout);
+#define DEBUG_FAIL putc ('F', stdout); fails++;
+#define DEBUG_CHECK { DEBUG_FAIL } else { DEBUG_DOT }
+#define DEBUG_FINI if (fails) DEBUG_FPUTS ("failed\n") \
+ else DEBUG_FPUTS ("passed\n")
+#else
+#define DEBUG_INIT
+#define DEBUG_FPUTS(x)
+#define DEBUG_DOT
+#define DEBUG_NL
+#define DEBUG_FAIL abort ();
+#define DEBUG_CHECK abort ();
+#define DEBUG_FINI
+#endif
+
+#ifdef SKIP_COMPLEX
+#ifndef SKIP_COMPLEX_INT
+#define SKIP_COMPLEX_INT
+#endif
+#endif
+
+#ifndef SKIP_COMPLEX
+#ifdef __GNUC__
+#define CINT(x, y) (x + y * __extension__ 1i)
+#define CDBL(x, y) (x + y * __extension__ 1i)
+#else
+#ifdef __SUNPRO_C
+/* ??? Complex support without <complex.h>. */
+#else
+#include <complex.h>
+#endif
+#ifndef SKIP_COMPLEX_INT
+#define CINT(x, y) ((_Complex int) (x + y * _Complex_I))
+#endif
+#define CDBL(x, y) (x + y * _Complex_I)
+#endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void abort (void);
+#else
+extern void abort (void);
+#endif
+extern int fails;
diff --git a/gcc/testsuite/g++.dg/compat/decimal/decimal-dummy.h b/gcc/testsuite/g++.dg/compat/decimal/decimal-dummy.h
new file mode 100644
index 00000000000..ec347f9b7eb
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/decimal-dummy.h
@@ -0,0 +1,67 @@
+namespace std {
+namespace decimal {
+
+ class decimal32
+ {
+ public:
+ typedef float __dec32 __attribute__((mode(SD)));
+ decimal32 () : __val(0.e-101DF) {}
+ decimal32 (__dec32 x) : __val(x) {}
+ __dec32 __val;
+ };
+
+ class decimal64
+ {
+ public:
+ typedef float __dec64 __attribute__((mode(DD)));
+ decimal64 () : __val(0.e-398dd) {}
+ decimal64 (__dec64 x) : __val(x) {}
+ __dec64 __val;
+ };
+
+ class decimal128
+ {
+ public:
+ typedef float __dec128 __attribute__((mode(TD)));
+ decimal128 () : __val(0.e-6176DL) {}
+ decimal128 (__dec128 x) : __val(x) {}
+ __dec128 __val;
+ };
+
+ inline decimal32 operator+ (decimal32 lhs, decimal32 rhs)
+ {
+ decimal32 tmp;
+ tmp.__val = lhs.__val + rhs.__val;
+ return tmp;
+ }
+
+ inline decimal64 operator+ (decimal64 lhs, decimal64 rhs)
+ {
+ decimal64 tmp;
+ tmp.__val = lhs.__val + rhs.__val;
+ return tmp;
+ }
+
+ inline decimal128 operator+ (decimal128 lhs, decimal128 rhs)
+ {
+ decimal128 tmp;
+ tmp.__val = lhs.__val + rhs.__val;
+ return tmp;
+ }
+
+ inline bool operator!= (decimal32 lhs, decimal32 rhs)
+ {
+ return lhs.__val != rhs.__val;
+ }
+
+ inline bool operator!= (decimal64 lhs, decimal64 rhs)
+ {
+ return lhs.__val != rhs.__val;
+ }
+
+ inline bool operator!= (decimal128 lhs, decimal128 rhs)
+ {
+ return lhs.__val != rhs.__val;
+ }
+}
+}
diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-1_main.C b/gcc/testsuite/g++.dg/compat/decimal/pass-1_main.C
new file mode 100644
index 00000000000..963dc3bbfab
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/pass-1_main.C
@@ -0,0 +1,13 @@
+/* { dg-require-effective-target dfp } */
+
+/* Test passing decimal scalars by value. */
+
+extern void pass_1_x (void);
+int fails;
+
+int
+main ()
+{
+ pass_1_x ();
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-1_x.C b/gcc/testsuite/g++.dg/compat/decimal/pass-1_x.C
new file mode 100644
index 00000000000..265a1317b00
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/pass-1_x.C
@@ -0,0 +1,30 @@
+typedef float dec32 __attribute__((mode(SD)));
+typedef float dec64 __attribute__((mode(DD)));
+typedef float dec128 __attribute__((mode(TD)));
+
+#include "pass_x.h"
+
+void
+pass_1_x (void)
+{
+DEBUG_INIT
+
+#define T(NAME) testit##NAME ();
+
+#ifndef SKIP_DECIMAL32
+T(d32)
+#endif
+#ifndef SKIP_DECIMAL64
+T(d64)
+#endif
+#ifndef SKIP_DECIMAL128
+T(d128)
+#endif
+
+DEBUG_FINI
+
+if (fails != 0)
+ abort ();
+
+#undef T
+}
diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-1_y.C b/gcc/testsuite/g++.dg/compat/decimal/pass-1_y.C
new file mode 100644
index 00000000000..5da7f87d51e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/pass-1_y.C
@@ -0,0 +1,5 @@
+typedef float dec32 __attribute__((mode(SD)));
+typedef float dec64 __attribute__((mode(DD)));
+typedef float dec128 __attribute__((mode(TD)));
+
+#include "pass_y.h"
diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-2_main.C b/gcc/testsuite/g++.dg/compat/decimal/pass-2_main.C
new file mode 100644
index 00000000000..533e4b276dc
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/pass-2_main.C
@@ -0,0 +1,13 @@
+/* { dg-require-effective-target dfp } */
+
+/* Test passing decimal classes by value. */
+
+extern void pass_2_x (void);
+int fails;
+
+int
+main ()
+{
+ pass_2_x ();
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-2_x.C b/gcc/testsuite/g++.dg/compat/decimal/pass-2_x.C
new file mode 100644
index 00000000000..8a67bda0ed8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/pass-2_x.C
@@ -0,0 +1,32 @@
+#include "decimal-dummy.h"
+
+#define dec32 std::decimal::decimal32
+#define dec64 std::decimal::decimal64
+#define dec128 std::decimal::decimal128
+
+#include "pass_x.h"
+
+void
+pass_2_x (void)
+{
+DEBUG_INIT
+
+#define T(NAME) testit##NAME ();
+
+#ifndef SKIP_DECIMAL32
+T(d32)
+#endif
+#ifndef SKIP_DECIMAL64
+T(d64)
+#endif
+#ifndef SKIP_DECIMAL128
+T(d128)
+#endif
+
+DEBUG_FINI
+
+if (fails != 0)
+ abort ();
+
+#undef T
+}
diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-2_y.C b/gcc/testsuite/g++.dg/compat/decimal/pass-2_y.C
new file mode 100644
index 00000000000..97471457dbe
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/pass-2_y.C
@@ -0,0 +1,7 @@
+#include "decimal-dummy.h"
+
+#define dec32 std::decimal::decimal32
+#define dec64 std::decimal::decimal64
+#define dec128 std::decimal::decimal128
+
+#include "pass_y.h"
diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-3_main.C b/gcc/testsuite/g++.dg/compat/decimal/pass-3_main.C
new file mode 100644
index 00000000000..de09992c224
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/pass-3_main.C
@@ -0,0 +1,13 @@
+/* { dg-require-effective-target dfp } */
+
+/* Test passing decimal scalars and classes by value. */
+
+extern void pass_3_x (void);
+int fails;
+
+int
+main ()
+{
+ pass_3_x ();
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-3_x.C b/gcc/testsuite/g++.dg/compat/decimal/pass-3_x.C
new file mode 100644
index 00000000000..17e4d1c8b5a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/pass-3_x.C
@@ -0,0 +1,30 @@
+typedef float dec32 __attribute__((mode(SD)));
+typedef float dec64 __attribute__((mode(DD)));
+typedef float dec128 __attribute__((mode(TD)));
+
+#include "pass_x.h"
+
+void
+pass_3_x (void)
+{
+DEBUG_INIT
+
+#define T(NAME) testit##NAME ();
+
+#ifndef SKIP_DECIMAL32
+T(d32)
+#endif
+#ifndef SKIP_DECIMAL64
+T(d64)
+#endif
+#ifndef SKIP_DECIMAL128
+T(d128)
+#endif
+
+DEBUG_FINI
+
+if (fails != 0)
+ abort ();
+
+#undef T
+}
diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-3_y.C b/gcc/testsuite/g++.dg/compat/decimal/pass-3_y.C
new file mode 100644
index 00000000000..97471457dbe
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/pass-3_y.C
@@ -0,0 +1,7 @@
+#include "decimal-dummy.h"
+
+#define dec32 std::decimal::decimal32
+#define dec64 std::decimal::decimal64
+#define dec128 std::decimal::decimal128
+
+#include "pass_y.h"
diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-4_main.C b/gcc/testsuite/g++.dg/compat/decimal/pass-4_main.C
new file mode 100644
index 00000000000..d5a0a47d478
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/pass-4_main.C
@@ -0,0 +1,13 @@
+/* { dg-require-effective-target dfp } */
+
+/* Test passing decimal classes and scalars by value. */
+
+extern void pass_4_x (void);
+int fails;
+
+int
+main ()
+{
+ pass_4_x ();
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-4_x.C b/gcc/testsuite/g++.dg/compat/decimal/pass-4_x.C
new file mode 100644
index 00000000000..b0483ac278f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/pass-4_x.C
@@ -0,0 +1,32 @@
+#include "decimal-dummy.h"
+
+#define dec32 std::decimal::decimal32
+#define dec64 std::decimal::decimal64
+#define dec128 std::decimal::decimal128
+
+#include "pass_x.h"
+
+void
+pass_4_x (void)
+{
+DEBUG_INIT
+
+#define T(NAME) testit##NAME ();
+
+#ifndef SKIP_DECIMAL32
+T(d32)
+#endif
+#ifndef SKIP_DECIMAL64
+T(d64)
+#endif
+#ifndef SKIP_DECIMAL128
+T(d128)
+#endif
+
+DEBUG_FINI
+
+if (fails != 0)
+ abort ();
+
+#undef T
+}
diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-4_y.C b/gcc/testsuite/g++.dg/compat/decimal/pass-4_y.C
new file mode 100644
index 00000000000..5da7f87d51e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/pass-4_y.C
@@ -0,0 +1,5 @@
+typedef float dec32 __attribute__((mode(SD)));
+typedef float dec64 __attribute__((mode(DD)));
+typedef float dec128 __attribute__((mode(TD)));
+
+#include "pass_y.h"
diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-5_main.C b/gcc/testsuite/g++.dg/compat/decimal/pass-5_main.C
new file mode 100644
index 00000000000..9b25a49c72e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/pass-5_main.C
@@ -0,0 +1,13 @@
+/* { dg-require-effective-target dfp } */
+
+/* Test passing decimal scalars and typedef'd classes by value. */
+
+extern void pass_5_x (void);
+int fails;
+
+int
+main ()
+{
+ pass_5_x ();
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-5_x.C b/gcc/testsuite/g++.dg/compat/decimal/pass-5_x.C
new file mode 100644
index 00000000000..11c4d96c9cd
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/pass-5_x.C
@@ -0,0 +1,30 @@
+typedef float dec32 __attribute__((mode(SD)));
+typedef float dec64 __attribute__((mode(DD)));
+typedef float dec128 __attribute__((mode(TD)));
+
+#include "pass_x.h"
+
+void
+pass_5_x (void)
+{
+DEBUG_INIT
+
+#define T(NAME) testit##NAME ();
+
+#ifndef SKIP_DECIMAL32
+T(d32)
+#endif
+#ifndef SKIP_DECIMAL64
+T(d64)
+#endif
+#ifndef SKIP_DECIMAL128
+T(d128)
+#endif
+
+DEBUG_FINI
+
+if (fails != 0)
+ abort ();
+
+#undef T
+}
diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-5_y.C b/gcc/testsuite/g++.dg/compat/decimal/pass-5_y.C
new file mode 100644
index 00000000000..5a2c1fba01b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/pass-5_y.C
@@ -0,0 +1,7 @@
+#include "decimal-dummy.h"
+
+typedef std::decimal::decimal32 dec32;
+typedef std::decimal::decimal64 dec64;
+typedef std::decimal::decimal128 dec128;
+
+#include "pass_y.h"
diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-6_main.C b/gcc/testsuite/g++.dg/compat/decimal/pass-6_main.C
new file mode 100644
index 00000000000..1b686a21dd0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/pass-6_main.C
@@ -0,0 +1,13 @@
+/* { dg-require-effective-target dfp } */
+
+/* Test passing typedef'd decimal classes and scalars by value. */
+
+extern void pass_6_x (void);
+int fails;
+
+int
+main ()
+{
+ pass_6_x ();
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-6_x.C b/gcc/testsuite/g++.dg/compat/decimal/pass-6_x.C
new file mode 100644
index 00000000000..e59ca7f722d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/pass-6_x.C
@@ -0,0 +1,32 @@
+#include "decimal-dummy.h"
+
+typedef std::decimal::decimal32 dec32;
+typedef std::decimal::decimal64 dec64;
+typedef std::decimal::decimal128 dec128;
+
+#include "pass_x.h"
+
+void
+pass_6_x (void)
+{
+DEBUG_INIT
+
+#define T(NAME) testit##NAME ();
+
+#ifndef SKIP_DECIMAL32
+T(d32)
+#endif
+#ifndef SKIP_DECIMAL64
+T(d64)
+#endif
+#ifndef SKIP_DECIMAL128
+T(d128)
+#endif
+
+DEBUG_FINI
+
+if (fails != 0)
+ abort ();
+
+#undef T
+}
diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-6_y.C b/gcc/testsuite/g++.dg/compat/decimal/pass-6_y.C
new file mode 100644
index 00000000000..5da7f87d51e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/pass-6_y.C
@@ -0,0 +1,5 @@
+typedef float dec32 __attribute__((mode(SD)));
+typedef float dec64 __attribute__((mode(DD)));
+typedef float dec128 __attribute__((mode(TD)));
+
+#include "pass_y.h"
diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass_x.h b/gcc/testsuite/g++.dg/compat/decimal/pass_x.h
new file mode 100644
index 00000000000..5b25dc9bf1a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/pass_x.h
@@ -0,0 +1,151 @@
+#include "compat-common.h"
+
+#define T(NAME, TYPE, INITVAL) \
+TYPE g01##NAME, g02##NAME, g03##NAME, g04##NAME; \
+TYPE g05##NAME, g06##NAME, g07##NAME, g08##NAME; \
+TYPE g09##NAME, g10##NAME, g11##NAME, g12##NAME; \
+TYPE g13##NAME, g14##NAME, g15##NAME, g16##NAME; \
+ \
+extern void init##NAME (TYPE *p, TYPE v); \
+extern void checkg##NAME (void); \
+extern void \
+test##NAME (TYPE x01, TYPE x02, TYPE x03, TYPE x04, \
+ TYPE x05, TYPE x06, TYPE x07, TYPE x08, \
+ TYPE x09, TYPE x10, TYPE x11, TYPE x12, \
+ TYPE x13, TYPE x14, TYPE x15, TYPE x16); \
+extern void testva##NAME (int n, ...); \
+ \
+extern void \
+check##NAME (TYPE x, TYPE v) \
+{ \
+ if (x != v + INITVAL) \
+ DEBUG_CHECK \
+} \
+ \
+extern void \
+test2_##NAME (TYPE x01, TYPE x02, TYPE x03, TYPE x04, \
+ TYPE x05, TYPE x06, TYPE x07, TYPE x08) \
+{ \
+ test##NAME (x01, g02##NAME, x02, g04##NAME, \
+ x03, g06##NAME, x04, g08##NAME, \
+ x05, g10##NAME, x06, g12##NAME, \
+ x07, g14##NAME, x08, g16##NAME); \
+} \
+ \
+extern void \
+testit##NAME (void) \
+{ \
+ DEBUG_FPUTS (#NAME) \
+ DEBUG_FPUTS (" init: ") \
+ init##NAME (&g01##NAME, 1); \
+ init##NAME (&g02##NAME, 2); \
+ init##NAME (&g03##NAME, 3); \
+ init##NAME (&g04##NAME, 4); \
+ init##NAME (&g05##NAME, 5); \
+ init##NAME (&g06##NAME, 6); \
+ init##NAME (&g07##NAME, 7); \
+ init##NAME (&g08##NAME, 8); \
+ init##NAME (&g09##NAME, 9); \
+ init##NAME (&g10##NAME, 10); \
+ init##NAME (&g11##NAME, 11); \
+ init##NAME (&g12##NAME, 12); \
+ init##NAME (&g13##NAME, 13); \
+ init##NAME (&g14##NAME, 14); \
+ init##NAME (&g15##NAME, 15); \
+ init##NAME (&g16##NAME, 16); \
+ checkg##NAME (); \
+ DEBUG_NL \
+ DEBUG_FPUTS (#NAME) \
+ DEBUG_FPUTS (" test: ") \
+ test##NAME (g01##NAME, g02##NAME, g03##NAME, g04##NAME, \
+ g05##NAME, g06##NAME, g07##NAME, g08##NAME, \
+ g09##NAME, g10##NAME, g11##NAME, g12##NAME, \
+ g13##NAME, g14##NAME, g15##NAME, g16##NAME); \
+ DEBUG_NL \
+ DEBUG_FPUTS (#NAME) \
+ DEBUG_FPUTS (" testva: ") \
+ DEBUG_NL \
+ testva##NAME (1, \
+ g01##NAME); \
+ DEBUG_NL \
+ testva##NAME (2, \
+ g01##NAME, g02##NAME); \
+ DEBUG_NL \
+ testva##NAME (3, \
+ g01##NAME, g02##NAME, g03##NAME); \
+ DEBUG_NL \
+ testva##NAME (4, \
+ g01##NAME, g02##NAME, g03##NAME, g04##NAME); \
+ DEBUG_NL \
+ testva##NAME (5, \
+ g01##NAME, g02##NAME, g03##NAME, g04##NAME, \
+ g05##NAME); \
+ DEBUG_NL \
+ testva##NAME (6, \
+ g01##NAME, g02##NAME, g03##NAME, g04##NAME, \
+ g05##NAME, g06##NAME); \
+ DEBUG_NL \
+ testva##NAME (7, \
+ g01##NAME, g02##NAME, g03##NAME, g04##NAME, \
+ g05##NAME, g06##NAME, g07##NAME); \
+ DEBUG_NL \
+ testva##NAME (8, \
+ g01##NAME, g02##NAME, g03##NAME, g04##NAME, \
+ g05##NAME, g06##NAME, g07##NAME, g08##NAME); \
+ DEBUG_NL \
+ testva##NAME (9, \
+ g01##NAME, g02##NAME, g03##NAME, g04##NAME, \
+ g05##NAME, g06##NAME, g07##NAME, g08##NAME, \
+ g09##NAME); \
+ DEBUG_NL \
+ testva##NAME (10, \
+ g01##NAME, g02##NAME, g03##NAME, g04##NAME, \
+ g05##NAME, g06##NAME, g07##NAME, g08##NAME, \
+ g09##NAME, g10##NAME); \
+ DEBUG_NL \
+ testva##NAME (11, \
+ g01##NAME, g02##NAME, g03##NAME, g04##NAME, \
+ g05##NAME, g06##NAME, g07##NAME, g08##NAME, \
+ g09##NAME, g10##NAME, g11##NAME); \
+ DEBUG_NL \
+ testva##NAME (12, \
+ g01##NAME, g02##NAME, g03##NAME, g04##NAME, \
+ g05##NAME, g06##NAME, g07##NAME, g08##NAME, \
+ g09##NAME, g10##NAME, g11##NAME, g12##NAME); \
+ DEBUG_NL \
+ testva##NAME (13, \
+ g01##NAME, g02##NAME, g03##NAME, g04##NAME, \
+ g05##NAME, g06##NAME, g07##NAME, g08##NAME, \
+ g09##NAME, g10##NAME, g11##NAME, g12##NAME, \
+ g13##NAME); \
+ DEBUG_NL \
+ testva##NAME (14, \
+ g01##NAME, g02##NAME, g03##NAME, g04##NAME, \
+ g05##NAME, g06##NAME, g07##NAME, g08##NAME, \
+ g09##NAME, g10##NAME, g11##NAME, g12##NAME, \
+ g13##NAME, g14##NAME); \
+ DEBUG_NL \
+ testva##NAME (15, \
+ g01##NAME, g02##NAME, g03##NAME, g04##NAME, \
+ g05##NAME, g06##NAME, g07##NAME, g08##NAME, \
+ g09##NAME, g10##NAME, g11##NAME, g12##NAME, \
+ g13##NAME, g14##NAME, g15##NAME); \
+ DEBUG_NL \
+ testva##NAME (16, \
+ g01##NAME, g02##NAME, g03##NAME, g04##NAME, \
+ g05##NAME, g06##NAME, g07##NAME, g08##NAME, \
+ g09##NAME, g10##NAME, g11##NAME, g12##NAME, \
+ g13##NAME, g14##NAME, g15##NAME, g16##NAME); \
+ DEBUG_NL \
+ DEBUG_FPUTS (#NAME) \
+ DEBUG_FPUTS (" test2: ") \
+ test2_##NAME (g01##NAME, g03##NAME, g05##NAME, g07##NAME, \
+ g09##NAME, g11##NAME, g13##NAME, g15##NAME); \
+ DEBUG_NL \
+}
+
+T(d32, dec32, (dec32)1.5DF)
+T(d64, dec64, (dec64)2.5DD)
+T(d128, dec128, (dec128)3.5DL)
+
+#undef T
diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass_y.h b/gcc/testsuite/g++.dg/compat/decimal/pass_y.h
new file mode 100644
index 00000000000..f835b198352
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/pass_y.h
@@ -0,0 +1,89 @@
+#include <stdarg.h>
+
+#include "compat-common.h"
+
+#ifdef SKIP_VA
+const int test_va = 0;
+#else
+const int test_va = 1;
+#endif
+
+#define T(NAME, TYPE, INITVAL) \
+extern TYPE g01##NAME, g02##NAME, g03##NAME, g04##NAME; \
+extern TYPE g05##NAME, g06##NAME, g07##NAME, g08##NAME; \
+extern TYPE g09##NAME, g10##NAME, g11##NAME, g12##NAME; \
+extern TYPE g13##NAME, g14##NAME, g15##NAME, g16##NAME; \
+ \
+extern void check##NAME (TYPE x, TYPE v); \
+ \
+extern void \
+init##NAME (TYPE *p, TYPE v) \
+{ \
+ *p = v + INITVAL; \
+} \
+ \
+extern void \
+checkg##NAME (void) \
+{ \
+ check##NAME (g01##NAME, 1); \
+ check##NAME (g02##NAME, 2); \
+ check##NAME (g03##NAME, 3); \
+ check##NAME (g04##NAME, 4); \
+ check##NAME (g05##NAME, 5); \
+ check##NAME (g06##NAME, 6); \
+ check##NAME (g07##NAME, 7); \
+ check##NAME (g08##NAME, 8); \
+ check##NAME (g09##NAME, 9); \
+ check##NAME (g10##NAME, 10); \
+ check##NAME (g11##NAME, 11); \
+ check##NAME (g12##NAME, 12); \
+ check##NAME (g13##NAME, 13); \
+ check##NAME (g14##NAME, 14); \
+ check##NAME (g15##NAME, 15); \
+ check##NAME (g16##NAME, 16); \
+} \
+ \
+extern void \
+test##NAME (TYPE x01, TYPE x02, TYPE x03, TYPE x04, \
+ TYPE x05, TYPE x06, TYPE x07, TYPE x08, \
+ TYPE x09, TYPE x10, TYPE x11, TYPE x12, \
+ TYPE x13, TYPE x14, TYPE x15, TYPE x16) \
+{ \
+ check##NAME (x01, 1); \
+ check##NAME (x02, 2); \
+ check##NAME (x03, 3); \
+ check##NAME (x04, 4); \
+ check##NAME (x05, 5); \
+ check##NAME (x06, 6); \
+ check##NAME (x07, 7); \
+ check##NAME (x08, 8); \
+ check##NAME (x09, 9); \
+ check##NAME (x10, 10); \
+ check##NAME (x11, 11); \
+ check##NAME (x12, 12); \
+ check##NAME (x13, 13); \
+ check##NAME (x14, 14); \
+ check##NAME (x15, 15); \
+ check##NAME (x16, 16); \
+} \
+ \
+extern void \
+testva##NAME (int n, ...) \
+{ \
+ int i; \
+ va_list ap; \
+ if (test_va) \
+ { \
+ va_start (ap, n); \
+ for (i = 0; i < n; i++) \
+ { \
+ TYPE t = va_arg (ap, TYPE); \
+ check##NAME (t, i+1); \
+ } \
+ va_end (ap); \
+ } \
+}
+
+T(d32, dec32, (dec32)1.5DF)
+T(d64, dec64, (dec64)2.5DD)
+T(d128, dec128, (dec128)3.5DL)
diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-1_main.C b/gcc/testsuite/g++.dg/compat/decimal/return-1_main.C
new file mode 100644
index 00000000000..c663bb01cf3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/return-1_main.C
@@ -0,0 +1,13 @@
+/* { dg-require-effective-target dfp } */
+
+/* Test function return values for decimal float scalars. */
+
+extern void return_1_x (void);
+int fails;
+
+int
+main ()
+{
+ return_1_x ();
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-1_x.C b/gcc/testsuite/g++.dg/compat/decimal/return-1_x.C
new file mode 100644
index 00000000000..e391bd1f1f3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/return-1_x.C
@@ -0,0 +1,24 @@
+typedef float dec32 __attribute__((mode(SD)));
+typedef float dec64 __attribute__((mode(DD)));
+typedef float dec128 __attribute__((mode(TD)));
+
+#include "return_x.h"
+
+void
+return_1_x (void)
+{
+DEBUG_INIT
+
+#define T(NAME) testit##NAME ();
+
+T(d32)
+T(d64)
+T(d128)
+
+DEBUG_FINI
+
+if (fails != 0)
+ abort ();
+
+#undef T
+}
diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-1_y.C b/gcc/testsuite/g++.dg/compat/decimal/return-1_y.C
new file mode 100644
index 00000000000..0b4d4bf38c6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/return-1_y.C
@@ -0,0 +1,5 @@
+typedef float dec32 __attribute__((mode(SD)));
+typedef float dec64 __attribute__((mode(DD)));
+typedef float dec128 __attribute__((mode(TD)));
+
+#include "return_y.h"
diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-2_main.C b/gcc/testsuite/g++.dg/compat/decimal/return-2_main.C
new file mode 100644
index 00000000000..afa27f269df
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/return-2_main.C
@@ -0,0 +1,13 @@
+/* { dg-require-effective-target dfp } */
+
+/* Test function return values for decimal classes. */
+
+extern void return_2_x (void);
+int fails;
+
+int
+main ()
+{
+ return_2_x ();
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-2_x.C b/gcc/testsuite/g++.dg/compat/decimal/return-2_x.C
new file mode 100644
index 00000000000..d96c01479c2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/return-2_x.C
@@ -0,0 +1,26 @@
+#include "decimal-dummy.h"
+
+#define dec32 std::decimal::decimal32
+#define dec64 std::decimal::decimal64
+#define dec128 std::decimal::decimal128
+
+#include "return_x.h"
+
+void
+return_2_x (void)
+{
+DEBUG_INIT
+
+#define T(NAME) testit##NAME ();
+
+T(d32)
+T(d64)
+T(d128)
+
+DEBUG_FINI
+
+if (fails != 0)
+ abort ();
+
+#undef T
+}
diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-2_y.C b/gcc/testsuite/g++.dg/compat/decimal/return-2_y.C
new file mode 100644
index 00000000000..c68088b30cf
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/return-2_y.C
@@ -0,0 +1,7 @@
+#include "decimal-dummy.h"
+
+#define dec32 std::decimal::decimal32
+#define dec64 std::decimal::decimal64
+#define dec128 std::decimal::decimal128
+
+#include "return_y.h"
diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-3_main.C b/gcc/testsuite/g++.dg/compat/decimal/return-3_main.C
new file mode 100644
index 00000000000..468f3fc0c34
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/return-3_main.C
@@ -0,0 +1,13 @@
+/* { dg-require-effective-target dfp } */
+
+/* Test function return values for decimal float scalars and classes. */
+
+extern void return_3_x (void);
+int fails;
+
+int
+main ()
+{
+ return_3_x ();
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-3_x.C b/gcc/testsuite/g++.dg/compat/decimal/return-3_x.C
new file mode 100644
index 00000000000..52e599c7631
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/return-3_x.C
@@ -0,0 +1,24 @@
+typedef float dec32 __attribute__((mode(SD)));
+typedef float dec64 __attribute__((mode(DD)));
+typedef float dec128 __attribute__((mode(TD)));
+
+#include "return_x.h"
+
+void
+return_3_x (void)
+{
+DEBUG_INIT
+
+#define T(NAME) testit##NAME ();
+
+T(d32)
+T(d64)
+T(d128)
+
+DEBUG_FINI
+
+if (fails != 0)
+ abort ();
+
+#undef T
+}
diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-3_y.C b/gcc/testsuite/g++.dg/compat/decimal/return-3_y.C
new file mode 100644
index 00000000000..c68088b30cf
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/return-3_y.C
@@ -0,0 +1,7 @@
+#include "decimal-dummy.h"
+
+#define dec32 std::decimal::decimal32
+#define dec64 std::decimal::decimal64
+#define dec128 std::decimal::decimal128
+
+#include "return_y.h"
diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-4_main.C b/gcc/testsuite/g++.dg/compat/decimal/return-4_main.C
new file mode 100644
index 00000000000..365d8becd59
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/return-4_main.C
@@ -0,0 +1,13 @@
+/* { dg-require-effective-target dfp } */
+
+/* Test function return values for decimal float classes and scalars. */
+
+extern void return_4_x (void);
+int fails;
+
+int
+main ()
+{
+ return_4_x ();
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-4_x.C b/gcc/testsuite/g++.dg/compat/decimal/return-4_x.C
new file mode 100644
index 00000000000..b9d28fa5b9a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/return-4_x.C
@@ -0,0 +1,26 @@
+#include "decimal-dummy.h"
+
+#define dec32 std::decimal::decimal32
+#define dec64 std::decimal::decimal64
+#define dec128 std::decimal::decimal128
+
+#include "return_x.h"
+
+void
+return_4_x (void)
+{
+DEBUG_INIT
+
+#define T(NAME) testit##NAME ();
+
+T(d32)
+T(d64)
+T(d128)
+
+DEBUG_FINI
+
+if (fails != 0)
+ abort ();
+
+#undef T
+}
diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-4_y.C b/gcc/testsuite/g++.dg/compat/decimal/return-4_y.C
new file mode 100644
index 00000000000..0b4d4bf38c6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/return-4_y.C
@@ -0,0 +1,5 @@
+typedef float dec32 __attribute__((mode(SD)));
+typedef float dec64 __attribute__((mode(DD)));
+typedef float dec128 __attribute__((mode(TD)));
+
+#include "return_y.h"
diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-5_main.C b/gcc/testsuite/g++.dg/compat/decimal/return-5_main.C
new file mode 100644
index 00000000000..2c334832797
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/return-5_main.C
@@ -0,0 +1,14 @@
+/* { dg-require-effective-target dfp } */
+
+/* Test function return values for decimal float scalars and typedef'd
+ classes. */
+
+extern void return_5_x (void);
+int fails;
+
+int
+main ()
+{
+ return_5_x ();
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-5_x.C b/gcc/testsuite/g++.dg/compat/decimal/return-5_x.C
new file mode 100644
index 00000000000..a2bb6173b2f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/return-5_x.C
@@ -0,0 +1,24 @@
+typedef float dec32 __attribute__((mode(SD)));
+typedef float dec64 __attribute__((mode(DD)));
+typedef float dec128 __attribute__((mode(TD)));
+
+#include "return_x.h"
+
+void
+return_5_x (void)
+{
+DEBUG_INIT
+
+#define T(NAME) testit##NAME ();
+
+T(d32)
+T(d64)
+T(d128)
+
+DEBUG_FINI
+
+if (fails != 0)
+ abort ();
+
+#undef T
+}
diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-5_y.C b/gcc/testsuite/g++.dg/compat/decimal/return-5_y.C
new file mode 100644
index 00000000000..0f780167a4e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/return-5_y.C
@@ -0,0 +1,7 @@
+#include "decimal-dummy.h"
+
+typedef std::decimal::decimal32 dec32;
+typedef std::decimal::decimal64 dec64;
+typedef std::decimal::decimal128 dec128;
+
+#include "return_y.h"
diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-6_main.C b/gcc/testsuite/g++.dg/compat/decimal/return-6_main.C
new file mode 100644
index 00000000000..94526bdcb81
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/return-6_main.C
@@ -0,0 +1,14 @@
+/* { dg-require-effective-target dfp } */
+
+/* Test function return values for typedef'd decimal float classes
+ and scalars. */
+
+extern void return_6_x (void);
+int fails;
+
+int
+main ()
+{
+ return_6_x ();
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-6_x.C b/gcc/testsuite/g++.dg/compat/decimal/return-6_x.C
new file mode 100644
index 00000000000..e0a487dbe3b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/return-6_x.C
@@ -0,0 +1,26 @@
+#include "decimal-dummy.h"
+
+typedef std::decimal::decimal32 dec32;
+typedef std::decimal::decimal64 dec64;
+typedef std::decimal::decimal128 dec128;
+
+#include "return_x.h"
+
+void
+return_6_x (void)
+{
+DEBUG_INIT
+
+#define T(NAME) testit##NAME ();
+
+T(d32)
+T(d64)
+T(d128)
+
+DEBUG_FINI
+
+if (fails != 0)
+ abort ();
+
+#undef T
+}
diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-6_y.C b/gcc/testsuite/g++.dg/compat/decimal/return-6_y.C
new file mode 100644
index 00000000000..0b4d4bf38c6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/return-6_y.C
@@ -0,0 +1,5 @@
+typedef float dec32 __attribute__((mode(SD)));
+typedef float dec64 __attribute__((mode(DD)));
+typedef float dec128 __attribute__((mode(TD)));
+
+#include "return_y.h"
diff --git a/gcc/testsuite/g++.dg/compat/decimal/return_x.h b/gcc/testsuite/g++.dg/compat/decimal/return_x.h
new file mode 100644
index 00000000000..401adfb5c93
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/return_x.h
@@ -0,0 +1,90 @@
+#include "compat-common.h"
+
+#ifdef SKIP_VA
+const int test_va = 0;
+#else
+const int test_va = 1;
+#endif
+
+#define T(NAME, TYPE, INITVAL) \
+TYPE g01##NAME, g02##NAME, g03##NAME, g04##NAME; \
+TYPE g05##NAME, g06##NAME, g07##NAME, g08##NAME; \
+TYPE g09##NAME, g10##NAME, g11##NAME, g12##NAME; \
+TYPE g13##NAME, g14##NAME, g15##NAME, g16##NAME; \
+ \
+extern void init##NAME (TYPE *p, TYPE v); \
+extern void checkg##NAME (void); \
+extern TYPE test0##NAME (void); \
+extern TYPE test1##NAME (TYPE); \
+extern TYPE testva##NAME (int n, ...); \
+ \
+extern void \
+check##NAME (TYPE x, TYPE v) \
+{ \
+ if (x != v) \
+ DEBUG_CHECK \
+} \
+ \
+extern void \
+testit##NAME (void) \
+{ \
+ TYPE rslt; \
+ DEBUG_FPUTS (#NAME) \
+ DEBUG_FPUTS (" init: ") \
+ init##NAME (&g01##NAME, 1); \
+ init##NAME (&g02##NAME, 2); \
+ init##NAME (&g03##NAME, 3); \
+ init##NAME (&g04##NAME, 4); \
+ init##NAME (&g05##NAME, 5); \
+ init##NAME (&g06##NAME, 6); \
+ init##NAME (&g07##NAME, 7); \
+ init##NAME (&g08##NAME, 8); \
+ init##NAME (&g09##NAME, 9); \
+ init##NAME (&g10##NAME, 10); \
+ init##NAME (&g11##NAME, 11); \
+ init##NAME (&g12##NAME, 12); \
+ init##NAME (&g13##NAME, 13); \
+ init##NAME (&g14##NAME, 14); \
+ init##NAME (&g15##NAME, 15); \
+ init##NAME (&g16##NAME, 16); \
+ checkg##NAME (); \
+ DEBUG_NL \
+ DEBUG_FPUTS (#NAME) \
+ DEBUG_FPUTS (" test0: ") \
+ rslt = test0##NAME (); \
+ check##NAME (rslt, g01##NAME); \
+ DEBUG_NL \
+ DEBUG_FPUTS (#NAME) \
+ DEBUG_FPUTS (" test1: ") \
+ rslt = test1##NAME (g01##NAME); \
+ check##NAME (rslt, g01##NAME); \
+ if (test_va) \
+ { \
+ DEBUG_NL \
+ DEBUG_FPUTS (#NAME) \
+ DEBUG_FPUTS (" testva: ") \
+ rslt = testva##NAME (1, g01##NAME); \
+ check##NAME (rslt, g01##NAME); \
+ rslt = testva##NAME (5, g01##NAME, g02##NAME, g03##NAME, \
+ g04##NAME, g05##NAME); \
+ check##NAME (rslt, g05##NAME); \
+ rslt = testva##NAME (9, g01##NAME, g02##NAME, g03##NAME, \
+ g04##NAME, g05##NAME, g06##NAME, \
+ g07##NAME, g08##NAME, g09##NAME); \
+ check##NAME (rslt, g09##NAME); \
+ rslt = testva##NAME (16, g01##NAME, g02##NAME, g03##NAME, \
+ g04##NAME, g05##NAME, g06##NAME, \
+ g07##NAME, g08##NAME, g09##NAME, \
+ g10##NAME, g11##NAME, g12##NAME, \
+ g13##NAME, g14##NAME, g15##NAME, \
+ g16##NAME); \
+ check##NAME (rslt, g16##NAME); \
+ } \
+ DEBUG_NL \
+}
+
+T(d32, dec32, (dec32)1.5DF);
+T(d64, dec64, (dec64)2.5DD);
+T(d128, dec128, (dec128)3.5DL);
+
+#undef T
diff --git a/gcc/testsuite/g++.dg/compat/decimal/return_y.h b/gcc/testsuite/g++.dg/compat/decimal/return_y.h
new file mode 100644
index 00000000000..285526e2e36
--- /dev/null
+++ b/gcc/testsuite/g++.dg/compat/decimal/return_y.h
@@ -0,0 +1,67 @@
+#include <stdarg.h>
+
+#include "compat-common.h"
+
+#define T(NAME, TYPE, INITVAL) \
+extern TYPE g01##NAME, g02##NAME, g03##NAME, g04##NAME; \
+extern TYPE g05##NAME, g06##NAME, g07##NAME, g08##NAME; \
+extern TYPE g09##NAME, g10##NAME, g11##NAME, g12##NAME; \
+extern TYPE g13##NAME, g14##NAME, g15##NAME, g16##NAME; \
+ \
+extern void check##NAME (TYPE x, TYPE v); \
+ \
+extern void \
+init##NAME (TYPE *p, TYPE v) \
+{ \
+ *p = v + INITVAL; \
+} \
+ \
+extern void \
+checkg##NAME (void) \
+{ \
+ check##NAME (g01##NAME, 1+INITVAL); \
+ check##NAME (g02##NAME, 2+INITVAL); \
+ check##NAME (g03##NAME, 3+INITVAL); \
+ check##NAME (g04##NAME, 4+INITVAL); \
+ check##NAME (g05##NAME, 5+INITVAL); \
+ check##NAME (g06##NAME, 6+INITVAL); \
+ check##NAME (g07##NAME, 7+INITVAL); \
+ check##NAME (g08##NAME, 8+INITVAL); \
+ check##NAME (g09##NAME, 9+INITVAL); \
+ check##NAME (g10##NAME, 10+INITVAL); \
+ check##NAME (g11##NAME, 11+INITVAL); \
+ check##NAME (g12##NAME, 12+INITVAL); \
+ check##NAME (g13##NAME, 13+INITVAL); \
+ check##NAME (g14##NAME, 14+INITVAL); \
+ check##NAME (g15##NAME, 15+INITVAL); \
+ check##NAME (g16##NAME, 16+INITVAL); \
+} \
+ \
+extern TYPE \
+test0##NAME (void) \
+{ \
+ return g01##NAME; \
+} \
+ \
+extern TYPE \
+test1##NAME (TYPE x01) \
+{ \
+ return x01; \
+} \
+ \
+extern TYPE \
+testva##NAME (int n, ...) \
+{ \
+ int i; \
+ TYPE rslt; \
+ va_list ap; \
+ va_start (ap, n); \
+ for (i = 0; i < n; i++) \
+ rslt = va_arg (ap, TYPE); \
+ va_end (ap); \
+ return rslt; \
+}
+
+T(d32, dec32, (dec32)1.5)
+T(d64, dec64, (dec64)2.5)
+T(d128, dec128, (dec128)3.5)
diff --git a/gcc/testsuite/g++.dg/conversion/op6.C b/gcc/testsuite/g++.dg/conversion/op6.C
new file mode 100644
index 00000000000..9aec9f0a808
--- /dev/null
+++ b/gcc/testsuite/g++.dg/conversion/op6.C
@@ -0,0 +1,18 @@
+// Origin: PR c++/42766
+// { dg-do compile }
+
+template<class T> class smart_pointer {
+public:
+ operator T* () const { }
+ operator bool () const { }
+ operator bool () { }
+};
+class Context { };
+typedef smart_pointer<Context> ContextP;
+class SvnClient {
+ ~SvnClient();
+ ContextP svnContext;
+};
+SvnClient::~SvnClient() {
+ delete svnContext;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype22.C b/gcc/testsuite/g++.dg/cpp0x/decltype22.C
new file mode 100644
index 00000000000..74811cfe701
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/decltype22.C
@@ -0,0 +1,13 @@
+// PR c++/42761
+// { dg-options "-std=c++0x" }
+
+template<typename _Tp> _Tp* fn();
+
+template <class T> struct A
+{
+ template <class U,
+ class S = decltype(fn<T>())>
+ struct B { };
+};
+
+A<int> a;
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-warn1.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-warn1.C
new file mode 100644
index 00000000000..b384d5cff6d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-warn1.C
@@ -0,0 +1,8 @@
+// PR c++/41920
+// { dg-options "-std=c++0x -Wall -Wextra" }
+
+int foo(int i)
+{
+ auto bar = [=](){ return i; };
+ return bar();
+}
diff --git a/gcc/testsuite/g++.dg/other/cv_func.C b/gcc/testsuite/g++.dg/other/cv_func.C
index 4f103824d93..788c173b423 100644
--- a/gcc/testsuite/g++.dg/other/cv_func.C
+++ b/gcc/testsuite/g++.dg/other/cv_func.C
@@ -4,7 +4,6 @@ typedef int FIC(int) const;
typedef int FI(int);
FIC f; // { dg-error "qualified" }
-// { dg-error "ignoring" "ignoring" { target *-*-* } 6 }
struct S {
FIC f; // OK
@@ -15,7 +14,7 @@ struct S {
};
FIC S::*pm = &S::f;
const FI S::*pm2 = &S::f; // { dg-error "qualifier" }
-// { dg-error "cannot convert" "cannot convert" { target *-*-* } 17 }
+// { dg-error "cannot convert" "cannot convert" { target *-*-* } 16 }
const FIC S::*pm3 = &S::f; // { dg-error "qualifier" }
int S::f(int) const
diff --git a/gcc/testsuite/g++.dg/parse/crash55.C b/gcc/testsuite/g++.dg/parse/crash55.C
new file mode 100644
index 00000000000..7676d49bcd9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/crash55.C
@@ -0,0 +1,8 @@
+// PR c++/42038
+
+extern int __cxa_begin_catch;
+
+void f(void)
+{
+ try { } catch (int) { } // { dg-error "cannot be used" }
+}
diff --git a/gcc/testsuite/g++.dg/parse/fn-typedef1.C b/gcc/testsuite/g++.dg/parse/fn-typedef1.C
new file mode 100644
index 00000000000..ebdc012f59c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/fn-typedef1.C
@@ -0,0 +1,19 @@
+// PR c++/40750
+// { dg-do run }
+
+extern "C" void abort ();
+
+typedef void Fn() const;
+
+struct Foo {
+ Fn fn;
+};
+
+bool called = false;
+void Foo::fn() const { called = true; }
+
+int main() {
+ Foo f; f.fn();
+ if (!called)
+ abort();
+}
diff --git a/gcc/testsuite/g++.dg/parse/limits-initializer1.C b/gcc/testsuite/g++.dg/parse/limits-initializer1.C
new file mode 100644
index 00000000000..4b507912f36
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/limits-initializer1.C
@@ -0,0 +1,37 @@
+// PR middle-end/42803
+// { dg-do compile }
+// { dg-options "-O0" }
+
+#define X2 (a + a)
+#define X4 (X2 + X2)
+#define X8 (X4 + X4)
+#define X16 (X8 + X8)
+#define X32 (X16 + X16)
+#define X64 (X32 + X32)
+#define X128 (X64 + X64)
+#define X256 (X128 + X128)
+#define X512 (X256 + X256)
+#define X1024 (X512 + X512)
+#define X2048 (X1024 + X1024)
+#define X4096 (X2048 + X2048)
+#define X8192 (X4096 + X4096)
+#define X16384 (X8192 + X8192)
+#define X32768 (X16384 + X16384)
+#define X65536 (X32768 + X32768)
+#define X131072 (X65536 + X65536)
+#define X262144 (X131072 + X131072)
+
+int
+foo (int a)
+{
+ int v = X262144;
+ return v;
+}
+
+// Emit an error to just make sure we don't waste too much time
+// in the middle-end compiling this.
+int
+bar (void)
+{
+ return x; // { dg-error "was not declared in this scope" }
+}
diff --git a/gcc/testsuite/g++.dg/torture/pr42773.C b/gcc/testsuite/g++.dg/torture/pr42773.C
new file mode 100644
index 00000000000..478ad278aa6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr42773.C
@@ -0,0 +1,54 @@
+// { dg-do compile }
+// { dg-options "-fno-exceptions" }
+
+typedef unsigned int uint;
+struct QShared {
+ bool deref() {
+ return !--count;
+ }
+ uint count;
+};
+template <class T> class QValueListNode {
+public:
+ QValueListNode<T>* next;
+ QValueListNode<T>* prev;
+};
+template <class T> class QValueListPrivate : public QShared {
+public:
+ typedef QValueListNode<T> Node;
+ typedef QValueListNode<T>* NodePtr;
+ QValueListPrivate();
+ void derefAndDelete() {
+ if ( deref() ) delete this;
+ }
+ ~QValueListPrivate();
+ NodePtr node;
+};
+template <class T> QValueListPrivate<T>::QValueListPrivate() {
+ node = new Node;
+ node->next = node->prev = node;
+}
+template <class T> QValueListPrivate<T>::~QValueListPrivate() {
+ NodePtr p = node->next;
+ while( p != node ) {
+ NodePtr x = p->next;
+ delete p;
+ p = x;
+ }
+}
+template <class T> class QValueList {
+public:
+ QValueList() {
+ sh = new QValueListPrivate<T>;
+ }
+ ~QValueList() {
+ sh->derefAndDelete();
+ }
+ QValueListPrivate<T>* sh;
+};
+class Cell {
+ QValueList<Cell*> obscuringCells() const;
+};
+QValueList<Cell*> Cell::obscuringCells() const {
+ QValueList<Cell*> empty;
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr42717.c b/gcc/testsuite/gcc.c-torture/compile/pr42717.c
new file mode 100644
index 00000000000..4fe6f93e797
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr42717.c
@@ -0,0 +1,30 @@
+static signed char
+foo (signed char si1, unsigned char si2)
+{
+ return (si1 ^ si2) & (-si2 ^ si2) ? : si1 - si2;
+}
+
+struct S0
+{
+};
+
+unsigned char g_21;
+
+struct S0 g_34;
+
+void
+bar (unsigned char p_20)
+{
+ unsigned char *l_22 = &g_21;
+ unsigned char l_23 = 0;
+ struct S0 *l = &g_34;
+ goto lbl_42;
+ for (; l_23; l_23 = foo (l_23, 1))
+ {
+ for (p_20 = 0; 0; p_20 = foo (p_20, 1))
+ lbl_42:;
+ (l == &g_34) ? 0 : "";
+lbl_85:*l_22 = p_20;
+ }
+ goto lbl_85;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr42248.c b/gcc/testsuite/gcc.c-torture/execute/pr42248.c
new file mode 100644
index 00000000000..bbb91b343b1
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr42248.c
@@ -0,0 +1,27 @@
+typedef struct {
+ _Complex double a;
+ _Complex double b;
+} Scf10;
+
+Scf10 g1s;
+
+void
+check (Scf10 x, _Complex double y)
+{
+ if (x.a != y) __builtin_abort ();
+}
+
+void
+init (Scf10 *p, _Complex double y)
+{
+ p->a = y;
+}
+
+int
+main ()
+{
+ init (&g1s, (_Complex double)1);
+ check (g1s, (_Complex double)1);
+
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/20020312-2.c b/gcc/testsuite/gcc.dg/20020312-2.c
index 057c19e1a99..bf8225a1a6b 100644
--- a/gcc/testsuite/gcc.dg/20020312-2.c
+++ b/gcc/testsuite/gcc.dg/20020312-2.c
@@ -46,6 +46,8 @@ extern void abort (void);
/* No pic register. */
#elif defined(__mn10300__)
/* No pic register. */
+#elif defined(__moxie__)
+/* No pic register. */
#elif defined(__hppa__)
/* PIC register is %r27 or %r19, but is used even without -fpic. */
#elif defined(__pdp11__)
diff --git a/gcc/testsuite/gcc.dg/cleanup-13.c b/gcc/testsuite/gcc.dg/cleanup-13.c
index 0a5a9e9153e..5a0d4c69f5a 100644
--- a/gcc/testsuite/gcc.dg/cleanup-13.c
+++ b/gcc/testsuite/gcc.dg/cleanup-13.c
@@ -210,9 +210,22 @@ OP_const1s(-123) OP_abs OP_const1u(123) OP_eq ASSERT_TOS_NON0 \
OP_lit3 OP_lit6 OP_and OP_lit2 OP_eq ASSERT_TOS_NON0 \
OP_lit3 OP_lit6 OP_or OP_lit7 OP_eq ASSERT_TOS_NON0 \
OP_lit17 OP_lit2 OP_minus OP_lit15 OP_eq ASSERT_TOS_NON0 \
+/* Divide is signed truncating toward zero. */ \
OP_const1s(-6) OP_const1s(-2) OP_div OP_lit3 OP_eq ASSERT_TOS_NON0 \
-OP_const1s(-6) OP_const1s(-4) OP_mod OP_const1s(-2) \
+OP_const1s(-7) OP_const1s(3) OP_div OP_const1s(-2) \
OP_eq ASSERT_TOS_NON0 \
+/* Modulo is unsigned. */ \
+OP_const1s(-6) OP_const1s(-4) OP_mod OP_const1s(-6) \
+ OP_eq ASSERT_TOS_NON0 \
+OP_const1s(-6) OP_lit4 OP_mod OP_lit2 OP_eq ASSERT_TOS_NON0 \
+OP_lit6 OP_const1s(-4) OP_mod OP_lit6 OP_eq ASSERT_TOS_NON0 \
+/* Signed modulo can be implemented using "over over div mul minus". */\
+OP_const1s(-6) OP_const1s(-4) OP_over OP_over OP_div OP_mul OP_minus \
+ OP_const1s(-2) OP_eq ASSERT_TOS_NON0 \
+OP_const1s(-7) OP_lit3 OP_over OP_over OP_div OP_mul OP_minus \
+ OP_const1s(-1) OP_eq ASSERT_TOS_NON0 \
+OP_lit7 OP_const1s(-3) OP_over OP_over OP_div OP_mul OP_minus \
+ OP_lit1 OP_eq ASSERT_TOS_NON0 \
OP_lit16 OP_lit31 OP_plus_uconst(1) OP_mul OP_const2u(512) \
OP_eq ASSERT_TOS_NON0 \
OP_lit5 OP_not OP_lit31 OP_and OP_lit26 OP_eq ASSERT_TOS_NON0 \
diff --git a/gcc/testsuite/gcc.dg/cpp/_Pragma6.c b/gcc/testsuite/gcc.dg/cpp/_Pragma6.c
index 986b40cb156..a5324f2f9be 100644
--- a/gcc/testsuite/gcc.dg/cpp/_Pragma6.c
+++ b/gcc/testsuite/gcc.dg/cpp/_Pragma6.c
@@ -2,7 +2,7 @@
/* This is supposed to succeed only if
the target defines HANDLE_PRAGMA_PACK_PUSH_POP
and doesn't define HANDLE_PRAGMA_PACK_WITH_EXPANSION. */
-/* { dg-do compile { target { ! { powerpc-ibm-aix* *-*-solaris2* fido-*-* m68k-*-* sh*-[us]*-elf m32c-*-* *-*-vxworks } } } } */
+/* { dg-do compile { target { ! { powerpc-ibm-aix* *-*-solaris2* fido-*-* m68k-*-* sh*-[us]*-elf m32c-*-* *-*-vxworks moxie-*-* } } } } */
#define push bar
#define foo _Pragma ("pack(push)")
diff --git a/gcc/testsuite/gcc.dg/debug/pr42767.c b/gcc/testsuite/gcc.dg/debug/pr42767.c
new file mode 100644
index 00000000000..1f0e25fe58e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/debug/pr42767.c
@@ -0,0 +1,18 @@
+/* PR debug/42767 */
+/* { dg-do compile } */
+/* { dg-options "-O1 -g" } */
+
+struct lineno_cache_entry
+{
+ unsigned long size;
+};
+_bfd_link_section_stabs (struct lineno_cache_entry * stabsec)
+{
+ unsigned long count;
+ unsigned char *sym;
+ unsigned char *symend;
+ unsigned long skip;
+ count = stabsec->size / 12;
+ for (; sym < symend; sym += 1);
+ stabsec->size = (count - skip) * 12;
+}
diff --git a/gcc/testsuite/gcc.dg/guality/pr42782.c b/gcc/testsuite/gcc.dg/guality/pr42782.c
new file mode 100644
index 00000000000..6a880814aaf
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/guality/pr42782.c
@@ -0,0 +1,24 @@
+/* { dg-options "-g" } */
+
+#include "guality.h"
+
+void __attribute__ ((__noinline__))
+g (void)
+{
+ asm volatile ("");
+}
+
+int
+f (int a)
+{
+ g ();
+ GUALCHKVAL (a);
+ return a;
+}
+
+int
+main (int argc, char *argv[])
+{
+ f (argc + 2);
+ f (argc + 5);
+}
diff --git a/gcc/testsuite/gcc.dg/pr19340.c b/gcc/testsuite/gcc.dg/pr19340.c
index 844d80677d0..58a919b4586 100644
--- a/gcc/testsuite/gcc.dg/pr19340.c
+++ b/gcc/testsuite/gcc.dg/pr19340.c
@@ -1,6 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fschedule-insns2 -fsched2-use-traces" } */
-/* { dg-skip-if "No scheduling" { mmix-*-* cris-*-* crisv32-*-* fido-*-* m68k-*-* m32c-*-* avr-*-* } { "*" } { "" } } */
+/* { dg-skip-if "No scheduling" { mmix-*-* cris-*-* crisv32-*-* fido-*-* m68k-*-* m32c-*-* avr-*-* moxie-*-* } { "*" } { "" } } */
extern double f (double x);
diff --git a/gcc/testsuite/gcc.dg/pr19988.c b/gcc/testsuite/gcc.dg/pr19988.c
new file mode 100644
index 00000000000..aa2fed13961
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr19988.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-options "-O -fdump-tree-optimized -fdump-tree-original" } */
+
+double foo(double x, double y)
+{
+ return ((x + 0.1234 * y) * (x - 0.1234 * y));
+}
+
+/* Keep positive constants during folding. */
+/* { dg-final { scan-tree-dump-times " 1.23" 2 "original" } } */
+/* CSE one multiplication. */
+/* { dg-final { scan-tree-dump-times " \\\* " 2 "optimized" } } */
+/* { dg-final { cleanup-tree-dump "original" } } */
+/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/pr42715.c b/gcc/testsuite/gcc.dg/pr42715.c
new file mode 100644
index 00000000000..72bdfc86244
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr42715.c
@@ -0,0 +1,59 @@
+/* { dg-do compile { target fpic } } */
+/* { dg-options "-fPIC -g -O2 -w" } */
+/* var-tracking failed to clobber the reg holding v at the asm insn,
+ so v ended up bound to an intermediate PIC expression. */
+
+struct A { unsigned a1; char a2[15]; };
+struct B { long b1; unsigned char b2; long b3; };
+struct C { void *c1; unsigned c2; unsigned c3; };
+
+static struct A v1;
+struct A *const v2 = &v1;
+
+static inline
+int foo (void)
+{
+ int *v;
+ __asm__ __volatile__ ("" : "=r" (v));
+ return v[1];
+}
+
+static void
+bar (struct C *x)
+{
+ if (x->c2 == x->c3 && x->c1)
+ f1 (foo (), x->c1, x->c3 * sizeof (x->c1[0]));
+}
+
+void
+baz (struct B *y)
+{
+ int i;
+ const char *j;
+ char *k;
+ char x[64];
+ for (i = 0; i < sizeof (struct B); i++, y)
+ {
+ switch (y->b2)
+ {
+ case 0x20:
+ if (__builtin_strchr (j, '='))
+ continue;
+ }
+ switch (y->b2)
+ {
+ case 0x80:
+ bar (&x);
+ f2 (y->b3);
+ case 0x2e:
+ case 0x4e:
+ break;
+ default:
+ if (v2->a1)
+ f2 (y->b2);
+ }
+ k[0] = '\0';
+ if (v2->a1)
+ f2 (y->b1);
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/pr42719.c b/gcc/testsuite/gcc.dg/pr42719.c
new file mode 100644
index 00000000000..94a58e41a1a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr42719.c
@@ -0,0 +1,14 @@
+/* PR tree-optimization/42719 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftracer -fcompare-debug" } */
+
+int *v;
+
+void
+foo (int a)
+{
+ int i, j;
+ for (j = i = a; i != -1; j = i, i = v[i])
+ ;
+ v[j] = v[a];
+}
diff --git a/gcc/testsuite/gcc.dg/pr42728.c b/gcc/testsuite/gcc.dg/pr42728.c
new file mode 100644
index 00000000000..7b2fbb690fb
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr42728.c
@@ -0,0 +1,11 @@
+/* PR debug/42728 */
+/* { dg-do compile } */
+/* { dg-options "-O1 -fcompare-debug" } */
+
+void
+foo (char *a)
+{
+ char *b;
+ for (; *a; a++)
+ a = b++;
+}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/20040204-1.c b/gcc/testsuite/gcc.dg/tree-ssa/20040204-1.c
index d7aea1b8430..e7566642cc0 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/20040204-1.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/20040204-1.c
@@ -33,5 +33,5 @@ void test55 (int x, int y)
that the && should be emitted (based on BRANCH_COST). Fix this
by teaching dom to look through && and register all components
as true. */
-/* { dg-final { scan-tree-dump-times "link_error" 0 "optimized" { xfail { ! "powerpc*-*-* cris-*-* crisv32-*-* mmix-*-* mips*-*-* m68k*-*-*" } } } } */
+/* { dg-final { scan-tree-dump-times "link_error" 0 "optimized" { xfail { ! "powerpc*-*-* cris-*-* crisv32-*-* mmix-*-* mips*-*-* m68k*-*-* moxie-*-*" } } } } */
/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/asm-3.c b/gcc/testsuite/gcc.dg/tree-ssa/asm-3.c
index e35d179c547..5ed282e49a1 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/asm-3.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/asm-3.c
@@ -5,8 +5,12 @@
#ifdef __hppa__
#define REGISTER "1"
#else
+#ifdef __moxie__
+#define REGISTER "8"
+#else
#define REGISTER "0"
#endif
+#endif
static inline int source(void)
{
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr42585.c b/gcc/testsuite/gcc.dg/tree-ssa/pr42585.c
new file mode 100644
index 00000000000..8a4edfce068
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr42585.c
@@ -0,0 +1,37 @@
+/* { dg-do compile } */
+/* { dg-options "-O1 -fdump-tree-optimized" } */
+
+struct _fat_ptr
+{
+ unsigned char *curr;
+ unsigned char *base;
+ unsigned char *last_plus_one;
+};
+int Cyc_string_ungetc (int ignore, struct _fat_ptr *sptr);
+int
+Cyc_string_ungetc (int ignore, struct _fat_ptr *sptr)
+{
+ struct _fat_ptr *_T0;
+ struct _fat_ptr *_T1;
+ struct _fat_ptr _T2;
+ int _T3;
+ struct _fat_ptr _ans;
+ int _change;
+
+ {
+ _T0 = sptr;
+ _T1 = sptr;
+ _T2 = *sptr;
+ _T3 = -1;
+ _ans = _T2;
+ _change = -1;
+ _ans.curr += 4294967295U;
+ *sptr = _ans;
+ return (0);
+ }
+}
+
+/* The local aggregates . */
+/* { dg-final { scan-tree-dump-times "struct _fat_ptr _ans" 0 "optimized"} } */
+/* { dg-final { scan-tree-dump-times "struct _fat_ptr _T2" 0 "optimized"} } */
+/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/weak/typeof-2.c b/gcc/testsuite/gcc.dg/weak/typeof-2.c
index 5d97dc5c240..63f427fc8c9 100644
--- a/gcc/testsuite/gcc.dg/weak/typeof-2.c
+++ b/gcc/testsuite/gcc.dg/weak/typeof-2.c
@@ -43,4 +43,6 @@ int bar3 (int x)
// Likewise for m68k targets.
// { dg-final { if [string match fido-*-* $target_triplet ] {return} } }
// { dg-final { if [string match m68k-*-* $target_triplet ] {return} } }
+// Likewise for moxie targets.
+// { dg-final { if [string match moxie-*-* $target_triplet ] {return} } }
// { dg-final { scan-assembler "baz3.*baz3.*baz3.*baz3.*baz3.*baz3" } }
diff --git a/gcc/testsuite/gcc.target/alpha/pr42774.c b/gcc/testsuite/gcc.target/alpha/pr42774.c
new file mode 100644
index 00000000000..65688002b3a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/alpha/pr42774.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mcpu=ev4" } */
+
+unsigned int ntfs_getinfo(void *p)
+{
+ char bootsect[8];
+
+ __builtin_memcpy(bootsect, p, sizeof bootsect);
+ return *(unsigned short *)(bootsect + 3);
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon/vget_lowf32.c b/gcc/testsuite/gcc.target/arm/neon/vget_lowf32.c
index ae63430f737..a14a57636d0 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vget_lowf32.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vget_lowf32.c
@@ -9,7 +9,7 @@
void test_vget_lowf32 (void)
{
- float32x2_t out_float32x2_t;
+ register float32x2_t out_float32x2_t asm ("d18");
float32x4_t arg0_float32x4_t;
out_float32x2_t = vget_low_f32 (arg0_float32x4_t);
diff --git a/gcc/testsuite/gcc.target/arm/neon/vget_lowp16.c b/gcc/testsuite/gcc.target/arm/neon/vget_lowp16.c
index c24ac0cf12a..5c130f0b44d 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vget_lowp16.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vget_lowp16.c
@@ -9,7 +9,7 @@
void test_vget_lowp16 (void)
{
- poly16x4_t out_poly16x4_t;
+ register poly16x4_t out_poly16x4_t asm ("d18");
poly16x8_t arg0_poly16x8_t;
out_poly16x4_t = vget_low_p16 (arg0_poly16x8_t);
diff --git a/gcc/testsuite/gcc.target/arm/neon/vget_lowp8.c b/gcc/testsuite/gcc.target/arm/neon/vget_lowp8.c
index 45d65bcafc1..4b4f599fc4e 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vget_lowp8.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vget_lowp8.c
@@ -9,7 +9,7 @@
void test_vget_lowp8 (void)
{
- poly8x8_t out_poly8x8_t;
+ register poly8x8_t out_poly8x8_t asm ("d18");
poly8x16_t arg0_poly8x16_t;
out_poly8x8_t = vget_low_p8 (arg0_poly8x16_t);
diff --git a/gcc/testsuite/gcc.target/arm/neon/vget_lows16.c b/gcc/testsuite/gcc.target/arm/neon/vget_lows16.c
index 8e6c29aa7fa..ee6e9904b67 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vget_lows16.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vget_lows16.c
@@ -9,7 +9,7 @@
void test_vget_lows16 (void)
{
- int16x4_t out_int16x4_t;
+ register int16x4_t out_int16x4_t asm ("d18");
int16x8_t arg0_int16x8_t;
out_int16x4_t = vget_low_s16 (arg0_int16x8_t);
diff --git a/gcc/testsuite/gcc.target/arm/neon/vget_lows32.c b/gcc/testsuite/gcc.target/arm/neon/vget_lows32.c
index e018afd7fab..08315286d9b 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vget_lows32.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vget_lows32.c
@@ -9,7 +9,7 @@
void test_vget_lows32 (void)
{
- int32x2_t out_int32x2_t;
+ register int32x2_t out_int32x2_t asm ("d18");
int32x4_t arg0_int32x4_t;
out_int32x2_t = vget_low_s32 (arg0_int32x4_t);
diff --git a/gcc/testsuite/gcc.target/arm/neon/vget_lows64.c b/gcc/testsuite/gcc.target/arm/neon/vget_lows64.c
index e2e2bd66fb9..9c1440ceb5b 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vget_lows64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vget_lows64.c
@@ -15,5 +15,4 @@ void test_vget_lows64 (void)
out_int64x1_t = vget_low_s64 (arg0_int64x2_t);
}
-/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon/vget_lows8.c b/gcc/testsuite/gcc.target/arm/neon/vget_lows8.c
index 0be24de35e2..7d324f33713 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vget_lows8.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vget_lows8.c
@@ -9,7 +9,7 @@
void test_vget_lows8 (void)
{
- int8x8_t out_int8x8_t;
+ register int8x8_t out_int8x8_t asm ("d18");
int8x16_t arg0_int8x16_t;
out_int8x8_t = vget_low_s8 (arg0_int8x16_t);
diff --git a/gcc/testsuite/gcc.target/arm/neon/vget_lowu16.c b/gcc/testsuite/gcc.target/arm/neon/vget_lowu16.c
index 67bcd5090e7..b0c4384531f 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vget_lowu16.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vget_lowu16.c
@@ -9,7 +9,7 @@
void test_vget_lowu16 (void)
{
- uint16x4_t out_uint16x4_t;
+ register uint16x4_t out_uint16x4_t asm ("d18");
uint16x8_t arg0_uint16x8_t;
out_uint16x4_t = vget_low_u16 (arg0_uint16x8_t);
diff --git a/gcc/testsuite/gcc.target/arm/neon/vget_lowu32.c b/gcc/testsuite/gcc.target/arm/neon/vget_lowu32.c
index d21d97acd01..fdd8e79e974 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vget_lowu32.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vget_lowu32.c
@@ -9,7 +9,7 @@
void test_vget_lowu32 (void)
{
- uint32x2_t out_uint32x2_t;
+ register uint32x2_t out_uint32x2_t asm ("d18");
uint32x4_t arg0_uint32x4_t;
out_uint32x2_t = vget_low_u32 (arg0_uint32x4_t);
diff --git a/gcc/testsuite/gcc.target/arm/neon/vget_lowu64.c b/gcc/testsuite/gcc.target/arm/neon/vget_lowu64.c
index 79cf1c53d20..e6f7627cbd4 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vget_lowu64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vget_lowu64.c
@@ -15,5 +15,4 @@ void test_vget_lowu64 (void)
out_uint64x1_t = vget_low_u64 (arg0_uint64x2_t);
}
-/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon/vget_lowu8.c b/gcc/testsuite/gcc.target/arm/neon/vget_lowu8.c
index 03996493c78..d4e3c714d93 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vget_lowu8.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vget_lowu8.c
@@ -9,7 +9,7 @@
void test_vget_lowu8 (void)
{
- uint8x8_t out_uint8x8_t;
+ register uint8x8_t out_uint8x8_t asm ("d18");
uint8x16_t arg0_uint8x16_t;
out_uint8x8_t = vget_low_u8 (arg0_uint8x16_t);
diff --git a/gcc/testsuite/gfortran.dg/bounds_check_15.f90 b/gcc/testsuite/gfortran.dg/bounds_check_15.f90
new file mode 100644
index 00000000000..947ffb2f4b4
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/bounds_check_15.f90
@@ -0,0 +1,33 @@
+! { dg-do run }
+! { dg-options "-fbounds-check" }
+! Test the fix for PR42783, in which a bogus array bounds violation
+! with missing optional array argument.
+!
+! Contributed by Harald Anlauf <anlauf@gmx.de>
+!
+program gfcbug99
+ implicit none
+ character(len=8), parameter :: mnem_list(2) = "A"
+
+ call foo (mnem_list) ! This call succeeds
+ call foo () ! This call fails
+contains
+ subroutine foo (mnem_list)
+ character(len=8) ,intent(in) ,optional :: mnem_list(:)
+
+ integer :: i,j
+ character(len=256) :: ml
+ ml = ''
+ j = 0
+ if (present (mnem_list)) then
+ do i = 1, size (mnem_list)
+ if (mnem_list(i) /= "") then
+ j = j + 1
+ if (j > len (ml)/8) call abort ()
+ ml((j-1)*8+1:(j-1)*8+8) = mnem_list(i)
+ end if
+ end do
+ end if
+ if (j > 0) print *, trim (ml(1:8))
+ end subroutine foo
+end program gfcbug99
diff --git a/gcc/testsuite/gfortran.dg/dependency_25.f90 b/gcc/testsuite/gfortran.dg/dependency_25.f90
new file mode 100644
index 00000000000..25769857d76
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/dependency_25.f90
@@ -0,0 +1,95 @@
+! { dg-do run }
+! Test the fix for PR42736, in which an excessively rigorous dependency
+! checking for the assignment generated an unnecessary temporary, whose
+! rank was wrong. When accessed by the scalarizer, a segfault ensued.
+!
+! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
+! Reported by Armelius Cameron <armeliusc@gmail.com>
+!
+module UnitValue_Module
+
+ implicit none
+ private
+
+ public :: &
+ operator(*), &
+ assignment(=)
+
+ type, public :: UnitValue
+ real :: &
+ Value = 1.0
+ character(31) :: &
+ Label
+ end type UnitValue
+
+ interface operator(*)
+ module procedure ProductReal_LV
+ end interface operator(*)
+
+ interface assignment(=)
+ module procedure Assign_LV_Real
+ end interface assignment(=)
+
+contains
+
+ elemental function ProductReal_LV(Multiplier, Multiplicand) result(P_R_LV)
+
+ real, intent(in) :: &
+ Multiplier
+ type(UnitValue), intent(in) :: &
+ Multiplicand
+ type(UnitValue) :: &
+ P_R_LV
+
+ P_R_LV%Value = Multiplier * Multiplicand%Value
+ P_R_LV%Label = Multiplicand%Label
+
+ end function ProductReal_LV
+
+
+ elemental subroutine Assign_LV_Real(LeftHandSide, RightHandSide)
+
+ real, intent(inout) :: &
+ LeftHandSide
+ type(UnitValue), intent(in) :: &
+ RightHandSide
+
+ LeftHandSide = RightHandSide%Value
+
+ end subroutine Assign_LV_Real
+
+end module UnitValue_Module
+
+program TestProgram
+
+ use UnitValue_Module
+
+ implicit none
+
+ type :: TableForm
+ real, dimension(:,:), allocatable :: &
+ RealData
+ end type TableForm
+
+ type(UnitValue) :: &
+ CENTIMETER
+
+ type(TableForm), pointer :: &
+ Table
+
+ allocate(Table)
+ allocate(Table%RealData(10,5))
+
+ CENTIMETER%value = 42
+ Table%RealData = 1
+ Table%RealData(:,1) = Table%RealData(:,1) * CENTIMETER
+ Table%RealData(:,2) = Table%RealData(:,2) * CENTIMETER
+ Table%RealData(:,3) = Table%RealData(:,3) * CENTIMETER
+ Table%RealData(:,5) = Table%RealData(:,5) * CENTIMETER
+
+! print *, Table%RealData
+ if (any (abs(Table%RealData(:,4) - 1) > epsilon(1.0))) call abort ()
+ if (any (abs(Table%RealData(:,[1,2,3,5]) - 42) > epsilon(1.0))) call abort ()
+end program TestProgram
+
+! { dg-final { cleanup-modules "UnitValue_Module" } }
diff --git a/gcc/testsuite/gfortran.dg/extends_10.f03 b/gcc/testsuite/gfortran.dg/extends_10.f03
new file mode 100644
index 00000000000..fbcaa7efc3f
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/extends_10.f03
@@ -0,0 +1,34 @@
+! { dg-do compile }
+!
+! PR 42545: type extension: parent component has wrong accessibility
+!
+! Reported by Reinhold Bader <bader@lrz.de>
+
+module mo
+ implicit none
+ type :: t1
+ integer :: i = 1
+ end type
+ type, extends(t1) :: t2
+ private
+ real :: x = 2.0
+ end type
+ type :: u1
+ integer :: j = 1
+ end type
+ type, extends(u1) :: u2
+ real :: y = 2.0
+ end type
+ private :: u1
+end module
+
+program pr
+ use mo
+ implicit none
+ type(t2) :: a
+ type(u2) :: b
+ print *,a%t1%i
+ print *,b%u1%j ! { dg-error "is a PRIVATE component of" }
+end program
+
+! { dg-final { cleanup-modules "mo" } }
diff --git a/gcc/testsuite/gfortran.dg/extends_6.f03 b/gcc/testsuite/gfortran.dg/extends_6.f03
index 866fbbd1c50..a50a9b751b1 100644
--- a/gcc/testsuite/gfortran.dg/extends_6.f03
+++ b/gcc/testsuite/gfortran.dg/extends_6.f03
@@ -30,7 +30,7 @@ end module m
end type two
o_dt%day = 5 ! VALID but failed in first version of EXTENDS patch
- o_dt%yr = 5 ! { dg-error "All components of 'date' are PRIVATE" }
+ o_dt%yr = 5 ! { dg-error "is a PRIVATE component of" }
t = two(one = one(4), i = 5, r=4.4) ! { dg-error "has already been set" }
diff --git a/gcc/testsuite/gfortran.dg/interface_assignment_5.f90 b/gcc/testsuite/gfortran.dg/interface_assignment_5.f90
new file mode 100644
index 00000000000..8444dd0847e
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/interface_assignment_5.f90
@@ -0,0 +1,49 @@
+! { dg-do compile }
+!
+! PR 42677: [4.5 Regression] Bogus Error: Ambiguous interfaces '...' in intrinsic assignment operator
+!
+! Contributed by Harald Anlauf <anlauf@gmx.de>
+
+module mod1
+ implicit none
+ type t_m
+ integer :: i = 0
+ end type t_m
+!------------------------------------------------------------------------------
+ interface assignment (=)
+ module procedure assign_m
+ end interface
+!------------------------------------------------------------------------------
+contains
+ subroutine assign_m (y, x)
+ type(t_m) ,intent(inout) :: y
+ type(t_m) ,intent(in) :: x
+ end subroutine assign_m
+end module mod1
+!==============================================================================
+module mod2
+ use mod1, only: t_m, assignment(=)
+ implicit none
+ type t_atm
+ integer :: k
+ end type t_atm
+!------------------------------------------------------------------------------
+ interface assignment(=)
+ module procedure assign_to_atm
+ end interface
+!------------------------------------------------------------------------------
+ interface
+ pure subroutine delete_m (x)
+ use mod1
+ type(t_m) ,intent(in) :: x
+ end subroutine delete_m
+ end interface
+!------------------------------------------------------------------------------
+contains
+ subroutine assign_to_atm (atm, r)
+ type(t_atm) ,intent(inout) :: atm
+ integer ,intent(in) :: r
+ end subroutine assign_to_atm
+end module mod2
+
+! { dg-final { cleanup-modules "mod1 mod2" } }
diff --git a/gcc/testsuite/gfortran.dg/private_type_6.f90 b/gcc/testsuite/gfortran.dg/private_type_6.f90
index 5e13ed53477..4af3f704f98 100644
--- a/gcc/testsuite/gfortran.dg/private_type_6.f90
+++ b/gcc/testsuite/gfortran.dg/private_type_6.f90
@@ -18,7 +18,7 @@ program foo_test
implicit none
TYPE(footype) :: foo
TYPE(bartype) :: foo2
- foo = footype(1) ! { dg-error "All components of 'footype' are PRIVATE" }
+ foo = footype(1) ! { dg-error "is a PRIVATE component" }
foo2 = bartype(1,2) ! { dg-error "is a PRIVATE component" }
foo2%dummy2 = 5 ! { dg-error "is a PRIVATE component" }
end program foo_test
diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_comp_pass_6.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_comp_pass_6.f90
new file mode 100644
index 00000000000..8898a597d53
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/proc_ptr_comp_pass_6.f90
@@ -0,0 +1,35 @@
+! { dg-do compile }
+! { dg-options "-fcheck=bounds" }
+!
+! PR 42804: ICE with -fcheck=bounds and type bound procedure call on array element
+!
+! Contributed by Ian Harvey <ian_harvey@bigpond.com>
+
+MODULE ModA
+ IMPLICIT NONE
+ TYPE, PUBLIC :: A
+ PROCEDURE(a_proc),pointer :: Proc
+ END TYPE A
+CONTAINS
+ SUBROUTINE a_proc(this, stat)
+ CLASS(A), INTENT(INOUT) :: this
+ INTEGER, INTENT(OUT) :: stat
+ WRITE (*, *) 'a_proc'
+ stat = 0
+ END SUBROUTINE a_proc
+END MODULE ModA
+
+PROGRAM ProgA
+ USE ModA
+ IMPLICIT NONE
+ INTEGER :: ierr
+ INTEGER :: i
+ TYPE(A), ALLOCATABLE :: arr(:)
+ ALLOCATE(arr(2))
+ DO i = 1, 2
+ arr(i)%proc => a_proc
+ CALL arr(i)%Proc(ierr)
+ END DO
+END PROGRAM ProgA
+
+! { dg-final { cleanup-modules "ModA" } }
diff --git a/gcc/testsuite/gfortran.dg/structure_constructor_8.f03 b/gcc/testsuite/gfortran.dg/structure_constructor_8.f03
index 520b52853d5..b86d0ecccaf 100644
--- a/gcc/testsuite/gfortran.dg/structure_constructor_8.f03
+++ b/gcc/testsuite/gfortran.dg/structure_constructor_8.f03
@@ -51,7 +51,7 @@ PROGRAM test
struct1 = haspriv_t (b = 2, a = 1) ! { dg-error "is a PRIVATE component" }
! This should fail as all components are private
- struct2 = allpriv_t (5) ! { dg-error "of 'allpriv_t' are PRIVATE" }
+ struct2 = allpriv_t (5) ! { dg-error "is a PRIVATE component" }
! This should fail as the type itself is private, and the expression should
! be deduced as call to an undefined function.
diff --git a/gcc/testsuite/gfortran.dg/typebound_call_12.f03 b/gcc/testsuite/gfortran.dg/typebound_call_12.f03
new file mode 100644
index 00000000000..afb0fda71a4
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/typebound_call_12.f03
@@ -0,0 +1,36 @@
+! { dg-do compile }
+! { dg-options "-fcheck=bounds" }
+!
+! PR 42804: ICE with -fcheck=bounds and type bound procedure call on array element
+!
+! Contributed by Ian Harvey <ian_harvey@bigpond.com>
+
+MODULE ModA
+ IMPLICIT NONE
+ PRIVATE
+ TYPE, PUBLIC :: A
+ CONTAINS
+ PROCEDURE :: Proc => a_proc
+ END TYPE A
+CONTAINS
+ SUBROUTINE a_proc(this, stat)
+ CLASS(A), INTENT(INOUT) :: this
+ INTEGER, INTENT(OUT) :: stat
+ WRITE (*, *) 'a_proc'
+ stat = 0
+ END SUBROUTINE a_proc
+END MODULE ModA
+
+PROGRAM ProgA
+ USE ModA
+ IMPLICIT NONE
+ INTEGER :: ierr
+ INTEGER :: i
+ TYPE(A), ALLOCATABLE :: arr(:)
+ ALLOCATE(arr(2))
+ DO i = 1, 2
+ CALL arr(i)%Proc(ierr)
+ END DO
+END PROGRAM ProgA
+
+! { dg-final { cleanup-modules "ModA" } }
diff --git a/gcc/testsuite/gfortran.dg/vect/fast-math-mgrid-resid.f b/gcc/testsuite/gfortran.dg/vect/fast-math-mgrid-resid.f
new file mode 100644
index 00000000000..cf47204e04e
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/vect/fast-math-mgrid-resid.f
@@ -0,0 +1,45 @@
+! { dg-do compile { target i?86-*-* x86_64-*-* } }
+! { dg-require-effective-target vect_double }
+! { dg-options "-O3 -ffast-math -msse2 -fpredictive-commoning -ftree-vectorize -fdump-tree-optimized" }
+
+
+******* RESID COMPUTES THE RESIDUAL: R = V - AU
+*
+* THIS SIMPLE IMPLEMENTATION COSTS 27A + 4M PER RESULT, WHERE
+* A AND M DENOTE THE COSTS OF ADDITION (OR SUBTRACTION) AND
+* MULTIPLICATION, RESPECTIVELY. BY USING SEVERAL TWO-DIMENSIONAL
+* BUFFERS ONE CAN REDUCE THIS COST TO 13A + 4M IN THE GENERAL
+* CASE, OR 10A + 3M WHEN THE COEFFICIENT A(1) IS ZERO.
+*
+ SUBROUTINE RESID(U,V,R,N,A)
+ INTEGER N
+ REAL*8 U(N,N,N),V(N,N,N),R(N,N,N),A(0:3)
+ INTEGER I3, I2, I1
+C
+ DO 600 I3=2,N-1
+ DO 600 I2=2,N-1
+ DO 600 I1=2,N-1
+ 600 R(I1,I2,I3)=V(I1,I2,I3)
+ > -A(0)*( U(I1, I2, I3 ) )
+ > -A(1)*( U(I1-1,I2, I3 ) + U(I1+1,I2, I3 )
+ > + U(I1, I2-1,I3 ) + U(I1, I2+1,I3 )
+ > + U(I1, I2, I3-1) + U(I1, I2, I3+1) )
+ > -A(2)*( U(I1-1,I2-1,I3 ) + U(I1+1,I2-1,I3 )
+ > + U(I1-1,I2+1,I3 ) + U(I1+1,I2+1,I3 )
+ > + U(I1, I2-1,I3-1) + U(I1, I2+1,I3-1)
+ > + U(I1, I2-1,I3+1) + U(I1, I2+1,I3+1)
+ > + U(I1-1,I2, I3-1) + U(I1-1,I2, I3+1)
+ > + U(I1+1,I2, I3-1) + U(I1+1,I2, I3+1) )
+ > -A(3)*( U(I1-1,I2-1,I3-1) + U(I1+1,I2-1,I3-1)
+ > + U(I1-1,I2+1,I3-1) + U(I1+1,I2+1,I3-1)
+ > + U(I1-1,I2-1,I3+1) + U(I1+1,I2-1,I3+1)
+ > + U(I1-1,I2+1,I3+1) + U(I1+1,I2+1,I3+1) )
+C
+ RETURN
+ END
+! we want to check that predictive commoning did something on the
+! vectorized loop, which means we have to have exactly 13 vector
+! additions.
+! { dg-final { scan-tree-dump-times "vect_var\[^\\n\]*\\+ " 13 "optimized" } }
+! { dg-final { cleanup-tree-dump "vect" } }
+! { dg-final { cleanup-tree-dump "optimized" } }
diff --git a/gcc/testsuite/gfortran.fortran-torture/compile/pr42781.f90 b/gcc/testsuite/gfortran.fortran-torture/compile/pr42781.f90
new file mode 100644
index 00000000000..95228506345
--- /dev/null
+++ b/gcc/testsuite/gfortran.fortran-torture/compile/pr42781.f90
@@ -0,0 +1,59 @@
+! ICE with gfortran 4.5 at -O1:
+!gfcbug98.f90: In function ‘convert_cof’:
+!gfcbug98.f90:36:0: internal compiler error: in pt_solutions_same_restrict_base,
+!at tree-ssa-structalias.c:5072
+module foo
+ implicit none
+ type t_time
+ integer :: secs = 0
+ end type t_time
+contains
+ elemental function time_cyyyymmddhh (cyyyymmddhh) result (time)
+ type (t_time) :: time
+ character(len=10),intent(in) :: cyyyymmddhh
+ end function time_cyyyymmddhh
+
+ function nf90_open(path, mode, ncid)
+ character(len = *), intent(in) :: path
+ integer, intent(in) :: mode
+ integer, intent(out) :: ncid
+ integer :: nf90_open
+ end function nf90_open
+end module foo
+!==============================================================================
+module gfcbug98
+ use foo
+ implicit none
+
+ type t_fileinfo
+ character(len=10) :: atime = ' '
+ end type t_fileinfo
+
+ type t_body
+ real :: bg(10)
+ end type t_body
+contains
+ subroutine convert_cof (ifile)
+ character(len=*) ,intent(in) :: ifile
+
+ character(len=5) :: version
+ type(t_fileinfo) :: gattr
+ type(t_time) :: atime
+ type(t_body),allocatable :: tmp_dat(:)
+ real ,allocatable :: BDA(:, :, :)
+
+ call open_input
+ call convert_data
+ contains
+ subroutine open_input
+ integer :: i,j
+ version = ''
+ j = nf90_open(ifile, 1, i)
+ end subroutine open_input
+ !--------------------------------------------------------------------------
+ subroutine convert_data
+ BDA(1,:,1) = tmp_dat(1)% bg(:)
+ atime = time_cyyyymmddhh (gattr% atime)
+ end subroutine convert_data
+ end subroutine convert_cof
+end module gfcbug98